dino-spec 17.4.3 → 17.6.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.md +16 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +10 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/core/agents/__tests__/confidence-gate.test.d.ts +5 -0
- package/dist/core/agents/__tests__/confidence-gate.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/confidence-gate.test.js +329 -0
- package/dist/core/agents/__tests__/confidence-gate.test.js.map +1 -0
- package/dist/core/agents/__tests__/gap-detector.test.d.ts +5 -0
- package/dist/core/agents/__tests__/gap-detector.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/gap-detector.test.js +609 -0
- package/dist/core/agents/__tests__/gap-detector.test.js.map +1 -0
- package/dist/core/agents/__tests__/learning-loop.test.d.ts +5 -0
- package/dist/core/agents/__tests__/learning-loop.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/learning-loop.test.js +663 -0
- package/dist/core/agents/__tests__/learning-loop.test.js.map +1 -0
- package/dist/core/agents/__tests__/parallel-executor.test.d.ts +5 -0
- package/dist/core/agents/__tests__/parallel-executor.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/parallel-executor.test.js +610 -0
- package/dist/core/agents/__tests__/parallel-executor.test.js.map +1 -0
- package/dist/core/agents/__tests__/research-validator.test.js +5 -5
- package/dist/core/agents/__tests__/research-validator.test.js.map +1 -1
- package/dist/core/agents/__tests__/skill-creator.test.d.ts +5 -0
- package/dist/core/agents/__tests__/skill-creator.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/skill-creator.test.js +443 -0
- package/dist/core/agents/__tests__/skill-creator.test.js.map +1 -0
- package/dist/core/agents/__tests__/state-persistence.test.d.ts +2 -0
- package/dist/core/agents/__tests__/state-persistence.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/state-persistence.test.js +270 -0
- package/dist/core/agents/__tests__/state-persistence.test.js.map +1 -0
- package/dist/core/agents/__tests__/validation-cache.test.d.ts +2 -0
- package/dist/core/agents/__tests__/validation-cache.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/validation-cache.test.js +181 -0
- package/dist/core/agents/__tests__/validation-cache.test.js.map +1 -0
- package/dist/core/agents/ambiguity-resolver.d.ts +14 -1
- package/dist/core/agents/ambiguity-resolver.d.ts.map +1 -1
- package/dist/core/agents/ambiguity-resolver.js +24 -2
- package/dist/core/agents/ambiguity-resolver.js.map +1 -1
- package/dist/core/agents/blackboard.d.ts +22 -3
- package/dist/core/agents/blackboard.d.ts.map +1 -1
- package/dist/core/agents/blackboard.js +52 -2
- package/dist/core/agents/blackboard.js.map +1 -1
- package/dist/core/agents/circuit-breaker.d.ts +79 -1
- package/dist/core/agents/circuit-breaker.d.ts.map +1 -1
- package/dist/core/agents/circuit-breaker.js +175 -1
- package/dist/core/agents/circuit-breaker.js.map +1 -1
- package/dist/core/agents/clarification-phase.d.ts +128 -0
- package/dist/core/agents/clarification-phase.d.ts.map +1 -0
- package/dist/core/agents/clarification-phase.js +375 -0
- package/dist/core/agents/clarification-phase.js.map +1 -0
- package/dist/core/agents/confidence-gate.d.ts +133 -4
- package/dist/core/agents/confidence-gate.d.ts.map +1 -1
- package/dist/core/agents/confidence-gate.js +376 -9
- package/dist/core/agents/confidence-gate.js.map +1 -1
- package/dist/core/agents/correction-tracker.d.ts +197 -0
- package/dist/core/agents/correction-tracker.d.ts.map +1 -0
- package/dist/core/agents/correction-tracker.js +366 -0
- package/dist/core/agents/correction-tracker.js.map +1 -0
- package/dist/core/agents/dependency-graph.d.ts +193 -0
- package/dist/core/agents/dependency-graph.d.ts.map +1 -0
- package/dist/core/agents/dependency-graph.js +462 -0
- package/dist/core/agents/dependency-graph.js.map +1 -0
- package/dist/core/agents/gap-detector.d.ts +277 -0
- package/dist/core/agents/gap-detector.d.ts.map +1 -0
- package/dist/core/agents/gap-detector.js +540 -0
- package/dist/core/agents/gap-detector.js.map +1 -0
- package/dist/core/agents/index.d.ts +14 -1
- package/dist/core/agents/index.d.ts.map +1 -1
- package/dist/core/agents/index.js +26 -1
- package/dist/core/agents/index.js.map +1 -1
- package/dist/core/agents/message-protocol.d.ts +13 -2
- package/dist/core/agents/message-protocol.d.ts.map +1 -1
- package/dist/core/agents/message-protocol.js +20 -1
- package/dist/core/agents/message-protocol.js.map +1 -1
- package/dist/core/agents/parallel-executor.d.ts +182 -0
- package/dist/core/agents/parallel-executor.d.ts.map +1 -0
- package/dist/core/agents/parallel-executor.js +474 -0
- package/dist/core/agents/parallel-executor.js.map +1 -0
- package/dist/core/agents/pattern-detector.d.ts +157 -0
- package/dist/core/agents/pattern-detector.d.ts.map +1 -0
- package/dist/core/agents/pattern-detector.js +370 -0
- package/dist/core/agents/pattern-detector.js.map +1 -0
- package/dist/core/agents/registry-client.d.ts +6 -0
- package/dist/core/agents/registry-client.d.ts.map +1 -1
- package/dist/core/agents/registry-client.js +3 -0
- package/dist/core/agents/registry-client.js.map +1 -1
- package/dist/core/agents/research-phase.d.ts +114 -0
- package/dist/core/agents/research-phase.d.ts.map +1 -0
- package/dist/core/agents/research-phase.js +355 -0
- package/dist/core/agents/research-phase.js.map +1 -0
- package/dist/core/agents/research-validator.d.ts +13 -2
- package/dist/core/agents/research-validator.d.ts.map +1 -1
- package/dist/core/agents/research-validator.js +63 -31
- package/dist/core/agents/research-validator.js.map +1 -1
- package/dist/core/agents/skill-creator.d.ts +174 -0
- package/dist/core/agents/skill-creator.d.ts.map +1 -0
- package/dist/core/agents/skill-creator.js +570 -0
- package/dist/core/agents/skill-creator.js.map +1 -0
- package/dist/core/agents/state-persistence.d.ts +184 -0
- package/dist/core/agents/state-persistence.d.ts.map +1 -0
- package/dist/core/agents/state-persistence.js +394 -0
- package/dist/core/agents/state-persistence.js.map +1 -0
- package/dist/core/agents/validation-cache.d.ts +122 -0
- package/dist/core/agents/validation-cache.d.ts.map +1 -0
- package/dist/core/agents/validation-cache.js +280 -0
- package/dist/core/agents/validation-cache.js.map +1 -0
- package/dist/core/agents/validators/__tests__/validators.test.d.ts +5 -0
- package/dist/core/agents/validators/__tests__/validators.test.d.ts.map +1 -0
- package/dist/core/agents/validators/__tests__/validators.test.js +321 -0
- package/dist/core/agents/validators/__tests__/validators.test.js.map +1 -0
- package/dist/core/agents/validators/base-validator.d.ts +191 -0
- package/dist/core/agents/validators/base-validator.d.ts.map +1 -0
- package/dist/core/agents/validators/base-validator.js +192 -0
- package/dist/core/agents/validators/base-validator.js.map +1 -0
- package/dist/core/agents/validators/index.d.ts +7 -0
- package/dist/core/agents/validators/index.d.ts.map +1 -0
- package/dist/core/agents/validators/index.js +7 -0
- package/dist/core/agents/validators/index.js.map +1 -0
- package/dist/core/agents/validators/npm-validator.d.ts +50 -0
- package/dist/core/agents/validators/npm-validator.d.ts.map +1 -0
- package/dist/core/agents/validators/npm-validator.js +211 -0
- package/dist/core/agents/validators/npm-validator.js.map +1 -0
- package/dist/core/agents/validators/pip-validator.d.ts +49 -0
- package/dist/core/agents/validators/pip-validator.d.ts.map +1 -0
- package/dist/core/agents/validators/pip-validator.js +191 -0
- package/dist/core/agents/validators/pip-validator.js.map +1 -0
- package/dist/core/agents/validators/validator-registry.d.ts +122 -0
- package/dist/core/agents/validators/validator-registry.d.ts.map +1 -0
- package/dist/core/agents/validators/validator-registry.js +321 -0
- package/dist/core/agents/validators/validator-registry.js.map +1 -0
- package/dist/core/context/auto-injection-engine.d.ts +7 -1
- package/dist/core/context/auto-injection-engine.d.ts.map +1 -1
- package/dist/core/context/auto-injection-engine.js +46 -1
- package/dist/core/context/auto-injection-engine.js.map +1 -1
- package/dist/core/context-repl/types.d.ts +4 -4
- package/dist/core/memory/index.d.ts +1 -0
- package/dist/core/memory/index.d.ts.map +1 -1
- package/dist/core/memory/index.js +2 -0
- package/dist/core/memory/index.js.map +1 -1
- package/dist/core/memory/learning-store.d.ts +222 -0
- package/dist/core/memory/learning-store.d.ts.map +1 -0
- package/dist/core/memory/learning-store.js +477 -0
- package/dist/core/memory/learning-store.js.map +1 -0
- package/dist/core/ralph/__tests__/prd-generator-session-context.test.d.ts +7 -0
- package/dist/core/ralph/__tests__/prd-generator-session-context.test.d.ts.map +1 -0
- package/dist/core/ralph/__tests__/prd-generator-session-context.test.js +143 -0
- package/dist/core/ralph/__tests__/prd-generator-session-context.test.js.map +1 -0
- package/dist/core/ralph/index.d.ts +3 -3
- package/dist/core/ralph/index.d.ts.map +1 -1
- package/dist/core/ralph/index.js +2 -2
- package/dist/core/ralph/index.js.map +1 -1
- package/dist/core/ralph/prd-generator.d.ts +18 -3
- package/dist/core/ralph/prd-generator.d.ts.map +1 -1
- package/dist/core/ralph/prd-generator.js +33 -11
- package/dist/core/ralph/prd-generator.js.map +1 -1
- package/dist/core/ralph/progress-tracker.d.ts.map +1 -1
- package/dist/core/ralph/progress-tracker.js +2 -1
- package/dist/core/ralph/progress-tracker.js.map +1 -1
- package/dist/core/ralph/sub-agent-spawner.d.ts +4 -2
- package/dist/core/ralph/sub-agent-spawner.d.ts.map +1 -1
- package/dist/core/ralph/sub-agent-spawner.js +48 -3
- package/dist/core/ralph/sub-agent-spawner.js.map +1 -1
- package/dist/core/ralph/task-integration.d.ts.map +1 -1
- package/dist/core/ralph/task-integration.js +6 -3
- package/dist/core/ralph/task-integration.js.map +1 -1
- package/dist/core/ralph/types.d.ts +62 -3
- package/dist/core/ralph/types.d.ts.map +1 -1
- package/dist/core/ralph/types.js.map +1 -1
- package/dist/core/recommendations/recommendation-engine.d.ts +6 -0
- package/dist/core/recommendations/recommendation-engine.d.ts.map +1 -1
- package/dist/core/recommendations/recommendation-engine.js.map +1 -1
- package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.d.ts +5 -0
- package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.d.ts.map +1 -0
- package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.js +401 -0
- package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.js.map +1 -0
- package/dist/core/spec-analyzer/ambiguity-detector.d.ts +99 -0
- package/dist/core/spec-analyzer/ambiguity-detector.d.ts.map +1 -0
- package/dist/core/spec-analyzer/ambiguity-detector.js +250 -0
- package/dist/core/spec-analyzer/ambiguity-detector.js.map +1 -0
- package/dist/core/spec-analyzer/clarification-generator.d.ts +76 -0
- package/dist/core/spec-analyzer/clarification-generator.d.ts.map +1 -0
- package/dist/core/spec-analyzer/clarification-generator.js +257 -0
- package/dist/core/spec-analyzer/clarification-generator.js.map +1 -0
- package/dist/core/spec-analyzer/index.d.ts +22 -2
- package/dist/core/spec-analyzer/index.d.ts.map +1 -1
- package/dist/core/spec-analyzer/index.js +21 -3
- package/dist/core/spec-analyzer/index.js.map +1 -1
- package/dist/core/spec-analyzer/patterns.d.ts +73 -0
- package/dist/core/spec-analyzer/patterns.d.ts.map +1 -0
- package/dist/core/spec-analyzer/patterns.js +412 -0
- package/dist/core/spec-analyzer/patterns.js.map +1 -0
- package/dist/hooks/__tests__/dynamic-generator.test.d.ts +5 -0
- package/dist/hooks/__tests__/dynamic-generator.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/dynamic-generator.test.js +425 -0
- package/dist/hooks/__tests__/dynamic-generator.test.js.map +1 -0
- package/dist/hooks/__tests__/hook-agent-bridge.test.d.ts +5 -0
- package/dist/hooks/__tests__/hook-agent-bridge.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/hook-agent-bridge.test.js +315 -0
- package/dist/hooks/__tests__/hook-agent-bridge.test.js.map +1 -0
- package/dist/hooks/dynamic-generator.d.ts +158 -0
- package/dist/hooks/dynamic-generator.d.ts.map +1 -0
- package/dist/hooks/dynamic-generator.js +448 -0
- package/dist/hooks/dynamic-generator.js.map +1 -0
- package/dist/hooks/hook-agent-bridge.d.ts +252 -0
- package/dist/hooks/hook-agent-bridge.d.ts.map +1 -0
- package/dist/hooks/hook-agent-bridge.js +489 -0
- package/dist/hooks/hook-agent-bridge.js.map +1 -0
- package/dist/hooks/index.d.ts +3 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +5 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/mcp/tool-catalog.d.ts.map +1 -1
- package/dist/mcp/tool-catalog.js +47 -0
- package/dist/mcp/tool-catalog.js.map +1 -1
- package/dist/mcp/tool-tiers.d.ts.map +1 -1
- package/dist/mcp/tool-tiers.js +4 -0
- package/dist/mcp/tool-tiers.js.map +1 -1
- package/dist/mcp/tools/auto-inject.d.ts +4 -0
- package/dist/mcp/tools/auto-inject.d.ts.map +1 -1
- package/dist/mcp/tools/auto-inject.js +13 -4
- package/dist/mcp/tools/auto-inject.js.map +1 -1
- package/dist/mcp/tools/chunking.d.ts +3 -0
- package/dist/mcp/tools/chunking.d.ts.map +1 -1
- package/dist/mcp/tools/chunking.js +10 -4
- package/dist/mcp/tools/chunking.js.map +1 -1
- package/dist/mcp/tools/embeddings.d.ts +4 -0
- package/dist/mcp/tools/embeddings.d.ts.map +1 -1
- package/dist/mcp/tools/embeddings.js +16 -6
- package/dist/mcp/tools/embeddings.js.map +1 -1
- package/dist/mcp/tools/index.d.ts +2 -1
- package/dist/mcp/tools/index.d.ts.map +1 -1
- package/dist/mcp/tools/index.js +15 -1
- package/dist/mcp/tools/index.js.map +1 -1
- package/dist/mcp/tools/knowledge-graph.d.ts +3 -0
- package/dist/mcp/tools/knowledge-graph.d.ts.map +1 -1
- package/dist/mcp/tools/knowledge-graph.js +19 -8
- package/dist/mcp/tools/knowledge-graph.js.map +1 -1
- package/dist/mcp/tools/lazy-context.d.ts +2 -0
- package/dist/mcp/tools/lazy-context.d.ts.map +1 -1
- package/dist/mcp/tools/lazy-context.js +10 -4
- package/dist/mcp/tools/lazy-context.js.map +1 -1
- package/dist/mcp/tools/learning-store.d.ts +30 -0
- package/dist/mcp/tools/learning-store.d.ts.map +1 -0
- package/dist/mcp/tools/learning-store.js +286 -0
- package/dist/mcp/tools/learning-store.js.map +1 -0
- package/dist/mcp/tools/memory-decay.d.ts.map +1 -1
- package/dist/mcp/tools/memory-decay.js +4 -2
- package/dist/mcp/tools/memory-decay.js.map +1 -1
- package/dist/mcp/tools/prefetch.d.ts +4 -1
- package/dist/mcp/tools/prefetch.d.ts.map +1 -1
- package/dist/mcp/tools/prefetch.js +18 -7
- package/dist/mcp/tools/prefetch.js.map +1 -1
- package/dist/mcp/tools/ralph.d.ts +2 -0
- package/dist/mcp/tools/ralph.d.ts.map +1 -1
- package/dist/mcp/tools/ralph.js +96 -6
- package/dist/mcp/tools/ralph.js.map +1 -1
- package/dist/mcp/tools/recommendations.d.ts +2 -0
- package/dist/mcp/tools/recommendations.d.ts.map +1 -1
- package/dist/mcp/tools/recommendations.js +13 -4
- package/dist/mcp/tools/recommendations.js.map +1 -1
- package/dist/mcp/tools/retrieval.d.ts +4 -0
- package/dist/mcp/tools/retrieval.d.ts.map +1 -1
- package/dist/mcp/tools/retrieval.js +25 -10
- package/dist/mcp/tools/retrieval.js.map +1 -1
- package/dist/mcp/tools/spec-feedback.d.ts +2 -0
- package/dist/mcp/tools/spec-feedback.d.ts.map +1 -1
- package/dist/mcp/tools/spec-feedback.js +33 -16
- package/dist/mcp/tools/spec-feedback.js.map +1 -1
- package/dist/mcp/utils/index.d.ts +1 -0
- package/dist/mcp/utils/index.d.ts.map +1 -1
- package/dist/mcp/utils/index.js +2 -0
- package/dist/mcp/utils/index.js.map +1 -1
- package/dist/mcp/utils/session-context.d.ts +108 -0
- package/dist/mcp/utils/session-context.d.ts.map +1 -0
- package/dist/mcp/utils/session-context.js +157 -0
- package/dist/mcp/utils/session-context.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PIP Validator - v17.5.0
|
|
3
|
+
*
|
|
4
|
+
* Validates Python packages from PyPI for security, quality, and deprecation.
|
|
5
|
+
*
|
|
6
|
+
* @module pip-validator
|
|
7
|
+
*/
|
|
8
|
+
import { BaseValidator, createIssue, createSuccessResult, } from './base-validator.js';
|
|
9
|
+
// =============================================================================
|
|
10
|
+
// PIP Validator
|
|
11
|
+
// =============================================================================
|
|
12
|
+
/**
|
|
13
|
+
* Python/PyPI package validator
|
|
14
|
+
*/
|
|
15
|
+
export class PipValidator extends BaseValidator {
|
|
16
|
+
pypiBaseUrl = 'https://pypi.org/pypi';
|
|
17
|
+
constructor(config = {}) {
|
|
18
|
+
super('pip', config);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Perform PyPI package validation
|
|
22
|
+
*/
|
|
23
|
+
async performValidation(pkg) {
|
|
24
|
+
const result = createSuccessResult(pkg);
|
|
25
|
+
const issues = [];
|
|
26
|
+
try {
|
|
27
|
+
// Fetch metadata
|
|
28
|
+
const metadata = await this.fetchMetadata(pkg);
|
|
29
|
+
result.metadata = metadata;
|
|
30
|
+
if (!metadata) {
|
|
31
|
+
issues.push(createIssue('quality', 'high', `Package "${pkg.name}" not found on PyPI`, {
|
|
32
|
+
suggestion: 'Check package name spelling',
|
|
33
|
+
}));
|
|
34
|
+
result.issues = issues;
|
|
35
|
+
result.valid = false;
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
// Check deprecation
|
|
39
|
+
const deprecationIssues = await this.checkDeprecation(pkg);
|
|
40
|
+
issues.push(...deprecationIssues);
|
|
41
|
+
// Check quality
|
|
42
|
+
const qualityIssues = await this.checkQuality(pkg, metadata);
|
|
43
|
+
issues.push(...qualityIssues);
|
|
44
|
+
// Check security (basic - Python doesn't have npm audit equivalent)
|
|
45
|
+
const securityIssues = await this.checkSecurity(pkg);
|
|
46
|
+
issues.push(...securityIssues);
|
|
47
|
+
result.issues = issues;
|
|
48
|
+
result.valid = !issues.some((i) => i.severity === 'critical' || i.severity === 'high');
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
issues.push(createIssue('quality', 'moderate', `Validation error: ${String(error)}`, {
|
|
52
|
+
suggestion: 'Check package name and try again',
|
|
53
|
+
}));
|
|
54
|
+
result.issues = issues;
|
|
55
|
+
result.valid = true;
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Fetch PyPI package metadata
|
|
61
|
+
*/
|
|
62
|
+
async fetchMetadata(pkg) {
|
|
63
|
+
try {
|
|
64
|
+
const url = pkg.version
|
|
65
|
+
? `${this.pypiBaseUrl}/${pkg.name}/${pkg.version}/json`
|
|
66
|
+
: `${this.pypiBaseUrl}/${pkg.name}/json`;
|
|
67
|
+
const response = await fetch(url, {
|
|
68
|
+
signal: AbortSignal.timeout(this.config.timeoutMs),
|
|
69
|
+
});
|
|
70
|
+
if (!response.ok) {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
const data = (await response.json());
|
|
74
|
+
return this.convertMetadata(data, pkg.version);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Convert PyPI metadata to common format
|
|
82
|
+
*/
|
|
83
|
+
convertMetadata(data, requestedVersion) {
|
|
84
|
+
const { info, urls } = data;
|
|
85
|
+
// Get last publish date from releases
|
|
86
|
+
let lastPublish;
|
|
87
|
+
if (urls.length > 0) {
|
|
88
|
+
lastPublish = new Date(urls[0].upload_time);
|
|
89
|
+
}
|
|
90
|
+
// Calculate total size from releases
|
|
91
|
+
const size = urls.reduce((sum, u) => sum + u.size, 0);
|
|
92
|
+
// Check for development status classifiers
|
|
93
|
+
const isDeprecated = info.classifiers?.some((c) => c.includes('Development Status :: 7') // Inactive
|
|
94
|
+
);
|
|
95
|
+
return {
|
|
96
|
+
latestVersion: info.version,
|
|
97
|
+
requestedVersion,
|
|
98
|
+
deprecated: isDeprecated,
|
|
99
|
+
deprecationMessage: isDeprecated ? 'Package marked as inactive' : undefined,
|
|
100
|
+
license: info.license,
|
|
101
|
+
size,
|
|
102
|
+
lastPublish,
|
|
103
|
+
maintainerCount: info.maintainer ? 1 : info.author ? 1 : 0,
|
|
104
|
+
repository: info.project_urls?.Source || info.project_urls?.Repository || info.home_page,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Check for security vulnerabilities
|
|
109
|
+
*
|
|
110
|
+
* Note: PyPI doesn't have a built-in vulnerability database like npm.
|
|
111
|
+
* For production use, integrate with safety-db or pip-audit.
|
|
112
|
+
*/
|
|
113
|
+
async checkSecurity(_pkg) {
|
|
114
|
+
// TODO: Integrate with pip-audit or safety-db for vulnerability scanning
|
|
115
|
+
// For now, return empty - we can't do security scanning without external service
|
|
116
|
+
return [];
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Check for deprecation
|
|
120
|
+
*/
|
|
121
|
+
async checkDeprecation(pkg) {
|
|
122
|
+
const issues = [];
|
|
123
|
+
try {
|
|
124
|
+
const metadata = await this.fetchMetadata(pkg);
|
|
125
|
+
if (metadata?.deprecated) {
|
|
126
|
+
issues.push(createIssue('deprecation', 'high', `Package "${pkg.name}" is marked as inactive`, {
|
|
127
|
+
suggestion: 'Consider using an alternative package',
|
|
128
|
+
}));
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
// Ignore errors
|
|
133
|
+
}
|
|
134
|
+
return issues;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Check quality indicators
|
|
138
|
+
*/
|
|
139
|
+
async checkQuality(_pkg, metadata) {
|
|
140
|
+
const issues = [];
|
|
141
|
+
if (!metadata)
|
|
142
|
+
return issues;
|
|
143
|
+
// Check last publish
|
|
144
|
+
if (metadata.lastPublish) {
|
|
145
|
+
const twoYearsAgo = new Date();
|
|
146
|
+
twoYearsAgo.setFullYear(twoYearsAgo.getFullYear() - 2);
|
|
147
|
+
if (metadata.lastPublish < twoYearsAgo) {
|
|
148
|
+
issues.push(createIssue('maintenance', 'moderate', 'Package not updated in over 2 years', {
|
|
149
|
+
suggestion: 'Check if package is still maintained',
|
|
150
|
+
}));
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// Check license
|
|
154
|
+
if (!metadata.license || metadata.license === 'UNKNOWN') {
|
|
155
|
+
issues.push(createIssue('license', 'moderate', 'No license specified', {
|
|
156
|
+
suggestion: 'Verify license compatibility before using',
|
|
157
|
+
}));
|
|
158
|
+
}
|
|
159
|
+
// Check repository
|
|
160
|
+
if (!metadata.repository) {
|
|
161
|
+
issues.push(createIssue('quality', 'info', 'No source repository linked', {
|
|
162
|
+
suggestion: 'Package source code location is unknown',
|
|
163
|
+
}));
|
|
164
|
+
}
|
|
165
|
+
return issues;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Get the latest version of a package
|
|
169
|
+
*/
|
|
170
|
+
async getLatestVersion(packageName) {
|
|
171
|
+
try {
|
|
172
|
+
const response = await fetch(`${this.pypiBaseUrl}/${packageName}/json`, {
|
|
173
|
+
signal: AbortSignal.timeout(this.config.timeoutMs),
|
|
174
|
+
});
|
|
175
|
+
if (!response.ok) {
|
|
176
|
+
return undefined;
|
|
177
|
+
}
|
|
178
|
+
const data = (await response.json());
|
|
179
|
+
return data.info.version;
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
return undefined;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
// =============================================================================
|
|
187
|
+
// Singleton Instance
|
|
188
|
+
// =============================================================================
|
|
189
|
+
/** Default PIP validator instance */
|
|
190
|
+
export const pipValidator = new PipValidator();
|
|
191
|
+
//# sourceMappingURL=pip-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pip-validator.js","sourceRoot":"","sources":["../../../../src/core/agents/validators/pip-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validator Registry - v17.5.0
|
|
3
|
+
*
|
|
4
|
+
* Central registry for package validators.
|
|
5
|
+
* Enables plugin-based validation with ecosystem auto-detection.
|
|
6
|
+
*
|
|
7
|
+
* @module validator-registry
|
|
8
|
+
*/
|
|
9
|
+
import { type BaseValidator, type PackageEcosystem, type PackageId, type ValidationResult } from './base-validator.js';
|
|
10
|
+
/**
|
|
11
|
+
* Validator registration info
|
|
12
|
+
*/
|
|
13
|
+
export interface ValidatorRegistration {
|
|
14
|
+
/** Validator instance */
|
|
15
|
+
validator: BaseValidator;
|
|
16
|
+
/** Priority (higher = checked first) */
|
|
17
|
+
priority: number;
|
|
18
|
+
/** Whether this is a built-in validator */
|
|
19
|
+
builtIn: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Batch validation result
|
|
23
|
+
*/
|
|
24
|
+
export interface BatchValidationResult {
|
|
25
|
+
/** Individual package results */
|
|
26
|
+
results: ValidationResult[];
|
|
27
|
+
/** Summary */
|
|
28
|
+
summary: {
|
|
29
|
+
total: number;
|
|
30
|
+
valid: number;
|
|
31
|
+
blocked: number;
|
|
32
|
+
errors: number;
|
|
33
|
+
};
|
|
34
|
+
/** Overall pass/fail */
|
|
35
|
+
passed: boolean;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Registry for package validators
|
|
39
|
+
*/
|
|
40
|
+
export declare class ValidatorRegistry {
|
|
41
|
+
private validators;
|
|
42
|
+
constructor();
|
|
43
|
+
/**
|
|
44
|
+
* Register built-in validators
|
|
45
|
+
*/
|
|
46
|
+
private registerBuiltIn;
|
|
47
|
+
/**
|
|
48
|
+
* Register a validator
|
|
49
|
+
*/
|
|
50
|
+
register(validator: BaseValidator, options?: {
|
|
51
|
+
priority?: number;
|
|
52
|
+
builtIn?: boolean;
|
|
53
|
+
}): void;
|
|
54
|
+
/**
|
|
55
|
+
* Unregister a validator
|
|
56
|
+
*/
|
|
57
|
+
unregister(validator: BaseValidator): boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Get validator for ecosystem
|
|
60
|
+
*/
|
|
61
|
+
getValidator(ecosystem: PackageEcosystem): BaseValidator | undefined;
|
|
62
|
+
/**
|
|
63
|
+
* Get all validators for ecosystem
|
|
64
|
+
*/
|
|
65
|
+
getValidators(ecosystem: PackageEcosystem): BaseValidator[];
|
|
66
|
+
/**
|
|
67
|
+
* Get all registered ecosystems
|
|
68
|
+
*/
|
|
69
|
+
getEcosystems(): PackageEcosystem[];
|
|
70
|
+
/**
|
|
71
|
+
* Check if ecosystem is supported
|
|
72
|
+
*/
|
|
73
|
+
isSupported(ecosystem: PackageEcosystem): boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Auto-detect ecosystem from package string
|
|
76
|
+
*/
|
|
77
|
+
detectEcosystem(packageSpec: string): PackageEcosystem | undefined;
|
|
78
|
+
/**
|
|
79
|
+
* Parse package specification
|
|
80
|
+
*/
|
|
81
|
+
parsePackageSpec(packageSpec: string): PackageId;
|
|
82
|
+
/**
|
|
83
|
+
* Validate a single package
|
|
84
|
+
*/
|
|
85
|
+
validate(packageSpec: string | PackageId): Promise<ValidationResult>;
|
|
86
|
+
/**
|
|
87
|
+
* Validate multiple packages
|
|
88
|
+
*/
|
|
89
|
+
validateBatch(packageSpecs: (string | PackageId)[]): Promise<BatchValidationResult>;
|
|
90
|
+
/**
|
|
91
|
+
* Clear all caches
|
|
92
|
+
*/
|
|
93
|
+
clearCaches(): void;
|
|
94
|
+
/**
|
|
95
|
+
* Get registry statistics
|
|
96
|
+
*/
|
|
97
|
+
getStats(): {
|
|
98
|
+
ecosystems: number;
|
|
99
|
+
validators: number;
|
|
100
|
+
builtIn: number;
|
|
101
|
+
custom: number;
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/** Global validator registry */
|
|
105
|
+
export declare const validatorRegistry: ValidatorRegistry;
|
|
106
|
+
/**
|
|
107
|
+
* Validate a package using the global registry
|
|
108
|
+
*/
|
|
109
|
+
export declare function validatePackage(packageSpec: string | PackageId): Promise<ValidationResult>;
|
|
110
|
+
/**
|
|
111
|
+
* Validate multiple packages
|
|
112
|
+
*/
|
|
113
|
+
export declare function validatePackages(packageSpecs: (string | PackageId)[]): Promise<BatchValidationResult>;
|
|
114
|
+
/**
|
|
115
|
+
* Format batch result for display
|
|
116
|
+
*/
|
|
117
|
+
export declare function formatBatchResult(result: BatchValidationResult): string;
|
|
118
|
+
export type { PackageEcosystem, PackageId, PackageMetadata, ValidationIssue, ValidationResult, ValidationSeverity, ValidatorConfig, } from './base-validator.js';
|
|
119
|
+
export { BaseValidator, createIssue, formatValidationResult } from './base-validator.js';
|
|
120
|
+
export { NpmValidator, npmValidator } from './npm-validator.js';
|
|
121
|
+
export { PipValidator, pipValidator } from './pip-validator.js';
|
|
122
|
+
//# sourceMappingURL=validator-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator-registry.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/validators/validator-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validator Registry - v17.5.0
|
|
3
|
+
*
|
|
4
|
+
* Central registry for package validators.
|
|
5
|
+
* Enables plugin-based validation with ecosystem auto-detection.
|
|
6
|
+
*
|
|
7
|
+
* @module validator-registry
|
|
8
|
+
*/
|
|
9
|
+
import { formatValidationResult, } from './base-validator.js';
|
|
10
|
+
import { npmValidator } from './npm-validator.js';
|
|
11
|
+
import { pipValidator } from './pip-validator.js';
|
|
12
|
+
// =============================================================================
|
|
13
|
+
// Validator Registry
|
|
14
|
+
// =============================================================================
|
|
15
|
+
/**
|
|
16
|
+
* Registry for package validators
|
|
17
|
+
*/
|
|
18
|
+
export class ValidatorRegistry {
|
|
19
|
+
validators = new Map();
|
|
20
|
+
constructor() {
|
|
21
|
+
// Register built-in validators
|
|
22
|
+
this.registerBuiltIn();
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Register built-in validators
|
|
26
|
+
*/
|
|
27
|
+
registerBuiltIn() {
|
|
28
|
+
this.register(npmValidator, { priority: 100, builtIn: true });
|
|
29
|
+
this.register(pipValidator, { priority: 100, builtIn: true });
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Register a validator
|
|
33
|
+
*/
|
|
34
|
+
register(validator, options = {}) {
|
|
35
|
+
const ecosystem = validator.getEcosystem();
|
|
36
|
+
const registration = {
|
|
37
|
+
validator,
|
|
38
|
+
priority: options.priority ?? 50,
|
|
39
|
+
builtIn: options.builtIn ?? false,
|
|
40
|
+
};
|
|
41
|
+
const existing = this.validators.get(ecosystem) || [];
|
|
42
|
+
existing.push(registration);
|
|
43
|
+
// Sort by priority (higher first)
|
|
44
|
+
existing.sort((a, b) => b.priority - a.priority);
|
|
45
|
+
this.validators.set(ecosystem, existing);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Unregister a validator
|
|
49
|
+
*/
|
|
50
|
+
unregister(validator) {
|
|
51
|
+
const ecosystem = validator.getEcosystem();
|
|
52
|
+
const existing = this.validators.get(ecosystem);
|
|
53
|
+
if (!existing)
|
|
54
|
+
return false;
|
|
55
|
+
const index = existing.findIndex((r) => r.validator === validator);
|
|
56
|
+
if (index === -1)
|
|
57
|
+
return false;
|
|
58
|
+
existing.splice(index, 1);
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get validator for ecosystem
|
|
63
|
+
*/
|
|
64
|
+
getValidator(ecosystem) {
|
|
65
|
+
const registrations = this.validators.get(ecosystem);
|
|
66
|
+
return registrations?.[0]?.validator;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Get all validators for ecosystem
|
|
70
|
+
*/
|
|
71
|
+
getValidators(ecosystem) {
|
|
72
|
+
const registrations = this.validators.get(ecosystem) || [];
|
|
73
|
+
return registrations.map((r) => r.validator);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get all registered ecosystems
|
|
77
|
+
*/
|
|
78
|
+
getEcosystems() {
|
|
79
|
+
return Array.from(this.validators.keys());
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Check if ecosystem is supported
|
|
83
|
+
*/
|
|
84
|
+
isSupported(ecosystem) {
|
|
85
|
+
return this.validators.has(ecosystem);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Auto-detect ecosystem from package string
|
|
89
|
+
*/
|
|
90
|
+
detectEcosystem(packageSpec) {
|
|
91
|
+
// Check for explicit ecosystem prefix
|
|
92
|
+
if (packageSpec.startsWith('npm:'))
|
|
93
|
+
return 'npm';
|
|
94
|
+
if (packageSpec.startsWith('pip:'))
|
|
95
|
+
return 'pip';
|
|
96
|
+
if (packageSpec.startsWith('cargo:'))
|
|
97
|
+
return 'cargo';
|
|
98
|
+
if (packageSpec.startsWith('go:'))
|
|
99
|
+
return 'go';
|
|
100
|
+
if (packageSpec.startsWith('gem:'))
|
|
101
|
+
return 'gem';
|
|
102
|
+
// Check for Python-style package (contains ==, >=, etc.)
|
|
103
|
+
if (/[=<>!]/.test(packageSpec) && !packageSpec.startsWith('@')) {
|
|
104
|
+
return 'pip';
|
|
105
|
+
}
|
|
106
|
+
// Check for npm-style scoped package
|
|
107
|
+
if (packageSpec.startsWith('@')) {
|
|
108
|
+
return 'npm';
|
|
109
|
+
}
|
|
110
|
+
// Default to npm for simple package names
|
|
111
|
+
return 'npm';
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Parse package specification
|
|
115
|
+
*/
|
|
116
|
+
parsePackageSpec(packageSpec) {
|
|
117
|
+
// Remove ecosystem prefix if present
|
|
118
|
+
let spec = packageSpec;
|
|
119
|
+
let ecosystem = 'npm';
|
|
120
|
+
const prefixes = ['npm', 'pip', 'cargo', 'go', 'gem'];
|
|
121
|
+
for (const prefix of prefixes) {
|
|
122
|
+
if (spec.startsWith(`${prefix}:`)) {
|
|
123
|
+
ecosystem = prefix;
|
|
124
|
+
spec = spec.slice(prefix.length + 1);
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// If no prefix, auto-detect
|
|
129
|
+
if (ecosystem === 'npm' && !packageSpec.includes(':')) {
|
|
130
|
+
ecosystem = this.detectEcosystem(spec) || 'npm';
|
|
131
|
+
}
|
|
132
|
+
// Parse name and version
|
|
133
|
+
let name;
|
|
134
|
+
let version;
|
|
135
|
+
if (ecosystem === 'pip') {
|
|
136
|
+
// Python style: package==1.0.0 or package>=1.0.0
|
|
137
|
+
const match = spec.match(/^([^=<>!]+)([=<>!]+.+)?$/);
|
|
138
|
+
if (match) {
|
|
139
|
+
name = match[1].trim();
|
|
140
|
+
version = match[2]?.replace(/^[=<>!]+/, '').trim();
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
name = spec;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
// npm style: package@1.0.0
|
|
148
|
+
const atIndex = spec.lastIndexOf('@');
|
|
149
|
+
if (atIndex > 0) {
|
|
150
|
+
name = spec.slice(0, atIndex);
|
|
151
|
+
version = spec.slice(atIndex + 1);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
name = spec;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return { name, version, ecosystem };
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Validate a single package
|
|
161
|
+
*/
|
|
162
|
+
async validate(packageSpec) {
|
|
163
|
+
const pkg = typeof packageSpec === 'string' ? this.parsePackageSpec(packageSpec) : packageSpec;
|
|
164
|
+
const validator = this.getValidator(pkg.ecosystem);
|
|
165
|
+
if (!validator) {
|
|
166
|
+
return {
|
|
167
|
+
package: pkg,
|
|
168
|
+
valid: true,
|
|
169
|
+
blocked: false,
|
|
170
|
+
issues: [
|
|
171
|
+
{
|
|
172
|
+
type: 'quality',
|
|
173
|
+
severity: 'info',
|
|
174
|
+
message: `No validator available for ecosystem: ${pkg.ecosystem}`,
|
|
175
|
+
},
|
|
176
|
+
],
|
|
177
|
+
timestamp: new Date(),
|
|
178
|
+
cached: false,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
return validator.validate(pkg);
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Validate multiple packages
|
|
185
|
+
*/
|
|
186
|
+
async validateBatch(packageSpecs) {
|
|
187
|
+
const results = [];
|
|
188
|
+
let valid = 0;
|
|
189
|
+
let blocked = 0;
|
|
190
|
+
let errors = 0;
|
|
191
|
+
for (const spec of packageSpecs) {
|
|
192
|
+
try {
|
|
193
|
+
const result = await this.validate(spec);
|
|
194
|
+
results.push(result);
|
|
195
|
+
if (result.blocked) {
|
|
196
|
+
blocked++;
|
|
197
|
+
}
|
|
198
|
+
else if (result.valid) {
|
|
199
|
+
valid++;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
errors++;
|
|
204
|
+
const pkg = typeof spec === 'string' ? this.parsePackageSpec(spec) : spec;
|
|
205
|
+
results.push({
|
|
206
|
+
package: pkg,
|
|
207
|
+
valid: false,
|
|
208
|
+
blocked: false,
|
|
209
|
+
issues: [
|
|
210
|
+
{
|
|
211
|
+
type: 'quality',
|
|
212
|
+
severity: 'high',
|
|
213
|
+
message: `Validation error: ${String(error)}`,
|
|
214
|
+
},
|
|
215
|
+
],
|
|
216
|
+
timestamp: new Date(),
|
|
217
|
+
cached: false,
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return {
|
|
222
|
+
results,
|
|
223
|
+
summary: {
|
|
224
|
+
total: packageSpecs.length,
|
|
225
|
+
valid,
|
|
226
|
+
blocked,
|
|
227
|
+
errors,
|
|
228
|
+
},
|
|
229
|
+
passed: blocked === 0,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Clear all caches
|
|
234
|
+
*/
|
|
235
|
+
clearCaches() {
|
|
236
|
+
for (const registrations of this.validators.values()) {
|
|
237
|
+
for (const reg of registrations) {
|
|
238
|
+
reg.validator.clearCache();
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Get registry statistics
|
|
244
|
+
*/
|
|
245
|
+
getStats() {
|
|
246
|
+
let validators = 0;
|
|
247
|
+
let builtIn = 0;
|
|
248
|
+
let custom = 0;
|
|
249
|
+
for (const registrations of this.validators.values()) {
|
|
250
|
+
for (const reg of registrations) {
|
|
251
|
+
validators++;
|
|
252
|
+
if (reg.builtIn) {
|
|
253
|
+
builtIn++;
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
custom++;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return {
|
|
261
|
+
ecosystems: this.validators.size,
|
|
262
|
+
validators,
|
|
263
|
+
builtIn,
|
|
264
|
+
custom,
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
// =============================================================================
|
|
269
|
+
// Singleton Instance
|
|
270
|
+
// =============================================================================
|
|
271
|
+
/** Global validator registry */
|
|
272
|
+
export const validatorRegistry = new ValidatorRegistry();
|
|
273
|
+
// =============================================================================
|
|
274
|
+
// Helper Functions
|
|
275
|
+
// =============================================================================
|
|
276
|
+
/**
|
|
277
|
+
* Validate a package using the global registry
|
|
278
|
+
*/
|
|
279
|
+
export async function validatePackage(packageSpec) {
|
|
280
|
+
return validatorRegistry.validate(packageSpec);
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Validate multiple packages
|
|
284
|
+
*/
|
|
285
|
+
export async function validatePackages(packageSpecs) {
|
|
286
|
+
return validatorRegistry.validateBatch(packageSpecs);
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Format batch result for display
|
|
290
|
+
*/
|
|
291
|
+
export function formatBatchResult(result) {
|
|
292
|
+
const lines = [];
|
|
293
|
+
lines.push('# Package Validation Report');
|
|
294
|
+
lines.push('');
|
|
295
|
+
// Summary
|
|
296
|
+
const statusEmoji = result.passed ? '✅' : '🚫';
|
|
297
|
+
lines.push(`## Summary ${statusEmoji}`);
|
|
298
|
+
lines.push('');
|
|
299
|
+
lines.push(`- **Total:** ${result.summary.total}`);
|
|
300
|
+
lines.push(`- **Valid:** ${result.summary.valid}`);
|
|
301
|
+
lines.push(`- **Blocked:** ${result.summary.blocked}`);
|
|
302
|
+
if (result.summary.errors > 0) {
|
|
303
|
+
lines.push(`- **Errors:** ${result.summary.errors}`);
|
|
304
|
+
}
|
|
305
|
+
lines.push('');
|
|
306
|
+
// Individual results
|
|
307
|
+
if (result.results.length > 0) {
|
|
308
|
+
lines.push('## Packages');
|
|
309
|
+
lines.push('');
|
|
310
|
+
for (const pkgResult of result.results) {
|
|
311
|
+
lines.push(formatValidationResult(pkgResult));
|
|
312
|
+
lines.push('---');
|
|
313
|
+
lines.push('');
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
return lines.join('\n');
|
|
317
|
+
}
|
|
318
|
+
export { BaseValidator, createIssue, formatValidationResult } from './base-validator.js';
|
|
319
|
+
export { NpmValidator, npmValidator } from './npm-validator.js';
|
|
320
|
+
export { PipValidator, pipValidator } from './pip-validator.js';
|
|
321
|
+
//# sourceMappingURL=validator-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator-registry.js","sourceRoot":"","sources":["../../../../src/core/agents/validators/validator-registry.ts"],"names":[],"mappings":"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"}
|