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,321 @@
1
+ /**
2
+ * Tests for plugin-based validators (v17.5.0)
3
+ */
4
+ import { beforeEach, describe, expect, it } from 'vitest';
5
+ import { BaseValidator, createIssue, formatValidationResult, } from '../base-validator.js';
6
+ import { NpmValidator } from '../npm-validator.js';
7
+ import { PipValidator } from '../pip-validator.js';
8
+ import { formatBatchResult, ValidatorRegistry } from '../validator-registry.js';
9
+ // =============================================================================
10
+ // Mock Validator for Testing
11
+ // =============================================================================
12
+ class MockValidator extends BaseValidator {
13
+ mockResults = new Map();
14
+ constructor() {
15
+ super('npm');
16
+ }
17
+ setMockResult(name, result) {
18
+ const pkg = { name, ecosystem: 'npm' };
19
+ this.mockResults.set(name, {
20
+ package: pkg,
21
+ valid: true,
22
+ blocked: false,
23
+ issues: [],
24
+ timestamp: new Date(),
25
+ cached: false,
26
+ ...result,
27
+ });
28
+ }
29
+ async performValidation(pkg) {
30
+ const mock = this.mockResults.get(pkg.name);
31
+ if (mock) {
32
+ return mock;
33
+ }
34
+ return {
35
+ package: pkg,
36
+ valid: true,
37
+ blocked: false,
38
+ issues: [],
39
+ timestamp: new Date(),
40
+ cached: false,
41
+ };
42
+ }
43
+ async fetchMetadata(_pkg) {
44
+ return {
45
+ latestVersion: '1.0.0',
46
+ license: 'MIT',
47
+ };
48
+ }
49
+ async checkSecurity(_pkg) {
50
+ return [];
51
+ }
52
+ async checkDeprecation(_pkg) {
53
+ return [];
54
+ }
55
+ async getLatestVersion(_packageName) {
56
+ return '1.0.0';
57
+ }
58
+ }
59
+ // =============================================================================
60
+ // Tests
61
+ // =============================================================================
62
+ describe('BaseValidator', () => {
63
+ it('should provide ecosystem', () => {
64
+ const validator = new MockValidator();
65
+ expect(validator.getEcosystem()).toBe('npm');
66
+ });
67
+ it('should check if it can handle a package', () => {
68
+ const validator = new MockValidator();
69
+ expect(validator.canHandle({ name: 'test', ecosystem: 'npm' })).toBe(true);
70
+ expect(validator.canHandle({ name: 'test', ecosystem: 'pip' })).toBe(false);
71
+ });
72
+ it('should validate packages', async () => {
73
+ const validator = new MockValidator();
74
+ const result = await validator.validate({ name: 'test-pkg', ecosystem: 'npm' });
75
+ expect(result.package.name).toBe('test-pkg');
76
+ expect(result.valid).toBe(true);
77
+ });
78
+ it('should cache results', async () => {
79
+ const validator = new MockValidator();
80
+ const pkg = { name: 'cached-pkg', ecosystem: 'npm' };
81
+ const result1 = await validator.validate(pkg);
82
+ expect(result1.cached).toBe(false);
83
+ const result2 = await validator.validate(pkg);
84
+ expect(result2.cached).toBe(true);
85
+ });
86
+ it('should clear cache', async () => {
87
+ const validator = new MockValidator();
88
+ const pkg = { name: 'clear-cache-pkg', ecosystem: 'npm' };
89
+ await validator.validate(pkg);
90
+ validator.clearCache();
91
+ const result = await validator.validate(pkg);
92
+ expect(result.cached).toBe(false);
93
+ });
94
+ it('should validate batch', async () => {
95
+ const validator = new MockValidator();
96
+ const packages = [
97
+ { name: 'pkg1', ecosystem: 'npm' },
98
+ { name: 'pkg2', ecosystem: 'npm' },
99
+ ];
100
+ const results = await validator.validateBatch(packages);
101
+ expect(results).toHaveLength(2);
102
+ });
103
+ });
104
+ describe('createIssue', () => {
105
+ it('should create validation issue', () => {
106
+ const issue = createIssue('security', 'high', 'Test vulnerability', {
107
+ suggestion: 'Upgrade package',
108
+ });
109
+ expect(issue.type).toBe('security');
110
+ expect(issue.severity).toBe('high');
111
+ expect(issue.message).toBe('Test vulnerability');
112
+ expect(issue.suggestion).toBe('Upgrade package');
113
+ });
114
+ });
115
+ describe('formatValidationResult', () => {
116
+ it('should format result as markdown', () => {
117
+ const result = {
118
+ package: { name: 'test-pkg', version: '1.0.0', ecosystem: 'npm' },
119
+ valid: true,
120
+ blocked: false,
121
+ issues: [],
122
+ timestamp: new Date(),
123
+ cached: false,
124
+ };
125
+ const markdown = formatValidationResult(result);
126
+ expect(markdown).toContain('test-pkg@1.0.0');
127
+ expect(markdown).toContain('VALID');
128
+ });
129
+ it('should show issues', () => {
130
+ const result = {
131
+ package: { name: 'test-pkg', ecosystem: 'npm' },
132
+ valid: false,
133
+ blocked: true,
134
+ issues: [createIssue('security', 'critical', 'Critical vulnerability')],
135
+ timestamp: new Date(),
136
+ cached: false,
137
+ };
138
+ const markdown = formatValidationResult(result);
139
+ expect(markdown).toContain('BLOCKED');
140
+ expect(markdown).toContain('Critical vulnerability');
141
+ expect(markdown).toContain('critical');
142
+ });
143
+ });
144
+ describe('NpmValidator', () => {
145
+ let validator;
146
+ beforeEach(() => {
147
+ validator = new NpmValidator();
148
+ });
149
+ it('should handle npm ecosystem', () => {
150
+ expect(validator.getEcosystem()).toBe('npm');
151
+ expect(validator.canHandle({ name: 'test', ecosystem: 'npm' })).toBe(true);
152
+ });
153
+ it('should get cache stats', () => {
154
+ const stats = validator.getCacheStats();
155
+ expect(stats).toHaveProperty('hits');
156
+ expect(stats).toHaveProperty('misses');
157
+ });
158
+ });
159
+ describe('PipValidator', () => {
160
+ let validator;
161
+ beforeEach(() => {
162
+ validator = new PipValidator();
163
+ });
164
+ it('should handle pip ecosystem', () => {
165
+ expect(validator.getEcosystem()).toBe('pip');
166
+ expect(validator.canHandle({ name: 'test', ecosystem: 'pip' })).toBe(true);
167
+ });
168
+ it('should get cache stats', () => {
169
+ const stats = validator.getCacheStats();
170
+ expect(stats).toHaveProperty('hits');
171
+ expect(stats).toHaveProperty('misses');
172
+ });
173
+ });
174
+ describe('ValidatorRegistry', () => {
175
+ let registry;
176
+ beforeEach(() => {
177
+ registry = new ValidatorRegistry();
178
+ });
179
+ describe('registration', () => {
180
+ it('should have built-in validators', () => {
181
+ expect(registry.isSupported('npm')).toBe(true);
182
+ expect(registry.isSupported('pip')).toBe(true);
183
+ });
184
+ it('should register custom validator', () => {
185
+ const custom = new MockValidator();
186
+ registry.register(custom, { priority: 200 });
187
+ const validators = registry.getValidators('npm');
188
+ expect(validators.length).toBeGreaterThan(1);
189
+ });
190
+ it('should unregister validator', () => {
191
+ const custom = new MockValidator();
192
+ registry.register(custom);
193
+ const removed = registry.unregister(custom);
194
+ expect(removed).toBe(true);
195
+ });
196
+ it('should get all ecosystems', () => {
197
+ const ecosystems = registry.getEcosystems();
198
+ expect(ecosystems).toContain('npm');
199
+ expect(ecosystems).toContain('pip');
200
+ });
201
+ });
202
+ describe('ecosystem detection', () => {
203
+ it('should detect npm from prefix', () => {
204
+ expect(registry.detectEcosystem('npm:lodash')).toBe('npm');
205
+ });
206
+ it('should detect pip from prefix', () => {
207
+ expect(registry.detectEcosystem('pip:requests')).toBe('pip');
208
+ });
209
+ it('should detect pip from version syntax', () => {
210
+ expect(registry.detectEcosystem('requests==2.28.0')).toBe('pip');
211
+ expect(registry.detectEcosystem('django>=4.0')).toBe('pip');
212
+ });
213
+ it('should detect npm scoped packages', () => {
214
+ expect(registry.detectEcosystem('@types/node')).toBe('npm');
215
+ });
216
+ it('should default to npm', () => {
217
+ expect(registry.detectEcosystem('lodash')).toBe('npm');
218
+ });
219
+ });
220
+ describe('package spec parsing', () => {
221
+ it('should parse npm packages', () => {
222
+ const pkg = registry.parsePackageSpec('lodash@4.17.21');
223
+ expect(pkg.name).toBe('lodash');
224
+ expect(pkg.version).toBe('4.17.21');
225
+ expect(pkg.ecosystem).toBe('npm');
226
+ });
227
+ it('should parse scoped npm packages', () => {
228
+ const pkg = registry.parsePackageSpec('@types/node@18.0.0');
229
+ expect(pkg.name).toBe('@types/node');
230
+ expect(pkg.version).toBe('18.0.0');
231
+ expect(pkg.ecosystem).toBe('npm');
232
+ });
233
+ it('should parse pip packages', () => {
234
+ const pkg = registry.parsePackageSpec('pip:requests==2.28.0');
235
+ expect(pkg.name).toBe('requests');
236
+ expect(pkg.version).toBe('2.28.0');
237
+ expect(pkg.ecosystem).toBe('pip');
238
+ });
239
+ it('should parse packages without version', () => {
240
+ const pkg = registry.parsePackageSpec('lodash');
241
+ expect(pkg.name).toBe('lodash');
242
+ expect(pkg.version).toBeUndefined();
243
+ });
244
+ });
245
+ describe('validation', () => {
246
+ it('should validate with mock validator', async () => {
247
+ // Create fresh registry with only mock validator to avoid network
248
+ const mockRegistry = new ValidatorRegistry();
249
+ const mock = new MockValidator();
250
+ mock.setMockResult('test-pkg', { valid: true });
251
+ mockRegistry.register(mock, { priority: 200 });
252
+ const result = await mockRegistry.validate({ name: 'test-pkg', ecosystem: 'npm' });
253
+ expect(result.package.ecosystem).toBe('npm');
254
+ expect(result.valid).toBe(true);
255
+ });
256
+ it('should handle unsupported ecosystem', async () => {
257
+ const result = await registry.validate({
258
+ name: 'test',
259
+ ecosystem: 'cargo',
260
+ });
261
+ expect(result.valid).toBe(true);
262
+ expect(result.issues[0].message).toContain('No validator');
263
+ });
264
+ });
265
+ describe('batch validation', () => {
266
+ it('should validate multiple packages with mock', async () => {
267
+ // Create fresh registry with only mock validator to avoid network
268
+ const mockRegistry = new ValidatorRegistry();
269
+ const mock = new MockValidator();
270
+ mockRegistry.register(mock, { priority: 200 });
271
+ const result = await mockRegistry.validateBatch([
272
+ { name: 'pkg1', ecosystem: 'npm' },
273
+ { name: 'pkg2', ecosystem: 'npm' },
274
+ ]);
275
+ expect(result.results).toHaveLength(2);
276
+ expect(result.summary.total).toBe(2);
277
+ });
278
+ });
279
+ describe('statistics', () => {
280
+ it('should return stats', () => {
281
+ const stats = registry.getStats();
282
+ expect(stats.ecosystems).toBeGreaterThanOrEqual(2);
283
+ expect(stats.validators).toBeGreaterThanOrEqual(2);
284
+ expect(stats.builtIn).toBeGreaterThanOrEqual(2);
285
+ });
286
+ });
287
+ describe('cache management', () => {
288
+ it('should clear all caches', () => {
289
+ registry.clearCaches();
290
+ // Should not throw
291
+ });
292
+ });
293
+ });
294
+ describe('formatBatchResult', () => {
295
+ it('should format batch result as markdown', () => {
296
+ const result = {
297
+ results: [
298
+ {
299
+ package: { name: 'pkg1', ecosystem: 'npm' },
300
+ valid: true,
301
+ blocked: false,
302
+ issues: [],
303
+ timestamp: new Date(),
304
+ cached: false,
305
+ },
306
+ ],
307
+ summary: {
308
+ total: 1,
309
+ valid: 1,
310
+ blocked: 0,
311
+ errors: 0,
312
+ },
313
+ passed: true,
314
+ };
315
+ const markdown = formatBatchResult(result);
316
+ expect(markdown).toContain('Package Validation Report');
317
+ expect(markdown).toContain('Summary');
318
+ expect(markdown).toContain('Total');
319
+ });
320
+ });
321
+ //# sourceMappingURL=validators.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.test.js","sourceRoot":"","sources":["../../../../../src/core/agents/validators/__tests__/validators.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,191 @@
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
+ * Package identifier
12
+ */
13
+ export interface PackageId {
14
+ /** Package name */
15
+ name: string;
16
+ /** Version (optional, defaults to latest) */
17
+ version?: string;
18
+ /** Package ecosystem */
19
+ ecosystem: PackageEcosystem;
20
+ }
21
+ /**
22
+ * Supported package ecosystems
23
+ */
24
+ export type PackageEcosystem = 'npm' | 'pip' | 'cargo' | 'go' | 'gem';
25
+ /**
26
+ * Validation severity levels
27
+ */
28
+ export type ValidationSeverity = 'critical' | 'high' | 'moderate' | 'low' | 'info';
29
+ /**
30
+ * Individual validation issue
31
+ */
32
+ export interface ValidationIssue {
33
+ /** Issue type */
34
+ type: 'security' | 'quality' | 'deprecation' | 'license' | 'size' | 'maintenance';
35
+ /** Severity */
36
+ severity: ValidationSeverity;
37
+ /** Issue description */
38
+ message: string;
39
+ /** Additional details */
40
+ details?: Record<string, unknown>;
41
+ /** Suggested fix or alternative */
42
+ suggestion?: string;
43
+ }
44
+ /**
45
+ * Validation result for a package
46
+ */
47
+ export interface ValidationResult {
48
+ /** Package identifier */
49
+ package: PackageId;
50
+ /** Overall validation passed */
51
+ valid: boolean;
52
+ /** Whether package should be blocked */
53
+ blocked: boolean;
54
+ /** List of issues found */
55
+ issues: ValidationIssue[];
56
+ /** Package metadata */
57
+ metadata?: PackageMetadata;
58
+ /** Validation timestamp */
59
+ timestamp: Date;
60
+ /** Cache hit */
61
+ cached: boolean;
62
+ }
63
+ /**
64
+ * Package metadata
65
+ */
66
+ export interface PackageMetadata {
67
+ /** Latest version */
68
+ latestVersion?: string;
69
+ /** Requested version */
70
+ requestedVersion?: string;
71
+ /** Whether package is deprecated */
72
+ deprecated?: boolean;
73
+ /** Deprecation message */
74
+ deprecationMessage?: string;
75
+ /** Alternative package if deprecated */
76
+ alternative?: string;
77
+ /** License */
78
+ license?: string;
79
+ /** Package size (bytes) */
80
+ size?: number;
81
+ /** Weekly downloads */
82
+ downloads?: number;
83
+ /** Last publish date */
84
+ lastPublish?: Date;
85
+ /** Maintainer count */
86
+ maintainerCount?: number;
87
+ /** Repository URL */
88
+ repository?: string;
89
+ }
90
+ /**
91
+ * Validator configuration
92
+ */
93
+ export interface ValidatorConfig {
94
+ /** Enable caching */
95
+ enableCache: boolean;
96
+ /** Cache TTL (ms) */
97
+ cacheTtlMs: number;
98
+ /** Enable rate limiting */
99
+ enableRateLimit: boolean;
100
+ /** Request timeout (ms) */
101
+ timeoutMs: number;
102
+ /** Block on critical issues */
103
+ blockOnCritical: boolean;
104
+ /** Block on high severity issues */
105
+ blockOnHigh: boolean;
106
+ }
107
+ export declare const DEFAULT_VALIDATOR_CONFIG: ValidatorConfig;
108
+ /**
109
+ * Abstract base class for package validators
110
+ */
111
+ export declare abstract class BaseValidator {
112
+ protected config: ValidatorConfig;
113
+ protected cache: ValidationCache<ValidationResult>;
114
+ protected rateLimiter: RateLimiter;
115
+ protected ecosystem: PackageEcosystem;
116
+ constructor(ecosystem: PackageEcosystem, config?: Partial<ValidatorConfig>);
117
+ /**
118
+ * Get the ecosystem this validator handles
119
+ */
120
+ getEcosystem(): PackageEcosystem;
121
+ /**
122
+ * Check if this validator can handle a package
123
+ */
124
+ canHandle(pkg: PackageId): boolean;
125
+ /**
126
+ * Validate a package
127
+ */
128
+ validate(pkg: PackageId): Promise<ValidationResult>;
129
+ /**
130
+ * Validate multiple packages
131
+ */
132
+ validateBatch(packages: PackageId[]): Promise<ValidationResult[]>;
133
+ /**
134
+ * Check if issues should block installation
135
+ */
136
+ protected shouldBlock(issues: ValidationIssue[]): boolean;
137
+ /**
138
+ * Generate cache key for a package
139
+ */
140
+ protected getCacheKey(pkg: PackageId): string;
141
+ /**
142
+ * Clear the validation cache
143
+ */
144
+ clearCache(): void;
145
+ /**
146
+ * Get cache statistics
147
+ */
148
+ getCacheStats(): {
149
+ size: number;
150
+ maxSize: number;
151
+ hits: number;
152
+ misses: number;
153
+ hitRate: number;
154
+ };
155
+ /**
156
+ * Perform the actual validation
157
+ */
158
+ protected abstract performValidation(pkg: PackageId): Promise<ValidationResult>;
159
+ /**
160
+ * Fetch package metadata from registry
161
+ */
162
+ abstract fetchMetadata(pkg: PackageId): Promise<PackageMetadata | undefined>;
163
+ /**
164
+ * Check for security vulnerabilities
165
+ */
166
+ abstract checkSecurity(pkg: PackageId): Promise<ValidationIssue[]>;
167
+ /**
168
+ * Check for deprecation
169
+ */
170
+ abstract checkDeprecation(pkg: PackageId): Promise<ValidationIssue[]>;
171
+ /**
172
+ * Get the latest version of a package
173
+ */
174
+ abstract getLatestVersion(packageName: string): Promise<string | undefined>;
175
+ }
176
+ /**
177
+ * Create a validation issue
178
+ */
179
+ export declare function createIssue(type: ValidationIssue['type'], severity: ValidationSeverity, message: string, options?: {
180
+ details?: Record<string, unknown>;
181
+ suggestion?: string;
182
+ }): ValidationIssue;
183
+ /**
184
+ * Create a successful validation result
185
+ */
186
+ export declare function createSuccessResult(pkg: PackageId): ValidationResult;
187
+ /**
188
+ * Format validation result for display
189
+ */
190
+ export declare function formatValidationResult(result: ValidationResult): string;
191
+ //# sourceMappingURL=base-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-validator.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/validators/base-validator.ts"],"names":[],"mappings":"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"}