@slowcook-ai/cli 0.11.18 → 0.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/brew/agent.d.ts.map +1 -1
- package/dist/commands/brew/agent.js +52 -1
- package/dist/commands/brew/agent.js.map +1 -1
- package/dist/commands/brew/prompts.d.ts +89 -1
- package/dist/commands/brew/prompts.d.ts.map +1 -1
- package/dist/commands/brew/prompts.js +93 -1
- package/dist/commands/brew/prompts.js.map +1 -1
- package/dist/commands/brew/provenance.d.ts +20 -0
- package/dist/commands/brew/provenance.d.ts.map +1 -1
- package/dist/commands/brew/provenance.js +77 -0
- package/dist/commands/brew/provenance.js.map +1 -1
- package/dist/commands/brew/retrieval.d.ts +90 -0
- package/dist/commands/brew/retrieval.d.ts.map +1 -0
- package/dist/commands/brew/retrieval.js +235 -0
- package/dist/commands/brew/retrieval.js.map +1 -0
- package/dist/commands/testgen/prompts.d.ts.map +1 -1
- package/dist/commands/testgen/prompts.js +73 -0
- package/dist/commands/testgen/prompts.js.map +1 -1
- package/package.json +2 -2
|
@@ -57,6 +57,45 @@ Then, in order:
|
|
|
57
57
|
|
|
58
58
|
A human doesn't read every file in a package to fix one test; neither should you.
|
|
59
59
|
|
|
60
|
+
## Mandatory pre-write discovery (0.12.0+)
|
|
61
|
+
|
|
62
|
+
Before writing ANY new exported symbol — function, component, type,
|
|
63
|
+
class, route handler — you MUST verify nothing similar already exists.
|
|
64
|
+
This prevents a recurring failure mode: brew duplicates a helper that
|
|
65
|
+
already lives elsewhere in the codebase, the duplicate passes the
|
|
66
|
+
target test, and the duplication ships unnoticed. Same problem at scale
|
|
67
|
+
in brownfield projects.
|
|
68
|
+
|
|
69
|
+
**Required tool sequence:**
|
|
70
|
+
|
|
71
|
+
1. **\`find_references\`** on the symbol name you're about to introduce
|
|
72
|
+
(or the most-likely existing equivalent). Examples:
|
|
73
|
+
- About to write \`getProfileByHandle\`? Call \`find_references({symbol: "getProfileByHandle"})\`
|
|
74
|
+
AND \`find_references({symbol: "getProfile"})\` (broader concept).
|
|
75
|
+
- About to write a \`BookmarkItem\` component? Call
|
|
76
|
+
\`find_references({symbol: "BookmarkItem"})\` AND consider similar
|
|
77
|
+
concept names.
|
|
78
|
+
2. If \`find_references\` returns matches with kind=\`definition\`, READ
|
|
79
|
+
that file's outline. Decide:
|
|
80
|
+
- Can I extend the existing symbol with an extra arg / option?
|
|
81
|
+
**YES → extend it. Don't create a parallel.**
|
|
82
|
+
- Is the existing symbol unsuitable for this case (genuinely
|
|
83
|
+
orthogonal use)? **OK to add a new one. State the reason in your
|
|
84
|
+
turn rationale so the reviewer can audit the choice.**
|
|
85
|
+
3. **\`grep\`** is acceptable when you're searching for a concept rather
|
|
86
|
+
than an exact identifier (e.g., "where do we do RLS?"). Always
|
|
87
|
+
refine to specific symbols via find_references after.
|
|
88
|
+
|
|
89
|
+
**Rule of thumb:** if the cumulative diff so far has duplication you'd
|
|
90
|
+
consolidate, do it on this iteration's edit while you're already
|
|
91
|
+
touching the file. Don't open a separate refactor turn — write
|
|
92
|
+
cleaner code on the green path.
|
|
93
|
+
|
|
94
|
+
The reviewer audits your discovery work via the iteration log's
|
|
95
|
+
\`discovery:\` field (slowcook 0.12.0+) and the rationale you write at
|
|
96
|
+
turn end. Silent skips of the discovery requirement turn into
|
|
97
|
+
"why did you write a parallel function?" PR comments later.
|
|
98
|
+
|
|
60
99
|
## When you're stuck (same target, 2+ iterations without progress)
|
|
61
100
|
|
|
62
101
|
**Check the \`Why the target failed last run\` section in every turn prompt FIRST.** The test's \`Received:\` / error message tells you what the assertion actually saw — that's ground truth. Don't spend iterations re-reading your own code looking for a bug you missed when the failure message is right there.
|
|
@@ -155,6 +194,52 @@ export const BREW_TOOLS = [
|
|
|
155
194
|
required: ["method", "path"],
|
|
156
195
|
},
|
|
157
196
|
},
|
|
197
|
+
{
|
|
198
|
+
name: "find_references",
|
|
199
|
+
description: "0.12.0+ symbol-aware retrieval. Return every place a named symbol is referenced in src/ (definition + imports + usages). MANDATORY before writing any new exported function/component/type — call this first to verify nothing similar already exists. AST-aware: ignores comments and string literals. Returns lines like `kind | file:line:col | context_line`. `kind` ∈ {definition, reference, import, implements, extends}.",
|
|
200
|
+
input_schema: {
|
|
201
|
+
type: "object",
|
|
202
|
+
properties: {
|
|
203
|
+
symbol: {
|
|
204
|
+
type: "string",
|
|
205
|
+
description: "The exact identifier name to search for (case-sensitive). E.g. 'getProfileByHandle', 'BookmarksPage', 'ReactionItem'.",
|
|
206
|
+
},
|
|
207
|
+
exclude_definitions: {
|
|
208
|
+
type: "boolean",
|
|
209
|
+
description: "If true, skip the symbol's own declaration. Useful when you want to know 'is anyone calling this' without seeing the definition itself.",
|
|
210
|
+
},
|
|
211
|
+
},
|
|
212
|
+
required: ["symbol"],
|
|
213
|
+
},
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
name: "find_implementations",
|
|
217
|
+
description: "0.12.0+ symbol-aware retrieval. Find every class that `implements <interface>` or `extends <class>`, plus every interface that extends another interface, by name. Returns the same shape as find_references, with kind ∈ {implements, extends}. Use when you're about to write a new implementor and want to see how others did it.",
|
|
218
|
+
input_schema: {
|
|
219
|
+
type: "object",
|
|
220
|
+
properties: {
|
|
221
|
+
interface_or_base: {
|
|
222
|
+
type: "string",
|
|
223
|
+
description: "Name of the interface or base class to find implementations/extensions of.",
|
|
224
|
+
},
|
|
225
|
+
},
|
|
226
|
+
required: ["interface_or_base"],
|
|
227
|
+
},
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
name: "find_definition",
|
|
231
|
+
description: "0.12.0+ symbol-aware retrieval. Jump to the canonical declaration site of a symbol. Returns at most one result (the first declaration found). Faster than find_references when you only need the definition; both use the same AST scan but find_definition stops at the first match.",
|
|
232
|
+
input_schema: {
|
|
233
|
+
type: "object",
|
|
234
|
+
properties: {
|
|
235
|
+
symbol: {
|
|
236
|
+
type: "string",
|
|
237
|
+
description: "The identifier name whose declaration site you want.",
|
|
238
|
+
},
|
|
239
|
+
},
|
|
240
|
+
required: ["symbol"],
|
|
241
|
+
},
|
|
242
|
+
},
|
|
158
243
|
{
|
|
159
244
|
name: "outline_file",
|
|
160
245
|
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.",
|
|
@@ -263,7 +348,7 @@ export function turnPrompt(args) {
|
|
|
263
348
|
*/
|
|
264
349
|
export function turnPromptParts(args) {
|
|
265
350
|
// === CACHEABLE PREFIX === (constant across iterations in a single
|
|
266
|
-
// brew run: spec body + allowed paths)
|
|
351
|
+
// brew run: spec body + allowed paths + prior brew history)
|
|
267
352
|
const prefix = [];
|
|
268
353
|
prefix.push("### Spec (the contract)");
|
|
269
354
|
prefix.push("```yaml");
|
|
@@ -276,6 +361,13 @@ export function turnPromptParts(args) {
|
|
|
276
361
|
prefix.push(`- \`${p}\``);
|
|
277
362
|
prefix.push("");
|
|
278
363
|
}
|
|
364
|
+
// 0.12.0+ — prior brew history. Listed here in the cached prefix
|
|
365
|
+
// because the data doesn't change per iteration. Empty when the
|
|
366
|
+
// current brew doesn't overlap with prior brews.
|
|
367
|
+
if (args.prior_context_block && args.prior_context_block.trim().length > 0) {
|
|
368
|
+
prefix.push(args.prior_context_block.trim());
|
|
369
|
+
prefix.push("");
|
|
370
|
+
}
|
|
279
371
|
const cachedPrefix = prefix.join("\n");
|
|
280
372
|
// === DYNAMIC BODY === (varies per iteration)
|
|
281
373
|
const sections = [];
|
|
@@ -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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"}
|
|
@@ -76,4 +76,24 @@ export declare function writeProvenance(repoRoot: string, index: ProvenanceIndex
|
|
|
76
76
|
* path uses this; tests use the lower-level functions.
|
|
77
77
|
*/
|
|
78
78
|
export declare function recordBrewProvenance(repoRoot: string, entry: BrewProvenanceEntry): void;
|
|
79
|
+
/**
|
|
80
|
+
* 0.12.0+ — render a "prior brew history" markdown block for files
|
|
81
|
+
* the current brew is touching. Returns empty string when there's
|
|
82
|
+
* no history to surface.
|
|
83
|
+
*
|
|
84
|
+
* Inputs:
|
|
85
|
+
* - index: the loaded provenance.json
|
|
86
|
+
* - manifestFiles: file paths from the current story's manifest
|
|
87
|
+
* (i.e., the files brew's tests are likely to exercise; loaded by
|
|
88
|
+
* deriveStoryTestFiles or similar at the brew layer)
|
|
89
|
+
* - currentStoryId: skip entries that only mention the current story
|
|
90
|
+
* (no novel context — agent already knows about its own brew).
|
|
91
|
+
*
|
|
92
|
+
* The block is small by design: bounded attention is the point. We
|
|
93
|
+
* include hot-spot files only (touched in ≥2 brews) plus files with
|
|
94
|
+
* non-zero halt or regression counts.
|
|
95
|
+
*/
|
|
96
|
+
export declare function renderPriorContextBlock(index: ProvenanceIndex, manifestFiles: string[], currentStoryId: string, options?: {
|
|
97
|
+
maxFiles?: number;
|
|
98
|
+
}): string;
|
|
79
99
|
//# sourceMappingURL=provenance.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provenance.d.ts","sourceRoot":"","sources":["../../../src/commands/brew/provenance.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAC1D,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,8FAA8F;IAC9F,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,0BAA0B;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,qFAAqF;IACrF,gBAAgB,EAAE,MAAM,CAAC;IACzB,+CAA+C;IAC/C,MAAM,EAAE,OAAO,CAAC;IAChB,qFAAqF;IACrF,aAAa,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpE,qEAAqE;IACrE,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtD;AAED,sEAAsE;AACtE,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAuChE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,mBAAmB,GACzB,eAAe,CAgFjB;AAED,oEAAoE;AACpE,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,eAAe,GACrB,IAAI,CAKN;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,mBAAmB,GACzB,IAAI,CAIN"}
|
|
1
|
+
{"version":3,"file":"provenance.d.ts","sourceRoot":"","sources":["../../../src/commands/brew/provenance.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAC1D,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,8FAA8F;IAC9F,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,0BAA0B;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,qFAAqF;IACrF,gBAAgB,EAAE,MAAM,CAAC;IACzB,+CAA+C;IAC/C,MAAM,EAAE,OAAO,CAAC;IAChB,qFAAqF;IACrF,aAAa,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpE,qEAAqE;IACrE,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtD;AAED,sEAAsE;AACtE,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAuChE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,mBAAmB,GACzB,eAAe,CAgFjB;AAED,oEAAoE;AACpE,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,eAAe,GACrB,IAAI,CAKN;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,mBAAmB,GACzB,IAAI,CAIN;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,eAAe,EACtB,aAAa,EAAE,MAAM,EAAE,EACvB,cAAc,EAAE,MAAM,EACtB,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAClC,MAAM,CAwDR"}
|
|
@@ -159,4 +159,81 @@ export function recordBrewProvenance(repoRoot, entry) {
|
|
|
159
159
|
const updated = applyBrewEntry(current, entry);
|
|
160
160
|
writeProvenance(repoRoot, updated);
|
|
161
161
|
}
|
|
162
|
+
/**
|
|
163
|
+
* 0.12.0+ — render a "prior brew history" markdown block for files
|
|
164
|
+
* the current brew is touching. Returns empty string when there's
|
|
165
|
+
* no history to surface.
|
|
166
|
+
*
|
|
167
|
+
* Inputs:
|
|
168
|
+
* - index: the loaded provenance.json
|
|
169
|
+
* - manifestFiles: file paths from the current story's manifest
|
|
170
|
+
* (i.e., the files brew's tests are likely to exercise; loaded by
|
|
171
|
+
* deriveStoryTestFiles or similar at the brew layer)
|
|
172
|
+
* - currentStoryId: skip entries that only mention the current story
|
|
173
|
+
* (no novel context — agent already knows about its own brew).
|
|
174
|
+
*
|
|
175
|
+
* The block is small by design: bounded attention is the point. We
|
|
176
|
+
* include hot-spot files only (touched in ≥2 brews) plus files with
|
|
177
|
+
* non-zero halt or regression counts.
|
|
178
|
+
*/
|
|
179
|
+
export function renderPriorContextBlock(index, manifestFiles, currentStoryId, options = {}) {
|
|
180
|
+
const max = options.maxFiles ?? 8;
|
|
181
|
+
const candidates = [];
|
|
182
|
+
for (const f of manifestFiles) {
|
|
183
|
+
const entry = index.by_file[f];
|
|
184
|
+
if (!entry)
|
|
185
|
+
continue;
|
|
186
|
+
// Skip entries that only mention the current story.
|
|
187
|
+
const others = entry.modified_by.filter((s) => s !== currentStoryId);
|
|
188
|
+
if (others.length === 0)
|
|
189
|
+
continue;
|
|
190
|
+
candidates.push({ file: f, entry });
|
|
191
|
+
}
|
|
192
|
+
// Also surface files in the same directory as manifest files. Cheap
|
|
193
|
+
// proxy for "code adjacent to what the agent will touch."
|
|
194
|
+
const adjacentSeen = new Set(candidates.map((c) => c.file));
|
|
195
|
+
const dirs = new Set(manifestFiles.map((f) => f.split("/").slice(0, -1).join("/")));
|
|
196
|
+
for (const [f, entry] of Object.entries(index.by_file)) {
|
|
197
|
+
if (adjacentSeen.has(f))
|
|
198
|
+
continue;
|
|
199
|
+
const dir = f.split("/").slice(0, -1).join("/");
|
|
200
|
+
if (!dirs.has(dir))
|
|
201
|
+
continue;
|
|
202
|
+
const others = entry.modified_by.filter((s) => s !== currentStoryId);
|
|
203
|
+
if (others.length === 0)
|
|
204
|
+
continue;
|
|
205
|
+
candidates.push({ file: f, entry });
|
|
206
|
+
}
|
|
207
|
+
// Rank: regression-heavy first, then hot-spot, then recent.
|
|
208
|
+
candidates.sort((a, b) => {
|
|
209
|
+
const ra = a.entry.regression_count + a.entry.halt_count * 2;
|
|
210
|
+
const rb = b.entry.regression_count + b.entry.halt_count * 2;
|
|
211
|
+
if (rb !== ra)
|
|
212
|
+
return rb - ra;
|
|
213
|
+
if (b.entry.modified_by.length !== a.entry.modified_by.length) {
|
|
214
|
+
return b.entry.modified_by.length - a.entry.modified_by.length;
|
|
215
|
+
}
|
|
216
|
+
return b.entry.last_modified.localeCompare(a.entry.last_modified);
|
|
217
|
+
});
|
|
218
|
+
const top = candidates.slice(0, max);
|
|
219
|
+
if (top.length === 0)
|
|
220
|
+
return "";
|
|
221
|
+
const lines = [];
|
|
222
|
+
lines.push("### Prior brew history (this surface area)");
|
|
223
|
+
lines.push("");
|
|
224
|
+
for (const { file, entry } of top) {
|
|
225
|
+
const stories = entry.modified_by.join(", ");
|
|
226
|
+
const flags = [];
|
|
227
|
+
if (entry.halt_count > 0)
|
|
228
|
+
flags.push(`${entry.halt_count} halt(s)`);
|
|
229
|
+
if (entry.regression_count > 0)
|
|
230
|
+
flags.push(`${entry.regression_count} regression(s)`);
|
|
231
|
+
const flagSuffix = flags.length > 0 ? ` — ${flags.join(", ")}` : "";
|
|
232
|
+
const prSuffix = entry.last_pr ? ` — last PR: ${entry.last_pr}` : "";
|
|
233
|
+
lines.push(`- \`${file}\` — ${stories}${flagSuffix}${prSuffix}`);
|
|
234
|
+
}
|
|
235
|
+
lines.push("");
|
|
236
|
+
lines.push("Read prior PRs before duplicating logic. If a previous brew touched a file you're about to edit, the existing structure is the right starting point — extend it, don't bypass it.");
|
|
237
|
+
return lines.join("\n");
|
|
238
|
+
}
|
|
162
239
|
//# sourceMappingURL=provenance.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provenance.js","sourceRoot":"","sources":["../../../src/commands/brew/provenance.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"provenance.js","sourceRoot":"","sources":["../../../src/commands/brew/provenance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 0.12.0+ — symbol-aware retrieval tools backed by ts-morph.
|
|
3
|
+
*
|
|
4
|
+
* These tools answer "what's already here?" — the question the
|
|
5
|
+
* mandatory pre-write discovery requirement (Phase 1) makes the agent
|
|
6
|
+
* ask before it adds new exported symbols. The bounded-attention
|
|
7
|
+
* north star of the brownfield-retrieval plan: agent attention should
|
|
8
|
+
* be bounded to the AREA the feature touches, never the project, and
|
|
9
|
+
* within the area, look at existing entities BEFORE creating new ones.
|
|
10
|
+
*
|
|
11
|
+
* We deliberately don't use TypeScript's language service (no
|
|
12
|
+
* type-checking) — that's an order of magnitude slower and we don't
|
|
13
|
+
* need correctness here, we need speed. Syntax tree walks find ~95%
|
|
14
|
+
* of what the agent needs and false positives (an identifier in a
|
|
15
|
+
* comment, say) are recoverable: the agent reads the matched file
|
|
16
|
+
* and decides.
|
|
17
|
+
*
|
|
18
|
+
* Each call loads a fresh ts-morph Project. That's ~200-500ms for a
|
|
19
|
+
* mid-size codebase — the LLM round-trip dominates wall-clock so
|
|
20
|
+
* caching across calls is a future optimization (and tricky because
|
|
21
|
+
* brew's writes invalidate the project).
|
|
22
|
+
*/
|
|
23
|
+
export interface Reference {
|
|
24
|
+
file: string;
|
|
25
|
+
line: number;
|
|
26
|
+
column: number;
|
|
27
|
+
/** The line of code containing the reference, for context in the agent's prompt. */
|
|
28
|
+
context: string;
|
|
29
|
+
/** What kind of usage — "definition", "reference", "implements", "extends", "import". */
|
|
30
|
+
kind: ReferenceKind;
|
|
31
|
+
}
|
|
32
|
+
export type ReferenceKind = "definition" | "reference" | "implements" | "extends" | "import";
|
|
33
|
+
/**
|
|
34
|
+
* Find every place a symbol name is referenced in the source tree.
|
|
35
|
+
*
|
|
36
|
+
* Matches: identifier nodes with text === symbol. Includes the
|
|
37
|
+
* symbol's own definition unless `excludeDefinitions` is set.
|
|
38
|
+
*
|
|
39
|
+
* Excludes:
|
|
40
|
+
* - Comments (text-search would catch them; AST walk doesn't)
|
|
41
|
+
* - String literals (same)
|
|
42
|
+
* - JSX text content
|
|
43
|
+
*
|
|
44
|
+
* Hits the import-statement specifier separately (kind: "import")
|
|
45
|
+
* so the agent can distinguish "imported here" from "called here".
|
|
46
|
+
*/
|
|
47
|
+
export declare function findReferences(repoRoot: string, symbol: string, options?: {
|
|
48
|
+
excludeDefinitions?: boolean;
|
|
49
|
+
maxResults?: number;
|
|
50
|
+
}): Reference[];
|
|
51
|
+
/**
|
|
52
|
+
* Find every class that implements an interface (or every interface that
|
|
53
|
+
* extends another interface) by name. Returns the implementor's location.
|
|
54
|
+
*
|
|
55
|
+
* Catches:
|
|
56
|
+
* - `class Foo implements IBar { ... }` → implementations of `IBar`
|
|
57
|
+
* - `interface Foo extends IBar { ... }` → extensions of `IBar`
|
|
58
|
+
* - `class Foo extends Bar` → kind: "extends" (kept distinct from
|
|
59
|
+
* "implements" so the agent can tell hierarchy from interface
|
|
60
|
+
* conformance)
|
|
61
|
+
*/
|
|
62
|
+
export declare function findImplementations(repoRoot: string, interfaceName: string, options?: {
|
|
63
|
+
maxResults?: number;
|
|
64
|
+
}): Reference[];
|
|
65
|
+
/**
|
|
66
|
+
* Find the declaration site of a named symbol. Returns the FIRST match —
|
|
67
|
+
* a symbol can be re-declared in multiple files (TS allows this for
|
|
68
|
+
* augmenters / module declarations) but the common case is one
|
|
69
|
+
* canonical home.
|
|
70
|
+
*
|
|
71
|
+
* Scans:
|
|
72
|
+
* - function declarations
|
|
73
|
+
* - class declarations
|
|
74
|
+
* - interface declarations
|
|
75
|
+
* - type alias declarations
|
|
76
|
+
* - enum declarations
|
|
77
|
+
* - exported variable declarations
|
|
78
|
+
*/
|
|
79
|
+
export declare function findDefinition(repoRoot: string, symbol: string): Reference | null;
|
|
80
|
+
/**
|
|
81
|
+
* 0.12.0+ — render retrieval results as a compact markdown block for
|
|
82
|
+
* the agent's tool output. Each result becomes a single line:
|
|
83
|
+
* `kind | file:line:col | context`.
|
|
84
|
+
*
|
|
85
|
+
* Truncates at `max` to keep tool output under the agent's response
|
|
86
|
+
* cap. Caller passes a sensible max; default 30 is enough for the
|
|
87
|
+
* common case (most symbols have < 30 references in a focused codebase).
|
|
88
|
+
*/
|
|
89
|
+
export declare function renderReferences(refs: Reference[], max?: number): string;
|
|
90
|
+
//# sourceMappingURL=retrieval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retrieval.d.ts","sourceRoot":"","sources":["../../../src/commands/brew/retrieval.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,oFAAoF;IACpF,OAAO,EAAE,MAAM,CAAC;IAChB,yFAAyF;IACzF,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,MAAM,aAAa,GACrB,YAAY,GACZ,WAAW,GACX,YAAY,GACZ,SAAS,GACT,QAAQ,CAAC;AAqCb;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GAClE,SAAS,EAAE,CAkDb;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GACpC,SAAS,EAAE,CAyDb;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,SAAS,GAAG,IAAI,CA+BlB;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,GAAG,SAAK,GAAG,MAAM,CAUpE"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { Project, Node, SyntaxKind } from "ts-morph";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { join, relative as pathRelative, sep } from "node:path";
|
|
4
|
+
const SOURCE_GLOBS = [
|
|
5
|
+
"src/**/*.ts",
|
|
6
|
+
"src/**/*.tsx",
|
|
7
|
+
"src/**/*.mts",
|
|
8
|
+
"src/**/*.cts",
|
|
9
|
+
];
|
|
10
|
+
/**
|
|
11
|
+
* Build a ts-morph Project pointing at the consumer's src/ tree.
|
|
12
|
+
* Returns null when there's no src/ — caller should handle "no
|
|
13
|
+
* results" the same way as "src not found."
|
|
14
|
+
*/
|
|
15
|
+
function buildProject(repoRoot) {
|
|
16
|
+
if (!existsSync(join(repoRoot, "src")))
|
|
17
|
+
return null;
|
|
18
|
+
const project = new Project({
|
|
19
|
+
useInMemoryFileSystem: false,
|
|
20
|
+
skipAddingFilesFromTsConfig: true,
|
|
21
|
+
skipFileDependencyResolution: true,
|
|
22
|
+
});
|
|
23
|
+
project.addSourceFilesAtPaths(SOURCE_GLOBS.map((g) => join(repoRoot, g)));
|
|
24
|
+
return project;
|
|
25
|
+
}
|
|
26
|
+
function relPath(repoRoot, abs) {
|
|
27
|
+
return pathRelative(repoRoot, abs).split(sep).join("/");
|
|
28
|
+
}
|
|
29
|
+
function lineContext(sf, lineNumber) {
|
|
30
|
+
const lines = sf.getFullText().split("\n");
|
|
31
|
+
const text = lines[lineNumber - 1] ?? "";
|
|
32
|
+
// Strip leading whitespace + truncate. Keeping ~120 chars is enough
|
|
33
|
+
// to identify the line without bloating the agent's prompt.
|
|
34
|
+
return text.trim().slice(0, 160);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Find every place a symbol name is referenced in the source tree.
|
|
38
|
+
*
|
|
39
|
+
* Matches: identifier nodes with text === symbol. Includes the
|
|
40
|
+
* symbol's own definition unless `excludeDefinitions` is set.
|
|
41
|
+
*
|
|
42
|
+
* Excludes:
|
|
43
|
+
* - Comments (text-search would catch them; AST walk doesn't)
|
|
44
|
+
* - String literals (same)
|
|
45
|
+
* - JSX text content
|
|
46
|
+
*
|
|
47
|
+
* Hits the import-statement specifier separately (kind: "import")
|
|
48
|
+
* so the agent can distinguish "imported here" from "called here".
|
|
49
|
+
*/
|
|
50
|
+
export function findReferences(repoRoot, symbol, options = {}) {
|
|
51
|
+
const project = buildProject(repoRoot);
|
|
52
|
+
if (!project)
|
|
53
|
+
return [];
|
|
54
|
+
const max = options.maxResults ?? 100;
|
|
55
|
+
const results = [];
|
|
56
|
+
for (const sf of project.getSourceFiles()) {
|
|
57
|
+
if (results.length >= max)
|
|
58
|
+
break;
|
|
59
|
+
const rel = relPath(repoRoot, sf.getFilePath());
|
|
60
|
+
sf.forEachDescendant((node) => {
|
|
61
|
+
if (results.length >= max)
|
|
62
|
+
return;
|
|
63
|
+
if (!Node.isIdentifier(node))
|
|
64
|
+
return;
|
|
65
|
+
if (node.getText() !== symbol)
|
|
66
|
+
return;
|
|
67
|
+
// Determine kind: is this a definition, an import, or a reference?
|
|
68
|
+
const parent = node.getParent();
|
|
69
|
+
let kind = "reference";
|
|
70
|
+
if (parent && Node.isImportSpecifier(parent)) {
|
|
71
|
+
kind = "import";
|
|
72
|
+
}
|
|
73
|
+
else if (parent && Node.isImportClause(parent)) {
|
|
74
|
+
kind = "import";
|
|
75
|
+
}
|
|
76
|
+
else if ((Node.isFunctionDeclaration(parent) ||
|
|
77
|
+
Node.isClassDeclaration(parent) ||
|
|
78
|
+
Node.isInterfaceDeclaration(parent) ||
|
|
79
|
+
Node.isTypeAliasDeclaration(parent) ||
|
|
80
|
+
Node.isVariableDeclaration(parent) ||
|
|
81
|
+
Node.isEnumDeclaration(parent)) &&
|
|
82
|
+
parent.getNameNode?.() === node) {
|
|
83
|
+
kind = "definition";
|
|
84
|
+
}
|
|
85
|
+
if (options.excludeDefinitions && kind === "definition")
|
|
86
|
+
return;
|
|
87
|
+
const start = node.getStart();
|
|
88
|
+
const lineAndCol = sf.getLineAndColumnAtPos(start);
|
|
89
|
+
results.push({
|
|
90
|
+
file: rel,
|
|
91
|
+
line: lineAndCol.line,
|
|
92
|
+
column: lineAndCol.column,
|
|
93
|
+
context: lineContext(sf, lineAndCol.line),
|
|
94
|
+
kind,
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
return results;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Find every class that implements an interface (or every interface that
|
|
102
|
+
* extends another interface) by name. Returns the implementor's location.
|
|
103
|
+
*
|
|
104
|
+
* Catches:
|
|
105
|
+
* - `class Foo implements IBar { ... }` → implementations of `IBar`
|
|
106
|
+
* - `interface Foo extends IBar { ... }` → extensions of `IBar`
|
|
107
|
+
* - `class Foo extends Bar` → kind: "extends" (kept distinct from
|
|
108
|
+
* "implements" so the agent can tell hierarchy from interface
|
|
109
|
+
* conformance)
|
|
110
|
+
*/
|
|
111
|
+
export function findImplementations(repoRoot, interfaceName, options = {}) {
|
|
112
|
+
const project = buildProject(repoRoot);
|
|
113
|
+
if (!project)
|
|
114
|
+
return [];
|
|
115
|
+
const max = options.maxResults ?? 100;
|
|
116
|
+
const results = [];
|
|
117
|
+
for (const sf of project.getSourceFiles()) {
|
|
118
|
+
if (results.length >= max)
|
|
119
|
+
break;
|
|
120
|
+
const rel = relPath(repoRoot, sf.getFilePath());
|
|
121
|
+
for (const cls of sf.getClasses()) {
|
|
122
|
+
if (results.length >= max)
|
|
123
|
+
break;
|
|
124
|
+
// implements clauses
|
|
125
|
+
for (const impl of cls.getImplements()) {
|
|
126
|
+
if (impl.getExpression().getText() === interfaceName) {
|
|
127
|
+
const lineAndCol = sf.getLineAndColumnAtPos(cls.getStart());
|
|
128
|
+
results.push({
|
|
129
|
+
file: rel,
|
|
130
|
+
line: lineAndCol.line,
|
|
131
|
+
column: lineAndCol.column,
|
|
132
|
+
context: lineContext(sf, lineAndCol.line),
|
|
133
|
+
kind: "implements",
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// extends clause (kind: "extends")
|
|
138
|
+
const ext = cls.getExtends();
|
|
139
|
+
if (ext && ext.getExpression().getText() === interfaceName) {
|
|
140
|
+
const lineAndCol = sf.getLineAndColumnAtPos(cls.getStart());
|
|
141
|
+
results.push({
|
|
142
|
+
file: rel,
|
|
143
|
+
line: lineAndCol.line,
|
|
144
|
+
column: lineAndCol.column,
|
|
145
|
+
context: lineContext(sf, lineAndCol.line),
|
|
146
|
+
kind: "extends",
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
for (const iface of sf.getInterfaces()) {
|
|
151
|
+
if (results.length >= max)
|
|
152
|
+
break;
|
|
153
|
+
for (const ext of iface.getExtends()) {
|
|
154
|
+
if (ext.getExpression().getText() === interfaceName) {
|
|
155
|
+
const lineAndCol = sf.getLineAndColumnAtPos(iface.getStart());
|
|
156
|
+
results.push({
|
|
157
|
+
file: rel,
|
|
158
|
+
line: lineAndCol.line,
|
|
159
|
+
column: lineAndCol.column,
|
|
160
|
+
context: lineContext(sf, lineAndCol.line),
|
|
161
|
+
kind: "extends",
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return results;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Find the declaration site of a named symbol. Returns the FIRST match —
|
|
171
|
+
* a symbol can be re-declared in multiple files (TS allows this for
|
|
172
|
+
* augmenters / module declarations) but the common case is one
|
|
173
|
+
* canonical home.
|
|
174
|
+
*
|
|
175
|
+
* Scans:
|
|
176
|
+
* - function declarations
|
|
177
|
+
* - class declarations
|
|
178
|
+
* - interface declarations
|
|
179
|
+
* - type alias declarations
|
|
180
|
+
* - enum declarations
|
|
181
|
+
* - exported variable declarations
|
|
182
|
+
*/
|
|
183
|
+
export function findDefinition(repoRoot, symbol) {
|
|
184
|
+
const project = buildProject(repoRoot);
|
|
185
|
+
if (!project)
|
|
186
|
+
return null;
|
|
187
|
+
for (const sf of project.getSourceFiles()) {
|
|
188
|
+
const rel = relPath(repoRoot, sf.getFilePath());
|
|
189
|
+
const candidates = [
|
|
190
|
+
...sf.getFunctions(),
|
|
191
|
+
...sf.getClasses(),
|
|
192
|
+
...sf.getInterfaces(),
|
|
193
|
+
...sf.getTypeAliases(),
|
|
194
|
+
...sf.getEnums(),
|
|
195
|
+
...sf.getVariableDeclarations(),
|
|
196
|
+
];
|
|
197
|
+
for (const decl of candidates) {
|
|
198
|
+
const nameNode = decl.getNameNode?.();
|
|
199
|
+
const name = nameNode?.getText() ?? "";
|
|
200
|
+
if (name === symbol) {
|
|
201
|
+
const start = decl.getStart();
|
|
202
|
+
const lineAndCol = sf.getLineAndColumnAtPos(start);
|
|
203
|
+
return {
|
|
204
|
+
file: rel,
|
|
205
|
+
line: lineAndCol.line,
|
|
206
|
+
column: lineAndCol.column,
|
|
207
|
+
context: lineContext(sf, lineAndCol.line),
|
|
208
|
+
kind: "definition",
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* 0.12.0+ — render retrieval results as a compact markdown block for
|
|
217
|
+
* the agent's tool output. Each result becomes a single line:
|
|
218
|
+
* `kind | file:line:col | context`.
|
|
219
|
+
*
|
|
220
|
+
* Truncates at `max` to keep tool output under the agent's response
|
|
221
|
+
* cap. Caller passes a sensible max; default 30 is enough for the
|
|
222
|
+
* common case (most symbols have < 30 references in a focused codebase).
|
|
223
|
+
*/
|
|
224
|
+
export function renderReferences(refs, max = 30) {
|
|
225
|
+
if (refs.length === 0)
|
|
226
|
+
return "(no references found)";
|
|
227
|
+
const truncated = refs.slice(0, max);
|
|
228
|
+
const lines = truncated.map((r) => `${r.kind.padEnd(11)} | ${r.file}:${r.line}:${r.column} | ${r.context}`);
|
|
229
|
+
if (refs.length > max) {
|
|
230
|
+
lines.push(`(${refs.length - max} more truncated)`);
|
|
231
|
+
}
|
|
232
|
+
return lines.join("\n");
|
|
233
|
+
}
|
|
234
|
+
void SyntaxKind;
|
|
235
|
+
//# sourceMappingURL=retrieval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retrieval.js","sourceRoot":"","sources":["../../../src/commands/brew/retrieval.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/commands/testgen/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,eAAO,MAAM,cAAc,GAAI,gBAAgB,MAAM,
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/commands/testgen/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,eAAO,MAAM,cAAc,GAAI,gBAAgB,MAAM,WAmXuM,CAAC"}
|