@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.
Files changed (114) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/LICENSE +674 -0
  3. package/dist/config-manager.d.ts +24 -0
  4. package/dist/config-manager.js +68 -0
  5. package/dist/config-manager.js.map +1 -0
  6. package/dist/conversation-manager.d.ts +97 -0
  7. package/dist/conversation-manager.js +367 -0
  8. package/dist/conversation-manager.js.map +1 -0
  9. package/dist/database.d.ts +73 -0
  10. package/dist/database.js +500 -0
  11. package/dist/database.js.map +1 -0
  12. package/dist/file-detection-manager.d.ts +53 -0
  13. package/dist/file-detection-manager.js +221 -0
  14. package/dist/file-detection-manager.js.map +1 -0
  15. package/dist/git-manager.d.ts +14 -0
  16. package/dist/git-manager.js +59 -0
  17. package/dist/git-manager.js.map +1 -0
  18. package/dist/index.d.ts +19 -0
  19. package/dist/index.js +25 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/instruction-generator.d.ts +69 -0
  22. package/dist/instruction-generator.js +133 -0
  23. package/dist/instruction-generator.js.map +1 -0
  24. package/dist/interaction-logger.d.ts +37 -0
  25. package/dist/interaction-logger.js +87 -0
  26. package/dist/interaction-logger.js.map +1 -0
  27. package/dist/logger.d.ts +64 -0
  28. package/dist/logger.js +283 -0
  29. package/dist/logger.js.map +1 -0
  30. package/dist/path-validation-utils.d.ts +51 -0
  31. package/dist/path-validation-utils.js +202 -0
  32. package/dist/path-validation-utils.js.map +1 -0
  33. package/dist/plan-manager.d.ts +65 -0
  34. package/dist/plan-manager.js +256 -0
  35. package/dist/plan-manager.js.map +1 -0
  36. package/dist/project-docs-manager.d.ts +119 -0
  37. package/dist/project-docs-manager.js +357 -0
  38. package/dist/project-docs-manager.js.map +1 -0
  39. package/dist/state-machine-loader.d.ts +60 -0
  40. package/dist/state-machine-loader.js +235 -0
  41. package/dist/state-machine-loader.js.map +1 -0
  42. package/dist/state-machine-types.d.ts +58 -0
  43. package/dist/state-machine-types.js +7 -0
  44. package/dist/state-machine-types.js.map +1 -0
  45. package/dist/state-machine.d.ts +52 -0
  46. package/dist/state-machine.js +256 -0
  47. package/dist/state-machine.js.map +1 -0
  48. package/dist/system-prompt-generator.d.ts +17 -0
  49. package/dist/system-prompt-generator.js +113 -0
  50. package/dist/system-prompt-generator.js.map +1 -0
  51. package/dist/template-manager.d.ts +61 -0
  52. package/dist/template-manager.js +229 -0
  53. package/dist/template-manager.js.map +1 -0
  54. package/dist/transition-engine.d.ts +70 -0
  55. package/dist/transition-engine.js +240 -0
  56. package/dist/transition-engine.js.map +1 -0
  57. package/dist/types.d.ts +56 -0
  58. package/dist/types.js +5 -0
  59. package/dist/types.js.map +1 -0
  60. package/dist/workflow-manager.d.ts +89 -0
  61. package/dist/workflow-manager.js +466 -0
  62. package/dist/workflow-manager.js.map +1 -0
  63. package/package.json +27 -0
  64. package/src/config-manager.ts +96 -0
  65. package/src/conversation-manager.ts +492 -0
  66. package/src/database.ts +685 -0
  67. package/src/file-detection-manager.ts +302 -0
  68. package/src/git-manager.ts +64 -0
  69. package/src/index.ts +28 -0
  70. package/src/instruction-generator.ts +210 -0
  71. package/src/interaction-logger.ts +109 -0
  72. package/src/logger.ts +353 -0
  73. package/src/path-validation-utils.ts +261 -0
  74. package/src/plan-manager.ts +323 -0
  75. package/src/project-docs-manager.ts +522 -0
  76. package/src/state-machine-loader.ts +308 -0
  77. package/src/state-machine-types.ts +72 -0
  78. package/src/state-machine.ts +370 -0
  79. package/src/system-prompt-generator.ts +122 -0
  80. package/src/template-manager.ts +321 -0
  81. package/src/transition-engine.ts +386 -0
  82. package/src/types.ts +60 -0
  83. package/src/workflow-manager.ts +601 -0
  84. package/test/unit/conversation-manager.test.ts +179 -0
  85. package/test/unit/custom-workflow-loading.test.ts +174 -0
  86. package/test/unit/directory-linking-and-extensions.test.ts +338 -0
  87. package/test/unit/file-linking-integration.test.ts +256 -0
  88. package/test/unit/git-commit-integration.test.ts +91 -0
  89. package/test/unit/git-manager.test.ts +86 -0
  90. package/test/unit/install-workflow.test.ts +138 -0
  91. package/test/unit/instruction-generator.test.ts +247 -0
  92. package/test/unit/list-workflows-filtering.test.ts +68 -0
  93. package/test/unit/none-template-functionality.test.ts +224 -0
  94. package/test/unit/project-docs-manager.test.ts +337 -0
  95. package/test/unit/state-machine-loader.test.ts +234 -0
  96. package/test/unit/template-manager.test.ts +217 -0
  97. package/test/unit/validate-workflow-name.test.ts +150 -0
  98. package/test/unit/workflow-domain-filtering.test.ts +75 -0
  99. package/test/unit/workflow-enum-generation.test.ts +92 -0
  100. package/test/unit/workflow-manager-enhanced-path-resolution.test.ts +369 -0
  101. package/test/unit/workflow-manager-path-resolution.test.ts +150 -0
  102. package/test/unit/workflow-migration.test.ts +155 -0
  103. package/test/unit/workflow-override-by-name.test.ts +116 -0
  104. package/test/unit/workflow-prioritization.test.ts +38 -0
  105. package/test/unit/workflow-validation.test.ts +303 -0
  106. package/test/utils/e2e-test-setup.ts +453 -0
  107. package/test/utils/run-server-in-dir.sh +27 -0
  108. package/test/utils/temp-files.ts +308 -0
  109. package/test/utils/test-access.ts +79 -0
  110. package/test/utils/test-helpers.ts +286 -0
  111. package/test/utils/test-setup.ts +78 -0
  112. package/tsconfig.build.json +21 -0
  113. package/tsconfig.json +8 -0
  114. 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
+ }