@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.
@@ -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;AAiBD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAiB7D;AAgCD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAgD3D"}
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-06-21.1",
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.1",
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
- On \`/cascade\`, the screen renders the full goal depth, not just one or two levels. Off-track descendant branches stay open so the operator can see why a parent rolled up to risk.
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-01.2",
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
- return ["rehearsal:", ...lines, ...toolPreview.length > 0 ? ["tool preview:", ...toolPreview] : []].join("\n");
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);