@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.
- package/AGENT_INSTALL.md +223 -0
- package/CHANGELOG.md +38 -0
- package/LICENSE +21 -0
- package/README.md +187 -0
- package/dist/autofix/suggestion-fixers/deprecated-node-fixer.js +465 -0
- package/dist/autofix/suggestion-fixers/deprecated-node-fixer.js.map +1 -0
- package/dist/autofix/suggestion-fixers/fixer-registry.js +495 -0
- package/dist/autofix/suggestion-fixers/fixer-registry.js.map +1 -0
- package/dist/autofix/suggestion-fixers/l1-structure-fixer.js +639 -0
- package/dist/autofix/suggestion-fixers/l1-structure-fixer.js.map +1 -0
- package/dist/autofix/suggestion-fixers/l4-connection-fixer.js +449 -0
- package/dist/autofix/suggestion-fixers/l4-connection-fixer.js.map +1 -0
- package/dist/autofix/suggestion-fixers/l5-parameter-fixer.js +575 -0
- package/dist/autofix/suggestion-fixers/l5-parameter-fixer.js.map +1 -0
- package/dist/autofix/suggestion-fixers/l5-typeversion-fixer.js +431 -0
- package/dist/autofix/suggestion-fixers/l5-typeversion-fixer.js.map +1 -0
- package/dist/autofix/suggestion-fixers/l5-webhook-path-fixer.js +356 -0
- package/dist/autofix/suggestion-fixers/l5-webhook-path-fixer.js.map +1 -0
- package/dist/autofix/suggestion-fixers/l6-ai-tool-variant-fixer.js +618 -0
- package/dist/autofix/suggestion-fixers/l6-ai-tool-variant-fixer.js.map +1 -0
- package/dist/autofix/suggestion-fixers/l6-pattern-fixer.js +1475 -0
- package/dist/autofix/suggestion-fixers/l6-pattern-fixer.js.map +1 -0
- package/dist/autofix/suggestion-fixers/llm-fixer.js +716 -0
- package/dist/autofix/suggestion-fixers/llm-fixer.js.map +1 -0
- package/dist/autofix/suggestion-fixers/missing-credential-fixer.js +336 -0
- package/dist/autofix/suggestion-fixers/missing-credential-fixer.js.map +1 -0
- package/dist/autofix/suggestion-fixers/types.js +29 -0
- package/dist/autofix/suggestion-fixers/types.js.map +1 -0
- package/dist/autofix/suggestion-fixers/typo-fixer.js +197 -0
- package/dist/autofix/suggestion-fixers/typo-fixer.js.map +1 -0
- package/dist/classification/certification-engine.js +208 -0
- package/dist/classification/certification-engine.js.map +1 -0
- package/dist/classification/feedback-collector.js +516 -0
- package/dist/classification/feedback-collector.js.map +1 -0
- package/dist/classification/l5-parameter-analyzer.js +670 -0
- package/dist/classification/l5-parameter-analyzer.js.map +1 -0
- package/dist/classification/l6-graph-analyzer.js +613 -0
- package/dist/classification/l6-graph-analyzer.js.map +1 -0
- package/dist/classification/severity-classifier.js +237 -0
- package/dist/classification/severity-classifier.js.map +1 -0
- package/dist/config/env.js +280 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/env.schema.js +234 -0
- package/dist/config/env.schema.js.map +1 -0
- package/dist/config/scraperEnv.js +55 -0
- package/dist/config/scraperEnv.js.map +1 -0
- package/dist/db/postgresClient.js +38 -0
- package/dist/db/postgresClient.js.map +1 -0
- package/dist/db/scraperDb.js +6 -0
- package/dist/db/scraperDb.js.map +1 -0
- package/dist/db/scraperPostgresClient.js +118 -0
- package/dist/db/scraperPostgresClient.js.map +1 -0
- package/dist/db/validationRepository.js +55 -0
- package/dist/db/validationRepository.js.map +1 -0
- package/dist/db/validatorPostgresClient.js +248 -0
- package/dist/db/validatorPostgresClient.js.map +1 -0
- package/dist/db/workflowInstanceMappingRepository.js +128 -0
- package/dist/db/workflowInstanceMappingRepository.js.map +1 -0
- package/dist/errors/AppError.js +156 -0
- package/dist/errors/AppError.js.map +1 -0
- package/dist/errors/index.js +7 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/factory/error-to-problem-mappers.js +385 -0
- package/dist/factory/error-to-problem-mappers.js.map +1 -0
- package/dist/factory/gap-recorder.js +260 -0
- package/dist/factory/gap-recorder.js.map +1 -0
- package/dist/factory/problem-recorder.js +94 -0
- package/dist/factory/problem-recorder.js.map +1 -0
- package/dist/factory/warning-to-gap-mappers.js +493 -0
- package/dist/factory/warning-to-gap-mappers.js.map +1 -0
- package/dist/factory/workflow-normalizer.js +247 -0
- package/dist/factory/workflow-normalizer.js.map +1 -0
- package/dist/mcp/adapters/catalog.js +13 -0
- package/dist/mcp/adapters/catalog.js.map +1 -0
- package/dist/mcp/adapters/index.js +36 -0
- package/dist/mcp/adapters/index.js.map +1 -0
- package/dist/mcp/adapters/supabase-catalog.js +467 -0
- package/dist/mcp/adapters/supabase-catalog.js.map +1 -0
- package/dist/mcp/adapters/test-catalog-adapter.js +100 -0
- package/dist/mcp/adapters/test-catalog-adapter.js.map +1 -0
- package/dist/mcp/adapters/validation.js +258 -0
- package/dist/mcp/adapters/validation.js.map +1 -0
- package/dist/mcp/build-email-workflow.js +113 -0
- package/dist/mcp/build-email-workflow.js.map +1 -0
- package/dist/mcp/config.js +22 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/formatters/errors.js +217 -0
- package/dist/mcp/formatters/errors.js.map +1 -0
- package/dist/mcp/formatters/index.js +12 -0
- package/dist/mcp/formatters/index.js.map +1 -0
- package/dist/mcp/formatters/response.js +141 -0
- package/dist/mcp/formatters/response.js.map +1 -0
- package/dist/mcp/quick-test.js +33 -0
- package/dist/mcp/quick-test.js.map +1 -0
- package/dist/mcp/server.js +70 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/test-mcp-error.js +81 -0
- package/dist/mcp/test-mcp-error.js.map +1 -0
- package/dist/mcp/test-mcp.js +80 -0
- package/dist/mcp/test-mcp.js.map +1 -0
- package/dist/mcp/tools/fixes/expression-fixes.js +166 -0
- package/dist/mcp/tools/fixes/expression-fixes.js.map +1 -0
- package/dist/mcp/tools/fixes/flow-fixes.js +155 -0
- package/dist/mcp/tools/fixes/flow-fixes.js.map +1 -0
- package/dist/mcp/tools/fixes/index.js +91 -0
- package/dist/mcp/tools/fixes/index.js.map +1 -0
- package/dist/mcp/tools/fixes/node-fixes.js +233 -0
- package/dist/mcp/tools/fixes/node-fixes.js.map +1 -0
- package/dist/mcp/tools/fixes/parameter-fixes.js +277 -0
- package/dist/mcp/tools/fixes/parameter-fixes.js.map +1 -0
- package/dist/mcp/tools/fixes/types.js +10 -0
- package/dist/mcp/tools/fixes/types.js.map +1 -0
- package/dist/mcp/tools/handlers/check-parameter.js +300 -0
- package/dist/mcp/tools/handlers/check-parameter.js.map +1 -0
- package/dist/mcp/tools/handlers/find-similar-pattern.js +121 -0
- package/dist/mcp/tools/handlers/find-similar-pattern.js.map +1 -0
- package/dist/mcp/tools/handlers/get-node-info.js +131 -0
- package/dist/mcp/tools/handlers/get-node-info.js.map +1 -0
- package/dist/mcp/tools/handlers/get-operation-schema.js +141 -0
- package/dist/mcp/tools/handlers/get-operation-schema.js.map +1 -0
- package/dist/mcp/tools/handlers/list-nodes.js +126 -0
- package/dist/mcp/tools/handlers/list-nodes.js.map +1 -0
- package/dist/mcp/tools/handlers/list-operations.js +138 -0
- package/dist/mcp/tools/handlers/list-operations.js.map +1 -0
- package/dist/mcp/tools/handlers/suggest-fix.js +120 -0
- package/dist/mcp/tools/handlers/suggest-fix.js.map +1 -0
- package/dist/mcp/tools/handlers/validate-workflow.js +92 -0
- package/dist/mcp/tools/handlers/validate-workflow.js.map +1 -0
- package/dist/mcp/tools/index.js +190 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/mcp/tools/schemas.js +195 -0
- package/dist/mcp/tools/schemas.js.map +1 -0
- package/dist/mcp/tools/validate.js +95 -0
- package/dist/mcp/tools/validate.js.map +1 -0
- package/dist/mcp/types/mcp.js +7 -0
- package/dist/mcp/types/mcp.js.map +1 -0
- package/dist/mcp/utils/timeout.js +78 -0
- package/dist/mcp/utils/timeout.js.map +1 -0
- package/dist/services/BatchProcessor.js +433 -0
- package/dist/services/BatchProcessor.js.map +1 -0
- package/dist/services/CheckpointManager.js +281 -0
- package/dist/services/CheckpointManager.js.map +1 -0
- package/dist/services/CostCalculator.js +211 -0
- package/dist/services/CostCalculator.js.map +1 -0
- package/dist/services/EmbeddingCache.js +68 -0
- package/dist/services/EmbeddingCache.js.map +1 -0
- package/dist/services/EmbeddingService.js +143 -0
- package/dist/services/EmbeddingService.js.map +1 -0
- package/dist/services/RankingService.js +81 -0
- package/dist/services/RankingService.js.map +1 -0
- package/dist/services/RedisCache.js +376 -0
- package/dist/services/RedisCache.js.map +1 -0
- package/dist/services/RedisCatalogCache.js +680 -0
- package/dist/services/RedisCatalogCache.js.map +1 -0
- package/dist/services/ResumeManager.js +252 -0
- package/dist/services/ResumeManager.js.map +1 -0
- package/dist/services/SearchService.js +282 -0
- package/dist/services/SearchService.js.map +1 -0
- package/dist/services/SemanticCatalogSearch.js +405 -0
- package/dist/services/SemanticCatalogSearch.js.map +1 -0
- package/dist/services/ValidationCache.js +157 -0
- package/dist/services/ValidationCache.js.map +1 -0
- package/dist/services/WorkflowPipelineService.js +1997 -0
- package/dist/services/WorkflowPipelineService.js.map +1 -0
- package/dist/services/catalog/index.js +34 -0
- package/dist/services/catalog/index.js.map +1 -0
- package/dist/services/catalog/interfaces.js +17 -0
- package/dist/services/catalog/interfaces.js.map +1 -0
- package/dist/services/catalog/loaders.js +169 -0
- package/dist/services/catalog/loaders.js.map +1 -0
- package/dist/services/catalog/types.js +138 -0
- package/dist/services/catalog/types.js.map +1 -0
- package/dist/services/documentation-normalization/docUrlUtils.js +88 -0
- package/dist/services/documentation-normalization/docUrlUtils.js.map +1 -0
- package/dist/services/error-quality/ErrorQualityService.js +262 -0
- package/dist/services/error-quality/ErrorQualityService.js.map +1 -0
- package/dist/services/error-quality/analyzers/CredentialAnalyzer.js +260 -0
- package/dist/services/error-quality/analyzers/CredentialAnalyzer.js.map +1 -0
- package/dist/services/error-quality/analyzers/IssuePredictor.js +380 -0
- package/dist/services/error-quality/analyzers/IssuePredictor.js.map +1 -0
- package/dist/services/error-quality/analyzers/MockCoverageAnalyzer.js +267 -0
- package/dist/services/error-quality/analyzers/MockCoverageAnalyzer.js.map +1 -0
- package/dist/services/error-quality/data/ErrorPatternSeeder.js +963 -0
- package/dist/services/error-quality/data/ErrorPatternSeeder.js.map +1 -0
- package/dist/services/error-quality/index.js +25 -0
- package/dist/services/error-quality/index.js.map +1 -0
- package/dist/services/error-quality/reports/ReportGenerator.js +343 -0
- package/dist/services/error-quality/reports/ReportGenerator.js.map +1 -0
- package/dist/services/error-quality/taxonomy/ErrorTaxonomy.js +698 -0
- package/dist/services/error-quality/taxonomy/ErrorTaxonomy.js.map +1 -0
- package/dist/services/error-quality/types.js +11 -0
- package/dist/services/error-quality/types.js.map +1 -0
- package/dist/services/progress/ProgressTracker.js +288 -0
- package/dist/services/progress/ProgressTracker.js.map +1 -0
- package/dist/services/progress/formatters.js +122 -0
- package/dist/services/progress/formatters.js.map +1 -0
- package/dist/services/progress/index.js +36 -0
- package/dist/services/progress/index.js.map +1 -0
- package/dist/services/progress/types.js +7 -0
- package/dist/services/progress/types.js.map +1 -0
- package/dist/services/search/embeddingGenerator.js +112 -0
- package/dist/services/search/embeddingGenerator.js.map +1 -0
- package/dist/types/aiCapabilities.js +7 -0
- package/dist/types/aiCapabilities.js.map +1 -0
- package/dist/types/aiConfigSchema.js +7 -0
- package/dist/types/aiConfigSchema.js.map +1 -0
- package/dist/utils/bannerLogger.js +186 -0
- package/dist/utils/bannerLogger.js.map +1 -0
- package/dist/utils/bannerService.js +23 -0
- package/dist/utils/bannerService.js.map +1 -0
- package/dist/utils/bannerServiceAdapter.js +54 -0
- package/dist/utils/bannerServiceAdapter.js.map +1 -0
- package/dist/utils/batchLogger.js +171 -0
- package/dist/utils/batchLogger.js.map +1 -0
- package/dist/utils/bottomStickyBanner.js +239 -0
- package/dist/utils/bottomStickyBanner.js.map +1 -0
- package/dist/utils/credentialMatcher.js +206 -0
- package/dist/utils/credentialMatcher.js.map +1 -0
- package/dist/utils/credentialNormalizer.js +442 -0
- package/dist/utils/credentialNormalizer.js.map +1 -0
- package/dist/utils/integratedBannerLogger.js +59 -0
- package/dist/utils/integratedBannerLogger.js.map +1 -0
- package/dist/utils/n8nSourceGit.js +195 -0
- package/dist/utils/n8nSourceGit.js.map +1 -0
- package/dist/utils/nodeTypeNormalizer.js +131 -0
- package/dist/utils/nodeTypeNormalizer.js.map +1 -0
- package/dist/utils/openaiClient.js +397 -0
- package/dist/utils/openaiClient.js.map +1 -0
- package/dist/utils/productionLogger.js +16 -0
- package/dist/utils/productionLogger.js.map +1 -0
- package/dist/utils/progressBarBanner.js +132 -0
- package/dist/utils/progressBarBanner.js.map +1 -0
- package/dist/utils/scriptHeartbeat.js +117 -0
- package/dist/utils/scriptHeartbeat.js.map +1 -0
- package/dist/utils/scriptLogger.js +125 -0
- package/dist/utils/scriptLogger.js.map +1 -0
- package/dist/utils/scriptRunner.js +95 -0
- package/dist/utils/scriptRunner.js.map +1 -0
- package/dist/utils/scriptTimeout.js +128 -0
- package/dist/utils/scriptTimeout.js.map +1 -0
- package/dist/utils/scriptWrapper.js +219 -0
- package/dist/utils/scriptWrapper.js.map +1 -0
- package/dist/utils/stickyBanner.js +226 -0
- package/dist/utils/stickyBanner.js.map +1 -0
- package/dist/utils/terminalSpinner.js +97 -0
- package/dist/utils/terminalSpinner.js.map +1 -0
- package/dist/utils/threeLineBanner.js +427 -0
- package/dist/utils/threeLineBanner.js.map +1 -0
- package/dist/utils/validatorCheckpointManager.js +170 -0
- package/dist/utils/validatorCheckpointManager.js.map +1 -0
- package/dist/utils/validatorConnectionManager.js +124 -0
- package/dist/utils/validatorConnectionManager.js.map +1 -0
- package/dist/validation/catalog.js +56 -0
- package/dist/validation/catalog.js.map +1 -0
- package/dist/validation/config/deprecated-nodes.js +234 -0
- package/dist/validation/config/deprecated-nodes.js.map +1 -0
- package/dist/validation/config/l6-severity.js +227 -0
- package/dist/validation/config/l6-severity.js.map +1 -0
- package/dist/validation/config/terminal-nodes.js +132 -0
- package/dist/validation/config/terminal-nodes.js.map +1 -0
- package/dist/validation/config/unreachable-nodes.js +67 -0
- package/dist/validation/config/unreachable-nodes.js.map +1 -0
- package/dist/validation/core.js +47 -0
- package/dist/validation/core.js.map +1 -0
- package/dist/validation/docExtraction.js +12 -0
- package/dist/validation/docExtraction.js.map +1 -0
- package/dist/validation/dryRunMockRunner.js +128 -0
- package/dist/validation/dryRunMockRunner.js.map +1 -0
- package/dist/validation/fixtureEngine.js +61 -0
- package/dist/validation/fixtureEngine.js.map +1 -0
- package/dist/validation/index.js +15 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/k-levels/k2-blockers.js +222 -0
- package/dist/validation/k-levels/k2-blockers.js.map +1 -0
- package/dist/validation/l1-structure.js +296 -0
- package/dist/validation/l1-structure.js.map +1 -0
- package/dist/validation/l2-nodes.js +282 -0
- package/dist/validation/l2-nodes.js.map +1 -0
- package/dist/validation/l3-credentials.js +322 -0
- package/dist/validation/l3-credentials.js.map +1 -0
- package/dist/validation/l4-connections.js +698 -0
- package/dist/validation/l4-connections.js.map +1 -0
- package/dist/validation/l5-parameters.js +803 -0
- package/dist/validation/l5-parameters.js.map +1 -0
- package/dist/validation/l6-checks/ai-tool-variants.js +407 -0
- package/dist/validation/l6-checks/ai-tool-variants.js.map +1 -0
- package/dist/validation/l6-checks/catalog-checks.js +260 -0
- package/dist/validation/l6-checks/catalog-checks.js.map +1 -0
- package/dist/validation/l6-checks/data-contracts.js +197 -0
- package/dist/validation/l6-checks/data-contracts.js.map +1 -0
- package/dist/validation/l6-checks/deprecation.js +133 -0
- package/dist/validation/l6-checks/deprecation.js.map +1 -0
- package/dist/validation/l6-checks/error-handling.js +193 -0
- package/dist/validation/l6-checks/error-handling.js.map +1 -0
- package/dist/validation/l6-checks/expression-syntax.js +387 -0
- package/dist/validation/l6-checks/expression-syntax.js.map +1 -0
- package/dist/validation/l6-checks/flow-integrity.js +504 -0
- package/dist/validation/l6-checks/flow-integrity.js.map +1 -0
- package/dist/validation/l6-checks/index.js +106 -0
- package/dist/validation/l6-checks/index.js.map +1 -0
- package/dist/validation/l6-checks/loops.js +370 -0
- package/dist/validation/l6-checks/loops.js.map +1 -0
- package/dist/validation/l6-checks/performance.js +182 -0
- package/dist/validation/l6-checks/performance.js.map +1 -0
- package/dist/validation/l6-checks/security.js +273 -0
- package/dist/validation/l6-checks/security.js.map +1 -0
- package/dist/validation/l6-patterns.js +472 -0
- package/dist/validation/l6-patterns.js.map +1 -0
- package/dist/validation/mockLevelResolver.js +95 -0
- package/dist/validation/mockLevelResolver.js.map +1 -0
- package/dist/validation/n8nApiClient.js +21 -0
- package/dist/validation/n8nApiClient.js.map +1 -0
- package/dist/validation/n8nCli.js +87 -0
- package/dist/validation/n8nCli.js.map +1 -0
- package/dist/validation/types.js +8 -0
- package/dist/validation/types.js.map +1 -0
- package/dist/validation/usageStats.js +82 -0
- package/dist/validation/usageStats.js.map +1 -0
- 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":"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"}
|