@eldrforge/kodrdriv 1.2.128 → 1.2.130

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 (32) hide show
  1. package/dist/commands/audio-commit.js +2 -2
  2. package/dist/commands/audio-commit.js.map +1 -1
  3. package/dist/commands/audio-review.js +2 -2
  4. package/dist/commands/audio-review.js.map +1 -1
  5. package/dist/commands/tree.js +4 -4
  6. package/dist/commands/tree.js.map +1 -1
  7. package/dist/constants.js +1 -1
  8. package/dist/util/general.js +3 -52
  9. package/dist/util/general.js.map +1 -1
  10. package/package.json +4 -1
  11. package/dist/execution/CommandValidator.js +0 -192
  12. package/dist/execution/CommandValidator.js.map +0 -1
  13. package/dist/execution/DependencyChecker.js +0 -102
  14. package/dist/execution/DependencyChecker.js.map +0 -1
  15. package/dist/execution/DynamicTaskPool.js +0 -661
  16. package/dist/execution/DynamicTaskPool.js.map +0 -1
  17. package/dist/execution/RecoveryManager.js +0 -584
  18. package/dist/execution/RecoveryManager.js.map +0 -1
  19. package/dist/execution/ResourceMonitor.js +0 -150
  20. package/dist/execution/ResourceMonitor.js.map +0 -1
  21. package/dist/execution/Scheduler.js +0 -98
  22. package/dist/execution/Scheduler.js.map +0 -1
  23. package/dist/execution/TreeExecutionAdapter.js +0 -225
  24. package/dist/execution/TreeExecutionAdapter.js.map +0 -1
  25. package/dist/ui/ProgressFormatter.js +0 -250
  26. package/dist/ui/ProgressFormatter.js.map +0 -1
  27. package/dist/util/checkpointManager.js +0 -166
  28. package/dist/util/checkpointManager.js.map +0 -1
  29. package/dist/util/countdown.js +0 -215
  30. package/dist/util/countdown.js.map +0 -1
  31. package/dist/util/dependencyGraph.js +0 -222
  32. package/dist/util/dependencyGraph.js.map +0 -1
@@ -1,222 +0,0 @@
1
- import path__default from 'path';
2
- import fs from 'fs/promises';
3
- import { safeJsonParse, validatePackageJson } from '@eldrforge/git-tools';
4
- import { getLogger } from '../logging.js';
5
- import { createStorage } from '@eldrforge/shared';
6
-
7
- /**
8
- * Check if a file path matches a glob pattern
9
- */ const matchesPattern = (filePath, pattern)=>{
10
- // Convert simple glob patterns to regex
11
- const regexPattern = pattern.replace(/\\/g, '\\\\') // Escape backslashes
12
- .replace(/\*\*/g, '.*') // ** matches any path segments
13
- .replace(/\*/g, '[^/]*') // * matches any characters except path separator
14
- .replace(/\?/g, '.') // ? matches any single character
15
- .replace(/\./g, '\\.'); // Escape literal dots
16
- const regex = new RegExp(`^${regexPattern}$`);
17
- return regex.test(filePath) || regex.test(path__default.basename(filePath));
18
- };
19
- /**
20
- * Check if a package should be excluded based on patterns
21
- */ function shouldExclude(packageJsonPath, excludedPatterns) {
22
- if (!excludedPatterns || excludedPatterns.length === 0) {
23
- return false;
24
- }
25
- // Check both the full path and relative path patterns
26
- const relativePath = path__default.relative(process.cwd(), packageJsonPath);
27
- return excludedPatterns.some((pattern)=>matchesPattern(packageJsonPath, pattern) || matchesPattern(relativePath, pattern) || matchesPattern(path__default.dirname(packageJsonPath), pattern) || matchesPattern(path__default.dirname(relativePath), pattern));
28
- }
29
- /**
30
- * Scan directory for package.json files
31
- */ async function scanForPackageJsonFiles(directory, excludedPatterns = []) {
32
- const logger = getLogger();
33
- const packageJsonPaths = [];
34
- try {
35
- // First check if there's a package.json in the specified directory itself
36
- const directPackageJsonPath = path__default.join(directory, 'package.json');
37
- try {
38
- await fs.access(directPackageJsonPath);
39
- // Check if this package should be excluded
40
- if (!shouldExclude(directPackageJsonPath, excludedPatterns)) {
41
- packageJsonPaths.push(directPackageJsonPath);
42
- logger.verbose(`Found package.json at: ${directPackageJsonPath}`);
43
- } else {
44
- logger.verbose(`Excluding package.json at: ${directPackageJsonPath} (matches exclusion pattern)`);
45
- }
46
- } catch {
47
- // No package.json in the root of this directory, that's fine
48
- }
49
- // Then scan subdirectories for package.json files
50
- const entries = await fs.readdir(directory, {
51
- withFileTypes: true
52
- });
53
- for (const entry of entries){
54
- if (entry.isDirectory()) {
55
- const subDirPath = path__default.join(directory, entry.name);
56
- const packageJsonPath = path__default.join(subDirPath, 'package.json');
57
- try {
58
- await fs.access(packageJsonPath);
59
- // Check if this package should be excluded
60
- if (shouldExclude(packageJsonPath, excludedPatterns)) {
61
- logger.verbose(`Excluding package.json at: ${packageJsonPath} (matches exclusion pattern)`);
62
- continue;
63
- }
64
- packageJsonPaths.push(packageJsonPath);
65
- logger.verbose(`Found package.json at: ${packageJsonPath}`);
66
- } catch {
67
- // No package.json in this directory, continue
68
- }
69
- }
70
- }
71
- } catch (error) {
72
- logger.error(`DEPENDENCY_GRAPH_SCAN_FAILED: Failed to scan directory | Directory: ${directory} | Error: ${error}`);
73
- throw error;
74
- }
75
- return packageJsonPaths;
76
- }
77
- /**
78
- * Parse a single package.json file
79
- */ async function parsePackageJson(packageJsonPath) {
80
- const logger = getLogger();
81
- const storage = createStorage();
82
- try {
83
- const content = await storage.readFile(packageJsonPath, 'utf-8');
84
- const parsed = safeJsonParse(content, packageJsonPath);
85
- const packageJson = validatePackageJson(parsed, packageJsonPath);
86
- if (!packageJson.name) {
87
- throw new Error(`Package at ${packageJsonPath} has no name field`);
88
- }
89
- const dependencies = new Set();
90
- const devDependencies = new Set();
91
- // Collect all types of dependencies
92
- const depTypes = [
93
- 'dependencies',
94
- 'devDependencies',
95
- 'peerDependencies',
96
- 'optionalDependencies'
97
- ];
98
- for (const depType of depTypes){
99
- if (packageJson[depType]) {
100
- Object.keys(packageJson[depType]).forEach((dep)=>{
101
- dependencies.add(dep);
102
- if (depType === 'devDependencies') {
103
- devDependencies.add(dep);
104
- }
105
- });
106
- }
107
- }
108
- return {
109
- name: packageJson.name,
110
- version: packageJson.version || '0.0.0',
111
- path: path__default.dirname(packageJsonPath),
112
- dependencies,
113
- devDependencies,
114
- localDependencies: new Set() // Will be populated later
115
- };
116
- } catch (error) {
117
- logger.error(`DEPENDENCY_GRAPH_PARSE_FAILED: Failed to parse package.json | Path: ${packageJsonPath} | Error: ${error}`);
118
- throw error;
119
- }
120
- }
121
- /**
122
- * Build dependency graph from package.json paths
123
- */ async function buildDependencyGraph(packageJsonPaths) {
124
- const logger = getLogger();
125
- const packages = new Map();
126
- const edges = new Map();
127
- // First pass: parse all package.json files
128
- for (const packageJsonPath of packageJsonPaths){
129
- const packageInfo = await parsePackageJson(packageJsonPath);
130
- packages.set(packageInfo.name, packageInfo);
131
- logger.verbose(`Parsed package: ${packageInfo.name} at ${packageInfo.path}`);
132
- }
133
- // Second pass: identify local dependencies and build edges
134
- for (const [packageName, packageInfo] of packages){
135
- const localDeps = new Set();
136
- const edgesSet = new Set();
137
- for (const dep of packageInfo.dependencies){
138
- if (packages.has(dep)) {
139
- localDeps.add(dep);
140
- edgesSet.add(dep);
141
- logger.verbose(`${packageName} depends on local package: ${dep}`);
142
- }
143
- }
144
- packageInfo.localDependencies = localDeps;
145
- edges.set(packageName, edgesSet);
146
- }
147
- // Build reverse edges (dependents)
148
- const reverseEdges = buildReverseGraph(edges);
149
- return {
150
- packages,
151
- edges,
152
- reverseEdges
153
- };
154
- }
155
- /**
156
- * Build reverse dependency graph (package -> dependents)
157
- */ function buildReverseGraph(edges) {
158
- const reverse = new Map();
159
- for (const [pkg, deps] of edges){
160
- for (const dep of deps){
161
- if (!reverse.has(dep)) {
162
- reverse.set(dep, new Set());
163
- }
164
- reverse.get(dep).add(pkg);
165
- }
166
- }
167
- return reverse;
168
- }
169
- /**
170
- * Perform topological sort on dependency graph
171
- */ function topologicalSort(graph) {
172
- const logger = getLogger();
173
- const { packages, edges } = graph;
174
- const visited = new Set();
175
- const visiting = new Set();
176
- const result = [];
177
- const visit = (packageName)=>{
178
- if (visited.has(packageName)) {
179
- return;
180
- }
181
- if (visiting.has(packageName)) {
182
- throw new Error(`Circular dependency detected involving package: ${packageName}`);
183
- }
184
- visiting.add(packageName);
185
- // Visit all dependencies first
186
- const deps = edges.get(packageName) || new Set();
187
- for (const dep of deps){
188
- visit(dep);
189
- }
190
- visiting.delete(packageName);
191
- visited.add(packageName);
192
- result.push(packageName);
193
- };
194
- // Visit all packages
195
- for (const packageName of packages.keys()){
196
- if (!visited.has(packageName)) {
197
- visit(packageName);
198
- }
199
- }
200
- logger.verbose(`Topological sort completed. Build order determined for ${result.length} packages.`);
201
- return result;
202
- }
203
- /**
204
- * Find all dependents of a package (packages that depend on it)
205
- */ function findAllDependents(packageName, graph) {
206
- const dependents = new Set();
207
- const visited = new Set();
208
- const traverse = (pkg)=>{
209
- if (visited.has(pkg)) return;
210
- visited.add(pkg);
211
- const directDependents = graph.reverseEdges.get(pkg) || new Set();
212
- for (const dependent of directDependents){
213
- dependents.add(dependent);
214
- traverse(dependent);
215
- }
216
- };
217
- traverse(packageName);
218
- return dependents;
219
- }
220
-
221
- export { buildDependencyGraph, buildReverseGraph, findAllDependents, parsePackageJson, scanForPackageJsonFiles, shouldExclude, topologicalSort };
222
- //# sourceMappingURL=dependencyGraph.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dependencyGraph.js","sources":["../../src/util/dependencyGraph.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs/promises';\nimport { safeJsonParse, validatePackageJson } from '@eldrforge/git-tools';\nimport { getLogger } from '../logging';\nimport { createStorage } from '@eldrforge/shared';\n\n/**\n * Check if a file path matches a glob pattern\n */\nconst matchesPattern = (filePath: string, pattern: string): boolean => {\n // Convert simple glob patterns to regex\n const regexPattern = pattern\n .replace(/\\\\/g, '\\\\\\\\') // Escape backslashes\n .replace(/\\*\\*/g, '.*') // ** matches any path segments\n .replace(/\\*/g, '[^/]*') // * matches any characters except path separator\n .replace(/\\?/g, '.') // ? matches any single character\n .replace(/\\./g, '\\\\.'); // Escape literal dots\n\n const regex = new RegExp(`^${regexPattern}$`);\n return regex.test(filePath) || regex.test(path.basename(filePath));\n};\n\n/**\n * Check if a package should be excluded based on patterns\n */\nexport function shouldExclude(packageJsonPath: string, excludedPatterns: string[]): boolean {\n if (!excludedPatterns || excludedPatterns.length === 0) {\n return false;\n }\n\n // Check both the full path and relative path patterns\n const relativePath = path.relative(process.cwd(), packageJsonPath);\n\n return excludedPatterns.some(pattern =>\n matchesPattern(packageJsonPath, pattern) ||\n matchesPattern(relativePath, pattern) ||\n matchesPattern(path.dirname(packageJsonPath), pattern) ||\n matchesPattern(path.dirname(relativePath), pattern)\n );\n}\n\nexport interface PackageInfo {\n name: string;\n version: string;\n path: string;\n dependencies: Set<string>;\n devDependencies: Set<string>;\n localDependencies: Set<string>;\n}\n\nexport interface DependencyGraph {\n packages: Map<string, PackageInfo>;\n edges: Map<string, Set<string>>; // package -> dependencies\n reverseEdges: Map<string, Set<string>>; // package -> dependents\n}\n\nexport interface SerializedGraph {\n packages: Array<{\n name: string;\n version: string;\n path: string;\n dependencies: string[];\n }>;\n edges: Array<[string, string[]]>;\n}\n\n/**\n * Scan directory for package.json files\n */\nexport async function scanForPackageJsonFiles(\n directory: string,\n excludedPatterns: string[] = []\n): Promise<string[]> {\n const logger = getLogger();\n const packageJsonPaths: string[] = [];\n\n try {\n // First check if there's a package.json in the specified directory itself\n const directPackageJsonPath = path.join(directory, 'package.json');\n try {\n await fs.access(directPackageJsonPath);\n\n // Check if this package should be excluded\n if (!shouldExclude(directPackageJsonPath, excludedPatterns)) {\n packageJsonPaths.push(directPackageJsonPath);\n logger.verbose(`Found package.json at: ${directPackageJsonPath}`);\n } else {\n logger.verbose(`Excluding package.json at: ${directPackageJsonPath} (matches exclusion pattern)`);\n }\n } catch {\n // No package.json in the root of this directory, that's fine\n }\n\n // Then scan subdirectories for package.json files\n const entries = await fs.readdir(directory, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isDirectory()) {\n const subDirPath = path.join(directory, entry.name);\n const packageJsonPath = path.join(subDirPath, 'package.json');\n\n try {\n await fs.access(packageJsonPath);\n\n // Check if this package should be excluded\n if (shouldExclude(packageJsonPath, excludedPatterns)) {\n logger.verbose(`Excluding package.json at: ${packageJsonPath} (matches exclusion pattern)`);\n continue;\n }\n\n packageJsonPaths.push(packageJsonPath);\n logger.verbose(`Found package.json at: ${packageJsonPath}`);\n } catch {\n // No package.json in this directory, continue\n }\n }\n }\n } catch (error) {\n logger.error(`DEPENDENCY_GRAPH_SCAN_FAILED: Failed to scan directory | Directory: ${directory} | Error: ${error}`);\n throw error;\n }\n\n return packageJsonPaths;\n}\n\n/**\n * Parse a single package.json file\n */\nexport async function parsePackageJson(packageJsonPath: string): Promise<PackageInfo> {\n const logger = getLogger();\n const storage = createStorage();\n\n try {\n const content = await storage.readFile(packageJsonPath, 'utf-8');\n const parsed = safeJsonParse(content, packageJsonPath);\n const packageJson = validatePackageJson(parsed, packageJsonPath);\n\n if (!packageJson.name) {\n throw new Error(`Package at ${packageJsonPath} has no name field`);\n }\n\n const dependencies = new Set<string>();\n const devDependencies = new Set<string>();\n\n // Collect all types of dependencies\n const depTypes = ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies'];\n for (const depType of depTypes) {\n if (packageJson[depType]) {\n Object.keys(packageJson[depType]).forEach(dep => {\n dependencies.add(dep);\n if (depType === 'devDependencies') {\n devDependencies.add(dep);\n }\n });\n }\n }\n\n return {\n name: packageJson.name,\n version: packageJson.version || '0.0.0',\n path: path.dirname(packageJsonPath),\n dependencies,\n devDependencies,\n localDependencies: new Set() // Will be populated later\n };\n } catch (error) {\n logger.error(`DEPENDENCY_GRAPH_PARSE_FAILED: Failed to parse package.json | Path: ${packageJsonPath} | Error: ${error}`);\n throw error;\n }\n}\n\n/**\n * Build dependency graph from package.json paths\n */\nexport async function buildDependencyGraph(\n packageJsonPaths: string[]\n): Promise<DependencyGraph> {\n const logger = getLogger();\n const packages = new Map<string, PackageInfo>();\n const edges = new Map<string, Set<string>>();\n\n // First pass: parse all package.json files\n for (const packageJsonPath of packageJsonPaths) {\n const packageInfo = await parsePackageJson(packageJsonPath);\n packages.set(packageInfo.name, packageInfo);\n logger.verbose(`Parsed package: ${packageInfo.name} at ${packageInfo.path}`);\n }\n\n // Second pass: identify local dependencies and build edges\n for (const [packageName, packageInfo] of packages) {\n const localDeps = new Set<string>();\n const edgesSet = new Set<string>();\n\n for (const dep of packageInfo.dependencies) {\n if (packages.has(dep)) {\n localDeps.add(dep);\n edgesSet.add(dep);\n logger.verbose(`${packageName} depends on local package: ${dep}`);\n }\n }\n\n packageInfo.localDependencies = localDeps;\n edges.set(packageName, edgesSet);\n }\n\n // Build reverse edges (dependents)\n const reverseEdges = buildReverseGraph(edges);\n\n return { packages, edges, reverseEdges };\n}\n\n/**\n * Build reverse dependency graph (package -> dependents)\n */\nexport function buildReverseGraph(\n edges: Map<string, Set<string>>\n): Map<string, Set<string>> {\n const reverse = new Map<string, Set<string>>();\n\n for (const [pkg, deps] of edges) {\n for (const dep of deps) {\n if (!reverse.has(dep)) {\n reverse.set(dep, new Set());\n }\n reverse.get(dep)!.add(pkg);\n }\n }\n\n return reverse;\n}\n\n/**\n * Perform topological sort on dependency graph\n */\nexport function topologicalSort(graph: DependencyGraph): string[] {\n const logger = getLogger();\n const { packages, edges } = graph;\n const visited = new Set<string>();\n const visiting = new Set<string>();\n const result: string[] = [];\n\n const visit = (packageName: string): void => {\n if (visited.has(packageName)) {\n return;\n }\n\n if (visiting.has(packageName)) {\n throw new Error(`Circular dependency detected involving package: ${packageName}`);\n }\n\n visiting.add(packageName);\n\n // Visit all dependencies first\n const deps = edges.get(packageName) || new Set();\n for (const dep of deps) {\n visit(dep);\n }\n\n visiting.delete(packageName);\n visited.add(packageName);\n result.push(packageName);\n };\n\n // Visit all packages\n for (const packageName of packages.keys()) {\n if (!visited.has(packageName)) {\n visit(packageName);\n }\n }\n\n logger.verbose(`Topological sort completed. Build order determined for ${result.length} packages.`);\n return result;\n}\n\n/**\n * Find all dependents of a package (packages that depend on it)\n */\nexport function findAllDependents(\n packageName: string,\n graph: DependencyGraph\n): Set<string> {\n const dependents = new Set<string>();\n const visited = new Set<string>();\n\n const traverse = (pkg: string) => {\n if (visited.has(pkg)) return;\n visited.add(pkg);\n\n const directDependents = graph.reverseEdges.get(pkg) || new Set();\n for (const dependent of directDependents) {\n dependents.add(dependent);\n traverse(dependent);\n }\n };\n\n traverse(packageName);\n return dependents;\n}\n\n/**\n * Serialize graph for checkpoint persistence\n */\nexport function serializeGraph(graph: DependencyGraph): SerializedGraph {\n return {\n packages: Array.from(graph.packages.values()).map(pkg => ({\n name: pkg.name,\n version: pkg.version,\n path: pkg.path,\n dependencies: Array.from(pkg.dependencies)\n })),\n edges: Array.from(graph.edges.entries()).map(([pkg, deps]) => [\n pkg,\n Array.from(deps)\n ])\n };\n}\n\n/**\n * Deserialize graph from checkpoint\n */\nexport function deserializeGraph(serialized: SerializedGraph): DependencyGraph {\n const packages = new Map<string, PackageInfo>();\n const edges = new Map<string, Set<string>>();\n\n // Restore packages\n for (const pkg of serialized.packages) {\n packages.set(pkg.name, {\n name: pkg.name,\n version: pkg.version,\n path: pkg.path,\n dependencies: new Set(pkg.dependencies),\n devDependencies: new Set(),\n localDependencies: new Set()\n });\n }\n\n // Restore edges\n for (const [pkg, deps] of serialized.edges) {\n edges.set(pkg, new Set(deps));\n }\n\n // Build reverse edges\n const reverseEdges = buildReverseGraph(edges);\n\n return { packages, edges, reverseEdges };\n}\n\n/**\n * Validate graph integrity\n */\nexport function validateGraph(graph: DependencyGraph): {\n valid: boolean;\n errors: string[];\n} {\n const errors: string[] = [];\n\n // Check all edge targets exist\n for (const [pkg, deps] of graph.edges) {\n for (const dep of deps) {\n if (!graph.packages.has(dep)) {\n errors.push(`Package ${pkg} depends on ${dep} which doesn't exist`);\n }\n }\n }\n\n // Check for circular dependencies\n try {\n topologicalSort(graph);\n } catch (error: any) {\n errors.push(error.message);\n }\n\n return {\n valid: errors.length === 0,\n errors\n };\n}\n"],"names":["matchesPattern","filePath","pattern","regexPattern","replace","regex","RegExp","test","path","basename","shouldExclude","packageJsonPath","excludedPatterns","length","relativePath","relative","process","cwd","some","dirname","scanForPackageJsonFiles","directory","logger","getLogger","packageJsonPaths","directPackageJsonPath","join","fs","access","push","verbose","entries","readdir","withFileTypes","entry","isDirectory","subDirPath","name","error","parsePackageJson","storage","createStorage","content","readFile","parsed","safeJsonParse","packageJson","validatePackageJson","Error","dependencies","Set","devDependencies","depTypes","depType","Object","keys","forEach","dep","add","version","localDependencies","buildDependencyGraph","packages","Map","edges","packageInfo","set","packageName","localDeps","edgesSet","has","reverseEdges","buildReverseGraph","reverse","pkg","deps","get","topologicalSort","graph","visited","visiting","result","visit","delete","findAllDependents","dependents","traverse","directDependents","dependent"],"mappings":"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"}