@slowcook-ai/cli 0.19.0-alpha.8 → 0.19.1

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.
Files changed (194) hide show
  1. package/AGENTS.md +240 -0
  2. package/REPORTING.md +193 -0
  3. package/dist/cli.js +78 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/brand/index.d.ts +26 -0
  6. package/dist/commands/brand/index.d.ts.map +1 -0
  7. package/dist/commands/brand/index.js +257 -0
  8. package/dist/commands/brand/index.js.map +1 -0
  9. package/dist/commands/brew/agent.d.ts +7 -2
  10. package/dist/commands/brew/agent.d.ts.map +1 -1
  11. package/dist/commands/brew/agent.js +9 -0
  12. package/dist/commands/brew/agent.js.map +1 -1
  13. package/dist/commands/brew/halt.d.ts +26 -0
  14. package/dist/commands/brew/halt.d.ts.map +1 -1
  15. package/dist/commands/brew/halt.js.map +1 -1
  16. package/dist/commands/brew/index.d.ts.map +1 -1
  17. package/dist/commands/brew/index.js +142 -18
  18. package/dist/commands/brew/index.js.map +1 -1
  19. package/dist/commands/brew/pair-navigator.d.ts +119 -0
  20. package/dist/commands/brew/pair-navigator.d.ts.map +1 -0
  21. package/dist/commands/brew/pair-navigator.js +187 -0
  22. package/dist/commands/brew/pair-navigator.js.map +1 -0
  23. package/dist/commands/budget/index.d.ts +2 -0
  24. package/dist/commands/budget/index.d.ts.map +1 -0
  25. package/dist/commands/budget/index.js +252 -0
  26. package/dist/commands/budget/index.js.map +1 -0
  27. package/dist/commands/chef/drift-fix.d.ts +33 -4
  28. package/dist/commands/chef/drift-fix.d.ts.map +1 -1
  29. package/dist/commands/chef/drift-fix.js +417 -29
  30. package/dist/commands/chef/drift-fix.js.map +1 -1
  31. package/dist/commands/chef/index.js +13 -3
  32. package/dist/commands/chef/index.js.map +1 -1
  33. package/dist/commands/chef/orchestrate.d.ts +1 -1
  34. package/dist/commands/chef/orchestrate.d.ts.map +1 -1
  35. package/dist/commands/chef/orchestrate.js +32 -9
  36. package/dist/commands/chef/orchestrate.js.map +1 -1
  37. package/dist/commands/dev-env/config.d.ts +57 -0
  38. package/dist/commands/dev-env/config.d.ts.map +1 -0
  39. package/dist/commands/dev-env/config.js +96 -0
  40. package/dist/commands/dev-env/config.js.map +1 -0
  41. package/dist/commands/dev-env/index.d.ts +27 -0
  42. package/dist/commands/dev-env/index.d.ts.map +1 -0
  43. package/dist/commands/dev-env/index.js +226 -0
  44. package/dist/commands/dev-env/index.js.map +1 -0
  45. package/dist/commands/dev-env/init.d.ts +28 -0
  46. package/dist/commands/dev-env/init.d.ts.map +1 -0
  47. package/dist/commands/dev-env/init.js +135 -0
  48. package/dist/commands/dev-env/init.js.map +1 -0
  49. package/dist/commands/docs/index.d.ts +16 -0
  50. package/dist/commands/docs/index.d.ts.map +1 -0
  51. package/dist/commands/docs/index.js +127 -0
  52. package/dist/commands/docs/index.js.map +1 -0
  53. package/dist/commands/eval/index.d.ts +54 -0
  54. package/dist/commands/eval/index.d.ts.map +1 -0
  55. package/dist/commands/eval/index.js +294 -0
  56. package/dist/commands/eval/index.js.map +1 -0
  57. package/dist/commands/extract/index.d.ts.map +1 -1
  58. package/dist/commands/extract/index.js +23 -1
  59. package/dist/commands/extract/index.js.map +1 -1
  60. package/dist/commands/garnish/index.d.ts +56 -0
  61. package/dist/commands/garnish/index.d.ts.map +1 -0
  62. package/dist/commands/garnish/index.js +281 -0
  63. package/dist/commands/garnish/index.js.map +1 -0
  64. package/dist/commands/garnish/trailer.d.ts +79 -0
  65. package/dist/commands/garnish/trailer.d.ts.map +1 -0
  66. package/dist/commands/garnish/trailer.js +118 -0
  67. package/dist/commands/garnish/trailer.js.map +1 -0
  68. package/dist/commands/init/index.d.ts.map +1 -1
  69. package/dist/commands/init/index.js +33 -0
  70. package/dist/commands/init/index.js.map +1 -1
  71. package/dist/commands/init/mock-vite.d.ts +54 -0
  72. package/dist/commands/init/mock-vite.d.ts.map +1 -0
  73. package/dist/commands/init/mock-vite.js +613 -0
  74. package/dist/commands/init/mock-vite.js.map +1 -0
  75. package/dist/commands/init/mock.d.ts +6 -0
  76. package/dist/commands/init/mock.d.ts.map +1 -1
  77. package/dist/commands/init/mock.js +20 -4
  78. package/dist/commands/init/mock.js.map +1 -1
  79. package/dist/commands/init/plan.d.ts +26 -1
  80. package/dist/commands/init/plan.d.ts.map +1 -1
  81. package/dist/commands/init/plan.js +41 -3
  82. package/dist/commands/init/plan.js.map +1 -1
  83. package/dist/commands/init/templates.d.ts.map +1 -1
  84. package/dist/commands/init/templates.js +12 -4
  85. package/dist/commands/init/templates.js.map +1 -1
  86. package/dist/commands/knowledge-add.d.ts +52 -0
  87. package/dist/commands/knowledge-add.d.ts.map +1 -0
  88. package/dist/commands/knowledge-add.js +232 -0
  89. package/dist/commands/knowledge-add.js.map +1 -0
  90. package/dist/commands/map/emit-typeorm.d.ts +117 -0
  91. package/dist/commands/map/emit-typeorm.d.ts.map +1 -0
  92. package/dist/commands/map/emit-typeorm.js +341 -0
  93. package/dist/commands/map/emit-typeorm.js.map +1 -0
  94. package/dist/commands/map/index.d.ts +18 -0
  95. package/dist/commands/map/index.d.ts.map +1 -1
  96. package/dist/commands/map/index.js +28 -0
  97. package/dist/commands/map/index.js.map +1 -1
  98. package/dist/commands/plate/agent.d.ts +7 -0
  99. package/dist/commands/plate/agent.d.ts.map +1 -1
  100. package/dist/commands/plate/agent.js +1 -1
  101. package/dist/commands/plate/agent.js.map +1 -1
  102. package/dist/commands/plate/index.d.ts.map +1 -1
  103. package/dist/commands/plate/index.js +6 -0
  104. package/dist/commands/plate/index.js.map +1 -1
  105. package/dist/commands/recon/index.d.ts +16 -3
  106. package/dist/commands/recon/index.d.ts.map +1 -1
  107. package/dist/commands/recon/index.js +267 -16
  108. package/dist/commands/recon/index.js.map +1 -1
  109. package/dist/commands/recon/migration-gate.d.ts +59 -0
  110. package/dist/commands/recon/migration-gate.d.ts.map +1 -0
  111. package/dist/commands/recon/migration-gate.js +131 -0
  112. package/dist/commands/recon/migration-gate.js.map +1 -0
  113. package/dist/commands/recon/reuse.d.ts +32 -0
  114. package/dist/commands/recon/reuse.d.ts.map +1 -1
  115. package/dist/commands/recon/reuse.js +66 -0
  116. package/dist/commands/recon/reuse.js.map +1 -1
  117. package/dist/commands/recon/stale-stubs.d.ts +65 -0
  118. package/dist/commands/recon/stale-stubs.d.ts.map +1 -0
  119. package/dist/commands/recon/stale-stubs.js +84 -0
  120. package/dist/commands/recon/stale-stubs.js.map +1 -0
  121. package/dist/commands/refine/agent.d.ts +23 -0
  122. package/dist/commands/refine/agent.d.ts.map +1 -1
  123. package/dist/commands/refine/agent.js +245 -15
  124. package/dist/commands/refine/agent.js.map +1 -1
  125. package/dist/commands/refine/brownfield-answer.d.ts +81 -0
  126. package/dist/commands/refine/brownfield-answer.d.ts.map +1 -0
  127. package/dist/commands/refine/brownfield-answer.js +231 -0
  128. package/dist/commands/refine/brownfield-answer.js.map +1 -0
  129. package/dist/commands/refine/context.d.ts +27 -1
  130. package/dist/commands/refine/context.d.ts.map +1 -1
  131. package/dist/commands/refine/context.js +438 -6
  132. package/dist/commands/refine/context.js.map +1 -1
  133. package/dist/commands/refine/git-attention.d.ts +123 -0
  134. package/dist/commands/refine/git-attention.d.ts.map +1 -0
  135. package/dist/commands/refine/git-attention.js +378 -0
  136. package/dist/commands/refine/git-attention.js.map +1 -0
  137. package/dist/commands/refine/history-index.d.ts +66 -0
  138. package/dist/commands/refine/history-index.d.ts.map +1 -1
  139. package/dist/commands/refine/history-index.js +195 -8
  140. package/dist/commands/refine/history-index.js.map +1 -1
  141. package/dist/commands/refine/index.d.ts.map +1 -1
  142. package/dist/commands/refine/index.js +105 -18
  143. package/dist/commands/refine/index.js.map +1 -1
  144. package/dist/commands/refine/multifurcate.d.ts +129 -0
  145. package/dist/commands/refine/multifurcate.d.ts.map +1 -0
  146. package/dist/commands/refine/multifurcate.js +247 -0
  147. package/dist/commands/refine/multifurcate.js.map +1 -0
  148. package/dist/commands/refine/proposals-synth.d.ts +50 -1
  149. package/dist/commands/refine/proposals-synth.d.ts.map +1 -1
  150. package/dist/commands/refine/proposals-synth.js +199 -35
  151. package/dist/commands/refine/proposals-synth.js.map +1 -1
  152. package/dist/commands/refine/spec-yaml.d.ts +214 -1210
  153. package/dist/commands/refine/spec-yaml.d.ts.map +1 -1
  154. package/dist/commands/refine/spec-yaml.js +10 -0
  155. package/dist/commands/refine/spec-yaml.js.map +1 -1
  156. package/dist/commands/refresh-knowledge.d.ts +139 -0
  157. package/dist/commands/refresh-knowledge.d.ts.map +1 -0
  158. package/dist/commands/refresh-knowledge.js +1029 -0
  159. package/dist/commands/refresh-knowledge.js.map +1 -0
  160. package/dist/commands/run-mock/index.d.ts.map +1 -1
  161. package/dist/commands/run-mock/index.js +135 -22
  162. package/dist/commands/run-mock/index.js.map +1 -1
  163. package/dist/commands/testgen/agent.d.ts +13 -0
  164. package/dist/commands/testgen/agent.d.ts.map +1 -1
  165. package/dist/commands/testgen/agent.js +137 -11
  166. package/dist/commands/testgen/agent.js.map +1 -1
  167. package/dist/commands/upsert-agent-docs.d.ts +48 -0
  168. package/dist/commands/upsert-agent-docs.d.ts.map +1 -0
  169. package/dist/commands/upsert-agent-docs.js +298 -0
  170. package/dist/commands/upsert-agent-docs.js.map +1 -0
  171. package/dist/commands/vibe/agent.d.ts +7 -0
  172. package/dist/commands/vibe/agent.d.ts.map +1 -1
  173. package/dist/commands/vibe/agent.js +2 -2
  174. package/dist/commands/vibe/agent.js.map +1 -1
  175. package/dist/commands/vibe/index.d.ts.map +1 -1
  176. package/dist/commands/vibe/index.js +7 -1
  177. package/dist/commands/vibe/index.js.map +1 -1
  178. package/dist/cost-store.d.ts +52 -0
  179. package/dist/cost-store.d.ts.map +1 -0
  180. package/dist/cost-store.js +108 -0
  181. package/dist/cost-store.js.map +1 -0
  182. package/dist/lib/budget.d.ts +73 -0
  183. package/dist/lib/budget.d.ts.map +1 -0
  184. package/dist/lib/budget.js +225 -0
  185. package/dist/lib/budget.js.map +1 -0
  186. package/dist/lib/mock-shape.d.ts +29 -0
  187. package/dist/lib/mock-shape.d.ts.map +1 -0
  188. package/dist/lib/mock-shape.js +77 -0
  189. package/dist/lib/mock-shape.js.map +1 -0
  190. package/dist/lib/read-only.d.ts +22 -0
  191. package/dist/lib/read-only.d.ts.map +1 -0
  192. package/dist/lib/read-only.js +34 -0
  193. package/dist/lib/read-only.js.map +1 -0
  194. package/package.json +17 -12
@@ -14,6 +14,8 @@ function parseArgs(argv) {
14
14
  model: "claude-sonnet-4-6",
15
15
  baseBranch: "main",
16
16
  mode: "auto",
17
+ withNavigator: undefined,
18
+ navigatorModel: "claude-sonnet-4-5-20250929",
17
19
  };
18
20
  for (let i = 0; i < argv.length; i++) {
19
21
  const arg = argv[i];
@@ -55,13 +57,30 @@ function parseArgs(argv) {
55
57
  i++;
56
58
  }
57
59
  else if (arg === "--mode" && next) {
58
- if (next !== "auto" && next !== "plate" && next !== "legacy") {
59
- console.error(`--mode must be one of: auto, plate, legacy. Got: ${next}`);
60
+ if (next === "legacy") {
61
+ // cli α.52 hard error, no silent alias. The old name was
62
+ // misleading on a young tool. Point operators at the new name.
63
+ console.error(`--mode legacy was renamed to --mode freehand in cli α.52. ` +
64
+ `Re-dispatch with --mode freehand.`);
65
+ process.exit(64);
66
+ }
67
+ if (next !== "auto" && next !== "plate" && next !== "freehand") {
68
+ console.error(`--mode must be one of: auto, plate, freehand. Got: ${next}`);
60
69
  process.exit(64);
61
70
  }
62
71
  args.mode = next;
63
72
  i++;
64
73
  }
74
+ else if (arg === "--with-navigator") {
75
+ args.withNavigator = true;
76
+ }
77
+ else if (arg === "--without-navigator") {
78
+ args.withNavigator = false;
79
+ }
80
+ else if (arg === "--navigator-model" && next) {
81
+ args.navigatorModel = next;
82
+ i++;
83
+ }
65
84
  else if (arg === "--help" || arg === "-h") {
66
85
  printHelp();
67
86
  process.exit(0);
@@ -96,6 +115,17 @@ Options:
96
115
  --wall-clock-minutes <n> Wall-clock cap in minutes (default: 60)
97
116
  --model <id> LLM model (default: claude-sonnet-4-6; override with --model claude-opus-4-7 for harder stories)
98
117
  --base <branch> Base branch for PRs (default: main)
118
+ --with-navigator Force pair-brew on (overrides mode-aware default).
119
+ --without-navigator Force pair-brew off (overrides mode-aware default).
120
+ Default behavior (cli α.52): navigator ON when resolved mode is
121
+ freehand (wide-scope edits — drift risk justifies the navigator
122
+ cost), OFF when plate (plate's hardcoded allowed_paths is itself
123
+ a guardrail; navigator opt-in if needed).
124
+ Pair-brew: each iteration's would-be checkpoint passes through a
125
+ navigator review (design fidelity / responsive / cross-story risk
126
+ / etc.). On block, iter reverts + concerns fold into next iter's
127
+ prompt. Adds ~$0.01-0.05 per iter on top of driver spend.
128
+ --navigator-model <id> Navigator LLM model id. Default: claude-sonnet-4-5-20250929.
99
129
  --help, -h Show this help
100
130
 
101
131
  Environment:
@@ -111,13 +141,13 @@ Exit codes:
111
141
  /**
112
142
  * 0.15.0-α.4 — resolve brew's execution mode.
113
143
  *
114
- * `requested === "plate"` or `"legacy"` → return as-is.
144
+ * `requested === "plate"` or `"freehand"` → return as-is.
115
145
  *
116
146
  * `requested === "auto"` → detect from spec + GitHub state:
117
147
  * plate-mode requires BOTH (a) the spec has at least one populated
118
148
  * `proposals.fixtures.by_domain.<domain>` entry (UI surface), AND (b)
119
149
  * a slowcook-mockup PR for this story has been merged on the repo.
120
- * If either condition is unmet → legacy.
150
+ * If either condition is unmet → freehand.
121
151
  *
122
152
  * GitHub check uses `gh pr list` to look for closed PRs whose head
123
153
  * branch matches `slowcook/mockup/story-<id>`. Cheaper than fetching
@@ -126,8 +156,8 @@ Exit codes:
126
156
  async function resolveBrewMode(args) {
127
157
  if (args.requested === "plate")
128
158
  return "plate";
129
- if (args.requested === "legacy")
130
- return "legacy";
159
+ if (args.requested === "freehand")
160
+ return "freehand";
131
161
  // auto path
132
162
  const specPath = join(args.repoRoot, "specs", `story-${args.storyId}.yaml`);
133
163
  let specYaml = "";
@@ -135,29 +165,29 @@ async function resolveBrewMode(args) {
135
165
  specYaml = require("node:fs").readFileSync(specPath, "utf8");
136
166
  }
137
167
  catch {
138
- return "legacy";
168
+ return "freehand";
139
169
  }
140
170
  // Same hasUiSurface heuristic as the vibe command.
141
171
  const proposalsIdx = specYaml.search(/^proposals\s*:\s*$/m);
142
172
  if (proposalsIdx < 0)
143
- return "legacy";
173
+ return "freehand";
144
174
  const tail = specYaml.slice(proposalsIdx);
145
175
  const fixturesMatch = tail.match(/^(\s+)fixtures\s*:\s*$/m);
146
176
  if (!fixturesMatch)
147
- return "legacy";
177
+ return "freehand";
148
178
  const fixturesBlockStart = tail.indexOf(fixturesMatch[0]) + fixturesMatch[0].length;
149
179
  const byDomainMatch = tail
150
180
  .slice(fixturesBlockStart)
151
181
  .match(/^(\s+)by_domain\s*:\s*$/m);
152
182
  if (!byDomainMatch)
153
- return "legacy";
183
+ return "freehand";
154
184
  const byDomainIndentLen = byDomainMatch[1].length;
155
185
  const after = tail.slice(fixturesBlockStart +
156
186
  tail.slice(fixturesBlockStart).indexOf(byDomainMatch[0]) +
157
187
  byDomainMatch[0].length);
158
188
  const entryRe = new RegExp(`^( {${byDomainIndentLen + 1},}|\\t+)([a-z][a-z0-9_-]*)\\s*:\\s*$`, "m");
159
189
  if (!entryRe.test(after))
160
- return "legacy";
190
+ return "freehand";
161
191
  // Check for a merged slowcook-mockup PR.
162
192
  try {
163
193
  const branch = `slowcook/mockup/story-${args.storyId}`;
@@ -169,14 +199,14 @@ async function resolveBrewMode(args) {
169
199
  }).trim();
170
200
  const arr = JSON.parse(out);
171
201
  if (arr.length === 0) {
172
- console.log(`(brew auto-detect: spec has fixtures but no merged slowcook-mockup PR for story-${args.storyId} found → legacy mode)`);
173
- return "legacy";
202
+ console.log(`(brew auto-detect: spec has fixtures but no merged slowcook-mockup PR for story-${args.storyId} found → freehand mode)`);
203
+ return "freehand";
174
204
  }
175
205
  return "plate";
176
206
  }
177
207
  catch (e) {
178
- console.warn(`(brew auto-detect: gh pr list failed — ${e.message}; defaulting to legacy)`);
179
- return "legacy";
208
+ console.warn(`(brew auto-detect: gh pr list failed — ${e.message}; defaulting to freehand)`);
209
+ return "freehand";
180
210
  }
181
211
  }
182
212
  function detectOwnerRepo(cwd) {
@@ -219,8 +249,8 @@ export async function brew(argv, cliVersion) {
219
249
  const frozenPaths = readFrozenPaths(args.repoRoot);
220
250
  // 0.15.0-α.4 — mode resolution. `auto` checks: does the spec have
221
251
  // `proposals.fixtures.by_domain.*` populated AND has a slowcook-mockup
222
- // PR for this story merged? If both yes → plate. Otherwise → legacy.
223
- // Force-modes (plate / legacy) skip the check.
252
+ // PR for this story merged? If both yes → plate. Otherwise → freehand.
253
+ // Force-modes (plate / freehand) skip the check.
224
254
  const resolvedMode = await resolveBrewMode({
225
255
  requested: args.mode,
226
256
  repoRoot: args.repoRoot,
@@ -236,7 +266,7 @@ export async function brew(argv, cliVersion) {
236
266
  // We don't re-fetch here; the caller workflow pulls origin/main.
237
267
  // Allowed paths. In plate-mode, restrict to data-layer + API + migrations
238
268
  // + tests. Frozen-paths guard then physically rejects any UI edit.
239
- // In legacy mode, fall through to today's "wide allowed_paths" behavior.
269
+ // In freehand mode, fall through to today's "wide allowed_paths" behavior.
240
270
  const allowedPaths = resolvedMode === "plate"
241
271
  ? [
242
272
  "src/lib/data/**", // brew rewrites .ts stub; .mock.ts protected by extension check
@@ -260,6 +290,99 @@ export async function brew(argv, cliVersion) {
260
290
  console.log(` budget: $${args.budgetUsd.toFixed(2)} · iterations: ${args.maxIterations} · model: ${args.model}`);
261
291
  console.log(` branch: ${branchName}`);
262
292
  console.log(` run log: ${runLogPath}\n`);
293
+ // Pair-brew NavigatorHook injection.
294
+ //
295
+ // cli α.52 — mode-aware default: navigator ON when resolved mode is
296
+ // `freehand`, OFF when `plate`. Wide-scope freehand edits carry more
297
+ // drift risk; plate's hardcoded allowed_paths is itself a guardrail.
298
+ // Explicit `--with-navigator` / `--without-navigator` overrides.
299
+ const effectiveWithNavigator = args.withNavigator !== undefined
300
+ ? args.withNavigator
301
+ : resolvedMode === "freehand";
302
+ let navigatorHook = undefined;
303
+ if (effectiveWithNavigator) {
304
+ const { createPairNavigatorHook } = await import("./pair-navigator.js");
305
+ const { PRICING_PER_M_TOKENS } = await import("@slowcook-ai/llm-anthropic");
306
+ const navPricing = PRICING_PER_M_TOKENS[args.navigatorModel] ?? { input: 3, output: 15 };
307
+ navigatorHook = createPairNavigatorHook({
308
+ anthropic,
309
+ model: args.navigatorModel,
310
+ pricingPerMTokens: navPricing,
311
+ // Lean loader: fills in only what's cheap to derive from the
312
+ // brew context. Spec yaml + cross-story file list are pulled
313
+ // from disk; mock files are scoped to the story dir; storyTestIds
314
+ // come from the spec's tier-1 entries when available.
315
+ loadPromptContext: async () => {
316
+ const { readFileSync, existsSync, readdirSync, statSync } = await import("node:fs");
317
+ const { join } = await import("node:path");
318
+ const mockFiles = [];
319
+ const mockDir = join(args.repoRoot, "mock/src/components");
320
+ const walk = (dir) => {
321
+ if (!existsSync(dir))
322
+ return;
323
+ for (const name of readdirSync(dir)) {
324
+ const abs = join(dir, name);
325
+ const st = statSync(abs);
326
+ if (st.isDirectory())
327
+ walk(abs);
328
+ else if (/\.tsx?$/.test(name)) {
329
+ mockFiles.push({
330
+ path: abs.replace(args.repoRoot + "/", ""),
331
+ content: readFileSync(abs, "utf8").slice(0, 4000),
332
+ });
333
+ }
334
+ }
335
+ };
336
+ walk(mockDir);
337
+ const codeMapPath = join(args.repoRoot, ".brewing/code-map.md");
338
+ const codeMapDigest = existsSync(codeMapPath)
339
+ ? readFileSync(codeMapPath, "utf8").slice(0, 8000)
340
+ : "";
341
+ const specYamlPath = join(args.repoRoot, `specs/story-${args.storyId}.yaml`);
342
+ const specYaml = existsSync(specYamlPath) ? readFileSync(specYamlPath, "utf8") : undefined;
343
+ const apiContract = spec
344
+ .api_contract;
345
+ // α.55 — give navigator a bounded list of source files that
346
+ // exist right now so it can presence-check claims about absence
347
+ // instead of hallucinating. Bounded to src/ + mock/src/ tsx/ts
348
+ // files to keep the prompt reasonable.
349
+ const knownSourceFiles = [];
350
+ const collectKnown = (dir, rel) => {
351
+ if (!existsSync(dir))
352
+ return;
353
+ for (const name of readdirSync(dir)) {
354
+ const abs = join(dir, name);
355
+ const r = rel ? `${rel}/${name}` : name;
356
+ const st = statSync(abs);
357
+ if (st.isDirectory()) {
358
+ if (name === "node_modules" || name.startsWith("."))
359
+ continue;
360
+ collectKnown(abs, r);
361
+ }
362
+ else if (/\.(tsx?|jsx?)$/.test(name)) {
363
+ knownSourceFiles.push(r);
364
+ }
365
+ }
366
+ };
367
+ collectKnown(join(args.repoRoot, "src"), "src");
368
+ collectKnown(join(args.repoRoot, "mock/src"), "mock/src");
369
+ return {
370
+ mockFiles,
371
+ codeMapDigest,
372
+ storyTestIds: [],
373
+ apiContract,
374
+ specYaml,
375
+ knownSourceFiles,
376
+ };
377
+ },
378
+ });
379
+ const navReason = args.withNavigator === undefined
380
+ ? `mode=${resolvedMode} default`
381
+ : args.withNavigator === true
382
+ ? "explicit --with-navigator"
383
+ : "explicit --without-navigator (this branch shouldn't reach here)";
384
+ console.log(` navigator: enabled (${navReason}, model=${args.navigatorModel})`);
385
+ }
263
386
  const ctx = {
264
387
  repoRoot: args.repoRoot,
265
388
  storyId: args.storyId,
@@ -279,6 +402,7 @@ export async function brew(argv, cliVersion) {
279
402
  runLogPath,
280
403
  cliVersion,
281
404
  mode: resolvedMode,
405
+ navigatorHook,
282
406
  };
283
407
  try {
284
408
  const outcome = await runBrew(ctx);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/brew/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/brew/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * 0.19.0-alpha.9 — default Anthropic-backed pair-brew NavigatorHook.
3
+ *
4
+ * α.4 wired the structural NavigatorHook slot into brew/agent.ts.
5
+ * α.5 added the proposedTest hard-signal field. α.9 ships the
6
+ * default implementation: calls Anthropic with NAVIGATOR_SYSTEM +
7
+ * buildNavigatorPrompt, parses the NavigatorVerdict, adapts it to
8
+ * NavigatorHookVerdict (the brew-loop interface).
9
+ *
10
+ * Wiring path (cli α.10 will add the --with-navigator flag):
11
+ * ctx.navigatorHook = createPairNavigatorHook({ anthropic, model, ... });
12
+ *
13
+ * Persistent-block escalation (#77 / α.5): when `priorBlockCount >= 2`
14
+ * for the same root concern, the hook MAY include a proposedTest in
15
+ * the verdict — written to tests/navigator/ + folded into next iter's
16
+ * red-set as a HARD signal. Logic is in the prompt; mechanics in
17
+ * brew/agent.ts.
18
+ */
19
+ import type Anthropic from "@anthropic-ai/sdk";
20
+ import { type NavigatorVerdict, type NavigatorPromptArgs } from "@slowcook-ai/llm-anthropic";
21
+ import type { NavigatorHook, NavigatorHookInput, NavigatorHookVerdict } from "./agent.js";
22
+ /**
23
+ * Adapt NavigatorVerdict (the prompt-side shape: axes + overall +
24
+ * rationale) → NavigatorHookVerdict (the brew-loop shape: overall +
25
+ * concerns + costUsd + proposedTest).
26
+ *
27
+ * Mapping rules:
28
+ * - overall "approve" → "approve"
29
+ * - overall "warn" → "approve" (warn is informational; brew
30
+ * only reverts on block)
31
+ * - overall "block" → "block"
32
+ * - concerns: each blocking axis becomes one entry "<axis>: <summary>".
33
+ * Warn-severity axes are surfaced too (lower priority).
34
+ * - costUsd: passed through unchanged.
35
+ *
36
+ * Pure: no IO. Tested in isolation.
37
+ */
38
+ export declare function navigatorVerdictToHookVerdict(verdict: NavigatorVerdict, costUsd: number): NavigatorHookVerdict;
39
+ export interface PairNavigatorOptions {
40
+ /** Anthropic SDK client to call. */
41
+ anthropic: Anthropic;
42
+ /** Model id (e.g., "claude-sonnet-4-5-20250929"). */
43
+ model: string;
44
+ /** Per-iter token cap for the navigator response. */
45
+ maxTokens?: number;
46
+ /** Per-iter cost ceiling — when the LLM call would exceed this,
47
+ * the hook abstains (returns null) instead of blocking the iter. */
48
+ perIterBudgetUsd?: number;
49
+ /** Pricing per million tokens for cost computation. Required so
50
+ * the hook can report costUsd accurately to the budget tracker. */
51
+ pricingPerMTokens: {
52
+ input: number;
53
+ output: number;
54
+ };
55
+ /**
56
+ * Loader for the per-call prompt context. Brew/agent.ts doesn't
57
+ * carry mockFiles / codeMapDigest / storyTestIds / specYaml in
58
+ * `NavigatorHookInput` — the caller injects a loader that supplies
59
+ * those from the brew context's filesystem + spec.
60
+ *
61
+ * Returning null OR an empty mockFiles array does NOT abort —
62
+ * the prompt will still be built; navigator just sees less context.
63
+ */
64
+ loadPromptContext: (input: NavigatorHookInput) => Promise<{
65
+ mockFiles: NavigatorPromptArgs["mockFiles"];
66
+ codeMapDigest: string;
67
+ storyTestIds: string[];
68
+ apiContract?: NavigatorPromptArgs["apiContract"];
69
+ crossStoryFiles?: string[];
70
+ specYaml?: string;
71
+ /**
72
+ * α.55 — list of source-file paths present in the repo at the
73
+ * time of this iteration. Navigator uses this to ground absence
74
+ * claims (must NOT assert a path is absent unless it's missing
75
+ * from this list AND the diff doesn't create it).
76
+ */
77
+ knownSourceFiles?: string[];
78
+ priorVerdicts?: NavigatorPromptArgs["priorVerdicts"];
79
+ } | null>;
80
+ }
81
+ /**
82
+ * Build a NavigatorHook backed by an Anthropic LLM call. Pure
83
+ * factory; the returned hook is ready to inject into BrewContext.
84
+ *
85
+ * Per-call flow:
86
+ * 1. Caller-provided loader fills in mockFiles + codeMapDigest +
87
+ * storyTestIds + spec yaml + cross-story files + prior verdicts.
88
+ * 2. buildNavigatorPrompt produces the prompt; client.messages.create
89
+ * runs it with NAVIGATOR_SYSTEM.
90
+ * 3. Response text is parsed as NavigatorVerdict (JSON; fences
91
+ * tolerated).
92
+ * 4. navigatorVerdictToHookVerdict adapts to the brew-loop shape.
93
+ * 5. Cost is tallied from input/output tokens × pricing.
94
+ *
95
+ * On any failure (load error, JSON parse, API error), the hook
96
+ * returns null — brew treats null as "navigator abstained" + the
97
+ * iteration proceeds to checkpoint without navigator review.
98
+ */
99
+ export declare function createPairNavigatorHook(options: PairNavigatorOptions): NavigatorHook;
100
+ /**
101
+ * Pull the text out of an Anthropic Messages API response. Returns
102
+ * empty string if the response shape is unexpected (defensive).
103
+ * Pure: no IO.
104
+ */
105
+ export declare function extractTextFromResponse(response: {
106
+ content: Array<{
107
+ type: string;
108
+ text?: string;
109
+ }>;
110
+ }): string;
111
+ /**
112
+ * Parse a NavigatorVerdict from raw LLM text. Tolerates ```json
113
+ * fences + leading/trailing prose. Throws on malformed JSON or
114
+ * shape mismatch — caller should catch + treat as abstain.
115
+ *
116
+ * Pure: validates shape; doesn't normalize/repair.
117
+ */
118
+ export declare function parseNavigatorVerdict(text: string): NavigatorVerdict;
119
+ //# sourceMappingURL=pair-navigator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pair-navigator.d.ts","sourceRoot":"","sources":["../../../src/commands/brew/pair-navigator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAGL,KAAK,gBAAgB,EAErB,KAAK,mBAAmB,EACzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAE1F;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,MAAM,GACd,oBAAoB,CAoBtB;AAED,MAAM,WAAW,oBAAoB;IACnC,oCAAoC;IACpC,SAAS,EAAE,SAAS,CAAC;IACrB,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;yEACqE;IACrE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;wEACoE;IACpE,iBAAiB,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD;;;;;;;;OAQG;IACH,iBAAiB,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC;QACxD,SAAS,EAAE,mBAAmB,CAAC,WAAW,CAAC,CAAC;QAC5C,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,WAAW,CAAC,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAC;QACjD,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB;;;;;WAKG;QACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC5B,aAAa,CAAC,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;KACtD,GAAG,IAAI,CAAC,CAAC;CACX;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CA+EpF;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,GAAG,MAAM,CAS7G;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAkBpE"}
@@ -0,0 +1,187 @@
1
+ /**
2
+ * 0.19.0-alpha.9 — default Anthropic-backed pair-brew NavigatorHook.
3
+ *
4
+ * α.4 wired the structural NavigatorHook slot into brew/agent.ts.
5
+ * α.5 added the proposedTest hard-signal field. α.9 ships the
6
+ * default implementation: calls Anthropic with NAVIGATOR_SYSTEM +
7
+ * buildNavigatorPrompt, parses the NavigatorVerdict, adapts it to
8
+ * NavigatorHookVerdict (the brew-loop interface).
9
+ *
10
+ * Wiring path (cli α.10 will add the --with-navigator flag):
11
+ * ctx.navigatorHook = createPairNavigatorHook({ anthropic, model, ... });
12
+ *
13
+ * Persistent-block escalation (#77 / α.5): when `priorBlockCount >= 2`
14
+ * for the same root concern, the hook MAY include a proposedTest in
15
+ * the verdict — written to tests/navigator/ + folded into next iter's
16
+ * red-set as a HARD signal. Logic is in the prompt; mechanics in
17
+ * brew/agent.ts.
18
+ */
19
+ import { NAVIGATOR_SYSTEM, buildNavigatorPrompt, } from "@slowcook-ai/llm-anthropic";
20
+ /**
21
+ * Adapt NavigatorVerdict (the prompt-side shape: axes + overall +
22
+ * rationale) → NavigatorHookVerdict (the brew-loop shape: overall +
23
+ * concerns + costUsd + proposedTest).
24
+ *
25
+ * Mapping rules:
26
+ * - overall "approve" → "approve"
27
+ * - overall "warn" → "approve" (warn is informational; brew
28
+ * only reverts on block)
29
+ * - overall "block" → "block"
30
+ * - concerns: each blocking axis becomes one entry "<axis>: <summary>".
31
+ * Warn-severity axes are surfaced too (lower priority).
32
+ * - costUsd: passed through unchanged.
33
+ *
34
+ * Pure: no IO. Tested in isolation.
35
+ */
36
+ export function navigatorVerdictToHookVerdict(verdict, costUsd) {
37
+ const overall = verdict.overall === "block" ? "block" : "approve";
38
+ const concerns = verdict.axes
39
+ // Sort blocking before warn so the most important concerns surface first.
40
+ .slice()
41
+ .sort((a, b) => {
42
+ if (a.severity === b.severity)
43
+ return 0;
44
+ return a.severity === "blocking" ? -1 : 1;
45
+ })
46
+ .map((a) => `${a.axis}: ${a.summary}`);
47
+ const result = { overall, concerns };
48
+ if (costUsd > 0) {
49
+ result.costUsd = costUsd;
50
+ }
51
+ // proposedTest is intentionally NOT extracted from NavigatorVerdict's
52
+ // axes — the prompt-side shape doesn't carry one today. The hook
53
+ // factory below allows callers to pass an `extractProposedTest`
54
+ // function that decides whether to attach a hard-signal test based
55
+ // on its own escalation policy (e.g., persistent-block detector).
56
+ return result;
57
+ }
58
+ /**
59
+ * Build a NavigatorHook backed by an Anthropic LLM call. Pure
60
+ * factory; the returned hook is ready to inject into BrewContext.
61
+ *
62
+ * Per-call flow:
63
+ * 1. Caller-provided loader fills in mockFiles + codeMapDigest +
64
+ * storyTestIds + spec yaml + cross-story files + prior verdicts.
65
+ * 2. buildNavigatorPrompt produces the prompt; client.messages.create
66
+ * runs it with NAVIGATOR_SYSTEM.
67
+ * 3. Response text is parsed as NavigatorVerdict (JSON; fences
68
+ * tolerated).
69
+ * 4. navigatorVerdictToHookVerdict adapts to the brew-loop shape.
70
+ * 5. Cost is tallied from input/output tokens × pricing.
71
+ *
72
+ * On any failure (load error, JSON parse, API error), the hook
73
+ * returns null — brew treats null as "navigator abstained" + the
74
+ * iteration proceeds to checkpoint without navigator review.
75
+ */
76
+ export function createPairNavigatorHook(options) {
77
+ const { anthropic, model, maxTokens = 1024, perIterBudgetUsd = 0.10, pricingPerMTokens, loadPromptContext, } = options;
78
+ return {
79
+ async review(input) {
80
+ let context;
81
+ try {
82
+ context = await loadPromptContext(input);
83
+ }
84
+ catch {
85
+ return null;
86
+ }
87
+ if (!context)
88
+ return null;
89
+ // Build a compact diff string from filesTouched + line counts.
90
+ // The full git diff isn't always available at call time; this
91
+ // summary is enough for navigator to reason about scope without
92
+ // overflowing the prompt.
93
+ const diff = `Files touched: ${input.filesTouched.join(", ")}\nLines: +${input.linesAdded} / -${input.linesRemoved}`;
94
+ const promptArgs = {
95
+ storyId: input.storyId,
96
+ driverRationale: input.rationale,
97
+ diff,
98
+ mockFiles: context.mockFiles ?? [],
99
+ codeMapDigest: context.codeMapDigest ?? "",
100
+ storyTestIds: context.storyTestIds ?? [],
101
+ // α.55 — scope concerns to the current iteration's target.
102
+ targetTestId: input.targetTestId,
103
+ apiContract: context.apiContract,
104
+ crossStoryFiles: context.crossStoryFiles,
105
+ specYaml: context.specYaml,
106
+ // α.55 — let navigator presence-check files it might claim absent.
107
+ knownSourceFiles: context.knownSourceFiles,
108
+ priorVerdicts: context.priorVerdicts,
109
+ };
110
+ const prompt = buildNavigatorPrompt(promptArgs);
111
+ let response;
112
+ try {
113
+ response = await anthropic.messages.create({
114
+ model,
115
+ system: NAVIGATOR_SYSTEM,
116
+ max_tokens: maxTokens,
117
+ messages: [{ role: "user", content: prompt }],
118
+ });
119
+ }
120
+ catch {
121
+ return null;
122
+ }
123
+ const usage = response.usage ?? { input_tokens: 0, output_tokens: 0 };
124
+ const costUsd = (usage.input_tokens * pricingPerMTokens.input) / 1_000_000 +
125
+ (usage.output_tokens * pricingPerMTokens.output) / 1_000_000;
126
+ if (costUsd > perIterBudgetUsd) {
127
+ // Over-budget — surface as abstain so brew doesn't pay the
128
+ // full ticket on a runaway response.
129
+ return null;
130
+ }
131
+ const text = extractTextFromResponse(response);
132
+ if (!text)
133
+ return null;
134
+ let verdict;
135
+ try {
136
+ verdict = parseNavigatorVerdict(text);
137
+ }
138
+ catch {
139
+ return null;
140
+ }
141
+ return navigatorVerdictToHookVerdict(verdict, costUsd);
142
+ },
143
+ };
144
+ }
145
+ /**
146
+ * Pull the text out of an Anthropic Messages API response. Returns
147
+ * empty string if the response shape is unexpected (defensive).
148
+ * Pure: no IO.
149
+ */
150
+ export function extractTextFromResponse(response) {
151
+ if (!Array.isArray(response.content))
152
+ return "";
153
+ const parts = [];
154
+ for (const block of response.content) {
155
+ if (block.type === "text" && typeof block.text === "string") {
156
+ parts.push(block.text);
157
+ }
158
+ }
159
+ return parts.join("\n");
160
+ }
161
+ /**
162
+ * Parse a NavigatorVerdict from raw LLM text. Tolerates ```json
163
+ * fences + leading/trailing prose. Throws on malformed JSON or
164
+ * shape mismatch — caller should catch + treat as abstain.
165
+ *
166
+ * Pure: validates shape; doesn't normalize/repair.
167
+ */
168
+ export function parseNavigatorVerdict(text) {
169
+ const trimmed = text.trim();
170
+ const fence = trimmed.match(/```(?:json)?\s*([\s\S]*?)```/);
171
+ const raw = fence ? fence[1].trim() : trimmed;
172
+ const parsed = JSON.parse(raw);
173
+ if (!parsed || typeof parsed !== "object") {
174
+ throw new Error("verdict is not an object");
175
+ }
176
+ if (!Array.isArray(parsed.axes)) {
177
+ throw new Error("verdict.axes must be an array");
178
+ }
179
+ if (parsed.overall !== "approve" && parsed.overall !== "warn" && parsed.overall !== "block") {
180
+ throw new Error(`verdict.overall must be approve|warn|block (got ${parsed.overall})`);
181
+ }
182
+ if (typeof parsed.rationale !== "string") {
183
+ throw new Error("verdict.rationale must be a string");
184
+ }
185
+ return parsed;
186
+ }
187
+ //# sourceMappingURL=pair-navigator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pair-navigator.js","sourceRoot":"","sources":["../../../src/commands/brew/pair-navigator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function budget(argv: string[]): Promise<void>;
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/budget/index.ts"],"names":[],"mappings":"AA2HA,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkK1D"}