@specverse/engines 4.3.4 → 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 (66) 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/scaffolding/templates/generic/package-json-generator.js +1 -1
  16. package/dist/libs/instance-factories/tools/README.md +1 -1
  17. package/dist/libs/instance-factories/tools/mcp.yaml +1 -1
  18. package/dist/libs/instance-factories/tools/templates/mcp/mcp-server-generator.js +336 -116
  19. package/dist/libs/instance-factories/tools/templates/vscode/vscode-extension-generator.js +172 -8
  20. package/dist/libs/instance-factories/tools/vscode.yaml +1 -1
  21. package/libs/instance-factories/cli/templates/commander/command-generator.ts +27 -5
  22. package/libs/instance-factories/scaffolding/templates/generic/package-json-generator.ts +10 -6
  23. package/libs/instance-factories/tools/README.md +1 -1
  24. package/libs/instance-factories/tools/mcp.yaml +1 -1
  25. package/libs/instance-factories/tools/templates/mcp/mcp-server-generator.ts +386 -141
  26. package/libs/instance-factories/tools/templates/vscode/static/extension.ts +9 -2
  27. package/libs/instance-factories/tools/templates/vscode/vscode-extension-generator.ts +246 -10
  28. package/libs/instance-factories/tools/vscode.yaml +1 -1
  29. package/package.json +5 -4
  30. package/libs/instance-factories/tools/templates/mcp/static/docs/DEPLOYMENT_GUIDE.md +0 -630
  31. package/libs/instance-factories/tools/templates/mcp/static/docs/HYBRID_RESOURCE_SYSTEM.md +0 -330
  32. package/libs/instance-factories/tools/templates/mcp/static/docs/deployments/EXTENSION_DEPLOYMENT.md +0 -552
  33. package/libs/instance-factories/tools/templates/mcp/static/docs/deployments/LOCAL_DEPLOYMENT.md +0 -164
  34. package/libs/instance-factories/tools/templates/mcp/static/docs/deployments/WEB_DEPLOYMENT.md +0 -247
  35. package/libs/instance-factories/tools/templates/mcp/static/package.json +0 -94
  36. package/libs/instance-factories/tools/templates/mcp/static/scripts/build-enterprise.js +0 -284
  37. package/libs/instance-factories/tools/templates/mcp/static/scripts/build-extension.js +0 -139
  38. package/libs/instance-factories/tools/templates/mcp/static/scripts/build-local.js +0 -74
  39. package/libs/instance-factories/tools/templates/mcp/static/scripts/build-web.js +0 -156
  40. package/libs/instance-factories/tools/templates/mcp/static/scripts/copy-canonical-files.js +0 -41
  41. package/libs/instance-factories/tools/templates/mcp/static/scripts/test-deployments.js +0 -259
  42. package/libs/instance-factories/tools/templates/mcp/static/scripts/test-hybrid-resources.js +0 -231
  43. package/libs/instance-factories/tools/templates/mcp/static/scripts/test-hybrid-simple.js +0 -196
  44. package/libs/instance-factories/tools/templates/mcp/static/src/controllers/MCPServerController.ts +0 -293
  45. package/libs/instance-factories/tools/templates/mcp/static/src/events/EventEmitter.ts +0 -90
  46. package/libs/instance-factories/tools/templates/mcp/static/src/index.ts +0 -24
  47. package/libs/instance-factories/tools/templates/mcp/static/src/interfaces/ResourceProvider.ts +0 -15
  48. package/libs/instance-factories/tools/templates/mcp/static/src/models/LibrarySuggestion.ts +0 -106
  49. package/libs/instance-factories/tools/templates/mcp/static/src/models/SpecVerseResource.ts +0 -75
  50. package/libs/instance-factories/tools/templates/mcp/static/src/server/mcp-server.ts +0 -239
  51. package/libs/instance-factories/tools/templates/mcp/static/src/services/CLIProxyService.ts +0 -1501
  52. package/libs/instance-factories/tools/templates/mcp/static/src/services/EmbeddedResourcesAdapter.ts +0 -211
  53. package/libs/instance-factories/tools/templates/mcp/static/src/services/EntityModuleService.ts +0 -308
  54. package/libs/instance-factories/tools/templates/mcp/static/src/services/HybridResourcesProvider.ts +0 -210
  55. package/libs/instance-factories/tools/templates/mcp/static/src/services/LibraryToolsService.ts +0 -356
  56. package/libs/instance-factories/tools/templates/mcp/static/src/services/OrchestratorBridge.ts +0 -522
  57. package/libs/instance-factories/tools/templates/mcp/static/src/services/OrchestratorToolsService.ts +0 -530
  58. package/libs/instance-factories/tools/templates/mcp/static/src/services/PromptToolsService.ts +0 -594
  59. package/libs/instance-factories/tools/templates/mcp/static/src/services/ResourcesProviderService.ts +0 -170
  60. package/libs/instance-factories/tools/templates/mcp/static/src/tests/unit/CLIProxyService.init.test.ts +0 -544
  61. package/libs/instance-factories/tools/templates/mcp/static/src/tests/unit/CLIProxyService.test.ts +0 -189
  62. package/libs/instance-factories/tools/templates/mcp/static/src/tests/unit/ResourcesProviderService.test.ts +0 -89
  63. package/libs/instance-factories/tools/templates/mcp/static/src/types/index.ts +0 -110
  64. package/libs/instance-factories/tools/templates/mcp/static/tsconfig.json +0 -28
  65. package/libs/instance-factories/tools/templates/vscode/static/schemas/specverse-v3-schema.json +0 -4279
  66. /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
- }