@rosthq/cli 0.7.19 → 0.7.21
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,EAqN3D,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -37741,7 +37741,7 @@ var dryRunTranscriptSchema = external_exports.object({
|
|
|
37741
37741
|
}).strict();
|
|
37742
37742
|
|
|
37743
37743
|
// ../../packages/protocol/src/scrub.ts
|
|
37744
|
-
var SECRET_SHAPED_VALUE = /(sk-ant-|sk-proj-|sk-live-|BEGIN [A-Z ]*PRIVATE KEY|api[_-]?key\s*=|secret\s*=|password\s*=|authorization:\s*bearer\s+|x-api-key\s*:|api[-_ ]?key\s*:\s*\S{3,}|secret\s*:\s*\S{3,}|password\s*:\s*\S{3,}|token\s*:\s*\S{3,})/i;
|
|
37744
|
+
var SECRET_SHAPED_VALUE = /(sk-ant-|sk-proj-|sk-live-|sk-[A-Za-z0-9_-]{12,}|ghp_[A-Za-z0-9_]{12,}|github_pat_[A-Za-z0-9_]{20,}|xox[baprs]-[A-Za-z0-9-]{10,}|BEGIN [A-Z ]*PRIVATE KEY|api[_-]?key\s*=|secret\s*=|password\s*=|authorization:\s*bearer\s+|x-api-key\s*:|api[-_ ]?key\s*:\s*\S{3,}|secret\s*:\s*\S{3,}|password\s*:\s*\S{3,}|token\s*:\s*\S{3,})/i;
|
|
37745
37745
|
var SECRET_KEY = /(api[_-]?key|secret|password|token|authorization|credential|private[_-]?key)/i;
|
|
37746
37746
|
function hasSecretShapedContent(value) {
|
|
37747
37747
|
if (typeof value === "string") {
|
|
@@ -38895,6 +38895,21 @@ var aicosSessionSchema = external_exports.object({
|
|
|
38895
38895
|
updatedAt: external_exports.string().datetime({ offset: true }),
|
|
38896
38896
|
createdAt: external_exports.string().datetime({ offset: true })
|
|
38897
38897
|
}).strict();
|
|
38898
|
+
var AICOS_ATTACHMENT_CONTENT_TYPES = ["image/png", "image/jpeg", "image/webp", "image/gif"];
|
|
38899
|
+
var AICOS_ATTACHMENT_MAX_BYTES = 10 * 1024 * 1024;
|
|
38900
|
+
var AICOS_MAX_ATTACHMENTS_PER_TURN = 4;
|
|
38901
|
+
var aicosAttachmentContentTypeSchema = external_exports.enum(AICOS_ATTACHMENT_CONTENT_TYPES);
|
|
38902
|
+
var aicosAttachmentSchema = external_exports.object({
|
|
38903
|
+
id: uuidSchema4,
|
|
38904
|
+
contentType: aicosAttachmentContentTypeSchema,
|
|
38905
|
+
sizeBytes: external_exports.number().int().positive(),
|
|
38906
|
+
width: external_exports.number().int().positive().nullable(),
|
|
38907
|
+
height: external_exports.number().int().positive().nullable(),
|
|
38908
|
+
filename: external_exports.string().max(255).nullable()
|
|
38909
|
+
}).strict();
|
|
38910
|
+
var aicosAttachmentUploadResultSchema = external_exports.object({
|
|
38911
|
+
attachment: aicosAttachmentSchema
|
|
38912
|
+
}).strict();
|
|
38898
38913
|
var aicosMessageSchema = external_exports.object({
|
|
38899
38914
|
id: uuidSchema4,
|
|
38900
38915
|
sessionId: uuidSchema4,
|
|
@@ -38907,6 +38922,7 @@ var aicosMessageSchema = external_exports.object({
|
|
|
38907
38922
|
linkedRunId: uuidSchema4.nullable(),
|
|
38908
38923
|
linkedWorkOrderId: uuidSchema4.nullable(),
|
|
38909
38924
|
sourceCount: external_exports.number().int().nonnegative().default(0),
|
|
38925
|
+
attachments: external_exports.array(aicosAttachmentSchema).default([]),
|
|
38910
38926
|
createdAt: external_exports.string().datetime({ offset: true })
|
|
38911
38927
|
}).strict();
|
|
38912
38928
|
var aicosSourceSchema = external_exports.object({
|
|
@@ -38922,10 +38938,19 @@ var aicosSourceSchema = external_exports.object({
|
|
|
38922
38938
|
var aicosTurnRequestSchema = external_exports.object({
|
|
38923
38939
|
sessionId: uuidSchema4.nullable().optional(),
|
|
38924
38940
|
purpose: aicosConversationPurposeSchema.default("general"),
|
|
38925
|
-
|
|
38941
|
+
// Empty is permitted only when attachments are present (an image-only turn);
|
|
38942
|
+
// runAicosTurn enforces the "message or attachment required" invariant so the
|
|
38943
|
+
// schema stays a plain object for downstream `.shape`/`.extend` consumers.
|
|
38944
|
+
message: external_exports.string().trim().max(12e3).default(""),
|
|
38945
|
+
attachmentIds: external_exports.array(uuidSchema4).max(AICOS_MAX_ATTACHMENTS_PER_TURN).default([]),
|
|
38926
38946
|
routeContext: aicosRouteContextSchema,
|
|
38927
38947
|
model: aicosModelRequestSchema.optional()
|
|
38928
38948
|
}).strict();
|
|
38949
|
+
var aicosNavigationTargetSchema = external_exports.object({
|
|
38950
|
+
href: external_exports.string().trim().min(1).max(500),
|
|
38951
|
+
label: external_exports.string().trim().min(1).max(180),
|
|
38952
|
+
consentRequired: external_exports.literal(true)
|
|
38953
|
+
}).strict();
|
|
38929
38954
|
var aicosTurnResultSchema = external_exports.object({
|
|
38930
38955
|
session: aicosSessionSchema,
|
|
38931
38956
|
messages: external_exports.array(aicosMessageSchema),
|
|
@@ -38933,6 +38958,7 @@ var aicosTurnResultSchema = external_exports.object({
|
|
|
38933
38958
|
executionBackend: aicosLaneSchema,
|
|
38934
38959
|
status: aicosTurnStatusSchema,
|
|
38935
38960
|
pendingTurn: aicosPendingTurnSchema.nullable().default(null),
|
|
38961
|
+
navigation: aicosNavigationTargetSchema.nullable().default(null),
|
|
38936
38962
|
userVisibleNextStep: external_exports.string().min(1),
|
|
38937
38963
|
capabilitySnapshot: aicosCapabilitySnapshotSchema,
|
|
38938
38964
|
context: aicosContextSummarySchema.optional()
|
|
@@ -42216,19 +42242,35 @@ var softwareProjectSummarySchema = external_exports.object({
|
|
|
42216
42242
|
base_branch: external_exports.string().min(1),
|
|
42217
42243
|
repo_ref: external_exports.string().nullable()
|
|
42218
42244
|
});
|
|
42245
|
+
var softwareProjectCreateInputSchema = external_exports.object({
|
|
42246
|
+
name: external_exports.string().trim().min(1).max(200).refine((value) => !hasSecretShapedValue(value), {
|
|
42247
|
+
message: "project name must not contain raw secret material"
|
|
42248
|
+
}),
|
|
42249
|
+
slug: external_exports.string().trim().regex(/^[a-z0-9][a-z0-9-]{0,62}$/).refine((value) => !hasSecretShapedValue(value), {
|
|
42250
|
+
message: "slug must not contain raw secret material"
|
|
42251
|
+
}).optional(),
|
|
42252
|
+
base_branch: external_exports.string().trim().min(1).max(255).refine((value) => !hasSecretShapedValue(value), {
|
|
42253
|
+
message: "base_branch must not contain raw secret material"
|
|
42254
|
+
}).default("main"),
|
|
42255
|
+
repo_ref: external_exports.string().trim().min(1).max(255).refine((value) => !hasSecretShapedValue(value), {
|
|
42256
|
+
message: "repo_ref must be repository metadata, never raw secret material"
|
|
42257
|
+
}).optional()
|
|
42258
|
+
}).strict();
|
|
42259
|
+
var softwareProjectCreateOutputSchema = external_exports.object({
|
|
42260
|
+
project: softwareProjectSummarySchema
|
|
42261
|
+
});
|
|
42219
42262
|
var softwareProjectListInputSchema = external_exports.object({}).strict();
|
|
42220
42263
|
var softwareProjectListOutputSchema = external_exports.object({
|
|
42221
42264
|
projects: external_exports.array(softwareProjectSummarySchema)
|
|
42222
42265
|
});
|
|
42223
42266
|
var VAULT_REF_PROVIDER = /^(?:infisical|doppler|local-dev):\/\/\S+$/;
|
|
42224
|
-
var
|
|
42225
|
-
var softwareVaultRefSchema = external_exports.string().min(1).max(500).regex(VAULT_REF_PROVIDER, "vault_ref must be a provider URI, e.g. infisical://path, doppler://path, or local-dev://path").refine((value) => !RAW_SECRET_SUBSTRING.test(value), {
|
|
42267
|
+
var softwareVaultRefSchema = external_exports.string().min(1).max(500).regex(VAULT_REF_PROVIDER, "vault_ref must be a provider URI, e.g. infisical://path, doppler://path, or local-dev://path").refine((value) => !hasSecretShapedValue(value), {
|
|
42226
42268
|
message: "vault_ref must be a pointer, never raw secret material"
|
|
42227
42269
|
});
|
|
42228
|
-
var softwareSecretKeyNameSchema = external_exports.string().trim().min(1).max(200).refine((value) => !
|
|
42270
|
+
var softwareSecretKeyNameSchema = external_exports.string().trim().min(1).max(200).refine((value) => !hasSecretShapedValue(value), {
|
|
42229
42271
|
message: "key_name must be a config key name, never raw secret material"
|
|
42230
42272
|
});
|
|
42231
|
-
var softwareSecretActionSchema = external_exports.string().trim().min(1).max(120).refine((value) => !
|
|
42273
|
+
var softwareSecretActionSchema = external_exports.string().trim().min(1).max(120).refine((value) => !hasSecretShapedValue(value), {
|
|
42232
42274
|
message: "action must be an action verb, never raw secret material"
|
|
42233
42275
|
});
|
|
42234
42276
|
var softwareTerminationBoundSchema = external_exports.object({
|
|
@@ -42470,7 +42512,7 @@ var softwareConfigSetInputSchema = external_exports.object({
|
|
|
42470
42512
|
if (!value.plain_value || value.vault_ref !== void 0) {
|
|
42471
42513
|
context.addIssue({ code: "custom", message: "plain config requires plain_value and no vault_ref" });
|
|
42472
42514
|
}
|
|
42473
|
-
if (value.plain_value &&
|
|
42515
|
+
if (value.plain_value && hasSecretShapedValue(value.plain_value)) {
|
|
42474
42516
|
context.addIssue({ code: "custom", message: "plain_value must never contain secret material" });
|
|
42475
42517
|
}
|
|
42476
42518
|
}
|
|
@@ -42530,7 +42572,15 @@ var softwareDeveloperTeamInstallInputSchema = external_exports.object({
|
|
|
42530
42572
|
// rejects (→ "Command input failed schema validation"). Matches the sibling
|
|
42531
42573
|
// software-factory schemas that already use `.nullable().optional()`.
|
|
42532
42574
|
software_project_id: uuid10.nullable().optional(),
|
|
42533
|
-
assign_skills: external_exports.boolean().default(true)
|
|
42575
|
+
assign_skills: external_exports.boolean().default(true),
|
|
42576
|
+
// DER-1264: the install auto-staffs live agents at a pr_only, observe-first
|
|
42577
|
+
// posture. If the tenant's company autonomy ceiling (`agent_policy`) is MORE
|
|
42578
|
+
// permissive than this design's envelope (resolved `max_autonomous_risk` >= high,
|
|
42579
|
+
// i.e. `high_autonomy` or a custom high/critical ceiling), the install refuses to
|
|
42580
|
+
// auto-activate unless the owner explicitly acknowledges that posture. Never
|
|
42581
|
+
// silently inherit a more-permissive-than-designed ceiling (invariant #10). A
|
|
42582
|
+
// tenant within the envelope (locked_down/balanced) never needs this.
|
|
42583
|
+
acknowledge_autonomy_ceiling: external_exports.boolean().default(false)
|
|
42534
42584
|
}).strict();
|
|
42535
42585
|
var softwareDeveloperTeamSeatSummarySchema = external_exports.object({
|
|
42536
42586
|
role: softwareDeveloperTeamRoleSchema,
|
|
@@ -42558,12 +42608,45 @@ var softwareDeveloperTeamAuthorityGrantSummarySchema = external_exports.object({
|
|
|
42558
42608
|
grant_id: uuid10,
|
|
42559
42609
|
created: external_exports.boolean()
|
|
42560
42610
|
});
|
|
42611
|
+
var softwareDeveloperTeamOccupancySummarySchema = external_exports.object({
|
|
42612
|
+
role: softwareDeveloperTeamRoleSchema,
|
|
42613
|
+
seat_id: uuid10,
|
|
42614
|
+
agent_id: uuid10,
|
|
42615
|
+
template_slug: external_exports.string(),
|
|
42616
|
+
status: external_exports.literal("live"),
|
|
42617
|
+
// false when a live agent already occupied the seat (idempotent re-install).
|
|
42618
|
+
created: external_exports.boolean()
|
|
42619
|
+
});
|
|
42620
|
+
var softwareDeveloperTeamAgentPolicySummarySchema = external_exports.object({
|
|
42621
|
+
profile: agentPolicyProfileSchema,
|
|
42622
|
+
enforcement: agentPolicyEnforcementSchema,
|
|
42623
|
+
max_autonomous_risk: autonomousRiskLevelSchema,
|
|
42624
|
+
// true when the resolved ceiling is more permissive than this design's envelope
|
|
42625
|
+
// (max_autonomous_risk >= high) and the owner acknowledged it to activate.
|
|
42626
|
+
more_permissive_than_envelope: external_exports.boolean()
|
|
42627
|
+
});
|
|
42628
|
+
var softwareDeveloperTeamTokenBudgetSummarySchema = external_exports.object({
|
|
42629
|
+
hard_cap_usd: external_exports.string().nullable(),
|
|
42630
|
+
soft_cap_usd: external_exports.string().nullable(),
|
|
42631
|
+
set_by_install: external_exports.boolean()
|
|
42632
|
+
});
|
|
42633
|
+
var softwareDeveloperTeamGithubPolicySummarySchema = external_exports.object({
|
|
42634
|
+
software_project_id: uuid10,
|
|
42635
|
+
automation_mode_ceiling: softwareAutomationModeSchema,
|
|
42636
|
+
// false when a pre-existing policy was preserved (not created by this install).
|
|
42637
|
+
created: external_exports.boolean()
|
|
42638
|
+
});
|
|
42561
42639
|
var softwareDeveloperTeamInstallOutputSchema = external_exports.object({
|
|
42562
42640
|
installed: external_exports.boolean(),
|
|
42563
42641
|
seats: external_exports.array(softwareDeveloperTeamSeatSummarySchema),
|
|
42564
42642
|
skills: external_exports.array(softwareDeveloperTeamSkillSummarySchema),
|
|
42565
42643
|
authority_profiles: external_exports.array(softwareDeveloperTeamAuthorityProfileSummarySchema),
|
|
42566
|
-
authority_grants: external_exports.array(softwareDeveloperTeamAuthorityGrantSummarySchema)
|
|
42644
|
+
authority_grants: external_exports.array(softwareDeveloperTeamAuthorityGrantSummarySchema),
|
|
42645
|
+
// DER-1264 auto-staffing additions.
|
|
42646
|
+
occupancies: external_exports.array(softwareDeveloperTeamOccupancySummarySchema),
|
|
42647
|
+
agent_policy: softwareDeveloperTeamAgentPolicySummarySchema,
|
|
42648
|
+
token_budget: softwareDeveloperTeamTokenBudgetSummarySchema,
|
|
42649
|
+
github_policy: softwareDeveloperTeamGithubPolicySummarySchema.nullable()
|
|
42567
42650
|
});
|
|
42568
42651
|
var forgeArtifactText = external_exports.string().trim().min(1).max(4e3);
|
|
42569
42652
|
var forgeArtifactList = external_exports.array(forgeArtifactText).max(50).default([]);
|
|
@@ -43511,7 +43594,7 @@ The Compass is drafted, then activated by a human through supersession.
|
|
|
43511
43594
|
order: 15,
|
|
43512
43595
|
title: "AICOS chat guide",
|
|
43513
43596
|
summary: "How the AI Chief of Staff chat works in the authenticated app shell and what it can safely do today.",
|
|
43514
|
-
version: "2026-07-04.
|
|
43597
|
+
version: "2026-07-04.11",
|
|
43515
43598
|
public: true,
|
|
43516
43599
|
audiences: ["human", "in_app_agent"],
|
|
43517
43600
|
stages: ["company_setup", "operating_rhythm"],
|
|
@@ -43569,7 +43652,9 @@ AICOS also has an explicit brain selection. Cloud can use the included managed a
|
|
|
43569
43652
|
|
|
43570
43653
|
Runner mode uses the same AICOS sessions and transcript. Interactive chat turns are tracked separately from scheduled work orders: each user message has one user-owned turn execution with a short deadline, so two users' chat messages cannot collapse into the same scheduled-work slot. Scheduled and Forge runner work still use work orders. Runner claim packets carry ids and execution metadata, not the user's free-text request. After claim, the local runner calls the governed AICOS context-load tool, which re-checks seat scope and returns the bounded transcript, session summary, route context, tenant clock, grounding text, and source counts authorized for that turn. The runner treats that loaded tenant clock and context as authoritative instead of substituting its own runtime clock or local files. A runner must be paired, execute-ready, and backed by the live AICOS agent before it can be selected.
|
|
43571
43654
|
|
|
43572
|
-
When a runner claims an interactive AICOS turn, the runner reports start and final result back to {{brand}}. The server appends exactly one assistant transcript message for the result, links that message to run evidence, and treats duplicate or late result reports as idempotent. If a queued, claimed, or running interactive turn passes its short deadline before a runner writes back, the turn is marked offline and the transcript receives a terminal assistant message instead of leaving a permanent "queued" placeholder.
|
|
43655
|
+
When a runner claims an interactive AICOS turn, the runner reports start and final result back to {{brand}}. The server appends exactly one assistant transcript message for the result, links that message to run evidence, and treats duplicate or late result reports as idempotent. If the runner answer includes a validated in-app link, the web panel can surface the same consent-required navigation suggestion once polling sees that the pending turn is terminal. If a queued, claimed, or running interactive turn passes its short deadline before a runner writes back, the turn is marked offline and the transcript receives a terminal assistant message instead of leaving a permanent "queued" placeholder.
|
|
43656
|
+
|
|
43657
|
+
While a runner turn is queued, claimed, or running, the chat panel keeps showing the pending state and polls the session until the answer or terminal status arrives. The composer, model picker, and lane picker are disabled during that active turn so a second browser tab or direct API call cannot overlap another runner turn in the same thread. Terminal runner statuses such as failed, offline, or canceled stay visible only while they are still the latest user turn; if the user continues the conversation in another lane, the stale terminal marker is no longer projected at the bottom of the thread.
|
|
43573
43658
|
|
|
43574
43659
|
MCP mode uses the existing tenant-authorized MCP surfaces. It requires an active seat-scoped MCP token for the AICOS seat and does not grant hidden tenant-admin access or run browser-side MCP tool calls. Users operate MCP AICOS from their authorized agent interface; the web chat remains the same readable thread surface.
|
|
43575
43660
|
|
|
@@ -43577,6 +43662,8 @@ Model behavior is now explicit in the AICOS session contract. A thread can run i
|
|
|
43577
43662
|
|
|
43578
43663
|
Assistant answers render safe Markdown for headings, short lists, emphasis, code, tables, and in-app links. User messages remain plain escaped text. Links only become clickable when they target same-origin app routes such as \`/inbox\` or \`/settings\`; external, protocol, script, API-style, or traversal targets are stripped to plain text before transcript storage. When an answer includes a validated app route, the chat can surface one consent-required navigation suggestion and, if the user has enabled the local preference, open that route automatically. Navigation is never authorization; destination pages still enforce their own tenant, role, and seat checks.
|
|
43579
43664
|
|
|
43665
|
+
You can attach images to a message from the composer. {{brand}} accepts PNG, JPEG, WebP, and GIF up to 10 MB each, and up to four per message. Images are held in a tenant-scoped private store, stripped of embedded metadata such as EXIF on upload, and shown as thumbnails in your message; the panel loads each thumbnail through a short-lived signed link rather than a public URL. In the cloud lane the agent can view the image directly. Runner and MCP viewing of attached images is a scoped follow-up; today the agent still reads the accompanying text on those lanes.
|
|
43666
|
+
|
|
43580
43667
|
AICOS can also retrieve bounded summaries from prior sessions owned by the same tenant user and surface them as session-memory read models. Setup-limited users do not retrieve sensitive historical run or company-memory summaries through this path. This is a practical memory seam for AICOS continuity; it is not yet the future Company Brain, and it does not make unaccepted knowledge authoritative.
|
|
43581
43668
|
|
|
43582
43669
|
Platform allowance and BYOK state are checked before routing; an exhausted included allowance keeps AICOS in guided mode and points the user toward BYOK/manual continuation. Because the DER-1068 implementation still uses the deterministic harness, it does not create fake llm_calls rows or settle fake allowance usage; reservation/settlement belongs to the real provider call path.
|
|
@@ -44392,7 +44479,7 @@ External connectors are being rolled out provider by provider, conservatively (r
|
|
|
44392
44479
|
order: 48,
|
|
44393
44480
|
title: "CLI and MCP installation guide",
|
|
44394
44481
|
summary: "Install the public CLI, register remote token-backed MCP clients, and find the full command and tool catalog.",
|
|
44395
|
-
version: "2026-07-
|
|
44482
|
+
version: "2026-07-04.11",
|
|
44396
44483
|
public: true,
|
|
44397
44484
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
44398
44485
|
stages: ["company_setup", "staffing"],
|
|
@@ -44869,6 +44956,7 @@ The signed-in app exposes the same Skill command surface under **Skills** in the
|
|
|
44869
44956
|
| \`{{cli}} deliverable list|get|create|attach\` | \`deliverable.list\`, \`deliverable.get\`, \`deliverable.create\`, \`deliverable.attach\` | List, get, create, or attach agent deliverables for a seat. Deliverables are durable work outputs visible across UI, CLI, and MCP. | Tenant (list/get), Seat (create/attach) | \`{{cli}} deliverable list --seat-id <id> --json\`; \`{{cli}} deliverable create --title "Brief" --kind brief\` |
|
|
44870
44957
|
| \`{{cli}} graph show\` | \`graph.get\` | Print a table view of the Responsibility Graph with explicit \`seat_id\` and \`parent_seat_id\` columns. | Tenant | \`{{cli}} graph show\` |
|
|
44871
44958
|
| \`{{cli}} seat list|get|create|rename|reparent|decommission\` | \`graph.get\`, \`seat.get\`, \`seat.create\`, \`seat.rename\`, \`seat.reparent\`, \`seat.decommission\`, \`seat.decommission_preview\` | Work with seats as first-class CLI primitives. \`seat decommission --dry-run\` previews affected occupancies, agents, Charters, tokens, credentials, work orders, and schedules before the human-gated teardown. | Tenant / Seat for targeted mutations | \`{{cli}} seat list\`; \`{{cli}} seat decommission --seat-id <id> --dry-run\` |
|
|
44959
|
+
| \`{{cli}} forge project-create|project-list|request-create|request-list|request-show\` | \`software_factory.project.create\`, \`software_factory.project.list\`, \`software_factory.request.create\`, \`software_factory.request.list\`, \`software_factory.request.show\` | Create/list Forge projects and open/read governed Forge build requests. Project creation is tenant-admin, entitlement-gated, and human-gated; reads and request creation require the Forge add-on. | Tenant / Tenant-admin for create | \`{{cli}} forge project-create --name "Leiluna app" --base-branch main\`; \`{{cli}} forge request-create --software-project-id <id> --title "Add invoice export"\` |
|
|
44872
44960
|
|
|
44873
44961
|
Skills wrapper help:
|
|
44874
44962
|
|
|
@@ -45108,6 +45196,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
45108
45196
|
| \`rost_assign_skill_to_seat\` | \`skill.assign_to_seat\` | Propose or human-approve a published Skill version for a Seat after dependency checks. Missing required tools block approval; optional tools warn. | Tenant-admin | Call with \`{"seat_id":"<seat-id>","slug":"invoice-review","status":"proposed","rationale":"Use for AP exception work."}\`. |
|
|
45109
45197
|
| \`rost_revoke_skill_from_seat\` | \`skill.revoke_from_seat\` | Human-gated revocation that stops future Skill use without deleting historical activations. | Tenant-admin | Call with \`{"assignment_id":"<assignment-id>"}\`; non-interactive callers receive a confirmation handoff. |
|
|
45110
45198
|
| \`rost_list_model_catalog\` | \`model.catalog\` | List guided model tiers \u2014 recommendations, token prices, cost bands, best-fit work, and model ids for \`--model\`. | Tenant | Call with \`{}\`. |
|
|
45199
|
+
| \`rost_create_a_forge_project\` | \`software_factory.project.create\` | Create an active Forge software project before binding repositories or opening build requests. Tenant-admin, human-gated, and entitlement-gated. | Tenant-admin | Call with \`{"name":"Leiluna app","slug":"leiluna-app","base_branch":"main"}\`; non-interactive callers receive a confirmation handoff. |
|
|
45111
45200
|
| \`rost_create_a_forge_build_request\` | \`software_factory.request.create\` | Open a governed Forge build request against a connected software project; records the request plus its initial intake phase run. Requires the Forge add-on; the title is untrusted display text. | Tenant | Call with \`{"software_project_id":"<project-id>","title":"Add invoice export"}\`. |
|
|
45112
45201
|
| \`rost_list_forge_projects\` | \`software_factory.project.list\` | List active Forge software projects so a tenant can choose a project for build requests, GitHub repository bindings, and config. | Tenant | Call with \`{}\`; use the returned \`id\` as \`software_project_id\`. |
|
|
45113
45202
|
| \`rost_list_forge_build_requests\` | \`software_factory.request.list\` | The Forge control-room board: build requests with status, current phase, and risk. Read-only; requires the Forge add-on. | Tenant | Call with \`{}\` or \`{"limit":20}\`. |
|
|
@@ -45118,7 +45207,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
45118
45207
|
| \`rost_create_a_forge_authority_profile\` | \`software_factory.authority_profile.create\` | Define a Forge authority profile (a named seat capability preset). Owner-only; defaults to the read_only preset. | Tenant-admin | Call with \`{"name":"Builder","preset":"contributor"}\`. |
|
|
45119
45208
|
| \`rost_grant_forge_seat_authority\` | \`software_factory.authority.grant\` | Grant a seat a Forge authority profile on a project (seat \u2192 project \u2192 profile). Owner-only and human-gated; emits a durable authority-change event. | Tenant-admin | Call with \`{"software_project_id":"<project-id>","seat_id":"<seat-id>","authority_profile_id":"<profile-id>"}\`; non-interactive callers receive a confirmation handoff. |
|
|
45120
45209
|
| \`rost_revoke_forge_seat_authority\` | \`software_factory.authority.revoke\` | Revoke a Forge authority grant (teardown). Owner-only and human-gated. | Tenant-admin | Call with \`{"grant_id":"<grant-id>"}\`; non-interactive callers receive a confirmation handoff. |
|
|
45121
|
-
| \`rost_install_forge_developer_team\` | \`software_factory.developer_team.install\` | Install the governed Forge Developer Team
|
|
45210
|
+
| \`rost_install_forge_developer_team\` | \`software_factory.developer_team.install\` | Install AND activate the governed Forge Developer Team: Forge Lead (human) plus Planner, Builder, plan reviewer, security reviewer, QA/release, and Fold/Memory seats with draft Charters, first-party Forge Skills, and authority presets. Approving ALSO auto-staffs the 6 agent seats as live occupancies at a pull-request-only, observe-first posture (open pull requests, never merge/deploy without a human), steward-chained to the human lead, each with a signed manifest + passed sandbox dry-run; it sets a conservative default token budget (only if none) and, for a supplied project, a default pr_only GitHub automation policy (only if none \u2014 never widening a stricter one). Entitlement-gated and human-gated. | Tenant-admin | Call with \`{"steward_seat_id":"<human-steward-seat-id>"}\` \u2014 \`software_project_id\` is optional (when supplied it scopes authority grants to that project; the team installs tenant-wide either way). If the company autonomy ceiling is more permissive than the observe-first envelope, add \`{"acknowledge_autonomy_ceiling":true}\` to activate. Non-interactive callers receive a confirmation handoff. |
|
|
45122
45211
|
| \`rost_list_forge_config\` | \`software_factory.config.list\` | List active Forge configuration entries. Plain values may be returned only when they passed the non-secret guard; secret refs appear as metadata and never include the ref value. | Tenant | Call with \`{}\` or \`{"software_project_id":"<project-id>","environment":"preview"}\`. |
|
|
45123
45212
|
| \`rost_set_forge_config\` | \`software_factory.config.set\` | Human-gated config create/rotation for plain values or secret refs. Secret refs store only a vault pointer and raw secret-shaped plain values are rejected. | Tenant-admin | Call with \`{"software_project_id":"<project-id>","environment":"preview","key_name":"PUBLIC_BASE_URL","value_kind":"plain","plain_value":"https://preview.example.com"}\`. |
|
|
45124
45213
|
| \`rost_list_forge_secret_requests\` | \`software_factory.secret_request.list\` | List missing-secret requests and their approval Task ids/statuses. It returns request metadata only \u2014 no secret values and no vault refs. | Tenant | Call with \`{}\` or \`{"status":"pending"}\`. |
|
|
@@ -45128,7 +45217,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
45128
45217
|
| \`rost_create_a_forge_github_installation_token\` | \`software_factory.github.installation_token.create\` | Mint a short-lived GitHub App installation token for one bound repository after policy evaluation. The token is returned once and never stored. | Tenant | Call with \`{"software_project_id":"<project-id>","repository_id":789,"requested_actions":["read"],"requested_automation_mode":"plan_only"}\`. |
|
|
45129
45218
|
| \`rost_list_forge_runner_capacity\` | \`software_factory.capacity.list\` | List Forge runner capacity observations (advisory scheduling input only, never an authority input). Read-only; requires the Forge add-on. | Tenant | Call with \`{}\` or \`{"runner_id":"<runner-id>"}\`. |
|
|
45130
45219
|
|
|
45131
|
-
The web Forge control room at \`/forge\` uses the same command path for project selection, build request creation/list/detail reads, runner capacity, configuration status, and Developer Team
|
|
45220
|
+
The web Forge control room at \`/forge\` uses the same command path for project selection, build request creation/list/detail reads, runner capacity, configuration status, and Developer Team install. The install button deliberately stages a pending confirmation before durable seats, Skills, authority grants, or live agent activation are applied; the install page states plainly that approving activates the 6 agents at a pull-request-only, observe-first posture and surfaces the company autonomy ceiling.
|
|
45132
45221
|
|
|
45133
45222
|
#### Forge GitHub App access
|
|
45134
45223
|
|
|
@@ -45720,7 +45809,7 @@ Agents can suggest commitments and report progress. They should not create a new
|
|
|
45720
45809
|
order: 61,
|
|
45721
45810
|
title: "Signal guide",
|
|
45722
45811
|
summary: "How to define and read measurables so the company runs on evidence instead of status theater.",
|
|
45723
|
-
version: "2026-07-
|
|
45812
|
+
version: "2026-07-04.1",
|
|
45724
45813
|
public: true,
|
|
45725
45814
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
45726
45815
|
stages: ["operating_rhythm"],
|
|
@@ -45776,7 +45865,7 @@ Avoid vanity numbers, manual-only status fields, and metrics nobody can act on.
|
|
|
45776
45865
|
|
|
45777
45866
|
- Read: \`{{cli}} signal list --json\` / \`signal.list\` / \`rost_list_signals\` returns measurables with their latest reading and on/off-track state. \`signal.get\` / \`rost_get_signal\` returns one measurable's full reading history.
|
|
45778
45867
|
- Add a measurable: \`measurable.create\` (scope: seat) defines a measurable a seat owns \u2014 name, unit, direction, target, cadence. The seat owns it; readings attach to it afterward.
|
|
45779
|
-
- Record a reading: \`{{cli}} status record --measurable-id <id> --value <n>\` (\`status.record\`, scope: seat) writes a status event with the reading. This is not gated.
|
|
45868
|
+
- Record a reading: \`{{cli}} status record --measurable-id <id> --value <n>\` (\`status.record\`, scope: seat) writes a status event with the reading. This is not gated. An agent's \`status.record\` never downgrades a human-confirmed reading: a routine agent read that lands on a period a human already confirmed leaves the confirmed value and its confirmation intact (invariants #7/#8 \u2014 agents recommend; humans decide).
|
|
45780
45869
|
- Confirm a reading: \`{{cli}} signal confirm\` / \`signal.confirm_reading\` / \`rost_confirm_signal_reading\` marks a reading human-verified. \`signal.correct_reading\` / \`rost_correct_signal_reading\` overwrites a reading with a human-confirmed value.
|
|
45781
45870
|
|
|
45782
45871
|
## Run Signal without an agent
|
|
@@ -48308,12 +48397,13 @@ var COMMAND_MANIFEST = [
|
|
|
48308
48397
|
{ "id": "software_factory.capacity.list", "namespace": "software_factory", "action": "capacity.list", "title": "List Forge runner capacity", "description": "List the tenant's Forge runner capacity observations (OS, CPU, memory, active sessions, usage-limit telemetry). Advisory scheduling input only, never an authority input. Read-only, entitlement-gated.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "runner_id", "flag": "runner-id", "type": "string", "required": false }, { "name": "limit", "flag": "limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "List Forge runner capacity observations (advisory scheduling input only, never an authority input). Read-only; requires the Forge add-on." },
|
|
48309
48398
|
{ "id": "software_factory.config.list", "namespace": "software_factory", "action": "config.list", "title": "List Forge config", "description": "List active Forge config metadata for project environments. Plain config values may be returned; secret refs are represented only as has_secret_ref.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": false }, { "name": "environment", "flag": "environment", "type": "enum", "required": false, "enumValues": ["development", "preview", "production"] }], "hasComplexInput": false, "help": "List active Forge config entries. Plain config may be shown; secret refs are represented only as metadata." },
|
|
48310
48399
|
{ "id": "software_factory.config.set", "namespace": "software_factory", "action": "config.set", "title": "Set Forge config", "description": "Create or rotate a Forge project config entry. Secret config stores only a vault ref pointer; raw values are never accepted for secret_ref entries.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": true }, { "name": "environment", "flag": "environment", "type": "enum", "required": true, "enumValues": ["development", "preview", "production"] }, { "name": "key_name", "flag": "key-name", "type": "string", "required": true }, { "name": "value_kind", "flag": "value-kind", "type": "enum", "required": true, "enumValues": ["plain", "secret_ref"] }, { "name": "plain_value", "flag": "plain-value", "type": "string", "required": false }, { "name": "vault_ref", "flag": "vault-ref", "type": "string", "required": false }], "hasComplexInput": false, "help": "Set or rotate a Forge project config key. Secret entries store only vault refs and are human-gated." },
|
|
48311
|
-
{ "id": "software_factory.developer_team.install", "namespace": "software_factory", "action": "developer_team.install", "title": "Install Forge Developer Team", "description": "Install the governed Forge Developer Team
|
|
48400
|
+
{ "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: 7 seats (1 human lead + 6 agents), first-party skills, authority presets, and a conservative token budget. Approving this ACTIVATES the 6 agents as live occupancies at a pr_only, observe-first posture: they open pull requests but never merge or deploy without a human. 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": false, "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." },
|
|
48312
48401
|
{ "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." },
|
|
48313
48402
|
{ "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." },
|
|
48314
48403
|
{ "id": "software_factory.github.installation.bind", "namespace": "software_factory", "action": "github.installation.bind", "title": "Bind a Forge GitHub installation", "description": "Bind a GitHub App installation and selected repositories to Forge projects from the authenticated Forge GitHub settings flow. Owner-only and human-gated; webhook payloads never supply tenant authority.", "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 }, { "name": "account_login", "flag": "account-login", "type": "string", "required": true }, { "name": "account_id", "flag": "account-id", "type": "integer", "required": true }, { "name": "account_type", "flag": "account-type", "type": "string", "required": true }], "hasComplexInput": true, "help": "Bind a GitHub App installation and selected repositories to Forge projects from the authenticated Forge GitHub settings flow. Owner-only and human-gated." },
|
|
48315
48404
|
{ "id": "software_factory.github.policy.upsert", "namespace": "software_factory", "action": "github.policy.upsert", "title": "Set a Forge GitHub automation policy", "description": "Set the server-side policy for GitHub actions and automation-mode ceilings. Owner-only and human-gated; production deploy remains human-gated.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": true }, { "name": "authority_profile_id", "flag": "authority-profile-id", "type": "string", "required": false }, { "name": "automation_mode_ceiling", "flag": "automation-mode-ceiling", "type": "enum", "required": false, "enumValues": ["plan_only", "pr_only", "merge_after_checks", "deploy_preview", "deploy_production"] }, { "name": "allowed_actions", "flag": "allowed-actions", "type": "array", "required": true, "itemType": "string" }, { "name": "requires_human_for", "flag": "requires-human-for", "type": "array", "required": true, "itemType": "string" }], "hasComplexInput": false, "help": "Set Forge's server-side GitHub automation policy for actions, mode ceilings, and human-gated operations." },
|
|
48316
48405
|
{ "id": "software_factory.phase.advance", "namespace": "software_factory", "action": "phase.advance", "title": "Advance a Forge build request phase", "description": "Advance a build request to the next phase, enforcing the closed phase state machine server-side (an illegal transition is rejected). Writes a phase-run row and updates the current phase. Entitlement-gated.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "build_request_id", "flag": "build-request-id", "type": "string", "required": true }, { "name": "to_phase", "flag": "to-phase", "type": "enum", "required": true, "enumValues": ["intake", "discovery_scoping", "plan_review", "implementation", "plan_conformance_review", "security_review", "qa_verification", "release_preview", "merge_or_deploy_gate", "closeout"] }, { "name": "owning_seat_id", "flag": "owning-seat-id", "type": "string", "required": false }, { "name": "note", "flag": "note", "type": "string", "required": false }], "hasComplexInput": false, "help": "Advance a build request to its next phase; the server enforces the closed phase state machine and rejects an illegal transition." },
|
|
48406
|
+
{ "id": "software_factory.project.create", "namespace": "software_factory", "action": "project.create", "title": "Create a Forge project", "description": "Create an active Forge software project before binding repositories or opening build requests. Tenant-admin, human-gated, and entitlement-gated.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "name", "flag": "name", "type": "string", "required": true }, { "name": "slug", "flag": "slug", "type": "string", "required": false }, { "name": "base_branch", "flag": "base-branch", "type": "string", "required": false }, { "name": "repo_ref", "flag": "repo-ref", "type": "string", "required": false }], "hasComplexInput": false, "help": "Create an active Forge software project before binding repositories or opening build requests. Tenant-admin and human-gated; requires the Forge add-on." },
|
|
48317
48407
|
{ "id": "software_factory.project.list", "namespace": "software_factory", "action": "project.list", "title": "List Forge projects", "description": "List active Forge software projects so a tenant can choose a project for build requests, GitHub repository bindings, and config. Read-only and entitlement-gated.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "List active Forge software projects so a tenant can choose a project for build requests, GitHub repository bindings, and config. Read-only; requires the Forge add-on." },
|
|
48318
48408
|
{ "id": "software_factory.request.create", "namespace": "software_factory", "action": "request.create", "title": "Create a Forge build request", "description": "Open a governed Forge build request against a connected software project. Records the request plus its initial intake phase run. Entitlement-gated (Forge add-on); the title is untrusted display text, never an instruction.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": true }, { "name": "title", "flag": "title", "type": "string", "required": true }, { "name": "source_channel", "flag": "source-channel", "type": "enum", "required": false, "enumValues": ["ui", "cli", "github_issue", "linear", "api"] }, { "name": "source_ref", "flag": "source-ref", "type": "string", "required": false }], "hasComplexInput": true, "help": "Open a governed Forge build request against a connected software project; the title is untrusted display text. Requires the Forge add-on." },
|
|
48319
48409
|
{ "id": "software_factory.request.list", "namespace": "software_factory", "action": "request.list", "title": "List Forge build requests", "description": "The Forge control-room board: the tenant's build requests with status, current phase, and risk/automation mode. Read-only, entitlement-gated.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "limit", "flag": "limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "List Forge build requests (the control-room board) with status, current phase, and risk. Read-only; requires the Forge add-on." },
|
|
@@ -50144,6 +50234,7 @@ function operationUsageLines(bin) {
|
|
|
50144
50234
|
// Local runner service lifecycle (DER-1142). The orchestrator mirrors this
|
|
50145
50235
|
// exact line into the mcp-and-cli-guide so the help/guide parity gate passes.
|
|
50146
50236
|
`${bin} runner install-service|start|stop|restart|status|logs|uninstall --name <name>`,
|
|
50237
|
+
`${bin} forge project-create|project-list|request-create|request-list|request-show`,
|
|
50147
50238
|
`${bin} notification settings|test|errors`,
|
|
50148
50239
|
`${bin} settings get|update|product-learning|agent-policy|rename`,
|
|
50149
50240
|
`${bin} member invite|update|remove`,
|