@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.
Files changed (147) hide show
  1. package/README.md +223 -0
  2. package/dist/application/app.d.ts +32 -0
  3. package/dist/application/app.d.ts.map +1 -0
  4. package/dist/application/app.js +133 -0
  5. package/dist/application/app.js.map +1 -0
  6. package/dist/application/services/validation-engine.d.ts +102 -0
  7. package/dist/application/services/validation-engine.d.ts.map +1 -0
  8. package/dist/application/services/validation-engine.js +293 -0
  9. package/dist/application/services/validation-engine.js.map +1 -0
  10. package/dist/application/services/workflow-service.d.ts +47 -0
  11. package/dist/application/services/workflow-service.d.ts.map +1 -0
  12. package/dist/application/services/workflow-service.js +80 -0
  13. package/dist/application/services/workflow-service.js.map +1 -0
  14. package/dist/application/use-cases/get-next-step.d.ts +22 -0
  15. package/dist/application/use-cases/get-next-step.d.ts.map +1 -0
  16. package/dist/application/use-cases/get-next-step.js +21 -0
  17. package/dist/application/use-cases/get-next-step.js.map +1 -0
  18. package/dist/application/use-cases/get-workflow.d.ts +13 -0
  19. package/dist/application/use-cases/get-workflow.d.ts.map +1 -0
  20. package/dist/application/use-cases/get-workflow.js +26 -0
  21. package/dist/application/use-cases/get-workflow.js.map +1 -0
  22. package/dist/application/use-cases/list-workflows.d.ts +13 -0
  23. package/dist/application/use-cases/list-workflows.d.ts.map +1 -0
  24. package/dist/application/use-cases/list-workflows.js +21 -0
  25. package/dist/application/use-cases/list-workflows.js.map +1 -0
  26. package/dist/application/use-cases/validate-step-output.d.ts +20 -0
  27. package/dist/application/use-cases/validate-step-output.d.ts.map +1 -0
  28. package/dist/application/use-cases/validate-step-output.js +21 -0
  29. package/dist/application/use-cases/validate-step-output.js.map +1 -0
  30. package/dist/application/validation.d.ts +6 -0
  31. package/dist/application/validation.d.ts.map +1 -0
  32. package/dist/application/validation.js +19 -0
  33. package/dist/application/validation.js.map +1 -0
  34. package/dist/cli.d.ts +3 -0
  35. package/dist/cli.d.ts.map +1 -0
  36. package/dist/cli.js +106 -0
  37. package/dist/cli.js.map +1 -0
  38. package/dist/container.d.ts +22 -0
  39. package/dist/container.d.ts.map +1 -0
  40. package/dist/container.js +25 -0
  41. package/dist/container.js.map +1 -0
  42. package/dist/core/error-handler.d.ts +93 -0
  43. package/dist/core/error-handler.d.ts.map +1 -0
  44. package/dist/core/error-handler.js +336 -0
  45. package/dist/core/error-handler.js.map +1 -0
  46. package/dist/domain/index.d.ts +3 -0
  47. package/dist/domain/index.d.ts.map +1 -0
  48. package/dist/domain/index.js +6 -0
  49. package/dist/domain/index.js.map +1 -0
  50. package/dist/index.d.ts +3 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +30 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/infrastructure/index.d.ts +3 -0
  55. package/dist/infrastructure/index.d.ts.map +1 -0
  56. package/dist/infrastructure/index.js +6 -0
  57. package/dist/infrastructure/index.js.map +1 -0
  58. package/dist/infrastructure/rpc/handler.d.ts +26 -0
  59. package/dist/infrastructure/rpc/handler.d.ts.map +1 -0
  60. package/dist/infrastructure/rpc/handler.js +91 -0
  61. package/dist/infrastructure/rpc/handler.js.map +1 -0
  62. package/dist/infrastructure/rpc/index.d.ts +2 -0
  63. package/dist/infrastructure/rpc/index.d.ts.map +1 -0
  64. package/dist/infrastructure/rpc/index.js +5 -0
  65. package/dist/infrastructure/rpc/index.js.map +1 -0
  66. package/dist/infrastructure/rpc/server.d.ts +4 -0
  67. package/dist/infrastructure/rpc/server.d.ts.map +1 -0
  68. package/dist/infrastructure/rpc/server.js +40 -0
  69. package/dist/infrastructure/rpc/server.js.map +1 -0
  70. package/dist/infrastructure/storage/caching-workflow-storage.d.ts +22 -0
  71. package/dist/infrastructure/storage/caching-workflow-storage.d.ts.map +1 -0
  72. package/dist/infrastructure/storage/caching-workflow-storage.js +61 -0
  73. package/dist/infrastructure/storage/caching-workflow-storage.js.map +1 -0
  74. package/dist/infrastructure/storage/file-workflow-storage.d.ts +56 -0
  75. package/dist/infrastructure/storage/file-workflow-storage.d.ts.map +1 -0
  76. package/dist/infrastructure/storage/file-workflow-storage.js +206 -0
  77. package/dist/infrastructure/storage/file-workflow-storage.js.map +1 -0
  78. package/dist/infrastructure/storage/in-memory-storage.d.ts +17 -0
  79. package/dist/infrastructure/storage/in-memory-storage.d.ts.map +1 -0
  80. package/dist/infrastructure/storage/in-memory-storage.js +43 -0
  81. package/dist/infrastructure/storage/in-memory-storage.js.map +1 -0
  82. package/dist/infrastructure/storage/index.d.ts +6 -0
  83. package/dist/infrastructure/storage/index.d.ts.map +1 -0
  84. package/dist/infrastructure/storage/index.js +9 -0
  85. package/dist/infrastructure/storage/index.js.map +1 -0
  86. package/dist/infrastructure/storage/schema-validating-workflow-storage.d.ts +23 -0
  87. package/dist/infrastructure/storage/schema-validating-workflow-storage.d.ts.map +1 -0
  88. package/dist/infrastructure/storage/schema-validating-workflow-storage.js +70 -0
  89. package/dist/infrastructure/storage/schema-validating-workflow-storage.js.map +1 -0
  90. package/dist/infrastructure/storage/storage.d.ts +16 -0
  91. package/dist/infrastructure/storage/storage.d.ts.map +1 -0
  92. package/dist/infrastructure/storage/storage.js +32 -0
  93. package/dist/infrastructure/storage/storage.js.map +1 -0
  94. package/dist/mcp-server-simple.js +391 -0
  95. package/dist/mcp-server.d.ts +3 -0
  96. package/dist/mcp-server.d.ts.map +1 -0
  97. package/dist/mcp-server.js +223 -0
  98. package/dist/mcp-server.js.map +1 -0
  99. package/dist/tools/mcp_initialize.d.ts +3 -0
  100. package/dist/tools/mcp_initialize.d.ts.map +1 -0
  101. package/dist/tools/mcp_initialize.js +52 -0
  102. package/dist/tools/mcp_initialize.js.map +1 -0
  103. package/dist/tools/mcp_shutdown.d.ts +3 -0
  104. package/dist/tools/mcp_shutdown.d.ts.map +1 -0
  105. package/dist/tools/mcp_shutdown.js +11 -0
  106. package/dist/tools/mcp_shutdown.js.map +1 -0
  107. package/dist/tools/mcp_tools_list.d.ts +3 -0
  108. package/dist/tools/mcp_tools_list.d.ts.map +1 -0
  109. package/dist/tools/mcp_tools_list.js +61 -0
  110. package/dist/tools/mcp_tools_list.js.map +1 -0
  111. package/dist/types/mcp-types.d.ts +251 -0
  112. package/dist/types/mcp-types.d.ts.map +1 -0
  113. package/dist/types/mcp-types.js +27 -0
  114. package/dist/types/mcp-types.js.map +1 -0
  115. package/dist/types/server.d.ts +5 -0
  116. package/dist/types/server.d.ts.map +1 -0
  117. package/dist/types/server.js +3 -0
  118. package/dist/types/server.js.map +1 -0
  119. package/dist/types/storage.d.ts +27 -0
  120. package/dist/types/storage.d.ts.map +1 -0
  121. package/dist/types/storage.js +6 -0
  122. package/dist/types/storage.js.map +1 -0
  123. package/dist/types/workflow-types.d.ts +251 -0
  124. package/dist/types/workflow-types.d.ts.map +1 -0
  125. package/dist/types/workflow-types.js +5 -0
  126. package/dist/types/workflow-types.js.map +1 -0
  127. package/dist/utils/condition-evaluator.d.ts +32 -0
  128. package/dist/utils/condition-evaluator.d.ts.map +1 -0
  129. package/dist/utils/condition-evaluator.js +105 -0
  130. package/dist/utils/condition-evaluator.js.map +1 -0
  131. package/dist/utils/config.d.ts +195 -0
  132. package/dist/utils/config.d.ts.map +1 -0
  133. package/dist/utils/config.js +332 -0
  134. package/dist/utils/config.js.map +1 -0
  135. package/dist/validation/request-validator.d.ts +9 -0
  136. package/dist/validation/request-validator.d.ts.map +1 -0
  137. package/dist/validation/request-validator.js +32 -0
  138. package/dist/validation/request-validator.js.map +1 -0
  139. package/dist/validation/response-validator.d.ts +9 -0
  140. package/dist/validation/response-validator.d.ts.map +1 -0
  141. package/dist/validation/response-validator.js +83 -0
  142. package/dist/validation/response-validator.js.map +1 -0
  143. package/dist/validation/schemas.d.ts +6 -0
  144. package/dist/validation/schemas.d.ts.map +1 -0
  145. package/dist/validation/schemas.js +52 -0
  146. package/dist/validation/schemas.js.map +1 -0
  147. package/package.json +48 -0
@@ -0,0 +1,6 @@
1
+ export interface WorkflowValidationResult {
2
+ valid: boolean;
3
+ errors: string[];
4
+ }
5
+ export declare function validateWorkflow(workflow: unknown): WorkflowValidationResult;
6
+ //# sourceMappingURL=validation.d.ts.map
@@ -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,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -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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"}