agents-reverse-engineer 0.3.6 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai/backends/claude.d.ts +92 -0
- package/dist/ai/backends/claude.d.ts.map +1 -0
- package/dist/ai/backends/claude.js +213 -0
- package/dist/ai/backends/claude.js.map +1 -0
- package/dist/ai/backends/gemini.d.ts +53 -0
- package/dist/ai/backends/gemini.d.ts.map +1 -0
- package/dist/ai/backends/gemini.js +66 -0
- package/dist/ai/backends/gemini.js.map +1 -0
- package/dist/ai/backends/opencode.d.ts +53 -0
- package/dist/ai/backends/opencode.d.ts.map +1 -0
- package/dist/ai/backends/opencode.js +66 -0
- package/dist/ai/backends/opencode.js.map +1 -0
- package/dist/ai/index.d.ts +39 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +54 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/pricing.d.ts +84 -0
- package/dist/ai/pricing.d.ts.map +1 -0
- package/dist/ai/pricing.js +149 -0
- package/dist/ai/pricing.js.map +1 -0
- package/dist/ai/pricing.test.d.ts +2 -0
- package/dist/ai/pricing.test.d.ts.map +1 -0
- package/dist/ai/pricing.test.js +164 -0
- package/dist/ai/pricing.test.js.map +1 -0
- package/dist/ai/registry.d.ts +128 -0
- package/dist/ai/registry.d.ts.map +1 -0
- package/dist/ai/registry.js +192 -0
- package/dist/ai/registry.js.map +1 -0
- package/dist/ai/retry.d.ts +77 -0
- package/dist/ai/retry.d.ts.map +1 -0
- package/dist/ai/retry.js +100 -0
- package/dist/ai/retry.js.map +1 -0
- package/dist/ai/service.d.ts +124 -0
- package/dist/ai/service.d.ts.map +1 -0
- package/dist/ai/service.js +239 -0
- package/dist/ai/service.js.map +1 -0
- package/dist/ai/subprocess.d.ts +45 -0
- package/dist/ai/subprocess.d.ts.map +1 -0
- package/dist/ai/subprocess.js +90 -0
- package/dist/ai/subprocess.js.map +1 -0
- package/dist/ai/telemetry/cleanup.d.ts +30 -0
- package/dist/ai/telemetry/cleanup.d.ts.map +1 -0
- package/dist/ai/telemetry/cleanup.js +56 -0
- package/dist/ai/telemetry/cleanup.js.map +1 -0
- package/dist/ai/telemetry/logger.d.ts +76 -0
- package/dist/ai/telemetry/logger.d.ts.map +1 -0
- package/dist/ai/telemetry/logger.js +130 -0
- package/dist/ai/telemetry/logger.js.map +1 -0
- package/dist/ai/telemetry/run-log.d.ts +29 -0
- package/dist/ai/telemetry/run-log.d.ts.map +1 -0
- package/dist/ai/telemetry/run-log.js +43 -0
- package/dist/ai/telemetry/run-log.js.map +1 -0
- package/dist/ai/types.d.ts +235 -0
- package/dist/ai/types.d.ts.map +1 -0
- package/dist/ai/types.js +34 -0
- package/dist/ai/types.js.map +1 -0
- package/dist/cli/discover.d.ts.map +1 -1
- package/dist/cli/discover.js +0 -2
- package/dist/cli/discover.js.map +1 -1
- package/dist/cli/generate.d.ts +22 -14
- package/dist/cli/generate.d.ts.map +1 -1
- package/dist/cli/generate.js +91 -50
- package/dist/cli/generate.js.map +1 -1
- package/dist/cli/index.js +12 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/update.d.ts +13 -4
- package/dist/cli/update.d.ts.map +1 -1
- package/dist/cli/update.js +93 -131
- package/dist/cli/update.js.map +1 -1
- package/dist/config/defaults.d.ts +2 -2
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +2 -0
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/schema.d.ts +175 -1
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +36 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/generation/executor.d.ts.map +1 -1
- package/dist/generation/executor.js +2 -5
- package/dist/generation/executor.js.map +1 -1
- package/dist/generation/prompts/builder.d.ts +10 -0
- package/dist/generation/prompts/builder.d.ts.map +1 -1
- package/dist/generation/prompts/builder.js +77 -1
- package/dist/generation/prompts/builder.js.map +1 -1
- package/dist/generation/prompts/index.d.ts +1 -1
- package/dist/generation/prompts/index.d.ts.map +1 -1
- package/dist/generation/prompts/index.js +1 -1
- package/dist/generation/prompts/index.js.map +1 -1
- package/dist/generation/prompts/templates.d.ts +5 -0
- package/dist/generation/prompts/templates.d.ts.map +1 -1
- package/dist/generation/prompts/templates.js +94 -7
- package/dist/generation/prompts/templates.js.map +1 -1
- package/dist/generation/prompts/types.d.ts +2 -2
- package/dist/generation/prompts/types.js +1 -1
- package/dist/generation/writers/agents-md.d.ts +3 -59
- package/dist/generation/writers/agents-md.d.ts.map +1 -1
- package/dist/generation/writers/agents-md.js +11 -249
- package/dist/generation/writers/agents-md.js.map +1 -1
- package/dist/generation/writers/index.d.ts +1 -1
- package/dist/generation/writers/index.d.ts.map +1 -1
- package/dist/generation/writers/index.js +1 -1
- package/dist/generation/writers/index.js.map +1 -1
- package/dist/orchestration/index.d.ts +27 -0
- package/dist/orchestration/index.d.ts.map +1 -0
- package/dist/orchestration/index.js +34 -0
- package/dist/orchestration/index.js.map +1 -0
- package/dist/orchestration/pool.d.ts +62 -0
- package/dist/orchestration/pool.d.ts.map +1 -0
- package/dist/orchestration/pool.js +75 -0
- package/dist/orchestration/pool.js.map +1 -0
- package/dist/orchestration/progress.d.ts +124 -0
- package/dist/orchestration/progress.d.ts.map +1 -0
- package/dist/orchestration/progress.js +214 -0
- package/dist/orchestration/progress.js.map +1 -0
- package/dist/orchestration/runner.d.ts +76 -0
- package/dist/orchestration/runner.d.ts.map +1 -0
- package/dist/orchestration/runner.js +494 -0
- package/dist/orchestration/runner.js.map +1 -0
- package/dist/orchestration/types.d.ts +123 -0
- package/dist/orchestration/types.d.ts.map +1 -0
- package/dist/orchestration/types.js +11 -0
- package/dist/orchestration/types.js.map +1 -0
- package/dist/quality/density/validator.d.ts +38 -0
- package/dist/quality/density/validator.d.ts.map +1 -0
- package/dist/quality/density/validator.js +61 -0
- package/dist/quality/density/validator.js.map +1 -0
- package/dist/quality/inconsistency/code-vs-code.d.ts +26 -0
- package/dist/quality/inconsistency/code-vs-code.d.ts.map +1 -0
- package/dist/quality/inconsistency/code-vs-code.js +51 -0
- package/dist/quality/inconsistency/code-vs-code.js.map +1 -0
- package/dist/quality/inconsistency/code-vs-doc.d.ts +35 -0
- package/dist/quality/inconsistency/code-vs-doc.d.ts.map +1 -0
- package/dist/quality/inconsistency/code-vs-doc.js +59 -0
- package/dist/quality/inconsistency/code-vs-doc.js.map +1 -0
- package/dist/quality/inconsistency/code-vs-doc.test.d.ts +2 -0
- package/dist/quality/inconsistency/code-vs-doc.test.d.ts.map +1 -0
- package/dist/quality/inconsistency/code-vs-doc.test.js +196 -0
- package/dist/quality/inconsistency/code-vs-doc.test.js.map +1 -0
- package/dist/quality/inconsistency/reporter.d.ts +49 -0
- package/dist/quality/inconsistency/reporter.d.ts.map +1 -0
- package/dist/quality/inconsistency/reporter.js +99 -0
- package/dist/quality/inconsistency/reporter.js.map +1 -0
- package/dist/quality/index.d.ts +15 -0
- package/dist/quality/index.d.ts.map +1 -0
- package/dist/quality/index.js +25 -0
- package/dist/quality/index.js.map +1 -0
- package/dist/quality/types.d.ts +63 -0
- package/dist/quality/types.d.ts.map +1 -0
- package/dist/quality/types.js +5 -0
- package/dist/quality/types.js.map +1 -0
- package/dist/update/orchestrator.d.ts.map +1 -1
- package/dist/update/orchestrator.js +2 -1
- package/dist/update/orchestrator.js.map +1 -1
- package/dist/update/orphan-cleaner.js +1 -1
- package/dist/update/orphan-cleaner.js.map +1 -1
- package/package.json +1 -1
package/dist/cli/generate.js
CHANGED
|
@@ -1,21 +1,26 @@
|
|
|
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.
|
|
8
|
-
* 4.
|
|
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 --
|
|
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
|
import * as path from 'node:path';
|
|
15
|
+
import pc from 'picocolors';
|
|
13
16
|
import { loadConfig } from '../config/loader.js';
|
|
14
17
|
import { createLogger } from '../output/logger.js';
|
|
15
18
|
import { walkDirectory } from '../discovery/walker.js';
|
|
16
19
|
import { applyFilters, createGitignoreFilter, createVendorFilter, createBinaryFilter, createCustomFilter, } from '../discovery/filters/index.js';
|
|
17
20
|
import { createOrchestrator } from '../generation/orchestrator.js';
|
|
18
21
|
import { buildExecutionPlan, formatExecutionPlanAsJson, streamTasks } from '../generation/executor.js';
|
|
22
|
+
import { AIService, AIServiceError, createBackendRegistry, resolveBackend, getInstallInstructions, } from '../ai/index.js';
|
|
23
|
+
import { CommandRunner } from '../orchestration/index.js';
|
|
19
24
|
/**
|
|
20
25
|
* Format file type distribution for display.
|
|
21
26
|
*/
|
|
@@ -89,19 +94,19 @@ function formatPlan(plan) {
|
|
|
89
94
|
return lines.join('\n');
|
|
90
95
|
}
|
|
91
96
|
/**
|
|
92
|
-
* Generate command -
|
|
97
|
+
* Generate command - discovers files, plans analysis, and executes AI-driven
|
|
98
|
+
* documentation generation.
|
|
93
99
|
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
* 3. Creates analysis tasks (prompts)
|
|
98
|
-
* 4. Reports budget and plan
|
|
100
|
+
* Default behavior: resolves an AI CLI backend, builds an execution plan,
|
|
101
|
+
* and runs concurrent AI analysis via the CommandRunner. Produces .sum files,
|
|
102
|
+
* AGENTS.md per directory, and root documents (CLAUDE.md, ARCHITECTURE.md, etc.).
|
|
99
103
|
*
|
|
100
|
-
*
|
|
104
|
+
* @param targetPath - Directory to generate documentation for
|
|
105
|
+
* @param options - Command options (concurrency, failFast, debug, etc.)
|
|
101
106
|
*/
|
|
102
107
|
export async function generateCommand(targetPath, options) {
|
|
103
108
|
const absolutePath = path.resolve(targetPath);
|
|
104
|
-
// In
|
|
109
|
+
// In deprecated JSON modes, suppress all non-JSON output
|
|
105
110
|
const isJsonMode = options.execute || options.stream;
|
|
106
111
|
const logger = createLogger({
|
|
107
112
|
colors: !isJsonMode,
|
|
@@ -148,12 +153,31 @@ export async function generateCommand(targetPath, options) {
|
|
|
148
153
|
if (!options.quiet && !isJsonMode) {
|
|
149
154
|
console.log(formatPlan(plan));
|
|
150
155
|
}
|
|
156
|
+
// ---------------------------------------------------------------------------
|
|
157
|
+
// Dry-run: show execution plan summary without making AI calls
|
|
158
|
+
// ---------------------------------------------------------------------------
|
|
151
159
|
if (options.dryRun) {
|
|
152
|
-
|
|
160
|
+
const executionPlan = buildExecutionPlan(plan, absolutePath);
|
|
161
|
+
const dirCount = Object.keys(executionPlan.directoryFileMap).length;
|
|
162
|
+
console.log(pc.bold('\n--- Dry Run Summary ---\n'));
|
|
163
|
+
console.log(` Files to analyze: ${pc.cyan(String(executionPlan.fileTasks.length))}`);
|
|
164
|
+
console.log(` Directories: ${pc.cyan(String(dirCount))}`);
|
|
165
|
+
console.log(` Root documents: ${pc.cyan(String(executionPlan.rootTasks.length))}`);
|
|
166
|
+
console.log(` Estimated AI calls: ${pc.cyan(String(executionPlan.tasks.length))}`);
|
|
167
|
+
console.log('');
|
|
168
|
+
console.log(pc.dim('Files:'));
|
|
169
|
+
for (const task of executionPlan.fileTasks) {
|
|
170
|
+
console.log(pc.dim(` ${task.path}`));
|
|
171
|
+
}
|
|
172
|
+
console.log('');
|
|
173
|
+
console.log(pc.dim('No AI calls made (dry run).'));
|
|
153
174
|
return;
|
|
154
175
|
}
|
|
155
|
-
//
|
|
176
|
+
// ---------------------------------------------------------------------------
|
|
177
|
+
// Deprecated JSON modes (--execute, --stream) -- backward compatibility
|
|
178
|
+
// ---------------------------------------------------------------------------
|
|
156
179
|
if (options.execute || options.stream) {
|
|
180
|
+
console.error(pc.yellow('Note: --execute and --stream are deprecated. The default behavior now executes analysis directly.'));
|
|
157
181
|
const executionPlan = buildExecutionPlan(plan, absolutePath);
|
|
158
182
|
if (options.stream) {
|
|
159
183
|
// Stream mode - one task per line for incremental processing
|
|
@@ -167,43 +191,60 @@ export async function generateCommand(targetPath, options) {
|
|
|
167
191
|
}
|
|
168
192
|
return;
|
|
169
193
|
}
|
|
170
|
-
//
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
console.log('4. Generate AGENTS.md for each directory');
|
|
179
|
-
console.log('5. Generate CLAUDE.md at the project root');
|
|
180
|
-
if (plan.generateArchitecture) {
|
|
181
|
-
console.log('6. Generate ARCHITECTURE.md (complexity threshold met)');
|
|
194
|
+
// ---------------------------------------------------------------------------
|
|
195
|
+
// Direct execution (new default): resolve backend and run AI analysis
|
|
196
|
+
// ---------------------------------------------------------------------------
|
|
197
|
+
// Resolve AI CLI backend
|
|
198
|
+
const registry = createBackendRegistry();
|
|
199
|
+
let backend;
|
|
200
|
+
try {
|
|
201
|
+
backend = await resolveBackend(registry, config.ai.backend);
|
|
182
202
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
enabledDocs.push('STACK.md (node only)');
|
|
189
|
-
if (plan.generateStructure)
|
|
190
|
-
enabledDocs.push('STRUCTURE.md');
|
|
191
|
-
if (plan.generateConventions)
|
|
192
|
-
enabledDocs.push('CONVENTIONS.md');
|
|
193
|
-
if (plan.generateTesting)
|
|
194
|
-
enabledDocs.push('TESTING.md');
|
|
195
|
-
if (plan.generateIntegrations)
|
|
196
|
-
enabledDocs.push('INTEGRATIONS.md');
|
|
197
|
-
if (plan.generateConcerns)
|
|
198
|
-
enabledDocs.push('CONCERNS.md');
|
|
199
|
-
for (const doc of enabledDocs) {
|
|
200
|
-
console.log(` - Generate ${doc}`);
|
|
203
|
+
catch (error) {
|
|
204
|
+
if (error instanceof AIServiceError && error.code === 'CLI_NOT_FOUND') {
|
|
205
|
+
console.error(pc.red('Error: No AI CLI found.\n'));
|
|
206
|
+
console.error(getInstallInstructions(registry));
|
|
207
|
+
process.exit(2);
|
|
201
208
|
}
|
|
209
|
+
throw error;
|
|
210
|
+
}
|
|
211
|
+
// Debug: log backend info
|
|
212
|
+
if (options.debug) {
|
|
213
|
+
console.log(pc.dim(`[debug] Backend: ${backend.name}`));
|
|
214
|
+
console.log(pc.dim(`[debug] CLI command: ${backend.cliCommand}`));
|
|
215
|
+
console.log(pc.dim(`[debug] Model: ${config.ai.model}`));
|
|
216
|
+
}
|
|
217
|
+
// Create AI service
|
|
218
|
+
const aiService = new AIService(backend, {
|
|
219
|
+
timeoutMs: config.ai.timeoutMs,
|
|
220
|
+
maxRetries: config.ai.maxRetries,
|
|
221
|
+
telemetry: { keepRuns: config.ai.telemetry.keepRuns },
|
|
222
|
+
});
|
|
223
|
+
// Build execution plan
|
|
224
|
+
const executionPlan = buildExecutionPlan(plan, absolutePath);
|
|
225
|
+
// Determine concurrency
|
|
226
|
+
const concurrency = options.concurrency ?? config.ai.concurrency;
|
|
227
|
+
// Create command runner
|
|
228
|
+
const runner = new CommandRunner(aiService, {
|
|
229
|
+
concurrency,
|
|
230
|
+
failFast: options.failFast,
|
|
231
|
+
quiet: options.quiet,
|
|
232
|
+
debug: options.debug,
|
|
233
|
+
});
|
|
234
|
+
// Execute the three-phase pipeline
|
|
235
|
+
const summary = await runner.executeGenerate(executionPlan);
|
|
236
|
+
// Write telemetry run log
|
|
237
|
+
await aiService.finalize(absolutePath);
|
|
238
|
+
// Determine exit code from RunSummary
|
|
239
|
+
// 0: all files succeeded
|
|
240
|
+
// 1: some files failed (partial failure)
|
|
241
|
+
// 2: no files succeeded (total failure)
|
|
242
|
+
if (summary.filesProcessed === 0 && summary.filesFailed > 0) {
|
|
243
|
+
process.exit(2);
|
|
244
|
+
}
|
|
245
|
+
else if (summary.filesFailed > 0) {
|
|
246
|
+
process.exit(1);
|
|
202
247
|
}
|
|
203
|
-
|
|
204
|
-
console.log('Run with --stream for streaming task output.');
|
|
205
|
-
// Summary
|
|
206
|
-
const budgetReport = orchestrator.getBudgetReport();
|
|
207
|
-
logger.info(`\nPlan ready. Estimated tokens: ${budgetReport.used.toLocaleString()}`);
|
|
248
|
+
// Exit code 0 -- all files succeeded (or no files to process)
|
|
208
249
|
}
|
|
209
250
|
//# sourceMappingURL=generate.js.map
|
package/dist/cli/generate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/cli/generate.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/cli/generate.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -55,8 +55,11 @@ General Options:
|
|
|
55
55
|
--plan Generate GENERATION-PLAN.md file (discover only)
|
|
56
56
|
--dry-run Show plan without writing files (generate, update)
|
|
57
57
|
--budget <n> Override token budget (generate, update)
|
|
58
|
-
--
|
|
59
|
-
--
|
|
58
|
+
--concurrency <n> Number of concurrent AI calls (default: 5)
|
|
59
|
+
--fail-fast Stop on first file analysis failure
|
|
60
|
+
--debug Show AI prompts and backend details
|
|
61
|
+
--execute [deprecated] Output JSON execution plan (generate)
|
|
62
|
+
--stream [deprecated] Output tasks as streaming JSON (generate)
|
|
60
63
|
--uncommitted Include uncommitted changes (update only)
|
|
61
64
|
--help, -h Show this help
|
|
62
65
|
--version, -V Show version number
|
|
@@ -70,7 +73,7 @@ Examples:
|
|
|
70
73
|
are discover
|
|
71
74
|
are discover --plan
|
|
72
75
|
are generate --dry-run
|
|
73
|
-
are generate --
|
|
76
|
+
are generate --concurrency 3
|
|
74
77
|
are generate ./my-project --budget 50000
|
|
75
78
|
are update
|
|
76
79
|
are update --uncommitted --verbose
|
|
@@ -252,6 +255,9 @@ async function main() {
|
|
|
252
255
|
verbose: flags.has('verbose'),
|
|
253
256
|
dryRun: flags.has('dry-run'),
|
|
254
257
|
budget: values.has('budget') ? parseInt(values.get('budget'), 10) : undefined,
|
|
258
|
+
concurrency: values.has('concurrency') ? parseInt(values.get('concurrency'), 10) : undefined,
|
|
259
|
+
failFast: flags.has('fail-fast'),
|
|
260
|
+
debug: flags.has('debug'),
|
|
255
261
|
execute: flags.has('execute'),
|
|
256
262
|
stream: flags.has('stream'),
|
|
257
263
|
};
|
|
@@ -265,6 +271,9 @@ async function main() {
|
|
|
265
271
|
verbose: flags.has('verbose'),
|
|
266
272
|
dryRun: flags.has('dry-run'),
|
|
267
273
|
budget: values.has('budget') ? parseInt(values.get('budget'), 10) : undefined,
|
|
274
|
+
concurrency: values.has('concurrency') ? parseInt(values.get('concurrency'), 10) : undefined,
|
|
275
|
+
failFast: flags.has('fail-fast'),
|
|
276
|
+
debug: flags.has('debug'),
|
|
268
277
|
};
|
|
269
278
|
await updateCommand(positional[0] || '.', options);
|
|
270
279
|
break;
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,WAAW,EAAoB,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAwB,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,eAAe,EAAwB,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,aAAa,EAA6B,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEzE;;GAEG;AACH,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QAChE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;QACnE,OAAO,WAAW,CAAC,OAAO,IAAI,SAAS,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;AAE7B,MAAM,KAAK,GAAG
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/update.d.ts
CHANGED
|
@@ -12,17 +12,26 @@ export interface UpdateCommandOptions {
|
|
|
12
12
|
dryRun?: boolean;
|
|
13
13
|
/** Override token budget */
|
|
14
14
|
budget?: number;
|
|
15
|
+
/** Number of concurrent AI calls */
|
|
16
|
+
concurrency?: number;
|
|
17
|
+
/** Stop on first file analysis failure */
|
|
18
|
+
failFast?: boolean;
|
|
19
|
+
/** Show AI prompts and backend details */
|
|
20
|
+
debug?: boolean;
|
|
15
21
|
}
|
|
16
22
|
/**
|
|
17
23
|
* Update command - incrementally updates documentation based on git changes.
|
|
18
24
|
*
|
|
19
25
|
* This command:
|
|
20
26
|
* 1. Checks git repository status
|
|
21
|
-
* 2. Detects files changed since last run
|
|
27
|
+
* 2. Detects files changed since last run (via content-hash comparison)
|
|
22
28
|
* 3. Cleans up orphaned .sum files
|
|
23
|
-
* 4.
|
|
24
|
-
* 5.
|
|
25
|
-
* 6.
|
|
29
|
+
* 4. Resolves an AI CLI backend and creates the AI service
|
|
30
|
+
* 5. Analyzes changed files concurrently via CommandRunner
|
|
31
|
+
* 6. Regenerates AGENTS.md for affected directories
|
|
32
|
+
* 7. Writes telemetry run log and prints run summary
|
|
33
|
+
*
|
|
34
|
+
* Exit codes: 0 = all success, 1 = partial failure, 2 = total failure / no CLI
|
|
26
35
|
*/
|
|
27
36
|
export declare function updateCommand(targetPath: string, options: UpdateCommandOptions): Promise<void>;
|
|
28
37
|
//# sourceMappingURL=update.d.ts.map
|
package/dist/cli/update.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/cli/update.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/cli/update.ts"],"names":[],"mappings":"AA2BA;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,+DAA+D;IAC/D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,oCAAoC;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2BAA2B;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iDAAiD;IACjD,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;CACjB;AAuGD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAuKf"}
|
package/dist/cli/update.js
CHANGED
|
@@ -2,21 +2,19 @@
|
|
|
2
2
|
* CLI update command
|
|
3
3
|
*
|
|
4
4
|
* Updates documentation incrementally based on git changes since last run.
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* Uses the AI service for real file analysis (not placeholders) and processes
|
|
6
|
+
* changed files concurrently via the CommandRunner orchestration engine.
|
|
7
|
+
* Regenerates AGENTS.md for affected directories after analysis.
|
|
7
8
|
*/
|
|
8
9
|
import * as path from 'node:path';
|
|
9
|
-
import { readFile } from 'node:fs/promises';
|
|
10
10
|
import pc from 'picocolors';
|
|
11
11
|
import { loadConfig } from '../config/loader.js';
|
|
12
12
|
import { createLogger } from '../output/logger.js';
|
|
13
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
14
|
import { writeAgentsMd } from '../generation/writers/agents-md.js';
|
|
19
|
-
import {
|
|
15
|
+
import { buildDirectoryPrompt } from '../generation/prompts/index.js';
|
|
16
|
+
import { AIService, AIServiceError, createBackendRegistry, resolveBackend, getInstallInstructions, } from '../ai/index.js';
|
|
17
|
+
import { CommandRunner, ProgressReporter } from '../orchestration/index.js';
|
|
20
18
|
/**
|
|
21
19
|
* Format cleanup results for display.
|
|
22
20
|
*/
|
|
@@ -104,101 +102,19 @@ function formatPlan(plan, verbose) {
|
|
|
104
102
|
lines.push('');
|
|
105
103
|
return lines.join('\n');
|
|
106
104
|
}
|
|
107
|
-
/**
|
|
108
|
-
* Analyze a single changed file and generate its .sum file.
|
|
109
|
-
*
|
|
110
|
-
* Uses the generation module's prompt builder and sum writer.
|
|
111
|
-
* Note: This generates a placeholder summary since the actual LLM analysis
|
|
112
|
-
* requires host integration. The prompt is generated for potential future use.
|
|
113
|
-
*/
|
|
114
|
-
async function analyzeFile(projectRoot, change, verbose) {
|
|
115
|
-
const filePath = path.join(projectRoot, change.path);
|
|
116
|
-
try {
|
|
117
|
-
// Read file content
|
|
118
|
-
const content = await readFile(filePath, 'utf-8');
|
|
119
|
-
const tokens = countTokens(content);
|
|
120
|
-
// Compute content hash for change detection
|
|
121
|
-
const contentHash = await computeContentHash(filePath);
|
|
122
|
-
// Detect file type and build prompt
|
|
123
|
-
const fileType = detectFileType(filePath, content);
|
|
124
|
-
const prompt = buildPrompt({
|
|
125
|
-
filePath: change.path,
|
|
126
|
-
content,
|
|
127
|
-
fileType,
|
|
128
|
-
});
|
|
129
|
-
// Generate summary content
|
|
130
|
-
// In a full implementation, this would call an LLM with the prompt.
|
|
131
|
-
// For now, we create a structured summary placeholder that captures
|
|
132
|
-
// the file's purpose and key elements.
|
|
133
|
-
const sumContent = {
|
|
134
|
-
summary: `## Purpose\n\nFile at \`${change.path}\`.\n\n## Analysis Pending\n\nThis summary was generated during incremental update. Full analysis requires LLM integration.`,
|
|
135
|
-
metadata: {
|
|
136
|
-
purpose: `File at ${change.path}`,
|
|
137
|
-
publicInterface: [],
|
|
138
|
-
dependencies: [],
|
|
139
|
-
patterns: [],
|
|
140
|
-
},
|
|
141
|
-
fileType,
|
|
142
|
-
generatedAt: new Date().toISOString(),
|
|
143
|
-
contentHash,
|
|
144
|
-
};
|
|
145
|
-
// Write .sum file
|
|
146
|
-
await writeSumFile(filePath, sumContent);
|
|
147
|
-
if (verbose) {
|
|
148
|
-
console.log(` ${pc.green('\u2713')} ${change.path} (${tokens} tokens)`);
|
|
149
|
-
}
|
|
150
|
-
return {
|
|
151
|
-
path: change.path,
|
|
152
|
-
success: true,
|
|
153
|
-
tokensUsed: tokens,
|
|
154
|
-
contentHash,
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
catch (error) {
|
|
158
|
-
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
159
|
-
if (verbose) {
|
|
160
|
-
console.log(` ${pc.red('\u2717')} ${change.path}: ${errorMsg}`);
|
|
161
|
-
}
|
|
162
|
-
return {
|
|
163
|
-
path: change.path,
|
|
164
|
-
success: false,
|
|
165
|
-
tokensUsed: 0,
|
|
166
|
-
error: errorMsg,
|
|
167
|
-
};
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* Regenerate AGENTS.md for affected directories.
|
|
172
|
-
*
|
|
173
|
-
* Reads existing .sum files in each directory and creates/updates AGENTS.md.
|
|
174
|
-
*/
|
|
175
|
-
async function regenerateAgentsMd(projectRoot, directories, verbose) {
|
|
176
|
-
for (const dir of directories) {
|
|
177
|
-
const dirPath = dir === '.' ? projectRoot : path.join(projectRoot, dir);
|
|
178
|
-
try {
|
|
179
|
-
await writeAgentsMd(dirPath, projectRoot);
|
|
180
|
-
if (verbose) {
|
|
181
|
-
console.log(` ${pc.green('\u2713')} AGENTS.md: ${dir || '.'}`);
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
catch (error) {
|
|
185
|
-
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
186
|
-
if (verbose) {
|
|
187
|
-
console.log(` ${pc.yellow('!')} AGENTS.md: ${dir || '.'}: ${errorMsg}`);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
105
|
/**
|
|
193
106
|
* Update command - incrementally updates documentation based on git changes.
|
|
194
107
|
*
|
|
195
108
|
* This command:
|
|
196
109
|
* 1. Checks git repository status
|
|
197
|
-
* 2. Detects files changed since last run
|
|
110
|
+
* 2. Detects files changed since last run (via content-hash comparison)
|
|
198
111
|
* 3. Cleans up orphaned .sum files
|
|
199
|
-
* 4.
|
|
200
|
-
* 5.
|
|
201
|
-
* 6.
|
|
112
|
+
* 4. Resolves an AI CLI backend and creates the AI service
|
|
113
|
+
* 5. Analyzes changed files concurrently via CommandRunner
|
|
114
|
+
* 6. Regenerates AGENTS.md for affected directories
|
|
115
|
+
* 7. Writes telemetry run log and prints run summary
|
|
116
|
+
*
|
|
117
|
+
* Exit codes: 0 = all success, 1 = partial failure, 2 = total failure / no CLI
|
|
202
118
|
*/
|
|
203
119
|
export async function updateCommand(targetPath, options) {
|
|
204
120
|
const absolutePath = path.resolve(targetPath);
|
|
@@ -246,46 +162,92 @@ export async function updateCommand(targetPath, options) {
|
|
|
246
162
|
logger.info('Dry run complete. No files written.');
|
|
247
163
|
return;
|
|
248
164
|
}
|
|
249
|
-
//
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
// Update state for this file
|
|
263
|
-
await orchestrator.recordFileAnalyzed(change.path, result.contentHash, plan.currentCommit);
|
|
264
|
-
}
|
|
265
|
-
else if (!result.success) {
|
|
266
|
-
filesFailed++;
|
|
267
|
-
}
|
|
165
|
+
// -------------------------------------------------------------------------
|
|
166
|
+
// Backend resolution (same pattern as generate command)
|
|
167
|
+
// -------------------------------------------------------------------------
|
|
168
|
+
const registry = createBackendRegistry();
|
|
169
|
+
let backend;
|
|
170
|
+
try {
|
|
171
|
+
backend = await resolveBackend(registry, config.ai.backend);
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
if (error instanceof AIServiceError && error.code === 'CLI_NOT_FOUND') {
|
|
175
|
+
console.error(pc.red('Error: No AI CLI found.\n'));
|
|
176
|
+
console.error(getInstallInstructions(registry));
|
|
177
|
+
process.exit(2);
|
|
268
178
|
}
|
|
179
|
+
throw error;
|
|
180
|
+
}
|
|
181
|
+
// Debug: log backend info
|
|
182
|
+
if (options.debug) {
|
|
183
|
+
console.log(pc.dim(`[debug] Backend: ${backend.name}`));
|
|
184
|
+
console.log(pc.dim(`[debug] CLI command: ${backend.cliCommand}`));
|
|
185
|
+
console.log(pc.dim(`[debug] Model: ${config.ai.model}`));
|
|
269
186
|
}
|
|
270
|
-
//
|
|
187
|
+
// -------------------------------------------------------------------------
|
|
188
|
+
// AI service setup
|
|
189
|
+
// -------------------------------------------------------------------------
|
|
190
|
+
const aiService = new AIService(backend, {
|
|
191
|
+
timeoutMs: config.ai.timeoutMs,
|
|
192
|
+
maxRetries: config.ai.maxRetries,
|
|
193
|
+
telemetry: { keepRuns: config.ai.telemetry.keepRuns },
|
|
194
|
+
});
|
|
195
|
+
// Determine concurrency
|
|
196
|
+
const concurrency = options.concurrency ?? config.ai.concurrency;
|
|
197
|
+
// Create command runner
|
|
198
|
+
const runner = new CommandRunner(aiService, {
|
|
199
|
+
concurrency,
|
|
200
|
+
failFast: options.failFast,
|
|
201
|
+
quiet: options.quiet,
|
|
202
|
+
debug: options.debug,
|
|
203
|
+
});
|
|
204
|
+
// -------------------------------------------------------------------------
|
|
205
|
+
// Phase 1: File analysis via CommandRunner (concurrent AI calls)
|
|
206
|
+
// -------------------------------------------------------------------------
|
|
207
|
+
const summary = await runner.executeUpdate(plan.filesToAnalyze, absolutePath, config);
|
|
208
|
+
// -------------------------------------------------------------------------
|
|
209
|
+
// Phase 2: AGENTS.md regeneration for affected directories
|
|
210
|
+
// -------------------------------------------------------------------------
|
|
271
211
|
if (plan.affectedDirs.length > 0) {
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
212
|
+
const dirReporter = new ProgressReporter(plan.affectedDirs.length, quiet);
|
|
213
|
+
for (const dir of plan.affectedDirs) {
|
|
214
|
+
const dirPath = dir === '.' ? absolutePath : path.join(absolutePath, dir);
|
|
215
|
+
try {
|
|
216
|
+
const prompt = await buildDirectoryPrompt(dirPath, absolutePath);
|
|
217
|
+
const response = await aiService.call({
|
|
218
|
+
prompt: prompt.user,
|
|
219
|
+
systemPrompt: prompt.system,
|
|
220
|
+
});
|
|
221
|
+
await writeAgentsMd(dirPath, absolutePath, response.text);
|
|
222
|
+
dirReporter.onDirectoryDone(dir || '.');
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
226
|
+
if (!quiet) {
|
|
227
|
+
console.log(`${pc.dim('[dir]')} ${pc.yellow('WARN')} ${dir || '.'}: ${errorMsg}`);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
275
231
|
}
|
|
276
|
-
//
|
|
232
|
+
// -------------------------------------------------------------------------
|
|
233
|
+
// Telemetry finalization
|
|
234
|
+
// -------------------------------------------------------------------------
|
|
235
|
+
await aiService.finalize(absolutePath);
|
|
236
|
+
// -------------------------------------------------------------------------
|
|
237
|
+
// Record run state (no-op in frontmatter mode, kept for API compatibility)
|
|
238
|
+
// -------------------------------------------------------------------------
|
|
277
239
|
const filesSkipped = plan.filesToSkip.length;
|
|
278
|
-
await orchestrator.recordRun(plan.currentCommit,
|
|
279
|
-
//
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
240
|
+
await orchestrator.recordRun(plan.currentCommit, summary.filesProcessed, filesSkipped);
|
|
241
|
+
// -------------------------------------------------------------------------
|
|
242
|
+
// Exit code: 0 = all success, 1 = partial failure, 2 = total failure
|
|
243
|
+
// -------------------------------------------------------------------------
|
|
244
|
+
if (summary.filesProcessed === 0 && summary.filesFailed > 0) {
|
|
245
|
+
process.exit(2);
|
|
246
|
+
}
|
|
247
|
+
else if (summary.filesFailed > 0) {
|
|
248
|
+
process.exit(1);
|
|
285
249
|
}
|
|
286
|
-
|
|
287
|
-
console.log(` Directories updated: ${pc.cyan(String(plan.affectedDirs.length))}`);
|
|
288
|
-
console.log(` Token budget used: ${pc.yellow(totalTokens.toLocaleString())} / ${config.generation.tokenBudget.toLocaleString()}`);
|
|
250
|
+
// Exit code 0 -- all files succeeded (or no files to process)
|
|
289
251
|
}
|
|
290
252
|
finally {
|
|
291
253
|
orchestrator.close();
|