@codemcp/workflows-core 3.1.16
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/.turbo/turbo-build.log +4 -0
- package/LICENSE +674 -0
- package/dist/config-manager.d.ts +24 -0
- package/dist/config-manager.js +68 -0
- package/dist/config-manager.js.map +1 -0
- package/dist/conversation-manager.d.ts +97 -0
- package/dist/conversation-manager.js +367 -0
- package/dist/conversation-manager.js.map +1 -0
- package/dist/database.d.ts +73 -0
- package/dist/database.js +500 -0
- package/dist/database.js.map +1 -0
- package/dist/file-detection-manager.d.ts +53 -0
- package/dist/file-detection-manager.js +221 -0
- package/dist/file-detection-manager.js.map +1 -0
- package/dist/git-manager.d.ts +14 -0
- package/dist/git-manager.js +59 -0
- package/dist/git-manager.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/instruction-generator.d.ts +69 -0
- package/dist/instruction-generator.js +133 -0
- package/dist/instruction-generator.js.map +1 -0
- package/dist/interaction-logger.d.ts +37 -0
- package/dist/interaction-logger.js +87 -0
- package/dist/interaction-logger.js.map +1 -0
- package/dist/logger.d.ts +64 -0
- package/dist/logger.js +283 -0
- package/dist/logger.js.map +1 -0
- package/dist/path-validation-utils.d.ts +51 -0
- package/dist/path-validation-utils.js +202 -0
- package/dist/path-validation-utils.js.map +1 -0
- package/dist/plan-manager.d.ts +65 -0
- package/dist/plan-manager.js +256 -0
- package/dist/plan-manager.js.map +1 -0
- package/dist/project-docs-manager.d.ts +119 -0
- package/dist/project-docs-manager.js +357 -0
- package/dist/project-docs-manager.js.map +1 -0
- package/dist/state-machine-loader.d.ts +60 -0
- package/dist/state-machine-loader.js +235 -0
- package/dist/state-machine-loader.js.map +1 -0
- package/dist/state-machine-types.d.ts +58 -0
- package/dist/state-machine-types.js +7 -0
- package/dist/state-machine-types.js.map +1 -0
- package/dist/state-machine.d.ts +52 -0
- package/dist/state-machine.js +256 -0
- package/dist/state-machine.js.map +1 -0
- package/dist/system-prompt-generator.d.ts +17 -0
- package/dist/system-prompt-generator.js +113 -0
- package/dist/system-prompt-generator.js.map +1 -0
- package/dist/template-manager.d.ts +61 -0
- package/dist/template-manager.js +229 -0
- package/dist/template-manager.js.map +1 -0
- package/dist/transition-engine.d.ts +70 -0
- package/dist/transition-engine.js +240 -0
- package/dist/transition-engine.js.map +1 -0
- package/dist/types.d.ts +56 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/workflow-manager.d.ts +89 -0
- package/dist/workflow-manager.js +466 -0
- package/dist/workflow-manager.js.map +1 -0
- package/package.json +27 -0
- package/src/config-manager.ts +96 -0
- package/src/conversation-manager.ts +492 -0
- package/src/database.ts +685 -0
- package/src/file-detection-manager.ts +302 -0
- package/src/git-manager.ts +64 -0
- package/src/index.ts +28 -0
- package/src/instruction-generator.ts +210 -0
- package/src/interaction-logger.ts +109 -0
- package/src/logger.ts +353 -0
- package/src/path-validation-utils.ts +261 -0
- package/src/plan-manager.ts +323 -0
- package/src/project-docs-manager.ts +522 -0
- package/src/state-machine-loader.ts +308 -0
- package/src/state-machine-types.ts +72 -0
- package/src/state-machine.ts +370 -0
- package/src/system-prompt-generator.ts +122 -0
- package/src/template-manager.ts +321 -0
- package/src/transition-engine.ts +386 -0
- package/src/types.ts +60 -0
- package/src/workflow-manager.ts +601 -0
- package/test/unit/conversation-manager.test.ts +179 -0
- package/test/unit/custom-workflow-loading.test.ts +174 -0
- package/test/unit/directory-linking-and-extensions.test.ts +338 -0
- package/test/unit/file-linking-integration.test.ts +256 -0
- package/test/unit/git-commit-integration.test.ts +91 -0
- package/test/unit/git-manager.test.ts +86 -0
- package/test/unit/install-workflow.test.ts +138 -0
- package/test/unit/instruction-generator.test.ts +247 -0
- package/test/unit/list-workflows-filtering.test.ts +68 -0
- package/test/unit/none-template-functionality.test.ts +224 -0
- package/test/unit/project-docs-manager.test.ts +337 -0
- package/test/unit/state-machine-loader.test.ts +234 -0
- package/test/unit/template-manager.test.ts +217 -0
- package/test/unit/validate-workflow-name.test.ts +150 -0
- package/test/unit/workflow-domain-filtering.test.ts +75 -0
- package/test/unit/workflow-enum-generation.test.ts +92 -0
- package/test/unit/workflow-manager-enhanced-path-resolution.test.ts +369 -0
- package/test/unit/workflow-manager-path-resolution.test.ts +150 -0
- package/test/unit/workflow-migration.test.ts +155 -0
- package/test/unit/workflow-override-by-name.test.ts +116 -0
- package/test/unit/workflow-prioritization.test.ts +38 -0
- package/test/unit/workflow-validation.test.ts +303 -0
- package/test/utils/e2e-test-setup.ts +453 -0
- package/test/utils/run-server-in-dir.sh +27 -0
- package/test/utils/temp-files.ts +308 -0
- package/test/utils/test-access.ts +79 -0
- package/test/utils/test-helpers.ts +286 -0
- package/test/utils/test-setup.ts +78 -0
- package/tsconfig.build.json +21 -0
- package/tsconfig.json +8 -0
- package/vitest.config.ts +18 -0
@@ -0,0 +1,89 @@
|
|
1
|
+
/**
|
2
|
+
* Workflow Manager
|
3
|
+
*
|
4
|
+
* Manages multiple predefined workflows and provides workflow discovery and selection
|
5
|
+
*/
|
6
|
+
import { YamlStateMachine } from './state-machine-types.js';
|
7
|
+
export interface WorkflowInfo {
|
8
|
+
name: string;
|
9
|
+
displayName: string;
|
10
|
+
description: string;
|
11
|
+
initialState: string;
|
12
|
+
phases: string[];
|
13
|
+
metadata?: {
|
14
|
+
domain?: string;
|
15
|
+
complexity?: 'low' | 'medium' | 'high';
|
16
|
+
bestFor?: string[];
|
17
|
+
useCases?: string[];
|
18
|
+
examples?: string[];
|
19
|
+
};
|
20
|
+
}
|
21
|
+
/**
|
22
|
+
* Manages predefined workflows and provides workflow discovery
|
23
|
+
*/
|
24
|
+
export declare class WorkflowManager {
|
25
|
+
private predefinedWorkflows;
|
26
|
+
private projectWorkflows;
|
27
|
+
private workflowInfos;
|
28
|
+
private stateMachineLoader;
|
29
|
+
private lastProjectPath;
|
30
|
+
private enabledDomains;
|
31
|
+
constructor();
|
32
|
+
/**
|
33
|
+
* Parse enabled domains from environment variable
|
34
|
+
*/
|
35
|
+
private parseEnabledDomains;
|
36
|
+
/**
|
37
|
+
* Load project-specific workflows from .vibe/workflows/
|
38
|
+
*/
|
39
|
+
loadProjectWorkflows(projectPath: string): void;
|
40
|
+
/**
|
41
|
+
* Migrate legacy workflow.yaml to new workflows directory
|
42
|
+
*/
|
43
|
+
private migrateLegacyWorkflow;
|
44
|
+
/**
|
45
|
+
* Get all available workflows regardless of domain filtering
|
46
|
+
*/
|
47
|
+
getAllAvailableWorkflows(): WorkflowInfo[];
|
48
|
+
getAvailableWorkflows(): WorkflowInfo[];
|
49
|
+
/**
|
50
|
+
* Get available workflows for a specific project
|
51
|
+
* Applies configuration filtering and loads project-specific workflows
|
52
|
+
*/
|
53
|
+
getAvailableWorkflowsForProject(projectPath: string): WorkflowInfo[];
|
54
|
+
/**
|
55
|
+
* Get workflow information by name
|
56
|
+
*/
|
57
|
+
getWorkflowInfo(name: string): WorkflowInfo | undefined;
|
58
|
+
/**
|
59
|
+
* Get a specific workflow by name (checks both predefined and project workflows)
|
60
|
+
*/
|
61
|
+
getWorkflow(name: string): YamlStateMachine | undefined;
|
62
|
+
/**
|
63
|
+
* Check if a workflow name is a predefined workflow
|
64
|
+
*/
|
65
|
+
isPredefinedWorkflow(name: string): boolean;
|
66
|
+
/**
|
67
|
+
* Get workflow names as enum values for tool schema
|
68
|
+
* Includes both predefined and project workflows
|
69
|
+
*/
|
70
|
+
getWorkflowNames(): string[];
|
71
|
+
/**
|
72
|
+
* Load a workflow (predefined or custom) for a project
|
73
|
+
* FIXED: Now respects the workflow parameter correctly
|
74
|
+
*/
|
75
|
+
loadWorkflowForProject(projectPath: string, workflowName?: string): YamlStateMachine;
|
76
|
+
/**
|
77
|
+
* Find the workflows directory using multiple strategies
|
78
|
+
* This handles both development and npm package deployment scenarios
|
79
|
+
*/
|
80
|
+
private findWorkflowsDirectory;
|
81
|
+
/**
|
82
|
+
* Load all predefined workflows from resources/workflows directory
|
83
|
+
*/
|
84
|
+
private loadPredefinedWorkflows;
|
85
|
+
/**
|
86
|
+
* Validate a workflow name
|
87
|
+
*/
|
88
|
+
validateWorkflowName(workflowName: string, projectPath: string): boolean;
|
89
|
+
}
|
@@ -0,0 +1,466 @@
|
|
1
|
+
/**
|
2
|
+
* Workflow Manager
|
3
|
+
*
|
4
|
+
* Manages multiple predefined workflows and provides workflow discovery and selection
|
5
|
+
*/
|
6
|
+
import fs from 'node:fs';
|
7
|
+
import path from 'node:path';
|
8
|
+
import { createRequire } from 'node:module';
|
9
|
+
import { fileURLToPath } from 'node:url';
|
10
|
+
import { createLogger } from './logger.js';
|
11
|
+
import { StateMachineLoader } from './state-machine-loader.js';
|
12
|
+
import { ConfigManager } from './config-manager.js';
|
13
|
+
const logger = createLogger('WorkflowManager');
|
14
|
+
/**
|
15
|
+
* Manages predefined workflows and provides workflow discovery
|
16
|
+
*/
|
17
|
+
export class WorkflowManager {
|
18
|
+
predefinedWorkflows = new Map();
|
19
|
+
projectWorkflows = new Map();
|
20
|
+
workflowInfos = new Map();
|
21
|
+
stateMachineLoader;
|
22
|
+
lastProjectPath = null; // Track last loaded project path
|
23
|
+
enabledDomains;
|
24
|
+
constructor() {
|
25
|
+
this.stateMachineLoader = new StateMachineLoader();
|
26
|
+
this.enabledDomains = this.parseEnabledDomains();
|
27
|
+
this.loadPredefinedWorkflows();
|
28
|
+
}
|
29
|
+
/**
|
30
|
+
* Parse enabled domains from environment variable
|
31
|
+
*/
|
32
|
+
parseEnabledDomains() {
|
33
|
+
const domainsEnv = process.env.VIBE_WORKFLOW_DOMAINS;
|
34
|
+
if (!domainsEnv) {
|
35
|
+
return new Set(['code']);
|
36
|
+
}
|
37
|
+
return new Set(domainsEnv
|
38
|
+
.split(',')
|
39
|
+
.map(d => d.trim())
|
40
|
+
.filter(d => d));
|
41
|
+
}
|
42
|
+
/**
|
43
|
+
* Load project-specific workflows from .vibe/workflows/
|
44
|
+
*/
|
45
|
+
loadProjectWorkflows(projectPath) {
|
46
|
+
// Clear project workflows cache if project path changed
|
47
|
+
if (this.lastProjectPath !== projectPath) {
|
48
|
+
this.projectWorkflows.clear();
|
49
|
+
this.lastProjectPath = projectPath;
|
50
|
+
}
|
51
|
+
// First, migrate any legacy workflow files
|
52
|
+
this.migrateLegacyWorkflow(projectPath);
|
53
|
+
const workflowsDir = path.join(projectPath, '.vibe', 'workflows');
|
54
|
+
if (!fs.existsSync(workflowsDir)) {
|
55
|
+
return;
|
56
|
+
}
|
57
|
+
try {
|
58
|
+
const files = fs.readdirSync(workflowsDir);
|
59
|
+
const yamlFiles = files.filter(file => file.endsWith('.yaml') || file.endsWith('.yml'));
|
60
|
+
for (const file of yamlFiles) {
|
61
|
+
try {
|
62
|
+
const filePath = path.join(workflowsDir, file);
|
63
|
+
const workflow = this.stateMachineLoader.loadFromFile(filePath);
|
64
|
+
const workflowName = workflow.name; // Use name from YAML, not filename
|
65
|
+
// Project workflows are always loaded (no domain filtering)
|
66
|
+
this.projectWorkflows.set(workflowName, workflow);
|
67
|
+
const workflowInfo = {
|
68
|
+
name: workflowName,
|
69
|
+
displayName: workflow.name,
|
70
|
+
description: workflow.description,
|
71
|
+
initialState: workflow.initial_state,
|
72
|
+
phases: Object.keys(workflow.states),
|
73
|
+
metadata: workflow.metadata,
|
74
|
+
};
|
75
|
+
this.workflowInfos.set(workflowName, workflowInfo);
|
76
|
+
logger.info('Loaded project workflow', {
|
77
|
+
name: workflowName,
|
78
|
+
domain: workflow.metadata?.domain,
|
79
|
+
});
|
80
|
+
}
|
81
|
+
catch (error) {
|
82
|
+
logger.error('Failed to load project workflow', error, {
|
83
|
+
file,
|
84
|
+
});
|
85
|
+
}
|
86
|
+
}
|
87
|
+
}
|
88
|
+
catch (error) {
|
89
|
+
logger.error('Failed to scan project workflows directory', error, { workflowsDir });
|
90
|
+
}
|
91
|
+
}
|
92
|
+
/**
|
93
|
+
* Migrate legacy workflow.yaml to new workflows directory
|
94
|
+
*/
|
95
|
+
migrateLegacyWorkflow(projectPath) {
|
96
|
+
const legacyPaths = [
|
97
|
+
path.join(projectPath, '.vibe', 'workflow.yaml'),
|
98
|
+
path.join(projectPath, '.vibe', 'workflow.yml'),
|
99
|
+
];
|
100
|
+
const workflowsDir = path.join(projectPath, '.vibe', 'workflows');
|
101
|
+
const targetPath = path.join(workflowsDir, 'custom.yaml');
|
102
|
+
for (const legacyPath of legacyPaths) {
|
103
|
+
if (fs.existsSync(legacyPath) && !fs.existsSync(targetPath)) {
|
104
|
+
try {
|
105
|
+
// Create workflows directory if it doesn't exist
|
106
|
+
if (!fs.existsSync(workflowsDir)) {
|
107
|
+
fs.mkdirSync(workflowsDir, { recursive: true });
|
108
|
+
}
|
109
|
+
// Copy the file to new location
|
110
|
+
fs.copyFileSync(legacyPath, targetPath);
|
111
|
+
// Remove the old file
|
112
|
+
fs.unlinkSync(legacyPath);
|
113
|
+
logger.info('Migrated legacy workflow to new location', {
|
114
|
+
from: legacyPath,
|
115
|
+
to: targetPath,
|
116
|
+
});
|
117
|
+
break;
|
118
|
+
}
|
119
|
+
catch (_error) {
|
120
|
+
logger.error('Failed to migrate legacy workflow');
|
121
|
+
}
|
122
|
+
}
|
123
|
+
}
|
124
|
+
}
|
125
|
+
/**
|
126
|
+
* Get all available workflows regardless of domain filtering
|
127
|
+
*/
|
128
|
+
getAllAvailableWorkflows() {
|
129
|
+
// Create a temporary manager with all domains enabled
|
130
|
+
const originalEnv = process.env.VIBE_WORKFLOW_DOMAINS;
|
131
|
+
process.env.VIBE_WORKFLOW_DOMAINS = 'code,architecture,office';
|
132
|
+
try {
|
133
|
+
const tempManager = new WorkflowManager();
|
134
|
+
return tempManager.getAvailableWorkflows();
|
135
|
+
}
|
136
|
+
finally {
|
137
|
+
if (originalEnv !== undefined) {
|
138
|
+
process.env.VIBE_WORKFLOW_DOMAINS = originalEnv;
|
139
|
+
}
|
140
|
+
else {
|
141
|
+
delete process.env.VIBE_WORKFLOW_DOMAINS;
|
142
|
+
}
|
143
|
+
}
|
144
|
+
}
|
145
|
+
getAvailableWorkflows() {
|
146
|
+
return Array.from(this.workflowInfos.values());
|
147
|
+
}
|
148
|
+
/**
|
149
|
+
* Get available workflows for a specific project
|
150
|
+
* Applies configuration filtering and loads project-specific workflows
|
151
|
+
*/
|
152
|
+
getAvailableWorkflowsForProject(projectPath) {
|
153
|
+
// Load project workflows first
|
154
|
+
this.loadProjectWorkflows(projectPath);
|
155
|
+
const allWorkflows = this.getAvailableWorkflows();
|
156
|
+
// Load project configuration
|
157
|
+
const config = ConfigManager.loadProjectConfig(projectPath);
|
158
|
+
// Apply configuration filtering if enabled_workflows is specified
|
159
|
+
let filteredWorkflows = allWorkflows;
|
160
|
+
if (config?.enabled_workflows) {
|
161
|
+
// Validate that all configured workflows exist
|
162
|
+
for (const workflowName of config.enabled_workflows) {
|
163
|
+
if (workflowName !== 'custom' &&
|
164
|
+
!this.isPredefinedWorkflow(workflowName)) {
|
165
|
+
throw new Error(`Invalid workflow '${workflowName}' in configuration. Available workflows: ${this.getWorkflowNames().join(', ')}, custom`);
|
166
|
+
}
|
167
|
+
}
|
168
|
+
// Filter to only enabled workflows
|
169
|
+
filteredWorkflows = allWorkflows.filter(w => config.enabled_workflows?.includes(w.name) ?? false);
|
170
|
+
}
|
171
|
+
// Handle custom workflow (only if custom is in enabled list or no config)
|
172
|
+
const customEnabled = !config?.enabled_workflows || config.enabled_workflows.includes('custom');
|
173
|
+
if (customEnabled) {
|
174
|
+
const hasCustomWorkflow = this.validateWorkflowName('custom', projectPath);
|
175
|
+
if (hasCustomWorkflow) {
|
176
|
+
// Add custom workflow to the list if it exists and is enabled
|
177
|
+
const customWorkflowInfo = {
|
178
|
+
name: 'custom',
|
179
|
+
displayName: 'Custom Workflow',
|
180
|
+
description: 'Project-specific custom workflow',
|
181
|
+
initialState: 'unknown', // Will be determined when loaded
|
182
|
+
phases: [], // Will be determined when loaded
|
183
|
+
};
|
184
|
+
filteredWorkflows.push(customWorkflowInfo);
|
185
|
+
}
|
186
|
+
}
|
187
|
+
return filteredWorkflows;
|
188
|
+
}
|
189
|
+
/**
|
190
|
+
* Get workflow information by name
|
191
|
+
*/
|
192
|
+
getWorkflowInfo(name) {
|
193
|
+
return this.workflowInfos.get(name);
|
194
|
+
}
|
195
|
+
/**
|
196
|
+
* Get a specific workflow by name (checks both predefined and project workflows)
|
197
|
+
*/
|
198
|
+
getWorkflow(name) {
|
199
|
+
return (this.projectWorkflows.get(name) || this.predefinedWorkflows.get(name));
|
200
|
+
}
|
201
|
+
/**
|
202
|
+
* Check if a workflow name is a predefined workflow
|
203
|
+
*/
|
204
|
+
isPredefinedWorkflow(name) {
|
205
|
+
return this.predefinedWorkflows.has(name);
|
206
|
+
}
|
207
|
+
/**
|
208
|
+
* Get workflow names as enum values for tool schema
|
209
|
+
* Includes both predefined and project workflows
|
210
|
+
*/
|
211
|
+
getWorkflowNames() {
|
212
|
+
const predefinedNames = Array.from(this.predefinedWorkflows.keys());
|
213
|
+
const projectNames = Array.from(this.projectWorkflows.keys());
|
214
|
+
// Combine and deduplicate (project workflows override predefined ones)
|
215
|
+
const allNames = [...predefinedNames];
|
216
|
+
for (const projectName of projectNames) {
|
217
|
+
if (!allNames.includes(projectName)) {
|
218
|
+
allNames.push(projectName);
|
219
|
+
}
|
220
|
+
}
|
221
|
+
return allNames;
|
222
|
+
}
|
223
|
+
/**
|
224
|
+
* Load a workflow (predefined or custom) for a project
|
225
|
+
* FIXED: Now respects the workflow parameter correctly
|
226
|
+
*/
|
227
|
+
loadWorkflowForProject(projectPath, workflowName) {
|
228
|
+
// Load project workflows first
|
229
|
+
this.loadProjectWorkflows(projectPath);
|
230
|
+
// If no workflow specified, use first available workflow
|
231
|
+
if (!workflowName) {
|
232
|
+
const availableWorkflows = this.getAvailableWorkflowsForProject(projectPath);
|
233
|
+
if (availableWorkflows.length === 0) {
|
234
|
+
throw new Error('No workflows available. Please install a workflow or adjust VIBE_WORKFLOW_DOMAINS environment variable.');
|
235
|
+
}
|
236
|
+
workflowName = availableWorkflows[0].name;
|
237
|
+
}
|
238
|
+
// If it's a predefined workflow, return it
|
239
|
+
if (this.isPredefinedWorkflow(workflowName)) {
|
240
|
+
const workflow = this.getWorkflow(workflowName);
|
241
|
+
if (workflow) {
|
242
|
+
logger.info('Loading predefined workflow', { workflowName });
|
243
|
+
return workflow;
|
244
|
+
}
|
245
|
+
}
|
246
|
+
// Check project workflows
|
247
|
+
if (this.projectWorkflows.has(workflowName)) {
|
248
|
+
const workflow = this.projectWorkflows.get(workflowName);
|
249
|
+
if (workflow) {
|
250
|
+
logger.info('Loading project workflow', { workflowName });
|
251
|
+
return workflow;
|
252
|
+
}
|
253
|
+
}
|
254
|
+
throw new Error(`Unknown workflow: ${workflowName}`);
|
255
|
+
}
|
256
|
+
/**
|
257
|
+
* Find the workflows directory using multiple strategies
|
258
|
+
* This handles both development and npm package deployment scenarios
|
259
|
+
*/
|
260
|
+
findWorkflowsDirectory() {
|
261
|
+
const currentFileUrl = import.meta.url;
|
262
|
+
const currentFilePath = fileURLToPath(currentFileUrl);
|
263
|
+
const strategies = [];
|
264
|
+
// Strategy 1: Relative to current file (development and direct npm scenarios)
|
265
|
+
// From packages/core/dist/workflow-manager.js -> ../../../../resources/workflows
|
266
|
+
strategies.push(path.resolve(path.dirname(currentFilePath), '../../../../resources/workflows'));
|
267
|
+
// Strategy 2: Find package root by looking for package.json with our package name
|
268
|
+
let currentDir = path.dirname(currentFilePath);
|
269
|
+
for (let i = 0; i < 10; i++) {
|
270
|
+
// Limit search depth
|
271
|
+
const packageJsonPath = path.join(currentDir, 'package.json');
|
272
|
+
if (fs.existsSync(packageJsonPath)) {
|
273
|
+
try {
|
274
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
275
|
+
if (packageJson.name === 'responsible-vibe-mcp') {
|
276
|
+
strategies.push(path.join(currentDir, 'resources/workflows'));
|
277
|
+
break;
|
278
|
+
}
|
279
|
+
}
|
280
|
+
catch (_error) {
|
281
|
+
// Ignore JSON parse errors and continue searching
|
282
|
+
}
|
283
|
+
}
|
284
|
+
const parentDir = path.dirname(currentDir);
|
285
|
+
if (parentDir === currentDir)
|
286
|
+
break; // Reached filesystem root
|
287
|
+
currentDir = parentDir;
|
288
|
+
}
|
289
|
+
// Strategy 3: Common npm installation paths
|
290
|
+
// Local node_modules (when used as dependency)
|
291
|
+
strategies.push(path.join(process.cwd(), 'node_modules/responsible-vibe-mcp/resources/workflows'));
|
292
|
+
// Global npm installation (when installed globally)
|
293
|
+
if (process.env.NODE_PATH) {
|
294
|
+
strategies.push(path.join(process.env.NODE_PATH, 'responsible-vibe-mcp/resources/workflows'));
|
295
|
+
}
|
296
|
+
// Strategy 4: npx cache locations (for npx responsible-vibe-mcp@latest)
|
297
|
+
// npx typically caches packages in ~/.npm/_npx or similar locations
|
298
|
+
const homeDir = process.env.HOME || process.env.USERPROFILE;
|
299
|
+
if (homeDir) {
|
300
|
+
// Common npx cache locations
|
301
|
+
const npxCachePaths = [
|
302
|
+
path.join(homeDir, '.npm/_npx'),
|
303
|
+
path.join(homeDir, '.npm/_cacache'),
|
304
|
+
path.join(homeDir, 'AppData/Local/npm-cache/_npx'), // Windows
|
305
|
+
path.join(homeDir, 'Library/Caches/npm/_npx'), // macOS
|
306
|
+
];
|
307
|
+
for (const cachePath of npxCachePaths) {
|
308
|
+
if (fs.existsSync(cachePath)) {
|
309
|
+
try {
|
310
|
+
// Look for responsible-vibe-mcp in cache subdirectories
|
311
|
+
const cacheEntries = fs.readdirSync(cachePath);
|
312
|
+
for (const entry of cacheEntries) {
|
313
|
+
const entryPath = path.join(cachePath, entry);
|
314
|
+
if (fs.statSync(entryPath).isDirectory()) {
|
315
|
+
// Look for our package in this cache entry
|
316
|
+
const possiblePaths = [
|
317
|
+
path.join(entryPath, 'node_modules/responsible-vibe-mcp/resources/workflows'),
|
318
|
+
path.join(entryPath, 'responsible-vibe-mcp/resources/workflows'),
|
319
|
+
];
|
320
|
+
strategies.push(...possiblePaths);
|
321
|
+
}
|
322
|
+
}
|
323
|
+
}
|
324
|
+
catch (_error) {
|
325
|
+
// Ignore errors reading cache directories
|
326
|
+
}
|
327
|
+
}
|
328
|
+
}
|
329
|
+
}
|
330
|
+
// Strategy 5: Look in the directory where the current executable is located
|
331
|
+
// This handles cases where npx runs the package from a temporary location
|
332
|
+
const executableDir = path.dirname(process.argv[1] || '');
|
333
|
+
if (executableDir) {
|
334
|
+
strategies.push(path.join(executableDir, '../resources/workflows'));
|
335
|
+
strategies.push(path.join(executableDir, 'resources/workflows'));
|
336
|
+
}
|
337
|
+
// Strategy 6: Use require.resolve to find the package location
|
338
|
+
try {
|
339
|
+
// Try to resolve the package.json of our own package
|
340
|
+
const require = createRequire(import.meta.url);
|
341
|
+
const packagePath = require.resolve('responsible-vibe-mcp/package.json');
|
342
|
+
const packageDir = path.dirname(packagePath);
|
343
|
+
strategies.push(path.join(packageDir, 'resources/workflows'));
|
344
|
+
}
|
345
|
+
catch (_error) {
|
346
|
+
// require.resolve might fail in some environments, that's okay
|
347
|
+
}
|
348
|
+
// Remove duplicates and invalid paths
|
349
|
+
const uniqueStrategies = [...new Set(strategies)].filter(p => p.trim() !== '/resources/workflows');
|
350
|
+
// Test each strategy
|
351
|
+
for (const workflowsDir of uniqueStrategies) {
|
352
|
+
logger.debug('Trying workflows directory', { workflowsDir });
|
353
|
+
if (fs.existsSync(workflowsDir)) {
|
354
|
+
// Verify it contains workflow files
|
355
|
+
try {
|
356
|
+
const files = fs.readdirSync(workflowsDir);
|
357
|
+
const yamlFiles = files.filter(file => file.endsWith('.yaml') || file.endsWith('.yml'));
|
358
|
+
if (yamlFiles.length > 0) {
|
359
|
+
logger.info('Found workflows directory', {
|
360
|
+
workflowsDir,
|
361
|
+
yamlFiles: yamlFiles.length,
|
362
|
+
});
|
363
|
+
return workflowsDir;
|
364
|
+
}
|
365
|
+
}
|
366
|
+
catch (error) {
|
367
|
+
// Directory exists but can't read it, continue to next strategy
|
368
|
+
logger.debug('Cannot read workflows directory', {
|
369
|
+
workflowsDir,
|
370
|
+
error,
|
371
|
+
});
|
372
|
+
}
|
373
|
+
}
|
374
|
+
}
|
375
|
+
logger.error('Could not find workflows directory', new Error('Workflows directory not found'), {
|
376
|
+
strategiesCount: uniqueStrategies.length,
|
377
|
+
currentFilePath,
|
378
|
+
strategies: uniqueStrategies,
|
379
|
+
});
|
380
|
+
return null;
|
381
|
+
}
|
382
|
+
/**
|
383
|
+
* Load all predefined workflows from resources/workflows directory
|
384
|
+
*/
|
385
|
+
loadPredefinedWorkflows() {
|
386
|
+
try {
|
387
|
+
const workflowsDir = this.findWorkflowsDirectory();
|
388
|
+
if (!workflowsDir || !fs.existsSync(workflowsDir)) {
|
389
|
+
logger.warn('Workflows directory not found', { workflowsDir });
|
390
|
+
return;
|
391
|
+
}
|
392
|
+
// Read all YAML files in the workflows directory
|
393
|
+
const files = fs.readdirSync(workflowsDir);
|
394
|
+
const yamlFiles = files.filter(file => file.endsWith('.yaml') || file.endsWith('.yml'));
|
395
|
+
logger.info('Loading predefined workflows', {
|
396
|
+
workflowsDir,
|
397
|
+
yamlFiles: yamlFiles.length,
|
398
|
+
});
|
399
|
+
for (const file of yamlFiles) {
|
400
|
+
try {
|
401
|
+
const filePath = path.join(workflowsDir, file);
|
402
|
+
const workflow = this.stateMachineLoader.loadFromFile(filePath);
|
403
|
+
const workflowName = path.basename(file, path.extname(file));
|
404
|
+
// Apply domain filtering
|
405
|
+
if (this.enabledDomains.size > 0 && workflow.metadata?.domain) {
|
406
|
+
if (!this.enabledDomains.has(workflow.metadata.domain)) {
|
407
|
+
logger.debug('Skipping workflow due to domain filter', {
|
408
|
+
name: workflowName,
|
409
|
+
domain: workflow.metadata.domain,
|
410
|
+
enabledDomains: Array.from(this.enabledDomains),
|
411
|
+
});
|
412
|
+
continue;
|
413
|
+
}
|
414
|
+
}
|
415
|
+
this.predefinedWorkflows.set(workflowName, workflow);
|
416
|
+
const workflowInfo = {
|
417
|
+
name: workflowName,
|
418
|
+
displayName: workflow.name,
|
419
|
+
description: workflow.description,
|
420
|
+
initialState: workflow.initial_state,
|
421
|
+
phases: Object.keys(workflow.states),
|
422
|
+
metadata: workflow.metadata,
|
423
|
+
};
|
424
|
+
this.workflowInfos.set(workflowName, workflowInfo);
|
425
|
+
logger.info('Loaded predefined workflow', {
|
426
|
+
name: workflowName,
|
427
|
+
domain: workflow.metadata?.domain,
|
428
|
+
phases: workflowInfo.phases.length,
|
429
|
+
});
|
430
|
+
}
|
431
|
+
catch (error) {
|
432
|
+
logger.error('Failed to load workflow file', error, {
|
433
|
+
file,
|
434
|
+
});
|
435
|
+
}
|
436
|
+
}
|
437
|
+
logger.info('Predefined workflows loaded', {
|
438
|
+
count: this.predefinedWorkflows.size,
|
439
|
+
workflows: Array.from(this.predefinedWorkflows.keys()),
|
440
|
+
});
|
441
|
+
}
|
442
|
+
catch (error) {
|
443
|
+
logger.error('Failed to load predefined workflows', error);
|
444
|
+
}
|
445
|
+
}
|
446
|
+
/**
|
447
|
+
* Validate a workflow name
|
448
|
+
*/
|
449
|
+
validateWorkflowName(workflowName, projectPath) {
|
450
|
+
// Check if it's a predefined workflow
|
451
|
+
if (this.isPredefinedWorkflow(workflowName)) {
|
452
|
+
return true;
|
453
|
+
}
|
454
|
+
// Check if it's a project workflow (load project workflows first)
|
455
|
+
this.loadProjectWorkflows(projectPath);
|
456
|
+
if (this.projectWorkflows.has(workflowName)) {
|
457
|
+
return true;
|
458
|
+
}
|
459
|
+
// Also check workflow infos in case workflow failed to load but info was created
|
460
|
+
if (this.workflowInfos.has(workflowName)) {
|
461
|
+
return true;
|
462
|
+
}
|
463
|
+
return false;
|
464
|
+
}
|
465
|
+
}
|
466
|
+
//# sourceMappingURL=workflow-manager.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"workflow-manager.js","sourceRoot":"","sources":["../src/workflow-manager.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
{
|
2
|
+
"name": "@codemcp/workflows-core",
|
3
|
+
"version": "3.1.16",
|
4
|
+
"main": "dist/index.js",
|
5
|
+
"types": "dist/index.d.ts",
|
6
|
+
"type": "module",
|
7
|
+
"dependencies": {
|
8
|
+
"@types/js-yaml": "4.0.9",
|
9
|
+
"js-yaml": "4.1.0",
|
10
|
+
"sqlite3": "^5.1.7",
|
11
|
+
"zod": "^3.22.4"
|
12
|
+
},
|
13
|
+
"devDependencies": {
|
14
|
+
"rimraf": "^6.0.1",
|
15
|
+
"vitest": "3.2.4"
|
16
|
+
},
|
17
|
+
"scripts": {
|
18
|
+
"build": "tsc -p tsconfig.build.json",
|
19
|
+
"dev": "tsc --watch",
|
20
|
+
"clean:build": "rimraf ./dist",
|
21
|
+
"test": "vitest --run",
|
22
|
+
"lint": "oxlint .",
|
23
|
+
"lint:fix": "oxlint --fix .",
|
24
|
+
"format:check": "prettier --check .",
|
25
|
+
"format": "prettier --write ."
|
26
|
+
}
|
27
|
+
}
|