cgraphx 1.1.0 → 1.2.0

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.
Files changed (81) hide show
  1. package/README.md +0 -1
  2. package/dist/.claude-template/skills/cgraphx/SKILL.md +3 -3
  3. package/dist/.claude-template/skills/cgraphx/agent-prompt.md +1 -1
  4. package/dist/.claude-template/skills/cgraphx-guide/SKILL.md +94 -0
  5. package/dist/.claude-template/skills/cgraphx-guide/how-to-use.html +403 -0
  6. package/dist/.claude-template/skills/clarify-requirements/SKILL.md +19 -8
  7. package/dist/.claude-template/skills/code-impact-docgen/SKILL.md +186 -176
  8. package/dist/.claude-template/skills/code-impact-docgen/template-design-html.md +357 -0
  9. package/dist/.claude-template/skills/code-impact-docgen/template-design-md.md +164 -0
  10. package/dist/.claude-template/skills/code-impact-init/SKILL.md +47 -47
  11. package/dist/.claude-template/skills/developer-timeline/SKILL.md +9 -0
  12. package/dist/.claude-template/skills/write-api-doc/SKILL.md +317 -0
  13. package/dist/.claude-template/skills/write-api-doc/template-api-html.md +422 -0
  14. package/dist/.claude-template/skills/write-plan/SKILL.md +38 -16
  15. package/dist/.claude-template/skills/write-prd/SKILL.md +32 -8
  16. package/dist/.claude-template/skills/write-spec/SKILL.md +34 -9
  17. package/dist/bin/codegraph.js +0 -100
  18. package/dist/bin/codegraph.js.map +1 -1
  19. package/dist/resolution/index.d.ts.map +1 -1
  20. package/dist/resolution/index.js +13 -0
  21. package/dist/resolution/index.js.map +1 -1
  22. package/dist/resolution/scope-index.d.ts +86 -0
  23. package/dist/resolution/scope-index.d.ts.map +1 -0
  24. package/dist/resolution/scope-index.js +143 -0
  25. package/dist/resolution/scope-index.js.map +1 -0
  26. package/dist/resolution/stdlib-blocklist.d.ts +53 -0
  27. package/dist/resolution/stdlib-blocklist.d.ts.map +1 -0
  28. package/dist/resolution/stdlib-blocklist.js +143 -0
  29. package/dist/resolution/stdlib-blocklist.js.map +1 -0
  30. package/dist/search/ast-helpers.d.ts +42 -0
  31. package/dist/search/ast-helpers.d.ts.map +1 -0
  32. package/dist/search/ast-helpers.js +106 -0
  33. package/dist/search/ast-helpers.js.map +1 -0
  34. package/dist/search/call-sites.d.ts +398 -0
  35. package/dist/search/call-sites.d.ts.map +1 -0
  36. package/dist/search/call-sites.js +1433 -0
  37. package/dist/search/call-sites.js.map +1 -0
  38. package/dist/search/context.d.ts +134 -0
  39. package/dist/search/context.d.ts.map +1 -0
  40. package/dist/search/context.js +575 -0
  41. package/dist/search/context.js.map +1 -0
  42. package/dist/search/impact.d.ts +139 -0
  43. package/dist/search/impact.d.ts.map +1 -0
  44. package/dist/search/impact.js +646 -0
  45. package/dist/search/impact.js.map +1 -0
  46. package/dist/search/related.d.ts +178 -0
  47. package/dist/search/related.d.ts.map +1 -0
  48. package/dist/search/related.js +667 -0
  49. package/dist/search/related.js.map +1 -0
  50. package/dist/search/slice.d.ts +148 -0
  51. package/dist/search/slice.d.ts.map +1 -0
  52. package/dist/search/slice.js +460 -0
  53. package/dist/search/slice.js.map +1 -0
  54. package/dist/search/snr-constants.d.ts +41 -0
  55. package/dist/search/snr-constants.d.ts.map +1 -0
  56. package/dist/search/snr-constants.js +44 -0
  57. package/dist/search/snr-constants.js.map +1 -0
  58. package/dist/search/types.d.ts +28 -0
  59. package/dist/search/types.d.ts.map +1 -0
  60. package/dist/search/types.js +12 -0
  61. package/dist/search/types.js.map +1 -0
  62. package/dist/timeline/cli.d.ts.map +1 -1
  63. package/dist/timeline/cli.js +22 -3
  64. package/dist/timeline/cli.js.map +1 -1
  65. package/dist/timeline/store.d.ts +5 -0
  66. package/dist/timeline/store.d.ts.map +1 -1
  67. package/dist/timeline/store.js +23 -3
  68. package/dist/timeline/store.js.map +1 -1
  69. package/package.json +1 -1
  70. package/scripts/agent-eval/block-cgraphx-and-gitnexus-cli-hook.sh +43 -0
  71. package/scripts/agent-eval/block-cgraphx-cli-hook.sh +32 -0
  72. package/scripts/agent-eval/block-cgraphx-cli-settings.json +16 -0
  73. package/scripts/agent-eval/cli-vs-mcp-3arm.sh +121 -0
  74. package/scripts/agent-eval/multi-tool-eval.sh +171 -0
  75. package/scripts/agent-eval/parse-cli-vs-mcp.mjs +232 -0
  76. package/scripts/agent-eval/parse-multi-tool.mjs +242 -0
  77. package/scripts/agent-eval/subagent-token-cost.py +188 -0
  78. package/dist/.claude-template/skills/code-impact-docgen/template-business-html.md +0 -242
  79. package/dist/.claude-template/skills/code-impact-docgen/template-business-md.md +0 -107
  80. package/dist/.claude-template/skills/code-impact-docgen/template-technical-html.md +0 -205
  81. package/dist/.claude-template/skills/code-impact-docgen/template-technical-md.md +0 -155
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdlib-blocklist.js","sourceRoot":"","sources":["../../src/resolution/stdlib-blocklist.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Shared small AST helpers used across the search subsystem
3
+ * (call-sites / context / slice / related / impact).
4
+ *
5
+ * Extracted in iteration-3 B-1 to eliminate cross-file duplication.
6
+ * Pure refactoring — no behavior change.
7
+ */
8
+ import type { Node as SyntaxNode } from 'web-tree-sitter';
9
+ /**
10
+ * Find the `modifiers` positional child wrapper of a declaration node.
11
+ *
12
+ * Tree-sitter-java groups annotations + modifier keywords into a `modifiers`
13
+ * wrapper, but it is NOT exposed as a named field — must iterate children by
14
+ * type. Used by `extractAnnotations` and `extractModifiers`.
15
+ */
16
+ export declare function findModifiersChild(node: SyntaxNode): SyntaxNode | null;
17
+ /**
18
+ * Walk the entire subtree rooted at `node` in document order, invoking `fn`
19
+ * on every node (including `node` itself). Pre-order traversal.
20
+ */
21
+ export declare function walkTree(node: SyntaxNode, fn: (n: SyntaxNode) => void): void;
22
+ /**
23
+ * Extract annotation short-names from a declaration's `modifiers` child.
24
+ *
25
+ * Tree-sitter-java: `modifiers` is a positional child wrapper (NOT a named
26
+ * field), holding annotation + modifier nodes. Returns normalized short-names
27
+ * prefixed with `@` (e.g. `@Override`, `@Service`), package prefix stripped.
28
+ */
29
+ export declare function extractAnnotations(node: SyntaxNode): string[];
30
+ /**
31
+ * Extract modifier keywords (public/private/static/final/abstract/etc.) from
32
+ * a declaration's `modifiers` child. Modifier keywords appear as either
33
+ * `modifier` nodes or bare text tokens; both forms are covered.
34
+ */
35
+ export declare function extractModifiers(node: SyntaxNode): string[];
36
+ /**
37
+ * Extract a short declaration snippet: the declaration line + up to 2 more
38
+ * lines (capped at 3 total) starting from the node's start row. Used by the
39
+ * slice command to preview matched declarations.
40
+ */
41
+ export declare function extractDeclSnippet(content: string, node: SyntaxNode): string;
42
+ //# sourceMappingURL=ast-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast-helpers.d.ts","sourceRoot":"","sources":["../../src/search/ast-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE1D;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI,CAKtE;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,CAM5E;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE,CAgB7D;AAYD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE,CAW3D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,CAK5E"}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ /**
3
+ * Shared small AST helpers used across the search subsystem
4
+ * (call-sites / context / slice / related / impact).
5
+ *
6
+ * Extracted in iteration-3 B-1 to eliminate cross-file duplication.
7
+ * Pure refactoring — no behavior change.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.findModifiersChild = findModifiersChild;
11
+ exports.walkTree = walkTree;
12
+ exports.extractAnnotations = extractAnnotations;
13
+ exports.extractModifiers = extractModifiers;
14
+ exports.extractDeclSnippet = extractDeclSnippet;
15
+ /**
16
+ * Find the `modifiers` positional child wrapper of a declaration node.
17
+ *
18
+ * Tree-sitter-java groups annotations + modifier keywords into a `modifiers`
19
+ * wrapper, but it is NOT exposed as a named field — must iterate children by
20
+ * type. Used by `extractAnnotations` and `extractModifiers`.
21
+ */
22
+ function findModifiersChild(node) {
23
+ for (const child of node.children) {
24
+ if (child?.type === 'modifiers')
25
+ return child;
26
+ }
27
+ return null;
28
+ }
29
+ /**
30
+ * Walk the entire subtree rooted at `node` in document order, invoking `fn`
31
+ * on every node (including `node` itself). Pre-order traversal.
32
+ */
33
+ function walkTree(node, fn) {
34
+ fn(node);
35
+ for (let i = 0; i < node.childCount; i++) {
36
+ const child = node.child(i);
37
+ if (child)
38
+ walkTree(child, fn);
39
+ }
40
+ }
41
+ /**
42
+ * Extract annotation short-names from a declaration's `modifiers` child.
43
+ *
44
+ * Tree-sitter-java: `modifiers` is a positional child wrapper (NOT a named
45
+ * field), holding annotation + modifier nodes. Returns normalized short-names
46
+ * prefixed with `@` (e.g. `@Override`, `@Service`), package prefix stripped.
47
+ */
48
+ function extractAnnotations(node) {
49
+ const out = [];
50
+ const modifiers = findModifiersChild(node);
51
+ if (!modifiers)
52
+ return out;
53
+ for (const child of modifiers.children) {
54
+ if (!child)
55
+ continue;
56
+ if (child.type === 'annotation' || child.type === 'marker_annotation') {
57
+ const name = child.childForFieldName('name')?.text;
58
+ if (name) {
59
+ // Normalize: strip package prefix, prefix with @
60
+ const shortName = name.split('.').pop() ?? name;
61
+ out.push(`@${shortName}`);
62
+ }
63
+ }
64
+ }
65
+ return out;
66
+ }
67
+ /**
68
+ * Modifier keyword set used by `extractModifiers` to recognize bare modifier
69
+ * keywords that tree-sitter-java may emit as plain tokens rather than as
70
+ * `modifier` nodes.
71
+ */
72
+ const MODIFIER_KEYWORDS = new Set([
73
+ 'public', 'private', 'protected', 'static', 'final', 'abstract',
74
+ 'synchronized', 'volatile', 'transient', 'native', 'strictfp', 'default',
75
+ ]);
76
+ /**
77
+ * Extract modifier keywords (public/private/static/final/abstract/etc.) from
78
+ * a declaration's `modifiers` child. Modifier keywords appear as either
79
+ * `modifier` nodes or bare text tokens; both forms are covered.
80
+ */
81
+ function extractModifiers(node) {
82
+ const out = [];
83
+ const modifiers = findModifiersChild(node);
84
+ if (!modifiers)
85
+ return out;
86
+ for (const child of modifiers.children) {
87
+ if (!child)
88
+ continue;
89
+ if (child.type === 'modifier' || MODIFIER_KEYWORDS.has(child.text)) {
90
+ out.push(child.text);
91
+ }
92
+ }
93
+ return out;
94
+ }
95
+ /**
96
+ * Extract a short declaration snippet: the declaration line + up to 2 more
97
+ * lines (capped at 3 total) starting from the node's start row. Used by the
98
+ * slice command to preview matched declarations.
99
+ */
100
+ function extractDeclSnippet(content, node) {
101
+ const startRow = node.startPosition.row;
102
+ const lines = content.split('\n');
103
+ const end = Math.min(startRow + 3, lines.length);
104
+ return lines.slice(startRow, end).join('\n').trim();
105
+ }
106
+ //# sourceMappingURL=ast-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast-helpers.js","sourceRoot":"","sources":["../../src/search/ast-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,398 @@
1
+ /**
2
+ * Call site search — finds method-invocation sites by name across the project.
3
+ *
4
+ * Designed as an agent-facing "structured grep": returns call sites with AST
5
+ * context (containing class/method), not raw text matches. AST naturally
6
+ * excludes comments/strings (they're not method_invocation nodes), so the
7
+ * output is signal-dense for agent consumption — saves the agent the
8
+ * comment/string/overload filtering that grep forces it to do.
9
+ *
10
+ * Does NOT depend on cgraphx's resolve pipeline. Walks source files directly
11
+ * via tree-sitter, so it works on any project (indexed or not) and avoids the
12
+ * resolve-accuracy issues that broke L3 scope-bounded on Java dotted names.
13
+ */
14
+ import type { Node as SyntaxNode } from 'web-tree-sitter';
15
+ import type { Language } from '../types';
16
+ export interface CallSite {
17
+ /** Method name as written at the call site (e.g. "createOrder"). */
18
+ methodName: string;
19
+ /** Receiver text if any (e.g. "orderService" in "orderService.createOrder()"). null for unqualified calls. */
20
+ receiverText: string | null;
21
+ /** File path relative to projectRoot. */
22
+ filePath: string;
23
+ /** 1-based line number. */
24
+ line: number;
25
+ /** 0-based column. */
26
+ column: number;
27
+ /** Enclosing class/interface/enum/record name, if inside one. */
28
+ containingClass: string | null;
29
+ /** Enclosing method/constructor name, if inside one. */
30
+ containingMethod: string | null;
31
+ /** Trimmed source snippet (≤ 3 lines around the call). */
32
+ snippet: string;
33
+ /** Confidence label — lets the agent judge without fake-precise numbers. */
34
+ confidence: 'high' | 'probable' | 'possible';
35
+ /** Human-readable reason for the confidence label. */
36
+ reason: string;
37
+ /**
38
+ * Cross-boundary signal — set when the receiver is a field injected by
39
+ * Spring/CDI (@Resource / @Autowired / @Inject). Such calls cross module
40
+ * or service boundaries (often via HTTP/RPC stubs), so they are the high-
41
+ * value hops when tracing a flow. Absent → not an injected-field call.
42
+ */
43
+ crossBoundary?: {
44
+ kind: 'injected';
45
+ fieldType: string;
46
+ annotation: string;
47
+ };
48
+ /**
49
+ * Same-class business-verb signal — set when receiverText is null
50
+ * (unqualified call), the method name matches a business-verb regex,
51
+ * AND the method is declared in the same class as the calling method
52
+ * (sibling business method). Closes the "(unqualified) put/toString
53
+ * buries real siblings" gap surfaced by snr-probe sample 3.
54
+ */
55
+ sameClassBiz?: boolean;
56
+ /**
57
+ * SNR score (signal-to-noise rank) — higher = more likely the agent
58
+ * needs to follow this hop. Computed by computeSnrScore() per spec §2.
59
+ * Set after extraction, before sort.
60
+ */
61
+ snrScore?: number;
62
+ /**
63
+ * Tier assigned by applyTieredBudget(): 'essential' (always emitted,
64
+ * one-line), 'recommended' (essential + 1–2 line snippet), or
65
+ * 'optional' (recommended + body + imports).
66
+ */
67
+ tier?: 'essential' | 'recommended' | 'optional';
68
+ }
69
+ export interface SearchCallOptions {
70
+ /** Max call sites to return after ranking. Default 20. */
71
+ topK?: number;
72
+ /**
73
+ * Max call sites per distinct receiver (clustering). Default 3.
74
+ *
75
+ * High-frequency methods (isNotEmpty, valueOf, nonNull, ...) get called by
76
+ * many different receivers. Without clustering, topK just returns the most-
77
+ * common receiver's first K calls — the agent sees 20 CollectionUtils.isNotEmpty
78
+ * and misses StringUtils.isNotEmpty entirely. topPerReceiver ensures each
79
+ * receiver gets representation up to this cap, so the agent sees the call
80
+ * distribution across receivers in one query.
81
+ */
82
+ topPerReceiver?: number;
83
+ /** Approximate char budget for the total result. Default 4000. */
84
+ budget?: number;
85
+ /** Filter by receiver text (e.g. "orderService" to find only `orderService.X()`). */
86
+ receiver?: string;
87
+ /** Languages to scan. Default ['java', 'kotlin']. */
88
+ languages?: Language[];
89
+ /** Directory globs to exclude (in addition to built-in defaults). */
90
+ excludeDirs?: string[];
91
+ }
92
+ export interface SearchCallResult {
93
+ query: string;
94
+ kind: 'call';
95
+ totalFound: number;
96
+ returned: number;
97
+ /** Number of distinct receivers in the full result set (before clustering). */
98
+ distinctReceivers: number;
99
+ /**
100
+ * Per-receiver summary — how many calls each receiver has total, and how
101
+ * many were returned after clustering. Receivers with `returned: 0` were
102
+ * truncated by topK — listed so the agent knows they exist.
103
+ *
104
+ * `maxSnrScore` is the highest SNR score among this receiver's call sites
105
+ * (after sort, that's group[0].snrScore). Exposed so the formatter can order
106
+ * groups by signal strength rather than by size. Absent only if the group
107
+ * is somehow empty (shouldn't happen in practice).
108
+ */
109
+ receivers: Array<{
110
+ receiver: string | null;
111
+ total: number;
112
+ returned: number;
113
+ maxSnrScore?: number;
114
+ }>;
115
+ omitted: {
116
+ /** AST excludes these by construction — reported as 0 for transparency. */
117
+ commentMatches: number;
118
+ stringMatches: number;
119
+ /** Files skipped because they didn't contain the methodName as text (pre-parse filter). */
120
+ skippedFiles: number;
121
+ /** Call sites filtered out by `receiver` option. */
122
+ filteredByReceiver: number;
123
+ /** Call sites cut by topK. */
124
+ truncatedByTopK: number;
125
+ /** Call sites cut by budget. */
126
+ truncatedByBudget: number;
127
+ };
128
+ callSites: CallSite[];
129
+ }
130
+ export declare const DEFAULT_EXCLUDE_DIRS: Set<string>;
131
+ export declare function searchCallSites(projectRoot: string, methodName: string, options?: SearchCallOptions): Promise<SearchCallResult>;
132
+ /**
133
+ * Tiebreaker-only comparator for callers-mode call sites.
134
+ *
135
+ * Previously this was the primary ranking for `searchCallSites` (confidence +
136
+ * path-depth, as `compareCallSites`). After iteration-3 B-2 callers switched
137
+ * to SNR-driven ranking via `compareBySnr`, the SNR tiebreaker chain
138
+ * (filePath depth asc + filePath localeCompare + line asc, per spec §2.4)
139
+ * already covers every case this comparator handled, so the callers path no
140
+ * longer calls it.
141
+ *
142
+ * Exported as a pure tiebreaker for any external/manual sort that wants a
143
+ * stable order without caring about SNR — symmetric to `compareBySnr` minus
144
+ * the SNR primary key.
145
+ */
146
+ export declare function compareCallSitesTiebreak(a: CallSite, b: CallSite): number;
147
+ export declare function listJavaFamilyFiles(projectRoot: string, excludeDirs: Set<string>): Promise<string[]>;
148
+ /**
149
+ * Format the result as agent-friendly markdown. Compact by default to keep
150
+ * token cost low — agent gets signal density without reading whole files.
151
+ */
152
+ export declare function formatCallSitesResult(result: SearchCallResult, options?: {
153
+ explain?: boolean;
154
+ }): string;
155
+ export interface CalleeOptions {
156
+ topK?: number;
157
+ topPerReceiver?: number;
158
+ budget?: number;
159
+ languages?: Language[];
160
+ /**
161
+ * Force at least the 'recommended' tier for every emitted callee
162
+ * (1–2 line snippet + enclosing context). Deprecated alias retained
163
+ * for back-compat — `-b` large enough achieves the same effect now.
164
+ */
165
+ withSnippet?: boolean;
166
+ /**
167
+ * Force the 'optional' tier for every emitted callee (full body +
168
+ * imports). Ignores the budget ceiling. New in the SNR/tiered-budget
169
+ * round per spec §4.2.
170
+ */
171
+ full?: boolean;
172
+ }
173
+ export interface CalleeResult {
174
+ /** Original symbol input. */
175
+ symbol: string;
176
+ /** Resolved Class#method. */
177
+ methodQualifiedName: string;
178
+ /** File where the method is defined (relative to projectRoot). */
179
+ filePath: string;
180
+ /** Method body range. */
181
+ startLine: number;
182
+ endLine: number;
183
+ totalFound: number;
184
+ returned: number;
185
+ distinctReceivers: number;
186
+ receivers: Array<{
187
+ receiver: string | null;
188
+ total: number;
189
+ returned: number;
190
+ /** Present when this receiver is an injected field — group is a cross-boundary candidate. */
191
+ crossBoundary?: {
192
+ fieldType: string;
193
+ annotation: string;
194
+ };
195
+ /** True when at least one call in this group is a same-class biz-verb call. */
196
+ sameClassBiz?: boolean;
197
+ /** Highest SNR score among this receiver's calls — drives group ordering. */
198
+ topSnrScore?: number;
199
+ }>;
200
+ /** All injected fields declared in the method's enclosing class. */
201
+ injectedFields: Array<{
202
+ fieldName: string;
203
+ fieldType: string;
204
+ annotation: string;
205
+ }>;
206
+ omitted: {
207
+ truncatedByTopK: number;
208
+ truncatedByBudget: number;
209
+ };
210
+ callees: CallSite[];
211
+ }
212
+ /**
213
+ * Resolve a symbol reference to its AST method_declaration node.
214
+ *
215
+ * Supported formats:
216
+ * - `file:line` — absolute precision; finds the method_declaration containing that line
217
+ * - `Class#method` — text-search for `class Class`, then AST-verifies the method inside
218
+ * - `pkg.Class#method` — same as above, pkg is currently ignored (text search by Class name only)
219
+ */
220
+ export declare function resolveMethodSymbol(projectRoot: string, symbol: string, languages: Language[]): Promise<{
221
+ file: string;
222
+ methodNode: SyntaxNode;
223
+ methodQualifiedName: string;
224
+ }>;
225
+ /**
226
+ * Find the nearest enclosing named type declaration (class/interface/enum/record)
227
+ * for a node. Returns the declaration node itself, not just its name.
228
+ */
229
+ export declare function findEnclosingClassType(node: SyntaxNode): SyntaxNode | null;
230
+ /**
231
+ * Walk a class body, find every field_declaration whose modifiers carry an
232
+ * injection annotation (@Resource / @Autowired / @Inject), and return a map
233
+ * keyed by field name. Used to mark cross-boundary callees.
234
+ *
235
+ * Java/Kotlin grammar: `field_declaration` has `modifiers` (list of modifier
236
+ * + annotation nodes) and `type`, and contains one or more `variable_declarator`
237
+ * nodes (each with a `name`). Multiple declarators share the same type+annotation.
238
+ *
239
+ * Annotations we recognize (Java):
240
+ * - jakarta/javax.annotation.Resource — JSR-250
241
+ * - org.springframework.beans.factory.annotation.Autowired — Spring
242
+ * - jakarta.inject.Inject — JSR-330
243
+ *
244
+ * Kotlin equivalent (kotlinx injected via spring) uses the same annotation types
245
+ * on `property_declaration`; we don't yet handle Kotlin property syntax, so
246
+ * Kotlin injection is under-detected — fine for the Java-first hx use case.
247
+ *
248
+ * The annotation short-name set lives in ./snr-constants.ts (INJECTION_ANNOTATIONS).
249
+ */
250
+ export declare function extractInjectedFields(classNode: SyntaxNode): Map<string, {
251
+ fieldName: string;
252
+ fieldType: string;
253
+ annotation: string;
254
+ }>;
255
+ /**
256
+ * Find source files that textually look like they declare `class className`.
257
+ * Uses a fast regex pre-filter; AST verification happens later in findMethodInClass.
258
+ */
259
+ export declare function findFilesWithClass(projectRoot: string, className: string): Promise<string[]>;
260
+ /** True if any camelCase segment of `name` starts with a biz verb. */
261
+ export declare function containsBizVerbSegment(name: string): boolean;
262
+ /**
263
+ * Extract the root identifier from a (possibly chained/cast) receiver.
264
+ * `((BxError) e)` → `e`; `sysCustomerOrder.getOrderInfo()` → `sysCustomerOrder`;
265
+ * `prods` → `prods`. Returns the LAST identifier in the first dot-segment,
266
+ * which correctly skips cast type names.
267
+ */
268
+ export declare function rootIdentifier(receiver: string): string;
269
+ /**
270
+ * Compute the SNR score for a callee (spec §2).
271
+ *
272
+ * Receiver features are mutually exclusive and applied first; method-name
273
+ * features apply on top UNLESS the receiver is xBdy (short-circuit per §2.1).
274
+ *
275
+ * xBdy callees short-circuit to +100 — every other consideration is noise
276
+ * relative to "this is an injected business collaborator".
277
+ */
278
+ export declare function computeSnrScore(site: CallSite): number;
279
+ /**
280
+ * SNR score breakdown — re-derives the score while tracking which rules
281
+ * fired. Used by the `--explain` flag on `calls` / `impact` so an agent can
282
+ * see why a callee ranked where it did. Total is always equal to
283
+ * `computeSnrScore(site)` (the former delegates to this).
284
+ *
285
+ * `receiver` is the receiver-axis contribution, `method` is the method-name-
286
+ * axis contribution. `matchedRules` names every rule that fired (signal and
287
+ * noise alike), in the order applied. xBdy short-circuits with a single
288
+ * `xBdy` rule.
289
+ */
290
+ export interface SnrBreakdown {
291
+ receiver: number;
292
+ method: number;
293
+ total: number;
294
+ matchedRules: string[];
295
+ }
296
+ export declare function computeSnrBreakdown(site: CallSite): SnrBreakdown;
297
+ /**
298
+ * Format an SNR breakdown as a single-line score explanation for the
299
+ * `--explain` flag. Shape:
300
+ * `+100 xBdy = 100`
301
+ * `+60 serviceIsh +30 bizVerb = 90`
302
+ * `-60 jdkStdlib -80 objectMethod = -140`
303
+ * `+10 unqualified -25 mapOp = -15`
304
+ *
305
+ * Neutral axes (no rule fired) are omitted to keep the breakdown scannable.
306
+ *
307
+ * Only fires on non-impact call sites — impact call sites have hop decay and
308
+ * use `formatImpactSnrBreakdown` instead.
309
+ */
310
+ export declare function formatSnrBreakdown(site: CallSite): string;
311
+ /**
312
+ * Compare two callees by SNR score desc, then by filePath depth asc (shallower
313
+ * = more central), then by line asc (call order). Stable tiebreaker chain.
314
+ */
315
+ export declare function compareBySnr(a: CallSite, b: CallSite): number;
316
+ /**
317
+ * Collect names of all method/constructor declarations directly in a class body.
318
+ * Used by same-class biz-verb detection (§2.3) — when an unqualified call's
319
+ * method name is in this set AND matches a biz-verb regex, mark the callee as
320
+ * `sameClassBiz: true`.
321
+ *
322
+ * Walks only direct children of the class_body (no nested-class descent) so
323
+ * that a method declared in an inner class isn't mistaken for a sibling of
324
+ * the outer class's methods.
325
+ */
326
+ export declare function collectSameClassMethodNames(classNode: SyntaxNode): Set<string>;
327
+ /**
328
+ * Mark `sameClassBiz: true` on each callee that satisfies §2.3:
329
+ * - receiverText is null (unqualified call)
330
+ * - methodName contains a biz-verb segment (camelCase-aware — catches
331
+ * `saleOrderSceneGroupCommit`, which the strict prefix regex misses)
332
+ * - methodName is declared in the same class
333
+ *
334
+ * Returns a new array (does not mutate input). Exported for unit tests;
335
+ * production path inlines the same logic in `searchCallees` to avoid the
336
+ * extra array copy.
337
+ */
338
+ export declare function markSameClassBiz(callees: CallSite[], siblingNames: Set<string>): CallSite[];
339
+ /**
340
+ * Find callees of a method — what does it call internally?
341
+ * Walks the method body and collects every method_invocation, clustered by receiver.
342
+ *
343
+ * Ranking (spec §2):
344
+ * 1. crossBoundary (`@Resource`/`@Autowired`/`@Inject`) — SNR +100
345
+ * 2. sameClassBiz (unqualified + biz-verb + declared in same class) — SNR +50
346
+ * 3. service-ish receiver name — SNR +60
347
+ * 4. JDK/Apache stdlib, stream chains, param/local VO — negative scores
348
+ * 5. method-name patterns stacked on top (except for xBdy which short-circuits)
349
+ *
350
+ * Cross-boundary detection walks the enclosing class for injected field
351
+ * declarations; same-class biz detection walks it for sibling method names.
352
+ * Both feed into `computeSnrScore`, which is what the sort uses.
353
+ *
354
+ * Tiered budget (spec §3): essential tier always emitted for every kept
355
+ * callee; recommended/optional tiers filled in SNR order while budget
356
+ * remains. `withSnippet` forces minimum recommended tier; `full` forces
357
+ * optional tier and ignores the budget ceiling.
358
+ */
359
+ export declare function searchCallees(projectRoot: string, symbol: string, options?: CalleeOptions): Promise<CalleeResult>;
360
+ export interface TieredBudgetResult {
361
+ tiered: CallSite[];
362
+ truncatedByBudget: number;
363
+ }
364
+ /**
365
+ * Assign each callee a `tier` ('essential' | 'recommended' | 'optional')
366
+ * according to spec §3.2.
367
+ *
368
+ * `sorted` MUST be pre-sorted by SNR desc (use compareBySnr).
369
+ */
370
+ export declare function applyTieredBudget(sorted: CallSite[], budget: number, opts?: {
371
+ forceRecommended?: boolean;
372
+ forceOptional?: boolean;
373
+ }): TieredBudgetResult;
374
+ /**
375
+ * Format callees result as agent-friendly markdown.
376
+ *
377
+ * Three-tier output per spec §3.1:
378
+ * essential — one line per call (always emitted)
379
+ * recommended — + 1–2 line snippet + enclosing Class#method
380
+ * optional — same shape as recommended in this MVP (deeper snippet
381
+ * window / imports / field decls deferred — agent can
382
+ * `Read file:line` if it needs that depth)
383
+ *
384
+ * Per-callee `tier` is set by `applyTieredBudget` (or forced via the
385
+ * `withSnippet`/`full` opts on `searchCallees`). Receivers are listed in
386
+ * SNR order — groups whose top callee scores higher come first, so
387
+ * xBdy/sibling groups surface at the top and pure-noise groups
388
+ * (CollectionUtils, Objects) sink to the bottom even when they have many
389
+ * calls.
390
+ *
391
+ * Empty callees (spec §5): methods with 0 internal calls get a friendly
392
+ * message instead of "0 across 0 receivers, returning 0" (which reads as
393
+ * an error).
394
+ */
395
+ export declare function formatCalleesResult(result: CalleeResult, options?: {
396
+ explain?: boolean;
397
+ }): string;
398
+ //# sourceMappingURL=call-sites.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"call-sites.d.ts","sourceRoot":"","sources":["../../src/search/call-sites.ts"],"names":[],"mappings":"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"}