codexia 0.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 (224) hide show
  1. package/CHANGELOG.md +111 -0
  2. package/LICENSE +663 -0
  3. package/README.md +392 -0
  4. package/dist/adapters/github/index.d.ts +66 -0
  5. package/dist/adapters/github/index.d.ts.map +1 -0
  6. package/dist/adapters/github/index.js +84 -0
  7. package/dist/adapters/github/index.js.map +1 -0
  8. package/dist/adapters/index.d.ts +5 -0
  9. package/dist/adapters/index.d.ts.map +1 -0
  10. package/dist/adapters/index.js +5 -0
  11. package/dist/adapters/index.js.map +1 -0
  12. package/dist/cli/commands/changelog.d.ts +3 -0
  13. package/dist/cli/commands/changelog.d.ts.map +1 -0
  14. package/dist/cli/commands/changelog.js +221 -0
  15. package/dist/cli/commands/changelog.js.map +1 -0
  16. package/dist/cli/commands/check.d.ts +3 -0
  17. package/dist/cli/commands/check.d.ts.map +1 -0
  18. package/dist/cli/commands/check.js +35 -0
  19. package/dist/cli/commands/check.js.map +1 -0
  20. package/dist/cli/commands/complexity.d.ts +3 -0
  21. package/dist/cli/commands/complexity.d.ts.map +1 -0
  22. package/dist/cli/commands/complexity.js +103 -0
  23. package/dist/cli/commands/complexity.js.map +1 -0
  24. package/dist/cli/commands/graph.d.ts +3 -0
  25. package/dist/cli/commands/graph.d.ts.map +1 -0
  26. package/dist/cli/commands/graph.js +46 -0
  27. package/dist/cli/commands/graph.js.map +1 -0
  28. package/dist/cli/commands/history.d.ts +3 -0
  29. package/dist/cli/commands/history.d.ts.map +1 -0
  30. package/dist/cli/commands/history.js +127 -0
  31. package/dist/cli/commands/history.js.map +1 -0
  32. package/dist/cli/commands/hotpaths.d.ts +3 -0
  33. package/dist/cli/commands/hotpaths.d.ts.map +1 -0
  34. package/dist/cli/commands/hotpaths.js +153 -0
  35. package/dist/cli/commands/hotpaths.js.map +1 -0
  36. package/dist/cli/commands/impact.d.ts +3 -0
  37. package/dist/cli/commands/impact.d.ts.map +1 -0
  38. package/dist/cli/commands/impact.js +37 -0
  39. package/dist/cli/commands/impact.js.map +1 -0
  40. package/dist/cli/commands/init.d.ts +3 -0
  41. package/dist/cli/commands/init.d.ts.map +1 -0
  42. package/dist/cli/commands/init.js +167 -0
  43. package/dist/cli/commands/init.js.map +1 -0
  44. package/dist/cli/commands/invariants.d.ts +3 -0
  45. package/dist/cli/commands/invariants.d.ts.map +1 -0
  46. package/dist/cli/commands/invariants.js +176 -0
  47. package/dist/cli/commands/invariants.js.map +1 -0
  48. package/dist/cli/commands/mcp-server.d.ts +3 -0
  49. package/dist/cli/commands/mcp-server.d.ts.map +1 -0
  50. package/dist/cli/commands/mcp-server.js +64 -0
  51. package/dist/cli/commands/mcp-server.js.map +1 -0
  52. package/dist/cli/commands/monorepo.d.ts +3 -0
  53. package/dist/cli/commands/monorepo.d.ts.map +1 -0
  54. package/dist/cli/commands/monorepo.js +156 -0
  55. package/dist/cli/commands/monorepo.js.map +1 -0
  56. package/dist/cli/commands/pr-report.d.ts +3 -0
  57. package/dist/cli/commands/pr-report.d.ts.map +1 -0
  58. package/dist/cli/commands/pr-report.js +32 -0
  59. package/dist/cli/commands/pr-report.js.map +1 -0
  60. package/dist/cli/commands/scan.d.ts +3 -0
  61. package/dist/cli/commands/scan.d.ts.map +1 -0
  62. package/dist/cli/commands/scan.js +25 -0
  63. package/dist/cli/commands/scan.js.map +1 -0
  64. package/dist/cli/commands/signals.d.ts +3 -0
  65. package/dist/cli/commands/signals.d.ts.map +1 -0
  66. package/dist/cli/commands/signals.js +34 -0
  67. package/dist/cli/commands/signals.js.map +1 -0
  68. package/dist/cli/commands/tests.d.ts +3 -0
  69. package/dist/cli/commands/tests.d.ts.map +1 -0
  70. package/dist/cli/commands/tests.js +30 -0
  71. package/dist/cli/commands/tests.js.map +1 -0
  72. package/dist/cli/commands/watch.d.ts +3 -0
  73. package/dist/cli/commands/watch.d.ts.map +1 -0
  74. package/dist/cli/commands/watch.js +131 -0
  75. package/dist/cli/commands/watch.js.map +1 -0
  76. package/dist/cli/engine.d.ts +162 -0
  77. package/dist/cli/engine.d.ts.map +1 -0
  78. package/dist/cli/engine.js +564 -0
  79. package/dist/cli/engine.js.map +1 -0
  80. package/dist/cli/formatter.d.ts +39 -0
  81. package/dist/cli/formatter.d.ts.map +1 -0
  82. package/dist/cli/formatter.js +444 -0
  83. package/dist/cli/formatter.js.map +1 -0
  84. package/dist/cli/index.d.ts +2 -0
  85. package/dist/cli/index.d.ts.map +1 -0
  86. package/dist/cli/index.js +63 -0
  87. package/dist/cli/index.js.map +1 -0
  88. package/dist/cli/interactive.d.ts +7 -0
  89. package/dist/cli/interactive.d.ts.map +1 -0
  90. package/dist/cli/interactive.js +644 -0
  91. package/dist/cli/interactive.js.map +1 -0
  92. package/dist/core/dependency-graph.d.ts +54 -0
  93. package/dist/core/dependency-graph.d.ts.map +1 -0
  94. package/dist/core/dependency-graph.js +190 -0
  95. package/dist/core/dependency-graph.js.map +1 -0
  96. package/dist/core/dependency-graph.test.d.ts +2 -0
  97. package/dist/core/dependency-graph.test.d.ts.map +1 -0
  98. package/dist/core/dependency-graph.test.js +106 -0
  99. package/dist/core/dependency-graph.test.js.map +1 -0
  100. package/dist/core/git-analyzer.d.ts +52 -0
  101. package/dist/core/git-analyzer.d.ts.map +1 -0
  102. package/dist/core/git-analyzer.js +250 -0
  103. package/dist/core/git-analyzer.js.map +1 -0
  104. package/dist/core/git-analyzer.test.d.ts +2 -0
  105. package/dist/core/git-analyzer.test.d.ts.map +1 -0
  106. package/dist/core/git-analyzer.test.js +71 -0
  107. package/dist/core/git-analyzer.test.js.map +1 -0
  108. package/dist/core/index.d.ts +7 -0
  109. package/dist/core/index.d.ts.map +1 -0
  110. package/dist/core/index.js +7 -0
  111. package/dist/core/index.js.map +1 -0
  112. package/dist/core/repo-indexer.d.ts +57 -0
  113. package/dist/core/repo-indexer.d.ts.map +1 -0
  114. package/dist/core/repo-indexer.js +356 -0
  115. package/dist/core/repo-indexer.js.map +1 -0
  116. package/dist/core/repo-indexer.test.d.ts +2 -0
  117. package/dist/core/repo-indexer.test.d.ts.map +1 -0
  118. package/dist/core/repo-indexer.test.js +89 -0
  119. package/dist/core/repo-indexer.test.js.map +1 -0
  120. package/dist/core/signals-engine.d.ts +38 -0
  121. package/dist/core/signals-engine.d.ts.map +1 -0
  122. package/dist/core/signals-engine.js +142 -0
  123. package/dist/core/signals-engine.js.map +1 -0
  124. package/dist/core/signals-engine.test.d.ts +2 -0
  125. package/dist/core/signals-engine.test.d.ts.map +1 -0
  126. package/dist/core/signals-engine.test.js +129 -0
  127. package/dist/core/signals-engine.test.js.map +1 -0
  128. package/dist/core/symbol-map.d.ts +45 -0
  129. package/dist/core/symbol-map.d.ts.map +1 -0
  130. package/dist/core/symbol-map.js +187 -0
  131. package/dist/core/symbol-map.js.map +1 -0
  132. package/dist/core/types.d.ts +514 -0
  133. package/dist/core/types.d.ts.map +1 -0
  134. package/dist/core/types.js +5 -0
  135. package/dist/core/types.js.map +1 -0
  136. package/dist/core/types.test.d.ts +2 -0
  137. package/dist/core/types.test.d.ts.map +1 -0
  138. package/dist/core/types.test.js +20 -0
  139. package/dist/core/types.test.js.map +1 -0
  140. package/dist/index.d.ts +5 -0
  141. package/dist/index.d.ts.map +1 -0
  142. package/dist/index.js +9 -0
  143. package/dist/index.js.map +1 -0
  144. package/dist/mcp/index.d.ts +3 -0
  145. package/dist/mcp/index.d.ts.map +1 -0
  146. package/dist/mcp/index.js +2 -0
  147. package/dist/mcp/index.js.map +1 -0
  148. package/dist/mcp/server.d.ts +89 -0
  149. package/dist/mcp/server.d.ts.map +1 -0
  150. package/dist/mcp/server.js +549 -0
  151. package/dist/mcp/server.js.map +1 -0
  152. package/dist/modules/changelog-generator.d.ts +82 -0
  153. package/dist/modules/changelog-generator.d.ts.map +1 -0
  154. package/dist/modules/changelog-generator.js +350 -0
  155. package/dist/modules/changelog-generator.js.map +1 -0
  156. package/dist/modules/complexity-engine.d.ts +86 -0
  157. package/dist/modules/complexity-engine.d.ts.map +1 -0
  158. package/dist/modules/complexity-engine.js +355 -0
  159. package/dist/modules/complexity-engine.js.map +1 -0
  160. package/dist/modules/convention-checker.d.ts +24 -0
  161. package/dist/modules/convention-checker.d.ts.map +1 -0
  162. package/dist/modules/convention-checker.js +181 -0
  163. package/dist/modules/convention-checker.js.map +1 -0
  164. package/dist/modules/graph-utils.d.ts +38 -0
  165. package/dist/modules/graph-utils.d.ts.map +1 -0
  166. package/dist/modules/graph-utils.js +40 -0
  167. package/dist/modules/graph-utils.js.map +1 -0
  168. package/dist/modules/hot-path-detector.d.ts +105 -0
  169. package/dist/modules/hot-path-detector.d.ts.map +1 -0
  170. package/dist/modules/hot-path-detector.js +332 -0
  171. package/dist/modules/hot-path-detector.js.map +1 -0
  172. package/dist/modules/impact-analyzer.d.ts +40 -0
  173. package/dist/modules/impact-analyzer.d.ts.map +1 -0
  174. package/dist/modules/impact-analyzer.js +218 -0
  175. package/dist/modules/impact-analyzer.js.map +1 -0
  176. package/dist/modules/impact-analyzer.test.d.ts +2 -0
  177. package/dist/modules/impact-analyzer.test.d.ts.map +1 -0
  178. package/dist/modules/impact-analyzer.test.js +308 -0
  179. package/dist/modules/impact-analyzer.test.js.map +1 -0
  180. package/dist/modules/index.d.ts +14 -0
  181. package/dist/modules/index.d.ts.map +1 -0
  182. package/dist/modules/index.js +20 -0
  183. package/dist/modules/index.js.map +1 -0
  184. package/dist/modules/invariant-engine.d.ts +119 -0
  185. package/dist/modules/invariant-engine.d.ts.map +1 -0
  186. package/dist/modules/invariant-engine.js +457 -0
  187. package/dist/modules/invariant-engine.js.map +1 -0
  188. package/dist/modules/memory-loader.d.ts +34 -0
  189. package/dist/modules/memory-loader.d.ts.map +1 -0
  190. package/dist/modules/memory-loader.js +313 -0
  191. package/dist/modules/memory-loader.js.map +1 -0
  192. package/dist/modules/memory-loader.test.d.ts +2 -0
  193. package/dist/modules/memory-loader.test.d.ts.map +1 -0
  194. package/dist/modules/memory-loader.test.js +120 -0
  195. package/dist/modules/memory-loader.test.js.map +1 -0
  196. package/dist/modules/monorepo-analyzer.d.ts +141 -0
  197. package/dist/modules/monorepo-analyzer.d.ts.map +1 -0
  198. package/dist/modules/monorepo-analyzer.js +453 -0
  199. package/dist/modules/monorepo-analyzer.js.map +1 -0
  200. package/dist/modules/plugin-system.d.ts +144 -0
  201. package/dist/modules/plugin-system.d.ts.map +1 -0
  202. package/dist/modules/plugin-system.js +428 -0
  203. package/dist/modules/plugin-system.js.map +1 -0
  204. package/dist/modules/smart-test-prioritizer.d.ts +95 -0
  205. package/dist/modules/smart-test-prioritizer.d.ts.map +1 -0
  206. package/dist/modules/smart-test-prioritizer.js +328 -0
  207. package/dist/modules/smart-test-prioritizer.js.map +1 -0
  208. package/dist/modules/temporal-analyzer.d.ts +71 -0
  209. package/dist/modules/temporal-analyzer.d.ts.map +1 -0
  210. package/dist/modules/temporal-analyzer.js +301 -0
  211. package/dist/modules/temporal-analyzer.js.map +1 -0
  212. package/dist/modules/test-suggester.d.ts +22 -0
  213. package/dist/modules/test-suggester.d.ts.map +1 -0
  214. package/dist/modules/test-suggester.js +145 -0
  215. package/dist/modules/test-suggester.js.map +1 -0
  216. package/dist/modules/visualizer.d.ts +49 -0
  217. package/dist/modules/visualizer.d.ts.map +1 -0
  218. package/dist/modules/visualizer.js +302 -0
  219. package/dist/modules/visualizer.js.map +1 -0
  220. package/dist/modules/watcher.d.ts +82 -0
  221. package/dist/modules/watcher.d.ts.map +1 -0
  222. package/dist/modules/watcher.js +298 -0
  223. package/dist/modules/watcher.js.map +1 -0
  224. package/package.json +70 -0
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=signals-engine.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signals-engine.test.d.ts","sourceRoot":"","sources":["../../src/core/signals-engine.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,129 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { SignalsEngine } from './signals-engine.js';
3
+ describe('SignalsEngine', () => {
4
+ const engine = new SignalsEngine();
5
+ describe('detectHighChurn', () => {
6
+ it('should detect high churn files', () => {
7
+ const history = {
8
+ path: 'src/index.ts',
9
+ commits: Array(15).fill(null).map((_, i) => ({
10
+ hash: `hash${i}`,
11
+ message: `commit ${i}`,
12
+ author: 'test',
13
+ date: new Date(),
14
+ files: ['src/index.ts'],
15
+ })),
16
+ authors: [{ name: 'test', email: 'test@test.com', commits: 15, additions: 100, deletions: 50 }],
17
+ changeFrequency: 0.5, // High frequency
18
+ lastModified: new Date(),
19
+ };
20
+ const signal = engine.detectHighChurn(history);
21
+ expect(signal).not.toBeNull();
22
+ expect(signal?.type).toBe('high-churn');
23
+ });
24
+ it('should not flag low churn files', () => {
25
+ const history = {
26
+ path: 'src/index.ts',
27
+ commits: [{ hash: 'abc', message: 'init', author: 'test', date: new Date(), files: ['src/index.ts'] }],
28
+ authors: [{ name: 'test', email: 'test@test.com', commits: 1, additions: 10, deletions: 0 }],
29
+ changeFrequency: 0.01,
30
+ lastModified: new Date(),
31
+ };
32
+ const signal = engine.detectHighChurn(history);
33
+ expect(signal).toBeNull();
34
+ });
35
+ });
36
+ describe('detectGodClass', () => {
37
+ it('should detect large files', () => {
38
+ const signal = engine.detectGodClass('src/big.ts', 600, 50);
39
+ expect(signal).not.toBeNull();
40
+ expect(signal?.type).toBe('god-class');
41
+ expect(signal?.severity).toBe('warning');
42
+ });
43
+ it('should not flag small files', () => {
44
+ const signal = engine.detectGodClass('src/small.ts', 100, 5);
45
+ expect(signal).toBeNull();
46
+ });
47
+ });
48
+ describe('detectCircularDependency', () => {
49
+ it('should create signal for circular dependency', () => {
50
+ const cycle = ['src/a.ts', 'src/b.ts', 'src/a.ts'];
51
+ const signal = engine.detectCircularDependency(cycle);
52
+ expect(signal.type).toBe('circular-dependency');
53
+ expect(signal.severity).toBe('error');
54
+ expect(signal.message).toContain('src/a.ts');
55
+ expect(signal.message).toContain('src/b.ts');
56
+ });
57
+ });
58
+ describe('detectOrphanCode', () => {
59
+ it('should detect unused exports', () => {
60
+ const symbol = {
61
+ name: 'unusedFunction',
62
+ kind: 'function',
63
+ filePath: 'src/utils.ts',
64
+ line: 10,
65
+ column: 1,
66
+ exported: true,
67
+ references: [],
68
+ };
69
+ const signal = engine.detectOrphanCode(symbol, 0);
70
+ expect(signal).not.toBeNull();
71
+ expect(signal?.type).toBe('orphan-code');
72
+ });
73
+ it('should not flag used exports', () => {
74
+ const symbol = {
75
+ name: 'usedFunction',
76
+ kind: 'function',
77
+ filePath: 'src/utils.ts',
78
+ line: 10,
79
+ column: 1,
80
+ exported: true,
81
+ references: [],
82
+ };
83
+ const signal = engine.detectOrphanCode(symbol, 5);
84
+ expect(signal).toBeNull();
85
+ });
86
+ it('should not flag non-exported symbols', () => {
87
+ const symbol = {
88
+ name: 'privateFunction',
89
+ kind: 'function',
90
+ filePath: 'src/utils.ts',
91
+ line: 10,
92
+ column: 1,
93
+ exported: false,
94
+ references: [],
95
+ };
96
+ const signal = engine.detectOrphanCode(symbol, 0);
97
+ expect(signal).toBeNull();
98
+ });
99
+ });
100
+ describe('detectMissingTests', () => {
101
+ it('should flag files without tests', () => {
102
+ const signal = engine.detectMissingTests('src/utils.ts', false);
103
+ expect(signal).not.toBeNull();
104
+ expect(signal?.type).toBe('missing-tests');
105
+ });
106
+ it('should not flag test files', () => {
107
+ const signal = engine.detectMissingTests('src/utils.test.ts', false);
108
+ expect(signal).toBeNull();
109
+ });
110
+ it('should not flag files with tests', () => {
111
+ const signal = engine.detectMissingTests('src/utils.ts', true);
112
+ expect(signal).toBeNull();
113
+ });
114
+ });
115
+ describe('analyzeAll', () => {
116
+ it('should return all detected signals', () => {
117
+ const files = new Map([
118
+ ['src/big.ts', { lines: 600, symbols: Array(10).fill({ exported: false }) }],
119
+ ['src/small.ts', { lines: 100, symbols: [] }],
120
+ ]);
121
+ const cycles = [['src/a.ts', 'src/b.ts', 'src/a.ts']];
122
+ const signals = engine.analyzeAll(files, new Map(), cycles);
123
+ // Should have god class signal and cycle signal
124
+ expect(signals.some(s => s.type === 'god-class')).toBe(true);
125
+ expect(signals.some(s => s.type === 'circular-dependency')).toBe(true);
126
+ });
127
+ });
128
+ });
129
+ //# sourceMappingURL=signals-engine.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signals-engine.test.js","sourceRoot":"","sources":["../../src/core/signals-engine.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type { Symbol, SymbolKind, FileInfo } from './types.js';
2
+ export declare class SymbolMap {
3
+ private project;
4
+ private symbols;
5
+ private fileSymbols;
6
+ private initialized;
7
+ constructor(repoRoot: string);
8
+ /**
9
+ * Build symbol map from indexed files
10
+ */
11
+ buildFromFiles(files: Map<string, FileInfo>): void;
12
+ /**
13
+ * Find symbol by name
14
+ */
15
+ findByName(name: string): Symbol[];
16
+ /**
17
+ * Find symbols in a file
18
+ */
19
+ findInFile(filePath: string): Symbol[];
20
+ /**
21
+ * Find exported symbols
22
+ */
23
+ findExported(): Symbol[];
24
+ /**
25
+ * Find symbols by kind
26
+ */
27
+ findByKind(kind: SymbolKind): Symbol[];
28
+ /**
29
+ * Get all symbols
30
+ */
31
+ getAllSymbols(): Symbol[];
32
+ /**
33
+ * Get symbol count
34
+ */
35
+ getCount(): number;
36
+ /**
37
+ * Check if initialized
38
+ */
39
+ isInitialized(): boolean;
40
+ /**
41
+ * Analyze a TypeScript/JavaScript file for detailed symbol information
42
+ */
43
+ analyzeFile(filePath: string, content: string): Symbol[];
44
+ }
45
+ //# sourceMappingURL=symbol-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbol-map.d.ts","sourceRoot":"","sources":["../../src/core/symbol-map.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE/D,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,WAAW,CAAoC;IACvD,OAAO,CAAC,WAAW,CAAkB;gBAEzB,QAAQ,EAAE,MAAM;IAa5B;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI;IAalD;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAIlC;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAItC;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE;IAQxB;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE;IAQtC;;OAEG;IACH,aAAa,IAAI,MAAM,EAAE;IAQzB;;OAEG;IACH,QAAQ,IAAI,MAAM;IAQlB;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;CAsGzD"}
@@ -0,0 +1,187 @@
1
+ import * as path from 'node:path';
2
+ import { Project } from 'ts-morph';
3
+ export class SymbolMap {
4
+ project;
5
+ symbols = new Map(); // name -> symbols
6
+ fileSymbols = new Map(); // file -> symbols
7
+ initialized = false;
8
+ constructor(repoRoot) {
9
+ try {
10
+ this.project = new Project({
11
+ tsConfigFilePath: path.join(repoRoot, 'tsconfig.json'),
12
+ skipAddingFilesFromTsConfig: true,
13
+ });
14
+ }
15
+ catch {
16
+ this.project = new Project({
17
+ skipAddingFilesFromTsConfig: true,
18
+ });
19
+ }
20
+ }
21
+ /**
22
+ * Build symbol map from indexed files
23
+ */
24
+ buildFromFiles(files) {
25
+ for (const [filePath, fileInfo] of files) {
26
+ this.fileSymbols.set(filePath, fileInfo.symbols);
27
+ for (const symbol of fileInfo.symbols) {
28
+ const existing = this.symbols.get(symbol.name) || [];
29
+ existing.push(symbol);
30
+ this.symbols.set(symbol.name, existing);
31
+ }
32
+ }
33
+ this.initialized = true;
34
+ }
35
+ /**
36
+ * Find symbol by name
37
+ */
38
+ findByName(name) {
39
+ return this.symbols.get(name) || [];
40
+ }
41
+ /**
42
+ * Find symbols in a file
43
+ */
44
+ findInFile(filePath) {
45
+ return this.fileSymbols.get(filePath) || [];
46
+ }
47
+ /**
48
+ * Find exported symbols
49
+ */
50
+ findExported() {
51
+ const result = [];
52
+ for (const symbols of this.symbols.values()) {
53
+ result.push(...symbols.filter(s => s.exported));
54
+ }
55
+ return result;
56
+ }
57
+ /**
58
+ * Find symbols by kind
59
+ */
60
+ findByKind(kind) {
61
+ const result = [];
62
+ for (const symbols of this.symbols.values()) {
63
+ result.push(...symbols.filter(s => s.kind === kind));
64
+ }
65
+ return result;
66
+ }
67
+ /**
68
+ * Get all symbols
69
+ */
70
+ getAllSymbols() {
71
+ const result = [];
72
+ for (const symbols of this.symbols.values()) {
73
+ result.push(...symbols);
74
+ }
75
+ return result;
76
+ }
77
+ /**
78
+ * Get symbol count
79
+ */
80
+ getCount() {
81
+ let count = 0;
82
+ for (const symbols of this.symbols.values()) {
83
+ count += symbols.length;
84
+ }
85
+ return count;
86
+ }
87
+ /**
88
+ * Check if initialized
89
+ */
90
+ isInitialized() {
91
+ return this.initialized;
92
+ }
93
+ /**
94
+ * Analyze a TypeScript/JavaScript file for detailed symbol information
95
+ */
96
+ analyzeFile(filePath, content) {
97
+ const symbols = [];
98
+ try {
99
+ const sourceFile = this.project.createSourceFile(`temp_${Date.now()}.ts`, content, { overwrite: true });
100
+ // Find classes
101
+ sourceFile.getClasses().forEach(cls => {
102
+ symbols.push({
103
+ name: cls.getName() || 'anonymous',
104
+ kind: 'class',
105
+ filePath,
106
+ line: cls.getStartLineNumber(),
107
+ column: 1,
108
+ exported: cls.isExported(),
109
+ documentation: cls.getJsDocs().map(d => d.getDescription()).join('\n'),
110
+ references: [],
111
+ });
112
+ // Find methods
113
+ cls.getMethods().forEach(method => {
114
+ symbols.push({
115
+ name: method.getName(),
116
+ kind: 'method',
117
+ filePath,
118
+ line: method.getStartLineNumber(),
119
+ column: 1,
120
+ exported: cls.isExported(),
121
+ documentation: method.getJsDocs().map(d => d.getDescription()).join('\n'),
122
+ references: [],
123
+ });
124
+ });
125
+ });
126
+ // Find interfaces
127
+ sourceFile.getInterfaces().forEach(iface => {
128
+ symbols.push({
129
+ name: iface.getName(),
130
+ kind: 'interface',
131
+ filePath,
132
+ line: iface.getStartLineNumber(),
133
+ column: 1,
134
+ exported: iface.isExported(),
135
+ documentation: iface.getJsDocs().map(d => d.getDescription()).join('\n'),
136
+ references: [],
137
+ });
138
+ });
139
+ // Find functions
140
+ sourceFile.getFunctions().forEach(func => {
141
+ symbols.push({
142
+ name: func.getName() || 'anonymous',
143
+ kind: 'function',
144
+ filePath,
145
+ line: func.getStartLineNumber(),
146
+ column: 1,
147
+ exported: func.isExported(),
148
+ documentation: func.getJsDocs().map(d => d.getDescription()).join('\n'),
149
+ references: [],
150
+ });
151
+ });
152
+ // Find type aliases
153
+ sourceFile.getTypeAliases().forEach(type => {
154
+ symbols.push({
155
+ name: type.getName(),
156
+ kind: 'type',
157
+ filePath,
158
+ line: type.getStartLineNumber(),
159
+ column: 1,
160
+ exported: type.isExported(),
161
+ documentation: type.getJsDocs().map(d => d.getDescription()).join('\n'),
162
+ references: [],
163
+ });
164
+ });
165
+ // Find enums
166
+ sourceFile.getEnums().forEach(enumDecl => {
167
+ symbols.push({
168
+ name: enumDecl.getName(),
169
+ kind: 'enum',
170
+ filePath,
171
+ line: enumDecl.getStartLineNumber(),
172
+ column: 1,
173
+ exported: enumDecl.isExported(),
174
+ documentation: enumDecl.getJsDocs().map(d => d.getDescription()).join('\n'),
175
+ references: [],
176
+ });
177
+ });
178
+ // Clean up
179
+ this.project.removeSourceFile(sourceFile);
180
+ }
181
+ catch {
182
+ // Fall back to regex-based extraction if ts-morph fails
183
+ }
184
+ return symbols;
185
+ }
186
+ }
187
+ //# sourceMappingURL=symbol-map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbol-map.js","sourceRoot":"","sources":["../../src/core/symbol-map.ts"],"names":[],"mappings":"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"}