agents-reverse-engineer 0.3.6 → 0.4.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 (159) hide show
  1. package/dist/ai/backends/claude.d.ts +92 -0
  2. package/dist/ai/backends/claude.d.ts.map +1 -0
  3. package/dist/ai/backends/claude.js +213 -0
  4. package/dist/ai/backends/claude.js.map +1 -0
  5. package/dist/ai/backends/gemini.d.ts +53 -0
  6. package/dist/ai/backends/gemini.d.ts.map +1 -0
  7. package/dist/ai/backends/gemini.js +66 -0
  8. package/dist/ai/backends/gemini.js.map +1 -0
  9. package/dist/ai/backends/opencode.d.ts +53 -0
  10. package/dist/ai/backends/opencode.d.ts.map +1 -0
  11. package/dist/ai/backends/opencode.js +66 -0
  12. package/dist/ai/backends/opencode.js.map +1 -0
  13. package/dist/ai/index.d.ts +39 -0
  14. package/dist/ai/index.d.ts.map +1 -0
  15. package/dist/ai/index.js +54 -0
  16. package/dist/ai/index.js.map +1 -0
  17. package/dist/ai/pricing.d.ts +84 -0
  18. package/dist/ai/pricing.d.ts.map +1 -0
  19. package/dist/ai/pricing.js +149 -0
  20. package/dist/ai/pricing.js.map +1 -0
  21. package/dist/ai/pricing.test.d.ts +2 -0
  22. package/dist/ai/pricing.test.d.ts.map +1 -0
  23. package/dist/ai/pricing.test.js +164 -0
  24. package/dist/ai/pricing.test.js.map +1 -0
  25. package/dist/ai/registry.d.ts +128 -0
  26. package/dist/ai/registry.d.ts.map +1 -0
  27. package/dist/ai/registry.js +192 -0
  28. package/dist/ai/registry.js.map +1 -0
  29. package/dist/ai/retry.d.ts +77 -0
  30. package/dist/ai/retry.d.ts.map +1 -0
  31. package/dist/ai/retry.js +100 -0
  32. package/dist/ai/retry.js.map +1 -0
  33. package/dist/ai/service.d.ts +124 -0
  34. package/dist/ai/service.d.ts.map +1 -0
  35. package/dist/ai/service.js +239 -0
  36. package/dist/ai/service.js.map +1 -0
  37. package/dist/ai/subprocess.d.ts +45 -0
  38. package/dist/ai/subprocess.d.ts.map +1 -0
  39. package/dist/ai/subprocess.js +90 -0
  40. package/dist/ai/subprocess.js.map +1 -0
  41. package/dist/ai/telemetry/cleanup.d.ts +30 -0
  42. package/dist/ai/telemetry/cleanup.d.ts.map +1 -0
  43. package/dist/ai/telemetry/cleanup.js +56 -0
  44. package/dist/ai/telemetry/cleanup.js.map +1 -0
  45. package/dist/ai/telemetry/logger.d.ts +76 -0
  46. package/dist/ai/telemetry/logger.d.ts.map +1 -0
  47. package/dist/ai/telemetry/logger.js +130 -0
  48. package/dist/ai/telemetry/logger.js.map +1 -0
  49. package/dist/ai/telemetry/run-log.d.ts +29 -0
  50. package/dist/ai/telemetry/run-log.d.ts.map +1 -0
  51. package/dist/ai/telemetry/run-log.js +43 -0
  52. package/dist/ai/telemetry/run-log.js.map +1 -0
  53. package/dist/ai/types.d.ts +235 -0
  54. package/dist/ai/types.d.ts.map +1 -0
  55. package/dist/ai/types.js +34 -0
  56. package/dist/ai/types.js.map +1 -0
  57. package/dist/cli/discover.d.ts.map +1 -1
  58. package/dist/cli/discover.js +0 -2
  59. package/dist/cli/discover.js.map +1 -1
  60. package/dist/cli/generate.d.ts +22 -14
  61. package/dist/cli/generate.d.ts.map +1 -1
  62. package/dist/cli/generate.js +91 -50
  63. package/dist/cli/generate.js.map +1 -1
  64. package/dist/cli/index.js +12 -3
  65. package/dist/cli/index.js.map +1 -1
  66. package/dist/cli/update.d.ts +13 -4
  67. package/dist/cli/update.d.ts.map +1 -1
  68. package/dist/cli/update.js +93 -131
  69. package/dist/cli/update.js.map +1 -1
  70. package/dist/config/defaults.d.ts +2 -2
  71. package/dist/config/defaults.d.ts.map +1 -1
  72. package/dist/config/defaults.js +2 -0
  73. package/dist/config/defaults.js.map +1 -1
  74. package/dist/config/schema.d.ts +175 -1
  75. package/dist/config/schema.d.ts.map +1 -1
  76. package/dist/config/schema.js +36 -1
  77. package/dist/config/schema.js.map +1 -1
  78. package/dist/generation/executor.d.ts.map +1 -1
  79. package/dist/generation/executor.js +2 -5
  80. package/dist/generation/executor.js.map +1 -1
  81. package/dist/generation/prompts/builder.d.ts +10 -0
  82. package/dist/generation/prompts/builder.d.ts.map +1 -1
  83. package/dist/generation/prompts/builder.js +77 -1
  84. package/dist/generation/prompts/builder.js.map +1 -1
  85. package/dist/generation/prompts/index.d.ts +1 -1
  86. package/dist/generation/prompts/index.d.ts.map +1 -1
  87. package/dist/generation/prompts/index.js +1 -1
  88. package/dist/generation/prompts/index.js.map +1 -1
  89. package/dist/generation/prompts/templates.d.ts +5 -0
  90. package/dist/generation/prompts/templates.d.ts.map +1 -1
  91. package/dist/generation/prompts/templates.js +94 -7
  92. package/dist/generation/prompts/templates.js.map +1 -1
  93. package/dist/generation/prompts/types.d.ts +2 -2
  94. package/dist/generation/prompts/types.js +1 -1
  95. package/dist/generation/writers/agents-md.d.ts +3 -59
  96. package/dist/generation/writers/agents-md.d.ts.map +1 -1
  97. package/dist/generation/writers/agents-md.js +11 -249
  98. package/dist/generation/writers/agents-md.js.map +1 -1
  99. package/dist/generation/writers/index.d.ts +1 -1
  100. package/dist/generation/writers/index.d.ts.map +1 -1
  101. package/dist/generation/writers/index.js +1 -1
  102. package/dist/generation/writers/index.js.map +1 -1
  103. package/dist/integration/templates.d.ts.map +1 -1
  104. package/dist/integration/templates.js +46 -130
  105. package/dist/integration/templates.js.map +1 -1
  106. package/dist/orchestration/index.d.ts +27 -0
  107. package/dist/orchestration/index.d.ts.map +1 -0
  108. package/dist/orchestration/index.js +34 -0
  109. package/dist/orchestration/index.js.map +1 -0
  110. package/dist/orchestration/pool.d.ts +62 -0
  111. package/dist/orchestration/pool.d.ts.map +1 -0
  112. package/dist/orchestration/pool.js +75 -0
  113. package/dist/orchestration/pool.js.map +1 -0
  114. package/dist/orchestration/progress.d.ts +124 -0
  115. package/dist/orchestration/progress.d.ts.map +1 -0
  116. package/dist/orchestration/progress.js +214 -0
  117. package/dist/orchestration/progress.js.map +1 -0
  118. package/dist/orchestration/runner.d.ts +76 -0
  119. package/dist/orchestration/runner.d.ts.map +1 -0
  120. package/dist/orchestration/runner.js +494 -0
  121. package/dist/orchestration/runner.js.map +1 -0
  122. package/dist/orchestration/types.d.ts +123 -0
  123. package/dist/orchestration/types.d.ts.map +1 -0
  124. package/dist/orchestration/types.js +11 -0
  125. package/dist/orchestration/types.js.map +1 -0
  126. package/dist/quality/density/validator.d.ts +38 -0
  127. package/dist/quality/density/validator.d.ts.map +1 -0
  128. package/dist/quality/density/validator.js +61 -0
  129. package/dist/quality/density/validator.js.map +1 -0
  130. package/dist/quality/inconsistency/code-vs-code.d.ts +26 -0
  131. package/dist/quality/inconsistency/code-vs-code.d.ts.map +1 -0
  132. package/dist/quality/inconsistency/code-vs-code.js +51 -0
  133. package/dist/quality/inconsistency/code-vs-code.js.map +1 -0
  134. package/dist/quality/inconsistency/code-vs-doc.d.ts +35 -0
  135. package/dist/quality/inconsistency/code-vs-doc.d.ts.map +1 -0
  136. package/dist/quality/inconsistency/code-vs-doc.js +59 -0
  137. package/dist/quality/inconsistency/code-vs-doc.js.map +1 -0
  138. package/dist/quality/inconsistency/code-vs-doc.test.d.ts +2 -0
  139. package/dist/quality/inconsistency/code-vs-doc.test.d.ts.map +1 -0
  140. package/dist/quality/inconsistency/code-vs-doc.test.js +196 -0
  141. package/dist/quality/inconsistency/code-vs-doc.test.js.map +1 -0
  142. package/dist/quality/inconsistency/reporter.d.ts +49 -0
  143. package/dist/quality/inconsistency/reporter.d.ts.map +1 -0
  144. package/dist/quality/inconsistency/reporter.js +99 -0
  145. package/dist/quality/inconsistency/reporter.js.map +1 -0
  146. package/dist/quality/index.d.ts +15 -0
  147. package/dist/quality/index.d.ts.map +1 -0
  148. package/dist/quality/index.js +25 -0
  149. package/dist/quality/index.js.map +1 -0
  150. package/dist/quality/types.d.ts +63 -0
  151. package/dist/quality/types.d.ts.map +1 -0
  152. package/dist/quality/types.js +5 -0
  153. package/dist/quality/types.js.map +1 -0
  154. package/dist/update/orchestrator.d.ts.map +1 -1
  155. package/dist/update/orchestrator.js +2 -1
  156. package/dist/update/orchestrator.js.map +1 -1
  157. package/dist/update/orphan-cleaner.js +1 -1
  158. package/dist/update/orphan-cleaner.js.map +1 -1
  159. package/package.json +1 -1
@@ -0,0 +1,130 @@
1
+ /**
2
+ * In-memory telemetry logger for AI service calls.
3
+ *
4
+ * Accumulates {@link TelemetryEntry} instances during a run and computes
5
+ * aggregate summaries. The logger is created once per CLI invocation and
6
+ * finalized when the run completes.
7
+ *
8
+ * @module
9
+ */
10
+ /**
11
+ * Accumulates per-call telemetry entries in memory and produces a
12
+ * complete {@link RunLog} when the run finishes.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const logger = new TelemetryLogger('2026-02-07T12:00:00.000Z');
17
+ * logger.addEntry(entry);
18
+ * const summary = logger.getSummary();
19
+ * const runLog = logger.toRunLog();
20
+ * ```
21
+ */
22
+ export class TelemetryLogger {
23
+ /** Unique identifier for this run (ISO timestamp-based) */
24
+ runId;
25
+ /** ISO 8601 timestamp when the run started */
26
+ startTime;
27
+ /** Accumulated telemetry entries */
28
+ entries = [];
29
+ /**
30
+ * Create a new telemetry logger for a run.
31
+ *
32
+ * @param runId - Unique run identifier (typically an ISO timestamp)
33
+ */
34
+ constructor(runId) {
35
+ this.runId = runId;
36
+ this.startTime = new Date().toISOString();
37
+ }
38
+ /**
39
+ * Record a telemetry entry for a completed AI call.
40
+ *
41
+ * @param entry - The telemetry entry to record
42
+ */
43
+ addEntry(entry) {
44
+ this.entries.push(entry);
45
+ }
46
+ /**
47
+ * Get all recorded entries as a read-only array.
48
+ *
49
+ * @returns Immutable view of the accumulated entries
50
+ */
51
+ getEntries() {
52
+ return this.entries;
53
+ }
54
+ /**
55
+ * Update the most recent entry's filesRead array.
56
+ *
57
+ * Called by the AI service after the command runner attaches file
58
+ * metadata to the last call.
59
+ *
60
+ * @param filesRead - Array of file-read records to attach
61
+ */
62
+ setFilesReadOnLastEntry(filesRead) {
63
+ if (this.entries.length === 0)
64
+ return;
65
+ this.entries[this.entries.length - 1].filesRead = filesRead;
66
+ }
67
+ /**
68
+ * Compute aggregate summary statistics from all recorded entries.
69
+ *
70
+ * Totals are computed on every call (not cached) so the summary
71
+ * always reflects the current state of the entries array.
72
+ *
73
+ * @returns Summary with totals for calls, tokens, cost, duration, and errors
74
+ */
75
+ getSummary() {
76
+ let totalInputTokens = 0;
77
+ let totalOutputTokens = 0;
78
+ let totalCostUsd = 0;
79
+ let totalDurationMs = 0;
80
+ let errorCount = 0;
81
+ let costAvailable = false;
82
+ let totalFilesRead = 0;
83
+ const uniqueFilePaths = new Set();
84
+ for (const entry of this.entries) {
85
+ totalInputTokens += entry.inputTokens;
86
+ totalOutputTokens += entry.outputTokens;
87
+ totalCostUsd += entry.costUsd;
88
+ totalDurationMs += entry.latencyMs;
89
+ if (entry.error !== undefined) {
90
+ errorCount++;
91
+ }
92
+ if (entry.costSource !== 'unavailable') {
93
+ costAvailable = true;
94
+ }
95
+ totalFilesRead += entry.filesRead.length;
96
+ for (const file of entry.filesRead) {
97
+ uniqueFilePaths.add(file.path);
98
+ }
99
+ }
100
+ return {
101
+ totalCalls: this.entries.length,
102
+ totalInputTokens,
103
+ totalOutputTokens,
104
+ totalCostUsd,
105
+ totalDurationMs,
106
+ errorCount,
107
+ costAvailable,
108
+ totalFilesRead,
109
+ uniqueFilesRead: uniqueFilePaths.size,
110
+ };
111
+ }
112
+ /**
113
+ * Assemble the complete {@link RunLog} for this run.
114
+ *
115
+ * Sets `endTime` to the current time, includes all entries, and
116
+ * computes the summary. Call this once when the run is finished.
117
+ *
118
+ * @returns Complete run log ready for serialization
119
+ */
120
+ toRunLog() {
121
+ return {
122
+ runId: this.runId,
123
+ startTime: this.startTime,
124
+ endTime: new Date().toISOString(),
125
+ entries: [...this.entries],
126
+ summary: this.getSummary(),
127
+ };
128
+ }
129
+ }
130
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/ai/telemetry/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,eAAe;IAC1B,2DAA2D;IAClD,KAAK,CAAS;IAEvB,8CAA8C;IACrC,SAAS,CAAS;IAE3B,oCAAoC;IACnB,OAAO,GAAqB,EAAE,CAAC;IAEhD;;;;OAIG;IACH,YAAY,KAAa;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5C,CAAC;IAED;;;;OAIG;IACH,QAAQ,CAAC,KAAqB;QAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;;;;;;OAOG;IACH,uBAAuB,CAAC,SAAqB;QAC3C,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACtC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/D,CAAC;IAED;;;;;;;OAOG;IACH,UAAU;QACR,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAC1B,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;QAE1C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjC,gBAAgB,IAAI,KAAK,CAAC,WAAW,CAAC;YACtC,iBAAiB,IAAI,KAAK,CAAC,YAAY,CAAC;YACxC,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC;YAC9B,eAAe,IAAI,KAAK,CAAC,SAAS,CAAC;YACnC,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC9B,UAAU,EAAE,CAAC;YACf,CAAC;YACD,IAAI,KAAK,CAAC,UAAU,KAAK,aAAa,EAAE,CAAC;gBACvC,aAAa,GAAG,IAAI,CAAC;YACvB,CAAC;YACD,cAAc,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;YACzC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACnC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;YAC/B,gBAAgB;YAChB,iBAAiB;YACjB,YAAY;YACZ,eAAe;YACf,UAAU;YACV,aAAa;YACb,cAAc;YACd,eAAe,EAAE,eAAe,CAAC,IAAI;SACtC,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACH,QAAQ;QACN,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACjC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;YAC1B,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;SAC3B,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Run log writer for AI telemetry.
3
+ *
4
+ * Writes a completed {@link RunLog} to disk as pretty-printed JSON.
5
+ * Each run produces a single file in `.agents-reverse-engineer/logs/`
6
+ * with a filename derived from the run's start timestamp.
7
+ *
8
+ * @module
9
+ */
10
+ import type { RunLog } from '../types.js';
11
+ /**
12
+ * Write a completed run log to disk as pretty-printed JSON.
13
+ *
14
+ * Creates the logs directory if it does not exist. The filename is derived
15
+ * from the run's `startTime` field with `:` and `.` replaced by `-` so
16
+ * that it forms a valid filename on all platforms.
17
+ *
18
+ * @param projectRoot - Absolute path to the project root directory
19
+ * @param runLog - The completed run log to write
20
+ * @returns Absolute path to the written file
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * const logPath = await writeRunLog('/home/user/project', runLog);
25
+ * // logPath: /home/user/project/.agents-reverse-engineer/logs/run-2026-02-07T12-00-00-000Z.json
26
+ * ```
27
+ */
28
+ export declare function writeRunLog(projectRoot: string, runLog: RunLog): Promise<string>;
29
+ //# sourceMappingURL=run-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-log.d.ts","sourceRoot":"","sources":["../../../src/ai/telemetry/run-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAK1C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAetF"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Run log writer for AI telemetry.
3
+ *
4
+ * Writes a completed {@link RunLog} to disk as pretty-printed JSON.
5
+ * Each run produces a single file in `.agents-reverse-engineer/logs/`
6
+ * with a filename derived from the run's start timestamp.
7
+ *
8
+ * @module
9
+ */
10
+ import * as fs from 'node:fs/promises';
11
+ import * as path from 'node:path';
12
+ /** Directory name for telemetry log files (relative to project root) */
13
+ const LOGS_DIR = '.agents-reverse-engineer/logs';
14
+ /**
15
+ * Write a completed run log to disk as pretty-printed JSON.
16
+ *
17
+ * Creates the logs directory if it does not exist. The filename is derived
18
+ * from the run's `startTime` field with `:` and `.` replaced by `-` so
19
+ * that it forms a valid filename on all platforms.
20
+ *
21
+ * @param projectRoot - Absolute path to the project root directory
22
+ * @param runLog - The completed run log to write
23
+ * @returns Absolute path to the written file
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * const logPath = await writeRunLog('/home/user/project', runLog);
28
+ * // logPath: /home/user/project/.agents-reverse-engineer/logs/run-2026-02-07T12-00-00-000Z.json
29
+ * ```
30
+ */
31
+ export async function writeRunLog(projectRoot, runLog) {
32
+ const logsDir = path.join(projectRoot, LOGS_DIR);
33
+ // Create the logs directory if it does not exist
34
+ await fs.mkdir(logsDir, { recursive: true });
35
+ // Build filename: replace : and . with - so ISO timestamps become valid filenames
36
+ const safeTimestamp = runLog.startTime.replace(/[:.]/g, '-');
37
+ const filename = `run-${safeTimestamp}.json`;
38
+ const filePath = path.join(logsDir, filename);
39
+ // Write pretty-printed JSON
40
+ await fs.writeFile(filePath, JSON.stringify(runLog, null, 2), 'utf-8');
41
+ return filePath;
42
+ }
43
+ //# sourceMappingURL=run-log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-log.js","sourceRoot":"","sources":["../../../src/ai/telemetry/run-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,wEAAwE;AACxE,MAAM,QAAQ,GAAG,+BAA+B,CAAC;AAEjD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,WAAmB,EAAE,MAAc;IACnE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAEjD,iDAAiD;IACjD,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,kFAAkF;IAClF,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,OAAO,aAAa,OAAO,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAE9C,4BAA4B;IAC5B,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAEvE,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,235 @@
1
+ /**
2
+ * Shared types for the AI service layer.
3
+ *
4
+ * Defines the contract for backends, responses, subprocess results,
5
+ * retry configuration, and telemetry logging. Every AI service module
6
+ * imports from this file.
7
+ */
8
+ /**
9
+ * Result returned by the subprocess wrapper after a CLI process completes.
10
+ *
11
+ * Always populated -- even on error or timeout, the fields are filled
12
+ * with whatever information was available.
13
+ */
14
+ export interface SubprocessResult {
15
+ /** Standard output captured from the child process */
16
+ stdout: string;
17
+ /** Standard error captured from the child process */
18
+ stderr: string;
19
+ /** Numeric exit code (0 = success, non-zero = failure) */
20
+ exitCode: number;
21
+ /** Signal that terminated the process, or `null` if it exited normally */
22
+ signal: string | null;
23
+ /** Wall-clock duration in milliseconds */
24
+ durationMs: number;
25
+ /** Whether the process was killed because it exceeded its timeout */
26
+ timedOut: boolean;
27
+ }
28
+ /**
29
+ * Input options for an AI call.
30
+ *
31
+ * Only `prompt` is required; all other fields have backend-specific defaults.
32
+ */
33
+ export interface AICallOptions {
34
+ /** The prompt to send to the AI model */
35
+ prompt: string;
36
+ /** Optional system prompt to set context/behavior */
37
+ systemPrompt?: string;
38
+ /** Model identifier (e.g., "sonnet", "opus") -- backend interprets this */
39
+ model?: string;
40
+ /** Subprocess timeout in milliseconds (overrides config default) */
41
+ timeoutMs?: number;
42
+ /** Maximum number of agentic turns (backend-specific) */
43
+ maxTurns?: number;
44
+ }
45
+ /**
46
+ * Normalized response from any AI CLI backend.
47
+ *
48
+ * Every backend adapter must parse its CLI's raw output into this shape
49
+ * so that callers never need to know which backend was used.
50
+ */
51
+ export interface AIResponse {
52
+ /** The AI model's text response */
53
+ text: string;
54
+ /** Model identifier as reported by the backend */
55
+ model: string;
56
+ /** Number of input tokens consumed */
57
+ inputTokens: number;
58
+ /** Number of output tokens generated */
59
+ outputTokens: number;
60
+ /** Number of tokens served from cache reads */
61
+ cacheReadTokens: number;
62
+ /** Number of tokens written to cache */
63
+ cacheCreationTokens: number;
64
+ /** Estimated cost in USD for this call */
65
+ costUsd: number;
66
+ /** Wall-clock duration in milliseconds */
67
+ durationMs: number;
68
+ /** Process exit code from the CLI */
69
+ exitCode: number;
70
+ /** Original CLI JSON output for debugging */
71
+ raw: unknown;
72
+ }
73
+ /**
74
+ * Contract for an AI CLI backend adapter.
75
+ *
76
+ * Each supported CLI (Claude, Gemini, OpenCode) implements this interface.
77
+ * The registry selects the appropriate backend at runtime.
78
+ *
79
+ * @example
80
+ * ```typescript
81
+ * const backend: AIBackend = new ClaudeBackend();
82
+ * if (await backend.isAvailable()) {
83
+ * const args = backend.buildArgs({ prompt: 'Hello' });
84
+ * // spawn the process with backend.cliCommand and args
85
+ * }
86
+ * ```
87
+ */
88
+ export interface AIBackend {
89
+ /** Human-readable backend name (e.g., "Claude", "Gemini") */
90
+ readonly name: string;
91
+ /** CLI executable name on PATH (e.g., "claude", "gemini") */
92
+ readonly cliCommand: string;
93
+ /** Check whether this backend's CLI is available on PATH */
94
+ isAvailable(): Promise<boolean>;
95
+ /** Build the CLI argument array for a given call */
96
+ buildArgs(options: AICallOptions): string[];
97
+ /** Parse the CLI's stdout into a normalized {@link AIResponse} */
98
+ parseResponse(stdout: string, durationMs: number, exitCode: number): AIResponse;
99
+ /** Get user-facing install instructions when the CLI is not found */
100
+ getInstallInstructions(): string;
101
+ }
102
+ /**
103
+ * Configuration for the retry utility.
104
+ *
105
+ * Controls exponential backoff timing and which errors are retryable.
106
+ */
107
+ export interface RetryOptions {
108
+ /** Maximum number of retries (e.g., 3 means up to 4 total attempts) */
109
+ maxRetries: number;
110
+ /** Base delay in milliseconds before first retry */
111
+ baseDelayMs: number;
112
+ /** Maximum delay cap in milliseconds */
113
+ maxDelayMs: number;
114
+ /** Exponential multiplier applied to the base delay */
115
+ multiplier: number;
116
+ /** Predicate that returns `true` if the error is transient and retryable */
117
+ isRetryable: (error: unknown) => boolean;
118
+ /** Optional callback invoked before each retry attempt */
119
+ onRetry?: (attempt: number, error: unknown) => void;
120
+ }
121
+ import type { CostSource } from './pricing.js';
122
+ export type { CostSource } from './pricing.js';
123
+ /**
124
+ * Record of a single file read that was sent as context to an AI call.
125
+ */
126
+ export interface FileRead {
127
+ /** File path relative to project root */
128
+ path: string;
129
+ /** File size in bytes at time of read */
130
+ sizeBytes: number;
131
+ }
132
+ /**
133
+ * Per-call telemetry log entry.
134
+ *
135
+ * Captures everything needed to replay or debug a single AI call
136
+ * without re-running it.
137
+ */
138
+ export interface TelemetryEntry {
139
+ /** ISO 8601 timestamp when the call was initiated */
140
+ timestamp: string;
141
+ /** The prompt that was sent */
142
+ prompt: string;
143
+ /** The system prompt, if one was used */
144
+ systemPrompt?: string;
145
+ /** The AI model's text response */
146
+ response: string;
147
+ /** Model identifier */
148
+ model: string;
149
+ /** Number of input tokens consumed */
150
+ inputTokens: number;
151
+ /** Number of output tokens generated */
152
+ outputTokens: number;
153
+ /** Number of tokens served from cache reads */
154
+ cacheReadTokens: number;
155
+ /** Number of tokens written to cache */
156
+ cacheCreationTokens: number;
157
+ /** Estimated cost in USD */
158
+ costUsd: number;
159
+ /** Wall-clock latency in milliseconds */
160
+ latencyMs: number;
161
+ /** Process exit code */
162
+ exitCode: number;
163
+ /** Error message, if the call failed */
164
+ error?: string;
165
+ /** Number of retries that occurred before this result */
166
+ retryCount: number;
167
+ /** AI thinking/reasoning content. "not supported" when backend doesn't provide it */
168
+ thinking: string;
169
+ /** Files sent as context for this call */
170
+ filesRead: FileRead[];
171
+ /** How the cost was determined */
172
+ costSource: CostSource;
173
+ }
174
+ /**
175
+ * Per-run log file structure.
176
+ *
177
+ * Aggregates all {@link TelemetryEntry} instances for a single CLI run,
178
+ * plus a computed summary for quick cost/performance review.
179
+ */
180
+ export interface RunLog {
181
+ /** Unique run identifier (ISO timestamp-based) */
182
+ runId: string;
183
+ /** ISO 8601 timestamp when the run started */
184
+ startTime: string;
185
+ /** ISO 8601 timestamp when the run finished */
186
+ endTime: string;
187
+ /** All individual call entries */
188
+ entries: TelemetryEntry[];
189
+ /** Aggregated summary across all entries */
190
+ summary: {
191
+ /** Total number of AI calls made */
192
+ totalCalls: number;
193
+ /** Sum of input tokens across all calls */
194
+ totalInputTokens: number;
195
+ /** Sum of output tokens across all calls */
196
+ totalOutputTokens: number;
197
+ /** Sum of estimated cost across all calls */
198
+ totalCostUsd: number;
199
+ /** Total wall-clock duration in milliseconds */
200
+ totalDurationMs: number;
201
+ /** Number of calls that resulted in an error */
202
+ errorCount: number;
203
+ /** Whether cost data is available for all/most entries */
204
+ costAvailable: boolean;
205
+ /** Total file reads across all calls (including duplicates) */
206
+ totalFilesRead: number;
207
+ /** Unique files read (deduped by path) */
208
+ uniqueFilesRead: number;
209
+ };
210
+ }
211
+ /** Error codes for typed error handling in the AI service layer */
212
+ export type AIServiceErrorCode = 'CLI_NOT_FOUND' | 'TIMEOUT' | 'PARSE_ERROR' | 'SUBPROCESS_ERROR' | 'RATE_LIMIT';
213
+ /**
214
+ * Typed error for AI service failures.
215
+ *
216
+ * Carries a machine-readable {@link AIServiceErrorCode} so callers can
217
+ * branch on the error type without parsing message strings.
218
+ *
219
+ * @example
220
+ * ```typescript
221
+ * try {
222
+ * await callAI(options);
223
+ * } catch (error) {
224
+ * if (error instanceof AIServiceError && error.code === 'RATE_LIMIT') {
225
+ * // handle rate limiting
226
+ * }
227
+ * }
228
+ * ```
229
+ */
230
+ export declare class AIServiceError extends Error {
231
+ /** Machine-readable error code */
232
+ readonly code: AIServiceErrorCode;
233
+ constructor(code: AIServiceErrorCode, message: string);
234
+ }
235
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ai/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,QAAQ,EAAE,OAAO,CAAC;CACnB;AAMD;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,eAAe,EAAE,MAAM,CAAC;IACxB,wCAAwC;IACxC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,GAAG,EAAE,OAAO,CAAC;CACd;AAMD;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,SAAS;IACxB,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,4DAA4D;IAC5D,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhC,oDAAoD;IACpD,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,EAAE,CAAC;IAE5C,kEAAkE;IAClE,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAC;IAEhF,qEAAqE;IACrE,sBAAsB,IAAI,MAAM,CAAC;CAClC;AAMD;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;IACzC,0DAA0D;IAC1D,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACrD;AAMD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,eAAe,EAAE,MAAM,CAAC;IACxB,wCAAwC;IACxC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,UAAU,EAAE,MAAM,CAAC;IACnB,qFAAqF;IACrF,QAAQ,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,kCAAkC;IAClC,UAAU,EAAE,UAAU,CAAC;CACxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,MAAM;IACrB,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,4CAA4C;IAC5C,OAAO,EAAE;QACP,oCAAoC;QACpC,UAAU,EAAE,MAAM,CAAC;QACnB,2CAA2C;QAC3C,gBAAgB,EAAE,MAAM,CAAC;QACzB,4CAA4C;QAC5C,iBAAiB,EAAE,MAAM,CAAC;QAC1B,6CAA6C;QAC7C,YAAY,EAAE,MAAM,CAAC;QACrB,gDAAgD;QAChD,eAAe,EAAE,MAAM,CAAC;QACxB,gDAAgD;QAChD,UAAU,EAAE,MAAM,CAAC;QACnB,0DAA0D;QAC1D,aAAa,EAAE,OAAO,CAAC;QACvB,+DAA+D;QAC/D,cAAc,EAAE,MAAM,CAAC;QACvB,0CAA0C;QAC1C,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAMD,mEAAmE;AACnE,MAAM,MAAM,kBAAkB,GAC1B,eAAe,GACf,SAAS,GACT,aAAa,GACb,kBAAkB,GAClB,YAAY,CAAC;AAEjB;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,kCAAkC;IAClC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;gBAEtB,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM;CAKtD"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Shared types for the AI service layer.
3
+ *
4
+ * Defines the contract for backends, responses, subprocess results,
5
+ * retry configuration, and telemetry logging. Every AI service module
6
+ * imports from this file.
7
+ */
8
+ /**
9
+ * Typed error for AI service failures.
10
+ *
11
+ * Carries a machine-readable {@link AIServiceErrorCode} so callers can
12
+ * branch on the error type without parsing message strings.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * try {
17
+ * await callAI(options);
18
+ * } catch (error) {
19
+ * if (error instanceof AIServiceError && error.code === 'RATE_LIMIT') {
20
+ * // handle rate limiting
21
+ * }
22
+ * }
23
+ * ```
24
+ */
25
+ export class AIServiceError extends Error {
26
+ /** Machine-readable error code */
27
+ code;
28
+ constructor(code, message) {
29
+ super(message);
30
+ this.name = 'AIServiceError';
31
+ this.code = code;
32
+ }
33
+ }
34
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/ai/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA0PH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC,kCAAkC;IACzB,IAAI,CAAqB;IAElC,YAAY,IAAwB,EAAE,OAAe;QACnD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/cli/discover.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmBH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,KAAK,EAAE,OAAO,CAAC;IAEf;;;OAGG;IACH,YAAY,EAAE,OAAO,CAAC;IAEtB;;;;OAIG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CA6Gf"}
1
+ {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/cli/discover.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmBH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,KAAK,EAAE,OAAO,CAAC;IAEf;;;OAGG;IACH,YAAY,EAAE,OAAO,CAAC;IAEtB;;;;OAIG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CA2Gf"}
@@ -119,7 +119,5 @@ export async function discoverCommand(targetPath, options) {
119
119
  process.exit(1);
120
120
  }
121
121
  }
122
- // Exit with code 0 on success
123
- process.exit(0);
124
122
  }
125
123
  //# sourceMappingURL=discover.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/cli/discover.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/cli/discover.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAiC9F;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAAkB,EAClB,OAAwB;IAExB,4CAA4C;IAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAE/D,uDAAuD;IACvD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC;IAE9C,+DAA+D;IAC/D,MAAM,MAAM,GAAG,YAAY,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;QAC3E,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;QAC5B,YAAY,EAAE,OAAO,CAAC,YAAY;KACnC,CAAC,CAAC;IAEH,4BAA4B;IAC5B,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,GAA4B,CAAC;QAC3C,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,CAAC,KAAK,CAAC,wBAAwB,YAAY,EAAE,CAAC,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACtD,MAAM,CAAC,KAAK,CAAC,sBAAsB,YAAY,EAAE,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,wBAAwB,YAAY,KAAK,CAAC,CAAC;IACvD,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEhB,kDAAkD;IAClD,MAAM,eAAe,GAAG,MAAM,qBAAqB,CAAC,YAAY,CAAC,CAAC;IAClE,MAAM,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACnE,MAAM,YAAY,GAAG,kBAAkB,CAAC;QACtC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW;QACvC,oBAAoB,EAAE,MAAM,CAAC,OAAO,CAAC,gBAAgB;KACtD,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAE/E,MAAM,OAAO,GAAG,CAAC,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;IAE5E,iBAAiB;IACjB,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC;QAChC,GAAG,EAAE,YAAY;QACjB,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,cAAc;KAC9C,CAAC,CAAC;IAEH,gBAAgB;IAChB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAElD,cAAc;IACd,yCAAyC;IACzC,MAAM,YAAY,GAAG,CAAC,OAAe,EAAU,EAAE,CAC/C,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAEvC,0CAA0C;IAC1C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,6CAA6C;IAC7C,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACvC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjF,CAAC;IAED,qCAAqC;IACrC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE/D,oDAAoD;IACpD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAE5C,2CAA2C;QAC3C,MAAM,eAAe,GAAoB;YACvC,KAAK,EAAE,MAAM,CAAC,QAAQ;YACtB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;SACzE,CAAC;QAEF,gDAAgD;QAChD,MAAM,YAAY,GAAG,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5F,MAAM,cAAc,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;QAEtE,iDAAiD;QACjD,MAAM,aAAa,GAAG,kBAAkB,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;QAEvE,qBAAqB;QACrB,MAAM,QAAQ,GAAG,6BAA6B,CAAC,aAAa,CAAC,CAAC;QAE9D,uDAAuD;QACvD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC;QACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;QAE5D,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5C,MAAM,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,yBAA0B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;AAEH,CAAC"}
@@ -1,13 +1,15 @@
1
1
  /**
2
2
  * CLI generate command
3
3
  *
4
- * Creates a documentation generation plan by:
4
+ * Creates and executes a documentation generation plan by:
5
5
  * 1. Discovering files to analyze
6
- * 2. Detecting file types
7
- * 3. Creating analysis tasks with prompts
8
- * 4. Tracking token budget
6
+ * 2. Detecting file types and creating analysis tasks
7
+ * 3. Resolving an AI CLI backend
8
+ * 4. Running concurrent AI analysis via CommandRunner
9
+ * 5. Producing .sum files, AGENTS.md, and root documents
9
10
  *
10
- * With --execute flag, outputs tasks as JSON for AI agent execution.
11
+ * With --dry-run, shows the plan without making any AI calls.
12
+ * With --execute or --stream (deprecated), outputs JSON for external tools.
11
13
  */
12
14
  /**
13
15
  * Options for the generate command.
@@ -21,21 +23,27 @@ export interface GenerateOptions {
21
23
  dryRun?: boolean;
22
24
  /** Override token budget */
23
25
  budget?: number;
24
- /** Execute mode - output JSON for AI agent execution */
26
+ /** Number of concurrent AI calls */
27
+ concurrency?: number;
28
+ /** Stop on first file analysis failure */
29
+ failFast?: boolean;
30
+ /** Show AI prompts and backend details */
31
+ debug?: boolean;
32
+ /** @deprecated Execute mode - output JSON for AI agent execution */
25
33
  execute?: boolean;
26
- /** Stream mode - output tasks one per line */
34
+ /** @deprecated Stream mode - output tasks one per line */
27
35
  stream?: boolean;
28
36
  }
29
37
  /**
30
- * Generate command - creates documentation generation plan.
38
+ * Generate command - discovers files, plans analysis, and executes AI-driven
39
+ * documentation generation.
31
40
  *
32
- * This command:
33
- * 1. Discovers files to analyze
34
- * 2. Detects file types
35
- * 3. Creates analysis tasks (prompts)
36
- * 4. Reports budget and plan
41
+ * Default behavior: resolves an AI CLI backend, builds an execution plan,
42
+ * and runs concurrent AI analysis via the CommandRunner. Produces .sum files,
43
+ * AGENTS.md per directory, and root documents (CLAUDE.md, ARCHITECTURE.md, etc.).
37
44
  *
38
- * The actual analysis is performed by the host LLM using the generated prompts.
45
+ * @param targetPath - Directory to generate documentation for
46
+ * @param options - Command options (concurrency, failFast, debug, etc.)
39
47
  */
40
48
  export declare function generateCommand(targetPath: string, options: GenerateOptions): Promise<void>;
41
49
  //# sourceMappingURL=generate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/cli/generate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAgBH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,oCAAoC;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,mCAAmC;IACnC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAuFD;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CA0Hf"}
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/cli/generate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAyBH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,oCAAoC;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,mCAAmC;IACnC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oEAAoE;IACpE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAuFD;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CA6Kf"}