agents-reverse-engineer 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +238 -0
- package/dist/change-detection/detector.d.ts +24 -0
- package/dist/change-detection/detector.d.ts.map +1 -0
- package/dist/change-detection/detector.js +114 -0
- package/dist/change-detection/detector.js.map +1 -0
- package/dist/change-detection/index.d.ts +9 -0
- package/dist/change-detection/index.d.ts.map +1 -0
- package/dist/change-detection/index.js +8 -0
- package/dist/change-detection/index.js.map +1 -0
- package/dist/change-detection/types.d.ts +39 -0
- package/dist/change-detection/types.d.ts.map +1 -0
- package/dist/change-detection/types.js +5 -0
- package/dist/change-detection/types.js.map +1 -0
- package/dist/cli/discover.d.ts +52 -0
- package/dist/cli/discover.d.ts.map +1 -0
- package/dist/cli/discover.js +125 -0
- package/dist/cli/discover.js.map +1 -0
- package/dist/cli/generate.d.ts +41 -0
- package/dist/cli/generate.d.ts.map +1 -0
- package/dist/cli/generate.js +179 -0
- package/dist/cli/generate.js.map +1 -0
- package/dist/cli/index.d.ts +12 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +182 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +38 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +94 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/update.d.ts +28 -0
- package/dist/cli/update.d.ts.map +1 -0
- package/dist/cli/update.js +296 -0
- package/dist/cli/update.js.map +1 -0
- package/dist/config/defaults.d.ts +38 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +89 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/loader.d.ts +66 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +158 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +235 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +80 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/discovery/filters/binary.d.ts +46 -0
- package/dist/discovery/filters/binary.d.ts.map +1 -0
- package/dist/discovery/filters/binary.js +157 -0
- package/dist/discovery/filters/binary.js.map +1 -0
- package/dist/discovery/filters/custom.d.ts +26 -0
- package/dist/discovery/filters/custom.d.ts.map +1 -0
- package/dist/discovery/filters/custom.js +50 -0
- package/dist/discovery/filters/custom.js.map +1 -0
- package/dist/discovery/filters/gitignore.d.ts +24 -0
- package/dist/discovery/filters/gitignore.d.ts.map +1 -0
- package/dist/discovery/filters/gitignore.js +53 -0
- package/dist/discovery/filters/gitignore.js.map +1 -0
- package/dist/discovery/filters/index.d.ts +85 -0
- package/dist/discovery/filters/index.d.ts.map +1 -0
- package/dist/discovery/filters/index.js +98 -0
- package/dist/discovery/filters/index.js.map +1 -0
- package/dist/discovery/filters/vendor.d.ts +30 -0
- package/dist/discovery/filters/vendor.d.ts.map +1 -0
- package/dist/discovery/filters/vendor.js +57 -0
- package/dist/discovery/filters/vendor.js.map +1 -0
- package/dist/discovery/types.d.ts +66 -0
- package/dist/discovery/types.d.ts.map +1 -0
- package/dist/discovery/types.js +8 -0
- package/dist/discovery/types.js.map +1 -0
- package/dist/discovery/walker.d.ts +24 -0
- package/dist/discovery/walker.d.ts.map +1 -0
- package/dist/discovery/walker.js +35 -0
- package/dist/discovery/walker.js.map +1 -0
- package/dist/generation/budget/chunker.d.ts +38 -0
- package/dist/generation/budget/chunker.d.ts.map +1 -0
- package/dist/generation/budget/chunker.js +73 -0
- package/dist/generation/budget/chunker.js.map +1 -0
- package/dist/generation/budget/counter.d.ts +26 -0
- package/dist/generation/budget/counter.d.ts.map +1 -0
- package/dist/generation/budget/counter.js +45 -0
- package/dist/generation/budget/counter.js.map +1 -0
- package/dist/generation/budget/index.d.ts +4 -0
- package/dist/generation/budget/index.d.ts.map +1 -0
- package/dist/generation/budget/index.js +4 -0
- package/dist/generation/budget/index.js.map +1 -0
- package/dist/generation/budget/tracker.d.ts +63 -0
- package/dist/generation/budget/tracker.d.ts.map +1 -0
- package/dist/generation/budget/tracker.js +96 -0
- package/dist/generation/budget/tracker.js.map +1 -0
- package/dist/generation/complexity.d.ts +43 -0
- package/dist/generation/complexity.d.ts.map +1 -0
- package/dist/generation/complexity.js +156 -0
- package/dist/generation/complexity.js.map +1 -0
- package/dist/generation/detection/detector.d.ts +23 -0
- package/dist/generation/detection/detector.d.ts.map +1 -0
- package/dist/generation/detection/detector.js +62 -0
- package/dist/generation/detection/detector.js.map +1 -0
- package/dist/generation/detection/patterns.d.ts +21 -0
- package/dist/generation/detection/patterns.d.ts.map +1 -0
- package/dist/generation/detection/patterns.js +115 -0
- package/dist/generation/detection/patterns.js.map +1 -0
- package/dist/generation/executor.d.ts +95 -0
- package/dist/generation/executor.d.ts.map +1 -0
- package/dist/generation/executor.js +352 -0
- package/dist/generation/executor.js.map +1 -0
- package/dist/generation/orchestrator.d.ts +126 -0
- package/dist/generation/orchestrator.d.ts.map +1 -0
- package/dist/generation/orchestrator.js +222 -0
- package/dist/generation/orchestrator.js.map +1 -0
- package/dist/generation/prompts/builder.d.ts +31 -0
- package/dist/generation/prompts/builder.d.ts.map +1 -0
- package/dist/generation/prompts/builder.js +136 -0
- package/dist/generation/prompts/builder.js.map +1 -0
- package/dist/generation/prompts/index.d.ts +5 -0
- package/dist/generation/prompts/index.d.ts.map +1 -0
- package/dist/generation/prompts/index.js +4 -0
- package/dist/generation/prompts/index.js.map +1 -0
- package/dist/generation/prompts/templates.d.ts +11 -0
- package/dist/generation/prompts/templates.d.ts.map +1 -0
- package/dist/generation/prompts/templates.js +247 -0
- package/dist/generation/prompts/templates.js.map +1 -0
- package/dist/generation/prompts/types.d.ts +71 -0
- package/dist/generation/prompts/types.d.ts.map +1 -0
- package/dist/generation/prompts/types.js +23 -0
- package/dist/generation/prompts/types.js.map +1 -0
- package/dist/generation/types.d.ts +72 -0
- package/dist/generation/types.d.ts.map +1 -0
- package/dist/generation/types.js +5 -0
- package/dist/generation/types.js.map +1 -0
- package/dist/generation/writers/agents-md.d.ts +63 -0
- package/dist/generation/writers/agents-md.d.ts.map +1 -0
- package/dist/generation/writers/agents-md.js +235 -0
- package/dist/generation/writers/agents-md.js.map +1 -0
- package/dist/generation/writers/claude-md.d.ts +13 -0
- package/dist/generation/writers/claude-md.d.ts.map +1 -0
- package/dist/generation/writers/claude-md.js +33 -0
- package/dist/generation/writers/claude-md.js.map +1 -0
- package/dist/generation/writers/index.d.ts +5 -0
- package/dist/generation/writers/index.d.ts.map +1 -0
- package/dist/generation/writers/index.js +5 -0
- package/dist/generation/writers/index.js.map +1 -0
- package/dist/generation/writers/sum.d.ts +37 -0
- package/dist/generation/writers/sum.d.ts.map +1 -0
- package/dist/generation/writers/sum.js +98 -0
- package/dist/generation/writers/sum.js.map +1 -0
- package/dist/generation/writers/supplementary.d.ts +53 -0
- package/dist/generation/writers/supplementary.d.ts.map +1 -0
- package/dist/generation/writers/supplementary.js +195 -0
- package/dist/generation/writers/supplementary.js.map +1 -0
- package/dist/integration/detect.d.ts +28 -0
- package/dist/integration/detect.d.ts.map +1 -0
- package/dist/integration/detect.js +64 -0
- package/dist/integration/detect.js.map +1 -0
- package/dist/integration/generate.d.ts +36 -0
- package/dist/integration/generate.d.ts.map +1 -0
- package/dist/integration/generate.js +107 -0
- package/dist/integration/generate.js.map +1 -0
- package/dist/integration/templates.d.ts +42 -0
- package/dist/integration/templates.d.ts.map +1 -0
- package/dist/integration/templates.js +203 -0
- package/dist/integration/templates.js.map +1 -0
- package/dist/integration/types.d.ts +44 -0
- package/dist/integration/types.d.ts.map +1 -0
- package/dist/integration/types.js +8 -0
- package/dist/integration/types.js.map +1 -0
- package/dist/output/logger.d.ts +86 -0
- package/dist/output/logger.d.ts.map +1 -0
- package/dist/output/logger.js +107 -0
- package/dist/output/logger.js.map +1 -0
- package/dist/state/database.d.ts +9 -0
- package/dist/state/database.d.ts.map +1 -0
- package/dist/state/database.js +66 -0
- package/dist/state/database.js.map +1 -0
- package/dist/state/index.d.ts +8 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +7 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/migrations.d.ts +12 -0
- package/dist/state/migrations.d.ts.map +1 -0
- package/dist/state/migrations.js +39 -0
- package/dist/state/migrations.js.map +1 -0
- package/dist/state/types.d.ts +54 -0
- package/dist/state/types.d.ts.map +1 -0
- package/dist/state/types.js +2 -0
- package/dist/state/types.js.map +1 -0
- package/dist/types/index.d.ts +39 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/update/index.d.ts +10 -0
- package/dist/update/index.d.ts.map +1 -0
- package/dist/update/index.js +9 -0
- package/dist/update/index.js.map +1 -0
- package/dist/update/orchestrator.d.ts +91 -0
- package/dist/update/orchestrator.d.ts.map +1 -0
- package/dist/update/orchestrator.js +204 -0
- package/dist/update/orchestrator.js.map +1 -0
- package/dist/update/orphan-cleaner.d.ts +30 -0
- package/dist/update/orphan-cleaner.d.ts.map +1 -0
- package/dist/update/orphan-cleaner.js +151 -0
- package/dist/update/orphan-cleaner.js.map +1 -0
- package/dist/update/types.d.ts +59 -0
- package/dist/update/types.d.ts.map +1 -0
- package/dist/update/types.js +2 -0
- package/dist/update/types.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File type detection patterns
|
|
3
|
+
*
|
|
4
|
+
* Directory-based patterns for fast detection, with content-based
|
|
5
|
+
* fallback for files in non-standard locations.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Directory name -> FileType mapping (case-insensitive)
|
|
9
|
+
* Used for fast path detection when files are in standard directories
|
|
10
|
+
*/
|
|
11
|
+
export const DIRECTORY_PATTERNS = {
|
|
12
|
+
// Component directories
|
|
13
|
+
components: 'component',
|
|
14
|
+
pages: 'component',
|
|
15
|
+
views: 'component',
|
|
16
|
+
screens: 'component',
|
|
17
|
+
layouts: 'component',
|
|
18
|
+
// Service directories
|
|
19
|
+
services: 'service',
|
|
20
|
+
providers: 'service',
|
|
21
|
+
// Utility directories
|
|
22
|
+
utils: 'util',
|
|
23
|
+
helpers: 'util',
|
|
24
|
+
lib: 'util',
|
|
25
|
+
common: 'util',
|
|
26
|
+
// Type directories
|
|
27
|
+
types: 'type',
|
|
28
|
+
interfaces: 'type',
|
|
29
|
+
'@types': 'type',
|
|
30
|
+
typings: 'type',
|
|
31
|
+
// Test directories
|
|
32
|
+
__tests__: 'test',
|
|
33
|
+
tests: 'test',
|
|
34
|
+
spec: 'test',
|
|
35
|
+
__mocks__: 'test',
|
|
36
|
+
// API directories
|
|
37
|
+
api: 'api',
|
|
38
|
+
routes: 'api',
|
|
39
|
+
handlers: 'api',
|
|
40
|
+
endpoints: 'api',
|
|
41
|
+
controllers: 'api',
|
|
42
|
+
// Model directories
|
|
43
|
+
models: 'model',
|
|
44
|
+
entities: 'model',
|
|
45
|
+
domain: 'model',
|
|
46
|
+
// Hook directories
|
|
47
|
+
hooks: 'hook',
|
|
48
|
+
// Schema directories
|
|
49
|
+
schemas: 'schema',
|
|
50
|
+
validators: 'schema',
|
|
51
|
+
validation: 'schema',
|
|
52
|
+
// Config directories
|
|
53
|
+
config: 'config',
|
|
54
|
+
configs: 'config',
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Content-based detection patterns
|
|
58
|
+
* Used when directory doesn't match any known pattern
|
|
59
|
+
*
|
|
60
|
+
* @param content - File content to analyze
|
|
61
|
+
* @returns Detected file type or 'generic' if no pattern matches
|
|
62
|
+
*/
|
|
63
|
+
export function detectFromContent(content) {
|
|
64
|
+
// Test files - check first as tests can contain other patterns
|
|
65
|
+
if (/\b(describe|it|test|expect)\s*\(/.test(content) ||
|
|
66
|
+
/\b(jest|vitest|mocha|chai)\b/.test(content)) {
|
|
67
|
+
return 'test';
|
|
68
|
+
}
|
|
69
|
+
// React hook pattern: export (function|const) useXxx
|
|
70
|
+
if (/export\s+(function|const)\s+use[A-Z]/.test(content)) {
|
|
71
|
+
return 'hook';
|
|
72
|
+
}
|
|
73
|
+
// Zod/Yup schema pattern
|
|
74
|
+
if (/\bz\.(object|string|number|boolean|array|enum|union)\b/.test(content) ||
|
|
75
|
+
/\byup\.(object|string|number|boolean|array)\b/.test(content)) {
|
|
76
|
+
return 'schema';
|
|
77
|
+
}
|
|
78
|
+
// React component pattern - JSX/TSX with capitalized export
|
|
79
|
+
if (/export\s+(default\s+)?(function|const)\s+[A-Z][a-zA-Z]*/.test(content)) {
|
|
80
|
+
if (/<[A-Z]|<\/|jsx|tsx|React|'react'|"react"/.test(content)) {
|
|
81
|
+
return 'component';
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// Type-only file (only type/interface exports, no runtime code)
|
|
85
|
+
if (/^(export\s+)?(interface|type)\s+/m.test(content)) {
|
|
86
|
+
const hasRuntimeCode = /^(export\s+)?(function|const|let|var|class)\s+(?!type\s)/m.test(content);
|
|
87
|
+
if (!hasRuntimeCode) {
|
|
88
|
+
return 'type';
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// API route pattern (Next.js, Express-like)
|
|
92
|
+
if (/export\s+(async\s+)?function\s+(GET|POST|PUT|DELETE|PATCH|HEAD|OPTIONS)\b/.test(content) ||
|
|
93
|
+
/\.(get|post|put|delete|patch)\s*\(/.test(content) ||
|
|
94
|
+
/router\.(get|post|put|delete)/.test(content)) {
|
|
95
|
+
return 'api';
|
|
96
|
+
}
|
|
97
|
+
// Config file patterns
|
|
98
|
+
if (/export\s+(default\s+)?{[\s\S]*?}/.test(content) &&
|
|
99
|
+
/\b(config|options|settings|env)\b/i.test(content)) {
|
|
100
|
+
return 'config';
|
|
101
|
+
}
|
|
102
|
+
// Service pattern (class with methods, or object with functions)
|
|
103
|
+
if (/class\s+\w+Service\b/.test(content) ||
|
|
104
|
+
/export\s+const\s+\w+Service\s*=/.test(content)) {
|
|
105
|
+
return 'service';
|
|
106
|
+
}
|
|
107
|
+
// Model/Entity pattern
|
|
108
|
+
if (/class\s+\w+(Entity|Model)\b/.test(content) ||
|
|
109
|
+
/interface\s+\w+(Entity|Model)\b/.test(content) ||
|
|
110
|
+
/prisma\.|@Entity|@Table|mongoose\./.test(content)) {
|
|
111
|
+
return 'model';
|
|
112
|
+
}
|
|
113
|
+
return 'generic';
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=patterns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../../src/generation/detection/patterns.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan executor for documentation generation
|
|
3
|
+
*
|
|
4
|
+
* Outputs tasks in a format suitable for AI agent execution:
|
|
5
|
+
* - File tasks as individual analysis jobs
|
|
6
|
+
* - Directory completion tracking
|
|
7
|
+
* - Streaming JSON output for incremental processing
|
|
8
|
+
*/
|
|
9
|
+
import type { GenerationPlan } from './orchestrator.js';
|
|
10
|
+
/**
|
|
11
|
+
* Execution task ready for AI processing.
|
|
12
|
+
*/
|
|
13
|
+
export interface ExecutionTask {
|
|
14
|
+
/** Unique task ID */
|
|
15
|
+
id: string;
|
|
16
|
+
/** Task type */
|
|
17
|
+
type: 'file' | 'chunk' | 'synthesis' | 'directory' | 'root-doc';
|
|
18
|
+
/** File or directory path (relative) */
|
|
19
|
+
path: string;
|
|
20
|
+
/** Absolute path */
|
|
21
|
+
absolutePath: string;
|
|
22
|
+
/** System prompt for AI */
|
|
23
|
+
systemPrompt: string;
|
|
24
|
+
/** User prompt for AI */
|
|
25
|
+
userPrompt: string;
|
|
26
|
+
/** Dependencies (task IDs that must complete first) */
|
|
27
|
+
dependencies: string[];
|
|
28
|
+
/** Output path for generated content */
|
|
29
|
+
outputPath: string;
|
|
30
|
+
/** Metadata for tracking */
|
|
31
|
+
metadata: {
|
|
32
|
+
fileType?: string;
|
|
33
|
+
chunkInfo?: {
|
|
34
|
+
index: number;
|
|
35
|
+
total: number;
|
|
36
|
+
};
|
|
37
|
+
directoryFiles?: string[];
|
|
38
|
+
/** Directory depth (for post-order traversal) */
|
|
39
|
+
depth?: number;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Execution plan with dependency graph.
|
|
44
|
+
*/
|
|
45
|
+
export interface ExecutionPlan {
|
|
46
|
+
/** Project root */
|
|
47
|
+
projectRoot: string;
|
|
48
|
+
/** All tasks in execution order */
|
|
49
|
+
tasks: ExecutionTask[];
|
|
50
|
+
/** File tasks (can run in parallel) */
|
|
51
|
+
fileTasks: ExecutionTask[];
|
|
52
|
+
/** Directory tasks (depend on file tasks) */
|
|
53
|
+
directoryTasks: ExecutionTask[];
|
|
54
|
+
/** Root document tasks (depend on directories) */
|
|
55
|
+
rootTasks: ExecutionTask[];
|
|
56
|
+
/** Directory to file mapping */
|
|
57
|
+
directoryFileMap: Record<string, string[]>;
|
|
58
|
+
/** Whether to generate ARCHITECTURE.md */
|
|
59
|
+
generateArchitecture: boolean;
|
|
60
|
+
/** Whether to generate STACK.md */
|
|
61
|
+
generateStack: boolean;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Build execution plan from generation plan.
|
|
65
|
+
*
|
|
66
|
+
* Directory tasks are sorted using post-order traversal (deepest directories first)
|
|
67
|
+
* so child AGENTS.md files are generated before their parents.
|
|
68
|
+
*/
|
|
69
|
+
export declare function buildExecutionPlan(plan: GenerationPlan, projectRoot: string): ExecutionPlan;
|
|
70
|
+
/**
|
|
71
|
+
* Check if all files in a directory have been analyzed (.sum files exist).
|
|
72
|
+
*/
|
|
73
|
+
export declare function isDirectoryComplete(dirPath: string, expectedFiles: string[], projectRoot: string): Promise<{
|
|
74
|
+
complete: boolean;
|
|
75
|
+
missing: string[];
|
|
76
|
+
}>;
|
|
77
|
+
/**
|
|
78
|
+
* Get all directories that are ready for AGENTS.md generation.
|
|
79
|
+
* A directory is ready when all its files have .sum files.
|
|
80
|
+
*/
|
|
81
|
+
export declare function getReadyDirectories(executionPlan: ExecutionPlan): Promise<string[]>;
|
|
82
|
+
/**
|
|
83
|
+
* Output execution plan as JSON for AI consumption.
|
|
84
|
+
*/
|
|
85
|
+
export declare function formatExecutionPlanAsJson(plan: ExecutionPlan): string;
|
|
86
|
+
/**
|
|
87
|
+
* Output tasks for streaming execution (one task per line as JSON).
|
|
88
|
+
*/
|
|
89
|
+
export declare function streamTasks(plan: ExecutionPlan): Generator<string>;
|
|
90
|
+
/**
|
|
91
|
+
* Format execution plan as markdown for GENERATION-PLAN.md.
|
|
92
|
+
* Uses post-order traversal (deepest directories first).
|
|
93
|
+
*/
|
|
94
|
+
export declare function formatExecutionPlanAsMarkdown(plan: ExecutionPlan): string;
|
|
95
|
+
//# sourceMappingURL=executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/generation/executor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,cAAc,EAA8B,MAAM,mBAAmB,CAAC;AAGpF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,qBAAqB;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB;IAChB,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,CAAC;IAChE,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,2BAA2B;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,QAAQ,EAAE;QACR,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE;YACV,KAAK,EAAE,MAAM,CAAC;YACd,KAAK,EAAE,MAAM,CAAC;SACf,CAAC;QACF,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;QAC1B,iDAAiD;QACjD,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,uCAAuC;IACvC,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,6CAA6C;IAC7C,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,kDAAkD;IAClD,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,gCAAgC;IAChC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3C,0CAA0C;IAC1C,oBAAoB,EAAE,OAAO,CAAC;IAC9B,mCAAmC;IACnC,aAAa,EAAE,OAAO,CAAC;CACxB;AAWD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,cAAc,EACpB,WAAW,EAAE,MAAM,GAClB,aAAa,CAiIf;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EAAE,EACvB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAenD;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,MAAM,EAAE,CAAC,CAenB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAqCrE;AAED;;GAEG;AACH,wBAAiB,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,CAmDnE;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CA6FzE"}
|
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan executor for documentation generation
|
|
3
|
+
*
|
|
4
|
+
* Outputs tasks in a format suitable for AI agent execution:
|
|
5
|
+
* - File tasks as individual analysis jobs
|
|
6
|
+
* - Directory completion tracking
|
|
7
|
+
* - Streaming JSON output for incremental processing
|
|
8
|
+
*/
|
|
9
|
+
import * as path from 'node:path';
|
|
10
|
+
import { sumFileExists } from './writers/sum.js';
|
|
11
|
+
/**
|
|
12
|
+
* Calculate directory depth (number of path segments).
|
|
13
|
+
* Root "." has depth 0, "src" has depth 1, "src/cli" has depth 2, etc.
|
|
14
|
+
*/
|
|
15
|
+
function getDirectoryDepth(dir) {
|
|
16
|
+
if (dir === '.')
|
|
17
|
+
return 0;
|
|
18
|
+
return dir.split(path.sep).length;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Build execution plan from generation plan.
|
|
22
|
+
*
|
|
23
|
+
* Directory tasks are sorted using post-order traversal (deepest directories first)
|
|
24
|
+
* so child AGENTS.md files are generated before their parents.
|
|
25
|
+
*/
|
|
26
|
+
export function buildExecutionPlan(plan, projectRoot) {
|
|
27
|
+
const fileTasks = [];
|
|
28
|
+
const directoryTasks = [];
|
|
29
|
+
const rootTasks = [];
|
|
30
|
+
const directoryFileMap = {};
|
|
31
|
+
// Track files by directory
|
|
32
|
+
for (const file of plan.files) {
|
|
33
|
+
const dir = path.dirname(file.relativePath);
|
|
34
|
+
if (!directoryFileMap[dir]) {
|
|
35
|
+
directoryFileMap[dir] = [];
|
|
36
|
+
}
|
|
37
|
+
directoryFileMap[dir].push(file.relativePath);
|
|
38
|
+
}
|
|
39
|
+
// Create file tasks
|
|
40
|
+
for (const task of plan.tasks) {
|
|
41
|
+
if (task.type === 'file' || task.type === 'chunk') {
|
|
42
|
+
const absolutePath = path.join(projectRoot, task.filePath);
|
|
43
|
+
const file = plan.files.find(f => f.relativePath === task.filePath);
|
|
44
|
+
fileTasks.push({
|
|
45
|
+
id: `file:${task.filePath}${task.chunkInfo ? `:chunk${task.chunkInfo.index}` : ''}`,
|
|
46
|
+
type: task.type,
|
|
47
|
+
path: task.filePath,
|
|
48
|
+
absolutePath,
|
|
49
|
+
systemPrompt: task.systemPrompt,
|
|
50
|
+
userPrompt: task.userPrompt,
|
|
51
|
+
dependencies: [],
|
|
52
|
+
outputPath: `${absolutePath}.sum`,
|
|
53
|
+
metadata: {
|
|
54
|
+
fileType: file?.fileType,
|
|
55
|
+
chunkInfo: task.chunkInfo,
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Create directory tasks in post-order (deepest first)
|
|
61
|
+
// Sort directories by depth descending so children are processed before parents
|
|
62
|
+
const sortedDirs = Object.entries(directoryFileMap).sort(([dirA], [dirB]) => getDirectoryDepth(dirB) - getDirectoryDepth(dirA));
|
|
63
|
+
for (const [dir, files] of sortedDirs) {
|
|
64
|
+
const dirAbsPath = path.join(projectRoot, dir);
|
|
65
|
+
const fileTaskIds = files.map(f => `file:${f}`);
|
|
66
|
+
directoryTasks.push({
|
|
67
|
+
id: `dir:${dir}`,
|
|
68
|
+
type: 'directory',
|
|
69
|
+
path: dir,
|
|
70
|
+
absolutePath: dirAbsPath,
|
|
71
|
+
systemPrompt: `You are generating AGENTS.md for a directory.
|
|
72
|
+
Read all .sum files in this directory and create a comprehensive directory overview.
|
|
73
|
+
Group files by purpose, describe the directory's role, and note patterns.`,
|
|
74
|
+
userPrompt: `Generate AGENTS.md for directory "${dir}" containing ${files.length} analyzed files.
|
|
75
|
+
First verify all .sum files exist, then synthesize them into a directory overview.`,
|
|
76
|
+
dependencies: fileTaskIds,
|
|
77
|
+
outputPath: path.join(dirAbsPath, 'AGENTS.md'),
|
|
78
|
+
metadata: {
|
|
79
|
+
directoryFiles: files,
|
|
80
|
+
depth: getDirectoryDepth(dir),
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
// Create root document tasks
|
|
85
|
+
const allDirTaskIds = Object.keys(directoryFileMap).map(d => `dir:${d}`);
|
|
86
|
+
rootTasks.push({
|
|
87
|
+
id: 'root:CLAUDE.md',
|
|
88
|
+
type: 'root-doc',
|
|
89
|
+
path: 'CLAUDE.md',
|
|
90
|
+
absolutePath: path.join(projectRoot, 'CLAUDE.md'),
|
|
91
|
+
systemPrompt: `You are generating CLAUDE.md, the main project documentation entry point.
|
|
92
|
+
Synthesize all AGENTS.md files into a comprehensive project overview.
|
|
93
|
+
Include: project purpose, architecture overview, key directories, getting started.`,
|
|
94
|
+
userPrompt: `Generate CLAUDE.md for the project root.
|
|
95
|
+
Read all AGENTS.md files and create a unified project documentation.`,
|
|
96
|
+
dependencies: allDirTaskIds,
|
|
97
|
+
outputPath: path.join(projectRoot, 'CLAUDE.md'),
|
|
98
|
+
metadata: {},
|
|
99
|
+
});
|
|
100
|
+
if (plan.generateArchitecture) {
|
|
101
|
+
rootTasks.push({
|
|
102
|
+
id: 'root:ARCHITECTURE.md',
|
|
103
|
+
type: 'root-doc',
|
|
104
|
+
path: 'ARCHITECTURE.md',
|
|
105
|
+
absolutePath: path.join(projectRoot, 'ARCHITECTURE.md'),
|
|
106
|
+
systemPrompt: `You are generating ARCHITECTURE.md, documenting the project's technical architecture.
|
|
107
|
+
Analyze the codebase structure and create a detailed architecture document.
|
|
108
|
+
Include: system design, component relationships, data flow, patterns used.`,
|
|
109
|
+
userPrompt: `Generate ARCHITECTURE.md documenting the project architecture.
|
|
110
|
+
Base this on the directory structure and file summaries.`,
|
|
111
|
+
dependencies: allDirTaskIds,
|
|
112
|
+
outputPath: path.join(projectRoot, 'ARCHITECTURE.md'),
|
|
113
|
+
metadata: {},
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
if (plan.generateStack) {
|
|
117
|
+
rootTasks.push({
|
|
118
|
+
id: 'root:STACK.md',
|
|
119
|
+
type: 'root-doc',
|
|
120
|
+
path: 'STACK.md',
|
|
121
|
+
absolutePath: path.join(projectRoot, 'STACK.md'),
|
|
122
|
+
systemPrompt: `You are generating STACK.md, documenting the project's technology stack.
|
|
123
|
+
Analyze package.json and the codebase to document all technologies used.
|
|
124
|
+
Include: frameworks, libraries, dev tools, and their purposes.`,
|
|
125
|
+
userPrompt: `Generate STACK.md documenting the technology stack.
|
|
126
|
+
Read package.json and analyze dependencies.`,
|
|
127
|
+
dependencies: ['root:CLAUDE.md'],
|
|
128
|
+
outputPath: path.join(projectRoot, 'STACK.md'),
|
|
129
|
+
metadata: {},
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
projectRoot,
|
|
134
|
+
tasks: [...fileTasks, ...directoryTasks, ...rootTasks],
|
|
135
|
+
fileTasks,
|
|
136
|
+
directoryTasks,
|
|
137
|
+
rootTasks,
|
|
138
|
+
directoryFileMap,
|
|
139
|
+
generateArchitecture: plan.generateArchitecture,
|
|
140
|
+
generateStack: plan.generateStack,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Check if all files in a directory have been analyzed (.sum files exist).
|
|
145
|
+
*/
|
|
146
|
+
export async function isDirectoryComplete(dirPath, expectedFiles, projectRoot) {
|
|
147
|
+
const missing = [];
|
|
148
|
+
for (const relativePath of expectedFiles) {
|
|
149
|
+
const absolutePath = path.join(projectRoot, relativePath);
|
|
150
|
+
const exists = await sumFileExists(absolutePath);
|
|
151
|
+
if (!exists) {
|
|
152
|
+
missing.push(relativePath);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
complete: missing.length === 0,
|
|
157
|
+
missing,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Get all directories that are ready for AGENTS.md generation.
|
|
162
|
+
* A directory is ready when all its files have .sum files.
|
|
163
|
+
*/
|
|
164
|
+
export async function getReadyDirectories(executionPlan) {
|
|
165
|
+
const ready = [];
|
|
166
|
+
for (const [dir, files] of Object.entries(executionPlan.directoryFileMap)) {
|
|
167
|
+
const { complete } = await isDirectoryComplete(dir, files, executionPlan.projectRoot);
|
|
168
|
+
if (complete) {
|
|
169
|
+
ready.push(dir);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return ready;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Output execution plan as JSON for AI consumption.
|
|
176
|
+
*/
|
|
177
|
+
export function formatExecutionPlanAsJson(plan) {
|
|
178
|
+
return JSON.stringify({
|
|
179
|
+
projectRoot: plan.projectRoot,
|
|
180
|
+
summary: {
|
|
181
|
+
totalTasks: plan.tasks.length,
|
|
182
|
+
fileTasks: plan.fileTasks.length,
|
|
183
|
+
directoryTasks: plan.directoryTasks.length,
|
|
184
|
+
rootTasks: plan.rootTasks.length,
|
|
185
|
+
directories: Object.keys(plan.directoryFileMap).length,
|
|
186
|
+
traversal: 'post-order (deepest first)',
|
|
187
|
+
},
|
|
188
|
+
directoryFileMap: plan.directoryFileMap,
|
|
189
|
+
fileTasks: plan.fileTasks.map(t => ({
|
|
190
|
+
id: t.id,
|
|
191
|
+
path: t.path,
|
|
192
|
+
absolutePath: t.absolutePath,
|
|
193
|
+
outputPath: t.outputPath,
|
|
194
|
+
systemPrompt: t.systemPrompt,
|
|
195
|
+
userPrompt: t.userPrompt,
|
|
196
|
+
fileType: t.metadata.fileType,
|
|
197
|
+
})),
|
|
198
|
+
directoryTasks: plan.directoryTasks.map(t => ({
|
|
199
|
+
id: t.id,
|
|
200
|
+
path: t.path,
|
|
201
|
+
depth: t.metadata.depth,
|
|
202
|
+
absolutePath: t.absolutePath,
|
|
203
|
+
outputPath: t.outputPath,
|
|
204
|
+
dependencies: t.dependencies,
|
|
205
|
+
files: t.metadata.directoryFiles,
|
|
206
|
+
})),
|
|
207
|
+
rootTasks: plan.rootTasks.map(t => ({
|
|
208
|
+
id: t.id,
|
|
209
|
+
path: t.path,
|
|
210
|
+
outputPath: t.outputPath,
|
|
211
|
+
dependencies: t.dependencies,
|
|
212
|
+
})),
|
|
213
|
+
}, null, 2);
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Output tasks for streaming execution (one task per line as JSON).
|
|
217
|
+
*/
|
|
218
|
+
export function* streamTasks(plan) {
|
|
219
|
+
// First, yield all file tasks (can be parallelized)
|
|
220
|
+
yield JSON.stringify({ phase: 'files', count: plan.fileTasks.length });
|
|
221
|
+
for (const task of plan.fileTasks) {
|
|
222
|
+
yield JSON.stringify({
|
|
223
|
+
task: {
|
|
224
|
+
id: task.id,
|
|
225
|
+
type: task.type,
|
|
226
|
+
path: task.path,
|
|
227
|
+
absolutePath: task.absolutePath,
|
|
228
|
+
outputPath: task.outputPath,
|
|
229
|
+
systemPrompt: task.systemPrompt,
|
|
230
|
+
userPrompt: task.userPrompt,
|
|
231
|
+
fileType: task.metadata.fileType,
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
// Then yield directory tasks (post-order: deepest first)
|
|
236
|
+
yield JSON.stringify({ phase: 'directories', count: plan.directoryTasks.length, traversal: 'post-order' });
|
|
237
|
+
for (const task of plan.directoryTasks) {
|
|
238
|
+
yield JSON.stringify({
|
|
239
|
+
task: {
|
|
240
|
+
id: task.id,
|
|
241
|
+
type: task.type,
|
|
242
|
+
path: task.path,
|
|
243
|
+
depth: task.metadata.depth,
|
|
244
|
+
absolutePath: task.absolutePath,
|
|
245
|
+
outputPath: task.outputPath,
|
|
246
|
+
files: task.metadata.directoryFiles,
|
|
247
|
+
}
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
// Finally yield root tasks
|
|
251
|
+
yield JSON.stringify({ phase: 'root', count: plan.rootTasks.length });
|
|
252
|
+
for (const task of plan.rootTasks) {
|
|
253
|
+
yield JSON.stringify({
|
|
254
|
+
task: {
|
|
255
|
+
id: task.id,
|
|
256
|
+
type: task.type,
|
|
257
|
+
path: task.path,
|
|
258
|
+
outputPath: task.outputPath,
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
yield JSON.stringify({ phase: 'complete' });
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Format execution plan as markdown for GENERATION-PLAN.md.
|
|
266
|
+
* Uses post-order traversal (deepest directories first).
|
|
267
|
+
*/
|
|
268
|
+
export function formatExecutionPlanAsMarkdown(plan) {
|
|
269
|
+
const lines = [];
|
|
270
|
+
const today = new Date().toISOString().split('T')[0];
|
|
271
|
+
// Header
|
|
272
|
+
lines.push('# Documentation Generation Plan');
|
|
273
|
+
lines.push('');
|
|
274
|
+
lines.push(`Generated: ${today}`);
|
|
275
|
+
lines.push(`Project: ${plan.projectRoot}`);
|
|
276
|
+
lines.push('');
|
|
277
|
+
// Summary
|
|
278
|
+
lines.push('## Summary');
|
|
279
|
+
lines.push('');
|
|
280
|
+
lines.push(`- **Total Tasks**: ${plan.tasks.length}`);
|
|
281
|
+
lines.push(`- **File Tasks**: ${plan.fileTasks.length}`);
|
|
282
|
+
lines.push(`- **Directory Tasks**: ${plan.directoryTasks.length}`);
|
|
283
|
+
lines.push(`- **Root Tasks**: ${plan.rootTasks.length}`);
|
|
284
|
+
lines.push('- **Traversal**: Post-order (children before parents)');
|
|
285
|
+
lines.push('');
|
|
286
|
+
lines.push('---');
|
|
287
|
+
lines.push('');
|
|
288
|
+
// Phase 1: File Analysis
|
|
289
|
+
lines.push('## Phase 1: File Analysis (Post-Order Traversal)');
|
|
290
|
+
lines.push('');
|
|
291
|
+
// Group files by directory, use directory task order (already post-order)
|
|
292
|
+
const filesByDir = {};
|
|
293
|
+
for (const task of plan.fileTasks) {
|
|
294
|
+
const dir = task.path.includes('/')
|
|
295
|
+
? task.path.substring(0, task.path.lastIndexOf('/'))
|
|
296
|
+
: '.';
|
|
297
|
+
if (!filesByDir[dir])
|
|
298
|
+
filesByDir[dir] = [];
|
|
299
|
+
filesByDir[dir].push(task.path);
|
|
300
|
+
}
|
|
301
|
+
// Output files grouped by directory in post-order (using directoryTasks order)
|
|
302
|
+
for (const dirTask of plan.directoryTasks) {
|
|
303
|
+
const dir = dirTask.path;
|
|
304
|
+
const files = filesByDir[dir] || [];
|
|
305
|
+
if (files.length > 0) {
|
|
306
|
+
const depth = dirTask.metadata.depth ?? 0;
|
|
307
|
+
lines.push(`### Depth ${depth}: ${dir}/ (${files.length} files)`);
|
|
308
|
+
for (const file of files) {
|
|
309
|
+
lines.push(`- [ ] \`${file}\``);
|
|
310
|
+
}
|
|
311
|
+
lines.push('');
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
lines.push('---');
|
|
315
|
+
lines.push('');
|
|
316
|
+
// Phase 2: Directory AGENTS.md
|
|
317
|
+
lines.push(`## Phase 2: Directory AGENTS.md (Post-Order Traversal, ${plan.directoryTasks.length} directories)`);
|
|
318
|
+
lines.push('');
|
|
319
|
+
// Group by depth
|
|
320
|
+
const dirsByDepth = {};
|
|
321
|
+
for (const task of plan.directoryTasks) {
|
|
322
|
+
const depth = task.metadata.depth ?? 0;
|
|
323
|
+
if (!dirsByDepth[depth])
|
|
324
|
+
dirsByDepth[depth] = [];
|
|
325
|
+
dirsByDepth[depth].push(task.path);
|
|
326
|
+
}
|
|
327
|
+
// Output in depth order (descending)
|
|
328
|
+
const depths = Object.keys(dirsByDepth).map(Number).sort((a, b) => b - a);
|
|
329
|
+
for (const depth of depths) {
|
|
330
|
+
lines.push(`### Depth ${depth}`);
|
|
331
|
+
for (const dir of dirsByDepth[depth]) {
|
|
332
|
+
const suffix = dir === '.' ? ' (root)' : '';
|
|
333
|
+
lines.push(`- [ ] \`${dir}/AGENTS.md\`${suffix}`);
|
|
334
|
+
}
|
|
335
|
+
lines.push('');
|
|
336
|
+
}
|
|
337
|
+
lines.push('---');
|
|
338
|
+
lines.push('');
|
|
339
|
+
// Phase 3: Root Documents
|
|
340
|
+
lines.push('## Phase 3: Root Documents');
|
|
341
|
+
lines.push('');
|
|
342
|
+
lines.push('- [ ] `CLAUDE.md`');
|
|
343
|
+
if (plan.generateArchitecture) {
|
|
344
|
+
lines.push('- [ ] `ARCHITECTURE.md`');
|
|
345
|
+
}
|
|
346
|
+
if (plan.generateStack) {
|
|
347
|
+
lines.push('- [ ] `STACK.md`');
|
|
348
|
+
}
|
|
349
|
+
lines.push('');
|
|
350
|
+
return lines.join('\n');
|
|
351
|
+
}
|
|
352
|
+
//# sourceMappingURL=executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/generation/executor.ts"],"names":[],"mappings":"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"}
|