@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 @@
1
+ {"version":3,"file":"llm-fixer.js","sourceRoot":"","sources":["../../../src/autofix/suggestion-fixers/llm-fixer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,336 @@
1
+ /**
2
+ * Missing Credential Fixer
3
+ *
4
+ * RAG-2.2.92.4: Auto-fix Engine
5
+ * Adds placeholder credential references for nodes missing required credentials
6
+ * using L3 validator suggestions.
7
+ *
8
+ * Target success rate: 80%
9
+ *
10
+ * @module suggestion-fixers/missing-credential-fixer
11
+ * @created 2026-01-21
12
+ */
13
+ import { cloneWorkflow } from './types.js';
14
+ import { logger } from '@tsvika58/shared-utilities/logging';
15
+ /**
16
+ * Known credential type → placeholder name mappings.
17
+ * These provide sensible defaults for common credential types.
18
+ */
19
+ const CREDENTIAL_PLACEHOLDERS = {
20
+ // Google services
21
+ googleOAuth2Api: { name: 'Google OAuth2', description: 'Google OAuth2 credentials' },
22
+ googleSheetsOAuth2Api: { name: 'Google Sheets OAuth2', description: 'Google Sheets API credentials' },
23
+ googleDriveOAuth2Api: { name: 'Google Drive OAuth2', description: 'Google Drive API credentials' },
24
+ // Slack
25
+ slackApi: { name: 'Slack API', description: 'Slack Bot/User Token' },
26
+ slackOAuth2Api: { name: 'Slack OAuth2', description: 'Slack OAuth2 credentials' },
27
+ // GitHub
28
+ githubApi: { name: 'GitHub API', description: 'GitHub Personal Access Token' },
29
+ githubOAuth2Api: { name: 'GitHub OAuth2', description: 'GitHub OAuth2 credentials' },
30
+ // HTTP/Generic
31
+ httpBasicAuth: { name: 'HTTP Basic Auth', description: 'Basic authentication credentials' },
32
+ httpDigestAuth: { name: 'HTTP Digest Auth', description: 'Digest authentication credentials' },
33
+ httpHeaderAuth: { name: 'HTTP Header Auth', description: 'Header-based authentication' },
34
+ httpQueryAuth: { name: 'HTTP Query Auth', description: 'Query parameter authentication' },
35
+ oAuth2Api: { name: 'OAuth2 API', description: 'Generic OAuth2 credentials' },
36
+ // Databases
37
+ postgresApi: { name: 'PostgreSQL', description: 'PostgreSQL database credentials' },
38
+ mysqlApi: { name: 'MySQL', description: 'MySQL database credentials' },
39
+ mongoDb: { name: 'MongoDB', description: 'MongoDB credentials' },
40
+ // Cloud providers
41
+ awsApi: { name: 'AWS', description: 'AWS Access Key credentials' },
42
+ azureApi: { name: 'Azure', description: 'Azure credentials' },
43
+ // Email
44
+ smtpApi: { name: 'SMTP', description: 'SMTP email credentials' },
45
+ imapApi: { name: 'IMAP', description: 'IMAP email credentials' },
46
+ gmailOAuth2: { name: 'Gmail OAuth2', description: 'Gmail OAuth2 credentials' },
47
+ // Other common services
48
+ notionApi: { name: 'Notion API', description: 'Notion integration token' },
49
+ airtableApi: { name: 'Airtable API', description: 'Airtable API key' },
50
+ twilioApi: { name: 'Twilio API', description: 'Twilio credentials' },
51
+ sendGridApi: { name: 'SendGrid API', description: 'SendGrid API key' },
52
+ stripeApi: { name: 'Stripe API', description: 'Stripe API key' },
53
+ shopifyApi: { name: 'Shopify API', description: 'Shopify API credentials' },
54
+ hubspotApi: { name: 'HubSpot API', description: 'HubSpot API key' },
55
+ salesforceOAuth2Api: { name: 'Salesforce OAuth2', description: 'Salesforce OAuth2 credentials' },
56
+ jiraApi: { name: 'Jira API', description: 'Jira API credentials' },
57
+ asanaApi: { name: 'Asana API', description: 'Asana API credentials' },
58
+ trelloApi: { name: 'Trello API', description: 'Trello API credentials' },
59
+ discordApi: { name: 'Discord API', description: 'Discord Bot Token' },
60
+ telegramApi: { name: 'Telegram API', description: 'Telegram Bot Token' },
61
+ };
62
+ /**
63
+ * Generate a placeholder credential ID.
64
+ * Uses a predictable format that indicates it needs to be replaced.
65
+ */
66
+ function generatePlaceholderId(credentialType) {
67
+ return `placeholder-${credentialType}-${Date.now().toString(36)}`;
68
+ }
69
+ /**
70
+ * Generate a placeholder credential name.
71
+ */
72
+ function generatePlaceholderName(credentialType) {
73
+ const known = CREDENTIAL_PLACEHOLDERS[credentialType];
74
+ if (known) {
75
+ return `[PLACEHOLDER] ${known.name}`;
76
+ }
77
+ // Convert camelCase to Title Case
78
+ const titleCase = credentialType
79
+ .replace(/([A-Z])/g, ' $1')
80
+ .replace(/^./, (str) => str.toUpperCase())
81
+ .replace(/Api$/i, ' API')
82
+ .replace(/OAuth2$/i, ' OAuth2')
83
+ .trim();
84
+ return `[PLACEHOLDER] ${titleCase}`;
85
+ }
86
+ /**
87
+ * Calculate confidence based on credential type recognition.
88
+ *
89
+ * Confidence levels:
90
+ * - Known credential type with placeholder: 0.88
91
+ * - Unknown credential type with suggestion: 0.82
92
+ * - Unknown credential type without suggestion: 0.70
93
+ */
94
+ function calculateCredentialConfidence(credentialType, hasSuggestion) {
95
+ const isKnown = credentialType in CREDENTIAL_PLACEHOLDERS;
96
+ if (isKnown) {
97
+ return 0.88; // Known type - high confidence
98
+ }
99
+ if (hasSuggestion) {
100
+ return 0.82; // Has suggestion from validator
101
+ }
102
+ return 0.70; // Unknown type - lower confidence
103
+ }
104
+ /**
105
+ * MissingCredentialFixer - Adds placeholder credentials for nodes that need them
106
+ *
107
+ * Uses L3 validator's credential type detection and suggestions to add
108
+ * placeholder credential references that users can then configure.
109
+ *
110
+ * Note: This fixer adds PLACEHOLDER credentials that must be replaced
111
+ * with actual credentials by the user. The workflow will not run until
112
+ * real credentials are configured.
113
+ *
114
+ * Example fixes:
115
+ * - Node without slackApi credentials → Add placeholder Slack credential reference
116
+ * - Node with unknown credential type → Add placeholder with suggested type
117
+ */
118
+ export class MissingCredentialFixer {
119
+ name = 'MissingCredentialFixer';
120
+ description = 'Adds placeholder credential references for nodes missing required credentials';
121
+ /**
122
+ * Supported L3 problem codes:
123
+ * - MISSING_CREDENTIAL: Node needs credentials but none specified (fixable with placeholder)
124
+ * - UNKNOWN_CREDENTIAL_TYPE: Credential type not in catalog (fixable if suggestions available)
125
+ * - CREDENTIALS_REDACTED: Credentials are redacted (skip - expected for exported workflows)
126
+ */
127
+ supportedCodes = ['L3_MISSING_CREDENTIAL', 'L3_UNKNOWN_CREDENTIAL_TYPE', 'L3_CREDENTIALS_REDACTED'];
128
+ minConfidence = 0.80;
129
+ /**
130
+ * Check if this fixer can handle the problem.
131
+ *
132
+ * Requirements:
133
+ * 1. Problem must be L3 level
134
+ * 2. Must have node_id to target
135
+ * 3. Must have credential_type to add
136
+ *
137
+ * RAG-2.2.93.6: L3 Problem Classification:
138
+ * - MISSING_CREDENTIAL: Fixable if we have node_id and credential_type
139
+ * - UNKNOWN_CREDENTIAL_TYPE: Fixable only if suggestions available
140
+ * - CREDENTIALS_REDACTED: Skip (expected behavior for exported workflows)
141
+ */
142
+ canFix(problem) {
143
+ if (problem.level !== 'L3') {
144
+ return false;
145
+ }
146
+ // L3_CREDENTIALS_REDACTED: Skip - expected behavior for exported workflows
147
+ // These cannot be fixed automatically and are not errors in the catalog
148
+ if (problem.code === 'L3_CREDENTIALS_REDACTED') {
149
+ return false;
150
+ }
151
+ // We can fix L3_MISSING_CREDENTIAL if we have node_id and credential_type
152
+ if (problem.code === 'L3_MISSING_CREDENTIAL') {
153
+ return !!problem.node_id && !!problem.credential_type;
154
+ }
155
+ // L3_UNKNOWN_CREDENTIAL_TYPE: Fixable only if suggestions available
156
+ // Without suggestions, this is a catalog gap that cannot be auto-fixed
157
+ if (problem.code === 'L3_UNKNOWN_CREDENTIAL_TYPE') {
158
+ return (!!problem.node_id &&
159
+ !!problem.credential_type &&
160
+ Array.isArray(problem.suggestions) &&
161
+ problem.suggestions.length > 0);
162
+ }
163
+ return false;
164
+ }
165
+ /**
166
+ * Apply the credential fix to the workflow.
167
+ *
168
+ * For MISSING_CREDENTIAL: Adds the missing credential type with a placeholder.
169
+ * For UNKNOWN_CREDENTIAL_TYPE: Replaces with first suggestion and adds placeholder.
170
+ */
171
+ fix(workflow, problem) {
172
+ // Validate prerequisites
173
+ if (!this.canFix(problem)) {
174
+ return {
175
+ success: false,
176
+ changes: [],
177
+ reason: 'Problem does not meet requirements for MissingCredentialFixer',
178
+ confidence: 0,
179
+ fixer_name: this.name,
180
+ problem_code: problem.code,
181
+ };
182
+ }
183
+ const nodeId = problem.node_id;
184
+ const originalCredType = problem.credential_type;
185
+ // Determine the credential type to use
186
+ let credentialType = originalCredType;
187
+ if (problem.code === 'L3_UNKNOWN_CREDENTIAL_TYPE' && problem.suggestions?.length) {
188
+ credentialType = problem.suggestions[0]; // Use first suggestion
189
+ }
190
+ const hasSuggestion = problem.suggestions && problem.suggestions.length > 0;
191
+ const confidence = calculateCredentialConfidence(credentialType, !!hasSuggestion);
192
+ logger.debug('MissingCredentialFixer attempting fix', {
193
+ node_id: nodeId,
194
+ original_cred_type: originalCredType,
195
+ resolved_cred_type: credentialType,
196
+ confidence,
197
+ problem_code: problem.code,
198
+ });
199
+ // Find and update the node
200
+ const fixedWorkflow = cloneWorkflow(workflow);
201
+ let nodeFound = false;
202
+ for (const node of fixedWorkflow.nodes) {
203
+ if (node.id === nodeId) {
204
+ nodeFound = true;
205
+ // Ensure credentials object exists
206
+ if (!node.credentials) {
207
+ node.credentials = {};
208
+ }
209
+ const oldCredentials = JSON.parse(JSON.stringify(node.credentials));
210
+ // Add or replace credential
211
+ const placeholderId = generatePlaceholderId(credentialType);
212
+ const placeholderName = generatePlaceholderName(credentialType);
213
+ node.credentials[credentialType] = {
214
+ id: placeholderId,
215
+ name: placeholderName,
216
+ };
217
+ // If we're replacing an unknown type, remove the old one
218
+ if (problem.code === 'L3_UNKNOWN_CREDENTIAL_TYPE' && credentialType !== originalCredType) {
219
+ delete node.credentials[originalCredType];
220
+ }
221
+ const change = {
222
+ change_type: 'credential_add',
223
+ node_id: node.id,
224
+ node_name: node.name,
225
+ field: `credentials.${credentialType}`,
226
+ old_value: oldCredentials,
227
+ new_value: node.credentials,
228
+ confidence,
229
+ description: problem.code === 'L3_UNKNOWN_CREDENTIAL_TYPE'
230
+ ? `Replaced unknown credential type "${originalCredType}" with "${credentialType}" (placeholder - needs configuration)`
231
+ : `Added placeholder credential "${credentialType}" (needs configuration)`,
232
+ };
233
+ logger.info('MissingCredentialFixer applied fix', {
234
+ node_id: node.id,
235
+ node_name: node.name,
236
+ credential_type: credentialType,
237
+ placeholder_name: placeholderName,
238
+ confidence,
239
+ });
240
+ return {
241
+ success: true,
242
+ fixedWorkflow,
243
+ changes: [change],
244
+ confidence,
245
+ fixer_name: this.name,
246
+ problem_code: problem.code,
247
+ };
248
+ }
249
+ }
250
+ // Node not found
251
+ if (!nodeFound) {
252
+ logger.warn('MissingCredentialFixer could not find target node', {
253
+ node_id: nodeId,
254
+ });
255
+ return {
256
+ success: false,
257
+ changes: [],
258
+ reason: `Node not found: ${nodeId}`,
259
+ confidence: 0,
260
+ fixer_name: this.name,
261
+ problem_code: problem.code,
262
+ };
263
+ }
264
+ // Should not reach here
265
+ return {
266
+ success: false,
267
+ changes: [],
268
+ reason: 'Unexpected error in MissingCredentialFixer',
269
+ confidence: 0,
270
+ fixer_name: this.name,
271
+ problem_code: problem.code,
272
+ };
273
+ }
274
+ /**
275
+ * Get placeholder info for a credential type.
276
+ * Exposed for testing and external use.
277
+ */
278
+ getPlaceholderInfo(credentialType) {
279
+ return CREDENTIAL_PLACEHOLDERS[credentialType];
280
+ }
281
+ /**
282
+ * Get all known credential types.
283
+ * Useful for reporting and analysis.
284
+ */
285
+ getKnownCredentialTypes() {
286
+ return Object.keys(CREDENTIAL_PLACEHOLDERS);
287
+ }
288
+ /**
289
+ * Classify an L3 problem to determine the appropriate action.
290
+ *
291
+ * RAG-2.2.93.6: L3 Problem Classification for pipeline routing:
292
+ * - 'fixable': Can be auto-fixed (MISSING_CREDENTIAL, UNKNOWN with suggestions)
293
+ * - 'gap': Catalog gap - record to factory.gaps (UNKNOWN without suggestions)
294
+ * - 'skip': Expected behavior, no action needed (CREDENTIALS_REDACTED)
295
+ *
296
+ * @param problem - The validation problem to classify
297
+ * @returns Classification result with action and reason
298
+ */
299
+ static classifyL3Problem(problem) {
300
+ if (problem.level !== 'L3') {
301
+ return { action: 'skip', reason: 'Not an L3 problem' };
302
+ }
303
+ switch (problem.code) {
304
+ case 'L3_MISSING_CREDENTIAL':
305
+ // Fixable if we have the required info
306
+ if (problem.node_id && problem.credential_type) {
307
+ return { action: 'fixable', reason: 'Can add placeholder credential' };
308
+ }
309
+ return { action: 'skip', reason: 'Missing required node_id or credential_type' };
310
+ case 'L3_UNKNOWN_CREDENTIAL_TYPE':
311
+ // Fixable only if suggestions available
312
+ if (problem.node_id &&
313
+ problem.credential_type &&
314
+ Array.isArray(problem.suggestions) &&
315
+ problem.suggestions.length > 0) {
316
+ return { action: 'fixable', reason: 'Can replace with suggested credential type' };
317
+ }
318
+ // Without suggestions, this is a catalog gap
319
+ return {
320
+ action: 'gap',
321
+ reason: `Credential type "${problem.credential_type}" not in catalog and no suggestions available`,
322
+ };
323
+ case 'L3_CREDENTIALS_REDACTED':
324
+ // Expected behavior for exported workflows - skip
325
+ return {
326
+ action: 'skip',
327
+ reason: 'Credentials are redacted (expected for exported workflows)',
328
+ };
329
+ default:
330
+ return { action: 'skip', reason: `Unknown L3 problem code: ${problem.code}` };
331
+ }
332
+ }
333
+ }
334
+ // Export singleton instance
335
+ export const missingCredentialFixer = new MissingCredentialFixer();
336
+ //# sourceMappingURL=missing-credential-fixer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"missing-credential-fixer.js","sourceRoot":"","sources":["../../../src/autofix/suggestion-fixers/missing-credential-fixer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Suggestion-Based Fixer Types
3
+ *
4
+ * RAG-2.2.92.4: Auto-fix Engine
5
+ * Types for fixers that leverage L2/L3 validation suggestions.
6
+ *
7
+ * @module suggestion-fixers/types
8
+ * @created 2026-01-21
9
+ */
10
+ /**
11
+ * Deep clone any serializable object.
12
+ * Uses structuredClone (standard API, handles circular refs & typed arrays).
13
+ * On Node.js v24, JSON.parse/stringify is ~40% faster for plain data objects,
14
+ * but the absolute difference is negligible (~30μs per clone vs ~200ms per validation).
15
+ */
16
+ export function deepClone(obj) {
17
+ if (typeof structuredClone === 'function') {
18
+ return structuredClone(obj);
19
+ }
20
+ return JSON.parse(JSON.stringify(obj));
21
+ }
22
+ /**
23
+ * Deep clone a workflow to avoid mutations.
24
+ * Alias for deepClone with Workflow constraint for type safety.
25
+ */
26
+ export function cloneWorkflow(workflow) {
27
+ return deepClone(workflow);
28
+ }
29
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/autofix/suggestion-fixers/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA4KH;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAI,GAAM;IACjC,IAAI,OAAO,eAAe,KAAK,UAAU,EAAE,CAAC;QAC1C,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAqB,QAAW;IAC3D,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,197 @@
1
+ /**
2
+ * Typo Fixer
3
+ *
4
+ * RAG-2.2.92.4: Auto-fix Engine
5
+ * Fixes misspelled node types using L2 validator's didYouMean suggestions.
6
+ *
7
+ * Target success rate: 90%
8
+ *
9
+ * @module suggestion-fixers/typo-fixer
10
+ * @created 2026-01-21
11
+ */
12
+ import { cloneWorkflow } from './types.js';
13
+ import { logger } from '@tsvika58/shared-utilities/logging';
14
+ /**
15
+ * Calculate Levenshtein distance for confidence scoring.
16
+ * Lower distance = higher confidence.
17
+ */
18
+ function levenshteinDistance(str1, str2) {
19
+ const s1 = str1.toLowerCase();
20
+ const s2 = str2.toLowerCase();
21
+ if (s1 === s2)
22
+ return 0;
23
+ if (s1.length === 0)
24
+ return s2.length;
25
+ if (s2.length === 0)
26
+ return s1.length;
27
+ let prevRow = Array.from({ length: s1.length + 1 }, (_, i) => i);
28
+ let currRow = new Array(s1.length + 1);
29
+ for (let i = 1; i <= s2.length; i++) {
30
+ currRow[0] = i;
31
+ for (let j = 1; j <= s1.length; j++) {
32
+ const cost = s2.charAt(i - 1) === s1.charAt(j - 1) ? 0 : 1;
33
+ currRow[j] = Math.min(prevRow[j] + 1, currRow[j - 1] + 1, prevRow[j - 1] + cost);
34
+ }
35
+ [prevRow, currRow] = [currRow, prevRow];
36
+ }
37
+ return prevRow[s1.length];
38
+ }
39
+ /**
40
+ * Calculate confidence based on edit distance and string length.
41
+ * - Edit distance 1: 0.95 confidence
42
+ * - Edit distance 2: 0.90 confidence
43
+ * - Edit distance 3: 0.80 confidence
44
+ * - Edit distance 4+: 0.60 confidence (below auto-apply threshold)
45
+ */
46
+ function calculateTypoConfidence(original, suggestion) {
47
+ const distance = levenshteinDistance(original, suggestion);
48
+ const maxLen = Math.max(original.length, suggestion.length);
49
+ // Base confidence from edit distance
50
+ let confidence;
51
+ if (distance === 1) {
52
+ confidence = 0.95;
53
+ }
54
+ else if (distance === 2) {
55
+ confidence = 0.90;
56
+ }
57
+ else if (distance === 3) {
58
+ confidence = 0.80;
59
+ }
60
+ else {
61
+ confidence = 0.60;
62
+ }
63
+ // Boost if suggestion has same suffix (likely same node family)
64
+ const origSuffix = original.split('.').pop()?.toLowerCase() || '';
65
+ const suggSuffix = suggestion.split('.').pop()?.toLowerCase() || '';
66
+ if (origSuffix.includes(suggSuffix) || suggSuffix.includes(origSuffix)) {
67
+ confidence = Math.min(confidence + 0.05, 0.98);
68
+ }
69
+ return confidence;
70
+ }
71
+ /**
72
+ * TypoFixer - Fixes misspelled node types
73
+ *
74
+ * Uses L2 validator's didYouMean suggestions to automatically
75
+ * correct typos in node type names.
76
+ *
77
+ * Example fixes:
78
+ * - "HttpRequest" → "n8n-nodes-base.httpRequest"
79
+ * - "n8n-nodes-base.slck" → "n8n-nodes-base.slack"
80
+ * - "n8n-nodes-base.GoogleSheet" → "n8n-nodes-base.googleSheets"
81
+ */
82
+ export class TypoFixer {
83
+ name = 'TypoFixer';
84
+ description = 'Fixes misspelled node types using L2 didYouMean suggestions';
85
+ supportedCodes = ['L2_UNKNOWN_NODE_TYPE'];
86
+ minConfidence = 0.85;
87
+ /**
88
+ * Check if this fixer can handle the problem.
89
+ *
90
+ * Requirements:
91
+ * 1. Problem must be L2 level
92
+ * 2. Problem code must be L2_UNKNOWN_NODE_TYPE
93
+ * 3. Must have at least one suggestion
94
+ */
95
+ canFix(problem) {
96
+ return (problem.level === 'L2' &&
97
+ problem.code === 'L2_UNKNOWN_NODE_TYPE' &&
98
+ Array.isArray(problem.suggestions) &&
99
+ problem.suggestions.length > 0);
100
+ }
101
+ /**
102
+ * Apply the typo fix to the workflow.
103
+ *
104
+ * Takes the first (best) suggestion from the validator and
105
+ * replaces the node type in the workflow.
106
+ */
107
+ fix(workflow, problem) {
108
+ // Validate prerequisites
109
+ if (!this.canFix(problem)) {
110
+ return {
111
+ success: false,
112
+ changes: [],
113
+ reason: 'Problem does not meet requirements for TypoFixer',
114
+ confidence: 0,
115
+ fixer_name: this.name,
116
+ problem_code: problem.code,
117
+ };
118
+ }
119
+ const suggestions = problem.suggestions;
120
+ const bestSuggestion = suggestions[0];
121
+ const originalType = problem.node_type || '';
122
+ // Calculate confidence based on edit distance
123
+ const confidence = calculateTypoConfidence(originalType, bestSuggestion);
124
+ logger.debug('TypoFixer attempting fix', {
125
+ node_id: problem.node_id,
126
+ original_type: originalType,
127
+ suggestion: bestSuggestion,
128
+ confidence,
129
+ });
130
+ // Find and update the node
131
+ const fixedWorkflow = cloneWorkflow(workflow);
132
+ let nodeFound = false;
133
+ for (const node of fixedWorkflow.nodes) {
134
+ // Match by node_id if available, otherwise by type
135
+ const isTargetNode = problem.node_id
136
+ ? node.id === problem.node_id
137
+ : node.type === originalType;
138
+ if (isTargetNode) {
139
+ nodeFound = true;
140
+ const oldType = node.type;
141
+ node.type = bestSuggestion;
142
+ const change = {
143
+ change_type: 'node_type_update',
144
+ node_id: node.id,
145
+ node_name: node.name,
146
+ field: 'type',
147
+ old_value: oldType,
148
+ new_value: bestSuggestion,
149
+ confidence,
150
+ description: `Fixed typo in node type: "${oldType}" → "${bestSuggestion}"`,
151
+ };
152
+ logger.info('TypoFixer applied fix', {
153
+ node_id: node.id,
154
+ node_name: node.name,
155
+ old_type: oldType,
156
+ new_type: bestSuggestion,
157
+ confidence,
158
+ });
159
+ return {
160
+ success: true,
161
+ fixedWorkflow,
162
+ changes: [change],
163
+ confidence,
164
+ fixer_name: this.name,
165
+ problem_code: problem.code,
166
+ };
167
+ }
168
+ }
169
+ // Node not found
170
+ if (!nodeFound) {
171
+ logger.warn('TypoFixer could not find target node', {
172
+ node_id: problem.node_id,
173
+ node_type: originalType,
174
+ });
175
+ return {
176
+ success: false,
177
+ changes: [],
178
+ reason: `Node not found: ${problem.node_id || originalType}`,
179
+ confidence: 0,
180
+ fixer_name: this.name,
181
+ problem_code: problem.code,
182
+ };
183
+ }
184
+ // Should not reach here, but return failure just in case
185
+ return {
186
+ success: false,
187
+ changes: [],
188
+ reason: 'Unexpected error in TypoFixer',
189
+ confidence: 0,
190
+ fixer_name: this.name,
191
+ problem_code: problem.code,
192
+ };
193
+ }
194
+ }
195
+ // Export singleton instance
196
+ export const typoFixer = new TypoFixer();
197
+ //# sourceMappingURL=typo-fixer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typo-fixer.js","sourceRoot":"","sources":["../../../src/autofix/suggestion-fixers/typo-fixer.ts"],"names":[],"mappings":"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"}