@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.
@@ -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":"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"}
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":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC;;;;;;;;;;;;GAYG;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,0BAA0B,CAAC;AAC1D,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAiD3C,sEAAsE;AACtE,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO;YACL,cAAc,EAAE,yBAAyB;YACzC,OAAO,EAAE,EAAE;YACX,SAAS,EAAE,EAAE;YACb,QAAQ,EAAE,EAAE;SACb,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA6B,CAAC;QAC3D,IAAI,MAAM,CAAC,cAAc,KAAK,yBAAyB,EAAE,CAAC;YACxD,gEAAgE;YAChE,4DAA4D;YAC5D,sCAAsC;YACtC,OAAO;gBACL,cAAc,EAAE,yBAAyB;gBACzC,OAAO,EAAE,EAAE;gBACX,SAAS,EAAE,EAAE;gBACb,QAAQ,EAAE,EAAE;aACb,CAAC;QACJ,CAAC;QACD,OAAO;YACL,cAAc,EAAE,yBAAyB;YACzC,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;YAC7B,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;YACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;SAChC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,mEAAmE;QACnE,OAAO;YACL,cAAc,EAAE,yBAAyB;YACzC,OAAO,EAAE,EAAE;YACX,SAAS,EAAE,EAAE;YACb,QAAQ,EAAE,EAAE;SACb,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAsB,EACtB,KAA0B;IAE1B,MAAM,IAAI,GAAoB;QAC5B,cAAc,EAAE,yBAAyB;QACzC,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE;QAC7B,SAAS,EAAE,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE;QACjC,QAAQ,EAAE,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE;KAChC,CAAC;IAEF,kEAAkE;IAClE,8DAA8D;IAC9D,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG;gBACnB,cAAc,EAAE,KAAK,CAAC,cAAc;gBACpC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;oBACrD,CAAC,CAAC,KAAK,CAAC,WAAW;oBACnB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC;gBAC1C,SAAS,EAAE,KAAK,CAAC,QAAQ;gBACzB,OAAO,EAAE,KAAK,CAAC,MAAM;gBACrB,aAAa,EAAE,KAAK,CAAC,YAAY;gBACjC,UAAU,EAAE,KAAK,CAAC,UAAU,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrD,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB;aAClE,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG;gBACnB,cAAc,EAAE,KAAK,CAAC,QAAQ;gBAC9B,WAAW,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAC7B,SAAS,EAAE,KAAK,CAAC,QAAQ;gBACzB,OAAO,EAAE,KAAK,CAAC,MAAM;gBACrB,aAAa,EAAE,KAAK,CAAC,YAAY;gBACjC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;aACzC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,mEAAmE;IACnE,mEAAmE;IACnE,+CAA+C;IAC/C,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG;gBACzB,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,kCAAkC;gBAClD,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;oBACrD,CAAC,CAAC,KAAK,CAAC,WAAW;oBACnB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC;aAC3C,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG;gBACzB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,WAAW,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;aAC9B,CAAC;QACJ,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG;gBAC1B,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;oBAC7C,CAAC,CAAC,KAAK,CAAC,OAAO;oBACf,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC;gBACtC,YAAY,EAAE,KAAK,CAAC,IAAI;aACzB,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG;gBAC1B,OAAO,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;gBACzB,YAAY,EAAE,KAAK,CAAC,IAAI;aACzB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,eAAe,CAC7B,QAAgB,EAChB,KAAsB;IAEtB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC7D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAAgB,EAChB,KAA0B;IAE1B,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC/C,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAAsB,EACtB,aAAuB,EACvB,cAAsB,EACtB,UAAiC,EAAE;IAEnC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;IAElC,MAAM,UAAU,GAAmD,EAAE,CAAC;IACtE,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,oDAAoD;QACpD,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC;QACrE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAClC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,oEAAoE;IACpE,0DAA0D;IAC1D,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACpF,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACvD,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,SAAS;QAClC,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC;QACrE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAClC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,4DAA4D;IAC5D,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACvB,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;QAC7D,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;QAC7D,IAAI,EAAE,KAAK,EAAE;YAAE,OAAO,EAAE,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YAC9D,OAAO,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;QACjE,CAAC;QACD,OAAO,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACrC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEhC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IACzD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,UAAU,CAAC,CAAC;QACpE,IAAI,KAAK,CAAC,gBAAgB,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,gBAAgB,gBAAgB,CAAC,CAAC;QACtF,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,QAAQ,OAAO,GAAG,UAAU,GAAG,QAAQ,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CACR,mLAAmL,CACpL,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -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,WA0SuM,CAAC"}
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"}