@exaudeus/workrail 0.0.9 → 0.0.11
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/dist/application/app.js +1 -1
- package/dist/application/app.js.map +1 -1
- package/dist/application/services/enhanced-error-service.d.ts +81 -0
- package/dist/application/services/enhanced-error-service.d.ts.map +1 -0
- package/dist/application/services/enhanced-error-service.js +215 -0
- package/dist/application/services/enhanced-error-service.js.map +1 -0
- package/dist/application/use-cases/get-workflow.d.ts +17 -2
- package/dist/application/use-cases/get-workflow.d.ts.map +1 -1
- package/dist/application/use-cases/get-workflow.js +46 -3
- package/dist/application/use-cases/get-workflow.js.map +1 -1
- package/dist/application/use-cases/validate-workflow-json.d.ts.map +1 -1
- package/dist/application/use-cases/validate-workflow-json.js +2 -43
- package/dist/application/use-cases/validate-workflow-json.js.map +1 -1
- package/dist/application/validation.d.ts.map +1 -1
- package/dist/application/validation.js +2 -1
- package/dist/application/validation.js.map +1 -1
- package/dist/mcp-server.js +103 -10
- package/dist/mcp-server.js.map +1 -1
- package/dist/types/session-types.d.ts +354 -0
- package/dist/types/session-types.d.ts.map +1 -0
- package/dist/types/session-types.js +89 -0
- package/dist/types/session-types.js.map +1 -0
- package/dist/validation/response-validator.d.ts.map +1 -1
- package/dist/validation/response-validator.js +22 -2
- package/dist/validation/response-validator.js.map +1 -1
- package/dist/validation/schemas.d.ts.map +1 -1
- package/dist/validation/schemas.js +7 -1
- package/dist/validation/schemas.js.map +1 -1
- package/package.json +1 -1
- package/spec/mcp-api-v1.0.md +41 -20
package/dist/application/app.js
CHANGED
|
@@ -105,7 +105,7 @@ function buildWorkflowApplication(workflowService, validator = request_validator
|
|
|
105
105
|
return { workflows };
|
|
106
106
|
});
|
|
107
107
|
app.register(exports.METHOD_NAMES.WORKFLOW_GET, async (params) => {
|
|
108
|
-
return getWorkflowUseCase(params.id);
|
|
108
|
+
return getWorkflowUseCase(params.id, params.mode);
|
|
109
109
|
});
|
|
110
110
|
app.register(exports.METHOD_NAMES.WORKFLOW_NEXT, async (params) => {
|
|
111
111
|
return getNextStepUseCase(params.workflowId, params.completedSteps || [], params.context);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/application/app.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/application/app.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { ErrorObject } from 'ajv';
|
|
2
|
+
/**
|
|
3
|
+
* Enhanced Error Service
|
|
4
|
+
*
|
|
5
|
+
* Transforms AJV error objects into extremely specific, user-friendly error messages
|
|
6
|
+
* that provide exact field names, locations, and actionable guidance.
|
|
7
|
+
*
|
|
8
|
+
* Based on comprehensive error structure analysis confirming:
|
|
9
|
+
* - 100% of additionalProperties errors provide exact field names
|
|
10
|
+
* - 82% of errors have meaningful instance paths for location tracking
|
|
11
|
+
* - Complete parameter information for all error types
|
|
12
|
+
*/
|
|
13
|
+
export declare class EnhancedErrorService {
|
|
14
|
+
/**
|
|
15
|
+
* Transform AJV errors into enhanced, user-friendly messages
|
|
16
|
+
* @param errors Array of AJV ErrorObject instances
|
|
17
|
+
* @returns Array of enhanced error messages with specific details
|
|
18
|
+
*/
|
|
19
|
+
static enhanceErrors(errors: ErrorObject[]): string[];
|
|
20
|
+
/**
|
|
21
|
+
* Prioritize errors by severity and importance
|
|
22
|
+
* Critical: additionalProperties, required fields
|
|
23
|
+
* High: type mismatches, pattern violations
|
|
24
|
+
* Medium: array/object constraints
|
|
25
|
+
* Low: schema composition errors
|
|
26
|
+
*/
|
|
27
|
+
private static prioritizeErrors;
|
|
28
|
+
/**
|
|
29
|
+
* Transform a single AJV error into an enhanced message
|
|
30
|
+
*/
|
|
31
|
+
private static transformError;
|
|
32
|
+
/**
|
|
33
|
+
* Convert instancePath to human-readable location description
|
|
34
|
+
*/
|
|
35
|
+
private static getLocationDescription;
|
|
36
|
+
/**
|
|
37
|
+
* Handle additionalProperties errors - our primary target
|
|
38
|
+
* These provide exact field names via params.additionalProperty
|
|
39
|
+
*/
|
|
40
|
+
private static handleAdditionalProperties;
|
|
41
|
+
/**
|
|
42
|
+
* Handle required field errors
|
|
43
|
+
* These provide missing field names via params.missingProperty
|
|
44
|
+
*/
|
|
45
|
+
private static handleRequired;
|
|
46
|
+
/**
|
|
47
|
+
* Handle type mismatch errors
|
|
48
|
+
* These provide expected type via params.type
|
|
49
|
+
*/
|
|
50
|
+
private static handleType;
|
|
51
|
+
/**
|
|
52
|
+
* Handle pattern validation errors
|
|
53
|
+
* These provide the regex pattern via params.pattern
|
|
54
|
+
*/
|
|
55
|
+
private static handlePattern;
|
|
56
|
+
/**
|
|
57
|
+
* Handle minimum items array errors
|
|
58
|
+
*/
|
|
59
|
+
private static handleMinItems;
|
|
60
|
+
/**
|
|
61
|
+
* Handle maximum items array errors
|
|
62
|
+
*/
|
|
63
|
+
private static handleMaxItems;
|
|
64
|
+
/**
|
|
65
|
+
* Handle enum validation errors
|
|
66
|
+
*/
|
|
67
|
+
private static handleEnum;
|
|
68
|
+
/**
|
|
69
|
+
* Handle oneOf schema composition errors
|
|
70
|
+
*/
|
|
71
|
+
private static handleOneOf;
|
|
72
|
+
/**
|
|
73
|
+
* Handle anyOf schema composition errors
|
|
74
|
+
*/
|
|
75
|
+
private static handleAnyOf;
|
|
76
|
+
/**
|
|
77
|
+
* Handle generic/unknown error types
|
|
78
|
+
*/
|
|
79
|
+
private static handleGeneric;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=enhanced-error-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enhanced-error-service.d.ts","sourceRoot":"","sources":["../../../src/application/services/enhanced-error-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AAElC;;;;;;;;;;GAUG;AACH,qBAAa,oBAAoB;IAC/B;;;;OAIG;WACW,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE;IAW5D;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAsB/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IA2B7B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAsCrC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,0BAA0B;IASzC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAS7B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IASzB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAS5B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAS7B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAS7B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IASzB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAI1B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAI1B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;CAG7B"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EnhancedErrorService = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Enhanced Error Service
|
|
6
|
+
*
|
|
7
|
+
* Transforms AJV error objects into extremely specific, user-friendly error messages
|
|
8
|
+
* that provide exact field names, locations, and actionable guidance.
|
|
9
|
+
*
|
|
10
|
+
* Based on comprehensive error structure analysis confirming:
|
|
11
|
+
* - 100% of additionalProperties errors provide exact field names
|
|
12
|
+
* - 82% of errors have meaningful instance paths for location tracking
|
|
13
|
+
* - Complete parameter information for all error types
|
|
14
|
+
*/
|
|
15
|
+
class EnhancedErrorService {
|
|
16
|
+
/**
|
|
17
|
+
* Transform AJV errors into enhanced, user-friendly messages
|
|
18
|
+
* @param errors Array of AJV ErrorObject instances
|
|
19
|
+
* @returns Array of enhanced error messages with specific details
|
|
20
|
+
*/
|
|
21
|
+
static enhanceErrors(errors) {
|
|
22
|
+
if (!errors || errors.length === 0) {
|
|
23
|
+
return [];
|
|
24
|
+
}
|
|
25
|
+
// Sort errors by priority: Critical -> High -> Medium -> Low
|
|
26
|
+
const prioritizedErrors = this.prioritizeErrors(errors);
|
|
27
|
+
return prioritizedErrors.map(error => this.transformError(error));
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Prioritize errors by severity and importance
|
|
31
|
+
* Critical: additionalProperties, required fields
|
|
32
|
+
* High: type mismatches, pattern violations
|
|
33
|
+
* Medium: array/object constraints
|
|
34
|
+
* Low: schema composition errors
|
|
35
|
+
*/
|
|
36
|
+
static prioritizeErrors(errors) {
|
|
37
|
+
const priority = {
|
|
38
|
+
additionalProperties: 1, // Critical - exact field name available
|
|
39
|
+
required: 1, // Critical - missing required field
|
|
40
|
+
type: 2, // High - type mismatch
|
|
41
|
+
pattern: 2, // High - pattern violation
|
|
42
|
+
minItems: 3, // Medium - array constraints
|
|
43
|
+
maxItems: 3, // Medium - array constraints
|
|
44
|
+
minProperties: 3, // Medium - object constraints
|
|
45
|
+
maxProperties: 3, // Medium - object constraints
|
|
46
|
+
oneOf: 4, // Low - schema composition
|
|
47
|
+
anyOf: 4, // Low - schema composition
|
|
48
|
+
allOf: 4, // Low - schema composition
|
|
49
|
+
};
|
|
50
|
+
return errors.sort((a, b) => {
|
|
51
|
+
const aPriority = priority[a.keyword] || 5;
|
|
52
|
+
const bPriority = priority[b.keyword] || 5;
|
|
53
|
+
return aPriority - bPriority;
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Transform a single AJV error into an enhanced message
|
|
58
|
+
*/
|
|
59
|
+
static transformError(error) {
|
|
60
|
+
const location = this.getLocationDescription(error.instancePath);
|
|
61
|
+
switch (error.keyword) {
|
|
62
|
+
case 'additionalProperties':
|
|
63
|
+
return this.handleAdditionalProperties(error, location);
|
|
64
|
+
case 'required':
|
|
65
|
+
return this.handleRequired(error, location);
|
|
66
|
+
case 'type':
|
|
67
|
+
return this.handleType(error, location);
|
|
68
|
+
case 'pattern':
|
|
69
|
+
return this.handlePattern(error, location);
|
|
70
|
+
case 'minItems':
|
|
71
|
+
return this.handleMinItems(error, location);
|
|
72
|
+
case 'maxItems':
|
|
73
|
+
return this.handleMaxItems(error, location);
|
|
74
|
+
case 'enum':
|
|
75
|
+
return this.handleEnum(error, location);
|
|
76
|
+
case 'oneOf':
|
|
77
|
+
return this.handleOneOf(error, location);
|
|
78
|
+
case 'anyOf':
|
|
79
|
+
return this.handleAnyOf(error, location);
|
|
80
|
+
default:
|
|
81
|
+
return this.handleGeneric(error, location);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Convert instancePath to human-readable location description
|
|
86
|
+
*/
|
|
87
|
+
static getLocationDescription(instancePath) {
|
|
88
|
+
if (!instancePath || instancePath === '') {
|
|
89
|
+
return 'at root level';
|
|
90
|
+
}
|
|
91
|
+
// Remove leading slash
|
|
92
|
+
const path = instancePath.startsWith('/') ? instancePath.slice(1) : instancePath;
|
|
93
|
+
// Convert paths to human-readable descriptions
|
|
94
|
+
if (path === 'name')
|
|
95
|
+
return "in field 'name'";
|
|
96
|
+
if (path === 'description')
|
|
97
|
+
return "in field 'description'";
|
|
98
|
+
if (path === 'version')
|
|
99
|
+
return "in field 'version'";
|
|
100
|
+
if (path === 'steps')
|
|
101
|
+
return "in 'steps' array";
|
|
102
|
+
// Handle array indices: /steps/0 -> "in step 1"
|
|
103
|
+
const stepMatch = path.match(/^steps\/(\d+)$/);
|
|
104
|
+
if (stepMatch && stepMatch[1]) {
|
|
105
|
+
return `in step ${parseInt(stepMatch[1]) + 1}`;
|
|
106
|
+
}
|
|
107
|
+
// Handle nested step properties: /steps/0/name -> "in step 1, field 'name'"
|
|
108
|
+
const stepFieldMatch = path.match(/^steps\/(\d+)\/(.+)$/);
|
|
109
|
+
if (stepFieldMatch && stepFieldMatch[1] && stepFieldMatch[2]) {
|
|
110
|
+
const stepNumber = parseInt(stepFieldMatch[1]) + 1;
|
|
111
|
+
const fieldPath = stepFieldMatch[2];
|
|
112
|
+
// Handle validation criteria paths
|
|
113
|
+
if (fieldPath.startsWith('validationCriteria/')) {
|
|
114
|
+
return `in step ${stepNumber}, validation criteria`;
|
|
115
|
+
}
|
|
116
|
+
return `in step ${stepNumber}, field '${fieldPath}'`;
|
|
117
|
+
}
|
|
118
|
+
// Fallback: return cleaned path
|
|
119
|
+
return `at '${path.replace(/\//g, '.')}'`;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Handle additionalProperties errors - our primary target
|
|
123
|
+
* These provide exact field names via params.additionalProperty
|
|
124
|
+
*/
|
|
125
|
+
static handleAdditionalProperties(error, location) {
|
|
126
|
+
const fieldName = error.params?.['additionalProperty'];
|
|
127
|
+
if (!fieldName) {
|
|
128
|
+
return `Unexpected property found ${location}. Please check the workflow schema for allowed properties.`;
|
|
129
|
+
}
|
|
130
|
+
return `Unexpected property '${fieldName}' found ${location}. This property is not defined in the workflow schema. Please remove it or check for typos.`;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Handle required field errors
|
|
134
|
+
* These provide missing field names via params.missingProperty
|
|
135
|
+
*/
|
|
136
|
+
static handleRequired(error, location) {
|
|
137
|
+
const missingField = error.params?.['missingProperty'];
|
|
138
|
+
if (!missingField) {
|
|
139
|
+
return `Missing required field ${location}. Please check the workflow schema for required properties.`;
|
|
140
|
+
}
|
|
141
|
+
return `Missing required field '${missingField}' ${location}. This field is mandatory and must be provided.`;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Handle type mismatch errors
|
|
145
|
+
* These provide expected type via params.type
|
|
146
|
+
*/
|
|
147
|
+
static handleType(error, location) {
|
|
148
|
+
const expectedType = error.params?.['type'];
|
|
149
|
+
if (!expectedType) {
|
|
150
|
+
return `Invalid data type ${location}. Please check the expected type in the workflow schema.`;
|
|
151
|
+
}
|
|
152
|
+
return `Invalid data type ${location}. Expected '${expectedType}' but received a different type.`;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Handle pattern validation errors
|
|
156
|
+
* These provide the regex pattern via params.pattern
|
|
157
|
+
*/
|
|
158
|
+
static handlePattern(error, location) {
|
|
159
|
+
const pattern = error.params?.['pattern'];
|
|
160
|
+
if (!pattern) {
|
|
161
|
+
return `Value ${location} does not match the required pattern format.`;
|
|
162
|
+
}
|
|
163
|
+
return `Value ${location} does not match the required pattern: ${pattern}`;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Handle minimum items array errors
|
|
167
|
+
*/
|
|
168
|
+
static handleMinItems(error, location) {
|
|
169
|
+
const minItems = error.params?.['limit'];
|
|
170
|
+
if (minItems === undefined) {
|
|
171
|
+
return `Array ${location} has too few items.`;
|
|
172
|
+
}
|
|
173
|
+
return `Array ${location} must contain at least ${minItems} item(s).`;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Handle maximum items array errors
|
|
177
|
+
*/
|
|
178
|
+
static handleMaxItems(error, location) {
|
|
179
|
+
const maxItems = error.params?.['limit'];
|
|
180
|
+
if (maxItems === undefined) {
|
|
181
|
+
return `Array ${location} has too many items.`;
|
|
182
|
+
}
|
|
183
|
+
return `Array ${location} must contain no more than ${maxItems} item(s).`;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Handle enum validation errors
|
|
187
|
+
*/
|
|
188
|
+
static handleEnum(error, location) {
|
|
189
|
+
const allowedValues = error.params?.['allowedValues'];
|
|
190
|
+
if (!allowedValues || !Array.isArray(allowedValues)) {
|
|
191
|
+
return `Value ${location} is not one of the allowed values.`;
|
|
192
|
+
}
|
|
193
|
+
return `Value ${location} must be one of: ${allowedValues.map(v => `'${v}'`).join(', ')}`;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Handle oneOf schema composition errors
|
|
197
|
+
*/
|
|
198
|
+
static handleOneOf(_error, location) {
|
|
199
|
+
return `Value ${location} must match exactly one of the allowed schema patterns. Please check the workflow schema for valid formats.`;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Handle anyOf schema composition errors
|
|
203
|
+
*/
|
|
204
|
+
static handleAnyOf(_error, location) {
|
|
205
|
+
return `Value ${location} must match at least one of the allowed schema patterns. Please check the workflow schema for valid formats.`;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Handle generic/unknown error types
|
|
209
|
+
*/
|
|
210
|
+
static handleGeneric(error, location) {
|
|
211
|
+
return `Validation error ${location}: ${error.message || 'Unknown validation error'}`;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
exports.EnhancedErrorService = EnhancedErrorService;
|
|
215
|
+
//# sourceMappingURL=enhanced-error-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enhanced-error-service.js","sourceRoot":"","sources":["../../../src/application/services/enhanced-error-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,25 @@
|
|
|
1
1
|
import { WorkflowService } from '../services/workflow-service';
|
|
2
|
-
import { Workflow } from '../../types/mcp-types';
|
|
2
|
+
import { Workflow, WorkflowStep } from '../../types/mcp-types';
|
|
3
|
+
export type WorkflowGetMode = 'metadata' | 'preview' | undefined;
|
|
4
|
+
export interface WorkflowMetadata {
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
version: string;
|
|
9
|
+
preconditions?: string[] | undefined;
|
|
10
|
+
clarificationPrompts?: string[] | undefined;
|
|
11
|
+
metaGuidance?: string[] | undefined;
|
|
12
|
+
totalSteps: number;
|
|
13
|
+
}
|
|
14
|
+
export interface WorkflowPreview extends WorkflowMetadata {
|
|
15
|
+
firstStep: WorkflowStep | null;
|
|
16
|
+
}
|
|
17
|
+
export type WorkflowGetResult = Workflow | WorkflowMetadata | WorkflowPreview;
|
|
3
18
|
/**
|
|
4
19
|
* Factory function that creates a pure use-case for retrieving workflows.
|
|
5
20
|
* Dependencies are injected at creation time, returning a pure function.
|
|
6
21
|
*/
|
|
7
|
-
export declare function createGetWorkflow(service: WorkflowService): (workflowId: string) => Promise<
|
|
22
|
+
export declare function createGetWorkflow(service: WorkflowService): (workflowId: string, mode?: WorkflowGetMode) => Promise<WorkflowGetResult>;
|
|
8
23
|
/**
|
|
9
24
|
* @deprecated Use createGetWorkflow factory function instead
|
|
10
25
|
* Legacy export for backward compatibility
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-workflow.d.ts","sourceRoot":"","sources":["../../../src/application/use-cases/get-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"get-workflow.d.ts","sourceRoot":"","sources":["../../../src/application/use-cases/get-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAK/D,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAGjE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACrC,oBAAoB,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAgB,SAAQ,gBAAgB;IACvD,SAAS,EAAE,YAAY,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAE9E;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,IAC1C,YAAY,MAAM,EAAE,OAAM,eAA2B,KAAG,OAAO,CAAC,iBAAiB,CAAC,CAqCjG;AAkBD;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,eAAe,EACxB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,QAAQ,CAAC,CAEnB"}
|
|
@@ -3,24 +3,67 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createGetWorkflow = createGetWorkflow;
|
|
4
4
|
exports.getWorkflow = getWorkflow;
|
|
5
5
|
const error_handler_1 = require("../../core/error-handler");
|
|
6
|
+
const condition_evaluator_1 = require("../../utils/condition-evaluator");
|
|
6
7
|
/**
|
|
7
8
|
* Factory function that creates a pure use-case for retrieving workflows.
|
|
8
9
|
* Dependencies are injected at creation time, returning a pure function.
|
|
9
10
|
*/
|
|
10
11
|
function createGetWorkflow(service) {
|
|
11
|
-
return async (workflowId) => {
|
|
12
|
+
return async (workflowId, mode = 'preview') => {
|
|
12
13
|
const workflow = await service.getWorkflowById(workflowId);
|
|
13
14
|
if (!workflow) {
|
|
14
15
|
throw new error_handler_1.WorkflowNotFoundError(workflowId);
|
|
15
16
|
}
|
|
16
|
-
|
|
17
|
+
// Handle different modes
|
|
18
|
+
switch (mode) {
|
|
19
|
+
case 'metadata':
|
|
20
|
+
return {
|
|
21
|
+
id: workflow.id,
|
|
22
|
+
name: workflow.name,
|
|
23
|
+
description: workflow.description,
|
|
24
|
+
version: workflow.version,
|
|
25
|
+
preconditions: workflow.preconditions,
|
|
26
|
+
clarificationPrompts: workflow.clarificationPrompts,
|
|
27
|
+
metaGuidance: workflow.metaGuidance,
|
|
28
|
+
totalSteps: workflow.steps.length
|
|
29
|
+
};
|
|
30
|
+
case 'preview':
|
|
31
|
+
default:
|
|
32
|
+
// Find the first eligible step (similar to workflow_next logic)
|
|
33
|
+
const firstStep = findFirstEligibleStep(workflow.steps);
|
|
34
|
+
return {
|
|
35
|
+
id: workflow.id,
|
|
36
|
+
name: workflow.name,
|
|
37
|
+
description: workflow.description,
|
|
38
|
+
version: workflow.version,
|
|
39
|
+
preconditions: workflow.preconditions,
|
|
40
|
+
clarificationPrompts: workflow.clarificationPrompts,
|
|
41
|
+
metaGuidance: workflow.metaGuidance,
|
|
42
|
+
totalSteps: workflow.steps.length,
|
|
43
|
+
firstStep
|
|
44
|
+
};
|
|
45
|
+
}
|
|
17
46
|
};
|
|
18
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Helper function to find the first eligible step in a workflow.
|
|
50
|
+
* Uses the same logic as workflow_next but with empty completed steps and context.
|
|
51
|
+
*/
|
|
52
|
+
function findFirstEligibleStep(steps, context = {}) {
|
|
53
|
+
return steps.find((step) => {
|
|
54
|
+
// If step has a runCondition, evaluate it
|
|
55
|
+
if (step.runCondition) {
|
|
56
|
+
return (0, condition_evaluator_1.evaluateCondition)(step.runCondition, context);
|
|
57
|
+
}
|
|
58
|
+
// No condition means step is eligible
|
|
59
|
+
return true;
|
|
60
|
+
}) || null;
|
|
61
|
+
}
|
|
19
62
|
/**
|
|
20
63
|
* @deprecated Use createGetWorkflow factory function instead
|
|
21
64
|
* Legacy export for backward compatibility
|
|
22
65
|
*/
|
|
23
66
|
async function getWorkflow(service, workflowId) {
|
|
24
|
-
return createGetWorkflow(service)(workflowId);
|
|
67
|
+
return createGetWorkflow(service)(workflowId, 'preview');
|
|
25
68
|
}
|
|
26
69
|
//# sourceMappingURL=get-workflow.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-workflow.js","sourceRoot":"","sources":["../../../src/application/use-cases/get-workflow.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"get-workflow.js","sourceRoot":"","sources":["../../../src/application/use-cases/get-workflow.ts"],"names":[],"mappings":";;AA8BA,8CAsCC;AAsBD,kCAKC;AA7FD,4DAAiE;AACjE,yEAAsF;AAuBtF;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,OAAwB;IACxD,OAAO,KAAK,EAAE,UAAkB,EAAE,OAAwB,SAAS,EAA8B,EAAE;QACjG,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAC3D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,qCAAqB,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC;QAED,yBAAyB;QACzB,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,UAAU;gBACb,OAAO;oBACL,EAAE,EAAE,QAAQ,CAAC,EAAE;oBACf,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;oBACjC,OAAO,EAAE,QAAQ,CAAC,OAAO;oBACzB,aAAa,EAAE,QAAQ,CAAC,aAAa;oBACrC,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB;oBACnD,YAAY,EAAE,QAAQ,CAAC,YAAY;oBACnC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM;iBAClC,CAAC;YAEJ,KAAK,SAAS,CAAC;YACf;gBACE,gEAAgE;gBAChE,MAAM,SAAS,GAAG,qBAAqB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACxD,OAAO;oBACL,EAAE,EAAE,QAAQ,CAAC,EAAE;oBACf,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;oBACjC,OAAO,EAAE,QAAQ,CAAC,OAAO;oBACzB,aAAa,EAAE,QAAQ,CAAC,aAAa;oBACrC,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB;oBACnD,YAAY,EAAE,QAAQ,CAAC,YAAY;oBACnC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM;oBACjC,SAAS;iBACV,CAAC;QACN,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,qBAAqB,CAAC,KAAqB,EAAE,UAA4B,EAAE;IAClF,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QACzB,0CAA0C;QAC1C,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,IAAA,uCAAiB,EAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC;QAED,sCAAsC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,IAAI,IAAI,CAAC;AACb,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,WAAW,CAC/B,OAAwB,EACxB,UAAkB;IAElB,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,SAAS,CAAsB,CAAC;AAChF,CAAC"}
|
|
@@ -1 +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,
|
|
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,CA2DzC;AAiDD;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,4BAA4B,CAAC,CAEvC"}
|
|
@@ -50,10 +50,8 @@ function createValidateWorkflowJson() {
|
|
|
50
50
|
const issues = [];
|
|
51
51
|
const suggestions = [];
|
|
52
52
|
if (!validationResult.valid) {
|
|
53
|
-
//
|
|
54
|
-
validationResult.errors
|
|
55
|
-
issues.push(enhanceErrorMessage(error));
|
|
56
|
-
});
|
|
53
|
+
// Validation errors are already enhanced by the EnhancedErrorService
|
|
54
|
+
issues.push(...validationResult.errors);
|
|
57
55
|
// Add general suggestions based on common validation errors
|
|
58
56
|
suggestions.push(...generateSuggestions(validationResult.errors));
|
|
59
57
|
}
|
|
@@ -64,45 +62,6 @@ function createValidateWorkflowJson() {
|
|
|
64
62
|
};
|
|
65
63
|
};
|
|
66
64
|
}
|
|
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
65
|
/**
|
|
107
66
|
* Generate actionable suggestions based on validation errors
|
|
108
67
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-workflow-json.js","sourceRoot":"","sources":["../../../src/application/use-cases/validate-workflow-json.ts"],"names":[],"mappings":";;AAeA,
|
|
1
|
+
{"version":3,"file":"validate-workflow-json.js","sourceRoot":"","sources":["../../../src/application/use-cases/validate-workflow-json.ts"],"names":[],"mappings":";;AAeA,gEA8DC;AAqDD,oDAIC;AAtID,8CAA2E;AAW3E;;;GAGG;AACH,SAAgB,0BAA0B;IACxC,OAAO,KAAK,EACV,YAAoB,EACmB,EAAE;QACzC,8CAA8C;QAC9C,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,SAAS,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;YAC5F,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,CAAC,yDAAyD,CAAC;gBACnE,WAAW,EAAE,CAAC,8CAA8C,CAAC;aAC9D,CAAC;QACJ,CAAC;QAED,qCAAqC;QACrC,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,CAAC,iCAAiC,CAAC;gBAC3C,WAAW,EAAE,CAAC,8CAA8C,CAAC;aAC9D,CAAC;QACJ,CAAC;QAED,0CAA0C;QAC1C,IAAI,cAAuB,CAAC;QAC5B,IAAI,CAAC;YACH,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B,CAAC;YAC3F,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,CAAC,wBAAwB,YAAY,EAAE,CAAC;gBAChD,WAAW,EAAE;oBACX,4DAA4D;oBAC5D,yCAAyC;oBACzC,uDAAuD;oBACvD,8DAA8D;iBAC/D;aACF,CAAC;QACJ,CAAC;QAED,yDAAyD;QACzD,MAAM,gBAAgB,GAA6B,IAAA,6BAAgB,EAAC,cAAc,CAAC,CAAC;QAEpF,0DAA0D;QAC1D,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;YAC5B,qEAAqE;YACrE,MAAM,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAExC,4DAA4D;YAC5D,WAAW,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QACpE,CAAC;QAED,OAAO;YACL,KAAK,EAAE,gBAAgB,CAAC,KAAK;YAC7B,MAAM;YACN,WAAW;SACZ,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAID;;GAEG;AACH,SAAS,mBAAmB,CAAC,MAAgB;IAC3C,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAEjD,iDAAiD;IACjD,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,WAAW,CAAC,IAAI,CAAC,2FAA2F,CAAC,CAAC;IAChH,CAAC;IAED,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,WAAW,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACtC,WAAW,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;IAC9F,CAAC;IAED,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,WAAW,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;IAC/E,CAAC;IAED,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,WAAW,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC;IACnG,CAAC;IAED,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,WAAW,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;IACxF,CAAC;IAED,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,WAAW,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;IAC1F,CAAC;IAED,yDAAyD;IACzD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,WAAW,CAAC,IAAI,CAAC,gFAAgF,CAAC,CAAC;QACnG,WAAW,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;IACzF,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,oBAAoB,CACxC,YAAoB;IAEpB,OAAO,0BAA0B,EAAE,CAAC,YAAY,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/application/validation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/application/validation.ts"],"names":[],"mappings":"AAUA,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"}
|
|
@@ -5,6 +5,7 @@ const tslib_1 = require("tslib");
|
|
|
5
5
|
const fs_1 = tslib_1.__importDefault(require("fs"));
|
|
6
6
|
const path_1 = tslib_1.__importDefault(require("path"));
|
|
7
7
|
const ajv_1 = tslib_1.__importDefault(require("ajv"));
|
|
8
|
+
const enhanced_error_service_1 = require("./services/enhanced-error-service");
|
|
8
9
|
const schemaPath = path_1.default.resolve(__dirname, '../../spec/workflow.schema.json');
|
|
9
10
|
const schema = JSON.parse(fs_1.default.readFileSync(schemaPath, 'utf-8'));
|
|
10
11
|
const ajv = new ajv_1.default({ allErrors: true, strict: false });
|
|
@@ -13,7 +14,7 @@ function validateWorkflow(workflow) {
|
|
|
13
14
|
const ok = validate(workflow);
|
|
14
15
|
return {
|
|
15
16
|
valid: Boolean(ok),
|
|
16
|
-
errors: ok ? [] : (validate.errors || [])
|
|
17
|
+
errors: ok ? [] : enhanced_error_service_1.EnhancedErrorService.enhanceErrors(validate.errors || [])
|
|
17
18
|
};
|
|
18
19
|
}
|
|
19
20
|
//# sourceMappingURL=validation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/application/validation.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/application/validation.ts"],"names":[],"mappings":";;AAeA,4CAMC;;AArBD,oDAAoB;AACpB,wDAAwB;AACxB,sDAAsB;AACtB,8EAAyE;AAEzE,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,6CAAoB,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC;KAC5E,CAAC;AACJ,CAAC"}
|