@rosthq/cli 0.7.24 → 0.7.25
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/generator/render.d.ts.map +1 -1
- package/dist/index.js +65 -6
- package/dist/index.js.map +2 -2
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/generator/render.ts"],"names":[],"mappings":"AAeA,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAGpD;
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/generator/render.ts"],"names":[],"mappings":"AAeA,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAGpD;AA8DD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAuB7D;AAgCD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAgD3D"}
|
package/dist/index.js
CHANGED
|
@@ -37718,6 +37718,19 @@ var dryRunToolActionSchema = external_exports.object({
|
|
|
37718
37718
|
// The underlying manifest guard decision that produced `status`.
|
|
37719
37719
|
guard: dryRunGuardResultSchema
|
|
37720
37720
|
}).strict();
|
|
37721
|
+
var dryRunLaneSchema = external_exports.enum(["cloud", "mcp_session", "runner"]);
|
|
37722
|
+
var dryRunToolExecutabilitySchema = external_exports.enum([
|
|
37723
|
+
"executable",
|
|
37724
|
+
"unimplemented_in_lane",
|
|
37725
|
+
"held_for_steward"
|
|
37726
|
+
]);
|
|
37727
|
+
var dryRunGrantedToolSchema = external_exports.object({
|
|
37728
|
+
// The granted tool (manifest id).
|
|
37729
|
+
tool_name: external_exports.string().min(1),
|
|
37730
|
+
// Its lane-aware executability, derived from the agent's lane + the runtime
|
|
37731
|
+
// handler registry (never an id string pattern).
|
|
37732
|
+
executability: dryRunToolExecutabilitySchema
|
|
37733
|
+
}).strict();
|
|
37721
37734
|
var dryRunTranscriptSchema = external_exports.object({
|
|
37722
37735
|
// Whether the rehearsal passed (the must-escalate clause was escalated and no
|
|
37723
37736
|
// external side effect ran) or failed (it acted without escalating, or the run
|
|
@@ -37736,6 +37749,14 @@ var dryRunTranscriptSchema = external_exports.object({
|
|
|
37736
37749
|
// handlers. Optional so the field is additive — a transcript without it (the
|
|
37737
37750
|
// static demo replay, an older record) still validates.
|
|
37738
37751
|
tool_preview: external_exports.array(dryRunToolActionSchema).optional(),
|
|
37752
|
+
// DER-1294: the runtime lane this rehearsal reflects. Optional/additive —
|
|
37753
|
+
// transcripts recorded before DER-1294 (and the static public-demo replay)
|
|
37754
|
+
// omit it, so they still validate.
|
|
37755
|
+
lane: dryRunLaneSchema.optional(),
|
|
37756
|
+
// DER-1294: every GRANTED tool (manifest allow|escalate) with its lane-aware
|
|
37757
|
+
// executability, so an operator sees which grants actually run vs. silently
|
|
37758
|
+
// no-op in this lane. Optional/additive so older transcripts still validate.
|
|
37759
|
+
granted_tools: external_exports.array(dryRunGrantedToolSchema).optional(),
|
|
37739
37760
|
// The underlying run id (present once the run is recorded).
|
|
37740
37761
|
run_id: external_exports.string().min(1).optional()
|
|
37741
37762
|
}).strict();
|
|
@@ -44450,7 +44471,7 @@ For CLI and MCP setup, read agent-skill-setup-guide before adding or assigning S
|
|
|
44450
44471
|
order: 42,
|
|
44451
44472
|
title: "Design a custom agent",
|
|
44452
44473
|
summary: "How to build a custom agent from operational questions through the Charter Builder, tools, dry run, and go-live without writing prompts.",
|
|
44453
|
-
version: "2026-
|
|
44474
|
+
version: "2026-07-04.1",
|
|
44454
44475
|
public: true,
|
|
44455
44476
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
44456
44477
|
stages: ["staffing", "charter_design"],
|
|
@@ -44517,7 +44538,7 @@ The same path is command-backed:
|
|
|
44517
44538
|
|
|
44518
44539
|
## Dry run and go-live
|
|
44519
44540
|
|
|
44520
|
-
The dry run is a real sandbox rehearsal, not a stamp. It executes a mock-provider run derived from the Charter \u2014 the agent works against sandbox data only and is expected to escalate where the Charter's must-escalate clause requires it. The same rehearsal works on all three lanes: cloud, external MCP, and local Runner. External MCP dry runs require an active seat-scoped MCP token; Runner dry runs require a paired Runner. Missing substrate returns a typed precondition error, not a generic failure. The recorded run keeps the agent's actual lane, so the evidence you review matches the lane you selected. The result is earned: a run that escalates the must-escalate boundary passes; a run that acts on that boundary instead of escalating fails. A failed dry run keeps the draft and shows the reason so you can edit and rerun. The rehearsal returns a transcript \u2014 the steps the agent took and the escalation it raised \u2014 shown step by step in the builder and printed by the CLI, so you can see the governance model working before anything goes live. When the dry run passes, a human promotes the agent live. The dry run rehearses the specific model tier you chose, so once it passes the model is locked \u2014 changing the model requires re-running the dry run on the new model before go-live.
|
|
44541
|
+
The dry run is a real sandbox rehearsal, not a stamp. It executes a mock-provider run derived from the Charter \u2014 the agent works against sandbox data only and is expected to escalate where the Charter's must-escalate clause requires it. The same rehearsal works on all three lanes: cloud, external MCP, and local Runner. External MCP dry runs require an active seat-scoped MCP token; Runner dry runs require a paired Runner. Missing substrate returns a typed precondition error, not a generic failure. The recorded run keeps the agent's actual lane, so the evidence you review matches the lane you selected. The result is earned: a run that escalates the must-escalate boundary passes; a run that acts on that boundary instead of escalating fails. A failed dry run keeps the draft and shows the reason so you can edit and rerun. The rehearsal returns a transcript \u2014 the steps the agent took and the escalation it raised \u2014 shown step by step in the builder and printed by the CLI, so you can see the governance model working before anything goes live. The transcript is also lane-honest: each granted tool is marked executable, held for the steward, or granted but unimplemented in this lane, with a plain-count verdict such as "2 of 6 granted tools don't execute in the cloud lane yet" \u2014 so a grant that would silently no-op in the cloud runtime is visible before go-live instead of passing green. Runner and MCP-session agents run those tools through their own local skills, so their grants are not flagged as unimplemented. When the dry run passes, a human promotes the agent live. The dry run rehearses the specific model tier you chose, so once it passes the model is locked \u2014 changing the model requires re-running the dry run on the new model before go-live.
|
|
44521
44542
|
|
|
44522
44543
|
## When to stop for confirmation
|
|
44523
44544
|
|
|
@@ -46089,7 +46110,7 @@ Retrieve the narrowest relevant guide before making a setup recommendation. Pref
|
|
|
46089
46110
|
order: 60,
|
|
46090
46111
|
title: "Cascade guide",
|
|
46091
46112
|
summary: "How to connect company goals to seat-level work without turning {{brand}} into a project-management tool.",
|
|
46092
|
-
version: "2026-07-04.
|
|
46113
|
+
version: "2026-07-04.2",
|
|
46093
46114
|
public: true,
|
|
46094
46115
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
46095
46116
|
stages: ["operating_rhythm"],
|
|
@@ -46157,7 +46178,7 @@ Cascade warnings are advisory, not blockers. They point to setup that should be
|
|
|
46157
46178
|
- Agent goal missing human accountability parent: an agent-owned goal has no human or hybrid goal in its ancestry.
|
|
46158
46179
|
- Orphaned goal branch: the owner seat or parent chain no longer reaches an active Compass objective.
|
|
46159
46180
|
|
|
46160
|
-
|
|
46181
|
+
\`/cascade\` leads with one computed line \u2014 how many goals are off pace this cycle, or an all-clear when none are. Off-pace and off-track goals stay fully visible with their owner seat and pace context; goals confirmed on pace collapse into a per-branch count you can expand. Creating or editing a goal opens the same drawer from a single **New goal** action or a goal's own edit control \u2014 there is no separate persistent form.
|
|
46161
46182
|
|
|
46162
46183
|
## Goal progress and at-risk goals
|
|
46163
46184
|
|
|
@@ -46304,7 +46325,7 @@ Agents may record readings when the Charter allows it. Agent-reported readings s
|
|
|
46304
46325
|
order: 62,
|
|
46305
46326
|
title: "Friction guide",
|
|
46306
46327
|
summary: "How to capture issues with evidence, rank them, and resolve them without losing ownership.",
|
|
46307
|
-
version: "2026-07-
|
|
46328
|
+
version: "2026-07-04.1",
|
|
46308
46329
|
public: true,
|
|
46309
46330
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
46310
46331
|
stages: ["operating_rhythm"],
|
|
@@ -46356,6 +46377,8 @@ Agents should file Friction when a measurable breaks, a tool fails, a repeated e
|
|
|
46356
46377
|
|
|
46357
46378
|
In the app, operational evidence is summarized for humans instead of shown as the primary interface. Incident fields, proposed tool calls, schedules, payload labels, and source links render as readable fields with raw details tucked behind supporting context when useful. Secret-shaped values stay redacted.
|
|
46358
46379
|
|
|
46380
|
+
The Friction page opens with one computed line \u2014 how many issues are open, the oldest one's age, and how many are escalated \u2014 followed by the open issues themselves as incident-ticket rows (filer, one-line cause, an escalation chip naming the steward when severity is critical). Resolved issues collapse into a single count that expands into a quiet history list. Filing a new issue and the three-step resolution (root cause, owner task, done-by) both live behind one "File friction" action, which opens a drawer; resolving launches that same drawer already seeded from the row you clicked "Resolve" on.
|
|
46381
|
+
|
|
46359
46382
|
## Operate Friction, tasks, and escalations from CLI or MCP
|
|
46360
46383
|
|
|
46361
46384
|
Friction, tasks, and escalations are the issue-to-action loop. A seat files, a task carries the work, and an escalation routes a decision a seat cannot make alone.
|
|
@@ -49113,6 +49136,36 @@ function dryRunToolActionLabel(status) {
|
|
|
49113
49136
|
return status;
|
|
49114
49137
|
}
|
|
49115
49138
|
}
|
|
49139
|
+
var DRY_RUN_LANE_LABELS = {
|
|
49140
|
+
cloud: "cloud lane",
|
|
49141
|
+
runner: "runner lane",
|
|
49142
|
+
mcp_session: "MCP-session lane"
|
|
49143
|
+
};
|
|
49144
|
+
function dryRunLaneLabel(lane) {
|
|
49145
|
+
return DRY_RUN_LANE_LABELS[lane] ?? `${lane} lane`;
|
|
49146
|
+
}
|
|
49147
|
+
function dryRunLaneVerdict(lane, grantedCount, unimplementedCount) {
|
|
49148
|
+
const laneLabel = dryRunLaneLabel(lane);
|
|
49149
|
+
if (unimplementedCount === 0) {
|
|
49150
|
+
return grantedCount === 1 ? `The single granted tool is implemented in the ${laneLabel}.` : `All ${grantedCount} granted tools are implemented in the ${laneLabel}.`;
|
|
49151
|
+
}
|
|
49152
|
+
const verb = unimplementedCount === 1 ? "doesn't" : "don't";
|
|
49153
|
+
return `${unimplementedCount} of ${grantedCount} granted tools ${verb} execute in the ${laneLabel} yet.`;
|
|
49154
|
+
}
|
|
49155
|
+
function dryRunLaneExecutabilityLines(transcript) {
|
|
49156
|
+
const lane = transcript.lane;
|
|
49157
|
+
const grantedTools = asArray(transcript.granted_tools);
|
|
49158
|
+
if (typeof lane !== "string" || grantedTools.length === 0) {
|
|
49159
|
+
return [];
|
|
49160
|
+
}
|
|
49161
|
+
const laneLabel = dryRunLaneLabel(lane);
|
|
49162
|
+
const unimplemented = grantedTools.map((tool) => asRecord(tool)).filter((tool) => tool.executability === "unimplemented_in_lane");
|
|
49163
|
+
const warningLines = unimplemented.map(
|
|
49164
|
+
(tool) => ` warning: ${field(tool, "tool_name")} is granted but unimplemented in the ${laneLabel}`
|
|
49165
|
+
);
|
|
49166
|
+
const verdict = dryRunLaneVerdict(lane, grantedTools.length, unimplemented.length);
|
|
49167
|
+
return ["lane executability:", ...warningLines, ` verdict: ${verdict}`];
|
|
49168
|
+
}
|
|
49116
49169
|
function formatDryRunTranscript(value) {
|
|
49117
49170
|
const transcript = asRecord(value);
|
|
49118
49171
|
const steps = asArray(transcript.steps);
|
|
@@ -49129,7 +49182,13 @@ function formatDryRunTranscript(value) {
|
|
|
49129
49182
|
const record2 = asRecord(action);
|
|
49130
49183
|
return ` ${dryRunToolActionLabel(field(record2, "status"))}: ${field(record2, "intended_action")} [${field(record2, "tool_name")}]`;
|
|
49131
49184
|
});
|
|
49132
|
-
|
|
49185
|
+
const laneLines = dryRunLaneExecutabilityLines(transcript);
|
|
49186
|
+
return [
|
|
49187
|
+
"rehearsal:",
|
|
49188
|
+
...lines,
|
|
49189
|
+
...toolPreview.length > 0 ? ["tool preview:", ...toolPreview] : [],
|
|
49190
|
+
...laneLines
|
|
49191
|
+
].join("\n");
|
|
49133
49192
|
}
|
|
49134
49193
|
function isScalar(value) {
|
|
49135
49194
|
return value === null || ["string", "number", "boolean"].includes(typeof value);
|