@slowcook-ai/cli 0.6.4 → 0.6.6

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.
@@ -14,4 +14,5 @@
14
14
  * returns a short "no context provided" note instead.
15
15
  */
16
16
  export declare function buildProjectContext(repoRoot: string): string;
17
+ export declare function readContextMd(repoRoot: string): string | null;
17
18
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/commands/refine/context.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAoB5D"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/commands/refine/context.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAoB5D;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ7D"}
@@ -34,7 +34,7 @@ export function buildProjectContext(repoRoot) {
34
34
  }
35
35
  return sections.join("\n");
36
36
  }
37
- function readContextMd(repoRoot) {
37
+ export function readContextMd(repoRoot) {
38
38
  const path = join(repoRoot, ".brewing", "context.md");
39
39
  if (!existsSync(path))
40
40
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/commands/refine/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,SAAS,EAAE,CAAC;QACd,QAAQ,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;QACrE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,IAAI,CACX,oIAAoI,CACrI,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACrD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;QAC5F,KAAK,MAAM,IAAI,IAAI,WAAW;YAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB;IACrC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;IACtD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAUD,SAAS,sBAAsB,CAAC,QAAgB;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;IACpD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAEhD,CAAC;QACF,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;QAClC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAClD,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;gBAAE,SAAS;YACxC,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,KAAK,KAAK,CAAC,KAAK,IAAI,YAAY,GAAG,GAAG,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/commands/refine/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,SAAS,EAAE,CAAC;QACd,QAAQ,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;QACrE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,IAAI,CACX,oIAAoI,CACrI,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACrD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;QAC5F,KAAK,MAAM,IAAI,IAAI,WAAW;YAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;IACtD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAUD,SAAS,sBAAsB,CAAC,QAAgB;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;IACpD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAEhD,CAAC;QACF,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;QAClC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAClD,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;gBAAE,SAAS;YACxC,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,KAAK,KAAK,CAAC,KAAK,IAAI,YAAY,GAAG,GAAG,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/commands/refine/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,iBAAiB,kjCAU7B,CAAC;AAEF,eAAO,MAAM,2BAA2B,wsDAoBkG,CAAC;AAE3I,eAAO,MAAM,yBAAyB,GAAI,WAAW,MAAM,EAAE,gBAAgB,MAAM,WA+EgD,CAAC;AAEpI,sDAAsD;AACtD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,GAAG,MAAM,CAaT"}
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/commands/refine/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,iBAAiB,kjCAU7B,CAAC;AAEF,eAAO,MAAM,2BAA2B,wsDAoBkG,CAAC;AAE3I,eAAO,MAAM,yBAAyB,GAAI,WAAW,MAAM,EAAE,gBAAgB,MAAM,WAmFiK,CAAC;AAErP,sDAAsD;AACtD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,GAAG,MAAM,CAaT"}
@@ -121,7 +121,11 @@ Treat the spec as machine-parsed YAML first, human-readable documentation second
121
121
  - **Use the project's OWN terminology, not generic software vocabulary.** Stick to words that appear in the issue body, linked specs, or surrounding codebase context. Do not import terms from other domains (e.g. "brewing", "onboarding", "withdrawals", "tenant", "workspace") unless those exact words appear in the issue. When unsure what a concept is called in this project, ask.
122
122
  - Keep scope tight: a medium-sized story, not an epic. If the issue feels larger, propose splitting in the question round.
123
123
  - Treat PM silence as "please ask again" — summarize where we are and re-ask open questions.
124
- - The spec is the contract for code-generation agents down the pipeline. Every invariant and acceptance scenario must be testable.`;
124
+ - The spec is the contract for code-generation agents down the pipeline. Every invariant and acceptance scenario must be testable.
125
+ - **Write invariants at the handler-call level, not the semantic-outcome level.** When the story touches external services (databases, auth providers, email, payments), prefer statements about what the code does *to* its dependencies over statements about end-to-end effects. This keeps invariants testable by fast, in-process tests that mock the external boundary — the layer automated brewing can actually drive. Reserve semantic-outcome statements for a separate acceptance-test tier that runs against real sandboxes.
126
+ - Good (testable in-process by mocking the boundary): "Handler calls \`supabase.auth.signInWithPassword\` with the provided credentials." · "On successful DB insert, handler returns 201 with the persisted row." · "When the rate-limit counter for the user is ≥ 15, handler returns 429 without calling the DB."
127
+ - Avoid (only provable against real services): "The user is authenticated against Supabase." · "A row exists in the \`rewos\` table after the request." · "The rate limit resets weekly."
128
+ - This is guidance, not a hard rule — if an invariant genuinely requires end-to-end proof, say so and it will route to the acceptance tier. The goal is to not write acceptance-only invariants by accident when a module-boundary form exists.`;
125
129
  /** Trivial, used only as a title for the draft PR. */
126
130
  export function draftPrTitle(storyId, title) {
127
131
  return `spec: story-${storyId} — ${title}`;
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/commands/refine/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;CAUhC,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG;;;;;;;;;;;;;;;;;;;;0IAoB+F,CAAC;AAE3I,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,SAAiB,EAAE,cAAsB,EAAE,EAAE,CAAC;;;;;;EAMtF,cAAc;;;;;;EAMd,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mIAmEwH,CAAC;AAEpI,sDAAsD;AACtD,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,KAAa;IACzD,OAAO,eAAe,OAAO,MAAM,KAAK,EAAE,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAI3B;IACC,MAAM,iBAAiB,GACrB,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;QACxB,CAAC,CAAC,uDAAuD,IAAI,CAAC,UAAU;aACnE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC;aAC1B,IAAI,CAAC,IAAI,CAAC,qEAAqE;QACpF,CAAC,CAAC,EAAE,CAAC;IACT,OAAO,sBAAsB,IAAI,CAAC,WAAW;;;EAG7C,iBAAiB;;oCAEiB,CAAC;AACrC,CAAC"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/commands/refine/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;CAUhC,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG;;;;;;;;;;;;;;;;;;;;0IAoB+F,CAAC;AAE3I,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,SAAiB,EAAE,cAAsB,EAAE,EAAE,CAAC;;;;;;EAMtF,cAAc;;;;;;EAMd,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oPAuEyO,CAAC;AAErP,sDAAsD;AACtD,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,KAAa;IACzD,OAAO,eAAe,OAAO,MAAM,KAAK,EAAE,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAI3B;IACC,MAAM,iBAAiB,GACrB,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;QACxB,CAAC,CAAC,uDAAuD,IAAI,CAAC,UAAU;aACnE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC;aAC1B,IAAI,CAAC,IAAI,CAAC,qEAAqE;QACpF,CAAC,CAAC,EAAE,CAAC;IACT,OAAO,sBAAsB,IAAI,CAAC,WAAW;;;EAG7C,iBAAiB;;oCAEiB,CAAC;AACrC,CAAC"}
@@ -4,6 +4,7 @@ export declare const LABEL_TESTS_READY = "tests-ready";
4
4
  export declare const LABEL_OVERRIDE_FREEZE = "override-freeze";
5
5
  export declare const TESTS_INTEGRATION_DIR = "tests/integration";
6
6
  export declare const MANIFESTS_DIR = ".brewing/manifests";
7
+ export declare const MOCK_HELPERS_DIR = "tests/helpers/mocks";
7
8
  export interface TestgenContext {
8
9
  repoRoot: string;
9
10
  forge: ForgeAdapter;
@@ -41,6 +42,28 @@ export type TestgenOutcome = {
41
42
  * citing the supersede chain in the PR body for auditability).
42
43
  */
43
44
  export declare function runTestgen(ctx: TestgenContext): Promise<TestgenOutcome>;
45
+ export declare function buildProjectContext(repoRoot: string): string;
46
+ /**
47
+ * Tier-1 conformance lint. Run on every generated test file before commit.
48
+ * Catches patterns the prompt forbids — inline `vi.mock`, `fetch(...)`,
49
+ * HTTP-loopback mocking libraries, and skipped tests. These slip through
50
+ * when the LLM reverts to habits from tier-0 (HTTP-loopback) examples.
51
+ *
52
+ * Returns an array of violations (file:line:pattern:reason); empty means
53
+ * the file is conformant. Caller decides whether violations halt the run
54
+ * or emit a warning — in 0.6.6 they halt, because a non-conformant tier-1
55
+ * test file defeats the whole point of the redesign.
56
+ *
57
+ * Sanitisation: string literals and comments are blanked before scanning
58
+ * (same approach as extractTestIdsFromFile) so \`"uses vi.mock style"\`
59
+ * in a JSDoc or message string doesn't trip the lint.
60
+ */
61
+ export interface TierOneViolation {
62
+ line: number;
63
+ pattern: string;
64
+ reason: string;
65
+ }
66
+ export declare function lintTierOneTest(filePath: string, source: string): TierOneViolation[];
44
67
  /**
45
68
  * Parse the emitted TS file and pull out test IDs in the format
46
69
  * <file> > <describe-chain> > <test-name>
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/commands/testgen/agent.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,YAAY,EAAQ,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAQlD,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAC/C,eAAO,MAAM,qBAAqB,oBAAoB,CAAC;AAEvD,eAAO,MAAM,qBAAqB,sBAAsB,CAAC;AACzD,eAAO,MAAM,aAAa,uBAAuB,CAAC;AAElD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,YAAY,CAAC;IACpB,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,iFAAiF;IACjF,GAAG,EAAE,OAAO,CAAC;IACb,2EAA2E;IAC3E,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,GAAG,EAAE,IAAI,CAAC;CACX;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,EAAE,CAAA;CAAE,GACzG;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5E;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAiG7E;AA2FD;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CA4BjF"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/commands/testgen/agent.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,YAAY,EAAQ,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AASlD,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAC/C,eAAO,MAAM,qBAAqB,oBAAoB,CAAC;AAEvD,eAAO,MAAM,qBAAqB,sBAAsB,CAAC;AACzD,eAAO,MAAM,aAAa,uBAAuB,CAAC;AAClD,eAAO,MAAM,gBAAgB,wBAAwB,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,YAAY,CAAC;IACpB,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,iFAAiF;IACjF,GAAG,EAAE,OAAO,CAAC;IACb,2EAA2E;IAC3E,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,GAAG,EAAE,IAAI,CAAC;CACX;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,EAAE,CAAA;CAAE,GACzG;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5E;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAqH7E;AAgCD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA6E5D;AA4BD;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAyDD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAepF;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CA4BjF"}
@@ -3,11 +3,13 @@ import { join, dirname } from "node:path";
3
3
  import YAML from "yaml";
4
4
  import { buildManifest, } from "@slowcook-ai/core";
5
5
  import { readIndex, readSpec } from "../refine/spec-yaml.js";
6
+ import { readContextMd } from "../refine/context.js";
6
7
  import { TESTGEN_SYSTEM } from "./prompts.js";
7
8
  export const LABEL_TESTS_READY = "tests-ready";
8
9
  export const LABEL_OVERRIDE_FREEZE = "override-freeze";
9
10
  export const TESTS_INTEGRATION_DIR = "tests/integration";
10
11
  export const MANIFESTS_DIR = ".brewing/manifests";
12
+ export const MOCK_HELPERS_DIR = "tests/helpers/mocks";
11
13
  /**
12
14
  * Main entry: for every spec in scope, if tests don't exist yet, generate them.
13
15
  * If the spec supersedes prior stories, remove the old tests + manifests for
@@ -26,6 +28,22 @@ export async function runTestgen(ctx) {
26
28
  const projectContext = buildProjectContext(ctx.repoRoot);
27
29
  const fileContents = await generateTestFile(spec, ctx, projectContext);
28
30
  const testPath = join(TESTS_INTEGRATION_DIR, `story-${spec.story_id}.test.ts`);
31
+ // Tier-1 conformance gate: if the LLM slipped back to tier-0 habits
32
+ // (inline vi.mock, fetch(), etc.), we refuse to ship the file. Halts
33
+ // loudly here rather than quietly producing HTTP-loopback tests the
34
+ // brewing loop can't ratchet against. The caller can re-run with a
35
+ // different seed or hand-edit and re-run testgen.
36
+ const violations = lintTierOneTest(testPath, fileContents);
37
+ if (violations.length > 0) {
38
+ const details = violations
39
+ .slice(0, 10)
40
+ .map((v) => ` - line ${v.line}: \`${v.pattern}\` — ${v.reason}`)
41
+ .join("\n");
42
+ const more = violations.length > 10 ? `\n - (+${violations.length - 10} more)` : "";
43
+ throw new Error(`testgen output for story-${spec.story_id} violates tier-1 conventions (${violations.length} issue(s)):\n${details}${more}\n\n` +
44
+ `The LLM emitted patterns banned by docs/plans/0.7-testgen-two-tier.md §4.1-§7.3. ` +
45
+ `Re-run testgen with a different model/seed, or hand-edit the generated file to use project mock helpers.`);
46
+ }
29
47
  const manifestIds = extractTestIdsFromFile(testPath, fileContents);
30
48
  const manifest = buildManifest({
31
49
  slowcookVersion: ctx.cliVersion,
@@ -125,15 +143,25 @@ function collectTargetSpecs(ctx) {
125
143
  }
126
144
  return specs;
127
145
  }
128
- function buildProjectContext(repoRoot) {
146
+ export function buildProjectContext(repoRoot) {
129
147
  const bits = [];
148
+ // `.brewing/context.md` is the consumer's hand-authored brewing-context
149
+ // doc — it describes project-specific testing conventions (which mocks
150
+ // to use, tier-1 vs tier-2 layering, etc.) that testgen needs to
151
+ // conform to. Refine already reads this file; testgen reading it too
152
+ // is the 0.6.5 wiring called out in plans/0.7-testgen-two-tier.md §7.
153
+ const contextMd = readContextMd(repoRoot);
154
+ if (contextMd) {
155
+ bits.push("### Project overview (from `.brewing/context.md`)\n");
156
+ bits.push(contextMd.trim());
157
+ }
130
158
  try {
131
159
  const pkg = JSON.parse(readFileSync(join(repoRoot, "package.json"), "utf8"));
132
- bits.push(`package.json name: ${pkg.name}`);
160
+ bits.push(`\n### package.json\n- name: ${pkg.name}`);
133
161
  if (pkg.description)
134
- bits.push(`package.json description: ${pkg.description}`);
162
+ bits.push(`- description: ${pkg.description}`);
135
163
  if (pkg.scripts?.test)
136
- bits.push(`test script: ${pkg.scripts.test}`);
164
+ bits.push(`- test script: ${pkg.scripts.test}`);
137
165
  }
138
166
  catch {
139
167
  /* ignore */
@@ -155,7 +183,38 @@ function buildProjectContext(repoRoot) {
155
183
  }
156
184
  }
157
185
  else {
158
- bits.push("No existing integration tests — this will be the first in the repo.");
186
+ bits.push("\nNo existing integration tests — this will be the first in the repo.");
187
+ }
188
+ // List existing mock helpers so the LLM knows which to import. The
189
+ // helper pattern is load-bearing for the future record-and-replay swap
190
+ // (plans/0.7-testgen-two-tier.md §4.3). Helpers NOT listed here will
191
+ // surface as TODO(helper) comments in the generated test.
192
+ const helpersDir = join(repoRoot, MOCK_HELPERS_DIR);
193
+ if (existsSync(helpersDir)) {
194
+ const helpers = readdirSync(helpersDir)
195
+ .filter((f) => f.endsWith(".ts"))
196
+ .filter((f) => !f.endsWith(".test.ts"));
197
+ if (helpers.length > 0) {
198
+ bits.push(`\n### Available mock helpers at \`${MOCK_HELPERS_DIR}/\`\n\nThe generated test MUST import from these. Do not write inline \`vi.mock\` — use these helpers instead.`);
199
+ for (const f of helpers) {
200
+ const p = join(helpersDir, f);
201
+ try {
202
+ const content = readFileSync(p, "utf8");
203
+ // Trim to first ~50 lines so the prompt stays small
204
+ const excerpt = content.split("\n").slice(0, 50).join("\n");
205
+ bits.push(`\n#### \`${MOCK_HELPERS_DIR}/${f}\`\n\n\`\`\`ts\n${excerpt}\n\`\`\``);
206
+ }
207
+ catch {
208
+ /* ignore */
209
+ }
210
+ }
211
+ }
212
+ else {
213
+ bits.push(`\n### Mock helpers\n\nDirectory \`${MOCK_HELPERS_DIR}/\` exists but is empty. You will likely need to emit \`TODO(helper):\` comments for any service the handler consumes, so an operator can hand-author the helpers before brewing can run.`);
214
+ }
215
+ }
216
+ else {
217
+ bits.push(`\n### Mock helpers\n\nNo \`${MOCK_HELPERS_DIR}/\` directory yet — this project hasn't set up the helper pattern. Emit \`TODO(helper): <service>\` comments for each external dependency the handler calls; an operator will hand-author the helpers before brewing can run (helper auto-generation ships in a later slowcook release).`);
159
218
  }
160
219
  return bits.join("\n");
161
220
  }
@@ -178,6 +237,70 @@ function stripCodeFence(raw) {
178
237
  return fence[1];
179
238
  return t;
180
239
  }
240
+ /**
241
+ * Two scan modes:
242
+ * - \`code\`: run against sanitised source (comments + string-literal
243
+ * contents blanked). Right for call-site patterns like \`vi.mock(\` —
244
+ * we don't want to trip on the literal string "vi.mock" inside a
245
+ * docstring or error message.
246
+ * - \`raw\`: run against the original source. Right for import-specifier
247
+ * patterns like \`from "msw"\`, which live IN string literals by
248
+ * definition. Scanning sanitised source would blank the specifier and
249
+ * produce a false negative.
250
+ */
251
+ const TIER1_FORBIDDEN_PATTERNS = [
252
+ {
253
+ pattern: /\bvi\.mock\s*\(/g,
254
+ label: "vi.mock(",
255
+ reason: "use project mock helpers (`mockSupabase(...)`, etc.) instead of inline vi.mock — needed so record-and-replay can swap helpers without rewriting tests",
256
+ scan: "code",
257
+ },
258
+ {
259
+ pattern: /\bvi\.fn\s*\(/g,
260
+ label: "vi.fn(",
261
+ reason: "helpers encapsulate fakes; tests supply intent, not function bodies",
262
+ scan: "code",
263
+ },
264
+ {
265
+ pattern: /\bjest\.(mock|fn)\s*\(/g,
266
+ label: "jest.mock/fn(",
267
+ reason: "wrong framework (use Vitest), also banned for consistency",
268
+ scan: "code",
269
+ },
270
+ {
271
+ pattern: /\bfetch\s*\(/g,
272
+ label: "fetch(",
273
+ reason: "tier-1 tests run in-process — construct a Request and pass it to the handler, do not hit HTTP",
274
+ scan: "code",
275
+ },
276
+ {
277
+ pattern: /\b(test|it)\.(skip|todo)\s*\(/g,
278
+ label: "test.skip/todo (or it.skip/todo)",
279
+ reason: "skipped tests break the manifest; use TODO(spec) comments or drop the test entirely",
280
+ scan: "code",
281
+ },
282
+ {
283
+ pattern: /^\s*import\b[\s\S]*?from\s+['"](msw|nock|aws-sdk-client-mock|@mswjs\/[^'"]+)['"]/gm,
284
+ label: "HTTP mock library import",
285
+ reason: "tier-1 mocks go through project helpers, not HTTP-level libraries",
286
+ scan: "raw",
287
+ },
288
+ ];
289
+ export function lintTierOneTest(filePath, source) {
290
+ void filePath;
291
+ const sanitised = sanitiseForParsing(source);
292
+ const violations = [];
293
+ for (const { pattern, label, reason, scan } of TIER1_FORBIDDEN_PATTERNS) {
294
+ const target = scan === "raw" ? source : sanitised;
295
+ pattern.lastIndex = 0;
296
+ let m;
297
+ while ((m = pattern.exec(target)) !== null) {
298
+ const line = target.slice(0, m.index).split("\n").length;
299
+ violations.push({ line, pattern: label, reason });
300
+ }
301
+ }
302
+ return violations;
303
+ }
181
304
  /**
182
305
  * Parse the emitted TS file and pull out test IDs in the format
183
306
  * <file> > <describe-chain> > <test-name>
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../src/commands/testgen/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../src/commands/testgen/agent.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,18 @@
1
1
  /**
2
2
  * System prompt for the test-gen agent. Takes a frozen spec as input; emits a
3
- * single Vitest integration test file.
3
+ * single Vitest integration test file in the tier-1 shape defined in
4
+ * docs/plans/0.7-testgen-two-tier.md §4.1.
4
5
  *
5
- * The agent does NOT read the consumer's src/. It tests the spec's contract,
6
- * not the implementation. HTTP-style integration tests (fetch the API, assert
7
- * on the response) are preferred because they don't need the implementation
8
- * to exist at test-collection time they fail at runtime if the endpoint is
9
- * missing, which is exactly the "red test" state brewing wants.
6
+ * Tier-1 tests import the route handler directly and mock external services
7
+ * via per-project helper functions (mockSupabase, mockResend, ...). They run
8
+ * in-process with no HTTP server, no real database, no DOM. Every test
9
+ * finishes in <1 s so the brewing ratchet can iterate cheaply.
10
+ *
11
+ * The consumer project is expected to own the helper functions. This prompt
12
+ * tells the LLM to use them; B1 does NOT generate them. If a helper is
13
+ * missing, the generated test will fail at collection time with a clear
14
+ * import error and the operator must hand-author the helper before brewing.
15
+ * Helper auto-generation ships in B2 (0.7.0).
10
16
  */
11
17
  export declare const TESTGEN_SYSTEM: (projectContext: string) => string;
12
18
  //# sourceMappingURL=prompts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/commands/testgen/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,eAAO,MAAM,cAAc,GAAI,gBAAgB,MAAM,WA0CwK,CAAC"}
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/commands/testgen/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,eAAO,MAAM,cAAc,GAAI,gBAAgB,MAAM,WA2E0J,CAAC"}
@@ -1,43 +1,82 @@
1
1
  /**
2
2
  * System prompt for the test-gen agent. Takes a frozen spec as input; emits a
3
- * single Vitest integration test file.
3
+ * single Vitest integration test file in the tier-1 shape defined in
4
+ * docs/plans/0.7-testgen-two-tier.md §4.1.
4
5
  *
5
- * The agent does NOT read the consumer's src/. It tests the spec's contract,
6
- * not the implementation. HTTP-style integration tests (fetch the API, assert
7
- * on the response) are preferred because they don't need the implementation
8
- * to exist at test-collection time they fail at runtime if the endpoint is
9
- * missing, which is exactly the "red test" state brewing wants.
6
+ * Tier-1 tests import the route handler directly and mock external services
7
+ * via per-project helper functions (mockSupabase, mockResend, ...). They run
8
+ * in-process with no HTTP server, no real database, no DOM. Every test
9
+ * finishes in <1 s so the brewing ratchet can iterate cheaply.
10
+ *
11
+ * The consumer project is expected to own the helper functions. This prompt
12
+ * tells the LLM to use them; B1 does NOT generate them. If a helper is
13
+ * missing, the generated test will fail at collection time with a clear
14
+ * import error and the operator must hand-author the helper before brewing.
15
+ * Helper auto-generation ships in B2 (0.7.0).
10
16
  */
11
17
  export const TESTGEN_SYSTEM = (projectContext) => `You are a rigorous test engineer for the slowcook brewing harness.
12
18
 
13
19
  Your job is to turn a frozen spec YAML into ONE Vitest integration test file that covers every acceptance scenario in the spec, plus invariant checks and key API-contract edge cases.
14
20
 
21
+ The test file you produce is **tier-1 integration**: it runs in-process, imports the route handler directly, and mocks external services via per-project helper functions. It does NOT hit HTTP, does NOT require a running server, and does NOT talk to real databases. It's the layer the brewing loop iterates against — every test must complete in well under a second and be fully deterministic.
22
+
15
23
  ## Input
16
24
 
17
- You will receive:
18
25
  - The full spec YAML (already validated, frozen).
19
- - Project context (stack config, existing test style snippets if present).
26
+ - Project context below: \`.brewing/context.md\` conventions, package.json, existing test style references, existing mock helpers.
20
27
 
21
28
  ## Output format
22
29
 
23
- Emit ONLY the TypeScript test file contents. No prose before or after, no code fences. Start with the first line of the file (imports) and end with the last closing brace. The file must:
30
+ Emit ONLY the TypeScript test file contents. No prose before or after, no code fences. Start with the first line (imports) and end with the last closing brace.
31
+
32
+ ## Required shape
33
+
34
+ 1. **Direct import** of the route handler(s) being tested. Example: \`import { POST } from "@/app/api/rewos/route";\`. If the route doesn't exist yet, the test will fail at collection — that's the intended red state brewing starts from.
35
+
36
+ 2. **Mock helpers** for every external service the handler consumes. Helpers live at \`tests/helpers/mocks/<service>.ts\` and expose intent-level options. Example:
37
+
38
+ \`\`\`ts
39
+ import { mockSupabase, resetMocks } from "@/tests/helpers/mocks";
40
+
41
+ const supabase = mockSupabase({
42
+ auth: { user: { id: "u1", verified: false } },
43
+ insert: { table: "rewos", returning: { id: "rewo1" } },
44
+ });
45
+ \`\`\`
46
+
47
+ If the project context below does NOT list a helper you need, emit the test anyway but leave a \`TODO(helper): describe shape\` comment at the top of the file listing the missing helpers. Do not write the helper body yourself — that's out of scope for this prompt. An operator will hand-author it.
48
+
49
+ 3. **beforeEach(resetMocks)** at the top of every describe block to prevent cross-test leakage.
50
+
51
+ 4. **Request objects built in-process**, not fetched. Example:
52
+
53
+ \`\`\`ts
54
+ const req = new Request("http://test/api/rewos", {
55
+ method: "POST",
56
+ headers: { Authorization: "Bearer token", "Content-Type": "application/json" },
57
+ body: JSON.stringify({ title: "hi" }),
58
+ });
59
+ const res = await POST(req);
60
+ expect(res.status).toBe(201);
61
+ \`\`\`
62
+
63
+ 5. **Coverage.** Include:
64
+ - Every acceptance scenario as an \`it\` block (Given/When/Then phrasing preserved in the name).
65
+ - Every error response listed in \`api_contract\` (401, 403, 404, 409, 429, 422, 500, ...).
66
+ - Invariants that are testable at the handler-call level — anything phrased as "handler calls X with Y" or "handler returns Z on condition W".
67
+
68
+ ## Forbidden patterns (mechanically rejected)
24
69
 
25
- - Be valid TypeScript that Vitest can collect (imports resolve or fail at RUNTIME, not at collection prefer HTTP calls over direct function imports).
26
- - Use \`describe\` / \`it\` from Vitest.
27
- - Use \`beforeEach\` / \`afterEach\` for setup/teardown if needed.
28
- - Include ALL acceptance scenarios as \`it\` blocks, named to match the scenario (Given/When/Then phrasing preserved).
29
- - Include invariant checks as separate \`it\` blocks where they can be asserted via HTTP.
30
- - Include negative tests for every error response listed in \`api_contract\` (403, 429, 404, etc.).
31
- - Include edge cases for each invariant (e.g., "exactly at the boundary").
70
+ The test file must NOT contain any of these. Slowcook lints the output after generation and fails the run if detected.
32
71
 
33
- ## Stylistic conventions
72
+ - \`vi.mock(\` — use project helper functions instead.
73
+ - \`vi.fn(\` — helpers encapsulate the fakes; callers supply intent, not function bodies.
74
+ - \`jest.mock(\` or \`jest.fn(\` — wrong framework, also banned for consistency.
75
+ - \`fetch(\` — tier-1 tests do not hit HTTP. Construct \`Request\` and pass to the handler.
76
+ - Mock-library imports: \`from "msw"\`, \`from "nock"\`, \`from "aws-sdk-client-mock"\`, etc.
77
+ - \`test.skip\` / \`test.todo\` / \`it.skip\` / \`it.todo\` — caught by the static scan, fails the manifest.
34
78
 
35
- - One describe block per API endpoint or per cohesive topic.
36
- - Test names use natural language matching acceptance scenarios, e.g. \`it("rejects a self-report with 409", ...)\`.
37
- - Use \`fetch\` (global) for HTTP calls — avoid importing app code. This keeps tests runnable even before implementation exists.
38
- - Prefer environment variables for the API base URL (fall back to \`http://localhost:3000\`). Expose via a local const.
39
- - If the spec references a DB table, DO NOT import the DB client directly. Tests should assert via HTTP + response shape only; schema-level invariants surface as HTTP contract failures.
40
- - Mark deliberately-incomplete assertions with a \`// TODO(story-N): ...\` comment ONLY when the spec explicitly left a detail as non-goal; otherwise assert concretely.
79
+ If a spec genuinely requires an HTTP call (e.g. an invariant about how a handler calls a third-party), express it as "handler calls outboundHttp helper with X". The helper wraps \`fetch\` and is mocked in tier-1.
41
80
 
42
81
  ## Project context (consumer's conventions)
43
82
 
@@ -45,10 +84,10 @@ ${projectContext}
45
84
 
46
85
  ## Do NOT
47
86
 
48
- - Read or reference files outside the spec. Don't import types from the consumer's source code. The spec is the contract.
87
+ - Read or reference files outside the spec and the project context above. If you need a detail not present, emit a \`TODO(spec): ...\` comment rather than inventing it.
49
88
  - Skip an acceptance scenario. Every scenario in the spec must have at least one corresponding \`it\` block.
50
89
  - Write flaky tests. If timing is involved, fake it deterministically (set test time, mock Date, etc.).
51
- - Use \`test.skip\` / \`test.todo\` — these are caught by slowcook's static scan and will fail the manifest check.
90
+ - Use \`test.skip\` / \`test.todo\`.
52
91
 
53
- Produce a complete, parseable file that, when executed against an unimplemented API, fails with clear messages (status code mismatches, response shape mismatches). That is the desired "red" state brewing will turn green.`;
92
+ Produce a complete, parseable tier-1 integration test file. When executed against an unimplemented route handler, it fails with clear assertion messages that brewing's LLM can interpret and fix iteratively.`;
54
93
  //# sourceMappingURL=prompts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/commands/testgen/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,cAAsB,EAAE,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiCxD,cAAc;;;;;;;;;6NAS6M,CAAC"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/commands/testgen/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,cAAsB,EAAE,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkExD,cAAc;;;;;;;;;+MAS+L,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@slowcook-ai/cli",
3
- "version": "0.6.4",
3
+ "version": "0.6.6",
4
4
  "description": "CLI for the slowcook brewing harness",
5
5
  "license": "MIT",
6
6
  "author": "aminazar",
@@ -37,9 +37,9 @@
37
37
  "@octokit/rest": "^21.0.2",
38
38
  "yaml": "^2.6.0",
39
39
  "zod": "^3.23.8",
40
- "@slowcook-ai/core": "^0.5.0",
41
40
  "@slowcook-ai/stack-ts": "^0.6.2",
42
- "@slowcook-ai/forge-github": "^0.5.0"
41
+ "@slowcook-ai/forge-github": "^0.5.0",
42
+ "@slowcook-ai/core": "^0.5.0"
43
43
  },
44
44
  "publishConfig": {
45
45
  "access": "public"