@exaudeus/workrail 0.0.3 → 0.0.5
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 +32 -1
- package/dist/application/use-cases/validate-workflow-json.d.ts +19 -0
- package/dist/application/use-cases/validate-workflow-json.d.ts.map +1 -0
- package/dist/application/use-cases/validate-workflow-json.js +148 -0
- package/dist/application/use-cases/validate-workflow-json.js.map +1 -0
- package/dist/cli.js +140 -23
- package/dist/cli.js.map +1 -1
- package/dist/infrastructure/storage/multi-directory-workflow-storage.d.ts +50 -0
- package/dist/infrastructure/storage/multi-directory-workflow-storage.d.ts.map +1 -0
- package/dist/infrastructure/storage/multi-directory-workflow-storage.js +209 -0
- package/dist/infrastructure/storage/multi-directory-workflow-storage.js.map +1 -0
- package/dist/infrastructure/storage/storage.d.ts +7 -2
- package/dist/infrastructure/storage/storage.d.ts.map +1 -1
- package/dist/infrastructure/storage/storage.js +15 -2
- package/dist/infrastructure/storage/storage.js.map +1 -1
- package/dist/mcp-server.js +99 -1
- package/dist/mcp-server.js.map +1 -1
- package/dist/utils/config.d.ts +11 -2
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +6 -3
- package/dist/utils/config.js.map +1 -1
- package/package.json +1 -1
- package/spec/mcp-api-v1.0.md +214 -1
- package/spec/mcp-compliance-summary.md +3 -3
package/README.md
CHANGED
|
@@ -18,15 +18,46 @@ The codebase now implements the full MVP described in the original specification
|
|
|
18
18
|
|
|
19
19
|
---
|
|
20
20
|
|
|
21
|
+
## 🚀 Quick Start
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# Install globally
|
|
25
|
+
npm install -g @exaudeus/workrail
|
|
26
|
+
|
|
27
|
+
# Initialize your personal workflow directory
|
|
28
|
+
workrail init
|
|
29
|
+
|
|
30
|
+
# List all available workflows (bundled + your custom ones)
|
|
31
|
+
workrail list
|
|
32
|
+
|
|
33
|
+
# Check workflow sources and status
|
|
34
|
+
workrail sources
|
|
35
|
+
|
|
36
|
+
# Validate a workflow file
|
|
37
|
+
workrail validate my-workflow.json
|
|
38
|
+
|
|
39
|
+
# Start the MCP server
|
|
40
|
+
workrail start
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**Multiple Workflow Sources**: WorkRail automatically loads workflows from:
|
|
44
|
+
- **Bundled workflows** (included with the package)
|
|
45
|
+
- **User workflows** (`~/.workrail/workflows/`)
|
|
46
|
+
- **Project workflows** (`./workflows/`)
|
|
47
|
+
- **Custom directories** (via `WORKFLOW_STORAGE_PATH` environment variable)
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
21
51
|
## ✨ Key Features
|
|
22
52
|
|
|
23
53
|
* **Clean Architecture** – clear separation of **Domain → Application → Infrastructure** layers.
|
|
24
54
|
* **MCP Protocol Support** – Full MCP SDK integration with proper tool definitions and stdio transport.
|
|
25
|
-
* **Workflow Orchestration Tools** –
|
|
55
|
+
* **Workflow Orchestration Tools** – 5 core tools for workflow management:
|
|
26
56
|
- `workflow_list` - List all available workflows
|
|
27
57
|
- `workflow_get` - Get detailed workflow information
|
|
28
58
|
- `workflow_next` - Get the next step in a workflow
|
|
29
59
|
- `workflow_validate` - Advanced validation of step outputs with schema, context-aware, and composition rules
|
|
60
|
+
- `workflow_validate_json` - Direct JSON workflow validation with comprehensive error reporting and actionable suggestions
|
|
30
61
|
* **Dependency Injection** – pluggable components are wired by `src/container.ts` (Inversify-style, no runtime reflection).
|
|
31
62
|
* **Async, Secure Storage** – interchangeable back-ends: in-memory (default for tests) and file-based storage with path-traversal safeguards.
|
|
32
63
|
* **Advanced ValidationEngine** – Three-tier validation system with JSON Schema validation (AJV), Context-Aware Validation (conditional rules), and Logical Composition (and/or/not operators) for comprehensive step output quality assurance.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enhanced validation result interface that matches other use cases
|
|
3
|
+
*/
|
|
4
|
+
export interface WorkflowJsonValidationResult {
|
|
5
|
+
valid: boolean;
|
|
6
|
+
issues: string[];
|
|
7
|
+
suggestions: string[];
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Factory function that creates a pure use-case for validating workflow JSON.
|
|
11
|
+
* Dependencies are injected at creation time, returning a pure function.
|
|
12
|
+
*/
|
|
13
|
+
export declare function createValidateWorkflowJson(): (workflowJson: string) => Promise<WorkflowJsonValidationResult>;
|
|
14
|
+
/**
|
|
15
|
+
* @deprecated Use createValidateWorkflowJson factory function instead
|
|
16
|
+
* Legacy export for backward compatibility
|
|
17
|
+
*/
|
|
18
|
+
export declare function validateWorkflowJson(workflowJson: string): Promise<WorkflowJsonValidationResult>;
|
|
19
|
+
//# sourceMappingURL=validate-workflow-json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-workflow-json.d.ts","sourceRoot":"","sources":["../../../src/application/use-cases/validate-workflow-json.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,KAEtC,cAAc,MAAM,KACnB,OAAO,CAAC,4BAA4B,CAAC,CA6DzC;AAgGD;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,4BAA4B,CAAC,CAEvC"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createValidateWorkflowJson = createValidateWorkflowJson;
|
|
4
|
+
exports.validateWorkflowJson = validateWorkflowJson;
|
|
5
|
+
const validation_1 = require("../validation");
|
|
6
|
+
/**
|
|
7
|
+
* Factory function that creates a pure use-case for validating workflow JSON.
|
|
8
|
+
* Dependencies are injected at creation time, returning a pure function.
|
|
9
|
+
*/
|
|
10
|
+
function createValidateWorkflowJson() {
|
|
11
|
+
return async (workflowJson) => {
|
|
12
|
+
// Handle null, undefined, or non-string input
|
|
13
|
+
if (workflowJson === null || workflowJson === undefined || typeof workflowJson !== 'string') {
|
|
14
|
+
return {
|
|
15
|
+
valid: false,
|
|
16
|
+
issues: ['Workflow JSON content is required and must be a string.'],
|
|
17
|
+
suggestions: ['Provide valid JSON content for the workflow.']
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
// Handle empty string after trimming
|
|
21
|
+
const trimmedJson = workflowJson.trim();
|
|
22
|
+
if (trimmedJson.length === 0) {
|
|
23
|
+
return {
|
|
24
|
+
valid: false,
|
|
25
|
+
issues: ['Workflow JSON content is empty.'],
|
|
26
|
+
suggestions: ['Provide valid JSON content for the workflow.']
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
// Parse JSON with detailed error handling
|
|
30
|
+
let parsedWorkflow;
|
|
31
|
+
try {
|
|
32
|
+
parsedWorkflow = JSON.parse(trimmedJson);
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown JSON parsing error';
|
|
36
|
+
return {
|
|
37
|
+
valid: false,
|
|
38
|
+
issues: [`Invalid JSON syntax: ${errorMessage}`],
|
|
39
|
+
suggestions: [
|
|
40
|
+
'Check for missing quotes, commas, or brackets in the JSON.',
|
|
41
|
+
'Ensure all strings are properly quoted.',
|
|
42
|
+
'Verify that brackets and braces are properly matched.',
|
|
43
|
+
'Use a JSON formatter or validator to identify syntax errors.'
|
|
44
|
+
]
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// Validate the parsed workflow using existing validation
|
|
48
|
+
const validationResult = (0, validation_1.validateWorkflow)(parsedWorkflow);
|
|
49
|
+
// Transform validation result to match use case interface
|
|
50
|
+
const issues = [];
|
|
51
|
+
const suggestions = [];
|
|
52
|
+
if (!validationResult.valid) {
|
|
53
|
+
// Process validation errors and provide enhanced error messages
|
|
54
|
+
validationResult.errors.forEach(error => {
|
|
55
|
+
issues.push(enhanceErrorMessage(error));
|
|
56
|
+
});
|
|
57
|
+
// Add general suggestions based on common validation errors
|
|
58
|
+
suggestions.push(...generateSuggestions(validationResult.errors));
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
valid: validationResult.valid,
|
|
62
|
+
issues,
|
|
63
|
+
suggestions
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Enhance error messages to be more user-friendly for LLM consumption
|
|
69
|
+
*/
|
|
70
|
+
function enhanceErrorMessage(error) {
|
|
71
|
+
// Handle common AJV error patterns and make them more descriptive
|
|
72
|
+
if (error.includes('must have required property')) {
|
|
73
|
+
const match = error.match(/must have required property '(.+)'/);
|
|
74
|
+
if (match) {
|
|
75
|
+
const property = match[1];
|
|
76
|
+
return `Missing required field '${property}'. This field is mandatory for all workflows.`;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (error.includes('must be string')) {
|
|
80
|
+
return `${error} - Expected a text value enclosed in quotes.`;
|
|
81
|
+
}
|
|
82
|
+
if (error.includes('must be array')) {
|
|
83
|
+
return `${error} - Expected a list of items enclosed in square brackets [].`;
|
|
84
|
+
}
|
|
85
|
+
if (error.includes('must be object')) {
|
|
86
|
+
return `${error} - Expected a JSON object enclosed in curly braces {}.`;
|
|
87
|
+
}
|
|
88
|
+
if (error.includes('must match pattern')) {
|
|
89
|
+
return `${error} - The value does not match the required format or pattern.`;
|
|
90
|
+
}
|
|
91
|
+
if (error.includes('must NOT have additional properties')) {
|
|
92
|
+
return `Unexpected property found. Remove this property or check for typos.`;
|
|
93
|
+
}
|
|
94
|
+
if (error.includes('additionalProperties')) {
|
|
95
|
+
return `${error} - Remove any unexpected properties or check for typos.`;
|
|
96
|
+
}
|
|
97
|
+
if (error.includes('must be >= 1')) {
|
|
98
|
+
return `${error} - Value must be at least 1.`;
|
|
99
|
+
}
|
|
100
|
+
if (error.includes('must be <= ')) {
|
|
101
|
+
return `${error} - Value exceeds the maximum allowed length.`;
|
|
102
|
+
}
|
|
103
|
+
// Return original error if no specific enhancement is available
|
|
104
|
+
return error;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Generate actionable suggestions based on validation errors
|
|
108
|
+
*/
|
|
109
|
+
function generateSuggestions(errors) {
|
|
110
|
+
const suggestions = [];
|
|
111
|
+
const errorText = errors.join(' ').toLowerCase();
|
|
112
|
+
// Add suggestions based on common error patterns
|
|
113
|
+
if (errorText.includes('id')) {
|
|
114
|
+
suggestions.push('Ensure the workflow ID follows the pattern: lowercase letters, numbers, and hyphens only.');
|
|
115
|
+
}
|
|
116
|
+
if (errorText.includes('name')) {
|
|
117
|
+
suggestions.push('Provide a clear, descriptive name for the workflow.');
|
|
118
|
+
}
|
|
119
|
+
if (errorText.includes('description')) {
|
|
120
|
+
suggestions.push('Add a meaningful description explaining what the workflow accomplishes.');
|
|
121
|
+
}
|
|
122
|
+
if (errorText.includes('version')) {
|
|
123
|
+
suggestions.push('Use semantic versioning format (e.g., "0.0.1", "1.0.0").');
|
|
124
|
+
}
|
|
125
|
+
if (errorText.includes('steps')) {
|
|
126
|
+
suggestions.push('Ensure the workflow has at least one step with id, title, and prompt fields.');
|
|
127
|
+
}
|
|
128
|
+
if (errorText.includes('step')) {
|
|
129
|
+
suggestions.push('Check that all steps have required fields: id, title, and prompt.');
|
|
130
|
+
}
|
|
131
|
+
if (errorText.includes('pattern')) {
|
|
132
|
+
suggestions.push('Review the workflow schema documentation for correct field formats.');
|
|
133
|
+
}
|
|
134
|
+
// Add general suggestions if no specific ones were added
|
|
135
|
+
if (suggestions.length === 0) {
|
|
136
|
+
suggestions.push('Review the workflow schema documentation for correct structure and formatting.');
|
|
137
|
+
suggestions.push('Check that all required fields are present and properly formatted.');
|
|
138
|
+
}
|
|
139
|
+
return suggestions;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* @deprecated Use createValidateWorkflowJson factory function instead
|
|
143
|
+
* Legacy export for backward compatibility
|
|
144
|
+
*/
|
|
145
|
+
async function validateWorkflowJson(workflowJson) {
|
|
146
|
+
return createValidateWorkflowJson()(workflowJson);
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=validate-workflow-json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-workflow-json.js","sourceRoot":"","sources":["../../../src/application/use-cases/validate-workflow-json.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -6,44 +6,142 @@ const commander_1 = require("commander");
|
|
|
6
6
|
const fs_1 = tslib_1.__importDefault(require("fs"));
|
|
7
7
|
const path_1 = tslib_1.__importDefault(require("path"));
|
|
8
8
|
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
9
|
+
const os_1 = tslib_1.__importDefault(require("os"));
|
|
9
10
|
const server_1 = require("./infrastructure/rpc/server");
|
|
10
11
|
const workflow_service_1 = require("./application/services/workflow-service");
|
|
11
|
-
|
|
12
|
+
// import { createDefaultWorkflowStorage } from './infrastructure/storage';
|
|
12
13
|
const validation_1 = require("./application/validation");
|
|
14
|
+
const multi_directory_workflow_storage_1 = require("./infrastructure/storage/multi-directory-workflow-storage");
|
|
13
15
|
const program = new commander_1.Command();
|
|
14
16
|
program
|
|
15
|
-
.name('
|
|
17
|
+
.name('workrail')
|
|
16
18
|
.description('MCP server for workflow orchestration and guidance')
|
|
17
|
-
.version('0.0.
|
|
19
|
+
.version('0.0.3');
|
|
18
20
|
program
|
|
19
|
-
.command('
|
|
20
|
-
.description('
|
|
21
|
+
.command('init')
|
|
22
|
+
.description('Initialize user workflow directory with sample workflows')
|
|
21
23
|
.action(async () => {
|
|
22
24
|
try {
|
|
23
|
-
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
console.log(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
25
|
+
console.log(chalk_1.default.blue('🚀 Initializing user workflow directory...'));
|
|
26
|
+
const userDir = await (0, multi_directory_workflow_storage_1.initializeUserWorkflowDirectory)();
|
|
27
|
+
console.log(chalk_1.default.green('✅ User workflow directory initialized:'));
|
|
28
|
+
console.log(chalk_1.default.cyan(` ${userDir}`));
|
|
29
|
+
console.log();
|
|
30
|
+
console.log(chalk_1.default.yellow('📝 Getting started:'));
|
|
31
|
+
console.log(chalk_1.default.white('1. Edit the sample workflow in the directory above'));
|
|
32
|
+
console.log(chalk_1.default.white('2. Create new workflow JSON files following the schema'));
|
|
33
|
+
console.log(chalk_1.default.white('3. Run "workrail list" to see your workflows'));
|
|
34
|
+
console.log(chalk_1.default.white('4. Use your workflows with any MCP-enabled AI assistant'));
|
|
35
|
+
console.log();
|
|
36
|
+
console.log(chalk_1.default.gray('💡 Tip: Use "workrail validate <file>" to check your workflow syntax'));
|
|
35
37
|
}
|
|
36
38
|
catch (error) {
|
|
37
|
-
console.error('Failed to
|
|
39
|
+
console.error(chalk_1.default.red('❌ Failed to initialize user workflow directory:'));
|
|
40
|
+
console.error(chalk_1.default.red(error.message));
|
|
38
41
|
process.exit(1);
|
|
39
42
|
}
|
|
40
43
|
});
|
|
41
44
|
program
|
|
42
|
-
.command('
|
|
43
|
-
.description('
|
|
44
|
-
.
|
|
45
|
-
.action(async (
|
|
46
|
-
|
|
45
|
+
.command('list')
|
|
46
|
+
.description('List all available workflows from all sources')
|
|
47
|
+
.option('-v, --verbose', 'Show detailed information including sources')
|
|
48
|
+
.action(async (options) => {
|
|
49
|
+
try {
|
|
50
|
+
console.log(chalk_1.default.blue('📋 Available workflows:'));
|
|
51
|
+
console.log();
|
|
52
|
+
const workflowService = new workflow_service_1.DefaultWorkflowService();
|
|
53
|
+
const workflows = await workflowService.listWorkflowSummaries();
|
|
54
|
+
if (workflows.length === 0) {
|
|
55
|
+
console.log(chalk_1.default.yellow(' No workflows found.'));
|
|
56
|
+
console.log(chalk_1.default.gray(' Run "workrail init" to create your first workflow.'));
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
workflows.forEach((workflow, index) => {
|
|
60
|
+
console.log(chalk_1.default.green(`${index + 1}. ${workflow.name}`));
|
|
61
|
+
console.log(chalk_1.default.white(` ID: ${workflow.id}`));
|
|
62
|
+
console.log(chalk_1.default.gray(` ${workflow.description}`));
|
|
63
|
+
if (options.verbose) {
|
|
64
|
+
console.log(chalk_1.default.cyan(` Version: ${workflow.version}`));
|
|
65
|
+
}
|
|
66
|
+
console.log();
|
|
67
|
+
});
|
|
68
|
+
console.log(chalk_1.default.gray(`Total: ${workflows.length} workflows`));
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
console.error(chalk_1.default.red('❌ Failed to list workflows:'));
|
|
72
|
+
console.error(chalk_1.default.red(error.message));
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
program
|
|
77
|
+
.command('sources')
|
|
78
|
+
.description('Show workflow directory sources and their status')
|
|
79
|
+
.action(async () => {
|
|
80
|
+
try {
|
|
81
|
+
console.log(chalk_1.default.blue('📂 Workflow directory sources:'));
|
|
82
|
+
console.log();
|
|
83
|
+
const sources = [
|
|
84
|
+
{
|
|
85
|
+
name: 'Bundled Workflows',
|
|
86
|
+
path: path_1.default.resolve(__dirname, '../workflows'),
|
|
87
|
+
type: 'bundled',
|
|
88
|
+
description: 'Pre-built workflows included with WorkRail'
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
name: 'User Workflows',
|
|
92
|
+
path: path_1.default.join(os_1.default.homedir(), '.workrail', 'workflows'),
|
|
93
|
+
type: 'user',
|
|
94
|
+
description: 'Your personal workflow collection'
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
name: 'Project Workflows',
|
|
98
|
+
path: path_1.default.resolve(process.cwd(), 'workflows'),
|
|
99
|
+
type: 'project',
|
|
100
|
+
description: 'Project-specific workflows'
|
|
101
|
+
}
|
|
102
|
+
];
|
|
103
|
+
// Add custom paths from environment
|
|
104
|
+
const envPaths = process.env['WORKFLOW_STORAGE_PATH'];
|
|
105
|
+
if (envPaths) {
|
|
106
|
+
const customPaths = envPaths.split(path_1.default.delimiter);
|
|
107
|
+
customPaths.forEach((customPath, index) => {
|
|
108
|
+
sources.push({
|
|
109
|
+
name: `Custom Path ${index + 1}`,
|
|
110
|
+
path: path_1.default.resolve(customPath.trim()),
|
|
111
|
+
type: 'custom',
|
|
112
|
+
description: 'Custom workflow directory'
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
sources.forEach((source, index) => {
|
|
117
|
+
const exists = fs_1.default.existsSync(source.path);
|
|
118
|
+
const icon = exists ? '✅' : '❌';
|
|
119
|
+
const status = exists ? 'Found' : 'Not found';
|
|
120
|
+
console.log(chalk_1.default.white(`${index + 1}. ${source.name} ${icon}`));
|
|
121
|
+
console.log(chalk_1.default.gray(` Path: ${source.path}`));
|
|
122
|
+
console.log(chalk_1.default.gray(` Status: ${status}`));
|
|
123
|
+
console.log(chalk_1.default.gray(` ${source.description}`));
|
|
124
|
+
if (exists) {
|
|
125
|
+
try {
|
|
126
|
+
const files = fs_1.default.readdirSync(source.path).filter(f => f.endsWith('.json'));
|
|
127
|
+
console.log(chalk_1.default.cyan(` Workflows: ${files.length} files`));
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
console.log(chalk_1.default.red(` Error reading directory`));
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
console.log();
|
|
134
|
+
});
|
|
135
|
+
console.log(chalk_1.default.yellow('💡 Tips:'));
|
|
136
|
+
console.log(chalk_1.default.white('• Run "workrail init" to create the user workflow directory'));
|
|
137
|
+
console.log(chalk_1.default.white('• Set WORKFLOW_STORAGE_PATH to add custom directories'));
|
|
138
|
+
console.log(chalk_1.default.white('• Use colon-separated paths for multiple custom directories'));
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
console.error(chalk_1.default.red('❌ Failed to check workflow sources:'));
|
|
142
|
+
console.error(chalk_1.default.red(error.message));
|
|
143
|
+
process.exit(1);
|
|
144
|
+
}
|
|
47
145
|
});
|
|
48
146
|
async function validateWorkflowFile(filePath) {
|
|
49
147
|
try {
|
|
@@ -102,5 +200,24 @@ async function validateWorkflowFile(filePath) {
|
|
|
102
200
|
process.exit(1);
|
|
103
201
|
}
|
|
104
202
|
}
|
|
203
|
+
program
|
|
204
|
+
.command('validate <file>')
|
|
205
|
+
.description('Validate a workflow file against the schema')
|
|
206
|
+
.action(validateWorkflowFile);
|
|
207
|
+
program
|
|
208
|
+
.command('start')
|
|
209
|
+
.description('Start the MCP server')
|
|
210
|
+
.action(async () => {
|
|
211
|
+
try {
|
|
212
|
+
console.log(chalk_1.default.blue('🚀 Starting WorkRail MCP server...'));
|
|
213
|
+
const workflowService = new workflow_service_1.DefaultWorkflowService();
|
|
214
|
+
const server = (0, server_1.createWorkflowLookupServer)(workflowService);
|
|
215
|
+
await server.start();
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
console.error(chalk_1.default.red('❌ Failed to start server:'), error.message);
|
|
219
|
+
process.exit(1);
|
|
220
|
+
}
|
|
221
|
+
});
|
|
105
222
|
program.parse();
|
|
106
223
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { IWorkflowStorage } from '../../types/storage';
|
|
2
|
+
import { Workflow, WorkflowSummary } from '../../types/mcp-types';
|
|
3
|
+
/**
|
|
4
|
+
* Multi-directory workflow storage that loads workflows from multiple directories
|
|
5
|
+
* and merges them together. Supports:
|
|
6
|
+
* - Bundled workflows (always included)
|
|
7
|
+
* - User-specific workflows (~/.workrail/workflows)
|
|
8
|
+
* - Project-specific workflows (./workflows or custom path)
|
|
9
|
+
* - Multiple custom directories (colon-separated paths)
|
|
10
|
+
*/
|
|
11
|
+
export declare class MultiDirectoryWorkflowStorage implements IWorkflowStorage {
|
|
12
|
+
private storageInstances;
|
|
13
|
+
constructor(options?: MultiDirectoryOptions);
|
|
14
|
+
private resolveDirectories;
|
|
15
|
+
loadAllWorkflows(): Promise<Workflow[]>;
|
|
16
|
+
getWorkflowById(id: string): Promise<Workflow | null>;
|
|
17
|
+
listWorkflowSummaries(): Promise<WorkflowSummary[]>;
|
|
18
|
+
save?(_workflow: Workflow): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Get information about loaded directories
|
|
21
|
+
*/
|
|
22
|
+
getDirectoryInfo(): DirectoryInfo[];
|
|
23
|
+
private getDirectoryType;
|
|
24
|
+
}
|
|
25
|
+
export interface MultiDirectoryOptions {
|
|
26
|
+
excludeBundled?: boolean;
|
|
27
|
+
excludeUser?: boolean;
|
|
28
|
+
excludeProject?: boolean;
|
|
29
|
+
additionalDirectories?: string[];
|
|
30
|
+
fileStorageOptions?: {
|
|
31
|
+
maxFileSizeBytes?: number;
|
|
32
|
+
cacheTTLms?: number;
|
|
33
|
+
cacheSize?: number;
|
|
34
|
+
indexCacheTTLms?: number;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export interface DirectoryInfo {
|
|
38
|
+
path: string;
|
|
39
|
+
index: number;
|
|
40
|
+
type: 'bundled' | 'user' | 'project' | 'custom';
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Create a multi-directory storage with sensible defaults
|
|
44
|
+
*/
|
|
45
|
+
export declare function createMultiDirectoryWorkflowStorage(options?: MultiDirectoryOptions): MultiDirectoryWorkflowStorage;
|
|
46
|
+
/**
|
|
47
|
+
* Initialize user workflow directory if it doesn't exist
|
|
48
|
+
*/
|
|
49
|
+
export declare function initializeUserWorkflowDirectory(): Promise<string>;
|
|
50
|
+
//# sourceMappingURL=multi-directory-workflow-storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-directory-workflow-storage.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/storage/multi-directory-workflow-storage.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGlE;;;;;;;GAOG;AACH,qBAAa,6BAA8B,YAAW,gBAAgB;IACpE,OAAO,CAAC,gBAAgB,CAA6B;gBAEzC,OAAO,GAAE,qBAA0B;IAS/C,OAAO,CAAC,kBAAkB;IAgDpB,gBAAgB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IA8BvC,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAmBrD,qBAAqB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAWnD,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB/C;;OAEG;IACI,gBAAgB,IAAI,aAAa,EAAE;IAQ1C,OAAO,CAAC,gBAAgB;CAYzB;AAED,MAAM,WAAW,qBAAqB;IACpC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,kBAAkB,CAAC,EAAE;QACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;CACjD;AAED;;GAEG;AACH,wBAAgB,mCAAmC,CAAC,OAAO,GAAE,qBAA0B,GAAG,6BAA6B,CAStH;AAED;;GAEG;AACH,wBAAsB,+BAA+B,IAAI,OAAO,CAAC,MAAM,CAAC,CAmCvE"}
|