couchloop-eq-mcp 1.0.3 → 1.0.5

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 (285) hide show
  1. package/README.md +24 -11
  2. package/dist/clients/shrinkChatClient.js +1 -1
  3. package/dist/clients/shrinkChatClient.js.map +1 -1
  4. package/dist/developer/analyzers/bloat-detector.d.ts +89 -0
  5. package/dist/developer/analyzers/bloat-detector.d.ts.map +1 -0
  6. package/dist/developer/analyzers/bloat-detector.js +483 -0
  7. package/dist/developer/analyzers/bloat-detector.js.map +1 -0
  8. package/dist/developer/backup/auto-backup.d.ts +96 -0
  9. package/dist/developer/backup/auto-backup.d.ts.map +1 -0
  10. package/dist/developer/backup/auto-backup.js +346 -0
  11. package/dist/developer/backup/auto-backup.js.map +1 -0
  12. package/dist/developer/blockers/package-blocker.d.ts +33 -0
  13. package/dist/developer/blockers/package-blocker.d.ts.map +1 -0
  14. package/dist/developer/blockers/package-blocker.js +224 -0
  15. package/dist/developer/blockers/package-blocker.js.map +1 -0
  16. package/dist/developer/evaluators/ai-error-preventer.d.ts +54 -0
  17. package/dist/developer/evaluators/ai-error-preventer.d.ts.map +1 -0
  18. package/dist/developer/evaluators/ai-error-preventer.js +270 -0
  19. package/dist/developer/evaluators/ai-error-preventer.js.map +1 -0
  20. package/dist/developer/evaluators/build-context-detector.d.ts +44 -0
  21. package/dist/developer/evaluators/build-context-detector.d.ts.map +1 -0
  22. package/dist/developer/evaluators/build-context-detector.js +258 -0
  23. package/dist/developer/evaluators/build-context-detector.js.map +1 -0
  24. package/dist/developer/evaluators/package-evaluator.d.ts +37 -0
  25. package/dist/developer/evaluators/package-evaluator.d.ts.map +1 -0
  26. package/dist/developer/evaluators/package-evaluator.js +278 -0
  27. package/dist/developer/evaluators/package-evaluator.js.map +1 -0
  28. package/dist/developer/guards/file-guardian.d.ts +79 -0
  29. package/dist/developer/guards/file-guardian.d.ts.map +1 -0
  30. package/dist/developer/guards/file-guardian.js +309 -0
  31. package/dist/developer/guards/file-guardian.js.map +1 -0
  32. package/dist/developer/managers/context-manager.d.ts +61 -0
  33. package/dist/developer/managers/context-manager.d.ts.map +1 -0
  34. package/dist/developer/managers/context-manager.js +302 -0
  35. package/dist/developer/managers/context-manager.js.map +1 -0
  36. package/dist/developer/metrics/complexity-calculator.d.ts +52 -0
  37. package/dist/developer/metrics/complexity-calculator.d.ts.map +1 -0
  38. package/dist/developer/metrics/complexity-calculator.js +259 -0
  39. package/dist/developer/metrics/complexity-calculator.js.map +1 -0
  40. package/dist/developer/reports/review-summary.d.ts +49 -0
  41. package/dist/developer/reports/review-summary.d.ts.map +1 -0
  42. package/dist/developer/reports/review-summary.js +249 -0
  43. package/dist/developer/reports/review-summary.js.map +1 -0
  44. package/dist/developer/scanners/review-assistant.d.ts +41 -0
  45. package/dist/developer/scanners/review-assistant.d.ts.map +1 -0
  46. package/dist/developer/scanners/review-assistant.js +374 -0
  47. package/dist/developer/scanners/review-assistant.js.map +1 -0
  48. package/dist/developer/scanners/secret-scanner.d.ts +66 -0
  49. package/dist/developer/scanners/secret-scanner.d.ts.map +1 -0
  50. package/dist/developer/scanners/secret-scanner.js +287 -0
  51. package/dist/developer/scanners/secret-scanner.js.map +1 -0
  52. package/dist/developer/scanners/sql-injection-detector.d.ts +54 -0
  53. package/dist/developer/scanners/sql-injection-detector.d.ts.map +1 -0
  54. package/dist/developer/scanners/sql-injection-detector.js +174 -0
  55. package/dist/developer/scanners/sql-injection-detector.js.map +1 -0
  56. package/dist/developer/scanners/xss-detector.d.ts +60 -0
  57. package/dist/developer/scanners/xss-detector.d.ts.map +1 -0
  58. package/dist/developer/scanners/xss-detector.js +229 -0
  59. package/dist/developer/scanners/xss-detector.js.map +1 -0
  60. package/dist/developer/types/ai-errors.d.ts +34 -0
  61. package/dist/developer/types/ai-errors.d.ts.map +1 -0
  62. package/dist/developer/types/ai-errors.js +271 -0
  63. package/dist/developer/types/ai-errors.js.map +1 -0
  64. package/dist/developer/types/package.d.ts +32 -0
  65. package/dist/developer/types/package.d.ts.map +1 -0
  66. package/dist/developer/types/package.js +5 -0
  67. package/dist/developer/types/package.js.map +1 -0
  68. package/dist/developer/updaters/dependency-updater.d.ts +102 -0
  69. package/dist/developer/updaters/dependency-updater.d.ts.map +1 -0
  70. package/dist/developer/updaters/dependency-updater.js +472 -0
  71. package/dist/developer/updaters/dependency-updater.js.map +1 -0
  72. package/dist/developer/validators/cargo.d.ts +14 -0
  73. package/dist/developer/validators/cargo.d.ts.map +1 -0
  74. package/dist/developer/validators/cargo.js +132 -0
  75. package/dist/developer/validators/cargo.js.map +1 -0
  76. package/dist/developer/validators/gem.d.ts +14 -0
  77. package/dist/developer/validators/gem.d.ts.map +1 -0
  78. package/dist/developer/validators/gem.js +85 -0
  79. package/dist/developer/validators/gem.js.map +1 -0
  80. package/dist/developer/validators/go.d.ts +14 -0
  81. package/dist/developer/validators/go.d.ts.map +1 -0
  82. package/dist/developer/validators/go.js +138 -0
  83. package/dist/developer/validators/go.js.map +1 -0
  84. package/dist/developer/validators/maven.d.ts +14 -0
  85. package/dist/developer/validators/maven.d.ts.map +1 -0
  86. package/dist/developer/validators/maven.js +99 -0
  87. package/dist/developer/validators/maven.js.map +1 -0
  88. package/dist/developer/validators/npm.d.ts +14 -0
  89. package/dist/developer/validators/npm.d.ts.map +1 -0
  90. package/dist/developer/validators/npm.js +96 -0
  91. package/dist/developer/validators/npm.js.map +1 -0
  92. package/dist/developer/validators/nuget.d.ts +15 -0
  93. package/dist/developer/validators/nuget.d.ts.map +1 -0
  94. package/dist/developer/validators/nuget.js +107 -0
  95. package/dist/developer/validators/nuget.js.map +1 -0
  96. package/dist/developer/validators/pypi.d.ts +14 -0
  97. package/dist/developer/validators/pypi.d.ts.map +1 -0
  98. package/dist/developer/validators/pypi.js +118 -0
  99. package/dist/developer/validators/pypi.js.map +1 -0
  100. package/dist/developer/validators/registry-manager.d.ts +37 -0
  101. package/dist/developer/validators/registry-manager.d.ts.map +1 -0
  102. package/dist/developer/validators/registry-manager.js +89 -0
  103. package/dist/developer/validators/registry-manager.js.map +1 -0
  104. package/dist/developer/validators/version-checker.d.ts +145 -0
  105. package/dist/developer/validators/version-checker.d.ts.map +1 -0
  106. package/dist/developer/validators/version-checker.js +529 -0
  107. package/dist/developer/validators/version-checker.js.map +1 -0
  108. package/dist/server/index.js.map +1 -1
  109. package/dist/server/middleware/auth.d.ts +7 -9
  110. package/dist/server/middleware/auth.d.ts.map +1 -1
  111. package/dist/server/middleware/auth.js.map +1 -1
  112. package/dist/tools/check-versions.d.ts +100 -0
  113. package/dist/tools/check-versions.d.ts.map +1 -0
  114. package/dist/tools/check-versions.js +328 -0
  115. package/dist/tools/check-versions.js.map +1 -0
  116. package/dist/tools/detect-code-smell.d.ts +9 -0
  117. package/dist/tools/detect-code-smell.d.ts.map +1 -0
  118. package/dist/tools/detect-code-smell.js +231 -0
  119. package/dist/tools/detect-code-smell.js.map +1 -0
  120. package/dist/tools/index.d.ts +471 -0
  121. package/dist/tools/index.d.ts.map +1 -1
  122. package/dist/tools/index.js +178 -0
  123. package/dist/tools/index.js.map +1 -1
  124. package/dist/tools/journey.js +1 -1
  125. package/dist/tools/journey.js.map +1 -1
  126. package/dist/tools/pre-review-code.d.ts +71 -0
  127. package/dist/tools/pre-review-code.d.ts.map +1 -0
  128. package/dist/tools/pre-review-code.js +159 -0
  129. package/dist/tools/pre-review-code.js.map +1 -0
  130. package/dist/tools/preserve-context.d.ts +27 -0
  131. package/dist/tools/preserve-context.d.ts.map +1 -0
  132. package/dist/tools/preserve-context.js +98 -0
  133. package/dist/tools/preserve-context.js.map +1 -0
  134. package/dist/tools/protect-files.d.ts +224 -0
  135. package/dist/tools/protect-files.d.ts.map +1 -0
  136. package/dist/tools/protect-files.js +286 -0
  137. package/dist/tools/protect-files.js.map +1 -0
  138. package/dist/tools/scan-security.d.ts +38 -0
  139. package/dist/tools/scan-security.d.ts.map +1 -0
  140. package/dist/tools/scan-security.js +237 -0
  141. package/dist/tools/scan-security.js.map +1 -0
  142. package/dist/tools/validate_packages.d.ts +8 -0
  143. package/dist/tools/validate_packages.d.ts.map +1 -0
  144. package/dist/tools/validate_packages.js +159 -0
  145. package/dist/tools/validate_packages.js.map +1 -0
  146. package/dist/types/auth.d.ts +18 -18
  147. package/dist/types/auth.d.ts.map +1 -1
  148. package/dist/types/auth.js +91 -36
  149. package/dist/types/auth.js.map +1 -1
  150. package/dist/types/context.d.ts +46 -0
  151. package/dist/types/context.d.ts.map +1 -0
  152. package/dist/types/context.js +17 -0
  153. package/dist/types/context.js.map +1 -0
  154. package/dist/types/file-protection.d.ts +50 -0
  155. package/dist/types/file-protection.d.ts.map +1 -0
  156. package/dist/types/file-protection.js +9 -0
  157. package/dist/types/file-protection.js.map +1 -0
  158. package/dist/utils/errorHandler.d.ts.map +1 -1
  159. package/dist/utils/errorHandler.js +2 -1
  160. package/dist/utils/errorHandler.js.map +1 -1
  161. package/package.json +23 -2
  162. package/dist/db/migrate.d.ts +0 -4
  163. package/dist/db/migrate.d.ts.map +0 -1
  164. package/dist/db/migrate.js +0 -34
  165. package/dist/db/migrate.js.map +0 -1
  166. package/dist/db/migrations/schema.d.ts +0 -1074
  167. package/dist/db/migrations/schema.d.ts.map +0 -1
  168. package/dist/db/migrations/schema.js +0 -160
  169. package/dist/db/migrations/schema.js.map +0 -1
  170. package/dist/db/schema.d.ts +0 -1576
  171. package/dist/db/schema.d.ts.map +0 -1
  172. package/dist/db/schema.js +0 -204
  173. package/dist/db/schema.js.map +0 -1
  174. package/dist/db/seed.d.ts +0 -4
  175. package/dist/db/seed.d.ts.map +0 -1
  176. package/dist/db/seed.js +0 -57
  177. package/dist/db/seed.js.map +0 -1
  178. package/dist/db/seedOAuth.d.ts +0 -4
  179. package/dist/db/seedOAuth.d.ts.map +0 -1
  180. package/dist/db/seedOAuth.js +0 -76
  181. package/dist/db/seedOAuth.js.map +0 -1
  182. package/dist/governance/config.d.ts +0 -66
  183. package/dist/governance/config.d.ts.map +0 -1
  184. package/dist/governance/config.js +0 -238
  185. package/dist/governance/config.js.map +0 -1
  186. package/dist/governance/detectors/hallucination.d.ts +0 -61
  187. package/dist/governance/detectors/hallucination.d.ts.map +0 -1
  188. package/dist/governance/detectors/hallucination.js +0 -338
  189. package/dist/governance/detectors/hallucination.js.map +0 -1
  190. package/dist/governance/detectors/inconsistency.d.ts +0 -99
  191. package/dist/governance/detectors/inconsistency.d.ts.map +0 -1
  192. package/dist/governance/detectors/inconsistency.js +0 -548
  193. package/dist/governance/detectors/inconsistency.js.map +0 -1
  194. package/dist/governance/detectors/toneDrift.d.ts +0 -63
  195. package/dist/governance/detectors/toneDrift.d.ts.map +0 -1
  196. package/dist/governance/detectors/toneDrift.js +0 -421
  197. package/dist/governance/detectors/toneDrift.js.map +0 -1
  198. package/dist/governance/detectors/unsafeReasoning.d.ts +0 -54
  199. package/dist/governance/detectors/unsafeReasoning.d.ts.map +0 -1
  200. package/dist/governance/detectors/unsafeReasoning.js +0 -473
  201. package/dist/governance/detectors/unsafeReasoning.js.map +0 -1
  202. package/dist/governance/evaluationEngine.d.ts +0 -112
  203. package/dist/governance/evaluationEngine.d.ts.map +0 -1
  204. package/dist/governance/evaluationEngine.js +0 -265
  205. package/dist/governance/evaluationEngine.js.map +0 -1
  206. package/dist/governance/intervention.d.ts +0 -81
  207. package/dist/governance/intervention.d.ts.map +0 -1
  208. package/dist/governance/intervention.js +0 -405
  209. package/dist/governance/intervention.js.map +0 -1
  210. package/dist/server/oauth/anomalyDetection.d.ts +0 -146
  211. package/dist/server/oauth/anomalyDetection.d.ts.map +0 -1
  212. package/dist/server/oauth/anomalyDetection.js +0 -405
  213. package/dist/server/oauth/anomalyDetection.js.map +0 -1
  214. package/dist/server/oauth/authServer.d.ts +0 -61
  215. package/dist/server/oauth/authServer.d.ts.map +0 -1
  216. package/dist/server/oauth/authServer.js +0 -283
  217. package/dist/server/oauth/authServer.js.map +0 -1
  218. package/dist/server/oauth/dpop.d.ts +0 -135
  219. package/dist/server/oauth/dpop.d.ts.map +0 -1
  220. package/dist/server/oauth/dpop.js +0 -338
  221. package/dist/server/oauth/dpop.js.map +0 -1
  222. package/dist/server/oauth/gdpr/consent.d.ts +0 -173
  223. package/dist/server/oauth/gdpr/consent.d.ts.map +0 -1
  224. package/dist/server/oauth/gdpr/consent.js +0 -388
  225. package/dist/server/oauth/gdpr/consent.js.map +0 -1
  226. package/dist/server/oauth/gdpr/dataPortability.d.ts +0 -214
  227. package/dist/server/oauth/gdpr/dataPortability.d.ts.map +0 -1
  228. package/dist/server/oauth/gdpr/dataPortability.js +0 -486
  229. package/dist/server/oauth/gdpr/dataPortability.js.map +0 -1
  230. package/dist/server/oauth/gdpr/index.d.ts +0 -103
  231. package/dist/server/oauth/gdpr/index.d.ts.map +0 -1
  232. package/dist/server/oauth/gdpr/index.js +0 -273
  233. package/dist/server/oauth/gdpr/index.js.map +0 -1
  234. package/dist/server/oauth/gdpr/rightToErasure.d.ts +0 -184
  235. package/dist/server/oauth/gdpr/rightToErasure.d.ts.map +0 -1
  236. package/dist/server/oauth/gdpr/rightToErasure.js +0 -527
  237. package/dist/server/oauth/gdpr/rightToErasure.js.map +0 -1
  238. package/dist/server/oauth/monitoring/securityMonitor.d.ts +0 -218
  239. package/dist/server/oauth/monitoring/securityMonitor.d.ts.map +0 -1
  240. package/dist/server/oauth/monitoring/securityMonitor.js +0 -615
  241. package/dist/server/oauth/monitoring/securityMonitor.js.map +0 -1
  242. package/dist/server/oauth/pkce.d.ts +0 -61
  243. package/dist/server/oauth/pkce.d.ts.map +0 -1
  244. package/dist/server/oauth/pkce.js +0 -157
  245. package/dist/server/oauth/pkce.js.map +0 -1
  246. package/dist/server/oauth/providers/base.d.ts +0 -147
  247. package/dist/server/oauth/providers/base.d.ts.map +0 -1
  248. package/dist/server/oauth/providers/base.js +0 -312
  249. package/dist/server/oauth/providers/base.js.map +0 -1
  250. package/dist/server/oauth/providers/github.d.ts +0 -55
  251. package/dist/server/oauth/providers/github.d.ts.map +0 -1
  252. package/dist/server/oauth/providers/github.js +0 -225
  253. package/dist/server/oauth/providers/github.js.map +0 -1
  254. package/dist/server/oauth/providers/google.d.ts +0 -49
  255. package/dist/server/oauth/providers/google.d.ts.map +0 -1
  256. package/dist/server/oauth/providers/google.js +0 -153
  257. package/dist/server/oauth/providers/google.js.map +0 -1
  258. package/dist/server/oauth/providers/index.d.ts +0 -9
  259. package/dist/server/oauth/providers/index.d.ts.map +0 -1
  260. package/dist/server/oauth/providers/index.js +0 -24
  261. package/dist/server/oauth/providers/index.js.map +0 -1
  262. package/dist/server/oauth/refreshTokenRotation.d.ts +0 -114
  263. package/dist/server/oauth/refreshTokenRotation.d.ts.map +0 -1
  264. package/dist/server/oauth/refreshTokenRotation.js +0 -344
  265. package/dist/server/oauth/refreshTokenRotation.js.map +0 -1
  266. package/dist/server/oauth/security.d.ts +0 -101
  267. package/dist/server/oauth/security.d.ts.map +0 -1
  268. package/dist/server/oauth/security.js +0 -268
  269. package/dist/server/oauth/security.js.map +0 -1
  270. package/dist/server/oauth/tokenEncryption.d.ts +0 -80
  271. package/dist/server/oauth/tokenEncryption.d.ts.map +0 -1
  272. package/dist/server/oauth/tokenEncryption.js +0 -218
  273. package/dist/server/oauth/tokenEncryption.js.map +0 -1
  274. package/dist/tools/sendMessage-complex-backup.d.ts +0 -6
  275. package/dist/tools/sendMessage-complex-backup.d.ts.map +0 -1
  276. package/dist/tools/sendMessage-complex-backup.js +0 -545
  277. package/dist/tools/sendMessage-complex-backup.js.map +0 -1
  278. package/dist/tools/sendMessage-revised.d.ts +0 -11
  279. package/dist/tools/sendMessage-revised.d.ts.map +0 -1
  280. package/dist/tools/sendMessage-revised.js +0 -429
  281. package/dist/tools/sendMessage-revised.js.map +0 -1
  282. package/dist/tools/sendMessage-truly-simple.d.ts +0 -8
  283. package/dist/tools/sendMessage-truly-simple.d.ts.map +0 -1
  284. package/dist/tools/sendMessage-truly-simple.js +0 -299
  285. package/dist/tools/sendMessage-truly-simple.js.map +0 -1
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Cargo Registry Validator (crates.io)
3
+ * Validates Rust package existence from crates.io registry
4
+ */
5
+ export class CargoValidator {
6
+ registryUrl = 'https://crates.io/api/v1';
7
+ cache = new Map();
8
+ cacheTimeout = 5 * 60 * 1000; // 5 minutes
9
+ async validate(packageName, version) {
10
+ // Cargo/Rust crate names use underscores or hyphens
11
+ // crates.io treats them as equivalent
12
+ const normalizedName = packageName.toLowerCase().replace(/-/g, '_');
13
+ const cacheKey = `${normalizedName}${version ? `@${version}` : ''}`;
14
+ const cached = this.cache.get(cacheKey);
15
+ if (cached && Date.now() - cached.timestamp < this.cacheTimeout) {
16
+ return cached.data;
17
+ }
18
+ try {
19
+ // crates.io API endpoint for crate info
20
+ const response = await fetch(`${this.registryUrl}/crates/${packageName}`, {
21
+ headers: {
22
+ 'User-Agent': 'CouchLoop-MCP/1.0 (https://github.com/wisenbergg/couchloop-mcp)'
23
+ }
24
+ });
25
+ if (response.status === 404) {
26
+ const result = {
27
+ name: packageName,
28
+ version,
29
+ registry: 'cargo',
30
+ exists: false,
31
+ lastChecked: new Date()
32
+ };
33
+ this.cache.set(cacheKey, { data: result, timestamp: Date.now() });
34
+ return result;
35
+ }
36
+ if (!response.ok) {
37
+ throw new Error(`Registry returned ${response.status}`);
38
+ }
39
+ const data = await response.json();
40
+ const crate = data.crate;
41
+ // Check if specific version exists
42
+ if (version) {
43
+ // Fetch version-specific info
44
+ const versionResponse = await fetch(`${this.registryUrl}/crates/${packageName}/${version}`, {
45
+ headers: {
46
+ 'User-Agent': 'CouchLoop-MCP/1.0'
47
+ }
48
+ });
49
+ if (versionResponse.status === 404) {
50
+ return {
51
+ name: packageName,
52
+ version,
53
+ registry: 'cargo',
54
+ exists: false,
55
+ latestVersion: crate.max_version,
56
+ lastChecked: new Date()
57
+ };
58
+ }
59
+ if (!versionResponse.ok) {
60
+ throw new Error(`Version check returned ${versionResponse.status}`);
61
+ }
62
+ const versionData = await versionResponse.json();
63
+ const result = {
64
+ name: packageName,
65
+ version: version,
66
+ registry: 'cargo',
67
+ exists: true,
68
+ latestVersion: crate.max_version,
69
+ deprecated: versionData.version?.yanked || false,
70
+ lastChecked: new Date()
71
+ };
72
+ this.cache.set(cacheKey, { data: result, timestamp: Date.now() });
73
+ return result;
74
+ }
75
+ // Return latest version info
76
+ const result = {
77
+ name: packageName,
78
+ version: crate.max_version,
79
+ registry: 'cargo',
80
+ exists: true,
81
+ latestVersion: crate.max_version,
82
+ deprecated: false,
83
+ lastChecked: new Date()
84
+ };
85
+ // Check for security advisories if available
86
+ // Note: crates.io doesn't directly provide this, but RustSec advisory DB could be integrated
87
+ this.cache.set(cacheKey, { data: result, timestamp: Date.now() });
88
+ return result;
89
+ }
90
+ catch (error) {
91
+ console.error(`Failed to validate Cargo package ${packageName}:`, error);
92
+ return {
93
+ name: packageName,
94
+ version,
95
+ registry: 'cargo',
96
+ exists: false,
97
+ warning: 'Could not verify package existence',
98
+ lastChecked: new Date()
99
+ };
100
+ }
101
+ }
102
+ async search(query, limit = 10) {
103
+ try {
104
+ // crates.io search API
105
+ const response = await fetch(`${this.registryUrl}/crates?q=${encodeURIComponent(query)}&per_page=${limit}`, {
106
+ headers: {
107
+ 'User-Agent': 'CouchLoop-MCP/1.0'
108
+ }
109
+ });
110
+ if (!response.ok) {
111
+ return [];
112
+ }
113
+ const data = await response.json();
114
+ return data.crates.map((crate) => ({
115
+ name: crate.name,
116
+ version: crate.max_version,
117
+ registry: 'cargo',
118
+ exists: true,
119
+ latestVersion: crate.max_version,
120
+ lastChecked: new Date()
121
+ }));
122
+ }
123
+ catch (error) {
124
+ console.error(`Failed to search Cargo registry for ${query}:`, error);
125
+ return [];
126
+ }
127
+ }
128
+ clearCache() {
129
+ this.cache.clear();
130
+ }
131
+ }
132
+ //# sourceMappingURL=cargo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cargo.js","sourceRoot":"","sources":["../../../src/developer/validators/cargo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * RubyGems Registry Validator
3
+ * Validates Ruby gem existence from rubygems.org
4
+ */
5
+ import type { PackageInfo, RegistryValidator } from '../types/package.js';
6
+ export declare class GemValidator implements RegistryValidator {
7
+ private readonly registryUrl;
8
+ private cache;
9
+ private readonly cacheTimeout;
10
+ validate(packageName: string, version?: string): Promise<PackageInfo>;
11
+ search(query: string, limit?: number): Promise<PackageInfo[]>;
12
+ clearCache(): void;
13
+ }
14
+ //# sourceMappingURL=gem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gem.d.ts","sourceRoot":"","sources":["../../../src/developer/validators/gem.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE1E,qBAAa,YAAa,YAAW,iBAAiB;IACpD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiC;IAC7D,OAAO,CAAC,KAAK,CAA+D;IAC5E,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiB;IAExC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA8DrE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA2B/D,UAAU,IAAI,IAAI;CAGnB"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * RubyGems Registry Validator
3
+ * Validates Ruby gem existence from rubygems.org
4
+ */
5
+ export class GemValidator {
6
+ registryUrl = 'https://rubygems.org/api/v1';
7
+ cache = new Map();
8
+ cacheTimeout = 5 * 60 * 1000; // 5 minutes
9
+ async validate(packageName, version) {
10
+ const cacheKey = `${packageName}${version ? `@${version}` : ''}`;
11
+ const cached = this.cache.get(cacheKey);
12
+ if (cached && Date.now() - cached.timestamp < this.cacheTimeout) {
13
+ return cached.data;
14
+ }
15
+ try {
16
+ // RubyGems API endpoint
17
+ const url = version
18
+ ? `${this.registryUrl}/versions/${packageName}-${version}.json`
19
+ : `${this.registryUrl}/gems/${packageName}.json`;
20
+ const response = await fetch(url);
21
+ if (response.status === 404) {
22
+ const result = {
23
+ name: packageName,
24
+ version,
25
+ registry: 'gem',
26
+ exists: false,
27
+ lastChecked: new Date()
28
+ };
29
+ this.cache.set(cacheKey, { data: result, timestamp: Date.now() });
30
+ return result;
31
+ }
32
+ if (!response.ok) {
33
+ throw new Error(`Registry returned ${response.status}`);
34
+ }
35
+ const data = await response.json();
36
+ const result = {
37
+ name: packageName,
38
+ version: version || data.version,
39
+ registry: 'gem',
40
+ exists: true,
41
+ latestVersion: data.version,
42
+ deprecated: data.yanked || false,
43
+ lastChecked: new Date()
44
+ };
45
+ this.cache.set(cacheKey, { data: result, timestamp: Date.now() });
46
+ return result;
47
+ }
48
+ catch (error) {
49
+ console.error(`Failed to validate Ruby gem ${packageName}:`, error);
50
+ return {
51
+ name: packageName,
52
+ version,
53
+ registry: 'gem',
54
+ exists: false,
55
+ warning: 'Could not verify gem existence',
56
+ lastChecked: new Date()
57
+ };
58
+ }
59
+ }
60
+ async search(query, limit = 10) {
61
+ try {
62
+ const response = await fetch(`${this.registryUrl}/search.json?query=${encodeURIComponent(query)}`);
63
+ if (!response.ok) {
64
+ return [];
65
+ }
66
+ const data = await response.json();
67
+ return data.slice(0, limit).map((gem) => ({
68
+ name: gem.name,
69
+ version: gem.version,
70
+ registry: 'gem',
71
+ exists: true,
72
+ latestVersion: gem.version,
73
+ lastChecked: new Date()
74
+ }));
75
+ }
76
+ catch (error) {
77
+ console.error(`Failed to search RubyGems for ${query}:`, error);
78
+ return [];
79
+ }
80
+ }
81
+ clearCache() {
82
+ this.cache.clear();
83
+ }
84
+ }
85
+ //# sourceMappingURL=gem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gem.js","sourceRoot":"","sources":["../../../src/developer/validators/gem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Go Module Registry Validator
3
+ * Validates Go packages from pkg.go.dev
4
+ */
5
+ import type { PackageInfo, RegistryValidator } from '../types/package.js';
6
+ export declare class GoValidator implements RegistryValidator {
7
+ private readonly proxyUrl;
8
+ private cache;
9
+ private readonly cacheTimeout;
10
+ validate(packageName: string, version?: string): Promise<PackageInfo>;
11
+ search(query: string, limit?: number): Promise<PackageInfo[]>;
12
+ clearCache(): void;
13
+ }
14
+ //# sourceMappingURL=go.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"go.d.ts","sourceRoot":"","sources":["../../../src/developer/validators/go.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE1E,qBAAa,WAAY,YAAW,iBAAiB;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;IACvD,OAAO,CAAC,KAAK,CAA+D;IAC5E,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiB;IAExC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA0GrE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAyC/D,UAAU,IAAI,IAAI;CAGnB"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Go Module Registry Validator
3
+ * Validates Go packages from pkg.go.dev
4
+ */
5
+ export class GoValidator {
6
+ proxyUrl = 'https://proxy.golang.org';
7
+ cache = new Map();
8
+ cacheTimeout = 5 * 60 * 1000; // 5 minutes
9
+ async validate(packageName, version) {
10
+ const cacheKey = `${packageName}${version ? `@${version}` : ''}`;
11
+ const cached = this.cache.get(cacheKey);
12
+ if (cached && Date.now() - cached.timestamp < this.cacheTimeout) {
13
+ return cached.data;
14
+ }
15
+ try {
16
+ // Go modules use the proxy.golang.org service
17
+ // Format: https://proxy.golang.org/{module}/@v/list for versions
18
+ const versionListUrl = `${this.proxyUrl}/${packageName}/@v/list`;
19
+ const response = await fetch(versionListUrl);
20
+ if (response.status === 404 || response.status === 410) {
21
+ const result = {
22
+ name: packageName,
23
+ version,
24
+ registry: 'go',
25
+ exists: false,
26
+ lastChecked: new Date()
27
+ };
28
+ this.cache.set(cacheKey, { data: result, timestamp: Date.now() });
29
+ return result;
30
+ }
31
+ if (!response.ok) {
32
+ throw new Error(`Registry returned ${response.status}`);
33
+ }
34
+ const versionList = await response.text();
35
+ const versions = versionList.trim().split('\n').filter(v => v);
36
+ if (versions.length === 0) {
37
+ // Try to get latest version
38
+ const latestUrl = `${this.proxyUrl}/${packageName}/@latest`;
39
+ const latestResponse = await fetch(latestUrl);
40
+ if (latestResponse.status === 404) {
41
+ const result = {
42
+ name: packageName,
43
+ version,
44
+ registry: 'go',
45
+ exists: false,
46
+ lastChecked: new Date()
47
+ };
48
+ this.cache.set(cacheKey, { data: result, timestamp: Date.now() });
49
+ return result;
50
+ }
51
+ if (latestResponse.ok) {
52
+ const latestData = await latestResponse.json();
53
+ const result = {
54
+ name: packageName,
55
+ version: version || latestData.Version,
56
+ registry: 'go',
57
+ exists: true,
58
+ latestVersion: latestData.Version,
59
+ lastChecked: new Date()
60
+ };
61
+ this.cache.set(cacheKey, { data: result, timestamp: Date.now() });
62
+ return result;
63
+ }
64
+ }
65
+ // Check if specific version exists
66
+ if (version && !versions.includes(version)) {
67
+ return {
68
+ name: packageName,
69
+ version,
70
+ registry: 'go',
71
+ exists: false,
72
+ latestVersion: versions[versions.length - 1],
73
+ lastChecked: new Date()
74
+ };
75
+ }
76
+ const result = {
77
+ name: packageName,
78
+ version: version || versions[versions.length - 1],
79
+ registry: 'go',
80
+ exists: true,
81
+ latestVersion: versions[versions.length - 1],
82
+ lastChecked: new Date()
83
+ };
84
+ this.cache.set(cacheKey, { data: result, timestamp: Date.now() });
85
+ return result;
86
+ }
87
+ catch (error) {
88
+ console.error(`Failed to validate Go module ${packageName}:`, error);
89
+ return {
90
+ name: packageName,
91
+ version,
92
+ registry: 'go',
93
+ exists: false,
94
+ warning: 'Could not verify module existence',
95
+ lastChecked: new Date()
96
+ };
97
+ }
98
+ }
99
+ async search(query, limit = 10) {
100
+ try {
101
+ // pkg.go.dev doesn't have a public search API
102
+ // We can only validate exact package names
103
+ // For search, we'll try common patterns
104
+ const commonPrefixes = [
105
+ 'github.com/',
106
+ 'golang.org/x/',
107
+ 'google.golang.org/',
108
+ 'gopkg.in/'
109
+ ];
110
+ const results = [];
111
+ for (const prefix of commonPrefixes) {
112
+ if (results.length >= limit)
113
+ break;
114
+ const fullName = prefix + query;
115
+ const info = await this.validate(fullName);
116
+ if (info.exists) {
117
+ results.push(info);
118
+ }
119
+ }
120
+ // Also try the query as-is
121
+ if (results.length < limit) {
122
+ const directInfo = await this.validate(query);
123
+ if (directInfo.exists) {
124
+ results.push(directInfo);
125
+ }
126
+ }
127
+ return results.slice(0, limit);
128
+ }
129
+ catch (error) {
130
+ console.error(`Failed to search Go modules for ${query}:`, error);
131
+ return [];
132
+ }
133
+ }
134
+ clearCache() {
135
+ this.cache.clear();
136
+ }
137
+ }
138
+ //# sourceMappingURL=go.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"go.js","sourceRoot":"","sources":["../../../src/developer/validators/go.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Maven Central Repository Validator
3
+ * Validates Java package existence from Maven Central
4
+ */
5
+ import type { PackageInfo, RegistryValidator } from '../types/package.js';
6
+ export declare class MavenValidator implements RegistryValidator {
7
+ private readonly registryUrl;
8
+ private cache;
9
+ private readonly cacheTimeout;
10
+ validate(packageName: string, version?: string): Promise<PackageInfo>;
11
+ search(query: string, limit?: number): Promise<PackageInfo[]>;
12
+ clearCache(): void;
13
+ }
14
+ //# sourceMappingURL=maven.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maven.d.ts","sourceRoot":"","sources":["../../../src/developer/validators/maven.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE1E,qBAAa,cAAe,YAAW,iBAAiB;IACtD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgD;IAC5E,OAAO,CAAC,KAAK,CAA+D;IAC5E,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiB;IAExC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAiFrE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA2B/D,UAAU,IAAI,IAAI;CAGnB"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Maven Central Repository Validator
3
+ * Validates Java package existence from Maven Central
4
+ */
5
+ export class MavenValidator {
6
+ registryUrl = 'https://search.maven.org/solrsearch/select';
7
+ cache = new Map();
8
+ cacheTimeout = 5 * 60 * 1000; // 5 minutes
9
+ async validate(packageName, version) {
10
+ // Maven packages are in format groupId:artifactId
11
+ // e.g., "org.springframework:spring-core"
12
+ const parts = packageName.split(':');
13
+ if (parts.length !== 2) {
14
+ return {
15
+ name: packageName,
16
+ version,
17
+ registry: 'maven',
18
+ exists: false,
19
+ warning: 'Invalid Maven package format. Use groupId:artifactId',
20
+ lastChecked: new Date()
21
+ };
22
+ }
23
+ const [groupId, artifactId] = parts;
24
+ const cacheKey = `${packageName}${version ? `@${version}` : ''}`;
25
+ const cached = this.cache.get(cacheKey);
26
+ if (cached && Date.now() - cached.timestamp < this.cacheTimeout) {
27
+ return cached.data;
28
+ }
29
+ try {
30
+ // Build query
31
+ const query = version
32
+ ? `g:"${groupId}" AND a:"${artifactId}" AND v:"${version}"`
33
+ : `g:"${groupId}" AND a:"${artifactId}"`;
34
+ const response = await fetch(`${this.registryUrl}?q=${encodeURIComponent(query)}&rows=1&wt=json`);
35
+ if (!response.ok) {
36
+ throw new Error(`Registry returned ${response.status}`);
37
+ }
38
+ const data = await response.json();
39
+ if (!data.response?.docs?.length) {
40
+ const result = {
41
+ name: packageName,
42
+ version,
43
+ registry: 'maven',
44
+ exists: false,
45
+ lastChecked: new Date()
46
+ };
47
+ this.cache.set(cacheKey, { data: result, timestamp: Date.now() });
48
+ return result;
49
+ }
50
+ const doc = data.response.docs[0];
51
+ const result = {
52
+ name: packageName,
53
+ version: version || doc.latestVersion || doc.v,
54
+ registry: 'maven',
55
+ exists: true,
56
+ latestVersion: doc.latestVersion || doc.v,
57
+ lastChecked: new Date()
58
+ };
59
+ this.cache.set(cacheKey, { data: result, timestamp: Date.now() });
60
+ return result;
61
+ }
62
+ catch (error) {
63
+ console.error(`Failed to validate Maven package ${packageName}:`, error);
64
+ return {
65
+ name: packageName,
66
+ version,
67
+ registry: 'maven',
68
+ exists: false,
69
+ warning: 'Could not verify package existence',
70
+ lastChecked: new Date()
71
+ };
72
+ }
73
+ }
74
+ async search(query, limit = 10) {
75
+ try {
76
+ const response = await fetch(`${this.registryUrl}?q=${encodeURIComponent(query)}&rows=${limit}&wt=json`);
77
+ if (!response.ok) {
78
+ return [];
79
+ }
80
+ const data = await response.json();
81
+ return data.response.docs.map((doc) => ({
82
+ name: `${doc.g}:${doc.a}`,
83
+ version: doc.v,
84
+ registry: 'maven',
85
+ exists: true,
86
+ latestVersion: doc.latestVersion || doc.v,
87
+ lastChecked: new Date()
88
+ }));
89
+ }
90
+ catch (error) {
91
+ console.error(`Failed to search Maven registry for ${query}:`, error);
92
+ return [];
93
+ }
94
+ }
95
+ clearCache() {
96
+ this.cache.clear();
97
+ }
98
+ }
99
+ //# sourceMappingURL=maven.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maven.js","sourceRoot":"","sources":["../../../src/developer/validators/maven.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * NPM Registry Validator
3
+ * Validates package existence and retrieves metadata from npm registry
4
+ */
5
+ import type { PackageInfo, RegistryValidator } from '../types/package.js';
6
+ export declare class NpmValidator implements RegistryValidator {
7
+ private readonly registryUrl;
8
+ private cache;
9
+ private readonly cacheTimeout;
10
+ validate(packageName: string, version?: string): Promise<PackageInfo>;
11
+ search(query: string, limit?: number): Promise<PackageInfo[]>;
12
+ clearCache(): void;
13
+ }
14
+ //# sourceMappingURL=npm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm.d.ts","sourceRoot":"","sources":["../../../src/developer/validators/npm.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE1E,qBAAa,YAAa,YAAW,iBAAiB;IACpD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgC;IAC5D,OAAO,CAAC,KAAK,CAA+D;IAC5E,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiB;IAExC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAyErE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA0B/D,UAAU,IAAI,IAAI;CAGnB"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * NPM Registry Validator
3
+ * Validates package existence and retrieves metadata from npm registry
4
+ */
5
+ export class NpmValidator {
6
+ registryUrl = 'https://registry.npmjs.org';
7
+ cache = new Map();
8
+ cacheTimeout = 5 * 60 * 1000; // 5 minutes
9
+ async validate(packageName, version) {
10
+ // Check cache first
11
+ const cacheKey = `${packageName}${version ? `@${version}` : ''}`;
12
+ const cached = this.cache.get(cacheKey);
13
+ if (cached && Date.now() - cached.timestamp < this.cacheTimeout) {
14
+ return cached.data;
15
+ }
16
+ try {
17
+ const response = await fetch(`${this.registryUrl}/${packageName}`);
18
+ if (response.status === 404) {
19
+ const result = {
20
+ name: packageName,
21
+ version,
22
+ registry: 'npm',
23
+ exists: false,
24
+ lastChecked: new Date()
25
+ };
26
+ // Cache negative result for shorter time
27
+ this.cache.set(cacheKey, { data: result, timestamp: Date.now() });
28
+ return result;
29
+ }
30
+ if (!response.ok) {
31
+ throw new Error(`Registry returned ${response.status}`);
32
+ }
33
+ const data = await response.json();
34
+ // Check if specific version exists
35
+ if (version && !data.versions?.[version]) {
36
+ return {
37
+ name: packageName,
38
+ version,
39
+ registry: 'npm',
40
+ exists: false,
41
+ latestVersion: data['dist-tags']?.latest,
42
+ lastChecked: new Date()
43
+ };
44
+ }
45
+ const result = {
46
+ name: packageName,
47
+ version: version || data['dist-tags']?.latest,
48
+ registry: 'npm',
49
+ exists: true,
50
+ latestVersion: data['dist-tags']?.latest,
51
+ deprecated: data.deprecated || data.versions?.[version || data['dist-tags']?.latest]?.deprecated,
52
+ lastChecked: new Date()
53
+ };
54
+ // Cache positive result
55
+ this.cache.set(cacheKey, { data: result, timestamp: Date.now() });
56
+ return result;
57
+ }
58
+ catch (error) {
59
+ console.error(`Failed to validate npm package ${packageName}:`, error);
60
+ // Return unknown state rather than false positive
61
+ return {
62
+ name: packageName,
63
+ version,
64
+ registry: 'npm',
65
+ exists: false, // Safe default - block if we can't verify
66
+ warning: 'Could not verify package existence',
67
+ lastChecked: new Date()
68
+ };
69
+ }
70
+ }
71
+ async search(query, limit = 10) {
72
+ try {
73
+ const response = await fetch(`https://registry.npmjs.org/-/v1/search?text=${encodeURIComponent(query)}&size=${limit}`);
74
+ if (!response.ok) {
75
+ return [];
76
+ }
77
+ const data = await response.json();
78
+ return data.objects.map((obj) => ({
79
+ name: obj.package.name,
80
+ version: obj.package.version,
81
+ registry: 'npm',
82
+ exists: true,
83
+ latestVersion: obj.package.version,
84
+ lastChecked: new Date()
85
+ }));
86
+ }
87
+ catch (error) {
88
+ console.error(`Failed to search npm registry for ${query}:`, error);
89
+ return [];
90
+ }
91
+ }
92
+ clearCache() {
93
+ this.cache.clear();
94
+ }
95
+ }
96
+ //# sourceMappingURL=npm.js.map