cgraphx 1.1.0 → 1.3.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 (201) hide show
  1. package/README.md +0 -1
  2. package/dist/.claude-template/hooks/precommit-check/precommit-check.cjs +90 -0
  3. package/dist/.claude-template/skills/cgraphx/SKILL.md +3 -3
  4. package/dist/.claude-template/skills/cgraphx/agent-prompt.md +1 -1
  5. package/dist/.claude-template/skills/cgraphx-guide/SKILL.md +94 -0
  6. package/dist/.claude-template/skills/cgraphx-guide/how-to-use.html +424 -0
  7. package/dist/.claude-template/skills/clarify-requirements/SKILL.md +19 -8
  8. package/dist/.claude-template/skills/code-impact-docgen/SKILL.md +186 -176
  9. package/dist/.claude-template/skills/code-impact-docgen/template-design-html.md +357 -0
  10. package/dist/.claude-template/skills/code-impact-docgen/template-design-md.md +164 -0
  11. package/dist/.claude-template/skills/code-impact-init/SKILL.md +47 -47
  12. package/dist/.claude-template/skills/developer-timeline/SKILL.md +9 -0
  13. package/dist/.claude-template/skills/precommit-review/SKILL.md +50 -0
  14. package/dist/.claude-template/skills/run-api-test/SKILL.md +187 -0
  15. package/dist/.claude-template/skills/run-api-test/assets/template-test-report.md +103 -0
  16. package/dist/.claude-template/skills/run-api-test/assets/template-test-verify.jsonl +5 -0
  17. package/dist/.claude-template/skills/run-api-test/references/bru-run.md +60 -0
  18. package/dist/.claude-template/skills/run-api-test/references/db-verification.md +81 -0
  19. package/dist/.claude-template/skills/run-api-test/references/report-format.md +104 -0
  20. package/dist/.claude-template/skills/run-api-test/references/service-readiness.md +61 -0
  21. package/dist/.claude-template/skills/run-api-test/references/test-scope.md +64 -0
  22. package/dist/.claude-template/skills/write-api/SKILL.md +150 -0
  23. package/dist/.claude-template/skills/write-api/assets/template-api-spec.md +112 -0
  24. package/dist/.claude-template/skills/write-api/assets/template-request.bru +75 -0
  25. package/dist/.claude-template/skills/write-api/references/ai-prompts.md +133 -0
  26. package/dist/.claude-template/skills/write-api/references/api-spec-format.md +108 -0
  27. package/dist/.claude-template/skills/write-api/references/bru-format.md +144 -0
  28. package/dist/.claude-template/skills/write-api/references/collection-layout.md +81 -0
  29. package/dist/.claude-template/skills/write-api/references/environment-setup.md +105 -0
  30. package/dist/.claude-template/skills/write-api/references/interface-scope.md +74 -0
  31. package/dist/.claude-template/skills/write-api-doc/SKILL.md +317 -0
  32. package/dist/.claude-template/skills/write-api-doc/template-api-html.md +422 -0
  33. package/dist/.claude-template/skills/write-plan/SKILL.md +38 -16
  34. package/dist/.claude-template/skills/write-prd/SKILL.md +32 -8
  35. package/dist/.claude-template/skills/write-spec/SKILL.md +34 -9
  36. package/dist/api-test/ai-fields.d.ts +37 -0
  37. package/dist/api-test/ai-fields.d.ts.map +1 -0
  38. package/dist/api-test/ai-fields.js +114 -0
  39. package/dist/api-test/ai-fields.js.map +1 -0
  40. package/dist/api-test/assemble.d.ts +76 -0
  41. package/dist/api-test/assemble.d.ts.map +1 -0
  42. package/dist/api-test/assemble.js +185 -0
  43. package/dist/api-test/assemble.js.map +1 -0
  44. package/dist/api-test/bru-cli-invoker.d.ts +72 -0
  45. package/dist/api-test/bru-cli-invoker.d.ts.map +1 -0
  46. package/dist/api-test/bru-cli-invoker.js +169 -0
  47. package/dist/api-test/bru-cli-invoker.js.map +1 -0
  48. package/dist/api-test/bru-report-parser.d.ts +24 -0
  49. package/dist/api-test/bru-report-parser.d.ts.map +1 -0
  50. package/dist/api-test/bru-report-parser.js +110 -0
  51. package/dist/api-test/bru-report-parser.js.map +1 -0
  52. package/dist/api-test/bru-runner.d.ts +101 -0
  53. package/dist/api-test/bru-runner.d.ts.map +1 -0
  54. package/dist/api-test/bru-runner.js +316 -0
  55. package/dist/api-test/bru-runner.js.map +1 -0
  56. package/dist/api-test/bru-writer.d.ts +52 -0
  57. package/dist/api-test/bru-writer.d.ts.map +1 -0
  58. package/dist/api-test/bru-writer.js +159 -0
  59. package/dist/api-test/bru-writer.js.map +1 -0
  60. package/dist/api-test/call-chain-extractor.d.ts +80 -0
  61. package/dist/api-test/call-chain-extractor.d.ts.map +1 -0
  62. package/dist/api-test/call-chain-extractor.js +179 -0
  63. package/dist/api-test/call-chain-extractor.js.map +1 -0
  64. package/dist/api-test/cli.d.ts +133 -0
  65. package/dist/api-test/cli.d.ts.map +1 -0
  66. package/dist/api-test/cli.js +1009 -0
  67. package/dist/api-test/cli.js.map +1 -0
  68. package/dist/api-test/config.d.ts +75 -0
  69. package/dist/api-test/config.d.ts.map +1 -0
  70. package/dist/api-test/config.js +406 -0
  71. package/dist/api-test/config.js.map +1 -0
  72. package/dist/api-test/db-query-cli.d.ts +51 -0
  73. package/dist/api-test/db-query-cli.d.ts.map +1 -0
  74. package/dist/api-test/db-query-cli.js +119 -0
  75. package/dist/api-test/db-query-cli.js.map +1 -0
  76. package/dist/api-test/enhance-prepare.d.ts +111 -0
  77. package/dist/api-test/enhance-prepare.d.ts.map +1 -0
  78. package/dist/api-test/enhance-prepare.js +425 -0
  79. package/dist/api-test/enhance-prepare.js.map +1 -0
  80. package/dist/api-test/enhance-write.d.ts +28 -0
  81. package/dist/api-test/enhance-write.d.ts.map +1 -0
  82. package/dist/api-test/enhance-write.js +145 -0
  83. package/dist/api-test/enhance-write.js.map +1 -0
  84. package/dist/api-test/errors.d.ts +48 -0
  85. package/dist/api-test/errors.d.ts.map +1 -0
  86. package/dist/api-test/errors.js +76 -0
  87. package/dist/api-test/errors.js.map +1 -0
  88. package/dist/api-test/field-extractor.d.ts +98 -0
  89. package/dist/api-test/field-extractor.d.ts.map +1 -0
  90. package/dist/api-test/field-extractor.js +327 -0
  91. package/dist/api-test/field-extractor.js.map +1 -0
  92. package/dist/api-test/impl-finder.d.ts +37 -0
  93. package/dist/api-test/impl-finder.d.ts.map +1 -0
  94. package/dist/api-test/impl-finder.js +54 -0
  95. package/dist/api-test/impl-finder.js.map +1 -0
  96. package/dist/api-test/index.d.ts +41 -0
  97. package/dist/api-test/index.d.ts.map +1 -0
  98. package/dist/api-test/index.js +124 -0
  99. package/dist/api-test/index.js.map +1 -0
  100. package/dist/api-test/java-parser.d.ts +89 -0
  101. package/dist/api-test/java-parser.d.ts.map +1 -0
  102. package/dist/api-test/java-parser.js +508 -0
  103. package/dist/api-test/java-parser.js.map +1 -0
  104. package/dist/api-test/md-writer.d.ts +49 -0
  105. package/dist/api-test/md-writer.d.ts.map +1 -0
  106. package/dist/api-test/md-writer.js +202 -0
  107. package/dist/api-test/md-writer.js.map +1 -0
  108. package/dist/api-test/parser-httpservice.d.ts +91 -0
  109. package/dist/api-test/parser-httpservice.d.ts.map +1 -0
  110. package/dist/api-test/parser-httpservice.js +271 -0
  111. package/dist/api-test/parser-httpservice.js.map +1 -0
  112. package/dist/api-test/report.d.ts +188 -0
  113. package/dist/api-test/report.d.ts.map +1 -0
  114. package/dist/api-test/report.js +522 -0
  115. package/dist/api-test/report.js.map +1 -0
  116. package/dist/api-test/snapshot.d.ts +26 -0
  117. package/dist/api-test/snapshot.d.ts.map +1 -0
  118. package/dist/api-test/snapshot.js +150 -0
  119. package/dist/api-test/snapshot.js.map +1 -0
  120. package/dist/api-test/test-history.d.ts +48 -0
  121. package/dist/api-test/test-history.d.ts.map +1 -0
  122. package/dist/api-test/test-history.js +122 -0
  123. package/dist/api-test/test-history.js.map +1 -0
  124. package/dist/api-test/types.d.ts +174 -0
  125. package/dist/api-test/types.d.ts.map +1 -0
  126. package/dist/api-test/types.js +13 -0
  127. package/dist/api-test/types.js.map +1 -0
  128. package/dist/api-test/verify-prepare.d.ts +30 -0
  129. package/dist/api-test/verify-prepare.d.ts.map +1 -0
  130. package/dist/api-test/verify-prepare.js +150 -0
  131. package/dist/api-test/verify-prepare.js.map +1 -0
  132. package/dist/api-test/verify-write.d.ts +31 -0
  133. package/dist/api-test/verify-write.d.ts.map +1 -0
  134. package/dist/api-test/verify-write.js +159 -0
  135. package/dist/api-test/verify-write.js.map +1 -0
  136. package/dist/bin/codegraph.js +0 -100
  137. package/dist/bin/codegraph.js.map +1 -1
  138. package/dist/dbquery/dump-schema.d.ts +46 -0
  139. package/dist/dbquery/dump-schema.d.ts.map +1 -0
  140. package/dist/dbquery/dump-schema.js +379 -0
  141. package/dist/dbquery/dump-schema.js.map +1 -0
  142. package/dist/installer/targets/claude.d.ts +15 -0
  143. package/dist/installer/targets/claude.d.ts.map +1 -1
  144. package/dist/installer/targets/claude.js +53 -0
  145. package/dist/installer/targets/claude.js.map +1 -1
  146. package/dist/resolution/index.d.ts.map +1 -1
  147. package/dist/resolution/index.js +13 -0
  148. package/dist/resolution/index.js.map +1 -1
  149. package/dist/resolution/scope-index.d.ts +86 -0
  150. package/dist/resolution/scope-index.d.ts.map +1 -0
  151. package/dist/resolution/scope-index.js +143 -0
  152. package/dist/resolution/scope-index.js.map +1 -0
  153. package/dist/resolution/stdlib-blocklist.d.ts +53 -0
  154. package/dist/resolution/stdlib-blocklist.d.ts.map +1 -0
  155. package/dist/resolution/stdlib-blocklist.js +143 -0
  156. package/dist/resolution/stdlib-blocklist.js.map +1 -0
  157. package/dist/search/ast-helpers.d.ts +42 -0
  158. package/dist/search/ast-helpers.d.ts.map +1 -0
  159. package/dist/search/ast-helpers.js +106 -0
  160. package/dist/search/ast-helpers.js.map +1 -0
  161. package/dist/search/call-sites.d.ts +398 -0
  162. package/dist/search/call-sites.d.ts.map +1 -0
  163. package/dist/search/call-sites.js +1433 -0
  164. package/dist/search/call-sites.js.map +1 -0
  165. package/dist/search/context.d.ts +134 -0
  166. package/dist/search/context.d.ts.map +1 -0
  167. package/dist/search/context.js +575 -0
  168. package/dist/search/context.js.map +1 -0
  169. package/dist/search/impact.d.ts +139 -0
  170. package/dist/search/impact.d.ts.map +1 -0
  171. package/dist/search/impact.js +646 -0
  172. package/dist/search/impact.js.map +1 -0
  173. package/dist/search/related.d.ts +178 -0
  174. package/dist/search/related.d.ts.map +1 -0
  175. package/dist/search/related.js +667 -0
  176. package/dist/search/related.js.map +1 -0
  177. package/dist/search/slice.d.ts +148 -0
  178. package/dist/search/slice.d.ts.map +1 -0
  179. package/dist/search/slice.js +460 -0
  180. package/dist/search/slice.js.map +1 -0
  181. package/dist/search/snr-constants.d.ts +41 -0
  182. package/dist/search/snr-constants.d.ts.map +1 -0
  183. package/dist/search/snr-constants.js +44 -0
  184. package/dist/search/snr-constants.js.map +1 -0
  185. package/dist/search/types.d.ts +28 -0
  186. package/dist/search/types.d.ts.map +1 -0
  187. package/dist/search/types.js +12 -0
  188. package/dist/search/types.js.map +1 -0
  189. package/dist/timeline/cli.d.ts.map +1 -1
  190. package/dist/timeline/cli.js +22 -3
  191. package/dist/timeline/cli.js.map +1 -1
  192. package/dist/timeline/store.d.ts +5 -0
  193. package/dist/timeline/store.d.ts.map +1 -1
  194. package/dist/timeline/store.js +23 -3
  195. package/dist/timeline/store.js.map +1 -1
  196. package/package.json +1 -1
  197. package/scripts/agent-eval/subagent-token-cost.py +188 -0
  198. package/dist/.claude-template/skills/code-impact-docgen/template-business-html.md +0 -242
  199. package/dist/.claude-template/skills/code-impact-docgen/template-business-md.md +0 -107
  200. package/dist/.claude-template/skills/code-impact-docgen/template-technical-html.md +0 -205
  201. package/dist/.claude-template/skills/code-impact-docgen/template-technical-md.md +0 -155
@@ -0,0 +1,575 @@
1
+ "use strict";
2
+ /**
3
+ * Method context — static structural info about where a method lives.
4
+ *
5
+ * Complements `cgraphx calls` (dynamic call edges) with the STATIC shape:
6
+ * signature, enclosing class hierarchy, injected fields, sibling methods,
7
+ * project imports. Use when the agent wants to understand "what environment
8
+ * does this method operate in" rather than "what does it call" or "who
9
+ * calls it".
10
+ *
11
+ * Output sections (per spec, "Standard" scope):
12
+ * 1. Method signature (modifiers + return type + name + params + annotations)
13
+ * 2. Enclosing class (name + extends + implements)
14
+ * 3. Injected fields (@Resource / @Autowired / @Inject) — already have helper
15
+ * 4. Sibling methods (SNR-ranked, biz verbs first, top 10 default)
16
+ * 5. Project imports (filter java.* / javax.* / jakarta.* stdlib)
17
+ *
18
+ * Isolation: lives under `src/search/`, imports nothing from the indexed
19
+ * pipeline. Reuses call-sites helpers (resolveMethodSymbol, findEnclosingClassType,
20
+ * extractInjectedFields, collectSameClassMethodNames) which were promoted
21
+ * to `export` for impact.ts.
22
+ */
23
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
24
+ if (k2 === undefined) k2 = k;
25
+ var desc = Object.getOwnPropertyDescriptor(m, k);
26
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
27
+ desc = { enumerable: true, get: function() { return m[k]; } };
28
+ }
29
+ Object.defineProperty(o, k2, desc);
30
+ }) : (function(o, m, k, k2) {
31
+ if (k2 === undefined) k2 = k;
32
+ o[k2] = m[k];
33
+ }));
34
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
35
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
36
+ }) : function(o, v) {
37
+ o["default"] = v;
38
+ });
39
+ var __importStar = (this && this.__importStar) || (function () {
40
+ var ownKeys = function(o) {
41
+ ownKeys = Object.getOwnPropertyNames || function (o) {
42
+ var ar = [];
43
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
44
+ return ar;
45
+ };
46
+ return ownKeys(o);
47
+ };
48
+ return function (mod) {
49
+ if (mod && mod.__esModule) return mod;
50
+ var result = {};
51
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
52
+ __setModuleDefault(result, mod);
53
+ return result;
54
+ };
55
+ })();
56
+ Object.defineProperty(exports, "__esModule", { value: true });
57
+ exports.searchContext = searchContext;
58
+ exports.extractInterfaceAnnotations = extractInterfaceAnnotations;
59
+ exports.formatContextResult = formatContextResult;
60
+ const fs_1 = require("fs");
61
+ const path = __importStar(require("path"));
62
+ const grammars_1 = require("../extraction/grammars");
63
+ const call_sites_1 = require("./call-sites");
64
+ const ast_helpers_1 = require("./ast-helpers");
65
+ const snr_constants_1 = require("./snr-constants");
66
+ // ---------------------------------------------------------------------------
67
+ // Main entry
68
+ // ---------------------------------------------------------------------------
69
+ async function searchContext(projectRoot, symbol, options = {}) {
70
+ const { topSiblings = 10, languages = ['java', 'kotlin'], filterStdlibImports = true, } = options;
71
+ await (0, grammars_1.loadGrammarsForLanguages)(languages);
72
+ // 1. Resolve symbol → method_declaration AST node
73
+ const resolved = await (0, call_sites_1.resolveMethodSymbol)(projectRoot, symbol, languages);
74
+ const content = await fs_1.promises.readFile(resolved.file, 'utf-8');
75
+ const relPath = path.relative(projectRoot, resolved.file).replace(/\\/g, '/');
76
+ // 2. Extract method signature
77
+ const method = extractMethodSignature(resolved.methodNode);
78
+ // 3. Find enclosing class + extract hierarchy
79
+ const classNode = (0, call_sites_1.findEnclosingClassType)(resolved.methodNode);
80
+ const enclosingClass = classNode ? extractClassHierarchy(classNode) : null;
81
+ // 4. Injected fields (reuse call-sites helper)
82
+ const injectedFields = classNode
83
+ ? [...(0, call_sites_1.extractInjectedFields)(classNode).values()]
84
+ : [];
85
+ // 5. Sibling methods (SNR-ranked, top N)
86
+ const siblings = classNode
87
+ ? extractSiblingMethods(classNode, resolved.methodNode, topSiblings)
88
+ : [];
89
+ // 6. Imports (filtered)
90
+ const fileNode = getFileRootNode(content, resolved.file, languages);
91
+ const imports = fileNode
92
+ ? extractImports(fileNode, filterStdlibImports)
93
+ : [];
94
+ // 7. Implemented interface annotations (look up each implemented interface
95
+ // by name, parse its source, extract annotations declared on the
96
+ // interface). Only attached when the enclosing class declares ≥1
97
+ // implements interface — otherwise the field is omitted entirely.
98
+ let implementedInterfaces;
99
+ if (enclosingClass && enclosingClass.implementsInterfaces.length > 0) {
100
+ implementedInterfaces = await extractInterfaceAnnotations(enclosingClass.implementsInterfaces, projectRoot, languages);
101
+ }
102
+ const result = {
103
+ symbol,
104
+ filePath: relPath,
105
+ method,
106
+ enclosingClass,
107
+ injectedFields,
108
+ siblingMethods: siblings,
109
+ imports,
110
+ };
111
+ if (implementedInterfaces) {
112
+ result.implementedInterfaces = implementedInterfaces;
113
+ }
114
+ return result;
115
+ }
116
+ // ---------------------------------------------------------------------------
117
+ // AST extraction
118
+ // ---------------------------------------------------------------------------
119
+ function getFileRootNode(content, file, languages) {
120
+ const language = (0, grammars_1.detectLanguage)(file, content);
121
+ if (!languages.includes(language))
122
+ return null;
123
+ const parser = (0, grammars_1.getParser)(language);
124
+ if (!parser)
125
+ return null;
126
+ const tree = parser.parse(content);
127
+ return tree?.rootNode ?? null;
128
+ }
129
+ /**
130
+ * Extract method signature: annotations + modifiers + return type + name +
131
+ * parameters + throws clause.
132
+ */
133
+ function extractMethodSignature(methodNode) {
134
+ const annotations = (0, ast_helpers_1.extractAnnotations)(methodNode);
135
+ const modifiers = (0, ast_helpers_1.extractModifiers)(methodNode);
136
+ const returnType = methodNode.childForFieldName('type')?.text ?? 'void';
137
+ const name = methodNode.childForFieldName('name')?.text ?? '<anonymous>';
138
+ const parameters = extractParameters(methodNode);
139
+ const throwsClause = extractThrowsClause(methodNode);
140
+ return {
141
+ annotations,
142
+ modifiers,
143
+ returnType,
144
+ name,
145
+ parameters,
146
+ throwsClause,
147
+ startLine: methodNode.startPosition.row + 1,
148
+ endLine: methodNode.endPosition.row + 1,
149
+ };
150
+ }
151
+ function extractClassHierarchy(classNode) {
152
+ const nameChild = classNode.childForFieldName('name');
153
+ if (!nameChild)
154
+ return null;
155
+ const kindMap = {
156
+ class_declaration: 'class',
157
+ interface_declaration: 'interface',
158
+ enum_declaration: 'enum',
159
+ record_declaration: 'record',
160
+ annotation_type_declaration: 'class', // treat @interface as class for hierarchy purposes
161
+ };
162
+ const kind = kindMap[classNode.type] ?? 'class';
163
+ const annotations = (0, ast_helpers_1.extractAnnotations)(classNode);
164
+ const modifiers = (0, ast_helpers_1.extractModifiers)(classNode);
165
+ // extends — tree-sitter-java exposes the extends clause as field name
166
+ // `superclass` (node type `super_class`); field name not node type.
167
+ const superClassNode = classNode.childForFieldName('superclass') ?? classNode.childForFieldName('super_class');
168
+ const extendsClass = superClassNode?.text ?? null;
169
+ // implements — tree-sitter-java exposes the implements clause as field name
170
+ // `interfaces` (node type `super_interfaces`). Walk type_identifier children
171
+ // to enumerate each implemented interface.
172
+ const implementsNode = classNode.childForFieldName('interfaces') ?? classNode.childForFieldName('super_interfaces');
173
+ const implementsInterfaces = [];
174
+ if (implementsNode) {
175
+ (0, ast_helpers_1.walkTree)(implementsNode, (n) => {
176
+ if (n.type === 'type_identifier' && n.parent?.type !== 'scoped_type_identifier') {
177
+ // top-level type_identifier in the implements list
178
+ if (n.text !== extendsClass)
179
+ implementsInterfaces.push(n.text);
180
+ }
181
+ });
182
+ }
183
+ return {
184
+ name: nameChild.text,
185
+ kind,
186
+ annotations,
187
+ modifiers,
188
+ extendsClass,
189
+ implementsInterfaces,
190
+ startLine: classNode.startPosition.row + 1,
191
+ };
192
+ }
193
+ /**
194
+ * Look up each named interface in the project and extract the annotations
195
+ * declared on it. Used by `### Implemented interfaces` so an agent can see
196
+ * cross-cutting routing/permission annotations (e.g. `@Center("sopub_api")`,
197
+ * `@RequestMapping("/api/v1")`) that live on the interface, not the impl.
198
+ *
199
+ * Lookup is file-name heuristic first (`findFilesWithClass`, the same
200
+ * heuristic `resolveMethodSymbol` uses), so it doesn't scan every file in a
201
+ * large monorepo. The matching file is then AST-parsed and walked to find
202
+ * the `interface_declaration` whose `name` child equals the lookup name.
203
+ *
204
+ * Never throws — on any failure (file not found, parse error, AST mismatch)
205
+ * returns the not-found sentinel so the caller can surface it inline rather
206
+ * than abort the whole context.
207
+ */
208
+ async function extractInterfaceAnnotations(interfaceNames, projectRoot, languages) {
209
+ const out = [];
210
+ for (const name of interfaceNames) {
211
+ out.push(await lookupSingleInterface(name, projectRoot, languages));
212
+ }
213
+ return out;
214
+ }
215
+ async function lookupSingleInterface(interfaceName, projectRoot, languages) {
216
+ try {
217
+ const candidateFiles = await (0, call_sites_1.findFilesWithClass)(projectRoot, interfaceName);
218
+ for (const file of candidateFiles) {
219
+ const content = await fs_1.promises.readFile(file, 'utf-8');
220
+ const language = (0, grammars_1.detectLanguage)(file, content);
221
+ if (!languages.includes(language))
222
+ continue;
223
+ const parser = (0, grammars_1.getParser)(language);
224
+ if (!parser)
225
+ continue;
226
+ const tree = parser.parse(content);
227
+ if (!tree)
228
+ continue;
229
+ const ifaceNode = findInterfaceByName(tree.rootNode, interfaceName);
230
+ if (ifaceNode) {
231
+ return {
232
+ name: interfaceName,
233
+ file: path.relative(projectRoot, file).replace(/\\/g, '/'),
234
+ line: ifaceNode.startPosition.row + 1,
235
+ annotations: extractInterfaceAnnotationTexts(ifaceNode),
236
+ };
237
+ }
238
+ }
239
+ }
240
+ catch {
241
+ // swallow — treat as not found rather than aborting context
242
+ }
243
+ return { name: interfaceName, file: null, line: null, annotations: [] };
244
+ }
245
+ /**
246
+ * Find the first `interface_declaration` node named `interfaceName` under
247
+ * `root`. Tree-sitter-kotlin emits interfaces as `class_declaration` with an
248
+ * `interface` modifier, so both forms are covered.
249
+ */
250
+ function findInterfaceByName(root, interfaceName) {
251
+ let found = null;
252
+ (0, ast_helpers_1.walkTree)(root, (n) => {
253
+ if (found)
254
+ return;
255
+ if (n.type !== 'interface_declaration' && n.type !== 'class_declaration')
256
+ return;
257
+ const nameNode = n.childForFieldName('name');
258
+ if (!nameNode || nameNode.text !== interfaceName)
259
+ return;
260
+ // For class_declaration (Kotlin), only match if it's actually an interface
261
+ if (n.type === 'class_declaration' && !isKotlinInterface(n))
262
+ return;
263
+ found = n;
264
+ });
265
+ return found;
266
+ }
267
+ function isKotlinInterface(classNode) {
268
+ const modifiers = classNode.childForFieldName('modifiers');
269
+ if (!modifiers)
270
+ return false;
271
+ for (const child of modifiers.children) {
272
+ if (child?.type === 'class_modifier' && child.text === 'interface')
273
+ return true;
274
+ }
275
+ return false;
276
+ }
277
+ /**
278
+ * Extract annotation texts from an interface_declaration's `modifiers` child,
279
+ * normalized to short-name + arguments. Unlike `extractAnnotations` in
280
+ * ast-helpers.ts which strips the argument list entirely (returning `@Center`),
281
+ * this keeps the arguments so routing/permission values survive (e.g.
282
+ * `@Center("sopub_api")`). The package prefix is stripped for readability —
283
+ * agents match on the short name and the argument is the load-bearing part.
284
+ */
285
+ function extractInterfaceAnnotationTexts(node) {
286
+ const out = [];
287
+ const modifiers = node.children.find((c) => c?.type === 'modifiers');
288
+ if (!modifiers)
289
+ return out;
290
+ for (const child of modifiers.children) {
291
+ if (!child)
292
+ continue;
293
+ if (child.type !== 'annotation' && child.type !== 'marker_annotation')
294
+ continue;
295
+ const nameNode = child.childForFieldName('name');
296
+ if (!nameNode)
297
+ continue;
298
+ const shortName = nameNode.text.split('.').pop() ?? nameNode.text;
299
+ // annotation_argument_list only exists on `annotation` (not marker_annotation)
300
+ const argList = child.children.find((c) => c?.type === 'annotation_argument_list');
301
+ if (argList) {
302
+ out.push(`@${shortName}${argList.text}`);
303
+ }
304
+ else {
305
+ out.push(`@${shortName}`);
306
+ }
307
+ }
308
+ return out;
309
+ }
310
+ /**
311
+ * Extract other methods declared directly in the class body, excluding the
312
+ * queried method itself (matched by name + start line). SNR-ranked: biz verbs
313
+ * first, getter/setter/toString last, with `@Override` boost.
314
+ */
315
+ function extractSiblingMethods(classNode, queriedMethod, topN) {
316
+ const queriedName = queriedMethod.childForFieldName('name')?.text ?? '';
317
+ const queriedLine = queriedMethod.startPosition.row;
318
+ // Find the class_body direct child
319
+ let body = null;
320
+ for (const child of classNode.children) {
321
+ if (child?.type === 'class_body' || child?.type === 'interface_body' || child?.type === 'enum_body') {
322
+ body = child;
323
+ break;
324
+ }
325
+ }
326
+ if (!body)
327
+ return [];
328
+ const siblings = [];
329
+ for (const child of body.children) {
330
+ if (!child)
331
+ continue;
332
+ if (child.type !== 'method_declaration' &&
333
+ child.type !== 'constructor_declaration' &&
334
+ child.type !== 'compact_constructor_declaration')
335
+ continue;
336
+ // Skip the queried method itself
337
+ const name = child.childForFieldName('name')?.text ?? '';
338
+ if (name === queriedName && child.startPosition.row === queriedLine)
339
+ continue;
340
+ const annotations = (0, ast_helpers_1.extractAnnotations)(child);
341
+ const modifiers = (0, ast_helpers_1.extractModifiers)(child);
342
+ const returnType = child.childForFieldName('type')?.text ?? 'void';
343
+ const paramCount = countParameters(child);
344
+ const snrScore = computeSiblingSnr(name, annotations, modifiers);
345
+ siblings.push({
346
+ name,
347
+ snrScore,
348
+ modifiers,
349
+ annotations,
350
+ returnType,
351
+ paramCount,
352
+ startLine: child.startPosition.row + 1,
353
+ });
354
+ }
355
+ siblings.sort((a, b) => b.snrScore - a.snrScore || a.startLine - b.startLine);
356
+ return siblings.slice(0, topN);
357
+ }
358
+ /**
359
+ * SNR scoring for sibling method declarations. Combines:
360
+ * - method-name rules (reuse call-sites logic — biz verb +30, getter -20)
361
+ * - @Override boost (+20) — interface contract, important for understanding role
362
+ * - public modifier (+5) — part of the class's API
363
+ * - private/protected (-5) — internal helper
364
+ * - static (+5) — utility/factory method, often relevant
365
+ */
366
+ function computeSiblingSnr(name, annotations, modifiers) {
367
+ let score = 0;
368
+ // Method-name rules (mirrors call-sites.ts method-name section)
369
+ if (snr_constants_1.OBJECT_METHODS.has(name))
370
+ score -= 80;
371
+ else if (snr_constants_1.MAP_OPS.has(name))
372
+ score -= 25;
373
+ else if (snr_constants_1.RE_GETTER.test(name))
374
+ score -= 20;
375
+ else if (snr_constants_1.RE_SETTER.test(name))
376
+ score -= 20;
377
+ else if (snr_constants_1.RE_BOOL_GETTER.test(name))
378
+ score -= 15;
379
+ else if (snr_constants_1.RE_BIZ_VERB.test(name))
380
+ score += 30;
381
+ // Annotation boosts
382
+ if (annotations.includes('@Override'))
383
+ score += 20;
384
+ if (annotations.some((a) => TEST_ANNOTATIONS.has(a)))
385
+ score += 25;
386
+ // Modifier nudges
387
+ if (modifiers.includes('public'))
388
+ score += 5;
389
+ if (modifiers.includes('private') || modifiers.includes('protected'))
390
+ score -= 5;
391
+ if (modifiers.includes('static'))
392
+ score += 5;
393
+ return score;
394
+ }
395
+ const TEST_ANNOTATIONS = new Set(['@Test', '@ParameterizedTest', '@BeforeEach', '@AfterEach', '@BeforeAll', '@AfterAll']);
396
+ /**
397
+ * Extract imports from the file. If filterStdlibImports, exclude:
398
+ * - java.* / javax.* / jakarta.* (Java SE + Jakarta EE)
399
+ * - kotlin.* (for Kotlin files)
400
+ */
401
+ function extractImports(rootNode, filterStdlib) {
402
+ const imports = [];
403
+ (0, ast_helpers_1.walkTree)(rootNode, (n) => {
404
+ if (n.type !== 'import_declaration')
405
+ return;
406
+ // import_declaration's full text contains the entire `import x.y.Z;`
407
+ const text = n.text.replace(/^import\s+(static\s+)?/, '').replace(/;\s*$/, '');
408
+ if (filterStdlib && isStdlibImport(text))
409
+ return;
410
+ imports.push(text);
411
+ });
412
+ return imports;
413
+ }
414
+ function isStdlibImport(importPath) {
415
+ return (importPath.startsWith('java.') ||
416
+ importPath.startsWith('javax.') ||
417
+ importPath.startsWith('jakarta.') ||
418
+ importPath.startsWith('kotlin.') ||
419
+ importPath.startsWith('kotlinx.'));
420
+ }
421
+ // ---------------------------------------------------------------------------
422
+ // Small AST helpers (shared helpers live in ./ast-helpers.ts)
423
+ // ---------------------------------------------------------------------------
424
+ function extractParameters(methodNode) {
425
+ const out = [];
426
+ const params = methodNode.childForFieldName('parameters');
427
+ if (!params)
428
+ return out;
429
+ for (const child of params.children) {
430
+ if (!child)
431
+ continue;
432
+ if (child.type === 'formal_parameter' || child.type === 'spread_parameter') {
433
+ out.push(child.text.trim());
434
+ }
435
+ }
436
+ return out;
437
+ }
438
+ function countParameters(methodNode) {
439
+ const params = methodNode.childForFieldName('parameters');
440
+ if (!params)
441
+ return 0;
442
+ let count = 0;
443
+ for (const child of params.children) {
444
+ if (child?.type === 'formal_parameter' || child?.type === 'spread_parameter')
445
+ count++;
446
+ }
447
+ return count;
448
+ }
449
+ function extractThrowsClause(methodNode) {
450
+ const out = [];
451
+ const throwsNode = methodNode.childForFieldName('throws');
452
+ if (!throwsNode)
453
+ return out;
454
+ (0, ast_helpers_1.walkTree)(throwsNode, (n) => {
455
+ if (n.type === 'type_identifier')
456
+ out.push(n.text);
457
+ });
458
+ return out;
459
+ }
460
+ // ---------------------------------------------------------------------------
461
+ // Formatter (CLI markdown)
462
+ // ---------------------------------------------------------------------------
463
+ function formatContextResult(result) {
464
+ const lines = [];
465
+ const m = result.method;
466
+ // Header
467
+ const annotationsStr = m.annotations.length > 0 ? `${m.annotations.join(' ')} ` : '';
468
+ const modifiersStr = m.modifiers.length > 0 ? `${m.modifiers.join(' ')} ` : '';
469
+ lines.push(`## \`${annotationsStr}${modifiersStr}${m.returnType} ${m.name}(...)\``);
470
+ lines.push(`\`${result.filePath}:${m.startLine}-${m.endLine}\``);
471
+ // Full signature line
472
+ lines.push('');
473
+ lines.push('### Signature');
474
+ const fullSignature = formatFullSignature(m);
475
+ for (const line of fullSignature) {
476
+ lines.push(`> ${line}`);
477
+ }
478
+ // Enclosing class
479
+ if (result.enclosingClass) {
480
+ const c = result.enclosingClass;
481
+ lines.push('');
482
+ lines.push('### Enclosing class');
483
+ const classAnnotations = c.annotations.length > 0 ? `${c.annotations.join(' ')} ` : '';
484
+ const classModifiers = c.modifiers.length > 0 ? `${c.modifiers.join(' ')} ` : '';
485
+ lines.push(`**${classAnnotations}${classModifiers}${c.kind} ${c.name}**`);
486
+ if (c.extendsClass)
487
+ lines.push(`- extends: \`${c.extendsClass}\``);
488
+ if (c.implementsInterfaces.length > 0) {
489
+ lines.push(`- implements: ${c.implementsInterfaces.map((i) => `\`${i}\``).join(', ')}`);
490
+ }
491
+ }
492
+ // Implemented interfaces — annotations declared on each implemented
493
+ // interface (looked up by parsing the interface source). Lets an agent see
494
+ // cross-cutting routing/permission annotations (e.g. `@Center("sopub_api")`)
495
+ // without an extra Read. Only rendered when the class declares implements
496
+ // AND the implementedInterfaces array is populated.
497
+ if (result.implementedInterfaces && result.implementedInterfaces.length > 0) {
498
+ lines.push('');
499
+ lines.push('### Implemented interfaces');
500
+ for (const iface of result.implementedInterfaces) {
501
+ const suffix = formatInterfaceAnnotationSuffix(iface);
502
+ lines.push(`- \`${iface.name}\` ${suffix}`);
503
+ }
504
+ }
505
+ // Injected fields
506
+ if (result.injectedFields.length > 0) {
507
+ lines.push('');
508
+ lines.push('### Injected fields (cross-boundary collaborators)');
509
+ for (const f of result.injectedFields) {
510
+ lines.push(`- @${f.annotation} \`${f.fieldType} ${f.fieldName}\``);
511
+ }
512
+ }
513
+ // Sibling methods
514
+ if (result.siblingMethods.length > 0) {
515
+ lines.push('');
516
+ lines.push(`### Sibling methods (top ${result.siblingMethods.length}, SNR-ranked)`);
517
+ for (const s of result.siblingMethods) {
518
+ const tag = s.snrScore >= 30 ? ' **[biz]**' : '';
519
+ const overrides = s.annotations.includes('@Override') ? ' @Override' : '';
520
+ const visibility = s.modifiers.includes('public') ? 'public' : s.modifiers.includes('private') ? 'private' : s.modifiers[0] ?? '';
521
+ lines.push(`- \`${visibility} ${s.returnType} ${s.name}(${s.paramCount} arg${s.paramCount === 1 ? '' : 's'})\` L${s.startLine}${overrides}${tag}`);
522
+ }
523
+ }
524
+ // Imports
525
+ if (result.imports.length > 0) {
526
+ lines.push('');
527
+ lines.push(`### Imports (${result.imports.length}, project-internal)`);
528
+ for (const imp of result.imports) {
529
+ lines.push(`- \`${imp}\``);
530
+ }
531
+ }
532
+ return lines.join('\n');
533
+ }
534
+ function formatFullSignature(m) {
535
+ const parts = [];
536
+ if (m.annotations.length > 0)
537
+ parts.push(m.annotations.join(' '));
538
+ if (m.modifiers.length > 0)
539
+ parts.push(m.modifiers.join(' '));
540
+ parts.push(m.returnType);
541
+ parts.push(`${m.name}(${m.parameters.join(', ')})`);
542
+ if (m.throwsClause.length > 0) {
543
+ parts.push(`throws ${m.throwsClause.join(', ')}`);
544
+ }
545
+ // Wrap long signatures
546
+ const full = parts.join(' ');
547
+ if (full.length <= 100)
548
+ return [full];
549
+ // Multi-line breakdown for long signatures
550
+ const head = [
551
+ ...m.annotations,
552
+ ...m.modifiers,
553
+ m.returnType,
554
+ `${m.name}(`,
555
+ ].join(' ');
556
+ return [head, ` ${m.parameters.join(',\n ')}`, `)${m.throwsClause.length > 0 ? ` throws ${m.throwsClause.join(', ')}` : ''}`];
557
+ }
558
+ /**
559
+ * Render the trailing portion of a `### Implemented interfaces` bullet.
560
+ *
561
+ * annotations + source known → `@Center("sopub_api") — \`path:line\``
562
+ * source known, no annotations → `— (no annotations) — \`path:line\``
563
+ * source not found → `— (interface source not found)`
564
+ */
565
+ function formatInterfaceAnnotationSuffix(iface) {
566
+ if (iface.file === null || iface.line === null) {
567
+ return '— (interface source not found)';
568
+ }
569
+ const sourceLoc = `\`${iface.file}:${iface.line}\``;
570
+ if (iface.annotations.length === 0) {
571
+ return `— (no annotations) — ${sourceLoc}`;
572
+ }
573
+ return `${iface.annotations.join(' ')} — ${sourceLoc}`;
574
+ }
575
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/search/context.ts"],"names":[],"mappings":"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"}