@slowcook-ai/cli 0.12.9 → 0.12.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/brew/agent.d.ts.map +1 -1
- package/dist/commands/brew/agent.js +12 -0
- package/dist/commands/brew/agent.js.map +1 -1
- package/dist/commands/brew/patterns.d.ts +54 -0
- package/dist/commands/brew/patterns.d.ts.map +1 -0
- package/dist/commands/brew/patterns.js +136 -0
- package/dist/commands/brew/patterns.js.map +1 -0
- package/dist/commands/brew/prompts.d.ts +7 -0
- package/dist/commands/brew/prompts.d.ts.map +1 -1
- package/dist/commands/brew/prompts.js +7 -0
- package/dist/commands/brew/prompts.js.map +1 -1
- package/dist/commands/init/plan.d.ts.map +1 -1
- package/dist/commands/init/plan.js +7 -1
- package/dist/commands/init/plan.js.map +1 -1
- package/dist/commands/init/templates.d.ts +8 -0
- package/dist/commands/init/templates.d.ts.map +1 -1
- package/dist/commands/init/templates.js +62 -0
- package/dist/commands/init/templates.js.map +1 -1
- package/dist/commands/testgen/agent.d.ts +27 -0
- package/dist/commands/testgen/agent.d.ts.map +1 -1
- package/dist/commands/testgen/agent.js +188 -0
- package/dist/commands/testgen/agent.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../src/commands/init/plan.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../src/commands/init/plan.ts"],"names":[],"mappings":"AA8BA,MAAM,WAAW,WAAW;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,YAAY,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,qDAAqD;AACrD,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,wDAAwD;IACxD,GAAG,EAAE,MAAM,CAAC;IACZ,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,KAAK,EAAE,OAAO,CAAC;IACf,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,GAC5E;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,MAAM,WAAW,IAAI;IACnB,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAgBD,wBAAgB,WAAW,CAAC,GAAG,EAAE,WAAW,GAAG,aAAa,CAO3D;AAED,qBAAa,SAAU,SAAQ,KAAK;gBACtB,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CA6HxE"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Pure planning logic for `slowcook init`. Takes a snapshot of the filesystem
|
|
2
2
|
// (via an injected reader), returns the planned actions. No I/O side effects
|
|
3
3
|
// here — all writes happen in the CLI wrapper so this is trivially testable.
|
|
4
|
-
import { frozenPathsJson, brewingReadme, contextMdTemplate, slowcookCliVersionFile, preCommitHook, codeownersFullFile, codeownersSection, gitkeep, gitignoreSection, CLI_VERSION_FOR_TEMPLATES, SLOWCOOK_CLI_VERSION_FILE, SLOWCOOK_CODEOWNERS_MARKER_BEGIN, SLOWCOOK_CODEOWNERS_MARKER_END, SLOWCOOK_GITIGNORE_MARKER_BEGIN, SLOWCOOK_GITIGNORE_MARKER_END, } from "./templates.js";
|
|
4
|
+
import { frozenPathsJson, brewingReadme, contextMdTemplate, patternsReadme, slowcookCliVersionFile, preCommitHook, codeownersFullFile, codeownersSection, gitkeep, gitignoreSection, CLI_VERSION_FOR_TEMPLATES, SLOWCOOK_CLI_VERSION_FILE, SLOWCOOK_CODEOWNERS_MARKER_BEGIN, SLOWCOOK_CODEOWNERS_MARKER_END, SLOWCOOK_GITIGNORE_MARKER_BEGIN, SLOWCOOK_GITIGNORE_MARKER_END, } from "./templates.js";
|
|
5
5
|
import { getGitHubCiArtifacts } from "@slowcook-ai/forge-github";
|
|
6
6
|
import { getTsStackConfig, getTsUiTestingHelpers, } from "@slowcook-ai/stack-ts";
|
|
7
7
|
const TARGETS = {
|
|
@@ -11,6 +11,7 @@ const TARGETS = {
|
|
|
11
11
|
contextMd: ".brewing/context.md",
|
|
12
12
|
cliVersion: SLOWCOOK_CLI_VERSION_FILE,
|
|
13
13
|
manifestsGitkeep: ".brewing/manifests/.gitkeep",
|
|
14
|
+
patternsReadme: ".brewing/patterns/README.md",
|
|
14
15
|
preCommitHook: ".githooks/pre-commit",
|
|
15
16
|
codeowners: "CODEOWNERS",
|
|
16
17
|
gitignore: ".gitignore",
|
|
@@ -74,6 +75,11 @@ export function buildPlan(reader, options) {
|
|
|
74
75
|
if (!reader.exists(".brewing/manifests/")) {
|
|
75
76
|
actions.push({ kind: "create", path: TARGETS.manifestsGitkeep, contents: gitkeep() });
|
|
76
77
|
}
|
|
78
|
+
// 4b. .brewing/patterns/README.md (Phase 2C, 0.12.12+) — onboarding
|
|
79
|
+
// doc for the team-authored patterns directory. brew loads the index
|
|
80
|
+
// (title + summary per pattern) into its cached prefix, agent reads
|
|
81
|
+
// bodies on-demand. Empty directory = empty index = no-op.
|
|
82
|
+
addSimpleFile(actions, reader, options.force, TARGETS.patternsReadme, patternsReadme());
|
|
77
83
|
// 5. CI workflows are provided by the forge adapter. Today only GitHub
|
|
78
84
|
// is wired; future forges (GitLab, Gitea) supply their own via a
|
|
79
85
|
// similar static export. See packages/forge-github/src/templates.ts.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/commands/init/plan.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/commands/init/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -46,5 +46,13 @@ export declare function preCommitHook(): string;
|
|
|
46
46
|
* --force` calls can replace the section without trampling
|
|
47
47
|
* consumer-added patterns elsewhere in the file.
|
|
48
48
|
*/
|
|
49
|
+
/**
|
|
50
|
+
* 0.12.12+ (Phase 2C) — README inside `.brewing/patterns/`. The
|
|
51
|
+
* directory itself is the contract; this README documents how to
|
|
52
|
+
* write a pattern that brew will index. Patterns are *team-authored*
|
|
53
|
+
* (slowcook never auto-emits them); they live in git, are stable
|
|
54
|
+
* across brews, and serve as project-specific recipes.
|
|
55
|
+
*/
|
|
56
|
+
export declare function patternsReadme(): string;
|
|
49
57
|
export declare function gitignoreSection(): string;
|
|
50
58
|
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/commands/init/templates.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,yBAAyB,UAAU,CAAC;AAEjD;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,kCAAkC,CAAC;AAEzE,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEjE;AAaD,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,kFAAkF;IAClF,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,gCAAgC,0CAA0C,CAAC;AACxF,eAAO,MAAM,8BAA8B,wCAAwC,CAAC;AAMpF,eAAO,MAAM,+BAA+B,2CAA2C,CAAC;AACxF,eAAO,MAAM,6BAA6B,yCAAyC,CAAC;AAEpF,wBAAgB,eAAe,IAAI,MAAM,CAoCxC;AAGD,wBAAgB,iBAAiB,IAAI,MAAM,CAmD1C;AAED,wBAAgB,aAAa,IAAI,MAAM,CA0CtC;AAGD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAehE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAQjE;AAED,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,IAAI,MAAM,CA2CtC;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAYzC"}
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/commands/init/templates.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,yBAAyB,UAAU,CAAC;AAEjD;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,kCAAkC,CAAC;AAEzE,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEjE;AAaD,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,kFAAkF;IAClF,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,gCAAgC,0CAA0C,CAAC;AACxF,eAAO,MAAM,8BAA8B,wCAAwC,CAAC;AAMpF,eAAO,MAAM,+BAA+B,2CAA2C,CAAC;AACxF,eAAO,MAAM,6BAA6B,yCAAyC,CAAC;AAEpF,wBAAgB,eAAe,IAAI,MAAM,CAoCxC;AAGD,wBAAgB,iBAAiB,IAAI,MAAM,CAmD1C;AAED,wBAAgB,aAAa,IAAI,MAAM,CA0CtC;AAGD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAehE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAQjE;AAED,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,IAAI,MAAM,CA2CtC;AAED;;;;;;GAMG;AACH;;;;;;GAMG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAsDvC;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAYzC"}
|
|
@@ -248,6 +248,68 @@ exit 0
|
|
|
248
248
|
* --force` calls can replace the section without trampling
|
|
249
249
|
* consumer-added patterns elsewhere in the file.
|
|
250
250
|
*/
|
|
251
|
+
/**
|
|
252
|
+
* 0.12.12+ (Phase 2C) — README inside `.brewing/patterns/`. The
|
|
253
|
+
* directory itself is the contract; this README documents how to
|
|
254
|
+
* write a pattern that brew will index. Patterns are *team-authored*
|
|
255
|
+
* (slowcook never auto-emits them); they live in git, are stable
|
|
256
|
+
* across brews, and serve as project-specific recipes.
|
|
257
|
+
*/
|
|
258
|
+
export function patternsReadme() {
|
|
259
|
+
return `# Patterns directory
|
|
260
|
+
|
|
261
|
+
Hand-written reusable code recipes for this project. The brew agent
|
|
262
|
+
loads the *index* of this directory (title + one-line summary per
|
|
263
|
+
file) into every iteration's cached prefix; the agent reads any
|
|
264
|
+
specific pattern via \`read_file('.brewing/patterns/<name>.md')\` when
|
|
265
|
+
relevant.
|
|
266
|
+
|
|
267
|
+
Patterns are about **how this codebase does X** — stuff that's
|
|
268
|
+
non-obvious from reading any single file but that recurs across the
|
|
269
|
+
project. Examples worth capturing:
|
|
270
|
+
|
|
271
|
+
- "How cursor pagination works in our handlers"
|
|
272
|
+
- "The shape of a tier-1 test against mockSupabase"
|
|
273
|
+
- "How RLS is enforced on writes"
|
|
274
|
+
- "Migration patterns: when to use ALTER TABLE vs DO blocks"
|
|
275
|
+
|
|
276
|
+
Patterns are NOT for:
|
|
277
|
+
|
|
278
|
+
- Per-feature documentation (use spec.yaml).
|
|
279
|
+
- Architectural decisions / ADRs (use docs/).
|
|
280
|
+
- Per-story brew context (use \`.brewing/context.md\`).
|
|
281
|
+
|
|
282
|
+
## File convention
|
|
283
|
+
|
|
284
|
+
Each pattern is a Markdown file named \`<slug>.md\`. Required structure:
|
|
285
|
+
|
|
286
|
+
\`\`\`markdown
|
|
287
|
+
# <Title>
|
|
288
|
+
|
|
289
|
+
> <One-line summary, used as the index entry.>
|
|
290
|
+
|
|
291
|
+
## When to use
|
|
292
|
+
...
|
|
293
|
+
|
|
294
|
+
## Example
|
|
295
|
+
\`\`\`ts
|
|
296
|
+
// concrete code
|
|
297
|
+
\`\`\`
|
|
298
|
+
\`\`\`
|
|
299
|
+
|
|
300
|
+
The first \`# Title\` line and the first \`> Summary\` line are what
|
|
301
|
+
brew indexes. Anything else is for the agent's eyes when it loads the
|
|
302
|
+
full pattern.
|
|
303
|
+
|
|
304
|
+
## Adding a pattern
|
|
305
|
+
|
|
306
|
+
1. Write the markdown file in this directory.
|
|
307
|
+
2. Commit it. The next brew iteration sees the new pattern in its
|
|
308
|
+
index and can read it on-demand.
|
|
309
|
+
|
|
310
|
+
No registry, no metadata, no slowcook-side change required.
|
|
311
|
+
`;
|
|
312
|
+
}
|
|
251
313
|
export function gitignoreSection() {
|
|
252
314
|
return `${SLOWCOOK_GITIGNORE_MARKER_BEGIN}
|
|
253
315
|
# Slowcook-derived data — regenerated from src/ on every brew iter
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/commands/init/templates.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sDAAsD;AAEtD,MAAM,CAAC,MAAM,yBAAyB,GAAG,OAAO,CAAC;AAEjD;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,+BAA+B,CAAC;AAEzE,MAAM,UAAU,sBAAsB,CAAC,UAAkB;IACvD,OAAO,UAAU,GAAG,IAAI,CAAC;AAC3B,CAAC;AAED;;;;;GAKG;AACH,MAAM,gBAAgB,GAAG;;;0HAGiG,CAAC;AAS3H,MAAM,CAAC,MAAM,gCAAgC,GAAG,uCAAuC,CAAC;AACxF,MAAM,CAAC,MAAM,8BAA8B,GAAG,qCAAqC,CAAC;AAEpF,sEAAsE;AACtE,oEAAoE;AACpE,mEAAmE;AACnE,0CAA0C;AAC1C,MAAM,CAAC,MAAM,+BAA+B,GAAG,wCAAwC,CAAC;AACxF,MAAM,CAAC,MAAM,6BAA6B,GAAG,sCAAsC,CAAC;AAEpF,MAAM,UAAU,eAAe;IAC7B,OAAO,CACL,IAAI,CAAC,SAAS,CACZ;QACE,OAAO,EAAE,4BAA4B;QACrC,IAAI,EACF,qFAAqF;YACrF,6FAA6F;YAC7F,iEAAiE;QACnE,WAAW,EAAE;YACX,QAAQ;YACR,iBAAiB;YACjB,gBAAgB;YAChB,qBAAqB;SACtB;QACD,KAAK,EAAE;YACL,kBAAkB;YAClB,mBAAmB;YACnB,kBAAkB;YAClB,4BAA4B;YAC5B,qBAAqB;YACrB,qBAAqB;YACrB,gCAAgC;YAChC,4CAA4C;YAC5C,wCAAwC;SACzC;QACD,OAAO,EAAE;YACP,cAAc,EAAE;gBACd,gBAAgB,EAAE,CAAC,cAAc,EAAE,oBAAoB,CAAC;aACzD;SACF;KACF,EACD,IAAI,EACJ,CAAC,CACF,GAAG,IAAI,CACT,CAAC;AACJ,CAAC;AAGD,MAAM,UAAU,iBAAiB;IAC/B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDR,CAAC;AACF,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCR,CAAC;AACF,CAAC;AAGD,MAAM,UAAU,iBAAiB,CAAC,MAAsB;IACtD,OAAO,GAAG,gCAAgC;;;;kCAIV,MAAM,CAAC,KAAK;kCACZ,MAAM,CAAC,KAAK;kCACZ,MAAM,CAAC,KAAK;kCACZ,MAAM,CAAC,KAAK;8CACA,MAAM,CAAC,KAAK;8CACZ,MAAM,CAAC,KAAK;8CACZ,MAAM,CAAC,KAAK;8CACZ,MAAM,CAAC,KAAK;EACxD,8BAA8B;CAC/B,CAAC;AACF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAsB;IACvD,qEAAqE;IACrE,OAAO;;;;;EAKP,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCR,CAAC;AACF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,GAAG,+BAA+B;;;;;;;;;EASzC,6BAA6B;CAC9B,CAAC;AACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/commands/init/templates.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sDAAsD;AAEtD,MAAM,CAAC,MAAM,yBAAyB,GAAG,OAAO,CAAC;AAEjD;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,+BAA+B,CAAC;AAEzE,MAAM,UAAU,sBAAsB,CAAC,UAAkB;IACvD,OAAO,UAAU,GAAG,IAAI,CAAC;AAC3B,CAAC;AAED;;;;;GAKG;AACH,MAAM,gBAAgB,GAAG;;;0HAGiG,CAAC;AAS3H,MAAM,CAAC,MAAM,gCAAgC,GAAG,uCAAuC,CAAC;AACxF,MAAM,CAAC,MAAM,8BAA8B,GAAG,qCAAqC,CAAC;AAEpF,sEAAsE;AACtE,oEAAoE;AACpE,mEAAmE;AACnE,0CAA0C;AAC1C,MAAM,CAAC,MAAM,+BAA+B,GAAG,wCAAwC,CAAC;AACxF,MAAM,CAAC,MAAM,6BAA6B,GAAG,sCAAsC,CAAC;AAEpF,MAAM,UAAU,eAAe;IAC7B,OAAO,CACL,IAAI,CAAC,SAAS,CACZ;QACE,OAAO,EAAE,4BAA4B;QACrC,IAAI,EACF,qFAAqF;YACrF,6FAA6F;YAC7F,iEAAiE;QACnE,WAAW,EAAE;YACX,QAAQ;YACR,iBAAiB;YACjB,gBAAgB;YAChB,qBAAqB;SACtB;QACD,KAAK,EAAE;YACL,kBAAkB;YAClB,mBAAmB;YACnB,kBAAkB;YAClB,4BAA4B;YAC5B,qBAAqB;YACrB,qBAAqB;YACrB,gCAAgC;YAChC,4CAA4C;YAC5C,wCAAwC;SACzC;QACD,OAAO,EAAE;YACP,cAAc,EAAE;gBACd,gBAAgB,EAAE,CAAC,cAAc,EAAE,oBAAoB,CAAC;aACzD;SACF;KACF,EACD,IAAI,EACJ,CAAC,CACF,GAAG,IAAI,CACT,CAAC;AACJ,CAAC;AAGD,MAAM,UAAU,iBAAiB;IAC/B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDR,CAAC;AACF,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCR,CAAC;AACF,CAAC;AAGD,MAAM,UAAU,iBAAiB,CAAC,MAAsB;IACtD,OAAO,GAAG,gCAAgC;;;;kCAIV,MAAM,CAAC,KAAK;kCACZ,MAAM,CAAC,KAAK;kCACZ,MAAM,CAAC,KAAK;kCACZ,MAAM,CAAC,KAAK;8CACA,MAAM,CAAC,KAAK;8CACZ,MAAM,CAAC,KAAK;8CACZ,MAAM,CAAC,KAAK;8CACZ,MAAM,CAAC,KAAK;EACxD,8BAA8B;CAC/B,CAAC;AACF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAsB;IACvD,qEAAqE;IACrE,OAAO;;;;;EAKP,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCR,CAAC;AACF,CAAC;AAED;;;;;;GAMG;AACH;;;;;;GAMG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoDR,CAAC;AACF,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,GAAG,+BAA+B;;;;;;;;;EASzC,6BAA6B;CAC9B,CAAC;AACF,CAAC"}
|
|
@@ -177,6 +177,33 @@ export declare function buildSchemaAssertionTestContent(spec: Spec): {
|
|
|
177
177
|
path: string;
|
|
178
178
|
contents: string;
|
|
179
179
|
} | null;
|
|
180
|
+
/**
|
|
181
|
+
* 0.12.10 (slowcook#7) — code→schema presence check. Walks src/ for
|
|
182
|
+
* literal `.from('<table>').select('<columns>')` calls and asserts every
|
|
183
|
+
* referenced column appears in some `CREATE TABLE` body or
|
|
184
|
+
* `ALTER TABLE … ADD COLUMN` clause under `supabase/migrations/`.
|
|
185
|
+
* Catches the gap class where brew tier-1 mocks the database away, so a
|
|
186
|
+
* SELECT against a column with no migration ships green.
|
|
187
|
+
*
|
|
188
|
+
* Per-story emission (file name carries `story-N`) but the test logic
|
|
189
|
+
* scans the WHOLE repo — the assertion is project-wide. Multiple stories
|
|
190
|
+
* emit identical-content files; redundant but fits slowcook's tier-1
|
|
191
|
+
* frame.
|
|
192
|
+
*
|
|
193
|
+
* v1 limitations:
|
|
194
|
+
* - Only literal table/column strings. Computed table names
|
|
195
|
+
* (`from(tableName)` where tableName is a variable) are skipped.
|
|
196
|
+
* - `select('*')` skipped — by definition matches everything.
|
|
197
|
+
* - Relation sub-selects like `member:profiles!member_id(id, name)`:
|
|
198
|
+
* the alias `member` is treated as a relation pointer and skipped
|
|
199
|
+
* (we don't try to recursively validate the joined table here).
|
|
200
|
+
* - Views and computed columns aren't tracked — unknown tables are
|
|
201
|
+
* skipped (no false positive when a CTE / view is referenced).
|
|
202
|
+
*/
|
|
203
|
+
export declare function buildSchemaPresenceTestContent(spec: Spec): {
|
|
204
|
+
path: string;
|
|
205
|
+
contents: string;
|
|
206
|
+
};
|
|
180
207
|
/**
|
|
181
208
|
* Resolve an `@/…` import specifier back to a repo-relative source file.
|
|
182
209
|
* Mirrors Next.js / tsconfig's default alias (`@/*` → `src/*`). Falls
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/commands/testgen/agent.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAUlD,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAC/C,eAAO,MAAM,qBAAqB,oBAAoB,CAAC;AAEvD,eAAO,MAAM,qBAAqB,sBAAsB,CAAC;AACzD,eAAO,MAAM,gBAAgB,iBAAiB,CAAC;AAC/C,eAAO,MAAM,aAAa,uBAAuB,CAAC;AAClD,eAAO,MAAM,gBAAgB,wBAAwB,CAAC;AAEtD;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,cAAc,GAAG,SAAS,CAAC;AAE9D,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,
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/commands/testgen/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -92,6 +92,12 @@ export async function runTestgen(ctx) {
|
|
|
92
92
|
if (schemaArtifact) {
|
|
93
93
|
extraTestFiles.push(schemaArtifact);
|
|
94
94
|
}
|
|
95
|
+
// 0.12.10 (slowcook#7) — code→schema presence check. Always emit
|
|
96
|
+
// (cheap repo-wide scan; no per-spec input). Catches "code references
|
|
97
|
+
// a column with no migration" regressions like rewo PR #74's
|
|
98
|
+
// `author_id` and the lingering story-001 `hidden`/`banned_at`/
|
|
99
|
+
// `is_admin` references.
|
|
100
|
+
extraTestFiles.push(buildSchemaPresenceTestContent(spec));
|
|
95
101
|
const extraIds = extraTestFiles.flatMap((f) => extractTestIdsFromFile(f.path, f.contents).map((id) => ({ id, file: f.path })));
|
|
96
102
|
const manifestTests = [
|
|
97
103
|
...handlerIds.map((id) => ({ id, file: testPath })),
|
|
@@ -787,6 +793,188 @@ export function buildSchemaAssertionTestContent(spec) {
|
|
|
787
793
|
`});\n`;
|
|
788
794
|
return { path, contents };
|
|
789
795
|
}
|
|
796
|
+
/**
|
|
797
|
+
* 0.12.10 (slowcook#7) — code→schema presence check. Walks src/ for
|
|
798
|
+
* literal `.from('<table>').select('<columns>')` calls and asserts every
|
|
799
|
+
* referenced column appears in some `CREATE TABLE` body or
|
|
800
|
+
* `ALTER TABLE … ADD COLUMN` clause under `supabase/migrations/`.
|
|
801
|
+
* Catches the gap class where brew tier-1 mocks the database away, so a
|
|
802
|
+
* SELECT against a column with no migration ships green.
|
|
803
|
+
*
|
|
804
|
+
* Per-story emission (file name carries `story-N`) but the test logic
|
|
805
|
+
* scans the WHOLE repo — the assertion is project-wide. Multiple stories
|
|
806
|
+
* emit identical-content files; redundant but fits slowcook's tier-1
|
|
807
|
+
* frame.
|
|
808
|
+
*
|
|
809
|
+
* v1 limitations:
|
|
810
|
+
* - Only literal table/column strings. Computed table names
|
|
811
|
+
* (`from(tableName)` where tableName is a variable) are skipped.
|
|
812
|
+
* - `select('*')` skipped — by definition matches everything.
|
|
813
|
+
* - Relation sub-selects like `member:profiles!member_id(id, name)`:
|
|
814
|
+
* the alias `member` is treated as a relation pointer and skipped
|
|
815
|
+
* (we don't try to recursively validate the joined table here).
|
|
816
|
+
* - Views and computed columns aren't tracked — unknown tables are
|
|
817
|
+
* skipped (no false positive when a CTE / view is referenced).
|
|
818
|
+
*/
|
|
819
|
+
export function buildSchemaPresenceTestContent(spec) {
|
|
820
|
+
const path = join(TESTS_SCHEMA_DIR, `story-${spec.story_id}-column-presence.test.ts`);
|
|
821
|
+
const contents = `// slowcook 0.12.10 column-presence assertion — story-${spec.story_id}\n` +
|
|
822
|
+
`//\n` +
|
|
823
|
+
`// Auto-emitted by testgen on every spec — scans the whole repo for\n` +
|
|
824
|
+
`// .from('t').select('c1, c2, ...') calls and asserts every column\n` +
|
|
825
|
+
`// referenced exists in supabase/migrations/ (CREATE TABLE body or\n` +
|
|
826
|
+
`// ALTER TABLE ADD COLUMN). Closes slowcook#7 — catches code-ahead-\n` +
|
|
827
|
+
`// of-schema bugs like rewo PR #74's author_id reference (no migration).\n` +
|
|
828
|
+
`\n` +
|
|
829
|
+
`import { describe, it, expect } from "vitest";\n` +
|
|
830
|
+
`import { readdirSync, readFileSync, existsSync, statSync } from "node:fs";\n` +
|
|
831
|
+
`import { join } from "node:path";\n` +
|
|
832
|
+
`\n` +
|
|
833
|
+
`describe("story-${spec.story_id} column presence (code → schema)", () => {\n` +
|
|
834
|
+
` it("every literal .from(t).select(...) column reference exists in supabase/migrations/", () => {\n` +
|
|
835
|
+
` const migrationsDir = "supabase/migrations";\n` +
|
|
836
|
+
` const sql = existsSync(migrationsDir)\n` +
|
|
837
|
+
` ? readdirSync(migrationsDir)\n` +
|
|
838
|
+
` .filter((f) => f.endsWith(".sql"))\n` +
|
|
839
|
+
` .sort()\n` +
|
|
840
|
+
` .map((f) => readFileSync(join(migrationsDir, f), "utf8"))\n` +
|
|
841
|
+
` .join("\\n")\n` +
|
|
842
|
+
` : "";\n` +
|
|
843
|
+
`\n` +
|
|
844
|
+
` function escapeRe(s: string): string {\n` +
|
|
845
|
+
` return s.replace(/[.*+?^\${}()|[\\]\\\\]/g, "\\\\$&");\n` +
|
|
846
|
+
` }\n` +
|
|
847
|
+
`\n` +
|
|
848
|
+
` function isColumnInSchema(table: string, column: string): boolean {\n` +
|
|
849
|
+
` const t = escapeRe(table);\n` +
|
|
850
|
+
` const c = escapeRe(column);\n` +
|
|
851
|
+
` // 1. CREATE TABLE table ( ... column ... )\n` +
|
|
852
|
+
` const createRe = new RegExp(\n` +
|
|
853
|
+
` \`create\\\\s+table\\\\s+(?:if\\\\s+not\\\\s+exists\\\\s+)?[\\"\\\`]?(?:public\\\\.)?\${t}[\\"\\\`]?\\\\s*\\\\(([\\\\s\\\\S]*?)\\\\)\\\\s*;\`,\n` +
|
|
854
|
+
` "i"\n` +
|
|
855
|
+
` );\n` +
|
|
856
|
+
` const m = sql.match(createRe);\n` +
|
|
857
|
+
` if (m) {\n` +
|
|
858
|
+
` // Look for column at the start of a line/segment within the body.\n` +
|
|
859
|
+
` const colRe = new RegExp(\n` +
|
|
860
|
+
` \`(?:^|,|\\\\n)\\\\s*[\\"\\\`]?\${c}[\\"\\\`]?\\\\s+\`,\n` +
|
|
861
|
+
` "i"\n` +
|
|
862
|
+
` );\n` +
|
|
863
|
+
` if (colRe.test(m[1])) return true;\n` +
|
|
864
|
+
` }\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` +
|
|
876
|
+
` "i"\n` +
|
|
877
|
+
` );\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` +
|
|
883
|
+
` }\n` +
|
|
884
|
+
`\n` +
|
|
885
|
+
` function parseSelectColumns(colsStr: string): string[] {\n` +
|
|
886
|
+
` // Split on top-level commas (paren-aware so relation subselects\n` +
|
|
887
|
+
` // like \`member:profiles!member_id(id, name)\` aren't shredded).\n` +
|
|
888
|
+
` const cols: string[] = [];\n` +
|
|
889
|
+
` let depth = 0;\n` +
|
|
890
|
+
` let buf = "";\n` +
|
|
891
|
+
` for (const ch of colsStr) {\n` +
|
|
892
|
+
` if (ch === "(") depth++;\n` +
|
|
893
|
+
` else if (ch === ")") depth--;\n` +
|
|
894
|
+
` if (ch === "," && depth === 0) {\n` +
|
|
895
|
+
` if (buf.trim()) cols.push(buf.trim());\n` +
|
|
896
|
+
` buf = "";\n` +
|
|
897
|
+
` } else {\n` +
|
|
898
|
+
` buf += ch;\n` +
|
|
899
|
+
` }\n` +
|
|
900
|
+
` }\n` +
|
|
901
|
+
` if (buf.trim()) cols.push(buf.trim());\n` +
|
|
902
|
+
` return cols;\n` +
|
|
903
|
+
` }\n` +
|
|
904
|
+
`\n` +
|
|
905
|
+
` function isPlainColumn(col: string): boolean {\n` +
|
|
906
|
+
` // Skip relation sub-selects (contain ':') and aggregates (contain '(').\n` +
|
|
907
|
+
` return !col.includes(":") && !col.includes("(");\n` +
|
|
908
|
+
` }\n` +
|
|
909
|
+
`\n` +
|
|
910
|
+
` function bareColumnName(col: string): string {\n` +
|
|
911
|
+
` // Strip aliases like "old_name as new_name" (Supabase rare) and\n` +
|
|
912
|
+
` // any trailing modifiers. Take the first identifier.\n` +
|
|
913
|
+
` const match = col.trim().match(/^[\\"\\\`]?([A-Za-z_][A-Za-z0-9_]*)[\\"\\\`]?/);\n` +
|
|
914
|
+
` return match ? match[1] : col.trim();\n` +
|
|
915
|
+
` }\n` +
|
|
916
|
+
`\n` +
|
|
917
|
+
` function walkSrc(dir: string, out: string[]): void {\n` +
|
|
918
|
+
` if (!existsSync(dir)) return;\n` +
|
|
919
|
+
` for (const entry of readdirSync(dir)) {\n` +
|
|
920
|
+
` const full = join(dir, entry);\n` +
|
|
921
|
+
` const stat = statSync(full);\n` +
|
|
922
|
+
` if (stat.isDirectory()) {\n` +
|
|
923
|
+
` walkSrc(full, out);\n` +
|
|
924
|
+
` } else if (/\\.(tsx?|jsx?)$/.test(full)) {\n` +
|
|
925
|
+
` out.push(full);\n` +
|
|
926
|
+
` }\n` +
|
|
927
|
+
` }\n` +
|
|
928
|
+
` }\n` +
|
|
929
|
+
`\n` +
|
|
930
|
+
` const srcFiles: string[] = [];\n` +
|
|
931
|
+
` walkSrc("src", srcFiles);\n` +
|
|
932
|
+
`\n` +
|
|
933
|
+
` // Match .from("table").select("cols") — both quoted forms.\n` +
|
|
934
|
+
` // Backticks accepted; if the inner text contains \${} we skip\n` +
|
|
935
|
+
` // (computed). Whitespace-flexible.\n` +
|
|
936
|
+
` const callRe = /\\.from\\(\\s*["'\`]([A-Za-z_][A-Za-z0-9_]*)["'\`]\\s*\\)\\s*\\.select\\(\\s*[\`"']([^\`"']+)["'\`]/g;\n` +
|
|
937
|
+
`\n` +
|
|
938
|
+
` const missing: string[] = [];\n` +
|
|
939
|
+
` const knownTables = new Set<string>();\n` +
|
|
940
|
+
` // Pre-pass: any table with a CREATE TABLE in migrations is "known."\n` +
|
|
941
|
+
` // Tables we don't recognize (views, RPC results) are skipped to\n` +
|
|
942
|
+
` // avoid false positives.\n` +
|
|
943
|
+
` const tableDeclRe = /create\\s+table\\s+(?:if\\s+not\\s+exists\\s+)?["\`]?(?:public\\.)?([A-Za-z_][A-Za-z0-9_]*)["\`]?/gi;\n` +
|
|
944
|
+
` let tm: RegExpExecArray | null;\n` +
|
|
945
|
+
` while ((tm = tableDeclRe.exec(sql)) !== null) {\n` +
|
|
946
|
+
` knownTables.add(tm[1].toLowerCase());\n` +
|
|
947
|
+
` }\n` +
|
|
948
|
+
`\n` +
|
|
949
|
+
` for (const file of srcFiles) {\n` +
|
|
950
|
+
` const src = readFileSync(file, "utf8");\n` +
|
|
951
|
+
` let m: RegExpExecArray | null;\n` +
|
|
952
|
+
` callRe.lastIndex = 0;\n` +
|
|
953
|
+
` while ((m = callRe.exec(src)) !== null) {\n` +
|
|
954
|
+
` const table = m[1];\n` +
|
|
955
|
+
` if (!knownTables.has(table.toLowerCase())) continue;\n` +
|
|
956
|
+
` const colsStr = m[2];\n` +
|
|
957
|
+
` if (colsStr.trim() === "*") continue;\n` +
|
|
958
|
+
` if (colsStr.includes("\${")) continue; // computed — skip\n` +
|
|
959
|
+
` const cols = parseSelectColumns(colsStr).filter(isPlainColumn).map(bareColumnName);\n` +
|
|
960
|
+
` for (const col of cols) {\n` +
|
|
961
|
+
` if (!col) continue;\n` +
|
|
962
|
+
` if (!isColumnInSchema(table, col)) {\n` +
|
|
963
|
+
` missing.push(\`\${file}: \${table}.\${col}\`);\n` +
|
|
964
|
+
` }\n` +
|
|
965
|
+
` }\n` +
|
|
966
|
+
` }\n` +
|
|
967
|
+
` }\n` +
|
|
968
|
+
`\n` +
|
|
969
|
+
` expect(\n` +
|
|
970
|
+
` missing,\n` +
|
|
971
|
+
` \`Selected columns with no matching CREATE/ALTER TABLE in supabase/migrations/:\\n \` +\n` +
|
|
972
|
+
` missing.join("\\n ")\n` +
|
|
973
|
+
` ).toEqual([]);\n` +
|
|
974
|
+
` });\n` +
|
|
975
|
+
`});\n`;
|
|
976
|
+
return { path, contents };
|
|
977
|
+
}
|
|
790
978
|
/**
|
|
791
979
|
* Resolve an `@/…` import specifier back to a repo-relative source file.
|
|
792
980
|
* Mirrors Next.js / tsconfig's default alias (`@/*` → `src/*`). Falls
|