@exaudeus/workrail 0.0.2-beta.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/README.md +223 -0
- package/dist/application/app.d.ts +32 -0
- package/dist/application/app.d.ts.map +1 -0
- package/dist/application/app.js +133 -0
- package/dist/application/app.js.map +1 -0
- package/dist/application/services/validation-engine.d.ts +102 -0
- package/dist/application/services/validation-engine.d.ts.map +1 -0
- package/dist/application/services/validation-engine.js +293 -0
- package/dist/application/services/validation-engine.js.map +1 -0
- package/dist/application/services/workflow-service.d.ts +47 -0
- package/dist/application/services/workflow-service.d.ts.map +1 -0
- package/dist/application/services/workflow-service.js +80 -0
- package/dist/application/services/workflow-service.js.map +1 -0
- package/dist/application/use-cases/get-next-step.d.ts +22 -0
- package/dist/application/use-cases/get-next-step.d.ts.map +1 -0
- package/dist/application/use-cases/get-next-step.js +21 -0
- package/dist/application/use-cases/get-next-step.js.map +1 -0
- package/dist/application/use-cases/get-workflow.d.ts +13 -0
- package/dist/application/use-cases/get-workflow.d.ts.map +1 -0
- package/dist/application/use-cases/get-workflow.js +26 -0
- package/dist/application/use-cases/get-workflow.js.map +1 -0
- package/dist/application/use-cases/list-workflows.d.ts +13 -0
- package/dist/application/use-cases/list-workflows.d.ts.map +1 -0
- package/dist/application/use-cases/list-workflows.js +21 -0
- package/dist/application/use-cases/list-workflows.js.map +1 -0
- package/dist/application/use-cases/validate-step-output.d.ts +20 -0
- package/dist/application/use-cases/validate-step-output.d.ts.map +1 -0
- package/dist/application/use-cases/validate-step-output.js +21 -0
- package/dist/application/use-cases/validate-step-output.js.map +1 -0
- package/dist/application/validation.d.ts +6 -0
- package/dist/application/validation.d.ts.map +1 -0
- package/dist/application/validation.js +19 -0
- package/dist/application/validation.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +106 -0
- package/dist/cli.js.map +1 -0
- package/dist/container.d.ts +22 -0
- package/dist/container.d.ts.map +1 -0
- package/dist/container.js +25 -0
- package/dist/container.js.map +1 -0
- package/dist/core/error-handler.d.ts +93 -0
- package/dist/core/error-handler.d.ts.map +1 -0
- package/dist/core/error-handler.js +336 -0
- package/dist/core/error-handler.js.map +1 -0
- package/dist/domain/index.d.ts +3 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +6 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/index.d.ts +3 -0
- package/dist/infrastructure/index.d.ts.map +1 -0
- package/dist/infrastructure/index.js +6 -0
- package/dist/infrastructure/index.js.map +1 -0
- package/dist/infrastructure/rpc/handler.d.ts +26 -0
- package/dist/infrastructure/rpc/handler.d.ts.map +1 -0
- package/dist/infrastructure/rpc/handler.js +91 -0
- package/dist/infrastructure/rpc/handler.js.map +1 -0
- package/dist/infrastructure/rpc/index.d.ts +2 -0
- package/dist/infrastructure/rpc/index.d.ts.map +1 -0
- package/dist/infrastructure/rpc/index.js +5 -0
- package/dist/infrastructure/rpc/index.js.map +1 -0
- package/dist/infrastructure/rpc/server.d.ts +4 -0
- package/dist/infrastructure/rpc/server.d.ts.map +1 -0
- package/dist/infrastructure/rpc/server.js +40 -0
- package/dist/infrastructure/rpc/server.js.map +1 -0
- package/dist/infrastructure/storage/caching-workflow-storage.d.ts +22 -0
- package/dist/infrastructure/storage/caching-workflow-storage.d.ts.map +1 -0
- package/dist/infrastructure/storage/caching-workflow-storage.js +61 -0
- package/dist/infrastructure/storage/caching-workflow-storage.js.map +1 -0
- package/dist/infrastructure/storage/file-workflow-storage.d.ts +56 -0
- package/dist/infrastructure/storage/file-workflow-storage.d.ts.map +1 -0
- package/dist/infrastructure/storage/file-workflow-storage.js +206 -0
- package/dist/infrastructure/storage/file-workflow-storage.js.map +1 -0
- package/dist/infrastructure/storage/in-memory-storage.d.ts +17 -0
- package/dist/infrastructure/storage/in-memory-storage.d.ts.map +1 -0
- package/dist/infrastructure/storage/in-memory-storage.js +43 -0
- package/dist/infrastructure/storage/in-memory-storage.js.map +1 -0
- package/dist/infrastructure/storage/index.d.ts +6 -0
- package/dist/infrastructure/storage/index.d.ts.map +1 -0
- package/dist/infrastructure/storage/index.js +9 -0
- package/dist/infrastructure/storage/index.js.map +1 -0
- package/dist/infrastructure/storage/schema-validating-workflow-storage.d.ts +23 -0
- package/dist/infrastructure/storage/schema-validating-workflow-storage.d.ts.map +1 -0
- package/dist/infrastructure/storage/schema-validating-workflow-storage.js +70 -0
- package/dist/infrastructure/storage/schema-validating-workflow-storage.js.map +1 -0
- package/dist/infrastructure/storage/storage.d.ts +16 -0
- package/dist/infrastructure/storage/storage.d.ts.map +1 -0
- package/dist/infrastructure/storage/storage.js +32 -0
- package/dist/infrastructure/storage/storage.js.map +1 -0
- package/dist/mcp-server-simple.js +391 -0
- package/dist/mcp-server.d.ts +3 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +223 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/tools/mcp_initialize.d.ts +3 -0
- package/dist/tools/mcp_initialize.d.ts.map +1 -0
- package/dist/tools/mcp_initialize.js +52 -0
- package/dist/tools/mcp_initialize.js.map +1 -0
- package/dist/tools/mcp_shutdown.d.ts +3 -0
- package/dist/tools/mcp_shutdown.d.ts.map +1 -0
- package/dist/tools/mcp_shutdown.js +11 -0
- package/dist/tools/mcp_shutdown.js.map +1 -0
- package/dist/tools/mcp_tools_list.d.ts +3 -0
- package/dist/tools/mcp_tools_list.d.ts.map +1 -0
- package/dist/tools/mcp_tools_list.js +61 -0
- package/dist/tools/mcp_tools_list.js.map +1 -0
- package/dist/types/mcp-types.d.ts +251 -0
- package/dist/types/mcp-types.d.ts.map +1 -0
- package/dist/types/mcp-types.js +27 -0
- package/dist/types/mcp-types.js.map +1 -0
- package/dist/types/server.d.ts +5 -0
- package/dist/types/server.d.ts.map +1 -0
- package/dist/types/server.js +3 -0
- package/dist/types/server.js.map +1 -0
- package/dist/types/storage.d.ts +27 -0
- package/dist/types/storage.d.ts.map +1 -0
- package/dist/types/storage.js +6 -0
- package/dist/types/storage.js.map +1 -0
- package/dist/types/workflow-types.d.ts +251 -0
- package/dist/types/workflow-types.d.ts.map +1 -0
- package/dist/types/workflow-types.js +5 -0
- package/dist/types/workflow-types.js.map +1 -0
- package/dist/utils/condition-evaluator.d.ts +32 -0
- package/dist/utils/condition-evaluator.d.ts.map +1 -0
- package/dist/utils/condition-evaluator.js +105 -0
- package/dist/utils/condition-evaluator.js.map +1 -0
- package/dist/utils/config.d.ts +195 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +332 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/validation/request-validator.d.ts +9 -0
- package/dist/validation/request-validator.d.ts.map +1 -0
- package/dist/validation/request-validator.js +32 -0
- package/dist/validation/request-validator.js.map +1 -0
- package/dist/validation/response-validator.d.ts +9 -0
- package/dist/validation/response-validator.d.ts.map +1 -0
- package/dist/validation/response-validator.js +83 -0
- package/dist/validation/response-validator.js.map +1 -0
- package/dist/validation/schemas.d.ts +6 -0
- package/dist/validation/schemas.d.ts.map +1 -0
- package/dist/validation/schemas.js +52 -0
- package/dist/validation/schemas.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/application/validation.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG,wBAAwB,CAM5E"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateWorkflow = validateWorkflow;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const fs_1 = tslib_1.__importDefault(require("fs"));
|
|
6
|
+
const path_1 = tslib_1.__importDefault(require("path"));
|
|
7
|
+
const ajv_1 = tslib_1.__importDefault(require("ajv"));
|
|
8
|
+
const schemaPath = path_1.default.resolve(__dirname, '../../spec/workflow.schema.json');
|
|
9
|
+
const schema = JSON.parse(fs_1.default.readFileSync(schemaPath, 'utf-8'));
|
|
10
|
+
const ajv = new ajv_1.default({ allErrors: true, strict: false });
|
|
11
|
+
const validate = ajv.compile(schema);
|
|
12
|
+
function validateWorkflow(workflow) {
|
|
13
|
+
const ok = validate(workflow);
|
|
14
|
+
return {
|
|
15
|
+
valid: Boolean(ok),
|
|
16
|
+
errors: ok ? [] : (validate.errors || []).map((e) => `${e.instancePath} ${e.message}`)
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/application/validation.ts"],"names":[],"mappings":";;AAcA,4CAMC;;AApBD,oDAAoB;AACpB,wDAAwB;AACxB,sDAAsB;AAEtB,MAAM,UAAU,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,iCAAiC,CAAC,CAAC;AAC9E,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;AAChE,MAAM,GAAG,GAAG,IAAI,aAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AACxD,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAOrC,SAAgB,gBAAgB,CAAC,QAAiB;IAChD,MAAM,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC9B,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;QAClB,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;KACvF,CAAC;AACJ,CAAC"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const commander_1 = require("commander");
|
|
6
|
+
const fs_1 = tslib_1.__importDefault(require("fs"));
|
|
7
|
+
const path_1 = tslib_1.__importDefault(require("path"));
|
|
8
|
+
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
9
|
+
const server_1 = require("./infrastructure/rpc/server");
|
|
10
|
+
const workflow_service_1 = require("./application/services/workflow-service");
|
|
11
|
+
const storage_1 = require("./infrastructure/storage");
|
|
12
|
+
const validation_1 = require("./application/validation");
|
|
13
|
+
const program = new commander_1.Command();
|
|
14
|
+
program
|
|
15
|
+
.name('workflow-lookup')
|
|
16
|
+
.description('MCP server for workflow orchestration and guidance')
|
|
17
|
+
.version('0.0.1');
|
|
18
|
+
program
|
|
19
|
+
.command('start')
|
|
20
|
+
.description('Start the workflow lookup server')
|
|
21
|
+
.action(async () => {
|
|
22
|
+
try {
|
|
23
|
+
const workflowService = new workflow_service_1.DefaultWorkflowService((0, storage_1.createDefaultWorkflowStorage)());
|
|
24
|
+
const server = (0, server_1.createWorkflowLookupServer)(workflowService);
|
|
25
|
+
await server.start();
|
|
26
|
+
console.log('Workflow Lookup MCP Server started successfully');
|
|
27
|
+
// Graceful shutdown on SIGINT/SIGTERM
|
|
28
|
+
const shutdown = async (signal) => {
|
|
29
|
+
console.log(`Received ${signal}, shutting down...`);
|
|
30
|
+
await server.stop();
|
|
31
|
+
process.exit(0);
|
|
32
|
+
};
|
|
33
|
+
process.on('SIGINT', () => shutdown('SIGINT'));
|
|
34
|
+
process.on('SIGTERM', () => shutdown('SIGTERM'));
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
console.error('Failed to start server:', error);
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
program
|
|
42
|
+
.command('validate')
|
|
43
|
+
.description('Validate a workflow file against the schema')
|
|
44
|
+
.argument('<file>', 'path to workflow JSON file')
|
|
45
|
+
.action(async (file) => {
|
|
46
|
+
await validateWorkflowFile(file);
|
|
47
|
+
});
|
|
48
|
+
async function validateWorkflowFile(filePath) {
|
|
49
|
+
try {
|
|
50
|
+
// 1. Resolve and check file path
|
|
51
|
+
const resolvedPath = path_1.default.resolve(filePath);
|
|
52
|
+
if (!fs_1.default.existsSync(resolvedPath)) {
|
|
53
|
+
console.error(chalk_1.default.red('❌ Error: File not found:'), filePath);
|
|
54
|
+
console.error(chalk_1.default.yellow('\nPlease check the file path and try again.'));
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
// 2. Read file content
|
|
58
|
+
let content;
|
|
59
|
+
try {
|
|
60
|
+
content = fs_1.default.readFileSync(resolvedPath, 'utf-8');
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
if (error.code === 'EACCES') {
|
|
64
|
+
console.error(chalk_1.default.red('❌ Error: Permission denied:'), filePath);
|
|
65
|
+
console.error(chalk_1.default.yellow('\nPlease check file permissions and try again.'));
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
console.error(chalk_1.default.red('❌ Error reading file:'), filePath);
|
|
69
|
+
console.error(chalk_1.default.yellow(`\n${error.message}`));
|
|
70
|
+
}
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
// 3. Parse JSON
|
|
74
|
+
let workflow;
|
|
75
|
+
try {
|
|
76
|
+
workflow = JSON.parse(content);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
console.error(chalk_1.default.red('❌ Error: Invalid JSON syntax in'), filePath);
|
|
80
|
+
console.error(chalk_1.default.yellow(`\n${error.message}`));
|
|
81
|
+
console.error(chalk_1.default.yellow('\nPlease check the JSON syntax and try again.'));
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
// 4. Validate workflow
|
|
85
|
+
const result = (0, validation_1.validateWorkflow)(workflow);
|
|
86
|
+
if (result.valid) {
|
|
87
|
+
console.log(chalk_1.default.green('✅ Workflow is valid:'), filePath);
|
|
88
|
+
process.exit(0);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
console.error(chalk_1.default.red('❌ Workflow validation failed:'), filePath);
|
|
92
|
+
console.error(chalk_1.default.yellow('\nValidation errors:'));
|
|
93
|
+
result.errors.forEach(error => {
|
|
94
|
+
console.error(chalk_1.default.red(' •'), error);
|
|
95
|
+
});
|
|
96
|
+
console.error(chalk_1.default.yellow(`\nFound ${result.errors.length} validation error${result.errors.length === 1 ? '' : 's'}.`));
|
|
97
|
+
process.exit(1);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
console.error(chalk_1.default.red('❌ Unexpected error:'), error.message);
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
program.parse();
|
|
106
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;AAEA,yCAAoC;AACpC,oDAAoB;AACpB,wDAAwB;AACxB,0DAA0B;AAC1B,wDAAyE;AACzE,8EAAiF;AACjF,sDAAwE;AACxE,yDAA4D;AAE5D,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,iBAAiB,CAAC;KACvB,WAAW,CAAC,oDAAoD,CAAC;KACjE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,IAAI,yCAAsB,CAAC,IAAA,sCAA4B,GAAE,CAAC,CAAC;QACnF,MAAM,MAAM,GAAG,IAAA,mCAA0B,EAAC,eAAe,CAAC,CAAC;QAC3D,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAE/D,sCAAsC;QACtC,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;YACxC,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,oBAAoB,CAAC,CAAC;YACpD,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC;QACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,6CAA6C,CAAC;KAC1D,QAAQ,CAAC,QAAQ,EAAE,4BAA4B,CAAC;KAChD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;IAC7B,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEL,KAAK,UAAU,oBAAoB,CAAC,QAAgB;IAClD,IAAI,CAAC;QACH,iCAAiC;QACjC,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE5C,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,EAAE,QAAQ,CAAC,CAAC;YAC/D,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,MAAM,CAAC,6CAA6C,CAAC,CAAC,CAAC;YAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,uBAAuB;QACvB,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC5B,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,EAAE,QAAQ,CAAC,CAAC;gBAClE,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,MAAM,CAAC,gDAAgD,CAAC,CAAC,CAAC;YAChF,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAAE,QAAQ,CAAC,CAAC;gBAC5D,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACpD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,gBAAgB;QAChB,IAAI,QAAa,CAAC;QAClB,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC,EAAE,QAAQ,CAAC,CAAC;YACtE,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAClD,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,MAAM,CAAC,+CAA+C,CAAC,CAAC,CAAC;YAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,uBAAuB;QACvB,MAAM,MAAM,GAAG,IAAA,6BAAgB,EAAC,QAAQ,CAAC,CAAC;QAE1C,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,QAAQ,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,EAAE,QAAQ,CAAC,CAAC;YACpE,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC;YACpD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBAC5B,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,MAAM,CAAC,WAAW,MAAM,CAAC,MAAM,CAAC,MAAM,oBAAoB,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YACzH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IAEH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { WorkflowService } from './application/services/workflow-service.js';
|
|
2
|
+
import { ValidationEngine } from './application/services/validation-engine.js';
|
|
3
|
+
import { IWorkflowStorage } from './types/storage.js';
|
|
4
|
+
import { WorkflowLookupServer } from './types/server.js';
|
|
5
|
+
/**
|
|
6
|
+
* Centralized composition root / dependency-injection helper.
|
|
7
|
+
* Allows overriding individual dependencies (storage, services) for
|
|
8
|
+
* testing or alternative implementations.
|
|
9
|
+
*/
|
|
10
|
+
export interface AppContainer {
|
|
11
|
+
storage: IWorkflowStorage;
|
|
12
|
+
validationEngine: ValidationEngine;
|
|
13
|
+
workflowService: WorkflowService;
|
|
14
|
+
server: WorkflowLookupServer;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Build the application container.
|
|
18
|
+
* @param overrides Optionally replace core components, e.g. provide an
|
|
19
|
+
* in-memory storage for tests.
|
|
20
|
+
*/
|
|
21
|
+
export declare function createAppContainer(overrides?: Partial<AppContainer>): AppContainer;
|
|
22
|
+
//# sourceMappingURL=container.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"AACA,OAAO,EAA0B,eAAe,EAAE,MAAM,4CAA4C,CAAC;AACrG,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,eAAe,EAAE,eAAe,CAAC;IACjC,MAAM,EAAE,oBAAoB,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,GAAE,OAAO,CAAC,YAAY,CAAM,GAAG,YAAY,CAatF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createAppContainer = createAppContainer;
|
|
4
|
+
const storage_js_1 = require("./infrastructure/storage/storage.js");
|
|
5
|
+
const workflow_service_js_1 = require("./application/services/workflow-service.js");
|
|
6
|
+
const validation_engine_js_1 = require("./application/services/validation-engine.js");
|
|
7
|
+
const server_js_1 = require("./infrastructure/rpc/server.js");
|
|
8
|
+
/**
|
|
9
|
+
* Build the application container.
|
|
10
|
+
* @param overrides Optionally replace core components, e.g. provide an
|
|
11
|
+
* in-memory storage for tests.
|
|
12
|
+
*/
|
|
13
|
+
function createAppContainer(overrides = {}) {
|
|
14
|
+
const storage = overrides.storage ?? (0, storage_js_1.createDefaultWorkflowStorage)();
|
|
15
|
+
const validationEngine = overrides.validationEngine ?? new validation_engine_js_1.ValidationEngine();
|
|
16
|
+
const workflowService = overrides.workflowService ?? new workflow_service_js_1.DefaultWorkflowService(storage, validationEngine);
|
|
17
|
+
const server = overrides.server ?? (0, server_js_1.createWorkflowLookupServer)(workflowService);
|
|
18
|
+
return {
|
|
19
|
+
storage,
|
|
20
|
+
validationEngine,
|
|
21
|
+
workflowService,
|
|
22
|
+
server
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=container.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":";;AAwBA,gDAaC;AArCD,oEAAmF;AACnF,oFAAqG;AACrG,sFAA+E;AAE/E,8DAA4E;AAe5E;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,YAAmC,EAAE;IACtE,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,IAAI,IAAA,yCAA4B,GAAE,CAAC;IACpE,MAAM,gBAAgB,GAAG,SAAS,CAAC,gBAAgB,IAAI,IAAI,uCAAgB,EAAE,CAAC;IAC9E,MAAM,eAAe,GACnB,SAAS,CAAC,eAAe,IAAI,IAAI,4CAAsB,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IACrF,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,IAAI,IAAA,sCAA0B,EAAC,eAAe,CAAC,CAAC;IAE/E,OAAO;QACL,OAAO;QACP,gBAAgB;QAChB,eAAe;QACf,MAAM;KACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { JSONRPCResponse } from '../types/mcp-types';
|
|
2
|
+
export declare class MCPError extends Error {
|
|
3
|
+
readonly code: number;
|
|
4
|
+
readonly data?: any;
|
|
5
|
+
constructor(code: number, message: string, data?: any);
|
|
6
|
+
}
|
|
7
|
+
export declare class WorkflowNotFoundError extends MCPError {
|
|
8
|
+
constructor(workflowId: string);
|
|
9
|
+
}
|
|
10
|
+
export declare class InvalidWorkflowError extends MCPError {
|
|
11
|
+
constructor(workflowId: string, details: string);
|
|
12
|
+
}
|
|
13
|
+
export declare class StepNotFoundError extends MCPError {
|
|
14
|
+
constructor(stepId: string, workflowId?: string);
|
|
15
|
+
}
|
|
16
|
+
export declare class ValidationError extends MCPError {
|
|
17
|
+
constructor(message: string, field?: string, details?: any);
|
|
18
|
+
}
|
|
19
|
+
export declare class StateError extends MCPError {
|
|
20
|
+
constructor(message: string, executionId?: string);
|
|
21
|
+
}
|
|
22
|
+
export declare class StorageError extends MCPError {
|
|
23
|
+
constructor(message: string, operation?: string);
|
|
24
|
+
}
|
|
25
|
+
export declare class SecurityError extends MCPError {
|
|
26
|
+
constructor(message: string, action?: string);
|
|
27
|
+
}
|
|
28
|
+
export declare class ErrorHandler {
|
|
29
|
+
private static instance;
|
|
30
|
+
private constructor();
|
|
31
|
+
static getInstance(): ErrorHandler;
|
|
32
|
+
/**
|
|
33
|
+
* Convert any error to a proper MCP error response
|
|
34
|
+
*/
|
|
35
|
+
handleError(error: Error, requestId: string | number | null): JSONRPCResponse;
|
|
36
|
+
/**
|
|
37
|
+
* Convert generic errors to MCP errors
|
|
38
|
+
*/
|
|
39
|
+
private convertToMCPError;
|
|
40
|
+
/**
|
|
41
|
+
* Log error for monitoring and debugging
|
|
42
|
+
*/
|
|
43
|
+
private logError;
|
|
44
|
+
/**
|
|
45
|
+
* Create a parse error response
|
|
46
|
+
*/
|
|
47
|
+
createParseError(): JSONRPCResponse;
|
|
48
|
+
/**
|
|
49
|
+
* Create an invalid request error response
|
|
50
|
+
*/
|
|
51
|
+
createInvalidRequestError(requestId: string | number | null): JSONRPCResponse;
|
|
52
|
+
/**
|
|
53
|
+
* Create a method not found error response
|
|
54
|
+
*/
|
|
55
|
+
createMethodNotFoundError(method: string, requestId: string | number | null): JSONRPCResponse;
|
|
56
|
+
/**
|
|
57
|
+
* Create an invalid params error response
|
|
58
|
+
*/
|
|
59
|
+
createInvalidParamsError(details: string, requestId: string | number | null): JSONRPCResponse;
|
|
60
|
+
/**
|
|
61
|
+
* Validate and sanitize error data
|
|
62
|
+
*/
|
|
63
|
+
sanitizeErrorData(data: any): any;
|
|
64
|
+
/**
|
|
65
|
+
* Get error recovery suggestions
|
|
66
|
+
*/
|
|
67
|
+
getErrorRecoverySuggestions(error: MCPError): string[];
|
|
68
|
+
/**
|
|
69
|
+
* Check if error is recoverable
|
|
70
|
+
*/
|
|
71
|
+
isRecoverableError(error: MCPError): boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Get error severity level
|
|
74
|
+
*/
|
|
75
|
+
getErrorSeverity(error: MCPError): 'low' | 'medium' | 'high' | 'critical';
|
|
76
|
+
}
|
|
77
|
+
export declare const errorHandler: ErrorHandler;
|
|
78
|
+
/**
|
|
79
|
+
* Create a standardized error response
|
|
80
|
+
*/
|
|
81
|
+
export declare function createErrorResponse(code: number, message: string, requestId: string | number | null, data?: any): JSONRPCResponse;
|
|
82
|
+
/**
|
|
83
|
+
* Wrap async functions with error handling
|
|
84
|
+
*/
|
|
85
|
+
export declare function withErrorHandling<T extends any[], R>(fn: (...args: T) => Promise<R>, requestId: string | number | null): (...args: T) => Promise<R | JSONRPCResponse>;
|
|
86
|
+
/**
|
|
87
|
+
* Validate request structure
|
|
88
|
+
*/
|
|
89
|
+
export declare function validateRequest(request: any): {
|
|
90
|
+
valid: boolean;
|
|
91
|
+
error?: JSONRPCResponse;
|
|
92
|
+
};
|
|
93
|
+
//# sourceMappingURL=error-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/core/error-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// MCP Server Error Handling System
|
|
3
|
+
// Comprehensive error handling with proper MCP error codes and recovery
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.errorHandler = exports.ErrorHandler = exports.SecurityError = exports.StorageError = exports.StateError = exports.ValidationError = exports.StepNotFoundError = exports.InvalidWorkflowError = exports.WorkflowNotFoundError = exports.MCPError = void 0;
|
|
6
|
+
exports.createErrorResponse = createErrorResponse;
|
|
7
|
+
exports.withErrorHandling = withErrorHandling;
|
|
8
|
+
exports.validateRequest = validateRequest;
|
|
9
|
+
const mcp_types_1 = require("../types/mcp-types");
|
|
10
|
+
// =============================================================================
|
|
11
|
+
// ERROR CLASSES
|
|
12
|
+
// =============================================================================
|
|
13
|
+
class MCPError extends Error {
|
|
14
|
+
code;
|
|
15
|
+
data;
|
|
16
|
+
constructor(code, message, data) {
|
|
17
|
+
super(message);
|
|
18
|
+
this.name = 'MCPError';
|
|
19
|
+
this.code = code;
|
|
20
|
+
this.data = data;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.MCPError = MCPError;
|
|
24
|
+
class WorkflowNotFoundError extends MCPError {
|
|
25
|
+
constructor(workflowId) {
|
|
26
|
+
super(mcp_types_1.MCPErrorCodes.WORKFLOW_NOT_FOUND, `Workflow with id '${workflowId}' not found`, { workflowId });
|
|
27
|
+
this.name = 'WorkflowNotFoundError';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.WorkflowNotFoundError = WorkflowNotFoundError;
|
|
31
|
+
class InvalidWorkflowError extends MCPError {
|
|
32
|
+
constructor(workflowId, details) {
|
|
33
|
+
super(mcp_types_1.MCPErrorCodes.INVALID_WORKFLOW, `Invalid workflow: ${workflowId}`, { workflowId, details });
|
|
34
|
+
this.name = 'InvalidWorkflowError';
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.InvalidWorkflowError = InvalidWorkflowError;
|
|
38
|
+
class StepNotFoundError extends MCPError {
|
|
39
|
+
constructor(stepId, workflowId) {
|
|
40
|
+
super(mcp_types_1.MCPErrorCodes.STEP_NOT_FOUND, `Step with id '${stepId}' not found in workflow`, { stepId, workflowId });
|
|
41
|
+
this.name = 'StepNotFoundError';
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.StepNotFoundError = StepNotFoundError;
|
|
45
|
+
class ValidationError extends MCPError {
|
|
46
|
+
constructor(message, field, details) {
|
|
47
|
+
super(mcp_types_1.MCPErrorCodes.VALIDATION_ERROR, message, { field, details });
|
|
48
|
+
this.name = 'ValidationError';
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.ValidationError = ValidationError;
|
|
52
|
+
class StateError extends MCPError {
|
|
53
|
+
constructor(message, executionId) {
|
|
54
|
+
super(mcp_types_1.MCPErrorCodes.STATE_ERROR, message, { executionId });
|
|
55
|
+
this.name = 'StateError';
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.StateError = StateError;
|
|
59
|
+
class StorageError extends MCPError {
|
|
60
|
+
constructor(message, operation) {
|
|
61
|
+
super(mcp_types_1.MCPErrorCodes.STORAGE_ERROR, message, { operation });
|
|
62
|
+
this.name = 'StorageError';
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.StorageError = StorageError;
|
|
66
|
+
class SecurityError extends MCPError {
|
|
67
|
+
constructor(message, action) {
|
|
68
|
+
super(mcp_types_1.MCPErrorCodes.SECURITY_ERROR, message, { action });
|
|
69
|
+
this.name = 'SecurityError';
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.SecurityError = SecurityError;
|
|
73
|
+
// =============================================================================
|
|
74
|
+
// ERROR HANDLER CLASS
|
|
75
|
+
// =============================================================================
|
|
76
|
+
class ErrorHandler {
|
|
77
|
+
static instance;
|
|
78
|
+
constructor() {
|
|
79
|
+
// Initialize error handler (placeholder for future logger integration)
|
|
80
|
+
}
|
|
81
|
+
static getInstance() {
|
|
82
|
+
if (!ErrorHandler.instance) {
|
|
83
|
+
ErrorHandler.instance = new ErrorHandler();
|
|
84
|
+
}
|
|
85
|
+
return ErrorHandler.instance;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Convert any error to a proper MCP error response
|
|
89
|
+
*/
|
|
90
|
+
handleError(error, requestId) {
|
|
91
|
+
let mcpError;
|
|
92
|
+
// Convert to MCP error if not already
|
|
93
|
+
if (error instanceof MCPError) {
|
|
94
|
+
mcpError = error;
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
// Handle different error types
|
|
98
|
+
mcpError = this.convertToMCPError(error);
|
|
99
|
+
}
|
|
100
|
+
// Log the error
|
|
101
|
+
this.logError(mcpError);
|
|
102
|
+
// Create error response
|
|
103
|
+
const errorResponse = {
|
|
104
|
+
jsonrpc: "2.0",
|
|
105
|
+
id: requestId,
|
|
106
|
+
error: {
|
|
107
|
+
code: mcpError.code,
|
|
108
|
+
message: mcpError.message,
|
|
109
|
+
data: mcpError.data
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
return errorResponse;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Convert generic errors to MCP errors
|
|
116
|
+
*/
|
|
117
|
+
convertToMCPError(error) {
|
|
118
|
+
// Default: wrap unknown error as INTERNAL_ERROR.
|
|
119
|
+
return new MCPError(mcp_types_1.MCPErrorCodes.INTERNAL_ERROR, error.message || 'Internal server error', { originalError: error.name });
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Log error for monitoring and debugging
|
|
123
|
+
*/
|
|
124
|
+
logError(error) {
|
|
125
|
+
const logEntry = {
|
|
126
|
+
timestamp: new Date(),
|
|
127
|
+
level: 'error',
|
|
128
|
+
error: {
|
|
129
|
+
name: error.name,
|
|
130
|
+
code: error.code,
|
|
131
|
+
message: error.message,
|
|
132
|
+
data: error.data,
|
|
133
|
+
stack: error.stack
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
// TODO: Replace with actual logger
|
|
137
|
+
console.error('MCP Error:', logEntry);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Create a parse error response
|
|
141
|
+
*/
|
|
142
|
+
createParseError() {
|
|
143
|
+
return {
|
|
144
|
+
jsonrpc: "2.0",
|
|
145
|
+
id: null,
|
|
146
|
+
error: {
|
|
147
|
+
code: mcp_types_1.MCPErrorCodes.PARSE_ERROR,
|
|
148
|
+
message: "Parse error",
|
|
149
|
+
data: { details: "Invalid JSON was received" }
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Create an invalid request error response
|
|
155
|
+
*/
|
|
156
|
+
createInvalidRequestError(requestId) {
|
|
157
|
+
return {
|
|
158
|
+
jsonrpc: "2.0",
|
|
159
|
+
id: requestId,
|
|
160
|
+
error: {
|
|
161
|
+
code: mcp_types_1.MCPErrorCodes.INVALID_REQUEST,
|
|
162
|
+
message: "Invalid Request",
|
|
163
|
+
data: { details: "The JSON sent is not a valid Request object" }
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Create a method not found error response
|
|
169
|
+
*/
|
|
170
|
+
createMethodNotFoundError(method, requestId) {
|
|
171
|
+
return {
|
|
172
|
+
jsonrpc: "2.0",
|
|
173
|
+
id: requestId,
|
|
174
|
+
error: {
|
|
175
|
+
code: mcp_types_1.MCPErrorCodes.METHOD_NOT_FOUND,
|
|
176
|
+
message: "Method not found",
|
|
177
|
+
data: { method }
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Create an invalid params error response
|
|
183
|
+
*/
|
|
184
|
+
createInvalidParamsError(details, requestId) {
|
|
185
|
+
return {
|
|
186
|
+
jsonrpc: "2.0",
|
|
187
|
+
id: requestId,
|
|
188
|
+
error: {
|
|
189
|
+
code: mcp_types_1.MCPErrorCodes.INVALID_PARAMS,
|
|
190
|
+
message: "Invalid params",
|
|
191
|
+
data: { details }
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Validate and sanitize error data
|
|
197
|
+
*/
|
|
198
|
+
sanitizeErrorData(data) {
|
|
199
|
+
if (!data)
|
|
200
|
+
return undefined;
|
|
201
|
+
// Remove sensitive information
|
|
202
|
+
const sanitized = { ...data };
|
|
203
|
+
const sensitiveKeys = ['password', 'token', 'secret', 'key', 'authorization'];
|
|
204
|
+
for (const key of sensitiveKeys) {
|
|
205
|
+
if (sanitized[key]) {
|
|
206
|
+
sanitized[key] = '[REDACTED]';
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return sanitized;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Get error recovery suggestions
|
|
213
|
+
*/
|
|
214
|
+
getErrorRecoverySuggestions(error) {
|
|
215
|
+
const suggestions = [];
|
|
216
|
+
switch (error.code) {
|
|
217
|
+
case mcp_types_1.MCPErrorCodes.WORKFLOW_NOT_FOUND:
|
|
218
|
+
suggestions.push("Check if the workflow ID is correct", "Verify the workflow exists in the storage", "Try listing available workflows first");
|
|
219
|
+
break;
|
|
220
|
+
case mcp_types_1.MCPErrorCodes.INVALID_WORKFLOW:
|
|
221
|
+
suggestions.push("Validate the workflow JSON against the schema", "Check for required fields and proper formatting", "Ensure all step IDs are unique");
|
|
222
|
+
break;
|
|
223
|
+
case mcp_types_1.MCPErrorCodes.STEP_NOT_FOUND:
|
|
224
|
+
suggestions.push("Verify the step ID exists in the workflow", "Check the workflow definition for the correct step ID", "Ensure the workflow is properly loaded");
|
|
225
|
+
break;
|
|
226
|
+
case mcp_types_1.MCPErrorCodes.VALIDATION_ERROR:
|
|
227
|
+
suggestions.push("Check the input parameters against the schema", "Verify all required fields are provided", "Ensure data types match the expected format");
|
|
228
|
+
break;
|
|
229
|
+
case mcp_types_1.MCPErrorCodes.STATE_ERROR:
|
|
230
|
+
suggestions.push("Check if the workflow execution exists", "Verify the execution state is valid", "Try restarting the workflow execution");
|
|
231
|
+
break;
|
|
232
|
+
case mcp_types_1.MCPErrorCodes.STORAGE_ERROR:
|
|
233
|
+
suggestions.push("Check file system permissions", "Verify storage path is accessible", "Ensure sufficient disk space");
|
|
234
|
+
break;
|
|
235
|
+
case mcp_types_1.MCPErrorCodes.SECURITY_ERROR:
|
|
236
|
+
suggestions.push("Verify authentication credentials", "Check API key permissions", "Ensure proper authorization");
|
|
237
|
+
break;
|
|
238
|
+
default:
|
|
239
|
+
suggestions.push("Check the server logs for more details", "Verify the request format is correct", "Try the request again");
|
|
240
|
+
}
|
|
241
|
+
return suggestions;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Check if error is recoverable
|
|
245
|
+
*/
|
|
246
|
+
isRecoverableError(error) {
|
|
247
|
+
const recoverableCodes = [
|
|
248
|
+
mcp_types_1.MCPErrorCodes.WORKFLOW_NOT_FOUND,
|
|
249
|
+
mcp_types_1.MCPErrorCodes.STEP_NOT_FOUND,
|
|
250
|
+
mcp_types_1.MCPErrorCodes.VALIDATION_ERROR,
|
|
251
|
+
mcp_types_1.MCPErrorCodes.INVALID_PARAMS
|
|
252
|
+
];
|
|
253
|
+
return recoverableCodes.includes(error.code);
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Get error severity level
|
|
257
|
+
*/
|
|
258
|
+
getErrorSeverity(error) {
|
|
259
|
+
switch (error.code) {
|
|
260
|
+
case mcp_types_1.MCPErrorCodes.PARSE_ERROR:
|
|
261
|
+
case mcp_types_1.MCPErrorCodes.INVALID_REQUEST:
|
|
262
|
+
return 'low';
|
|
263
|
+
case mcp_types_1.MCPErrorCodes.METHOD_NOT_FOUND:
|
|
264
|
+
case mcp_types_1.MCPErrorCodes.INVALID_PARAMS:
|
|
265
|
+
case mcp_types_1.MCPErrorCodes.WORKFLOW_NOT_FOUND:
|
|
266
|
+
case mcp_types_1.MCPErrorCodes.STEP_NOT_FOUND:
|
|
267
|
+
case mcp_types_1.MCPErrorCodes.VALIDATION_ERROR:
|
|
268
|
+
return 'medium';
|
|
269
|
+
case mcp_types_1.MCPErrorCodes.STATE_ERROR:
|
|
270
|
+
case mcp_types_1.MCPErrorCodes.STORAGE_ERROR:
|
|
271
|
+
return 'high';
|
|
272
|
+
case mcp_types_1.MCPErrorCodes.INTERNAL_ERROR:
|
|
273
|
+
case mcp_types_1.MCPErrorCodes.SECURITY_ERROR:
|
|
274
|
+
return 'critical';
|
|
275
|
+
default:
|
|
276
|
+
return 'medium';
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
exports.ErrorHandler = ErrorHandler;
|
|
281
|
+
// =============================================================================
|
|
282
|
+
// ERROR UTILITIES
|
|
283
|
+
// =============================================================================
|
|
284
|
+
exports.errorHandler = ErrorHandler.getInstance();
|
|
285
|
+
/**
|
|
286
|
+
* Create a standardized error response
|
|
287
|
+
*/
|
|
288
|
+
function createErrorResponse(code, message, requestId, data) {
|
|
289
|
+
return {
|
|
290
|
+
jsonrpc: "2.0",
|
|
291
|
+
id: requestId,
|
|
292
|
+
error: {
|
|
293
|
+
code,
|
|
294
|
+
message,
|
|
295
|
+
data: exports.errorHandler.sanitizeErrorData(data)
|
|
296
|
+
}
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Wrap async functions with error handling
|
|
301
|
+
*/
|
|
302
|
+
function withErrorHandling(fn, requestId) {
|
|
303
|
+
return async (...args) => {
|
|
304
|
+
try {
|
|
305
|
+
return await fn(...args);
|
|
306
|
+
}
|
|
307
|
+
catch (error) {
|
|
308
|
+
return exports.errorHandler.handleError(error, requestId);
|
|
309
|
+
}
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Validate request structure
|
|
314
|
+
*/
|
|
315
|
+
function validateRequest(request) {
|
|
316
|
+
if (!request || typeof request !== 'object') {
|
|
317
|
+
return {
|
|
318
|
+
valid: false,
|
|
319
|
+
error: exports.errorHandler.createInvalidRequestError(null)
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
if (request.jsonrpc !== "2.0") {
|
|
323
|
+
return {
|
|
324
|
+
valid: false,
|
|
325
|
+
error: exports.errorHandler.createInvalidRequestError(request.id)
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
if (!request.method || typeof request.method !== 'string') {
|
|
329
|
+
return {
|
|
330
|
+
valid: false,
|
|
331
|
+
error: exports.errorHandler.createInvalidRequestError(request.id)
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
return { valid: true };
|
|
335
|
+
}
|
|
336
|
+
//# sourceMappingURL=error-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/core/error-handler.ts"],"names":[],"mappings":"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"}
|