@path58/n8n-mcp 0.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 (319) hide show
  1. package/AGENT_INSTALL.md +223 -0
  2. package/CHANGELOG.md +38 -0
  3. package/LICENSE +21 -0
  4. package/README.md +187 -0
  5. package/dist/autofix/suggestion-fixers/deprecated-node-fixer.js +465 -0
  6. package/dist/autofix/suggestion-fixers/deprecated-node-fixer.js.map +1 -0
  7. package/dist/autofix/suggestion-fixers/fixer-registry.js +495 -0
  8. package/dist/autofix/suggestion-fixers/fixer-registry.js.map +1 -0
  9. package/dist/autofix/suggestion-fixers/l1-structure-fixer.js +639 -0
  10. package/dist/autofix/suggestion-fixers/l1-structure-fixer.js.map +1 -0
  11. package/dist/autofix/suggestion-fixers/l4-connection-fixer.js +449 -0
  12. package/dist/autofix/suggestion-fixers/l4-connection-fixer.js.map +1 -0
  13. package/dist/autofix/suggestion-fixers/l5-parameter-fixer.js +575 -0
  14. package/dist/autofix/suggestion-fixers/l5-parameter-fixer.js.map +1 -0
  15. package/dist/autofix/suggestion-fixers/l5-typeversion-fixer.js +431 -0
  16. package/dist/autofix/suggestion-fixers/l5-typeversion-fixer.js.map +1 -0
  17. package/dist/autofix/suggestion-fixers/l5-webhook-path-fixer.js +356 -0
  18. package/dist/autofix/suggestion-fixers/l5-webhook-path-fixer.js.map +1 -0
  19. package/dist/autofix/suggestion-fixers/l6-ai-tool-variant-fixer.js +618 -0
  20. package/dist/autofix/suggestion-fixers/l6-ai-tool-variant-fixer.js.map +1 -0
  21. package/dist/autofix/suggestion-fixers/l6-pattern-fixer.js +1475 -0
  22. package/dist/autofix/suggestion-fixers/l6-pattern-fixer.js.map +1 -0
  23. package/dist/autofix/suggestion-fixers/llm-fixer.js +716 -0
  24. package/dist/autofix/suggestion-fixers/llm-fixer.js.map +1 -0
  25. package/dist/autofix/suggestion-fixers/missing-credential-fixer.js +336 -0
  26. package/dist/autofix/suggestion-fixers/missing-credential-fixer.js.map +1 -0
  27. package/dist/autofix/suggestion-fixers/types.js +29 -0
  28. package/dist/autofix/suggestion-fixers/types.js.map +1 -0
  29. package/dist/autofix/suggestion-fixers/typo-fixer.js +197 -0
  30. package/dist/autofix/suggestion-fixers/typo-fixer.js.map +1 -0
  31. package/dist/classification/certification-engine.js +208 -0
  32. package/dist/classification/certification-engine.js.map +1 -0
  33. package/dist/classification/feedback-collector.js +516 -0
  34. package/dist/classification/feedback-collector.js.map +1 -0
  35. package/dist/classification/l5-parameter-analyzer.js +670 -0
  36. package/dist/classification/l5-parameter-analyzer.js.map +1 -0
  37. package/dist/classification/l6-graph-analyzer.js +613 -0
  38. package/dist/classification/l6-graph-analyzer.js.map +1 -0
  39. package/dist/classification/severity-classifier.js +237 -0
  40. package/dist/classification/severity-classifier.js.map +1 -0
  41. package/dist/config/env.js +280 -0
  42. package/dist/config/env.js.map +1 -0
  43. package/dist/config/env.schema.js +234 -0
  44. package/dist/config/env.schema.js.map +1 -0
  45. package/dist/config/scraperEnv.js +55 -0
  46. package/dist/config/scraperEnv.js.map +1 -0
  47. package/dist/db/postgresClient.js +38 -0
  48. package/dist/db/postgresClient.js.map +1 -0
  49. package/dist/db/scraperDb.js +6 -0
  50. package/dist/db/scraperDb.js.map +1 -0
  51. package/dist/db/scraperPostgresClient.js +118 -0
  52. package/dist/db/scraperPostgresClient.js.map +1 -0
  53. package/dist/db/validationRepository.js +55 -0
  54. package/dist/db/validationRepository.js.map +1 -0
  55. package/dist/db/validatorPostgresClient.js +248 -0
  56. package/dist/db/validatorPostgresClient.js.map +1 -0
  57. package/dist/db/workflowInstanceMappingRepository.js +128 -0
  58. package/dist/db/workflowInstanceMappingRepository.js.map +1 -0
  59. package/dist/errors/AppError.js +156 -0
  60. package/dist/errors/AppError.js.map +1 -0
  61. package/dist/errors/index.js +7 -0
  62. package/dist/errors/index.js.map +1 -0
  63. package/dist/factory/error-to-problem-mappers.js +385 -0
  64. package/dist/factory/error-to-problem-mappers.js.map +1 -0
  65. package/dist/factory/gap-recorder.js +260 -0
  66. package/dist/factory/gap-recorder.js.map +1 -0
  67. package/dist/factory/problem-recorder.js +94 -0
  68. package/dist/factory/problem-recorder.js.map +1 -0
  69. package/dist/factory/warning-to-gap-mappers.js +493 -0
  70. package/dist/factory/warning-to-gap-mappers.js.map +1 -0
  71. package/dist/factory/workflow-normalizer.js +247 -0
  72. package/dist/factory/workflow-normalizer.js.map +1 -0
  73. package/dist/mcp/adapters/catalog.js +13 -0
  74. package/dist/mcp/adapters/catalog.js.map +1 -0
  75. package/dist/mcp/adapters/index.js +36 -0
  76. package/dist/mcp/adapters/index.js.map +1 -0
  77. package/dist/mcp/adapters/supabase-catalog.js +467 -0
  78. package/dist/mcp/adapters/supabase-catalog.js.map +1 -0
  79. package/dist/mcp/adapters/test-catalog-adapter.js +100 -0
  80. package/dist/mcp/adapters/test-catalog-adapter.js.map +1 -0
  81. package/dist/mcp/adapters/validation.js +258 -0
  82. package/dist/mcp/adapters/validation.js.map +1 -0
  83. package/dist/mcp/build-email-workflow.js +113 -0
  84. package/dist/mcp/build-email-workflow.js.map +1 -0
  85. package/dist/mcp/config.js +22 -0
  86. package/dist/mcp/config.js.map +1 -0
  87. package/dist/mcp/formatters/errors.js +217 -0
  88. package/dist/mcp/formatters/errors.js.map +1 -0
  89. package/dist/mcp/formatters/index.js +12 -0
  90. package/dist/mcp/formatters/index.js.map +1 -0
  91. package/dist/mcp/formatters/response.js +141 -0
  92. package/dist/mcp/formatters/response.js.map +1 -0
  93. package/dist/mcp/quick-test.js +33 -0
  94. package/dist/mcp/quick-test.js.map +1 -0
  95. package/dist/mcp/server.js +70 -0
  96. package/dist/mcp/server.js.map +1 -0
  97. package/dist/mcp/test-mcp-error.js +81 -0
  98. package/dist/mcp/test-mcp-error.js.map +1 -0
  99. package/dist/mcp/test-mcp.js +80 -0
  100. package/dist/mcp/test-mcp.js.map +1 -0
  101. package/dist/mcp/tools/fixes/expression-fixes.js +166 -0
  102. package/dist/mcp/tools/fixes/expression-fixes.js.map +1 -0
  103. package/dist/mcp/tools/fixes/flow-fixes.js +155 -0
  104. package/dist/mcp/tools/fixes/flow-fixes.js.map +1 -0
  105. package/dist/mcp/tools/fixes/index.js +91 -0
  106. package/dist/mcp/tools/fixes/index.js.map +1 -0
  107. package/dist/mcp/tools/fixes/node-fixes.js +233 -0
  108. package/dist/mcp/tools/fixes/node-fixes.js.map +1 -0
  109. package/dist/mcp/tools/fixes/parameter-fixes.js +277 -0
  110. package/dist/mcp/tools/fixes/parameter-fixes.js.map +1 -0
  111. package/dist/mcp/tools/fixes/types.js +10 -0
  112. package/dist/mcp/tools/fixes/types.js.map +1 -0
  113. package/dist/mcp/tools/handlers/check-parameter.js +300 -0
  114. package/dist/mcp/tools/handlers/check-parameter.js.map +1 -0
  115. package/dist/mcp/tools/handlers/find-similar-pattern.js +121 -0
  116. package/dist/mcp/tools/handlers/find-similar-pattern.js.map +1 -0
  117. package/dist/mcp/tools/handlers/get-node-info.js +131 -0
  118. package/dist/mcp/tools/handlers/get-node-info.js.map +1 -0
  119. package/dist/mcp/tools/handlers/get-operation-schema.js +141 -0
  120. package/dist/mcp/tools/handlers/get-operation-schema.js.map +1 -0
  121. package/dist/mcp/tools/handlers/list-nodes.js +126 -0
  122. package/dist/mcp/tools/handlers/list-nodes.js.map +1 -0
  123. package/dist/mcp/tools/handlers/list-operations.js +138 -0
  124. package/dist/mcp/tools/handlers/list-operations.js.map +1 -0
  125. package/dist/mcp/tools/handlers/suggest-fix.js +120 -0
  126. package/dist/mcp/tools/handlers/suggest-fix.js.map +1 -0
  127. package/dist/mcp/tools/handlers/validate-workflow.js +92 -0
  128. package/dist/mcp/tools/handlers/validate-workflow.js.map +1 -0
  129. package/dist/mcp/tools/index.js +190 -0
  130. package/dist/mcp/tools/index.js.map +1 -0
  131. package/dist/mcp/tools/schemas.js +195 -0
  132. package/dist/mcp/tools/schemas.js.map +1 -0
  133. package/dist/mcp/tools/validate.js +95 -0
  134. package/dist/mcp/tools/validate.js.map +1 -0
  135. package/dist/mcp/types/mcp.js +7 -0
  136. package/dist/mcp/types/mcp.js.map +1 -0
  137. package/dist/mcp/utils/timeout.js +78 -0
  138. package/dist/mcp/utils/timeout.js.map +1 -0
  139. package/dist/services/BatchProcessor.js +433 -0
  140. package/dist/services/BatchProcessor.js.map +1 -0
  141. package/dist/services/CheckpointManager.js +281 -0
  142. package/dist/services/CheckpointManager.js.map +1 -0
  143. package/dist/services/CostCalculator.js +211 -0
  144. package/dist/services/CostCalculator.js.map +1 -0
  145. package/dist/services/EmbeddingCache.js +68 -0
  146. package/dist/services/EmbeddingCache.js.map +1 -0
  147. package/dist/services/EmbeddingService.js +143 -0
  148. package/dist/services/EmbeddingService.js.map +1 -0
  149. package/dist/services/RankingService.js +81 -0
  150. package/dist/services/RankingService.js.map +1 -0
  151. package/dist/services/RedisCache.js +376 -0
  152. package/dist/services/RedisCache.js.map +1 -0
  153. package/dist/services/RedisCatalogCache.js +680 -0
  154. package/dist/services/RedisCatalogCache.js.map +1 -0
  155. package/dist/services/ResumeManager.js +252 -0
  156. package/dist/services/ResumeManager.js.map +1 -0
  157. package/dist/services/SearchService.js +282 -0
  158. package/dist/services/SearchService.js.map +1 -0
  159. package/dist/services/SemanticCatalogSearch.js +405 -0
  160. package/dist/services/SemanticCatalogSearch.js.map +1 -0
  161. package/dist/services/ValidationCache.js +157 -0
  162. package/dist/services/ValidationCache.js.map +1 -0
  163. package/dist/services/WorkflowPipelineService.js +1997 -0
  164. package/dist/services/WorkflowPipelineService.js.map +1 -0
  165. package/dist/services/catalog/index.js +34 -0
  166. package/dist/services/catalog/index.js.map +1 -0
  167. package/dist/services/catalog/interfaces.js +17 -0
  168. package/dist/services/catalog/interfaces.js.map +1 -0
  169. package/dist/services/catalog/loaders.js +169 -0
  170. package/dist/services/catalog/loaders.js.map +1 -0
  171. package/dist/services/catalog/types.js +138 -0
  172. package/dist/services/catalog/types.js.map +1 -0
  173. package/dist/services/documentation-normalization/docUrlUtils.js +88 -0
  174. package/dist/services/documentation-normalization/docUrlUtils.js.map +1 -0
  175. package/dist/services/error-quality/ErrorQualityService.js +262 -0
  176. package/dist/services/error-quality/ErrorQualityService.js.map +1 -0
  177. package/dist/services/error-quality/analyzers/CredentialAnalyzer.js +260 -0
  178. package/dist/services/error-quality/analyzers/CredentialAnalyzer.js.map +1 -0
  179. package/dist/services/error-quality/analyzers/IssuePredictor.js +380 -0
  180. package/dist/services/error-quality/analyzers/IssuePredictor.js.map +1 -0
  181. package/dist/services/error-quality/analyzers/MockCoverageAnalyzer.js +267 -0
  182. package/dist/services/error-quality/analyzers/MockCoverageAnalyzer.js.map +1 -0
  183. package/dist/services/error-quality/data/ErrorPatternSeeder.js +963 -0
  184. package/dist/services/error-quality/data/ErrorPatternSeeder.js.map +1 -0
  185. package/dist/services/error-quality/index.js +25 -0
  186. package/dist/services/error-quality/index.js.map +1 -0
  187. package/dist/services/error-quality/reports/ReportGenerator.js +343 -0
  188. package/dist/services/error-quality/reports/ReportGenerator.js.map +1 -0
  189. package/dist/services/error-quality/taxonomy/ErrorTaxonomy.js +698 -0
  190. package/dist/services/error-quality/taxonomy/ErrorTaxonomy.js.map +1 -0
  191. package/dist/services/error-quality/types.js +11 -0
  192. package/dist/services/error-quality/types.js.map +1 -0
  193. package/dist/services/progress/ProgressTracker.js +288 -0
  194. package/dist/services/progress/ProgressTracker.js.map +1 -0
  195. package/dist/services/progress/formatters.js +122 -0
  196. package/dist/services/progress/formatters.js.map +1 -0
  197. package/dist/services/progress/index.js +36 -0
  198. package/dist/services/progress/index.js.map +1 -0
  199. package/dist/services/progress/types.js +7 -0
  200. package/dist/services/progress/types.js.map +1 -0
  201. package/dist/services/search/embeddingGenerator.js +112 -0
  202. package/dist/services/search/embeddingGenerator.js.map +1 -0
  203. package/dist/types/aiCapabilities.js +7 -0
  204. package/dist/types/aiCapabilities.js.map +1 -0
  205. package/dist/types/aiConfigSchema.js +7 -0
  206. package/dist/types/aiConfigSchema.js.map +1 -0
  207. package/dist/utils/bannerLogger.js +186 -0
  208. package/dist/utils/bannerLogger.js.map +1 -0
  209. package/dist/utils/bannerService.js +23 -0
  210. package/dist/utils/bannerService.js.map +1 -0
  211. package/dist/utils/bannerServiceAdapter.js +54 -0
  212. package/dist/utils/bannerServiceAdapter.js.map +1 -0
  213. package/dist/utils/batchLogger.js +171 -0
  214. package/dist/utils/batchLogger.js.map +1 -0
  215. package/dist/utils/bottomStickyBanner.js +239 -0
  216. package/dist/utils/bottomStickyBanner.js.map +1 -0
  217. package/dist/utils/credentialMatcher.js +206 -0
  218. package/dist/utils/credentialMatcher.js.map +1 -0
  219. package/dist/utils/credentialNormalizer.js +442 -0
  220. package/dist/utils/credentialNormalizer.js.map +1 -0
  221. package/dist/utils/integratedBannerLogger.js +59 -0
  222. package/dist/utils/integratedBannerLogger.js.map +1 -0
  223. package/dist/utils/n8nSourceGit.js +195 -0
  224. package/dist/utils/n8nSourceGit.js.map +1 -0
  225. package/dist/utils/nodeTypeNormalizer.js +131 -0
  226. package/dist/utils/nodeTypeNormalizer.js.map +1 -0
  227. package/dist/utils/openaiClient.js +397 -0
  228. package/dist/utils/openaiClient.js.map +1 -0
  229. package/dist/utils/productionLogger.js +16 -0
  230. package/dist/utils/productionLogger.js.map +1 -0
  231. package/dist/utils/progressBarBanner.js +132 -0
  232. package/dist/utils/progressBarBanner.js.map +1 -0
  233. package/dist/utils/scriptHeartbeat.js +117 -0
  234. package/dist/utils/scriptHeartbeat.js.map +1 -0
  235. package/dist/utils/scriptLogger.js +125 -0
  236. package/dist/utils/scriptLogger.js.map +1 -0
  237. package/dist/utils/scriptRunner.js +95 -0
  238. package/dist/utils/scriptRunner.js.map +1 -0
  239. package/dist/utils/scriptTimeout.js +128 -0
  240. package/dist/utils/scriptTimeout.js.map +1 -0
  241. package/dist/utils/scriptWrapper.js +219 -0
  242. package/dist/utils/scriptWrapper.js.map +1 -0
  243. package/dist/utils/stickyBanner.js +226 -0
  244. package/dist/utils/stickyBanner.js.map +1 -0
  245. package/dist/utils/terminalSpinner.js +97 -0
  246. package/dist/utils/terminalSpinner.js.map +1 -0
  247. package/dist/utils/threeLineBanner.js +427 -0
  248. package/dist/utils/threeLineBanner.js.map +1 -0
  249. package/dist/utils/validatorCheckpointManager.js +170 -0
  250. package/dist/utils/validatorCheckpointManager.js.map +1 -0
  251. package/dist/utils/validatorConnectionManager.js +124 -0
  252. package/dist/utils/validatorConnectionManager.js.map +1 -0
  253. package/dist/validation/catalog.js +56 -0
  254. package/dist/validation/catalog.js.map +1 -0
  255. package/dist/validation/config/deprecated-nodes.js +234 -0
  256. package/dist/validation/config/deprecated-nodes.js.map +1 -0
  257. package/dist/validation/config/l6-severity.js +227 -0
  258. package/dist/validation/config/l6-severity.js.map +1 -0
  259. package/dist/validation/config/terminal-nodes.js +132 -0
  260. package/dist/validation/config/terminal-nodes.js.map +1 -0
  261. package/dist/validation/config/unreachable-nodes.js +67 -0
  262. package/dist/validation/config/unreachable-nodes.js.map +1 -0
  263. package/dist/validation/core.js +47 -0
  264. package/dist/validation/core.js.map +1 -0
  265. package/dist/validation/docExtraction.js +12 -0
  266. package/dist/validation/docExtraction.js.map +1 -0
  267. package/dist/validation/dryRunMockRunner.js +128 -0
  268. package/dist/validation/dryRunMockRunner.js.map +1 -0
  269. package/dist/validation/fixtureEngine.js +61 -0
  270. package/dist/validation/fixtureEngine.js.map +1 -0
  271. package/dist/validation/index.js +15 -0
  272. package/dist/validation/index.js.map +1 -0
  273. package/dist/validation/k-levels/k2-blockers.js +222 -0
  274. package/dist/validation/k-levels/k2-blockers.js.map +1 -0
  275. package/dist/validation/l1-structure.js +296 -0
  276. package/dist/validation/l1-structure.js.map +1 -0
  277. package/dist/validation/l2-nodes.js +282 -0
  278. package/dist/validation/l2-nodes.js.map +1 -0
  279. package/dist/validation/l3-credentials.js +322 -0
  280. package/dist/validation/l3-credentials.js.map +1 -0
  281. package/dist/validation/l4-connections.js +698 -0
  282. package/dist/validation/l4-connections.js.map +1 -0
  283. package/dist/validation/l5-parameters.js +803 -0
  284. package/dist/validation/l5-parameters.js.map +1 -0
  285. package/dist/validation/l6-checks/ai-tool-variants.js +407 -0
  286. package/dist/validation/l6-checks/ai-tool-variants.js.map +1 -0
  287. package/dist/validation/l6-checks/catalog-checks.js +260 -0
  288. package/dist/validation/l6-checks/catalog-checks.js.map +1 -0
  289. package/dist/validation/l6-checks/data-contracts.js +197 -0
  290. package/dist/validation/l6-checks/data-contracts.js.map +1 -0
  291. package/dist/validation/l6-checks/deprecation.js +133 -0
  292. package/dist/validation/l6-checks/deprecation.js.map +1 -0
  293. package/dist/validation/l6-checks/error-handling.js +193 -0
  294. package/dist/validation/l6-checks/error-handling.js.map +1 -0
  295. package/dist/validation/l6-checks/expression-syntax.js +387 -0
  296. package/dist/validation/l6-checks/expression-syntax.js.map +1 -0
  297. package/dist/validation/l6-checks/flow-integrity.js +504 -0
  298. package/dist/validation/l6-checks/flow-integrity.js.map +1 -0
  299. package/dist/validation/l6-checks/index.js +106 -0
  300. package/dist/validation/l6-checks/index.js.map +1 -0
  301. package/dist/validation/l6-checks/loops.js +370 -0
  302. package/dist/validation/l6-checks/loops.js.map +1 -0
  303. package/dist/validation/l6-checks/performance.js +182 -0
  304. package/dist/validation/l6-checks/performance.js.map +1 -0
  305. package/dist/validation/l6-checks/security.js +273 -0
  306. package/dist/validation/l6-checks/security.js.map +1 -0
  307. package/dist/validation/l6-patterns.js +472 -0
  308. package/dist/validation/l6-patterns.js.map +1 -0
  309. package/dist/validation/mockLevelResolver.js +95 -0
  310. package/dist/validation/mockLevelResolver.js.map +1 -0
  311. package/dist/validation/n8nApiClient.js +21 -0
  312. package/dist/validation/n8nApiClient.js.map +1 -0
  313. package/dist/validation/n8nCli.js +87 -0
  314. package/dist/validation/n8nCli.js.map +1 -0
  315. package/dist/validation/types.js +8 -0
  316. package/dist/validation/types.js.map +1 -0
  317. package/dist/validation/usageStats.js +82 -0
  318. package/dist/validation/usageStats.js.map +1 -0
  319. package/package.json +274 -0
@@ -0,0 +1,465 @@
1
+ /**
2
+ * Deprecated Node Fixer
3
+ *
4
+ * RAG-2.2.92.4: Auto-fix Engine
5
+ * Replaces deprecated node types with their recommended replacements
6
+ * using L2 deprecation warnings and RAG-2.2.92.7 config.
7
+ *
8
+ * Target success rate: 85%
9
+ *
10
+ * @module suggestion-fixers/deprecated-node-fixer
11
+ * @created 2026-01-21
12
+ */
13
+ import { cloneWorkflow } from './types.js';
14
+ import { DEPRECATED_NODES, getDeprecationInfo, isPastSunset, isRemovedNode, } from '../../validation/config/deprecated-nodes.js';
15
+ import { logger } from '@tsvika58/shared-utilities/logging';
16
+ /**
17
+ * Parameter mappings for deprecated → replacement node conversions.
18
+ * Maps old parameter names to new parameter names for common migrations.
19
+ */
20
+ const PARAMETER_MAPPINGS = {
21
+ // Function → Code node parameter mapping
22
+ 'n8n-nodes-base.function': {
23
+ functionCode: 'jsCode',
24
+ },
25
+ // FunctionItem → Code node parameter mapping
26
+ 'n8n-nodes-base.functionItem': {
27
+ functionCode: 'jsCode',
28
+ },
29
+ // Cron → Schedule Trigger
30
+ 'n8n-nodes-base.cron': {
31
+ cronExpression: 'rule.interval.cronExpression',
32
+ },
33
+ // Interval → Schedule Trigger
34
+ 'n8n-nodes-base.interval': {
35
+ intervalValue: 'rule.interval.value',
36
+ intervalUnit: 'rule.interval.unit',
37
+ },
38
+ };
39
+ /**
40
+ * Extract node type from problem description.
41
+ * RAG-2.2.93.11: Handles patterns like:
42
+ * - Node type "n8n-nodes-base.if" is deprecated since 0.180.0
43
+ * - Node "n8n-nodes-base.function" has been removed
44
+ */
45
+ function extractNodeTypeFromDescription(description) {
46
+ if (!description)
47
+ return undefined;
48
+ // Match quoted node type: "n8n-nodes-base.xxx"
49
+ const quotedMatch = description.match(/(?:Node type|Node)\s+"([^"]+)"/i);
50
+ if (quotedMatch) {
51
+ return quotedMatch[1];
52
+ }
53
+ return undefined;
54
+ }
55
+ /**
56
+ * Calculate confidence based on deprecation state and replacement availability.
57
+ *
58
+ * Confidence levels:
59
+ * - Removed node with direct replacement: 0.95
60
+ * - Past sunset with direct replacement: 0.92
61
+ * - Active deprecation with direct replacement: 0.88
62
+ * - Without direct replacement: 0.60 (below auto-apply)
63
+ */
64
+ function calculateDeprecationConfidence(deprecation, hasReplacement) {
65
+ if (!hasReplacement) {
66
+ return 0.60; // Manual review needed
67
+ }
68
+ if (isRemovedNode(deprecation)) {
69
+ return 0.95; // Must fix - node is removed
70
+ }
71
+ if (isPastSunset(deprecation)) {
72
+ return 0.92; // Should fix - past sunset
73
+ }
74
+ // Active deprecation warning
75
+ return 0.88;
76
+ }
77
+ /**
78
+ * Map parameters from deprecated node to replacement node.
79
+ *
80
+ * @param oldNode - The deprecated node
81
+ * @param newType - The replacement node type
82
+ * @returns Updated parameters for the new node type
83
+ */
84
+ function mapParameters(oldNode, newType) {
85
+ const oldType = oldNode.type;
86
+ const oldParams = oldNode.parameters || {};
87
+ const newParams = { ...oldParams };
88
+ const mapping = PARAMETER_MAPPINGS[oldType];
89
+ if (!mapping) {
90
+ return newParams;
91
+ }
92
+ // Apply parameter name mappings
93
+ for (const [oldKey, newKey] of Object.entries(mapping)) {
94
+ if (oldKey in oldParams) {
95
+ // Handle nested paths (e.g., 'rule.interval.cronExpression')
96
+ if (newKey.includes('.')) {
97
+ const parts = newKey.split('.');
98
+ let current = newParams;
99
+ for (let i = 0; i < parts.length - 1; i++) {
100
+ if (!current[parts[i]]) {
101
+ current[parts[i]] = {};
102
+ }
103
+ current = current[parts[i]];
104
+ }
105
+ current[parts[parts.length - 1]] = oldParams[oldKey];
106
+ delete newParams[oldKey];
107
+ }
108
+ else {
109
+ newParams[newKey] = oldParams[oldKey];
110
+ if (newKey !== oldKey) {
111
+ delete newParams[oldKey];
112
+ }
113
+ }
114
+ }
115
+ }
116
+ // Handle Start → Manual Trigger conversion (no parameters to map)
117
+ if (oldType === 'n8n-nodes-base.start' && newType === 'n8n-nodes-base.manualTrigger') {
118
+ // Manual trigger doesn't need the old start parameters
119
+ return {};
120
+ }
121
+ // Handle Function/FunctionItem → Code conversion
122
+ if ((oldType === 'n8n-nodes-base.function' || oldType === 'n8n-nodes-base.functionItem') &&
123
+ newType === 'n8n-nodes-base.code') {
124
+ // Map the jsCode parameter
125
+ if (newParams.jsCode) {
126
+ // Already mapped by PARAMETER_MAPPINGS - keep it
127
+ }
128
+ newParams.mode = oldType === 'n8n-nodes-base.functionItem' ? 'runOnceForEachItem' : 'runOnceForAllItems';
129
+ newParams.language = 'javaScript';
130
+ }
131
+ return newParams;
132
+ }
133
+ /**
134
+ * DeprecatedNodeFixer - Replaces deprecated nodes with recommended replacements
135
+ *
136
+ * Uses the deprecated-nodes.ts configuration (RAG-2.2.92.7) and L2 warnings
137
+ * to automatically replace deprecated node types.
138
+ *
139
+ * Example fixes:
140
+ * - "n8n-nodes-base.start" → "n8n-nodes-base.manualTrigger"
141
+ * - "n8n-nodes-base.function" → "n8n-nodes-base.code"
142
+ * - "n8n-nodes-base.cron" → "n8n-nodes-base.scheduleTrigger"
143
+ */
144
+ export class DeprecatedNodeFixer {
145
+ name = 'DeprecatedNodeFixer';
146
+ description = 'Replaces deprecated node types with recommended replacements';
147
+ // RAG-2.2.93.11: Support both prefixed and non-prefixed codes
148
+ supportedCodes = ['DEPRECATED_NODE', 'REMOVED_NODE', 'L2_DEPRECATED_NODE', 'L2_REMOVED_NODE', 'L6_DEPRECATED_NODE', 'L6_REMOVED_NODE'];
149
+ minConfidence = 0.85;
150
+ /**
151
+ * Check if this fixer can handle the problem.
152
+ *
153
+ * Requirements:
154
+ * 1. Problem must be L2 or L6 level
155
+ * 2. Problem code must be DEPRECATED_NODE or REMOVED_NODE (with or without level prefix)
156
+ * 3. Must have a node_type to look up
157
+ *
158
+ * RAG-2.2.93.11: Handle both prefixed (L2_DEPRECATED_NODE, L6_DEPRECATED_NODE)
159
+ * and non-prefixed (DEPRECATED_NODE) codes for compatibility.
160
+ */
161
+ canFix(problem) {
162
+ if (!problem.code)
163
+ return false;
164
+ // Normalize code by removing level prefix if present
165
+ const normalizedCode = problem.code.replace(/^L[0-9]_/, '');
166
+ if (normalizedCode !== 'DEPRECATED_NODE' && normalizedCode !== 'REMOVED_NODE') {
167
+ return false;
168
+ }
169
+ // Try to get node_type from problem or extract from description
170
+ const nodeType = problem.node_type || extractNodeTypeFromDescription(problem.description);
171
+ if (!nodeType) {
172
+ return false;
173
+ }
174
+ // Check if we have deprecation info for this node
175
+ const deprecation = getDeprecationInfo(nodeType);
176
+ if (!deprecation) {
177
+ return false;
178
+ }
179
+ // We can fix if there's a replacement available
180
+ return !!deprecation.replacement;
181
+ }
182
+ /**
183
+ * Apply the deprecated node replacement.
184
+ *
185
+ * Replaces the deprecated node type with the recommended replacement,
186
+ * remapping parameters as needed.
187
+ */
188
+ fix(workflow, problem) {
189
+ // Validate prerequisites
190
+ if (!this.canFix(problem)) {
191
+ return {
192
+ success: false,
193
+ changes: [],
194
+ reason: 'Problem does not meet requirements for DeprecatedNodeFixer',
195
+ confidence: 0,
196
+ fixer_name: this.name,
197
+ problem_code: problem.code,
198
+ };
199
+ }
200
+ // Get node type from problem or extract from description
201
+ const nodeType = problem.node_type || extractNodeTypeFromDescription(problem.description);
202
+ if (!nodeType) {
203
+ return {
204
+ success: false,
205
+ changes: [],
206
+ reason: 'No node_type found in problem or description',
207
+ confidence: 0,
208
+ fixer_name: this.name,
209
+ problem_code: problem.code,
210
+ };
211
+ }
212
+ const deprecation = getDeprecationInfo(nodeType);
213
+ const replacement = deprecation.replacement;
214
+ // Calculate confidence based on deprecation state
215
+ const confidence = calculateDeprecationConfidence(deprecation, true);
216
+ logger.debug('DeprecatedNodeFixer attempting fix', {
217
+ node_id: problem.node_id,
218
+ deprecated_type: nodeType,
219
+ replacement_type: replacement,
220
+ confidence,
221
+ removed: deprecation.removed,
222
+ past_sunset: deprecation.sunset_date ? isPastSunset(deprecation) : false,
223
+ });
224
+ // Find and update the node
225
+ const fixedWorkflow = cloneWorkflow(workflow);
226
+ const changes = [];
227
+ let nodesFixed = 0;
228
+ for (const node of fixedWorkflow.nodes) {
229
+ // Match by node_id if available, otherwise by type
230
+ const isTargetNode = problem.node_id
231
+ ? node.id === problem.node_id
232
+ : node.type === nodeType;
233
+ if (isTargetNode) {
234
+ const oldType = node.type;
235
+ const oldParams = JSON.stringify(node.parameters || {});
236
+ // Remap parameters BEFORE updating node type
237
+ // (mapParameters uses oldNode.type to find the mapping)
238
+ const newParams = mapParameters(node, replacement);
239
+ // Update node type AFTER parameter mapping
240
+ node.type = replacement;
241
+ node.parameters = newParams;
242
+ // Update typeVersion if needed (new nodes typically use latest version)
243
+ if (node.typeVersion === undefined || node.typeVersion < 1) {
244
+ node.typeVersion = 1;
245
+ }
246
+ const change = {
247
+ change_type: 'node_replace',
248
+ node_id: node.id,
249
+ node_name: node.name,
250
+ field: 'type',
251
+ old_value: {
252
+ type: oldType,
253
+ parameters: JSON.parse(oldParams),
254
+ },
255
+ new_value: {
256
+ type: replacement,
257
+ parameters: newParams,
258
+ },
259
+ confidence,
260
+ description: `Replaced deprecated node "${oldType}" with "${replacement}"${deprecation.migration_hint ? `. Hint: ${deprecation.migration_hint}` : ''}`,
261
+ };
262
+ changes.push(change);
263
+ nodesFixed++;
264
+ logger.info('DeprecatedNodeFixer applied fix', {
265
+ node_id: node.id,
266
+ node_name: node.name,
267
+ old_type: oldType,
268
+ new_type: replacement,
269
+ confidence,
270
+ deprecated_since: deprecation.deprecated_since,
271
+ });
272
+ // If we matched by node_id, only fix one node
273
+ if (problem.node_id) {
274
+ break;
275
+ }
276
+ }
277
+ }
278
+ // Check results
279
+ if (nodesFixed === 0) {
280
+ logger.warn('DeprecatedNodeFixer could not find target node', {
281
+ node_id: problem.node_id,
282
+ node_type: nodeType,
283
+ });
284
+ return {
285
+ success: false,
286
+ changes: [],
287
+ reason: `Node not found: ${problem.node_id || nodeType}`,
288
+ confidence: 0,
289
+ fixer_name: this.name,
290
+ problem_code: problem.code,
291
+ };
292
+ }
293
+ return {
294
+ success: true,
295
+ fixedWorkflow,
296
+ changes,
297
+ confidence,
298
+ fixer_name: this.name,
299
+ problem_code: problem.code,
300
+ };
301
+ }
302
+ /**
303
+ * Get deprecation info for a node type.
304
+ * Exposed for testing and external use.
305
+ */
306
+ getDeprecationInfo(nodeType) {
307
+ return getDeprecationInfo(nodeType);
308
+ }
309
+ /**
310
+ * Get all deprecated node types that have replacements.
311
+ * Useful for reporting and analysis.
312
+ */
313
+ getFixableDeprecations() {
314
+ const fixable = [];
315
+ for (const [nodeType, info] of Object.entries(DEPRECATED_NODES)) {
316
+ if (info.replacement) {
317
+ fixable.push({
318
+ nodeType,
319
+ replacement: info.replacement,
320
+ severity: info.severity,
321
+ });
322
+ }
323
+ }
324
+ return fixable;
325
+ }
326
+ }
327
+ /**
328
+ * DeprecatedNodeHandler - Handles deprecated nodes WITHOUT replacements
329
+ *
330
+ * RAG-2.2.93.14: For deprecated nodes that don't have a direct replacement
331
+ * (e.g., httpRequest version warnings, if/merge/switch version differences),
332
+ * this handler updates the typeVersion to the latest known version.
333
+ *
334
+ * RAG-9.3: Enhanced to actually fix version-based deprecations by updating
335
+ * typeVersion to the latest version. For nodes like if, merge, switch, httpRequest
336
+ * where the deprecation is about the VERSION, not the node type itself.
337
+ *
338
+ * This ensures AC1 compliance: all L6_DEPRECATED_NODE problems are attempted.
339
+ */
340
+ export class DeprecatedNodeHandler {
341
+ name = 'DeprecatedNodeHandler';
342
+ description = 'Handles deprecated node versions by updating typeVersion';
343
+ supportedCodes = ['DEPRECATED_NODE', 'L2_DEPRECATED_NODE', 'L6_DEPRECATED_NODE'];
344
+ minConfidence = 0.90; // High confidence for version updates
345
+ // RAG-9.3: Known latest typeVersions for commonly deprecated nodes
346
+ static LATEST_TYPE_VERSIONS = {
347
+ 'n8n-nodes-base.if': 2,
348
+ 'n8n-nodes-base.merge': 3,
349
+ 'n8n-nodes-base.switch': 3,
350
+ 'n8n-nodes-base.httpRequest': 4,
351
+ 'n8n-nodes-base.set': 3,
352
+ 'n8n-nodes-base.code': 2,
353
+ 'n8n-nodes-base.filter': 2,
354
+ 'n8n-nodes-base.splitInBatches': 3,
355
+ 'n8n-nodes-base.itemLists': 3,
356
+ };
357
+ canFix(problem) {
358
+ if (!problem.code)
359
+ return false;
360
+ const normalizedCode = problem.code.replace(/^L[0-9]_/, '');
361
+ if (normalizedCode !== 'DEPRECATED_NODE') {
362
+ return false;
363
+ }
364
+ // Get node_type from problem or description
365
+ const nodeType = problem.node_type || extractNodeTypeFromDescription(problem.description);
366
+ if (!nodeType) {
367
+ return false;
368
+ }
369
+ // Check if we have deprecation info WITHOUT a replacement (original behavior)
370
+ const deprecation = getDeprecationInfo(nodeType);
371
+ if (deprecation && !deprecation.replacement) {
372
+ return true;
373
+ }
374
+ // RAG-9.3: Also handle nodes with known latest versions (version-based deprecation)
375
+ if (DeprecatedNodeHandler.LATEST_TYPE_VERSIONS[nodeType]) {
376
+ return true;
377
+ }
378
+ return false;
379
+ }
380
+ fix(workflow, problem) {
381
+ const nodeType = problem.node_type || extractNodeTypeFromDescription(problem.description);
382
+ if (!nodeType) {
383
+ return this.createFailure(problem, 'Could not determine node type');
384
+ }
385
+ // Check if we can fix by updating typeVersion
386
+ const latestVersion = DeprecatedNodeHandler.LATEST_TYPE_VERSIONS[nodeType];
387
+ if (latestVersion) {
388
+ return this.fixByUpdatingTypeVersion(workflow, problem, nodeType, latestVersion);
389
+ }
390
+ // Original behavior: log warning for nodes without known fix
391
+ const deprecation = getDeprecationInfo(nodeType);
392
+ logger.info('DeprecatedNodeHandler: Version warning (not auto-fixable)', {
393
+ node_type: nodeType,
394
+ node_name: problem.node_name,
395
+ reason: deprecation?.reason || 'No replacement available',
396
+ migration_hint: deprecation?.migration_hint,
397
+ severity: deprecation?.severity,
398
+ });
399
+ return {
400
+ success: false,
401
+ changes: [],
402
+ reason: `DEPRECATED_NODE version warning - requires manual review. ${deprecation?.migration_hint || 'Update to latest node version.'}`,
403
+ confidence: 0,
404
+ fixer_name: this.name,
405
+ problem_code: problem.code,
406
+ };
407
+ }
408
+ /**
409
+ * Fix by updating the node's typeVersion to the latest known version.
410
+ */
411
+ fixByUpdatingTypeVersion(workflow, problem, nodeType, latestVersion) {
412
+ // Find the node
413
+ const nodeIndex = workflow.nodes.findIndex((n) => n.id === problem.node_id || n.name === problem.node_name);
414
+ if (nodeIndex === -1) {
415
+ return this.createFailure(problem, 'Node not found in workflow');
416
+ }
417
+ const node = workflow.nodes[nodeIndex];
418
+ const oldVersion = node.typeVersion;
419
+ // Skip if already at or above latest version
420
+ if (oldVersion !== undefined && oldVersion >= latestVersion) {
421
+ return this.createFailure(problem, `Node already at version ${oldVersion} (latest: ${latestVersion})`);
422
+ }
423
+ // Clone and apply the fix
424
+ const fixedWorkflow = cloneWorkflow(workflow);
425
+ fixedWorkflow.nodes[nodeIndex].typeVersion = latestVersion;
426
+ const change = {
427
+ change_type: 'parameter_update',
428
+ node_id: node.id,
429
+ node_name: node.name,
430
+ field: 'typeVersion',
431
+ old_value: oldVersion,
432
+ new_value: latestVersion,
433
+ confidence: this.minConfidence,
434
+ description: `Updated deprecated typeVersion from ${oldVersion ?? 'undefined'} to ${latestVersion}`,
435
+ };
436
+ logger.info('DeprecatedNodeHandler: Fixed by updating typeVersion', {
437
+ node_type: nodeType,
438
+ node_name: node.name,
439
+ old_version: oldVersion,
440
+ new_version: latestVersion,
441
+ });
442
+ return {
443
+ success: true,
444
+ fixedWorkflow,
445
+ changes: [change],
446
+ confidence: this.minConfidence,
447
+ fixer_name: this.name,
448
+ problem_code: problem.code,
449
+ };
450
+ }
451
+ createFailure(problem, reason) {
452
+ return {
453
+ success: false,
454
+ changes: [],
455
+ reason,
456
+ confidence: 0,
457
+ fixer_name: this.name,
458
+ problem_code: problem.code,
459
+ };
460
+ }
461
+ }
462
+ // Export singleton instances
463
+ export const deprecatedNodeFixer = new DeprecatedNodeFixer();
464
+ export const deprecatedNodeHandler = new DeprecatedNodeHandler();
465
+ //# sourceMappingURL=deprecated-node-fixer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deprecated-node-fixer.js","sourceRoot":"","sources":["../../../src/autofix/suggestion-fixers/deprecated-node-fixer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,aAAa,GAEd,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAE5D;;;GAGG;AACH,MAAM,kBAAkB,GAA2C;IACjE,yCAAyC;IACzC,yBAAyB,EAAE;QACzB,YAAY,EAAE,QAAQ;KACvB;IACD,6CAA6C;IAC7C,6BAA6B,EAAE;QAC7B,YAAY,EAAE,QAAQ;KACvB;IACD,0BAA0B;IAC1B,qBAAqB,EAAE;QACrB,cAAc,EAAE,8BAA8B;KAC/C;IACD,8BAA8B;IAC9B,yBAAyB,EAAE;QACzB,aAAa,EAAE,qBAAqB;QACpC,YAAY,EAAE,oBAAoB;KACnC;CACF,CAAC;AAEF;;;;;GAKG;AACH,SAAS,8BAA8B,CAAC,WAAoB;IAC1D,IAAI,CAAC,WAAW;QAAE,OAAO,SAAS,CAAC;IAEnC,+CAA+C;IAC/C,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACzE,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,8BAA8B,CACrC,WAA4B,EAC5B,cAAuB;IAEvB,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,CAAC,uBAAuB;IACtC,CAAC;IAED,IAAI,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,CAAC,6BAA6B;IAC5C,CAAC;IAED,IAAI,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,CAAC,2BAA2B;IAC1C,CAAC;IAED,6BAA6B;IAC7B,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,SAAS,aAAa,CACpB,OAAqB,EACrB,OAAe;IAEf,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAC7B,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;IAC3C,MAAM,SAAS,GAA4B,EAAE,GAAG,SAAS,EAAE,CAAC;IAE5D,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,gCAAgC;IAChC,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACvD,IAAI,MAAM,IAAI,SAAS,EAAE,CAAC;YACxB,6DAA6D;YAC7D,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAChC,IAAI,OAAO,GAA4B,SAAS,CAAC;gBACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC1C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBACvB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;oBACzB,CAAC;oBACD,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAA4B,CAAC;gBACzD,CAAC;gBACD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;gBACrD,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;gBACtC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;oBACtB,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,IAAI,OAAO,KAAK,sBAAsB,IAAI,OAAO,KAAK,8BAA8B,EAAE,CAAC;QACrF,uDAAuD;QACvD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,iDAAiD;IACjD,IACE,CAAC,OAAO,KAAK,yBAAyB,IAAI,OAAO,KAAK,6BAA6B,CAAC;QACpF,OAAO,KAAK,qBAAqB,EACjC,CAAC;QACD,2BAA2B;QAC3B,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;YACrB,iDAAiD;QACnD,CAAC;QACD,SAAS,CAAC,IAAI,GAAG,OAAO,KAAK,6BAA6B,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,oBAAoB,CAAC;QACzG,SAAS,CAAC,QAAQ,GAAG,YAAY,CAAC;IACpC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,OAAO,mBAAmB;IACrB,IAAI,GAAG,qBAAqB,CAAC;IAC7B,WAAW,GAAG,8DAA8D,CAAC;IACtF,8DAA8D;IACrD,cAAc,GAAG,CAAC,iBAAiB,EAAE,cAAc,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,iBAAiB,CAAC,CAAC;IACvI,aAAa,GAAG,IAAI,CAAC;IAE9B;;;;;;;;;;OAUG;IACH,MAAM,CAAC,OAA0B;QAC/B,IAAI,CAAC,OAAO,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAChC,qDAAqD;QACrD,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAE5D,IAAI,cAAc,KAAK,iBAAiB,IAAI,cAAc,KAAK,cAAc,EAAE,CAAC;YAC9E,OAAO,KAAK,CAAC;QACf,CAAC;QAED,gEAAgE;QAChE,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,IAAI,8BAA8B,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC1F,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,KAAK,CAAC;QACf,CAAC;QAED,kDAAkD;QAClD,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,gDAAgD;QAChD,OAAO,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC;IACnC,CAAC;IAED;;;;;OAKG;IACH,GAAG,CAAC,QAAkB,EAAE,OAA0B;QAChD,yBAAyB;QACzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,EAAE;gBACX,MAAM,EAAE,4DAA4D;gBACpE,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,IAAI,CAAC,IAAI;gBACrB,YAAY,EAAE,OAAO,CAAC,IAAI;aAC3B,CAAC;QACJ,CAAC;QAED,yDAAyD;QACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,IAAI,8BAA8B,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC1F,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,EAAE;gBACX,MAAM,EAAE,8CAA8C;gBACtD,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,IAAI,CAAC,IAAI;gBACrB,YAAY,EAAE,OAAO,CAAC,IAAI;aAC3B,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAE,CAAC;QAClD,MAAM,WAAW,GAAG,WAAW,CAAC,WAAY,CAAC;QAE7C,kDAAkD;QAClD,MAAM,UAAU,GAAG,8BAA8B,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAErE,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE;YACjD,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,eAAe,EAAE,QAAQ;YACzB,gBAAgB,EAAE,WAAW;YAC7B,UAAU;YACV,OAAO,EAAE,WAAW,CAAC,OAAO;YAC5B,WAAW,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK;SACzE,CAAC,CAAC;QAEH,2BAA2B;QAC3B,MAAM,aAAa,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAgB,EAAE,CAAC;QAChC,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC;YACvC,mDAAmD;YACnD,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO;gBAClC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,OAAO;gBAC7B,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;YAE3B,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;gBAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;gBAExD,6CAA6C;gBAC7C,wDAAwD;gBACxD,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBAEnD,2CAA2C;gBAC3C,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;gBACxB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;gBAE5B,wEAAwE;gBACxE,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;oBAC3D,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;gBACvB,CAAC;gBAED,MAAM,MAAM,GAAc;oBACxB,WAAW,EAAE,cAAc;oBAC3B,OAAO,EAAE,IAAI,CAAC,EAAE;oBAChB,SAAS,EAAE,IAAI,CAAC,IAAI;oBACpB,KAAK,EAAE,MAAM;oBACb,SAAS,EAAE;wBACT,IAAI,EAAE,OAAO;wBACb,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;qBAClC;oBACD,SAAS,EAAE;wBACT,IAAI,EAAE,WAAW;wBACjB,UAAU,EAAE,SAAS;qBACtB;oBACD,UAAU;oBACV,WAAW,EAAE,6BAA6B,OAAO,WAAW,WAAW,IACrE,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,WAAW,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EACzE,EAAE;iBACH,CAAC;gBAEF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACrB,UAAU,EAAE,CAAC;gBAEb,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE;oBAC7C,OAAO,EAAE,IAAI,CAAC,EAAE;oBAChB,SAAS,EAAE,IAAI,CAAC,IAAI;oBACpB,QAAQ,EAAE,OAAO;oBACjB,QAAQ,EAAE,WAAW;oBACrB,UAAU;oBACV,gBAAgB,EAAE,WAAW,CAAC,gBAAgB;iBAC/C,CAAC,CAAC;gBAEH,8CAA8C;gBAC9C,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACpB,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,gBAAgB;QAChB,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,gDAAgD,EAAE;gBAC5D,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,SAAS,EAAE,QAAQ;aACpB,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,EAAE;gBACX,MAAM,EAAE,mBAAmB,OAAO,CAAC,OAAO,IAAI,QAAQ,EAAE;gBACxD,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,IAAI,CAAC,IAAI;gBACrB,YAAY,EAAE,OAAO,CAAC,IAAI;aAC3B,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,aAAa;YACb,OAAO;YACP,UAAU;YACV,UAAU,EAAE,IAAI,CAAC,IAAI;YACrB,YAAY,EAAE,OAAO,CAAC,IAAI;SAC3B,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,kBAAkB,CAAC,QAAgB;QACjC,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED;;;OAGG;IACH,sBAAsB;QACpB,MAAM,OAAO,GAAuE,EAAE,CAAC;QAEvF,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAChE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,OAAO,CAAC,IAAI,CAAC;oBACX,QAAQ;oBACR,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;iBACxB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,qBAAqB;IACvB,IAAI,GAAG,uBAAuB,CAAC;IAC/B,WAAW,GAAG,0DAA0D,CAAC;IACzE,cAAc,GAAG,CAAC,iBAAiB,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;IACjF,aAAa,GAAG,IAAI,CAAC,CAAC,sCAAsC;IAErE,mEAAmE;IAC3D,MAAM,CAAU,oBAAoB,GAA2B;QACrE,mBAAmB,EAAE,CAAC;QACtB,sBAAsB,EAAE,CAAC;QACzB,uBAAuB,EAAE,CAAC;QAC1B,4BAA4B,EAAE,CAAC;QAC/B,oBAAoB,EAAE,CAAC;QACvB,qBAAqB,EAAE,CAAC;QACxB,uBAAuB,EAAE,CAAC;QAC1B,+BAA+B,EAAE,CAAC;QAClC,0BAA0B,EAAE,CAAC;KAC9B,CAAC;IAEF,MAAM,CAAC,OAA0B;QAC/B,IAAI,CAAC,OAAO,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAChC,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAE5D,IAAI,cAAc,KAAK,iBAAiB,EAAE,CAAC;YACzC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,4CAA4C;QAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,IAAI,8BAA8B,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC1F,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,KAAK,CAAC;QACf,CAAC;QAED,8EAA8E;QAC9E,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,oFAAoF;QACpF,IAAI,qBAAqB,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,GAAG,CAAC,QAAkB,EAAE,OAA0B;QAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,IAAI,8BAA8B,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC1F,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,+BAA+B,CAAC,CAAC;QACtE,CAAC;QAED,8CAA8C;QAC9C,MAAM,aAAa,GAAG,qBAAqB,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAC3E,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QACnF,CAAC;QAED,6DAA6D;QAC7D,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,2DAA2D,EAAE;YACvE,SAAS,EAAE,QAAQ;YACnB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM,EAAE,WAAW,EAAE,MAAM,IAAI,0BAA0B;YACzD,cAAc,EAAE,WAAW,EAAE,cAAc;YAC3C,QAAQ,EAAE,WAAW,EAAE,QAAQ;SAChC,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,6DAA6D,WAAW,EAAE,cAAc,IAAI,gCAAgC,EAAE;YACtI,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,IAAI,CAAC,IAAI;YACrB,YAAY,EAAE,OAAO,CAAC,IAAI;SAC3B,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,wBAAwB,CAC9B,QAAkB,EAClB,OAA0B,EAC1B,QAAgB,EAChB,aAAqB;QAErB,gBAAgB;QAChB,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CACxC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,SAAS,CAChE,CAAC;QAEF,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,4BAA4B,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QAEpC,6CAA6C;QAC7C,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,IAAI,aAAa,EAAE,CAAC;YAC5D,OAAO,IAAI,CAAC,aAAa,CACvB,OAAO,EACP,2BAA2B,UAAU,aAAa,aAAa,GAAG,CACnE,CAAC;QACJ,CAAC;QAED,0BAA0B;QAC1B,MAAM,aAAa,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC9C,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,WAAW,GAAG,aAAa,CAAC;QAE3D,MAAM,MAAM,GAAc;YACxB,WAAW,EAAE,kBAAkB;YAC/B,OAAO,EAAE,IAAI,CAAC,EAAE;YAChB,SAAS,EAAE,IAAI,CAAC,IAAI;YACpB,KAAK,EAAE,aAAa;YACpB,SAAS,EAAE,UAAU;YACrB,SAAS,EAAE,aAAa;YACxB,UAAU,EAAE,IAAI,CAAC,aAAa;YAC9B,WAAW,EAAE,uCAAuC,UAAU,IAAI,WAAW,OAAO,aAAa,EAAE;SACpG,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,sDAAsD,EAAE;YAClE,SAAS,EAAE,QAAQ;YACnB,SAAS,EAAE,IAAI,CAAC,IAAI;YACpB,WAAW,EAAE,UAAU;YACvB,WAAW,EAAE,aAAa;SAC3B,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,IAAI;YACb,aAAa;YACb,OAAO,EAAE,CAAC,MAAM,CAAC;YACjB,UAAU,EAAE,IAAI,CAAC,aAAa;YAC9B,UAAU,EAAE,IAAI,CAAC,IAAI;YACrB,YAAY,EAAE,OAAO,CAAC,IAAI;SAC3B,CAAC;IACJ,CAAC;IAEO,aAAa,CAAC,OAA0B,EAAE,MAAc;QAC9D,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,EAAE;YACX,MAAM;YACN,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,IAAI,CAAC,IAAI;YACrB,YAAY,EAAE,OAAO,CAAC,IAAI;SAC3B,CAAC;IACJ,CAAC;;AAGH,6BAA6B;AAC7B,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAC;AAC7D,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,qBAAqB,EAAE,CAAC"}