couchloop-eq-mcp 1.0.4 → 1.1.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 (282) hide show
  1. package/README.md +24 -11
  2. package/dist/developer/analyzers/bloat-detector.d.ts +89 -0
  3. package/dist/developer/analyzers/bloat-detector.d.ts.map +1 -0
  4. package/dist/developer/analyzers/bloat-detector.js +483 -0
  5. package/dist/developer/analyzers/bloat-detector.js.map +1 -0
  6. package/dist/developer/backup/auto-backup.d.ts +96 -0
  7. package/dist/developer/backup/auto-backup.d.ts.map +1 -0
  8. package/dist/developer/backup/auto-backup.js +346 -0
  9. package/dist/developer/backup/auto-backup.js.map +1 -0
  10. package/dist/developer/blockers/package-blocker.d.ts +33 -0
  11. package/dist/developer/blockers/package-blocker.d.ts.map +1 -0
  12. package/dist/developer/blockers/package-blocker.js +224 -0
  13. package/dist/developer/blockers/package-blocker.js.map +1 -0
  14. package/dist/developer/evaluators/ai-error-preventer.d.ts +54 -0
  15. package/dist/developer/evaluators/ai-error-preventer.d.ts.map +1 -0
  16. package/dist/developer/evaluators/ai-error-preventer.js +270 -0
  17. package/dist/developer/evaluators/ai-error-preventer.js.map +1 -0
  18. package/dist/developer/evaluators/build-context-detector.d.ts +44 -0
  19. package/dist/developer/evaluators/build-context-detector.d.ts.map +1 -0
  20. package/dist/developer/evaluators/build-context-detector.js +258 -0
  21. package/dist/developer/evaluators/build-context-detector.js.map +1 -0
  22. package/dist/developer/evaluators/package-evaluator.d.ts +37 -0
  23. package/dist/developer/evaluators/package-evaluator.d.ts.map +1 -0
  24. package/dist/developer/evaluators/package-evaluator.js +278 -0
  25. package/dist/developer/evaluators/package-evaluator.js.map +1 -0
  26. package/dist/developer/guards/file-guardian.d.ts +79 -0
  27. package/dist/developer/guards/file-guardian.d.ts.map +1 -0
  28. package/dist/developer/guards/file-guardian.js +309 -0
  29. package/dist/developer/guards/file-guardian.js.map +1 -0
  30. package/dist/developer/managers/context-manager.d.ts +61 -0
  31. package/dist/developer/managers/context-manager.d.ts.map +1 -0
  32. package/dist/developer/managers/context-manager.js +302 -0
  33. package/dist/developer/managers/context-manager.js.map +1 -0
  34. package/dist/developer/metrics/complexity-calculator.d.ts +52 -0
  35. package/dist/developer/metrics/complexity-calculator.d.ts.map +1 -0
  36. package/dist/developer/metrics/complexity-calculator.js +259 -0
  37. package/dist/developer/metrics/complexity-calculator.js.map +1 -0
  38. package/dist/developer/reports/review-summary.d.ts +49 -0
  39. package/dist/developer/reports/review-summary.d.ts.map +1 -0
  40. package/dist/developer/reports/review-summary.js +249 -0
  41. package/dist/developer/reports/review-summary.js.map +1 -0
  42. package/dist/developer/scanners/review-assistant.d.ts +41 -0
  43. package/dist/developer/scanners/review-assistant.d.ts.map +1 -0
  44. package/dist/developer/scanners/review-assistant.js +374 -0
  45. package/dist/developer/scanners/review-assistant.js.map +1 -0
  46. package/dist/developer/scanners/secret-scanner.d.ts +66 -0
  47. package/dist/developer/scanners/secret-scanner.d.ts.map +1 -0
  48. package/dist/developer/scanners/secret-scanner.js +287 -0
  49. package/dist/developer/scanners/secret-scanner.js.map +1 -0
  50. package/dist/developer/scanners/sql-injection-detector.d.ts +54 -0
  51. package/dist/developer/scanners/sql-injection-detector.d.ts.map +1 -0
  52. package/dist/developer/scanners/sql-injection-detector.js +174 -0
  53. package/dist/developer/scanners/sql-injection-detector.js.map +1 -0
  54. package/dist/developer/scanners/xss-detector.d.ts +60 -0
  55. package/dist/developer/scanners/xss-detector.d.ts.map +1 -0
  56. package/dist/developer/scanners/xss-detector.js +229 -0
  57. package/dist/developer/scanners/xss-detector.js.map +1 -0
  58. package/dist/developer/types/ai-errors.d.ts +34 -0
  59. package/dist/developer/types/ai-errors.d.ts.map +1 -0
  60. package/dist/developer/types/ai-errors.js +271 -0
  61. package/dist/developer/types/ai-errors.js.map +1 -0
  62. package/dist/developer/types/package.d.ts +32 -0
  63. package/dist/developer/types/package.d.ts.map +1 -0
  64. package/dist/developer/types/package.js +5 -0
  65. package/dist/developer/types/package.js.map +1 -0
  66. package/dist/developer/updaters/dependency-updater.d.ts +102 -0
  67. package/dist/developer/updaters/dependency-updater.d.ts.map +1 -0
  68. package/dist/developer/updaters/dependency-updater.js +472 -0
  69. package/dist/developer/updaters/dependency-updater.js.map +1 -0
  70. package/dist/developer/validators/cargo.d.ts +14 -0
  71. package/dist/developer/validators/cargo.d.ts.map +1 -0
  72. package/dist/developer/validators/cargo.js +132 -0
  73. package/dist/developer/validators/cargo.js.map +1 -0
  74. package/dist/developer/validators/gem.d.ts +14 -0
  75. package/dist/developer/validators/gem.d.ts.map +1 -0
  76. package/dist/developer/validators/gem.js +85 -0
  77. package/dist/developer/validators/gem.js.map +1 -0
  78. package/dist/developer/validators/go.d.ts +14 -0
  79. package/dist/developer/validators/go.d.ts.map +1 -0
  80. package/dist/developer/validators/go.js +138 -0
  81. package/dist/developer/validators/go.js.map +1 -0
  82. package/dist/developer/validators/maven.d.ts +14 -0
  83. package/dist/developer/validators/maven.d.ts.map +1 -0
  84. package/dist/developer/validators/maven.js +99 -0
  85. package/dist/developer/validators/maven.js.map +1 -0
  86. package/dist/developer/validators/npm.d.ts +14 -0
  87. package/dist/developer/validators/npm.d.ts.map +1 -0
  88. package/dist/developer/validators/npm.js +96 -0
  89. package/dist/developer/validators/npm.js.map +1 -0
  90. package/dist/developer/validators/nuget.d.ts +15 -0
  91. package/dist/developer/validators/nuget.d.ts.map +1 -0
  92. package/dist/developer/validators/nuget.js +107 -0
  93. package/dist/developer/validators/nuget.js.map +1 -0
  94. package/dist/developer/validators/pypi.d.ts +14 -0
  95. package/dist/developer/validators/pypi.d.ts.map +1 -0
  96. package/dist/developer/validators/pypi.js +118 -0
  97. package/dist/developer/validators/pypi.js.map +1 -0
  98. package/dist/developer/validators/registry-manager.d.ts +37 -0
  99. package/dist/developer/validators/registry-manager.d.ts.map +1 -0
  100. package/dist/developer/validators/registry-manager.js +89 -0
  101. package/dist/developer/validators/registry-manager.js.map +1 -0
  102. package/dist/developer/validators/version-checker.d.ts +145 -0
  103. package/dist/developer/validators/version-checker.d.ts.map +1 -0
  104. package/dist/developer/validators/version-checker.js +529 -0
  105. package/dist/developer/validators/version-checker.js.map +1 -0
  106. package/dist/server/index.js.map +1 -1
  107. package/dist/server/middleware/auth.d.ts +7 -9
  108. package/dist/server/middleware/auth.d.ts.map +1 -1
  109. package/dist/server/middleware/auth.js.map +1 -1
  110. package/dist/tools/check-versions.d.ts +100 -0
  111. package/dist/tools/check-versions.d.ts.map +1 -0
  112. package/dist/tools/check-versions.js +328 -0
  113. package/dist/tools/check-versions.js.map +1 -0
  114. package/dist/tools/detect-code-smell.d.ts +9 -0
  115. package/dist/tools/detect-code-smell.d.ts.map +1 -0
  116. package/dist/tools/detect-code-smell.js +231 -0
  117. package/dist/tools/detect-code-smell.js.map +1 -0
  118. package/dist/tools/index.d.ts +471 -0
  119. package/dist/tools/index.d.ts.map +1 -1
  120. package/dist/tools/index.js +178 -0
  121. package/dist/tools/index.js.map +1 -1
  122. package/dist/tools/journey.js +1 -1
  123. package/dist/tools/journey.js.map +1 -1
  124. package/dist/tools/pre-review-code.d.ts +71 -0
  125. package/dist/tools/pre-review-code.d.ts.map +1 -0
  126. package/dist/tools/pre-review-code.js +159 -0
  127. package/dist/tools/pre-review-code.js.map +1 -0
  128. package/dist/tools/preserve-context.d.ts +27 -0
  129. package/dist/tools/preserve-context.d.ts.map +1 -0
  130. package/dist/tools/preserve-context.js +98 -0
  131. package/dist/tools/preserve-context.js.map +1 -0
  132. package/dist/tools/protect-files.d.ts +224 -0
  133. package/dist/tools/protect-files.d.ts.map +1 -0
  134. package/dist/tools/protect-files.js +286 -0
  135. package/dist/tools/protect-files.js.map +1 -0
  136. package/dist/tools/scan-security.d.ts +38 -0
  137. package/dist/tools/scan-security.d.ts.map +1 -0
  138. package/dist/tools/scan-security.js +237 -0
  139. package/dist/tools/scan-security.js.map +1 -0
  140. package/dist/tools/validate_packages.d.ts +8 -0
  141. package/dist/tools/validate_packages.d.ts.map +1 -0
  142. package/dist/tools/validate_packages.js +159 -0
  143. package/dist/tools/validate_packages.js.map +1 -0
  144. package/dist/types/auth.d.ts.map +1 -1
  145. package/dist/types/auth.js +1 -2
  146. package/dist/types/auth.js.map +1 -1
  147. package/dist/types/context.d.ts +46 -0
  148. package/dist/types/context.d.ts.map +1 -0
  149. package/dist/types/context.js +17 -0
  150. package/dist/types/context.js.map +1 -0
  151. package/dist/types/file-protection.d.ts +50 -0
  152. package/dist/types/file-protection.d.ts.map +1 -0
  153. package/dist/types/file-protection.js +9 -0
  154. package/dist/types/file-protection.js.map +1 -0
  155. package/dist/utils/errorHandler.d.ts.map +1 -1
  156. package/dist/utils/errorHandler.js +2 -1
  157. package/dist/utils/errorHandler.js.map +1 -1
  158. package/package.json +30 -4
  159. package/dist/db/migrate.d.ts +0 -4
  160. package/dist/db/migrate.d.ts.map +0 -1
  161. package/dist/db/migrate.js +0 -34
  162. package/dist/db/migrate.js.map +0 -1
  163. package/dist/db/migrations/schema.d.ts +0 -1074
  164. package/dist/db/migrations/schema.d.ts.map +0 -1
  165. package/dist/db/migrations/schema.js +0 -160
  166. package/dist/db/migrations/schema.js.map +0 -1
  167. package/dist/db/schema.d.ts +0 -1576
  168. package/dist/db/schema.d.ts.map +0 -1
  169. package/dist/db/schema.js +0 -204
  170. package/dist/db/schema.js.map +0 -1
  171. package/dist/db/seed.d.ts +0 -4
  172. package/dist/db/seed.d.ts.map +0 -1
  173. package/dist/db/seed.js +0 -57
  174. package/dist/db/seed.js.map +0 -1
  175. package/dist/db/seedOAuth.d.ts +0 -4
  176. package/dist/db/seedOAuth.d.ts.map +0 -1
  177. package/dist/db/seedOAuth.js +0 -76
  178. package/dist/db/seedOAuth.js.map +0 -1
  179. package/dist/governance/config.d.ts +0 -66
  180. package/dist/governance/config.d.ts.map +0 -1
  181. package/dist/governance/config.js +0 -238
  182. package/dist/governance/config.js.map +0 -1
  183. package/dist/governance/detectors/hallucination.d.ts +0 -61
  184. package/dist/governance/detectors/hallucination.d.ts.map +0 -1
  185. package/dist/governance/detectors/hallucination.js +0 -338
  186. package/dist/governance/detectors/hallucination.js.map +0 -1
  187. package/dist/governance/detectors/inconsistency.d.ts +0 -99
  188. package/dist/governance/detectors/inconsistency.d.ts.map +0 -1
  189. package/dist/governance/detectors/inconsistency.js +0 -548
  190. package/dist/governance/detectors/inconsistency.js.map +0 -1
  191. package/dist/governance/detectors/toneDrift.d.ts +0 -63
  192. package/dist/governance/detectors/toneDrift.d.ts.map +0 -1
  193. package/dist/governance/detectors/toneDrift.js +0 -421
  194. package/dist/governance/detectors/toneDrift.js.map +0 -1
  195. package/dist/governance/detectors/unsafeReasoning.d.ts +0 -54
  196. package/dist/governance/detectors/unsafeReasoning.d.ts.map +0 -1
  197. package/dist/governance/detectors/unsafeReasoning.js +0 -473
  198. package/dist/governance/detectors/unsafeReasoning.js.map +0 -1
  199. package/dist/governance/evaluationEngine.d.ts +0 -112
  200. package/dist/governance/evaluationEngine.d.ts.map +0 -1
  201. package/dist/governance/evaluationEngine.js +0 -265
  202. package/dist/governance/evaluationEngine.js.map +0 -1
  203. package/dist/governance/intervention.d.ts +0 -81
  204. package/dist/governance/intervention.d.ts.map +0 -1
  205. package/dist/governance/intervention.js +0 -405
  206. package/dist/governance/intervention.js.map +0 -1
  207. package/dist/server/oauth/anomalyDetection.d.ts +0 -146
  208. package/dist/server/oauth/anomalyDetection.d.ts.map +0 -1
  209. package/dist/server/oauth/anomalyDetection.js +0 -405
  210. package/dist/server/oauth/anomalyDetection.js.map +0 -1
  211. package/dist/server/oauth/authServer.d.ts +0 -61
  212. package/dist/server/oauth/authServer.d.ts.map +0 -1
  213. package/dist/server/oauth/authServer.js +0 -283
  214. package/dist/server/oauth/authServer.js.map +0 -1
  215. package/dist/server/oauth/dpop.d.ts +0 -135
  216. package/dist/server/oauth/dpop.d.ts.map +0 -1
  217. package/dist/server/oauth/dpop.js +0 -338
  218. package/dist/server/oauth/dpop.js.map +0 -1
  219. package/dist/server/oauth/gdpr/consent.d.ts +0 -173
  220. package/dist/server/oauth/gdpr/consent.d.ts.map +0 -1
  221. package/dist/server/oauth/gdpr/consent.js +0 -388
  222. package/dist/server/oauth/gdpr/consent.js.map +0 -1
  223. package/dist/server/oauth/gdpr/dataPortability.d.ts +0 -214
  224. package/dist/server/oauth/gdpr/dataPortability.d.ts.map +0 -1
  225. package/dist/server/oauth/gdpr/dataPortability.js +0 -486
  226. package/dist/server/oauth/gdpr/dataPortability.js.map +0 -1
  227. package/dist/server/oauth/gdpr/index.d.ts +0 -103
  228. package/dist/server/oauth/gdpr/index.d.ts.map +0 -1
  229. package/dist/server/oauth/gdpr/index.js +0 -273
  230. package/dist/server/oauth/gdpr/index.js.map +0 -1
  231. package/dist/server/oauth/gdpr/rightToErasure.d.ts +0 -184
  232. package/dist/server/oauth/gdpr/rightToErasure.d.ts.map +0 -1
  233. package/dist/server/oauth/gdpr/rightToErasure.js +0 -527
  234. package/dist/server/oauth/gdpr/rightToErasure.js.map +0 -1
  235. package/dist/server/oauth/monitoring/securityMonitor.d.ts +0 -218
  236. package/dist/server/oauth/monitoring/securityMonitor.d.ts.map +0 -1
  237. package/dist/server/oauth/monitoring/securityMonitor.js +0 -615
  238. package/dist/server/oauth/monitoring/securityMonitor.js.map +0 -1
  239. package/dist/server/oauth/pkce.d.ts +0 -61
  240. package/dist/server/oauth/pkce.d.ts.map +0 -1
  241. package/dist/server/oauth/pkce.js +0 -157
  242. package/dist/server/oauth/pkce.js.map +0 -1
  243. package/dist/server/oauth/providers/base.d.ts +0 -147
  244. package/dist/server/oauth/providers/base.d.ts.map +0 -1
  245. package/dist/server/oauth/providers/base.js +0 -312
  246. package/dist/server/oauth/providers/base.js.map +0 -1
  247. package/dist/server/oauth/providers/github.d.ts +0 -55
  248. package/dist/server/oauth/providers/github.d.ts.map +0 -1
  249. package/dist/server/oauth/providers/github.js +0 -225
  250. package/dist/server/oauth/providers/github.js.map +0 -1
  251. package/dist/server/oauth/providers/google.d.ts +0 -49
  252. package/dist/server/oauth/providers/google.d.ts.map +0 -1
  253. package/dist/server/oauth/providers/google.js +0 -153
  254. package/dist/server/oauth/providers/google.js.map +0 -1
  255. package/dist/server/oauth/providers/index.d.ts +0 -9
  256. package/dist/server/oauth/providers/index.d.ts.map +0 -1
  257. package/dist/server/oauth/providers/index.js +0 -24
  258. package/dist/server/oauth/providers/index.js.map +0 -1
  259. package/dist/server/oauth/refreshTokenRotation.d.ts +0 -114
  260. package/dist/server/oauth/refreshTokenRotation.d.ts.map +0 -1
  261. package/dist/server/oauth/refreshTokenRotation.js +0 -344
  262. package/dist/server/oauth/refreshTokenRotation.js.map +0 -1
  263. package/dist/server/oauth/security.d.ts +0 -101
  264. package/dist/server/oauth/security.d.ts.map +0 -1
  265. package/dist/server/oauth/security.js +0 -268
  266. package/dist/server/oauth/security.js.map +0 -1
  267. package/dist/server/oauth/tokenEncryption.d.ts +0 -80
  268. package/dist/server/oauth/tokenEncryption.d.ts.map +0 -1
  269. package/dist/server/oauth/tokenEncryption.js +0 -218
  270. package/dist/server/oauth/tokenEncryption.js.map +0 -1
  271. package/dist/tools/sendMessage-complex-backup.d.ts +0 -6
  272. package/dist/tools/sendMessage-complex-backup.d.ts.map +0 -1
  273. package/dist/tools/sendMessage-complex-backup.js +0 -545
  274. package/dist/tools/sendMessage-complex-backup.js.map +0 -1
  275. package/dist/tools/sendMessage-revised.d.ts +0 -11
  276. package/dist/tools/sendMessage-revised.d.ts.map +0 -1
  277. package/dist/tools/sendMessage-revised.js +0 -429
  278. package/dist/tools/sendMessage-revised.js.map +0 -1
  279. package/dist/tools/sendMessage-truly-simple.d.ts +0 -8
  280. package/dist/tools/sendMessage-truly-simple.d.ts.map +0 -1
  281. package/dist/tools/sendMessage-truly-simple.js +0 -299
  282. package/dist/tools/sendMessage-truly-simple.js.map +0 -1
@@ -0,0 +1,224 @@
1
+ /**
2
+ * Package Blocker - Intercepts and blocks AI package recommendations
3
+ * This is the enforcement layer that prevents bad packages from being installed
4
+ */
5
+ import { PackageEvaluator } from '../evaluators/package-evaluator.js';
6
+ export class PackageBlocker {
7
+ evaluator;
8
+ autoFix;
9
+ constructor(autoFix = true) {
10
+ this.evaluator = new PackageEvaluator();
11
+ this.autoFix = autoFix;
12
+ }
13
+ /**
14
+ * Intercept and validate code with package installations
15
+ */
16
+ async interceptCode(code, language) {
17
+ const context = { language };
18
+ const result = {
19
+ allowed: true,
20
+ original: code,
21
+ warnings: [],
22
+ blockedPackages: [],
23
+ suggestions: {}
24
+ };
25
+ // Extract packages from code
26
+ const packages = this.evaluator.extractPackages(code, language);
27
+ if (packages.length === 0) {
28
+ return result;
29
+ }
30
+ // Evaluate all packages
31
+ const evaluations = await this.evaluator.evaluateBatch(packages, context);
32
+ // Process evaluation results
33
+ let modifiedCode = code;
34
+ for (const evaluation of evaluations) {
35
+ if (evaluation.blocked) {
36
+ result.allowed = false;
37
+ result.blockedPackages.push(evaluation.package.name);
38
+ if (evaluation.warning) {
39
+ result.warnings.push(evaluation.warning);
40
+ }
41
+ if (evaluation.suggestions && evaluation.suggestions.length > 0) {
42
+ result.suggestions[evaluation.package.name] = evaluation.suggestions;
43
+ // Auto-fix if enabled and we have a clear suggestion
44
+ if (this.autoFix && evaluation.suggestions.length === 1) {
45
+ if (evaluation.suggestions[0]) {
46
+ modifiedCode = this.replacePackage(modifiedCode, evaluation.package.name, evaluation.suggestions[0], language);
47
+ }
48
+ }
49
+ }
50
+ }
51
+ else if (evaluation.warning) {
52
+ result.warnings.push(evaluation.warning);
53
+ }
54
+ }
55
+ // If we modified the code, include it
56
+ if (modifiedCode !== code) {
57
+ result.modified = modifiedCode;
58
+ }
59
+ return result;
60
+ }
61
+ /**
62
+ * Intercept package manager commands (npm install, pip install, etc.)
63
+ */
64
+ async interceptCommand(command) {
65
+ const result = {
66
+ allowed: true,
67
+ original: command,
68
+ warnings: [],
69
+ blockedPackages: [],
70
+ suggestions: {}
71
+ };
72
+ // Detect package manager and extract packages
73
+ const { manager, packages, language } = this.parseCommand(command);
74
+ if (!manager || packages.length === 0) {
75
+ return result;
76
+ }
77
+ const context = { language };
78
+ // Evaluate each package
79
+ for (const pkg of packages) {
80
+ const evaluation = await this.evaluator.evaluate(pkg.name, context, pkg.version);
81
+ if (evaluation.blocked) {
82
+ result.allowed = false;
83
+ result.blockedPackages.push(pkg.name);
84
+ if (evaluation.warning) {
85
+ result.warnings.push(evaluation.warning);
86
+ }
87
+ if (evaluation.suggestions) {
88
+ result.suggestions[pkg.name] = evaluation.suggestions;
89
+ }
90
+ }
91
+ else if (evaluation.warning) {
92
+ result.warnings.push(evaluation.warning);
93
+ }
94
+ }
95
+ // Generate modified command if blocked
96
+ if (!result.allowed && this.autoFix) {
97
+ const validPackages = packages.filter(pkg => !result.blockedPackages.includes(pkg.name));
98
+ if (validPackages.length > 0) {
99
+ result.modified = this.buildCommand(manager, validPackages);
100
+ }
101
+ }
102
+ return result;
103
+ }
104
+ parseCommand(command) {
105
+ const result = {
106
+ manager: null,
107
+ packages: [],
108
+ language: 'unknown'
109
+ };
110
+ // npm/yarn/pnpm patterns
111
+ const npmMatch = command.match(/^(npm|yarn|pnpm)\s+(install|add|i)\s+(.+)$/i);
112
+ if (npmMatch) {
113
+ result.manager = npmMatch[1] || null;
114
+ result.language = 'javascript';
115
+ const packageStrings = (npmMatch[3] || '').split(/\s+/);
116
+ for (const pkgStr of packageStrings) {
117
+ if (pkgStr.startsWith('-'))
118
+ continue; // Skip flags
119
+ const [name, version] = pkgStr.split('@').filter(Boolean);
120
+ if (name) {
121
+ result.packages.push({ name, version });
122
+ }
123
+ }
124
+ return result;
125
+ }
126
+ // pip patterns
127
+ const pipMatch = command.match(/^pip3?\s+install\s+(.+)$/i);
128
+ if (pipMatch) {
129
+ result.manager = 'pip';
130
+ result.language = 'python';
131
+ const packageStrings = (pipMatch[1] || '').split(/\s+/);
132
+ for (const pkgStr of packageStrings) {
133
+ if (pkgStr.startsWith('-'))
134
+ continue; // Skip flags
135
+ const [name, version] = pkgStr.split('==');
136
+ if (name) {
137
+ result.packages.push({ name, version });
138
+ }
139
+ }
140
+ return result;
141
+ }
142
+ // Maven patterns (in pom.xml context)
143
+ const mvnMatch = command.match(/mvn\s+dependency:get\s+-Dartifact=(.+)/i);
144
+ if (mvnMatch) {
145
+ result.manager = 'mvn';
146
+ result.language = 'java';
147
+ const [groupId, artifactId, version] = (mvnMatch[1] || '').split(':');
148
+ if (groupId && artifactId) {
149
+ result.packages.push({
150
+ name: `${groupId}:${artifactId}`,
151
+ version
152
+ });
153
+ }
154
+ return result;
155
+ }
156
+ return result;
157
+ }
158
+ buildCommand(manager, packages) {
159
+ const packageStrings = packages.map(pkg => pkg.version ? `${pkg.name}@${pkg.version}` : pkg.name);
160
+ switch (manager) {
161
+ case 'npm':
162
+ return `npm install ${packageStrings.join(' ')}`;
163
+ case 'yarn':
164
+ return `yarn add ${packageStrings.join(' ')}`;
165
+ case 'pnpm':
166
+ return `pnpm add ${packageStrings.join(' ')}`;
167
+ case 'pip':
168
+ return `pip install ${packageStrings.join(' ')}`;
169
+ default:
170
+ return '';
171
+ }
172
+ }
173
+ replacePackage(code, oldPkg, newPkg, language) {
174
+ switch (language) {
175
+ case 'javascript':
176
+ case 'typescript':
177
+ // Replace in import statements
178
+ code = code.replace(new RegExp(`(import\\s+.*?\\s+from\\s+['"])${oldPkg}(['"])`, 'g'), `$1${newPkg}$2`);
179
+ // Replace in require statements
180
+ code = code.replace(new RegExp(`(require\\s*\\(\\s*['"])${oldPkg}(['"]\\s*\\))`, 'g'), `$1${newPkg}$2`);
181
+ break;
182
+ case 'python':
183
+ // Replace in import statements
184
+ code = code.replace(new RegExp(`(^|\\n)(\\s*import\\s+)${oldPkg}(\\s|$)`, 'gm'), `$1$2${newPkg}$3`);
185
+ // Replace in from...import statements
186
+ code = code.replace(new RegExp(`(^|\\n)(\\s*from\\s+)${oldPkg}(\\s+import)`, 'gm'), `$1$2${newPkg}$3`);
187
+ break;
188
+ }
189
+ return code;
190
+ }
191
+ /**
192
+ * Generate a report of blocked packages
193
+ */
194
+ generateReport(results) {
195
+ const totalBlocked = results.reduce((sum, r) => sum + r.blockedPackages.length, 0);
196
+ const report = [
197
+ `Package Validation Report`,
198
+ `========================`,
199
+ `Total commands analyzed: ${results.length}`,
200
+ `Blocked packages: ${totalBlocked}`,
201
+ ``
202
+ ];
203
+ if (totalBlocked > 0) {
204
+ report.push(`Blocked Packages:`);
205
+ for (const result of results) {
206
+ for (const pkg of result.blockedPackages) {
207
+ const suggestions = result.suggestions[pkg];
208
+ report.push(` ❌ ${pkg}`);
209
+ if (suggestions && suggestions.length > 0) {
210
+ report.push(` Suggestions: ${suggestions.join(', ')}`);
211
+ }
212
+ }
213
+ }
214
+ }
215
+ const warnings = results.flatMap(r => r.warnings);
216
+ if (warnings.length > 0) {
217
+ report.push(``);
218
+ report.push(`Warnings:`);
219
+ warnings.forEach(w => report.push(` ⚠️ ${w}`));
220
+ }
221
+ return report.join('\n');
222
+ }
223
+ }
224
+ //# sourceMappingURL=package-blocker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-blocker.js","sourceRoot":"","sources":["../../../src/developer/blockers/package-blocker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * AI Error Preventer
3
+ * Intercepts and prevents common AI coding errors before they cause problems
4
+ */
5
+ import { AIErrorPattern } from '../types/ai-errors.js';
6
+ import { BuildContext } from './build-context-detector.js';
7
+ export interface ErrorPreventionResult {
8
+ code: string;
9
+ errors: Array<{
10
+ pattern: AIErrorPattern;
11
+ locations: Array<{
12
+ line: number;
13
+ column: number;
14
+ snippet: string;
15
+ }>;
16
+ fixed: boolean;
17
+ suggestion?: string;
18
+ }>;
19
+ warnings: string[];
20
+ fixed: boolean;
21
+ fixedCode?: string;
22
+ preventedErrors: string[];
23
+ buildContext?: BuildContext;
24
+ }
25
+ export declare class AIErrorPreventer {
26
+ private buildDetector;
27
+ private packageEvaluator;
28
+ constructor(projectRoot?: string);
29
+ /**
30
+ * Prevent AI errors in generated code
31
+ */
32
+ preventErrors(code: string, language: string, options?: {
33
+ autoFix?: boolean;
34
+ checkBuildContext?: boolean;
35
+ patterns?: string[];
36
+ }): Promise<ErrorPreventionResult>;
37
+ /**
38
+ * Detect a specific error pattern in code
39
+ */
40
+ private detectPattern;
41
+ /**
42
+ * Fix a specific error pattern
43
+ */
44
+ private fixPattern;
45
+ /**
46
+ * Fix import statements to add .js extensions for ESM
47
+ */
48
+ private fixImportExtensions;
49
+ /**
50
+ * Generate report of prevented errors
51
+ */
52
+ generateReport(result: ErrorPreventionResult): string;
53
+ }
54
+ //# sourceMappingURL=ai-error-preventer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-error-preventer.d.ts","sourceRoot":"","sources":["../../../src/developer/evaluators/ai-error-preventer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAoB,cAAc,EAAqB,MAAM,uBAAuB,CAAC;AAC5F,OAAO,EAAwB,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAGjF,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,KAAK,CAAC;QACZ,OAAO,EAAE,cAAc,CAAC;QACxB,SAAS,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACpE,KAAK,EAAE,OAAO,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,WAAW,CAAC,EAAE,MAAM;IAKhC;;OAEG;IACG,aAAa,CACjB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;QACP,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KAChB,GACL,OAAO,CAAC,qBAAqB,CAAC;IAuFjC;;OAEG;YACW,aAAa;IAgG3B;;OAEG;YACW,UAAU;IAiDxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAoB3B;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM;CAwDtD"}
@@ -0,0 +1,270 @@
1
+ /**
2
+ * AI Error Preventer
3
+ * Intercepts and prevents common AI coding errors before they cause problems
4
+ */
5
+ import { AI_ERROR_CATALOG, getCriticalErrors } from '../types/ai-errors.js';
6
+ import { BuildContextDetector } from './build-context-detector.js';
7
+ import { PackageEvaluator } from './package-evaluator.js';
8
+ export class AIErrorPreventer {
9
+ buildDetector;
10
+ packageEvaluator;
11
+ constructor(projectRoot) {
12
+ this.buildDetector = new BuildContextDetector(projectRoot);
13
+ this.packageEvaluator = new PackageEvaluator();
14
+ }
15
+ /**
16
+ * Prevent AI errors in generated code
17
+ */
18
+ async preventErrors(code, language, options = {}) {
19
+ const result = {
20
+ code,
21
+ errors: [],
22
+ warnings: [],
23
+ fixed: false,
24
+ preventedErrors: []
25
+ };
26
+ // Step 1: Detect build context if requested
27
+ if (options.checkBuildContext) {
28
+ result.buildContext = await this.buildDetector.detect();
29
+ // Apply build context fixes
30
+ if (result.buildContext.requiresJsExtensions) {
31
+ code = this.fixImportExtensions(code, language);
32
+ result.preventedErrors.push('build-context-blindness');
33
+ }
34
+ }
35
+ // Step 2: Check for critical error patterns
36
+ const patternsToCheck = options.patterns
37
+ ? AI_ERROR_CATALOG.filter(p => options.patterns?.includes(p.id) || false)
38
+ : getCriticalErrors();
39
+ for (const pattern of patternsToCheck) {
40
+ const detection = await this.detectPattern(code, pattern, language);
41
+ if (detection.found) {
42
+ result.errors.push({
43
+ pattern,
44
+ locations: detection.locations,
45
+ fixed: false,
46
+ suggestion: detection.suggestion
47
+ });
48
+ if (options.autoFix === true && pattern.autoFixable) {
49
+ const fixedCode = await this.fixPattern(code, pattern, language);
50
+ if (fixedCode !== code) {
51
+ code = fixedCode;
52
+ const lastError = result.errors[result.errors.length - 1];
53
+ if (lastError) {
54
+ lastError.fixed = true;
55
+ }
56
+ result.preventedErrors.push(pattern.id);
57
+ }
58
+ }
59
+ }
60
+ }
61
+ // Step 3: Package validation (always check)
62
+ const languageWithTs = language;
63
+ const packages = this.packageEvaluator.extractPackages(code, languageWithTs);
64
+ if (packages.length > 0) {
65
+ const validationResults = await this.packageEvaluator.evaluateBatch(packages, { language: languageWithTs });
66
+ const invalidPackages = validationResults.filter(r => r.blocked);
67
+ if (invalidPackages.length > 0) {
68
+ result.warnings.push(`Found ${invalidPackages.length} invalid packages`);
69
+ result.preventedErrors.push('package-hallucination');
70
+ // Auto-fix package names if possible
71
+ if (options.autoFix === true) {
72
+ for (const pkg of invalidPackages) {
73
+ if (pkg.suggestions && pkg.suggestions.length === 1) {
74
+ code = code.replace(new RegExp(`(['"])${pkg.package.name}(['"])`, 'g'), `$1${pkg.suggestions[0]}$2`);
75
+ }
76
+ }
77
+ }
78
+ }
79
+ }
80
+ // Return final result
81
+ if (code !== result.code) {
82
+ result.fixed = true;
83
+ result.fixedCode = code;
84
+ }
85
+ return result;
86
+ }
87
+ /**
88
+ * Detect a specific error pattern in code
89
+ */
90
+ async detectPattern(code, pattern, _language) {
91
+ const locations = [];
92
+ switch (pattern.id) {
93
+ case 'async-await-confusion': {
94
+ // Look for Promise-returning functions without await
95
+ const lines = code.split('\n');
96
+ lines.forEach((line, index) => {
97
+ if (line.includes('fetch(') || line.includes('axios') || line.includes('query')) {
98
+ if (!line.includes('await') && !line.includes('.then')) {
99
+ locations.push({
100
+ line: index + 1,
101
+ column: line.indexOf('fetch') || line.indexOf('axios') || 0,
102
+ snippet: line.trim()
103
+ });
104
+ }
105
+ }
106
+ });
107
+ break;
108
+ }
109
+ case 'sql-injection-prone': {
110
+ // Check for string concatenation in SQL queries
111
+ const sqlPattern = /(?:query|execute|prepare)\s*\(\s*[`'"].*?\$\{.*?\}|(?:query|execute|prepare)\s*\(\s*.*?\+/gi;
112
+ let match;
113
+ while ((match = sqlPattern.exec(code)) !== null) {
114
+ const line = code.substring(0, match.index).split('\n').length;
115
+ locations.push({
116
+ line,
117
+ column: match.index,
118
+ snippet: match[0]
119
+ });
120
+ }
121
+ break;
122
+ }
123
+ case 'hardcoded-secrets': {
124
+ // Detect common secret patterns
125
+ const secretPatterns = [
126
+ /(?:api[_-]?key|apikey|secret|password|token)\s*[:=]\s*['"][^'"]{10,}['"]/gi,
127
+ /sk-[a-zA-Z0-9]{20,}/g,
128
+ /mongodb:\/\/[^:]+:[^@]+@/g
129
+ ];
130
+ for (const secretPattern of secretPatterns) {
131
+ let match;
132
+ while ((match = secretPattern.exec(code)) !== null) {
133
+ const line = code.substring(0, match.index).split('\n').length;
134
+ locations.push({
135
+ line,
136
+ column: match.index,
137
+ snippet: match[0]
138
+ });
139
+ }
140
+ }
141
+ break;
142
+ }
143
+ case 'null-reference-error': {
144
+ // Look for property access chains without null checks
145
+ const chainPattern = /\b\w+(?:\.\w+){2,}/g;
146
+ let chainMatch;
147
+ while ((chainMatch = chainPattern.exec(code)) !== null) {
148
+ const chain = chainMatch[0];
149
+ // Check if there's optional chaining or null check nearby
150
+ const lineStart = code.lastIndexOf('\n', chainMatch.index) + 1;
151
+ const lineEnd = code.indexOf('\n', chainMatch.index);
152
+ const line = code.substring(lineStart, lineEnd === -1 ? undefined : lineEnd);
153
+ if (!line.includes('?.') && !line.includes('if (') && !line.includes('&& ')) {
154
+ locations.push({
155
+ line: code.substring(0, chainMatch.index).split('\n').length,
156
+ column: chainMatch.index - lineStart,
157
+ snippet: chain
158
+ });
159
+ }
160
+ }
161
+ break;
162
+ }
163
+ }
164
+ return {
165
+ found: locations.length > 0,
166
+ locations,
167
+ suggestion: pattern.prevention
168
+ };
169
+ }
170
+ /**
171
+ * Fix a specific error pattern
172
+ */
173
+ async fixPattern(code, pattern, _language) {
174
+ switch (pattern.id) {
175
+ case 'async-await-confusion':
176
+ // Add await to common async functions
177
+ code = code.replace(/(\s+)(fetch\()/g, '$1await $2');
178
+ code = code.replace(/(\s+)(axios\.\w+\()/g, '$1await $2');
179
+ break;
180
+ case 'sql-injection-prone':
181
+ // Convert to parameterized queries (basic example)
182
+ code = code.replace(/query\(`SELECT \* FROM (\w+) WHERE (\w+) = \$\{([^}]+)\}`\)/g, 'query("SELECT * FROM $1 WHERE $2 = ?", [$3])');
183
+ break;
184
+ case 'hardcoded-secrets':
185
+ // Replace with environment variables
186
+ code = code.replace(/(?:const|let|var)\s+(\w*(?:api[_-]?key|apikey|secret|password|token)\w*)\s*=\s*['"]([^'"]+)['"]/gi, 'const $1 = process.env.$1');
187
+ break;
188
+ case 'null-reference-error':
189
+ // Add optional chaining
190
+ code = code.replace(/(\b\w+)((?:\.\w+){2,})/g, (match, obj, chain) => {
191
+ // Don't modify if it's already using optional chaining
192
+ if (code[code.indexOf(match) - 1] === '?')
193
+ return match;
194
+ // Convert to optional chaining
195
+ return obj + chain.replace(/\./g, '?.');
196
+ });
197
+ break;
198
+ case 'build-context-blindness':
199
+ // This is handled by fixImportExtensions
200
+ break;
201
+ }
202
+ return code;
203
+ }
204
+ /**
205
+ * Fix import statements to add .js extensions for ESM
206
+ */
207
+ fixImportExtensions(code, language) {
208
+ if (language !== 'javascript' && language !== 'typescript') {
209
+ return code;
210
+ }
211
+ // Fix import statements
212
+ code = code.replace(/from\s+['"](\.[^'"]+?)(?<!\.js|\.mjs|\.json|\.node)['"](\s|;|$)/g, 'from "$1.js"$2');
213
+ // Fix dynamic imports
214
+ code = code.replace(/import\s*\(\s*['"](\.[^'"]+?)(?<!\.js|\.mjs|\.json|\.node)['"]\s*\)/g, 'import("$1.js")');
215
+ return code;
216
+ }
217
+ /**
218
+ * Generate report of prevented errors
219
+ */
220
+ generateReport(result) {
221
+ const lines = [
222
+ '🛡️ AI Error Prevention Report',
223
+ '='.repeat(40),
224
+ ''
225
+ ];
226
+ if (result.buildContext) {
227
+ lines.push('📦 Build Context:');
228
+ lines.push(` Language: ${result.buildContext.language}`);
229
+ lines.push(` Module System: ${result.buildContext.moduleSystem || 'unknown'}`);
230
+ lines.push(` Package Manager: ${result.buildContext.packageManager || 'unknown'}`);
231
+ if (result.buildContext.requiresJsExtensions) {
232
+ lines.push(' ⚠️ Requires .js extensions in imports');
233
+ }
234
+ lines.push('');
235
+ }
236
+ if (result.preventedErrors.length > 0) {
237
+ lines.push(`✅ Prevented ${result.preventedErrors.length} AI Errors:`);
238
+ for (const errorId of result.preventedErrors) {
239
+ const pattern = AI_ERROR_CATALOG.find(p => p.id === errorId);
240
+ if (pattern) {
241
+ lines.push(` • ${pattern.name} (${pattern.impact} impact)`);
242
+ }
243
+ }
244
+ lines.push('');
245
+ }
246
+ if (result.errors.length > 0) {
247
+ const unfixed = result.errors.filter(e => !e.fixed);
248
+ if (unfixed.length > 0) {
249
+ lines.push(`⚠️ ${unfixed.length} Issues Need Manual Review:`);
250
+ for (const error of unfixed) {
251
+ lines.push(` • ${error.pattern.name}`);
252
+ if (error.suggestion) {
253
+ lines.push(` Fix: ${error.suggestion}`);
254
+ }
255
+ }
256
+ }
257
+ }
258
+ if (result.warnings.length > 0) {
259
+ lines.push('');
260
+ lines.push('📝 Warnings:');
261
+ result.warnings.forEach(w => lines.push(` • ${w}`));
262
+ }
263
+ lines.push('');
264
+ lines.push('-'.repeat(40));
265
+ lines.push(`Total Errors Prevented: ${result.preventedErrors.length}`);
266
+ lines.push(`Code Modified: ${result.fixed ? 'Yes' : 'No'}`);
267
+ return lines.join('\n');
268
+ }
269
+ }
270
+ //# sourceMappingURL=ai-error-preventer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-error-preventer.js","sourceRoot":"","sources":["../../../src/developer/evaluators/ai-error-preventer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Build Context Detector - Prevents "Build Context Blindness" errors
3
+ * Detects project configuration to prevent AI agents from making incorrect assumptions
4
+ */
5
+ export interface BuildContext {
6
+ language: 'javascript' | 'typescript' | 'python' | 'java' | 'unknown';
7
+ moduleSystem?: 'commonjs' | 'esm' | 'umd' | 'amd';
8
+ packageManager?: 'npm' | 'yarn' | 'pnpm' | 'pip' | 'maven' | 'gradle';
9
+ buildTool?: string;
10
+ tsConfig?: {
11
+ moduleResolution?: string;
12
+ module?: string;
13
+ target?: string;
14
+ strict?: boolean;
15
+ esModuleInterop?: boolean;
16
+ };
17
+ pythonVersion?: string;
18
+ nodeVersion?: string;
19
+ hasTypeScript: boolean;
20
+ requiresJsExtensions: boolean;
21
+ errors: string[];
22
+ warnings: string[];
23
+ aiGuidance: string[];
24
+ }
25
+ export declare class BuildContextDetector {
26
+ private projectRoot;
27
+ constructor(projectRoot?: string);
28
+ /**
29
+ * Detect full build context to prevent AI errors
30
+ */
31
+ detect(): Promise<BuildContext>;
32
+ private detectNodeContext;
33
+ private detectTypeScriptContext;
34
+ private detectPythonContext;
35
+ private detectJavaContext;
36
+ private generateAIGuidance;
37
+ private fileExists;
38
+ private findFirstExisting;
39
+ /**
40
+ * Generate a build command based on detected context
41
+ */
42
+ generateBuildCommand(context: BuildContext): string;
43
+ }
44
+ //# sourceMappingURL=build-context-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-context-detector.d.ts","sourceRoot":"","sources":["../../../src/developer/evaluators/build-context-detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,YAAY,GAAG,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;IACtE,YAAY,CAAC,EAAE,UAAU,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IAClD,cAAc,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE;QACT,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,eAAe,CAAC,EAAE,OAAO,CAAC;KAC3B,CAAC;IACF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,GAAE,MAAsB;IAI/C;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC;YA4BvB,iBAAiB;YA4DjB,uBAAuB;YA0CvB,mBAAmB;YAqCnB,iBAAiB;IAuB/B,OAAO,CAAC,kBAAkB;YAiCZ,UAAU;YASV,iBAAiB;IAS/B;;OAEG;IACH,oBAAoB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM;CAkBpD"}