@slowcook-ai/cli 0.6.6 → 0.6.9
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/cli.js +6 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/brew/agent.d.ts +34 -0
- package/dist/commands/brew/agent.d.ts.map +1 -1
- package/dist/commands/brew/agent.js +146 -0
- package/dist/commands/brew/agent.js.map +1 -1
- package/dist/commands/brew/index.js +3 -3
- package/dist/commands/brew/index.js.map +1 -1
- package/dist/commands/brew/prompts.d.ts +26 -1
- package/dist/commands/brew/prompts.d.ts.map +1 -1
- package/dist/commands/brew/prompts.js +63 -4
- 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 +6 -1
- package/dist/commands/init/plan.js.map +1 -1
- package/dist/commands/init/templates.d.ts +8 -1
- package/dist/commands/init/templates.d.ts.map +1 -1
- package/dist/commands/init/templates.js +35 -11
- package/dist/commands/init/templates.js.map +1 -1
- package/dist/commands/map/index.d.ts +4 -0
- package/dist/commands/map/index.d.ts.map +1 -0
- package/dist/commands/map/index.js +120 -0
- package/dist/commands/map/index.js.map +1 -0
- package/dist/commands/map/render.d.ts +18 -0
- package/dist/commands/map/render.d.ts.map +1 -0
- package/dist/commands/map/render.js +97 -0
- package/dist/commands/map/render.js.map +1 -0
- package/dist/commands/map/scan.d.ts +71 -0
- package/dist/commands/map/scan.d.ts.map +1 -0
- package/dist/commands/map/scan.js +368 -0
- package/dist/commands/map/scan.js.map +1 -0
- package/package.json +4 -3
|
@@ -23,13 +23,40 @@ This means: **you only keep changes that advance the green set.** Make real prog
|
|
|
23
23
|
|
|
24
24
|
## Tools
|
|
25
25
|
|
|
26
|
-
- **
|
|
27
|
-
- **
|
|
28
|
-
- **
|
|
26
|
+
- **find_handler({ method, path })** — **call this FIRST for every \`api_contract\` entry in the spec.** Returns the exact handler file + function the brewing agent should edit (e.g. \`POST /api/rewos\` → \`src/app/api/rewos/route.ts\` :: \`POST\`). Saves the exploratory iteration where you'd otherwise grep for the route.
|
|
27
|
+
- **outline_file(path)** — **prefer this over read_file for initial exploration.** Returns a compact outline (imports, top-level exports, signatures with line numbers) — ~200 tokens. Use this to decide whether a file is relevant before you read it fully.
|
|
28
|
+
- **read_file(path)** — read a file's full contents. Only call this when you need to see inside a specific function body that outline_file flagged. Reading a file you don't need is the single biggest driver of wasted budget.
|
|
29
|
+
- **list_directory(path)** — see what's in a directory. Useful when outline_file + find_handler don't give enough.
|
|
30
|
+
- **write_file(path, contents)** — create or fully replace a file. Always read or outline first, then write the complete updated contents.
|
|
29
31
|
- **justify_diff_overflow({ reason_category, affected_scope, narrative, proposed_substories_if_split? })** — call ONLY if your intended change must exceed the graduality soft-cap (200 lines across ≤5 files). Explain why.
|
|
30
32
|
|
|
31
33
|
You do NOT run tests. Slowcook runs them after your turn and tells you the result in the next turn's prompt.
|
|
32
34
|
|
|
35
|
+
## Exploration strategy (cheap first, expensive last)
|
|
36
|
+
|
|
37
|
+
**Start every turn by reading \`.brewing/code-map.json\`** (or its rendered
|
|
38
|
+
sibling \`.brewing/code-map.md\`). Slowcook regenerates that file before
|
|
39
|
+
each iteration — it's the up-to-date list of every API route, page,
|
|
40
|
+
component, helper, and domain type in the project, with JSDoc summaries,
|
|
41
|
+
file paths, and signatures. Think of it as the project's self-updating
|
|
42
|
+
Swagger-for-everything. One \`read_file\` on it replaces a dozen exploratory
|
|
43
|
+
reads.
|
|
44
|
+
|
|
45
|
+
Then, in order:
|
|
46
|
+
|
|
47
|
+
1. **Code map first** — \`read_file('.brewing/code-map.json')\`. Skim to
|
|
48
|
+
see what already exists.
|
|
49
|
+
2. For each api_contract entry relevant to the target test, **find_handler**
|
|
50
|
+
to confirm the exact file + function (the code map also has this, but
|
|
51
|
+
find_handler is a one-call shortcut).
|
|
52
|
+
3. **outline_file** on each file the code map / find_handler points to,
|
|
53
|
+
plus obvious neighbours (utils, types, helpers the spec references).
|
|
54
|
+
4. **read_file** only the specific files + functions the outline flagged
|
|
55
|
+
as needing changes.
|
|
56
|
+
5. **write_file** the minimum change.
|
|
57
|
+
|
|
58
|
+
A human doesn't read every file in a package to fix one test; neither should you.
|
|
59
|
+
|
|
33
60
|
## Constraints
|
|
34
61
|
|
|
35
62
|
- **One target per turn.** The prompt names ONE failing test. Work on that one. Incidental green flips on other tests are fine but not the goal.
|
|
@@ -53,9 +80,41 @@ You do NOT run tests. Slowcook runs them after your turn and tells you the resul
|
|
|
53
80
|
- On no-progress reverts, consider whether the target test is reachable from the code path you're editing, or whether it's testing a layer your code doesn't touch (e.g., the test calls \`fetch('http://localhost:3000')\` but no server is running).
|
|
54
81
|
`;
|
|
55
82
|
export const BREW_TOOLS = [
|
|
83
|
+
{
|
|
84
|
+
name: "find_handler",
|
|
85
|
+
description: "Resolve an API spec entry (method + path) to its concrete handler file + function. Use this FIRST for every api_contract entry in the spec — it replaces an exploratory read/list cycle. Today supports Next.js App Router (detected by `src/app/`); other frameworks return `framework: 'unknown'`. Returns JSON with { framework, file, function, exists, note? }.",
|
|
86
|
+
input_schema: {
|
|
87
|
+
type: "object",
|
|
88
|
+
properties: {
|
|
89
|
+
method: {
|
|
90
|
+
type: "string",
|
|
91
|
+
description: "HTTP method, e.g. 'POST', 'GET', 'DELETE'.",
|
|
92
|
+
},
|
|
93
|
+
path: {
|
|
94
|
+
type: "string",
|
|
95
|
+
description: "URL path, with params as `:id` or `{id}` — both are normalised (e.g. '/api/rewos/:rewo_id/reports' → 'src/app/api/rewos/[rewo_id]/reports/route.ts').",
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
required: ["method", "path"],
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
name: "outline_file",
|
|
103
|
+
description: "Return a compact outline of a TypeScript/JavaScript file: imports, top-level exports, signatures with line numbers. ~200 tokens. PREFER this over read_file for initial exploration — only call read_file when the outline tells you a specific function body needs to be inspected.",
|
|
104
|
+
input_schema: {
|
|
105
|
+
type: "object",
|
|
106
|
+
properties: {
|
|
107
|
+
path: {
|
|
108
|
+
type: "string",
|
|
109
|
+
description: "Repo-relative path (e.g., 'src/app/api/reactions/route.ts').",
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
required: ["path"],
|
|
113
|
+
},
|
|
114
|
+
},
|
|
56
115
|
{
|
|
57
116
|
name: "read_file",
|
|
58
|
-
description: "Read a file
|
|
117
|
+
description: "Read a file's full contents. Call this AFTER outline_file tells you a specific file / function body needs to be inspected — reading files you don't need is the single biggest driver of wasted budget. Returns the full file (up to 20k chars).",
|
|
59
118
|
input_schema: {
|
|
60
119
|
type: "object",
|
|
61
120
|
properties: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/commands/brew/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/commands/brew/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"AAuBA,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,CAiGxE"}
|
|
@@ -1,12 +1,13 @@
|
|
|
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, stackJson, brewingReadme, contextMdTemplate, slowcookWorkflow, slowcookSpecMergedWorkflow, slowcookTestgenWorkflow, codeownersFullFile, codeownersSection, gitkeep, CLI_VERSION_FOR_TEMPLATES, SLOWCOOK_CODEOWNERS_MARKER_BEGIN, SLOWCOOK_CODEOWNERS_MARKER_END, } from "./templates.js";
|
|
4
|
+
import { frozenPathsJson, stackJson, brewingReadme, contextMdTemplate, slowcookCliVersionFile, slowcookWorkflow, slowcookSpecMergedWorkflow, slowcookTestgenWorkflow, codeownersFullFile, codeownersSection, gitkeep, CLI_VERSION_FOR_TEMPLATES, SLOWCOOK_CLI_VERSION_FILE, SLOWCOOK_CODEOWNERS_MARKER_BEGIN, SLOWCOOK_CODEOWNERS_MARKER_END, } from "./templates.js";
|
|
5
5
|
const TARGETS = {
|
|
6
6
|
frozenPaths: ".brewing/frozen-paths.json",
|
|
7
7
|
stack: ".brewing/stack.json",
|
|
8
8
|
brewingReadme: ".brewing/README.md",
|
|
9
9
|
contextMd: ".brewing/context.md",
|
|
10
|
+
cliVersion: SLOWCOOK_CLI_VERSION_FILE,
|
|
10
11
|
manifestsGitkeep: ".brewing/manifests/.gitkeep",
|
|
11
12
|
workflow: ".github/workflows/slowcook.yml",
|
|
12
13
|
specMergedWorkflow: ".github/workflows/slowcook-spec-merged.yml",
|
|
@@ -64,6 +65,10 @@ export function buildPlan(reader, options) {
|
|
|
64
65
|
addSimpleFile(actions, reader, options.force, TARGETS.brewingReadme, brewingReadme());
|
|
65
66
|
// 3b. .brewing/context.md (project context for agents)
|
|
66
67
|
addSimpleFile(actions, reader, options.force, TARGETS.contextMd, contextMdTemplate());
|
|
68
|
+
// 3c. .brewing/slowcook-cli-version — single-source-of-truth pin file.
|
|
69
|
+
// Workflows resolve $SLOWCOOK_CLI from this at run time, so bumping the
|
|
70
|
+
// version is a one-file edit rather than N workflow sed-edits.
|
|
71
|
+
addSimpleFile(actions, reader, options.force, TARGETS.cliVersion, slowcookCliVersionFile(cliVersion));
|
|
67
72
|
// 4. .brewing/manifests/.gitkeep (only if we're creating the dir)
|
|
68
73
|
if (!reader.exists(".brewing/manifests/")) {
|
|
69
74
|
actions.push({ kind: "create", path: TARGETS.manifestsGitkeep, contents: gitkeep() });
|
|
@@ -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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"}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
export declare const CLI_VERSION_FOR_TEMPLATES = "0.6.
|
|
1
|
+
export declare const CLI_VERSION_FOR_TEMPLATES = "0.6.9";
|
|
2
|
+
/**
|
|
3
|
+
* Path of the single-source-of-truth CLI pin file. Every workflow reads
|
|
4
|
+
* from this at run time so a version bump is a one-file edit, not
|
|
5
|
+
* N files × sed. Bump deliberately via a PR.
|
|
6
|
+
*/
|
|
7
|
+
export declare const SLOWCOOK_CLI_VERSION_FILE = ".brewing/slowcook-cli-version";
|
|
8
|
+
export declare function slowcookCliVersionFile(cliVersion: string): string;
|
|
2
9
|
export interface TemplateParams {
|
|
3
10
|
/** CODEOWNERS handle or team (e.g. "@aminazar" or "@acme/frontend"). */
|
|
4
11
|
owner: string;
|
|
@@ -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,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;AAEpF,wBAAgB,eAAe,IAAI,MAAM,CAoCxC;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAkCxD;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAmD1C;AAED,wBAAgB,aAAa,IAAI,MAAM,CA+BtC;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAmDlE;AAED,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAsCrE;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,
|
|
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;AAEpF,wBAAgB,eAAe,IAAI,MAAM,CAoCxC;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAkCxD;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAmD1C;AAED,wBAAgB,aAAa,IAAI,MAAM,CA+BtC;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAmDlE;AAED,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAsCrE;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAuD3D;AAED,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"}
|
|
@@ -1,6 +1,25 @@
|
|
|
1
1
|
// Static and parameterized file contents written by `slowcook init`.
|
|
2
2
|
// Version is bumped in lockstep with the CLI package.
|
|
3
|
-
export const CLI_VERSION_FOR_TEMPLATES = "0.6.
|
|
3
|
+
export const CLI_VERSION_FOR_TEMPLATES = "0.6.9";
|
|
4
|
+
/**
|
|
5
|
+
* Path of the single-source-of-truth CLI pin file. Every workflow reads
|
|
6
|
+
* from this at run time so a version bump is a one-file edit, not
|
|
7
|
+
* N files × sed. Bump deliberately via a PR.
|
|
8
|
+
*/
|
|
9
|
+
export const SLOWCOOK_CLI_VERSION_FILE = ".brewing/slowcook-cli-version";
|
|
10
|
+
export function slowcookCliVersionFile(cliVersion) {
|
|
11
|
+
return cliVersion + "\n";
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Shared GitHub Actions step that resolves the SLOWCOOK_CLI env var from
|
|
15
|
+
* the pin file. Must come AFTER actions/checkout@v4 in every workflow.
|
|
16
|
+
* Emitted as a string so the three workflow templates below can compose
|
|
17
|
+
* it identically and drift-free.
|
|
18
|
+
*/
|
|
19
|
+
const RESOLVE_PIN_STEP = ` - name: Resolve slowcook CLI pin
|
|
20
|
+
# Single source of truth: .brewing/slowcook-cli-version. Bump by
|
|
21
|
+
# editing that one file; every workflow picks it up at run time.
|
|
22
|
+
run: echo "SLOWCOOK_CLI=@slowcook-ai/cli@$(cat .brewing/slowcook-cli-version | tr -d '[:space:]')" >> $GITHUB_ENV`;
|
|
4
23
|
export const SLOWCOOK_CODEOWNERS_MARKER_BEGIN = "# --- slowcook:frozen-paths BEGIN ---";
|
|
5
24
|
export const SLOWCOOK_CODEOWNERS_MARKER_END = "# --- slowcook:frozen-paths END ---";
|
|
6
25
|
export function frozenPathsJson() {
|
|
@@ -145,6 +164,7 @@ Deliberately slightly inconvenient. Frozen-path changes are rare events that des
|
|
|
145
164
|
`;
|
|
146
165
|
}
|
|
147
166
|
export function slowcookTestgenWorkflow(cliVersion) {
|
|
167
|
+
void cliVersion;
|
|
148
168
|
return `name: slowcook testgen
|
|
149
169
|
|
|
150
170
|
# Generates Vitest integration tests whenever a new spec lands on main
|
|
@@ -164,9 +184,6 @@ concurrency:
|
|
|
164
184
|
group: slowcook-testgen-main
|
|
165
185
|
cancel-in-progress: false
|
|
166
186
|
|
|
167
|
-
env:
|
|
168
|
-
SLOWCOOK_CLI: "@slowcook-ai/cli@${cliVersion}"
|
|
169
|
-
|
|
170
187
|
jobs:
|
|
171
188
|
testgen:
|
|
172
189
|
runs-on: ubuntu-latest
|
|
@@ -178,6 +195,8 @@ jobs:
|
|
|
178
195
|
with:
|
|
179
196
|
fetch-depth: 0
|
|
180
197
|
|
|
198
|
+
${RESOLVE_PIN_STEP}
|
|
199
|
+
|
|
181
200
|
- name: Configure git identity for agent commits
|
|
182
201
|
run: |
|
|
183
202
|
git config user.name "slowcook-testgen[bot]"
|
|
@@ -197,6 +216,7 @@ jobs:
|
|
|
197
216
|
`;
|
|
198
217
|
}
|
|
199
218
|
export function slowcookSpecMergedWorkflow(cliVersion) {
|
|
219
|
+
void cliVersion;
|
|
200
220
|
return `name: slowcook — spec merged
|
|
201
221
|
|
|
202
222
|
# Transitions source-issue labels from \`spec-submitted\` → \`spec-ready\` when
|
|
@@ -206,9 +226,6 @@ on:
|
|
|
206
226
|
pull_request:
|
|
207
227
|
types: [closed]
|
|
208
228
|
|
|
209
|
-
env:
|
|
210
|
-
SLOWCOOK_CLI: "@slowcook-ai/cli@${cliVersion}"
|
|
211
|
-
|
|
212
229
|
jobs:
|
|
213
230
|
transition:
|
|
214
231
|
if: >-
|
|
@@ -224,6 +241,8 @@ jobs:
|
|
|
224
241
|
with:
|
|
225
242
|
ref: \${{ github.event.pull_request.merge_commit_sha }}
|
|
226
243
|
|
|
244
|
+
${RESOLVE_PIN_STEP}
|
|
245
|
+
|
|
227
246
|
- uses: actions/setup-node@v4
|
|
228
247
|
with:
|
|
229
248
|
node-version: 20
|
|
@@ -236,6 +255,7 @@ jobs:
|
|
|
236
255
|
`;
|
|
237
256
|
}
|
|
238
257
|
export function slowcookWorkflow(cliVersion) {
|
|
258
|
+
void cliVersion;
|
|
239
259
|
return `name: slowcook
|
|
240
260
|
|
|
241
261
|
on:
|
|
@@ -246,10 +266,6 @@ concurrency:
|
|
|
246
266
|
group: slowcook-\${{ github.event.pull_request.number }}
|
|
247
267
|
cancel-in-progress: true
|
|
248
268
|
|
|
249
|
-
# Pin CLI version for reproducibility; bump deliberately via a PR.
|
|
250
|
-
env:
|
|
251
|
-
SLOWCOOK_CLI: "@slowcook-ai/cli@${cliVersion}"
|
|
252
|
-
|
|
253
269
|
jobs:
|
|
254
270
|
check:
|
|
255
271
|
name: slowcook checks
|
|
@@ -259,6 +275,8 @@ jobs:
|
|
|
259
275
|
with:
|
|
260
276
|
fetch-depth: 0
|
|
261
277
|
|
|
278
|
+
${RESOLVE_PIN_STEP}
|
|
279
|
+
|
|
262
280
|
- uses: actions/setup-node@v4
|
|
263
281
|
with:
|
|
264
282
|
node-version: 20
|
|
@@ -284,6 +302,12 @@ jobs:
|
|
|
284
302
|
|
|
285
303
|
- name: Manifest — verify discoverable tests
|
|
286
304
|
run: npx --yes "$SLOWCOOK_CLI" manifest verify
|
|
305
|
+
|
|
306
|
+
- name: Code map — check it's up to date
|
|
307
|
+
# Fails if the committed .brewing/code-map.{json,md} differs from a
|
|
308
|
+
# fresh regeneration. Fix by running \`npx slowcook map generate\`
|
|
309
|
+
# locally, commit the result, and push.
|
|
310
|
+
run: npx --yes "$SLOWCOOK_CLI" map check
|
|
287
311
|
`;
|
|
288
312
|
}
|
|
289
313
|
export function codeownersSection(params) {
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/commands/init/templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CodeMap } from "./scan.js";
|
|
2
|
+
export declare function map(argv: string[], cliVersion: string): Promise<void>;
|
|
3
|
+
export declare function writeFreshMap(repoRoot: string, outJson: string, outMd: string, fresh: CodeMap): void;
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/map/index.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+DzC,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0C3E;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,OAAO,GACb,IAAI,CAMN"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { writeFileSync, readFileSync, existsSync, mkdirSync } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { generateMap } from "./scan.js";
|
|
4
|
+
import { renderJson, renderMarkdown, mapsEqual, CODE_MAP_JSON_PATH, CODE_MAP_MD_PATH, } from "./render.js";
|
|
5
|
+
function parseArgs(argv) {
|
|
6
|
+
const args = {
|
|
7
|
+
subcommand: "generate",
|
|
8
|
+
repoRoot: process.cwd(),
|
|
9
|
+
out: CODE_MAP_JSON_PATH,
|
|
10
|
+
md: CODE_MAP_MD_PATH,
|
|
11
|
+
};
|
|
12
|
+
const first = argv[0];
|
|
13
|
+
if (first === "generate" || first === "check") {
|
|
14
|
+
args.subcommand = first;
|
|
15
|
+
argv = argv.slice(1);
|
|
16
|
+
}
|
|
17
|
+
else if (first === "--help" || first === "-h") {
|
|
18
|
+
printHelp();
|
|
19
|
+
process.exit(0);
|
|
20
|
+
}
|
|
21
|
+
else if (first && !first.startsWith("-")) {
|
|
22
|
+
console.error(`Unknown subcommand: ${first}`);
|
|
23
|
+
printHelp();
|
|
24
|
+
process.exit(64);
|
|
25
|
+
}
|
|
26
|
+
for (let i = 0; i < argv.length; i++) {
|
|
27
|
+
const a = argv[i];
|
|
28
|
+
const next = argv[i + 1];
|
|
29
|
+
if (a === "--cwd" && next) {
|
|
30
|
+
args.repoRoot = next;
|
|
31
|
+
i++;
|
|
32
|
+
}
|
|
33
|
+
else if (a === "--out" && next) {
|
|
34
|
+
args.out = next;
|
|
35
|
+
i++;
|
|
36
|
+
}
|
|
37
|
+
else if (a === "--md" && next) {
|
|
38
|
+
args.md = next;
|
|
39
|
+
i++;
|
|
40
|
+
}
|
|
41
|
+
else if (a === "--help" || a === "-h") {
|
|
42
|
+
printHelp();
|
|
43
|
+
process.exit(0);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return args;
|
|
47
|
+
}
|
|
48
|
+
function printHelp() {
|
|
49
|
+
console.log(`
|
|
50
|
+
slowcook map — generate / check the repo-wide code map
|
|
51
|
+
|
|
52
|
+
The map is a structured list of API routes, pages, React components,
|
|
53
|
+
helper functions, and domain types. Lives at \`.brewing/code-map.json\`
|
|
54
|
+
(+ rendered \`.brewing/code-map.md\`). The brewing agent reads it as
|
|
55
|
+
context so it doesn't have to re-read files every iteration.
|
|
56
|
+
|
|
57
|
+
Usage:
|
|
58
|
+
slowcook map generate [--cwd <path>] [--out <path>] [--md <path>]
|
|
59
|
+
slowcook map check [--cwd <path>] [--out <path>]
|
|
60
|
+
|
|
61
|
+
generate Write a fresh map to .brewing/code-map.{json,md}.
|
|
62
|
+
check Fail with exit 1 if the committed map differs from a fresh
|
|
63
|
+
generation. Meant for CI — keeps the map honest.
|
|
64
|
+
|
|
65
|
+
Options:
|
|
66
|
+
--cwd <path> Repo root (default: cwd).
|
|
67
|
+
--out <path> JSON output path (default: .brewing/code-map.json).
|
|
68
|
+
--md <path> Markdown output path (default: .brewing/code-map.md).
|
|
69
|
+
`);
|
|
70
|
+
}
|
|
71
|
+
export async function map(argv, cliVersion) {
|
|
72
|
+
const args = parseArgs(argv);
|
|
73
|
+
const fresh = generateMap({
|
|
74
|
+
repoRoot: args.repoRoot,
|
|
75
|
+
slowcookVersion: cliVersion,
|
|
76
|
+
});
|
|
77
|
+
if (args.subcommand === "generate") {
|
|
78
|
+
writeFreshMap(args.repoRoot, args.out, args.md, fresh);
|
|
79
|
+
summary(fresh);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
// check: compare existing committed map to a fresh regen
|
|
83
|
+
const existingPath = join(args.repoRoot, args.out);
|
|
84
|
+
if (!existsSync(existingPath)) {
|
|
85
|
+
console.error(`Map check failed: no map found at ${args.out}. Run \`slowcook map generate\` and commit the result.`);
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
let existing;
|
|
89
|
+
try {
|
|
90
|
+
existing = JSON.parse(readFileSync(existingPath, "utf8"));
|
|
91
|
+
}
|
|
92
|
+
catch (e) {
|
|
93
|
+
console.error(`Map check failed: could not parse ${args.out} — ${e.message}. Run \`slowcook map generate\` to refresh.`);
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
if (mapsEqual(existing, fresh)) {
|
|
97
|
+
console.log(`✓ Map is up to date (${summaryCounts(fresh)}).`);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
console.error(`✗ Map is stale. The committed \`${args.out}\` does not match what would be generated from the current source tree.\n\n` +
|
|
101
|
+
` Committed: ${summaryCounts(existing)}\n` +
|
|
102
|
+
` Fresh: ${summaryCounts(fresh)}\n\n` +
|
|
103
|
+
`Fix by running:\n npx slowcook map generate\nThen commit the updated ${args.out} + ${args.md}.`);
|
|
104
|
+
process.exit(1);
|
|
105
|
+
}
|
|
106
|
+
export function writeFreshMap(repoRoot, outJson, outMd, fresh) {
|
|
107
|
+
const jsonPath = join(repoRoot, outJson);
|
|
108
|
+
const mdPath = join(repoRoot, outMd);
|
|
109
|
+
mkdirSync(dirname(jsonPath), { recursive: true });
|
|
110
|
+
writeFileSync(jsonPath, renderJson(fresh), "utf8");
|
|
111
|
+
writeFileSync(mdPath, renderMarkdown(fresh), "utf8");
|
|
112
|
+
}
|
|
113
|
+
function summary(map) {
|
|
114
|
+
console.log(`Wrote ${CODE_MAP_JSON_PATH} + ${CODE_MAP_MD_PATH}`);
|
|
115
|
+
console.log(` ${summaryCounts(map)}`);
|
|
116
|
+
}
|
|
117
|
+
function summaryCounts(m) {
|
|
118
|
+
return `${m.api_routes.length} routes, ${m.pages.length} pages, ${m.components.length} components, ${m.helpers.length} helpers, ${m.types.length} types`;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/map/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { CodeMap } from "./scan.js";
|
|
2
|
+
export declare const CODE_MAP_JSON_PATH = ".brewing/code-map.json";
|
|
3
|
+
export declare const CODE_MAP_MD_PATH = ".brewing/code-map.md";
|
|
4
|
+
export declare function renderJson(map: CodeMap): string;
|
|
5
|
+
/**
|
|
6
|
+
* Render a human-readable markdown view. Optimised for two audiences:
|
|
7
|
+
* - contributors skimming the map via the PR diff view, and
|
|
8
|
+
* - the brewing agent reading it as a flat context block.
|
|
9
|
+
*
|
|
10
|
+
* Keep sections compact; JSDoc summaries are trimmed to a single line.
|
|
11
|
+
*/
|
|
12
|
+
export declare function renderMarkdown(map: CodeMap): string;
|
|
13
|
+
/**
|
|
14
|
+
* Compare two maps for content equality (ignoring `generated_at`, which
|
|
15
|
+
* changes every regen). Used by `slowcook map check`.
|
|
16
|
+
*/
|
|
17
|
+
export declare function mapsEqual(a: CodeMap, b: CodeMap): boolean;
|
|
18
|
+
//# sourceMappingURL=render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/commands/map/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,eAAO,MAAM,kBAAkB,2BAA2B,CAAC;AAC3D,eAAO,MAAM,gBAAgB,yBAAyB,CAAC;AAEvD,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAE/C;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CA+EnD;AAgBD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAGzD"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
export const CODE_MAP_JSON_PATH = ".brewing/code-map.json";
|
|
2
|
+
export const CODE_MAP_MD_PATH = ".brewing/code-map.md";
|
|
3
|
+
export function renderJson(map) {
|
|
4
|
+
return JSON.stringify(map, null, 2) + "\n";
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Render a human-readable markdown view. Optimised for two audiences:
|
|
8
|
+
* - contributors skimming the map via the PR diff view, and
|
|
9
|
+
* - the brewing agent reading it as a flat context block.
|
|
10
|
+
*
|
|
11
|
+
* Keep sections compact; JSDoc summaries are trimmed to a single line.
|
|
12
|
+
*/
|
|
13
|
+
export function renderMarkdown(map) {
|
|
14
|
+
const lines = [];
|
|
15
|
+
lines.push(`# Code Map`);
|
|
16
|
+
lines.push("");
|
|
17
|
+
lines.push(`_Generated by slowcook ${map.slowcook_version} at ${map.generated_at}. Regenerate with \`npx slowcook map generate\`. Do not hand-edit._`);
|
|
18
|
+
lines.push("");
|
|
19
|
+
section(lines, "API routes", map.api_routes.length);
|
|
20
|
+
if (map.api_routes.length > 0) {
|
|
21
|
+
lines.push("");
|
|
22
|
+
lines.push("| Method | Path | File | Function | Summary |");
|
|
23
|
+
lines.push("|---|---|---|---|---|");
|
|
24
|
+
for (const r of map.api_routes) {
|
|
25
|
+
lines.push(`| \`${r.method}\` | \`${r.path}\` | \`${r.file}\` | \`${r.function}\` | ${oneLine(r.jsdoc)} |`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
lines.push("");
|
|
29
|
+
section(lines, "Pages", map.pages.length);
|
|
30
|
+
if (map.pages.length > 0) {
|
|
31
|
+
lines.push("");
|
|
32
|
+
lines.push("| Path | Component | File | Summary |");
|
|
33
|
+
lines.push("|---|---|---|---|");
|
|
34
|
+
for (const p of map.pages) {
|
|
35
|
+
lines.push(`| \`${p.path}\` | ${p.component ? `\`${p.component}\`` : "—"} | \`${p.file}\` | ${oneLine(p.jsdoc)} |`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
lines.push("");
|
|
39
|
+
section(lines, "Components", map.components.length);
|
|
40
|
+
if (map.components.length > 0) {
|
|
41
|
+
lines.push("");
|
|
42
|
+
lines.push("| Name | Export | Props | File | Summary |");
|
|
43
|
+
lines.push("|---|---|---|---|---|");
|
|
44
|
+
for (const c of map.components) {
|
|
45
|
+
lines.push(`| \`${c.name}\` | ${c.exportKind} | ${c.props_type ? `\`${c.props_type}\`` : "—"} | \`${c.file}\` | ${oneLine(c.jsdoc)} |`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
lines.push("");
|
|
49
|
+
section(lines, "Helpers", map.helpers.length);
|
|
50
|
+
if (map.helpers.length > 0) {
|
|
51
|
+
lines.push("");
|
|
52
|
+
lines.push("| Name | Kind | File | Signature | Summary |");
|
|
53
|
+
lines.push("|---|---|---|---|---|");
|
|
54
|
+
for (const h of map.helpers) {
|
|
55
|
+
lines.push(`| \`${h.name}\` | ${h.kind} | \`${h.file}\` | \`${escapeTable(h.signature)}\` | ${oneLine(h.jsdoc)} |`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
lines.push("");
|
|
59
|
+
section(lines, "Types", map.types.length);
|
|
60
|
+
if (map.types.length > 0) {
|
|
61
|
+
lines.push("");
|
|
62
|
+
for (const t of map.types) {
|
|
63
|
+
lines.push(`### ${t.name} (${t.kind}) — \`${t.file}\``);
|
|
64
|
+
if (t.jsdoc) {
|
|
65
|
+
lines.push("");
|
|
66
|
+
lines.push(`> ${oneLine(t.jsdoc)}`);
|
|
67
|
+
}
|
|
68
|
+
lines.push("");
|
|
69
|
+
lines.push("```ts");
|
|
70
|
+
lines.push(t.declaration);
|
|
71
|
+
lines.push("```");
|
|
72
|
+
lines.push("");
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return lines.join("\n");
|
|
76
|
+
}
|
|
77
|
+
function section(lines, label, count) {
|
|
78
|
+
lines.push(`## ${label} (${count})`);
|
|
79
|
+
}
|
|
80
|
+
function oneLine(s) {
|
|
81
|
+
if (!s)
|
|
82
|
+
return "";
|
|
83
|
+
const first = s.split("\n")[0] ?? "";
|
|
84
|
+
return first.replace(/\|/g, "\\|").trim();
|
|
85
|
+
}
|
|
86
|
+
function escapeTable(s) {
|
|
87
|
+
return s.replace(/\|/g, "\\|");
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Compare two maps for content equality (ignoring `generated_at`, which
|
|
91
|
+
* changes every regen). Used by `slowcook map check`.
|
|
92
|
+
*/
|
|
93
|
+
export function mapsEqual(a, b) {
|
|
94
|
+
const stripTime = (m) => ({ ...m, generated_at: "__ignored__" });
|
|
95
|
+
return JSON.stringify(stripTime(a)) === JSON.stringify(stripTime(b));
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/commands/map/render.ts"],"names":[],"mappings":"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"}
|