@slowcook-ai/cli 0.12.10 → 0.13.0-alpha.3

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 (50) hide show
  1. package/dist/cli.js +25 -2
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/brew/agent.d.ts.map +1 -1
  4. package/dist/commands/brew/agent.js +31 -6
  5. package/dist/commands/brew/agent.js.map +1 -1
  6. package/dist/commands/brew/patterns.d.ts +54 -0
  7. package/dist/commands/brew/patterns.d.ts.map +1 -0
  8. package/dist/commands/brew/patterns.js +136 -0
  9. package/dist/commands/brew/patterns.js.map +1 -0
  10. package/dist/commands/brew/prompts.d.ts +7 -0
  11. package/dist/commands/brew/prompts.d.ts.map +1 -1
  12. package/dist/commands/brew/prompts.js +7 -0
  13. package/dist/commands/brew/prompts.js.map +1 -1
  14. package/dist/commands/dispatch/index.d.ts.map +1 -1
  15. package/dist/commands/dispatch/index.js +10 -3
  16. package/dist/commands/dispatch/index.js.map +1 -1
  17. package/dist/commands/init/plan.d.ts.map +1 -1
  18. package/dist/commands/init/plan.js +7 -1
  19. package/dist/commands/init/plan.js.map +1 -1
  20. package/dist/commands/init/templates.d.ts +8 -0
  21. package/dist/commands/init/templates.d.ts.map +1 -1
  22. package/dist/commands/init/templates.js +62 -0
  23. package/dist/commands/init/templates.js.map +1 -1
  24. package/dist/commands/investigate/agent.d.ts +68 -0
  25. package/dist/commands/investigate/agent.d.ts.map +1 -0
  26. package/dist/commands/investigate/agent.js +465 -0
  27. package/dist/commands/investigate/agent.js.map +1 -0
  28. package/dist/commands/investigate/index.d.ts +43 -0
  29. package/dist/commands/investigate/index.d.ts.map +1 -0
  30. package/dist/commands/investigate/index.js +296 -0
  31. package/dist/commands/investigate/index.js.map +1 -0
  32. package/dist/commands/investigate/prompts.d.ts +90 -0
  33. package/dist/commands/investigate/prompts.d.ts.map +1 -0
  34. package/dist/commands/investigate/prompts.js +190 -0
  35. package/dist/commands/investigate/prompts.js.map +1 -0
  36. package/dist/commands/investigate/schema.d.ts +91 -0
  37. package/dist/commands/investigate/schema.d.ts.map +1 -0
  38. package/dist/commands/investigate/schema.js +87 -0
  39. package/dist/commands/investigate/schema.js.map +1 -0
  40. package/dist/commands/on-brew-merged/index.d.ts.map +1 -1
  41. package/dist/commands/on-brew-merged/index.js +27 -6
  42. package/dist/commands/on-brew-merged/index.js.map +1 -1
  43. package/dist/commands/recipe-regression/index.d.ts +50 -0
  44. package/dist/commands/recipe-regression/index.d.ts.map +1 -0
  45. package/dist/commands/recipe-regression/index.js +150 -0
  46. package/dist/commands/recipe-regression/index.js.map +1 -0
  47. package/dist/commands/testgen/agent.d.ts.map +1 -1
  48. package/dist/commands/testgen/agent.js +16 -4
  49. package/dist/commands/testgen/agent.js.map +1 -1
  50. package/package.json +4 -4
@@ -0,0 +1,91 @@
1
+ /**
2
+ * BugProfile — the artefact emitted by `slowcook investigate`.
3
+ *
4
+ * Lives at `.brewing/bug-profiles/B-<id>.yaml`. Plays the role for
5
+ * the bug-fix flow that `specs/story-N.yaml` plays for the story
6
+ * flow: the contract between investigate (or refine) and the next
7
+ * agent down the pipeline (sift / brew).
8
+ *
9
+ * v1 (slowcook 0.13.0) shape. Schema version bump on any field
10
+ * removal or rename.
11
+ */
12
+ export declare const BUG_PROFILE_SCHEMA_VERSION: 1;
13
+ /**
14
+ * Bug ids are sequential under `B-<n>`. The numbering is independent
15
+ * of `story-<NNN>` — bugs and stories are different artefact types.
16
+ * Race-condition collision avoidance: same logic as story-id picker
17
+ * (slowcook#8 fix); the picker walks `.brewing/bug-profiles/` and
18
+ * matching `slowcook/bug-profile/B-*` branches before assigning.
19
+ */
20
+ export type BugId = string;
21
+ export interface FailureLocus {
22
+ /** Repo-relative path where the failure originates (or where the
23
+ * fix should land if multi-site). Always present. */
24
+ file: string;
25
+ /** 1-based line of the offending statement when known. */
26
+ line?: number;
27
+ /** Function / method / route name when known. */
28
+ function?: string;
29
+ /** One-paragraph human-readable diagnosis from the investigate
30
+ * agent. The "why broken", not the "how to fix" — fix-shaping
31
+ * happens in sift. */
32
+ diagnosis: string;
33
+ }
34
+ export interface RelatedSpec {
35
+ /** Spec or bug id that's relevant context. */
36
+ id: string;
37
+ /** Relationship hint — guides chef when sequencing fixes. */
38
+ relationship: "touches" | "supersedes" | "related" | "duplicates";
39
+ /** One-line explanation. Optional. */
40
+ note?: string;
41
+ }
42
+ export interface BugProfile {
43
+ /** $schema field for editor tooling. */
44
+ $schema?: string;
45
+ schema_version: typeof BUG_PROFILE_SCHEMA_VERSION;
46
+ bug_id: BugId;
47
+ /** Human title — usually a paraphrase of the issue title. */
48
+ title: string;
49
+ /** GitHub issue number (`#NNN`). */
50
+ source_issue: string;
51
+ /** Lifecycle. Mirrors story-flow status semantics. */
52
+ status: "investigated" | "recipe-emitted" | "sifted" | "shipped" | "closed";
53
+ /** Investigate agent + version that emitted this profile. */
54
+ investigated_by: string;
55
+ /** ISO-8601 timestamp of emission. */
56
+ created_at: string;
57
+ /** What the user / reporter sees. Verbatim or close-paraphrase
58
+ * from the issue body. Refine-style paraphrasing is forbidden;
59
+ * see the "PM intent carries weight" rule. */
60
+ symptom: string[];
61
+ /** What the system should do instead. Often inferable from the
62
+ * issue body; otherwise asked of the PM. */
63
+ expected: string[];
64
+ /** Minimum repro steps. Often a one-liner ("load /feed as authed
65
+ * user"); rarely longer than 3 steps. */
66
+ reproduction: string[];
67
+ /** Where the bug actually lives in the code. The investigate
68
+ * agent's job is to find this. */
69
+ failure_locus: FailureLocus;
70
+ /** What the regression test should assert in plain English.
71
+ * recipe --regression turns this into a vitest file. */
72
+ regression_assertion: string[];
73
+ /** Paths the fix is allowed to touch. Sift uses this as
74
+ * allowed_paths. Narrow on purpose — bug fixes shouldn't sprawl. */
75
+ fix_scope: string[];
76
+ /** Stories or bugs this fix interacts with. */
77
+ related_specs?: RelatedSpec[];
78
+ }
79
+ /**
80
+ * Validate a parsed YAML object against the schema. Returns
81
+ * `{ ok: true, profile }` on success, `{ ok: false, errors }`
82
+ * otherwise. Hand-rolled; we don't want a JSON-schema dep.
83
+ */
84
+ export declare function validateBugProfile(input: unknown): {
85
+ ok: true;
86
+ profile: BugProfile;
87
+ } | {
88
+ ok: false;
89
+ errors: string[];
90
+ };
91
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/commands/investigate/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,0BAA0B,EAAG,CAAU,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC;AAE3B,MAAM,WAAW,YAAY;IAC3B;0DACsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;2BAEuB;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,8CAA8C;IAC9C,EAAE,EAAE,MAAM,CAAC;IACX,6DAA6D;IAC7D,YAAY,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS,GAAG,YAAY,CAAC;IAClE,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,OAAO,0BAA0B,CAAC;IAClD,MAAM,EAAE,KAAK,CAAC;IACd,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,MAAM,EAAE,cAAc,GAAG,gBAAgB,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC5E,6DAA6D;IAC7D,eAAe,EAAE,MAAM,CAAC;IACxB,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;IAEnB;;mDAE+C;IAC/C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB;iDAC6C;IAC7C,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;8CAC0C;IAC1C,YAAY,EAAE,MAAM,EAAE,CAAC;IAEvB;uCACmC;IACnC,aAAa,EAAE,YAAY,CAAC;IAE5B;6DACyD;IACzD,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAE/B;yEACqE;IACrE,SAAS,EAAE,MAAM,EAAE,CAAC;IAEpB,+CAA+C;IAC/C,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;CAC/B;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG;IAClD,EAAE,EAAE,IAAI,CAAC;IACT,OAAO,EAAE,UAAU,CAAC;CACrB,GAAG;IACF,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAsEA"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * BugProfile — the artefact emitted by `slowcook investigate`.
3
+ *
4
+ * Lives at `.brewing/bug-profiles/B-<id>.yaml`. Plays the role for
5
+ * the bug-fix flow that `specs/story-N.yaml` plays for the story
6
+ * flow: the contract between investigate (or refine) and the next
7
+ * agent down the pipeline (sift / brew).
8
+ *
9
+ * v1 (slowcook 0.13.0) shape. Schema version bump on any field
10
+ * removal or rename.
11
+ */
12
+ export const BUG_PROFILE_SCHEMA_VERSION = 1;
13
+ /**
14
+ * Validate a parsed YAML object against the schema. Returns
15
+ * `{ ok: true, profile }` on success, `{ ok: false, errors }`
16
+ * otherwise. Hand-rolled; we don't want a JSON-schema dep.
17
+ */
18
+ export function validateBugProfile(input) {
19
+ const errors = [];
20
+ if (!isPlainObject(input)) {
21
+ return { ok: false, errors: ["root must be an object"] };
22
+ }
23
+ const obj = input;
24
+ const schemaVersion = obj["schema_version"];
25
+ if (schemaVersion !== BUG_PROFILE_SCHEMA_VERSION) {
26
+ errors.push(`schema_version must be ${BUG_PROFILE_SCHEMA_VERSION}, got ${String(schemaVersion)}`);
27
+ }
28
+ const requireString = (key) => {
29
+ const v = obj[key];
30
+ if (typeof v !== "string" || v.length === 0) {
31
+ errors.push(`${key} must be a non-empty string`);
32
+ return null;
33
+ }
34
+ return v;
35
+ };
36
+ const requireStringArray = (key) => {
37
+ const v = obj[key];
38
+ if (!Array.isArray(v) || v.some((x) => typeof x !== "string")) {
39
+ errors.push(`${key} must be an array of strings`);
40
+ return null;
41
+ }
42
+ return v;
43
+ };
44
+ const bugId = requireString("bug_id");
45
+ if (bugId && !/^B-\d+$/.test(bugId)) {
46
+ errors.push(`bug_id must match /^B-\\d+$/ (got "${bugId}")`);
47
+ }
48
+ const sourceIssue = requireString("source_issue");
49
+ if (sourceIssue && !/^#\d+$/.test(sourceIssue)) {
50
+ errors.push(`source_issue must match /^#\\d+$/ (got "${sourceIssue}")`);
51
+ }
52
+ requireString("title");
53
+ requireString("status");
54
+ requireString("investigated_by");
55
+ requireString("created_at");
56
+ requireStringArray("symptom");
57
+ requireStringArray("expected");
58
+ requireStringArray("reproduction");
59
+ requireStringArray("regression_assertion");
60
+ requireStringArray("fix_scope");
61
+ const locus = obj["failure_locus"];
62
+ if (!isPlainObject(locus)) {
63
+ errors.push("failure_locus must be an object");
64
+ }
65
+ else {
66
+ const l = locus;
67
+ if (typeof l["file"] !== "string" || l["file"].length === 0) {
68
+ errors.push("failure_locus.file must be a non-empty string");
69
+ }
70
+ if (typeof l["diagnosis"] !== "string" || l["diagnosis"].length === 0) {
71
+ errors.push("failure_locus.diagnosis must be a non-empty string");
72
+ }
73
+ if (l["line"] !== undefined && typeof l["line"] !== "number") {
74
+ errors.push("failure_locus.line must be a number when present");
75
+ }
76
+ if (l["function"] !== undefined && typeof l["function"] !== "string") {
77
+ errors.push("failure_locus.function must be a string when present");
78
+ }
79
+ }
80
+ if (errors.length > 0)
81
+ return { ok: false, errors };
82
+ return { ok: true, profile: obj };
83
+ }
84
+ function isPlainObject(v) {
85
+ return typeof v === "object" && v !== null && !Array.isArray(v);
86
+ }
87
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/commands/investigate/schema.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/on-brew-merged/index.ts"],"names":[],"mappings":"AAoGA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoIhE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/on-brew-merged/index.ts"],"names":[],"mappings":"AA2GA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoJhE"}
@@ -67,6 +67,13 @@ Exit codes:
67
67
  2 script error
68
68
  `);
69
69
  }
70
+ function centre(text, width) {
71
+ if (text.length >= width)
72
+ return text;
73
+ const totalPad = width - text.length;
74
+ const left = Math.floor(totalPad / 2);
75
+ return " ".repeat(left) + text + " ".repeat(totalPad - left);
76
+ }
70
77
  function detectOwnerRepo(cwd) {
71
78
  try {
72
79
  const url = execSync("git remote get-url origin", {
@@ -160,18 +167,32 @@ export async function onBrewMerged(argv) {
160
167
  byAgent.set(m.agent, acc);
161
168
  }
162
169
  const totalUsd = [...byAgent.values()].reduce((a, b) => a + b.usd, 0);
163
- const order = ["refine", "testgen", "brew"];
170
+ // 0.12.13+ restaurant-bill rendering. Wrapped in a code block so
171
+ // GitHub renders it in a fixed-width font; columns align.
172
+ // Order respects the pipeline flow (refine → testgen/recipe →
173
+ // brew/sift). Bug-flow agents (investigate, sift) included so
174
+ // future bugs render with the same template.
175
+ const order = ["refine", "investigate", "testgen", "recipe", "brew", "sift"];
176
+ const lineWidth = 38;
164
177
  const lines = [];
165
- lines.push("**Pipeline cost:**");
178
+ const sep = "─".repeat(lineWidth);
179
+ lines.push(sep);
180
+ lines.push(centre("SLOWCOOK · PIPELINE BILL", lineWidth));
181
+ lines.push(sep);
166
182
  for (const agent of order) {
167
183
  const acc = byAgent.get(agent);
168
184
  if (!acc)
169
185
  continue;
170
- const roundsNote = acc.n > 1 ? ` (${acc.n} run${acc.n === 1 ? "" : "s"})` : "";
171
- lines.push(`- ${agent}${roundsNote}: $${acc.usd.toFixed(4)}`);
186
+ const left = ` ${agent.padEnd(12)}× ${acc.n}`;
187
+ const right = `$${acc.usd.toFixed(4)} `;
188
+ lines.push(left + " ".repeat(Math.max(1, lineWidth - left.length - right.length)) + right);
172
189
  }
173
- lines.push(`- **Total: $${totalUsd.toFixed(4)}**`);
174
- costSummaryMd = "\n\n" + lines.join("\n") + "\n";
190
+ lines.push(sep);
191
+ const totalLeft = " TOTAL";
192
+ const totalRight = `$${totalUsd.toFixed(4)} `;
193
+ lines.push(totalLeft + " ".repeat(Math.max(1, lineWidth - totalLeft.length - totalRight.length)) + totalRight);
194
+ lines.push(sep);
195
+ costSummaryMd = "\n\n```\n" + lines.join("\n") + "\n```\n";
175
196
  }
176
197
  }
177
198
  catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/on-brew-merged/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/on-brew-merged/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * `slowcook recipe --regression --bug B-<n>` — emits a regression
3
+ * test from a bug-profile.
4
+ *
5
+ * **Status: alpha.3a**. Stub-only emitter: writes a deterministic
6
+ * vitest skeleton at `tests/regression/B-<n>-<slug>.test.ts` that
7
+ * asserts via `expect.fail()` so the test is red until sift replaces
8
+ * the body with real assertions (alpha.4) or alpha.3b upgrades this
9
+ * emitter to write real tests via an LLM agent.
10
+ *
11
+ * The skeleton structure is what sift expects to see:
12
+ * - one `describe` named for the bug id + title
13
+ * - one `it` per regression_assertion line
14
+ * - body of each `it` calls `expect.fail(...)` referencing the bug
15
+ * profile so the failure message points the operator at the right
16
+ * artefact when the test runs.
17
+ *
18
+ * Usage:
19
+ * slowcook recipe --regression --bug B-1 [--cwd <path>]
20
+ *
21
+ * Internally invoked from the CLI's `recipe`/`testgen` dispatch when
22
+ * `--regression` is present (see cli.ts wiring).
23
+ */
24
+ import { type BugProfile } from "../investigate/schema.js";
25
+ export interface RecipeRegressionArgs {
26
+ bugId: string;
27
+ repoRoot: string;
28
+ dryRun: boolean;
29
+ /** alpha.3b: when true, route through the LLM emitter. Stub today. */
30
+ useLlm: boolean;
31
+ }
32
+ export declare function parseRecipeRegressionArgs(argv: string[]): RecipeRegressionArgs;
33
+ /**
34
+ * Accept "1", "B-1", or "B1" and normalise to "B-<n>".
35
+ */
36
+ export declare function normaliseBugId(raw: string): string;
37
+ export declare function recipeRegression(argv: string[], cliVersion: string): Promise<void>;
38
+ export declare function loadBugProfile(repoRoot: string, bugId: string): BugProfile;
39
+ export interface RegressionFile {
40
+ path: string;
41
+ contents: string;
42
+ }
43
+ /**
44
+ * Build the stub regression test for a bug profile. Deterministic —
45
+ * same profile → same file. Sift overwrites with real assertions in
46
+ * alpha.4; alpha.3b will replace this stub emitter with an LLM-written
47
+ * real test.
48
+ */
49
+ export declare function renderRegressionStub(profile: BugProfile, cliVersion: string): RegressionFile;
50
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/recipe-regression/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAIH,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAG/E,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,sEAAsE;IACtE,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,oBAAoB,CAuB9E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIlD;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EAAE,EACd,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAe1E;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,UAAU,EACnB,UAAU,EAAE,MAAM,GACjB,cAAc,CAkChB"}
@@ -0,0 +1,150 @@
1
+ /**
2
+ * `slowcook recipe --regression --bug B-<n>` — emits a regression
3
+ * test from a bug-profile.
4
+ *
5
+ * **Status: alpha.3a**. Stub-only emitter: writes a deterministic
6
+ * vitest skeleton at `tests/regression/B-<n>-<slug>.test.ts` that
7
+ * asserts via `expect.fail()` so the test is red until sift replaces
8
+ * the body with real assertions (alpha.4) or alpha.3b upgrades this
9
+ * emitter to write real tests via an LLM agent.
10
+ *
11
+ * The skeleton structure is what sift expects to see:
12
+ * - one `describe` named for the bug id + title
13
+ * - one `it` per regression_assertion line
14
+ * - body of each `it` calls `expect.fail(...)` referencing the bug
15
+ * profile so the failure message points the operator at the right
16
+ * artefact when the test runs.
17
+ *
18
+ * Usage:
19
+ * slowcook recipe --regression --bug B-1 [--cwd <path>]
20
+ *
21
+ * Internally invoked from the CLI's `recipe`/`testgen` dispatch when
22
+ * `--regression` is present (see cli.ts wiring).
23
+ */
24
+ import { mkdirSync, writeFileSync, existsSync, readFileSync } from "node:fs";
25
+ import { join } from "node:path";
26
+ import { validateBugProfile } from "../investigate/schema.js";
27
+ import { parseSimpleYaml } from "../investigate/agent.js";
28
+ export function parseRecipeRegressionArgs(argv) {
29
+ const args = {
30
+ bugId: "",
31
+ repoRoot: process.cwd(),
32
+ dryRun: false,
33
+ useLlm: false,
34
+ };
35
+ for (let i = 0; i < argv.length; i++) {
36
+ const arg = argv[i];
37
+ const next = argv[i + 1];
38
+ if (arg === "--bug" && next) {
39
+ args.bugId = normaliseBugId(next);
40
+ i++;
41
+ }
42
+ else if (arg === "--cwd" && next) {
43
+ args.repoRoot = next;
44
+ i++;
45
+ }
46
+ else if (arg === "--dry-run") {
47
+ args.dryRun = true;
48
+ }
49
+ else if (arg === "--llm") {
50
+ args.useLlm = true;
51
+ }
52
+ }
53
+ return args;
54
+ }
55
+ /**
56
+ * Accept "1", "B-1", or "B1" and normalise to "B-<n>".
57
+ */
58
+ export function normaliseBugId(raw) {
59
+ const m = raw.trim().match(/^B?-?(\d+)$/i);
60
+ if (!m || !m[1])
61
+ return raw;
62
+ return `B-${m[1]}`;
63
+ }
64
+ export async function recipeRegression(argv, cliVersion) {
65
+ const args = parseRecipeRegressionArgs(argv);
66
+ if (!args.bugId) {
67
+ console.error("slowcook recipe --regression: --bug <id> is required");
68
+ process.exit(64);
69
+ }
70
+ if (args.useLlm) {
71
+ console.error("slowcook recipe --regression --llm: alpha.3b not yet shipped; falling back to stub emitter.");
72
+ }
73
+ const profile = loadBugProfile(args.repoRoot, args.bugId);
74
+ const file = renderRegressionStub(profile, cliVersion);
75
+ if (args.dryRun) {
76
+ console.log(file.contents);
77
+ console.error(`\n(dry-run: would write ${file.path})`);
78
+ return;
79
+ }
80
+ const fullPath = join(args.repoRoot, file.path);
81
+ mkdirSync(join(args.repoRoot, "tests/regression"), { recursive: true });
82
+ writeFileSync(fullPath, file.contents, "utf8");
83
+ console.error(`Wrote ${file.path} (alpha.3a stub — uses expect.fail; sift / alpha.3b will replace with real assertions).`);
84
+ }
85
+ export function loadBugProfile(repoRoot, bugId) {
86
+ const path = join(repoRoot, ".brewing/bug-profiles", `${bugId}.yaml`);
87
+ if (!existsSync(path)) {
88
+ throw new Error(`bug profile not found: ${path}. Run 'slowcook investigate --issue <n>' first.`);
89
+ }
90
+ const raw = parseSimpleYaml(readFileSync(path, "utf8"));
91
+ const validation = validateBugProfile(raw);
92
+ if (!validation.ok) {
93
+ throw new Error(`bug profile at ${path} is invalid:\n ${validation.errors.join("\n ")}`);
94
+ }
95
+ return validation.profile;
96
+ }
97
+ /**
98
+ * Build the stub regression test for a bug profile. Deterministic —
99
+ * same profile → same file. Sift overwrites with real assertions in
100
+ * alpha.4; alpha.3b will replace this stub emitter with an LLM-written
101
+ * real test.
102
+ */
103
+ export function renderRegressionStub(profile, cliVersion) {
104
+ const slug = slugify(profile.title);
105
+ const path = `tests/regression/${profile.bug_id}-${slug}.test.ts`;
106
+ const lines = [];
107
+ lines.push(`// slowcook ${cliVersion} regression test — ${profile.bug_id}`);
108
+ lines.push(`//`);
109
+ lines.push(`// Bug profile: .brewing/bug-profiles/${profile.bug_id}.yaml`);
110
+ lines.push(`// Source issue: ${profile.source_issue}`);
111
+ lines.push(`// Failure locus: ${profile.failure_locus.file}${profile.failure_locus.line ? `:${profile.failure_locus.line}` : ""}`);
112
+ lines.push(`//`);
113
+ lines.push(`// alpha.3a stub: each \`it\` block calls expect.fail(...) so the`);
114
+ lines.push(`// test is red against current code. Sift (alpha.4) replaces the`);
115
+ lines.push(`// body with real assertions that exercise the regression. Once`);
116
+ lines.push(`// alpha.3b ships an LLM-backed emitter, this comment header goes`);
117
+ lines.push(`// away and the body is real from the start.`);
118
+ lines.push(``);
119
+ lines.push(`import { describe, it, expect } from "vitest";`);
120
+ lines.push(``);
121
+ lines.push(`describe(${jsonString(`${profile.bug_id} regression — ${profile.title}`)}, () => {`);
122
+ for (let i = 0; i < profile.regression_assertion.length; i++) {
123
+ const assertion = profile.regression_assertion[i] ?? "";
124
+ lines.push(` it(${jsonString(assertion)}, () => {`);
125
+ lines.push(` // Diagnosis: ${oneLine(profile.failure_locus.diagnosis)}`);
126
+ lines.push(` // Expected: ${oneLine(profile.expected[0] ?? "(not specified)")}`);
127
+ lines.push(` // alpha.3a stub — sift / alpha.3b replaces this body.`);
128
+ lines.push(` expect.fail(${jsonString(`Regression test stub for ${profile.bug_id}. See .brewing/bug-profiles/${profile.bug_id}.yaml. Sift will replace this body once it lands.`)});`);
129
+ lines.push(` });`);
130
+ if (i < profile.regression_assertion.length - 1)
131
+ lines.push(``);
132
+ }
133
+ lines.push(`});`);
134
+ lines.push(``);
135
+ return { path, contents: lines.join("\n") };
136
+ }
137
+ function slugify(s) {
138
+ return s
139
+ .toLowerCase()
140
+ .replace(/[^a-z0-9]+/g, "-")
141
+ .replace(/^-+|-+$/g, "")
142
+ .slice(0, 60);
143
+ }
144
+ function oneLine(s) {
145
+ return s.split("\n").join(" ").trim();
146
+ }
147
+ function jsonString(s) {
148
+ return JSON.stringify(s);
149
+ }
150
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/recipe-regression/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/commands/testgen/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/commands/testgen/agent.ts"],"names":[],"mappings":"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"}
@@ -862,12 +862,24 @@ export function buildSchemaPresenceTestContent(spec) {
862
862
  ` );\n` +
863
863
  ` if (colRe.test(m[1])) return true;\n` +
864
864
  ` }\n` +
865
- ` // 2. ALTER TABLE table ADD COLUMN [IF NOT EXISTS] column\n` +
866
- ` const alterRe = new RegExp(\n` +
867
- ` \`alter\\\\s+table\\\\s+(?:only\\\\s+)?[\\"\\\`]?(?:public\\\\.)?\${t}[\\"\\\`]?\\\\s+add\\\\s+column\\\\s+(?:if\\\\s+not\\\\s+exists\\\\s+)?[\\"\\\`]?\${c}\\\\b\`,\n` +
865
+ ` // 2. ALTER TABLE multi-column form supported (0.12.11 fix):\n` +
866
+ ` // alter table foo add column a int, add column b text;\n` +
867
+ ` // First find every \`alter table <t> ... ;\` statement, then\n` +
868
+ ` // check whether the add-column clause for our column appears\n` +
869
+ ` // anywhere in the statement body.\n` +
870
+ ` const alterStmtRe = new RegExp(\n` +
871
+ ` \`alter\\\\s+table\\\\s+(?:only\\\\s+)?[\\"\\\`]?(?:public\\\\.)?\${t}[\\"\\\`]?\\\\s+([\\\\s\\\\S]*?);\`,\n` +
872
+ ` "gi"\n` +
873
+ ` );\n` +
874
+ ` const addRe = new RegExp(\n` +
875
+ ` \`add\\\\s+column\\\\s+(?:if\\\\s+not\\\\s+exists\\\\s+)?[\\"\\\`]?\${c}\\\\b\`,\n` +
868
876
  ` "i"\n` +
869
877
  ` );\n` +
870
- ` return alterRe.test(sql);\n` +
878
+ ` let stmt;\n` +
879
+ ` while ((stmt = alterStmtRe.exec(sql)) !== null) {\n` +
880
+ ` if (addRe.test(stmt[1])) return true;\n` +
881
+ ` }\n` +
882
+ ` return false;\n` +
871
883
  ` }\n` +
872
884
  `\n` +
873
885
  ` function parseSelectColumns(colsStr: string): string[] {\n` +