@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,575 @@
1
+ /**
2
+ * L5 Parameter Fixers
3
+ *
4
+ * RAG-2.2.93.8: L5 Parameter Fixers
5
+ * RAG-2.2.107.3: External Dependency Gap Recording
6
+ * Created: 2026-01-23
7
+ * Updated: 2026-02-01
8
+ *
9
+ * Fixes parameter validation problems from L5 validator:
10
+ * - L5_MISSING_REQUIRED_PARAMETER: adds required parameters with catalog defaults
11
+ * - L5_INVALID_PARAMETER_VALUE: resets invalid values to defaults
12
+ * - L5_UNKNOWN_PARAMETER: removes parameters not in schema
13
+ *
14
+ * RAG-2.2.107.3: External dependencies (URLs, file paths, credentials) are NOT auto-fixed.
15
+ * Instead, they are recorded as gaps with user guidance metadata.
16
+ *
17
+ * Uses ICatalogCache for parameter lookups and isSafelyDefaultable for
18
+ * determining safe default values based on parameter category.
19
+ *
20
+ * @module suggestion-fixers/l5-parameter-fixer
21
+ * @created 2026-01-23
22
+ */
23
+ import { cloneWorkflow } from './types.js';
24
+ import { categorizeParameter, isSafelyDefaultable, classifyExternalDependency, } from '../../classification/l5-parameter-analyzer.js';
25
+ import { isExternalDepReclassificationEnabled } from '../../classification/severity-classifier.js';
26
+ import { logger } from '@tsvika58/shared-utilities/logging';
27
+ /**
28
+ * Extract node index from JSON path.
29
+ * @example "nodes[1].parameters.url" -> 1
30
+ */
31
+ function extractNodeIndex(path) {
32
+ if (!path)
33
+ return -1;
34
+ const match = path.match(/nodes\[(\d+)\]/);
35
+ return match ? parseInt(match[1], 10) : -1;
36
+ }
37
+ /**
38
+ * Extract parameter name from JSON path.
39
+ * @example "nodes[1].parameters.url" -> "url"
40
+ */
41
+ function extractParameterFromPath(path) {
42
+ if (!path)
43
+ return '';
44
+ const match = path.match(/\.parameters\.(.+)$/);
45
+ return match ? match[1] : '';
46
+ }
47
+ /**
48
+ * Parse default value from string representation.
49
+ * Handles various types: strings, numbers, booleans, objects.
50
+ */
51
+ function parseDefaultValue(defaultStr) {
52
+ if (defaultStr === null || defaultStr === undefined)
53
+ return undefined;
54
+ if (defaultStr === '')
55
+ return '';
56
+ // Try parsing as JSON first
57
+ try {
58
+ return JSON.parse(defaultStr);
59
+ }
60
+ catch {
61
+ // Not valid JSON, return as string
62
+ return defaultStr;
63
+ }
64
+ }
65
+ // ============================================================
66
+ // L5 MISSING PARAMETER FIXER
67
+ // ============================================================
68
+ /**
69
+ * L5MissingParameterFixer - Adds missing required parameters with catalog defaults
70
+ *
71
+ * Handles L5_MISSING_REQUIRED_PARAMETER problems by:
72
+ * 1. Looking up parameter definition from catalog
73
+ * 2. Categorizing parameter to determine safe defaults
74
+ * 3. Adding parameter with appropriate default value
75
+ *
76
+ * Confidence varies by parameter category:
77
+ * - http_method: 0.90 (safe default: 'GET')
78
+ * - time_unit: 0.85 (safe default: 'days')
79
+ * - date_field: 0.80 (safe default: '={{ $now }}')
80
+ * - binary_field: 0.95 (safe default: '={{ $binary.data }}')
81
+ * - other with schema default: 0.60-0.75
82
+ * - credential/url/file_path: 0 (never auto-fix)
83
+ */
84
+ export class L5MissingParameterFixer {
85
+ name = 'L5MissingParameterFixer';
86
+ description = 'Adds missing required parameters with catalog-defined defaults';
87
+ supportedCodes = ['L5_MISSING_REQUIRED_PARAMETER'];
88
+ minConfidence = 0.60;
89
+ catalogCache = null;
90
+ /**
91
+ * Set the catalog cache for parameter lookups.
92
+ */
93
+ setCatalogCache(cache) {
94
+ this.catalogCache = cache;
95
+ }
96
+ canFix(problem) {
97
+ return problem.level === 'L5' && problem.code === 'L5_MISSING_REQUIRED_PARAMETER';
98
+ }
99
+ fix(workflow, problem) {
100
+ if (!this.canFix(problem)) {
101
+ return this.createFailure(problem, 'Problem does not match L5 MISSING_REQUIRED_PARAMETER');
102
+ }
103
+ const { nodeId, nodeType, parameterName } = this.extractProblemDetails(problem);
104
+ if (!nodeId && !problem.path) {
105
+ return this.createFailure(problem, 'Missing node identification in problem');
106
+ }
107
+ if (!parameterName) {
108
+ return this.createFailure(problem, 'Could not determine parameter name from problem');
109
+ }
110
+ // Find the node in workflow
111
+ const nodeIndex = this.findNodeIndex(workflow, problem);
112
+ if (nodeIndex === -1) {
113
+ return this.createFailure(problem, `Node not found in workflow`);
114
+ }
115
+ const node = workflow.nodes[nodeIndex];
116
+ const resolvedNodeType = nodeType || node.type;
117
+ // Categorize parameter to determine safe default
118
+ const category = categorizeParameter(parameterName, resolvedNodeType, problem.path);
119
+ // RAG-2.2.107.3: Check for external dependencies FIRST
120
+ // When feature flag is enabled, external deps are recorded as gaps, not auto-fixed
121
+ if (isExternalDepReclassificationEnabled()) {
122
+ const externalClassification = classifyExternalDependency(category, resolvedNodeType, parameterName);
123
+ if (externalClassification.isExternal) {
124
+ return this.createGapResult(problem, node, parameterName, externalClassification);
125
+ }
126
+ }
127
+ const { isSafe, suggestedDefault, confidence } = isSafelyDefaultable(category, null, // Will look up from catalog below
128
+ parameterName);
129
+ // Try to get default from catalog if available
130
+ let defaultValue = suggestedDefault;
131
+ let finalConfidence = confidence;
132
+ if (this.catalogCache && !isSafe) {
133
+ const catalogDefault = this.lookupCatalogDefault(node, resolvedNodeType, parameterName);
134
+ if (catalogDefault !== undefined) {
135
+ defaultValue = catalogDefault;
136
+ finalConfidence = 0.75; // Schema-provided default
137
+ }
138
+ }
139
+ // Cannot fix if no safe default
140
+ if (defaultValue === null || defaultValue === undefined) {
141
+ return this.createFailure(problem, `No safe default for parameter "${parameterName}" (category: ${category})`);
142
+ }
143
+ // Clone and apply fix
144
+ const fixedWorkflow = cloneWorkflow(workflow);
145
+ const fixedNode = fixedWorkflow.nodes[nodeIndex];
146
+ if (!fixedNode.parameters) {
147
+ fixedNode.parameters = {};
148
+ }
149
+ // Handle nested parameters (e.g., "additionalFields.timeout")
150
+ this.setNestedParameter(fixedNode.parameters, parameterName, defaultValue);
151
+ const change = {
152
+ change_type: 'parameter_update',
153
+ node_id: node.id,
154
+ node_name: node.name,
155
+ field: `parameters.${parameterName}`,
156
+ old_value: undefined,
157
+ new_value: defaultValue,
158
+ confidence: finalConfidence,
159
+ description: `Added missing required parameter "${parameterName}" with default: ${JSON.stringify(defaultValue)}`,
160
+ };
161
+ logger.info('L5MissingParameterFixer applied fix', {
162
+ node_id: node.id,
163
+ parameter: parameterName,
164
+ category,
165
+ default_value: defaultValue,
166
+ confidence: finalConfidence,
167
+ });
168
+ return {
169
+ success: true,
170
+ fixedWorkflow,
171
+ changes: [change],
172
+ confidence: finalConfidence,
173
+ fixer_name: this.name,
174
+ problem_code: problem.code,
175
+ };
176
+ }
177
+ extractProblemDetails(problem) {
178
+ const nodeId = problem.node_id;
179
+ const nodeType = problem.node_type;
180
+ // Try to extract parameter name from various sources
181
+ let parameterName = '';
182
+ // From problem details
183
+ if (problem.details?.parameter_name) {
184
+ parameterName = problem.details.parameter_name;
185
+ }
186
+ // From path
187
+ else if (problem.path) {
188
+ parameterName = extractParameterFromPath(problem.path);
189
+ }
190
+ // From message (fallback)
191
+ else if (problem.message) {
192
+ const match = problem.message.match(/parameter[:\s]+["']?([^"'\s]+)/i);
193
+ if (match)
194
+ parameterName = match[1];
195
+ }
196
+ return { nodeId, nodeType, parameterName };
197
+ }
198
+ findNodeIndex(workflow, problem) {
199
+ // Try by node_id first
200
+ if (problem.node_id) {
201
+ const idx = workflow.nodes.findIndex((n) => n.id === problem.node_id);
202
+ if (idx !== -1)
203
+ return idx;
204
+ }
205
+ // Try by node_name
206
+ if (problem.node_name) {
207
+ const idx = workflow.nodes.findIndex((n) => n.name === problem.node_name);
208
+ if (idx !== -1)
209
+ return idx;
210
+ }
211
+ // Try by path
212
+ if (problem.path) {
213
+ const idx = extractNodeIndex(problem.path);
214
+ if (idx >= 0 && idx < workflow.nodes.length)
215
+ return idx;
216
+ }
217
+ return -1;
218
+ }
219
+ lookupCatalogDefault(node, nodeType, parameterName) {
220
+ // This would be async in real implementation, but for sync fix() we return undefined
221
+ // The catalog lookup should be done before calling fix() and passed via problem.details
222
+ // For now, check if problem has schema_default in details
223
+ return undefined;
224
+ }
225
+ setNestedParameter(params, path, value) {
226
+ const parts = path.split('.');
227
+ let current = params;
228
+ for (let i = 0; i < parts.length - 1; i++) {
229
+ const part = parts[i];
230
+ if (!current[part] || typeof current[part] !== 'object') {
231
+ current[part] = {};
232
+ }
233
+ current = current[part];
234
+ }
235
+ current[parts[parts.length - 1]] = value;
236
+ }
237
+ createFailure(problem, reason) {
238
+ return {
239
+ success: false,
240
+ changes: [],
241
+ reason,
242
+ confidence: 0,
243
+ fixer_name: this.name,
244
+ problem_code: problem.code,
245
+ };
246
+ }
247
+ /**
248
+ * RAG-2.2.107.3: Create a gap result for external dependencies
249
+ * External deps are not auto-fixed; they're recorded as gaps with user guidance
250
+ */
251
+ createGapResult(problem, node, parameterName, externalClassification) {
252
+ const gapResult = {
253
+ action: 'gap_recorded',
254
+ gap_type: externalClassification.type,
255
+ user_action: externalClassification.userAction,
256
+ example_value: externalClassification.example,
257
+ blocks_k2: false, // External deps don't block K2
258
+ k2_mockable: true, // External deps can be mocked in K2
259
+ message: `External dependency: ${externalClassification.userAction}`,
260
+ };
261
+ logger.info('L5MissingParameterFixer recorded external dep as gap', {
262
+ node_id: node.id,
263
+ node_name: node.name,
264
+ parameter: parameterName,
265
+ gap_type: externalClassification.type,
266
+ user_action: externalClassification.userAction,
267
+ });
268
+ return {
269
+ success: false, // Not "fixed" in the traditional sense
270
+ changes: [],
271
+ reason: `External dependency recorded as gap: ${externalClassification.userAction}`,
272
+ confidence: 0,
273
+ fixer_name: this.name,
274
+ problem_code: problem.code,
275
+ external_dep_gap: gapResult,
276
+ };
277
+ }
278
+ }
279
+ // ============================================================
280
+ // L5 INVALID PARAMETER FIXER
281
+ // ============================================================
282
+ /**
283
+ * L5InvalidParameterFixer - Resets invalid parameter values to defaults
284
+ *
285
+ * Handles L5_INVALID_PARAMETER_VALUE problems by:
286
+ * 1. Looking up valid options from catalog
287
+ * 2. Resetting to default_value if available
288
+ * 3. Using first valid option as fallback
289
+ *
290
+ * Confidence: 0.70 (moderate - user intent unclear)
291
+ */
292
+ export class L5InvalidParameterFixer {
293
+ name = 'L5InvalidParameterFixer';
294
+ description = 'Resets invalid parameter values to catalog defaults';
295
+ supportedCodes = ['L5_INVALID_PARAMETER_VALUE'];
296
+ minConfidence = 0.70;
297
+ catalogCache = null;
298
+ setCatalogCache(cache) {
299
+ this.catalogCache = cache;
300
+ }
301
+ canFix(problem) {
302
+ return problem.level === 'L5' && problem.code === 'L5_INVALID_PARAMETER_VALUE';
303
+ }
304
+ fix(workflow, problem) {
305
+ if (!this.canFix(problem)) {
306
+ return this.createFailure(problem, 'Problem does not match L5 INVALID_PARAMETER_VALUE');
307
+ }
308
+ const nodeIndex = this.findNodeIndex(workflow, problem);
309
+ if (nodeIndex === -1) {
310
+ return this.createFailure(problem, 'Node not found in workflow');
311
+ }
312
+ const parameterName = this.extractParameterName(problem);
313
+ if (!parameterName) {
314
+ return this.createFailure(problem, 'Could not determine parameter name');
315
+ }
316
+ const node = workflow.nodes[nodeIndex];
317
+ const currentValue = this.getNestedValue(node.parameters || {}, parameterName);
318
+ // Determine default value from problem details or catalog
319
+ let defaultValue = undefined;
320
+ // Check problem details for default
321
+ if (problem.details?.default_value !== undefined) {
322
+ defaultValue = problem.details.default_value;
323
+ }
324
+ // Check problem details for valid options
325
+ else if (problem.details?.valid_options && Array.isArray(problem.details.valid_options)) {
326
+ defaultValue = problem.details.valid_options[0];
327
+ }
328
+ if (defaultValue === undefined) {
329
+ return this.createFailure(problem, `No default value available for parameter "${parameterName}"`);
330
+ }
331
+ // Apply fix
332
+ const fixedWorkflow = cloneWorkflow(workflow);
333
+ const fixedNode = fixedWorkflow.nodes[nodeIndex];
334
+ if (!fixedNode.parameters) {
335
+ fixedNode.parameters = {};
336
+ }
337
+ this.setNestedValue(fixedNode.parameters, parameterName, defaultValue);
338
+ const change = {
339
+ change_type: 'parameter_update',
340
+ node_id: node.id,
341
+ node_name: node.name,
342
+ field: `parameters.${parameterName}`,
343
+ old_value: currentValue,
344
+ new_value: defaultValue,
345
+ confidence: 0.70,
346
+ description: `Reset invalid parameter "${parameterName}" from ${JSON.stringify(currentValue)} to ${JSON.stringify(defaultValue)}`,
347
+ };
348
+ logger.info('L5InvalidParameterFixer applied fix', {
349
+ node_id: node.id,
350
+ parameter: parameterName,
351
+ old_value: currentValue,
352
+ new_value: defaultValue,
353
+ });
354
+ return {
355
+ success: true,
356
+ fixedWorkflow,
357
+ changes: [change],
358
+ confidence: 0.70,
359
+ fixer_name: this.name,
360
+ problem_code: problem.code,
361
+ };
362
+ }
363
+ findNodeIndex(workflow, problem) {
364
+ if (problem.node_id) {
365
+ const idx = workflow.nodes.findIndex((n) => n.id === problem.node_id);
366
+ if (idx !== -1)
367
+ return idx;
368
+ }
369
+ if (problem.node_name) {
370
+ const idx = workflow.nodes.findIndex((n) => n.name === problem.node_name);
371
+ if (idx !== -1)
372
+ return idx;
373
+ }
374
+ if (problem.path) {
375
+ const idx = extractNodeIndex(problem.path);
376
+ if (idx >= 0 && idx < workflow.nodes.length)
377
+ return idx;
378
+ }
379
+ return -1;
380
+ }
381
+ extractParameterName(problem) {
382
+ if (problem.details?.parameter_name) {
383
+ return problem.details.parameter_name;
384
+ }
385
+ if (problem.path) {
386
+ return extractParameterFromPath(problem.path);
387
+ }
388
+ return '';
389
+ }
390
+ getNestedValue(obj, path) {
391
+ const parts = path.split('.');
392
+ let current = obj;
393
+ for (const part of parts) {
394
+ if (current === null || current === undefined || typeof current !== 'object') {
395
+ return undefined;
396
+ }
397
+ current = current[part];
398
+ }
399
+ return current;
400
+ }
401
+ setNestedValue(obj, path, value) {
402
+ const parts = path.split('.');
403
+ let current = obj;
404
+ for (let i = 0; i < parts.length - 1; i++) {
405
+ const part = parts[i];
406
+ if (!current[part] || typeof current[part] !== 'object') {
407
+ current[part] = {};
408
+ }
409
+ current = current[part];
410
+ }
411
+ current[parts[parts.length - 1]] = value;
412
+ }
413
+ createFailure(problem, reason) {
414
+ return {
415
+ success: false,
416
+ changes: [],
417
+ reason,
418
+ confidence: 0,
419
+ fixer_name: this.name,
420
+ problem_code: problem.code,
421
+ };
422
+ }
423
+ }
424
+ // ============================================================
425
+ // L5 UNKNOWN PARAMETER FIXER
426
+ // ============================================================
427
+ /**
428
+ * L5UnknownParameterFixer - Removes parameters not in node schema
429
+ *
430
+ * Handles L5_UNKNOWN_PARAMETER problems by:
431
+ * 1. Identifying parameters not defined in node's operation schema
432
+ * 2. Removing the unknown parameter from node.parameters
433
+ *
434
+ * Confidence: 0.80 (safe - removes likely typos or deprecated params)
435
+ */
436
+ export class L5UnknownParameterFixer {
437
+ name = 'L5UnknownParameterFixer';
438
+ description = 'Removes parameters not defined in node schema';
439
+ supportedCodes = ['L5_UNKNOWN_PARAMETER'];
440
+ minConfidence = 0.80;
441
+ canFix(problem) {
442
+ return problem.level === 'L5' && problem.code === 'L5_UNKNOWN_PARAMETER';
443
+ }
444
+ fix(workflow, problem) {
445
+ if (!this.canFix(problem)) {
446
+ return this.createFailure(problem, 'Problem does not match L5 UNKNOWN_PARAMETER');
447
+ }
448
+ const nodeIndex = this.findNodeIndex(workflow, problem);
449
+ if (nodeIndex === -1) {
450
+ return this.createFailure(problem, 'Node not found in workflow');
451
+ }
452
+ const parameterName = this.extractParameterName(problem);
453
+ if (!parameterName) {
454
+ return this.createFailure(problem, 'Could not determine parameter name');
455
+ }
456
+ const node = workflow.nodes[nodeIndex];
457
+ const currentValue = this.getNestedValue(node.parameters || {}, parameterName);
458
+ // Apply fix
459
+ const fixedWorkflow = cloneWorkflow(workflow);
460
+ const fixedNode = fixedWorkflow.nodes[nodeIndex];
461
+ if (!fixedNode.parameters) {
462
+ return this.createFailure(problem, 'Node has no parameters to remove');
463
+ }
464
+ // Remove the unknown parameter
465
+ const removed = this.deleteNestedValue(fixedNode.parameters, parameterName);
466
+ if (!removed) {
467
+ return this.createFailure(problem, `Parameter "${parameterName}" not found in node`);
468
+ }
469
+ const change = {
470
+ change_type: 'parameter_update',
471
+ node_id: node.id,
472
+ node_name: node.name,
473
+ field: `parameters.${parameterName}`,
474
+ old_value: currentValue,
475
+ new_value: undefined,
476
+ confidence: 0.80,
477
+ description: `Removed unknown parameter "${parameterName}" (was: ${JSON.stringify(currentValue)})`,
478
+ };
479
+ logger.info('L5UnknownParameterFixer applied fix', {
480
+ node_id: node.id,
481
+ parameter: parameterName,
482
+ removed_value: currentValue,
483
+ });
484
+ return {
485
+ success: true,
486
+ fixedWorkflow,
487
+ changes: [change],
488
+ confidence: 0.80,
489
+ fixer_name: this.name,
490
+ problem_code: problem.code,
491
+ };
492
+ }
493
+ findNodeIndex(workflow, problem) {
494
+ if (problem.node_id) {
495
+ const idx = workflow.nodes.findIndex((n) => n.id === problem.node_id);
496
+ if (idx !== -1)
497
+ return idx;
498
+ }
499
+ if (problem.node_name) {
500
+ const idx = workflow.nodes.findIndex((n) => n.name === problem.node_name);
501
+ if (idx !== -1)
502
+ return idx;
503
+ }
504
+ if (problem.path) {
505
+ const idx = extractNodeIndex(problem.path);
506
+ if (idx >= 0 && idx < workflow.nodes.length)
507
+ return idx;
508
+ }
509
+ return -1;
510
+ }
511
+ extractParameterName(problem) {
512
+ if (problem.details?.parameter_name) {
513
+ return problem.details.parameter_name;
514
+ }
515
+ if (problem.path) {
516
+ return extractParameterFromPath(problem.path);
517
+ }
518
+ return '';
519
+ }
520
+ getNestedValue(obj, path) {
521
+ const parts = path.split('.');
522
+ let current = obj;
523
+ for (const part of parts) {
524
+ if (current === null || current === undefined || typeof current !== 'object') {
525
+ return undefined;
526
+ }
527
+ current = current[part];
528
+ }
529
+ return current;
530
+ }
531
+ deleteNestedValue(obj, path) {
532
+ const parts = path.split('.');
533
+ let current = obj;
534
+ // Navigate to parent of target
535
+ for (let i = 0; i < parts.length - 1; i++) {
536
+ const part = parts[i];
537
+ if (!current[part] || typeof current[part] !== 'object') {
538
+ return false;
539
+ }
540
+ current = current[part];
541
+ }
542
+ const lastPart = parts[parts.length - 1];
543
+ if (lastPart in current) {
544
+ delete current[lastPart];
545
+ return true;
546
+ }
547
+ return false;
548
+ }
549
+ createFailure(problem, reason) {
550
+ return {
551
+ success: false,
552
+ changes: [],
553
+ reason,
554
+ confidence: 0,
555
+ fixer_name: this.name,
556
+ problem_code: problem.code,
557
+ };
558
+ }
559
+ }
560
+ // ============================================================
561
+ // EXPORTS
562
+ // ============================================================
563
+ // Export singleton instances
564
+ export const l5MissingParameterFixer = new L5MissingParameterFixer();
565
+ export const l5InvalidParameterFixer = new L5InvalidParameterFixer();
566
+ export const l5UnknownParameterFixer = new L5UnknownParameterFixer();
567
+ /**
568
+ * All L5 parameter fixers for convenient import
569
+ */
570
+ export const l5ParameterFixers = [
571
+ l5MissingParameterFixer,
572
+ l5InvalidParameterFixer,
573
+ l5UnknownParameterFixer,
574
+ ];
575
+ //# sourceMappingURL=l5-parameter-fixer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"l5-parameter-fixer.js","sourceRoot":"","sources":["../../../src/autofix/suggestion-fixers/l5-parameter-fixer.ts"],"names":[],"mappings":"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"}