n8n-mcp 2.11.3 → 2.13.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/.env.example +26 -0
- package/README.md +8 -6
- package/data/nodes.db +0 -0
- package/dist/config/n8n-api.d.ts +6 -0
- package/dist/config/n8n-api.d.ts.map +1 -1
- package/dist/config/n8n-api.js +12 -0
- package/dist/config/n8n-api.js.map +1 -1
- package/dist/http-server-single-session.d.ts +6 -1
- package/dist/http-server-single-session.d.ts.map +1 -1
- package/dist/http-server-single-session.js +116 -4
- package/dist/http-server-single-session.js.map +1 -1
- package/dist/mcp/handlers-n8n-manager.d.ts +22 -17
- package/dist/mcp/handlers-n8n-manager.d.ts.map +1 -1
- package/dist/mcp/handlers-n8n-manager.js +255 -46
- package/dist/mcp/handlers-n8n-manager.js.map +1 -1
- package/dist/mcp/handlers-workflow-diff.d.ts +2 -1
- package/dist/mcp/handlers-workflow-diff.d.ts.map +1 -1
- package/dist/mcp/handlers-workflow-diff.js +2 -2
- package/dist/mcp/handlers-workflow-diff.js.map +1 -1
- package/dist/mcp/server.d.ts +3 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +41 -22
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tool-docs/index.d.ts.map +1 -1
- package/dist/mcp/tool-docs/index.js +1 -0
- package/dist/mcp/tool-docs/index.js.map +1 -1
- package/dist/mcp/tool-docs/validation/validate-workflow.js +1 -1
- package/dist/mcp/tool-docs/validation/validate-workflow.js.map +1 -1
- package/dist/mcp/tool-docs/workflow_management/index.d.ts +1 -0
- package/dist/mcp/tool-docs/workflow_management/index.d.ts.map +1 -1
- package/dist/mcp/tool-docs/workflow_management/index.js +3 -1
- package/dist/mcp/tool-docs/workflow_management/index.js.map +1 -1
- package/dist/mcp/tool-docs/workflow_management/n8n-autofix-workflow.d.ts +3 -0
- package/dist/mcp/tool-docs/workflow_management/n8n-autofix-workflow.d.ts.map +1 -0
- package/dist/mcp/tool-docs/workflow_management/n8n-autofix-workflow.js +127 -0
- package/dist/mcp/tool-docs/workflow_management/n8n-autofix-workflow.js.map +1 -0
- package/dist/mcp/tool-docs/workflow_management/n8n-validate-workflow.js +1 -1
- package/dist/mcp/tool-docs/workflow_management/n8n-validate-workflow.js.map +1 -1
- package/dist/mcp/tools-n8n-manager.d.ts.map +1 -1
- package/dist/mcp/tools-n8n-manager.js +35 -0
- package/dist/mcp/tools-n8n-manager.js.map +1 -1
- package/dist/mcp-engine.d.ts +2 -1
- package/dist/mcp-engine.d.ts.map +1 -1
- package/dist/mcp-engine.js +2 -2
- package/dist/mcp-engine.js.map +1 -1
- package/dist/scripts/debug-http-search.d.ts +3 -0
- package/dist/scripts/debug-http-search.d.ts.map +1 -0
- package/dist/scripts/debug-http-search.js +57 -0
- package/dist/scripts/debug-http-search.js.map +1 -0
- package/dist/scripts/sanitize-templates.js +11 -1
- package/dist/scripts/sanitize-templates.js.map +1 -1
- package/dist/scripts/test-autofix-documentation.d.ts +3 -0
- package/dist/scripts/test-autofix-documentation.d.ts.map +1 -0
- package/dist/scripts/test-autofix-documentation.js +103 -0
- package/dist/scripts/test-autofix-documentation.js.map +1 -0
- package/dist/scripts/test-autofix-workflow.d.ts +2 -0
- package/dist/scripts/test-autofix-workflow.d.ts.map +1 -0
- package/dist/scripts/test-autofix-workflow.js +223 -0
- package/dist/scripts/test-autofix-workflow.js.map +1 -0
- package/dist/scripts/test-node-suggestions.d.ts +3 -0
- package/dist/scripts/test-node-suggestions.d.ts.map +1 -0
- package/dist/scripts/test-node-suggestions.js +165 -0
- package/dist/scripts/test-node-suggestions.js.map +1 -0
- package/dist/scripts/test-summary.d.ts +3 -0
- package/dist/scripts/test-summary.d.ts.map +1 -0
- package/dist/scripts/test-summary.js +77 -0
- package/dist/scripts/test-summary.js.map +1 -0
- package/dist/scripts/test-validation-parity.d.ts +2 -0
- package/dist/scripts/test-validation-parity.d.ts.map +1 -0
- package/dist/scripts/test-validation-parity.js +153 -0
- package/dist/scripts/test-validation-parity.js.map +1 -0
- package/dist/scripts/test-webhook-autofix.d.ts +3 -0
- package/dist/scripts/test-webhook-autofix.d.ts.map +1 -0
- package/dist/scripts/test-webhook-autofix.js +117 -0
- package/dist/scripts/test-webhook-autofix.js.map +1 -0
- package/dist/services/confidence-scorer.d.ts +24 -0
- package/dist/services/confidence-scorer.d.ts.map +1 -0
- package/dist/services/confidence-scorer.js +139 -0
- package/dist/services/confidence-scorer.js.map +1 -0
- package/dist/services/expression-format-validator.d.ts +33 -0
- package/dist/services/expression-format-validator.d.ts.map +1 -0
- package/dist/services/expression-format-validator.js +209 -0
- package/dist/services/expression-format-validator.js.map +1 -0
- package/dist/services/node-similarity-service.d.ts +51 -0
- package/dist/services/node-similarity-service.d.ts.map +1 -0
- package/dist/services/node-similarity-service.js +335 -0
- package/dist/services/node-similarity-service.js.map +1 -0
- package/dist/services/universal-expression-validator.d.ts +20 -0
- package/dist/services/universal-expression-validator.d.ts.map +1 -0
- package/dist/services/universal-expression-validator.js +192 -0
- package/dist/services/universal-expression-validator.js.map +1 -0
- package/dist/services/workflow-auto-fixer.d.ts +65 -0
- package/dist/services/workflow-auto-fixer.d.ts.map +1 -0
- package/dist/services/workflow-auto-fixer.js +394 -0
- package/dist/services/workflow-auto-fixer.js.map +1 -0
- package/dist/services/workflow-ownership.d.ts +35 -0
- package/dist/services/workflow-ownership.d.ts.map +1 -0
- package/dist/services/workflow-ownership.js +195 -0
- package/dist/services/workflow-ownership.js.map +1 -0
- package/dist/services/workflow-validator.d.ts +2 -1
- package/dist/services/workflow-validator.d.ts.map +1 -1
- package/dist/services/workflow-validator.js +131 -90
- package/dist/services/workflow-validator.js.map +1 -1
- package/dist/types/instance-context.d.ts +15 -0
- package/dist/types/instance-context.d.ts.map +1 -0
- package/dist/types/instance-context.js +127 -0
- package/dist/types/instance-context.js.map +1 -0
- package/dist/types/n8n-api.d.ts +6 -0
- package/dist/types/n8n-api.d.ts.map +1 -1
- package/dist/types/n8n-api.js.map +1 -1
- package/dist/utils/cache-utils.d.ts +58 -0
- package/dist/utils/cache-utils.d.ts.map +1 -0
- package/dist/utils/cache-utils.js +243 -0
- package/dist/utils/cache-utils.js.map +1 -0
- package/dist/utils/node-type-utils.d.ts +9 -0
- package/dist/utils/node-type-utils.d.ts.map +1 -0
- package/dist/utils/node-type-utils.js +78 -0
- package/dist/utils/node-type-utils.js.map +1 -0
- package/dist/utils/template-sanitizer.d.ts.map +1 -1
- package/dist/utils/template-sanitizer.js +6 -3
- package/dist/utils/template-sanitizer.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const mcp_engine_1 = require("../mcp-engine");
|
|
4
|
+
const logger_1 = require("../utils/logger");
|
|
5
|
+
const logger = new logger_1.Logger({ prefix: '[ValidationParity]' });
|
|
6
|
+
async function testValidationParity() {
|
|
7
|
+
const engine = new mcp_engine_1.N8NMCPEngine();
|
|
8
|
+
await engine.initialize();
|
|
9
|
+
const testWorkflow = {
|
|
10
|
+
name: 'Test Validation Parity',
|
|
11
|
+
nodes: [
|
|
12
|
+
{
|
|
13
|
+
id: 'webhook_1',
|
|
14
|
+
name: 'Webhook',
|
|
15
|
+
type: 'n8n-nodes-base.webhook',
|
|
16
|
+
typeVersion: 1.1,
|
|
17
|
+
position: [250, 300],
|
|
18
|
+
parameters: {
|
|
19
|
+
httpMethod: 'GET',
|
|
20
|
+
path: 'test-webhook',
|
|
21
|
+
responseMode: 'onReceived',
|
|
22
|
+
responseData: 'firstEntryJson'
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
id: 'http_1',
|
|
27
|
+
name: 'HTTP Request',
|
|
28
|
+
type: 'n8n-nodes-base.httpRequest',
|
|
29
|
+
typeVersion: 5.0,
|
|
30
|
+
position: [450, 300],
|
|
31
|
+
parameters: {
|
|
32
|
+
method: 'GET',
|
|
33
|
+
url: '{{ $json.webhookUrl }}',
|
|
34
|
+
sendHeaders: true,
|
|
35
|
+
headerParameters: {
|
|
36
|
+
parameters: [
|
|
37
|
+
{
|
|
38
|
+
name: 'Authorization',
|
|
39
|
+
value: '{{ $json.token }}'
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
onError: 'continueErrorOutput'
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
id: 'respond_1',
|
|
48
|
+
name: 'Respond to Webhook',
|
|
49
|
+
type: 'n8n-nodes-base.respondToWebhook',
|
|
50
|
+
typeVersion: 1.1,
|
|
51
|
+
position: [650, 300],
|
|
52
|
+
parameters: {
|
|
53
|
+
respondWith: 'json',
|
|
54
|
+
responseBody: '={{ $json }}'
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
],
|
|
58
|
+
connections: {
|
|
59
|
+
'Webhook': {
|
|
60
|
+
main: [
|
|
61
|
+
[
|
|
62
|
+
{
|
|
63
|
+
node: 'HTTP Request',
|
|
64
|
+
type: 'main',
|
|
65
|
+
index: 0
|
|
66
|
+
}
|
|
67
|
+
]
|
|
68
|
+
]
|
|
69
|
+
},
|
|
70
|
+
'HTTP Request': {
|
|
71
|
+
main: [
|
|
72
|
+
[
|
|
73
|
+
{
|
|
74
|
+
node: 'Respond to Webhook',
|
|
75
|
+
type: 'main',
|
|
76
|
+
index: 0
|
|
77
|
+
}
|
|
78
|
+
]
|
|
79
|
+
]
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
logger.info('Testing validate_workflow tool...');
|
|
84
|
+
const baseValidation = await engine.callTool('validate_workflow', {
|
|
85
|
+
workflow: testWorkflow
|
|
86
|
+
});
|
|
87
|
+
logger.info('Base validation result:', {
|
|
88
|
+
valid: baseValidation.valid,
|
|
89
|
+
errorCount: baseValidation.summary?.errorCount || 0,
|
|
90
|
+
warningCount: baseValidation.summary?.warningCount || 0
|
|
91
|
+
});
|
|
92
|
+
if (baseValidation.errors?.length > 0) {
|
|
93
|
+
logger.info('Errors found in validate_workflow:');
|
|
94
|
+
for (const error of baseValidation.errors) {
|
|
95
|
+
if (error.message.includes('missing prefix') ||
|
|
96
|
+
error.message.includes('expression format') ||
|
|
97
|
+
error.message.includes('onError') ||
|
|
98
|
+
error.message.includes('error output')) {
|
|
99
|
+
logger.info(`✓ Found expected error: ${error.message.substring(0, 100)}...`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (baseValidation.warnings?.length > 0) {
|
|
104
|
+
logger.info('Warnings found in validate_workflow:');
|
|
105
|
+
for (const warning of baseValidation.warnings) {
|
|
106
|
+
if (warning.message.includes('missing prefix') ||
|
|
107
|
+
warning.message.includes('expression format')) {
|
|
108
|
+
logger.info(`✓ Found expected warning: ${warning.message.substring(0, 100)}...`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
const capabilities = {
|
|
113
|
+
detectsMissingExpressionPrefix: false,
|
|
114
|
+
detectsErrorOutputMismatch: false,
|
|
115
|
+
detectsIncorrectErrorConfig: false
|
|
116
|
+
};
|
|
117
|
+
const allMessages = [
|
|
118
|
+
...(baseValidation.errors || []).map((e) => e.message),
|
|
119
|
+
...(baseValidation.warnings || []).map((w) => w.message)
|
|
120
|
+
];
|
|
121
|
+
for (const message of allMessages) {
|
|
122
|
+
if (message.includes('missing prefix') || message.includes('expression format')) {
|
|
123
|
+
capabilities.detectsMissingExpressionPrefix = true;
|
|
124
|
+
}
|
|
125
|
+
if (message.includes('onError') && message.includes('error output')) {
|
|
126
|
+
capabilities.detectsErrorOutputMismatch = true;
|
|
127
|
+
}
|
|
128
|
+
if (message.includes('error output configuration')) {
|
|
129
|
+
capabilities.detectsIncorrectErrorConfig = true;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
logger.info('\nValidation Capabilities Detected:', capabilities);
|
|
133
|
+
const allCapabilitiesPresent = Object.values(capabilities).every(cap => cap === true);
|
|
134
|
+
if (allCapabilitiesPresent) {
|
|
135
|
+
logger.info('\n✅ All validation capabilities are present in validate_workflow!');
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
logger.error('\n❌ Some validation capabilities are missing:');
|
|
139
|
+
for (const [key, value] of Object.entries(capabilities)) {
|
|
140
|
+
if (!value) {
|
|
141
|
+
logger.error(` - ${key}`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
logger.info('\n📝 Note: n8n_validate_workflow uses the same WorkflowValidator class');
|
|
146
|
+
logger.info(' and EnhancedConfigValidator, so it has identical capabilities.');
|
|
147
|
+
await engine.shutdown();
|
|
148
|
+
}
|
|
149
|
+
testValidationParity().catch(error => {
|
|
150
|
+
logger.error('Test failed:', error);
|
|
151
|
+
process.exit(1);
|
|
152
|
+
});
|
|
153
|
+
//# sourceMappingURL=test-validation-parity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-validation-parity.js","sourceRoot":"","sources":["../../src/scripts/test-validation-parity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-webhook-autofix.d.ts","sourceRoot":"","sources":["../../src/scripts/test-webhook-autofix.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const node_repository_1 = require("../database/node-repository");
|
|
5
|
+
const database_adapter_1 = require("../database/database-adapter");
|
|
6
|
+
const workflow_auto_fixer_1 = require("../services/workflow-auto-fixer");
|
|
7
|
+
const workflow_validator_1 = require("../services/workflow-validator");
|
|
8
|
+
const enhanced_config_validator_1 = require("../services/enhanced-config-validator");
|
|
9
|
+
const logger_1 = require("../utils/logger");
|
|
10
|
+
const path_1 = require("path");
|
|
11
|
+
const logger = new logger_1.Logger({ prefix: '[TestWebhookAutofix]' });
|
|
12
|
+
const testWorkflow = {
|
|
13
|
+
id: 'test_webhook_fix',
|
|
14
|
+
name: 'Test Webhook Autofix',
|
|
15
|
+
active: false,
|
|
16
|
+
nodes: [
|
|
17
|
+
{
|
|
18
|
+
id: '1',
|
|
19
|
+
name: 'Webhook',
|
|
20
|
+
type: 'n8n-nodes-base.webhook',
|
|
21
|
+
typeVersion: 2.1,
|
|
22
|
+
position: [250, 300],
|
|
23
|
+
parameters: {},
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
id: '2',
|
|
27
|
+
name: 'HTTP Request',
|
|
28
|
+
type: 'n8n-nodes-base.httpRequest',
|
|
29
|
+
typeVersion: 4.2,
|
|
30
|
+
position: [450, 300],
|
|
31
|
+
parameters: {
|
|
32
|
+
url: 'https://api.example.com/data',
|
|
33
|
+
method: 'GET'
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
],
|
|
37
|
+
connections: {
|
|
38
|
+
'Webhook': {
|
|
39
|
+
main: [[{
|
|
40
|
+
node: 'HTTP Request',
|
|
41
|
+
type: 'main',
|
|
42
|
+
index: 0
|
|
43
|
+
}]]
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
settings: {
|
|
47
|
+
executionOrder: 'v1'
|
|
48
|
+
},
|
|
49
|
+
staticData: undefined
|
|
50
|
+
};
|
|
51
|
+
async function testWebhookAutofix() {
|
|
52
|
+
logger.info('Testing webhook path autofixer...');
|
|
53
|
+
const dbPath = (0, path_1.join)(process.cwd(), 'data', 'nodes.db');
|
|
54
|
+
const adapter = await (0, database_adapter_1.createDatabaseAdapter)(dbPath);
|
|
55
|
+
const repository = new node_repository_1.NodeRepository(adapter);
|
|
56
|
+
const validator = new workflow_validator_1.WorkflowValidator(repository, enhanced_config_validator_1.EnhancedConfigValidator);
|
|
57
|
+
const autoFixer = new workflow_auto_fixer_1.WorkflowAutoFixer(repository);
|
|
58
|
+
logger.info('Step 1: Validating workflow to identify issues...');
|
|
59
|
+
const validationResult = await validator.validateWorkflow(testWorkflow);
|
|
60
|
+
console.log('\n📋 Validation Summary:');
|
|
61
|
+
console.log(`- Valid: ${validationResult.valid}`);
|
|
62
|
+
console.log(`- Errors: ${validationResult.errors.length}`);
|
|
63
|
+
console.log(`- Warnings: ${validationResult.warnings.length}`);
|
|
64
|
+
if (validationResult.errors.length > 0) {
|
|
65
|
+
console.log('\n❌ Errors found:');
|
|
66
|
+
validationResult.errors.forEach(error => {
|
|
67
|
+
console.log(` - [${error.nodeName || error.nodeId}] ${error.message}`);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
logger.info('\nStep 2: Generating fixes in preview mode...');
|
|
71
|
+
const fixResult = autoFixer.generateFixes(testWorkflow, validationResult, [], {
|
|
72
|
+
applyFixes: false,
|
|
73
|
+
fixTypes: ['webhook-missing-path']
|
|
74
|
+
});
|
|
75
|
+
console.log('\n🔧 Fix Results:');
|
|
76
|
+
console.log(`- Summary: ${fixResult.summary}`);
|
|
77
|
+
console.log(`- Total fixes: ${fixResult.stats.total}`);
|
|
78
|
+
console.log(`- Webhook path fixes: ${fixResult.stats.byType['webhook-missing-path']}`);
|
|
79
|
+
if (fixResult.fixes.length > 0) {
|
|
80
|
+
console.log('\n📝 Detailed Fixes:');
|
|
81
|
+
fixResult.fixes.forEach(fix => {
|
|
82
|
+
console.log(` - Node: ${fix.node}`);
|
|
83
|
+
console.log(` Field: ${fix.field}`);
|
|
84
|
+
console.log(` Type: ${fix.type}`);
|
|
85
|
+
console.log(` Before: ${fix.before || 'undefined'}`);
|
|
86
|
+
console.log(` After: ${fix.after}`);
|
|
87
|
+
console.log(` Confidence: ${fix.confidence}`);
|
|
88
|
+
console.log(` Description: ${fix.description}`);
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
if (fixResult.operations.length > 0) {
|
|
92
|
+
console.log('\n🔄 Operations to Apply:');
|
|
93
|
+
fixResult.operations.forEach(op => {
|
|
94
|
+
if (op.type === 'updateNode') {
|
|
95
|
+
console.log(` - Update Node: ${op.nodeId}`);
|
|
96
|
+
console.log(` Updates: ${JSON.stringify(op.updates, null, 2)}`);
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
if (fixResult.fixes.length > 0) {
|
|
101
|
+
const webhookFix = fixResult.fixes.find(f => f.type === 'webhook-missing-path');
|
|
102
|
+
if (webhookFix) {
|
|
103
|
+
const uuid = webhookFix.after;
|
|
104
|
+
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
105
|
+
const isValidUUID = uuidRegex.test(uuid);
|
|
106
|
+
console.log('\n✅ UUID Validation:');
|
|
107
|
+
console.log(` - Generated UUID: ${uuid}`);
|
|
108
|
+
console.log(` - Valid format: ${isValidUUID ? 'Yes' : 'No'}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
logger.info('\n✨ Webhook autofix test completed successfully!');
|
|
112
|
+
}
|
|
113
|
+
testWebhookAutofix().catch(error => {
|
|
114
|
+
logger.error('Test failed:', error);
|
|
115
|
+
process.exit(1);
|
|
116
|
+
});
|
|
117
|
+
//# sourceMappingURL=test-webhook-autofix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-webhook-autofix.js","sourceRoot":"","sources":["../../src/scripts/test-webhook-autofix.ts"],"names":[],"mappings":";;;AAMA,iEAA6D;AAC7D,mEAAqE;AACrE,yEAAoE;AACpE,uEAAmE;AACnE,qFAAgF;AAEhF,4CAAyC;AACzC,+BAA4B;AAE5B,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC,CAAC;AAG9D,MAAM,YAAY,GAAa;IAC7B,EAAE,EAAE,kBAAkB;IACtB,IAAI,EAAE,sBAAsB;IAC5B,MAAM,EAAE,KAAK;IACb,KAAK,EAAE;QACL;YACE,EAAE,EAAE,GAAG;YACP,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,wBAAwB;YAC9B,WAAW,EAAE,GAAG;YAChB,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;YACpB,UAAU,EAAE,EAAE;SACf;QACD;YACE,EAAE,EAAE,GAAG;YACP,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,4BAA4B;YAClC,WAAW,EAAE,GAAG;YAChB,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;YACpB,UAAU,EAAE;gBACV,GAAG,EAAE,8BAA8B;gBACnC,MAAM,EAAE,KAAK;aACd;SACF;KACF;IACD,WAAW,EAAE;QACX,SAAS,EAAE;YACT,IAAI,EAAE,CAAC,CAAC;wBACN,IAAI,EAAE,cAAc;wBACpB,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE,CAAC;qBACT,CAAC,CAAC;SACJ;KACF;IACD,QAAQ,EAAE;QACR,cAAc,EAAE,IAAI;KACrB;IACD,UAAU,EAAE,SAAS;CACtB,CAAC;AAEF,KAAK,UAAU,kBAAkB;IAC/B,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IAGjD,MAAM,MAAM,GAAG,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,MAAM,IAAA,wCAAqB,EAAC,MAAM,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,IAAI,gCAAc,CAAC,OAAO,CAAC,CAAC;IAG/C,MAAM,SAAS,GAAG,IAAI,sCAAiB,CAAC,UAAU,EAAE,mDAAuB,CAAC,CAAC;IAC7E,MAAM,SAAS,GAAG,IAAI,uCAAiB,CAAC,UAAU,CAAC,CAAC;IAGpD,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;IACjE,MAAM,gBAAgB,GAAG,MAAM,SAAS,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAExE,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,YAAY,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,aAAa,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,eAAe,gBAAgB,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAE/D,IAAI,gBAAgB,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACjC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACtC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;IACL,CAAC;IAGD,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;IAE7D,MAAM,SAAS,GAAG,SAAS,CAAC,aAAa,CACvC,YAAY,EACZ,gBAAgB,EAChB,EAAE,EACF;QACE,UAAU,EAAE,KAAK;QACjB,QAAQ,EAAE,CAAC,sBAAsB,CAAC;KACnC,CACF,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,cAAc,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,kBAAkB,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,yBAAyB,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;IAEvF,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACpC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC5B,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,CAAC,MAAM,IAAI,WAAW,EAAE,CAAC,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YAChC,IAAI,EAAE,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC7C,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACrE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAGD,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,sBAAsB,CAAC,CAAC;QAChF,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,IAAI,GAAG,UAAU,CAAC,KAAe,CAAC;YACxC,MAAM,SAAS,GAAG,iEAAiE,CAAC;YACpF,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEzC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,qBAAqB,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;AAClE,CAAC;AAGD,kBAAkB,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;IACjC,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface ConfidenceScore {
|
|
2
|
+
value: number;
|
|
3
|
+
reason: string;
|
|
4
|
+
factors: ConfidenceFactor[];
|
|
5
|
+
}
|
|
6
|
+
export interface ConfidenceFactor {
|
|
7
|
+
name: string;
|
|
8
|
+
weight: number;
|
|
9
|
+
matched: boolean;
|
|
10
|
+
description: string;
|
|
11
|
+
}
|
|
12
|
+
export declare class ConfidenceScorer {
|
|
13
|
+
static scoreResourceLocatorRecommendation(fieldName: string, nodeType: string, value: string): ConfidenceScore;
|
|
14
|
+
private static readonly EXACT_FIELD_MAPPINGS;
|
|
15
|
+
private static checkExactFieldMatch;
|
|
16
|
+
private static readonly FIELD_PATTERNS;
|
|
17
|
+
private static checkFieldPattern;
|
|
18
|
+
private static checkValuePattern;
|
|
19
|
+
private static readonly RESOURCE_HEAVY_NODES;
|
|
20
|
+
private static checkNodeCategory;
|
|
21
|
+
static getConfidenceLevel(score: number): 'high' | 'medium' | 'low' | 'very-low';
|
|
22
|
+
static shouldApplyRecommendation(score: number, threshold?: 'strict' | 'normal' | 'relaxed'): boolean;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=confidence-scorer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confidence-scorer.d.ts","sourceRoot":"","sources":["../../src/services/confidence-scorer.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,gBAAgB;IAI3B,MAAM,CAAC,kCAAkC,CACvC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,eAAe;IAyElB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAO1C;IAEF,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAenC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CASpC;IAEF,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAOhC,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAsBhC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAU1C;IAEF,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAWhC,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,UAAU;IAUhF,MAAM,CAAC,yBAAyB,CAC9B,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,QAAQ,GAAG,QAAQ,GAAG,SAAoB,GACpD,OAAO;CASX"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConfidenceScorer = void 0;
|
|
4
|
+
class ConfidenceScorer {
|
|
5
|
+
static scoreResourceLocatorRecommendation(fieldName, nodeType, value) {
|
|
6
|
+
const factors = [];
|
|
7
|
+
let totalWeight = 0;
|
|
8
|
+
let matchedWeight = 0;
|
|
9
|
+
const exactFieldMatch = this.checkExactFieldMatch(fieldName, nodeType);
|
|
10
|
+
factors.push({
|
|
11
|
+
name: 'exact-field-match',
|
|
12
|
+
weight: 0.5,
|
|
13
|
+
matched: exactFieldMatch,
|
|
14
|
+
description: `Field name '${fieldName}' is known to use resource locator in ${nodeType}`
|
|
15
|
+
});
|
|
16
|
+
const patternMatch = this.checkFieldPattern(fieldName);
|
|
17
|
+
factors.push({
|
|
18
|
+
name: 'field-pattern',
|
|
19
|
+
weight: 0.3,
|
|
20
|
+
matched: patternMatch,
|
|
21
|
+
description: `Field name '${fieldName}' matches common resource locator patterns`
|
|
22
|
+
});
|
|
23
|
+
const valuePattern = this.checkValuePattern(value);
|
|
24
|
+
factors.push({
|
|
25
|
+
name: 'value-pattern',
|
|
26
|
+
weight: 0.1,
|
|
27
|
+
matched: valuePattern,
|
|
28
|
+
description: 'Value contains patterns typical of resource identifiers'
|
|
29
|
+
});
|
|
30
|
+
const nodeCategory = this.checkNodeCategory(nodeType);
|
|
31
|
+
factors.push({
|
|
32
|
+
name: 'node-category',
|
|
33
|
+
weight: 0.1,
|
|
34
|
+
matched: nodeCategory,
|
|
35
|
+
description: `Node type '${nodeType}' typically uses resource locators`
|
|
36
|
+
});
|
|
37
|
+
for (const factor of factors) {
|
|
38
|
+
totalWeight += factor.weight;
|
|
39
|
+
if (factor.matched) {
|
|
40
|
+
matchedWeight += factor.weight;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const score = totalWeight > 0 ? matchedWeight / totalWeight : 0;
|
|
44
|
+
let reason;
|
|
45
|
+
if (score >= 0.8) {
|
|
46
|
+
reason = 'High confidence: Multiple strong indicators suggest resource locator format';
|
|
47
|
+
}
|
|
48
|
+
else if (score >= 0.5) {
|
|
49
|
+
reason = 'Medium confidence: Some indicators suggest resource locator format';
|
|
50
|
+
}
|
|
51
|
+
else if (score >= 0.3) {
|
|
52
|
+
reason = 'Low confidence: Weak indicators for resource locator format';
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
reason = 'Very low confidence: Minimal evidence for resource locator format';
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
value: score,
|
|
59
|
+
reason,
|
|
60
|
+
factors
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
static checkExactFieldMatch(fieldName, nodeType) {
|
|
64
|
+
const nodeBase = nodeType.split('.').pop()?.toLowerCase() || '';
|
|
65
|
+
for (const [pattern, fields] of Object.entries(this.EXACT_FIELD_MAPPINGS)) {
|
|
66
|
+
if (nodeBase === pattern || nodeBase.startsWith(`${pattern}-`)) {
|
|
67
|
+
return fields.includes(fieldName);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
static checkFieldPattern(fieldName) {
|
|
73
|
+
return this.FIELD_PATTERNS.some(pattern => pattern.test(fieldName));
|
|
74
|
+
}
|
|
75
|
+
static checkValuePattern(value) {
|
|
76
|
+
const content = value.startsWith('=') ? value.substring(1) : value;
|
|
77
|
+
if (!content.includes('{{') || !content.includes('}}')) {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
const patterns = [
|
|
81
|
+
/\{\{.*\.(id|Id|ID|key|Key|name|Name|path|Path|url|Url|uri|Uri).*\}\}/i,
|
|
82
|
+
/\{\{.*_(id|Id|ID|key|Key|name|Name|path|Path|url|Url|uri|Uri).*\}\}/i,
|
|
83
|
+
/\{\{.*(id|Id|ID|key|Key|name|Name|path|Path|url|Url|uri|Uri).*\}\}/i
|
|
84
|
+
];
|
|
85
|
+
return patterns.some(pattern => pattern.test(content));
|
|
86
|
+
}
|
|
87
|
+
static checkNodeCategory(nodeType) {
|
|
88
|
+
const nodeBase = nodeType.split('.').pop()?.toLowerCase() || '';
|
|
89
|
+
return this.RESOURCE_HEAVY_NODES.some(category => nodeBase.includes(category));
|
|
90
|
+
}
|
|
91
|
+
static getConfidenceLevel(score) {
|
|
92
|
+
if (score >= 0.8)
|
|
93
|
+
return 'high';
|
|
94
|
+
if (score >= 0.5)
|
|
95
|
+
return 'medium';
|
|
96
|
+
if (score >= 0.3)
|
|
97
|
+
return 'low';
|
|
98
|
+
return 'very-low';
|
|
99
|
+
}
|
|
100
|
+
static shouldApplyRecommendation(score, threshold = 'normal') {
|
|
101
|
+
const thresholds = {
|
|
102
|
+
strict: 0.8,
|
|
103
|
+
normal: 0.5,
|
|
104
|
+
relaxed: 0.3
|
|
105
|
+
};
|
|
106
|
+
return score >= thresholds[threshold];
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
exports.ConfidenceScorer = ConfidenceScorer;
|
|
110
|
+
ConfidenceScorer.EXACT_FIELD_MAPPINGS = {
|
|
111
|
+
'github': ['owner', 'repository', 'user', 'organization'],
|
|
112
|
+
'googlesheets': ['sheetId', 'documentId', 'spreadsheetId'],
|
|
113
|
+
'googledrive': ['fileId', 'folderId', 'driveId'],
|
|
114
|
+
'slack': ['channel', 'user', 'channelId', 'userId'],
|
|
115
|
+
'notion': ['databaseId', 'pageId', 'blockId'],
|
|
116
|
+
'airtable': ['baseId', 'tableId', 'viewId']
|
|
117
|
+
};
|
|
118
|
+
ConfidenceScorer.FIELD_PATTERNS = [
|
|
119
|
+
/^.*Id$/i,
|
|
120
|
+
/^.*Ids$/i,
|
|
121
|
+
/^.*Key$/i,
|
|
122
|
+
/^.*Name$/i,
|
|
123
|
+
/^.*Path$/i,
|
|
124
|
+
/^.*Url$/i,
|
|
125
|
+
/^.*Uri$/i,
|
|
126
|
+
/^(table|database|collection|bucket|folder|file|document|sheet|board|project|issue|user|channel|team|organization|repository|owner)$/i
|
|
127
|
+
];
|
|
128
|
+
ConfidenceScorer.RESOURCE_HEAVY_NODES = [
|
|
129
|
+
'github', 'gitlab', 'bitbucket',
|
|
130
|
+
'googlesheets', 'googledrive', 'dropbox',
|
|
131
|
+
'slack', 'discord', 'telegram',
|
|
132
|
+
'notion', 'airtable', 'baserow',
|
|
133
|
+
'jira', 'asana', 'trello', 'monday',
|
|
134
|
+
'salesforce', 'hubspot', 'pipedrive',
|
|
135
|
+
'stripe', 'paypal', 'square',
|
|
136
|
+
'aws', 'gcp', 'azure',
|
|
137
|
+
'mysql', 'postgres', 'mongodb', 'redis'
|
|
138
|
+
];
|
|
139
|
+
//# sourceMappingURL=confidence-scorer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confidence-scorer.js","sourceRoot":"","sources":["../../src/services/confidence-scorer.ts"],"names":[],"mappings":";;;AAoBA,MAAa,gBAAgB;IAI3B,MAAM,CAAC,kCAAkC,CACvC,SAAiB,EACjB,QAAgB,EAChB,KAAa;QAEb,MAAM,OAAO,GAAuB,EAAE,CAAC;QACvC,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,aAAa,GAAG,CAAC,CAAC;QAGtB,MAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,mBAAmB;YACzB,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,eAAe;YACxB,WAAW,EAAE,eAAe,SAAS,yCAAyC,QAAQ,EAAE;SACzF,CAAC,CAAC;QAGH,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,eAAe;YACrB,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,YAAY;YACrB,WAAW,EAAE,eAAe,SAAS,4CAA4C;SAClF,CAAC,CAAC;QAGH,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,eAAe;YACrB,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,YAAY;YACrB,WAAW,EAAE,yDAAyD;SACvE,CAAC,CAAC;QAGH,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,eAAe;YACrB,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,YAAY;YACrB,WAAW,EAAE,cAAc,QAAQ,oCAAoC;SACxE,CAAC,CAAC;QAGH,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC;YAC7B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,aAAa,IAAI,MAAM,CAAC,MAAM,CAAC;YACjC,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QAGhE,IAAI,MAAc,CAAC;QACnB,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;YACjB,MAAM,GAAG,6EAA6E,CAAC;QACzF,CAAC;aAAM,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;YACxB,MAAM,GAAG,oEAAoE,CAAC;QAChF,CAAC;aAAM,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;YACxB,MAAM,GAAG,6DAA6D,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,mEAAmE,CAAC;QAC/E,CAAC;QAED,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,MAAM;YACN,OAAO;SACR,CAAC;IACJ,CAAC;IAcO,MAAM,CAAC,oBAAoB,CAAC,SAAiB,EAAE,QAAgB;QACrE,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QAEhE,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC;YAC1E,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC;gBAC/D,OAAO,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAgBO,MAAM,CAAC,iBAAiB,CAAC,SAAiB;QAChD,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACtE,CAAC;IAKO,MAAM,CAAC,iBAAiB,CAAC,KAAa;QAE5C,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAGnE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACvD,OAAO,KAAK,CAAC;QACf,CAAC;QAGD,MAAM,QAAQ,GAAG;YACf,uEAAuE;YACvE,sEAAsE;YACtE,qEAAqE;SACtE,CAAC;QAEF,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACzD,CAAC;IAiBO,MAAM,CAAC,iBAAiB,CAAC,QAAgB;QAC/C,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QAEhE,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAC/C,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAC5B,CAAC;IACJ,CAAC;IAKD,MAAM,CAAC,kBAAkB,CAAC,KAAa;QACrC,IAAI,KAAK,IAAI,GAAG;YAAE,OAAO,MAAM,CAAC;QAChC,IAAI,KAAK,IAAI,GAAG;YAAE,OAAO,QAAQ,CAAC;QAClC,IAAI,KAAK,IAAI,GAAG;YAAE,OAAO,KAAK,CAAC;QAC/B,OAAO,UAAU,CAAC;IACpB,CAAC;IAKD,MAAM,CAAC,yBAAyB,CAC9B,KAAa,EACb,YAA6C,QAAQ;QAErD,MAAM,UAAU,GAAG;YACjB,MAAM,EAAE,GAAG;YACX,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,GAAG;SACb,CAAC;QAEF,OAAO,KAAK,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;;AA7LH,4CA8LC;AA7GyB,qCAAoB,GAA6B;IACvE,QAAQ,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,CAAC;IACzD,cAAc,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,eAAe,CAAC;IAC1D,aAAa,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC;IAChD,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC;IACnD,QAAQ,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,SAAS,CAAC;IAC7C,UAAU,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;CAC5C,CAAC;AAiBsB,+BAAc,GAAG;IACvC,SAAS;IACT,UAAU;IACV,UAAU;IACV,WAAW;IACX,WAAW;IACX,UAAU;IACV,UAAU;IACV,sIAAsI;CACvI,CAAC;AA+BsB,qCAAoB,GAAG;IAC7C,QAAQ,EAAE,QAAQ,EAAE,WAAW;IAC/B,cAAc,EAAE,aAAa,EAAE,SAAS;IACxC,OAAO,EAAE,SAAS,EAAE,UAAU;IAC9B,QAAQ,EAAE,UAAU,EAAE,SAAS;IAC/B,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ;IACnC,YAAY,EAAE,SAAS,EAAE,WAAW;IACpC,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAC5B,KAAK,EAAE,KAAK,EAAE,OAAO;IACrB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO;CACxC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export interface ExpressionFormatIssue {
|
|
2
|
+
fieldPath: string;
|
|
3
|
+
currentValue: any;
|
|
4
|
+
correctedValue: any;
|
|
5
|
+
issueType: 'missing-prefix' | 'needs-resource-locator' | 'invalid-rl-structure' | 'mixed-format';
|
|
6
|
+
explanation: string;
|
|
7
|
+
severity: 'error' | 'warning';
|
|
8
|
+
confidence?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface ResourceLocatorField {
|
|
11
|
+
__rl: true;
|
|
12
|
+
value: string;
|
|
13
|
+
mode: string;
|
|
14
|
+
}
|
|
15
|
+
export interface ValidationContext {
|
|
16
|
+
nodeType: string;
|
|
17
|
+
nodeName: string;
|
|
18
|
+
nodeId?: string;
|
|
19
|
+
}
|
|
20
|
+
export declare class ExpressionFormatValidator {
|
|
21
|
+
private static readonly VALID_RL_MODES;
|
|
22
|
+
private static readonly MAX_RECURSION_DEPTH;
|
|
23
|
+
private static readonly EXPRESSION_PREFIX;
|
|
24
|
+
private static readonly RESOURCE_LOCATOR_FIELDS;
|
|
25
|
+
private static shouldUseResourceLocator;
|
|
26
|
+
private static isResourceLocator;
|
|
27
|
+
private static generateCorrection;
|
|
28
|
+
static validateAndFix(value: any, fieldPath: string, context: ValidationContext): ExpressionFormatIssue | null;
|
|
29
|
+
static validateNodeParameters(parameters: any, context: ValidationContext): ExpressionFormatIssue[];
|
|
30
|
+
private static validateRecursive;
|
|
31
|
+
static formatErrorMessage(issue: ExpressionFormatIssue, context: ValidationContext): string;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=expression-format-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expression-format-validator.d.ts","sourceRoot":"","sources":["../../src/services/expression-format-validator.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,GAAG,CAAC;IAClB,cAAc,EAAE,GAAG,CAAC;IACpB,SAAS,EAAE,gBAAgB,GAAG,wBAAwB,GAAG,sBAAsB,GAAG,cAAc,CAAC;IACjG,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,yBAAyB;IACpC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAwD;IAC9F,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAO;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAO;IAMhD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAmB7C;IAMF,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAoBvC,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAoBhC,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAsBjC,MAAM,CAAC,cAAc,CACnB,KAAK,EAAE,GAAG,EACV,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,GACzB,qBAAqB,GAAG,IAAI;IAgH/B,MAAM,CAAC,sBAAsB,CAC3B,UAAU,EAAE,GAAG,EACf,OAAO,EAAE,iBAAiB,GACzB,qBAAqB,EAAE;IAY1B,OAAO,CAAC,MAAM,CAAC,iBAAiB;IA0DhC,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,qBAAqB,EAAE,OAAO,EAAE,iBAAiB,GAAG,MAAM;CAoB5F"}
|