agents-reverse-engineer 0.1.1

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 (207) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +238 -0
  3. package/dist/change-detection/detector.d.ts +24 -0
  4. package/dist/change-detection/detector.d.ts.map +1 -0
  5. package/dist/change-detection/detector.js +114 -0
  6. package/dist/change-detection/detector.js.map +1 -0
  7. package/dist/change-detection/index.d.ts +9 -0
  8. package/dist/change-detection/index.d.ts.map +1 -0
  9. package/dist/change-detection/index.js +8 -0
  10. package/dist/change-detection/index.js.map +1 -0
  11. package/dist/change-detection/types.d.ts +39 -0
  12. package/dist/change-detection/types.d.ts.map +1 -0
  13. package/dist/change-detection/types.js +5 -0
  14. package/dist/change-detection/types.js.map +1 -0
  15. package/dist/cli/discover.d.ts +52 -0
  16. package/dist/cli/discover.d.ts.map +1 -0
  17. package/dist/cli/discover.js +125 -0
  18. package/dist/cli/discover.js.map +1 -0
  19. package/dist/cli/generate.d.ts +41 -0
  20. package/dist/cli/generate.d.ts.map +1 -0
  21. package/dist/cli/generate.js +179 -0
  22. package/dist/cli/generate.js.map +1 -0
  23. package/dist/cli/index.d.ts +12 -0
  24. package/dist/cli/index.d.ts.map +1 -0
  25. package/dist/cli/index.js +182 -0
  26. package/dist/cli/index.js.map +1 -0
  27. package/dist/cli/init.d.ts +38 -0
  28. package/dist/cli/init.d.ts.map +1 -0
  29. package/dist/cli/init.js +94 -0
  30. package/dist/cli/init.js.map +1 -0
  31. package/dist/cli/update.d.ts +28 -0
  32. package/dist/cli/update.d.ts.map +1 -0
  33. package/dist/cli/update.js +296 -0
  34. package/dist/cli/update.js.map +1 -0
  35. package/dist/config/defaults.d.ts +38 -0
  36. package/dist/config/defaults.d.ts.map +1 -0
  37. package/dist/config/defaults.js +89 -0
  38. package/dist/config/defaults.js.map +1 -0
  39. package/dist/config/loader.d.ts +66 -0
  40. package/dist/config/loader.d.ts.map +1 -0
  41. package/dist/config/loader.js +158 -0
  42. package/dist/config/loader.js.map +1 -0
  43. package/dist/config/schema.d.ts +235 -0
  44. package/dist/config/schema.d.ts.map +1 -0
  45. package/dist/config/schema.js +80 -0
  46. package/dist/config/schema.js.map +1 -0
  47. package/dist/discovery/filters/binary.d.ts +46 -0
  48. package/dist/discovery/filters/binary.d.ts.map +1 -0
  49. package/dist/discovery/filters/binary.js +157 -0
  50. package/dist/discovery/filters/binary.js.map +1 -0
  51. package/dist/discovery/filters/custom.d.ts +26 -0
  52. package/dist/discovery/filters/custom.d.ts.map +1 -0
  53. package/dist/discovery/filters/custom.js +50 -0
  54. package/dist/discovery/filters/custom.js.map +1 -0
  55. package/dist/discovery/filters/gitignore.d.ts +24 -0
  56. package/dist/discovery/filters/gitignore.d.ts.map +1 -0
  57. package/dist/discovery/filters/gitignore.js +53 -0
  58. package/dist/discovery/filters/gitignore.js.map +1 -0
  59. package/dist/discovery/filters/index.d.ts +85 -0
  60. package/dist/discovery/filters/index.d.ts.map +1 -0
  61. package/dist/discovery/filters/index.js +98 -0
  62. package/dist/discovery/filters/index.js.map +1 -0
  63. package/dist/discovery/filters/vendor.d.ts +30 -0
  64. package/dist/discovery/filters/vendor.d.ts.map +1 -0
  65. package/dist/discovery/filters/vendor.js +57 -0
  66. package/dist/discovery/filters/vendor.js.map +1 -0
  67. package/dist/discovery/types.d.ts +66 -0
  68. package/dist/discovery/types.d.ts.map +1 -0
  69. package/dist/discovery/types.js +8 -0
  70. package/dist/discovery/types.js.map +1 -0
  71. package/dist/discovery/walker.d.ts +24 -0
  72. package/dist/discovery/walker.d.ts.map +1 -0
  73. package/dist/discovery/walker.js +35 -0
  74. package/dist/discovery/walker.js.map +1 -0
  75. package/dist/generation/budget/chunker.d.ts +38 -0
  76. package/dist/generation/budget/chunker.d.ts.map +1 -0
  77. package/dist/generation/budget/chunker.js +73 -0
  78. package/dist/generation/budget/chunker.js.map +1 -0
  79. package/dist/generation/budget/counter.d.ts +26 -0
  80. package/dist/generation/budget/counter.d.ts.map +1 -0
  81. package/dist/generation/budget/counter.js +45 -0
  82. package/dist/generation/budget/counter.js.map +1 -0
  83. package/dist/generation/budget/index.d.ts +4 -0
  84. package/dist/generation/budget/index.d.ts.map +1 -0
  85. package/dist/generation/budget/index.js +4 -0
  86. package/dist/generation/budget/index.js.map +1 -0
  87. package/dist/generation/budget/tracker.d.ts +63 -0
  88. package/dist/generation/budget/tracker.d.ts.map +1 -0
  89. package/dist/generation/budget/tracker.js +96 -0
  90. package/dist/generation/budget/tracker.js.map +1 -0
  91. package/dist/generation/complexity.d.ts +43 -0
  92. package/dist/generation/complexity.d.ts.map +1 -0
  93. package/dist/generation/complexity.js +156 -0
  94. package/dist/generation/complexity.js.map +1 -0
  95. package/dist/generation/detection/detector.d.ts +23 -0
  96. package/dist/generation/detection/detector.d.ts.map +1 -0
  97. package/dist/generation/detection/detector.js +62 -0
  98. package/dist/generation/detection/detector.js.map +1 -0
  99. package/dist/generation/detection/patterns.d.ts +21 -0
  100. package/dist/generation/detection/patterns.d.ts.map +1 -0
  101. package/dist/generation/detection/patterns.js +115 -0
  102. package/dist/generation/detection/patterns.js.map +1 -0
  103. package/dist/generation/executor.d.ts +95 -0
  104. package/dist/generation/executor.d.ts.map +1 -0
  105. package/dist/generation/executor.js +352 -0
  106. package/dist/generation/executor.js.map +1 -0
  107. package/dist/generation/orchestrator.d.ts +126 -0
  108. package/dist/generation/orchestrator.d.ts.map +1 -0
  109. package/dist/generation/orchestrator.js +222 -0
  110. package/dist/generation/orchestrator.js.map +1 -0
  111. package/dist/generation/prompts/builder.d.ts +31 -0
  112. package/dist/generation/prompts/builder.d.ts.map +1 -0
  113. package/dist/generation/prompts/builder.js +136 -0
  114. package/dist/generation/prompts/builder.js.map +1 -0
  115. package/dist/generation/prompts/index.d.ts +5 -0
  116. package/dist/generation/prompts/index.d.ts.map +1 -0
  117. package/dist/generation/prompts/index.js +4 -0
  118. package/dist/generation/prompts/index.js.map +1 -0
  119. package/dist/generation/prompts/templates.d.ts +11 -0
  120. package/dist/generation/prompts/templates.d.ts.map +1 -0
  121. package/dist/generation/prompts/templates.js +247 -0
  122. package/dist/generation/prompts/templates.js.map +1 -0
  123. package/dist/generation/prompts/types.d.ts +71 -0
  124. package/dist/generation/prompts/types.d.ts.map +1 -0
  125. package/dist/generation/prompts/types.js +23 -0
  126. package/dist/generation/prompts/types.js.map +1 -0
  127. package/dist/generation/types.d.ts +72 -0
  128. package/dist/generation/types.d.ts.map +1 -0
  129. package/dist/generation/types.js +5 -0
  130. package/dist/generation/types.js.map +1 -0
  131. package/dist/generation/writers/agents-md.d.ts +63 -0
  132. package/dist/generation/writers/agents-md.d.ts.map +1 -0
  133. package/dist/generation/writers/agents-md.js +235 -0
  134. package/dist/generation/writers/agents-md.js.map +1 -0
  135. package/dist/generation/writers/claude-md.d.ts +13 -0
  136. package/dist/generation/writers/claude-md.d.ts.map +1 -0
  137. package/dist/generation/writers/claude-md.js +33 -0
  138. package/dist/generation/writers/claude-md.js.map +1 -0
  139. package/dist/generation/writers/index.d.ts +5 -0
  140. package/dist/generation/writers/index.d.ts.map +1 -0
  141. package/dist/generation/writers/index.js +5 -0
  142. package/dist/generation/writers/index.js.map +1 -0
  143. package/dist/generation/writers/sum.d.ts +37 -0
  144. package/dist/generation/writers/sum.d.ts.map +1 -0
  145. package/dist/generation/writers/sum.js +98 -0
  146. package/dist/generation/writers/sum.js.map +1 -0
  147. package/dist/generation/writers/supplementary.d.ts +53 -0
  148. package/dist/generation/writers/supplementary.d.ts.map +1 -0
  149. package/dist/generation/writers/supplementary.js +195 -0
  150. package/dist/generation/writers/supplementary.js.map +1 -0
  151. package/dist/integration/detect.d.ts +28 -0
  152. package/dist/integration/detect.d.ts.map +1 -0
  153. package/dist/integration/detect.js +64 -0
  154. package/dist/integration/detect.js.map +1 -0
  155. package/dist/integration/generate.d.ts +36 -0
  156. package/dist/integration/generate.d.ts.map +1 -0
  157. package/dist/integration/generate.js +107 -0
  158. package/dist/integration/generate.js.map +1 -0
  159. package/dist/integration/templates.d.ts +42 -0
  160. package/dist/integration/templates.d.ts.map +1 -0
  161. package/dist/integration/templates.js +203 -0
  162. package/dist/integration/templates.js.map +1 -0
  163. package/dist/integration/types.d.ts +44 -0
  164. package/dist/integration/types.d.ts.map +1 -0
  165. package/dist/integration/types.js +8 -0
  166. package/dist/integration/types.js.map +1 -0
  167. package/dist/output/logger.d.ts +86 -0
  168. package/dist/output/logger.d.ts.map +1 -0
  169. package/dist/output/logger.js +107 -0
  170. package/dist/output/logger.js.map +1 -0
  171. package/dist/state/database.d.ts +9 -0
  172. package/dist/state/database.d.ts.map +1 -0
  173. package/dist/state/database.js +66 -0
  174. package/dist/state/database.js.map +1 -0
  175. package/dist/state/index.d.ts +8 -0
  176. package/dist/state/index.d.ts.map +1 -0
  177. package/dist/state/index.js +7 -0
  178. package/dist/state/index.js.map +1 -0
  179. package/dist/state/migrations.d.ts +12 -0
  180. package/dist/state/migrations.d.ts.map +1 -0
  181. package/dist/state/migrations.js +39 -0
  182. package/dist/state/migrations.js.map +1 -0
  183. package/dist/state/types.d.ts +54 -0
  184. package/dist/state/types.d.ts.map +1 -0
  185. package/dist/state/types.js +2 -0
  186. package/dist/state/types.js.map +1 -0
  187. package/dist/types/index.d.ts +39 -0
  188. package/dist/types/index.d.ts.map +1 -0
  189. package/dist/types/index.js +5 -0
  190. package/dist/types/index.js.map +1 -0
  191. package/dist/update/index.d.ts +10 -0
  192. package/dist/update/index.d.ts.map +1 -0
  193. package/dist/update/index.js +9 -0
  194. package/dist/update/index.js.map +1 -0
  195. package/dist/update/orchestrator.d.ts +91 -0
  196. package/dist/update/orchestrator.d.ts.map +1 -0
  197. package/dist/update/orchestrator.js +204 -0
  198. package/dist/update/orchestrator.js.map +1 -0
  199. package/dist/update/orphan-cleaner.d.ts +30 -0
  200. package/dist/update/orphan-cleaner.d.ts.map +1 -0
  201. package/dist/update/orphan-cleaner.js +151 -0
  202. package/dist/update/orphan-cleaner.js.map +1 -0
  203. package/dist/update/types.d.ts +59 -0
  204. package/dist/update/types.d.ts.map +1 -0
  205. package/dist/update/types.js +2 -0
  206. package/dist/update/types.js.map +1 -0
  207. package/package.json +60 -0
@@ -0,0 +1,296 @@
1
+ /**
2
+ * CLI update command
3
+ *
4
+ * Updates documentation incrementally based on git changes since last run.
5
+ * Integrates with generation module to analyze changed files and update .sum files.
6
+ * Regenerates AGENTS.md for affected directories.
7
+ */
8
+ import * as path from 'node:path';
9
+ import { readFile } from 'node:fs/promises';
10
+ import pc from 'picocolors';
11
+ import { loadConfig } from '../config/loader.js';
12
+ import { createLogger } from '../output/logger.js';
13
+ import { createUpdateOrchestrator, } from '../update/index.js';
14
+ import { detectFileType } from '../generation/detection/detector.js';
15
+ import { countTokens } from '../generation/budget/index.js';
16
+ import { buildPrompt } from '../generation/prompts/index.js';
17
+ import { writeSumFile } from '../generation/writers/sum.js';
18
+ import { writeAgentsMd } from '../generation/writers/agents-md.js';
19
+ import { computeContentHash } from '../change-detection/index.js';
20
+ /**
21
+ * Format cleanup results for display.
22
+ */
23
+ function formatCleanup(plan) {
24
+ const lines = [];
25
+ if (plan.cleanup.deletedSumFiles.length > 0) {
26
+ lines.push(pc.yellow('Cleanup (deleted .sum files):'));
27
+ for (const file of plan.cleanup.deletedSumFiles) {
28
+ lines.push(` ${pc.red('-')} ${file}`);
29
+ }
30
+ }
31
+ if (plan.cleanup.deletedAgentsMd.length > 0) {
32
+ lines.push(pc.yellow('Cleanup (deleted AGENTS.md from empty dirs):'));
33
+ for (const file of plan.cleanup.deletedAgentsMd) {
34
+ lines.push(` ${pc.red('-')} ${file}`);
35
+ }
36
+ }
37
+ return lines;
38
+ }
39
+ /**
40
+ * Format the update plan for display.
41
+ */
42
+ function formatPlan(plan, verbose) {
43
+ const lines = [];
44
+ // Header
45
+ lines.push('');
46
+ lines.push(pc.bold('=== Update Plan ==='));
47
+ lines.push('');
48
+ // Baseline info
49
+ if (plan.isFirstRun) {
50
+ lines.push(pc.yellow('First run detected. Use "are generate" for initial documentation.'));
51
+ lines.push('');
52
+ }
53
+ else {
54
+ lines.push(`Base commit: ${pc.dim(plan.baseCommit.slice(0, 7))}`);
55
+ lines.push(`Current commit: ${pc.dim(plan.currentCommit.slice(0, 7))}`);
56
+ lines.push('');
57
+ }
58
+ // Summary
59
+ const analyzeCount = plan.filesToAnalyze.length;
60
+ const skipCount = plan.filesToSkip.length;
61
+ const cleanupCount = plan.cleanup.deletedSumFiles.length + plan.cleanup.deletedAgentsMd.length;
62
+ if (analyzeCount === 0 && skipCount === 0 && cleanupCount === 0) {
63
+ lines.push(pc.green('No changes detected since last run.'));
64
+ lines.push('');
65
+ return lines.join('\n');
66
+ }
67
+ lines.push(`Files to analyze: ${pc.cyan(String(analyzeCount))}`);
68
+ lines.push(`Files unchanged: ${pc.dim(String(skipCount))}`);
69
+ if (cleanupCount > 0) {
70
+ lines.push(`Cleanup actions: ${pc.yellow(String(cleanupCount))}`);
71
+ }
72
+ lines.push('');
73
+ // File list with status markers
74
+ if (plan.filesToAnalyze.length > 0) {
75
+ lines.push(pc.cyan('Files to analyze:'));
76
+ for (const file of plan.filesToAnalyze) {
77
+ const status = file.status === 'added' ? pc.green('+') :
78
+ file.status === 'renamed' ? pc.blue('R') :
79
+ pc.yellow('M');
80
+ lines.push(` ${status} ${file.path}`);
81
+ if (file.status === 'renamed' && file.oldPath) {
82
+ lines.push(` ${pc.dim(`(was: ${file.oldPath})`)}`);
83
+ }
84
+ }
85
+ lines.push('');
86
+ }
87
+ // Show skipped files in verbose mode
88
+ if (verbose && plan.filesToSkip.length > 0) {
89
+ lines.push(pc.dim('Files unchanged (skipped):'));
90
+ for (const file of plan.filesToSkip) {
91
+ lines.push(` ${pc.dim('=')} ${pc.dim(file)}`);
92
+ }
93
+ lines.push('');
94
+ }
95
+ // Cleanup
96
+ lines.push(...formatCleanup(plan));
97
+ // Affected directories
98
+ if (plan.affectedDirs.length > 0 && verbose) {
99
+ lines.push('');
100
+ lines.push(pc.cyan('Directories for AGENTS.md regeneration:'));
101
+ for (const dir of plan.affectedDirs) {
102
+ lines.push(` ${dir}`);
103
+ }
104
+ }
105
+ lines.push('');
106
+ return lines.join('\n');
107
+ }
108
+ /**
109
+ * Analyze a single changed file and generate its .sum file.
110
+ *
111
+ * Uses the generation module's prompt builder and sum writer.
112
+ * Note: This generates a placeholder summary since the actual LLM analysis
113
+ * requires host integration. The prompt is generated for potential future use.
114
+ */
115
+ async function analyzeFile(projectRoot, change, verbose) {
116
+ const filePath = path.join(projectRoot, change.path);
117
+ try {
118
+ // Read file content
119
+ const content = await readFile(filePath, 'utf-8');
120
+ const tokens = countTokens(content);
121
+ // Detect file type and build prompt
122
+ const fileType = detectFileType(filePath, content);
123
+ const prompt = buildPrompt({
124
+ filePath: change.path,
125
+ content,
126
+ fileType,
127
+ });
128
+ // Generate summary content
129
+ // In a full implementation, this would call an LLM with the prompt.
130
+ // For now, we create a structured summary placeholder that captures
131
+ // the file's purpose and key elements.
132
+ const sumContent = {
133
+ summary: `## Purpose\n\nFile at \`${change.path}\`.\n\n## Analysis Pending\n\nThis summary was generated during incremental update. Full analysis requires LLM integration.`,
134
+ metadata: {
135
+ purpose: `File at ${change.path}`,
136
+ publicInterface: [],
137
+ dependencies: [],
138
+ patterns: [],
139
+ },
140
+ fileType,
141
+ generatedAt: new Date().toISOString(),
142
+ };
143
+ // Write .sum file
144
+ await writeSumFile(filePath, sumContent);
145
+ if (verbose) {
146
+ console.log(` ${pc.green('\u2713')} ${change.path} (${tokens} tokens)`);
147
+ }
148
+ return {
149
+ path: change.path,
150
+ success: true,
151
+ tokensUsed: tokens,
152
+ };
153
+ }
154
+ catch (error) {
155
+ const errorMsg = error instanceof Error ? error.message : String(error);
156
+ if (verbose) {
157
+ console.log(` ${pc.red('\u2717')} ${change.path}: ${errorMsg}`);
158
+ }
159
+ return {
160
+ path: change.path,
161
+ success: false,
162
+ tokensUsed: 0,
163
+ error: errorMsg,
164
+ };
165
+ }
166
+ }
167
+ /**
168
+ * Regenerate AGENTS.md for affected directories.
169
+ *
170
+ * Reads existing .sum files in each directory and creates/updates AGENTS.md.
171
+ */
172
+ async function regenerateAgentsMd(projectRoot, directories, verbose) {
173
+ for (const dir of directories) {
174
+ const dirPath = dir === '.' ? projectRoot : path.join(projectRoot, dir);
175
+ try {
176
+ await writeAgentsMd(dirPath, projectRoot);
177
+ if (verbose) {
178
+ console.log(` ${pc.green('\u2713')} AGENTS.md: ${dir || '.'}`);
179
+ }
180
+ }
181
+ catch (error) {
182
+ const errorMsg = error instanceof Error ? error.message : String(error);
183
+ if (verbose) {
184
+ console.log(` ${pc.yellow('!')} AGENTS.md: ${dir || '.'}: ${errorMsg}`);
185
+ }
186
+ }
187
+ }
188
+ }
189
+ /**
190
+ * Update command - incrementally updates documentation based on git changes.
191
+ *
192
+ * This command:
193
+ * 1. Checks git repository status
194
+ * 2. Detects files changed since last run
195
+ * 3. Cleans up orphaned .sum files
196
+ * 4. Analyzes changed files and generates .sum files
197
+ * 5. Regenerates AGENTS.md for affected directories
198
+ * 6. Records update state for next run
199
+ */
200
+ export async function updateCommand(targetPath, options) {
201
+ const absolutePath = path.resolve(targetPath);
202
+ const verbose = options.verbose ?? false;
203
+ const quiet = options.quiet ?? false;
204
+ const logger = createLogger({
205
+ colors: true,
206
+ verbose,
207
+ quiet,
208
+ showExcluded: false,
209
+ });
210
+ logger.info(`Checking for updates in: ${absolutePath}`);
211
+ // Load configuration
212
+ const config = await loadConfig(absolutePath);
213
+ // Override budget if specified
214
+ if (options.budget) {
215
+ config.generation.tokenBudget = options.budget;
216
+ }
217
+ // Create orchestrator
218
+ const orchestrator = createUpdateOrchestrator(config, absolutePath);
219
+ try {
220
+ // Prepare update plan
221
+ const plan = await orchestrator.preparePlan({
222
+ includeUncommitted: options.uncommitted,
223
+ dryRun: options.dryRun,
224
+ });
225
+ // Display plan
226
+ if (!quiet) {
227
+ console.log(formatPlan(plan, verbose));
228
+ }
229
+ // Handle first run
230
+ if (plan.isFirstRun) {
231
+ console.log(pc.yellow('Hint: Run "are generate" first to create initial documentation.'));
232
+ console.log(pc.yellow('Then run "are update" after making changes.'));
233
+ return;
234
+ }
235
+ // Handle no changes
236
+ if (plan.filesToAnalyze.length === 0 &&
237
+ plan.cleanup.deletedSumFiles.length === 0 &&
238
+ plan.cleanup.deletedAgentsMd.length === 0) {
239
+ const lastRun = await orchestrator.getLastRun();
240
+ if (lastRun) {
241
+ console.log(pc.dim(`Last run: ${lastRun.completed_at}`));
242
+ console.log(pc.dim(`Commit: ${lastRun.commit_hash.slice(0, 7)}`));
243
+ }
244
+ return;
245
+ }
246
+ if (options.dryRun) {
247
+ logger.info('Dry run complete. No files written.');
248
+ return;
249
+ }
250
+ // === Execute the update workflow ===
251
+ let totalTokens = 0;
252
+ let filesAnalyzed = 0;
253
+ let filesFailed = 0;
254
+ // Step 1: Analyze changed files and generate .sum files
255
+ if (plan.filesToAnalyze.length > 0) {
256
+ console.log('');
257
+ console.log(pc.bold('=== Analyzing Changed Files ==='));
258
+ for (const change of plan.filesToAnalyze) {
259
+ const result = await analyzeFile(absolutePath, change, verbose);
260
+ if (result.success) {
261
+ filesAnalyzed++;
262
+ totalTokens += result.tokensUsed;
263
+ // Update state for this file
264
+ const contentHash = await computeContentHash(path.join(absolutePath, change.path));
265
+ await orchestrator.recordFileAnalyzed(change.path, contentHash, plan.currentCommit);
266
+ }
267
+ else {
268
+ filesFailed++;
269
+ }
270
+ }
271
+ }
272
+ // Step 2: Regenerate AGENTS.md for affected directories
273
+ if (plan.affectedDirs.length > 0) {
274
+ console.log('');
275
+ console.log(pc.bold('=== Regenerating AGENTS.md ==='));
276
+ await regenerateAgentsMd(absolutePath, plan.affectedDirs, verbose);
277
+ }
278
+ // Step 3: Record completed run
279
+ const filesSkipped = plan.filesToSkip.length;
280
+ await orchestrator.recordRun(plan.currentCommit, filesAnalyzed, filesSkipped);
281
+ // Summary
282
+ console.log('');
283
+ console.log(pc.bold('=== Update Complete ==='));
284
+ console.log(` Files analyzed: ${pc.green(String(filesAnalyzed))}`);
285
+ if (filesFailed > 0) {
286
+ console.log(` Files failed: ${pc.red(String(filesFailed))}`);
287
+ }
288
+ console.log(` Files skipped: ${pc.dim(String(filesSkipped))}`);
289
+ console.log(` Directories updated: ${pc.cyan(String(plan.affectedDirs.length))}`);
290
+ console.log(` Token budget used: ${pc.yellow(totalTokens.toLocaleString())} / ${config.generation.tokenBudget.toLocaleString()}`);
291
+ }
292
+ finally {
293
+ orchestrator.close();
294
+ }
295
+ }
296
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/cli/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Default configuration values for agents-reverse
3
+ */
4
+ /**
5
+ * Default vendor directories to exclude from analysis.
6
+ * These are typically package managers, build outputs, or version control directories.
7
+ */
8
+ export declare const DEFAULT_VENDOR_DIRS: readonly ["node_modules", "vendor", ".git", "dist", "build", "__pycache__", ".next", "venv", ".venv", "target", ".cargo", ".gradle", ".planning", ".claude", ".opencode"];
9
+ /**
10
+ * Default binary file extensions to exclude from analysis.
11
+ * These files cannot be meaningfully analyzed as text.
12
+ */
13
+ export declare const DEFAULT_BINARY_EXTENSIONS: readonly [".png", ".jpg", ".jpeg", ".gif", ".bmp", ".ico", ".webp", ".zip", ".tar", ".gz", ".rar", ".7z", ".exe", ".dll", ".so", ".dylib", ".mp3", ".mp4", ".wav", ".pdf", ".woff", ".woff2", ".ttf", ".eot", ".class", ".pyc"];
14
+ /**
15
+ * Default maximum file size in bytes (1MB).
16
+ * Files larger than this will be skipped with a warning.
17
+ */
18
+ export declare const DEFAULT_MAX_FILE_SIZE: number;
19
+ /**
20
+ * Default configuration object matching the schema structure.
21
+ * This is used when no config file is present or for missing fields.
22
+ */
23
+ export declare const DEFAULT_CONFIG: {
24
+ readonly exclude: {
25
+ readonly patterns: string[];
26
+ readonly vendorDirs: readonly ["node_modules", "vendor", ".git", "dist", "build", "__pycache__", ".next", "venv", ".venv", "target", ".cargo", ".gradle", ".planning", ".claude", ".opencode"];
27
+ readonly binaryExtensions: readonly [".png", ".jpg", ".jpeg", ".gif", ".bmp", ".ico", ".webp", ".zip", ".tar", ".gz", ".rar", ".7z", ".exe", ".dll", ".so", ".dylib", ".mp3", ".mp4", ".wav", ".pdf", ".woff", ".woff2", ".ttf", ".eot", ".class", ".pyc"];
28
+ };
29
+ readonly options: {
30
+ readonly followSymlinks: false;
31
+ readonly maxFileSize: number;
32
+ };
33
+ readonly output: {
34
+ readonly colors: true;
35
+ readonly verbose: true;
36
+ };
37
+ };
38
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,eAAO,MAAM,mBAAmB,2KAiBtB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,yBAAyB,iOAkC5B,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,qBAAqB,QAAc,CAAC;AAEjD;;;GAGG;AACH,eAAO,MAAM,cAAc;;2BAEP,MAAM,EAAE;;;;;;;;;;;;CAYlB,CAAC"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Default configuration values for agents-reverse
3
+ */
4
+ /**
5
+ * Default vendor directories to exclude from analysis.
6
+ * These are typically package managers, build outputs, or version control directories.
7
+ */
8
+ export const DEFAULT_VENDOR_DIRS = [
9
+ 'node_modules',
10
+ 'vendor',
11
+ '.git',
12
+ 'dist',
13
+ 'build',
14
+ '__pycache__',
15
+ '.next',
16
+ 'venv',
17
+ '.venv',
18
+ 'target',
19
+ '.cargo',
20
+ '.gradle',
21
+ // AI assistant tooling directories
22
+ '.planning',
23
+ '.claude',
24
+ '.opencode',
25
+ ];
26
+ /**
27
+ * Default binary file extensions to exclude from analysis.
28
+ * These files cannot be meaningfully analyzed as text.
29
+ */
30
+ export const DEFAULT_BINARY_EXTENSIONS = [
31
+ // Images
32
+ '.png',
33
+ '.jpg',
34
+ '.jpeg',
35
+ '.gif',
36
+ '.bmp',
37
+ '.ico',
38
+ '.webp',
39
+ // Archives
40
+ '.zip',
41
+ '.tar',
42
+ '.gz',
43
+ '.rar',
44
+ '.7z',
45
+ // Executables
46
+ '.exe',
47
+ '.dll',
48
+ '.so',
49
+ '.dylib',
50
+ // Media
51
+ '.mp3',
52
+ '.mp4',
53
+ '.wav',
54
+ // Documents
55
+ '.pdf',
56
+ // Fonts
57
+ '.woff',
58
+ '.woff2',
59
+ '.ttf',
60
+ '.eot',
61
+ // Compiled
62
+ '.class',
63
+ '.pyc',
64
+ ];
65
+ /**
66
+ * Default maximum file size in bytes (1MB).
67
+ * Files larger than this will be skipped with a warning.
68
+ */
69
+ export const DEFAULT_MAX_FILE_SIZE = 1024 * 1024;
70
+ /**
71
+ * Default configuration object matching the schema structure.
72
+ * This is used when no config file is present or for missing fields.
73
+ */
74
+ export const DEFAULT_CONFIG = {
75
+ exclude: {
76
+ patterns: [],
77
+ vendorDirs: [...DEFAULT_VENDOR_DIRS],
78
+ binaryExtensions: [...DEFAULT_BINARY_EXTENSIONS],
79
+ },
80
+ options: {
81
+ followSymlinks: false,
82
+ maxFileSize: DEFAULT_MAX_FILE_SIZE,
83
+ },
84
+ output: {
85
+ colors: true,
86
+ verbose: true,
87
+ },
88
+ };
89
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,cAAc;IACd,QAAQ;IACR,MAAM;IACN,MAAM;IACN,OAAO;IACP,aAAa;IACb,OAAO;IACP,MAAM;IACN,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,mCAAmC;IACnC,WAAW;IACX,SAAS;IACT,WAAW;CACH,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,SAAS;IACT,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,WAAW;IACX,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,KAAK;IACL,cAAc;IACd,MAAM;IACN,MAAM;IACN,KAAK;IACL,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,MAAM;IACN,MAAM;IACN,YAAY;IACZ,MAAM;IACN,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,MAAM;IACN,MAAM;IACN,WAAW;IACX,QAAQ;IACR,MAAM;CACE,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjD;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,OAAO,EAAE;QACP,QAAQ,EAAE,EAAc;QACxB,UAAU,EAAE,CAAC,GAAG,mBAAmB,CAAC;QACpC,gBAAgB,EAAE,CAAC,GAAG,yBAAyB,CAAC;KACjD;IACD,OAAO,EAAE;QACP,cAAc,EAAE,KAAK;QACrB,WAAW,EAAE,qBAAqB;KACnC;IACD,MAAM,EAAE;QACN,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,IAAI;KACd;CACO,CAAC"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Configuration loader for agents-reverse
3
+ *
4
+ * Loads and validates configuration from `.agents-reverse/config.yaml`.
5
+ * Returns sensible defaults when no config file exists.
6
+ */
7
+ import { Config } from './schema.js';
8
+ /** Directory name for agents-reverse-engineer configuration */
9
+ export declare const CONFIG_DIR = ".agents-reverse-engineer";
10
+ /** Configuration file name */
11
+ export declare const CONFIG_FILE = "config.yaml";
12
+ /**
13
+ * Error thrown when configuration parsing or validation fails
14
+ */
15
+ export declare class ConfigError extends Error {
16
+ readonly filePath: string;
17
+ readonly cause?: Error | undefined;
18
+ constructor(message: string, filePath: string, cause?: Error | undefined);
19
+ }
20
+ /**
21
+ * Load configuration from `.agents-reverse/config.yaml`.
22
+ *
23
+ * If the file doesn't exist, returns default configuration.
24
+ * If the file exists but is invalid, throws a ConfigError with details.
25
+ *
26
+ * @param root - Root directory containing `.agents-reverse/` folder
27
+ * @returns Validated configuration object with all defaults applied
28
+ * @throws ConfigError if the config file exists but is invalid
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * const config = await loadConfig('/path/to/project');
33
+ * console.log(config.exclude.vendorDirs);
34
+ * ```
35
+ */
36
+ export declare function loadConfig(root: string): Promise<Config>;
37
+ /**
38
+ * Check if a configuration file exists.
39
+ *
40
+ * @param root - Root directory to check
41
+ * @returns true if `.agents-reverse/config.yaml` exists
42
+ *
43
+ * @example
44
+ * ```typescript
45
+ * if (!await configExists('.')) {
46
+ * console.log('Run `are init` to create configuration');
47
+ * }
48
+ * ```
49
+ */
50
+ export declare function configExists(root: string): Promise<boolean>;
51
+ /**
52
+ * Write a default configuration file with helpful comments.
53
+ *
54
+ * Creates the `.agents-reverse/` directory if it doesn't exist.
55
+ * The generated file includes comments explaining each option.
56
+ *
57
+ * @param root - Root directory where `.agents-reverse/` will be created
58
+ *
59
+ * @example
60
+ * ```typescript
61
+ * await writeDefaultConfig('/path/to/project');
62
+ * // Creates /path/to/project/.agents-reverse/config.yaml
63
+ * ```
64
+ */
65
+ export declare function writeDefaultConfig(root: string): Promise<void>;
66
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,EAAgB,MAAM,EAAE,MAAM,aAAa,CAAC;AAGnD,+DAA+D;AAC/D,eAAO,MAAM,UAAU,6BAA6B,CAAC;AAErD,8BAA8B;AAC9B,eAAO,MAAM,WAAW,gBAAgB,CAAC;AAEzC;;GAEG;AACH,qBAAa,WAAY,SAAQ,KAAK;aAGlB,QAAQ,EAAE,MAAM;aAChB,KAAK,CAAC,EAAE,KAAK;gBAF7B,OAAO,EAAE,MAAM,EACC,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,KAAK,YAAA;CAKhC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAwC9D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQjE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6CpE"}
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Configuration loader for agents-reverse
3
+ *
4
+ * Loads and validates configuration from `.agents-reverse/config.yaml`.
5
+ * Returns sensible defaults when no config file exists.
6
+ */
7
+ import { readFile, writeFile, mkdir, access } from 'node:fs/promises';
8
+ import { constants } from 'node:fs';
9
+ import path from 'node:path';
10
+ import { parse } from 'yaml';
11
+ import { ZodError } from 'zod';
12
+ import { ConfigSchema } from './schema.js';
13
+ import { DEFAULT_VENDOR_DIRS, DEFAULT_BINARY_EXTENSIONS, DEFAULT_MAX_FILE_SIZE } from './defaults.js';
14
+ /** Directory name for agents-reverse-engineer configuration */
15
+ export const CONFIG_DIR = '.agents-reverse-engineer';
16
+ /** Configuration file name */
17
+ export const CONFIG_FILE = 'config.yaml';
18
+ /**
19
+ * Error thrown when configuration parsing or validation fails
20
+ */
21
+ export class ConfigError extends Error {
22
+ filePath;
23
+ cause;
24
+ constructor(message, filePath, cause) {
25
+ super(message);
26
+ this.filePath = filePath;
27
+ this.cause = cause;
28
+ this.name = 'ConfigError';
29
+ }
30
+ }
31
+ /**
32
+ * Load configuration from `.agents-reverse/config.yaml`.
33
+ *
34
+ * If the file doesn't exist, returns default configuration.
35
+ * If the file exists but is invalid, throws a ConfigError with details.
36
+ *
37
+ * @param root - Root directory containing `.agents-reverse/` folder
38
+ * @returns Validated configuration object with all defaults applied
39
+ * @throws ConfigError if the config file exists but is invalid
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * const config = await loadConfig('/path/to/project');
44
+ * console.log(config.exclude.vendorDirs);
45
+ * ```
46
+ */
47
+ export async function loadConfig(root) {
48
+ const configPath = path.join(root, CONFIG_DIR, CONFIG_FILE);
49
+ try {
50
+ const content = await readFile(configPath, 'utf-8');
51
+ const raw = parse(content);
52
+ try {
53
+ return ConfigSchema.parse(raw);
54
+ }
55
+ catch (err) {
56
+ if (err instanceof ZodError) {
57
+ const issues = err.issues
58
+ .map((issue) => ` - ${issue.path.join('.')}: ${issue.message}`)
59
+ .join('\n');
60
+ throw new ConfigError(`Invalid configuration in ${configPath}:\n${issues}`, configPath, err);
61
+ }
62
+ throw err;
63
+ }
64
+ }
65
+ catch (err) {
66
+ // File not found - return defaults
67
+ if (err.code === 'ENOENT') {
68
+ return ConfigSchema.parse({});
69
+ }
70
+ // Re-throw ConfigError as-is
71
+ if (err instanceof ConfigError) {
72
+ throw err;
73
+ }
74
+ // YAML parse error
75
+ throw new ConfigError(`Failed to parse ${configPath}: ${err.message}`, configPath, err);
76
+ }
77
+ }
78
+ /**
79
+ * Check if a configuration file exists.
80
+ *
81
+ * @param root - Root directory to check
82
+ * @returns true if `.agents-reverse/config.yaml` exists
83
+ *
84
+ * @example
85
+ * ```typescript
86
+ * if (!await configExists('.')) {
87
+ * console.log('Run `are init` to create configuration');
88
+ * }
89
+ * ```
90
+ */
91
+ export async function configExists(root) {
92
+ const configPath = path.join(root, CONFIG_DIR, CONFIG_FILE);
93
+ try {
94
+ await access(configPath, constants.F_OK);
95
+ return true;
96
+ }
97
+ catch {
98
+ return false;
99
+ }
100
+ }
101
+ /**
102
+ * Write a default configuration file with helpful comments.
103
+ *
104
+ * Creates the `.agents-reverse/` directory if it doesn't exist.
105
+ * The generated file includes comments explaining each option.
106
+ *
107
+ * @param root - Root directory where `.agents-reverse/` will be created
108
+ *
109
+ * @example
110
+ * ```typescript
111
+ * await writeDefaultConfig('/path/to/project');
112
+ * // Creates /path/to/project/.agents-reverse/config.yaml
113
+ * ```
114
+ */
115
+ export async function writeDefaultConfig(root) {
116
+ const configDir = path.join(root, CONFIG_DIR);
117
+ const configPath = path.join(configDir, CONFIG_FILE);
118
+ // Create directory if needed
119
+ await mkdir(configDir, { recursive: true });
120
+ // Generate config content with comments
121
+ const configContent = `# agents-reverse configuration
122
+ # https://github.com/GeoloeG-IsT/agents-reverse
123
+
124
+ # Exclusion rules for files and directories
125
+ exclude:
126
+ # Custom glob patterns to exclude (e.g., ["*.log", "temp/**"])
127
+ patterns: []
128
+
129
+ # Vendor directories to exclude from analysis
130
+ # These are typically package managers, build outputs, or version control
131
+ vendorDirs:
132
+ ${DEFAULT_VENDOR_DIRS.map((dir) => ` - ${dir}`).join('\n')}
133
+
134
+ # Binary file extensions to exclude from analysis
135
+ # These files cannot be meaningfully analyzed as text
136
+ binaryExtensions:
137
+ ${DEFAULT_BINARY_EXTENSIONS.map((ext) => ` - ${ext}`).join('\n')}
138
+
139
+ # Discovery options
140
+ options:
141
+ # Whether to follow symbolic links during traversal
142
+ followSymlinks: false
143
+
144
+ # Maximum file size in bytes (files larger than this are skipped)
145
+ # Default: ${DEFAULT_MAX_FILE_SIZE} (1MB)
146
+ maxFileSize: ${DEFAULT_MAX_FILE_SIZE}
147
+
148
+ # Output formatting options
149
+ output:
150
+ # Whether to use colors in terminal output
151
+ colors: true
152
+
153
+ # Whether to show verbose output (each file as processed)
154
+ verbose: true
155
+ `;
156
+ await writeFile(configPath, configContent, 'utf-8');
157
+ }
158
+ //# sourceMappingURL=loader.js.map