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,191 @@
1
+ /**
2
+ * PIP Validator - v17.5.0
3
+ *
4
+ * Validates Python packages from PyPI for security, quality, and deprecation.
5
+ *
6
+ * @module pip-validator
7
+ */
8
+ import { BaseValidator, createIssue, createSuccessResult, } from './base-validator.js';
9
+ // =============================================================================
10
+ // PIP Validator
11
+ // =============================================================================
12
+ /**
13
+ * Python/PyPI package validator
14
+ */
15
+ export class PipValidator extends BaseValidator {
16
+ pypiBaseUrl = 'https://pypi.org/pypi';
17
+ constructor(config = {}) {
18
+ super('pip', config);
19
+ }
20
+ /**
21
+ * Perform PyPI package validation
22
+ */
23
+ async performValidation(pkg) {
24
+ const result = createSuccessResult(pkg);
25
+ const issues = [];
26
+ try {
27
+ // Fetch metadata
28
+ const metadata = await this.fetchMetadata(pkg);
29
+ result.metadata = metadata;
30
+ if (!metadata) {
31
+ issues.push(createIssue('quality', 'high', `Package "${pkg.name}" not found on PyPI`, {
32
+ suggestion: 'Check package name spelling',
33
+ }));
34
+ result.issues = issues;
35
+ result.valid = false;
36
+ return result;
37
+ }
38
+ // Check deprecation
39
+ const deprecationIssues = await this.checkDeprecation(pkg);
40
+ issues.push(...deprecationIssues);
41
+ // Check quality
42
+ const qualityIssues = await this.checkQuality(pkg, metadata);
43
+ issues.push(...qualityIssues);
44
+ // Check security (basic - Python doesn't have npm audit equivalent)
45
+ const securityIssues = await this.checkSecurity(pkg);
46
+ issues.push(...securityIssues);
47
+ result.issues = issues;
48
+ result.valid = !issues.some((i) => i.severity === 'critical' || i.severity === 'high');
49
+ }
50
+ catch (error) {
51
+ issues.push(createIssue('quality', 'moderate', `Validation error: ${String(error)}`, {
52
+ suggestion: 'Check package name and try again',
53
+ }));
54
+ result.issues = issues;
55
+ result.valid = true;
56
+ }
57
+ return result;
58
+ }
59
+ /**
60
+ * Fetch PyPI package metadata
61
+ */
62
+ async fetchMetadata(pkg) {
63
+ try {
64
+ const url = pkg.version
65
+ ? `${this.pypiBaseUrl}/${pkg.name}/${pkg.version}/json`
66
+ : `${this.pypiBaseUrl}/${pkg.name}/json`;
67
+ const response = await fetch(url, {
68
+ signal: AbortSignal.timeout(this.config.timeoutMs),
69
+ });
70
+ if (!response.ok) {
71
+ return undefined;
72
+ }
73
+ const data = (await response.json());
74
+ return this.convertMetadata(data, pkg.version);
75
+ }
76
+ catch {
77
+ return undefined;
78
+ }
79
+ }
80
+ /**
81
+ * Convert PyPI metadata to common format
82
+ */
83
+ convertMetadata(data, requestedVersion) {
84
+ const { info, urls } = data;
85
+ // Get last publish date from releases
86
+ let lastPublish;
87
+ if (urls.length > 0) {
88
+ lastPublish = new Date(urls[0].upload_time);
89
+ }
90
+ // Calculate total size from releases
91
+ const size = urls.reduce((sum, u) => sum + u.size, 0);
92
+ // Check for development status classifiers
93
+ const isDeprecated = info.classifiers?.some((c) => c.includes('Development Status :: 7') // Inactive
94
+ );
95
+ return {
96
+ latestVersion: info.version,
97
+ requestedVersion,
98
+ deprecated: isDeprecated,
99
+ deprecationMessage: isDeprecated ? 'Package marked as inactive' : undefined,
100
+ license: info.license,
101
+ size,
102
+ lastPublish,
103
+ maintainerCount: info.maintainer ? 1 : info.author ? 1 : 0,
104
+ repository: info.project_urls?.Source || info.project_urls?.Repository || info.home_page,
105
+ };
106
+ }
107
+ /**
108
+ * Check for security vulnerabilities
109
+ *
110
+ * Note: PyPI doesn't have a built-in vulnerability database like npm.
111
+ * For production use, integrate with safety-db or pip-audit.
112
+ */
113
+ async checkSecurity(_pkg) {
114
+ // TODO: Integrate with pip-audit or safety-db for vulnerability scanning
115
+ // For now, return empty - we can't do security scanning without external service
116
+ return [];
117
+ }
118
+ /**
119
+ * Check for deprecation
120
+ */
121
+ async checkDeprecation(pkg) {
122
+ const issues = [];
123
+ try {
124
+ const metadata = await this.fetchMetadata(pkg);
125
+ if (metadata?.deprecated) {
126
+ issues.push(createIssue('deprecation', 'high', `Package "${pkg.name}" is marked as inactive`, {
127
+ suggestion: 'Consider using an alternative package',
128
+ }));
129
+ }
130
+ }
131
+ catch {
132
+ // Ignore errors
133
+ }
134
+ return issues;
135
+ }
136
+ /**
137
+ * Check quality indicators
138
+ */
139
+ async checkQuality(_pkg, metadata) {
140
+ const issues = [];
141
+ if (!metadata)
142
+ return issues;
143
+ // Check last publish
144
+ if (metadata.lastPublish) {
145
+ const twoYearsAgo = new Date();
146
+ twoYearsAgo.setFullYear(twoYearsAgo.getFullYear() - 2);
147
+ if (metadata.lastPublish < twoYearsAgo) {
148
+ issues.push(createIssue('maintenance', 'moderate', 'Package not updated in over 2 years', {
149
+ suggestion: 'Check if package is still maintained',
150
+ }));
151
+ }
152
+ }
153
+ // Check license
154
+ if (!metadata.license || metadata.license === 'UNKNOWN') {
155
+ issues.push(createIssue('license', 'moderate', 'No license specified', {
156
+ suggestion: 'Verify license compatibility before using',
157
+ }));
158
+ }
159
+ // Check repository
160
+ if (!metadata.repository) {
161
+ issues.push(createIssue('quality', 'info', 'No source repository linked', {
162
+ suggestion: 'Package source code location is unknown',
163
+ }));
164
+ }
165
+ return issues;
166
+ }
167
+ /**
168
+ * Get the latest version of a package
169
+ */
170
+ async getLatestVersion(packageName) {
171
+ try {
172
+ const response = await fetch(`${this.pypiBaseUrl}/${packageName}/json`, {
173
+ signal: AbortSignal.timeout(this.config.timeoutMs),
174
+ });
175
+ if (!response.ok) {
176
+ return undefined;
177
+ }
178
+ const data = (await response.json());
179
+ return data.info.version;
180
+ }
181
+ catch {
182
+ return undefined;
183
+ }
184
+ }
185
+ }
186
+ // =============================================================================
187
+ // Singleton Instance
188
+ // =============================================================================
189
+ /** Default PIP validator instance */
190
+ export const pipValidator = new PipValidator();
191
+ //# sourceMappingURL=pip-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pip-validator.js","sourceRoot":"","sources":["../../../../src/core/agents/validators/pip-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Validator Registry - v17.5.0
3
+ *
4
+ * Central registry for package validators.
5
+ * Enables plugin-based validation with ecosystem auto-detection.
6
+ *
7
+ * @module validator-registry
8
+ */
9
+ import { type BaseValidator, type PackageEcosystem, type PackageId, type ValidationResult } from './base-validator.js';
10
+ /**
11
+ * Validator registration info
12
+ */
13
+ export interface ValidatorRegistration {
14
+ /** Validator instance */
15
+ validator: BaseValidator;
16
+ /** Priority (higher = checked first) */
17
+ priority: number;
18
+ /** Whether this is a built-in validator */
19
+ builtIn: boolean;
20
+ }
21
+ /**
22
+ * Batch validation result
23
+ */
24
+ export interface BatchValidationResult {
25
+ /** Individual package results */
26
+ results: ValidationResult[];
27
+ /** Summary */
28
+ summary: {
29
+ total: number;
30
+ valid: number;
31
+ blocked: number;
32
+ errors: number;
33
+ };
34
+ /** Overall pass/fail */
35
+ passed: boolean;
36
+ }
37
+ /**
38
+ * Registry for package validators
39
+ */
40
+ export declare class ValidatorRegistry {
41
+ private validators;
42
+ constructor();
43
+ /**
44
+ * Register built-in validators
45
+ */
46
+ private registerBuiltIn;
47
+ /**
48
+ * Register a validator
49
+ */
50
+ register(validator: BaseValidator, options?: {
51
+ priority?: number;
52
+ builtIn?: boolean;
53
+ }): void;
54
+ /**
55
+ * Unregister a validator
56
+ */
57
+ unregister(validator: BaseValidator): boolean;
58
+ /**
59
+ * Get validator for ecosystem
60
+ */
61
+ getValidator(ecosystem: PackageEcosystem): BaseValidator | undefined;
62
+ /**
63
+ * Get all validators for ecosystem
64
+ */
65
+ getValidators(ecosystem: PackageEcosystem): BaseValidator[];
66
+ /**
67
+ * Get all registered ecosystems
68
+ */
69
+ getEcosystems(): PackageEcosystem[];
70
+ /**
71
+ * Check if ecosystem is supported
72
+ */
73
+ isSupported(ecosystem: PackageEcosystem): boolean;
74
+ /**
75
+ * Auto-detect ecosystem from package string
76
+ */
77
+ detectEcosystem(packageSpec: string): PackageEcosystem | undefined;
78
+ /**
79
+ * Parse package specification
80
+ */
81
+ parsePackageSpec(packageSpec: string): PackageId;
82
+ /**
83
+ * Validate a single package
84
+ */
85
+ validate(packageSpec: string | PackageId): Promise<ValidationResult>;
86
+ /**
87
+ * Validate multiple packages
88
+ */
89
+ validateBatch(packageSpecs: (string | PackageId)[]): Promise<BatchValidationResult>;
90
+ /**
91
+ * Clear all caches
92
+ */
93
+ clearCaches(): void;
94
+ /**
95
+ * Get registry statistics
96
+ */
97
+ getStats(): {
98
+ ecosystems: number;
99
+ validators: number;
100
+ builtIn: number;
101
+ custom: number;
102
+ };
103
+ }
104
+ /** Global validator registry */
105
+ export declare const validatorRegistry: ValidatorRegistry;
106
+ /**
107
+ * Validate a package using the global registry
108
+ */
109
+ export declare function validatePackage(packageSpec: string | PackageId): Promise<ValidationResult>;
110
+ /**
111
+ * Validate multiple packages
112
+ */
113
+ export declare function validatePackages(packageSpecs: (string | PackageId)[]): Promise<BatchValidationResult>;
114
+ /**
115
+ * Format batch result for display
116
+ */
117
+ export declare function formatBatchResult(result: BatchValidationResult): string;
118
+ export type { PackageEcosystem, PackageId, PackageMetadata, ValidationIssue, ValidationResult, ValidationSeverity, ValidatorConfig, } from './base-validator.js';
119
+ export { BaseValidator, createIssue, formatValidationResult } from './base-validator.js';
120
+ export { NpmValidator, npmValidator } from './npm-validator.js';
121
+ export { PipValidator, pipValidator } from './pip-validator.js';
122
+ //# sourceMappingURL=validator-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator-registry.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/validators/validator-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,gBAAgB,EACtB,MAAM,qBAAqB,CAAA;AAQ5B;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,yBAAyB;IACzB,SAAS,EAAE,aAAa,CAAA;IACxB,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAA;IAChB,2CAA2C;IAC3C,OAAO,EAAE,OAAO,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,iCAAiC;IACjC,OAAO,EAAE,gBAAgB,EAAE,CAAA;IAC3B,cAAc;IACd,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAA;QACb,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,MAAM,CAAA;QACf,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;IACD,wBAAwB;IACxB,MAAM,EAAE,OAAO,CAAA;CAChB;AAMD;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,UAAU,CAA4D;;IAO9E;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,GAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,IAAI;IAiBhG;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO;IAa7C;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,gBAAgB,GAAG,aAAa,GAAG,SAAS;IAKpE;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,gBAAgB,GAAG,aAAa,EAAE;IAK3D;;OAEG;IACH,aAAa,IAAI,gBAAgB,EAAE;IAInC;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,gBAAgB,GAAG,OAAO;IAIjD;;OAEG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAsBlE;;OAEG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS;IA8ChD;;OAEG;IACG,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAyB1E;;OAEG;IACG,aAAa,CAAC,YAAY,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAgDzF;;OAEG;IACH,WAAW,IAAI,IAAI;IAQnB;;OAEG;IACH,QAAQ,IAAI;QACV,UAAU,EAAE,MAAM,CAAA;QAClB,UAAU,EAAE,MAAM,CAAA;QAClB,OAAO,EAAE,MAAM,CAAA;QACf,MAAM,EAAE,MAAM,CAAA;KACf;CAuBF;AAMD,gCAAgC;AAChC,eAAO,MAAM,iBAAiB,mBAA0B,CAAA;AAMxD;;GAEG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAEhG;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,GACnC,OAAO,CAAC,qBAAqB,CAAC,CAEhC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CA+BvE;AAMD,YAAY,EACV,gBAAgB,EAChB,SAAS,EACT,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,GAChB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AACxF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA"}
@@ -0,0 +1,321 @@
1
+ /**
2
+ * Validator Registry - v17.5.0
3
+ *
4
+ * Central registry for package validators.
5
+ * Enables plugin-based validation with ecosystem auto-detection.
6
+ *
7
+ * @module validator-registry
8
+ */
9
+ import { formatValidationResult, } from './base-validator.js';
10
+ import { npmValidator } from './npm-validator.js';
11
+ import { pipValidator } from './pip-validator.js';
12
+ // =============================================================================
13
+ // Validator Registry
14
+ // =============================================================================
15
+ /**
16
+ * Registry for package validators
17
+ */
18
+ export class ValidatorRegistry {
19
+ validators = new Map();
20
+ constructor() {
21
+ // Register built-in validators
22
+ this.registerBuiltIn();
23
+ }
24
+ /**
25
+ * Register built-in validators
26
+ */
27
+ registerBuiltIn() {
28
+ this.register(npmValidator, { priority: 100, builtIn: true });
29
+ this.register(pipValidator, { priority: 100, builtIn: true });
30
+ }
31
+ /**
32
+ * Register a validator
33
+ */
34
+ register(validator, options = {}) {
35
+ const ecosystem = validator.getEcosystem();
36
+ const registration = {
37
+ validator,
38
+ priority: options.priority ?? 50,
39
+ builtIn: options.builtIn ?? false,
40
+ };
41
+ const existing = this.validators.get(ecosystem) || [];
42
+ existing.push(registration);
43
+ // Sort by priority (higher first)
44
+ existing.sort((a, b) => b.priority - a.priority);
45
+ this.validators.set(ecosystem, existing);
46
+ }
47
+ /**
48
+ * Unregister a validator
49
+ */
50
+ unregister(validator) {
51
+ const ecosystem = validator.getEcosystem();
52
+ const existing = this.validators.get(ecosystem);
53
+ if (!existing)
54
+ return false;
55
+ const index = existing.findIndex((r) => r.validator === validator);
56
+ if (index === -1)
57
+ return false;
58
+ existing.splice(index, 1);
59
+ return true;
60
+ }
61
+ /**
62
+ * Get validator for ecosystem
63
+ */
64
+ getValidator(ecosystem) {
65
+ const registrations = this.validators.get(ecosystem);
66
+ return registrations?.[0]?.validator;
67
+ }
68
+ /**
69
+ * Get all validators for ecosystem
70
+ */
71
+ getValidators(ecosystem) {
72
+ const registrations = this.validators.get(ecosystem) || [];
73
+ return registrations.map((r) => r.validator);
74
+ }
75
+ /**
76
+ * Get all registered ecosystems
77
+ */
78
+ getEcosystems() {
79
+ return Array.from(this.validators.keys());
80
+ }
81
+ /**
82
+ * Check if ecosystem is supported
83
+ */
84
+ isSupported(ecosystem) {
85
+ return this.validators.has(ecosystem);
86
+ }
87
+ /**
88
+ * Auto-detect ecosystem from package string
89
+ */
90
+ detectEcosystem(packageSpec) {
91
+ // Check for explicit ecosystem prefix
92
+ if (packageSpec.startsWith('npm:'))
93
+ return 'npm';
94
+ if (packageSpec.startsWith('pip:'))
95
+ return 'pip';
96
+ if (packageSpec.startsWith('cargo:'))
97
+ return 'cargo';
98
+ if (packageSpec.startsWith('go:'))
99
+ return 'go';
100
+ if (packageSpec.startsWith('gem:'))
101
+ return 'gem';
102
+ // Check for Python-style package (contains ==, >=, etc.)
103
+ if (/[=<>!]/.test(packageSpec) && !packageSpec.startsWith('@')) {
104
+ return 'pip';
105
+ }
106
+ // Check for npm-style scoped package
107
+ if (packageSpec.startsWith('@')) {
108
+ return 'npm';
109
+ }
110
+ // Default to npm for simple package names
111
+ return 'npm';
112
+ }
113
+ /**
114
+ * Parse package specification
115
+ */
116
+ parsePackageSpec(packageSpec) {
117
+ // Remove ecosystem prefix if present
118
+ let spec = packageSpec;
119
+ let ecosystem = 'npm';
120
+ const prefixes = ['npm', 'pip', 'cargo', 'go', 'gem'];
121
+ for (const prefix of prefixes) {
122
+ if (spec.startsWith(`${prefix}:`)) {
123
+ ecosystem = prefix;
124
+ spec = spec.slice(prefix.length + 1);
125
+ break;
126
+ }
127
+ }
128
+ // If no prefix, auto-detect
129
+ if (ecosystem === 'npm' && !packageSpec.includes(':')) {
130
+ ecosystem = this.detectEcosystem(spec) || 'npm';
131
+ }
132
+ // Parse name and version
133
+ let name;
134
+ let version;
135
+ if (ecosystem === 'pip') {
136
+ // Python style: package==1.0.0 or package>=1.0.0
137
+ const match = spec.match(/^([^=<>!]+)([=<>!]+.+)?$/);
138
+ if (match) {
139
+ name = match[1].trim();
140
+ version = match[2]?.replace(/^[=<>!]+/, '').trim();
141
+ }
142
+ else {
143
+ name = spec;
144
+ }
145
+ }
146
+ else {
147
+ // npm style: package@1.0.0
148
+ const atIndex = spec.lastIndexOf('@');
149
+ if (atIndex > 0) {
150
+ name = spec.slice(0, atIndex);
151
+ version = spec.slice(atIndex + 1);
152
+ }
153
+ else {
154
+ name = spec;
155
+ }
156
+ }
157
+ return { name, version, ecosystem };
158
+ }
159
+ /**
160
+ * Validate a single package
161
+ */
162
+ async validate(packageSpec) {
163
+ const pkg = typeof packageSpec === 'string' ? this.parsePackageSpec(packageSpec) : packageSpec;
164
+ const validator = this.getValidator(pkg.ecosystem);
165
+ if (!validator) {
166
+ return {
167
+ package: pkg,
168
+ valid: true,
169
+ blocked: false,
170
+ issues: [
171
+ {
172
+ type: 'quality',
173
+ severity: 'info',
174
+ message: `No validator available for ecosystem: ${pkg.ecosystem}`,
175
+ },
176
+ ],
177
+ timestamp: new Date(),
178
+ cached: false,
179
+ };
180
+ }
181
+ return validator.validate(pkg);
182
+ }
183
+ /**
184
+ * Validate multiple packages
185
+ */
186
+ async validateBatch(packageSpecs) {
187
+ const results = [];
188
+ let valid = 0;
189
+ let blocked = 0;
190
+ let errors = 0;
191
+ for (const spec of packageSpecs) {
192
+ try {
193
+ const result = await this.validate(spec);
194
+ results.push(result);
195
+ if (result.blocked) {
196
+ blocked++;
197
+ }
198
+ else if (result.valid) {
199
+ valid++;
200
+ }
201
+ }
202
+ catch (error) {
203
+ errors++;
204
+ const pkg = typeof spec === 'string' ? this.parsePackageSpec(spec) : spec;
205
+ results.push({
206
+ package: pkg,
207
+ valid: false,
208
+ blocked: false,
209
+ issues: [
210
+ {
211
+ type: 'quality',
212
+ severity: 'high',
213
+ message: `Validation error: ${String(error)}`,
214
+ },
215
+ ],
216
+ timestamp: new Date(),
217
+ cached: false,
218
+ });
219
+ }
220
+ }
221
+ return {
222
+ results,
223
+ summary: {
224
+ total: packageSpecs.length,
225
+ valid,
226
+ blocked,
227
+ errors,
228
+ },
229
+ passed: blocked === 0,
230
+ };
231
+ }
232
+ /**
233
+ * Clear all caches
234
+ */
235
+ clearCaches() {
236
+ for (const registrations of this.validators.values()) {
237
+ for (const reg of registrations) {
238
+ reg.validator.clearCache();
239
+ }
240
+ }
241
+ }
242
+ /**
243
+ * Get registry statistics
244
+ */
245
+ getStats() {
246
+ let validators = 0;
247
+ let builtIn = 0;
248
+ let custom = 0;
249
+ for (const registrations of this.validators.values()) {
250
+ for (const reg of registrations) {
251
+ validators++;
252
+ if (reg.builtIn) {
253
+ builtIn++;
254
+ }
255
+ else {
256
+ custom++;
257
+ }
258
+ }
259
+ }
260
+ return {
261
+ ecosystems: this.validators.size,
262
+ validators,
263
+ builtIn,
264
+ custom,
265
+ };
266
+ }
267
+ }
268
+ // =============================================================================
269
+ // Singleton Instance
270
+ // =============================================================================
271
+ /** Global validator registry */
272
+ export const validatorRegistry = new ValidatorRegistry();
273
+ // =============================================================================
274
+ // Helper Functions
275
+ // =============================================================================
276
+ /**
277
+ * Validate a package using the global registry
278
+ */
279
+ export async function validatePackage(packageSpec) {
280
+ return validatorRegistry.validate(packageSpec);
281
+ }
282
+ /**
283
+ * Validate multiple packages
284
+ */
285
+ export async function validatePackages(packageSpecs) {
286
+ return validatorRegistry.validateBatch(packageSpecs);
287
+ }
288
+ /**
289
+ * Format batch result for display
290
+ */
291
+ export function formatBatchResult(result) {
292
+ const lines = [];
293
+ lines.push('# Package Validation Report');
294
+ lines.push('');
295
+ // Summary
296
+ const statusEmoji = result.passed ? '✅' : '🚫';
297
+ lines.push(`## Summary ${statusEmoji}`);
298
+ lines.push('');
299
+ lines.push(`- **Total:** ${result.summary.total}`);
300
+ lines.push(`- **Valid:** ${result.summary.valid}`);
301
+ lines.push(`- **Blocked:** ${result.summary.blocked}`);
302
+ if (result.summary.errors > 0) {
303
+ lines.push(`- **Errors:** ${result.summary.errors}`);
304
+ }
305
+ lines.push('');
306
+ // Individual results
307
+ if (result.results.length > 0) {
308
+ lines.push('## Packages');
309
+ lines.push('');
310
+ for (const pkgResult of result.results) {
311
+ lines.push(formatValidationResult(pkgResult));
312
+ lines.push('---');
313
+ lines.push('');
314
+ }
315
+ }
316
+ return lines.join('\n');
317
+ }
318
+ export { BaseValidator, createIssue, formatValidationResult } from './base-validator.js';
319
+ export { NpmValidator, npmValidator } from './npm-validator.js';
320
+ export { PipValidator, pipValidator } from './pip-validator.js';
321
+ //# sourceMappingURL=validator-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator-registry.js","sourceRoot":"","sources":["../../../../src/core/agents/validators/validator-registry.ts"],"names":[],"mappings":"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"}