couchloop-eq-mcp 1.0.4 → 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 (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 +23 -2
  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,258 @@
1
+ /**
2
+ * Build Context Detector - Prevents "Build Context Blindness" errors
3
+ * Detects project configuration to prevent AI agents from making incorrect assumptions
4
+ */
5
+ import { promises as fs } from 'fs';
6
+ import path from 'path';
7
+ export class BuildContextDetector {
8
+ projectRoot;
9
+ constructor(projectRoot = process.cwd()) {
10
+ this.projectRoot = projectRoot;
11
+ }
12
+ /**
13
+ * Detect full build context to prevent AI errors
14
+ */
15
+ async detect() {
16
+ const context = {
17
+ language: 'unknown',
18
+ hasTypeScript: false,
19
+ requiresJsExtensions: false,
20
+ errors: [],
21
+ warnings: [],
22
+ aiGuidance: []
23
+ };
24
+ // Check for package.json (Node.js projects)
25
+ await this.detectNodeContext(context);
26
+ // Check for TypeScript
27
+ await this.detectTypeScriptContext(context);
28
+ // Check for Python
29
+ await this.detectPythonContext(context);
30
+ // Check for Java
31
+ await this.detectJavaContext(context);
32
+ // Generate AI guidance based on detected context
33
+ this.generateAIGuidance(context);
34
+ return context;
35
+ }
36
+ async detectNodeContext(context) {
37
+ try {
38
+ const packageJsonPath = path.join(this.projectRoot, 'package.json');
39
+ const content = await fs.readFile(packageJsonPath, 'utf-8');
40
+ const pkg = JSON.parse(content);
41
+ context.language = 'javascript';
42
+ // Detect module system
43
+ if (pkg.type === 'module') {
44
+ context.moduleSystem = 'esm';
45
+ context.requiresJsExtensions = true;
46
+ context.aiGuidance.push('⚠️ ESM project: Use .js extensions in imports, even for TypeScript files');
47
+ }
48
+ else {
49
+ context.moduleSystem = 'commonjs';
50
+ }
51
+ // Detect package manager
52
+ const hasYarnLock = await this.fileExists('yarn.lock');
53
+ const hasPnpmLock = await this.fileExists('pnpm-lock.yaml');
54
+ if (hasPnpmLock) {
55
+ context.packageManager = 'pnpm';
56
+ }
57
+ else if (hasYarnLock) {
58
+ context.packageManager = 'yarn';
59
+ }
60
+ else {
61
+ context.packageManager = 'npm';
62
+ }
63
+ // Check for TypeScript dependency
64
+ if (pkg.devDependencies?.typescript || pkg.dependencies?.typescript) {
65
+ context.hasTypeScript = true;
66
+ context.language = 'typescript';
67
+ }
68
+ // Detect build tools
69
+ if (pkg.scripts?.build) {
70
+ const buildScript = pkg.scripts.build;
71
+ if (buildScript.includes('tsc')) {
72
+ context.buildTool = 'tsc';
73
+ }
74
+ else if (buildScript.includes('webpack')) {
75
+ context.buildTool = 'webpack';
76
+ }
77
+ else if (buildScript.includes('vite')) {
78
+ context.buildTool = 'vite';
79
+ }
80
+ else if (buildScript.includes('rollup')) {
81
+ context.buildTool = 'rollup';
82
+ }
83
+ }
84
+ // Extract Node version requirement
85
+ if (pkg.engines?.node) {
86
+ context.nodeVersion = pkg.engines.node;
87
+ context.aiGuidance.push(`Node version requirement: ${pkg.engines.node}`);
88
+ }
89
+ }
90
+ catch (error) {
91
+ // Not a Node.js project
92
+ }
93
+ }
94
+ async detectTypeScriptContext(context) {
95
+ try {
96
+ const tsconfigPath = path.join(this.projectRoot, 'tsconfig.json');
97
+ const content = await fs.readFile(tsconfigPath, 'utf-8');
98
+ // Remove comments for parsing
99
+ const jsonString = content.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g, '');
100
+ const tsconfig = JSON.parse(jsonString);
101
+ context.hasTypeScript = true;
102
+ context.language = 'typescript';
103
+ const compilerOptions = tsconfig.compilerOptions || {};
104
+ context.tsConfig = {
105
+ moduleResolution: compilerOptions.moduleResolution,
106
+ module: compilerOptions.module,
107
+ target: compilerOptions.target,
108
+ strict: compilerOptions.strict,
109
+ esModuleInterop: compilerOptions.esModuleInterop
110
+ };
111
+ // Critical: Check if .js extensions are required
112
+ if (compilerOptions.moduleResolution === 'node16' ||
113
+ compilerOptions.moduleResolution === 'nodenext' ||
114
+ compilerOptions.module === 'node16' ||
115
+ compilerOptions.module === 'nodenext') {
116
+ context.requiresJsExtensions = true;
117
+ context.warnings.push('TypeScript requires .js extensions in imports (ESM mode)');
118
+ context.aiGuidance.push('🚨 CRITICAL: Import all local modules with .js extension, not .ts!');
119
+ context.aiGuidance.push('Example: import { foo } from "./bar.js" (NOT "./bar" or "./bar.ts")');
120
+ }
121
+ // Check for strict mode
122
+ if (compilerOptions.strict) {
123
+ context.aiGuidance.push('Strict mode enabled: Type all variables and handle null/undefined');
124
+ }
125
+ }
126
+ catch (error) {
127
+ // No TypeScript config
128
+ }
129
+ }
130
+ async detectPythonContext(context) {
131
+ try {
132
+ // Check for Python project files
133
+ const hasRequirements = await this.fileExists('requirements.txt');
134
+ const hasPipfile = await this.fileExists('Pipfile');
135
+ const hasSetupPy = await this.fileExists('setup.py');
136
+ const hasPyproject = await this.fileExists('pyproject.toml');
137
+ if (hasRequirements || hasPipfile || hasSetupPy || hasPyproject) {
138
+ context.language = 'python';
139
+ context.packageManager = 'pip';
140
+ if (hasPipfile) {
141
+ context.aiGuidance.push('Uses Pipenv for dependency management');
142
+ }
143
+ if (hasPyproject) {
144
+ const content = await fs.readFile(path.join(this.projectRoot, 'pyproject.toml'), 'utf-8');
145
+ if (content.includes('[tool.poetry]')) {
146
+ context.packageManager = 'pip'; // Could be poetry
147
+ context.aiGuidance.push('Uses Poetry for dependency management');
148
+ }
149
+ }
150
+ // Try to detect Python version from .python-version or runtime.txt
151
+ const versionFile = await this.findFirstExisting(['.python-version', 'runtime.txt']);
152
+ if (versionFile) {
153
+ const version = await fs.readFile(path.join(this.projectRoot, versionFile), 'utf-8');
154
+ context.pythonVersion = version.trim();
155
+ context.aiGuidance.push(`Python version: ${context.pythonVersion}`);
156
+ }
157
+ }
158
+ }
159
+ catch (error) {
160
+ // Not a Python project
161
+ }
162
+ }
163
+ async detectJavaContext(context) {
164
+ try {
165
+ const hasPom = await this.fileExists('pom.xml');
166
+ const hasGradle = await this.fileExists('build.gradle') || await this.fileExists('build.gradle.kts');
167
+ if (hasPom || hasGradle) {
168
+ context.language = 'java';
169
+ if (hasPom) {
170
+ context.packageManager = 'maven';
171
+ context.buildTool = 'maven';
172
+ context.aiGuidance.push('Maven project: Use mvn commands for building');
173
+ }
174
+ else if (hasGradle) {
175
+ context.packageManager = 'gradle';
176
+ context.buildTool = 'gradle';
177
+ context.aiGuidance.push('Gradle project: Use gradle or ./gradlew commands');
178
+ }
179
+ }
180
+ }
181
+ catch (error) {
182
+ // Not a Java project
183
+ }
184
+ }
185
+ generateAIGuidance(context) {
186
+ // Add guidance to prevent common AI errors
187
+ if (context.requiresJsExtensions) {
188
+ context.errors.push('AI COMMON ERROR: Forgetting .js extensions in TypeScript ESM projects');
189
+ }
190
+ if (context.hasTypeScript && !context.tsConfig?.strict) {
191
+ context.warnings.push('TypeScript without strict mode - AI may generate unsafe code');
192
+ }
193
+ if (context.moduleSystem === 'esm') {
194
+ context.aiGuidance.push('Use "import" syntax, not "require"');
195
+ context.aiGuidance.push('Add "type": "module" in package.json if missing');
196
+ }
197
+ if (context.moduleSystem === 'commonjs') {
198
+ context.aiGuidance.push('Use "require" for CommonJS, or configure for ESM if needed');
199
+ }
200
+ // Package manager specific guidance
201
+ if (context.packageManager) {
202
+ const commands = {
203
+ npm: 'npm install',
204
+ yarn: 'yarn add',
205
+ pnpm: 'pnpm add',
206
+ pip: 'pip install',
207
+ maven: 'mvn dependency:get',
208
+ gradle: 'gradle dependencies'
209
+ };
210
+ context.aiGuidance.push(`Use "${commands[context.packageManager]}" for installing packages`);
211
+ }
212
+ }
213
+ async fileExists(filename) {
214
+ try {
215
+ await fs.access(path.join(this.projectRoot, filename));
216
+ return true;
217
+ }
218
+ catch {
219
+ return false;
220
+ }
221
+ }
222
+ async findFirstExisting(filenames) {
223
+ for (const filename of filenames) {
224
+ if (await this.fileExists(filename)) {
225
+ return filename;
226
+ }
227
+ }
228
+ return null;
229
+ }
230
+ /**
231
+ * Generate a build command based on detected context
232
+ */
233
+ generateBuildCommand(context) {
234
+ if (context.buildTool === 'tsc') {
235
+ return 'npx tsc';
236
+ }
237
+ else if (context.packageManager === 'npm' && context.language === 'typescript') {
238
+ return 'npm run build';
239
+ }
240
+ else if (context.packageManager === 'yarn') {
241
+ return 'yarn build';
242
+ }
243
+ else if (context.packageManager === 'pnpm') {
244
+ return 'pnpm build';
245
+ }
246
+ else if (context.packageManager === 'maven') {
247
+ return 'mvn compile';
248
+ }
249
+ else if (context.packageManager === 'gradle') {
250
+ return './gradlew build';
251
+ }
252
+ else if (context.language === 'python') {
253
+ return 'python -m py_compile ./**/*.py';
254
+ }
255
+ return 'echo "No build step detected"';
256
+ }
257
+ }
258
+ //# sourceMappingURL=build-context-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-context-detector.js","sourceRoot":"","sources":["../../../src/developer/evaluators/build-context-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Package Evaluator - Pre-delivery evaluation of AI package recommendations
3
+ */
4
+ import type { PackageValidationResult } from '../types/package.js';
5
+ export interface EvaluationContext {
6
+ language: 'javascript' | 'typescript' | 'python' | 'java' | 'go' | 'rust' | 'csharp' | 'ruby' | 'unknown';
7
+ existingPackages?: string[];
8
+ projectType?: string;
9
+ }
10
+ export declare class PackageEvaluator {
11
+ private registryManager;
12
+ private blockedPackages;
13
+ private trustedPackages;
14
+ constructor();
15
+ private initializeKnownPackages;
16
+ /**
17
+ * Evaluate a package recommendation from AI
18
+ */
19
+ evaluate(packageName: string, context: EvaluationContext, version?: string): Promise<PackageValidationResult>;
20
+ /**
21
+ * Evaluate multiple packages in a code snippet
22
+ */
23
+ evaluateBatch(packages: string[], context: EvaluationContext): Promise<PackageValidationResult[]>;
24
+ /**
25
+ * Extract package references from code
26
+ */
27
+ extractPackages(code: string, language: 'javascript' | 'typescript' | 'python' | 'java' | 'go' | 'rust' | 'csharp' | 'ruby' | 'unknown'): string[];
28
+ private isBuiltinModule;
29
+ private detectRegistry;
30
+ private getSuggestions;
31
+ private generateWarning;
32
+ /**
33
+ * Clear all caches
34
+ */
35
+ clearCaches(): void;
36
+ }
37
+ //# sourceMappingURL=package-evaluator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-evaluator.d.ts","sourceRoot":"","sources":["../../../src/developer/evaluators/package-evaluator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAGnE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,YAAY,GAAG,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;IAC1G,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,eAAe,CAAqB;;IAO5C,OAAO,CAAC,uBAAuB;IAgB/B;;OAEG;IACG,QAAQ,CACZ,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,uBAAuB,CAAC;IA0EnC;;OAEG;IACG,aAAa,CACjB,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAMrC;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE;IA2IlJ,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,cAAc;YAsBR,cAAc;IA2B5B,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACH,WAAW,IAAI,IAAI;CAGpB"}
@@ -0,0 +1,278 @@
1
+ /**
2
+ * Package Evaluator - Pre-delivery evaluation of AI package recommendations
3
+ */
4
+ import { RegistryManager } from '../validators/registry-manager.js';
5
+ export class PackageEvaluator {
6
+ registryManager;
7
+ blockedPackages = new Set();
8
+ trustedPackages = new Set();
9
+ constructor() {
10
+ this.registryManager = new RegistryManager();
11
+ this.initializeKnownPackages();
12
+ }
13
+ initializeKnownPackages() {
14
+ // Common typos and malicious packages to block
15
+ this.blockedPackages.add('reqeusts'); // typo of 'requests'
16
+ this.blockedPackages.add('beautifulsoup'); // should be 'beautifulsoup4'
17
+ this.blockedPackages.add('django-rest'); // should be 'djangorestframework'
18
+ this.blockedPackages.add('tensorflow-gpu'); // deprecated, use 'tensorflow'
19
+ // Well-known trusted packages
20
+ this.trustedPackages.add('react');
21
+ this.trustedPackages.add('express');
22
+ this.trustedPackages.add('django');
23
+ this.trustedPackages.add('flask');
24
+ this.trustedPackages.add('numpy');
25
+ this.trustedPackages.add('pandas');
26
+ }
27
+ /**
28
+ * Evaluate a package recommendation from AI
29
+ */
30
+ async evaluate(packageName, context, version) {
31
+ // Check if explicitly blocked
32
+ if (this.blockedPackages.has(packageName)) {
33
+ const registryLang = context.language === 'unknown' ? 'javascript' : context.language;
34
+ return {
35
+ package: {
36
+ name: packageName,
37
+ version,
38
+ registry: this.detectRegistry(registryLang),
39
+ exists: false,
40
+ lastChecked: new Date()
41
+ },
42
+ blocked: true,
43
+ reason: 'Package is known to be malicious or a common typo',
44
+ suggestions: await this.getSuggestions(packageName, context)
45
+ };
46
+ }
47
+ // Determine registry based on context
48
+ const registryLang = context.language === 'unknown' ? 'javascript' : context.language;
49
+ const registry = this.detectRegistry(registryLang);
50
+ // Validate package existence
51
+ const packageInfo = await this.registryManager.validate(packageName, registry, version);
52
+ // If package doesn't exist, block it
53
+ if (!packageInfo.exists) {
54
+ const suggestions = await this.getSuggestions(packageName, context);
55
+ return {
56
+ package: packageInfo,
57
+ blocked: true,
58
+ reason: `Package "${packageName}" does not exist in ${registry} registry`,
59
+ suggestions,
60
+ warning: this.generateWarning(packageName, suggestions)
61
+ };
62
+ }
63
+ // Check for security issues
64
+ if (packageInfo.securityIssues?.some((issue) => issue.severity === 'critical' || issue.severity === 'high')) {
65
+ return {
66
+ package: packageInfo,
67
+ blocked: true,
68
+ reason: 'Package has known security vulnerabilities',
69
+ warning: `Security issues found: ${packageInfo.securityIssues.map((i) => i.description).join(', ')}`,
70
+ suggestions: version && packageInfo.securityIssues[0]?.fixedIn
71
+ ? [`Update to version ${packageInfo.securityIssues[0].fixedIn}`]
72
+ : []
73
+ };
74
+ }
75
+ // Check if deprecated
76
+ if (packageInfo.deprecated) {
77
+ return {
78
+ package: packageInfo,
79
+ blocked: false, // Warning only, don't block
80
+ warning: 'Package is deprecated. Consider using an alternative.',
81
+ suggestions: await this.getSuggestions(packageName, context)
82
+ };
83
+ }
84
+ // Package is valid
85
+ return {
86
+ package: packageInfo,
87
+ blocked: false
88
+ };
89
+ }
90
+ /**
91
+ * Evaluate multiple packages in a code snippet
92
+ */
93
+ async evaluateBatch(packages, context) {
94
+ return Promise.all(packages.map(pkg => this.evaluate(pkg, context)));
95
+ }
96
+ /**
97
+ * Extract package references from code
98
+ */
99
+ extractPackages(code, language) {
100
+ const packages = [];
101
+ switch (language) {
102
+ case 'javascript':
103
+ case 'typescript': {
104
+ // Match import/require statements
105
+ const jsImports = code.matchAll(/(?:import\s+.*?\s+from\s+['"]([^'"]+)['"])|(?:require\s*\(\s*['"]([^'"]+)['"]\s*\))/g);
106
+ for (const match of jsImports) {
107
+ const pkg = match[1] || match[2];
108
+ if (pkg)
109
+ packages.push(pkg);
110
+ }
111
+ break;
112
+ }
113
+ case 'python': {
114
+ // Match import and from...import statements
115
+ const pyImports = code.matchAll(/(?:^|\n)\s*(?:import\s+(\S+))|(?:from\s+(\S+)\s+import)/gm);
116
+ for (const match of pyImports) {
117
+ const pkgMatch = match[1] || match[2];
118
+ if (pkgMatch) {
119
+ const pkg = pkgMatch.split('.')[0];
120
+ if (pkg)
121
+ packages.push(pkg);
122
+ }
123
+ }
124
+ break;
125
+ }
126
+ case 'java': {
127
+ // Match Maven dependencies in comments or actual imports
128
+ const mvnDeps = code.matchAll(/<dependency>\s*<groupId>([^<]+)<\/groupId>\s*<artifactId>([^<]+)<\/artifactId>/g);
129
+ for (const match of mvnDeps) {
130
+ packages.push(`${match[1]}:${match[2]}`);
131
+ }
132
+ break;
133
+ }
134
+ case 'go': {
135
+ // Match Go import statements
136
+ const goImports = code.matchAll(/import\s+(?:"([^"]+)"|`([^`]+)`)/gm);
137
+ for (const match of goImports) {
138
+ const pkg = match[1] || match[2];
139
+ if (pkg && !pkg.startsWith('./') && !pkg.startsWith('../')) {
140
+ packages.push(pkg);
141
+ }
142
+ }
143
+ // Also match go.mod require statements
144
+ const goModRequires = code.matchAll(/require\s+(\S+)\s+v[\d.]+/gm);
145
+ for (const match of goModRequires) {
146
+ if (match[1])
147
+ packages.push(match[1]);
148
+ }
149
+ break;
150
+ }
151
+ case 'rust': {
152
+ // Match Cargo.toml dependencies
153
+ const cargoDeps = code.matchAll(/(\w[\w-]*)\s*=\s*(?:"[\d.]+"|{[^}]*version[^}]*})/g);
154
+ for (const match of cargoDeps) {
155
+ if (match[1] && !['version', 'edition', 'name'].includes(match[1])) {
156
+ packages.push(match[1]);
157
+ }
158
+ }
159
+ // Also match use statements
160
+ const useStatements = code.matchAll(/use\s+(\w+)(?:::|;)/g);
161
+ for (const match of useStatements) {
162
+ if (match[1] && match[1] !== 'std' && match[1] !== 'self' && match[1] !== 'super') {
163
+ packages.push(match[1]);
164
+ }
165
+ }
166
+ break;
167
+ }
168
+ case 'csharp': {
169
+ // Match using statements and NuGet PackageReference
170
+ const usingStatements = code.matchAll(/using\s+(\w+(?:\.\w+)*);/g);
171
+ for (const match of usingStatements) {
172
+ const namespace = match[1];
173
+ // Filter out System namespaces
174
+ if (namespace && !namespace.startsWith('System')) {
175
+ const firstPart = namespace.split('.')[0];
176
+ if (firstPart)
177
+ packages.push(firstPart);
178
+ }
179
+ }
180
+ // Match PackageReference in csproj
181
+ const packageRefs = code.matchAll(/<PackageReference\s+Include="([^"]+)"/g);
182
+ for (const match of packageRefs) {
183
+ if (match[1])
184
+ packages.push(match[1]);
185
+ }
186
+ break;
187
+ }
188
+ case 'ruby': {
189
+ // Match gem statements and require statements
190
+ const gemStatements = code.matchAll(/gem\s+['"]([^'"]+)['"]/g);
191
+ for (const match of gemStatements) {
192
+ if (match[1])
193
+ packages.push(match[1]);
194
+ }
195
+ const requireStatements = code.matchAll(/require\s+['"]([^'"]+)['"]/g);
196
+ for (const match of requireStatements) {
197
+ const gem = match[1];
198
+ // Filter out relative requires and standard library
199
+ if (gem && !gem.startsWith('./') && !gem.startsWith('../')) {
200
+ packages.push(gem);
201
+ }
202
+ }
203
+ break;
204
+ }
205
+ }
206
+ // Filter out relative paths and built-in modules
207
+ return packages.filter(pkg => !pkg.startsWith('.') &&
208
+ !pkg.startsWith('/') &&
209
+ !this.isBuiltinModule(pkg, language));
210
+ }
211
+ isBuiltinModule(module, language) {
212
+ const builtins = {
213
+ javascript: new Set(['fs', 'path', 'http', 'https', 'crypto', 'os', 'util', 'stream', 'buffer']),
214
+ python: new Set(['os', 'sys', 'json', 'math', 'random', 'datetime', 're', 'io', 'collections']),
215
+ java: new Set(['java', 'javax', 'com.sun']),
216
+ go: new Set(['fmt', 'os', 'io', 'net', 'strings', 'time', 'encoding', 'crypto', 'math']),
217
+ rust: new Set(['std', 'core', 'alloc', 'proc_macro']),
218
+ csharp: new Set(['System', 'Microsoft']),
219
+ ruby: new Set(['json', 'yaml', 'erb', 'logger', 'date', 'time', 'uri', 'net'])
220
+ };
221
+ const languageBuiltins = language === 'typescript' ? builtins.javascript : builtins[language];
222
+ const moduleName = module.split('/')[0];
223
+ return moduleName ? (languageBuiltins?.has(moduleName) || false) : false;
224
+ }
225
+ detectRegistry(language) {
226
+ switch (language) {
227
+ case 'javascript':
228
+ case 'typescript':
229
+ return 'npm';
230
+ case 'python':
231
+ return 'pypi';
232
+ case 'java':
233
+ return 'maven';
234
+ case 'go':
235
+ return 'go';
236
+ case 'rust':
237
+ return 'cargo';
238
+ case 'csharp':
239
+ return 'nuget';
240
+ case 'ruby':
241
+ return 'gem';
242
+ default:
243
+ return 'npm';
244
+ }
245
+ }
246
+ async getSuggestions(packageName, context) {
247
+ const registryLang = context.language === 'unknown' ? 'javascript' : context.language;
248
+ const registry = this.detectRegistry(registryLang);
249
+ // Look for similar packages
250
+ const similar = await this.registryManager.findSimilar(packageName, registry);
251
+ // Add known corrections
252
+ const corrections = {
253
+ 'reqeusts': 'requests',
254
+ 'beautifulsoup': 'beautifulsoup4',
255
+ 'django-rest': 'djangorestframework',
256
+ 'tensorflow-gpu': 'tensorflow',
257
+ 'PIL': 'Pillow',
258
+ 'cv2': 'opencv-python'
259
+ };
260
+ if (corrections[packageName]) {
261
+ similar.unshift(corrections[packageName]);
262
+ }
263
+ return [...new Set(similar)].slice(0, 3);
264
+ }
265
+ generateWarning(packageName, suggestions) {
266
+ if (suggestions.length > 0) {
267
+ return `Package "${packageName}" not found. Did you mean: ${suggestions.join(', ')}?`;
268
+ }
269
+ return `Package "${packageName}" does not exist. This may be a hallucination.`;
270
+ }
271
+ /**
272
+ * Clear all caches
273
+ */
274
+ clearCaches() {
275
+ this.registryManager.clearCaches();
276
+ }
277
+ }
278
+ //# sourceMappingURL=package-evaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-evaluator.js","sourceRoot":"","sources":["../../../src/developer/evaluators/package-evaluator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAQpE,MAAM,OAAO,gBAAgB;IACnB,eAAe,CAAkB;IACjC,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAE5C;QACE,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAC7C,IAAI,CAAC,uBAAuB,EAAE,CAAC;IACjC,CAAC;IAEO,uBAAuB;QAC7B,+CAA+C;QAC/C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,qBAAqB;QAC3D,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,6BAA6B;QACxE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,kCAAkC;QAC3E,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,+BAA+B;QAE3E,8BAA8B;QAC9B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CACZ,WAAmB,EACnB,OAA0B,EAC1B,OAAgB;QAEhB,8BAA8B;QAC9B,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAC1C,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;YACtF,OAAO;gBACL,OAAO,EAAE;oBACP,IAAI,EAAE,WAAW;oBACjB,OAAO;oBACP,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;oBAC3C,MAAM,EAAE,KAAK;oBACb,WAAW,EAAE,IAAI,IAAI,EAAE;iBACxB;gBACD,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,mDAAmD;gBAC3D,WAAW,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC;aAC7D,CAAC;QACJ,CAAC;QAED,sCAAsC;QACtC,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;QACtF,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAEnD,6BAA6B;QAC7B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CACrD,WAAW,EACX,QAAQ,EACR,OAAO,CACR,CAAC;QAEF,qCAAqC;QACrC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YACxB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAEpE,OAAO;gBACL,OAAO,EAAE,WAAW;gBACpB,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,YAAY,WAAW,uBAAuB,QAAQ,WAAW;gBACzE,WAAW;gBACX,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,WAAW,CAAC;aACxD,CAAC;QACJ,CAAC;QAED,4BAA4B;QAC5B,IAAI,WAAW,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,KAAU,EAAE,EAAE,CAClD,KAAK,CAAC,QAAQ,KAAK,UAAU,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,CAC3D,EAAE,CAAC;YACF,OAAO;gBACL,OAAO,EAAE,WAAW;gBACpB,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,4CAA4C;gBACpD,OAAO,EAAE,0BAA0B,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACzG,WAAW,EAAE,OAAO,IAAI,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO;oBAC5D,CAAC,CAAC,CAAC,qBAAqB,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;oBAChE,CAAC,CAAC,EAAE;aACP,CAAC;QACJ,CAAC;QAED,sBAAsB;QACtB,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;YAC3B,OAAO;gBACL,OAAO,EAAE,WAAW;gBACpB,OAAO,EAAE,KAAK,EAAE,4BAA4B;gBAC5C,OAAO,EAAE,uDAAuD;gBAChE,WAAW,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC;aAC7D,CAAC;QACJ,CAAC;QAED,mBAAmB;QACnB,OAAO;YACL,OAAO,EAAE,WAAW;YACpB,OAAO,EAAE,KAAK;SACf,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CACjB,QAAkB,EAClB,OAA0B;QAE1B,OAAO,OAAO,CAAC,GAAG,CAChB,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CACjD,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,IAAY,EAAE,QAAyG;QACrI,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,YAAY,CAAC;YAClB,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,kCAAkC;gBAClC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAC7B,sFAAsF,CACvF,CAAC;gBACF,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;oBAC9B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;oBACjC,IAAI,GAAG;wBAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC9B,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,4CAA4C;gBAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAC7B,2DAA2D,CAC5D,CAAC;gBACF,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;oBAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;oBACtC,IAAI,QAAQ,EAAE,CAAC;wBACb,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBACnC,IAAI,GAAG;4BAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC9B,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,yDAAyD;gBACzD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAC3B,iFAAiF,CAClF,CAAC;gBACF,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;oBAC5B,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC3C,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,IAAI,CAAC,CAAC,CAAC;gBACV,6BAA6B;gBAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAC7B,oCAAoC,CACrC,CAAC;gBACF,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;oBAC9B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;oBACjC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC3D,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACrB,CAAC;gBACH,CAAC;gBACD,uCAAuC;gBACvC,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CACjC,6BAA6B,CAC9B,CAAC;gBACF,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;oBAClC,IAAI,KAAK,CAAC,CAAC,CAAC;wBAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxC,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,gCAAgC;gBAChC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAC7B,oDAAoD,CACrD,CAAC;gBACF,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;oBAC9B,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBACnE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1B,CAAC;gBACH,CAAC;gBACD,4BAA4B;gBAC5B,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CACjC,sBAAsB,CACvB,CAAC;gBACF,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;oBAClC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;wBAClF,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1B,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,oDAAoD;gBACpD,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CACnC,2BAA2B,CAC5B,CAAC;gBACF,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;oBACpC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC3B,+BAA+B;oBAC/B,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACjD,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC1C,IAAI,SAAS;4BAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC1C,CAAC;gBACH,CAAC;gBACD,mCAAmC;gBACnC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAC/B,wCAAwC,CACzC,CAAC;gBACF,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;oBAChC,IAAI,KAAK,CAAC,CAAC,CAAC;wBAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxC,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,8CAA8C;gBAC9C,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CACjC,yBAAyB,CAC1B,CAAC;gBACF,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;oBAClC,IAAI,KAAK,CAAC,CAAC,CAAC;wBAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxC,CAAC;gBACD,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CACrC,6BAA6B,CAC9B,CAAC;gBACF,KAAK,MAAM,KAAK,IAAI,iBAAiB,EAAE,CAAC;oBACtC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACrB,oDAAoD;oBACpD,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC3D,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACrB,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,CAAC;QACH,CAAC;QAED,iDAAiD;QACjD,OAAO,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC3B,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;YACpB,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;YACpB,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,CAAC,CACrC,CAAC;IACJ,CAAC;IAEO,eAAe,CAAC,MAAc,EAAE,QAAyG;QAC/I,MAAM,QAAQ,GAAgC;YAC5C,UAAU,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAChG,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YAC/F,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YAC3C,EAAE,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YACxF,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;YACrD,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YACxC,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;SAC/E,CAAC;QAEF,MAAM,gBAAgB,GAAG,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC9F,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,GAAG,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC3E,CAAC;IAEO,cAAc,CAAC,QAAgB;QACrC,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,YAAY,CAAC;YAClB,KAAK,YAAY;gBACf,OAAO,KAAK,CAAC;YACf,KAAK,QAAQ;gBACX,OAAO,MAAM,CAAC;YAChB,KAAK,MAAM;gBACT,OAAO,OAAO,CAAC;YACjB,KAAK,IAAI;gBACP,OAAO,IAAI,CAAC;YACd,KAAK,MAAM;gBACT,OAAO,OAAO,CAAC;YACjB,KAAK,QAAQ;gBACX,OAAO,OAAO,CAAC;YACjB,KAAK,MAAM;gBACT,OAAO,KAAK,CAAC;YACf;gBACE,OAAO,KAAK,CAAC;QACjB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,cAAc,CAC1B,WAAmB,EACnB,OAA0B;QAE1B,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;QACtF,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAEnD,4BAA4B;QAC5B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAE9E,wBAAwB;QACxB,MAAM,WAAW,GAA2B;YAC1C,UAAU,EAAE,UAAU;YACtB,eAAe,EAAE,gBAAgB;YACjC,aAAa,EAAE,qBAAqB;YACpC,gBAAgB,EAAE,YAAY;YAC9B,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,eAAe;SACvB,CAAC;QAEF,IAAI,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3C,CAAC;IAEO,eAAe,CAAC,WAAmB,EAAE,WAAqB;QAChE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,YAAY,WAAW,8BAA8B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QACxF,CAAC;QACD,OAAO,YAAY,WAAW,gDAAgD,CAAC;IACjF,CAAC;IAED;;OAEG;IACH,WAAW;QACT,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC;CACF"}