@rosthq/cli 0.7.91 → 0.7.93
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-manifest.d.ts","sourceRoot":"","sources":["../../src/generated/command-manifest.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,eAAO,MAAM,gBAAgB,EAAE,SAAS,oBAAoB,
|
|
1
|
+
{"version":3,"file":"command-manifest.d.ts","sourceRoot":"","sources":["../../src/generated/command-manifest.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,eAAO,MAAM,gBAAgB,EAAE,SAAS,oBAAoB,EAkR3D,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -43804,6 +43804,29 @@ var frictionBulkResolveOutputSchema = external_exports.object({
|
|
|
43804
43804
|
failed_count: external_exports.number().int().nonnegative(),
|
|
43805
43805
|
total: external_exports.number().int().nonnegative()
|
|
43806
43806
|
}).strict();
|
|
43807
|
+
var runHeartbeatStateSchema = external_exports.enum(["working", "quiet_healthy", "recovered", "stalled"]);
|
|
43808
|
+
var agentRunHeartbeatsInputSchema = external_exports.object({
|
|
43809
|
+
seat_ids: external_exports.array(uuidSchema14).min(1).max(200).optional()
|
|
43810
|
+
}).strict();
|
|
43811
|
+
var runHeartbeatSeatRollupSchema = external_exports.object({
|
|
43812
|
+
seat_id: uuidSchema14,
|
|
43813
|
+
state: runHeartbeatStateSchema,
|
|
43814
|
+
stalled: external_exports.boolean(),
|
|
43815
|
+
run_count: external_exports.number().int().nonnegative(),
|
|
43816
|
+
stalled_run_count: external_exports.number().int().nonnegative(),
|
|
43817
|
+
current_phase: external_exports.string().nullable(),
|
|
43818
|
+
last_progress_at: isoDateTime4.nullable(),
|
|
43819
|
+
expected_next_at: isoDateTime4.nullable(),
|
|
43820
|
+
stall_after_at: isoDateTime4.nullable(),
|
|
43821
|
+
done_count: external_exports.number().int().nonnegative(),
|
|
43822
|
+
in_flight_count: external_exports.number().int().nonnegative(),
|
|
43823
|
+
queued_count: external_exports.number().int().nonnegative(),
|
|
43824
|
+
lease_remaining_ms: external_exports.number().int().nullable(),
|
|
43825
|
+
reasons: external_exports.array(external_exports.string())
|
|
43826
|
+
}).strict();
|
|
43827
|
+
var agentRunHeartbeatsOutputSchema = external_exports.object({
|
|
43828
|
+
seats: external_exports.array(runHeartbeatSeatRollupSchema)
|
|
43829
|
+
}).strict();
|
|
43807
43830
|
|
|
43808
43831
|
// ../../packages/protocol/src/working-files.ts
|
|
43809
43832
|
var WORKING_FILE_MAX_PATH_CHARS = 512;
|
|
@@ -44966,6 +44989,27 @@ var softwareDispatchPreviewItemSchema = external_exports.object({
|
|
|
44966
44989
|
hold_reason: softwareDispatchHoldReasonSchema.nullable(),
|
|
44967
44990
|
hold_detail: external_exports.string().nullable()
|
|
44968
44991
|
}).strict();
|
|
44992
|
+
var softwareTouchSetCollisionKindSchema = external_exports.enum([
|
|
44993
|
+
"same_file",
|
|
44994
|
+
"same_package",
|
|
44995
|
+
"same_version_holder"
|
|
44996
|
+
]);
|
|
44997
|
+
var softwareTouchSetRefSchema = external_exports.object({ id: external_exports.string().min(1), label: external_exports.string() }).strict();
|
|
44998
|
+
var softwareTouchSetCollisionSchema = external_exports.object({
|
|
44999
|
+
a: softwareTouchSetRefSchema,
|
|
45000
|
+
b: softwareTouchSetRefSchema,
|
|
45001
|
+
kind: softwareTouchSetCollisionKindSchema,
|
|
45002
|
+
// The concrete overlap basis: shared file paths (`same_file`), shared package ids
|
|
45003
|
+
// (`same_package`), or the contended version-holder surfaces (`same_version_holder`).
|
|
45004
|
+
// Always non-empty — a collision without an overlap basis is never emitted.
|
|
45005
|
+
overlap: external_exports.array(external_exports.string()).min(1)
|
|
45006
|
+
}).strict();
|
|
45007
|
+
var softwareCrossRequestCollisionGroupSchema = external_exports.object({
|
|
45008
|
+
software_project_id: uuid11,
|
|
45009
|
+
requests: external_exports.array(softwareTouchSetRefSchema),
|
|
45010
|
+
collisions: external_exports.array(softwareTouchSetCollisionSchema),
|
|
45011
|
+
unknown: external_exports.array(softwareTouchSetRefSchema)
|
|
45012
|
+
}).strict();
|
|
44969
45013
|
var softwareDispatchPreviewSchema = external_exports.object({
|
|
44970
45014
|
status: external_exports.enum(["ready", "grooming", "held"]),
|
|
44971
45015
|
digest: external_exports.string().min(1),
|
|
@@ -44977,6 +45021,11 @@ var softwareDispatchPreviewSchema = external_exports.object({
|
|
|
44977
45021
|
to_task_key: external_exports.string()
|
|
44978
45022
|
}).strict()).default([]),
|
|
44979
45023
|
serial_lanes: external_exports.array(external_exports.string()).default([]),
|
|
45024
|
+
// DER-1545: advisory intra-request touch-set collisions derived from the tasks'
|
|
45025
|
+
// declared `files_likely` (validates the planner's `parallelizable` claims), plus the
|
|
45026
|
+
// tasks whose touch-set is undeclared (rendered "unknown", never fabricated).
|
|
45027
|
+
file_collisions: external_exports.array(softwareTouchSetCollisionSchema).default([]),
|
|
45028
|
+
unknown_touch_sets: external_exports.array(softwareTouchSetRefSchema).default([]),
|
|
44980
45029
|
estimated_turns: external_exports.number().int().nullable(),
|
|
44981
45030
|
runner_requirements: softwareDispatchPreviewRunnerRequirementSchema,
|
|
44982
45031
|
authority_budget_envelope: external_exports.object({
|
|
@@ -45257,6 +45306,26 @@ var softwareGateDecideOutputSchema = external_exports.object({
|
|
|
45257
45306
|
resolved_by_user_id: uuid11,
|
|
45258
45307
|
decision_id: uuid11.nullable()
|
|
45259
45308
|
});
|
|
45309
|
+
var softwareDispatchSerializeInputSchema = external_exports.object({
|
|
45310
|
+
build_request_id: uuid11,
|
|
45311
|
+
// The task that must run FIRST (the dependency target).
|
|
45312
|
+
before_task_key: external_exports.string().trim().min(1).max(200),
|
|
45313
|
+
// The task that gains the depends_on edge and runs AFTER `before_task_key`.
|
|
45314
|
+
after_task_key: external_exports.string().trim().min(1).max(200),
|
|
45315
|
+
rationale: external_exports.string().trim().min(1).max(2e3).optional()
|
|
45316
|
+
}).strict().refine((value) => value.before_task_key !== value.after_task_key, {
|
|
45317
|
+
message: "before_task_key and after_task_key must differ.",
|
|
45318
|
+
path: ["after_task_key"]
|
|
45319
|
+
});
|
|
45320
|
+
var softwareDispatchSerializeOutputSchema = external_exports.object({
|
|
45321
|
+
build_request_id: uuid11,
|
|
45322
|
+
before_task_key: external_exports.string(),
|
|
45323
|
+
after_task_key: external_exports.string(),
|
|
45324
|
+
// false when the edge already existed (idempotent no-op) — still a valid, audited call.
|
|
45325
|
+
edge_added: external_exports.boolean(),
|
|
45326
|
+
decision_id: uuid11.nullable(),
|
|
45327
|
+
event_id: uuid11.nullable()
|
|
45328
|
+
}).strict();
|
|
45260
45329
|
var forgeClarificationAnswer = external_exports.object({
|
|
45261
45330
|
question: external_exports.string().trim().min(1).max(2e3),
|
|
45262
45331
|
answer: external_exports.string().trim().min(1).max(4e3)
|
|
@@ -46173,6 +46242,19 @@ var syncBriefCascadeAtRiskSchema = external_exports.object({
|
|
|
46173
46242
|
classification: external_exports.enum(["at_risk", "projected_miss"]),
|
|
46174
46243
|
behind_days: external_exports.number().nullable()
|
|
46175
46244
|
}).strict();
|
|
46245
|
+
var syncBriefRunHeartbeatStalledSeatSchema = external_exports.object({
|
|
46246
|
+
seat_id: uuidSchema17,
|
|
46247
|
+
current_phase: external_exports.string().nullable(),
|
|
46248
|
+
stalled_run_count: external_exports.number().int().nonnegative()
|
|
46249
|
+
}).strict();
|
|
46250
|
+
var syncBriefRunHeartbeatRollupSchema = external_exports.object({
|
|
46251
|
+
total_runs_tracked: external_exports.number().int().nonnegative(),
|
|
46252
|
+
working_seat_count: external_exports.number().int().nonnegative(),
|
|
46253
|
+
quiet_healthy_seat_count: external_exports.number().int().nonnegative(),
|
|
46254
|
+
stalled_seat_count: external_exports.number().int().nonnegative(),
|
|
46255
|
+
recovered_seat_count: external_exports.number().int().nonnegative(),
|
|
46256
|
+
stalled_seats: external_exports.array(syncBriefRunHeartbeatStalledSeatSchema)
|
|
46257
|
+
}).strict();
|
|
46176
46258
|
var syncBriefAgentActivitySchema = external_exports.object({
|
|
46177
46259
|
agent_id: uuidSchema17,
|
|
46178
46260
|
seat_id: uuidSchema17,
|
|
@@ -46223,7 +46305,13 @@ var syncBriefSchema = external_exports.object({
|
|
|
46223
46305
|
item: syncBriefActionItemTrendSchema,
|
|
46224
46306
|
flagged_gaps: external_exports.array(syncBriefGapSchema)
|
|
46225
46307
|
}).strict().optional(),
|
|
46226
|
-
cascade_at_risk: sectionSchema(syncBriefCascadeAtRiskSchema).optional()
|
|
46308
|
+
cascade_at_risk: sectionSchema(syncBriefCascadeAtRiskSchema).optional(),
|
|
46309
|
+
// DER-1721: optional so prior briefs / fixtures without a run-heartbeat
|
|
46310
|
+
// roll-up still validate; populated by buildSyncBriefDocument going forward.
|
|
46311
|
+
run_heartbeat: external_exports.object({
|
|
46312
|
+
item: syncBriefRunHeartbeatRollupSchema,
|
|
46313
|
+
flagged_gaps: external_exports.array(syncBriefGapSchema)
|
|
46314
|
+
}).strict().optional()
|
|
46227
46315
|
}).strict(),
|
|
46228
46316
|
flagged_gaps: external_exports.array(syncBriefGapSchema),
|
|
46229
46317
|
sources: external_exports.array(external_exports.string().min(1))
|
|
@@ -48259,7 +48347,7 @@ External connectors are being rolled out provider by provider, conservatively (r
|
|
|
48259
48347
|
order: 48,
|
|
48260
48348
|
title: "CLI and MCP installation guide",
|
|
48261
48349
|
summary: "Install the public CLI, register remote token-backed MCP clients, and find the full command and tool catalog.",
|
|
48262
|
-
version: "2026-07-16.
|
|
48350
|
+
version: "2026-07-16.7",
|
|
48263
48351
|
public: true,
|
|
48264
48352
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
48265
48353
|
stages: ["company_setup", "staffing"],
|
|
@@ -48865,6 +48953,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
48865
48953
|
| \`rost_list_agent_fleet\` | \`agent.list_fleet\` | Read every staffed agent seat at once: lane, live state, last real turn, 24h/7d real turns, measurable status, escalations, and 7-day spend. | Tenant | Call with \`{}\`; counts use the same seat-run association as \`agent.list_runs\`, with sandbox dry runs excluded from real turns. |
|
|
48866
48954
|
| \`rost_get_dogfood_fleet_health_digest\` | \`agent.fleet_digest\` | Capture the daily dogfood fleet-health digest: live/idle state, 24h/7d turns, spend, recent failed runs, unresolved errors, failed notifications, and next actions. | Tenant | Call with \`{}\`; optional \`window_hours\` bounds recent failed-run evidence, while \`error_limit\` caps linked evidence per seat. |
|
|
48867
48955
|
| \`rost_system_health\` | \`system.health\` | Read the scoped system-health snapshot across agent runs, unresolved errors, Signals, Cascade setup, work loop, integrations, runners, notifications, and Sync Brief readiness. | Tenant, member, or seat token | Call with \`{}\`; optional \`seat_id\` narrows inside the caller's server-derived scope. |
|
|
48956
|
+
| \`rost_get_run_heartbeats\` | \`agent.run_heartbeats\` | Read the per-seat run-heartbeat roll-up (quiet-but-healthy vs stalled) for long-running agent programs. | Tenant | Call with \`{}\`; optional \`seat_ids\` narrows to specific seats. |
|
|
48868
48957
|
| \`rost_run_agent_now\` | \`agent.run_now\` | Queue an immediate run for a live staffed agent without changing its saved schedule; cloud lane dispatches to the executor and runner lane queues for the paired runner. | Tenant | Call with \`{"seat_id":"<seat-id>"}\`. |
|
|
48869
48958
|
| \`rost_list_agent_runs\` | \`agent.list_runs\` | Read a seat's agent run history (status, lane, model, cost, per-run Skill activation, tool-call, guard-denied, and guard-held counts) plus the seat's run/tool-call rollup including held-action count. | Seat or tenant-admin | Call with \`{"seat_id":"<seat-id>"}\`; pass \`limit\` for a deeper window. |
|
|
48870
48959
|
| \`rost_get_agent_run_diagnostics\` | \`agent.get_run\` | Read one run's diagnostic record: transcript reference, token/cost usage, outcome, linked product-visible run errors, and loaded Skill activation file metadata. File hashes/sizes identify the immutable source package, while model prompt text may be bounded or truncated. | Seat or tenant-admin | Call with \`{"seat_id":"<seat-id>","run_id":"<run-id>"}\`. |
|
|
@@ -49025,6 +49114,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
49025
49114
|
| \`rost_show_a_forge_build_request\` | \`software_factory.request.show\` | The Forge request detail: the request, current phase, signed dispatch preview, phase-run history, gates, and current \`scheduler_state\` remediation. Read-only; requires the Forge add-on. | Tenant | Call with \`{"build_request_id":"<request-id>"}\`. |
|
|
49026
49115
|
| \`rost_advance_a_forge_build_request_phase\` | \`software_factory.phase.advance\` | Advance a build request to its next phase; the server enforces the closed phase state machine and rejects an illegal transition. | Tenant | Call with \`{"build_request_id":"<request-id>","to_phase":"discovery_scoping"}\`. |
|
|
49027
49116
|
| \`rost_decide_a_forge_gate\` | \`software_factory.gate.decide\` | A human approves or rejects a Forge gate; an agent caller routes to \`/approvals\` and can never self-approve. Sensitive gates record a linked human decision. | Tenant | Call with \`{"gate_id":"<gate-id>","decision":"approve"}\`; non-interactive callers receive a confirmation handoff. |
|
|
49117
|
+
| \`rost_serialize_a_forge_dispatch_collision\` | \`software_factory.dispatch.serialize\` | A human appends a tightening depends_on edge to serialize two colliding Forge tasks (advisory-driven; never auto-blocks). Records a human decision. | Tenant-admin | Call with \`{"build_request_id":"<request-id>","before_task_key":"<key>","after_task_key":"<key>"}\`; non-interactive callers receive a confirmation handoff. |
|
|
49028
49118
|
| \`rost_answer_forge_plan_clarifications\` | \`software_factory.request.answer_clarification\` | Write structured human answers to a draft plan's clarifying questions and optionally mark it ready for plan review; answers append to the versioned planning artifact and never widen authority or automation mode. | Tenant | Call with \`{"build_request_id":"<request-id>","answers":[{"question":"Which database?","answer":"Postgres"}],"mark_ready_for_plan_review":true}\`. |
|
|
49029
49119
|
| \`rost_approve_a_forge_plan\` | \`software_factory.plan.approve\` | A human approves the current plan at the plan_review gate; records a human decision and advances the request to implementation. Owner-only and human-gated. | Tenant-admin | Call with \`{"build_request_id":"<request-id>"}\`; non-interactive callers receive a confirmation handoff. |
|
|
49030
49120
|
| \`rost_reject_a_forge_plan\` | \`software_factory.plan.reject\` | A human rejects the current plan (with a required rationale) and routes the request back to discovery/scoping for re-planning. Owner-only and human-gated. | Tenant-admin | Call with \`{"build_request_id":"<request-id>","rationale":"Scope too broad"}\`; non-interactive callers receive a confirmation handoff. |
|
|
@@ -52316,6 +52406,7 @@ var COMMAND_MANIFEST = [
|
|
|
52316
52406
|
{ "id": "agent.pause", "namespace": "agent", "action": "pause", "title": "Pause agent", "description": "Pause a live agent so it stops scheduled and on-demand runs. Reversible with agent.resume.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": false }], "hasComplexInput": false, "help": "Pause a live agent so it stops scheduled and on-demand runs; queued work orders are expired and a paused agent refuses to run until resumed. Reversible, unlike agent.decommission." },
|
|
52317
52407
|
{ "id": "agent.resume", "namespace": "agent", "action": "resume", "title": "Resume agent", "description": "Resume a paused agent back to live. Blocks if the steward chain no longer resolves to a human.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": false }], "hasComplexInput": false, "help": "Resume a paused agent back to live; the no-orphan guard blocks a resume whose steward chain no longer resolves to a human." },
|
|
52318
52408
|
{ "id": "agent.run_dry_run", "namespace": "agent", "action": "run_dry_run", "title": "Run agent dry run", "description": "Run the sandbox dry run for a draft agent. Durable and idempotent per Charter version; a passed result is reused, never re-run.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "charter_version_id", "flag": "charter-version-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Run the sandbox dry run for a draft agent after the manifest is signed; the result is durable and idempotent per Charter version, and a passed run is reused.", "example": { "seat_id": "0190aaaa-aaaa-7aaa-8aaa-aaaaaaaaaaaa", "charter_version_id": "0190cccc-cccc-7ccc-8ccc-cccccccccccc" } },
|
|
52409
|
+
{ "id": "agent.run_heartbeats", "namespace": "agent", "action": "run_heartbeats", "title": "Get run heartbeats", "description": "Reads the per-seat run-heartbeat roll-up (quiet-but-healthy vs stalled) for long-running agent programs.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_ids", "flag": "seat-ids", "type": "array", "required": false, "itemType": "string" }], "hasComplexInput": false, "help": "Read the per-seat run-heartbeat roll-up to tell a quiet-but-healthy long-running agent program apart from a stalled one." },
|
|
52319
52410
|
{ "id": "agent.run_now", "namespace": "agent", "action": "run_now", "title": "Run agent now", "description": "Queue and dispatch an immediate work order for a live cloud or runner agent on a seat.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "task_id", "flag": "task-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Queue and dispatch an immediate live agent run without changing the agent's saved schedule." },
|
|
52320
52411
|
{ "id": "agent.show_markdown", "namespace": "agent", "action": "show_markdown", "title": "Show agent setup as markdown", "description": "Compose a seat's agent setup, steward, model, tools, and Charter into a clean, human-skimmable markdown card for review.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Render a seat's agent setup, model, steward, tools, and Charter as a clean markdown card to show your human a quick review." },
|
|
52321
52412
|
{ "id": "agent.status", "namespace": "agent", "action": "status", "title": "Get agent status", "description": "Return the agent occupancy, lane, schedule, live/offline state, steward chain, dry-run result, and Runner availability for a seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Check an agent's lane, live state, steward chain, dry-run result, and Runner availability before relying on it." },
|
|
@@ -52493,6 +52584,7 @@ var COMMAND_MANIFEST = [
|
|
|
52493
52584
|
{ "id": "software_factory.conformance.resolve_finding", "namespace": "software_factory", "action": "conformance.resolve_finding", "title": "Resolve Forge conformance finding", "description": "A Forge review seat marks one or more prior open conformance findings resolved after re-reviewing the changeset and verifying they are fixed. This is reviewer verification, not gap-acceptance (accepting a gap stays a separate human gate). A resolved finding stops routing the request back to implementation, letting the recycle loop converge. Requires the Forge add-on.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "build_request_id", "flag": "build-request-id", "type": "string", "required": true }, { "name": "finding_ids", "flag": "finding-ids", "type": "array", "required": true, "itemType": "string" }, { "name": "phase_run_id", "flag": "phase-run-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Resolve a prior open Forge conformance finding after re-reviewing the changeset and verifying it is fixed (reviewer verification, not human gap-acceptance). A resolved finding stops routing the request back to implementation, letting the recycle loop converge." },
|
|
52494
52585
|
{ "id": "software_factory.developer_team.install", "namespace": "software_factory", "action": "developer_team.install", "title": "Install Forge Developer Team", "description": "Install AND activate the governed Forge Developer Team: 8 seats (1 human lead + 7 agents), first-party skills, authority presets, and a conservative token budget. Approving this ACTIVATES the 7 agents as live occupancies at a pr_only, observe-first posture: they open pull requests but never merge or deploy without a human (the Release Manager auto-merges only after a human raises the automation-mode ceiling). Entitlement-gated and human-confirmed.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "steward_seat_id", "flag": "steward-seat-id", "type": "string", "required": true }, { "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": false }, { "name": "assign_skills", "flag": "assign-skills", "type": "boolean", "required": false }, { "name": "acknowledge_autonomy_ceiling", "flag": "acknowledge-autonomy-ceiling", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Install the governed Forge Developer Team template with seats, draft Charters, skills, project authority grants, and audit records. Tenant-admin and human-gated; creates no live agent occupancy." },
|
|
52495
52586
|
{ "id": "software_factory.developer_team.uninstall", "namespace": "software_factory", "action": "developer_team.uninstall", "title": "Uninstall Forge Developer Team", "description": "Tear down the governed Forge Developer Team (ADR-0018 \xA76): end the auto-staffed agent occupancies in a no-orphan-safe order, decommission the agents, and revoke the team's project authority and secret grants. The human Forge Lead seat is left intact; re-installing re-staffs the team. The entitlement-lapse variant runs the same teardown path without re-checking the Forge paywall. Owner-only, human-gated, and audited.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "reason", "flag": "reason", "type": "string", "required": false }, { "name": "trigger", "flag": "trigger", "type": "enum", "required": false, "enumValues": ["manual", "entitlement_lapse"] }], "hasComplexInput": false, "help": "Tear down the Forge Developer Team (teardown \u2014 ADR-0018 \xA76): end the agent occupancies in a no-orphan-safe order, decommission the agents, and revoke the team's authority and secret grants. The human Forge Lead seat stays. Owner-only and human-gated; the entitlement-lapse variant runs the same teardown path." },
|
|
52587
|
+
{ "id": "software_factory.dispatch.serialize", "namespace": "software_factory", "action": "dispatch.serialize", "title": "Serialize a Forge dispatch collision", "description": "A human appends a tightening depends_on edge to serialize two colliding Forge tasks within one build request (advisory-driven; never auto-blocks). Records a human decision. Requires confirmation.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "build_request_id", "flag": "build-request-id", "type": "string", "required": true }, { "name": "before_task_key", "flag": "before-task-key", "type": "string", "required": true }, { "name": "after_task_key", "flag": "after-task-key", "type": "string", "required": true }, { "name": "rationale", "flag": "rationale", "type": "string", "required": false }], "hasComplexInput": false, "help": "A human appends a tightening depends_on edge to serialize two colliding Forge tasks within one build request (advisory-driven; never auto-blocks). Records a human decision." },
|
|
52496
52588
|
{ "id": "software_factory.gate.decide", "namespace": "software_factory", "action": "gate.decide", "title": "Decide a Forge gate", "description": "A human approves or rejects a Forge gate. The resolver is recorded (never an agent \u2014 invariant #7); sensitive gates (security sign-off, merge/deploy, authority change, production deploy) also write a linked human decision. Requires confirmation.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "gate_id", "flag": "gate-id", "type": "string", "required": true }, { "name": "decision", "flag": "decision", "type": "enum", "required": true, "enumValues": ["approve", "reject"] }, { "name": "rationale", "flag": "rationale", "type": "string", "required": false }], "hasComplexInput": false, "help": "A human approves or rejects a Forge gate; an agent caller routes to /approvals and can never self-approve. Sensitive gates record a human decision." },
|
|
52497
52589
|
{ "id": "software_factory.github.installation_token.create", "namespace": "software_factory", "action": "github.installation_token.create", "title": "Create a Forge GitHub installation token", "description": "Mint a short-lived GitHub App installation token for one bound repository after server-side policy evaluation. The token is returned once and never persisted.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": true }, { "name": "repository_id", "flag": "repository-id", "type": "integer", "required": true }, { "name": "requested_actions", "flag": "requested-actions", "type": "array", "required": true, "itemType": "string" }, { "name": "requested_automation_mode", "flag": "requested-automation-mode", "type": "enum", "required": false, "enumValues": ["plan_only", "pr_only", "merge_after_checks", "deploy_preview", "deploy_production"] }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Mint a short-lived GitHub App installation token for one bound repository after policy evaluation; token material is returned once and never stored." },
|
|
52498
52590
|
{ "id": "software_factory.github.installation.bind", "namespace": "software_factory", "action": "github.installation.bind", "title": "Bind Forge GitHub repositories to projects", "description": "Bind already-connected GitHub repositories to Forge projects. Owner-only and human-gated; operates on repositories already verified and connected in this tenant, so no GitHub re-authorization is required. Available any time, add or re-map bindings.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": false, "fields": [{ "name": "app_slug", "flag": "app-slug", "type": "string", "required": false }, { "name": "installation_id", "flag": "installation-id", "type": "integer", "required": true }], "hasComplexInput": true, "help": "Bind already-connected GitHub repositories to Forge projects from the Forge GitHub settings flow. Owner-only and human-gated; no GitHub re-authorization required." },
|