@rosthq/cli 0.7.136 → 0.7.138

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -13409,13 +13409,13 @@ var init_command_discovery = __esm({
13409
13409
  { "id": "notification.settings.update", "title": "Update notification settings", "description": "Update tenant notification preferences.", "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": { "escalations_enabled": { "type": "boolean" }, "sync_brief_enabled": { "type": "boolean" }, "default_channel": { "type": "string", "enum": ["slack", "email", "in_app"] } }, "additionalProperties": false }, "output_schema": { "type": "object", "properties": { "escalations_enabled": { "type": "boolean" }, "sync_brief_enabled": { "type": "boolean" }, "default_channel": { "type": "string", "enum": ["slack", "email", "in_app"] } }, "required": ["escalations_enabled", "sync_brief_enabled", "default_channel"], "additionalProperties": false }, "help": "Update notification preferences for escalations, Sync briefs, and the default channel.", "guide_slugs": ["notifications-guide"], "stages": ["operating_rhythm"], "related_command_ids": ["agent.go_live", "confirmation.approve", "confirmation.reject", "notification.list_errors", "notification.settings.get", "notification.test"] },
13410
13410
  { "id": "notification.test", "title": "Send test notification", "description": "Emit an in-app test notification to the acting human to verify delivery is wired.", "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": { "notification_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)$" }, "delivered": { "type": "boolean" } }, "required": ["notification_id", "delivered"], "additionalProperties": false }, "help": "Send an in-app test notification to confirm the delivery path is wired.", "guide_slugs": ["notifications-guide"], "stages": ["operating_rhythm"], "related_command_ids": ["agent.go_live", "confirmation.approve", "confirmation.reject", "notification.list_errors", "notification.settings.get", "notification.settings.update"] },
13411
13411
  { "id": "onboarding.activate", "title": "Activate onboarding agents", "description": "Stage one owner approval to activate every agent in an applied onboarding receipt and complete onboarding atomically.", "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": { "idempotency_key": { "type": "string", "minLength": 1, "maxLength": 120 }, "setup_application_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)$" }, "expected_input_digest": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" }, "expected_receipt_revision": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 }, "terminal_rehearsal_batch_receipt_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)$" }, "rehearsal_runs": { "minItems": 1, "maxItems": 100, "type": "array", "items": { "type": "object", "properties": { "agent_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)$" }, "rehearsal_run_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": ["agent_id", "rehearsal_run_id"], "additionalProperties": false } }, "configuration_digests": { "minItems": 1, "maxItems": 100, "type": "array", "items": { "type": "object", "properties": { "agent_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)$" }, "configuration_digest": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" } }, "required": ["agent_id", "configuration_digest"], "additionalProperties": false } } }, "required": ["idempotency_key", "setup_application_id", "expected_input_digest", "expected_receipt_revision", "terminal_rehearsal_batch_receipt_id", "rehearsal_runs", "configuration_digests"], "additionalProperties": false }, "output_schema": { "type": "object", "properties": { "application_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", "const": "activated" }, "receipt": { "type": "object", "properties": { "activation_receipt_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)$" }, "activation_confirmation_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)$" }, "setup_application_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)$" }, "implementation_run_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" }] }, "activation_input_digest": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" }, "setup_receipt_revision": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 }, "terminal_rehearsal_batch_receipt_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)$" }, "agents": { "minItems": 1, "maxItems": 100, "type": "array", "items": { "type": "object", "properties": { "agent_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)$" }, "status": { "type": "string", "const": "live" }, "schedule_armed": { "type": "boolean" } }, "required": ["agent_id", "seat_id", "status", "schedule_armed"], "additionalProperties": false } }, "onboarding_completed_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)))$" }, "activated_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)))$" } }, "required": ["activation_receipt_id", "activation_confirmation_id", "setup_application_id", "implementation_run_id", "activation_input_digest", "setup_receipt_revision", "terminal_rehearsal_batch_receipt_id", "agents", "onboarding_completed_at", "activated_at"], "additionalProperties": false } }, "required": ["application_id", "status", "receipt"], "additionalProperties": false }, "help": "After a terminal all-passed onboarding rehearsal, submit its exact batch receipt, per-agent run IDs, and configuration digests. One owner approval activates the entire group and completes onboarding atomically.", "guide_slugs": ["rost-implementation-method", "mcp-and-cli-guide", "agent-reference-map"], "stages": ["staffing"], "related_command_ids": ["agent.go_live", "agent.run_dry_run", "cascade.import", "charter.approve", "charter.draft", "charter.draft_all", "charter.sign_manifest", "charter.update_draft", "compass.answer_gap", "compass.approve_version", "compass.draft", "compass.get_current", "compass.list_gaps", "compass.reject_draft", "compass.set", "compass.update_draft", "confirmation.activation_set.list", "confirmation.approve", "credential.ingress", "friction.file_issue", "friction.list", "friction.resolve", "onboarding.advance_step", "onboarding.attach_reference", "onboarding.create_invite", "onboarding.finish", "onboarding.rehearse", "onboarding.setup", "onboarding.source_ingest", "onboarding.status", "onboarding.upload_context", "seat.create", "seat.set_type", "signal.bind", "signal.confirm_reading", "signal.draft_first_readings", "signal.report", "staffing.assign_agent_dry_run", "staffing.assign_user", "sync.brief.compile", "sync.brief.get", "sync.item.assign", "sync.run.complete", "sync.run.start"] },
13412
- { "id": "onboarding.advance_step", "title": "Advance onboarding step", "description": "Persist the current onboarding step after server-side validation.", "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": { "step": { "type": "string", "minLength": 1 }, "state": { "default": {}, "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "completed": { "default": false, "type": "boolean" } }, "required": ["step"], "additionalProperties": false }, "output_schema": { "type": "object", "properties": { "step": { "type": "string", "minLength": 1 }, "state": {}, "completed_at": { "anyOf": [{ "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)))$" }, { "type": "null" }] } }, "required": ["step", "state", "completed_at"], "additionalProperties": false }, "help": "Advance onboarding only after the current setup step is represented in the tenant state.", "guide_slugs": ["rost-implementation-method"], "stages": ["company_setup"], "related_command_ids": ["agent.go_live", "agent.run_dry_run", "cascade.import", "charter.approve", "charter.draft", "charter.draft_all", "charter.sign_manifest", "charter.update_draft", "compass.answer_gap", "compass.approve_version", "compass.draft", "compass.get_current", "compass.list_gaps", "compass.reject_draft", "compass.set", "compass.update_draft", "confirmation.activation_set.list", "confirmation.approve", "credential.ingress", "friction.file_issue", "friction.list", "friction.resolve", "onboarding.activate", "onboarding.attach_reference", "onboarding.create_invite", "onboarding.finish", "onboarding.rehearse", "onboarding.setup", "onboarding.source_ingest", "onboarding.status", "onboarding.upload_context", "seat.create", "seat.set_type", "signal.bind", "signal.confirm_reading", "signal.draft_first_readings", "signal.report", "staffing.assign_agent_dry_run", "staffing.assign_user", "sync.brief.compile", "sync.brief.get", "sync.item.assign", "sync.run.complete", "sync.run.start"] },
13412
+ { "id": "onboarding.advance_step", "title": "Advance onboarding step", "description": "Persist the current onboarding step after server-side validation.", "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": { "step": { "type": "string", "enum": ["setup_path", "company_basics", "how_it_works", "compass_context", "org_intake", "charters_preview", "sync_rhythm", "invite_team", "staff_agent", "finish"] }, "state": { "default": {}, "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "completed": { "default": false, "type": "boolean" } }, "required": ["step"], "additionalProperties": false }, "output_schema": { "type": "object", "properties": { "step": { "type": "string", "enum": ["setup_path", "company_basics", "how_it_works", "compass_context", "org_intake", "charters_preview", "sync_rhythm", "invite_team", "staff_agent", "finish", "complete"] }, "state": {}, "completed_at": { "anyOf": [{ "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)))$" }, { "type": "null" }] } }, "required": ["step", "state", "completed_at"], "additionalProperties": false }, "help": "Advance onboarding only after the current setup step is represented in the tenant state.", "guide_slugs": ["rost-implementation-method"], "stages": ["company_setup"], "related_command_ids": ["agent.go_live", "agent.run_dry_run", "cascade.import", "charter.approve", "charter.draft", "charter.draft_all", "charter.sign_manifest", "charter.update_draft", "compass.answer_gap", "compass.approve_version", "compass.draft", "compass.get_current", "compass.list_gaps", "compass.reject_draft", "compass.set", "compass.update_draft", "confirmation.activation_set.list", "confirmation.approve", "credential.ingress", "friction.file_issue", "friction.list", "friction.resolve", "onboarding.activate", "onboarding.attach_reference", "onboarding.create_invite", "onboarding.finish", "onboarding.rehearse", "onboarding.setup", "onboarding.source_ingest", "onboarding.status", "onboarding.upload_context", "seat.create", "seat.set_type", "signal.bind", "signal.confirm_reading", "signal.draft_first_readings", "signal.report", "staffing.assign_agent_dry_run", "staffing.assign_user", "sync.brief.compile", "sync.brief.get", "sync.item.assign", "sync.run.complete", "sync.run.start"] },
13413
13413
  { "id": "onboarding.attach_reference", "title": "Attach reference document", "description": "Attach a company reference document (text/markdown) so Compass and Charters can cite it. Reference-only \u2014 it does not build a Compass; convert each meaningful doc to markdown and attach it with a title, kind, and source.", "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": { "text": { "type": "string", "minLength": 1 }, "filename": { "default": "mcp-org-context.txt", "type": "string", "minLength": 1 }, "mime_type": { "default": "text/plain", "type": "string", "enum": ["text/plain", "text/markdown", "text/csv"] }, "title": { "type": "string", "minLength": 1, "maxLength": 200 }, "kind": { "type": "string", "enum": ["plan", "financial", "org_chart", "process"] }, "source": { "type": "string", "minLength": 1, "maxLength": 500 } }, "required": ["text"], "additionalProperties": false }, "output_schema": { "type": "object", "properties": { "document_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)$" }, "storage_ref": { "type": "string", "minLength": 1 }, "kind": { "type": "string", "enum": ["org_chart", "role_doc", "plan", "financial", "other"] }, "title": { "anyOf": [{ "type": "string", "minLength": 1 }, { "type": "null" }] } }, "required": ["document_id", "storage_ref", "kind", "title"], "additionalProperties": false }, "example": { "text": "# Company handbook\n\nWe build precision components for the aerospace supply chain.", "filename": "handbook.md", "mime_type": "text/markdown", "title": "Company handbook", "kind": "plan", "source": "handbook/overview.md" }, "help": "Convert each meaningful company doc to markdown and attach it as a reference (title, kind, source) so Compass and Charters can cite it; this attaches a reference, it does not build a Compass \u2014 author Compass directly.", "guide_slugs": ["compass-authoring-guide", "rost-implementation-method", "responsibility-graph-playbook"], "stages": ["company_setup", "graph_design"], "related_command_ids": ["agent_setup.get", "agent_setup.start", "agent_setup.update", "agent_template.list", "agent.configure_tools", "agent.create_custom", "agent.create_from_template", "agent.fleet_digest", "agent.get_run", "agent.go_live", "agent.list_fleet", "agent.list_runs", "agent.list_tool_calls", "agent.run_dry_run", "agent.status", "cascade.import", "charter.approve", "charter.draft", "charter.draft_all", "charter.sign_manifest", "charter.update_draft", "command.describe", "compass.answer_gap", "compass.approve_version", "compass.draft", "compass.get_current", "compass.list_gaps", "compass.reject_draft", "compass.set", "compass.update_draft", "confirmation.activation_set.list", "confirmation.approve", "confirmation.reject", "credential.ingress", "deliverable.accept", "deliverable.attach", "deliverable.create", "deliverable.get", "deliverable.list", "deliverable.reject", "error_log.list", "error_log.resolve", "error_log.supersede", "escalation.get", "escalation.list", "escalation.reject", "escalation.resolve", "friction.file_issue", "friction.list", "friction.resolve", "implementation_access.abandon", "implementation_access.complete", "implementation_access.status", "integration.list", "integration.readiness", "integration.status", "integration.test", "mcp_token.create", "mcp_token.list", "mcp_token.revoke", "onboarding.activate", "onboarding.advance_step", "onboarding.create_invite", "onboarding.finish", "onboarding.rehearse", "onboarding.resume", "onboarding.setup", "onboarding.source_ingest", "onboarding.status", "onboarding.upload_context", "runner.diagnose", "runner.repair", "seat.create", "seat.create_complete", "seat.set_type", "signal.bind", "signal.confirm_reading", "signal.draft_first_readings", "signal.report", "skill.assign_to_seat", "skill.assigned.list", "skill.catalog", "skill.check_dependencies", "skill.create", "skill.enable_catalog", "skill.file.get", "skill.get", "skill.import_github", "skill.import_upload", "skill.install_local", "skill.list", "skill.publish", "skill.revoke_from_seat", "skill.sync_local", "skill.update_draft", "staffing.assign", "staffing.assign_agent_dry_run", "staffing.assign_user", "sync.brief.compile", "sync.brief.get", "sync.item.assign", "sync.run.complete", "sync.run.start", "system.health", "tenant.anthropic_key.disable", "tenant.rename", "tool_grants.tenant.update", "usage.report", "usage.snapshot", "user.tenants", "user.use_tenant", "user.whoami"] },
13414
13414
  { "id": "onboarding.create_invite", "title": "Create onboarding invite", "description": "Create a pending invite for an onboarding team member.", "required_scope": "tenant", "confirmation": "none", "trusted_execution": { "mode": "always_human", "risk_flags": ["external_send"], "rationale": "Trusted mode cannot bypass this command's human confirmation or high-risk boundary." }, "expose_over_mcp": true, "input_schema": { "type": "object", "properties": { "email": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "role": { "default": "member", "type": "string", "enum": ["owner", "admin", "steward", "member"] }, "flags": { "default": {}, "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": ["email"], "additionalProperties": false }, "output_schema": { "type": "object", "properties": { "invite_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)$" }, "email": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "role": { "type": "string", "enum": ["owner", "admin", "steward", "member"] }, "token": { "type": "string", "minLength": 1 } }, "required": ["invite_id", "email", "role", "token"], "additionalProperties": false }, "help": "Invites should give humans access to the company without assigning work directly to people instead of seats.", "guide_slugs": ["settings-members-and-invites-guide"], "stages": ["company_setup"], "related_command_ids": ["agent.go_live", "agent.run_dry_run", "aicos.brain_settings.get", "aicos.brain_settings.update", "cascade.import", "charter.approve", "charter.draft", "charter.draft_all", "charter.sign_manifest", "charter.update_draft", "compass.answer_gap", "compass.approve_version", "compass.draft", "compass.get_current", "compass.list_gaps", "compass.reject_draft", "compass.set", "compass.update_draft", "confirmation.activation_set.list", "confirmation.approve", "credential.ingress", "friction.file_issue", "friction.list", "friction.resolve", "integration.list", "integration.readiness", "integration.status", "integration.test", "mcp_token.create", "mcp_token.list", "mcp_token.revoke", "member.invite", "member.remove", "member.update", "onboarding.activate", "onboarding.advance_step", "onboarding.attach_reference", "onboarding.finish", "onboarding.rehearse", "onboarding.setup", "onboarding.source_ingest", "onboarding.status", "onboarding.upload_context", "seat.create", "seat.set_type", "settings.agent_policy.get", "settings.agent_policy.update", "settings.confirmation_policy.get", "settings.confirmation_policy.update", "settings.get", "settings.member_visibility.get", "settings.member_visibility.update", "settings.product_learning.get", "settings.product_learning.update", "settings.sync_brief_scope.get", "settings.sync_brief_scope.update", "settings.update", "signal.bind", "signal.confirm_reading", "signal.draft_first_readings", "signal.report", "staffing.assign_agent_dry_run", "staffing.assign_user", "sync.brief.compile", "sync.brief.get", "sync.item.assign", "sync.run.complete", "sync.run.start", "tenant.model_gateway_policy.update", "tenant.rename"] },
13415
- { "id": "onboarding.finish", "title": "Finish onboarding", "description": "Mark onboarding complete after the existing onboarding requirements pass.", "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": {}, "additionalProperties": false }, "output_schema": { "type": "object", "properties": { "step": { "type": "string", "minLength": 1 }, "state": {}, "completed_at": { "anyOf": [{ "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)))$" }, { "type": "null" }] } }, "required": ["step", "state", "completed_at"], "additionalProperties": false }, "help": "Finish onboarding when the graph, at least one Charter, and the first operating rhythm are clear.", "guide_slugs": ["rost-implementation-method", "sync-rhythm-playbook"], "stages": ["company_setup", "operating_rhythm"], "related_command_ids": ["agent.go_live", "agent.run_dry_run", "cascade.import", "charter.approve", "charter.draft", "charter.draft_all", "charter.sign_manifest", "charter.update_draft", "coach.draft_guide", "compass.alignment", "compass.answer_gap", "compass.approve_version", "compass.draft", "compass.get_current", "compass.list_gaps", "compass.reject_draft", "compass.set", "compass.update_draft", "confirmation.activation_set.list", "confirmation.approve", "credential.ingress", "escalation.raise", "friction.assist", "friction.file_issue", "friction.get", "friction.link_task", "friction.list", "friction.resolve", "friction.update_status", "goal.bind_measurable", "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.activate", "onboarding.advance_step", "onboarding.attach_reference", "onboarding.create_invite", "onboarding.rehearse", "onboarding.setup", "onboarding.source_ingest", "onboarding.status", "onboarding.upload_context", "seat.create", "seat.set_type", "signal.bind", "signal.confirm_reading", "signal.draft_first_readings", "signal.report", "staffing.assign_agent_dry_run", "staffing.assign_user", "sync.brief.compile", "sync.brief.get", "sync.item.assign", "sync.run.complete", "sync.run.start", "task.accept", "task.complete", "task.confirm_proposal", "task.create", "task.decline", "task.decline_proposal", "task.list"] },
13415
+ { "id": "onboarding.finish", "title": "Finish onboarding", "description": "Mark onboarding complete after the existing onboarding requirements pass.", "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": {}, "additionalProperties": false }, "output_schema": { "type": "object", "properties": { "step": { "type": "string", "enum": ["setup_path", "company_basics", "how_it_works", "compass_context", "org_intake", "charters_preview", "sync_rhythm", "invite_team", "staff_agent", "finish", "complete"] }, "state": {}, "completed_at": { "anyOf": [{ "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)))$" }, { "type": "null" }] } }, "required": ["step", "state", "completed_at"], "additionalProperties": false }, "help": "Finish onboarding when the graph, at least one Charter, and the first operating rhythm are clear.", "guide_slugs": ["rost-implementation-method", "sync-rhythm-playbook"], "stages": ["company_setup", "operating_rhythm"], "related_command_ids": ["agent.go_live", "agent.run_dry_run", "cascade.import", "charter.approve", "charter.draft", "charter.draft_all", "charter.sign_manifest", "charter.update_draft", "coach.draft_guide", "compass.alignment", "compass.answer_gap", "compass.approve_version", "compass.draft", "compass.get_current", "compass.list_gaps", "compass.reject_draft", "compass.set", "compass.update_draft", "confirmation.activation_set.list", "confirmation.approve", "credential.ingress", "escalation.raise", "friction.assist", "friction.file_issue", "friction.get", "friction.link_task", "friction.list", "friction.resolve", "friction.update_status", "goal.bind_measurable", "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.activate", "onboarding.advance_step", "onboarding.attach_reference", "onboarding.create_invite", "onboarding.rehearse", "onboarding.setup", "onboarding.source_ingest", "onboarding.status", "onboarding.upload_context", "seat.create", "seat.set_type", "signal.bind", "signal.confirm_reading", "signal.draft_first_readings", "signal.report", "staffing.assign_agent_dry_run", "staffing.assign_user", "sync.brief.compile", "sync.brief.get", "sync.item.assign", "sync.run.complete", "sync.run.start", "task.accept", "task.complete", "task.confirm_proposal", "task.create", "task.decline", "task.decline_proposal", "task.list"] },
13416
13416
  { "id": "onboarding.rehearse", "title": "Rehearse onboarding agents", "description": "Run the exact setup receipt's agents through a resumable sandbox-only rehearsal batch. Returns immutable evidence and never stages activation.", "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": { "idempotency_key": { "type": "string", "minLength": 1, "maxLength": 120 }, "setup_application_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)$" }, "expected_input_digest": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" }, "expected_receipt_revision": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 } }, "required": ["idempotency_key", "setup_application_id", "expected_input_digest", "expected_receipt_revision"], "additionalProperties": false }, "output_schema": { "anyOf": [{ "type": "object", "properties": { "status": { "type": "string", "const": "in_progress" }, "batch": { "type": "object", "properties": { "batch_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)$" }, "setup_application_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)$" }, "implementation_run_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" }] }, "idempotency_key": { "type": "string", "minLength": 1, "maxLength": 120 }, "rehearsal_input_digest": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" }, "expected_input_digest": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" }, "expected_receipt_revision": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 }, "expected_agent_set_digest": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" }, "expected_agents": { "minItems": 1, "maxItems": 100, "type": "array", "items": { "type": "object", "properties": { "agent_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)$" }, "configuration_digest": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" } }, "required": ["agent_id", "seat_id", "configuration_digest"], "additionalProperties": false } }, "batch_attempt": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 }, "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)))$" } }, "required": ["batch_id", "setup_application_id", "implementation_run_id", "idempotency_key", "rehearsal_input_digest", "expected_input_digest", "expected_receipt_revision", "expected_agent_set_digest", "expected_agents", "batch_attempt", "created_at"], "additionalProperties": false }, "checkpoints": { "minItems": 1, "maxItems": 100, "type": "array", "items": { "oneOf": [{ "type": "object", "properties": { "checkpoint_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)$" }, "batch_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)$" }, "agent_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)$" }, "runtime_run_key": { "type": "string", "minLength": 1, "maxLength": 240 }, "configuration_digest": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" }, "status": { "type": "string", "const": "pending" }, "rehearsal_run_id": { "type": "null" }, "claimed_at": { "type": "null" }, "lease_expires_at": { "type": "null" }, "started_at": { "type": "null" }, "completed_at": { "type": "null" } }, "required": ["checkpoint_id", "batch_id", "agent_id", "seat_id", "runtime_run_key", "configuration_digest", "status", "rehearsal_run_id", "claimed_at", "lease_expires_at", "started_at", "completed_at"], "additionalProperties": false }, { "type": "object", "properties": { "checkpoint_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)$" }, "batch_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)$" }, "agent_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)$" }, "runtime_run_key": { "type": "string", "minLength": 1, "maxLength": 240 }, "configuration_digest": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" }, "status": { "type": "string", "const": "running" }, "rehearsal_run_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" }] }, "claimed_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)))$" }, "lease_expires_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)))$" }, "started_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)))$" }, "completed_at": { "type": "null" } }, "required": ["checkpoint_id", "batch_id", "agent_id", "seat_id", "runtime_run_key", "configuration_digest", "status", "rehearsal_run_id", "claimed_at", "lease_expires_at", "started_at", "completed_at"], "additionalProperties": false }, { "type": "object", "properties": { "checkpoint_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)$" }, "batch_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)$" }, "agent_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)$" }, "runtime_run_key": { "type": "string", "minLength": 1, "maxLength": 240 }, "configuration_digest": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" }, "status": { "type": "string", "enum": ["passed", "failed"] }, "rehearsal_run_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)$" }, "claimed_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)))$" }, "lease_expires_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)))$" }, "started_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)))$" }, "completed_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)))$" } }, "required": ["checkpoint_id", "batch_id", "agent_id", "seat_id", "runtime_run_key", "configuration_digest", "status", "rehearsal_run_id", "claimed_at", "lease_expires_at", "started_at", "completed_at"], "additionalProperties": false }] } }, "next_action": { "type": "string", "const": "retry" } }, "required": ["status", "batch", "checkpoints", "next_action"], "additionalProperties": false }, { "type": "object", "properties": { "status": { "type": "string", "enum": ["passed", "failed"] }, "batch_receipt": { "type": "object", "properties": { "receipt_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)$" }, "batch_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)$" }, "setup_application_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)$" }, "implementation_run_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" }] }, "expected_input_digest": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" }, "expected_receipt_revision": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 }, "rehearsal_input_digest": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" }, "expected_agent_set_digest": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" }, "status": { "type": "string", "enum": ["passed", "failed"] }, "agent_count": { "type": "integer", "exclusiveMinimum": 0, "maximum": 100 }, "started_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)))$" }, "completed_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)))$" } }, "required": ["receipt_id", "batch_id", "setup_application_id", "implementation_run_id", "expected_input_digest", "expected_receipt_revision", "rehearsal_input_digest", "expected_agent_set_digest", "status", "agent_count", "started_at", "completed_at"], "additionalProperties": false }, "agent_receipts": { "minItems": 1, "maxItems": 100, "type": "array", "items": { "type": "object", "properties": { "receipt_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)$" }, "batch_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)$" }, "setup_application_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)$" }, "implementation_run_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" }] }, "agent_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)$" }, "rehearsal_run_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)$" }, "caller_idempotency_key": { "type": "string", "minLength": 1, "maxLength": 120 }, "rehearsal_input_digest": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" }, "expected_input_digest": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" }, "expected_receipt_revision": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 }, "configuration_digest": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" }, "status": { "type": "string", "enum": ["passed", "failed"] }, "evidence": { "type": "object", "properties": { "tool_previews": { "maxItems": 100, "type": "array", "items": { "type": "object", "properties": { "tool_name": { "type": "string", "minLength": 1, "maxLength": 160 }, "operation": { "type": "string", "minLength": 1, "maxLength": 160 }, "summary": { "type": "string", "minLength": 1, "maxLength": 1e3 } }, "required": ["tool_name", "operation", "summary"], "additionalProperties": false } }, "manifest_holds": { "maxItems": 100, "type": "array", "items": { "type": "object", "properties": { "code": { "type": "string", "minLength": 1, "maxLength": 120 }, "summary": { "type": "string", "minLength": 1, "maxLength": 1e3 } }, "required": ["code", "summary"], "additionalProperties": false } }, "errors": { "maxItems": 100, "type": "array", "items": { "type": "object", "properties": { "code": { "type": "string", "minLength": 1, "maxLength": 120 }, "message": { "type": "string", "minLength": 1, "maxLength": 1e3 }, "retryable": { "type": "boolean" } }, "required": ["code", "message", "retryable"], "additionalProperties": false } } }, "required": ["tool_previews", "manifest_holds", "errors"], "additionalProperties": false }, "started_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)))$" }, "completed_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)))$" } }, "required": ["receipt_id", "batch_id", "setup_application_id", "implementation_run_id", "agent_id", "seat_id", "rehearsal_run_id", "caller_idempotency_key", "rehearsal_input_digest", "expected_input_digest", "expected_receipt_revision", "configuration_digest", "status", "evidence", "started_at", "completed_at"], "additionalProperties": false } }, "next_action": { "type": "string", "enum": ["activate", "fix_and_retry"] } }, "required": ["status", "batch_receipt", "agent_receipts", "next_action"], "additionalProperties": false }] }, "help": "Run the exact setup receipt's agents through the sandbox-only rehearsal batch. It returns immutable terminal evidence and never stages activation, arms schedules, accesses credentials, or sends externally.", "guide_slugs": ["rost-implementation-method", "mcp-and-cli-guide", "agent-reference-map"], "stages": ["staffing"], "related_command_ids": ["agent_setup.get", "agent_setup.start", "agent_setup.update", "agent_template.list", "agent.configure_tools", "agent.create_custom", "agent.create_from_template", "agent.fleet_digest", "agent.get_run", "agent.go_live", "agent.list_fleet", "agent.list_runs", "agent.list_tool_calls", "agent.run_dry_run", "agent.status", "cascade.import", "charter.approve", "charter.draft", "charter.draft_all", "charter.sign_manifest", "charter.update_draft", "compass.answer_gap", "compass.approve_version", "compass.draft", "compass.get_current", "compass.list_gaps", "compass.reject_draft", "compass.set", "compass.update_draft", "confirmation.activation_set.list", "confirmation.approve", "confirmation.reject", "credential.ingress", "deliverable.accept", "deliverable.attach", "deliverable.create", "deliverable.get", "deliverable.list", "deliverable.reject", "error_log.list", "error_log.resolve", "error_log.supersede", "escalation.get", "escalation.list", "escalation.reject", "escalation.resolve", "friction.file_issue", "friction.list", "friction.resolve", "implementation_access.abandon", "implementation_access.complete", "implementation_access.status", "integration.list", "integration.readiness", "integration.status", "integration.test", "mcp_token.create", "mcp_token.list", "mcp_token.revoke", "onboarding.activate", "onboarding.advance_step", "onboarding.attach_reference", "onboarding.create_invite", "onboarding.finish", "onboarding.resume", "onboarding.setup", "onboarding.source_ingest", "onboarding.status", "onboarding.upload_context", "runner.diagnose", "runner.repair", "seat.create", "seat.create_complete", "seat.set_type", "signal.bind", "signal.confirm_reading", "signal.draft_first_readings", "signal.report", "skill.assign_to_seat", "skill.assigned.list", "skill.catalog", "skill.check_dependencies", "skill.create", "skill.enable_catalog", "skill.file.get", "skill.get", "skill.import_github", "skill.import_upload", "skill.install_local", "skill.list", "skill.publish", "skill.revoke_from_seat", "skill.sync_local", "skill.update_draft", "staffing.assign", "staffing.assign_agent_dry_run", "staffing.assign_user", "sync.brief.compile", "sync.brief.get", "sync.item.assign", "sync.run.complete", "sync.run.start", "system.health", "tenant.anthropic_key.disable", "tenant.rename", "tool_grants.tenant.update", "usage.report", "usage.snapshot", "user.tenants", "user.use_tenant", "user.whoami"] },
13417
13417
  { "id": "onboarding.resume", "title": "Onboard resume", "description": "Return the onboarding resume state: path choice, pending setup, and the next step.", "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": { "path_choice": { "anyOf": [{ "type": "string", "enum": ["guided", "agent_led"] }, { "type": "null" }] }, "setup_pending": { "type": "boolean" }, "resume_kind": { "type": "string", "enum": ["guided", "agent_led", "complete"] }, "web_url": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "next_command": { "anyOf": [{ "type": "string" }, { "type": "null" }] } }, "required": ["path_choice", "setup_pending", "resume_kind", "web_url", "next_command"] }, "help": "Resume an in-progress onboarding session from the implementation bootstrap principal; reports path choice, pending setup, and the next step.", "guide_slugs": ["rost-implementation-method", "agent-reference-map"], "stages": ["company_setup"], "related_command_ids": ["agent_setup.get", "agent_setup.start", "agent_setup.update", "agent_template.list", "agent.configure_tools", "agent.create_custom", "agent.create_from_template", "agent.fleet_digest", "agent.get_run", "agent.go_live", "agent.list_fleet", "agent.list_runs", "agent.list_tool_calls", "agent.run_dry_run", "agent.status", "charter.approve", "charter.draft", "compass.set", "confirmation.approve", "confirmation.reject", "deliverable.accept", "deliverable.attach", "deliverable.create", "deliverable.get", "deliverable.list", "deliverable.reject", "error_log.list", "error_log.resolve", "error_log.supersede", "escalation.get", "escalation.list", "escalation.reject", "escalation.resolve", "implementation_access.abandon", "implementation_access.complete", "implementation_access.status", "integration.list", "integration.readiness", "integration.status", "integration.test", "mcp_token.create", "mcp_token.list", "mcp_token.revoke", "onboarding.attach_reference", "onboarding.rehearse", "onboarding.status", "onboarding.upload_context", "runner.diagnose", "runner.repair", "seat.create", "seat.create_complete", "skill.assign_to_seat", "skill.assigned.list", "skill.catalog", "skill.check_dependencies", "skill.create", "skill.enable_catalog", "skill.file.get", "skill.get", "skill.import_github", "skill.import_upload", "skill.install_local", "skill.list", "skill.publish", "skill.revoke_from_seat", "skill.sync_local", "skill.update_draft", "staffing.assign", "system.health", "tenant.anthropic_key.disable", "tenant.rename", "tool_grants.tenant.update", "usage.report", "usage.snapshot", "user.tenants", "user.use_tenant", "user.whoami"] },
13418
- { "id": "onboarding.select_path", "title": "Select onboarding path", "description": "Record whether this company continues guided onboarding or hands setup to an agent (agent-led). Human-only (web UI or CLI), not an MCP tool. Never marks onboarding complete or grants any authority.", "required_scope": "tenant_admin", "confirmation": "none", "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": false, "input_schema": { "type": "object", "properties": { "path": { "type": "string", "enum": ["guided", "agent_led"] } }, "required": ["path"], "additionalProperties": false }, "output_schema": { "type": "object", "properties": { "step": { "type": "string", "minLength": 1 }, "state": {}, "completed_at": { "anyOf": [{ "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)))$" }, { "type": "null" }] } }, "required": ["step", "state", "completed_at"], "additionalProperties": false }, "help": "Records whether the owner continues guided onboarding or hands setup to an agent (agent-led). Owner-only; it never marks onboarding complete or grants authority.", "guide_slugs": ["mcp-and-cli-guide", "agent-reference-map"], "stages": ["company_setup"], "related_command_ids": [] },
13418
+ { "id": "onboarding.select_path", "title": "Select onboarding path", "description": "Record whether this company continues guided onboarding or hands setup to an agent (agent-led). Human-only (web UI or CLI), not an MCP tool. Never marks onboarding complete or grants any authority.", "required_scope": "tenant_admin", "confirmation": "none", "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": false, "input_schema": { "type": "object", "properties": { "path": { "type": "string", "enum": ["guided", "agent_led"] } }, "required": ["path"], "additionalProperties": false }, "output_schema": { "type": "object", "properties": { "step": { "type": "string", "enum": ["setup_path", "company_basics", "how_it_works", "compass_context", "org_intake", "charters_preview", "sync_rhythm", "invite_team", "staff_agent", "finish", "complete"] }, "state": {}, "completed_at": { "anyOf": [{ "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)))$" }, { "type": "null" }] } }, "required": ["step", "state", "completed_at"], "additionalProperties": false }, "help": "Records whether the owner continues guided onboarding or hands setup to an agent (agent-led). Owner-only; it never marks onboarding complete or grants authority.", "guide_slugs": ["mcp-and-cli-guide", "agent-reference-map"], "stages": ["company_setup"], "related_command_ids": [] },
13419
13419
  { "id": "onboarding.setup", "title": "Apply onboarding setup", "description": "Stage one owner approval for a complete declarative onboarding setup. Approval applies the plan atomically without invites, credentials, external messages, or go-live.", "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": { "schema_version": { "type": "number", "const": 1 }, "idempotency_key": { "type": "string", "minLength": 1, "maxLength": 120 }, "company_name": { "type": "string", "minLength": 2, "maxLength": 120 }, "sources": { "maxItems": 100, "type": "array", "items": { "type": "object", "properties": { "source_key": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,79}$" }, "source_upload_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": ["org_chart", "signal_export", "goal_export", "friction_export", "meeting_export", "other"] }, "sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" }, "row_ref": { "type": "string" } }, "required": ["source_key", "source_upload_id", "title", "kind", "sha256"], "additionalProperties": false } }, "reconciliation": { "maxItems": 1e3, "type": "array", "items": { "type": "object", "properties": { "source_key": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,79}$" }, "source_sha256": { "type": "string", "pattern": "^[0-9a-f]{64}$" }, "family": { "type": "string", "enum": ["source", "seat", "planned_person", "goal", "signal", "reading", "friction", "task", "schedule", "agent"] }, "input_count": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 }, "normalized_identity_digest": { "type": "string", "pattern": "^[0-9a-f]{64}$" }, "applied_count": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, "skipped": { "maxItems": 5e3, "type": "array", "items": { "anyOf": [{ "type": "object", "properties": { "logical_key": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,79}$" }, "reason": { "type": "string", "enum": ["context_only", "invalid", "duplicate", "unsupported"] } }, "required": ["logical_key", "reason"], "additionalProperties": false }, { "type": "object", "properties": { "row_ref": { "type": "string", "minLength": 1, "maxLength": 160 }, "reason": { "type": "string", "enum": ["context_only", "invalid", "duplicate", "unsupported"] } }, "required": ["row_ref", "reason"], "additionalProperties": false }] } } }, "required": ["source_key", "source_sha256", "family", "input_count", "normalized_identity_digest", "applied_count", "skipped"], "additionalProperties": false } }, "compass": { "oneOf": [{ "type": "object", "properties": { "schema_version": { "type": "number", "const": 1 }, "purpose": { "type": "object", "properties": { "value": { "type": "string", "minLength": 1 }, "citations": { "type": "array", "items": { "type": "object", "properties": { "source_id": { "type": "string", "minLength": 1 }, "document_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)$" }, "label": { "type": "string", "minLength": 1 }, "locator": { "type": "string", "minLength": 1 }, "quote": { "type": "string", "minLength": 1 }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 } }, "required": ["source_id", "label", "locator", "confidence"], "additionalProperties": false } }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 }, "placeholder": { "default": false, "type": "boolean" } }, "required": ["value", "citations", "confidence"], "additionalProperties": false }, "principles": { "minItems": 1, "maxItems": 5, "type": "array", "items": { "type": "object", "properties": { "value": { "type": "string", "minLength": 1 }, "citations": { "type": "array", "items": { "type": "object", "properties": { "source_id": { "type": "string", "minLength": 1 }, "document_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)$" }, "label": { "type": "string", "minLength": 1 }, "locator": { "type": "string", "minLength": 1 }, "quote": { "type": "string", "minLength": 1 }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 } }, "required": ["source_id", "label", "locator", "confidence"], "additionalProperties": false } }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 }, "placeholder": { "default": false, "type": "boolean" } }, "required": ["value", "citations", "confidence"], "additionalProperties": false } }, "cycle_objectives": { "minItems": 1, "maxItems": 3, "type": "array", "items": { "type": "object", "properties": { "title": { "type": "object", "properties": { "value": { "type": "string", "minLength": 1 }, "citations": { "type": "array", "items": { "type": "object", "properties": { "source_id": { "type": "string", "minLength": 1 }, "document_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)$" }, "label": { "type": "string", "minLength": 1 }, "locator": { "type": "string", "minLength": 1 }, "quote": { "type": "string", "minLength": 1 }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 } }, "required": ["source_id", "label", "locator", "confidence"], "additionalProperties": false } }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 }, "placeholder": { "default": false, "type": "boolean" } }, "required": ["value", "citations", "confidence"], "additionalProperties": false }, "definition_of_done": { "type": "object", "properties": { "value": { "type": "string", "minLength": 1 }, "citations": { "type": "array", "items": { "type": "object", "properties": { "source_id": { "type": "string", "minLength": 1 }, "document_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)$" }, "label": { "type": "string", "minLength": 1 }, "locator": { "type": "string", "minLength": 1 }, "quote": { "type": "string", "minLength": 1 }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 } }, "required": ["source_id", "label", "locator", "confidence"], "additionalProperties": false } }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 }, "placeholder": { "default": false, "type": "boolean" } }, "required": ["value", "citations", "confidence"], "additionalProperties": false }, "horizon": { "type": "string", "enum": ["ten_year", "three_year", "one_year", "cycle"] } }, "required": ["title", "definition_of_done", "horizon"], "additionalProperties": false } }, "gaps": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "minLength": 1 }, "field": { "type": "string", "minLength": 1 }, "question": { "type": "string", "minLength": 1 }, "severity": { "type": "string", "enum": ["required", "recommended"] }, "reason": { "type": "string", "minLength": 1 } }, "required": ["id", "field", "question", "severity", "reason"], "additionalProperties": false } }, "follow_up_tasks": { "type": "array", "items": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "description": { "type": "string", "minLength": 1 }, "acceptance_criteria": { "minItems": 1, "type": "array", "items": { "type": "string", "minLength": 1 } }, "gap_id": { "type": "string", "minLength": 1 } }, "required": ["title", "description", "acceptance_criteria", "gap_id"], "additionalProperties": false } }, "source_ids": { "type": "array", "items": { "type": "string", "minLength": 1 } }, "horizon_goals": { "type": "object", "properties": { "three_year": { "type": "object", "properties": { "title": { "type": "object", "properties": { "value": { "type": "string", "minLength": 1 }, "citations": { "type": "array", "items": { "type": "object", "properties": { "source_id": { "type": "string", "minLength": 1 }, "document_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)$" }, "label": { "type": "string", "minLength": 1 }, "locator": { "type": "string", "minLength": 1 }, "quote": { "type": "string", "minLength": 1 }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 } }, "required": ["source_id", "label", "locator", "confidence"], "additionalProperties": false } }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 }, "placeholder": { "default": false, "type": "boolean" } }, "required": ["value", "citations", "confidence"], "additionalProperties": false }, "definition_of_done": { "type": "object", "properties": { "value": { "type": "string", "minLength": 1 }, "citations": { "type": "array", "items": { "type": "object", "properties": { "source_id": { "type": "string", "minLength": 1 }, "document_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)$" }, "label": { "type": "string", "minLength": 1 }, "locator": { "type": "string", "minLength": 1 }, "quote": { "type": "string", "minLength": 1 }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 } }, "required": ["source_id", "label", "locator", "confidence"], "additionalProperties": false } }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 }, "placeholder": { "default": false, "type": "boolean" } }, "required": ["value", "citations", "confidence"], "additionalProperties": false }, "horizon": { "type": "string", "enum": ["ten_year", "three_year", "one_year", "cycle"] } }, "required": ["title", "definition_of_done", "horizon"], "additionalProperties": false }, "one_year": { "type": "object", "properties": { "title": { "type": "object", "properties": { "value": { "type": "string", "minLength": 1 }, "citations": { "type": "array", "items": { "type": "object", "properties": { "source_id": { "type": "string", "minLength": 1 }, "document_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)$" }, "label": { "type": "string", "minLength": 1 }, "locator": { "type": "string", "minLength": 1 }, "quote": { "type": "string", "minLength": 1 }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 } }, "required": ["source_id", "label", "locator", "confidence"], "additionalProperties": false } }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 }, "placeholder": { "default": false, "type": "boolean" } }, "required": ["value", "citations", "confidence"], "additionalProperties": false }, "definition_of_done": { "type": "object", "properties": { "value": { "type": "string", "minLength": 1 }, "citations": { "type": "array", "items": { "type": "object", "properties": { "source_id": { "type": "string", "minLength": 1 }, "document_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)$" }, "label": { "type": "string", "minLength": 1 }, "locator": { "type": "string", "minLength": 1 }, "quote": { "type": "string", "minLength": 1 }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 } }, "required": ["source_id", "label", "locator", "confidence"], "additionalProperties": false } }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 }, "placeholder": { "default": false, "type": "boolean" } }, "required": ["value", "citations", "confidence"], "additionalProperties": false }, "horizon": { "type": "string", "enum": ["ten_year", "three_year", "one_year", "cycle"] } }, "required": ["title", "definition_of_done", "horizon"], "additionalProperties": false } }, "required": ["three_year", "one_year"], "additionalProperties": false } }, "required": ["schema_version", "purpose", "principles", "cycle_objectives", "gaps", "follow_up_tasks", "source_ids", "horizon_goals"], "additionalProperties": false }, { "type": "object", "properties": { "schema_version": { "type": "number", "const": 2 }, "purpose": { "type": "object", "properties": { "value": { "type": "string", "minLength": 1 }, "citations": { "type": "array", "items": { "type": "object", "properties": { "source_id": { "type": "string", "minLength": 1 }, "document_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)$" }, "label": { "type": "string", "minLength": 1 }, "locator": { "type": "string", "minLength": 1 }, "quote": { "type": "string", "minLength": 1 }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 } }, "required": ["source_id", "label", "locator", "confidence"], "additionalProperties": false } }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 }, "placeholder": { "default": false, "type": "boolean" } }, "required": ["value", "citations", "confidence"], "additionalProperties": false }, "principles": { "minItems": 1, "maxItems": 5, "type": "array", "items": { "type": "object", "properties": { "value": { "type": "string", "minLength": 1 }, "citations": { "type": "array", "items": { "type": "object", "properties": { "source_id": { "type": "string", "minLength": 1 }, "document_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)$" }, "label": { "type": "string", "minLength": 1 }, "locator": { "type": "string", "minLength": 1 }, "quote": { "type": "string", "minLength": 1 }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 } }, "required": ["source_id", "label", "locator", "confidence"], "additionalProperties": false } }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 }, "placeholder": { "default": false, "type": "boolean" } }, "required": ["value", "citations", "confidence"], "additionalProperties": false } }, "cycle_objectives": { "minItems": 1, "maxItems": 3, "type": "array", "items": { "type": "object", "properties": { "title": { "type": "object", "properties": { "value": { "type": "string", "minLength": 1 }, "citations": { "type": "array", "items": { "type": "object", "properties": { "source_id": { "type": "string", "minLength": 1 }, "document_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)$" }, "label": { "type": "string", "minLength": 1 }, "locator": { "type": "string", "minLength": 1 }, "quote": { "type": "string", "minLength": 1 }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 } }, "required": ["source_id", "label", "locator", "confidence"], "additionalProperties": false } }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 }, "placeholder": { "default": false, "type": "boolean" } }, "required": ["value", "citations", "confidence"], "additionalProperties": false }, "definition_of_done": { "type": "object", "properties": { "value": { "type": "string", "minLength": 1 }, "citations": { "type": "array", "items": { "type": "object", "properties": { "source_id": { "type": "string", "minLength": 1 }, "document_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)$" }, "label": { "type": "string", "minLength": 1 }, "locator": { "type": "string", "minLength": 1 }, "quote": { "type": "string", "minLength": 1 }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 } }, "required": ["source_id", "label", "locator", "confidence"], "additionalProperties": false } }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 }, "placeholder": { "default": false, "type": "boolean" } }, "required": ["value", "citations", "confidence"], "additionalProperties": false }, "horizon": { "type": "string", "enum": ["ten_year", "three_year", "one_year", "cycle"] } }, "required": ["title", "definition_of_done", "horizon"], "additionalProperties": false } }, "gaps": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "minLength": 1 }, "field": { "type": "string", "minLength": 1 }, "question": { "type": "string", "minLength": 1 }, "severity": { "type": "string", "enum": ["required", "recommended"] }, "reason": { "type": "string", "minLength": 1 } }, "required": ["id", "field", "question", "severity", "reason"], "additionalProperties": false } }, "follow_up_tasks": { "type": "array", "items": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "description": { "type": "string", "minLength": 1 }, "acceptance_criteria": { "minItems": 1, "type": "array", "items": { "type": "string", "minLength": 1 } }, "gap_id": { "type": "string", "minLength": 1 } }, "required": ["title", "description", "acceptance_criteria", "gap_id"], "additionalProperties": false } }, "source_ids": { "type": "array", "items": { "type": "string", "minLength": 1 } }, "horizon_goals": { "type": "object", "properties": { "ten_year": { "type": "object", "properties": { "title": { "type": "object", "properties": { "value": { "type": "string", "minLength": 1 }, "citations": { "type": "array", "items": { "type": "object", "properties": { "source_id": { "type": "string", "minLength": 1 }, "document_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)$" }, "label": { "type": "string", "minLength": 1 }, "locator": { "type": "string", "minLength": 1 }, "quote": { "type": "string", "minLength": 1 }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 } }, "required": ["source_id", "label", "locator", "confidence"], "additionalProperties": false } }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 }, "placeholder": { "default": false, "type": "boolean" } }, "required": ["value", "citations", "confidence"], "additionalProperties": false }, "definition_of_done": { "type": "object", "properties": { "value": { "type": "string", "minLength": 1 }, "citations": { "type": "array", "items": { "type": "object", "properties": { "source_id": { "type": "string", "minLength": 1 }, "document_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)$" }, "label": { "type": "string", "minLength": 1 }, "locator": { "type": "string", "minLength": 1 }, "quote": { "type": "string", "minLength": 1 }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 } }, "required": ["source_id", "label", "locator", "confidence"], "additionalProperties": false } }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 }, "placeholder": { "default": false, "type": "boolean" } }, "required": ["value", "citations", "confidence"], "additionalProperties": false }, "horizon": { "type": "string", "enum": ["ten_year", "three_year", "one_year", "cycle"] } }, "required": ["title", "definition_of_done", "horizon"], "additionalProperties": false }, "three_year": { "type": "object", "properties": { "title": { "type": "object", "properties": { "value": { "type": "string", "minLength": 1 }, "citations": { "type": "array", "items": { "type": "object", "properties": { "source_id": { "type": "string", "minLength": 1 }, "document_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)$" }, "label": { "type": "string", "minLength": 1 }, "locator": { "type": "string", "minLength": 1 }, "quote": { "type": "string", "minLength": 1 }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 } }, "required": ["source_id", "label", "locator", "confidence"], "additionalProperties": false } }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 }, "placeholder": { "default": false, "type": "boolean" } }, "required": ["value", "citations", "confidence"], "additionalProperties": false }, "definition_of_done": { "type": "object", "properties": { "value": { "type": "string", "minLength": 1 }, "citations": { "type": "array", "items": { "type": "object", "properties": { "source_id": { "type": "string", "minLength": 1 }, "document_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)$" }, "label": { "type": "string", "minLength": 1 }, "locator": { "type": "string", "minLength": 1 }, "quote": { "type": "string", "minLength": 1 }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 } }, "required": ["source_id", "label", "locator", "confidence"], "additionalProperties": false } }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 }, "placeholder": { "default": false, "type": "boolean" } }, "required": ["value", "citations", "confidence"], "additionalProperties": false }, "horizon": { "type": "string", "enum": ["ten_year", "three_year", "one_year", "cycle"] } }, "required": ["title", "definition_of_done", "horizon"], "additionalProperties": false }, "one_year": { "type": "object", "properties": { "title": { "type": "object", "properties": { "value": { "type": "string", "minLength": 1 }, "citations": { "type": "array", "items": { "type": "object", "properties": { "source_id": { "type": "string", "minLength": 1 }, "document_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)$" }, "label": { "type": "string", "minLength": 1 }, "locator": { "type": "string", "minLength": 1 }, "quote": { "type": "string", "minLength": 1 }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 } }, "required": ["source_id", "label", "locator", "confidence"], "additionalProperties": false } }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 }, "placeholder": { "default": false, "type": "boolean" } }, "required": ["value", "citations", "confidence"], "additionalProperties": false }, "definition_of_done": { "type": "object", "properties": { "value": { "type": "string", "minLength": 1 }, "citations": { "type": "array", "items": { "type": "object", "properties": { "source_id": { "type": "string", "minLength": 1 }, "document_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)$" }, "label": { "type": "string", "minLength": 1 }, "locator": { "type": "string", "minLength": 1 }, "quote": { "type": "string", "minLength": 1 }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 } }, "required": ["source_id", "label", "locator", "confidence"], "additionalProperties": false } }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 }, "placeholder": { "default": false, "type": "boolean" } }, "required": ["value", "citations", "confidence"], "additionalProperties": false }, "horizon": { "type": "string", "enum": ["ten_year", "three_year", "one_year", "cycle"] } }, "required": ["title", "definition_of_done", "horizon"], "additionalProperties": false } }, "required": ["three_year", "one_year"], "additionalProperties": false } }, "required": ["schema_version", "purpose", "principles", "cycle_objectives", "gaps", "follow_up_tasks", "source_ids", "horizon_goals"], "additionalProperties": false }] }, "cycle": { "type": "object", "properties": { "key": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,79}$" }, "name": { "type": "string", "minLength": 1, "maxLength": 160 }, "starts_on": { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" }, "ends_on": { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" }, "status": { "type": "string", "const": "active" } }, "required": ["key", "name", "starts_on", "ends_on", "status"], "additionalProperties": false }, "seats": { "minItems": 1, "maxItems": 100, "type": "array", "items": { "type": "object", "properties": { "seat_key": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,79}$" }, "name": { "type": "string" }, "seat_type": { "type": "string", "enum": ["human", "agent", "hybrid"] }, "parent": { "oneOf": [{ "type": "object", "properties": { "kind": { "type": "string", "const": "existing" }, "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": ["kind", "seat_id"], "additionalProperties": false }, { "type": "object", "properties": { "kind": { "type": "string", "const": "logical" }, "seat_key": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,79}$" } }, "required": ["kind", "seat_key"], "additionalProperties": false }] }, "purpose": { "type": "string", "minLength": 1, "maxLength": 2e3 }, "charter": { "type": "object", "properties": { "payload_version": { "type": "number", "const": 1 }, "purpose": { "type": "string", "minLength": 1 }, "accountabilities": { "minItems": 1, "type": "array", "items": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "description": { "type": "string", "minLength": 1 } }, "required": ["title", "description"], "additionalProperties": false } }, "decision_authority": { "type": "object", "properties": { "autonomous": { "type": "array", "items": { "type": "object", "properties": { "action": { "type": "string", "minLength": 1 }, "condition": { "type": "string", "minLength": 1 }, "rationale": { "type": "string", "minLength": 1 }, "unanswered_boundary": { "default": false, "type": "boolean" } }, "required": ["action", "condition", "rationale"], "additionalProperties": false } }, "approval": { "type": "array", "items": { "type": "object", "properties": { "action": { "type": "string", "minLength": 1 }, "condition": { "type": "string", "minLength": 1 }, "rationale": { "type": "string", "minLength": 1 }, "unanswered_boundary": { "default": false, "type": "boolean" } }, "required": ["action", "condition", "rationale"], "additionalProperties": false } }, "escalate": { "minItems": 1, "type": "array", "items": { "type": "object", "properties": { "action": { "type": "string", "minLength": 1 }, "condition": { "type": "string", "minLength": 1 }, "rationale": { "type": "string", "minLength": 1 }, "unanswered_boundary": { "default": false, "type": "boolean" } }, "required": ["action", "condition", "rationale"], "additionalProperties": false } } }, "required": ["autonomous", "approval", "escalate"], "additionalProperties": false }, "escalation_rules": { "minItems": 1, "type": "array", "items": { "type": "string", "minLength": 1 } }, "measurables": { "minItems": 1, "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1 }, "target": { "type": "string", "minLength": 1 }, "cadence": { "type": "string", "enum": ["daily", "weekly", "monthly", "quarterly"] }, "source": { "type": "string", "enum": ["human", "agent", "integration"] }, "signal": { "type": "object", "properties": { "unit": { "type": "string", "minLength": 1 }, "direction": { "type": "string", "enum": ["up_good", "down_good"] }, "target": { "type": "number" } }, "required": ["unit", "direction", "target"], "additionalProperties": false } }, "required": ["name", "target", "cadence", "source"], "additionalProperties": false } }, "permission_manifest": { "type": "array", "items": { "type": "object", "properties": { "tool": { "type": "string", "minLength": 1 }, "capability_id": { "type": "string", "minLength": 1 }, "integration_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)$" }, "scope": { "type": "string", "minLength": 1 }, "granted": { "type": "boolean" }, "rationale": { "type": "string", "minLength": 1 }, "scope_tier": { "type": "string", "enum": ["read", "draft", "write_with_approval", "full"] }, "access_policy": { "type": "string", "enum": ["always_allow", "always_ask"] }, "args": { "type": "object", "properties": { "equals": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "$ref": "#/definitions/__schema0" } } }, "additionalProperties": false } }, "required": ["tool", "scope", "granted", "rationale"], "additionalProperties": false } }, "budget": { "type": "object", "properties": { "monthly_usd": { "anyOf": [{ "type": "number", "minimum": 0 }, { "type": "null" }] }, "approval_required_over_usd": { "anyOf": [{ "type": "number", "minimum": 0 }, { "type": "null" }] }, "notes": { "type": "string", "minLength": 1 } }, "required": ["monthly_usd", "approval_required_over_usd", "notes"], "additionalProperties": false }, "unanswered_boundaries": { "type": "array", "items": { "type": "string", "minLength": 1 } }, "seat_type_recommendation": { "type": "object", "properties": { "recommendation": { "type": "string", "enum": ["human", "agent", "hybrid"] }, "rationale": { "type": "string", "minLength": 1 }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 } }, "required": ["recommendation", "rationale", "confidence"], "additionalProperties": false } }, "required": ["payload_version", "purpose", "accountabilities", "decision_authority", "escalation_rules", "measurables", "permission_manifest", "budget"], "additionalProperties": false }, "human_staffing": { "oneOf": [{ "type": "object", "properties": { "kind": { "type": "string", "const": "owner" } }, "required": ["kind"], "additionalProperties": false }, { "type": "object", "properties": { "kind": { "type": "string", "const": "planned" }, "display_name": { "type": "string" }, "source_ref": { "type": "object", "properties": { "source_key": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,79}$" } }, "required": ["source_key"], "additionalProperties": false } }, "required": ["kind", "display_name"], "additionalProperties": false }, { "type": "object", "properties": { "kind": { "type": "string", "const": "vacant" } }, "required": ["kind"], "additionalProperties": false }] }, "agent": { "type": "object", "properties": { "display_name": { "type": "string" }, "steward": { "oneOf": [{ "type": "object", "properties": { "kind": { "type": "string", "const": "existing" }, "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": ["kind", "seat_id"], "additionalProperties": false }, { "type": "object", "properties": { "kind": { "type": "string", "const": "logical" }, "seat_key": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,79}$" } }, "required": ["kind", "seat_key"], "additionalProperties": false }] }, "lane": { "type": "string", "enum": ["cloud", "runner"] }, "model_config": { "type": "object", "properties": { "provider": { "type": "string", "enum": ["anthropic"] }, "model": { "type": "string", "minLength": 1, "maxLength": 120, "pattern": "^[^\\n\\r]+$" }, "effort": { "type": "string", "enum": ["low", "medium", "high", "xhigh", "max"] } }, "required": ["provider", "model"], "additionalProperties": false }, "skills": { "maxItems": 50, "type": "array", "items": { "type": "object", "properties": { "slug": { "type": "string", "pattern": "^[a-z0-9][a-z0-9-]{1,80}$" }, "skill_version_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)$" }, "content_sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" } }, "required": ["slug", "skill_version_id", "content_sha256"], "additionalProperties": false } }, "schedule_cron": { "anyOf": [{ "type": "string", "minLength": 1, "maxLength": 120 }, { "type": "null" }] }, "schedule_timezone": { "type": "string", "minLength": 1, "maxLength": 100 } }, "required": ["display_name", "steward", "lane", "model_config", "skills", "schedule_cron", "schedule_timezone"], "additionalProperties": false }, "source_uses": { "maxItems": 100, "type": "array", "items": { "type": "object", "properties": { "source_key": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,79}$" } }, "required": ["source_key"], "additionalProperties": false } } }, "required": ["seat_key", "name", "seat_type", "charter", "human_staffing", "source_uses"], "additionalProperties": false }, "description": "The first seat (seats[0]) must be the plan's single parentless root Seat and adopts the already-provisioned root Seat \u2014 its name must match the provisioned root seat's name after whitespace/case normalization." }, "goals": { "maxItems": 200, "type": "array", "items": { "type": "object", "properties": { "key": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,79}$" }, "title": { "type": "string", "minLength": 1, "maxLength": 200 }, "definition": { "type": "string", "minLength": 1, "maxLength": 2e3 }, "kind": { "type": "string", "enum": ["company_objective", "seat_goal", "milestone"] }, "owner_seat_key": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,79}$" }, "parent_key": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,79}$" }, "source_compass_objective_index": { "type": "integer", "minimum": 0, "maximum": 2 }, "source_ref": { "type": "object", "properties": { "source_key": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,79}$" } }, "required": ["source_key"], "additionalProperties": false } }, "required": ["key", "title", "definition", "kind", "owner_seat_key"], "additionalProperties": false } }, "signals": { "maxItems": 250, "type": "array", "items": { "type": "object", "properties": { "key": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,79}$" }, "name": { "type": "string", "minLength": 1, "maxLength": 120 }, "owner_seat_key": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,79}$" }, "unit": { "type": "string", "minLength": 1, "maxLength": 40 }, "direction": { "type": "string", "enum": ["up_good", "down_good"] }, "cadence": { "type": "string", "enum": ["daily", "weekly", "monthly", "quarterly", "annual"] }, "source_ref": { "type": "object", "properties": { "source_key": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,79}$" } }, "required": ["source_key"], "additionalProperties": false } }, "required": ["key", "name", "owner_seat_key", "unit", "direction", "cadence"], "additionalProperties": false } }, "signal_readings": { "maxItems": 5e3, "type": "array", "items": { "type": "object", "properties": { "signal_key": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,79}$" }, "period_start": { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" }, "value": { "type": "string", "minLength": 1, "maxLength": 100, "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$" }, "source_ref": { "type": "object", "properties": { "source_key": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,79}$" } }, "required": ["source_key"], "additionalProperties": false } }, "required": ["signal_key", "period_start", "value"], "additionalProperties": false } }, "frictions": { "maxItems": 250, "type": "array", "items": { "type": "object", "properties": { "key": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,79}$" }, "title": { "type": "string", "minLength": 1, "maxLength": 200 }, "description": { "type": "string", "minLength": 1, "maxLength": 2e3 }, "owner_seat_key": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,79}$" }, "raised_by_seat_key": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,79}$" }, "source_ref": { "type": "object", "properties": { "source_key": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,79}$" } }, "required": ["source_key"], "additionalProperties": false } }, "required": ["key", "title", "description", "owner_seat_key"], "additionalProperties": false } }, "tasks": { "maxItems": 500, "type": "array", "items": { "type": "object", "properties": { "key": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,79}$" }, "title": { "type": "string", "minLength": 1, "maxLength": 200 }, "description": { "type": "string", "minLength": 1, "maxLength": 2e3 }, "owner_seat_key": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,79}$" }, "goal_key": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,79}$" }, "friction_key": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,79}$" }, "due_on": { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" }, "initial_status": { "type": "string", "const": "in_progress" }, "source_ref": { "type": "object", "properties": { "source_key": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,79}$" } }, "required": ["source_key"], "additionalProperties": false } }, "required": ["key", "title", "description", "owner_seat_key", "initial_status"], "additionalProperties": false } }, "sync_brief_scope": { "type": "string", "enum": ["company_wide", "per_cluster"] }, "managed_inference_hard_cap_usd": { "anyOf": [{ "type": "string", "maxLength": 11, "pattern": "^(?:0|[1-9]\\d{0,7})\\.\\d{2}$" }, { "type": "null" }] } }, "required": ["schema_version", "idempotency_key", "company_name", "sources", "reconciliation", "compass", "cycle", "seats", "goals", "signals", "signal_readings", "frictions", "tasks", "sync_brief_scope"], "additionalProperties": false, "definitions": { "__schema0": { "anyOf": [{ "type": "string" }, { "type": "number" }, { "type": "boolean" }, { "type": "null" }, { "type": "array", "items": { "$ref": "#/definitions/__schema0" } }, { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "$ref": "#/definitions/__schema0" } }] } } }, "output_schema": { "type": "object", "properties": { "application_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)$" }, "root_foundation_bound": { "type": "boolean", "const": true }, "receipt": { "type": "object", "properties": { "receipt_revision": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 }, "created": { "type": "object", "propertyNames": { "type": "string", "enum": ["source", "seat", "charter", "decision", "planned_person", "goal", "signal", "reading", "friction", "task", "schedule", "agent", "sync_brief", "onboarding"] }, "additionalProperties": { "maxItems": 5e3, "type": "array", "items": { "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)$" } } }, "skipped": { "maxItems": 500, "type": "array", "items": { "type": "object", "properties": { "family": { "type": "string", "enum": ["source", "seat", "charter", "decision", "planned_person", "goal", "signal", "reading", "friction", "task", "schedule", "agent", "sync_brief", "onboarding"] }, "reason": { "type": "string", "enum": ["context_only", "invalid", "duplicate", "unsupported"] }, "count": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 } }, "required": ["family", "reason", "count"], "additionalProperties": false } }, "warnings": { "maxItems": 500, "type": "array", "items": { "type": "object", "properties": { "code": { "type": "string", "pattern": "^[a-z][a-z0-9_]{0,63}$" }, "count": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 } }, "required": ["code", "count"], "additionalProperties": false } }, "counts": { "type": "object", "propertyNames": { "type": "string", "pattern": "^[a-z][a-z0-9_]{0,63}$" }, "additionalProperties": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 } }, "digests": { "type": "object", "propertyNames": { "type": "string", "pattern": "^[a-z][a-z0-9_]{0,63}$" }, "additionalProperties": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" } }, "agent_bindings": { "maxItems": 100, "type": "array", "items": { "type": "object", "properties": { "agent_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)$" }, "configuration_digest": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" } }, "required": ["agent_id", "seat_id", "configuration_digest"], "additionalProperties": false } }, "receipt_digest": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" } }, "required": ["receipt_revision", "created", "skipped", "warnings", "counts", "digests", "receipt_digest"], "additionalProperties": false } }, "required": ["application_id", "root_foundation_bound", "receipt"], "additionalProperties": false }, "help": "Submit the complete declarative setup plan once. It stages one owner confirmation and applies the approved plan atomically without invites, credentials, external messages, or go-live.", "guide_slugs": ["rost-implementation-method", "mcp-and-cli-guide", "agent-reference-map"], "stages": ["company_setup", "graph_design", "charter_design", "staffing"], "related_command_ids": ["agent_grant_intervention.decide", "agent.activation_sign", "agent.go_live", "agent.run_dry_run", "agent.trust.create", "agent.trust.expire", "agent.trust.revoke", "agent.trust.supersede", "cascade.import", "charter.approve", "charter.draft", "charter.draft_all", "charter.sign_manifest", "charter.update_draft", "compass.answer_gap", "compass.approve_version", "compass.draft", "compass.get_current", "compass.list_gaps", "compass.reject_draft", "compass.set", "compass.update_draft", "confirmation.activation_set.list", "confirmation.approve", "confirmation.dismiss", "confirmation.dismiss_stale", "confirmation.list", "confirmation.reject", "confirmation.remint", "credential.ingress", "friction.file_issue", "friction.list", "friction.resolve", "goal.reassign_owner", "goal.reparent", "mcp_token.create", "onboarding.activate", "onboarding.advance_step", "onboarding.attach_reference", "onboarding.create_invite", "onboarding.finish", "onboarding.rehearse", "onboarding.source_ingest", "onboarding.status", "onboarding.upload_context", "seat.create", "seat.set_type", "signal.bind", "signal.confirm_reading", "signal.draft_first_readings", "signal.report", "staffing.assign_agent_dry_run", "staffing.assign_user", "sync.brief.compile", "sync.brief.get", "sync.item.assign", "sync.run.complete", "sync.run.start", "task.confirm_proposal", "task.decline_proposal"] },
13420
13420
  { "id": "onboarding.source_ingest", "title": "Ingest onboarding source", "description": "Retain one bounded setup source under the exact tenant and implementation run.", "required_scope": "tenant", "confirmation": "none", "trusted_execution": { "mode": "always_human", "risk_flags": ["admin"], "rationale": "Source ingestion is bootstrap-only and never inherits Trusted standing execution." }, "expose_over_mcp": true, "input_schema": { "type": "object", "properties": { "source_key": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,79}$" }, "kind": { "type": "string", "enum": ["org_chart", "signal_export", "goal_export", "friction_export", "meeting_export", "other"] }, "title": { "type": "string" }, "content_base64": { "type": "string", "minLength": 1, "maxLength": 6666671 } }, "required": ["source_key", "kind", "title", "content_base64"], "additionalProperties": false }, "output_schema": { "type": "object", "properties": { "source_upload_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)$" }, "descriptor": { "type": "object", "properties": { "kind": { "type": "string", "enum": ["org_chart", "signal_export", "goal_export", "friction_export", "meeting_export", "other"] }, "title": { "type": "string", "minLength": 1, "maxLength": 200 }, "sha256": { "type": "string", "pattern": "^[0-9a-f]{64}$" }, "byte_count": { "type": "integer", "exclusiveMinimum": 0, "maximum": 5e6 }, "family_manifest": { "minItems": 1, "maxItems": 4, "type": "array", "items": { "type": "object", "properties": { "family": { "type": "string", "enum": ["source", "seat", "planned_person", "goal", "signal", "reading", "friction", "task", "agent"] }, "input_count": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 }, "normalized_identity_digest": { "type": "string", "pattern": "^[0-9a-f]{64}$" } }, "required": ["family", "input_count", "normalized_identity_digest"], "additionalProperties": false } } }, "required": ["kind", "title", "sha256", "byte_count", "family_manifest"], "additionalProperties": false }, "source_ref": { "type": "object", "properties": { "source_key": { "type": "string", "pattern": "^[a-z][a-z0-9-]{1,79}$" }, "source_upload_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": ["org_chart", "signal_export", "goal_export", "friction_export", "meeting_export", "other"] }, "sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" }, "row_ref": { "type": "string" } }, "required": ["source_key", "source_upload_id", "title", "kind", "sha256"], "additionalProperties": false } }, "required": ["source_upload_id", "descriptor", "source_ref"], "additionalProperties": false }, "help": "Ingest one bounded CSV source into encrypted tenant/run-bound retained storage. The server computes its digest and canonical family manifest; paths, URLs, and client digests are not accepted.", "guide_slugs": ["rost-implementation-method", "mcp-and-cli-guide"], "stages": ["company_setup"], "related_command_ids": ["agent.go_live", "agent.run_dry_run", "cascade.import", "charter.approve", "charter.draft", "charter.draft_all", "charter.sign_manifest", "charter.update_draft", "compass.answer_gap", "compass.approve_version", "compass.draft", "compass.get_current", "compass.list_gaps", "compass.reject_draft", "compass.set", "compass.update_draft", "confirmation.activation_set.list", "confirmation.approve", "credential.ingress", "friction.file_issue", "friction.list", "friction.resolve", "onboarding.activate", "onboarding.advance_step", "onboarding.attach_reference", "onboarding.create_invite", "onboarding.finish", "onboarding.rehearse", "onboarding.setup", "onboarding.status", "onboarding.upload_context", "seat.create", "seat.set_type", "signal.bind", "signal.confirm_reading", "signal.draft_first_readings", "signal.report", "staffing.assign_agent_dry_run", "staffing.assign_user", "sync.brief.compile", "sync.brief.get", "sync.item.assign", "sync.run.complete", "sync.run.start"] },
13421
13421
  { "id": "onboarding.status", "title": "Onboard status", "description": "Return current onboarding progress, graph summary, and the next recommended actions.", "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": { "completed_steps": { "type": "array", "items": { "type": "string", "minLength": 1 } }, "missing_requirements": { "type": "array", "items": { "type": "string", "minLength": 1 } }, "graph_summary": { "type": "object", "properties": { "seat_count": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, "active_seat_count": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, "agent_seat_count": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 } }, "required": ["seat_count", "active_seat_count", "agent_seat_count"], "additionalProperties": false }, "agent_summary": { "type": "object", "properties": { "draft_setup": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, "dry_run": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, "live": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 } }, "required": ["draft_setup", "dry_run", "live"], "additionalProperties": false }, "onboarded": { "type": "boolean" }, "completed_at": { "anyOf": [{ "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)))$" }, { "type": "null" }] }, "next_recommended_actions": { "type": "array", "items": { "type": "string", "minLength": 1 } }, "path_choice": { "anyOf": [{ "type": "string", "enum": ["guided", "agent_led"] }, { "type": "null" }] } }, "required": ["completed_steps", "missing_requirements", "graph_summary", "agent_summary", "onboarded", "completed_at", "next_recommended_actions", "path_choice"], "additionalProperties": false }, "help": "Start by checking onboarding status, then use the implementation method guide to choose the next setup step.", "guide_slugs": ["rost-implementation-method", "agent-reference-map"], "stages": ["company_setup"], "related_command_ids": ["agent_setup.get", "agent_setup.start", "agent_setup.update", "agent_template.list", "agent.configure_tools", "agent.create_custom", "agent.create_from_template", "agent.fleet_digest", "agent.get_run", "agent.go_live", "agent.list_fleet", "agent.list_runs", "agent.list_tool_calls", "agent.run_dry_run", "agent.status", "agent.update_schedule", "aicos.brain_settings.get", "aicos.brain_settings.update", "cascade.import", "charter.approve", "charter.draft", "charter.draft_all", "charter.set", "charter.sign_manifest", "charter.update_draft", "compass.answer_gap", "compass.approve_version", "compass.draft", "compass.get_current", "compass.list_gaps", "compass.reject_draft", "compass.set", "compass.update_draft", "confirmation.activation_set.list", "confirmation.approve", "confirmation.reject", "credential.ingress", "deliverable.accept", "deliverable.attach", "deliverable.create", "deliverable.get", "deliverable.list", "deliverable.reject", "error_log.list", "error_log.resolve", "error_log.supersede", "escalation.get", "escalation.list", "escalation.reject", "escalation.resolve", "friction.file_issue", "friction.list", "friction.resolve", "graph.get", "implementation_access.abandon", "implementation_access.complete", "implementation_access.status", "integration.list", "integration.readiness", "integration.status", "integration.test", "mcp_token.create", "mcp_token.list", "mcp_token.revoke", "onboarding.activate", "onboarding.advance_step", "onboarding.attach_reference", "onboarding.create_invite", "onboarding.finish", "onboarding.rehearse", "onboarding.resume", "onboarding.setup", "onboarding.source_ingest", "onboarding.upload_context", "runner.diagnose", "runner.list", "runner.repair", "seat.create", "seat.create_complete", "seat.get", "seat.set_type", "signal.bind", "signal.confirm_reading", "signal.draft_first_readings", "signal.list", "signal.report", "skill.assign_to_seat", "skill.assigned.list", "skill.catalog", "skill.check_dependencies", "skill.create", "skill.enable_catalog", "skill.file.get", "skill.get", "skill.import_github", "skill.import_upload", "skill.install_local", "skill.list", "skill.publish", "skill.revoke_from_seat", "skill.sync_local", "skill.update_draft", "staffing.assign", "staffing.assign_agent_dry_run", "staffing.assign_user", "sync.brief.compile", "sync.brief.get", "sync.item.assign", "sync.run.complete", "sync.run.start", "system.health", "tenant.anthropic_key.disable", "tenant.model_gateway_policy.update", "tenant.rename", "tool_grants.tenant.update", "usage.report", "usage.snapshot", "user.tenants", "user.use_tenant", "user.whoami"] },
@@ -36532,6 +36532,23 @@ var onboardingSetupApprovalProjectionSchema = external_exports.object({
36532
36532
  ])
36533
36533
  }).strict();
36534
36534
 
36535
+ // ../../packages/protocol/src/onboarding-steps.ts
36536
+ var onboardingStepSequence = [
36537
+ "setup_path",
36538
+ "company_basics",
36539
+ "how_it_works",
36540
+ "compass_context",
36541
+ "org_intake",
36542
+ "charters_preview",
36543
+ "sync_rhythm",
36544
+ "invite_team",
36545
+ "staff_agent",
36546
+ "finish"
36547
+ ];
36548
+ var advanceableOnboardingStepSchema = external_exports.enum(onboardingStepSequence);
36549
+ var persistedOnboardingStepSchema = external_exports.enum([...onboardingStepSequence, "complete"]);
36550
+ var firstOnboardingStep = onboardingStepSequence[0];
36551
+
36535
36552
  // ../../packages/protocol/src/onboarding-setup-preflight.ts
36536
36553
  var MAX_ONBOARDING_SETUP_PREFLIGHT_ISSUES = 5e4;
36537
36554
  var onboardingSetupPreflightIssueCodeSchema = external_exports.enum([
@@ -37120,12 +37137,17 @@ var onboardingAttachReferenceOutputSchema = external_exports.object({
37120
37137
  title: external_exports.string().min(1).nullable()
37121
37138
  }).strict();
37122
37139
  var onboardingAdvanceStepInputSchema = external_exports.object({
37123
- step: external_exports.string().min(1),
37140
+ // DER-2852 round 3: bounded to the canonical sequence. `complete` is excluded
37141
+ // because `onboarding.finish` (confirmation: "human_required") owns that sentinel;
37142
+ // `advance_step` is confirmation: "none" and must not write it.
37143
+ step: advanceableOnboardingStepSchema,
37124
37144
  state: external_exports.record(external_exports.string(), external_exports.unknown()).default({}),
37125
37145
  completed: external_exports.boolean().default(false)
37126
37146
  }).strict();
37127
37147
  var onboardingProgressOutputSchema = external_exports.object({
37128
- step: external_exports.string().min(1),
37148
+ // DER-2852 round 3: stored rows are canonical steps or the finish-owned
37149
+ // `complete` sentinel (migration 0161). This is the read-side of the same boundary.
37150
+ step: persistedOnboardingStepSchema,
37129
37151
  state: external_exports.unknown(),
37130
37152
  completed_at: external_exports.string().datetime({ offset: true }).nullable()
37131
37153
  }).strict();
@@ -52405,7 +52427,7 @@ var referenceDocuments = [
52405
52427
  order: 10,
52406
52428
  title: "{{brand}} implementation method",
52407
52429
  summary: "The staged operating-system setup path used by humans, CLI sessions, MCP clients, and in-app agents.",
52408
- version: "2026-07-30.1",
52430
+ version: "2026-07-30.2",
52409
52431
  public: true,
52410
52432
  audiences: ["human", "cli", "mcp", "in_app_agent"],
52411
52433
  stages: ["company_setup", "graph_design", "charter_design", "staffing", "operating_rhythm"],
@@ -52479,6 +52501,8 @@ var referenceDocuments = [
52479
52501
 
52480
52502
  {{brand}} setup is a staged operating-system implementation. The goal is not to mirror a historical org chart. The goal is to make the company legible enough that humans and agents can operate inside the same accountability model.
52481
52503
 
52504
+ Setup opens with one decision: continue through the guided step rail yourself, or hand the CLI- and MCP-driven implementation off to your own coding agent. Either path drives the same staged implementation below, and provider connections stay human-approved either way \u2014 the choice can change later.
52505
+
52482
52506
  ## Stage 1: Bring the company into view
52483
52507
 
52484
52508
  Start with the company context that already exists: org charts, team notes, planning docs, process notes, metrics, or a founder transcript. The first output is a rough Compass and a draft Responsibility Graph.
@@ -52516,6 +52540,8 @@ Durable changes that expand authority require human confirmation.
52516
52540
 
52517
52541
  ## Stage 5: Run the rhythm
52518
52542
 
52543
+ Guided setup asks you to set the Sync Brief scope \u2014 one company-wide brief, or one per cluster \u2014 as its own step, scoped against the graph you have built so far. It is not a one-time choice: change it any time in settings. See the Sync rhythm playbook for what the brief compiles.
52544
+
52519
52545
  Once the graph is live, run the operating rhythm: Signal tracks measurable health, Friction captures issues, Cascade ties work to goals, and Sync turns the weekly meeting into a decision forum.
52520
52546
 
52521
52547
  The system should surface exceptions before the meeting. Humans should spend Sync time deciding, resolving, and clarifying authority.
@@ -53680,7 +53706,7 @@ External connectors are being rolled out provider by provider, conservatively (r
53680
53706
  order: 48,
53681
53707
  title: "CLI and MCP installation guide",
53682
53708
  summary: "Install the public CLI, register remote token-backed MCP clients, and find the full command and tool catalog.",
53683
- version: "2026-07-30.3",
53709
+ version: "2026-07-31.1",
53684
53710
  public: true,
53685
53711
  audiences: ["human", "cli", "mcp", "in_app_agent"],
53686
53712
  stages: ["company_setup", "staffing"],
@@ -54267,7 +54293,7 @@ These ergonomic wrappers (including the \`{{cli}} agent\` group) require **{{cli
54267
54293
 
54268
54294
  **Generated verbs (0.6.0+).** Every registry command now has a first-class \`{{cli}} <namespace> <action>\` verb, projected directly from the command's input schema \u2014 so namespaces that previously had no ergonomic wrapper (for example \`{{cli}} measurable create\`, \`{{cli}} work_order enqueue\`, \`{{cli}} mcp_token create\`) are usable without dropping to the raw \`command <id>\` path. Flags follow the schema field names (\`--seat-id\`, \`--name\`, \u2026); read a command's exact input offline with \`{{cli}} <namespace> <action> --schema\` before calling it, and pass a nested payload with \`--input '<json>'\` or \`--input-file <path>\` (a JSON file read client-side) when a field is a complex object \u2014 explicit field flags merge on top of either payload form. On these generated verbs, a flag the verb does not support is a usage error naming the flag before anything is sent, never silently ignored (the bespoke handler verbs, such as \`status record\` and \`agent create\`, still parse flags by hand and are being hardened separately). \`--json\` still selects machine output, \`--seat <id>\` still sets seat scope, and \`{{cli}} command <id> --json '<body>'\` remains the universal fallback.
54269
54295
 
54270
- For a complete Seat, inspect \`{{cli}} seat create-complete --schema\`, then pass the strict nested request with \`{{cli}} seat create-complete --input '<json>' --json\`. The generic \`{{cli}} command seat.create_complete --json '<json>'\` path and the generated MCP tool \`rost_create_complete_seat\` expose the same registry schema and server-side command. \`seat create-complete\` authenticates with an existing implementation-bootstrap credential first (it is one of the vetted bootstrap staging primitives) and falls back to the user session. Staging surfaces as the CLI's confirmation-required envelope: a \`COMMAND_CONFIRMATION_REQUIRED\` JSON object on stderr, exit code 3, whose \`details\` carry the pending confirmation id and the exact approval URL (\`details.approveVia.webUrl\`) \u2014 read the URL from there; the command has done its job at that point. The human owner reviews one card covering the Seat, canonical Charter and permission manifest, disclosed staffing, effective agent lane/readiness, exact pinned Skill versions and dependency state, and schedule. Approval applies the proposal in one transaction and returns its application and receipt ids. Any failure rolls back the whole proposal. An optional agent remains in \`dry_run\`; this command never approves go-live. Direct calls use existing parent and Steward Seat ids\u2014logical references are reserved for the later composite onboarding flow. Retained source ingestion is not available on this direct command yet, so \`sources\` and every \`source_uses\` collection must be empty and planned staffing must omit \`source_ref\`; the command rejects source-backed provenance instead of accepting an unverified upload id or caller-supplied digest.
54296
+ For a complete Seat, inspect \`{{cli}} seat create-complete --schema\`, then pass the strict nested request with \`{{cli}} seat create-complete --input '<json>' --json\`. The generic \`{{cli}} command seat.create_complete --json '<json>'\` path and the generated MCP tool \`rost_create_complete_seat\` expose the same registry schema and server-side command. \`seat create-complete\` authenticates with an existing implementation-bootstrap credential first (it is one of the vetted bootstrap staging primitives) and falls back to the user session. Staging is the success outcome for this verb: the CLI exits 0 and prints the pending confirmation id and the exact approval URL (\`Approve once: <url>\`), and with \`--json\` it prints the pending-confirmation object verbatim for machines \u2014 the command has done its job at that point. The raw \`{{cli}} command seat.create_complete --json '<json>'\` path renders staging the same way \u2014 the pending-confirmation JSON on stdout, exit 0. The human owner reviews one card covering the Seat, canonical Charter and permission manifest, disclosed staffing, effective agent lane/readiness, exact pinned Skill versions and dependency state, and schedule. Approval applies the proposal in one transaction and returns its application and receipt ids. Any failure rolls back the whole proposal. An optional agent remains in \`dry_run\`; this command never approves go-live. Direct calls use existing parent and Steward Seat ids\u2014logical references are reserved for the later composite onboarding flow. Retained source ingestion is not available on this direct command yet, so \`sources\` and every \`source_uses\` collection must be empty and planned staffing must omit \`source_ref\`; the command rejects source-backed provenance instead of accepting an unverified upload id or caller-supplied digest.
54271
54297
 
54272
54298
  The signed-in app exposes the same Skill command surface at **Skills**, linked from the Agents page (the nav collapse moved it out of the primary sidebar). Use \`/skills\` to filter the tenant library, \`/skills/new\` to build canonical \`SKILL.md\` frontmatter with \`tool.catalog\` dependencies, \`/skills/import\` for bounded GitHub or upload imports, and each Skill detail page to review validation, publish, check Seat dependencies, and assign a published version. During \`/agents/new\`, \`agent_setup.get\` can return \`next_action: "choose_skills"\`; selected Skills are proposed immutable-version assignments and required Skill tools block sign-off/go-live until tool configuration is ready.
54273
54299
 
@@ -58564,8 +58590,8 @@ var COMMAND_MANIFEST = [
58564
58590
  { "id": "agent.activation_receipt", "namespace": "agent", "action": "activation_receipt", "title": "Build agent activation receipt", "description": "Read the compiled authority receipt for one agent: effective capabilities, connection metadata, stale-scope digest, budget, and always-human boundary.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "agent_id", "flag": "agent-id", "type": "string", "required": true }, { "name": "proposed_budget_cents", "flag": "proposed-budget-cents", "type": "integer", "required": false }], "hasComplexInput": false, "help": "Build the current compiled activation receipt before signing or creating a Trusted grant. Rebuild it after any Charter, capability, connection, schedule, or lane change." },
58565
58591
  { "id": "agent.activation_sign", "namespace": "agent", "action": "activation_sign", "title": "Sign agent activation receipt", "description": "Human steward/admin activation sign-off for the current compiled receipt digest. Refuses stale receipts and records a human decision plus append-only event.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "agent_id", "flag": "agent-id", "type": "string", "required": true }, { "name": "expected_scope_digest", "flag": "expected-scope-digest", "type": "string", "required": true }, { "name": "budget_cents", "flag": "budget-cents", "type": "integer", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": false }], "hasComplexInput": false, "help": "Human steward/admin sign-off for the exact activation receipt digest. Agents can surface the pending confirmation but cannot sign their own authority." },
58566
58592
  { "id": "agent.configure_tools", "namespace": "agent", "action": "configure_tools", "title": "Configure agent tools", "description": "Save tool proposals, declines, and credential-ingress requests for a draft agent. Never stores or echoes secret material; vault refs only.", "requiredScope": "seat", "confirmation": "credential_flow", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": true, "help": "Connect or decline proposed tools and stage credential-ingress requests; never place raw secrets here \u2014 secrets flow through vault-backed credential.ingress as vault refs only.", "example": { "seat_id": "0190aaaa-aaaa-7aaa-8aaa-aaaaaaaaaaaa", "tool_decisions": [{ "tool": "ap.invoices.read", "decision": "connect" }, { "tool": "email.draft", "decision": "connect" }] } },
58567
- { "id": "agent.create_custom", "namespace": "agent", "action": "create_custom", "title": "Create custom agent", "description": "Create a draft custom agent shell and a draft Charter seed from operational answers (what it owns, success, never-do-alone, steward).", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "steward_seat_id", "flag": "steward-seat-id", "type": "string", "required": false }, { "name": "lane", "flag": "lane", "type": "enum", "required": false, "enumValues": ["cloud", "mcp_session", "runner"] }, { "name": "what_it_owns", "flag": "what-it-owns", "type": "string", "required": false }, { "name": "what_success_looks_like", "flag": "what-success-looks-like", "type": "string", "required": false }, { "name": "what_it_must_never_do_alone", "flag": "what-it-must-never-do-alone", "type": "string", "required": false }], "hasComplexInput": true, "help": "Create a draft custom agent from operational answers (what it owns, success, never-do-alone, steward); the Charter Builder owns the contract and go-live stays human-gated.", "example": { "seat_id": "0190aaaa-aaaa-7aaa-8aaa-aaaaaaaaaaaa", "steward_seat_id": "0190bbbb-bbbb-7bbb-8bbb-bbbbbbbbbbbb", "lane": "cloud", "what_it_owns": "Drafting AP invoice entries from inbound vendor emails for human review.", "what_success_looks_like": "Every inbound invoice is drafted within one business day with the correct GL coding.", "what_it_must_never_do_alone": "Never send payment or approve an invoice without a human sign-off." } },
58568
- { "id": "agent.create_from_template", "namespace": "agent", "action": "create_from_template", "title": "Create agent from template", "description": "Create a draft stock agent and draft Charter from a stock template. Creates the agent occupancy only when a human steward chain resolves; the agent stays draft until a signed manifest, a passed dry run, and human go-live.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "template_slug", "flag": "template-slug", "type": "string", "required": true }, { "name": "expected_template_version", "flag": "expected-template-version", "type": "string", "required": false }], "hasComplexInput": false, "help": "Create a draft stock agent and draft Charter from a template; the agent occupancy is created only when a human steward chain resolves, and the agent stays draft until a signed manifest, a passed dry run, and human go-live." },
58593
+ { "id": "agent.create_custom", "namespace": "agent", "action": "create_custom", "title": "Create custom agent", "description": "Create a draft custom agent shell and a draft Charter seed from operational answers (what it owns, success, never-do-alone, steward).", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "steward_seat_id", "flag": "steward-seat-id", "type": "string", "required": false }, { "name": "lane", "flag": "lane", "type": "enum", "required": false, "enumValues": ["cloud", "mcp_session", "runner"] }, { "name": "what_it_owns", "flag": "what-it-owns", "type": "string", "required": false }, { "name": "what_success_looks_like", "flag": "what-success-looks-like", "type": "string", "required": false }, { "name": "what_it_must_never_do_alone", "flag": "what-it-must-never-do-alone", "type": "string", "required": false }], "hasComplexInput": true, "bootstrapStage": true, "help": "Create a draft custom agent from operational answers (what it owns, success, never-do-alone, steward); the Charter Builder owns the contract and go-live stays human-gated.", "example": { "seat_id": "0190aaaa-aaaa-7aaa-8aaa-aaaaaaaaaaaa", "steward_seat_id": "0190bbbb-bbbb-7bbb-8bbb-bbbbbbbbbbbb", "lane": "cloud", "what_it_owns": "Drafting AP invoice entries from inbound vendor emails for human review.", "what_success_looks_like": "Every inbound invoice is drafted within one business day with the correct GL coding.", "what_it_must_never_do_alone": "Never send payment or approve an invoice without a human sign-off." } },
58594
+ { "id": "agent.create_from_template", "namespace": "agent", "action": "create_from_template", "title": "Create agent from template", "description": "Create a draft stock agent and draft Charter from a stock template. Creates the agent occupancy only when a human steward chain resolves; the agent stays draft until a signed manifest, a passed dry run, and human go-live.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "template_slug", "flag": "template-slug", "type": "string", "required": true }, { "name": "expected_template_version", "flag": "expected-template-version", "type": "string", "required": false }], "hasComplexInput": false, "bootstrapStage": true, "help": "Create a draft stock agent and draft Charter from a template; the agent occupancy is created only when a human steward chain resolves, and the agent stays draft until a signed manifest, a passed dry run, and human go-live." },
58569
58595
  { "id": "agent.decommission", "namespace": "agent", "action": "decommission", "title": "Decommission agent", "description": "Retire an agent occupancy safely. Blocks if it would leave another live agent without a human steward chain.", "requiredScope": "tenant", "confirmation": "dangerous", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": false }], "hasComplexInput": false, "help": "Retire an agent occupancy safely; the no-orphan guard blocks any decommission that would leave another live agent without a human steward chain." },
58570
58596
  { "id": "agent.fleet_digest", "namespace": "agent", "action": "fleet_digest", "title": "Get dogfood fleet health digest", "description": "Return a daily tenant fleet health digest with live/idle state, run counts, spend, failed runs, unresolved product errors, notification errors, and next actions.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "window_hours", "flag": "window-hours", "type": "integer", "required": false }, { "name": "error_limit", "flag": "error-limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "Capture a daily dogfood fleet health digest with fleet state, run counts, spend, failed runs, unresolved errors, failed notifications, and next actions." },
58571
58597
  { "id": "agent.get_run", "namespace": "agent", "action": "get_run", "title": "Get agent run diagnostics", "description": "Return one seat run's diagnostic record: run status, transcript reference, token/cost usage, outcome, and linked product-visible run errors.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "run_id", "flag": "run-id", "type": "string", "required": true }, { "name": "transcript", "flag": "transcript", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "Read one run's diagnostic record, transcript reference, token/cost usage, outcome, and linked product-visible errors." },
@@ -58610,13 +58636,13 @@ var COMMAND_MANIFEST = [
58610
58636
  { "id": "command.list", "namespace": "command", "action": "list", "title": "List commands", "description": "List every callable command id with its title, required scope, confirmation gate, and onboarding stages. Use 'command.describe' for a single command's full contract.", "requiredScope": "user", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "List the callable command surface, then use command.describe for the exact contract of the one you need." },
58611
58637
  { "id": "compass.alignment", "namespace": "compass", "action": "alignment", "title": "Check Compass alignment", "description": "Advisory drift check: scores whether cycle goals still ladder up to the active vision and flags orphan/contradictory goals. Read-only \u2014 it never edits the Compass or any goal.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Advisory drift check: scores whether cycle goals still ladder to the active vision and flags orphan/contradictory goals. Read-only." },
58612
58638
  { "id": "compass.answer_gap", "namespace": "compass", "action": "answer_gap", "title": "Answer Compass gap", "description": "Record a human answer for a Compass gap and create a replacement draft.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "gap_id", "flag": "gap-id", "type": "string", "required": true }, { "name": "answer", "flag": "answer", "type": "string", "required": true }], "hasComplexInput": false, "help": "Answer Compass gaps with explicit human input before turning direction into graph, Charter, or Cascade decisions." },
58613
- { "id": "compass.approve_version", "namespace": "compass", "action": "approve_version", "title": "Approve Compass version", "description": "Activate a Compass version by supersession.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "draft_id", "flag": "draft-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Compass approval is a human decision and should anchor later Cascade commitments." },
58639
+ { "id": "compass.approve_version", "namespace": "compass", "action": "approve_version", "title": "Approve Compass version", "description": "Activate a Compass version by supersession.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "draft_id", "flag": "draft-id", "type": "string", "required": true }], "hasComplexInput": false, "bootstrapStage": true, "help": "Compass approval is a human decision and should anchor later Cascade commitments." },
58614
58640
  { "id": "compass.draft", "namespace": "compass", "action": "draft", "title": "Draft Compass", "description": "Create a Compass draft version.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": true, "help": "Submit a full Compass document; read the Compass authoring guide for the field-by-field contract and worked examples before drafting. Drafting is safe for an agent; approving a version is a human act.", "example": { "doc": { "schema_version": 1, "purpose": { "value": "Help small manufacturers ship quality products on time.", "citations": [], "confidence": 0.9, "placeholder": false }, "principles": [{ "value": "Bias to action; decide with the information we have.", "citations": [], "confidence": 0.9, "placeholder": false }, { "value": "Customers feel the quality of every order.", "citations": [], "confidence": 0.9, "placeholder": false }], "horizon_goals": { "three_year": { "title": { "value": "Reach $10M ARR with a 25-person team", "citations": [], "confidence": 0.9, "placeholder": false }, "definition_of_done": { "value": "ARR is at or above $10M and team headcount is 25 with no key-role gaps.", "citations": [], "confidence": 0.9, "placeholder": false }, "horizon": "three_year" }, "one_year": { "title": { "value": "Hit $3M ARR and 99% on-time delivery", "citations": [], "confidence": 0.9, "placeholder": false }, "definition_of_done": { "value": "Trailing-12-month ARR \u2265 $3M and on-time delivery rate \u2265 99% for two consecutive quarters.", "citations": [], "confidence": 0.9, "placeholder": false }, "horizon": "one_year" } }, "cycle_objectives": [{ "title": { "value": "Cut order-to-ship cycle time by 20%", "citations": [], "confidence": 0.9, "placeholder": false }, "definition_of_done": { "value": "Median order-to-ship time is 20% lower than the prior cycle baseline.", "citations": [], "confidence": 0.9, "placeholder": false }, "horizon": "cycle" }], "gaps": [], "follow_up_tasks": [], "source_ids": [] } } },
58615
58641
  { "id": "compass.get_current", "namespace": "compass", "action": "get_current", "title": "Get current Compass", "description": "Return the active and draft Compass versions plus the source documents that informed them.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Read the active and draft Compass before drafting goals or recommending direction changes." },
58616
58642
  { "id": "compass.import", "namespace": "compass", "action": "import", "title": "Import a ninety V/TO into a Compass draft", "description": "AI-draft a Compass from a ninety V/TO (values -> principles, 10/3/1-year -> horizons, Rocks -> cycle objectives). Produces a DRAFT a human confirms by supersession; never writes an accepted Compass.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "dry_run", "flag": "dry-run", "type": "boolean", "required": false }, { "name": "source_name", "flag": "source-name", "type": "string", "required": false }, { "name": "text", "flag": "text", "type": "string", "required": true }], "hasComplexInput": false, "help": "AI-draft a Compass from a ninety V/TO (values -> principles, 10/3/1-year -> horizons, Rocks -> cycle objectives). Lands a draft a human confirms; idempotent by document content." },
58617
58643
  { "id": "compass.list_gaps", "namespace": "compass", "action": "list_gaps", "title": "List Compass gaps", "description": "Return unanswered and answered Compass context gaps for the latest draft or active version.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "List unanswered Compass gaps so a human can answer them before direction anchors graph or Cascade work." },
58618
58644
  { "id": "compass.reject_draft", "namespace": "compass", "action": "reject_draft", "title": "Reject Compass draft", "description": "Reject and remove a draft Compass version.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "draft_id", "flag": "draft-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Reject Compass drafts when the direction, language, or company intent is not ready to anchor implementation." },
58619
- { "id": "compass.set", "namespace": "compass", "action": "set", "title": "Set Compass", "description": "Compatibility command for the DER-626 MCP Compass tool.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "draft_id", "flag": "draft-id", "type": "string", "required": false }, { "name": "approve", "flag": "approve", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Set Compass drafts in the product's own vocabulary and approve only with explicit human confirmation." },
58645
+ { "id": "compass.set", "namespace": "compass", "action": "set", "title": "Set Compass", "description": "Compatibility command for the DER-626 MCP Compass tool.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "draft_id", "flag": "draft-id", "type": "string", "required": false }, { "name": "approve", "flag": "approve", "type": "boolean", "required": false }], "hasComplexInput": true, "bootstrapStage": true, "help": "Set Compass drafts in the product's own vocabulary and approve only with explicit human confirmation." },
58620
58646
  { "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." },
58621
58647
  { "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." },
58622
58648
  { "id": "confirmation.activation_set.list", "namespace": "confirmation", "action": "activation_set.list", "title": "List activation approval sets", "description": "List agent-authored activation confirmation sets that the caller can review.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Review the routine activation confirmations from one implementation run before approving them in dependency order. Sensitive, dangerous, and previously-failed confirmations are not in this set \u2014 they stay in the general confirmation list (confirmation.list) and are approved individually. Each redacted_args is a partial projection of the proposal: content may be omitted, and no surface today renders it in full." },
@@ -58695,15 +58721,15 @@ var COMMAND_MANIFEST = [
58695
58721
  { "id": "notification.settings.get", "namespace": "notification", "action": "settings.get", "title": "Get notification settings", "description": "Read tenant notification preferences (escalations, Sync brief, default channel).", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Read notification preferences before changing escalation or Sync brief delivery." },
58696
58722
  { "id": "notification.settings.update", "namespace": "notification", "action": "settings.update", "title": "Update notification settings", "description": "Update tenant notification preferences.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "escalations_enabled", "flag": "escalations-enabled", "type": "boolean", "required": false }, { "name": "sync_brief_enabled", "flag": "sync-brief-enabled", "type": "boolean", "required": false }, { "name": "default_channel", "flag": "default-channel", "type": "enum", "required": false, "enumValues": ["slack", "email", "in_app"] }], "hasComplexInput": false, "help": "Update notification preferences for escalations, Sync briefs, and the default channel." },
58697
58723
  { "id": "notification.test", "namespace": "notification", "action": "test", "title": "Send test notification", "description": "Emit an in-app test notification to the acting human to verify delivery is wired.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Send an in-app test notification to confirm the delivery path is wired." },
58698
- { "id": "onboarding.activate", "namespace": "onboarding", "action": "activate", "title": "Activate onboarding agents", "description": "Stage one owner approval to activate every agent in an applied onboarding receipt and complete onboarding atomically.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "idempotency_key", "flag": "idempotency-key", "type": "string", "required": true }, { "name": "setup_application_id", "flag": "setup-application-id", "type": "string", "required": true }, { "name": "expected_input_digest", "flag": "expected-input-digest", "type": "string", "required": true }, { "name": "expected_receipt_revision", "flag": "expected-receipt-revision", "type": "integer", "required": true }, { "name": "terminal_rehearsal_batch_receipt_id", "flag": "terminal-rehearsal-batch-receipt-id", "type": "string", "required": true }], "hasComplexInput": true, "help": "After a terminal all-passed onboarding rehearsal, submit its exact batch receipt, per-agent run IDs, and configuration digests. One owner approval activates the entire group and completes onboarding atomically." },
58699
- { "id": "onboarding.advance_step", "namespace": "onboarding", "action": "advance_step", "title": "Advance onboarding step", "description": "Persist the current onboarding step after server-side validation.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "step", "flag": "step", "type": "string", "required": true }, { "name": "completed", "flag": "completed", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Advance onboarding only after the current setup step is represented in the tenant state." },
58724
+ { "id": "onboarding.activate", "namespace": "onboarding", "action": "activate", "title": "Activate onboarding agents", "description": "Stage one owner approval to activate every agent in an applied onboarding receipt and complete onboarding atomically.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "idempotency_key", "flag": "idempotency-key", "type": "string", "required": true }, { "name": "setup_application_id", "flag": "setup-application-id", "type": "string", "required": true }, { "name": "expected_input_digest", "flag": "expected-input-digest", "type": "string", "required": true }, { "name": "expected_receipt_revision", "flag": "expected-receipt-revision", "type": "integer", "required": true }, { "name": "terminal_rehearsal_batch_receipt_id", "flag": "terminal-rehearsal-batch-receipt-id", "type": "string", "required": true }], "hasComplexInput": true, "bootstrapStage": true, "help": "After a terminal all-passed onboarding rehearsal, submit its exact batch receipt, per-agent run IDs, and configuration digests. One owner approval activates the entire group and completes onboarding atomically." },
58725
+ { "id": "onboarding.advance_step", "namespace": "onboarding", "action": "advance_step", "title": "Advance onboarding step", "description": "Persist the current onboarding step after server-side validation.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "step", "flag": "step", "type": "enum", "required": true, "enumValues": ["setup_path", "company_basics", "how_it_works", "compass_context", "org_intake", "charters_preview", "sync_rhythm", "invite_team", "staff_agent", "finish"] }, { "name": "completed", "flag": "completed", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Advance onboarding only after the current setup step is represented in the tenant state." },
58700
58726
  { "id": "onboarding.attach_reference", "namespace": "onboarding", "action": "attach_reference", "title": "Attach reference document", "description": "Attach a company reference document (text/markdown) so Compass and Charters can cite it. Reference-only \u2014 it does not build a Compass; convert each meaningful doc to markdown and attach it with a title, kind, and source.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "text", "flag": "text", "type": "string", "required": true }, { "name": "filename", "flag": "filename", "type": "string", "required": false }, { "name": "mime_type", "flag": "mime-type", "type": "enum", "required": false, "enumValues": ["text/plain", "text/markdown", "text/csv"] }, { "name": "title", "flag": "title", "type": "string", "required": false }, { "name": "kind", "flag": "kind", "type": "enum", "required": false, "enumValues": ["plan", "financial", "org_chart", "process"] }, { "name": "source", "flag": "source", "type": "string", "required": false }], "hasComplexInput": false, "help": "Convert each meaningful company doc to markdown and attach it as a reference (title, kind, source) so Compass and Charters can cite it; this attaches a reference, it does not build a Compass \u2014 author Compass directly.", "example": { "text": "# Company handbook\n\nWe build precision components for the aerospace supply chain.", "filename": "handbook.md", "mime_type": "text/markdown", "title": "Company handbook", "kind": "plan", "source": "handbook/overview.md" } },
58701
58727
  { "id": "onboarding.create_invite", "namespace": "onboarding", "action": "create_invite", "title": "Create onboarding invite", "description": "Create a pending invite for an onboarding team member.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "email", "flag": "email", "type": "string", "required": true }, { "name": "role", "flag": "role", "type": "enum", "required": false, "enumValues": ["owner", "admin", "steward", "member"] }], "hasComplexInput": true, "help": "Invites should give humans access to the company without assigning work directly to people instead of seats." },
58702
- { "id": "onboarding.finish", "namespace": "onboarding", "action": "finish", "title": "Finish onboarding", "description": "Mark onboarding complete after the existing onboarding requirements pass.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Finish onboarding when the graph, at least one Charter, and the first operating rhythm are clear." },
58728
+ { "id": "onboarding.finish", "namespace": "onboarding", "action": "finish", "title": "Finish onboarding", "description": "Mark onboarding complete after the existing onboarding requirements pass.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "bootstrapStage": true, "help": "Finish onboarding when the graph, at least one Charter, and the first operating rhythm are clear." },
58703
58729
  { "id": "onboarding.rehearse", "namespace": "onboarding", "action": "rehearse", "title": "Rehearse onboarding agents", "description": "Run the exact setup receipt's agents through a resumable sandbox-only rehearsal batch. Returns immutable evidence and never stages activation.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "idempotency_key", "flag": "idempotency-key", "type": "string", "required": true }, { "name": "setup_application_id", "flag": "setup-application-id", "type": "string", "required": true }, { "name": "expected_input_digest", "flag": "expected-input-digest", "type": "string", "required": true }, { "name": "expected_receipt_revision", "flag": "expected-receipt-revision", "type": "integer", "required": true }], "hasComplexInput": false, "help": "Run the exact setup receipt's agents through the sandbox-only rehearsal batch. It returns immutable terminal evidence and never stages activation, arms schedules, accesses credentials, or sends externally." },
58704
58730
  { "id": "onboarding.resume", "namespace": "onboarding", "action": "resume", "title": "Onboard resume", "description": "Return the onboarding resume state: path choice, pending setup, and the next step.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Resume an in-progress onboarding session from the implementation bootstrap principal; reports path choice, pending setup, and the next step." },
58705
58731
  { "id": "onboarding.select_path", "namespace": "onboarding", "action": "select_path", "title": "Select onboarding path", "description": "Record whether this company continues guided onboarding or hands setup to an agent (agent-led). Human-only (web UI or CLI), not an MCP tool. Never marks onboarding complete or grants any authority.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": false, "fields": [{ "name": "path", "flag": "path", "type": "enum", "required": true, "enumValues": ["guided", "agent_led"] }], "hasComplexInput": false, "help": "Records whether the owner continues guided onboarding or hands setup to an agent (agent-led). Owner-only; it never marks onboarding complete or grants authority." },
58706
- { "id": "onboarding.setup", "namespace": "onboarding", "action": "setup", "title": "Apply onboarding setup", "description": "Stage one owner approval for a complete declarative onboarding setup. Approval applies the plan atomically without invites, credentials, external messages, or go-live.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "schema_version", "flag": "schema-version", "type": "number", "required": true }, { "name": "idempotency_key", "flag": "idempotency-key", "type": "string", "required": true }, { "name": "company_name", "flag": "company-name", "type": "string", "required": true }, { "name": "sync_brief_scope", "flag": "sync-brief-scope", "type": "enum", "required": true, "enumValues": ["company_wide", "per_cluster"] }, { "name": "managed_inference_hard_cap_usd", "flag": "managed-inference-hard-cap-usd", "type": "string", "required": false }], "hasComplexInput": true, "help": "Submit the complete declarative setup plan once. It stages one owner confirmation and applies the approved plan atomically without invites, credentials, external messages, or go-live." },
58732
+ { "id": "onboarding.setup", "namespace": "onboarding", "action": "setup", "title": "Apply onboarding setup", "description": "Stage one owner approval for a complete declarative onboarding setup. Approval applies the plan atomically without invites, credentials, external messages, or go-live.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "schema_version", "flag": "schema-version", "type": "number", "required": true }, { "name": "idempotency_key", "flag": "idempotency-key", "type": "string", "required": true }, { "name": "company_name", "flag": "company-name", "type": "string", "required": true }, { "name": "sync_brief_scope", "flag": "sync-brief-scope", "type": "enum", "required": true, "enumValues": ["company_wide", "per_cluster"] }, { "name": "managed_inference_hard_cap_usd", "flag": "managed-inference-hard-cap-usd", "type": "string", "required": false }], "hasComplexInput": true, "bootstrapStage": true, "help": "Submit the complete declarative setup plan once. It stages one owner confirmation and applies the approved plan atomically without invites, credentials, external messages, or go-live." },
58707
58733
  { "id": "onboarding.source_ingest", "namespace": "onboarding", "action": "source_ingest", "title": "Ingest onboarding source", "description": "Retain one bounded setup source under the exact tenant and implementation run.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "source_key", "flag": "source-key", "type": "string", "required": true }, { "name": "kind", "flag": "kind", "type": "enum", "required": true, "enumValues": ["org_chart", "signal_export", "goal_export", "friction_export", "meeting_export", "other"] }, { "name": "title", "flag": "title", "type": "string", "required": true }, { "name": "content_base64", "flag": "content-base64", "type": "string", "required": true }], "hasComplexInput": false, "help": "Ingest one bounded CSV source into encrypted tenant/run-bound retained storage. The server computes its digest and canonical family manifest; paths, URLs, and client digests are not accepted." },
58708
58734
  { "id": "onboarding.status", "namespace": "onboarding", "action": "status", "title": "Onboard status", "description": "Return current onboarding progress, graph summary, and the next recommended actions.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Start by checking onboarding status, then use the implementation method guide to choose the next setup step." },
58709
58735
  { "id": "onboarding.upload_context", "namespace": "onboarding", "action": "upload_context", "title": "Upload org context", "description": "Compatibility alias for onboarding.attach_reference: attach a company reference document (text/markdown) that Compass and Charters can cite. Reference-only \u2014 it does not build a Compass.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "text", "flag": "text", "type": "string", "required": true }, { "name": "filename", "flag": "filename", "type": "string", "required": false }, { "name": "mime_type", "flag": "mime-type", "type": "enum", "required": false, "enumValues": ["text/plain", "text/markdown", "text/csv"] }, { "name": "title", "flag": "title", "type": "string", "required": false }, { "name": "kind", "flag": "kind", "type": "enum", "required": false, "enumValues": ["plan", "financial", "org_chart", "process"] }, { "name": "source", "flag": "source", "type": "string", "required": false }], "hasComplexInput": false, "help": "Compatibility alias for onboarding.attach_reference: attach a company reference document so Compass and Charters can cite it. It does not build a Compass.", "example": { "text": "# Company handbook\n\nWe build precision components for the aerospace supply chain.", "filename": "handbook.md", "mime_type": "text/markdown", "title": "Company handbook", "kind": "plan", "source": "handbook/overview.md" } },
@@ -58715,7 +58741,7 @@ var COMMAND_MANIFEST = [
58715
58741
  { "id": "runner.status", "namespace": "runner", "action": "status", "title": "Runner status", "description": "Read a single runner's capability and online/offline/revoked state.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "runner_id", "flag": "runner-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Check a runner's capability and heartbeat state when diagnosing offline work." },
58716
58742
  { "id": "scorecard.grid", "namespace": "scorecard", "action": "grid", "title": "Read the scorecard grid", "description": "Return the leadership scorecard trailing grid: rows are measurables of a cadence (default weekly), columns are the trailing N periods with a colour-coded cell per period, plus the computed Org-Checkup system-health measurables. Seat-scoped callers see only their own seat.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "cadence", "flag": "cadence", "type": "enum", "required": false, "enumValues": ["daily", "weekly", "monthly", "quarterly", "annual"] }, { "name": "trailing", "flag": "trailing", "type": "integer", "required": false }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "as_of", "flag": "as-of", "type": "string", "required": false }], "hasComplexInput": false, "help": "Read the leadership scorecard trailing grid (rows = measurables of a cadence, columns = trailing periods, colour-coded cells) plus the computed Org-Checkup system-health measurables. Keep exception-first as the default view." },
58717
58743
  { "id": "seat.create", "namespace": "seat", "action": "create", "title": "Create seat", "description": "Create a Responsibility Graph seat.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "name", "flag": "name", "type": "string", "required": true }, { "name": "parent_seat_id", "flag": "parent-seat-id", "type": "string", "required": false }, { "name": "seat_type", "flag": "seat-type", "type": "enum", "required": false, "enumValues": ["human", "agent", "hybrid"] }], "hasComplexInput": false, "help": "Create seats from functions before assigning people or agents." },
58718
- { "id": "seat.create_complete", "namespace": "seat", "action": "create_complete", "title": "Create complete seat", "description": "Create a Seat with its Charter, disclosed staffing, and optional dry-run agent shell after owner confirmation.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "idempotency_key", "flag": "idempotency-key", "type": "string", "required": true }], "hasComplexInput": true, "help": "Submit one complete Seat proposal with its Charter, disclosed staffing, and optional dry-run agent configuration. Read the exact schema first; the command stages one owner confirmation, never goes live, and applies every approved effect atomically." },
58744
+ { "id": "seat.create_complete", "namespace": "seat", "action": "create_complete", "title": "Create complete seat", "description": "Create a Seat with its Charter, disclosed staffing, and optional dry-run agent shell after owner confirmation.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "idempotency_key", "flag": "idempotency-key", "type": "string", "required": true }], "hasComplexInput": true, "bootstrapStage": true, "help": "Submit one complete Seat proposal with its Charter, disclosed staffing, and optional dry-run agent configuration. Read the exact schema first; the command stages one owner confirmation, never goes live, and applies every approved effect atomically." },
58719
58745
  { "id": "seat.decommission", "namespace": "seat", "action": "decommission", "title": "Decommission seat", "description": "Retire a seat: end occupancies, archive the active charter, revoke seat tokens/credentials, cancel schedules, and emit a tombstone event. Blocks if it would leave another live agent without a human steward chain.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Retiring a seat ends occupancies, archives the active Charter, revokes seat tokens and credentials, and emits a tombstone event. No-orphan guarded. To retire only the agent and keep the seat, use agent.decommission." },
58720
58746
  { "id": "seat.decommission_preview", "namespace": "seat", "action": "decommission_preview", "title": "Preview seat decommission", "description": "Show exactly what retiring a seat would end, revoke, archive, or expire without mutating state. The no-orphan steward guard is still checked when the real decommission executes.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Preview the occupancies, agents, Charter versions, tokens, credentials, work orders, and schedules that seat.decommission would affect without mutating state." },
58721
58747
  { "id": "seat.get", "namespace": "seat", "action": "get", "title": "Get seat detail", "description": "Return seat profile, steward chain, occupancy, Charter ids, agent status, token metadata, and open-work counts.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Inspect a seat's Charter ids, steward chain, occupancy, agent status, token metadata, and open-work counts before acting on it." },
@@ -58849,6 +58875,183 @@ var COMMAND_MANIFEST = [
58849
58875
  { "id": "work.record", "namespace": "work", "action": "record", "title": "Record work", "description": "Append one or more structured business-activity records to the agent work ledger for the acting seat. Batch-accepting, append-only, secret-redacted, and idempotent on dedup_key. Corrections are superseding records.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": true, "help": "Append structured business-activity records (verb + entity refs + outcome + evidence) to the seat's work ledger, in a batch, right after each action succeeds." }
58850
58876
  ];
58851
58877
 
58878
+ // src/generator/runtime.ts
58879
+ var UsageError = class extends Error {
58880
+ };
58881
+ var SECRET_ARGV_GUIDANCE = "This command stores a secret and cannot accept it from the command line. Provide the secret through the vault-backed flow \u2014 web Settings or the integration connect flow \u2014 never as a CLI argument (a flag, --input, or --json body would expose it in shell history and process arguments).";
58882
+ function parseFlags(args, booleanFlags = /* @__PURE__ */ new Set()) {
58883
+ const values = /* @__PURE__ */ new Map();
58884
+ const flags = /* @__PURE__ */ new Set();
58885
+ let json2 = false;
58886
+ let seat;
58887
+ for (let index = 0; index < args.length; index += 1) {
58888
+ const token = args[index];
58889
+ if (token === void 0) {
58890
+ continue;
58891
+ }
58892
+ if (!token.startsWith("--")) {
58893
+ throw new UsageError(`Unexpected argument: ${token}`);
58894
+ }
58895
+ const key = token.slice(2);
58896
+ if (key === "json") {
58897
+ json2 = true;
58898
+ continue;
58899
+ }
58900
+ if (key === "seat") {
58901
+ const next2 = args[index + 1];
58902
+ if (next2 === void 0 || next2.startsWith("--")) {
58903
+ throw new UsageError("Missing required --seat value.");
58904
+ }
58905
+ seat = next2;
58906
+ index += 1;
58907
+ continue;
58908
+ }
58909
+ if (booleanFlags.has(key)) {
58910
+ flags.add(key);
58911
+ continue;
58912
+ }
58913
+ const next = args[index + 1];
58914
+ if (next === void 0 || next.startsWith("--")) {
58915
+ flags.add(key);
58916
+ continue;
58917
+ }
58918
+ values.set(key, next);
58919
+ index += 1;
58920
+ }
58921
+ return { json: json2, ...seat === void 0 ? {} : { seat }, values, flags };
58922
+ }
58923
+ function requireValue2(parsed, key) {
58924
+ const value = parsed.values.get(key);
58925
+ if (value === void 0 || value.length === 0) {
58926
+ throw new UsageError(`Missing required --${key} value.`);
58927
+ }
58928
+ return value;
58929
+ }
58930
+ function optionalValue(parsed, key) {
58931
+ const value = parsed.values.get(key);
58932
+ return value === void 0 || value.length === 0 ? void 0 : value;
58933
+ }
58934
+ function parseNumber(parsed, key, options) {
58935
+ const raw = parsed.values.get(key);
58936
+ if (raw === void 0 || raw.length === 0) {
58937
+ if (options.required) {
58938
+ throw new UsageError(`Missing required --${key} value.`);
58939
+ }
58940
+ return void 0;
58941
+ }
58942
+ const parsedNumber = Number(raw);
58943
+ if (!Number.isFinite(parsedNumber)) {
58944
+ throw new UsageError(`--${key} must be a finite number.`);
58945
+ }
58946
+ return parsedNumber;
58947
+ }
58948
+ function parseList(parsed, key) {
58949
+ const raw = parsed.values.get(key);
58950
+ if (raw === void 0 || raw.length === 0) {
58951
+ return void 0;
58952
+ }
58953
+ return raw.split(",").map((entry) => entry.trim()).filter((entry) => entry.length > 0);
58954
+ }
58955
+ function withOptional(base, extra) {
58956
+ const next = { ...base };
58957
+ for (const [key, value] of Object.entries(extra)) {
58958
+ if (value !== void 0) {
58959
+ next[key] = value;
58960
+ }
58961
+ }
58962
+ return next;
58963
+ }
58964
+ function asRecord2(value) {
58965
+ return typeof value === "object" && value !== null ? value : {};
58966
+ }
58967
+ function asArray(value) {
58968
+ return Array.isArray(value) ? value : [];
58969
+ }
58970
+ function field2(record2, key) {
58971
+ const value = record2[key];
58972
+ if (value === null || value === void 0) {
58973
+ return "\u2014";
58974
+ }
58975
+ return String(value);
58976
+ }
58977
+ function usageWithSchemaFooter(usage2, bin) {
58978
+ return `${usage2}
58979
+ discover a command's exact input with: ${bin} command schema <id>`;
58980
+ }
58981
+ async function dispatch(context, group, args, actions, usage2) {
58982
+ const usageText = usageWithSchemaFooter(usage2, context.binName);
58983
+ const action = args[0];
58984
+ if (action === "--help" || action === "-h" || action === "help") {
58985
+ context.io.stdout.write(`${usageText}
58986
+ `);
58987
+ return 0;
58988
+ }
58989
+ const handler = action === void 0 ? void 0 : actions[action];
58990
+ if (!handler) {
58991
+ context.io.stderr.write(`${usageText}
58992
+ `);
58993
+ return 1;
58994
+ }
58995
+ try {
58996
+ return await handler(context, args.slice(1));
58997
+ } catch (error51) {
58998
+ if (error51 instanceof UsageError) {
58999
+ context.io.stderr.write(`${error51.message}
59000
+ ${usageText}
59001
+ `);
59002
+ return 1;
59003
+ }
59004
+ throw error51;
59005
+ }
59006
+ }
59007
+ function execute(context, parsed, commandId, body, format) {
59008
+ const autoConfirm = parsed.flags.has("yes") || parsed.flags.has("y");
59009
+ const options = {
59010
+ ...parsed.seat === void 0 ? {} : { targetSeatId: parsed.seat },
59011
+ ...autoConfirm ? { autoConfirm: true } : {}
59012
+ };
59013
+ if (parsed.json) {
59014
+ return context.run(context.client, commandId, body, void 0, options);
59015
+ }
59016
+ return context.run(context.client, commandId, body, format, options);
59017
+ }
59018
+ var STAGE_CLASS_COMMAND_IDS = new Set(
59019
+ COMMAND_MANIFEST.filter((entry) => entry.bootstrapStage === true).map((entry) => entry.id)
59020
+ );
59021
+ function isStageClassCommand(commandId) {
59022
+ return STAGE_CLASS_COMMAND_IDS.has(commandId);
59023
+ }
59024
+ function stagedConfirmationFromError(commandId, error51) {
59025
+ if (!isStageClassCommand(commandId)) {
59026
+ return null;
59027
+ }
59028
+ if (!(error51 instanceof CommandClientError) || !error51.response || error51.response.ok || error51.response.error.code !== "COMMAND_CONFIRMATION_REQUIRED") {
59029
+ return null;
59030
+ }
59031
+ const details = error51.response.error.details;
59032
+ if (typeof details !== "object" || details === null) {
59033
+ return null;
59034
+ }
59035
+ const record2 = details;
59036
+ return record2.commandId === commandId ? record2 : null;
59037
+ }
59038
+ function formatStagedConfirmation(commandId, details, overrides = {}) {
59039
+ const headline = overrides.headline ?? (commandId === "seat.create_complete" ? "Seat creation approval is ready." : `${commandId} approval is ready.`);
59040
+ const guidance = overrides.guidance ?? (commandId === "seat.create_complete" ? "After the owner approves, re-run this command with the identical input to read the applied Seat receipt." : void 0);
59041
+ const approveVia = asRecord2(details.approveVia);
59042
+ const lines = [
59043
+ headline,
59044
+ `Confirmation: ${field2(details, "confirmationId")}`
59045
+ ];
59046
+ if (typeof approveVia.webUrl === "string") {
59047
+ lines.push(`Approve once: ${approveVia.webUrl}`);
59048
+ }
59049
+ if (guidance !== void 0) {
59050
+ lines.push(guidance);
59051
+ }
59052
+ return lines.join("\n");
59053
+ }
59054
+
58852
59055
  // src/commands/onboarding.ts
58853
59056
  var REHEARSE_USAGE = `${cliBrand.binName} onboard rehearse --setup-application-id <uuid> --expected-input-digest <sha256:digest> --expected-receipt-revision <integer> --idempotency-key <key> [--json]`;
58854
59057
  var ACTIVATE_USAGE = `${cliBrand.binName} onboard activate --setup-application-id <uuid> --expected-input-digest <sha256:digest> --expected-receipt-revision <integer> --terminal-rehearsal-batch-receipt-id <uuid> --rehearsal-runs '<json-array>' --configuration-digests '<json-array>' --idempotency-key <key> [--json]`;
@@ -58896,9 +59099,9 @@ async function executeOnboardingInvocation(invocation, io, client, options = {})
58896
59099
  `);
58897
59100
  return 0;
58898
59101
  } catch (error51) {
58899
- const staged = stagedSetupConfirmationFromError(invocation, error51);
59102
+ const staged = stagedConfirmationFromError(invocation.commandId, error51);
58900
59103
  if (staged !== null) {
58901
- io.stdout.write(`${invocation.json ? JSON.stringify(staged, null, 2) : formatStagedSetupConfirmation(invocation.action, staged)}
59104
+ io.stdout.write(`${invocation.json ? JSON.stringify(staged, null, 2) : formatStagedOnboardingConfirmation(invocation, staged)}
58902
59105
  `);
58903
59106
  return 0;
58904
59107
  }
@@ -58947,33 +59150,27 @@ async function resolveOnboardingInvocationFiles(invocation, readFileImpl = readF
58947
59150
  delete invocation.inputFile;
58948
59151
  }
58949
59152
  }
58950
- function stagedSetupConfirmationFromError(invocation, error51) {
58951
- if (invocation.action !== "setup" && invocation.action !== "setup-status") {
58952
- return null;
58953
- }
58954
- if (!(error51 instanceof CommandClientError) || !error51.response || error51.response.ok || error51.response.error.code !== "COMMAND_CONFIRMATION_REQUIRED") {
58955
- return null;
59153
+ function formatStagedOnboardingConfirmation(invocation, details) {
59154
+ const action = invocation.action;
59155
+ if (action === "setup-status") {
59156
+ return formatStagedConfirmation("onboarding.setup", details, {
59157
+ headline: "Onboarding setup approval is pending. The URL below is the current card: an identical still-valid card is reused as-is; if live state moved, the stale card was superseded and this fresh one minted.",
59158
+ guidance: "After the owner approves, re-run this command with the identical plan to read the immutable setup receipt."
59159
+ });
58956
59160
  }
58957
- const details = error51.response.error.details;
58958
- if (typeof details !== "object" || details === null) {
58959
- return null;
59161
+ if (action === "setup") {
59162
+ return formatStagedConfirmation("onboarding.setup", details, {
59163
+ headline: "Onboarding setup approval is ready.",
59164
+ guidance: "After the owner approves, re-run this command with the identical plan to read the immutable setup receipt."
59165
+ });
58960
59166
  }
58961
- const record2 = details;
58962
- return record2.commandId === invocation.commandId ? record2 : null;
58963
- }
58964
- function formatStagedSetupConfirmation(action, details) {
58965
- const approveVia = asRecord2(details.approveVia);
58966
- const lines = [
58967
- action === "setup-status" ? "Onboarding setup approval is pending. The URL below is the current card: an identical still-valid card is reused as-is; if live state moved, the stale card was superseded and this fresh one minted." : "Onboarding setup approval is ready.",
58968
- `Confirmation: ${field2(details, "confirmationId")}`
58969
- ];
58970
- if (typeof approveVia.webUrl === "string") {
58971
- lines.push(`Approve once: ${approveVia.webUrl}`);
59167
+ if (action === "activate") {
59168
+ return formatStagedConfirmation("onboarding.activate", details, {
59169
+ headline: "Onboarding activation approval is ready.",
59170
+ guidance: "After the owner approves, re-run this command with the identical evidence to read the activation receipt."
59171
+ });
58972
59172
  }
58973
- lines.push(
58974
- "After the owner approves, re-run this command with the identical plan to read the immutable setup receipt."
58975
- );
58976
- return lines.join("\n");
59173
+ return formatStagedConfirmation(invocation.commandId, details);
58977
59174
  }
58978
59175
  function parseSetupPlanJson(text, flag) {
58979
59176
  let parsed;
@@ -59213,73 +59410,66 @@ function parseJsonArrayFlag(flag, value) {
59213
59410
  }
59214
59411
  }
59215
59412
  function formatActivationOutput(output) {
59216
- const record2 = asRecord2(output);
59217
- const approveVia = asRecord2(record2.approveVia);
59218
- if (typeof approveVia.webUrl === "string") {
59219
- return [
59220
- "Onboarding activation approval is ready.",
59221
- `Approve once: ${approveVia.webUrl}`
59222
- ].join("\n");
59223
- }
59224
- const receipt = asRecord2(record2.receipt);
59413
+ const record2 = asRecord3(output);
59414
+ const receipt = asRecord3(record2.receipt);
59225
59415
  const agents = Array.isArray(receipt.agents) ? receipt.agents : [];
59226
59416
  if (record2.status === "activated") {
59227
59417
  return [
59228
59418
  "Onboarding activation completed.",
59229
- `Activation receipt: ${field2(receipt, "activation_receipt_id")}`,
59419
+ `Activation receipt: ${field3(receipt, "activation_receipt_id")}`,
59230
59420
  `Agents live: ${agents.length} of ${agents.length}`,
59231
- `Onboarding completed: ${field2(receipt, "onboarding_completed_at")}`
59421
+ `Onboarding completed: ${field3(receipt, "onboarding_completed_at")}`
59232
59422
  ].join("\n");
59233
59423
  }
59234
59424
  return JSON.stringify(output, null, 2);
59235
59425
  }
59236
59426
  function formatSourceIngestOutput(output) {
59237
- const record2 = asRecord2(output);
59238
- const descriptor = asRecord2(record2.descriptor);
59427
+ const record2 = asRecord3(output);
59428
+ const descriptor = asRecord3(record2.descriptor);
59239
59429
  const families = Array.isArray(descriptor.family_manifest) ? descriptor.family_manifest : [];
59240
59430
  return [
59241
59431
  "Source retained for this run.",
59242
- `Upload: ${field2(record2, "source_upload_id")}`,
59243
- `SHA-256: ${field2(descriptor, "sha256")}`,
59244
- `Bytes: ${field2(descriptor, "byte_count")}`,
59432
+ `Upload: ${field3(record2, "source_upload_id")}`,
59433
+ `SHA-256: ${field3(descriptor, "sha256")}`,
59434
+ `Bytes: ${field3(descriptor, "byte_count")}`,
59245
59435
  ...families.map((entry) => {
59246
- const item = asRecord2(entry);
59247
- return `- ${field2(item, "family")}: ${field2(item, "input_count")} rows`;
59436
+ const item = asRecord3(entry);
59437
+ return `- ${field3(item, "family")}: ${field3(item, "input_count")} rows`;
59248
59438
  }),
59249
59439
  "Reference it from the setup plan's sources[] via the returned source_ref (run with --json to capture it verbatim)."
59250
59440
  ].join("\n");
59251
59441
  }
59252
59442
  function formatAppliedSetupOutput(output) {
59253
- const record2 = asRecord2(output);
59443
+ const record2 = asRecord3(output);
59254
59444
  if (typeof record2.application_id !== "string") {
59255
59445
  return JSON.stringify(output, null, 2);
59256
59446
  }
59257
- const receipt = asRecord2(record2.receipt);
59258
- const digests = asRecord2(receipt.digests);
59447
+ const receipt = asRecord3(record2.receipt);
59448
+ const digests = asRecord3(receipt.digests);
59259
59449
  return [
59260
59450
  "Onboarding setup is applied.",
59261
- `Setup application: ${field2(record2, "application_id")}`,
59262
- `Receipt revision: ${field2(receipt, "receipt_revision")}`,
59263
- `Input digest: ${field2(digests, "input")}`,
59264
- `Next: ${cliBrand.binName} onboard rehearse --setup-application-id ${field2(record2, "application_id")} --expected-input-digest ${field2(digests, "input")} --expected-receipt-revision ${field2(receipt, "receipt_revision")} --idempotency-key <stable-key> --json`
59451
+ `Setup application: ${field3(record2, "application_id")}`,
59452
+ `Receipt revision: ${field3(receipt, "receipt_revision")}`,
59453
+ `Input digest: ${field3(digests, "input")}`,
59454
+ `Next: ${cliBrand.binName} onboard rehearse --setup-application-id ${field3(record2, "application_id")} --expected-input-digest ${field3(digests, "input")} --expected-receipt-revision ${field3(receipt, "receipt_revision")} --idempotency-key <stable-key> --json`
59265
59455
  ].join("\n");
59266
59456
  }
59267
59457
  function formatRehearsalOutput(output) {
59268
- const record2 = asRecord2(output);
59458
+ const record2 = asRecord3(output);
59269
59459
  if (record2.status === "in_progress") {
59270
- const batch = asRecord2(record2.batch);
59460
+ const batch = asRecord3(record2.batch);
59271
59461
  const checkpoints = Array.isArray(record2.checkpoints) ? record2.checkpoints : [];
59272
59462
  const completed = checkpoints.filter((checkpoint) => {
59273
- const status = asRecord2(checkpoint).status;
59463
+ const status = asRecord3(checkpoint).status;
59274
59464
  return status === "passed" || status === "failed";
59275
59465
  }).length;
59276
59466
  return [
59277
59467
  "Onboarding rehearsal is in progress.",
59278
- `Batch: ${field2(batch, "batch_id")}`,
59468
+ `Batch: ${field3(batch, "batch_id")}`,
59279
59469
  `Checkpoints complete: ${completed} of ${checkpoints.length}`,
59280
59470
  ...checkpoints.map((checkpoint) => {
59281
- const item = asRecord2(checkpoint);
59282
- return `- Agent ${field2(item, "agent_id")} / Seat ${field2(item, "seat_id")}: ${field2(item, "status")}`;
59471
+ const item = asRecord3(checkpoint);
59472
+ return `- Agent ${field3(item, "agent_id")} / Seat ${field3(item, "seat_id")}: ${field3(item, "status")}`;
59283
59473
  }),
59284
59474
  "Retry with the same idempotency key to continue this batch."
59285
59475
  ].join("\n");
@@ -59295,10 +59485,10 @@ function formatRehearsalOutput(output) {
59295
59485
  }
59296
59486
  return JSON.stringify(output, null, 2);
59297
59487
  }
59298
- function asRecord2(value) {
59488
+ function asRecord3(value) {
59299
59489
  return typeof value === "object" && value !== null ? value : {};
59300
59490
  }
59301
- function field2(record2, key) {
59491
+ function field3(record2, key) {
59302
59492
  const value = record2[key];
59303
59493
  return typeof value === "string" || typeof value === "number" ? String(value) : "\u2014";
59304
59494
  }
@@ -59585,147 +59775,6 @@ function defaultImplementationAccessDeps(appUrl2) {
59585
59775
  // src/generator/groups.ts
59586
59776
  import { readFileSync as readFileSync2 } from "node:fs";
59587
59777
 
59588
- // src/generator/runtime.ts
59589
- var UsageError = class extends Error {
59590
- };
59591
- var SECRET_ARGV_GUIDANCE = "This command stores a secret and cannot accept it from the command line. Provide the secret through the vault-backed flow \u2014 web Settings or the integration connect flow \u2014 never as a CLI argument (a flag, --input, or --json body would expose it in shell history and process arguments).";
59592
- function parseFlags(args, booleanFlags = /* @__PURE__ */ new Set()) {
59593
- const values = /* @__PURE__ */ new Map();
59594
- const flags = /* @__PURE__ */ new Set();
59595
- let json2 = false;
59596
- let seat;
59597
- for (let index = 0; index < args.length; index += 1) {
59598
- const token = args[index];
59599
- if (token === void 0) {
59600
- continue;
59601
- }
59602
- if (!token.startsWith("--")) {
59603
- throw new UsageError(`Unexpected argument: ${token}`);
59604
- }
59605
- const key = token.slice(2);
59606
- if (key === "json") {
59607
- json2 = true;
59608
- continue;
59609
- }
59610
- if (key === "seat") {
59611
- const next2 = args[index + 1];
59612
- if (next2 === void 0 || next2.startsWith("--")) {
59613
- throw new UsageError("Missing required --seat value.");
59614
- }
59615
- seat = next2;
59616
- index += 1;
59617
- continue;
59618
- }
59619
- if (booleanFlags.has(key)) {
59620
- flags.add(key);
59621
- continue;
59622
- }
59623
- const next = args[index + 1];
59624
- if (next === void 0 || next.startsWith("--")) {
59625
- flags.add(key);
59626
- continue;
59627
- }
59628
- values.set(key, next);
59629
- index += 1;
59630
- }
59631
- return { json: json2, ...seat === void 0 ? {} : { seat }, values, flags };
59632
- }
59633
- function requireValue2(parsed, key) {
59634
- const value = parsed.values.get(key);
59635
- if (value === void 0 || value.length === 0) {
59636
- throw new UsageError(`Missing required --${key} value.`);
59637
- }
59638
- return value;
59639
- }
59640
- function optionalValue(parsed, key) {
59641
- const value = parsed.values.get(key);
59642
- return value === void 0 || value.length === 0 ? void 0 : value;
59643
- }
59644
- function parseNumber(parsed, key, options) {
59645
- const raw = parsed.values.get(key);
59646
- if (raw === void 0 || raw.length === 0) {
59647
- if (options.required) {
59648
- throw new UsageError(`Missing required --${key} value.`);
59649
- }
59650
- return void 0;
59651
- }
59652
- const parsedNumber = Number(raw);
59653
- if (!Number.isFinite(parsedNumber)) {
59654
- throw new UsageError(`--${key} must be a finite number.`);
59655
- }
59656
- return parsedNumber;
59657
- }
59658
- function parseList(parsed, key) {
59659
- const raw = parsed.values.get(key);
59660
- if (raw === void 0 || raw.length === 0) {
59661
- return void 0;
59662
- }
59663
- return raw.split(",").map((entry) => entry.trim()).filter((entry) => entry.length > 0);
59664
- }
59665
- function withOptional(base, extra) {
59666
- const next = { ...base };
59667
- for (const [key, value] of Object.entries(extra)) {
59668
- if (value !== void 0) {
59669
- next[key] = value;
59670
- }
59671
- }
59672
- return next;
59673
- }
59674
- function asRecord3(value) {
59675
- return typeof value === "object" && value !== null ? value : {};
59676
- }
59677
- function asArray(value) {
59678
- return Array.isArray(value) ? value : [];
59679
- }
59680
- function field3(record2, key) {
59681
- const value = record2[key];
59682
- if (value === null || value === void 0) {
59683
- return "\u2014";
59684
- }
59685
- return String(value);
59686
- }
59687
- function usageWithSchemaFooter(usage2, bin) {
59688
- return `${usage2}
59689
- discover a command's exact input with: ${bin} command schema <id>`;
59690
- }
59691
- async function dispatch(context, group, args, actions, usage2) {
59692
- const usageText = usageWithSchemaFooter(usage2, context.binName);
59693
- const action = args[0];
59694
- if (action === "--help" || action === "-h" || action === "help") {
59695
- context.io.stdout.write(`${usageText}
59696
- `);
59697
- return 0;
59698
- }
59699
- const handler = action === void 0 ? void 0 : actions[action];
59700
- if (!handler) {
59701
- context.io.stderr.write(`${usageText}
59702
- `);
59703
- return 1;
59704
- }
59705
- try {
59706
- return await handler(context, args.slice(1));
59707
- } catch (error51) {
59708
- if (error51 instanceof UsageError) {
59709
- context.io.stderr.write(`${error51.message}
59710
- ${usageText}
59711
- `);
59712
- return 1;
59713
- }
59714
- throw error51;
59715
- }
59716
- }
59717
- function execute(context, parsed, commandId, body, format) {
59718
- const autoConfirm = parsed.flags.has("yes") || parsed.flags.has("y");
59719
- const options = {
59720
- ...parsed.seat === void 0 ? {} : { targetSeatId: parsed.seat },
59721
- ...autoConfirm ? { autoConfirm: true } : {}
59722
- };
59723
- if (parsed.json) {
59724
- return context.run(context.client, commandId, body, void 0, options);
59725
- }
59726
- return context.run(context.client, commandId, body, format, options);
59727
- }
59728
-
59729
59778
  // src/generator/flags.ts
59730
59779
  var SEAT_FLAG_FILLS_REQUIRED_SEAT_ID = /* @__PURE__ */ new Set([
59731
59780
  "agent.status",
@@ -59923,7 +59972,7 @@ function buildBodyFromFlags(entry, parsed, positional, overrides = {}) {
59923
59972
 
59924
59973
  // src/generator/render.ts
59925
59974
  function markdownLine(output) {
59926
- const markdown = asRecord3(output).markdown;
59975
+ const markdown = asRecord2(output).markdown;
59927
59976
  return typeof markdown === "string" ? markdown : JSON.stringify(output, null, 2);
59928
59977
  }
59929
59978
  function dryRunToolActionLabel(status) {
@@ -59961,28 +60010,28 @@ function dryRunLaneExecutabilityLines(transcript) {
59961
60010
  return [];
59962
60011
  }
59963
60012
  const laneLabel = dryRunLaneLabel(lane);
59964
- const unimplemented = grantedTools.map((tool) => asRecord3(tool)).filter((tool) => tool.executability === "unimplemented_in_lane");
60013
+ const unimplemented = grantedTools.map((tool) => asRecord2(tool)).filter((tool) => tool.executability === "unimplemented_in_lane");
59965
60014
  const warningLines = unimplemented.map(
59966
- (tool) => ` warning: ${field3(tool, "tool_name")} is granted but unimplemented in the ${laneLabel}`
60015
+ (tool) => ` warning: ${field2(tool, "tool_name")} is granted but unimplemented in the ${laneLabel}`
59967
60016
  );
59968
60017
  const verdict = dryRunLaneVerdict(lane, grantedTools.length, unimplemented.length);
59969
60018
  return ["lane executability:", ...warningLines, ` verdict: ${verdict}`];
59970
60019
  }
59971
60020
  function formatDryRunTranscript(value) {
59972
- const transcript = asRecord3(value);
60021
+ const transcript = asRecord2(value);
59973
60022
  const steps = asArray(transcript.steps);
59974
60023
  if (steps.length === 0) {
59975
60024
  return "";
59976
60025
  }
59977
60026
  const lines = steps.map((step) => {
59978
- const record2 = asRecord3(step);
59979
- const kind = field3(record2, "kind");
59980
- const guard = record2.guard === null || record2.guard === void 0 ? "" : ` [${field3(record2, "guard")}]`;
59981
- return ` ${kind}: ${field3(record2, "text")}${guard}`;
60027
+ const record2 = asRecord2(step);
60028
+ const kind = field2(record2, "kind");
60029
+ const guard = record2.guard === null || record2.guard === void 0 ? "" : ` [${field2(record2, "guard")}]`;
60030
+ return ` ${kind}: ${field2(record2, "text")}${guard}`;
59982
60031
  });
59983
60032
  const toolPreview = asArray(transcript.tool_preview).map((action) => {
59984
- const record2 = asRecord3(action);
59985
- return ` ${dryRunToolActionLabel(field3(record2, "status"))}: ${field3(record2, "intended_action")} [${field3(record2, "tool_name")}]`;
60033
+ const record2 = asRecord2(action);
60034
+ return ` ${dryRunToolActionLabel(field2(record2, "status"))}: ${field2(record2, "intended_action")} [${field2(record2, "tool_name")}]`;
59986
60035
  });
59987
60036
  const laneLines = dryRunLaneExecutabilityLines(transcript);
59988
60037
  return [
@@ -60012,9 +60061,9 @@ function renderCommandOutput(output) {
60012
60061
  if (output.length === 0) {
60013
60062
  return "No results.";
60014
60063
  }
60015
- return output.map((entry) => isScalar(entry) ? String(entry) : renderRow(asRecord3(entry))).join("\n");
60064
+ return output.map((entry) => isScalar(entry) ? String(entry) : renderRow(asRecord2(entry))).join("\n");
60016
60065
  }
60017
- const record2 = asRecord3(output);
60066
+ const record2 = asRecord2(output);
60018
60067
  if (typeof record2.markdown === "string") {
60019
60068
  return record2.markdown;
60020
60069
  }
@@ -60025,7 +60074,7 @@ function renderCommandOutput(output) {
60025
60074
  if (list.length === 0) {
60026
60075
  return `No ${humanize(name)}.`;
60027
60076
  }
60028
- return list.map((entry) => isScalar(entry) ? String(entry) : renderRow(asRecord3(entry))).join("\n");
60077
+ return list.map((entry) => isScalar(entry) ? String(entry) : renderRow(asRecord2(entry))).join("\n");
60029
60078
  }
60030
60079
  const lines = [];
60031
60080
  for (const [key, value] of orderedEntries(record2)) {
@@ -60037,11 +60086,11 @@ function renderCommandOutput(output) {
60037
60086
  lines.push(` (none)`);
60038
60087
  } else {
60039
60088
  for (const entry of value) {
60040
- lines.push(` ${isScalar(entry) ? String(entry) : renderRow(asRecord3(entry))}`);
60089
+ lines.push(` ${isScalar(entry) ? String(entry) : renderRow(asRecord2(entry))}`);
60041
60090
  }
60042
60091
  }
60043
60092
  } else {
60044
- lines.push(`${key}: ${renderRow(asRecord3(value))}`);
60093
+ lines.push(`${key}: ${renderRow(asRecord2(value))}`);
60045
60094
  }
60046
60095
  }
60047
60096
  return lines.length > 0 ? lines.join("\n") : JSON.stringify(output, null, 2);
@@ -60207,48 +60256,48 @@ function resolveModelConfig(model, effort) {
60207
60256
  };
60208
60257
  }
60209
60258
  function renderTaskList(output) {
60210
- const tasks = asArray(asRecord3(output).tasks);
60259
+ const tasks = asArray(asRecord2(output).tasks);
60211
60260
  if (tasks.length === 0) {
60212
60261
  return "No tasks in this seat's queue.";
60213
60262
  }
60214
60263
  return tasks.map((task) => {
60215
- const record2 = asRecord3(task);
60216
- return `${field3(record2, "id")} ${field3(record2, "status")} ${field3(record2, "title")}`;
60264
+ const record2 = asRecord2(task);
60265
+ return `${field2(record2, "id")} ${field2(record2, "status")} ${field2(record2, "title")}`;
60217
60266
  }).join("\n");
60218
60267
  }
60219
60268
  function renderTaskAccept(output) {
60220
- const task = asRecord3(asRecord3(output).task);
60221
- return `Accepted task ${field3(task, "id")} (status ${field3(task, "status")}).`;
60269
+ const task = asRecord2(asRecord2(output).task);
60270
+ return `Accepted task ${field2(task, "id")} (status ${field2(task, "status")}).`;
60222
60271
  }
60223
60272
  function renderTaskDecline(output) {
60224
- const task = asRecord3(asRecord3(output).task);
60225
- return `Declined task ${field3(task, "id")} (status ${field3(task, "status")}).`;
60273
+ const task = asRecord2(asRecord2(output).task);
60274
+ return `Declined task ${field2(task, "id")} (status ${field2(task, "status")}).`;
60226
60275
  }
60227
60276
  function renderTaskComplete(output) {
60228
- const record2 = asRecord3(output);
60229
- return `Completed task ${field3(record2, "task_id")} (event ${field3(record2, "event_id")}).`;
60277
+ const record2 = asRecord2(output);
60278
+ return `Completed task ${field2(record2, "task_id")} (event ${field2(record2, "event_id")}).`;
60230
60279
  }
60231
60280
  function renderTaskCreate(output) {
60232
- const record2 = asRecord3(output);
60233
- return `Created task ${field3(record2, "task_id")} for seat ${field3(record2, "owner_seat_id")} (status ${field3(record2, "status")}).`;
60281
+ const record2 = asRecord2(output);
60282
+ return `Created task ${field2(record2, "task_id")} for seat ${field2(record2, "owner_seat_id")} (status ${field2(record2, "status")}).`;
60234
60283
  }
60235
60284
  function renderStatusRecord(output) {
60236
- return `Recorded status event ${field3(asRecord3(output), "event_id")}.`;
60285
+ return `Recorded status event ${field2(asRecord2(output), "event_id")}.`;
60237
60286
  }
60238
60287
  function renderGraph(output) {
60239
- const record2 = asRecord3(output);
60288
+ const record2 = asRecord2(output);
60240
60289
  const nodes = asArray(record2.nodes);
60241
60290
  if (nodes.length === 0) {
60242
60291
  return "No seats in the Responsibility Graph.";
60243
60292
  }
60244
60293
  const lines = [
60245
- `root_seat_id=${field3(record2, "root_seat_id")}`,
60294
+ `root_seat_id=${field2(record2, "root_seat_id")}`,
60246
60295
  "seat_id parent_seat_id type status name"
60247
60296
  ];
60248
60297
  const assigned = [];
60249
60298
  const unassigned = [];
60250
60299
  for (const node of nodes) {
60251
- const row = asRecord3(node);
60300
+ const row = asRecord2(node);
60252
60301
  if (row.unassigned) {
60253
60302
  unassigned.push(row);
60254
60303
  } else {
@@ -60256,47 +60305,47 @@ function renderGraph(output) {
60256
60305
  }
60257
60306
  }
60258
60307
  for (const row of assigned) {
60259
- lines.push(`${field3(row, "seat_id")} ${field3(row, "parent_seat_id")} ${field3(row, "seat_type")} ${field3(row, "status")} ${field3(row, "name")}`);
60308
+ lines.push(`${field2(row, "seat_id")} ${field2(row, "parent_seat_id")} ${field2(row, "seat_type")} ${field2(row, "status")} ${field2(row, "name")}`);
60260
60309
  }
60261
60310
  if (unassigned.length > 0) {
60262
60311
  lines.push("");
60263
60312
  lines.push("Unassigned (no path to root \u2014 data-quality signal)");
60264
60313
  lines.push("seat_id parent_seat_id type status name");
60265
60314
  for (const row of unassigned) {
60266
- lines.push(`${field3(row, "seat_id")} ${field3(row, "parent_seat_id")} ${field3(row, "seat_type")} ${field3(row, "status")} ${field3(row, "name")}`);
60315
+ lines.push(`${field2(row, "seat_id")} ${field2(row, "parent_seat_id")} ${field2(row, "seat_type")} ${field2(row, "status")} ${field2(row, "name")}`);
60267
60316
  }
60268
60317
  }
60269
60318
  return lines.join("\n");
60270
60319
  }
60271
60320
  function renderSeatList(output) {
60272
- const nodes = asArray(asRecord3(output).nodes);
60321
+ const nodes = asArray(asRecord2(output).nodes);
60273
60322
  if (nodes.length === 0) {
60274
60323
  return "No seats.";
60275
60324
  }
60276
60325
  return nodes.map((node) => {
60277
- const row = asRecord3(node);
60278
- return `seat_id=${field3(row, "seat_id")} parent_seat_id=${field3(row, "parent_seat_id")} type=${field3(row, "seat_type")} status=${field3(row, "status")} name=${field3(row, "name")}`;
60326
+ const row = asRecord2(node);
60327
+ return `seat_id=${field2(row, "seat_id")} parent_seat_id=${field2(row, "parent_seat_id")} type=${field2(row, "seat_type")} status=${field2(row, "status")} name=${field2(row, "name")}`;
60279
60328
  }).join("\n");
60280
60329
  }
60281
60330
  function renderSeatDetail(output) {
60282
- const record2 = asRecord3(output);
60283
- const counts = asRecord3(record2.counts);
60331
+ const record2 = asRecord2(output);
60332
+ const counts = asRecord2(record2.counts);
60284
60333
  return [
60285
- `seat_id=${field3(record2, "seat_id")} name=${field3(record2, "name")} type=${field3(record2, "seat_type")} status=${field3(record2, "status")}`,
60286
- `parent_seat_id=${field3(record2, "parent_seat_id")} active_charter_version_id=${field3(record2, "active_charter_version_id")} draft_charter_version_id=${field3(record2, "draft_charter_version_id")}`,
60287
- `agent_status=${field3(record2, "agent_status")} agent_lane=${field3(record2, "agent_lane")}`,
60288
- `counts: open_tasks=${field3(counts, "open_tasks")} owned_goals=${field3(counts, "owned_goals")} active_measurables=${field3(counts, "active_measurables")} open_issues=${field3(counts, "open_issues")}`
60334
+ `seat_id=${field2(record2, "seat_id")} name=${field2(record2, "name")} type=${field2(record2, "seat_type")} status=${field2(record2, "status")}`,
60335
+ `parent_seat_id=${field2(record2, "parent_seat_id")} active_charter_version_id=${field2(record2, "active_charter_version_id")} draft_charter_version_id=${field2(record2, "draft_charter_version_id")}`,
60336
+ `agent_status=${field2(record2, "agent_status")} agent_lane=${field2(record2, "agent_lane")}`,
60337
+ `counts: open_tasks=${field2(counts, "open_tasks")} owned_goals=${field2(counts, "owned_goals")} active_measurables=${field2(counts, "active_measurables")} open_issues=${field2(counts, "open_issues")}`
60289
60338
  ].join("\n");
60290
60339
  }
60291
60340
  function renderSeatMutation(output) {
60292
- return `seat_id=${field3(asRecord3(output), "seat_id")}`;
60341
+ return `seat_id=${field2(asRecord2(output), "seat_id")}`;
60293
60342
  }
60294
60343
  function renderSeatCreate(output) {
60295
- const record2 = asRecord3(output);
60296
- const effect = asRecord3(record2.effect);
60344
+ const record2 = asRecord2(output);
60345
+ const effect = asRecord2(record2.effect);
60297
60346
  const lines = [
60298
- `seat_id=${field3(record2, "seat_id")} status=${field3(record2, "status")}`,
60299
- `effect=${field3(effect, "outcome")} applied=${field3(effect, "applied")} of ${field3(effect, "attempted")}`
60347
+ `seat_id=${field2(record2, "seat_id")} status=${field2(record2, "status")}`,
60348
+ `effect=${field2(effect, "outcome")} applied=${field2(effect, "applied")} of ${field2(effect, "attempted")}`
60300
60349
  ];
60301
60350
  if (record2.status === "vacant") {
60302
60351
  lines.push(
@@ -60306,206 +60355,206 @@ function renderSeatCreate(output) {
60306
60355
  return lines.join("\n");
60307
60356
  }
60308
60357
  function renderSeatDecommissionPreview(output) {
60309
- const record2 = asRecord3(output);
60358
+ const record2 = asRecord2(output);
60310
60359
  const effects = asArray(record2.effects).map((effect) => `- ${String(effect)}`);
60311
60360
  return [
60312
- `seat_id=${field3(record2, "seat_id")} name=${field3(record2, "seat_name")} status=${field3(record2, "previous_status")}`,
60313
- `active_occupancies=${field3(record2, "active_occupancy_count")} active_agents=${field3(record2, "active_agent_ids")}`,
60314
- `active_charters=${field3(record2, "active_charter_count")} mcp_tokens=${field3(record2, "active_mcp_token_count")} credentials=${field3(record2, "active_credential_count")}`,
60315
- `open_work_orders=${field3(record2, "open_work_order_count")} schedules=${field3(record2, "schedule_count")} no_orphan_steward_guard=${field3(record2, "no_orphan_steward_guard")}`,
60361
+ `seat_id=${field2(record2, "seat_id")} name=${field2(record2, "seat_name")} status=${field2(record2, "previous_status")}`,
60362
+ `active_occupancies=${field2(record2, "active_occupancy_count")} active_agents=${field2(record2, "active_agent_ids")}`,
60363
+ `active_charters=${field2(record2, "active_charter_count")} mcp_tokens=${field2(record2, "active_mcp_token_count")} credentials=${field2(record2, "active_credential_count")}`,
60364
+ `open_work_orders=${field2(record2, "open_work_order_count")} schedules=${field2(record2, "schedule_count")} no_orphan_steward_guard=${field2(record2, "no_orphan_steward_guard")}`,
60316
60365
  "effects:",
60317
60366
  ...effects
60318
60367
  ].join("\n");
60319
60368
  }
60320
60369
  function renderSignalList(output) {
60321
- const signals = asArray(asRecord3(output).signals);
60370
+ const signals = asArray(asRecord2(output).signals);
60322
60371
  if (signals.length === 0) {
60323
60372
  return "No Signals defined.";
60324
60373
  }
60325
60374
  return signals.map((signal) => {
60326
- const record2 = asRecord3(signal);
60327
- return `${field3(record2, "measurable_id")} ${field3(record2, "state")} ${field3(record2, "name")} (latest ${field3(record2, "latest_value")} / target ${field3(record2, "target")}, measured by ${field3(record2, "effective_source")})`;
60375
+ const record2 = asRecord2(signal);
60376
+ return `${field2(record2, "measurable_id")} ${field2(record2, "state")} ${field2(record2, "name")} (latest ${field2(record2, "latest_value")} / target ${field2(record2, "target")}, measured by ${field2(record2, "effective_source")})`;
60328
60377
  }).join("\n");
60329
60378
  }
60330
60379
  function renderSignalGet(output) {
60331
- const record2 = asRecord3(output);
60380
+ const record2 = asRecord2(output);
60332
60381
  const readings = asArray(record2.readings);
60333
- const head2 = `${field3(record2, "measurable_id")} ${field3(record2, "state")} ${field3(record2, "name")} (target ${field3(record2, "target")})`;
60382
+ const head2 = `${field2(record2, "measurable_id")} ${field2(record2, "state")} ${field2(record2, "name")} (target ${field2(record2, "target")})`;
60334
60383
  const lines = readings.map((reading) => {
60335
- const r = asRecord3(reading);
60336
- return ` ${field3(r, "reading_id")} ${field3(r, "period_start")} ${field3(r, "value")} confirmed=${field3(r, "confirmed")}`;
60384
+ const r = asRecord2(reading);
60385
+ return ` ${field2(r, "reading_id")} ${field2(r, "period_start")} ${field2(r, "value")} confirmed=${field2(r, "confirmed")}`;
60337
60386
  });
60338
60387
  return [head2, ...lines].join("\n");
60339
60388
  }
60340
60389
  function renderSignalConfirm(output) {
60341
- return `Confirmed reading ${field3(asRecord3(output), "reading_id")}.`;
60390
+ return `Confirmed reading ${field2(asRecord2(output), "reading_id")}.`;
60342
60391
  }
60343
60392
  function renderSignalCorrect(output) {
60344
- const record2 = asRecord3(output);
60345
- return `Corrected reading ${field3(record2, "reading_id")} for measurable ${field3(record2, "measurable_id")} (${field3(record2, "period_start")} = ${field3(record2, "value")}).`;
60393
+ const record2 = asRecord2(output);
60394
+ return `Corrected reading ${field2(record2, "reading_id")} for measurable ${field2(record2, "measurable_id")} (${field2(record2, "period_start")} = ${field2(record2, "value")}).`;
60346
60395
  }
60347
60396
  function renderGoalList(output) {
60348
- const goals = asArray(asRecord3(output).goals);
60397
+ const goals = asArray(asRecord2(output).goals);
60349
60398
  if (goals.length === 0) {
60350
60399
  return "No goals in this Cascade.";
60351
60400
  }
60352
60401
  return goals.map((goal) => {
60353
- const record2 = asRecord3(goal);
60354
- return `${field3(record2, "goal_id")} ${field3(record2, "status")} ${field3(record2, "title")}`;
60402
+ const record2 = asRecord2(goal);
60403
+ return `${field2(record2, "goal_id")} ${field2(record2, "status")} ${field2(record2, "title")}`;
60355
60404
  }).join("\n");
60356
60405
  }
60357
60406
  function renderWarnings(record2) {
60358
60407
  return asArray(record2.warnings).map((warning) => `Warning: ${String(warning)}`);
60359
60408
  }
60360
60409
  function renderGoalCreate(output) {
60361
- const record2 = asRecord3(output);
60410
+ const record2 = asRecord2(output);
60362
60411
  return [
60363
- `Created goal ${field3(record2, "goal_id")} (status ${field3(record2, "status")}).`,
60412
+ `Created goal ${field2(record2, "goal_id")} (status ${field2(record2, "status")}).`,
60364
60413
  ...renderWarnings(record2)
60365
60414
  ].join("\n");
60366
60415
  }
60367
60416
  function renderGoalUpdate(output) {
60368
- const record2 = asRecord3(output);
60417
+ const record2 = asRecord2(output);
60369
60418
  return [
60370
- `Updated goal ${field3(record2, "goal_id")}.`,
60419
+ `Updated goal ${field2(record2, "goal_id")}.`,
60371
60420
  ...renderWarnings(record2)
60372
60421
  ].join("\n");
60373
60422
  }
60374
60423
  function renderGoalStatus(output) {
60375
- const record2 = asRecord3(output);
60376
- return `Goal ${field3(record2, "goal_id")} status set to ${field3(record2, "status")}.`;
60424
+ const record2 = asRecord2(output);
60425
+ return `Goal ${field2(record2, "goal_id")} status set to ${field2(record2, "status")}.`;
60377
60426
  }
60378
60427
  function renderGoalGet(output) {
60379
- const record2 = asRecord3(asRecord3(output).goal);
60428
+ const record2 = asRecord2(asRecord2(output).goal);
60380
60429
  return [
60381
- `${field3(record2, "id")} ${field3(record2, "status")} ${field3(record2, "title")}`,
60382
- `kind: ${field3(record2, "kind")} status source: ${field3(record2, "status_source")}`,
60383
- `progress: ${field3(record2, "progress_pct")}`,
60384
- `definition of done: ${field3(record2, "definition_of_done")}`
60430
+ `${field2(record2, "id")} ${field2(record2, "status")} ${field2(record2, "title")}`,
60431
+ `kind: ${field2(record2, "kind")} status source: ${field2(record2, "status_source")}`,
60432
+ `progress: ${field2(record2, "progress_pct")}`,
60433
+ `definition of done: ${field2(record2, "definition_of_done")}`
60385
60434
  ].join("\n");
60386
60435
  }
60387
60436
  function renderGoalReparent(output) {
60388
- const record2 = asRecord3(output);
60389
- return `Goal ${field3(record2, "goal_id")} reparented under ${field3(record2, "parent_goal_id")}.`;
60437
+ const record2 = asRecord2(output);
60438
+ return `Goal ${field2(record2, "goal_id")} reparented under ${field2(record2, "parent_goal_id")}.`;
60390
60439
  }
60391
60440
  function renderGoalReassignOwner(output) {
60392
- const record2 = asRecord3(output);
60393
- return `Goal ${field3(record2, "goal_id")} owner reassigned to seat ${field3(record2, "seat_id")}.`;
60441
+ const record2 = asRecord2(output);
60442
+ return `Goal ${field2(record2, "goal_id")} owner reassigned to seat ${field2(record2, "seat_id")}.`;
60394
60443
  }
60395
60444
  function renderGoalDrop(output) {
60396
- const record2 = asRecord3(output);
60397
- return `Dropped goal ${field3(record2, "goal_id")} (status ${field3(record2, "status")}).`;
60445
+ const record2 = asRecord2(output);
60446
+ return `Dropped goal ${field2(record2, "goal_id")} (status ${field2(record2, "status")}).`;
60398
60447
  }
60399
60448
  function renderFrictionList(output) {
60400
- const issues = asArray(asRecord3(output).issues);
60449
+ const issues = asArray(asRecord2(output).issues);
60401
60450
  if (issues.length === 0) {
60402
60451
  return "No Friction issues.";
60403
60452
  }
60404
60453
  return issues.map((issue2) => {
60405
- const record2 = asRecord3(issue2);
60406
- return `${field3(record2, "issue_id")} ${field3(record2, "status")} ${field3(record2, "severity")} ${field3(record2, "summary")}`;
60454
+ const record2 = asRecord2(issue2);
60455
+ return `${field2(record2, "issue_id")} ${field2(record2, "status")} ${field2(record2, "severity")} ${field2(record2, "summary")}`;
60407
60456
  }).join("\n");
60408
60457
  }
60409
60458
  function renderFrictionFile(output) {
60410
- const record2 = asRecord3(output);
60411
- return `Filed Friction issue ${field3(record2, "issue_id")} (event ${field3(record2, "event_id")}).`;
60459
+ const record2 = asRecord2(output);
60460
+ return `Filed Friction issue ${field2(record2, "issue_id")} (event ${field2(record2, "event_id")}).`;
60412
60461
  }
60413
60462
  function renderFrictionResolve(output) {
60414
- const record2 = asRecord3(output);
60415
- return `Resolved issue ${field3(record2, "issue_id")} \u2192 action task ${field3(record2, "action_task_id")} (decision ${field3(record2, "decision_id")}).`;
60463
+ const record2 = asRecord2(output);
60464
+ return `Resolved issue ${field2(record2, "issue_id")} \u2192 action task ${field2(record2, "action_task_id")} (decision ${field2(record2, "decision_id")}).`;
60416
60465
  }
60417
60466
  function renderFrictionLink(output) {
60418
- const record2 = asRecord3(output);
60419
- return `Linked task ${field3(record2, "action_task_id")} to issue ${field3(record2, "issue_id")}.`;
60467
+ const record2 = asRecord2(output);
60468
+ return `Linked task ${field2(record2, "action_task_id")} to issue ${field2(record2, "issue_id")}.`;
60420
60469
  }
60421
60470
  function renderFrictionGet(output) {
60422
- const record2 = asRecord3(asRecord3(output).issue);
60471
+ const record2 = asRecord2(asRecord2(output).issue);
60423
60472
  return [
60424
- `${field3(record2, "issue_id")} ${field3(record2, "status")} ${field3(record2, "severity")}`,
60425
- `summary: ${field3(record2, "summary")}`,
60426
- `raised by: ${field3(record2, "raised_by_seat_name")}`,
60427
- `impact score: ${field3(record2, "impact_score")}`,
60428
- `root cause: ${field3(record2, "root_cause")}`,
60429
- `action task: ${field3(record2, "action_task_id")}`
60473
+ `${field2(record2, "issue_id")} ${field2(record2, "status")} ${field2(record2, "severity")}`,
60474
+ `summary: ${field2(record2, "summary")}`,
60475
+ `raised by: ${field2(record2, "raised_by_seat_name")}`,
60476
+ `impact score: ${field2(record2, "impact_score")}`,
60477
+ `root cause: ${field2(record2, "root_cause")}`,
60478
+ `action task: ${field2(record2, "action_task_id")}`
60430
60479
  ].join("\n");
60431
60480
  }
60432
60481
  function renderConfirmationList(output) {
60433
- const confirmations = asArray(asRecord3(output).confirmations);
60482
+ const confirmations = asArray(asRecord2(output).confirmations);
60434
60483
  if (confirmations.length === 0) {
60435
60484
  return "No pending confirmations.";
60436
60485
  }
60437
60486
  return confirmations.map((entry) => {
60438
- const record2 = asRecord3(entry);
60439
- return `${field3(record2, "id")} ${field3(record2, "risk_level")} ${field3(record2, "command_id")} ${field3(record2, "summary")}`;
60487
+ const record2 = asRecord2(entry);
60488
+ return `${field2(record2, "id")} ${field2(record2, "risk_level")} ${field2(record2, "command_id")} ${field2(record2, "summary")}`;
60440
60489
  }).join("\n");
60441
60490
  }
60442
60491
  function safetyRefusalTag(record2) {
60443
60492
  return record2.category === "safety_refusal" ? "[safety refusal] " : "";
60444
60493
  }
60445
60494
  function renderEscalationList(output) {
60446
- const escalations = asArray(asRecord3(output).escalations);
60495
+ const escalations = asArray(asRecord2(output).escalations);
60447
60496
  if (escalations.length === 0) {
60448
60497
  return "No escalations on this steward chain.";
60449
60498
  }
60450
60499
  return escalations.map((escalation) => {
60451
- const record2 = asRecord3(escalation);
60452
- return `${field3(record2, "id")} ${field3(record2, "status")} ${safetyRefusalTag(record2)}${field3(record2, "seat_name")}: ${field3(record2, "reason")}`;
60500
+ const record2 = asRecord2(escalation);
60501
+ return `${field2(record2, "id")} ${field2(record2, "status")} ${safetyRefusalTag(record2)}${field2(record2, "seat_name")}: ${field2(record2, "reason")}`;
60453
60502
  }).join("\n");
60454
60503
  }
60455
60504
  function renderEscalationGet(output) {
60456
- const record2 = asRecord3(asRecord3(output).escalation);
60457
- return `${field3(record2, "id")} ${field3(record2, "status")} ${safetyRefusalTag(record2)}${field3(record2, "seat_name")}
60458
- reason: ${field3(record2, "reason")}
60459
- recommended: ${field3(record2, "recommended_action")}`;
60505
+ const record2 = asRecord2(asRecord2(output).escalation);
60506
+ return `${field2(record2, "id")} ${field2(record2, "status")} ${safetyRefusalTag(record2)}${field2(record2, "seat_name")}
60507
+ reason: ${field2(record2, "reason")}
60508
+ recommended: ${field2(record2, "recommended_action")}`;
60460
60509
  }
60461
60510
  function renderEscalationResolve(output) {
60462
- const record2 = asRecord3(output);
60463
- return `Resolved escalation ${field3(record2, "escalation_id")} (status ${field3(record2, "status")}, decision ${field3(record2, "decision_id")}).`;
60511
+ const record2 = asRecord2(output);
60512
+ return `Resolved escalation ${field2(record2, "escalation_id")} (status ${field2(record2, "status")}, decision ${field2(record2, "decision_id")}).`;
60464
60513
  }
60465
60514
  function renderEscalationReject(output) {
60466
- const record2 = asRecord3(output);
60467
- return `Rejected escalation ${field3(record2, "escalation_id")} (status ${field3(record2, "status")}, decision ${field3(record2, "decision_id")}).`;
60515
+ const record2 = asRecord2(output);
60516
+ return `Rejected escalation ${field2(record2, "escalation_id")} (status ${field2(record2, "status")}, decision ${field2(record2, "decision_id")}).`;
60468
60517
  }
60469
60518
  function renderSyncBrief(output) {
60470
- const record2 = asRecord3(output);
60471
- return `Sync brief ${field3(record2, "sync_brief_id")} (${field3(record2, "period_start")} \u2192 ${field3(record2, "period_end")})
60472
- ${field3(record2, "summary")}`;
60519
+ const record2 = asRecord2(output);
60520
+ return `Sync brief ${field2(record2, "sync_brief_id")} (${field2(record2, "period_start")} \u2192 ${field2(record2, "period_end")})
60521
+ ${field2(record2, "summary")}`;
60473
60522
  }
60474
60523
  function renderSyncCompile(output) {
60475
- const record2 = asRecord3(output);
60476
- return `Compiled sync brief ${field3(record2, "sync_brief_id")} (${field3(record2, "period_start")} \u2192 ${field3(record2, "period_end")}, degraded=${field3(record2, "degraded")}).`;
60524
+ const record2 = asRecord2(output);
60525
+ return `Compiled sync brief ${field2(record2, "sync_brief_id")} (${field2(record2, "period_start")} \u2192 ${field2(record2, "period_end")}, degraded=${field2(record2, "degraded")}).`;
60477
60526
  }
60478
60527
  function renderSyncComplete(output) {
60479
- const record2 = asRecord3(output);
60528
+ const record2 = asRecord2(output);
60480
60529
  const decisions = asArray(record2.decision_ids).length;
60481
60530
  const tasks = asArray(record2.task_ids).length;
60482
- return `Completed sync run for brief ${field3(record2, "sync_brief_id")} (event ${field3(record2, "event_id")}, ${decisions} decisions, ${tasks} tasks).`;
60531
+ return `Completed sync run for brief ${field2(record2, "sync_brief_id")} (event ${field2(record2, "event_id")}, ${decisions} decisions, ${tasks} tasks).`;
60483
60532
  }
60484
60533
  function renderRunnerList(output) {
60485
- const runners = asArray(asRecord3(output).runners);
60534
+ const runners = asArray(asRecord2(output).runners);
60486
60535
  if (runners.length === 0) {
60487
60536
  return "No runners paired.";
60488
60537
  }
60489
60538
  return runners.map((runner) => {
60490
- const record2 = asRecord3(runner);
60491
- const posture = asRecord3(record2.posture);
60492
- const capacity = asRecord3(record2.capacity);
60493
- const execution = asRecord3(record2.execution);
60539
+ const record2 = asRecord2(runner);
60540
+ const posture = asRecord2(record2.posture);
60541
+ const capacity = asRecord2(record2.capacity);
60542
+ const execution = asRecord2(record2.execution);
60494
60543
  const capabilitySet = asArray(posture.capability_set).map((value) => String(value)).join(", ");
60495
- return `${field3(record2, "id")} ${field3(record2, "health")} ${field3(record2, "name")} (${field3(record2, "platform")}) cli=${field3(record2, "cli_version")} sandbox=${field3(posture, "sandbox")} network=${field3(posture, "network")}${capabilitySet.length > 0 ? ` capabilities=${capabilitySet}` : ""} execution=${field3(execution, "state")} capable=${field3(execution, "capable")} capacity=${field3(capacity, "state")} account=${field3(capacity, "account_alias")} freshness=${field3(capacity, "freshness")}`;
60544
+ return `${field2(record2, "id")} ${field2(record2, "health")} ${field2(record2, "name")} (${field2(record2, "platform")}) cli=${field2(record2, "cli_version")} sandbox=${field2(posture, "sandbox")} network=${field2(posture, "network")}${capabilitySet.length > 0 ? ` capabilities=${capabilitySet}` : ""} execution=${field2(execution, "state")} capable=${field2(execution, "capable")} capacity=${field2(capacity, "state")} account=${field2(capacity, "account_alias")} freshness=${field2(capacity, "freshness")}`;
60496
60545
  }).join("\n");
60497
60546
  }
60498
60547
  function renderRunnerStatus(output) {
60499
- const record2 = asRecord3(output);
60500
- const posture = asRecord3(record2.posture);
60501
- const capacity = asRecord3(record2.capacity);
60502
- const execution = asRecord3(record2.execution);
60548
+ const record2 = asRecord2(output);
60549
+ const posture = asRecord2(record2.posture);
60550
+ const capacity = asRecord2(record2.capacity);
60551
+ const execution = asRecord2(record2.execution);
60503
60552
  const capabilitySet = asArray(posture.capability_set).map((value) => String(value)).join(", ");
60504
60553
  const lines = [
60505
- `${field3(record2, "id")} ${field3(record2, "health")} ${field3(record2, "name")} (last heartbeat ${field3(record2, "last_heartbeat_at")}).`,
60506
- `cli_version: ${field3(record2, "cli_version")} sandbox: ${field3(posture, "sandbox")} network: ${field3(posture, "network")}`,
60507
- `execution: ${field3(execution, "state")} capable: ${field3(execution, "capable")} execute_ready: ${field3(execution, "execute_ready")}`,
60508
- `capacity: ${field3(capacity, "state")} account: ${field3(capacity, "account_alias")} freshness: ${field3(capacity, "freshness")} rate_limited_until: ${field3(capacity, "rate_limited_until")}`
60554
+ `${field2(record2, "id")} ${field2(record2, "health")} ${field2(record2, "name")} (last heartbeat ${field2(record2, "last_heartbeat_at")}).`,
60555
+ `cli_version: ${field2(record2, "cli_version")} sandbox: ${field2(posture, "sandbox")} network: ${field2(posture, "network")}`,
60556
+ `execution: ${field2(execution, "state")} capable: ${field2(execution, "capable")} execute_ready: ${field2(execution, "execute_ready")}`,
60557
+ `capacity: ${field2(capacity, "state")} account: ${field2(capacity, "account_alias")} freshness: ${field2(capacity, "freshness")} rate_limited_until: ${field2(capacity, "rate_limited_until")}`
60509
60558
  ];
60510
60559
  if (capabilitySet.length > 0) {
60511
60560
  lines.push(`capabilities: ${capabilitySet}`);
@@ -60513,424 +60562,424 @@ function renderRunnerStatus(output) {
60513
60562
  return lines.join("\n");
60514
60563
  }
60515
60564
  function renderRunnerDiagnose(output) {
60516
- const record2 = asRecord3(output);
60565
+ const record2 = asRecord2(output);
60517
60566
  const guidance = asArray(record2.repair_guidance);
60518
60567
  const lines = [
60519
- `Runner ${field3(record2, "name")} (${field3(record2, "id")})`,
60520
- `health: ${field3(record2, "health")} platform: ${field3(record2, "platform")}`,
60521
- `paired_at: ${field3(record2, "paired_at")} last_heartbeat: ${field3(record2, "last_heartbeat_at")}`,
60522
- `capabilities: claude=${String(asRecord3(record2.capabilities).claude)} codex=${String(asRecord3(record2.capabilities).codex)}`,
60523
- `revocation_state: ${field3(record2, "revocation_state")}`
60568
+ `Runner ${field2(record2, "name")} (${field2(record2, "id")})`,
60569
+ `health: ${field2(record2, "health")} platform: ${field2(record2, "platform")}`,
60570
+ `paired_at: ${field2(record2, "paired_at")} last_heartbeat: ${field2(record2, "last_heartbeat_at")}`,
60571
+ `capabilities: claude=${String(asRecord2(record2.capabilities).claude)} codex=${String(asRecord2(record2.capabilities).codex)}`,
60572
+ `revocation_state: ${field2(record2, "revocation_state")}`
60524
60573
  ];
60525
60574
  if (guidance.length > 0) {
60526
60575
  lines.push("repair_guidance:");
60527
60576
  guidance.forEach((step) => {
60528
- const s = asRecord3(step);
60529
- lines.push(` ${field3(s, "action")}: ${field3(s, "detail")}`);
60577
+ const s = asRecord2(step);
60578
+ lines.push(` ${field2(s, "action")}: ${field2(s, "detail")}`);
60530
60579
  });
60531
60580
  }
60532
60581
  return lines.join("\n");
60533
60582
  }
60534
60583
  function renderRunnerRepair(output) {
60535
- const record2 = asRecord3(output);
60584
+ const record2 = asRecord2(output);
60536
60585
  const steps = asArray(record2.repair_steps);
60537
60586
  const lines = [
60538
- `Runner ${field3(record2, "runner_name")} (${field3(record2, "runner_id")}) health: ${field3(record2, "runner_health")}`,
60539
- `requires_human: ${field3(record2, "requires_human")}`
60587
+ `Runner ${field2(record2, "runner_name")} (${field2(record2, "runner_id")}) health: ${field2(record2, "runner_health")}`,
60588
+ `requires_human: ${field2(record2, "requires_human")}`
60540
60589
  ];
60541
60590
  if (steps.length > 0) {
60542
60591
  lines.push("repair_steps:");
60543
60592
  steps.forEach((step) => {
60544
- const s = asRecord3(step);
60545
- lines.push(` ${field3(s, "action")}`);
60546
- lines.push(` command: ${field3(s, "command")}`);
60547
- lines.push(` detail: ${field3(s, "detail")}`);
60593
+ const s = asRecord2(step);
60594
+ lines.push(` ${field2(s, "action")}`);
60595
+ lines.push(` command: ${field2(s, "command")}`);
60596
+ lines.push(` detail: ${field2(s, "detail")}`);
60548
60597
  });
60549
60598
  }
60550
60599
  return lines.join("\n");
60551
60600
  }
60552
60601
  function renderWorkOrders(output) {
60553
- const workOrders = asArray(asRecord3(output).work_orders);
60602
+ const workOrders = asArray(asRecord2(output).work_orders);
60554
60603
  if (workOrders.length === 0) {
60555
60604
  return "No work orders.";
60556
60605
  }
60557
60606
  return workOrders.map((workOrder) => {
60558
- const record2 = asRecord3(workOrder);
60559
- return `${field3(record2, "id")} ${field3(record2, "status")} ${field3(record2, "lane")} agent ${field3(record2, "agent_id")}`;
60607
+ const record2 = asRecord2(workOrder);
60608
+ return `${field2(record2, "id")} ${field2(record2, "status")} ${field2(record2, "lane")} agent ${field2(record2, "agent_id")}`;
60560
60609
  }).join("\n");
60561
60610
  }
60562
60611
  function renderRunnerRevoke(output) {
60563
- const record2 = asRecord3(output);
60564
- return `Revoked runner ${field3(record2, "runner_id")} (revoked=${field3(record2, "revoked")}).`;
60612
+ const record2 = asRecord2(output);
60613
+ return `Revoked runner ${field2(record2, "runner_id")} (revoked=${field2(record2, "revoked")}).`;
60565
60614
  }
60566
60615
  function renderNotificationSettings(output) {
60567
- const record2 = asRecord3(output);
60568
- return `escalations=${field3(record2, "escalations_enabled")} sync_brief=${field3(record2, "sync_brief_enabled")} default_channel=${field3(record2, "default_channel")}`;
60616
+ const record2 = asRecord2(output);
60617
+ return `escalations=${field2(record2, "escalations_enabled")} sync_brief=${field2(record2, "sync_brief_enabled")} default_channel=${field2(record2, "default_channel")}`;
60569
60618
  }
60570
60619
  function renderNotificationTest(output) {
60571
- const record2 = asRecord3(output);
60572
- return `Test notification ${field3(record2, "notification_id")} (delivered=${field3(record2, "delivered")}).`;
60620
+ const record2 = asRecord2(output);
60621
+ return `Test notification ${field2(record2, "notification_id")} (delivered=${field2(record2, "delivered")}).`;
60573
60622
  }
60574
60623
  function renderNotificationErrors(output) {
60575
- const errors = asArray(asRecord3(output).errors);
60624
+ const errors = asArray(asRecord2(output).errors);
60576
60625
  if (errors.length === 0) {
60577
60626
  return "No failed notification deliveries.";
60578
60627
  }
60579
60628
  return errors.map((entry) => {
60580
- const record2 = asRecord3(entry);
60581
- return `${field3(record2, "created_at")} ${field3(record2, "channel")} source=${field3(record2, "source")} seat=${field3(record2, "seat_id")} run=${field3(record2, "run_id")} ${field3(record2, "error_message")}`;
60629
+ const record2 = asRecord2(entry);
60630
+ return `${field2(record2, "created_at")} ${field2(record2, "channel")} source=${field2(record2, "source")} seat=${field2(record2, "seat_id")} run=${field2(record2, "run_id")} ${field2(record2, "error_message")}`;
60582
60631
  }).join("\n");
60583
60632
  }
60584
60633
  function formatIntegrationLine(record2) {
60585
- return `${field3(record2, "provider")} status=${field3(record2, "status")} account=${field3(record2, "account_email")} last_test=${field3(record2, "last_test_result")} id=${field3(record2, "id")}`;
60634
+ return `${field2(record2, "provider")} status=${field2(record2, "status")} account=${field2(record2, "account_email")} last_test=${field2(record2, "last_test_result")} id=${field2(record2, "id")}`;
60586
60635
  }
60587
60636
  function renderIntegrationList(output) {
60588
- const integrations = asArray(asRecord3(output).integrations);
60637
+ const integrations = asArray(asRecord2(output).integrations);
60589
60638
  if (integrations.length === 0) {
60590
60639
  return "No integrations are connected.";
60591
60640
  }
60592
- return integrations.map((entry) => formatIntegrationLine(asRecord3(entry))).join("\n");
60641
+ return integrations.map((entry) => formatIntegrationLine(asRecord2(entry))).join("\n");
60593
60642
  }
60594
60643
  function renderIntegrationReadiness(output) {
60595
- const connectors = asArray(asRecord3(output).connectors);
60644
+ const connectors = asArray(asRecord2(output).connectors);
60596
60645
  if (connectors.length === 0) {
60597
60646
  return "No connector readiness facts found.";
60598
60647
  }
60599
- return connectors.map((entry) => formatIntegrationReadinessLine(asRecord3(entry))).join("\n\n");
60648
+ return connectors.map((entry) => formatIntegrationReadinessLine(asRecord2(entry))).join("\n\n");
60600
60649
  }
60601
60650
  function formatIntegrationReadinessLine(record2) {
60602
60651
  const checks = asArray(record2.checks).map((entry) => {
60603
- const check2 = asRecord3(entry);
60604
- const issue2 = field3(check2, "linear_issue") === "\u2014" ? "" : ` ${field3(check2, "linear_issue")}`;
60605
- return ` - ${field3(check2, "label")}: ${field3(check2, "status")}${issue2} \u2014 ${field3(check2, "detail")}`;
60652
+ const check2 = asRecord2(entry);
60653
+ const issue2 = field2(check2, "linear_issue") === "\u2014" ? "" : ` ${field2(check2, "linear_issue")}`;
60654
+ return ` - ${field2(check2, "label")}: ${field2(check2, "status")}${issue2} \u2014 ${field2(check2, "detail")}`;
60606
60655
  });
60607
60656
  const actions = asArray(record2.next_actions).map((entry) => ` - ${String(entry)}`);
60608
60657
  return [
60609
- `${field3(record2, "provider")} readiness=${field3(record2, "overall_status")} id=${field3(record2, "integration_id")}`,
60610
- field3(record2, "summary"),
60658
+ `${field2(record2, "provider")} readiness=${field2(record2, "overall_status")} id=${field2(record2, "integration_id")}`,
60659
+ field2(record2, "summary"),
60611
60660
  checks.length > 0 ? ["checks:", ...checks].join("\n") : "",
60612
60661
  actions.length > 0 ? ["next:", ...actions].join("\n") : ""
60613
60662
  ].filter((line) => line.length > 0).join("\n");
60614
60663
  }
60615
60664
  function renderIntegrationStatus(output) {
60616
- const integration = asRecord3(output).integration;
60665
+ const integration = asRecord2(output).integration;
60617
60666
  if (integration === null) {
60618
60667
  return "Integration not found.";
60619
60668
  }
60620
- return formatIntegrationLine(asRecord3(integration));
60669
+ return formatIntegrationLine(asRecord2(integration));
60621
60670
  }
60622
60671
  function renderIntegrationTest(output) {
60623
- const record2 = asRecord3(output);
60624
- return `${field3(record2, "provider")} ${field3(record2, "status")} (ok=${field3(record2, "ok")}) ${field3(record2, "message")}`;
60672
+ const record2 = asRecord2(output);
60673
+ return `${field2(record2, "provider")} ${field2(record2, "status")} (ok=${field2(record2, "ok")}) ${field2(record2, "message")}`;
60625
60674
  }
60626
60675
  function renderSettingsGet(output) {
60627
- const record2 = asRecord3(output);
60628
- const spend = asRecord3(record2.spend);
60629
- const policy = asRecord3(record2.product_learning);
60630
- return `tenant ${field3(record2, "tenant_id")} plan=${field3(record2, "plan")} status=${field3(record2, "status")} spend=$${field3(spend, "spend_usd")} has_anthropic_key=${field3(record2, "has_anthropic_key")} product_learning=${field3(policy, "mode")}`;
60676
+ const record2 = asRecord2(output);
60677
+ const spend = asRecord2(record2.spend);
60678
+ const policy = asRecord2(record2.product_learning);
60679
+ return `tenant ${field2(record2, "tenant_id")} plan=${field2(record2, "plan")} status=${field2(record2, "status")} spend=$${field2(spend, "spend_usd")} has_anthropic_key=${field2(record2, "has_anthropic_key")} product_learning=${field2(policy, "mode")}`;
60631
60680
  }
60632
60681
  function renderSettingsUpdate(output) {
60633
- const spend = asRecord3(asRecord3(output).spend);
60634
- return `Updated budget caps (soft=$${field3(spend, "soft_cap_usd")}, hard=$${field3(spend, "hard_cap_usd")}).`;
60682
+ const spend = asRecord2(asRecord2(output).spend);
60683
+ return `Updated budget caps (soft=$${field2(spend, "soft_cap_usd")}, hard=$${field2(spend, "hard_cap_usd")}).`;
60635
60684
  }
60636
60685
  function renderTenantRename(output) {
60637
- const record2 = asRecord3(output);
60638
- return `Renamed company from ${field3(record2, "previous_name")} to ${field3(record2, "name")}.`;
60686
+ const record2 = asRecord2(output);
60687
+ return `Renamed company from ${field2(record2, "previous_name")} to ${field2(record2, "name")}.`;
60639
60688
  }
60640
60689
  function renderProductLearningGet(output) {
60641
- const policy = asRecord3(asRecord3(output).product_learning);
60642
- return `product_learning ${field3(policy, "mode")} product_analytics_enabled=${field3(policy, "product_analytics_enabled")} security_audit_logs_enabled=${field3(policy, "security_audit_logs_enabled")}`;
60690
+ const policy = asRecord2(asRecord2(output).product_learning);
60691
+ return `product_learning ${field2(policy, "mode")} product_analytics_enabled=${field2(policy, "product_analytics_enabled")} security_audit_logs_enabled=${field2(policy, "security_audit_logs_enabled")}`;
60643
60692
  }
60644
60693
  function renderProductLearningUpdate(output) {
60645
- const policy = asRecord3(asRecord3(output).product_learning);
60646
- return `Updated product-learning policy to ${field3(policy, "mode")} (product_analytics_enabled=${field3(policy, "product_analytics_enabled")}).`;
60694
+ const policy = asRecord2(asRecord2(output).product_learning);
60695
+ return `Updated product-learning policy to ${field2(policy, "mode")} (product_analytics_enabled=${field2(policy, "product_analytics_enabled")}).`;
60647
60696
  }
60648
60697
  function renderAgentPolicyGet(output) {
60649
- const policy = asRecord3(asRecord3(output).agent_policy);
60650
- return `agent_policy profile=${field3(policy, "profile")} enforcement=${field3(policy, "enforcement")} max_autonomous_risk=${field3(policy, "max_autonomous_risk")} explicit=${field3(policy, "explicit")}`;
60698
+ const policy = asRecord2(asRecord2(output).agent_policy);
60699
+ return `agent_policy profile=${field2(policy, "profile")} enforcement=${field2(policy, "enforcement")} max_autonomous_risk=${field2(policy, "max_autonomous_risk")} explicit=${field2(policy, "explicit")}`;
60651
60700
  }
60652
60701
  function renderAgentPolicySet(output) {
60653
- const policy = asRecord3(asRecord3(output).agent_policy);
60654
- return `Set company autonomy ceiling to ${field3(policy, "profile")} (max_autonomous_risk=${field3(policy, "max_autonomous_risk")}, enforcement=${field3(policy, "enforcement")}).`;
60702
+ const policy = asRecord2(asRecord2(output).agent_policy);
60703
+ return `Set company autonomy ceiling to ${field2(policy, "profile")} (max_autonomous_risk=${field2(policy, "max_autonomous_risk")}, enforcement=${field2(policy, "enforcement")}).`;
60655
60704
  }
60656
60705
  function renderConfirmationModeGet(output) {
60657
- const policy = asRecord3(asRecord3(output).confirmation_policy);
60658
- return `confirmation_policy cli_mode=${field3(policy, "cli_mode")} explicit=${field3(policy, "explicit")}`;
60706
+ const policy = asRecord2(asRecord2(output).confirmation_policy);
60707
+ return `confirmation_policy cli_mode=${field2(policy, "cli_mode")} explicit=${field2(policy, "explicit")}`;
60659
60708
  }
60660
60709
  function renderConfirmationModeSet(output) {
60661
- const policy = asRecord3(asRecord3(output).confirmation_policy);
60662
- return `Updated CLI confirmation mode to ${field3(policy, "cli_mode")}.`;
60710
+ const policy = asRecord2(asRecord2(output).confirmation_policy);
60711
+ return `Updated CLI confirmation mode to ${field2(policy, "cli_mode")}.`;
60663
60712
  }
60664
60713
  function renderMemberInvite(output) {
60665
- const record2 = asRecord3(output);
60666
- return `Invited ${field3(record2, "email")} as ${field3(record2, "role")} (invite ${field3(record2, "invite_id")}).`;
60714
+ const record2 = asRecord2(output);
60715
+ return `Invited ${field2(record2, "email")} as ${field2(record2, "role")} (invite ${field2(record2, "invite_id")}).`;
60667
60716
  }
60668
60717
  function renderMemberUpdate(output) {
60669
- const record2 = asRecord3(output);
60670
- return `Updated member ${field3(record2, "member_id")} \u2192 ${field3(record2, "role")}.`;
60718
+ const record2 = asRecord2(output);
60719
+ return `Updated member ${field2(record2, "member_id")} \u2192 ${field2(record2, "role")}.`;
60671
60720
  }
60672
60721
  function renderMemberRemove(output) {
60673
- const record2 = asRecord3(output);
60674
- return `Removed member ${field3(record2, "member_id")} (removed=${field3(record2, "removed")}).`;
60722
+ const record2 = asRecord2(output);
60723
+ return `Removed member ${field2(record2, "member_id")} (removed=${field2(record2, "removed")}).`;
60675
60724
  }
60676
60725
  function agentSetupStateLine(output) {
60677
- const record2 = asRecord3(output);
60678
- const dryRun = record2.dry_run === null || record2.dry_run === void 0 ? "\u2014" : field3(asRecord3(record2.dry_run), "status");
60726
+ const record2 = asRecord2(output);
60727
+ const dryRun = record2.dry_run === null || record2.dry_run === void 0 ? "\u2014" : field2(asRecord2(record2.dry_run), "status");
60679
60728
  const lines = [
60680
- `setup ${field3(record2, "setup_id")} seat ${field3(record2, "seat_id")} agent ${field3(record2, "agent_id")}`,
60681
- `status=${field3(record2, "status")} next=${field3(record2, "next_action")} dry_run=${dryRun}`
60729
+ `setup ${field2(record2, "setup_id")} seat ${field2(record2, "seat_id")} agent ${field2(record2, "agent_id")}`,
60730
+ `status=${field2(record2, "status")} next=${field2(record2, "next_action")} dry_run=${dryRun}`
60682
60731
  ];
60683
60732
  const model = record2.model_config;
60684
60733
  if (model && typeof model === "object") {
60685
- const m = asRecord3(model);
60686
- const effort = m.effort ? ` (effort ${field3(m, "effort")})` : "";
60687
- lines.push(`model=${field3(m, "provider")}/${field3(m, "model")}${effort}`);
60734
+ const m = asRecord2(model);
60735
+ const effort = m.effort ? ` (effort ${field2(m, "effort")})` : "";
60736
+ lines.push(`model=${field2(m, "provider")}/${field2(m, "model")}${effort}`);
60688
60737
  }
60689
60738
  return lines.join("\n");
60690
60739
  }
60691
60740
  function renderAgentTemplates(output) {
60692
- const templates = asArray(asRecord3(output).templates);
60741
+ const templates = asArray(asRecord2(output).templates);
60693
60742
  if (templates.length === 0) {
60694
60743
  return "No stock agent templates available.";
60695
60744
  }
60696
60745
  return templates.map((template) => {
60697
- const record2 = asRecord3(template);
60698
- return `${field3(record2, "slug")} ${field3(record2, "tier")} ${field3(record2, "display_name")} \u2014 ${field3(record2, "function")}`;
60746
+ const record2 = asRecord2(template);
60747
+ return `${field2(record2, "slug")} ${field2(record2, "tier")} ${field2(record2, "display_name")} \u2014 ${field2(record2, "function")}`;
60699
60748
  }).join("\n");
60700
60749
  }
60701
60750
  function renderAgentDryRun(output) {
60702
- const record2 = asRecord3(output);
60703
- const header = `dry run for seat ${field3(record2, "seat_id")} (charter ${field3(record2, "charter_version_id")}): ${field3(record2, "status")} (reused=${field3(record2, "reused")})
60704
- ${field3(record2, "summary")}`;
60751
+ const record2 = asRecord2(output);
60752
+ const header = `dry run for seat ${field2(record2, "seat_id")} (charter ${field2(record2, "charter_version_id")}): ${field2(record2, "status")} (reused=${field2(record2, "reused")})
60753
+ ${field2(record2, "summary")}`;
60705
60754
  return [header, formatDryRunTranscript(record2.transcript)].filter((part) => part.length > 0).join("\n");
60706
60755
  }
60707
60756
  function renderAgentGoLive(output) {
60708
- const record2 = asRecord3(output);
60709
- return `agent seat ${field3(record2, "seat_id")} is now ${field3(record2, "status")} (charter ${field3(record2, "charter_version_id")}).`;
60757
+ const record2 = asRecord2(output);
60758
+ return `agent seat ${field2(record2, "seat_id")} is now ${field2(record2, "status")} (charter ${field2(record2, "charter_version_id")}).`;
60710
60759
  }
60711
60760
  function renderAgentStatus(output) {
60712
- const record2 = asRecord3(output);
60713
- return `agent seat ${field3(record2, "seat_id")} status=${field3(record2, "status")} live=${field3(record2, "live")} lane=${field3(record2, "lane")}`;
60761
+ const record2 = asRecord2(output);
60762
+ return `agent seat ${field2(record2, "seat_id")} status=${field2(record2, "status")} live=${field2(record2, "live")} lane=${field2(record2, "lane")}`;
60714
60763
  }
60715
60764
  function renderAgentRunNow(output) {
60716
- const record2 = asRecord3(output);
60717
- const workOrder = asRecord3(record2.work_order);
60718
- return `manual production run ${field3(record2, "execution_mode")}: queued ${field3(workOrder, "lane")} work order ${field3(workOrder, "id")} for agent ${field3(workOrder, "agent_id")} (${field3(workOrder, "status")})`;
60765
+ const record2 = asRecord2(output);
60766
+ const workOrder = asRecord2(record2.work_order);
60767
+ return `manual production run ${field2(record2, "execution_mode")}: queued ${field2(workOrder, "lane")} work order ${field2(workOrder, "id")} for agent ${field2(workOrder, "agent_id")} (${field2(workOrder, "status")})`;
60719
60768
  }
60720
60769
  function renderAgentFleetDigest(output) {
60721
- const record2 = asRecord3(output);
60722
- const summary = asRecord3(record2.summary);
60770
+ const record2 = asRecord2(output);
60771
+ const summary = asRecord2(record2.summary);
60723
60772
  const agents = asArray(record2.agents);
60724
- const header = `fleet ${field3(summary, "fleet_count")} seats live=${field3(summary, "live_count")} idle=${field3(summary, "idle_count")} turns24h=${field3(summary, "turns_24h")} failed24h=${field3(summary, "failed_runs_24h")} spend7d=$${field3(summary, "spend_7d_usd")}`;
60773
+ const header = `fleet ${field2(summary, "fleet_count")} seats live=${field2(summary, "live_count")} idle=${field2(summary, "idle_count")} turns24h=${field2(summary, "turns_24h")} failed24h=${field2(summary, "failed_runs_24h")} spend7d=$${field2(summary, "spend_7d_usd")}`;
60725
60774
  const lines = agents.map((agent) => {
60726
- const r = asRecord3(agent);
60727
- return `${field3(r, "seat_name")} ${field3(r, "health_status")} live=${field3(r, "live")} turns24h=${field3(r, "turns_24h")} failed=${field3(r, "failed_runs_24h")} next=${field3(r, "suggested_next_action")}`;
60775
+ const r = asRecord2(agent);
60776
+ return `${field2(r, "seat_name")} ${field2(r, "health_status")} live=${field2(r, "live")} turns24h=${field2(r, "turns_24h")} failed=${field2(r, "failed_runs_24h")} next=${field2(r, "suggested_next_action")}`;
60728
60777
  });
60729
60778
  return [header, ...lines].join("\n");
60730
60779
  }
60731
60780
  function renderAgentGetRun(output) {
60732
- const run2 = asRecord3(asRecord3(output).run);
60781
+ const run2 = asRecord2(asRecord2(output).run);
60733
60782
  const errors = asArray(run2.error_logs);
60734
- const errorLine = errors.length === 0 ? "errors=0" : `errors=${errors.length} first=${field3(asRecord3(errors[0]), "message")}`;
60735
- return `run ${field3(run2, "run_id")} status=${field3(run2, "status")} lane=${field3(run2, "lane")} cost=$${field3(run2, "cost_usd")}
60736
- transcript=${field3(run2, "transcript_ref")}
60783
+ const errorLine = errors.length === 0 ? "errors=0" : `errors=${errors.length} first=${field2(asRecord2(errors[0]), "message")}`;
60784
+ return `run ${field2(run2, "run_id")} status=${field2(run2, "status")} lane=${field2(run2, "lane")} cost=$${field2(run2, "cost_usd")}
60785
+ transcript=${field2(run2, "transcript_ref")}
60737
60786
  ${errorLine}`;
60738
60787
  }
60739
60788
  function renderAgentConfigureTools(output) {
60740
- const record2 = asRecord3(output);
60789
+ const record2 = asRecord2(output);
60741
60790
  const decisions = asArray(record2.tool_decisions).map((entry) => {
60742
- const r = asRecord3(entry);
60743
- return ` ${field3(r, "tool")} ${field3(r, "decision")}`;
60791
+ const r = asRecord2(entry);
60792
+ return ` ${field2(r, "tool")} ${field2(r, "decision")}`;
60744
60793
  }).join("\n");
60745
- return [`Configured tools for seat ${field3(record2, "seat_id")} (agent ${field3(record2, "agent_id")}).`, decisions].filter((line) => line.length > 0).join("\n");
60794
+ return [`Configured tools for seat ${field2(record2, "seat_id")} (agent ${field2(record2, "agent_id")}).`, decisions].filter((line) => line.length > 0).join("\n");
60746
60795
  }
60747
60796
  function renderToolCatalog(output) {
60748
- const record2 = asRecord3(output);
60797
+ const record2 = asRecord2(output);
60749
60798
  const tools = asArray(record2.tools);
60750
60799
  const header = `# Tool catalog
60751
60800
 
60752
- ${field3(record2, "note")}
60801
+ ${field2(record2, "note")}
60753
60802
  `;
60754
60803
  if (tools.length === 0) {
60755
60804
  return `${header}
60756
60805
  No tools in the catalog.`;
60757
60806
  }
60758
60807
  const lines = tools.map((entry) => {
60759
- const r = asRecord3(entry);
60808
+ const r = asRecord2(entry);
60760
60809
  const cred = r.credential_required === true ? " (credential required)" : "";
60761
- return `- \`${field3(r, "id")}\` [${field3(r, "provider")} \xB7 ${field3(r, "default_scope_tier")} \xB7 ${field3(r, "default_access_policy")}]${cred}
60762
- ${field3(r, "description")}`;
60810
+ return `- \`${field2(r, "id")}\` [${field2(r, "provider")} \xB7 ${field2(r, "default_scope_tier")} \xB7 ${field2(r, "default_access_policy")}]${cred}
60811
+ ${field2(r, "description")}`;
60763
60812
  });
60764
60813
  return `${header}
60765
60814
  ${lines.join("\n")}`;
60766
60815
  }
60767
60816
  function renderModelCatalog(output) {
60768
- const record2 = asRecord3(output);
60817
+ const record2 = asRecord2(output);
60769
60818
  const tiers = asArray(record2.tiers);
60770
60819
  const header = `# Model tiers
60771
60820
 
60772
- ${field3(record2, "note")}
60821
+ ${field2(record2, "note")}
60773
60822
  `;
60774
60823
  if (tiers.length === 0) {
60775
60824
  return `${header}
60776
60825
  No model tiers are configured.`;
60777
60826
  }
60778
- const defaultTier = field3(record2, "default_tier");
60827
+ const defaultTier = field2(record2, "default_tier");
60779
60828
  const lines = tiers.map((entry) => {
60780
- const r = asRecord3(entry);
60781
- const tier = field3(r, "tier");
60829
+ const r = asRecord2(entry);
60830
+ const tier = field2(r, "tier");
60782
60831
  const recommended = r.recommended === true || tier === defaultTier ? " recommended" : "";
60783
60832
  const bestFor = asArray(r.best_for).map(String).join(", ");
60784
60833
  return [
60785
- `- \`${tier}\` [${field3(r, "provider")}/${field3(r, "model")} \xB7 effort ${field3(r, "effort")} \xB7 cost ${field3(r, "cost_band")}${recommended}]`,
60786
- ` ${field3(r, "description")}`,
60834
+ `- \`${tier}\` [${field2(r, "provider")}/${field2(r, "model")} \xB7 effort ${field2(r, "effort")} \xB7 cost ${field2(r, "cost_band")}${recommended}]`,
60835
+ ` ${field2(r, "description")}`,
60787
60836
  ` Best for: ${bestFor}`,
60788
- ` Price: $${field3(r, "input_usd_per_million_tokens")}/1M input \xB7 $${field3(r, "output_usd_per_million_tokens")}/1M output`,
60789
- ` Cost: ${field3(r, "cost_note")}`,
60790
- ` Avoid for: ${field3(r, "avoid_for")}`
60837
+ ` Price: $${field2(r, "input_usd_per_million_tokens")}/1M input \xB7 $${field2(r, "output_usd_per_million_tokens")}/1M output`,
60838
+ ` Cost: ${field2(r, "cost_note")}`,
60839
+ ` Avoid for: ${field2(r, "avoid_for")}`
60791
60840
  ].join("\n");
60792
60841
  });
60793
60842
  return `${header}
60794
60843
  ${lines.join("\n")}`;
60795
60844
  }
60796
60845
  function renderErrorList(output) {
60797
- const record2 = asRecord3(output);
60846
+ const record2 = asRecord2(output);
60798
60847
  const errors = asArray(record2.errors);
60799
60848
  if (errors.length === 0) {
60800
60849
  return "No error logs matching the filter.";
60801
60850
  }
60802
60851
  return errors.map((entry) => {
60803
- const r = asRecord3(entry);
60804
- const disposition = field3(r, "disposition");
60852
+ const r = asRecord2(entry);
60853
+ const disposition = field2(r, "disposition");
60805
60854
  const marker = disposition === "active" ? "*" : " ";
60806
- const severityLabel = field3(r, "severity").charAt(0).toUpperCase();
60807
- return `${marker} ${field3(r, "error_log_id")} [${severityLabel}] ${field3(r, "source")} ${disposition} ${field3(r, "code")} ${field3(r, "message")} ${field3(r, "created_at")}`;
60808
- }).join("\n") + (field3(record2, "total") !== "" ? `
60809
- Total: ${field3(record2, "total")}` : "");
60855
+ const severityLabel = field2(r, "severity").charAt(0).toUpperCase();
60856
+ return `${marker} ${field2(r, "error_log_id")} [${severityLabel}] ${field2(r, "source")} ${disposition} ${field2(r, "code")} ${field2(r, "message")} ${field2(r, "created_at")}`;
60857
+ }).join("\n") + (field2(record2, "total") !== "" ? `
60858
+ Total: ${field2(record2, "total")}` : "");
60810
60859
  }
60811
60860
  function renderErrorResolve(output) {
60812
- const record2 = asRecord3(output);
60813
- return `Resolved error ${field3(record2, "error_log_id")} as ${field3(record2, "disposition")} at ${field3(record2, "resolved_at")}.`;
60861
+ const record2 = asRecord2(output);
60862
+ return `Resolved error ${field2(record2, "error_log_id")} as ${field2(record2, "disposition")} at ${field2(record2, "resolved_at")}.`;
60814
60863
  }
60815
60864
  function renderErrorSupersede(output) {
60816
- const record2 = asRecord3(output);
60817
- return `Superseded error ${field3(record2, "error_log_id")} \u2192 ${field3(record2, "superseded_by_id")} at ${field3(record2, "resolved_at")}.`;
60865
+ const record2 = asRecord2(output);
60866
+ return `Superseded error ${field2(record2, "error_log_id")} \u2192 ${field2(record2, "superseded_by_id")} at ${field2(record2, "resolved_at")}.`;
60818
60867
  }
60819
60868
  function renderDeliverableList(output) {
60820
- const deliverables = asArray(asRecord3(output).deliverables);
60869
+ const deliverables = asArray(asRecord2(output).deliverables);
60821
60870
  if (deliverables.length === 0) {
60822
60871
  return "No deliverables for this seat.";
60823
60872
  }
60824
60873
  return deliverables.map((entry) => {
60825
- const r = asRecord3(entry);
60826
- const summary = field3(r, "summary") === "\u2014" ? "" : ` \u2014 ${field3(r, "summary")}`;
60827
- return `${field3(r, "id")} [${field3(r, "kind")}] ${field3(r, "title")}${summary}`;
60874
+ const r = asRecord2(entry);
60875
+ const summary = field2(r, "summary") === "\u2014" ? "" : ` \u2014 ${field2(r, "summary")}`;
60876
+ return `${field2(r, "id")} [${field2(r, "kind")}] ${field2(r, "title")}${summary}`;
60828
60877
  }).join("\n");
60829
60878
  }
60830
60879
  function renderDeliverableDetail(output) {
60831
- const d = asRecord3(asRecord3(output).deliverable);
60880
+ const d = asRecord2(asRecord2(output).deliverable);
60832
60881
  const links = asArray(d.links).map((entry) => {
60833
- const l = asRecord3(entry);
60834
- return ` ${field3(l, "kind")}: ${field3(l, "label")} <${field3(l, "url")}>`;
60882
+ const l = asRecord2(entry);
60883
+ return ` ${field2(l, "kind")}: ${field2(l, "label")} <${field2(l, "url")}>`;
60835
60884
  }).join("\n");
60836
60885
  return [
60837
- `# ${field3(d, "title")} [${field3(d, "kind")}]`,
60838
- field3(d, "id"),
60839
- field3(d, "summary") === "\u2014" ? "" : field3(d, "summary"),
60840
- field3(d, "content") === "\u2014" ? "" : `content:
60841
- ${field3(d, "content")}`,
60842
- `delivered: ${field3(d, "delivered_at")}`,
60843
- `run: ${field3(d, "source_run_status")} ${field3(d, "source_run_model")}`,
60844
- `task: ${field3(d, "source_task_title")}`,
60886
+ `# ${field2(d, "title")} [${field2(d, "kind")}]`,
60887
+ field2(d, "id"),
60888
+ field2(d, "summary") === "\u2014" ? "" : field2(d, "summary"),
60889
+ field2(d, "content") === "\u2014" ? "" : `content:
60890
+ ${field2(d, "content")}`,
60891
+ `delivered: ${field2(d, "delivered_at")}`,
60892
+ `run: ${field2(d, "source_run_status")} ${field2(d, "source_run_model")}`,
60893
+ `task: ${field2(d, "source_task_title")}`,
60845
60894
  links.length > 0 ? `links:
60846
60895
  ${links}` : ""
60847
60896
  ].filter((line) => line.length > 0).join("\n");
60848
60897
  }
60849
60898
  function renderDeliverableWrite(output) {
60850
- return `deliverable ${field3(asRecord3(output), "deliverable_id")} recorded.`;
60899
+ return `deliverable ${field2(asRecord2(output), "deliverable_id")} recorded.`;
60851
60900
  }
60852
60901
  function formatSystemHealth(output) {
60853
- const record2 = asRecord3(output);
60854
- const scope = asRecord3(record2.scope);
60855
- const sections = asRecord3(record2.sections);
60902
+ const record2 = asRecord2(output);
60903
+ const scope = asRecord2(record2.scope);
60904
+ const sections = asRecord2(record2.sections);
60856
60905
  const actions = asArray(record2.top_actions);
60857
60906
  const findings = asArray(record2.findings);
60858
60907
  const lines = [
60859
- `verdict: ${field3(record2, "verdict")} scope: ${field3(scope, "mode")} seats: ${field3(scope, "total_seat_count")} findings: ${findings.length}`
60908
+ `verdict: ${field2(record2, "verdict")} scope: ${field2(scope, "mode")} seats: ${field2(scope, "total_seat_count")} findings: ${findings.length}`
60860
60909
  ];
60861
60910
  if (actions.length > 0) {
60862
60911
  lines.push("top_actions:");
60863
60912
  for (const action of actions) {
60864
- const item = asRecord3(action);
60865
- lines.push(` ${field3(item, "label")} command=${field3(item, "command_id")} schema=${field3(item, "schema_ref")} cli=${field3(item, "cli")}`);
60866
- if (field3(item, "help") !== "\u2014") {
60867
- lines.push(` ${field3(item, "help")}`);
60913
+ const item = asRecord2(action);
60914
+ lines.push(` ${field2(item, "label")} command=${field2(item, "command_id")} schema=${field2(item, "schema_ref")} cli=${field2(item, "cli")}`);
60915
+ if (field2(item, "help") !== "\u2014") {
60916
+ lines.push(` ${field2(item, "help")}`);
60868
60917
  }
60869
60918
  }
60870
60919
  }
60871
- const fleet = asRecord3(sections.fleet);
60872
- const runs = asRecord3(sections.runs);
60873
- const signals = asRecord3(sections.signals);
60874
- const cascade = asRecord3(sections.cascade_setup);
60875
- const workLoop = asRecord3(sections.work_loop);
60876
- const connectivity = asRecord3(sections.connectivity);
60877
- const sync = asRecord3(sections.sync);
60920
+ const fleet = asRecord2(sections.fleet);
60921
+ const runs = asRecord2(sections.runs);
60922
+ const signals = asRecord2(sections.signals);
60923
+ const cascade = asRecord2(sections.cascade_setup);
60924
+ const workLoop = asRecord2(sections.work_loop);
60925
+ const connectivity = asRecord2(sections.connectivity);
60926
+ const sync = asRecord2(sections.sync);
60878
60927
  lines.push(
60879
- `fleet: agents=${field3(fleet, "agent_count")} live=${field3(fleet, "live_count")} stale=${field3(fleet, "stale_count")} setup_gaps=${field3(fleet, "setup_gap_count")}`,
60880
- `runs: failed_24h=${field3(runs, "failed_24h")} failed_7d=${field3(runs, "failed_7d")} unresolved_errors=${field3(runs, "unresolved_error_count")}`,
60881
- `signals: off_track=${field3(signals, "off_track_count")} pending=${field3(signals, "pending_count")}`,
60882
- `cascade: recommendations=${field3(cascade, "recommendation_count")} warnings=${field3(cascade, "warning_count")}`,
60883
- `work_loop: open_issues=${field3(workLoop, "open_issue_count")} friction_without_task=${field3(workLoop, "friction_without_task_count")} open_or_stalled_tasks=${field3(workLoop, "open_or_stalled_task_count")}`,
60884
- `connectivity: runners=${field3(connectivity, "runner_count")} offline_runners=${field3(connectivity, "offline_runner_count")} not_ready_runners=${field3(connectivity, "not_capable_runner_count")} integrations=${field3(connectivity, "integration_count")} disconnected_integrations=${field3(connectivity, "disconnected_integration_count")} failed_notifications=${field3(connectivity, "failed_notification_count")}`,
60885
- `sync: latest_brief=${field3(sync, "latest_brief_at")} missing_latest_brief=${field3(sync, "missing_latest_brief")} flagged_gaps=${field3(sync, "flagged_gap_count")}`
60928
+ `fleet: agents=${field2(fleet, "agent_count")} live=${field2(fleet, "live_count")} stale=${field2(fleet, "stale_count")} setup_gaps=${field2(fleet, "setup_gap_count")}`,
60929
+ `runs: failed_24h=${field2(runs, "failed_24h")} failed_7d=${field2(runs, "failed_7d")} unresolved_errors=${field2(runs, "unresolved_error_count")}`,
60930
+ `signals: off_track=${field2(signals, "off_track_count")} pending=${field2(signals, "pending_count")}`,
60931
+ `cascade: recommendations=${field2(cascade, "recommendation_count")} warnings=${field2(cascade, "warning_count")}`,
60932
+ `work_loop: open_issues=${field2(workLoop, "open_issue_count")} friction_without_task=${field2(workLoop, "friction_without_task_count")} open_or_stalled_tasks=${field2(workLoop, "open_or_stalled_task_count")}`,
60933
+ `connectivity: runners=${field2(connectivity, "runner_count")} offline_runners=${field2(connectivity, "offline_runner_count")} not_ready_runners=${field2(connectivity, "not_capable_runner_count")} integrations=${field2(connectivity, "integration_count")} disconnected_integrations=${field2(connectivity, "disconnected_integration_count")} failed_notifications=${field2(connectivity, "failed_notification_count")}`,
60934
+ `sync: latest_brief=${field2(sync, "latest_brief_at")} missing_latest_brief=${field2(sync, "missing_latest_brief")} flagged_gaps=${field2(sync, "flagged_gap_count")}`
60886
60935
  );
60887
60936
  return lines.join("\n");
60888
60937
  }
60889
60938
  function renderSkillList(output) {
60890
- const skills = asArray(asRecord3(output).skills);
60939
+ const skills = asArray(asRecord2(output).skills);
60891
60940
  if (skills.length === 0) {
60892
60941
  return "No skills found.";
60893
60942
  }
60894
60943
  return [
60895
60944
  "# Skills",
60896
60945
  ...skills.map((entry) => {
60897
- const r = asRecord3(entry);
60898
- return `- \`${field3(r, "slug")}\` v${field3(r, "latest_version")} [${field3(r, "status")} \xB7 ${field3(r, "visibility")} \xB7 assigned ${field3(r, "assigned_seat_count")}]
60899
- ${field3(r, "description")}`;
60946
+ const r = asRecord2(entry);
60947
+ return `- \`${field2(r, "slug")}\` v${field2(r, "latest_version")} [${field2(r, "status")} \xB7 ${field2(r, "visibility")} \xB7 assigned ${field2(r, "assigned_seat_count")}]
60948
+ ${field2(r, "description")}`;
60900
60949
  })
60901
60950
  ].join("\n");
60902
60951
  }
60903
60952
  function renderSkillDetail(output) {
60904
- const skill = asRecord3(asRecord3(output).skill);
60905
- const required2 = asArray(skill.required_tools).map((entry) => field3(asRecord3(entry), "tool")).join(", ") || "none";
60906
- const optional2 = asArray(skill.optional_tools).map((entry) => field3(asRecord3(entry), "tool")).join(", ") || "none";
60907
- const files = asArray(skill.files).map((entry) => field3(asRecord3(entry), "path")).join(", ") || "SKILL.md";
60953
+ const skill = asRecord2(asRecord2(output).skill);
60954
+ const required2 = asArray(skill.required_tools).map((entry) => field2(asRecord2(entry), "tool")).join(", ") || "none";
60955
+ const optional2 = asArray(skill.optional_tools).map((entry) => field2(asRecord2(entry), "tool")).join(", ") || "none";
60956
+ const files = asArray(skill.files).map((entry) => field2(asRecord2(entry), "path")).join(", ") || "SKILL.md";
60908
60957
  return [
60909
- `# ${field3(skill, "name")} (\`${field3(skill, "slug")}\`)`,
60910
- `${field3(skill, "description")}`,
60911
- `version: ${field3(skill, "latest_version")} (${field3(skill, "latest_version_id")})`,
60958
+ `# ${field2(skill, "name")} (\`${field2(skill, "slug")}\`)`,
60959
+ `${field2(skill, "description")}`,
60960
+ `version: ${field2(skill, "latest_version")} (${field2(skill, "latest_version_id")})`,
60912
60961
  `required tools: ${required2}`,
60913
60962
  `optional tools: ${optional2}`,
60914
60963
  `files: SKILL.md${files === "SKILL.md" ? "" : `, ${files}`}`
60915
60964
  ].join("\n");
60916
60965
  }
60917
60966
  function renderAssignedSkills(output) {
60918
- const record2 = asRecord3(output);
60967
+ const record2 = asRecord2(output);
60919
60968
  const assignments = asArray(record2.assignments);
60920
60969
  if (assignments.length === 0) {
60921
- return `No assigned skills${record2.seat_id ? ` for seat ${field3(record2, "seat_id")}` : ""}.`;
60970
+ return `No assigned skills${record2.seat_id ? ` for seat ${field2(record2, "seat_id")}` : ""}.`;
60922
60971
  }
60923
60972
  return [
60924
- `# Assigned skills${record2.seat_id ? ` for ${field3(record2, "seat_id")}` : ""}`,
60973
+ `# Assigned skills${record2.seat_id ? ` for ${field2(record2, "seat_id")}` : ""}`,
60925
60974
  ...assignments.map((entry) => {
60926
- const r = asRecord3(entry);
60927
- return `- \`${field3(r, "slug")}\` v${field3(r, "version")} \u2192 seat ${field3(r, "seat_id")} (${field3(r, "assignment_id")})
60928
- ${field3(r, "rationale")}`;
60975
+ const r = asRecord2(entry);
60976
+ return `- \`${field2(r, "slug")}\` v${field2(r, "version")} \u2192 seat ${field2(r, "seat_id")} (${field2(r, "assignment_id")})
60977
+ ${field2(r, "rationale")}`;
60929
60978
  })
60930
60979
  ].join("\n");
60931
60980
  }
60932
60981
  function renderDependencyCheck(output) {
60933
- const record2 = asRecord3(output);
60982
+ const record2 = asRecord2(output);
60934
60983
  const render = (label, items) => {
60935
60984
  if (items.length === 0) {
60936
60985
  return `${label}: none`;
@@ -60938,52 +60987,52 @@ function renderDependencyCheck(output) {
60938
60987
  return [
60939
60988
  `${label}:`,
60940
60989
  ...items.map((entry) => {
60941
- const r = asRecord3(entry);
60942
- return `- \`${field3(r, "tool")}\` ${field3(r, "status")} (needs ${field3(r, "min_scope_tier")}, has ${field3(r, "current_scope_tier")})`;
60990
+ const r = asRecord2(entry);
60991
+ return `- \`${field2(r, "tool")}\` ${field2(r, "status")} (needs ${field2(r, "min_scope_tier")}, has ${field2(r, "current_scope_tier")})`;
60943
60992
  })
60944
60993
  ].join("\n");
60945
60994
  };
60946
60995
  return [
60947
- `Skill dependencies: ${field3(record2, "status")}`,
60948
- `skill_version_id: ${field3(record2, "skill_version_id")}`,
60949
- `seat_id: ${field3(record2, "seat_id")}`,
60996
+ `Skill dependencies: ${field2(record2, "status")}`,
60997
+ `skill_version_id: ${field2(record2, "skill_version_id")}`,
60998
+ `seat_id: ${field2(record2, "seat_id")}`,
60950
60999
  render("required", asArray(record2.required)),
60951
61000
  render("optional", asArray(record2.optional))
60952
61001
  ].join("\n");
60953
61002
  }
60954
61003
  function renderSkillFile(output) {
60955
- return field3(asRecord3(output), "content");
61004
+ return field2(asRecord2(output), "content");
60956
61005
  }
60957
61006
  function renderSkillWrite(label) {
60958
61007
  return (output) => {
60959
- const skill = asRecord3(asRecord3(output).skill);
60960
- const warnings = asArray(asRecord3(skill.validation).warnings).length;
61008
+ const skill = asRecord2(asRecord2(output).skill);
61009
+ const warnings = asArray(asRecord2(skill.validation).warnings).length;
60961
61010
  return [
60962
- `${label}: \`${field3(skill, "slug")}\` v${field3(skill, "version")} (${field3(skill, "skill_version_id")})`,
60963
- `status: ${field3(skill, "status")}`,
60964
- `content_sha256: ${field3(skill, "content_sha256")}`,
61011
+ `${label}: \`${field2(skill, "slug")}\` v${field2(skill, "version")} (${field2(skill, "skill_version_id")})`,
61012
+ `status: ${field2(skill, "status")}`,
61013
+ `content_sha256: ${field2(skill, "content_sha256")}`,
60965
61014
  `validation_warnings: ${warnings}`
60966
61015
  ].join("\n");
60967
61016
  };
60968
61017
  }
60969
61018
  function renderAssignment(output) {
60970
- const record2 = asRecord3(output);
60971
- const assignment = asRecord3(record2.assignment);
61019
+ const record2 = asRecord2(output);
61020
+ const assignment = asRecord2(record2.assignment);
60972
61021
  return [
60973
- `Skill assignment ${field3(record2, "approval_status")}: \`${field3(assignment, "slug")}\` v${field3(assignment, "version")} \u2192 seat ${field3(assignment, "seat_id")}`,
60974
- `assignment_id: ${field3(assignment, "assignment_id")}`,
60975
- `skill_version_id: ${field3(assignment, "skill_version_id")}`,
60976
- `dependency_status: ${field3(asRecord3(record2.dependency_status), "status")}`,
60977
- `next: ${field3(record2, "local_sync_next_step")}`
61022
+ `Skill assignment ${field2(record2, "approval_status")}: \`${field2(assignment, "slug")}\` v${field2(assignment, "version")} \u2192 seat ${field2(assignment, "seat_id")}`,
61023
+ `assignment_id: ${field2(assignment, "assignment_id")}`,
61024
+ `skill_version_id: ${field2(assignment, "skill_version_id")}`,
61025
+ `dependency_status: ${field2(asRecord2(record2.dependency_status), "status")}`,
61026
+ `next: ${field2(record2, "local_sync_next_step")}`
60978
61027
  ].join("\n");
60979
61028
  }
60980
61029
  function renderRevocation(output) {
60981
- const record2 = asRecord3(output);
61030
+ const record2 = asRecord2(output);
60982
61031
  return [
60983
- `Skill assignment revoked: \`${field3(record2, "slug")}\` from seat ${field3(record2, "seat_id")}`,
60984
- `assignment_id: ${field3(record2, "assignment_id")}`,
60985
- `skill_version_id: ${field3(record2, "skill_version_id")}`,
60986
- `next: ${field3(record2, "local_sync_next_step")}`
61032
+ `Skill assignment revoked: \`${field2(record2, "slug")}\` from seat ${field2(record2, "seat_id")}`,
61033
+ `assignment_id: ${field2(record2, "assignment_id")}`,
61034
+ `skill_version_id: ${field2(record2, "skill_version_id")}`,
61035
+ `next: ${field2(record2, "local_sync_next_step")}`
60987
61036
  ].join("\n");
60988
61037
  }
60989
61038
  function packageFromSkillFile(filePath) {
@@ -68913,6 +68962,12 @@ ${onboardingUsage()}
68913
68962
  deadRun = true;
68914
68963
  return 1;
68915
68964
  }
68965
+ const staged = stagedConfirmationFromError(commandId, error51);
68966
+ if (staged !== null) {
68967
+ io.stdout.write(`${format === void 0 ? JSON.stringify(staged, null, 2) : formatStagedConfirmation(commandId, staged)}
68968
+ `);
68969
+ return 0;
68970
+ }
68916
68971
  return printCommandError3(io, error51);
68917
68972
  }
68918
68973
  }
@@ -69242,6 +69297,12 @@ async function printCommandOutput(io, client, commandId, body = {}, format, opti
69242
69297
  return printCommandError3(io, approvalError);
69243
69298
  }
69244
69299
  }
69300
+ const staged = stagedConfirmationFromError(commandId, error51);
69301
+ if (staged !== null) {
69302
+ io.stdout.write(`${format === void 0 ? JSON.stringify(staged, null, 2) : formatStagedConfirmation(commandId, staged)}
69303
+ `);
69304
+ return 0;
69305
+ }
69245
69306
  return printCommandError3(io, error51);
69246
69307
  }
69247
69308
  }