agents-reverse-engineer 0.4.1 → 0.4.3

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 (52) hide show
  1. package/README.md +14 -14
  2. package/dist/change-detection/detector.d.ts +10 -0
  3. package/dist/change-detection/detector.d.ts.map +1 -1
  4. package/dist/change-detection/detector.js +12 -0
  5. package/dist/change-detection/detector.js.map +1 -1
  6. package/dist/change-detection/index.d.ts +1 -1
  7. package/dist/change-detection/index.d.ts.map +1 -1
  8. package/dist/change-detection/index.js +1 -1
  9. package/dist/change-detection/index.js.map +1 -1
  10. package/dist/cli/init.d.ts.map +1 -1
  11. package/dist/cli/init.js +0 -3
  12. package/dist/cli/init.js.map +1 -1
  13. package/dist/discovery/filters/index.d.ts +3 -2
  14. package/dist/discovery/filters/index.d.ts.map +1 -1
  15. package/dist/discovery/filters/index.js +43 -17
  16. package/dist/discovery/filters/index.js.map +1 -1
  17. package/dist/generation/budget/chunker.d.ts +5 -2
  18. package/dist/generation/budget/chunker.d.ts.map +1 -1
  19. package/dist/generation/budget/chunker.js +28 -13
  20. package/dist/generation/budget/chunker.js.map +1 -1
  21. package/dist/generation/orchestrator.d.ts +4 -0
  22. package/dist/generation/orchestrator.d.ts.map +1 -1
  23. package/dist/generation/orchestrator.js +20 -2
  24. package/dist/generation/orchestrator.js.map +1 -1
  25. package/dist/generation/prompts/builder.d.ts.map +1 -1
  26. package/dist/generation/prompts/builder.js +22 -21
  27. package/dist/generation/prompts/builder.js.map +1 -1
  28. package/dist/installer/banner.js +5 -5
  29. package/dist/installer/operations.d.ts.map +1 -1
  30. package/dist/installer/operations.js +47 -36
  31. package/dist/installer/operations.js.map +1 -1
  32. package/dist/installer/uninstall.d.ts.map +1 -1
  33. package/dist/installer/uninstall.js +55 -9
  34. package/dist/installer/uninstall.js.map +1 -1
  35. package/dist/integration/templates.d.ts.map +1 -1
  36. package/dist/integration/templates.js +5 -11
  37. package/dist/integration/templates.js.map +1 -1
  38. package/dist/orchestration/index.d.ts +1 -0
  39. package/dist/orchestration/index.d.ts.map +1 -1
  40. package/dist/orchestration/index.js +4 -0
  41. package/dist/orchestration/index.js.map +1 -1
  42. package/dist/orchestration/plan-tracker.d.ts +34 -0
  43. package/dist/orchestration/plan-tracker.d.ts.map +1 -0
  44. package/dist/orchestration/plan-tracker.js +59 -0
  45. package/dist/orchestration/plan-tracker.js.map +1 -0
  46. package/dist/orchestration/runner.d.ts +1 -1
  47. package/dist/orchestration/runner.d.ts.map +1 -1
  48. package/dist/orchestration/runner.js +108 -45
  49. package/dist/orchestration/runner.js.map +1 -1
  50. package/hooks/dist/opencode-are-check-update.js +76 -0
  51. package/hooks/dist/opencode-are-session-end.js +50 -0
  52. package/package.json +1 -1
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Progress tracker that updates GENERATION-PLAN.md checkboxes during generation.
3
+ *
4
+ * Maintains the markdown content in memory for fast updates and serializes
5
+ * disk writes via a promise chain to handle concurrent Phase 1 completions.
6
+ *
7
+ * @module
8
+ */
9
+ import { writeFile, mkdir } from 'node:fs/promises';
10
+ import * as path from 'node:path';
11
+ import { CONFIG_DIR } from '../config/loader.js';
12
+ /**
13
+ * Tracks generation progress by ticking checkboxes in GENERATION-PLAN.md.
14
+ *
15
+ * Create one instance at the start of `executeGenerate()`, call `markDone()`
16
+ * as tasks complete, and `flush()` before returning.
17
+ */
18
+ export class PlanTracker {
19
+ content;
20
+ planPath;
21
+ writeQueue = Promise.resolve();
22
+ constructor(projectRoot, initialMarkdown) {
23
+ this.planPath = path.join(projectRoot, CONFIG_DIR, 'GENERATION-PLAN.md');
24
+ this.content = initialMarkdown;
25
+ }
26
+ /** Write the initial plan file to disk. */
27
+ async initialize() {
28
+ try {
29
+ await mkdir(path.dirname(this.planPath), { recursive: true });
30
+ await writeFile(this.planPath, this.content, 'utf8');
31
+ }
32
+ catch {
33
+ // Non-critical — generation continues without tracking
34
+ }
35
+ }
36
+ /**
37
+ * Mark a task as done by replacing its checkbox.
38
+ *
39
+ * The caller must pass the exact path as it appears in the markdown:
40
+ * - File: `src/cli/init.ts`
41
+ * - Directory: `src/cli/AGENTS.md` (caller appends `/AGENTS.md`)
42
+ * - Root doc: `CLAUDE.md`
43
+ */
44
+ markDone(itemPath) {
45
+ const before = this.content;
46
+ this.content = this.content.replace(`- [ ] \`${itemPath}\``, `- [x] \`${itemPath}\``);
47
+ if (this.content === before)
48
+ return; // no match — skip write
49
+ // Queue a serialized write so concurrent markDone() calls don't corrupt the file
50
+ this.writeQueue = this.writeQueue
51
+ .then(() => writeFile(this.planPath, this.content, 'utf8'))
52
+ .catch(() => { });
53
+ }
54
+ /** Wait for all queued writes to finish. */
55
+ async flush() {
56
+ await this.writeQueue;
57
+ }
58
+ }
59
+ //# sourceMappingURL=plan-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-tracker.js","sourceRoot":"","sources":["../../src/orchestration/plan-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,OAAO,WAAW;IACd,OAAO,CAAS;IACP,QAAQ,CAAS;IAC1B,UAAU,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEtD,YAAY,WAAmB,EAAE,eAAuB;QACtD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,oBAAoB,CAAC,CAAC;QACzE,IAAI,CAAC,OAAO,GAAG,eAAe,CAAC;IACjC,CAAC;IAED,2CAA2C;IAC3C,KAAK,CAAC,UAAU;QACd,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9D,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,uDAAuD;QACzD,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACH,QAAQ,CAAC,QAAgB;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CACjC,WAAW,QAAQ,IAAI,EACvB,WAAW,QAAQ,IAAI,CACxB,CAAC;QAEF,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM;YAAE,OAAO,CAAC,wBAAwB;QAE7D,iFAAiF;QACjF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;aAC9B,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;aAC1D,KAAK,CAAC,GAAG,EAAE,GAAoB,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,4CAA4C;IAC5C,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,UAAU,CAAC;IACxB,CAAC;CACF"}
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * The three execution phases match the {@link ExecutionPlan} dependency graph:
8
8
  * 1. **File analysis** -- concurrent AI calls with configurable parallelism
9
- * 2. **Directory docs** -- sequential, post-order AGENTS.md generation
9
+ * 2. **Directory docs** -- concurrent per depth level, post-order AGENTS.md generation
10
10
  * 3. **Root documents** -- sequential AI calls for CLAUDE.md, ARCHITECTURE.md, etc.
11
11
  *
12
12
  * @module
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/orchestration/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,2BAA2B,CAAC;AAK9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAG/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAUlD,OAAO,KAAK,EAEV,UAAU,EACV,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAMpB;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,aAAa;IACxB,2CAA2C;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IAEtC,gCAAgC;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAE5C;;;;;OAKG;gBACS,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB;IAK5D;;;;;;;;;;OAUG;IACG,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;IAkQ/D;;;;;;;;;;;OAWG;IACG,aAAa,CACjB,cAAc,EAAE,UAAU,EAAE,EAC5B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,UAAU,CAAC;CA4MvB"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/orchestration/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,2BAA2B,CAAC;AAK9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAG/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAYlD,OAAO,KAAK,EAEV,UAAU,EACV,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAMpB;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,aAAa;IACxB,2CAA2C;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IAEtC,gCAAgC;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAE5C;;;;;OAKG;gBACS,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB;IAK5D;;;;;;;;;;OAUG;IACG,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;IAoU/D;;;;;;;;;;;OAWG;IACG,aAAa,CACjB,cAAc,EAAE,UAAU,EAAE,EAC5B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,UAAU,CAAC;CAiOvB"}
@@ -6,20 +6,22 @@
6
6
  *
7
7
  * The three execution phases match the {@link ExecutionPlan} dependency graph:
8
8
  * 1. **File analysis** -- concurrent AI calls with configurable parallelism
9
- * 2. **Directory docs** -- sequential, post-order AGENTS.md generation
9
+ * 2. **Directory docs** -- concurrent per depth level, post-order AGENTS.md generation
10
10
  * 3. **Root documents** -- sequential AI calls for CLAUDE.md, ARCHITECTURE.md, etc.
11
11
  *
12
12
  * @module
13
13
  */
14
14
  import * as path from 'node:path';
15
- import { readFile, writeFile, stat } from 'node:fs/promises';
15
+ import { readFile, writeFile } from 'node:fs/promises';
16
16
  import { writeSumFile, readSumFile } from '../generation/writers/sum.js';
17
17
  import { writeAgentsMd } from '../generation/writers/agents-md.js';
18
- import { computeContentHash } from '../change-detection/index.js';
18
+ import { computeContentHashFromString } from '../change-detection/index.js';
19
19
  import { detectFileType } from '../generation/detection/detector.js';
20
20
  import { buildPrompt, buildDirectoryPrompt } from '../generation/prompts/index.js';
21
21
  import { checkCodeVsDoc, checkCodeVsCode, buildInconsistencyReport, formatReportForCli, } from '../quality/index.js';
22
+ import { formatExecutionPlanAsMarkdown } from '../generation/executor.js';
22
23
  import { runPool } from './pool.js';
24
+ import { PlanTracker } from './plan-tracker.js';
23
25
  import { ProgressReporter } from './progress.js';
24
26
  // ---------------------------------------------------------------------------
25
27
  // CommandRunner
@@ -71,14 +73,18 @@ export class CommandRunner {
71
73
  */
72
74
  async executeGenerate(plan) {
73
75
  const reporter = new ProgressReporter(plan.fileTasks.length, this.options.quiet ?? false);
76
+ // Initialize plan tracker (writes GENERATION-PLAN.md with checkboxes)
77
+ const planTracker = new PlanTracker(plan.projectRoot, formatExecutionPlanAsMarkdown(plan));
78
+ await planTracker.initialize();
74
79
  const runStart = Date.now();
75
80
  let filesProcessed = 0;
76
81
  let filesFailed = 0;
77
82
  // -------------------------------------------------------------------
78
83
  // Pre-Phase 1: Cache old .sum content for stale documentation detection
84
+ // Throttled to avoid opening too many file descriptors at once.
79
85
  // -------------------------------------------------------------------
80
86
  const oldSumCache = new Map();
81
- for (const task of plan.fileTasks) {
87
+ const sumReadTasks = plan.fileTasks.map((task) => async () => {
82
88
  try {
83
89
  const existing = await readSumFile(`${task.absolutePath}.sum`);
84
90
  if (existing) {
@@ -88,28 +94,31 @@ export class CommandRunner {
88
94
  catch {
89
95
  // No old .sum to compare -- skip
90
96
  }
91
- }
97
+ });
98
+ await runPool(sumReadTasks, { concurrency: 20 });
92
99
  // -------------------------------------------------------------------
93
100
  // Phase 1: File analysis (concurrent)
94
101
  // -------------------------------------------------------------------
102
+ // Cache source content during Phase 1, reused for inconsistency detection
103
+ const sourceContentCache = new Map();
95
104
  const fileTasks = plan.fileTasks.map((task, taskIndex) => async () => {
96
105
  reporter.onFileStart(task.path);
97
106
  const callStart = Date.now();
98
107
  // Read the source file
99
108
  const sourceContent = await readFile(task.absolutePath, 'utf-8');
109
+ sourceContentCache.set(task.path, sourceContent);
100
110
  // Call AI with the task's prompts
101
111
  const response = await this.aiService.call({
102
112
  prompt: task.userPrompt,
103
113
  systemPrompt: task.systemPrompt,
104
114
  });
105
- // Track file size for telemetry
106
- const fileStat = await stat(task.absolutePath);
115
+ // Track file size for telemetry (from in-memory content, avoids stat syscall)
107
116
  this.aiService.addFilesReadToLastEntry([{
108
117
  path: task.path,
109
- sizeBytes: fileStat.size,
118
+ sizeBytes: Buffer.byteLength(sourceContent, 'utf-8'),
110
119
  }]);
111
- // Compute content hash for change detection
112
- const contentHash = await computeContentHash(task.absolutePath);
120
+ // Compute content hash from already-loaded content (avoids second readFile)
121
+ const contentHash = computeContentHashFromString(sourceContent);
113
122
  // Build .sum file content
114
123
  const sumContent = {
115
124
  summary: response.text,
@@ -143,6 +152,7 @@ export class CommandRunner {
143
152
  const v = result.value;
144
153
  filesProcessed++;
145
154
  reporter.onFileDone(v.path, v.durationMs, v.tokensIn, v.tokensOut, v.model);
155
+ planTracker.markDone(v.path);
146
156
  }
147
157
  else {
148
158
  filesFailed++;
@@ -179,17 +189,24 @@ export class CommandRunner {
179
189
  dirGroups.set(dir, [filePath]);
180
190
  }
181
191
  }
182
- // Run checks per directory group
183
- for (const [, groupPaths] of dirGroups) {
192
+ // Run checks per directory group (throttled to avoid excessive parallel I/O)
193
+ const dirEntries = Array.from(dirGroups.entries());
194
+ const dirCheckResults = [];
195
+ const dirCheckTasks = dirEntries.map(([, groupPaths], groupIndex) => async () => {
196
+ const dirIssues = [];
184
197
  const filesForCodeVsCode = [];
198
+ // Process files within this group sequentially to limit I/O
185
199
  for (const filePath of groupPaths) {
186
200
  const absoluteFilePath = `${plan.projectRoot}/${filePath}`;
187
- let sourceContent;
188
- try {
189
- sourceContent = await readFile(absoluteFilePath, 'utf-8');
190
- }
191
- catch {
192
- continue; // File unreadable, skip
201
+ // Use cached content from Phase 1 (avoids re-read)
202
+ let sourceContent = sourceContentCache.get(filePath);
203
+ if (!sourceContent) {
204
+ try {
205
+ sourceContent = await readFile(absoluteFilePath, 'utf-8');
206
+ }
207
+ catch {
208
+ continue; // File unreadable, skip
209
+ }
193
210
  }
194
211
  filesForCodeVsCode.push({ path: filePath, content: sourceContent });
195
212
  // Old-doc check: detects stale documentation
@@ -198,7 +215,7 @@ export class CommandRunner {
198
215
  const oldIssue = checkCodeVsDoc(sourceContent, oldSum, filePath);
199
216
  if (oldIssue) {
200
217
  oldIssue.description += ' (stale documentation)';
201
- allIssues.push(oldIssue);
218
+ dirIssues.push(oldIssue);
202
219
  }
203
220
  }
204
221
  // New-doc check: detects LLM omissions in freshly generated .sum
@@ -207,7 +224,7 @@ export class CommandRunner {
207
224
  if (newSum) {
208
225
  const newIssue = checkCodeVsDoc(sourceContent, newSum, filePath);
209
226
  if (newIssue) {
210
- allIssues.push(newIssue);
227
+ dirIssues.push(newIssue);
211
228
  }
212
229
  }
213
230
  }
@@ -217,8 +234,14 @@ export class CommandRunner {
217
234
  }
218
235
  // Code-vs-code check scoped to this directory group
219
236
  const codeIssues = checkCodeVsCode(filesForCodeVsCode);
220
- allIssues.push(...codeIssues);
221
- }
237
+ dirIssues.push(...codeIssues);
238
+ dirCheckResults[groupIndex] = dirIssues;
239
+ });
240
+ await runPool(dirCheckTasks, { concurrency: 10 });
241
+ const allIssuesFlat = dirCheckResults.filter(Boolean).flat();
242
+ allIssues.push(...allIssuesFlat);
243
+ // Release cached source content to free memory
244
+ sourceContentCache.clear();
222
245
  if (allIssues.length > 0) {
223
246
  const report = buildInconsistencyReport(allIssues, {
224
247
  projectRoot: plan.projectRoot,
@@ -236,16 +259,39 @@ export class CommandRunner {
236
259
  console.error(`[quality] Inconsistency detection failed: ${err instanceof Error ? err.message : String(err)}`);
237
260
  }
238
261
  // -------------------------------------------------------------------
239
- // Phase 2: Directory docs (sequential, post-order)
262
+ // Phase 2: Directory docs (concurrent per depth level, post-order)
240
263
  // -------------------------------------------------------------------
264
+ // Group directory tasks by depth so same-depth dirs run in parallel
265
+ // while maintaining post-order (children before parents)
266
+ const dirsByDepth = new Map();
241
267
  for (const dirTask of plan.directoryTasks) {
242
- const prompt = await buildDirectoryPrompt(dirTask.absolutePath, plan.projectRoot);
243
- const dirResponse = await this.aiService.call({
244
- prompt: prompt.user,
245
- systemPrompt: prompt.system,
268
+ const depth = dirTask.metadata.depth ?? 0;
269
+ const group = dirsByDepth.get(depth);
270
+ if (group) {
271
+ group.push(dirTask);
272
+ }
273
+ else {
274
+ dirsByDepth.set(depth, [dirTask]);
275
+ }
276
+ }
277
+ // Process depth levels in descending order (deepest first = post-order)
278
+ const depthLevels = Array.from(dirsByDepth.keys()).sort((a, b) => b - a);
279
+ for (const depth of depthLevels) {
280
+ const dirsAtDepth = dirsByDepth.get(depth);
281
+ const dirTasks = dirsAtDepth.map((dirTask) => async () => {
282
+ const prompt = await buildDirectoryPrompt(dirTask.absolutePath, plan.projectRoot);
283
+ const dirResponse = await this.aiService.call({
284
+ prompt: prompt.user,
285
+ systemPrompt: prompt.system,
286
+ });
287
+ await writeAgentsMd(dirTask.absolutePath, plan.projectRoot, dirResponse.text);
288
+ reporter.onDirectoryDone(dirTask.path);
289
+ planTracker.markDone(`${dirTask.path}/AGENTS.md`);
290
+ });
291
+ await runPool(dirTasks, {
292
+ concurrency: Math.min(this.options.concurrency, dirsAtDepth.length),
293
+ failFast: this.options.failFast,
246
294
  });
247
- await writeAgentsMd(dirTask.absolutePath, plan.projectRoot, dirResponse.text);
248
- reporter.onDirectoryDone(dirTask.path);
249
295
  }
250
296
  // -------------------------------------------------------------------
251
297
  // Phase 3: Root documents (sequential)
@@ -257,7 +303,10 @@ export class CommandRunner {
257
303
  });
258
304
  await writeFile(rootTask.outputPath, response.text, 'utf-8');
259
305
  reporter.onRootDone(rootTask.path);
306
+ planTracker.markDone(rootTask.path);
260
307
  }
308
+ // Ensure all plan tracker writes are flushed
309
+ await planTracker.flush();
261
310
  // -------------------------------------------------------------------
262
311
  // Build and print summary
263
312
  // -------------------------------------------------------------------
@@ -301,12 +350,15 @@ export class CommandRunner {
301
350
  const runStart = Date.now();
302
351
  let filesProcessed = 0;
303
352
  let filesFailed = 0;
353
+ // Cache source content during update, reused for inconsistency detection
354
+ const updateSourceCache = new Map();
304
355
  const updateTasks = filesToAnalyze.map((file, fileIndex) => async () => {
305
356
  reporter.onFileStart(file.path);
306
357
  const callStart = Date.now();
307
358
  const absolutePath = `${projectRoot}/${file.path}`;
308
359
  // Read the source file
309
360
  const sourceContent = await readFile(absolutePath, 'utf-8');
361
+ updateSourceCache.set(file.path, sourceContent);
310
362
  // Detect file type and build prompt
311
363
  const fileType = detectFileType(file.path, sourceContent);
312
364
  const prompt = buildPrompt({
@@ -319,14 +371,13 @@ export class CommandRunner {
319
371
  prompt: prompt.user,
320
372
  systemPrompt: prompt.system,
321
373
  });
322
- // Track file size for telemetry
323
- const fileStat = await stat(absolutePath);
374
+ // Track file size for telemetry (from in-memory content, avoids stat syscall)
324
375
  this.aiService.addFilesReadToLastEntry([{
325
376
  path: file.path,
326
- sizeBytes: fileStat.size,
377
+ sizeBytes: Buffer.byteLength(sourceContent, 'utf-8'),
327
378
  }]);
328
- // Compute content hash for change detection
329
- const contentHash = await computeContentHash(absolutePath);
379
+ // Compute content hash from already-loaded content (avoids second readFile)
380
+ const contentHash = computeContentHashFromString(sourceContent);
330
381
  // Build .sum file content
331
382
  const sumContent = {
332
383
  summary: response.text,
@@ -396,17 +447,23 @@ export class CommandRunner {
396
447
  dirGroups.set(dir, [filePath]);
397
448
  }
398
449
  }
399
- // Run checks per directory group
400
- for (const [, groupPaths] of dirGroups) {
450
+ // Run checks per directory group (throttled to avoid excessive parallel I/O)
451
+ const updateDirEntries = Array.from(dirGroups.entries());
452
+ const updateDirResults = [];
453
+ const updateDirCheckTasks = updateDirEntries.map(([, groupPaths], groupIndex) => async () => {
454
+ const dirIssues = [];
401
455
  const filesForCodeVsCode = [];
402
456
  for (const filePath of groupPaths) {
403
457
  const absoluteFilePath = `${projectRoot}/${filePath}`;
404
- let sourceContent;
405
- try {
406
- sourceContent = await readFile(absoluteFilePath, 'utf-8');
407
- }
408
- catch {
409
- continue;
458
+ // Use cached content from update phase (avoids re-read)
459
+ let sourceContent = updateSourceCache.get(filePath);
460
+ if (!sourceContent) {
461
+ try {
462
+ sourceContent = await readFile(absoluteFilePath, 'utf-8');
463
+ }
464
+ catch {
465
+ continue;
466
+ }
410
467
  }
411
468
  filesForCodeVsCode.push({ path: filePath, content: sourceContent });
412
469
  // New-doc check: detects LLM omissions in freshly generated .sum
@@ -415,7 +472,7 @@ export class CommandRunner {
415
472
  if (newSum) {
416
473
  const newIssue = checkCodeVsDoc(sourceContent, newSum, filePath);
417
474
  if (newIssue) {
418
- allIssues.push(newIssue);
475
+ dirIssues.push(newIssue);
419
476
  }
420
477
  }
421
478
  }
@@ -425,8 +482,14 @@ export class CommandRunner {
425
482
  }
426
483
  // Code-vs-code check scoped to this directory group
427
484
  const codeIssues = checkCodeVsCode(filesForCodeVsCode);
428
- allIssues.push(...codeIssues);
429
- }
485
+ dirIssues.push(...codeIssues);
486
+ updateDirResults[groupIndex] = dirIssues;
487
+ });
488
+ await runPool(updateDirCheckTasks, { concurrency: 10 });
489
+ const allIssuesFlat = updateDirResults.filter(Boolean).flat();
490
+ allIssues.push(...allIssuesFlat);
491
+ // Release cached source content to free memory
492
+ updateSourceCache.clear();
430
493
  if (allIssues.length > 0) {
431
494
  const report = buildInconsistencyReport(allIssues, {
432
495
  projectRoot,
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/orchestration/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/orchestration/runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * ARE Update Check Plugin for OpenCode
4
+ *
5
+ * Checks for ARE updates in background, writes result to cache.
6
+ * OpenCode equivalent of the Claude/Gemini SessionStart hook.
7
+ *
8
+ * Cache file: ~/.config/opencode/cache/are-update-check.json
9
+ */
10
+
11
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
12
+ import { homedir } from 'os';
13
+ import { join } from 'path';
14
+ import { spawn } from 'child_process';
15
+
16
+ export const AreCheckUpdate = async () => {
17
+ return {
18
+ event: {
19
+ 'session.created': async () => {
20
+ const homeDir = homedir();
21
+ const cwd = process.cwd();
22
+ const cacheDir = join(homeDir, '.config', 'opencode', 'cache');
23
+ const cacheFile = join(cacheDir, 'are-update-check.json');
24
+
25
+ // ARE-VERSION file locations (check project first, then global)
26
+ const projectVersionFile = join(cwd, '.opencode', 'ARE-VERSION');
27
+ const globalVersionFile = join(homeDir, '.config', 'opencode', 'ARE-VERSION');
28
+
29
+ // Ensure cache directory exists
30
+ if (!existsSync(cacheDir)) {
31
+ mkdirSync(cacheDir, { recursive: true });
32
+ }
33
+
34
+ // Run check in background (spawn background process)
35
+ const child = spawn(process.execPath, ['-e', `
36
+ const fs = require('fs');
37
+ const { execSync } = require('child_process');
38
+
39
+ const cacheFile = ${JSON.stringify(cacheFile)};
40
+ const projectVersionFile = ${JSON.stringify(projectVersionFile)};
41
+ const globalVersionFile = ${JSON.stringify(globalVersionFile)};
42
+
43
+ // Check project directory first (local install), then global
44
+ let installed = '0.0.0';
45
+ try {
46
+ if (fs.existsSync(projectVersionFile)) {
47
+ installed = fs.readFileSync(projectVersionFile, 'utf8').trim();
48
+ } else if (fs.existsSync(globalVersionFile)) {
49
+ installed = fs.readFileSync(globalVersionFile, 'utf8').trim();
50
+ }
51
+ } catch (e) {}
52
+
53
+ let latest = null;
54
+ try {
55
+ latest = execSync('npm view agents-reverse-engineer version', { encoding: 'utf8', timeout: 10000, windowsHide: true }).trim();
56
+ } catch (e) {}
57
+
58
+ const result = {
59
+ update_available: latest && installed !== latest,
60
+ installed,
61
+ latest: latest || 'unknown',
62
+ checked: Math.floor(Date.now() / 1000)
63
+ };
64
+
65
+ fs.writeFileSync(cacheFile, JSON.stringify(result));
66
+ `], {
67
+ stdio: 'ignore',
68
+ detached: true,
69
+ windowsHide: true,
70
+ });
71
+
72
+ child.unref();
73
+ },
74
+ },
75
+ };
76
+ };
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * ARE Session End Plugin for OpenCode
4
+ *
5
+ * Triggers `are update` when session ends (if there are uncommitted changes).
6
+ * OpenCode equivalent of the Claude/Gemini SessionEnd hook.
7
+ *
8
+ * Runs in background to avoid blocking session close.
9
+ *
10
+ * Disable via:
11
+ * - Environment variable: ARE_DISABLE_HOOK=1
12
+ * - Config file: hook_enabled: false in .agents-reverse-engineer.yaml
13
+ */
14
+
15
+ import { execSync, spawn } from 'child_process';
16
+ import { existsSync, readFileSync } from 'fs';
17
+
18
+ export const AreSessionEnd = async () => {
19
+ return {
20
+ event: {
21
+ 'session.deleted': async () => {
22
+ // Check for disable flag
23
+ if (process.env.ARE_DISABLE_HOOK === '1') return;
24
+
25
+ // Check config file for permanent disable
26
+ const configPath = '.agents-reverse-engineer.yaml';
27
+ if (existsSync(configPath)) {
28
+ const config = readFileSync(configPath, 'utf-8');
29
+ if (config.includes('hook_enabled: false')) return;
30
+ }
31
+
32
+ // Check git status - skip if no changes
33
+ try {
34
+ const status = execSync('git status --porcelain', { encoding: 'utf-8' });
35
+ if (!status.trim()) return;
36
+ } catch {
37
+ // Not a git repo or git not available - exit silently
38
+ return;
39
+ }
40
+
41
+ // Run update in background (don't block session close)
42
+ const child = spawn('npx', ['agents-reverse-engineer@latest', 'update', '--quiet'], {
43
+ stdio: 'ignore',
44
+ detached: true,
45
+ });
46
+ child.unref();
47
+ },
48
+ },
49
+ };
50
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agents-reverse-engineer",
3
- "version": "0.4.1",
3
+ "version": "0.4.3",
4
4
  "description": "CLI tool for reverse-engineering codebase documentation for AI agents",
5
5
  "type": "module",
6
6
  "bin": {