@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,231 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Hybrid Resource System Test
4
- * Focused test to verify embedded vs filesystem resource detection
5
- */
6
-
7
- import { spawn } from 'child_process';
8
- import { existsSync } from 'fs';
9
- import { join, dirname } from 'path';
10
- import { fileURLToPath } from 'url';
11
-
12
- const __dirname = dirname(fileURLToPath(import.meta.url));
13
- const rootDir = join(__dirname, '..');
14
-
15
- console.log('๐Ÿงช HYBRID RESOURCE SYSTEM TEST');
16
- console.log('===============================');
17
-
18
- async function testResourceMode(deployment, expectedMode) {
19
- console.log(`\n๐Ÿ” Testing ${deployment.toUpperCase()} deployment...`);
20
-
21
- return new Promise((resolve) => {
22
- const serverPath = join(rootDir, 'dist', deployment, 'server', 'mcp-server.js');
23
- if (!existsSync(serverPath)) {
24
- console.log(` โŒ Server not found: ${serverPath}`);
25
- resolve({ success: false, error: 'Server not found' });
26
- return;
27
- }
28
-
29
- const port = 3000 + Math.floor(Math.random() * 1000);
30
- const args = deployment === 'local'
31
- ? ['--mode', 'local', '--silent']
32
- : ['--mode', 'remote', '--port', port.toString(), '--silent'];
33
-
34
- const child = spawn('node', [serverPath, ...args], {
35
- cwd: rootDir,
36
- stdio: ['pipe', 'pipe', 'pipe']
37
- });
38
-
39
- let resolved = false;
40
- const timeout = setTimeout(() => {
41
- if (!resolved) {
42
- resolved = true;
43
- child.kill('SIGTERM');
44
-
45
- // For local mode, we can't easily test via HTTP, so we assume success if it starts
46
- if (deployment === 'local') {
47
- console.log(` โœ… ${deployment} server started successfully`);
48
- resolve({ success: true, mode: 'filesystem' });
49
- } else {
50
- console.log(` โฐ ${deployment} server timeout - checking health...`);
51
- checkServerHealth(port, deployment, expectedMode).then(resolve);
52
- }
53
- }
54
- }, 5000);
55
-
56
- child.stderr.on('data', (data) => {
57
- const output = data.toString();
58
- if (output.includes('initialized successfully') ||
59
- output.includes('listening on port') ||
60
- output.includes('Server started')) {
61
- if (!resolved && deployment !== 'local') {
62
- resolved = true;
63
- clearTimeout(timeout);
64
- setTimeout(() => {
65
- checkServerHealth(port, deployment, expectedMode).then((result) => {
66
- child.kill('SIGTERM');
67
- resolve(result);
68
- });
69
- }, 1000);
70
- }
71
- }
72
- });
73
-
74
- child.on('error', (error) => {
75
- if (!resolved) {
76
- resolved = true;
77
- clearTimeout(timeout);
78
- console.log(` โŒ ${deployment} failed: ${error.message}`);
79
- resolve({ success: false, error: error.message });
80
- }
81
- });
82
- });
83
- }
84
-
85
- async function checkServerHealth(port, deployment, expectedMode) {
86
- try {
87
- const response = await fetch(`http://localhost:${port}/health`);
88
- const data = await response.json();
89
-
90
- const actualMode = data.metrics?.resources_provider?.mode;
91
- const providerType = data.metrics?.resources_provider?.type;
92
- const resourceCount = data.metrics?.resources_provider?.resourcesInfo?.count ||
93
- data.metrics?.resources_provider?.resourcesInfo?.cached || 0;
94
-
95
- console.log(` ๐Ÿ“Š Provider: ${providerType}`);
96
- console.log(` ๐Ÿ“Š Mode: ${actualMode}`);
97
- console.log(` ๐Ÿ“Š Resources: ${resourceCount}`);
98
-
99
- if (actualMode === expectedMode) {
100
- console.log(` โœ… ${deployment} using correct mode: ${actualMode}`);
101
- return { success: true, mode: actualMode, type: providerType, count: resourceCount };
102
- } else {
103
- console.log(` โš ๏ธ ${deployment} mode mismatch: expected ${expectedMode}, got ${actualMode}`);
104
- return { success: true, mode: actualMode, type: providerType, count: resourceCount, warning: 'mode_mismatch' };
105
- }
106
- } catch (error) {
107
- console.log(` โŒ ${deployment} health check failed: ${error.message}`);
108
- return { success: false, error: error.message };
109
- }
110
- }
111
-
112
- async function testResourceContent(deployment, port) {
113
- try {
114
- // Test resource listing
115
- const listResponse = await fetch(`http://localhost:${port}/mcp/resources`);
116
- const listData = await listResponse.json();
117
-
118
- console.log(` ๐Ÿ“‹ Resources available: ${listData.count}`);
119
-
120
- if (listData.count > 0) {
121
- // Test reading a specific resource
122
- const testUri = 'specverse://schema/json';
123
- const resourceResponse = await fetch(`http://localhost:${port}/mcp/resource/${encodeURIComponent(testUri)}`);
124
- const resourceData = await resourceResponse.json();
125
-
126
- if (resourceData.content && resourceData.content.length > 0) {
127
- const resource = resourceData.content[0].resource;
128
- console.log(` ๐Ÿ“„ Test resource: ${resource.mimeType}, ${resource.content?.length || 0} chars`);
129
- return true;
130
- }
131
- }
132
-
133
- return false;
134
- } catch (error) {
135
- console.log(` โŒ Resource content test failed: ${error.message}`);
136
- return false;
137
- }
138
- }
139
-
140
- async function runHybridTests() {
141
- const results = {};
142
-
143
- // Test local deployment (should use filesystem)
144
- console.log('\n๐Ÿ—‚๏ธ Testing LOCAL deployment (filesystem expected)...');
145
- results.local = await testResourceMode('local', 'filesystem');
146
-
147
- // Test web deployment (should use embedded)
148
- console.log('\n๐ŸŒ Testing WEB deployment (embedded expected)...');
149
- results.web = await testResourceMode('web', 'embedded');
150
-
151
- // Test resource content serving for web deployment
152
- if (results.web.success && !results.web.error) {
153
- const port = 3000 + Math.floor(Math.random() * 1000);
154
- console.log(`\n๐Ÿ“ก Testing resource content serving on port ${port}...`);
155
-
156
- // Start web server for content testing
157
- const serverPath = join(rootDir, 'dist/web/server/mcp-server.js');
158
- const child = spawn('node', [serverPath, '--mode', 'remote', '--port', port.toString()], {
159
- cwd: rootDir,
160
- stdio: ['pipe', 'pipe', 'pipe']
161
- });
162
-
163
- // Wait for server to start
164
- await new Promise(resolve => setTimeout(resolve, 2000));
165
-
166
- const contentTest = await testResourceContent('web', port);
167
- results.web.contentTest = contentTest;
168
-
169
- child.kill('SIGTERM');
170
- }
171
-
172
- // Summary
173
- console.log('\n๐Ÿ“Š HYBRID RESOURCE SYSTEM TEST RESULTS');
174
- console.log('========================================');
175
-
176
- let successCount = 0;
177
- let totalTests = 0;
178
-
179
- for (const [deployment, result] of Object.entries(results)) {
180
- totalTests++;
181
- const status = result.success ? 'โœ… PASS' : 'โŒ FAIL';
182
- console.log(`${deployment.toUpperCase().padEnd(8)} ${status}`);
183
-
184
- if (result.success) {
185
- successCount++;
186
- console.log(` Mode: ${result.mode || 'unknown'}`);
187
- console.log(` Type: ${result.type || 'unknown'}`);
188
- console.log(` Resources: ${result.count || 0}`);
189
-
190
- if (result.warning) {
191
- console.log(` Warning: ${result.warning}`);
192
- }
193
-
194
- if (result.contentTest !== undefined) {
195
- console.log(` Content Test: ${result.contentTest ? 'โœ…' : 'โŒ'}`);
196
- }
197
- } else if (result.error) {
198
- console.log(` Error: ${result.error}`);
199
- }
200
- }
201
-
202
- console.log(`\n๐ŸŽฏ Overall Success: ${successCount}/${totalTests} (${Math.round(successCount/totalTests*100)}%)`);
203
-
204
- // Hybrid system validation
205
- const hasFilesystem = Object.values(results).some(r => r.mode === 'filesystem');
206
- const hasEmbedded = Object.values(results).some(r => r.mode === 'embedded');
207
-
208
- console.log('\n๐Ÿ”„ HYBRID SYSTEM VALIDATION');
209
- console.log('============================');
210
- console.log(`Filesystem Mode Detected: ${hasFilesystem ? 'โœ…' : 'โŒ'}`);
211
- console.log(`Embedded Mode Detected: ${hasEmbedded ? 'โœ…' : 'โŒ'}`);
212
- console.log(`Hybrid Detection Working: ${hasFilesystem && hasEmbedded ? 'โœ…' : 'โŒ'}`);
213
-
214
- if (hasFilesystem && hasEmbedded) {
215
- console.log('\n๐ŸŽ‰ HYBRID RESOURCE SYSTEM IS WORKING CORRECTLY!');
216
- console.log('โœ… Local deployment uses filesystem resources');
217
- console.log('โœ… Web deployment uses embedded resources');
218
- console.log('โœ… Automatic mode detection functioning');
219
- console.log('โœ… Resource content serving operational');
220
- }
221
-
222
- return successCount === totalTests;
223
- }
224
-
225
- // Run the hybrid resource tests
226
- runHybridTests().then(success => {
227
- process.exit(success ? 0 : 1);
228
- }).catch(error => {
229
- console.error('Test execution failed:', error);
230
- process.exit(1);
231
- });
@@ -1,196 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Simple Hybrid Resource System Test
4
- * Manual verification of embedded vs filesystem modes
5
- */
6
-
7
- import { spawn, execSync } from 'child_process';
8
- import { existsSync } from 'fs';
9
- import { join, dirname } from 'path';
10
- import { fileURLToPath } from 'url';
11
-
12
- const __dirname = dirname(fileURLToPath(import.meta.url));
13
- const rootDir = join(__dirname, '..');
14
-
15
- console.log('๐Ÿงช SIMPLE HYBRID RESOURCE SYSTEM TEST');
16
- console.log('======================================');
17
-
18
- async function testWebDeploymentManually() {
19
- console.log('\n๐ŸŒ Testing WEB deployment manually...');
20
-
21
- const serverPath = join(rootDir, 'dist/web/server/mcp-server.js');
22
- if (!existsSync(serverPath)) {
23
- console.log(' โŒ Web server not found');
24
- return false;
25
- }
26
-
27
- const port = 3005;
28
- console.log(` ๐Ÿš€ Starting web server on port ${port}...`);
29
-
30
- const child = spawn('node', [serverPath, '--mode', 'remote', '--port', port.toString()], {
31
- cwd: rootDir,
32
- stdio: ['pipe', 'pipe', 'pipe'],
33
- detached: false
34
- });
35
-
36
- let serverReady = false;
37
-
38
- return new Promise((resolve) => {
39
- const timeout = setTimeout(() => {
40
- if (serverReady) {
41
- // Test the server
42
- try {
43
- console.log(' ๐Ÿ” Testing server health...');
44
- const healthResult = execSync(`curl -s http://localhost:${port}/health`, { encoding: 'utf-8', timeout: 5000 });
45
-
46
- if (healthResult) {
47
- const data = JSON.parse(healthResult);
48
- const providerMode = data.metrics?.resources_provider?.mode;
49
- const providerType = data.metrics?.resources_provider?.type;
50
- const resourceCount = data.metrics?.resources_provider?.resourcesInfo?.count || 0;
51
-
52
- console.log(` ๐Ÿ“Š Provider Mode: ${providerMode}`);
53
- console.log(` ๐Ÿ“Š Provider Type: ${providerType}`);
54
- console.log(` ๐Ÿ“Š Resource Count: ${resourceCount}`);
55
-
56
- if (providerMode === 'embedded' && resourceCount > 0) {
57
- console.log(' โœ… Web deployment using embedded resources correctly!');
58
-
59
- // Test resource content
60
- try {
61
- console.log(' ๐Ÿ” Testing resource content...');
62
- const resourceResult = execSync(`curl -s "http://localhost:${port}/mcp/resources"`, { encoding: 'utf-8', timeout: 5000 });
63
- const resourceData = JSON.parse(resourceResult);
64
- console.log(` ๐Ÿ“‹ Available resources: ${resourceData.count}`);
65
-
66
- if (resourceData.count > 0) {
67
- console.log(' โœ… Resource serving working correctly!');
68
- child.kill('SIGTERM');
69
- resolve(true);
70
- return;
71
- }
72
- } catch (resourceError) {
73
- console.log(` โš ๏ธ Resource test failed: ${resourceError.message}`);
74
- }
75
- } else {
76
- console.log(` โŒ Expected embedded mode with resources, got mode: ${providerMode}, count: ${resourceCount}`);
77
- }
78
- }
79
- } catch (error) {
80
- console.log(` โŒ Health check failed: ${error.message}`);
81
- }
82
- }
83
-
84
- child.kill('SIGTERM');
85
- resolve(false);
86
- }, 8000);
87
-
88
- child.stderr.on('data', (data) => {
89
- const output = data.toString();
90
- if (output.includes('listening on port') || output.includes('Health check:')) {
91
- console.log(' โœ… Server is ready');
92
- serverReady = true;
93
- }
94
- });
95
-
96
- child.on('error', (error) => {
97
- console.log(` โŒ Server failed to start: ${error.message}`);
98
- clearTimeout(timeout);
99
- resolve(false);
100
- });
101
-
102
- child.on('exit', (code) => {
103
- if (code !== 0 && code !== null) {
104
- console.log(` โŒ Server exited with code: ${code}`);
105
- clearTimeout(timeout);
106
- resolve(false);
107
- }
108
- });
109
- });
110
- }
111
-
112
- function testLocalDeployment() {
113
- console.log('\n๐Ÿ—‚๏ธ Testing LOCAL deployment...');
114
-
115
- const serverPath = join(rootDir, 'dist/local/server/mcp-server.js');
116
- if (!existsSync(serverPath)) {
117
- console.log(' โŒ Local server not found');
118
- return false;
119
- }
120
-
121
- console.log(' โœ… Local server exists');
122
-
123
- // Check if it has filesystem resources
124
- const resourcesPath = join(rootDir, 'dist/local/resources');
125
- if (existsSync(resourcesPath)) {
126
- console.log(' โœ… Local deployment has filesystem resources');
127
- return true;
128
- } else {
129
- console.log(' โŒ Local deployment missing resources directory');
130
- return false;
131
- }
132
- }
133
-
134
- function checkBuildOutputs() {
135
- console.log('\n๐Ÿ“ Checking build outputs...');
136
-
137
- const checks = [
138
- { name: 'Local server', path: 'dist/local/server/mcp-server.js' },
139
- { name: 'Local resources', path: 'dist/local/resources' },
140
- { name: 'Web server', path: 'dist/web/server/mcp-server.js' },
141
- { name: 'Web embedded resources', path: 'dist/web/embedded-resources.js' },
142
- { name: 'Extension wrapper', path: 'dist/extension/extension-wrapper.js' },
143
- { name: 'Enterprise dockerfile', path: 'dist/enterprise/Dockerfile' }
144
- ];
145
-
146
- let allGood = true;
147
- for (const check of checks) {
148
- const fullPath = join(rootDir, check.path);
149
- const exists = existsSync(fullPath);
150
- console.log(` ${exists ? 'โœ…' : 'โŒ'} ${check.name}`);
151
- if (!exists) allGood = false;
152
- }
153
-
154
- return allGood;
155
- }
156
-
157
- async function runSimpleTest() {
158
- console.log('Starting comprehensive hybrid resource system test...\n');
159
-
160
- // Step 1: Check build outputs
161
- const buildOk = checkBuildOutputs();
162
-
163
- // Step 2: Test local deployment
164
- const localOk = testLocalDeployment();
165
-
166
- // Step 3: Test web deployment
167
- const webOk = await testWebDeploymentManually();
168
-
169
- // Summary
170
- console.log('\n๐Ÿ“Š TEST RESULTS SUMMARY');
171
- console.log('========================');
172
- console.log(`Build Outputs: ${buildOk ? 'โœ… PASS' : 'โŒ FAIL'}`);
173
- console.log(`Local Deployment: ${localOk ? 'โœ… PASS' : 'โŒ FAIL'}`);
174
- console.log(`Web Deployment: ${webOk ? 'โœ… PASS' : 'โŒ FAIL'}`);
175
-
176
- if (buildOk && localOk && webOk) {
177
- console.log('\n๐ŸŽ‰ HYBRID RESOURCE SYSTEM IS FULLY FUNCTIONAL!');
178
- console.log('โœ… All build outputs present');
179
- console.log('โœ… Local deployment uses filesystem resources');
180
- console.log('โœ… Web deployment uses embedded resources');
181
- console.log('โœ… HTTP resource serving operational');
182
- console.log('\nThe multi-environment MCP server is ready for deployment! ๐Ÿš€');
183
- return true;
184
- } else {
185
- console.log('\nโŒ Some tests failed - see details above');
186
- return false;
187
- }
188
- }
189
-
190
- // Run the test
191
- runSimpleTest().then(success => {
192
- process.exit(success ? 0 : 1);
193
- }).catch(error => {
194
- console.error('Test execution failed:', error);
195
- process.exit(1);
196
- });