@principal-ai/codebase-composition 0.2.24 → 0.2.27

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 (43) hide show
  1. package/dist/helpers/QualityMetricsCalculator.d.ts +26 -7
  2. package/dist/helpers/QualityMetricsCalculator.d.ts.map +1 -1
  3. package/dist/helpers/QualityMetricsCalculator.js +129 -131
  4. package/dist/helpers/QualityMetricsCalculator.js.map +1 -1
  5. package/dist/helpers/WorkspaceCommandHelper.d.ts +140 -0
  6. package/dist/helpers/WorkspaceCommandHelper.d.ts.map +1 -0
  7. package/dist/helpers/WorkspaceCommandHelper.js +298 -0
  8. package/dist/helpers/WorkspaceCommandHelper.js.map +1 -0
  9. package/dist/helpers/packageLayerHelpers.d.ts.map +1 -1
  10. package/dist/helpers/packageLayerHelpers.js +50 -24
  11. package/dist/helpers/packageLayerHelpers.js.map +1 -1
  12. package/dist/index.d.ts +5 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +3 -0
  15. package/dist/index.js.map +1 -1
  16. package/dist/modules/PackageLayerModule.d.ts.map +1 -1
  17. package/dist/modules/PackageLayerModule.js +169 -3
  18. package/dist/modules/PackageLayerModule.js.map +1 -1
  19. package/dist/strategies/go-tools.d.ts +27 -0
  20. package/dist/strategies/go-tools.d.ts.map +1 -0
  21. package/dist/strategies/go-tools.js +185 -0
  22. package/dist/strategies/go-tools.js.map +1 -0
  23. package/dist/strategies/index.d.ts +37 -0
  24. package/dist/strategies/index.d.ts.map +1 -0
  25. package/dist/strategies/index.js +73 -0
  26. package/dist/strategies/index.js.map +1 -0
  27. package/dist/strategies/node-tools.d.ts +21 -0
  28. package/dist/strategies/node-tools.d.ts.map +1 -0
  29. package/dist/strategies/node-tools.js +142 -0
  30. package/dist/strategies/node-tools.js.map +1 -0
  31. package/dist/strategies/python-tools.d.ts +25 -0
  32. package/dist/strategies/python-tools.d.ts.map +1 -0
  33. package/dist/strategies/python-tools.js +192 -0
  34. package/dist/strategies/python-tools.js.map +1 -0
  35. package/dist/strategies/rust-tools.d.ts +23 -0
  36. package/dist/strategies/rust-tools.d.ts.map +1 -0
  37. package/dist/strategies/rust-tools.js +177 -0
  38. package/dist/strategies/rust-tools.js.map +1 -0
  39. package/dist/strategies/tool-detection.d.ts +137 -0
  40. package/dist/strategies/tool-detection.d.ts.map +1 -0
  41. package/dist/strategies/tool-detection.js +13 -0
  42. package/dist/strategies/tool-detection.js.map +1 -0
  43. package/package.json +2 -1
@@ -0,0 +1,298 @@
1
+ /**
2
+ * Workspace Command Helper
3
+ *
4
+ * Handles workspace-aware command execution for monorepos.
5
+ * Detects workspace commands, groups packages by workspace,
6
+ * and provides utilities for distributing results to packages.
7
+ *
8
+ * Supports:
9
+ * - Cargo workspaces (--workspace, --manifest-path)
10
+ * - npm/pnpm workspaces (--workspaces, -w, --recursive)
11
+ * - Yarn workspaces
12
+ */
13
+ /**
14
+ * Detect if a command is a workspace-wide command and extract workspace info.
15
+ *
16
+ * Detects:
17
+ * - Cargo: --workspace, --manifest-path
18
+ * - pnpm: -r, --recursive, -w, --workspace-root, --filter
19
+ * - npm: --workspaces, -ws
20
+ * - yarn: workspaces foreach
21
+ *
22
+ * @param command - The command being executed (e.g., "cargo", "pnpm")
23
+ * @param args - Command arguments as an array
24
+ * @returns WorkspaceCommandInfo with detection results
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * // Cargo workspace command
29
+ * detectWorkspaceCommand('cargo', ['clippy', '--manifest-path', 'codex-rs/Cargo.toml', '--workspace'])
30
+ * // => { isWorkspaceCommand: true, workspaceRoot: 'codex-rs', ecosystem: 'rust' }
31
+ *
32
+ * // pnpm recursive command
33
+ * detectWorkspaceCommand('pnpm', ['-r', 'run', 'lint'])
34
+ * // => { isWorkspaceCommand: true, ecosystem: 'node' }
35
+ *
36
+ * // Regular command (not workspace-wide)
37
+ * detectWorkspaceCommand('cargo', ['clippy'])
38
+ * // => { isWorkspaceCommand: false }
39
+ * ```
40
+ */
41
+ export function detectWorkspaceCommand(command, args) {
42
+ const fullCommand = `${command} ${args.join(' ')}`;
43
+ const argsSet = new Set(args);
44
+ // Cargo workspace detection
45
+ if (command === 'cargo' || command.startsWith('cargo-') || fullCommand.includes('cargo ')) {
46
+ // Check for --workspace flag
47
+ if (argsSet.has('--workspace') || fullCommand.includes('--workspace')) {
48
+ const workspaceRoot = extractManifestPath(args, fullCommand);
49
+ return {
50
+ isWorkspaceCommand: true,
51
+ workspaceRoot,
52
+ ecosystem: 'rust',
53
+ };
54
+ }
55
+ // Check for --manifest-path (implies running from outside the workspace)
56
+ const manifestPath = extractManifestPath(args, fullCommand);
57
+ if (manifestPath) {
58
+ return {
59
+ isWorkspaceCommand: true,
60
+ workspaceRoot: manifestPath,
61
+ ecosystem: 'rust',
62
+ };
63
+ }
64
+ // Check for --all flag (older cargo syntax)
65
+ if (argsSet.has('--all') || fullCommand.includes(' --all')) {
66
+ return {
67
+ isWorkspaceCommand: true,
68
+ ecosystem: 'rust',
69
+ };
70
+ }
71
+ }
72
+ // pnpm workspace detection
73
+ if (command === 'pnpm' || fullCommand.includes('pnpm ')) {
74
+ if (argsSet.has('-r') ||
75
+ argsSet.has('--recursive') ||
76
+ argsSet.has('-w') ||
77
+ argsSet.has('--workspace-root') ||
78
+ fullCommand.includes(' -r ') ||
79
+ fullCommand.includes(' --recursive') ||
80
+ fullCommand.includes(' -w ') ||
81
+ fullCommand.includes(' --workspace-root')) {
82
+ return {
83
+ isWorkspaceCommand: true,
84
+ ecosystem: 'node',
85
+ };
86
+ }
87
+ // Check for --filter which can target multiple packages
88
+ if (argsSet.has('--filter') || fullCommand.includes('--filter')) {
89
+ return {
90
+ isWorkspaceCommand: true,
91
+ ecosystem: 'node',
92
+ };
93
+ }
94
+ }
95
+ // npm workspace detection
96
+ if (command === 'npm' || fullCommand.includes('npm ')) {
97
+ if (argsSet.has('--workspaces') ||
98
+ argsSet.has('-ws') ||
99
+ fullCommand.includes(' --workspaces') ||
100
+ fullCommand.includes(' -ws')) {
101
+ return {
102
+ isWorkspaceCommand: true,
103
+ ecosystem: 'node',
104
+ };
105
+ }
106
+ }
107
+ // yarn workspace detection
108
+ if (command === 'yarn' || fullCommand.includes('yarn ')) {
109
+ if (fullCommand.includes('workspaces foreach') ||
110
+ fullCommand.includes('workspace foreach') ||
111
+ argsSet.has('--all')) {
112
+ return {
113
+ isWorkspaceCommand: true,
114
+ ecosystem: 'node',
115
+ };
116
+ }
117
+ }
118
+ return { isWorkspaceCommand: false };
119
+ }
120
+ /**
121
+ * Extract the manifest path directory from command arguments.
122
+ *
123
+ * @param args - Command arguments array
124
+ * @param fullCommand - Full command string for fallback parsing
125
+ * @returns The directory containing the manifest, or undefined
126
+ */
127
+ function extractManifestPath(args, fullCommand) {
128
+ // Check args array for --manifest-path
129
+ const manifestPathIndex = args.indexOf('--manifest-path');
130
+ if (manifestPathIndex !== -1 && args[manifestPathIndex + 1]) {
131
+ const manifestPath = args[manifestPathIndex + 1];
132
+ // Extract directory from "codex-rs/Cargo.toml" -> "codex-rs"
133
+ return manifestPath.replace(/\/Cargo\.toml$/, '');
134
+ }
135
+ // Fallback to regex on full command
136
+ const match = fullCommand.match(/--manifest-path\s+([^\s]+)/);
137
+ if (match) {
138
+ return match[1].replace(/\/Cargo\.toml$/, '');
139
+ }
140
+ return undefined;
141
+ }
142
+ /**
143
+ * Group discovered packages by their workspace.
144
+ *
145
+ * Uses the package's `isWorkspace`, `parentPackage`, and `isMonorepoRoot`
146
+ * fields to determine workspace membership.
147
+ *
148
+ * @param packages - Array of discovered packages
149
+ * @returns Array of workspace groups
150
+ *
151
+ * @example
152
+ * ```ts
153
+ * const packages = await packageModule.discoverPackages(fileTree);
154
+ * const workspaceGroups = groupPackagesByWorkspace(packages);
155
+ *
156
+ * for (const group of workspaceGroups) {
157
+ * console.log(`Workspace: ${group.workspaceRoot}`);
158
+ * console.log(`Members: ${group.memberPackages.map(p => p.packageData.name)}`);
159
+ * }
160
+ * ```
161
+ */
162
+ export function groupPackagesByWorkspace(packages) {
163
+ const groups = [];
164
+ const processedPaths = new Set();
165
+ // Find all workspace roots (packages marked as monorepo roots)
166
+ const workspaceRoots = packages.filter((pkg) => pkg.packageData.isMonorepoRoot);
167
+ for (const root of workspaceRoots) {
168
+ const rootPath = root.packageData.path || '';
169
+ if (processedPaths.has(rootPath))
170
+ continue;
171
+ processedPaths.add(rootPath);
172
+ // Determine ecosystem from package type
173
+ const ecosystem = packageTypeToEcosystem(root.type);
174
+ // Find all member packages
175
+ const members = packages.filter((pkg) => {
176
+ // Skip the root itself
177
+ if (pkg === root)
178
+ return false;
179
+ // Check if this package is a workspace member of this root
180
+ if (pkg.packageData.isWorkspace) {
181
+ // Check if parent matches or path is under root path
182
+ if (pkg.packageData.parentPackage === root.packageData.name) {
183
+ return true;
184
+ }
185
+ // Check by path - if package path starts with root path
186
+ const pkgPath = pkg.packageData.path || '';
187
+ if (rootPath && pkgPath.startsWith(rootPath + '/')) {
188
+ return true;
189
+ }
190
+ // If root is at repo root (empty path), all workspaces belong to it
191
+ if (rootPath === '' && pkg.packageData.isWorkspace) {
192
+ return true;
193
+ }
194
+ }
195
+ return false;
196
+ });
197
+ groups.push({
198
+ workspaceRoot: rootPath,
199
+ manifestPath: root.packageData.manifestPath,
200
+ ecosystem,
201
+ memberPackages: members,
202
+ rootPackage: root,
203
+ });
204
+ }
205
+ return groups;
206
+ }
207
+ /**
208
+ * Convert package layer type to ecosystem
209
+ */
210
+ function packageTypeToEcosystem(packageType) {
211
+ switch (packageType) {
212
+ case 'cargo':
213
+ return 'rust';
214
+ case 'python':
215
+ return 'python';
216
+ case 'go':
217
+ return 'go';
218
+ case 'node':
219
+ case 'package':
220
+ default:
221
+ return 'node';
222
+ }
223
+ }
224
+ /**
225
+ * Match a file path to its package within a workspace.
226
+ *
227
+ * Used to distribute lens results to the correct packages.
228
+ * Takes a file path (relative to workspace root) and finds
229
+ * which package it belongs to.
230
+ *
231
+ * @param filePath - File path relative to workspace root (e.g., "protocol/src/lib.rs")
232
+ * @param workspaceRoot - Workspace root directory (e.g., "codex-rs")
233
+ * @param packages - Array of packages to search
234
+ * @returns The matching package, or undefined if not found
235
+ *
236
+ * @example
237
+ * ```ts
238
+ * // Clippy outputs: "protocol/src/lib.rs" (relative to codex-rs/)
239
+ * // We need to find which package this belongs to
240
+ *
241
+ * const pkg = matchPathToPackage(
242
+ * 'protocol/src/lib.rs',
243
+ * 'codex-rs',
244
+ * packages
245
+ * );
246
+ * // => PackageLayer for "codex-rs/protocol"
247
+ * ```
248
+ */
249
+ export function matchPathToPackage(filePath, workspaceRoot, packages) {
250
+ // Normalize paths
251
+ const normalizedFilePath = filePath.replace(/\\/g, '/');
252
+ const normalizedWorkspaceRoot = workspaceRoot.replace(/\\/g, '/');
253
+ // Build full path from repo root
254
+ const fullPath = normalizedWorkspaceRoot
255
+ ? `${normalizedWorkspaceRoot}/${normalizedFilePath}`
256
+ : normalizedFilePath;
257
+ // Find the package whose path is the longest prefix of the file path
258
+ let bestMatch;
259
+ let bestMatchLength = -1;
260
+ for (const pkg of packages) {
261
+ const pkgPath = (pkg.packageData.path || '').replace(/\\/g, '/');
262
+ // Check if file path starts with package path
263
+ if (fullPath.startsWith(pkgPath + '/') || fullPath === pkgPath) {
264
+ if (pkgPath.length > bestMatchLength) {
265
+ bestMatch = pkg;
266
+ bestMatchLength = pkgPath.length;
267
+ }
268
+ }
269
+ }
270
+ return bestMatch;
271
+ }
272
+ /**
273
+ * Prefix a file path with the workspace root.
274
+ *
275
+ * Utility function to convert paths from workspace-relative
276
+ * to repo-relative.
277
+ *
278
+ * @param filePath - File path relative to workspace root
279
+ * @param workspaceRoot - Workspace root directory
280
+ * @returns Full path relative to repo root
281
+ *
282
+ * @example
283
+ * ```ts
284
+ * prefixWithWorkspaceRoot('protocol/src/lib.rs', 'codex-rs')
285
+ * // => 'codex-rs/protocol/src/lib.rs'
286
+ * ```
287
+ */
288
+ export function prefixWithWorkspaceRoot(filePath, workspaceRoot) {
289
+ if (!workspaceRoot || workspaceRoot === '') {
290
+ return filePath;
291
+ }
292
+ // Don't double-prefix
293
+ if (filePath.startsWith(workspaceRoot + '/')) {
294
+ return filePath;
295
+ }
296
+ return `${workspaceRoot}/${filePath}`;
297
+ }
298
+ //# sourceMappingURL=WorkspaceCommandHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkspaceCommandHelper.js","sourceRoot":"","sources":["../../src/helpers/WorkspaceCommandHelper.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"packageLayerHelpers.d.ts","sourceRoot":"","sources":["../../src/helpers/packageLayerHelpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEzE;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,YAAY,GAAG,cAAc,GAAG,IAAI,CAelF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAErE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM,EAAE,CAEvE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM,EAAE,CAErE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM,CAUzE;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM,EAAE,CAiChF"}
1
+ {"version":3,"file":"packageLayerHelpers.d.ts","sourceRoot":"","sources":["../../src/helpers/packageLayerHelpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGzE;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,YAAY,GAAG,cAAc,GAAG,IAAI,CAelF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAErE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM,EAAE,CAEvE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM,EAAE,CAErE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM,CAUzE;AAgCD;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM,EAAE,CA2BhF"}
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Helper functions for PackageLayer
3
3
  */
4
+ import { getDefaultCommand } from '@principal-ai/quality-lens-registry';
4
5
  /**
5
6
  * Convert PackageLayer quality metrics to complete QualityMetrics object
6
7
  * Fills in defaults for missing metrics
@@ -50,6 +51,35 @@ export function getOverallQualityScore(packageLayer) {
50
51
  return 0;
51
52
  return Math.round(nonZeroValues.reduce((sum, val) => sum + val, 0) / nonZeroValues.length);
52
53
  }
54
+ /**
55
+ * Specialized command overrides for lenses that need specific output formats
56
+ * These override the registry defaults for lens recommendations
57
+ */
58
+ const LENS_COMMAND_OVERRIDES = {
59
+ eslint: {
60
+ check: 'eslint . --format json',
61
+ coverage: 'eslint . --format json --no-inline-config',
62
+ },
63
+ typescript: {
64
+ check: 'tsc --noEmit',
65
+ coverage: 'tsc --listFiles',
66
+ },
67
+ test: {
68
+ check: 'jest --json',
69
+ coverage: 'jest --coverage --json',
70
+ },
71
+ prettier: {
72
+ check: 'prettier --check .',
73
+ coverage: 'prettier --list-different .',
74
+ },
75
+ knip: {
76
+ check: 'knip --reporter json',
77
+ },
78
+ typedoc: {
79
+ check: 'typedoc --emit none',
80
+ coverage: 'typedoc --json .quality/typedoc.json',
81
+ },
82
+ };
53
83
  /**
54
84
  * Generate recommendations for adding missing lens commands
55
85
  */
@@ -57,30 +87,26 @@ export function generateLensRecommendations(packageLayer) {
57
87
  const missing = getMissingLenses(packageLayer);
58
88
  const recommendations = [];
59
89
  for (const lensId of missing) {
60
- switch (lensId) {
61
- case 'eslint':
62
- recommendations.push('"lens:eslint:check": "eslint . --format json"');
63
- recommendations.push('"lens:eslint:coverage": "eslint . --format json --no-inline-config"');
64
- break;
65
- case 'typescript':
66
- recommendations.push('"lens:typescript:check": "tsc --noEmit"');
67
- recommendations.push('"lens:typescript:coverage": "tsc --listFiles"');
68
- break;
69
- case 'test':
70
- recommendations.push('"lens:test:check": "jest --json"');
71
- recommendations.push('"lens:test:coverage": "jest --coverage --json"');
72
- break;
73
- case 'prettier':
74
- recommendations.push('"lens:prettier:check": "prettier --check ."');
75
- recommendations.push('"lens:prettier:coverage": "prettier --list-different ."');
76
- break;
77
- case 'knip':
78
- recommendations.push('"lens:knip:check": "knip --reporter json"');
79
- break;
80
- case 'typedoc':
81
- recommendations.push('"lens:typedoc:check": "typedoc --emit none"');
82
- recommendations.push('"lens:typedoc:coverage": "typedoc --json .quality/typedoc.json"');
83
- break;
90
+ // Check for specialized overrides first
91
+ const override = LENS_COMMAND_OVERRIDES[lensId];
92
+ if (override) {
93
+ if (override.check) {
94
+ recommendations.push(`"lens:${lensId}:check": "${override.check}"`);
95
+ }
96
+ if (override.coverage) {
97
+ recommendations.push(`"lens:${lensId}:coverage": "${override.coverage}"`);
98
+ }
99
+ }
100
+ else {
101
+ // Use registry default command
102
+ const defaultCmd = getDefaultCommand(lensId);
103
+ if (defaultCmd) {
104
+ recommendations.push(`"lens:${lensId}:check": "${defaultCmd.command}"`);
105
+ }
106
+ else {
107
+ // Fallback to lens ID as command
108
+ recommendations.push(`"lens:${lensId}:check": "${lensId}"`);
109
+ }
84
110
  }
85
111
  }
86
112
  return recommendations;
@@ -1 +1 @@
1
- {"version":3,"file":"packageLayerHelpers.js","sourceRoot":"","sources":["../../src/helpers/packageLayerHelpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"packageLayerHelpers.js","sourceRoot":"","sources":["../../src/helpers/packageLayerHelpers.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -4,7 +4,12 @@ export type { FileTypeInfo, FileSystemModuleConfig, FileSystemLoadResult, TypeEx
4
4
  export { TypeScriptExtractor } from './modules';
5
5
  export { FilesystemService } from './services';
6
6
  export { QualityMetricsCalculator } from './helpers/QualityMetricsCalculator';
7
+ export type { LensReadinessExtended } from './helpers/QualityMetricsCalculator';
7
8
  export { toQualityMetrics, hasQualityMetrics, getAvailableLenses, getMissingLenses, getOverallQualityScore, generateLensRecommendations, } from './helpers/packageLayerHelpers';
9
+ export { detectWorkspaceCommand, groupPackagesByWorkspace, matchPathToPackage, prefixWithWorkspaceRoot, } from './helpers/WorkspaceCommandHelper';
10
+ export type { WorkspaceEcosystem, WorkspaceCommandInfo, WorkspaceGroup, } from './helpers/WorkspaceCommandHelper';
11
+ export { getToolDetectionStrategy, getAllStrategies, isEcosystemSupported, packageTypeToEcosystem, nodeToolDetection, pythonToolDetection, goToolDetection, rustToolDetection, } from './strategies';
12
+ export type { Ecosystem, ToolSource, ToolAvailability, PackageData, InstallInstruction, ToolDetectionStrategy, ToolMetadata, ToolRegistry, } from './strategies';
8
13
  export { NodeFileSystemAdapter } from './adapters/NodeFileSystemAdapter';
9
14
  export { GitVersionControlProvider, PackageManagerApiProvider } from './providers';
10
15
  export type { FileSystemAdapter, GitAdapter, ShellAdapter, PackageManager, PackageVersionInfo, VersionCheckResult, VulnerabilityInfo, VulnerabilityCheckResult, LicenseInfo, LicenseCheckResult, DependencyCheckProgress, BatchCheckOptions, } from './providers';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,YAAY,EACV,WAAW,EACX,OAAO,EACP,SAAS,EACT,cAAc,EACd,UAAU,EACV,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,EACnB,2BAA2B,EAC3B,sBAAsB,EACtB,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,aAAa,EACb,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EAEtB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,0BAA0B,EAC1B,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,YAAY,EACZ,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAGhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAGzE,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACnF,YAAY,EACV,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,wBAAwB,EACxB,WAAW,EACX,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,YAAY,EACV,WAAW,EACX,OAAO,EACP,SAAS,EACT,cAAc,EACd,UAAU,EACV,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,EACnB,2BAA2B,EAC3B,sBAAsB,EACtB,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,aAAa,EACb,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EAEtB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,0BAA0B,EAC1B,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,YAAY,EACZ,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAGhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,YAAY,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EACV,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,GACf,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,GAClB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,qBAAqB,EACrB,YAAY,EACZ,YAAY,GACb,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAGzE,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACnF,YAAY,EACV,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,wBAAwB,EACxB,WAAW,EACX,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -7,6 +7,9 @@ export { FilesystemService } from './services/index.js';
7
7
  // Helpers
8
8
  export { QualityMetricsCalculator } from './helpers/QualityMetricsCalculator.js';
9
9
  export { toQualityMetrics, hasQualityMetrics, getAvailableLenses, getMissingLenses, getOverallQualityScore, generateLensRecommendations, } from './helpers/packageLayerHelpers.js';
10
+ export { detectWorkspaceCommand, groupPackagesByWorkspace, matchPathToPackage, prefixWithWorkspaceRoot, } from './helpers/WorkspaceCommandHelper.js';
11
+ // Strategies (multi-ecosystem tool detection)
12
+ export { getToolDetectionStrategy, getAllStrategies, isEcosystemSupported, packageTypeToEcosystem, nodeToolDetection, pythonToolDetection, goToolDetection, rustToolDetection, } from './strategies/index.js';
10
13
  // Adapters
11
14
  export { NodeFileSystemAdapter } from './adapters/NodeFileSystemAdapter.js';
12
15
  // Providers
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAiCrC,UAAU;AACV,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,0BAA0B,EAC1B,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,WAAW,CAAC;AAQnB,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD,WAAW;AACX,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,UAAU;AACV,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,+BAA+B,CAAC;AAEvC,WAAW;AACX,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,YAAY;AACZ,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAiCrC,UAAU;AACV,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,0BAA0B,EAC1B,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,WAAW,CAAC;AAQnB,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD,WAAW;AACX,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,UAAU;AACV,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAE9E,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,kCAAkC,CAAC;AAO1C,8CAA8C;AAC9C,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAYtB,WAAW;AACX,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,YAAY;AACZ,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"PackageLayerModule.d.ts","sourceRoot":"","sources":["../../src/modules/PackageLayerModule.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAChE,OAAO,EAAE,YAAY,EAA+E,MAAM,sBAAsB,CAAC;AACjI,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AA42BlE,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAIb;IAEF;;;;OAIG;IACG,gBAAgB,CACpB,QAAQ,EAAE,QAAQ,EAClB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAC7C,OAAO,CAAC,YAAY,EAAE,CAAC;IAiO1B;;OAEG;IACH,iCAAiC,CAAC,UAAU,EAAE,iBAAiB,EAAE,GAAG,YAAY,EAAE;IAgDlF,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,6BAA6B;IAwBrC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA4B7B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAsBlC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkCxB;;OAEG;IACH,OAAO,CAAC,aAAa;IA0BrB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiB7B;;OAEG;YACW,qBAAqB;IA4DnC;;OAEG;IACH,OAAO,CAAC,cAAc;IA0EtB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAwC5B;;;OAGG;IACH,OAAO,CAAC,uCAAuC;CA0DhD"}
1
+ {"version":3,"file":"PackageLayerModule.d.ts","sourceRoot":"","sources":["../../src/modules/PackageLayerModule.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAChE,OAAO,EAAE,YAAY,EAA+E,MAAM,sBAAsB,CAAC;AACjI,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AA2hClE,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAIb;IAEF;;;;OAIG;IACG,gBAAgB,CACpB,QAAQ,EAAE,QAAQ,EAClB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAC7C,OAAO,CAAC,YAAY,EAAE,CAAC;IA4O1B;;OAEG;IACH,iCAAiC,CAAC,UAAU,EAAE,iBAAiB,EAAE,GAAG,YAAY,EAAE;IAgDlF,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,6BAA6B;IAwBrC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA4B7B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAsBlC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkCxB;;OAEG;IACH,OAAO,CAAC,aAAa;IA0BrB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiB7B;;OAEG;YACW,qBAAqB;IA4DnC;;OAEG;IACH,OAAO,CAAC,cAAc;IA0EtB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAwC5B;;;OAGG;IACH,OAAO,CAAC,uCAAuC;CAoEhD"}