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":"related.js","sourceRoot":"","sources":["../../src/search/related.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,148 @@
1
+ /**
2
+ * Slice — cross-cutting enumeration by criterion (annotation or interface/
3
+ * superclass). Returns all classes that match, grouped by sub-service.
4
+ *
5
+ * Two criteria (per clarify-requirements):
6
+ * - `slice '@Service'` — all classes annotated `@Service`
7
+ * - `slice '@RestController'` — all classes annotated `@RestController`
8
+ * - `slice 'IFoo'` — all classes that `implements IFoo`
9
+ * or `extends Foo`
10
+ *
11
+ * Grouping: matches are bucketed by sub-service, inferred from the file's
12
+ * path. For hx (multi-module monorepo), `so-service/so-busi/.../X.java`
13
+ * → sub-service = `so-service`. Single-module projects get one bucket.
14
+ *
15
+ * Output shape: header + per-sub-service section (each a flat list with
16
+ * file:line) + omitted summary.
17
+ *
18
+ * Isolation: lives under `src/search/`, imports nothing from the indexed
19
+ * pipeline. Reuses call-sites helpers (listJavaFamilyFiles, DEFAULT_EXCLUDE_DIRS).
20
+ */
21
+ import type { Language } from '../types';
22
+ export type SliceCriterionKind = 'annotation' | 'extends-implements' | 'unknown';
23
+ export interface SliceOptions {
24
+ /** Max results per sub-service bucket. Default 30. */
25
+ topPerBucket?: number;
26
+ /** Max sub-services to surface. Default 10. */
27
+ maxBuckets?: number;
28
+ /** Languages to scan. Default ['java', 'kotlin']. */
29
+ languages?: Language[];
30
+ /** Directory globs to exclude. */
31
+ excludeDirs?: string[];
32
+ /**
33
+ * Filter by declaration kind. E.g., `'class'` excludes interfaces/enums/records
34
+ * (useful for `slice '@Service'` where Spring services are concrete classes).
35
+ * Default undefined = all kinds.
36
+ */
37
+ kindFilter?: SliceMatch['kind'] | null;
38
+ /**
39
+ * Skip test files (*Test.java / *Tests.java / *Spec.java / *Specs.groovy /
40
+ * files under test/ directories). Useful for slice @RestController where
41
+ * test doubles shouldn't count as endpoints. Default false.
42
+ */
43
+ noTests?: boolean;
44
+ /**
45
+ * Scan method-level annotations (on `method_declaration` nodes) in addition
46
+ * to class-level ones. E.g., `slice '@Test' --method-level` returns all
47
+ * @Test-annotated methods. Default false — when omitted, behavior is
48
+ * byte-equal to the pre-method-level iteration.
49
+ */
50
+ methodLevel?: boolean;
51
+ }
52
+ export interface SliceMatch {
53
+ /** Class / interface / enum / record name. */
54
+ name: string;
55
+ /** Match kind (always one of class/interface/enum/record). */
56
+ kind: 'class' | 'interface' | 'enum' | 'record';
57
+ /** File path relative to projectRoot. */
58
+ filePath: string;
59
+ /** 1-based declaration line. */
60
+ line: number;
61
+ /** Sub-service bucket (derived from file path). */
62
+ subService: string;
63
+ /** Snippet of the class declaration (1-2 lines). */
64
+ snippet: string;
65
+ }
66
+ export interface SliceBucket {
67
+ /** Sub-service name (e.g., "so-service", "order-service", "src"). */
68
+ subService: string;
69
+ /** Total matches in this bucket (before topPerBucket cap). */
70
+ total: number;
71
+ /** Matches returned after cap. */
72
+ returned: number;
73
+ matches: SliceMatch[];
74
+ }
75
+ /**
76
+ * A method-level annotation match (from `--method-level`).
77
+ *
78
+ * Separate from `SliceMatch` (which is class/interface/enum/record shaped)
79
+ * because a method match carries both an enclosing class name and a method
80
+ * name — flattening them into a single `name` would lose the grouping the
81
+ * formatter needs (methods grouped under their class).
82
+ */
83
+ export interface SliceMethodMatch {
84
+ /** Enclosing class/interface/enum/record name. `<unknown>` if unscoped. */
85
+ className: string;
86
+ /** Method name (tree-sitter `name` field). */
87
+ methodName: string;
88
+ /** File path relative to projectRoot. */
89
+ filePath: string;
90
+ /** 1-based declaration line. */
91
+ line: number;
92
+ /** Sub-service bucket (derived from file path). */
93
+ subService: string;
94
+ }
95
+ export interface SliceResult {
96
+ /** Original input. */
97
+ query: string;
98
+ /** Detected criterion kind. */
99
+ criterionKind: SliceCriterionKind;
100
+ /** Normalized criterion (e.g., `Service` extracted from `@Service`). */
101
+ criterionName: string;
102
+ /** Total matches found. */
103
+ totalFound: number;
104
+ /** Buckets actually returned (after maxBuckets cap). */
105
+ returned: number;
106
+ /** Per-sub-service buckets, sorted by total desc. */
107
+ buckets: SliceBucket[];
108
+ /**
109
+ * Method-level matches (from `--method-level`). Empty unless methodLevel
110
+ * was requested. Flat list — the formatter groups by sub-service then class.
111
+ */
112
+ methodMatches?: SliceMethodMatch[];
113
+ /**
114
+ * True when the caller requested `--method-level` (regardless of whether any
115
+ * method matches were found). Drives the empty-state copy so that a
116
+ * `slice '@Test' --method-level` with zero hits steers the user back toward
117
+ * a class-level retry, while a plain `slice '@Service'` with zero hits keeps
118
+ * the original (byte-equal) message.
119
+ */
120
+ methodLevelRequested?: boolean;
121
+ omitted: {
122
+ pastTopPerBucket: number;
123
+ pastMaxBuckets: number;
124
+ };
125
+ }
126
+ export declare function searchSlice(projectRoot: string, query: string, options?: SliceOptions): Promise<SliceResult>;
127
+ /**
128
+ * Infer the sub-service / module name from the file's relative path.
129
+ *
130
+ * Strategies (first match wins):
131
+ * 1. `<root>/<sub>/<grandchild>/...` where `sub` looks like a service name
132
+ * (contains `-` or matches known service patterns) → `<sub>`
133
+ * 2. `<root>/<top-dir>/...` → `<top-dir>`
134
+ * 3. file directly under root → `(root)`
135
+ *
136
+ * For hx (`so-service/so-busi/.../X.java`): returns `so-service`.
137
+ * For a single-module project (`src/main/.../X.java`): returns `src`.
138
+ * For a flat project (`X.java` at root): returns `(root)`.
139
+ */
140
+ export declare function inferSubService(relPath: string): string;
141
+ /**
142
+ * True if the file path looks like a test file. Catches the common Java/Kotlin
143
+ * conventions: `*Test.java`, `*Tests.java`, `*Spec.java`, `*Specs.groovy`,
144
+ * files under `src/test/`, `test/`, `__tests__/`.
145
+ */
146
+ export declare function isTestFile(absoluteOrRelPath: string): boolean;
147
+ export declare function formatSliceResult(result: SliceResult): string;
148
+ //# sourceMappingURL=slice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slice.d.ts","sourceRoot":"","sources":["../../src/search/slice.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAiBzC,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,oBAAoB,GAAG,SAAS,CAAC;AAEjF,MAAM,WAAW,YAAY;IAC3B,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB;;;;OAIG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACvC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,IAAI,EAAE,OAAO,GAAG,WAAW,GAAG,MAAM,GAAG,QAAQ,CAAC;IAChD,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,qEAAqE;IACrE,UAAU,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,sBAAsB;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,aAAa,EAAE,kBAAkB,CAAC;IAClC,wEAAwE;IACxE,aAAa,EAAE,MAAM,CAAC;IACtB,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB;;;OAGG;IACH,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACnC;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,OAAO,EAAE;QACP,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAMD,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,WAAW,CAAC,CAiMtB;AAwFD;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMvD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAI7D;AAMD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAuG7D"}
@@ -0,0 +1,460 @@
1
+ "use strict";
2
+ /**
3
+ * Slice — cross-cutting enumeration by criterion (annotation or interface/
4
+ * superclass). Returns all classes that match, grouped by sub-service.
5
+ *
6
+ * Two criteria (per clarify-requirements):
7
+ * - `slice '@Service'` — all classes annotated `@Service`
8
+ * - `slice '@RestController'` — all classes annotated `@RestController`
9
+ * - `slice 'IFoo'` — all classes that `implements IFoo`
10
+ * or `extends Foo`
11
+ *
12
+ * Grouping: matches are bucketed by sub-service, inferred from the file's
13
+ * path. For hx (multi-module monorepo), `so-service/so-busi/.../X.java`
14
+ * → sub-service = `so-service`. Single-module projects get one bucket.
15
+ *
16
+ * Output shape: header + per-sub-service section (each a flat list with
17
+ * file:line) + omitted summary.
18
+ *
19
+ * Isolation: lives under `src/search/`, imports nothing from the indexed
20
+ * pipeline. Reuses call-sites helpers (listJavaFamilyFiles, DEFAULT_EXCLUDE_DIRS).
21
+ */
22
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
23
+ if (k2 === undefined) k2 = k;
24
+ var desc = Object.getOwnPropertyDescriptor(m, k);
25
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
26
+ desc = { enumerable: true, get: function() { return m[k]; } };
27
+ }
28
+ Object.defineProperty(o, k2, desc);
29
+ }) : (function(o, m, k, k2) {
30
+ if (k2 === undefined) k2 = k;
31
+ o[k2] = m[k];
32
+ }));
33
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
34
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
35
+ }) : function(o, v) {
36
+ o["default"] = v;
37
+ });
38
+ var __importStar = (this && this.__importStar) || (function () {
39
+ var ownKeys = function(o) {
40
+ ownKeys = Object.getOwnPropertyNames || function (o) {
41
+ var ar = [];
42
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
43
+ return ar;
44
+ };
45
+ return ownKeys(o);
46
+ };
47
+ return function (mod) {
48
+ if (mod && mod.__esModule) return mod;
49
+ var result = {};
50
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
51
+ __setModuleDefault(result, mod);
52
+ return result;
53
+ };
54
+ })();
55
+ Object.defineProperty(exports, "__esModule", { value: true });
56
+ exports.searchSlice = searchSlice;
57
+ exports.inferSubService = inferSubService;
58
+ exports.isTestFile = isTestFile;
59
+ exports.formatSliceResult = formatSliceResult;
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
+ // ---------------------------------------------------------------------------
66
+ // Main entry
67
+ // ---------------------------------------------------------------------------
68
+ async function searchSlice(projectRoot, query, options = {}) {
69
+ const { topPerBucket = 30, maxBuckets = 10, languages = ['java', 'kotlin'], excludeDirs = [], kindFilter = null, noTests = false, methodLevel = false, } = options;
70
+ await (0, grammars_1.loadGrammarsForLanguages)(languages);
71
+ const excludeSet = new Set([...call_sites_1.DEFAULT_EXCLUDE_DIRS, ...excludeDirs]);
72
+ // 1. Detect criterion
73
+ const { kind, criterionName } = detectCriterion(query);
74
+ if (kind === 'unknown') {
75
+ throw new Error(`Could not detect slice criterion. Use '@Annotation' (e.g., '@Service') or 'InterfaceName' (e.g., 'IFoo'). Got: "${query}"`);
76
+ }
77
+ // 2. Walk project files
78
+ const allFiles = await (0, call_sites_1.listJavaFamilyFiles)(projectRoot, excludeSet);
79
+ const matches = [];
80
+ const methodMatches = [];
81
+ for (const file of allFiles) {
82
+ // Test-file filter: skip *Test.java / *Tests.java / *Spec.java / test/ dir
83
+ if (noTests && isTestFile(file))
84
+ continue;
85
+ let content;
86
+ try {
87
+ content = await fs_1.promises.readFile(file, 'utf-8');
88
+ }
89
+ catch {
90
+ continue;
91
+ }
92
+ // Fast text filter — skip files that don't contain the criterion text.
93
+ // For annotation, search for both `@Name` and `Name` (annotation might
94
+ // be fully qualified like `org.springframework.stereotype.Service`).
95
+ const searchText = criterionName.toLowerCase();
96
+ if (!content.toLowerCase().includes(searchText))
97
+ continue;
98
+ const language = (0, grammars_1.detectLanguage)(file, content);
99
+ if (!languages.includes(language))
100
+ continue;
101
+ const parser = (0, grammars_1.getParser)(language);
102
+ if (!parser)
103
+ continue;
104
+ const tree = parser.parse(content);
105
+ if (!tree)
106
+ continue;
107
+ const relPath = path.relative(projectRoot, file).replace(/\\/g, '/');
108
+ const subService = inferSubService(relPath);
109
+ // Method-level matching only applies to annotation criteria —
110
+ // extends/implements is a class-level relationship, not a method-level one.
111
+ const scanMethodLevel = methodLevel && kind === 'annotation';
112
+ (0, ast_helpers_1.walkTree)(tree.rootNode, (node) => {
113
+ // --- Class-level path (always evaluated; unchanged when methodLevel is off) ---
114
+ if (node.type === 'class_declaration' ||
115
+ node.type === 'interface_declaration' ||
116
+ node.type === 'enum_declaration' ||
117
+ node.type === 'record_declaration') {
118
+ const nameNode = node.childForFieldName('name');
119
+ if (!nameNode)
120
+ return;
121
+ const name = nameNode.text;
122
+ const matched = kind === 'annotation'
123
+ ? classHasAnnotation(node, criterionName)
124
+ : classExtendsOrImplements(node, criterionName);
125
+ if (!matched)
126
+ return;
127
+ const kindMap = {
128
+ class_declaration: 'class',
129
+ interface_declaration: 'interface',
130
+ enum_declaration: 'enum',
131
+ record_declaration: 'record',
132
+ };
133
+ const matchKind = kindMap[node.type] ?? 'class';
134
+ // Apply kind filter (e.g., 'class' only — skip interfaces when looking
135
+ // for concrete @Service beans).
136
+ if (kindFilter && matchKind !== kindFilter)
137
+ return;
138
+ matches.push({
139
+ name,
140
+ kind: matchKind,
141
+ filePath: relPath,
142
+ line: node.startPosition.row + 1,
143
+ subService,
144
+ snippet: (0, ast_helpers_1.extractDeclSnippet)(content, node),
145
+ });
146
+ return;
147
+ }
148
+ // --- Method-level path (only when --method-level requested) ---
149
+ if (scanMethodLevel && node.type === 'method_declaration') {
150
+ const annotations = (0, ast_helpers_1.extractAnnotations)(node);
151
+ // extractAnnotations returns short-names prefixed with `@`
152
+ // (e.g. `@Test`). Match either the bare short-name or the
153
+ // parameterized form `@Test(...)`.
154
+ const target = `@${criterionName}`;
155
+ const hit = annotations.some((a) => a === target || a.startsWith(`${target}(`));
156
+ if (!hit)
157
+ return;
158
+ const methodName = node.childForFieldName('name')?.text ?? '<anonymous>';
159
+ const classNode = (0, call_sites_1.findEnclosingClassType)(node);
160
+ const className = classNode?.childForFieldName('name')?.text ?? '<unknown>';
161
+ methodMatches.push({
162
+ className,
163
+ methodName,
164
+ filePath: relPath,
165
+ line: node.startPosition.row + 1,
166
+ subService,
167
+ });
168
+ }
169
+ });
170
+ }
171
+ // 3. Group by sub-service
172
+ const bySubService = new Map();
173
+ for (const m of matches) {
174
+ const arr = bySubService.get(m.subService) ?? [];
175
+ arr.push(m);
176
+ bySubService.set(m.subService, arr);
177
+ }
178
+ // Sort each bucket internally by (path depth asc, then file path, then line)
179
+ for (const arr of bySubService.values()) {
180
+ arr.sort((a, b) => {
181
+ const da = a.filePath.split('/').length;
182
+ const db = b.filePath.split('/').length;
183
+ if (da !== db)
184
+ return da - db;
185
+ if (a.filePath !== b.filePath)
186
+ return a.filePath.localeCompare(b.filePath);
187
+ return a.line - b.line;
188
+ });
189
+ }
190
+ // Sort method-level matches: by sub-service, then class name, then line.
191
+ // (Method matches are grouped into per-sub-service sections by the
192
+ // formatter; this sort makes the within-section order deterministic and
193
+ // keeps a class's methods together.)
194
+ methodMatches.sort((a, b) => {
195
+ if (a.subService !== b.subService)
196
+ return a.subService.localeCompare(b.subService);
197
+ if (a.className !== b.className)
198
+ return a.className.localeCompare(b.className);
199
+ if (a.filePath !== b.filePath)
200
+ return a.filePath.localeCompare(b.filePath);
201
+ return a.line - b.line;
202
+ });
203
+ // Sort buckets by total desc, then by name asc
204
+ const sortedBuckets = [...bySubService.entries()].sort((a, b) => {
205
+ if (b[1].length !== a[1].length)
206
+ return b[1].length - a[1].length;
207
+ return a[0].localeCompare(b[0]);
208
+ });
209
+ let pastMaxBuckets = 0;
210
+ const keptBucketsRaw = sortedBuckets.slice(0, maxBuckets);
211
+ if (sortedBuckets.length > maxBuckets) {
212
+ pastMaxBuckets = sortedBuckets.length - maxBuckets;
213
+ }
214
+ let pastTopPerBucket = 0;
215
+ const buckets = keptBucketsRaw.map(([subService, allMatches]) => {
216
+ const kept = allMatches.slice(0, topPerBucket);
217
+ pastTopPerBucket += allMatches.length - kept.length;
218
+ return {
219
+ subService,
220
+ total: allMatches.length,
221
+ returned: kept.length,
222
+ matches: kept,
223
+ };
224
+ });
225
+ return {
226
+ query,
227
+ criterionKind: kind,
228
+ criterionName,
229
+ totalFound: matches.length,
230
+ returned: buckets.reduce((acc, b) => acc + b.returned, 0),
231
+ buckets,
232
+ methodMatches,
233
+ methodLevelRequested: methodLevel,
234
+ omitted: {
235
+ pastTopPerBucket,
236
+ pastMaxBuckets,
237
+ },
238
+ };
239
+ }
240
+ // ---------------------------------------------------------------------------
241
+ // Criterion detection
242
+ // ---------------------------------------------------------------------------
243
+ function detectCriterion(query) {
244
+ const trimmed = query.trim();
245
+ if (!trimmed)
246
+ return { kind: 'unknown', criterionName: '' };
247
+ // Annotation: starts with `@`
248
+ if (trimmed.startsWith('@')) {
249
+ const name = trimmed.slice(1).trim();
250
+ if (!name)
251
+ return { kind: 'unknown', criterionName: '' };
252
+ // Strip any package prefix (e.g., @org.springframework.stereotype.Service → Service)
253
+ const shortName = name.split('.').pop() ?? name;
254
+ return { kind: 'annotation', criterionName: shortName };
255
+ }
256
+ // Otherwise treat as interface/superclass name. Strip package prefix if any.
257
+ const shortName = trimmed.split('.').pop() ?? trimmed;
258
+ // Must look like a Java identifier (CamelCase typically)
259
+ if (!/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(shortName)) {
260
+ return { kind: 'unknown', criterionName: '' };
261
+ }
262
+ return { kind: 'extends-implements', criterionName: shortName };
263
+ }
264
+ // ---------------------------------------------------------------------------
265
+ // AST matchers
266
+ // ---------------------------------------------------------------------------
267
+ /**
268
+ * True if the class declaration has the given annotation (short name).
269
+ * E.g., `@Service` matches `@Service`, `@org.springframework.stereotype.Service`,
270
+ * `@Service("beanName")`.
271
+ */
272
+ function classHasAnnotation(classNode, annotationShortName) {
273
+ const modifiers = (0, ast_helpers_1.findModifiersChild)(classNode);
274
+ if (!modifiers)
275
+ return false;
276
+ for (const child of modifiers.children) {
277
+ if (!child)
278
+ continue;
279
+ if (child.type !== 'annotation' && child.type !== 'marker_annotation')
280
+ continue;
281
+ const nameNode = child.childForFieldName('name');
282
+ if (!nameNode)
283
+ continue;
284
+ const name = nameNode.text;
285
+ const short = name.split('.').pop() ?? name;
286
+ if (short === annotationShortName)
287
+ return true;
288
+ }
289
+ return false;
290
+ }
291
+ /**
292
+ * True if the class extends OR implements the given interface/superclass name.
293
+ * Walks both the `superclass` (extends) and `interfaces` (implements) fields.
294
+ */
295
+ function classExtendsOrImplements(classNode, targetName) {
296
+ // extends — tree-sitter-java field name `superclass`
297
+ const superClassNode = classNode.childForFieldName('superclass')
298
+ ?? classNode.childForFieldName('super_class');
299
+ if (superClassNode) {
300
+ let found = false;
301
+ (0, ast_helpers_1.walkTree)(superClassNode, (n) => {
302
+ if (found)
303
+ return;
304
+ if (n.type === 'type_identifier' && n.text === targetName)
305
+ found = true;
306
+ });
307
+ if (found)
308
+ return true;
309
+ }
310
+ // implements — tree-sitter-java field name `interfaces`
311
+ const interfacesNode = classNode.childForFieldName('interfaces')
312
+ ?? classNode.childForFieldName('super_interfaces');
313
+ if (interfacesNode) {
314
+ let found = false;
315
+ (0, ast_helpers_1.walkTree)(interfacesNode, (n) => {
316
+ if (found)
317
+ return;
318
+ if (n.type === 'type_identifier' && n.text === targetName)
319
+ found = true;
320
+ });
321
+ if (found)
322
+ return true;
323
+ }
324
+ return false;
325
+ }
326
+ // ---------------------------------------------------------------------------
327
+ // Helpers
328
+ // ---------------------------------------------------------------------------
329
+ /**
330
+ * Infer the sub-service / module name from the file's relative path.
331
+ *
332
+ * Strategies (first match wins):
333
+ * 1. `<root>/<sub>/<grandchild>/...` where `sub` looks like a service name
334
+ * (contains `-` or matches known service patterns) → `<sub>`
335
+ * 2. `<root>/<top-dir>/...` → `<top-dir>`
336
+ * 3. file directly under root → `(root)`
337
+ *
338
+ * For hx (`so-service/so-busi/.../X.java`): returns `so-service`.
339
+ * For a single-module project (`src/main/.../X.java`): returns `src`.
340
+ * For a flat project (`X.java` at root): returns `(root)`.
341
+ */
342
+ function inferSubService(relPath) {
343
+ const parts = relPath.split('/');
344
+ if (parts.length === 1)
345
+ return '(root)';
346
+ // First segment is the top-level dir → use as sub-service
347
+ // (works for hx multi-module layout AND single-module `src/...` layout)
348
+ return parts[0] ?? '(root)';
349
+ }
350
+ /**
351
+ * True if the file path looks like a test file. Catches the common Java/Kotlin
352
+ * conventions: `*Test.java`, `*Tests.java`, `*Spec.java`, `*Specs.groovy`,
353
+ * files under `src/test/`, `test/`, `__tests__/`.
354
+ */
355
+ function isTestFile(absoluteOrRelPath) {
356
+ const normalized = absoluteOrRelPath.replace(/\\/g, '/');
357
+ if (/\b(src[/\\]test|test[/\\]|__tests__)\b/.test(normalized))
358
+ return true;
359
+ return /\.(Test|Tests|Spec|Specs)\.(java|kt|kts|groovy)$/i.test(normalized);
360
+ }
361
+ // ---------------------------------------------------------------------------
362
+ // Formatter (CLI markdown)
363
+ // ---------------------------------------------------------------------------
364
+ function formatSliceResult(result) {
365
+ const lines = [];
366
+ const criterionLabel = result.criterionKind === 'annotation'
367
+ ? `@${result.criterionName}`
368
+ : `implements/extends ${result.criterionName}`;
369
+ const methodMatches = result.methodMatches ?? [];
370
+ const hasMethodMatches = methodMatches.length > 0;
371
+ const hasClassMatches = result.buckets.length > 0;
372
+ // When method-level matches exist, class-level buckets are labeled so the
373
+ // two sections don't get mixed up; when no method matches, the label is
374
+ // omitted to stay byte-equal to the pre-method-level formatter.
375
+ const labelClassBuckets = hasMethodMatches;
376
+ // Header counts: classes always; methods only when present.
377
+ const classCount = result.totalFound;
378
+ const methodCount = methodMatches.length;
379
+ const headerCount = hasMethodMatches
380
+ ? `${classCount} class${classCount === 1 ? '' : 'es'} · ${methodCount} method${methodCount === 1 ? '' : 's'}`
381
+ : `${classCount} match${classCount === 1 ? '' : 'es'}`;
382
+ // Sub-service count for the header: union of class-level buckets and
383
+ // sub-services that carry method matches (so a methods-only run doesn't
384
+ // report "across 0 sub-services").
385
+ const methodSubServices = new Set(methodMatches.map((m) => m.subService));
386
+ const subServiceCount = new Set([
387
+ ...result.buckets.map((b) => b.subService),
388
+ ...methodSubServices,
389
+ ]).size;
390
+ lines.push(`**Slice: ${criterionLabel}** — ${headerCount} across ${subServiceCount} sub-service${subServiceCount === 1 ? '' : 's'}, returning ${result.returned}${hasMethodMatches ? ` + ${methodCount}` : ''}`);
391
+ // Empty state — no matches of either kind.
392
+ if (!hasClassMatches && !hasMethodMatches) {
393
+ lines.push('');
394
+ if (result.methodLevelRequested === true) {
395
+ // Flag was on but nothing matched at either level — steer back to a
396
+ // class-level retry (the annotation may be a class-level one after all).
397
+ lines.push(`_No matches for \`${criterionLabel}\` at either class or method level. Try without \`--method-level\`, or check the annotation name (case-sensitive: \`${result.criterionName}\`)._`);
398
+ }
399
+ else {
400
+ // Byte-equal to the pre-method-level formatter.
401
+ lines.push(`_No matches found. Check the criterion spelling (case-sensitive: \`${result.criterionName}\`), or try a broader query._`);
402
+ }
403
+ return lines.join('\n');
404
+ }
405
+ // --- Class-level section ---
406
+ if (hasClassMatches) {
407
+ if (labelClassBuckets) {
408
+ lines.push('');
409
+ lines.push('### Class-level');
410
+ }
411
+ for (const bucket of result.buckets) {
412
+ const truncationTag = bucket.returned < bucket.total
413
+ ? ` (top ${bucket.returned} of ${bucket.total})`
414
+ : ` (${bucket.total})`;
415
+ lines.push('');
416
+ const bucketHeading = labelClassBuckets ? `#### ${bucket.subService}${truncationTag}` : `### ${bucket.subService}${truncationTag}`;
417
+ lines.push(bucketHeading);
418
+ for (const m of bucket.matches) {
419
+ const kindTag = m.kind === 'class' ? '' : ` [${m.kind}]`;
420
+ lines.push(`- \`${m.name}\`${kindTag} \`${m.filePath}:${m.line}\``);
421
+ }
422
+ }
423
+ }
424
+ // --- Method-level section ---
425
+ if (hasMethodMatches) {
426
+ lines.push('');
427
+ lines.push('### Method-level');
428
+ // Group by sub-service, then by class. Preserve the order methodMatches
429
+ // was sorted in (sub-service, class, file, line) — emit a sub-section per
430
+ // sub-service, and within it group consecutive entries by class.
431
+ let curSub = null;
432
+ let curClass = null;
433
+ for (const m of methodMatches) {
434
+ if (m.subService !== curSub) {
435
+ curSub = m.subService;
436
+ curClass = null;
437
+ lines.push('');
438
+ lines.push(`#### ${curSub}`);
439
+ }
440
+ if (m.className !== curClass) {
441
+ curClass = m.className;
442
+ lines.push('');
443
+ lines.push(`- **${curClass}**`);
444
+ }
445
+ lines.push(` - \`${m.methodName}\` \`${m.filePath}:${m.line}\``);
446
+ }
447
+ }
448
+ const o = result.omitted;
449
+ const omittedParts = [];
450
+ if (o.pastTopPerBucket > 0)
451
+ omittedParts.push(`${o.pastTopPerBucket} past top-per-bucket`);
452
+ if (o.pastMaxBuckets > 0)
453
+ omittedParts.push(`${o.pastMaxBuckets} sub-services past maxBuckets`);
454
+ if (omittedParts.length > 0) {
455
+ lines.push('');
456
+ lines.push(`_Omitted: ${omittedParts.join(' · ')}_`);
457
+ }
458
+ return lines.join('\n');
459
+ }
460
+ //# sourceMappingURL=slice.js.map