@mcptoolshop/venvkit 0.2.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.es.md +274 -0
- package/README.fr.md +274 -0
- package/README.hi.md +274 -0
- package/README.it.md +274 -0
- package/README.ja.md +274 -0
- package/README.md +27 -2
- package/README.pt-BR.md +274 -0
- package/README.zh.md +274 -0
- package/dist/integration.test.d.ts +2 -0
- package/dist/integration.test.d.ts.map +1 -0
- package/dist/integration.test.js +245 -0
- package/dist/integration.test.js.map +1 -0
- package/dist/mapRender.test.js +101 -0
- package/dist/mapRender.test.js.map +1 -1
- package/dist/map_cli.test.d.ts +2 -0
- package/dist/map_cli.test.d.ts.map +1 -0
- package/dist/map_cli.test.js +320 -0
- package/dist/map_cli.test.js.map +1 -0
- package/dist/runLog.test.js +167 -0
- package/dist/runLog.test.js.map +1 -1
- package/dist/scanEnvPaths.d.ts.map +1 -1
- package/dist/scanEnvPaths.js +7 -4
- package/dist/scanEnvPaths.js.map +1 -1
- package/dist/scanEnvPaths.test.d.ts +2 -0
- package/dist/scanEnvPaths.test.d.ts.map +1 -0
- package/dist/scanEnvPaths.test.js +250 -0
- package/dist/scanEnvPaths.test.js.map +1 -0
- package/dist/taskCluster.test.js +84 -0
- package/dist/taskCluster.test.js.map +1 -1
- package/dist/vitest.config.d.ts.map +1 -1
- package/dist/vitest.config.js +18 -0
- package/dist/vitest.config.js.map +1 -1
- package/dist/windows.test.d.ts +6 -0
- package/dist/windows.test.d.ts.map +1 -0
- package/dist/windows.test.js +121 -0
- package/dist/windows.test.js.map +1 -0
- package/package.json +11 -6
package/README.hi.md
ADDED
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="README.ja.md">日本語</a> | <a href="README.zh.md">中文</a> | <a href="README.es.md">Español</a> | <a href="README.fr.md">Français</a> | <a href="README.md">English</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português (BR)</a>
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
<img src="https://raw.githubusercontent.com/mcp-tool-shop-org/brand/main/logos/venvkit/readme.png" alt="venvkit" width="400">
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
# venvkit
|
|
10
|
+
|
|
11
|
+
> [MCP Tool Shop](https://mcptoolshop.com) का हिस्सा
|
|
12
|
+
|
|
13
|
+
<p align="center">
|
|
14
|
+
<a href="https://github.com/mcp-tool-shop-org/venvkit/actions/workflows/ci.yml"><img src="https://github.com/mcp-tool-shop-org/venvkit/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
15
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square" alt="License: MIT"></a>
|
|
16
|
+
<a href="https://mcp-tool-shop-org.github.io/venvkit/"><img src="https://img.shields.io/badge/Landing_Page-live-blue?style=flat-square" alt="Landing Page"></a>
|
|
17
|
+
<a href="https://www.npmjs.com/package/@mcptoolshop/venvkit"><img src="https://img.shields.io/npm/v/@mcptoolshop/venvkit?style=flat-square&color=cb3837" alt="npm version"></a>
|
|
18
|
+
</p>
|
|
19
|
+
|
|
20
|
+
**विंडोज एमएल वर्कफ़्लो के लिए पायथन वर्चुअल एनवायरनमेंट डायग्नोस्टिक टूलकिट।**
|
|
21
|
+
|
|
22
|
+
यह आपके सिस्टम में पायथन एनवायरनमेंट की जांच करता है, स्वास्थ्य संबंधी समस्याओं (एसएसएल, डीएलएल, एबीआई मिसमैच, पाथ लीकेज) का निदान करता है, टास्क निष्पादन इतिहास को ट्रैक करता है, अस्थिर टास्क का पता लगाता है, और एक इकोसिस्टम मैप प्रदर्शित करता है।
|
|
23
|
+
|
|
24
|
+
## 30 सेकंड में शुरुआत
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
git clone https://github.com/mcp-tool-shop-org/venvkit && cd venvkit
|
|
28
|
+
npm install && npm run build
|
|
29
|
+
node dist/map_cli.js --root C:\projects --httpsProbe
|
|
30
|
+
# Open .venvkit/venv-map.html in your browser
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## विशेषताएं
|
|
34
|
+
|
|
35
|
+
- **doctorLite** - किसी भी पायथन इंटरप्रेटर के लिए त्वरित स्वास्थ्य जांच
|
|
36
|
+
- एसएसएल/टीएलएस सत्यापन
|
|
37
|
+
- डीएलएल लोड विफलता (पायटॉर्च/CUDA के साथ आम)
|
|
38
|
+
- एबीआई मिसमैच (एआरएम बनाम x86)
|
|
39
|
+
- पिप की जांच
|
|
40
|
+
- यूजर-साइट और PYTHONPATH का पता लगाना
|
|
41
|
+
|
|
42
|
+
- **scanEnvPaths** - आपके सिस्टम में सभी पायथन एनवायरनमेंट खोजें
|
|
43
|
+
- वर्चुअल एनवायरनमेंट, कोंडा एनवायरनमेंट, पायएनव संस्करण, बेस इंटरप्रेटर खोजता है
|
|
44
|
+
- कॉन्फ़िगर करने योग्य गहराई और फ़िल्टरिंग
|
|
45
|
+
|
|
46
|
+
- **mapRender** - अपने पायथन इकोसिस्टम को विज़ुअलाइज करें
|
|
47
|
+
- प्रोग्रामेटिक उपयोग के लिए ग्राफ JSON आउटपुट
|
|
48
|
+
- दस्तावेज़ों के लिए मर्मेड आरेख
|
|
49
|
+
- बेस इंटरप्रेटर का समूहीकरण और ब्लास्ट रेडियस विश्लेषण
|
|
50
|
+
- टास्क रूटिंग विज़ुअलाइज़ेशन
|
|
51
|
+
|
|
52
|
+
- **runLog** - टास्क निष्पादन इतिहास को ट्रैक करें
|
|
53
|
+
- केवल अपेंड करने योग्य JSONL प्रारूप
|
|
54
|
+
- रिकॉर्ड करता है कि कौन सा एनवायरनमेंट कौन सा टास्क चला रहा था
|
|
55
|
+
- सफलता/विफलता को त्रुटि वर्गीकरण के साथ रिकॉर्ड करता है
|
|
56
|
+
|
|
57
|
+
- **taskCluster** - हस्ताक्षर द्वारा टास्क रन को एकत्रित करें
|
|
58
|
+
- अस्थिर टास्क का पता लगाना (असंगत पास/फेल)
|
|
59
|
+
- एनवायरनमेंट-निर्भर अस्थिरता का पता लगाना
|
|
60
|
+
- विफलता हॉटस्पॉट की पहचान
|
|
61
|
+
- संचरण विश्लेषण (साझा मूल कारण)
|
|
62
|
+
|
|
63
|
+
## स्थापना
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
npm install
|
|
67
|
+
npm run build
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## सीएलआई उपयोग
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# Scan current directory and generate ecosystem map
|
|
74
|
+
node dist/map_cli.js
|
|
75
|
+
|
|
76
|
+
# Scan specific directories
|
|
77
|
+
node dist/map_cli.js --root C:\projects --root D:\ml-experiments
|
|
78
|
+
|
|
79
|
+
# Include task run history
|
|
80
|
+
node dist/map_cli.js --runlog .venvkit/runs.jsonl
|
|
81
|
+
|
|
82
|
+
# Output options
|
|
83
|
+
node dist/map_cli.js --out ./output --minScore 50 --strict --httpsProbe
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### सीएलआई विकल्प
|
|
87
|
+
|
|
88
|
+
| फ्लैग | विवरण |
|
|
89
|
+
|------|-------------|
|
|
90
|
+
| `--root, -r` | स्कैन करने के लिए डायरेक्टरी (एक से अधिक निर्दिष्ट कर सकते हैं) |
|
|
91
|
+
| `--out` | आउटपुट डायरेक्टरी (डिफ़ॉल्ट: `.venvkit`) |
|
|
92
|
+
| `--maxDepth` | स्कैन करने के लिए अधिकतम डायरेक्टरी गहराई (डिफ़ॉल्ट: 5) |
|
|
93
|
+
| `--strict` | सख्त मोड जांच सक्षम करें |
|
|
94
|
+
| `--httpsProbe` | एचटीटीपीएस कनेक्टिविटी का परीक्षण करें |
|
|
95
|
+
| `--minScore` | इस स्वास्थ्य स्कोर से नीचे के एनवायरनमेंट को फ़िल्टर करें |
|
|
96
|
+
| `--concurrency` | समानांतर जांच (डिफ़ॉल्ट: सीपीयू गणना) |
|
|
97
|
+
| `--runlog` | टास्क रन लॉग (JSONL) का पथ |
|
|
98
|
+
| `--no-tasks` | टास्क विज़ुअलाइज़ेशन को छोड़ें |
|
|
99
|
+
|
|
100
|
+
### आउटपुट
|
|
101
|
+
|
|
102
|
+
| फ़ाइल | विवरण |
|
|
103
|
+
|------|-------------|
|
|
104
|
+
| `venv-map.json` | पूरा ग्राफ डेटा (नोड्स, एज, सारांश) |
|
|
105
|
+
| `venv-map.mmd` | मर्मेड आरेख स्रोत |
|
|
106
|
+
| `venv-map.html` | इंटरैक्टिव दर्शक |
|
|
107
|
+
| `reports.json` | कच्चे doctorLite रिपोर्ट |
|
|
108
|
+
| `insights.json` | कार्रवाई योग्य सिफारिशें |
|
|
109
|
+
|
|
110
|
+
## प्रोग्रामेटिक उपयोग
|
|
111
|
+
|
|
112
|
+
```typescript
|
|
113
|
+
import { doctorLite, scanEnvPaths, mapRender, readRunLog } from 'venvkit';
|
|
114
|
+
|
|
115
|
+
// Check a specific Python
|
|
116
|
+
const report = await doctorLite({
|
|
117
|
+
pythonPath: 'C:\\project\\.venv\\Scripts\\python.exe',
|
|
118
|
+
requiredModules: ['torch', 'transformers'],
|
|
119
|
+
httpsProbe: true,
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
console.log(report.status); // 'good' | 'warn' | 'bad'
|
|
123
|
+
console.log(report.score); // 0-100
|
|
124
|
+
console.log(report.findings); // Array of issues
|
|
125
|
+
|
|
126
|
+
// Scan for all Python environments
|
|
127
|
+
const scan = await scanEnvPaths({
|
|
128
|
+
roots: ['C:\\projects'],
|
|
129
|
+
maxDepth: 5,
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
// Run doctorLite on all found environments
|
|
133
|
+
const reports = await Promise.all(
|
|
134
|
+
scan.pythonPaths.map(p => doctorLite({ pythonPath: p }))
|
|
135
|
+
);
|
|
136
|
+
|
|
137
|
+
// Load task execution history
|
|
138
|
+
const runs = await readRunLog('.venvkit/runs.jsonl');
|
|
139
|
+
|
|
140
|
+
// Generate ecosystem visualization
|
|
141
|
+
const { graph, mermaid, insights } = mapRender(reports, runs, {
|
|
142
|
+
taskMode: 'clustered', // 'none' | 'runs' | 'clustered'
|
|
143
|
+
includeHotEdgeLabels: true,
|
|
144
|
+
});
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## रन लॉग स्कीमा
|
|
148
|
+
|
|
149
|
+
JSONL फ़ाइल में घटनाओं को जोड़कर टास्क निष्पादन को ट्रैक करें:
|
|
150
|
+
|
|
151
|
+
```typescript
|
|
152
|
+
import { appendRunLog, newRunId } from 'venvkit';
|
|
153
|
+
|
|
154
|
+
await appendRunLog('.venvkit/runs.jsonl', {
|
|
155
|
+
version: '1.0',
|
|
156
|
+
runId: newRunId(),
|
|
157
|
+
at: new Date().toISOString(),
|
|
158
|
+
task: {
|
|
159
|
+
name: 'train',
|
|
160
|
+
command: 'python train.py --epochs 10',
|
|
161
|
+
requirements: { packages: ['torch', 'transformers'] },
|
|
162
|
+
},
|
|
163
|
+
selected: {
|
|
164
|
+
pythonPath: 'C:\\project\\.venv\\Scripts\\python.exe',
|
|
165
|
+
score: 95,
|
|
166
|
+
status: 'good',
|
|
167
|
+
},
|
|
168
|
+
outcome: {
|
|
169
|
+
ok: true,
|
|
170
|
+
exitCode: 0,
|
|
171
|
+
durationMs: 45000,
|
|
172
|
+
},
|
|
173
|
+
});
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## टास्क क्लस्टरिंग
|
|
177
|
+
|
|
178
|
+
जब आपके पास कई टास्क रन होते हैं, तो venvkit उन्हें हस्ताक्षर द्वारा समूहीकृत करता है:
|
|
179
|
+
|
|
180
|
+
```typescript
|
|
181
|
+
import { clusterRuns, isFlaky, getFailingEnvs } from 'venvkit';
|
|
182
|
+
|
|
183
|
+
const clusters = clusterRuns(runs);
|
|
184
|
+
|
|
185
|
+
for (const c of clusters) {
|
|
186
|
+
console.log(`${c.sig.name}: ${c.ok}/${c.runs} (${(c.successRate * 100).toFixed(0)}%)`);
|
|
187
|
+
|
|
188
|
+
if (isFlaky(c)) {
|
|
189
|
+
console.log(` WARNING: Flaky task!`);
|
|
190
|
+
const badEnvs = getFailingEnvs(c, 3);
|
|
191
|
+
console.log(` Failing most on: ${badEnvs.map(e => e.pythonPath).join(', ')}`);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## ग्राफ स्कीमा
|
|
197
|
+
|
|
198
|
+
`mapRender` आउटपुट एक स्थिर JSON स्कीमा का पालन करता है:
|
|
199
|
+
|
|
200
|
+
```typescript
|
|
201
|
+
type GraphJSONv1 = {
|
|
202
|
+
version: '1.0';
|
|
203
|
+
generatedAt: string;
|
|
204
|
+
host: { os: string; arch: string; hostname: string };
|
|
205
|
+
summary: {
|
|
206
|
+
envCount: number;
|
|
207
|
+
baseCount: number;
|
|
208
|
+
taskCount: number;
|
|
209
|
+
healthy: number;
|
|
210
|
+
warning: number;
|
|
211
|
+
broken: number;
|
|
212
|
+
runsPassed: number;
|
|
213
|
+
runsFailed: number;
|
|
214
|
+
topIssues: Array<{ code: string; count: number; hint: string }>;
|
|
215
|
+
};
|
|
216
|
+
nodes: GraphNode[];
|
|
217
|
+
edges: GraphEdge[];
|
|
218
|
+
};
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### नोड प्रकार
|
|
222
|
+
|
|
223
|
+
| प्रकार | विवरण |
|
|
224
|
+
|------|-------------|
|
|
225
|
+
| `base` | बेस पायथन इंटरप्रेटर (जैसे, `C:\Python311`) |
|
|
226
|
+
| `venv` | वर्चुअल एनवायरनमेंट |
|
|
227
|
+
| `task` | टास्क हस्ताक्षर (समूहीकृत रन) |
|
|
228
|
+
|
|
229
|
+
### एज प्रकार
|
|
230
|
+
|
|
231
|
+
| प्रकार | विवरण |
|
|
232
|
+
|------|-------------|
|
|
233
|
+
| `USES_BASE` | venv → बेस संबंध |
|
|
234
|
+
| `ROUTES_TASK_TO` | टास्क → एनवायरनमेंट रूटिंग |
|
|
235
|
+
| `FAILED_RUN` | टास्क → एनवायरनमेंट विफलता (मर्मेड में डैश) |
|
|
236
|
+
|
|
237
|
+
## खोज कोड
|
|
238
|
+
|
|
239
|
+
| कोड | गंभीरता | विवरण |
|
|
240
|
+
|------|----------|-------------|
|
|
241
|
+
| `SSL_BROKEN` | खराब | एसएसएल मॉड्यूल आयात करने में विफल रहता है |
|
|
242
|
+
| `CERT_STORE_FAIL` | चेतावनी | एचटीटीपीएस प्रमाणपत्र सत्यापन विफल रहता है |
|
|
243
|
+
| `DLL_LOAD_FAIL` | खराब | नेटिव एक्सटेंशन डीएलएल लोड करने में विफल रहता है |
|
|
244
|
+
| `ABI_MISMATCH` | खराब | बाइनरी असंगति (एआरएम/x86) |
|
|
245
|
+
| `PIP_MISSING` | चेतावनी | पिप उपलब्ध नहीं है |
|
|
246
|
+
| `PIP_CHECK_FAIL` | चेतावनी | निर्भरता संघर्ष का पता चला |
|
|
247
|
+
| `USER_SITE_LEAK` | चेतावनी | वर्चुअल एनवायरनमेंट में यूजर-साइट पैकेज सक्षम हैं |
|
|
248
|
+
| `PYTHONPATH_INJECTED` | चेतावनी | PYTHONPATH पर्यावरण चर सेट है |
|
|
249
|
+
| `ARCH_MISMATCH` | खराब | 64-बिट की आवश्यकता होने पर 32-बिट पायथन |
|
|
250
|
+
| `PYVENV_CFG_INVALID` | चेतावनी | टूटा हुआ या गुम pyvenv.cfg |
|
|
251
|
+
|
|
252
|
+
## विकास
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
npm install
|
|
256
|
+
npm run typecheck # Type check
|
|
257
|
+
npm run test # Run tests
|
|
258
|
+
npm run build # Build to dist/
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
## सुरक्षा और डेटा स्कोप
|
|
262
|
+
|
|
263
|
+
- **केवल पढ़ने की सुविधा वाला स्कैनिंग:** पायथन एग्जीक्यूटेबल फाइलें और pyvenv.cfg फाइलें पढ़ी जाती हैं, लेकिन उनमें कभी भी बदलाव नहीं किया जाता।
|
|
264
|
+
- **उप-प्रक्रियाएं:** यह `python` को नियंत्रित तर्कों के साथ चलाता है — कोई भी शेल निष्पादन नहीं होता।
|
|
265
|
+
- **नेटवर्क:** वैकल्पिक `--httpsProbe` विकल्प एसएसएल प्रमाणपत्रों का परीक्षण करता है — कोई अन्य आउटगोइंग अनुरोध नहीं होते।
|
|
266
|
+
- कोई भी डेटा एकत्र या भेजा नहीं जाता — पूर्ण नीति के लिए [SECURITY.md](SECURITY.md) देखें।
|
|
267
|
+
|
|
268
|
+
## लाइसेंस
|
|
269
|
+
|
|
270
|
+
एमआईटी
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
[MCP Tool Shop](https://mcp-tool-shop.github.io/) द्वारा निर्मित।
|
package/README.it.md
ADDED
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="README.ja.md">日本語</a> | <a href="README.zh.md">中文</a> | <a href="README.es.md">Español</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.md">English</a> | <a href="README.pt-BR.md">Português (BR)</a>
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
<img src="https://raw.githubusercontent.com/mcp-tool-shop-org/brand/main/logos/venvkit/readme.png" alt="venvkit" width="400">
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
# venvkit
|
|
10
|
+
|
|
11
|
+
> Parte di [MCP Tool Shop](https://mcptoolshop.com)
|
|
12
|
+
|
|
13
|
+
<p align="center">
|
|
14
|
+
<a href="https://github.com/mcp-tool-shop-org/venvkit/actions/workflows/ci.yml"><img src="https://github.com/mcp-tool-shop-org/venvkit/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
15
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square" alt="License: MIT"></a>
|
|
16
|
+
<a href="https://mcp-tool-shop-org.github.io/venvkit/"><img src="https://img.shields.io/badge/Landing_Page-live-blue?style=flat-square" alt="Landing Page"></a>
|
|
17
|
+
<a href="https://www.npmjs.com/package/@mcptoolshop/venvkit"><img src="https://img.shields.io/npm/v/@mcptoolshop/venvkit?style=flat-square&color=cb3837" alt="npm version"></a>
|
|
18
|
+
</p>
|
|
19
|
+
|
|
20
|
+
**Kit di strumenti diagnostici per ambienti virtuali Python per i flussi di lavoro di machine learning su Windows.**
|
|
21
|
+
|
|
22
|
+
Scansiona il sistema alla ricerca di ambienti Python, diagnostica problemi di salute (SSL, DLL, incompatibilità ABI, perdite di percorsi), tiene traccia della cronologia di esecuzione delle attività, rileva attività instabili e genera una mappa dell'ecosistema.
|
|
23
|
+
|
|
24
|
+
## Guida rapida
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
git clone https://github.com/mcp-tool-shop-org/venvkit && cd venvkit
|
|
28
|
+
npm install && npm run build
|
|
29
|
+
node dist/map_cli.js --root C:\projects --httpsProbe
|
|
30
|
+
# Open .venvkit/venv-map.html in your browser
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Funzionalità
|
|
34
|
+
|
|
35
|
+
- **doctorLite** - Controllo rapido dello stato di salute per qualsiasi interprete Python
|
|
36
|
+
- Verifica SSL/TLS
|
|
37
|
+
- Errori di caricamento delle DLL (comuni con PyTorch/CUDA)
|
|
38
|
+
- Incompatibilità ABI (ARM vs x86)
|
|
39
|
+
- Controlli di sanità di pip
|
|
40
|
+
- Rilevamento di perdite di user-site e PYTHONPATH
|
|
41
|
+
|
|
42
|
+
- **scanEnvPaths** - Scopri tutti gli ambienti Python presenti nel tuo sistema
|
|
43
|
+
- Trova venv, ambienti conda, versioni pyenv, interpreti di base
|
|
44
|
+
- Profondità e filtri configurabili
|
|
45
|
+
|
|
46
|
+
- **mapRender** - Visualizza il tuo ecosistema Python
|
|
47
|
+
- Output JSON per l'uso programmatico
|
|
48
|
+
- Diagrammi Mermaid per la documentazione
|
|
49
|
+
- Raggruppamento degli interpreti di base con analisi del raggio di impatto
|
|
50
|
+
- Visualizzazione del routing delle attività
|
|
51
|
+
|
|
52
|
+
- **runLog** - Tieni traccia della cronologia di esecuzione delle attività
|
|
53
|
+
- Formato JSONL solo per l'aggiunta
|
|
54
|
+
- Registra quale ambiente ha eseguito quale attività
|
|
55
|
+
- Cattura successo/fallimento con classificazione degli errori
|
|
56
|
+
|
|
57
|
+
- **taskCluster** - Aggrega le esecuzioni delle attività per firma
|
|
58
|
+
- Rilevamento di attività instabili (pass/fail inconsistenti)
|
|
59
|
+
- Rilevamento di instabilità dipendente dall'ambiente
|
|
60
|
+
- Identificazione dei punti critici di errore
|
|
61
|
+
- Analisi della contaminazione (cause radice condivise)
|
|
62
|
+
|
|
63
|
+
## Installazione
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
npm install
|
|
67
|
+
npm run build
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Utilizzo della CLI
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# Scan current directory and generate ecosystem map
|
|
74
|
+
node dist/map_cli.js
|
|
75
|
+
|
|
76
|
+
# Scan specific directories
|
|
77
|
+
node dist/map_cli.js --root C:\projects --root D:\ml-experiments
|
|
78
|
+
|
|
79
|
+
# Include task run history
|
|
80
|
+
node dist/map_cli.js --runlog .venvkit/runs.jsonl
|
|
81
|
+
|
|
82
|
+
# Output options
|
|
83
|
+
node dist/map_cli.js --out ./output --minScore 50 --strict --httpsProbe
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Opzioni della CLI
|
|
87
|
+
|
|
88
|
+
| Flag | Descrizione |
|
|
89
|
+
|------|-------------|
|
|
90
|
+
| `--root, -r` | Directory da scansionare (è possibile specificarne più di una) |
|
|
91
|
+
| `--out` | Directory di output (predefinito: `.venvkit`) |
|
|
92
|
+
| `--maxDepth` | Profondità massima della directory da scansionare (predefinito: 5) |
|
|
93
|
+
| `--strict` | Abilita i controlli in modalità rigorosa |
|
|
94
|
+
| `--httpsProbe` | Testa la connettività HTTPS |
|
|
95
|
+
| `--minScore` | Filtra gli ambienti con un punteggio di salute inferiore a questo valore |
|
|
96
|
+
| `--concurrency` | Controlli paralleli (predefinito: numero di core della CPU) |
|
|
97
|
+
| `--runlog` | Percorso del file di log delle esecuzioni delle attività (JSONL) |
|
|
98
|
+
| `--no-tasks` | Salta la visualizzazione delle attività |
|
|
99
|
+
|
|
100
|
+
### Output
|
|
101
|
+
|
|
102
|
+
| File | Descrizione |
|
|
103
|
+
|------|-------------|
|
|
104
|
+
| `venv-map.json` | Dati completi del grafico (nodi, archi, riepilogo) |
|
|
105
|
+
| `venv-map.mmd` | Codice sorgente del diagramma Mermaid |
|
|
106
|
+
| `venv-map.html` | Visualizzatore interattivo |
|
|
107
|
+
| `reports.json` | Report dettagliati di doctorLite |
|
|
108
|
+
| `insights.json` | Raccomandazioni attuabili |
|
|
109
|
+
|
|
110
|
+
## Utilizzo programmatico
|
|
111
|
+
|
|
112
|
+
```typescript
|
|
113
|
+
import { doctorLite, scanEnvPaths, mapRender, readRunLog } from 'venvkit';
|
|
114
|
+
|
|
115
|
+
// Check a specific Python
|
|
116
|
+
const report = await doctorLite({
|
|
117
|
+
pythonPath: 'C:\\project\\.venv\\Scripts\\python.exe',
|
|
118
|
+
requiredModules: ['torch', 'transformers'],
|
|
119
|
+
httpsProbe: true,
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
console.log(report.status); // 'good' | 'warn' | 'bad'
|
|
123
|
+
console.log(report.score); // 0-100
|
|
124
|
+
console.log(report.findings); // Array of issues
|
|
125
|
+
|
|
126
|
+
// Scan for all Python environments
|
|
127
|
+
const scan = await scanEnvPaths({
|
|
128
|
+
roots: ['C:\\projects'],
|
|
129
|
+
maxDepth: 5,
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
// Run doctorLite on all found environments
|
|
133
|
+
const reports = await Promise.all(
|
|
134
|
+
scan.pythonPaths.map(p => doctorLite({ pythonPath: p }))
|
|
135
|
+
);
|
|
136
|
+
|
|
137
|
+
// Load task execution history
|
|
138
|
+
const runs = await readRunLog('.venvkit/runs.jsonl');
|
|
139
|
+
|
|
140
|
+
// Generate ecosystem visualization
|
|
141
|
+
const { graph, mermaid, insights } = mapRender(reports, runs, {
|
|
142
|
+
taskMode: 'clustered', // 'none' | 'runs' | 'clustered'
|
|
143
|
+
includeHotEdgeLabels: true,
|
|
144
|
+
});
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## Schema del file di log
|
|
148
|
+
|
|
149
|
+
Tieni traccia delle esecuzioni delle attività aggiungendo eventi a un file JSONL:
|
|
150
|
+
|
|
151
|
+
```typescript
|
|
152
|
+
import { appendRunLog, newRunId } from 'venvkit';
|
|
153
|
+
|
|
154
|
+
await appendRunLog('.venvkit/runs.jsonl', {
|
|
155
|
+
version: '1.0',
|
|
156
|
+
runId: newRunId(),
|
|
157
|
+
at: new Date().toISOString(),
|
|
158
|
+
task: {
|
|
159
|
+
name: 'train',
|
|
160
|
+
command: 'python train.py --epochs 10',
|
|
161
|
+
requirements: { packages: ['torch', 'transformers'] },
|
|
162
|
+
},
|
|
163
|
+
selected: {
|
|
164
|
+
pythonPath: 'C:\\project\\.venv\\Scripts\\python.exe',
|
|
165
|
+
score: 95,
|
|
166
|
+
status: 'good',
|
|
167
|
+
},
|
|
168
|
+
outcome: {
|
|
169
|
+
ok: true,
|
|
170
|
+
exitCode: 0,
|
|
171
|
+
durationMs: 45000,
|
|
172
|
+
},
|
|
173
|
+
});
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## Raggruppamento delle attività
|
|
177
|
+
|
|
178
|
+
Quando si hanno molte esecuzioni di attività, venvkit le raggruppa per firma:
|
|
179
|
+
|
|
180
|
+
```typescript
|
|
181
|
+
import { clusterRuns, isFlaky, getFailingEnvs } from 'venvkit';
|
|
182
|
+
|
|
183
|
+
const clusters = clusterRuns(runs);
|
|
184
|
+
|
|
185
|
+
for (const c of clusters) {
|
|
186
|
+
console.log(`${c.sig.name}: ${c.ok}/${c.runs} (${(c.successRate * 100).toFixed(0)}%)`);
|
|
187
|
+
|
|
188
|
+
if (isFlaky(c)) {
|
|
189
|
+
console.log(` WARNING: Flaky task!`);
|
|
190
|
+
const badEnvs = getFailingEnvs(c, 3);
|
|
191
|
+
console.log(` Failing most on: ${badEnvs.map(e => e.pythonPath).join(', ')}`);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## Schema del grafico
|
|
197
|
+
|
|
198
|
+
L'output di `mapRender` segue uno schema JSON stabile:
|
|
199
|
+
|
|
200
|
+
```typescript
|
|
201
|
+
type GraphJSONv1 = {
|
|
202
|
+
version: '1.0';
|
|
203
|
+
generatedAt: string;
|
|
204
|
+
host: { os: string; arch: string; hostname: string };
|
|
205
|
+
summary: {
|
|
206
|
+
envCount: number;
|
|
207
|
+
baseCount: number;
|
|
208
|
+
taskCount: number;
|
|
209
|
+
healthy: number;
|
|
210
|
+
warning: number;
|
|
211
|
+
broken: number;
|
|
212
|
+
runsPassed: number;
|
|
213
|
+
runsFailed: number;
|
|
214
|
+
topIssues: Array<{ code: string; count: number; hint: string }>;
|
|
215
|
+
};
|
|
216
|
+
nodes: GraphNode[];
|
|
217
|
+
edges: GraphEdge[];
|
|
218
|
+
};
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### Tipi di nodo
|
|
222
|
+
|
|
223
|
+
| Tipo | Descrizione |
|
|
224
|
+
|------|-------------|
|
|
225
|
+
| `base` | Interprete Python di base (es. `C:\Python311`) |
|
|
226
|
+
| `venv` | Ambiente virtuale |
|
|
227
|
+
| `task` | Firma dell'attività (esecuzioni raggruppate) |
|
|
228
|
+
|
|
229
|
+
### Tipi di arco
|
|
230
|
+
|
|
231
|
+
| Tipo | Descrizione |
|
|
232
|
+
|------|-------------|
|
|
233
|
+
| `USES_BASE` | Relazione venv → interprete di base |
|
|
234
|
+
| `ROUTES_TASK_TO` | Routing attività → ambiente |
|
|
235
|
+
| `FAILED_RUN` | Errore attività → ambiente (tratteggiato in Mermaid) |
|
|
236
|
+
|
|
237
|
+
## Codici di errore
|
|
238
|
+
|
|
239
|
+
| Codice | Gravità | Descrizione |
|
|
240
|
+
|------|----------|-------------|
|
|
241
|
+
| `SSL_BROKEN` | bad | Il modulo SSL non riesce a essere importato |
|
|
242
|
+
| `CERT_STORE_FAIL` | warn | La verifica del certificato HTTPS non riesce |
|
|
243
|
+
| `DLL_LOAD_FAIL` | bad | Caricamento della DLL dell'estensione nativa non riesce |
|
|
244
|
+
| `ABI_MISMATCH` | bad | Incompatibilità binaria (ARM/x86) |
|
|
245
|
+
| `PIP_MISSING` | warn | pip non disponibile |
|
|
246
|
+
| `PIP_CHECK_FAIL` | warn | Conflitti di dipendenze rilevati |
|
|
247
|
+
| `USER_SITE_LEAK` | warn | user-site-packages abilitato nell'ambiente virtuale |
|
|
248
|
+
| `PYTHONPATH_INJECTED` | warn | Variabile d'ambiente PYTHONPATH impostata |
|
|
249
|
+
| `ARCH_MISMATCH` | bad | Python a 32 bit quando è richiesto a 64 bit |
|
|
250
|
+
| `PYVENV_CFG_INVALID` | warn | pyvenv.cfg danneggiato o mancante |
|
|
251
|
+
|
|
252
|
+
## Sviluppo
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
npm install
|
|
256
|
+
npm run typecheck # Type check
|
|
257
|
+
npm run test # Run tests
|
|
258
|
+
npm run build # Build to dist/
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
## Sicurezza e ambito dei dati
|
|
262
|
+
|
|
263
|
+
- **Scansolo in lettura:** I file eseguibili Python e il file pyvenv.cfg vengono letti, ma mai modificati.
|
|
264
|
+
- **Sottoprocessi:** avvia `python` con argomenti controllati, senza l'esecuzione tramite shell.
|
|
265
|
+
- **Rete:** l'opzione `--httpsProbe` (facoltativa) verifica i certificati SSL, ma non vengono effettuate altre richieste in uscita.
|
|
266
|
+
- **Nessun dato di telemetria** viene raccolto o trasmesso; consultare il file [SECURITY.md](SECURITY.md) per la politica completa.
|
|
267
|
+
|
|
268
|
+
## Licenza
|
|
269
|
+
|
|
270
|
+
MIT
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
Creato da [MCP Tool Shop](https://mcp-tool-shop.github.io/)
|