@principal-ai/codebase-composition 0.2.22 → 0.2.25
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/helpers/QualityMetricsCalculator.d.ts +26 -7
- package/dist/helpers/QualityMetricsCalculator.d.ts.map +1 -1
- package/dist/helpers/QualityMetricsCalculator.js +149 -107
- package/dist/helpers/QualityMetricsCalculator.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/modules/PackageLayerModule.d.ts.map +1 -1
- package/dist/modules/PackageLayerModule.js +169 -3
- package/dist/modules/PackageLayerModule.js.map +1 -1
- package/dist/strategies/go-tools.d.ts +27 -0
- package/dist/strategies/go-tools.d.ts.map +1 -0
- package/dist/strategies/go-tools.js +184 -0
- package/dist/strategies/go-tools.js.map +1 -0
- package/dist/strategies/index.d.ts +37 -0
- package/dist/strategies/index.d.ts.map +1 -0
- package/dist/strategies/index.js +73 -0
- package/dist/strategies/index.js.map +1 -0
- package/dist/strategies/node-tools.d.ts +21 -0
- package/dist/strategies/node-tools.d.ts.map +1 -0
- package/dist/strategies/node-tools.js +141 -0
- package/dist/strategies/node-tools.js.map +1 -0
- package/dist/strategies/python-tools.d.ts +25 -0
- package/dist/strategies/python-tools.d.ts.map +1 -0
- package/dist/strategies/python-tools.js +191 -0
- package/dist/strategies/python-tools.js.map +1 -0
- package/dist/strategies/rust-tools.d.ts +23 -0
- package/dist/strategies/rust-tools.d.ts.map +1 -0
- package/dist/strategies/rust-tools.js +176 -0
- package/dist/strategies/rust-tools.js.map +1 -0
- package/dist/strategies/tool-detection.d.ts +137 -0
- package/dist/strategies/tool-detection.d.ts.map +1 -0
- package/dist/strategies/tool-detection.js +13 -0
- package/dist/strategies/tool-detection.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Detection Strategies
|
|
3
|
+
*
|
|
4
|
+
* This module provides ecosystem-specific tool detection for:
|
|
5
|
+
* - Node.js/npm
|
|
6
|
+
* - Python (pip, poetry, uv)
|
|
7
|
+
* - Go
|
|
8
|
+
* - Rust (cargo, rustup)
|
|
9
|
+
*
|
|
10
|
+
* Each strategy knows how to:
|
|
11
|
+
* - Detect if a tool is available in a package
|
|
12
|
+
* - Generate appropriate install instructions
|
|
13
|
+
* - Provide default commands to run tools
|
|
14
|
+
*/
|
|
15
|
+
export * from './tool-detection';
|
|
16
|
+
export { NodeToolDetection, nodeToolDetection } from './node-tools';
|
|
17
|
+
export { PythonToolDetection, pythonToolDetection } from './python-tools';
|
|
18
|
+
export { GoToolDetection, goToolDetection } from './go-tools';
|
|
19
|
+
export { RustToolDetection, rustToolDetection } from './rust-tools';
|
|
20
|
+
import type { Ecosystem, ToolDetectionStrategy } from './tool-detection';
|
|
21
|
+
/**
|
|
22
|
+
* Get the tool detection strategy for an ecosystem
|
|
23
|
+
*/
|
|
24
|
+
export declare function getToolDetectionStrategy(ecosystem: Ecosystem): ToolDetectionStrategy;
|
|
25
|
+
/**
|
|
26
|
+
* Get all registered tool detection strategies
|
|
27
|
+
*/
|
|
28
|
+
export declare function getAllStrategies(): ToolDetectionStrategy[];
|
|
29
|
+
/**
|
|
30
|
+
* Check if an ecosystem is supported
|
|
31
|
+
*/
|
|
32
|
+
export declare function isEcosystemSupported(ecosystem: string): ecosystem is Ecosystem;
|
|
33
|
+
/**
|
|
34
|
+
* Map package layer types to ecosystems
|
|
35
|
+
*/
|
|
36
|
+
export declare function packageTypeToEcosystem(packageType: 'package' | 'node' | 'python' | 'cargo' | 'go'): Ecosystem;
|
|
37
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/strategies/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEpE,OAAO,KAAK,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAgBzE;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,SAAS,GAAG,qBAAqB,CAMpF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,qBAAqB,EAAE,CAE1D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,IAAI,SAAS,CAE9E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,IAAI,GAC1D,SAAS,CAcX"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Detection Strategies
|
|
3
|
+
*
|
|
4
|
+
* This module provides ecosystem-specific tool detection for:
|
|
5
|
+
* - Node.js/npm
|
|
6
|
+
* - Python (pip, poetry, uv)
|
|
7
|
+
* - Go
|
|
8
|
+
* - Rust (cargo, rustup)
|
|
9
|
+
*
|
|
10
|
+
* Each strategy knows how to:
|
|
11
|
+
* - Detect if a tool is available in a package
|
|
12
|
+
* - Generate appropriate install instructions
|
|
13
|
+
* - Provide default commands to run tools
|
|
14
|
+
*/
|
|
15
|
+
export * from './tool-detection.js';
|
|
16
|
+
export { NodeToolDetection, nodeToolDetection } from './node-tools.js';
|
|
17
|
+
export { PythonToolDetection, pythonToolDetection } from './python-tools.js';
|
|
18
|
+
export { GoToolDetection, goToolDetection } from './go-tools.js';
|
|
19
|
+
export { RustToolDetection, rustToolDetection } from './rust-tools.js';
|
|
20
|
+
import { nodeToolDetection } from './node-tools.js';
|
|
21
|
+
import { pythonToolDetection } from './python-tools.js';
|
|
22
|
+
import { goToolDetection } from './go-tools.js';
|
|
23
|
+
import { rustToolDetection } from './rust-tools.js';
|
|
24
|
+
/**
|
|
25
|
+
* Registry of all available tool detection strategies
|
|
26
|
+
*/
|
|
27
|
+
const strategyRegistry = {
|
|
28
|
+
node: nodeToolDetection,
|
|
29
|
+
python: pythonToolDetection,
|
|
30
|
+
go: goToolDetection,
|
|
31
|
+
rust: rustToolDetection,
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Get the tool detection strategy for an ecosystem
|
|
35
|
+
*/
|
|
36
|
+
export function getToolDetectionStrategy(ecosystem) {
|
|
37
|
+
const strategy = strategyRegistry[ecosystem];
|
|
38
|
+
if (!strategy) {
|
|
39
|
+
throw new Error(`No tool detection strategy found for ecosystem: ${ecosystem}`);
|
|
40
|
+
}
|
|
41
|
+
return strategy;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Get all registered tool detection strategies
|
|
45
|
+
*/
|
|
46
|
+
export function getAllStrategies() {
|
|
47
|
+
return Object.values(strategyRegistry);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Check if an ecosystem is supported
|
|
51
|
+
*/
|
|
52
|
+
export function isEcosystemSupported(ecosystem) {
|
|
53
|
+
return ecosystem in strategyRegistry;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Map package layer types to ecosystems
|
|
57
|
+
*/
|
|
58
|
+
export function packageTypeToEcosystem(packageType) {
|
|
59
|
+
switch (packageType) {
|
|
60
|
+
case 'node':
|
|
61
|
+
case 'package':
|
|
62
|
+
return 'node';
|
|
63
|
+
case 'python':
|
|
64
|
+
return 'python';
|
|
65
|
+
case 'cargo':
|
|
66
|
+
return 'rust';
|
|
67
|
+
case 'go':
|
|
68
|
+
return 'go';
|
|
69
|
+
default:
|
|
70
|
+
return 'node'; // Default to node for unknown types
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/strategies/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD;;GAEG;AACH,MAAM,gBAAgB,GAA6C;IACjE,IAAI,EAAE,iBAAiB;IACvB,MAAM,EAAE,mBAAmB;IAC3B,EAAE,EAAE,eAAe;IACnB,IAAI,EAAE,iBAAiB;CACxB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,SAAoB;IAC3D,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,mDAAmD,SAAS,EAAE,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD,OAAO,SAAS,IAAI,gBAAgB,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,WAA2D;IAE3D,QAAQ,WAAW,EAAE,CAAC;QACpB,KAAK,MAAM,CAAC;QACZ,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC;QAChB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB,KAAK,OAAO;YACV,OAAO,MAAM,CAAC;QAChB,KAAK,IAAI;YACP,OAAO,IAAI,CAAC;QACd;YACE,OAAO,MAAM,CAAC,CAAC,oCAAoC;IACvD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node.js/npm Tool Detection Strategy
|
|
3
|
+
*
|
|
4
|
+
* Handles detection for the Node.js ecosystem:
|
|
5
|
+
* - Tools are installed as devDependencies in package.json
|
|
6
|
+
* - Scripts are defined in package.json "scripts" field
|
|
7
|
+
* - Config files are standalone or inline in package.json
|
|
8
|
+
*/
|
|
9
|
+
import type { ConfigFile } from '../types/layer-types';
|
|
10
|
+
import type { ToolDetectionStrategy, PackageData, ToolAvailability, InstallInstruction } from './tool-detection';
|
|
11
|
+
export declare class NodeToolDetection implements ToolDetectionStrategy {
|
|
12
|
+
ecosystem: "node";
|
|
13
|
+
displayName: string;
|
|
14
|
+
detectToolAvailability(toolId: string, packageData: PackageData, configFiles: Record<string, ConfigFile | undefined>): ToolAvailability;
|
|
15
|
+
getInstallInstructions(toolId: string, packageManager?: string): InstallInstruction;
|
|
16
|
+
getDefaultCommand(toolId: string): string;
|
|
17
|
+
isToolchainTool(_toolId: string): boolean;
|
|
18
|
+
getToolIdFromPackage(packageName: string): string[];
|
|
19
|
+
}
|
|
20
|
+
export declare const nodeToolDetection: NodeToolDetection;
|
|
21
|
+
//# sourceMappingURL=node-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-tools.d.ts","sourceRoot":"","sources":["../../src/strategies/node-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EACV,qBAAqB,EACrB,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAEnB,MAAM,kBAAkB,CAAC;AAqF1B,qBAAa,iBAAkB,YAAW,qBAAqB;IAC7D,SAAS,EAAG,MAAM,CAAU;IAC5B,WAAW,SAAa;IAExB,sBAAsB,CACpB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC,GAClD,gBAAgB;IA2BnB,sBAAsB,CACpB,MAAM,EAAE,MAAM,EACd,cAAc,GAAE,MAAc,GAC7B,kBAAkB;IAkBrB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAKzC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKzC,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE;CAGpD;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node.js/npm Tool Detection Strategy
|
|
3
|
+
*
|
|
4
|
+
* Handles detection for the Node.js ecosystem:
|
|
5
|
+
* - Tools are installed as devDependencies in package.json
|
|
6
|
+
* - Scripts are defined in package.json "scripts" field
|
|
7
|
+
* - Config files are standalone or inline in package.json
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Tool metadata for Node.js ecosystem
|
|
11
|
+
*/
|
|
12
|
+
const NODE_TOOLS = {
|
|
13
|
+
eslint: {
|
|
14
|
+
toolId: 'eslint',
|
|
15
|
+
displayName: 'ESLint',
|
|
16
|
+
packageName: 'eslint',
|
|
17
|
+
configPatterns: ['eslint.config.js', 'eslint.config.mjs', 'eslint.config.cjs', '.eslintrc.*'],
|
|
18
|
+
defaultCommand: 'eslint .',
|
|
19
|
+
minVersion: '9.0.0',
|
|
20
|
+
},
|
|
21
|
+
typescript: {
|
|
22
|
+
toolId: 'typescript',
|
|
23
|
+
displayName: 'TypeScript',
|
|
24
|
+
packageName: 'typescript',
|
|
25
|
+
configPatterns: ['tsconfig.json', 'tsconfig.*.json'],
|
|
26
|
+
defaultCommand: 'tsc --noEmit',
|
|
27
|
+
minVersion: '5.0.0',
|
|
28
|
+
},
|
|
29
|
+
prettier: {
|
|
30
|
+
toolId: 'prettier',
|
|
31
|
+
displayName: 'Prettier',
|
|
32
|
+
packageName: 'prettier',
|
|
33
|
+
configPatterns: ['.prettierrc', '.prettierrc.*', 'prettier.config.*'],
|
|
34
|
+
defaultCommand: 'prettier --check .',
|
|
35
|
+
minVersion: '3.0.0',
|
|
36
|
+
},
|
|
37
|
+
jest: {
|
|
38
|
+
toolId: 'jest',
|
|
39
|
+
displayName: 'Jest',
|
|
40
|
+
packageName: 'jest',
|
|
41
|
+
configPatterns: ['jest.config.*'],
|
|
42
|
+
defaultCommand: 'jest',
|
|
43
|
+
minVersion: '29.0.0',
|
|
44
|
+
},
|
|
45
|
+
vitest: {
|
|
46
|
+
toolId: 'vitest',
|
|
47
|
+
displayName: 'Vitest',
|
|
48
|
+
packageName: 'vitest',
|
|
49
|
+
configPatterns: ['vitest.config.*', 'vite.config.*'],
|
|
50
|
+
defaultCommand: 'vitest run',
|
|
51
|
+
minVersion: '1.0.0',
|
|
52
|
+
},
|
|
53
|
+
'bun-test': {
|
|
54
|
+
toolId: 'bun-test',
|
|
55
|
+
displayName: 'Bun Test',
|
|
56
|
+
packageName: 'bun', // Part of bun itself
|
|
57
|
+
configPatterns: ['bunfig.toml'],
|
|
58
|
+
defaultCommand: 'bun test',
|
|
59
|
+
},
|
|
60
|
+
knip: {
|
|
61
|
+
toolId: 'knip',
|
|
62
|
+
displayName: 'Knip',
|
|
63
|
+
packageName: 'knip',
|
|
64
|
+
configPatterns: ['knip.json', 'knip.jsonc', 'knip.ts', 'knip.config.ts'],
|
|
65
|
+
defaultCommand: 'knip',
|
|
66
|
+
minVersion: '5.0.0',
|
|
67
|
+
},
|
|
68
|
+
biome: {
|
|
69
|
+
toolId: 'biome',
|
|
70
|
+
displayName: 'Biome',
|
|
71
|
+
packageName: '@biomejs/biome',
|
|
72
|
+
configPatterns: ['biome.json', 'biome.jsonc'],
|
|
73
|
+
defaultCommand: 'biome check .',
|
|
74
|
+
minVersion: '1.0.0',
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Package name to tool ID mapping (for when package name differs)
|
|
79
|
+
*/
|
|
80
|
+
const PACKAGE_TO_TOOL = {
|
|
81
|
+
'@biomejs/biome': ['biome', 'biome-lint', 'biome-format'],
|
|
82
|
+
'typescript': ['typescript'],
|
|
83
|
+
'eslint': ['eslint'],
|
|
84
|
+
'prettier': ['prettier'],
|
|
85
|
+
'jest': ['jest'],
|
|
86
|
+
'vitest': ['vitest'],
|
|
87
|
+
'knip': ['knip'],
|
|
88
|
+
'bun': ['bun-test'],
|
|
89
|
+
};
|
|
90
|
+
export class NodeToolDetection {
|
|
91
|
+
ecosystem = 'node';
|
|
92
|
+
displayName = 'Node.js';
|
|
93
|
+
detectToolAvailability(toolId, packageData, configFiles) {
|
|
94
|
+
const tool = NODE_TOOLS[toolId];
|
|
95
|
+
// Check if package is in dependencies
|
|
96
|
+
const allDeps = { ...packageData.dependencies, ...packageData.devDependencies };
|
|
97
|
+
const packageName = tool?.packageName ?? toolId;
|
|
98
|
+
const version = allDeps[packageName];
|
|
99
|
+
const installed = !!version;
|
|
100
|
+
// Check if config exists
|
|
101
|
+
const configFile = configFiles[toolId];
|
|
102
|
+
const configured = configFile?.exists ?? false;
|
|
103
|
+
// Check if there's a script to run this tool
|
|
104
|
+
const hasRunCommand = packageData.commands.some(cmd => cmd.lensId === toolId || cmd.name === toolId);
|
|
105
|
+
return {
|
|
106
|
+
installed,
|
|
107
|
+
configured,
|
|
108
|
+
hasRunCommand,
|
|
109
|
+
source: 'dependency',
|
|
110
|
+
version,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
getInstallInstructions(toolId, packageManager = 'npm') {
|
|
114
|
+
const tool = NODE_TOOLS[toolId];
|
|
115
|
+
const packageName = tool?.packageName ?? toolId;
|
|
116
|
+
const version = tool?.minVersion ? `@${tool.minVersion}` : '';
|
|
117
|
+
const commands = {
|
|
118
|
+
npm: `npm install -D ${packageName}${version}`,
|
|
119
|
+
yarn: `yarn add -D ${packageName}${version}`,
|
|
120
|
+
pnpm: `pnpm add -D ${packageName}${version}`,
|
|
121
|
+
bun: `bun add -d ${packageName}${version}`,
|
|
122
|
+
};
|
|
123
|
+
return {
|
|
124
|
+
command: commands[packageManager] ?? commands.npm,
|
|
125
|
+
alternatives: commands,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
getDefaultCommand(toolId) {
|
|
129
|
+
const tool = NODE_TOOLS[toolId];
|
|
130
|
+
return tool?.defaultCommand ?? toolId;
|
|
131
|
+
}
|
|
132
|
+
isToolchainTool(_toolId) {
|
|
133
|
+
// Node doesn't have built-in toolchain tools like Go or Rust
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
getToolIdFromPackage(packageName) {
|
|
137
|
+
return PACKAGE_TO_TOOL[packageName] ?? [packageName];
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
export const nodeToolDetection = new NodeToolDetection();
|
|
141
|
+
//# sourceMappingURL=node-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-tools.js","sourceRoot":"","sources":["../../src/strategies/node-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Python Tool Detection Strategy
|
|
3
|
+
*
|
|
4
|
+
* Handles detection for the Python ecosystem:
|
|
5
|
+
* - Tools can be in various dependency locations:
|
|
6
|
+
* - [tool.poetry.dev-dependencies] (Poetry)
|
|
7
|
+
* - [project.optional-dependencies] (PEP 621)
|
|
8
|
+
* - [tool.uv.dev-dependencies] (uv)
|
|
9
|
+
* - [dependency-groups] (PEP 735)
|
|
10
|
+
* - No standard script system (often uses Makefile or just CLI tools)
|
|
11
|
+
* - Config in pyproject.toml [tool.*] sections or standalone files
|
|
12
|
+
*/
|
|
13
|
+
import type { ConfigFile } from '../types/layer-types';
|
|
14
|
+
import type { ToolDetectionStrategy, PackageData, ToolAvailability, InstallInstruction } from './tool-detection';
|
|
15
|
+
export declare class PythonToolDetection implements ToolDetectionStrategy {
|
|
16
|
+
ecosystem: "python";
|
|
17
|
+
displayName: string;
|
|
18
|
+
detectToolAvailability(toolId: string, packageData: PackageData, configFiles: Record<string, ConfigFile | undefined>): ToolAvailability;
|
|
19
|
+
getInstallInstructions(toolId: string, packageManager?: string): InstallInstruction;
|
|
20
|
+
getDefaultCommand(toolId: string): string;
|
|
21
|
+
isToolchainTool(_toolId: string): boolean;
|
|
22
|
+
getToolIdFromPackage(packageName: string): string[];
|
|
23
|
+
}
|
|
24
|
+
export declare const pythonToolDetection: PythonToolDetection;
|
|
25
|
+
//# sourceMappingURL=python-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python-tools.d.ts","sourceRoot":"","sources":["../../src/strategies/python-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EACV,qBAAqB,EACrB,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAEnB,MAAM,kBAAkB,CAAC;AA0G1B,qBAAa,mBAAoB,YAAW,qBAAqB;IAC/D,SAAS,EAAG,QAAQ,CAAU;IAC9B,WAAW,SAAY;IAEvB,sBAAsB,CACpB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC,GAClD,gBAAgB;IAqDnB,sBAAsB,CACpB,MAAM,EAAE,MAAM,EACd,cAAc,GAAE,MAAc,GAC7B,kBAAkB;IAkBrB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAKzC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAMzC,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE;CAGpD;AAED,eAAO,MAAM,mBAAmB,qBAA4B,CAAC"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Python Tool Detection Strategy
|
|
3
|
+
*
|
|
4
|
+
* Handles detection for the Python ecosystem:
|
|
5
|
+
* - Tools can be in various dependency locations:
|
|
6
|
+
* - [tool.poetry.dev-dependencies] (Poetry)
|
|
7
|
+
* - [project.optional-dependencies] (PEP 621)
|
|
8
|
+
* - [tool.uv.dev-dependencies] (uv)
|
|
9
|
+
* - [dependency-groups] (PEP 735)
|
|
10
|
+
* - No standard script system (often uses Makefile or just CLI tools)
|
|
11
|
+
* - Config in pyproject.toml [tool.*] sections or standalone files
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Tool metadata for Python ecosystem
|
|
15
|
+
*/
|
|
16
|
+
const PYTHON_TOOLS = {
|
|
17
|
+
ruff: {
|
|
18
|
+
toolId: 'ruff',
|
|
19
|
+
displayName: 'Ruff',
|
|
20
|
+
packageName: 'ruff',
|
|
21
|
+
configPatterns: ['ruff.toml', '.ruff.toml'],
|
|
22
|
+
configAlternatives: ['pyproject.toml [tool.ruff]'],
|
|
23
|
+
defaultCommand: 'ruff check .',
|
|
24
|
+
minVersion: '0.8.0',
|
|
25
|
+
},
|
|
26
|
+
'ruff-format': {
|
|
27
|
+
toolId: 'ruff-format',
|
|
28
|
+
displayName: 'Ruff Format',
|
|
29
|
+
packageName: 'ruff',
|
|
30
|
+
configPatterns: ['ruff.toml', '.ruff.toml'],
|
|
31
|
+
configAlternatives: ['pyproject.toml [tool.ruff]'],
|
|
32
|
+
defaultCommand: 'ruff format .',
|
|
33
|
+
minVersion: '0.8.0',
|
|
34
|
+
},
|
|
35
|
+
mypy: {
|
|
36
|
+
toolId: 'mypy',
|
|
37
|
+
displayName: 'MyPy',
|
|
38
|
+
packageName: 'mypy',
|
|
39
|
+
configPatterns: ['mypy.ini', '.mypy.ini'],
|
|
40
|
+
configAlternatives: ['pyproject.toml [tool.mypy]', 'setup.cfg [mypy]'],
|
|
41
|
+
defaultCommand: 'mypy .',
|
|
42
|
+
minVersion: '1.0.0',
|
|
43
|
+
},
|
|
44
|
+
pyright: {
|
|
45
|
+
toolId: 'pyright',
|
|
46
|
+
displayName: 'Pyright',
|
|
47
|
+
packageName: 'pyright',
|
|
48
|
+
configPatterns: ['pyrightconfig.json'],
|
|
49
|
+
configAlternatives: ['pyproject.toml [tool.pyright]'],
|
|
50
|
+
defaultCommand: 'pyright',
|
|
51
|
+
minVersion: '1.1.0',
|
|
52
|
+
},
|
|
53
|
+
pytest: {
|
|
54
|
+
toolId: 'pytest',
|
|
55
|
+
displayName: 'Pytest',
|
|
56
|
+
packageName: 'pytest',
|
|
57
|
+
configPatterns: ['pytest.ini', 'conftest.py'],
|
|
58
|
+
configAlternatives: ['pyproject.toml [tool.pytest]', 'setup.cfg [tool:pytest]'],
|
|
59
|
+
defaultCommand: 'pytest',
|
|
60
|
+
minVersion: '8.0.0',
|
|
61
|
+
},
|
|
62
|
+
black: {
|
|
63
|
+
toolId: 'black',
|
|
64
|
+
displayName: 'Black',
|
|
65
|
+
packageName: 'black',
|
|
66
|
+
configPatterns: ['.black', 'black.toml'],
|
|
67
|
+
configAlternatives: ['pyproject.toml [tool.black]'],
|
|
68
|
+
defaultCommand: 'black --check .',
|
|
69
|
+
minVersion: '24.0.0',
|
|
70
|
+
},
|
|
71
|
+
isort: {
|
|
72
|
+
toolId: 'isort',
|
|
73
|
+
displayName: 'isort',
|
|
74
|
+
packageName: 'isort',
|
|
75
|
+
configPatterns: ['.isort.cfg', 'isort.cfg'],
|
|
76
|
+
configAlternatives: ['pyproject.toml [tool.isort]', 'setup.cfg [isort]'],
|
|
77
|
+
defaultCommand: 'isort --check .',
|
|
78
|
+
minVersion: '5.0.0',
|
|
79
|
+
},
|
|
80
|
+
flake8: {
|
|
81
|
+
toolId: 'flake8',
|
|
82
|
+
displayName: 'Flake8',
|
|
83
|
+
packageName: 'flake8',
|
|
84
|
+
configPatterns: ['.flake8', 'flake8.ini'],
|
|
85
|
+
configAlternatives: ['setup.cfg [flake8]'],
|
|
86
|
+
defaultCommand: 'flake8 .',
|
|
87
|
+
},
|
|
88
|
+
pylint: {
|
|
89
|
+
toolId: 'pylint',
|
|
90
|
+
displayName: 'Pylint',
|
|
91
|
+
packageName: 'pylint',
|
|
92
|
+
configPatterns: ['.pylintrc', 'pylintrc', 'pylint.toml'],
|
|
93
|
+
configAlternatives: ['pyproject.toml [tool.pylint]'],
|
|
94
|
+
defaultCommand: 'pylint .',
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Package name to tool ID mapping
|
|
99
|
+
*/
|
|
100
|
+
const PACKAGE_TO_TOOL = {
|
|
101
|
+
ruff: ['ruff', 'ruff-format'],
|
|
102
|
+
mypy: ['mypy'],
|
|
103
|
+
pyright: ['pyright'],
|
|
104
|
+
pytest: ['pytest'],
|
|
105
|
+
black: ['black'],
|
|
106
|
+
isort: ['isort'],
|
|
107
|
+
flake8: ['flake8'],
|
|
108
|
+
pylint: ['pylint'],
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* Common dev dependency group names in Python projects
|
|
112
|
+
*/
|
|
113
|
+
const DEV_GROUP_NAMES = ['dev', 'development', 'test', 'testing', 'lint', 'linting', 'dev-dependencies'];
|
|
114
|
+
export class PythonToolDetection {
|
|
115
|
+
ecosystem = 'python';
|
|
116
|
+
displayName = 'Python';
|
|
117
|
+
detectToolAvailability(toolId, packageData, configFiles) {
|
|
118
|
+
const tool = PYTHON_TOOLS[toolId];
|
|
119
|
+
const packageName = tool?.packageName ?? toolId;
|
|
120
|
+
// Check all possible dependency locations
|
|
121
|
+
let installed = false;
|
|
122
|
+
let version;
|
|
123
|
+
let source = 'dependency';
|
|
124
|
+
// Check main dependencies
|
|
125
|
+
if (packageData.dependencies[packageName]) {
|
|
126
|
+
installed = true;
|
|
127
|
+
version = packageData.dependencies[packageName];
|
|
128
|
+
}
|
|
129
|
+
// Check dev dependencies (populated by Poetry dev-dependencies)
|
|
130
|
+
if (!installed && packageData.devDependencies[packageName]) {
|
|
131
|
+
installed = true;
|
|
132
|
+
version = packageData.devDependencies[packageName];
|
|
133
|
+
source = 'dev-group';
|
|
134
|
+
}
|
|
135
|
+
// Check dependency groups (PEP 621 optional-dependencies, uv dev-dependencies)
|
|
136
|
+
if (!installed && packageData.dependencyGroups) {
|
|
137
|
+
for (const groupName of DEV_GROUP_NAMES) {
|
|
138
|
+
const group = packageData.dependencyGroups[groupName];
|
|
139
|
+
if (group && group[packageName]) {
|
|
140
|
+
installed = true;
|
|
141
|
+
version = group[packageName];
|
|
142
|
+
source = 'dev-group';
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// Check if config exists
|
|
148
|
+
const configFile = configFiles[toolId];
|
|
149
|
+
const configured = configFile?.exists ?? false;
|
|
150
|
+
// Python tools typically don't need explicit scripts - they're just CLI commands
|
|
151
|
+
// If installed, they can be run directly
|
|
152
|
+
const hasRunCommand = installed;
|
|
153
|
+
return {
|
|
154
|
+
installed,
|
|
155
|
+
configured,
|
|
156
|
+
hasRunCommand,
|
|
157
|
+
source,
|
|
158
|
+
version,
|
|
159
|
+
details: source === 'dev-group' ? 'Found in dev dependency group' : undefined,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
getInstallInstructions(toolId, packageManager = 'pip') {
|
|
163
|
+
const tool = PYTHON_TOOLS[toolId];
|
|
164
|
+
const packageName = tool?.packageName ?? toolId;
|
|
165
|
+
const commands = {
|
|
166
|
+
pip: `pip install ${packageName}`,
|
|
167
|
+
uv: `uv add --dev ${packageName}`,
|
|
168
|
+
poetry: `poetry add --group dev ${packageName}`,
|
|
169
|
+
pipenv: `pipenv install --dev ${packageName}`,
|
|
170
|
+
};
|
|
171
|
+
return {
|
|
172
|
+
command: commands[packageManager] ?? commands.pip,
|
|
173
|
+
alternatives: commands,
|
|
174
|
+
notes: 'Install in your virtual environment or use a tool like uv for isolated installs',
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
getDefaultCommand(toolId) {
|
|
178
|
+
const tool = PYTHON_TOOLS[toolId];
|
|
179
|
+
return tool?.defaultCommand ?? toolId;
|
|
180
|
+
}
|
|
181
|
+
isToolchainTool(_toolId) {
|
|
182
|
+
// Python doesn't have built-in quality tools like Go or Rust
|
|
183
|
+
// (unless you count the ast module, but that's not a standalone tool)
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
getToolIdFromPackage(packageName) {
|
|
187
|
+
return PACKAGE_TO_TOOL[packageName] ?? [packageName];
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
export const pythonToolDetection = new PythonToolDetection();
|
|
191
|
+
//# sourceMappingURL=python-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python-tools.js","sourceRoot":"","sources":["../../src/strategies/python-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rust Tool Detection Strategy
|
|
3
|
+
*
|
|
4
|
+
* Handles detection for the Rust ecosystem:
|
|
5
|
+
* - clippy and rustfmt are rustup components (part of toolchain)
|
|
6
|
+
* - cargo test is built into Cargo
|
|
7
|
+
* - Some tools are cargo-installed binaries (cargo-nextest, cargo-llvm-cov)
|
|
8
|
+
* - Some are dev-dependencies in Cargo.toml [dev-dependencies]
|
|
9
|
+
* - Config in rustfmt.toml, clippy.toml, or Cargo.toml sections
|
|
10
|
+
*/
|
|
11
|
+
import type { ConfigFile } from '../types/layer-types';
|
|
12
|
+
import type { ToolDetectionStrategy, PackageData, ToolAvailability, InstallInstruction } from './tool-detection';
|
|
13
|
+
export declare class RustToolDetection implements ToolDetectionStrategy {
|
|
14
|
+
ecosystem: "rust";
|
|
15
|
+
displayName: string;
|
|
16
|
+
detectToolAvailability(toolId: string, packageData: PackageData, configFiles: Record<string, ConfigFile | undefined>): ToolAvailability;
|
|
17
|
+
getInstallInstructions(toolId: string, _packageManager?: string): InstallInstruction;
|
|
18
|
+
getDefaultCommand(toolId: string): string;
|
|
19
|
+
isToolchainTool(toolId: string): boolean;
|
|
20
|
+
getToolIdFromPackage(packageName: string): string[];
|
|
21
|
+
}
|
|
22
|
+
export declare const rustToolDetection: RustToolDetection;
|
|
23
|
+
//# sourceMappingURL=rust-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rust-tools.d.ts","sourceRoot":"","sources":["../../src/strategies/rust-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EACV,qBAAqB,EACrB,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAEnB,MAAM,kBAAkB,CAAC;AA6E1B,qBAAa,iBAAkB,YAAW,qBAAqB;IAC7D,SAAS,EAAG,MAAM,CAAU;IAC5B,WAAW,SAAU;IAErB,sBAAsB,CACpB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC,GAClD,gBAAgB;IA0DnB,sBAAsB,CACpB,MAAM,EAAE,MAAM,EACd,eAAe,CAAC,EAAE,MAAM,GACvB,kBAAkB;IA4BrB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAKzC,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAIxC,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE;CASpD;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
|