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.
Files changed (277) hide show
  1. package/README.md +16 -1
  2. package/dist/commands/init.d.ts.map +1 -1
  3. package/dist/commands/init.js +10 -0
  4. package/dist/commands/init.js.map +1 -1
  5. package/dist/core/agents/__tests__/confidence-gate.test.d.ts +5 -0
  6. package/dist/core/agents/__tests__/confidence-gate.test.d.ts.map +1 -0
  7. package/dist/core/agents/__tests__/confidence-gate.test.js +329 -0
  8. package/dist/core/agents/__tests__/confidence-gate.test.js.map +1 -0
  9. package/dist/core/agents/__tests__/gap-detector.test.d.ts +5 -0
  10. package/dist/core/agents/__tests__/gap-detector.test.d.ts.map +1 -0
  11. package/dist/core/agents/__tests__/gap-detector.test.js +609 -0
  12. package/dist/core/agents/__tests__/gap-detector.test.js.map +1 -0
  13. package/dist/core/agents/__tests__/learning-loop.test.d.ts +5 -0
  14. package/dist/core/agents/__tests__/learning-loop.test.d.ts.map +1 -0
  15. package/dist/core/agents/__tests__/learning-loop.test.js +663 -0
  16. package/dist/core/agents/__tests__/learning-loop.test.js.map +1 -0
  17. package/dist/core/agents/__tests__/parallel-executor.test.d.ts +5 -0
  18. package/dist/core/agents/__tests__/parallel-executor.test.d.ts.map +1 -0
  19. package/dist/core/agents/__tests__/parallel-executor.test.js +610 -0
  20. package/dist/core/agents/__tests__/parallel-executor.test.js.map +1 -0
  21. package/dist/core/agents/__tests__/research-validator.test.js +5 -5
  22. package/dist/core/agents/__tests__/research-validator.test.js.map +1 -1
  23. package/dist/core/agents/__tests__/skill-creator.test.d.ts +5 -0
  24. package/dist/core/agents/__tests__/skill-creator.test.d.ts.map +1 -0
  25. package/dist/core/agents/__tests__/skill-creator.test.js +443 -0
  26. package/dist/core/agents/__tests__/skill-creator.test.js.map +1 -0
  27. package/dist/core/agents/__tests__/state-persistence.test.d.ts +2 -0
  28. package/dist/core/agents/__tests__/state-persistence.test.d.ts.map +1 -0
  29. package/dist/core/agents/__tests__/state-persistence.test.js +270 -0
  30. package/dist/core/agents/__tests__/state-persistence.test.js.map +1 -0
  31. package/dist/core/agents/__tests__/validation-cache.test.d.ts +2 -0
  32. package/dist/core/agents/__tests__/validation-cache.test.d.ts.map +1 -0
  33. package/dist/core/agents/__tests__/validation-cache.test.js +181 -0
  34. package/dist/core/agents/__tests__/validation-cache.test.js.map +1 -0
  35. package/dist/core/agents/ambiguity-resolver.d.ts +14 -1
  36. package/dist/core/agents/ambiguity-resolver.d.ts.map +1 -1
  37. package/dist/core/agents/ambiguity-resolver.js +24 -2
  38. package/dist/core/agents/ambiguity-resolver.js.map +1 -1
  39. package/dist/core/agents/blackboard.d.ts +22 -3
  40. package/dist/core/agents/blackboard.d.ts.map +1 -1
  41. package/dist/core/agents/blackboard.js +52 -2
  42. package/dist/core/agents/blackboard.js.map +1 -1
  43. package/dist/core/agents/circuit-breaker.d.ts +79 -1
  44. package/dist/core/agents/circuit-breaker.d.ts.map +1 -1
  45. package/dist/core/agents/circuit-breaker.js +175 -1
  46. package/dist/core/agents/circuit-breaker.js.map +1 -1
  47. package/dist/core/agents/clarification-phase.d.ts +128 -0
  48. package/dist/core/agents/clarification-phase.d.ts.map +1 -0
  49. package/dist/core/agents/clarification-phase.js +375 -0
  50. package/dist/core/agents/clarification-phase.js.map +1 -0
  51. package/dist/core/agents/confidence-gate.d.ts +133 -4
  52. package/dist/core/agents/confidence-gate.d.ts.map +1 -1
  53. package/dist/core/agents/confidence-gate.js +376 -9
  54. package/dist/core/agents/confidence-gate.js.map +1 -1
  55. package/dist/core/agents/correction-tracker.d.ts +197 -0
  56. package/dist/core/agents/correction-tracker.d.ts.map +1 -0
  57. package/dist/core/agents/correction-tracker.js +366 -0
  58. package/dist/core/agents/correction-tracker.js.map +1 -0
  59. package/dist/core/agents/dependency-graph.d.ts +193 -0
  60. package/dist/core/agents/dependency-graph.d.ts.map +1 -0
  61. package/dist/core/agents/dependency-graph.js +462 -0
  62. package/dist/core/agents/dependency-graph.js.map +1 -0
  63. package/dist/core/agents/gap-detector.d.ts +277 -0
  64. package/dist/core/agents/gap-detector.d.ts.map +1 -0
  65. package/dist/core/agents/gap-detector.js +540 -0
  66. package/dist/core/agents/gap-detector.js.map +1 -0
  67. package/dist/core/agents/index.d.ts +14 -1
  68. package/dist/core/agents/index.d.ts.map +1 -1
  69. package/dist/core/agents/index.js +26 -1
  70. package/dist/core/agents/index.js.map +1 -1
  71. package/dist/core/agents/message-protocol.d.ts +13 -2
  72. package/dist/core/agents/message-protocol.d.ts.map +1 -1
  73. package/dist/core/agents/message-protocol.js +20 -1
  74. package/dist/core/agents/message-protocol.js.map +1 -1
  75. package/dist/core/agents/parallel-executor.d.ts +182 -0
  76. package/dist/core/agents/parallel-executor.d.ts.map +1 -0
  77. package/dist/core/agents/parallel-executor.js +474 -0
  78. package/dist/core/agents/parallel-executor.js.map +1 -0
  79. package/dist/core/agents/pattern-detector.d.ts +157 -0
  80. package/dist/core/agents/pattern-detector.d.ts.map +1 -0
  81. package/dist/core/agents/pattern-detector.js +370 -0
  82. package/dist/core/agents/pattern-detector.js.map +1 -0
  83. package/dist/core/agents/registry-client.d.ts +6 -0
  84. package/dist/core/agents/registry-client.d.ts.map +1 -1
  85. package/dist/core/agents/registry-client.js +3 -0
  86. package/dist/core/agents/registry-client.js.map +1 -1
  87. package/dist/core/agents/research-phase.d.ts +114 -0
  88. package/dist/core/agents/research-phase.d.ts.map +1 -0
  89. package/dist/core/agents/research-phase.js +355 -0
  90. package/dist/core/agents/research-phase.js.map +1 -0
  91. package/dist/core/agents/research-validator.d.ts +13 -2
  92. package/dist/core/agents/research-validator.d.ts.map +1 -1
  93. package/dist/core/agents/research-validator.js +63 -31
  94. package/dist/core/agents/research-validator.js.map +1 -1
  95. package/dist/core/agents/skill-creator.d.ts +174 -0
  96. package/dist/core/agents/skill-creator.d.ts.map +1 -0
  97. package/dist/core/agents/skill-creator.js +570 -0
  98. package/dist/core/agents/skill-creator.js.map +1 -0
  99. package/dist/core/agents/state-persistence.d.ts +184 -0
  100. package/dist/core/agents/state-persistence.d.ts.map +1 -0
  101. package/dist/core/agents/state-persistence.js +394 -0
  102. package/dist/core/agents/state-persistence.js.map +1 -0
  103. package/dist/core/agents/validation-cache.d.ts +122 -0
  104. package/dist/core/agents/validation-cache.d.ts.map +1 -0
  105. package/dist/core/agents/validation-cache.js +280 -0
  106. package/dist/core/agents/validation-cache.js.map +1 -0
  107. package/dist/core/agents/validators/__tests__/validators.test.d.ts +5 -0
  108. package/dist/core/agents/validators/__tests__/validators.test.d.ts.map +1 -0
  109. package/dist/core/agents/validators/__tests__/validators.test.js +321 -0
  110. package/dist/core/agents/validators/__tests__/validators.test.js.map +1 -0
  111. package/dist/core/agents/validators/base-validator.d.ts +191 -0
  112. package/dist/core/agents/validators/base-validator.d.ts.map +1 -0
  113. package/dist/core/agents/validators/base-validator.js +192 -0
  114. package/dist/core/agents/validators/base-validator.js.map +1 -0
  115. package/dist/core/agents/validators/index.d.ts +7 -0
  116. package/dist/core/agents/validators/index.d.ts.map +1 -0
  117. package/dist/core/agents/validators/index.js +7 -0
  118. package/dist/core/agents/validators/index.js.map +1 -0
  119. package/dist/core/agents/validators/npm-validator.d.ts +50 -0
  120. package/dist/core/agents/validators/npm-validator.d.ts.map +1 -0
  121. package/dist/core/agents/validators/npm-validator.js +211 -0
  122. package/dist/core/agents/validators/npm-validator.js.map +1 -0
  123. package/dist/core/agents/validators/pip-validator.d.ts +49 -0
  124. package/dist/core/agents/validators/pip-validator.d.ts.map +1 -0
  125. package/dist/core/agents/validators/pip-validator.js +191 -0
  126. package/dist/core/agents/validators/pip-validator.js.map +1 -0
  127. package/dist/core/agents/validators/validator-registry.d.ts +122 -0
  128. package/dist/core/agents/validators/validator-registry.d.ts.map +1 -0
  129. package/dist/core/agents/validators/validator-registry.js +321 -0
  130. package/dist/core/agents/validators/validator-registry.js.map +1 -0
  131. package/dist/core/context/auto-injection-engine.d.ts +7 -1
  132. package/dist/core/context/auto-injection-engine.d.ts.map +1 -1
  133. package/dist/core/context/auto-injection-engine.js +46 -1
  134. package/dist/core/context/auto-injection-engine.js.map +1 -1
  135. package/dist/core/context-repl/types.d.ts +4 -4
  136. package/dist/core/memory/index.d.ts +1 -0
  137. package/dist/core/memory/index.d.ts.map +1 -1
  138. package/dist/core/memory/index.js +2 -0
  139. package/dist/core/memory/index.js.map +1 -1
  140. package/dist/core/memory/learning-store.d.ts +222 -0
  141. package/dist/core/memory/learning-store.d.ts.map +1 -0
  142. package/dist/core/memory/learning-store.js +477 -0
  143. package/dist/core/memory/learning-store.js.map +1 -0
  144. package/dist/core/ralph/__tests__/prd-generator-session-context.test.d.ts +7 -0
  145. package/dist/core/ralph/__tests__/prd-generator-session-context.test.d.ts.map +1 -0
  146. package/dist/core/ralph/__tests__/prd-generator-session-context.test.js +143 -0
  147. package/dist/core/ralph/__tests__/prd-generator-session-context.test.js.map +1 -0
  148. package/dist/core/ralph/index.d.ts +3 -3
  149. package/dist/core/ralph/index.d.ts.map +1 -1
  150. package/dist/core/ralph/index.js +2 -2
  151. package/dist/core/ralph/index.js.map +1 -1
  152. package/dist/core/ralph/prd-generator.d.ts +18 -3
  153. package/dist/core/ralph/prd-generator.d.ts.map +1 -1
  154. package/dist/core/ralph/prd-generator.js +33 -11
  155. package/dist/core/ralph/prd-generator.js.map +1 -1
  156. package/dist/core/ralph/progress-tracker.d.ts.map +1 -1
  157. package/dist/core/ralph/progress-tracker.js +2 -1
  158. package/dist/core/ralph/progress-tracker.js.map +1 -1
  159. package/dist/core/ralph/sub-agent-spawner.d.ts +4 -2
  160. package/dist/core/ralph/sub-agent-spawner.d.ts.map +1 -1
  161. package/dist/core/ralph/sub-agent-spawner.js +48 -3
  162. package/dist/core/ralph/sub-agent-spawner.js.map +1 -1
  163. package/dist/core/ralph/task-integration.d.ts.map +1 -1
  164. package/dist/core/ralph/task-integration.js +6 -3
  165. package/dist/core/ralph/task-integration.js.map +1 -1
  166. package/dist/core/ralph/types.d.ts +62 -3
  167. package/dist/core/ralph/types.d.ts.map +1 -1
  168. package/dist/core/ralph/types.js.map +1 -1
  169. package/dist/core/recommendations/recommendation-engine.d.ts +6 -0
  170. package/dist/core/recommendations/recommendation-engine.d.ts.map +1 -1
  171. package/dist/core/recommendations/recommendation-engine.js.map +1 -1
  172. package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.d.ts +5 -0
  173. package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.d.ts.map +1 -0
  174. package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.js +401 -0
  175. package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.js.map +1 -0
  176. package/dist/core/spec-analyzer/ambiguity-detector.d.ts +99 -0
  177. package/dist/core/spec-analyzer/ambiguity-detector.d.ts.map +1 -0
  178. package/dist/core/spec-analyzer/ambiguity-detector.js +250 -0
  179. package/dist/core/spec-analyzer/ambiguity-detector.js.map +1 -0
  180. package/dist/core/spec-analyzer/clarification-generator.d.ts +76 -0
  181. package/dist/core/spec-analyzer/clarification-generator.d.ts.map +1 -0
  182. package/dist/core/spec-analyzer/clarification-generator.js +257 -0
  183. package/dist/core/spec-analyzer/clarification-generator.js.map +1 -0
  184. package/dist/core/spec-analyzer/index.d.ts +22 -2
  185. package/dist/core/spec-analyzer/index.d.ts.map +1 -1
  186. package/dist/core/spec-analyzer/index.js +21 -3
  187. package/dist/core/spec-analyzer/index.js.map +1 -1
  188. package/dist/core/spec-analyzer/patterns.d.ts +73 -0
  189. package/dist/core/spec-analyzer/patterns.d.ts.map +1 -0
  190. package/dist/core/spec-analyzer/patterns.js +412 -0
  191. package/dist/core/spec-analyzer/patterns.js.map +1 -0
  192. package/dist/hooks/__tests__/dynamic-generator.test.d.ts +5 -0
  193. package/dist/hooks/__tests__/dynamic-generator.test.d.ts.map +1 -0
  194. package/dist/hooks/__tests__/dynamic-generator.test.js +425 -0
  195. package/dist/hooks/__tests__/dynamic-generator.test.js.map +1 -0
  196. package/dist/hooks/__tests__/hook-agent-bridge.test.d.ts +5 -0
  197. package/dist/hooks/__tests__/hook-agent-bridge.test.d.ts.map +1 -0
  198. package/dist/hooks/__tests__/hook-agent-bridge.test.js +315 -0
  199. package/dist/hooks/__tests__/hook-agent-bridge.test.js.map +1 -0
  200. package/dist/hooks/dynamic-generator.d.ts +158 -0
  201. package/dist/hooks/dynamic-generator.d.ts.map +1 -0
  202. package/dist/hooks/dynamic-generator.js +448 -0
  203. package/dist/hooks/dynamic-generator.js.map +1 -0
  204. package/dist/hooks/hook-agent-bridge.d.ts +252 -0
  205. package/dist/hooks/hook-agent-bridge.d.ts.map +1 -0
  206. package/dist/hooks/hook-agent-bridge.js +489 -0
  207. package/dist/hooks/hook-agent-bridge.js.map +1 -0
  208. package/dist/hooks/index.d.ts +3 -1
  209. package/dist/hooks/index.d.ts.map +1 -1
  210. package/dist/hooks/index.js +5 -1
  211. package/dist/hooks/index.js.map +1 -1
  212. package/dist/mcp/tool-catalog.d.ts.map +1 -1
  213. package/dist/mcp/tool-catalog.js +47 -0
  214. package/dist/mcp/tool-catalog.js.map +1 -1
  215. package/dist/mcp/tool-tiers.d.ts.map +1 -1
  216. package/dist/mcp/tool-tiers.js +4 -0
  217. package/dist/mcp/tool-tiers.js.map +1 -1
  218. package/dist/mcp/tools/auto-inject.d.ts +4 -0
  219. package/dist/mcp/tools/auto-inject.d.ts.map +1 -1
  220. package/dist/mcp/tools/auto-inject.js +13 -4
  221. package/dist/mcp/tools/auto-inject.js.map +1 -1
  222. package/dist/mcp/tools/chunking.d.ts +3 -0
  223. package/dist/mcp/tools/chunking.d.ts.map +1 -1
  224. package/dist/mcp/tools/chunking.js +10 -4
  225. package/dist/mcp/tools/chunking.js.map +1 -1
  226. package/dist/mcp/tools/embeddings.d.ts +4 -0
  227. package/dist/mcp/tools/embeddings.d.ts.map +1 -1
  228. package/dist/mcp/tools/embeddings.js +16 -6
  229. package/dist/mcp/tools/embeddings.js.map +1 -1
  230. package/dist/mcp/tools/index.d.ts +2 -1
  231. package/dist/mcp/tools/index.d.ts.map +1 -1
  232. package/dist/mcp/tools/index.js +15 -1
  233. package/dist/mcp/tools/index.js.map +1 -1
  234. package/dist/mcp/tools/knowledge-graph.d.ts +3 -0
  235. package/dist/mcp/tools/knowledge-graph.d.ts.map +1 -1
  236. package/dist/mcp/tools/knowledge-graph.js +19 -8
  237. package/dist/mcp/tools/knowledge-graph.js.map +1 -1
  238. package/dist/mcp/tools/lazy-context.d.ts +2 -0
  239. package/dist/mcp/tools/lazy-context.d.ts.map +1 -1
  240. package/dist/mcp/tools/lazy-context.js +10 -4
  241. package/dist/mcp/tools/lazy-context.js.map +1 -1
  242. package/dist/mcp/tools/learning-store.d.ts +30 -0
  243. package/dist/mcp/tools/learning-store.d.ts.map +1 -0
  244. package/dist/mcp/tools/learning-store.js +286 -0
  245. package/dist/mcp/tools/learning-store.js.map +1 -0
  246. package/dist/mcp/tools/memory-decay.d.ts.map +1 -1
  247. package/dist/mcp/tools/memory-decay.js +4 -2
  248. package/dist/mcp/tools/memory-decay.js.map +1 -1
  249. package/dist/mcp/tools/prefetch.d.ts +4 -1
  250. package/dist/mcp/tools/prefetch.d.ts.map +1 -1
  251. package/dist/mcp/tools/prefetch.js +18 -7
  252. package/dist/mcp/tools/prefetch.js.map +1 -1
  253. package/dist/mcp/tools/ralph.d.ts +2 -0
  254. package/dist/mcp/tools/ralph.d.ts.map +1 -1
  255. package/dist/mcp/tools/ralph.js +96 -6
  256. package/dist/mcp/tools/ralph.js.map +1 -1
  257. package/dist/mcp/tools/recommendations.d.ts +2 -0
  258. package/dist/mcp/tools/recommendations.d.ts.map +1 -1
  259. package/dist/mcp/tools/recommendations.js +13 -4
  260. package/dist/mcp/tools/recommendations.js.map +1 -1
  261. package/dist/mcp/tools/retrieval.d.ts +4 -0
  262. package/dist/mcp/tools/retrieval.d.ts.map +1 -1
  263. package/dist/mcp/tools/retrieval.js +25 -10
  264. package/dist/mcp/tools/retrieval.js.map +1 -1
  265. package/dist/mcp/tools/spec-feedback.d.ts +2 -0
  266. package/dist/mcp/tools/spec-feedback.d.ts.map +1 -1
  267. package/dist/mcp/tools/spec-feedback.js +33 -16
  268. package/dist/mcp/tools/spec-feedback.js.map +1 -1
  269. package/dist/mcp/utils/index.d.ts +1 -0
  270. package/dist/mcp/utils/index.d.ts.map +1 -1
  271. package/dist/mcp/utils/index.js +2 -0
  272. package/dist/mcp/utils/index.js.map +1 -1
  273. package/dist/mcp/utils/session-context.d.ts +108 -0
  274. package/dist/mcp/utils/session-context.d.ts.map +1 -0
  275. package/dist/mcp/utils/session-context.js +157 -0
  276. package/dist/mcp/utils/session-context.js.map +1 -0
  277. package/package.json +1 -1
@@ -0,0 +1,192 @@
1
+ /**
2
+ * Base Validator - v17.5.0
3
+ *
4
+ * Abstract base class for package validators.
5
+ * Provides common interface and utilities for ecosystem-specific validators.
6
+ *
7
+ * @module base-validator
8
+ */
9
+ import { RateLimiter, ValidationCache } from '../validation-cache.js';
10
+ // =============================================================================
11
+ // Constants
12
+ // =============================================================================
13
+ export const DEFAULT_VALIDATOR_CONFIG = {
14
+ enableCache: true,
15
+ cacheTtlMs: 60 * 60 * 1000, // 1 hour
16
+ enableRateLimit: true,
17
+ timeoutMs: 10000, // 10 seconds
18
+ blockOnCritical: true,
19
+ blockOnHigh: false,
20
+ };
21
+ // =============================================================================
22
+ // Base Validator Class
23
+ // =============================================================================
24
+ /**
25
+ * Abstract base class for package validators
26
+ */
27
+ export class BaseValidator {
28
+ config;
29
+ cache;
30
+ rateLimiter;
31
+ ecosystem;
32
+ constructor(ecosystem, config = {}) {
33
+ this.ecosystem = ecosystem;
34
+ this.config = { ...DEFAULT_VALIDATOR_CONFIG, ...config };
35
+ this.cache = new ValidationCache({
36
+ maxEntries: 1000,
37
+ ttlMs: this.config.cacheTtlMs,
38
+ });
39
+ this.rateLimiter = new RateLimiter();
40
+ }
41
+ /**
42
+ * Get the ecosystem this validator handles
43
+ */
44
+ getEcosystem() {
45
+ return this.ecosystem;
46
+ }
47
+ /**
48
+ * Check if this validator can handle a package
49
+ */
50
+ canHandle(pkg) {
51
+ return pkg.ecosystem === this.ecosystem;
52
+ }
53
+ /**
54
+ * Validate a package
55
+ */
56
+ async validate(pkg) {
57
+ // Check cache first
58
+ const cacheKey = this.getCacheKey(pkg);
59
+ if (this.config.enableCache) {
60
+ const cached = this.cache.get(cacheKey);
61
+ if (cached) {
62
+ return { ...cached, cached: true };
63
+ }
64
+ }
65
+ // Perform validation
66
+ const result = await this.performValidation(pkg);
67
+ // Determine if should block
68
+ result.blocked = this.shouldBlock(result.issues);
69
+ // Cache result
70
+ if (this.config.enableCache) {
71
+ this.cache.set(cacheKey, result, this.config.cacheTtlMs);
72
+ }
73
+ return result;
74
+ }
75
+ /**
76
+ * Validate multiple packages
77
+ */
78
+ async validateBatch(packages) {
79
+ const results = [];
80
+ for (const pkg of packages) {
81
+ if (this.canHandle(pkg)) {
82
+ results.push(await this.validate(pkg));
83
+ }
84
+ }
85
+ return results;
86
+ }
87
+ /**
88
+ * Check if issues should block installation
89
+ */
90
+ shouldBlock(issues) {
91
+ if (this.config.blockOnCritical) {
92
+ if (issues.some((i) => i.severity === 'critical')) {
93
+ return true;
94
+ }
95
+ }
96
+ if (this.config.blockOnHigh) {
97
+ if (issues.some((i) => i.severity === 'high')) {
98
+ return true;
99
+ }
100
+ }
101
+ return false;
102
+ }
103
+ /**
104
+ * Generate cache key for a package
105
+ */
106
+ getCacheKey(pkg) {
107
+ return `${this.ecosystem}:${pkg.name}:${pkg.version || 'latest'}`;
108
+ }
109
+ /**
110
+ * Clear the validation cache
111
+ */
112
+ clearCache() {
113
+ this.cache.clear();
114
+ }
115
+ /**
116
+ * Get cache statistics
117
+ */
118
+ getCacheStats() {
119
+ return this.cache.getStats();
120
+ }
121
+ }
122
+ // =============================================================================
123
+ // Helper Functions
124
+ // =============================================================================
125
+ /**
126
+ * Create a validation issue
127
+ */
128
+ export function createIssue(type, severity, message, options) {
129
+ return {
130
+ type,
131
+ severity,
132
+ message,
133
+ ...options,
134
+ };
135
+ }
136
+ /**
137
+ * Create a successful validation result
138
+ */
139
+ export function createSuccessResult(pkg) {
140
+ return {
141
+ package: pkg,
142
+ valid: true,
143
+ blocked: false,
144
+ issues: [],
145
+ timestamp: new Date(),
146
+ cached: false,
147
+ };
148
+ }
149
+ /**
150
+ * Format validation result for display
151
+ */
152
+ export function formatValidationResult(result) {
153
+ const lines = [];
154
+ const status = result.blocked ? '🚫 BLOCKED' : result.valid ? '✅ VALID' : '⚠️ ISSUES';
155
+ lines.push(`## ${result.package.name}@${result.package.version || 'latest'}`);
156
+ lines.push('');
157
+ lines.push(`**Status:** ${status}`);
158
+ lines.push(`**Ecosystem:** ${result.package.ecosystem}`);
159
+ lines.push('');
160
+ if (result.metadata) {
161
+ lines.push('### Metadata');
162
+ if (result.metadata.latestVersion) {
163
+ lines.push(`- Latest: ${result.metadata.latestVersion}`);
164
+ }
165
+ if (result.metadata.license) {
166
+ lines.push(`- License: ${result.metadata.license}`);
167
+ }
168
+ if (result.metadata.downloads !== undefined) {
169
+ lines.push(`- Downloads: ${result.metadata.downloads.toLocaleString()}/week`);
170
+ }
171
+ lines.push('');
172
+ }
173
+ if (result.issues.length > 0) {
174
+ lines.push('### Issues');
175
+ for (const issue of result.issues) {
176
+ const emoji = issue.severity === 'critical'
177
+ ? '🔴'
178
+ : issue.severity === 'high'
179
+ ? '🟠'
180
+ : issue.severity === 'moderate'
181
+ ? '🟡'
182
+ : '🟢';
183
+ lines.push(`${emoji} **[${issue.severity}]** ${issue.message}`);
184
+ if (issue.suggestion) {
185
+ lines.push(` _Suggestion:_ ${issue.suggestion}`);
186
+ }
187
+ }
188
+ lines.push('');
189
+ }
190
+ return lines.join('\n');
191
+ }
192
+ //# sourceMappingURL=base-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-validator.js","sourceRoot":"","sources":["../../../../src/core/agents/validators/base-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Plugin-Based Validators - v17.5.0
3
+ *
4
+ * Extensible validation system for package ecosystems.
5
+ */
6
+ export * from './validator-registry.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/validators/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,yBAAyB,CAAA"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Plugin-Based Validators - v17.5.0
3
+ *
4
+ * Extensible validation system for package ecosystems.
5
+ */
6
+ export * from './validator-registry.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/agents/validators/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,yBAAyB,CAAA"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * NPM Validator - v17.5.0
3
+ *
4
+ * Validates npm packages for security, quality, and deprecation.
5
+ * Refactored from research-validator to use plugin architecture.
6
+ *
7
+ * @module npm-validator
8
+ */
9
+ import { BaseValidator, type PackageId, type PackageMetadata, type ValidationIssue, type ValidationResult, type ValidatorConfig } from './base-validator.js';
10
+ /**
11
+ * NPM package validator
12
+ */
13
+ export declare class NpmValidator extends BaseValidator {
14
+ constructor(config?: Partial<ValidatorConfig>);
15
+ /**
16
+ * Perform NPM package validation
17
+ */
18
+ protected performValidation(pkg: PackageId): Promise<ValidationResult>;
19
+ /**
20
+ * Fetch NPM package metadata
21
+ */
22
+ fetchMetadata(pkg: PackageId): Promise<PackageMetadata | undefined>;
23
+ /**
24
+ * Convert registry metadata to common format
25
+ */
26
+ private convertMetadata;
27
+ /**
28
+ * Check for security vulnerabilities
29
+ */
30
+ checkSecurity(pkg: PackageId): Promise<ValidationIssue[]>;
31
+ /**
32
+ * Check for deprecation
33
+ */
34
+ checkDeprecation(pkg: PackageId): Promise<ValidationIssue[]>;
35
+ /**
36
+ * Check quality indicators
37
+ */
38
+ checkQuality(_pkg: PackageId, metadata?: PackageMetadata): Promise<ValidationIssue[]>;
39
+ /**
40
+ * Check package size
41
+ */
42
+ checkSize(pkg: PackageId): Promise<ValidationIssue[]>;
43
+ /**
44
+ * Get the latest version of a package
45
+ */
46
+ getLatestVersion(packageName: string): Promise<string | undefined>;
47
+ }
48
+ /** Default NPM validator instance */
49
+ export declare const npmValidator: NpmValidator;
50
+ //# sourceMappingURL=npm-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-validator.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/validators/npm-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,OAAO,EACL,aAAa,EAGb,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACrB,MAAM,qBAAqB,CAAA;AAM5B;;GAEG;AACH,qBAAa,YAAa,SAAQ,aAAa;gBACjC,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM;IAIjD;;OAEG;cACa,iBAAiB,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAyC5E;;OAEG;IACG,aAAa,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAWzE;;OAEG;IACH,OAAO,CAAC,eAAe;IAcvB;;OAEG;IACG,aAAa,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IA4B/D;;OAEG;IACG,gBAAgB,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAwBlE;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAiD3F;;OAEG;IACG,SAAS,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAiC3D;;OAEG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAQzE;AAMD,qCAAqC;AACrC,eAAO,MAAM,YAAY,cAAqB,CAAA"}
@@ -0,0 +1,211 @@
1
+ /**
2
+ * NPM Validator - v17.5.0
3
+ *
4
+ * Validates npm packages for security, quality, and deprecation.
5
+ * Refactored from research-validator to use plugin architecture.
6
+ *
7
+ * @module npm-validator
8
+ */
9
+ import { fetchPackageMetadata, getPackageSize, } from '../registry-client.js';
10
+ import { scanPackage } from '../security-scanner.js';
11
+ import { BaseValidator, createIssue, createSuccessResult, } from './base-validator.js';
12
+ // =============================================================================
13
+ // NPM Validator
14
+ // =============================================================================
15
+ /**
16
+ * NPM package validator
17
+ */
18
+ export class NpmValidator extends BaseValidator {
19
+ constructor(config = {}) {
20
+ super('npm', config);
21
+ }
22
+ /**
23
+ * Perform NPM package validation
24
+ */
25
+ async performValidation(pkg) {
26
+ const result = createSuccessResult(pkg);
27
+ const issues = [];
28
+ try {
29
+ // Fetch metadata
30
+ const metadata = await this.fetchMetadata(pkg);
31
+ result.metadata = metadata;
32
+ // Check security
33
+ const securityIssues = await this.checkSecurity(pkg);
34
+ issues.push(...securityIssues);
35
+ // Check deprecation
36
+ const deprecationIssues = await this.checkDeprecation(pkg);
37
+ issues.push(...deprecationIssues);
38
+ // Check quality
39
+ const qualityIssues = await this.checkQuality(pkg, metadata);
40
+ issues.push(...qualityIssues);
41
+ // Check size
42
+ const sizeIssues = await this.checkSize(pkg);
43
+ issues.push(...sizeIssues);
44
+ result.issues = issues;
45
+ result.valid = !issues.some((i) => i.severity === 'critical' || i.severity === 'high');
46
+ }
47
+ catch (error) {
48
+ // If validation fails, add error issue
49
+ issues.push(createIssue('quality', 'moderate', `Validation error: ${String(error)}`, {
50
+ suggestion: 'Check package name and try again',
51
+ }));
52
+ result.issues = issues;
53
+ result.valid = true; // Don't block on validation errors
54
+ }
55
+ return result;
56
+ }
57
+ /**
58
+ * Fetch NPM package metadata
59
+ */
60
+ async fetchMetadata(pkg) {
61
+ try {
62
+ const registryMeta = await fetchPackageMetadata(pkg.name);
63
+ if (!registryMeta)
64
+ return undefined;
65
+ return this.convertMetadata(registryMeta, pkg.version);
66
+ }
67
+ catch {
68
+ return undefined;
69
+ }
70
+ }
71
+ /**
72
+ * Convert registry metadata to common format
73
+ */
74
+ convertMetadata(meta, requestedVersion) {
75
+ return {
76
+ latestVersion: meta.version,
77
+ requestedVersion: requestedVersion,
78
+ deprecated: !!meta.deprecated,
79
+ deprecationMessage: meta.deprecated || undefined,
80
+ license: meta.license,
81
+ downloads: meta.weeklyDownloads,
82
+ lastPublish: meta.lastPublish ? new Date(meta.lastPublish) : undefined,
83
+ maintainerCount: meta.maintainers?.length ?? 0,
84
+ repository: meta.repository,
85
+ };
86
+ }
87
+ /**
88
+ * Check for security vulnerabilities
89
+ */
90
+ async checkSecurity(pkg) {
91
+ const issues = [];
92
+ try {
93
+ const scan = await scanPackage(pkg.name, pkg.version);
94
+ for (const vuln of scan.vulnerabilities) {
95
+ issues.push(createIssue('security', vuln.severity, `${vuln.title}: ${vuln.overview}`, {
96
+ details: {
97
+ id: vuln.id,
98
+ url: vuln.url,
99
+ patchedVersions: vuln.patched_versions,
100
+ },
101
+ suggestion: vuln.patched_versions && vuln.patched_versions !== 'none'
102
+ ? `Upgrade to ${vuln.patched_versions}`
103
+ : 'Consider using an alternative package',
104
+ }));
105
+ }
106
+ }
107
+ catch {
108
+ // Security scan failed - don't block, just note it
109
+ }
110
+ return issues;
111
+ }
112
+ /**
113
+ * Check for deprecation
114
+ */
115
+ async checkDeprecation(pkg) {
116
+ const issues = [];
117
+ try {
118
+ const meta = await fetchPackageMetadata(pkg.name);
119
+ if (meta?.deprecated) {
120
+ issues.push(createIssue('deprecation', 'high', `Package "${pkg.name}" is deprecated: ${meta.deprecated}`, {
121
+ suggestion: 'Consider using an alternative package',
122
+ }));
123
+ }
124
+ }
125
+ catch {
126
+ // Ignore errors
127
+ }
128
+ return issues;
129
+ }
130
+ /**
131
+ * Check quality indicators
132
+ */
133
+ async checkQuality(_pkg, metadata) {
134
+ const issues = [];
135
+ if (!metadata)
136
+ return issues;
137
+ // Check downloads
138
+ if (metadata.downloads !== undefined && metadata.downloads < 100) {
139
+ issues.push(createIssue('quality', 'info', `Low weekly downloads: ${metadata.downloads}`, {
140
+ suggestion: 'This package has limited usage. Consider alternatives.',
141
+ }));
142
+ }
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 maintainers
154
+ if (metadata.maintainerCount === 0) {
155
+ issues.push(createIssue('maintenance', 'high', 'No maintainers listed', {
156
+ suggestion: 'This package may be abandoned',
157
+ }));
158
+ }
159
+ // Check license
160
+ if (!metadata.license) {
161
+ issues.push(createIssue('license', 'moderate', 'No license specified', {
162
+ suggestion: 'Verify license compatibility before using',
163
+ }));
164
+ }
165
+ return issues;
166
+ }
167
+ /**
168
+ * Check package size
169
+ */
170
+ async checkSize(pkg) {
171
+ const issues = [];
172
+ try {
173
+ const version = pkg.version || (await this.getLatestVersion(pkg.name)) || 'latest';
174
+ const sizeInfo = await getPackageSize(pkg.name, version);
175
+ if (sizeInfo) {
176
+ // Warn if gzipped size > 100KB
177
+ if (sizeInfo.gzip > 100 * 1024) {
178
+ issues.push(createIssue('size', 'moderate', `Large package size: ${Math.round(sizeInfo.gzip / 1024)}KB gzipped`, {
179
+ details: {
180
+ gzip: sizeInfo.gzip,
181
+ size: sizeInfo.size,
182
+ },
183
+ suggestion: 'Consider if this size is acceptable for your use case',
184
+ }));
185
+ }
186
+ }
187
+ }
188
+ catch {
189
+ // Size check failed - non-critical
190
+ }
191
+ return issues;
192
+ }
193
+ /**
194
+ * Get the latest version of a package
195
+ */
196
+ async getLatestVersion(packageName) {
197
+ try {
198
+ const meta = await fetchPackageMetadata(packageName);
199
+ return meta?.version;
200
+ }
201
+ catch {
202
+ return undefined;
203
+ }
204
+ }
205
+ }
206
+ // =============================================================================
207
+ // Singleton Instance
208
+ // =============================================================================
209
+ /** Default NPM validator instance */
210
+ export const npmValidator = new NpmValidator();
211
+ //# sourceMappingURL=npm-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-validator.js","sourceRoot":"","sources":["../../../../src/core/agents/validators/npm-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
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, type PackageId, type PackageMetadata, type ValidationIssue, type ValidationResult, type ValidatorConfig } from './base-validator.js';
9
+ /**
10
+ * Python/PyPI package validator
11
+ */
12
+ export declare class PipValidator extends BaseValidator {
13
+ private readonly pypiBaseUrl;
14
+ constructor(config?: Partial<ValidatorConfig>);
15
+ /**
16
+ * Perform PyPI package validation
17
+ */
18
+ protected performValidation(pkg: PackageId): Promise<ValidationResult>;
19
+ /**
20
+ * Fetch PyPI package metadata
21
+ */
22
+ fetchMetadata(pkg: PackageId): Promise<PackageMetadata | undefined>;
23
+ /**
24
+ * Convert PyPI metadata to common format
25
+ */
26
+ private convertMetadata;
27
+ /**
28
+ * Check for security vulnerabilities
29
+ *
30
+ * Note: PyPI doesn't have a built-in vulnerability database like npm.
31
+ * For production use, integrate with safety-db or pip-audit.
32
+ */
33
+ checkSecurity(_pkg: PackageId): Promise<ValidationIssue[]>;
34
+ /**
35
+ * Check for deprecation
36
+ */
37
+ checkDeprecation(pkg: PackageId): Promise<ValidationIssue[]>;
38
+ /**
39
+ * Check quality indicators
40
+ */
41
+ private checkQuality;
42
+ /**
43
+ * Get the latest version of a package
44
+ */
45
+ getLatestVersion(packageName: string): Promise<string | undefined>;
46
+ }
47
+ /** Default PIP validator instance */
48
+ export declare const pipValidator: PipValidator;
49
+ //# sourceMappingURL=pip-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pip-validator.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/validators/pip-validator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,aAAa,EAGb,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACrB,MAAM,qBAAqB,CAAA;AA2C5B;;GAEG;AACH,qBAAa,YAAa,SAAQ,aAAa;IAC7C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0B;gBAE1C,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM;IAIjD;;OAEG;cACa,iBAAiB,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA+C5E;;OAEG;IACG,aAAa,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAsBzE;;OAEG;IACH,OAAO,CAAC,eAAe;IA8BvB;;;;;OAKG;IACG,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAMhE;;OAEG;IACG,gBAAgB,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAoBlE;;OAEG;YACW,YAAY;IA2C1B;;OAEG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAgBzE;AAMD,qCAAqC;AACrC,eAAO,MAAM,YAAY,cAAqB,CAAA"}