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,355 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Research Phase - v17.5.0
|
|
3
|
+
*
|
|
4
|
+
* Handles the research phase of the progressive confidence gate.
|
|
5
|
+
* Triggers codebase and web search to gather context and improve confidence.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Codebase search (Grep, Glob, Read)
|
|
9
|
+
* - Web search for external documentation
|
|
10
|
+
* - Confidence improvement calculation (10-30%)
|
|
11
|
+
* - Research result caching
|
|
12
|
+
* - Integration with ambiguity detector
|
|
13
|
+
*
|
|
14
|
+
* @module research-phase
|
|
15
|
+
*/
|
|
16
|
+
import { detectAmbiguity } from '../spec-analyzer/ambiguity-detector.js';
|
|
17
|
+
// =============================================================================
|
|
18
|
+
// Constants
|
|
19
|
+
// =============================================================================
|
|
20
|
+
export const DEFAULT_RESEARCH_CONFIG = {
|
|
21
|
+
enableCodebaseSearch: true,
|
|
22
|
+
enableWebSearch: true,
|
|
23
|
+
maxResearchTokens: 5000,
|
|
24
|
+
cacheDirectory: '.dino/research/',
|
|
25
|
+
minConfidenceImprovement: 0.1, // 10%
|
|
26
|
+
maxConfidenceImprovement: 0.3, // 30%
|
|
27
|
+
};
|
|
28
|
+
// Confidence improvement factors
|
|
29
|
+
const IMPROVEMENT_FACTORS = {
|
|
30
|
+
patternFound: 0.08, // Found relevant pattern
|
|
31
|
+
fileIdentified: 0.05, // Identified target file
|
|
32
|
+
documentationFound: 0.06, // Found relevant docs
|
|
33
|
+
exampleFound: 0.07, // Found working example
|
|
34
|
+
decisionFound: 0.04, // Found past decision
|
|
35
|
+
multipleFindings: 0.02, // Bonus per additional finding (up to 5)
|
|
36
|
+
};
|
|
37
|
+
// =============================================================================
|
|
38
|
+
// Main Functions
|
|
39
|
+
// =============================================================================
|
|
40
|
+
/**
|
|
41
|
+
* Identify what research is needed based on analysis
|
|
42
|
+
*/
|
|
43
|
+
export function identifyResearchTargets(analysis, ambiguity) {
|
|
44
|
+
const targets = [];
|
|
45
|
+
// Missing target - need to find files/components
|
|
46
|
+
if (analysis.signals.missingTarget) {
|
|
47
|
+
targets.push({
|
|
48
|
+
type: 'codebase',
|
|
49
|
+
priority: 10,
|
|
50
|
+
areas: [
|
|
51
|
+
{
|
|
52
|
+
query: 'find target files or components',
|
|
53
|
+
reason: 'No specific target mentioned in requirement',
|
|
54
|
+
expectedType: 'file',
|
|
55
|
+
globPatterns: ['src/**/*.ts', 'src/**/*.tsx'],
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
// Vague verbs - need to find patterns/examples
|
|
61
|
+
if (analysis.signals.vagueVerbs.length > 0) {
|
|
62
|
+
for (const verb of analysis.signals.vagueVerbs.slice(0, 2)) {
|
|
63
|
+
targets.push({
|
|
64
|
+
type: 'both',
|
|
65
|
+
priority: 8,
|
|
66
|
+
areas: [
|
|
67
|
+
{
|
|
68
|
+
query: `find examples of "${verb}" in codebase`,
|
|
69
|
+
reason: `Vague verb "${verb}" needs concrete examples`,
|
|
70
|
+
expectedType: 'example',
|
|
71
|
+
globPatterns: ['src/**/*.ts'],
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
query: `best practices for "${verb}"`,
|
|
75
|
+
reason: `Need guidance for "${verb}" operation`,
|
|
76
|
+
expectedType: 'documentation',
|
|
77
|
+
webKeywords: [verb, 'best practices', 'typescript'],
|
|
78
|
+
},
|
|
79
|
+
],
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Unclear success - need test patterns
|
|
84
|
+
if (analysis.signals.unclearSuccess) {
|
|
85
|
+
targets.push({
|
|
86
|
+
type: 'codebase',
|
|
87
|
+
priority: 7,
|
|
88
|
+
areas: [
|
|
89
|
+
{
|
|
90
|
+
query: 'find test patterns for similar features',
|
|
91
|
+
reason: 'Success criteria not defined',
|
|
92
|
+
expectedType: 'pattern',
|
|
93
|
+
globPatterns: ['test/**/*.test.ts', 'src/**/*.test.ts'],
|
|
94
|
+
},
|
|
95
|
+
],
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
// Security related - need security patterns
|
|
99
|
+
if (analysis.signals.securityRelated) {
|
|
100
|
+
targets.push({
|
|
101
|
+
type: 'both',
|
|
102
|
+
priority: 9,
|
|
103
|
+
areas: [
|
|
104
|
+
{
|
|
105
|
+
query: 'find existing security patterns',
|
|
106
|
+
reason: 'Security-related requirement needs patterns',
|
|
107
|
+
expectedType: 'pattern',
|
|
108
|
+
globPatterns: ['src/**/auth*.ts', 'src/**/security*.ts'],
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
query: 'security best practices',
|
|
112
|
+
reason: 'Need security guidance',
|
|
113
|
+
expectedType: 'documentation',
|
|
114
|
+
webKeywords: ['security', 'authentication', 'authorization', 'best practices'],
|
|
115
|
+
},
|
|
116
|
+
],
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
// Data related - need data patterns
|
|
120
|
+
if (analysis.signals.dataRelated) {
|
|
121
|
+
targets.push({
|
|
122
|
+
type: 'codebase',
|
|
123
|
+
priority: 8,
|
|
124
|
+
areas: [
|
|
125
|
+
{
|
|
126
|
+
query: 'find data handling patterns',
|
|
127
|
+
reason: 'Data-related requirement needs patterns',
|
|
128
|
+
expectedType: 'pattern',
|
|
129
|
+
globPatterns: ['src/**/db*.ts', 'src/**/storage*.ts', 'src/**/migration*.ts'],
|
|
130
|
+
},
|
|
131
|
+
],
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
// Breaking change - need affected consumers
|
|
135
|
+
if (analysis.signals.breakingChange) {
|
|
136
|
+
targets.push({
|
|
137
|
+
type: 'codebase',
|
|
138
|
+
priority: 9,
|
|
139
|
+
areas: [
|
|
140
|
+
{
|
|
141
|
+
query: 'find consumers of affected code',
|
|
142
|
+
reason: 'Breaking change needs impact analysis',
|
|
143
|
+
expectedType: 'file',
|
|
144
|
+
globPatterns: ['src/**/*.ts'],
|
|
145
|
+
},
|
|
146
|
+
],
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
// Add research for incomplete markers from MAC-4 ambiguity analysis
|
|
150
|
+
if (ambiguity.breakdown.incompleteMarkers > 0) {
|
|
151
|
+
targets.push({
|
|
152
|
+
type: 'codebase',
|
|
153
|
+
priority: 6,
|
|
154
|
+
areas: [
|
|
155
|
+
{
|
|
156
|
+
query: 'find related documentation or decisions',
|
|
157
|
+
reason: 'Incomplete markers (TBD/TODO) need resolution',
|
|
158
|
+
expectedType: 'decision',
|
|
159
|
+
globPatterns: ['.dino/**/*.md', 'docs/**/*.md'],
|
|
160
|
+
},
|
|
161
|
+
],
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
// Sort by priority
|
|
165
|
+
return targets.sort((a, b) => b.priority - a.priority);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Build research prompt for subagent
|
|
169
|
+
*/
|
|
170
|
+
export function buildResearchPrompt(prompt, targets, config = DEFAULT_RESEARCH_CONFIG) {
|
|
171
|
+
const sections = [];
|
|
172
|
+
sections.push('# Research Phase');
|
|
173
|
+
sections.push('');
|
|
174
|
+
sections.push('## Objective');
|
|
175
|
+
sections.push(`Gather context to improve confidence for: "${prompt}"`);
|
|
176
|
+
sections.push('');
|
|
177
|
+
sections.push('## Research Targets');
|
|
178
|
+
sections.push('');
|
|
179
|
+
for (const target of targets) {
|
|
180
|
+
sections.push(`### Priority ${target.priority} (${target.type})`);
|
|
181
|
+
for (const area of target.areas) {
|
|
182
|
+
sections.push(`- **${area.query}**`);
|
|
183
|
+
sections.push(` - Reason: ${area.reason}`);
|
|
184
|
+
sections.push(` - Expected: ${area.expectedType}`);
|
|
185
|
+
if (area.globPatterns && config.enableCodebaseSearch) {
|
|
186
|
+
sections.push(` - Search: ${area.globPatterns.join(', ')}`);
|
|
187
|
+
}
|
|
188
|
+
if (area.webKeywords && config.enableWebSearch) {
|
|
189
|
+
sections.push(` - Keywords: ${area.webKeywords.join(', ')}`);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
sections.push('');
|
|
193
|
+
}
|
|
194
|
+
sections.push('## Instructions');
|
|
195
|
+
sections.push('');
|
|
196
|
+
if (config.enableCodebaseSearch) {
|
|
197
|
+
sections.push('### Codebase Search');
|
|
198
|
+
sections.push('1. Use Glob to find relevant files');
|
|
199
|
+
sections.push('2. Use Grep to search for patterns');
|
|
200
|
+
sections.push('3. Read key files to understand context');
|
|
201
|
+
sections.push('');
|
|
202
|
+
}
|
|
203
|
+
if (config.enableWebSearch) {
|
|
204
|
+
sections.push('### Web Research');
|
|
205
|
+
sections.push('1. Use WebSearch for best practices');
|
|
206
|
+
sections.push('2. Use WebFetch for documentation');
|
|
207
|
+
sections.push('');
|
|
208
|
+
}
|
|
209
|
+
sections.push('## Output');
|
|
210
|
+
sections.push('Return findings as structured list with:');
|
|
211
|
+
sections.push('- type: pattern|file|documentation|example|decision');
|
|
212
|
+
sections.push('- source: file path or URL');
|
|
213
|
+
sections.push('- summary: what was found');
|
|
214
|
+
sections.push('- relevance: 0-1 how relevant');
|
|
215
|
+
return sections.join('\n');
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Calculate confidence improvement from findings
|
|
219
|
+
*/
|
|
220
|
+
export function calculateConfidenceImprovement(findings, config = DEFAULT_RESEARCH_CONFIG) {
|
|
221
|
+
if (findings.length === 0)
|
|
222
|
+
return 0;
|
|
223
|
+
let improvement = 0;
|
|
224
|
+
// Count findings by type
|
|
225
|
+
const byType = new Map();
|
|
226
|
+
for (const finding of findings) {
|
|
227
|
+
const count = byType.get(finding.type) || 0;
|
|
228
|
+
byType.set(finding.type, count + 1);
|
|
229
|
+
}
|
|
230
|
+
// Add improvement for each type found
|
|
231
|
+
if (byType.has('pattern')) {
|
|
232
|
+
improvement += IMPROVEMENT_FACTORS.patternFound;
|
|
233
|
+
}
|
|
234
|
+
if (byType.has('file')) {
|
|
235
|
+
improvement += IMPROVEMENT_FACTORS.fileIdentified;
|
|
236
|
+
}
|
|
237
|
+
if (byType.has('documentation')) {
|
|
238
|
+
improvement += IMPROVEMENT_FACTORS.documentationFound;
|
|
239
|
+
}
|
|
240
|
+
if (byType.has('example')) {
|
|
241
|
+
improvement += IMPROVEMENT_FACTORS.exampleFound;
|
|
242
|
+
}
|
|
243
|
+
if (byType.has('decision')) {
|
|
244
|
+
improvement += IMPROVEMENT_FACTORS.decisionFound;
|
|
245
|
+
}
|
|
246
|
+
// Bonus for multiple findings (up to 5)
|
|
247
|
+
const extraFindings = Math.min(5, findings.length - 1);
|
|
248
|
+
improvement += extraFindings * IMPROVEMENT_FACTORS.multipleFindings;
|
|
249
|
+
// Weight by average relevance
|
|
250
|
+
const avgRelevance = findings.reduce((sum, f) => sum + f.relevance, 0) / findings.length;
|
|
251
|
+
improvement *= avgRelevance;
|
|
252
|
+
// Clamp to configured range
|
|
253
|
+
return Math.max(config.minConfidenceImprovement, Math.min(config.maxConfidenceImprovement, improvement));
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Execute research phase
|
|
257
|
+
*/
|
|
258
|
+
export async function executeResearchPhase(prompt, currentConfidence, analysis, config = DEFAULT_RESEARCH_CONFIG) {
|
|
259
|
+
// Get ambiguity analysis from MAC-4
|
|
260
|
+
const ambiguity = detectAmbiguity(prompt);
|
|
261
|
+
// Identify research targets
|
|
262
|
+
const targets = identifyResearchTargets(analysis, ambiguity);
|
|
263
|
+
if (targets.length === 0) {
|
|
264
|
+
return {
|
|
265
|
+
executed: false,
|
|
266
|
+
targets: [],
|
|
267
|
+
findings: [],
|
|
268
|
+
confidenceImprovement: 0,
|
|
269
|
+
newConfidence: currentConfidence,
|
|
270
|
+
summary: 'No research targets identified',
|
|
271
|
+
tokensUsed: 0,
|
|
272
|
+
canImproveMore: false,
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
// Build research prompt (to be executed by subagent)
|
|
276
|
+
const researchPrompt = buildResearchPrompt(prompt, targets, config);
|
|
277
|
+
// This would be populated by actual subagent execution
|
|
278
|
+
// For now, return structure for subagent to fill
|
|
279
|
+
const findings = [];
|
|
280
|
+
const confidenceImprovement = calculateConfidenceImprovement(findings, config);
|
|
281
|
+
const newConfidence = Math.min(1, currentConfidence + confidenceImprovement);
|
|
282
|
+
return {
|
|
283
|
+
executed: true,
|
|
284
|
+
targets,
|
|
285
|
+
findings,
|
|
286
|
+
confidenceImprovement,
|
|
287
|
+
newConfidence,
|
|
288
|
+
summary: generateResearchSummary(targets, findings),
|
|
289
|
+
tokensUsed: estimateTokens(researchPrompt),
|
|
290
|
+
canImproveMore: targets.length > findings.length,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Generate summary of research
|
|
295
|
+
*/
|
|
296
|
+
function generateResearchSummary(targets, findings) {
|
|
297
|
+
if (findings.length === 0) {
|
|
298
|
+
return `Research identified ${targets.length} target(s) to investigate. Awaiting subagent execution.`;
|
|
299
|
+
}
|
|
300
|
+
const parts = [];
|
|
301
|
+
parts.push(`Found ${findings.length} relevant finding(s)`);
|
|
302
|
+
const types = new Set(findings.map((f) => f.type));
|
|
303
|
+
parts.push(`across ${types.size} categor${types.size === 1 ? 'y' : 'ies'}`);
|
|
304
|
+
const avgRelevance = findings.reduce((sum, f) => sum + f.relevance, 0) / findings.length;
|
|
305
|
+
parts.push(`with ${Math.round(avgRelevance * 100)}% average relevance`);
|
|
306
|
+
return `${parts.join(' ')}.`;
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Estimate tokens from text
|
|
310
|
+
*/
|
|
311
|
+
function estimateTokens(text) {
|
|
312
|
+
return Math.ceil(text.length / 4);
|
|
313
|
+
}
|
|
314
|
+
// =============================================================================
|
|
315
|
+
// Task Tool Integration
|
|
316
|
+
// =============================================================================
|
|
317
|
+
/**
|
|
318
|
+
* Build Task tool parameters for research subagent
|
|
319
|
+
*/
|
|
320
|
+
export function buildResearchTaskParams(prompt, targets, config = DEFAULT_RESEARCH_CONFIG) {
|
|
321
|
+
return {
|
|
322
|
+
description: 'Research: gather context',
|
|
323
|
+
prompt: buildResearchPrompt(prompt, targets, config),
|
|
324
|
+
subagent_type: 'Explore',
|
|
325
|
+
model: 'sonnet',
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
// =============================================================================
|
|
329
|
+
// Formatting
|
|
330
|
+
// =============================================================================
|
|
331
|
+
/**
|
|
332
|
+
* Format research result for session.md
|
|
333
|
+
*/
|
|
334
|
+
export function formatResearchForSession(result) {
|
|
335
|
+
const lines = [];
|
|
336
|
+
lines.push('### Research Phase');
|
|
337
|
+
lines.push('');
|
|
338
|
+
lines.push(`**Targets:** ${result.targets.length}`);
|
|
339
|
+
lines.push(`**Findings:** ${result.findings.length}`);
|
|
340
|
+
lines.push(`**Confidence Improvement:** +${Math.round(result.confidenceImprovement * 100)}%`);
|
|
341
|
+
lines.push('');
|
|
342
|
+
if (result.findings.length > 0) {
|
|
343
|
+
lines.push('**Key Findings:**');
|
|
344
|
+
for (const finding of result.findings.slice(0, 5)) {
|
|
345
|
+
lines.push(`- [${finding.type}] ${finding.summary} (${Math.round(finding.relevance * 100)}%)`);
|
|
346
|
+
}
|
|
347
|
+
if (result.findings.length > 5) {
|
|
348
|
+
lines.push(`- ... and ${result.findings.length - 5} more`);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
lines.push('');
|
|
352
|
+
lines.push(`**Summary:** ${result.summary}`);
|
|
353
|
+
return lines.join('\n');
|
|
354
|
+
}
|
|
355
|
+
//# sourceMappingURL=research-phase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"research-phase.js","sourceRoot":"","sources":["../../../src/core/agents/research-phase.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Research Validator Agent
|
|
2
|
+
* Research Validator Agent - v17.5.0
|
|
3
3
|
*
|
|
4
4
|
* Orchestrates package validation by integrating registry-client and security-scanner.
|
|
5
5
|
* Provides comprehensive package analysis including metadata, size, and security.
|
|
@@ -8,6 +8,9 @@
|
|
|
8
8
|
* - Single package validation
|
|
9
9
|
* - Batch validation for multiple packages
|
|
10
10
|
* - Caching of validation results (1-hour TTL)
|
|
11
|
+
* - Rate limiting per API source
|
|
12
|
+
* - Version comparison (latest vs requested)
|
|
13
|
+
* - Deprecation detection with alternatives
|
|
11
14
|
* - Structured validation results
|
|
12
15
|
*
|
|
13
16
|
* @module research-validator
|
|
@@ -24,6 +27,11 @@ export interface PackageValidation {
|
|
|
24
27
|
isValid: boolean;
|
|
25
28
|
warnings: string[];
|
|
26
29
|
errors: string[];
|
|
30
|
+
latestVersion: string | null;
|
|
31
|
+
isLatest: boolean;
|
|
32
|
+
isDeprecated: boolean;
|
|
33
|
+
deprecationMessage: string | null;
|
|
34
|
+
alternatives: string[];
|
|
27
35
|
}
|
|
28
36
|
export interface ValidationOptions {
|
|
29
37
|
severityThreshold?: VulnerabilitySeverity;
|
|
@@ -55,6 +63,9 @@ export declare function clearValidationCache(): void;
|
|
|
55
63
|
*/
|
|
56
64
|
export declare function getValidationCacheStats(): {
|
|
57
65
|
size: number;
|
|
58
|
-
|
|
66
|
+
maxSize: number;
|
|
67
|
+
hits: number;
|
|
68
|
+
misses: number;
|
|
69
|
+
hitRate: number;
|
|
59
70
|
};
|
|
60
71
|
//# sourceMappingURL=research-validator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"research-validator.d.ts","sourceRoot":"","sources":["../../../src/core/agents/research-validator.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"research-validator.d.ts","sourceRoot":"","sources":["../../../src/core/agents/research-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,KAAK,kBAAkB,EAEvB,KAAK,qBAAqB,EAC3B,MAAM,uBAAuB,CAAA;AAG9B,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,eAAe,CAAA;IACzB,IAAI,EAAE,WAAW,CAAA;IACjB,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,MAAM,EAAE,MAAM,EAAE,CAAA;IAEhB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,QAAQ,EAAE,OAAO,CAAA;IACjB,YAAY,EAAE,OAAO,CAAA;IACrB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,YAAY,EAAE,MAAM,EAAE,CAAA;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,CAAC,EAAE,qBAAqB,CAAA;IACzC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAQD;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,iBAAiB,CAAC,CAsH5B;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAc9B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAED;;GAEG;AACH,wBAAgB,uBAAuB;;;;;;EAEtC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Research Validator Agent
|
|
2
|
+
* Research Validator Agent - v17.5.0
|
|
3
3
|
*
|
|
4
4
|
* Orchestrates package validation by integrating registry-client and security-scanner.
|
|
5
5
|
* Provides comprehensive package analysis including metadata, size, and security.
|
|
@@ -8,25 +8,20 @@
|
|
|
8
8
|
* - Single package validation
|
|
9
9
|
* - Batch validation for multiple packages
|
|
10
10
|
* - Caching of validation results (1-hour TTL)
|
|
11
|
+
* - Rate limiting per API source
|
|
12
|
+
* - Version comparison (latest vs requested)
|
|
13
|
+
* - Deprecation detection with alternatives
|
|
11
14
|
* - Structured validation results
|
|
12
15
|
*
|
|
13
16
|
* @module research-validator
|
|
14
17
|
*/
|
|
15
18
|
import { fetchPackageMetadata, getPackageSize, } from './registry-client.js';
|
|
16
19
|
import { scanPackage, } from './security-scanner.js';
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const validationCache = new
|
|
20
|
+
import { ValidationCache, withRateLimit } from './validation-cache.js';
|
|
21
|
+
// Cache with 1-hour TTL using ValidationCache
|
|
22
|
+
const validationCache = new ValidationCache();
|
|
20
23
|
// Default size threshold: 100KB gzipped
|
|
21
24
|
const DEFAULT_MAX_SIZE_KB = 100;
|
|
22
|
-
/**
|
|
23
|
-
* Check if cache entry is still valid
|
|
24
|
-
*/
|
|
25
|
-
function isCacheValid(entry) {
|
|
26
|
-
if (!entry)
|
|
27
|
-
return false;
|
|
28
|
-
return Date.now() - entry.timestamp < CACHE_TTL_MS;
|
|
29
|
-
}
|
|
30
25
|
/**
|
|
31
26
|
* Validate a single package
|
|
32
27
|
*
|
|
@@ -41,18 +36,44 @@ export async function validatePackage(packageName, version, options = {}) {
|
|
|
41
36
|
// Check cache first
|
|
42
37
|
const cacheKey = version ? `${packageName}@${version}` : packageName;
|
|
43
38
|
const cached = validationCache.get(cacheKey);
|
|
44
|
-
if (cached
|
|
45
|
-
return cached
|
|
39
|
+
if (cached) {
|
|
40
|
+
return cached;
|
|
46
41
|
}
|
|
47
|
-
// Fetch metadata (includes version resolution)
|
|
48
|
-
const metadata = await fetchPackageMetadata(packageName, version);
|
|
42
|
+
// Fetch metadata with rate limiting (includes version resolution)
|
|
43
|
+
const metadata = await withRateLimit('npm', () => fetchPackageMetadata(packageName, version));
|
|
49
44
|
const resolvedVersion = metadata.version;
|
|
50
|
-
// Fetch
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
45
|
+
// Fetch latest version for comparison
|
|
46
|
+
let latestVersion = null;
|
|
47
|
+
let isLatest = true;
|
|
48
|
+
if (version) {
|
|
49
|
+
try {
|
|
50
|
+
const latestMetadata = await withRateLimit('npm', () => fetchPackageMetadata(packageName));
|
|
51
|
+
latestVersion = latestMetadata.version;
|
|
52
|
+
isLatest = resolvedVersion === latestVersion;
|
|
53
|
+
if (!isLatest) {
|
|
54
|
+
// Version comparison will be added to warnings
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// Could not fetch latest version
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Check for deprecation
|
|
62
|
+
const isDeprecated = metadata.deprecated !== undefined && metadata.deprecated !== null;
|
|
63
|
+
const deprecationMessage = metadata.deprecated ?? null;
|
|
64
|
+
const alternatives = [];
|
|
65
|
+
// Extract alternatives from deprecation message if present
|
|
66
|
+
if (isDeprecated && deprecationMessage) {
|
|
67
|
+
// Common patterns: "use X instead", "replaced by Y", "see Z"
|
|
68
|
+
const altMatch = deprecationMessage.match(/(?:use|replaced by|see|try|switch to)\s+['"`]?([a-z0-9@/-]+)['"`]?/i);
|
|
69
|
+
if (altMatch) {
|
|
70
|
+
alternatives.push(altMatch[1]);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Fetch size info with rate limiting
|
|
74
|
+
const sizeInfo = await withRateLimit('bundlephobia', () => getPackageSize(packageName, resolvedVersion));
|
|
75
|
+
// Scan for security vulnerabilities with rate limiting
|
|
76
|
+
const securityResult = await withRateLimit('audit', () => scanPackage(packageName, resolvedVersion, { severityThreshold }));
|
|
56
77
|
// Analyze results
|
|
57
78
|
const warnings = [];
|
|
58
79
|
const errors = [];
|
|
@@ -61,6 +82,17 @@ export async function validatePackage(packageName, version, options = {}) {
|
|
|
61
82
|
if (sizeKB > maxSizeKB) {
|
|
62
83
|
warnings.push(`Package size (${sizeKB.toFixed(2)}KB) exceeds threshold (${maxSizeKB}KB)`);
|
|
63
84
|
}
|
|
85
|
+
// Check version
|
|
86
|
+
if (!isLatest && latestVersion) {
|
|
87
|
+
warnings.push(`Newer version available: ${latestVersion} (requested: ${resolvedVersion})`);
|
|
88
|
+
}
|
|
89
|
+
// Check deprecation
|
|
90
|
+
if (isDeprecated) {
|
|
91
|
+
warnings.push(`DEPRECATED: ${deprecationMessage ?? 'No reason provided'}`);
|
|
92
|
+
if (alternatives.length > 0) {
|
|
93
|
+
warnings.push(`Suggested alternatives: ${alternatives.join(', ')}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
64
96
|
// Check security
|
|
65
97
|
if (securityResult.hasBlockingIssues) {
|
|
66
98
|
for (const vuln of securityResult.vulnerabilities) {
|
|
@@ -82,15 +114,18 @@ export async function validatePackage(packageName, version, options = {}) {
|
|
|
82
114
|
size: sizeInfo,
|
|
83
115
|
security: securityResult,
|
|
84
116
|
validatedAt: Date.now(),
|
|
85
|
-
isValid: errors.length === 0,
|
|
117
|
+
isValid: errors.length === 0 && !isDeprecated,
|
|
86
118
|
warnings,
|
|
87
119
|
errors,
|
|
120
|
+
// v17.5.0: Enhanced fields
|
|
121
|
+
latestVersion,
|
|
122
|
+
isLatest,
|
|
123
|
+
isDeprecated,
|
|
124
|
+
deprecationMessage,
|
|
125
|
+
alternatives,
|
|
88
126
|
};
|
|
89
127
|
// Cache result
|
|
90
|
-
validationCache.set(cacheKey,
|
|
91
|
-
data: validation,
|
|
92
|
-
timestamp: Date.now(),
|
|
93
|
-
});
|
|
128
|
+
validationCache.set(cacheKey, validation);
|
|
94
129
|
return validation;
|
|
95
130
|
}
|
|
96
131
|
/**
|
|
@@ -119,9 +154,6 @@ export function clearValidationCache() {
|
|
|
119
154
|
* Get validation cache statistics (useful for debugging)
|
|
120
155
|
*/
|
|
121
156
|
export function getValidationCacheStats() {
|
|
122
|
-
return
|
|
123
|
-
size: validationCache.size,
|
|
124
|
-
entries: Array.from(validationCache.keys()),
|
|
125
|
-
};
|
|
157
|
+
return validationCache.getStats();
|
|
126
158
|
}
|
|
127
159
|
//# sourceMappingURL=research-validator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"research-validator.js","sourceRoot":"","sources":["../../../src/core/agents/research-validator.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"research-validator.js","sourceRoot":"","sources":["../../../src/core/agents/research-validator.ts"],"names":[],"mappings":"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"}
|