@specverse/engines 4.3.5 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/assets/examples/10-api/README.md +3 -3
  2. package/assets/prompts/core/README.md +1 -1
  3. package/dist/inference/core/rule-engine.d.ts +0 -12
  4. package/dist/inference/core/rule-engine.d.ts.map +1 -1
  5. package/dist/inference/core/rule-engine.js +99 -968
  6. package/dist/inference/core/rule-engine.js.map +1 -1
  7. package/dist/inference/core/template-helpers.d.ts +56 -0
  8. package/dist/inference/core/template-helpers.d.ts.map +1 -0
  9. package/dist/inference/core/template-helpers.js +87 -0
  10. package/dist/inference/core/template-helpers.js.map +1 -0
  11. package/dist/inference/logical/generators/service-generator.d.ts.map +1 -1
  12. package/dist/inference/logical/generators/service-generator.js +0 -4
  13. package/dist/inference/logical/generators/service-generator.js.map +1 -1
  14. package/dist/libs/instance-factories/cli/templates/commander/command-generator.js +27 -5
  15. package/dist/libs/instance-factories/tools/README.md +1 -1
  16. package/dist/libs/instance-factories/tools/mcp.yaml +1 -1
  17. package/dist/libs/instance-factories/tools/templates/mcp/mcp-server-generator.js +336 -116
  18. package/dist/libs/instance-factories/tools/templates/vscode/vscode-extension-generator.js +172 -8
  19. package/dist/libs/instance-factories/tools/vscode.yaml +1 -1
  20. package/libs/instance-factories/cli/templates/commander/command-generator.ts +27 -5
  21. package/libs/instance-factories/tools/README.md +1 -1
  22. package/libs/instance-factories/tools/mcp.yaml +1 -1
  23. package/libs/instance-factories/tools/templates/mcp/mcp-server-generator.ts +386 -141
  24. package/libs/instance-factories/tools/templates/vscode/static/extension.ts +9 -2
  25. package/libs/instance-factories/tools/templates/vscode/vscode-extension-generator.ts +246 -10
  26. package/libs/instance-factories/tools/vscode.yaml +1 -1
  27. package/package.json +5 -4
  28. package/libs/instance-factories/tools/templates/mcp/static/docs/DEPLOYMENT_GUIDE.md +0 -630
  29. package/libs/instance-factories/tools/templates/mcp/static/docs/HYBRID_RESOURCE_SYSTEM.md +0 -330
  30. package/libs/instance-factories/tools/templates/mcp/static/docs/deployments/EXTENSION_DEPLOYMENT.md +0 -552
  31. package/libs/instance-factories/tools/templates/mcp/static/docs/deployments/LOCAL_DEPLOYMENT.md +0 -164
  32. package/libs/instance-factories/tools/templates/mcp/static/docs/deployments/WEB_DEPLOYMENT.md +0 -247
  33. package/libs/instance-factories/tools/templates/mcp/static/package.json +0 -94
  34. package/libs/instance-factories/tools/templates/mcp/static/scripts/build-enterprise.js +0 -284
  35. package/libs/instance-factories/tools/templates/mcp/static/scripts/build-extension.js +0 -139
  36. package/libs/instance-factories/tools/templates/mcp/static/scripts/build-local.js +0 -74
  37. package/libs/instance-factories/tools/templates/mcp/static/scripts/build-web.js +0 -156
  38. package/libs/instance-factories/tools/templates/mcp/static/scripts/copy-canonical-files.js +0 -41
  39. package/libs/instance-factories/tools/templates/mcp/static/scripts/test-deployments.js +0 -259
  40. package/libs/instance-factories/tools/templates/mcp/static/scripts/test-hybrid-resources.js +0 -231
  41. package/libs/instance-factories/tools/templates/mcp/static/scripts/test-hybrid-simple.js +0 -196
  42. package/libs/instance-factories/tools/templates/mcp/static/src/controllers/MCPServerController.ts +0 -293
  43. package/libs/instance-factories/tools/templates/mcp/static/src/events/EventEmitter.ts +0 -90
  44. package/libs/instance-factories/tools/templates/mcp/static/src/index.ts +0 -24
  45. package/libs/instance-factories/tools/templates/mcp/static/src/interfaces/ResourceProvider.ts +0 -15
  46. package/libs/instance-factories/tools/templates/mcp/static/src/models/LibrarySuggestion.ts +0 -106
  47. package/libs/instance-factories/tools/templates/mcp/static/src/models/SpecVerseResource.ts +0 -75
  48. package/libs/instance-factories/tools/templates/mcp/static/src/server/mcp-server.ts +0 -239
  49. package/libs/instance-factories/tools/templates/mcp/static/src/services/CLIProxyService.ts +0 -1501
  50. package/libs/instance-factories/tools/templates/mcp/static/src/services/EmbeddedResourcesAdapter.ts +0 -211
  51. package/libs/instance-factories/tools/templates/mcp/static/src/services/EntityModuleService.ts +0 -308
  52. package/libs/instance-factories/tools/templates/mcp/static/src/services/HybridResourcesProvider.ts +0 -210
  53. package/libs/instance-factories/tools/templates/mcp/static/src/services/LibraryToolsService.ts +0 -356
  54. package/libs/instance-factories/tools/templates/mcp/static/src/services/OrchestratorBridge.ts +0 -522
  55. package/libs/instance-factories/tools/templates/mcp/static/src/services/OrchestratorToolsService.ts +0 -530
  56. package/libs/instance-factories/tools/templates/mcp/static/src/services/PromptToolsService.ts +0 -594
  57. package/libs/instance-factories/tools/templates/mcp/static/src/services/ResourcesProviderService.ts +0 -170
  58. package/libs/instance-factories/tools/templates/mcp/static/src/tests/unit/CLIProxyService.init.test.ts +0 -544
  59. package/libs/instance-factories/tools/templates/mcp/static/src/tests/unit/CLIProxyService.test.ts +0 -189
  60. package/libs/instance-factories/tools/templates/mcp/static/src/tests/unit/ResourcesProviderService.test.ts +0 -89
  61. package/libs/instance-factories/tools/templates/mcp/static/src/types/index.ts +0 -110
  62. package/libs/instance-factories/tools/templates/mcp/static/tsconfig.json +0 -28
  63. package/libs/instance-factories/tools/templates/vscode/static/schemas/specverse-v3-schema.json +0 -4279
  64. /package/libs/instance-factories/tools/templates/vscode/static/themes/{specverse-complete-theme.json → specverse-dark-theme.json} +0 -0
@@ -1,189 +0,0 @@
1
- /**
2
- * CLIProxyService Unit Tests
3
- * Tests for dynamic CLI integration functionality
4
- */
5
-
6
- import { describe, it, expect, beforeEach, vi } from 'vitest';
7
- import { CLIProxyService } from '../../services/CLIProxyService.js';
8
-
9
- // Mock both possible import paths (published package and local)
10
- const mockCapabilities = {
11
- coreCommands: [
12
- {
13
- command: 'validate',
14
- description: 'Validate a SpecVerse specification',
15
- args: '<file>',
16
- options: '-v, --verbose'
17
- },
18
- {
19
- command: 'infer',
20
- description: 'Generate complete specification using AI',
21
- args: '<file>',
22
- options: ''
23
- }
24
- ],
25
- groupedCommands: [
26
- {
27
- command: 'gen yaml',
28
- group: 'gen',
29
- subcommand: 'yaml',
30
- description: 'Generate YAML from SpecVerse specification',
31
- args: '<file>',
32
- category: 'SpecVerse Generation'
33
- }
34
- ],
35
- aiCommands: [
36
- {
37
- command: 'ai',
38
- description: 'AI prompt building commands',
39
- args: '<action> [operation]',
40
- options: ''
41
- },
42
- {
43
- command: 'ai template',
44
- description: 'AI template for SpecVerse specifications',
45
- args: '<operation>',
46
- options: ''
47
- }
48
- ]
49
- };
50
-
51
- const mockAPI = {
52
- getAllCliCapabilities: vi.fn(() => mockCapabilities),
53
- executeCliCommand: vi.fn(async (command, args) => {
54
- if (command.includes('validate')) {
55
- return {
56
- status: 'success',
57
- message: 'Validation successful',
58
- file: args.file || 'test.specly',
59
- timestamp: new Date().toISOString()
60
- };
61
- }
62
- throw new Error(`Command not mocked: ${command}`);
63
- }),
64
- getCliPath: vi.fn(() => '/mock/path/to/cli') as ReturnType<typeof vi.fn<[], string | null>>
65
- };
66
-
67
- // Mock the published package
68
- vi.mock('@specverse/entities', () => mockAPI);
69
-
70
- // Mock the local development path
71
- vi.mock('../../../../../dist/index.js', () => mockAPI);
72
-
73
- describe('CLIProxyService', () => {
74
- let service: CLIProxyService;
75
-
76
- beforeEach(() => {
77
- vi.clearAllMocks();
78
- service = new CLIProxyService();
79
- });
80
-
81
- describe('capability discovery', () => {
82
- it('should discover CLI capabilities', async () => {
83
- const capabilities = await service.discoverCapabilities();
84
-
85
- expect(capabilities).toHaveProperty('coreCommands');
86
- expect(capabilities).toHaveProperty('groupedCommands');
87
- expect(capabilities).toHaveProperty('aiCommands');
88
- expect(capabilities.coreCommands.length).toBeGreaterThan(0);
89
- });
90
-
91
- it('should cache capabilities for performance', async () => {
92
- // First call
93
- await service.discoverCapabilities();
94
- // Second call (should use cache)
95
- await service.discoverCapabilities();
96
-
97
- // Should only call once due to caching
98
- expect(mockAPI.getAllCliCapabilities).toHaveBeenCalledTimes(1);
99
- });
100
- });
101
-
102
- describe('MCP tool generation', () => {
103
- it('should generate MCP tools from CLI capabilities', async () => {
104
- const tools = await service.generateMCPTools();
105
-
106
- expect(tools).toBeInstanceOf(Array);
107
- expect(tools.length).toBeGreaterThan(0);
108
-
109
- // Check tool structure
110
- const validateTool = tools.find(t => t.name === 'specverse_validate');
111
- expect(validateTool).toBeDefined();
112
- expect(validateTool?.description).toContain('Validate');
113
- expect(validateTool?.inputSchema).toHaveProperty('properties');
114
- });
115
-
116
- it('should generate AI tools with proper schemas', async () => {
117
- const tools = await service.generateMCPTools();
118
-
119
- const aiTemplateTool = tools.find(t => t.name === 'specverse_ai_template');
120
- expect(aiTemplateTool).toBeDefined();
121
- expect(aiTemplateTool?.inputSchema.properties).toHaveProperty('operation');
122
- expect(aiTemplateTool?.inputSchema.required).toContain('operation');
123
- });
124
- });
125
-
126
- describe('command execution', () => {
127
- it('should execute CLI commands and return structured results', async () => {
128
- const result = await service.executeCommand('specverse_validate', { file: 'test.specly' });
129
-
130
- expect(result).toHaveProperty('content');
131
- expect(result.content).toBeInstanceOf(Array);
132
- expect(result.content[0]).toHaveProperty('type', 'text');
133
-
134
- // Parse the JSON result
135
- const textContent = result.content[0].text;
136
- expect(textContent).toBeDefined();
137
- const jsonResult = JSON.parse(textContent!);
138
- expect(jsonResult).toHaveProperty('status', 'success');
139
- expect(jsonResult).toHaveProperty('file', 'test.specly');
140
- });
141
-
142
- it('should handle command failures gracefully', async () => {
143
- const result = await service.executeCommand('specverse_nonexistent', {});
144
-
145
- expect(result).toHaveProperty('isError', true);
146
- expect(result.content[0].text).toContain('error');
147
- });
148
-
149
- it('should handle CLI not found scenario', async () => {
150
- // Mock CLI not found
151
- mockAPI.getCliPath.mockReturnValueOnce(null);
152
-
153
- const serviceWithoutCli = new CLIProxyService();
154
- const result = await serviceWithoutCli.executeCommand('specverse_validate', {});
155
-
156
- expect(result).toHaveProperty('isError', true);
157
- expect(result.content[0].text).toContain('CLI not found');
158
- });
159
- });
160
-
161
- describe('tool name mapping', () => {
162
- it('should map MCP tool names back to CLI commands', async () => {
163
- const service = new CLIProxyService();
164
-
165
- // Access private method for testing (TypeScript will complain, but it works)
166
- const mapMethod = (service as any).mapToolNameToCommand;
167
-
168
- expect(mapMethod('specverse_validate')).toBe('validate');
169
- expect(mapMethod('specverse_gen_yaml')).toBe('gen yaml');
170
- expect(mapMethod('specverse_ai_template')).toBe('ai template');
171
- });
172
- });
173
-
174
- describe('error scenarios', () => {
175
- it('should handle discovery failures', async () => {
176
- // Use the already mocked function
177
- mockAPI.getAllCliCapabilities.mockImplementationOnce(() => {
178
- throw new Error('Discovery failed');
179
- });
180
-
181
- const capabilities = await service.discoverCapabilities();
182
-
183
- // Should return empty capabilities on failure
184
- expect(capabilities.coreCommands).toEqual([]);
185
- expect(capabilities.groupedCommands).toEqual([]);
186
- expect(capabilities.aiCommands).toEqual([]);
187
- });
188
- });
189
- });
@@ -1,89 +0,0 @@
1
- /**
2
- * ResourcesProviderService Unit Tests
3
- * Clean implementation test suite
4
- */
5
-
6
- import { describe, it, expect, beforeEach } from 'vitest';
7
- import { ResourcesProviderService } from '../../services/ResourcesProviderService.js';
8
-
9
- describe('ResourcesProviderService', () => {
10
- let service: ResourcesProviderService;
11
-
12
- beforeEach(() => {
13
- service = new ResourcesProviderService();
14
- });
15
-
16
- describe('initialization', () => {
17
- it('should initialize without errors', async () => {
18
- await expect(service.initializeResources()).resolves.not.toThrow();
19
- });
20
-
21
- it('should list resources after initialization', async () => {
22
- await service.initializeResources();
23
- const resources = await service.listResources();
24
-
25
- expect(resources).toBeInstanceOf(Array);
26
- expect(resources.length).toBeGreaterThan(0);
27
- expect(resources[0]).toHaveProperty('uri');
28
- expect(resources[0]).toHaveProperty('name');
29
- expect(resources[0]).toHaveProperty('description');
30
- expect(resources[0]).toHaveProperty('mimeType');
31
- });
32
- });
33
-
34
- describe('resource management', () => {
35
- beforeEach(async () => {
36
- await service.initializeResources();
37
- });
38
-
39
- it('should check resource availability', () => {
40
- expect(service.isResourceAvailable('specverse://examples/chat-prompts')).toBe(true);
41
- expect(service.isResourceAvailable('nonexistent://resource')).toBe(false);
42
- });
43
-
44
- it('should handle unknown resource URIs', async () => {
45
- await expect(service.getResourceContent('unknown://resource'))
46
- .rejects.toThrow('Resource not found');
47
- });
48
-
49
- it('should track cached resource count', () => {
50
- const count = service.getCachedResourceCount();
51
- expect(count).toBeGreaterThanOrEqual(0);
52
- });
53
- });
54
-
55
- describe('resource reading', () => {
56
- beforeEach(async () => {
57
- await service.initializeResources();
58
- });
59
-
60
- it('should return proper MCP tool result structure', async () => {
61
- // Mock successful resource read since we don't have actual files in test
62
- const result = await service.readResource('specverse://examples/chat-prompts').catch(err => ({
63
- content: [{ type: 'text' as const, text: err.message }],
64
- isError: true
65
- }));
66
-
67
- expect(result).toHaveProperty('content');
68
- expect(result.content).toBeInstanceOf(Array);
69
- expect(result.content[0]).toHaveProperty('type');
70
- });
71
- });
72
-
73
- describe('error handling', () => {
74
- beforeEach(async () => {
75
- await service.initializeResources();
76
- });
77
-
78
- it('should handle file system errors gracefully', async () => {
79
- const result = await service.readResource('specverse://examples/chat-prompts');
80
-
81
- if (result.isError) {
82
- expect(result.content[0].type).toBe('text');
83
- expect(result.content[0].text).toContain('Error reading resource');
84
- } else {
85
- expect(result.content[0].type).toBe('resource');
86
- }
87
- });
88
- });
89
- });
@@ -1,110 +0,0 @@
1
- /**
2
- * Clean Implementation - Core Types
3
- * Generated from extracted SpecVerse specification
4
- */
5
-
6
- export interface SpecVerseResource {
7
- uri: string;
8
- name: string;
9
- description: string;
10
- mimeType: string;
11
- content?: string;
12
- metadata?: Record<string, any>;
13
- }
14
-
15
- export interface LibrarySuggestion {
16
- name: string;
17
- path: string;
18
- type: 'deployment' | 'domain' | 'manifest' | 'type' | 'standard';
19
- description: string;
20
- ai_description: string;
21
- expansion_factor: number;
22
- complexity_level: 'low' | 'medium' | 'high';
23
- best_for: string[];
24
- }
25
-
26
- export interface StandardPrompt {
27
- name: string;
28
- version: string;
29
- description: string;
30
- author: string;
31
- tags: string[];
32
- system_role: string;
33
- system_context: string;
34
- system_capabilities: string[];
35
- system_constraints: string[];
36
- user_template: string;
37
- max_tokens: number;
38
- temperature: number;
39
- }
40
-
41
- export interface LibraryCatalog {
42
- version: string;
43
- generated_at: Date;
44
- generated_from: string;
45
- ai_optimization: boolean;
46
- total_libraries: number;
47
- deployments: Record<string, LibrarySuggestion>;
48
- domains: Record<string, LibrarySuggestion>;
49
- manifests: Record<string, LibrarySuggestion>;
50
- types: Record<string, LibrarySuggestion>;
51
- }
52
-
53
- export interface MCPToolResult {
54
- content: Array<{
55
- type: 'text' | 'resource';
56
- text?: string;
57
- resource?: SpecVerseResource;
58
- }>;
59
- isError?: boolean;
60
- }
61
-
62
- export interface PromptContext {
63
- requirements?: string;
64
- scale?: 'personal' | 'business' | 'enterprise';
65
- preferredTech?: string;
66
- projectType?: string;
67
- frameworkHint?: string;
68
- targetFramework?: string;
69
- deploymentType?: string; // Added for Phase 3
70
- implementationScope?: string; // Added for Phase 3
71
- }
72
-
73
- // Event Types
74
- export interface ServerStartedEvent {
75
- mode: string;
76
- port?: number;
77
- pid: number;
78
- }
79
-
80
- export interface ToolCalledEvent {
81
- toolName: string;
82
- arguments: Record<string, any>;
83
- executionTime: number;
84
- }
85
-
86
- export interface ResourceRequestedEvent {
87
- uri: string;
88
- requestTime: Date;
89
- }
90
-
91
- export interface ErrorOccurredEvent {
92
- operation: string;
93
- error: string;
94
- context?: Record<string, any>;
95
- }
96
-
97
- // Configuration Types
98
- export type MCPServerMode = 'local' | 'remote';
99
-
100
- export interface MCPServerConfig {
101
- mode: MCPServerMode;
102
- port?: number;
103
- host?: string;
104
- logging?: boolean;
105
- resources_path?: string;
106
- workingDirectory?: string;
107
- features?: {
108
- orchestrator?: boolean;
109
- };
110
- }
@@ -1,28 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2022",
4
- "module": "ESNext",
5
- "moduleResolution": "bundler",
6
- "esModuleInterop": true,
7
- "allowSyntheticDefaultImports": true,
8
- "strict": false,
9
- "skipLibCheck": true,
10
- "forceConsistentCasingInFileNames": true,
11
- "declaration": true,
12
- "declarationMap": true,
13
- "sourceMap": true,
14
- "outDir": "./dist",
15
- "rootDir": "./src",
16
- "resolveJsonModule": true,
17
- "allowImportingTsExtensions": false,
18
- "noImplicitAny": false
19
- },
20
- "include": [
21
- "src/**/*"
22
- ],
23
- "exclude": [
24
- "node_modules",
25
- "dist",
26
- "**/*.test.ts"
27
- ]
28
- }