@specverse/engines 4.3.5 → 5.0.1

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