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,250 @@
1
+ import { simpleGit } from 'simple-git';
2
+ export class GitAnalyzer {
3
+ git;
4
+ repoRoot;
5
+ constructor(repoPath) {
6
+ this.repoRoot = repoPath;
7
+ this.git = simpleGit(repoPath);
8
+ }
9
+ /**
10
+ * Get the repository root path
11
+ */
12
+ getRepoRoot() {
13
+ return this.repoRoot;
14
+ }
15
+ /**
16
+ * Check if this is a valid git repository
17
+ */
18
+ async isGitRepo() {
19
+ try {
20
+ await this.git.status();
21
+ return true;
22
+ }
23
+ catch {
24
+ return false;
25
+ }
26
+ }
27
+ /**
28
+ * Check if a git ref exists
29
+ */
30
+ async hasRef(ref) {
31
+ try {
32
+ await this.git.revparse([ref]);
33
+ return true;
34
+ }
35
+ catch {
36
+ return false;
37
+ }
38
+ }
39
+ /**
40
+ * Get the current branch name
41
+ */
42
+ async getCurrentBranch() {
43
+ const status = await this.git.status();
44
+ return status.current || 'HEAD';
45
+ }
46
+ /**
47
+ * Get diff between two refs
48
+ */
49
+ async getDiff(base = 'HEAD', head = '') {
50
+ const diffSummary = await this.git.diffSummary([base, head].filter(Boolean));
51
+ // Get raw diff output for hunk parsing
52
+ const rawDiff = await this.git.diff([base, head].filter(Boolean));
53
+ const fileHunks = this.parseDiffHunks(rawDiff);
54
+ const files = diffSummary.files.map(file => {
55
+ const filePath = 'file' in file ? file.file : '';
56
+ return {
57
+ path: filePath,
58
+ status: this.getFileStatus(file),
59
+ additions: 'insertions' in file ? file.insertions : 0,
60
+ deletions: 'deletions' in file ? file.deletions : 0,
61
+ hunks: fileHunks.get(filePath) || [],
62
+ };
63
+ });
64
+ const stats = {
65
+ files: diffSummary.files.length,
66
+ additions: diffSummary.insertions,
67
+ deletions: diffSummary.deletions,
68
+ };
69
+ return { files, stats, base, head: head || 'working tree' };
70
+ }
71
+ /**
72
+ * Get diff for staged changes
73
+ */
74
+ async getStagedDiff() {
75
+ const diffSummary = await this.git.diffSummary(['--staged']);
76
+ // Get raw diff output for hunk parsing
77
+ const rawDiff = await this.git.diff(['--staged']);
78
+ const fileHunks = this.parseDiffHunks(rawDiff);
79
+ const files = diffSummary.files.map(file => {
80
+ const filePath = 'file' in file ? file.file : '';
81
+ return {
82
+ path: filePath,
83
+ status: this.getFileStatus(file),
84
+ additions: 'insertions' in file ? file.insertions : 0,
85
+ deletions: 'deletions' in file ? file.deletions : 0,
86
+ hunks: fileHunks.get(filePath) || [],
87
+ };
88
+ });
89
+ const stats = {
90
+ files: diffSummary.files.length,
91
+ additions: diffSummary.insertions,
92
+ deletions: diffSummary.deletions,
93
+ };
94
+ return { files, stats, base: 'HEAD', head: 'staged' };
95
+ }
96
+ /**
97
+ * Get file history
98
+ */
99
+ async getFileHistory(filePath, maxCommits = 50) {
100
+ const log = await this.git.log({
101
+ file: filePath,
102
+ maxCount: maxCommits,
103
+ });
104
+ const commits = log.all.map(commit => ({
105
+ hash: commit.hash,
106
+ message: commit.message,
107
+ author: commit.author_name,
108
+ date: new Date(commit.date),
109
+ files: [filePath],
110
+ }));
111
+ const authorMap = new Map();
112
+ for (const commit of log.all) {
113
+ const key = commit.author_email;
114
+ const existing = authorMap.get(key);
115
+ if (existing) {
116
+ existing.commits++;
117
+ }
118
+ else {
119
+ authorMap.set(key, {
120
+ name: commit.author_name,
121
+ email: commit.author_email,
122
+ commits: 1,
123
+ additions: 0,
124
+ deletions: 0,
125
+ });
126
+ }
127
+ }
128
+ const lastCommit = commits[0];
129
+ const firstCommit = commits[commits.length - 1];
130
+ const daysBetween = lastCommit && firstCommit
131
+ ? (lastCommit.date.getTime() - firstCommit.date.getTime()) / (1000 * 60 * 60 * 24)
132
+ : 1;
133
+ const changeFrequency = commits.length / Math.max(daysBetween, 1);
134
+ return {
135
+ path: filePath,
136
+ commits,
137
+ authors: Array.from(authorMap.values()),
138
+ changeFrequency,
139
+ lastModified: lastCommit?.date || new Date(),
140
+ };
141
+ }
142
+ /**
143
+ * Get commits that touched the same files
144
+ */
145
+ async findRelatedCommits(filePaths, maxCommits = 20) {
146
+ const commits = [];
147
+ const seen = new Set();
148
+ for (const filePath of filePaths) {
149
+ try {
150
+ const log = await this.git.log({
151
+ file: filePath,
152
+ maxCount: Math.ceil(maxCommits / filePaths.length),
153
+ });
154
+ for (const commit of log.all) {
155
+ if (!seen.has(commit.hash)) {
156
+ seen.add(commit.hash);
157
+ commits.push({
158
+ hash: commit.hash,
159
+ message: commit.message,
160
+ author: commit.author_name,
161
+ date: new Date(commit.date),
162
+ files: [filePath],
163
+ });
164
+ }
165
+ }
166
+ }
167
+ catch {
168
+ // Skip files with no history
169
+ }
170
+ }
171
+ return commits
172
+ .sort((a, b) => b.date.getTime() - a.date.getTime())
173
+ .slice(0, maxCommits);
174
+ }
175
+ /**
176
+ * Get list of changed files in working directory
177
+ */
178
+ async getChangedFiles() {
179
+ const status = await this.git.status();
180
+ return [
181
+ ...status.modified,
182
+ ...status.created,
183
+ ...status.deleted,
184
+ ...status.renamed.map(r => r.to),
185
+ ];
186
+ }
187
+ /**
188
+ * Get list of staged files
189
+ */
190
+ async getStagedFiles() {
191
+ const status = await this.git.status();
192
+ return status.staged;
193
+ }
194
+ getFileStatus(file) {
195
+ const fileObj = file;
196
+ if (!fileObj.file)
197
+ return 'modified';
198
+ // Simple heuristic based on insertions/deletions
199
+ const f = file;
200
+ if (f.binary)
201
+ return 'modified';
202
+ if (f.insertions && !f.deletions)
203
+ return 'added';
204
+ if (!f.insertions && f.deletions)
205
+ return 'deleted';
206
+ return 'modified';
207
+ }
208
+ /**
209
+ * Parse unified diff output into hunks per file
210
+ */
211
+ parseDiffHunks(rawDiff) {
212
+ const fileHunks = new Map();
213
+ if (!rawDiff)
214
+ return fileHunks;
215
+ let currentFile = null;
216
+ let currentHunk = null;
217
+ const lines = rawDiff.split('\n');
218
+ for (const line of lines) {
219
+ // Match file header: diff --git a/path b/path
220
+ const fileMatch = line.match(/^diff --git a\/(.+) b\/(.+)$/);
221
+ if (fileMatch) {
222
+ currentFile = fileMatch[2];
223
+ if (!fileHunks.has(currentFile)) {
224
+ fileHunks.set(currentFile, []);
225
+ }
226
+ currentHunk = null;
227
+ continue;
228
+ }
229
+ // Match hunk header: @@ -oldStart,oldLines +newStart,newLines @@
230
+ const hunkMatch = line.match(/^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@(.*)$/);
231
+ if (hunkMatch && currentFile) {
232
+ currentHunk = {
233
+ oldStart: parseInt(hunkMatch[1], 10),
234
+ oldLines: parseInt(hunkMatch[2] || '1', 10),
235
+ newStart: parseInt(hunkMatch[3], 10),
236
+ newLines: parseInt(hunkMatch[4] || '1', 10),
237
+ content: hunkMatch[5] ? hunkMatch[5].trim() + '\n' : '',
238
+ };
239
+ fileHunks.get(currentFile).push(currentHunk);
240
+ continue;
241
+ }
242
+ // Accumulate hunk content (context, additions, deletions)
243
+ if (currentHunk && (line.startsWith(' ') || line.startsWith('+') || line.startsWith('-'))) {
244
+ currentHunk.content += line + '\n';
245
+ }
246
+ }
247
+ return fileHunks;
248
+ }
249
+ }
250
+ //# sourceMappingURL=git-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-analyzer.js","sourceRoot":"","sources":["../../src/core/git-analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=git-analyzer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-analyzer.test.d.ts","sourceRoot":"","sources":["../../src/core/git-analyzer.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,71 @@
1
+ import { describe, it, expect, beforeEach } from 'vitest';
2
+ import { GitAnalyzer } from './git-analyzer.js';
3
+ describe('GitAnalyzer', () => {
4
+ let analyzer;
5
+ beforeEach(() => {
6
+ analyzer = new GitAnalyzer(process.cwd());
7
+ });
8
+ it('should create an analyzer instance', () => {
9
+ expect(analyzer).toBeDefined();
10
+ });
11
+ it('should return the repo root', () => {
12
+ expect(analyzer.getRepoRoot()).toBe(process.cwd());
13
+ });
14
+ it('should detect if directory is a git repo', async () => {
15
+ const isRepo = await analyzer.isGitRepo();
16
+ expect(typeof isRepo).toBe('boolean');
17
+ });
18
+ it('should get changed files list', async () => {
19
+ const files = await analyzer.getChangedFiles();
20
+ expect(Array.isArray(files)).toBe(true);
21
+ });
22
+ it('should get staged files list', async () => {
23
+ const files = await analyzer.getStagedFiles();
24
+ expect(Array.isArray(files)).toBe(true);
25
+ });
26
+ describe('parseDiffHunks', () => {
27
+ it('should parse diff hunks from raw diff output', async () => {
28
+ // This tests the parseDiffHunks method indirectly through getDiff
29
+ // We can't directly test the private method, but we can verify it works
30
+ // by checking that hunks are populated in diff results
31
+ // Skip if not in a git repo
32
+ const isRepo = await analyzer.isGitRepo();
33
+ if (!isRepo) {
34
+ return;
35
+ }
36
+ try {
37
+ const diff = await analyzer.getDiff('HEAD~1', 'HEAD');
38
+ // Check that files have hunks populated
39
+ for (const file of diff.files) {
40
+ expect(Array.isArray(file.hunks)).toBe(true);
41
+ // If there are hunks, validate their structure
42
+ for (const hunk of file.hunks) {
43
+ expect(typeof hunk.oldStart).toBe('number');
44
+ expect(typeof hunk.oldLines).toBe('number');
45
+ expect(typeof hunk.newStart).toBe('number');
46
+ expect(typeof hunk.newLines).toBe('number');
47
+ expect(typeof hunk.content).toBe('string');
48
+ }
49
+ }
50
+ }
51
+ catch (error) {
52
+ // Test passes if we can't get diff (e.g., no commits)
53
+ }
54
+ });
55
+ it('should handle empty diff output', async () => {
56
+ // Test with same ref should produce empty diff
57
+ const isRepo = await analyzer.isGitRepo();
58
+ if (!isRepo) {
59
+ return;
60
+ }
61
+ try {
62
+ const diff = await analyzer.getDiff('HEAD', 'HEAD');
63
+ expect(diff.files).toEqual([]);
64
+ }
65
+ catch (error) {
66
+ // Test passes if we can't get diff
67
+ }
68
+ });
69
+ });
70
+ });
71
+ //# sourceMappingURL=git-analyzer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-analyzer.test.js","sourceRoot":"","sources":["../../src/core/git-analyzer.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export { GitAnalyzer } from './git-analyzer.js';
2
+ export { RepoIndexer } from './repo-indexer.js';
3
+ export { DependencyGraph } from './dependency-graph.js';
4
+ export { SymbolMap } from './symbol-map.js';
5
+ export { SignalsEngine } from './signals-engine.js';
6
+ export * from './types.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,cAAc,YAAY,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { GitAnalyzer } from './git-analyzer.js';
2
+ export { RepoIndexer } from './repo-indexer.js';
3
+ export { DependencyGraph } from './dependency-graph.js';
4
+ export { SymbolMap } from './symbol-map.js';
5
+ export { SignalsEngine } from './signals-engine.js';
6
+ export * from './types.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,cAAc,YAAY,CAAC"}
@@ -0,0 +1,57 @@
1
+ import type { FileInfo } from './types.js';
2
+ export declare class RepoIndexer {
3
+ private repoRoot;
4
+ private files;
5
+ private indexed;
6
+ constructor(repoRoot: string);
7
+ /**
8
+ * Index the repository (with optional caching)
9
+ */
10
+ index(options?: {
11
+ useCache?: boolean;
12
+ }): Promise<void>;
13
+ /**
14
+ * Force re-index without using cache
15
+ */
16
+ reindex(): Promise<void>;
17
+ /**
18
+ * Clear the index cache
19
+ */
20
+ clearCache(): Promise<void>;
21
+ private performIndex;
22
+ /**
23
+ * Load index from cache file
24
+ */
25
+ private loadCache;
26
+ /**
27
+ * Save index to cache file (only if .codexia directory exists)
28
+ */
29
+ private saveCache;
30
+ /**
31
+ * Get all indexed files
32
+ */
33
+ getFiles(): Map<string, FileInfo>;
34
+ /**
35
+ * Get file info by path
36
+ */
37
+ getFile(filePath: string): FileInfo | undefined;
38
+ /**
39
+ * Check if repository has been indexed
40
+ */
41
+ isIndexed(): boolean;
42
+ /**
43
+ * Get statistics about the indexed repository
44
+ */
45
+ getStats(): {
46
+ files: number;
47
+ symbols: number;
48
+ exports: number;
49
+ avgFanOut: number;
50
+ };
51
+ private analyzeFile;
52
+ private getLanguage;
53
+ private extractImports;
54
+ private extractExports;
55
+ private extractSymbols;
56
+ }
57
+ //# sourceMappingURL=repo-indexer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-indexer.d.ts","sourceRoot":"","sources":["../../src/core/repo-indexer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAA8C,MAAM,YAAY,CAAC;AAuBvF,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,OAAO,CAAkB;gBAErB,QAAQ,EAAE,MAAM;IAI5B;;OAEG;IACG,KAAK,CAAC,OAAO,GAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBhE;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YASnB,YAAY;IAwC1B;;OAEG;YACW,SAAS;IAsCvB;;OAEG;YACW,SAAS;IA2CvB;;OAEG;IACH,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;IAIjC;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAI/C;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,QAAQ,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAqBlF,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,cAAc;IAyDtB,OAAO,CAAC,cAAc;IAoCtB,OAAO,CAAC,cAAc;CAuCvB"}