@semiont/cli 0.1.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 (36) hide show
  1. package/README.md +497 -0
  2. package/dist/cli.mjs +45524 -0
  3. package/dist/dashboard/dashboard.css +238 -0
  4. package/dist/dashboard/dashboard.js +14 -0
  5. package/dist/dashboard/dashboard.js.map +7 -0
  6. package/dist/mcp-server/handlers-stubs.d.ts +40 -0
  7. package/dist/mcp-server/handlers-stubs.d.ts.map +1 -0
  8. package/dist/mcp-server/handlers-stubs.js +22 -0
  9. package/dist/mcp-server/handlers-stubs.js.map +1 -0
  10. package/dist/mcp-server/handlers.d.ts +96 -0
  11. package/dist/mcp-server/handlers.d.ts.map +1 -0
  12. package/dist/mcp-server/handlers.js +253 -0
  13. package/dist/mcp-server/handlers.js.map +1 -0
  14. package/dist/mcp-server/index.d.ts +3 -0
  15. package/dist/mcp-server/index.d.ts.map +1 -0
  16. package/dist/mcp-server/index.js +365 -0
  17. package/dist/mcp-server/index.js.map +1 -0
  18. package/dist/mcp-server/index.test.d.ts +7 -0
  19. package/dist/mcp-server/index.test.d.ts.map +1 -0
  20. package/dist/mcp-server/index.test.js +183 -0
  21. package/dist/mcp-server/index.test.js.map +1 -0
  22. package/dist/templates/cdk/app-stack.ts +893 -0
  23. package/dist/templates/cdk/app.ts +54 -0
  24. package/dist/templates/cdk/data-stack.ts +416 -0
  25. package/dist/templates/cdk.json +36 -0
  26. package/dist/templates/environments/ci.json +52 -0
  27. package/dist/templates/environments/local.json +82 -0
  28. package/dist/templates/environments/production.json +57 -0
  29. package/dist/templates/environments/staging.json +49 -0
  30. package/dist/templates/environments/test.json +61 -0
  31. package/dist/templates/inference-claude.json +14 -0
  32. package/dist/templates/inference-openai.json +16 -0
  33. package/dist/templates/package.json +23 -0
  34. package/dist/templates/semiont.json +31 -0
  35. package/dist/templates/tsconfig.json +27 -0
  36. package/package.json +91 -0
@@ -0,0 +1,7 @@
1
+ /**
2
+ * MCP Server Tests
3
+ *
4
+ * Tests for the Semiont MCP (Model Context Protocol) server
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,183 @@
1
+ /**
2
+ * MCP Server Tests
3
+ *
4
+ * Tests for the Semiont MCP (Model Context Protocol) server
5
+ */
6
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
7
+ // Mock environment variables
8
+ beforeEach(() => {
9
+ process.env.SEMIONT_API_URL = 'http://test.api.semiont.com';
10
+ process.env.SEMIONT_API_TOKEN = 'test-token-123';
11
+ });
12
+ afterEach(() => {
13
+ delete process.env.SEMIONT_API_URL;
14
+ delete process.env.SEMIONT_API_TOKEN;
15
+ vi.clearAllMocks();
16
+ });
17
+ // Mock fetch globally
18
+ global.fetch = vi.fn();
19
+ describe('MCP Server', () => {
20
+ describe('Tool Registration', () => {
21
+ it('should register semiont_hello tool', async () => {
22
+ // Import the server module to trigger registration
23
+ await import('./index.js');
24
+ // The server should have registered the semiont_hello tool
25
+ // We can't directly test the Server instance, but we can verify
26
+ // the module loads without errors
27
+ expect(process.env.SEMIONT_API_URL).toBe('http://test.api.semiont.com');
28
+ expect(process.env.SEMIONT_API_TOKEN).toBe('test-token-123');
29
+ });
30
+ });
31
+ describe('Tool Execution', () => {
32
+ beforeEach(() => {
33
+ // Reset fetch mock
34
+ global.fetch.mockReset();
35
+ });
36
+ it('should call API with authentication for hello tool', async () => {
37
+ // Mock successful API response
38
+ global.fetch.mockResolvedValue({
39
+ ok: true,
40
+ json: async () => ({
41
+ message: 'Hello, World!',
42
+ platform: 'test',
43
+ timestamp: new Date().toISOString(),
44
+ user: 'test@example.com'
45
+ })
46
+ });
47
+ // Since we can't directly test the server handlers without
48
+ // the full MCP infrastructure, we test the API interaction pattern
49
+ const url = `${process.env.SEMIONT_API_URL}/api/hello`;
50
+ const response = await fetch(url, {
51
+ method: 'GET',
52
+ headers: {
53
+ 'Authorization': `Bearer ${process.env.SEMIONT_API_TOKEN}`,
54
+ 'Content-Type': 'application/json',
55
+ },
56
+ });
57
+ expect(global.fetch).toHaveBeenCalledWith('http://test.api.semiont.com/api/hello', expect.objectContaining({
58
+ method: 'GET',
59
+ headers: expect.objectContaining({
60
+ 'Authorization': 'Bearer test-token-123',
61
+ 'Content-Type': 'application/json',
62
+ })
63
+ }));
64
+ const data = await response.json();
65
+ expect(data).toMatchObject({
66
+ message: 'Hello, World!',
67
+ platform: 'test',
68
+ user: 'test@example.com'
69
+ });
70
+ });
71
+ it('should handle API authentication failure', async () => {
72
+ // Mock 401 response
73
+ global.fetch.mockResolvedValue({
74
+ ok: false,
75
+ status: 401,
76
+ statusText: 'Unauthorized'
77
+ });
78
+ const url = `${process.env.SEMIONT_API_URL}/api/hello`;
79
+ const response = await fetch(url, {
80
+ method: 'GET',
81
+ headers: {
82
+ 'Authorization': `Bearer ${process.env.SEMIONT_API_TOKEN}`,
83
+ 'Content-Type': 'application/json',
84
+ },
85
+ });
86
+ expect(response.ok).toBe(false);
87
+ expect(response.status).toBe(401);
88
+ });
89
+ it('should call API with name parameter when provided', async () => {
90
+ const testName = 'TestUser';
91
+ // Mock successful API response
92
+ global.fetch.mockResolvedValue({
93
+ ok: true,
94
+ json: async () => ({
95
+ message: `Hello, ${testName}!`,
96
+ platform: 'test',
97
+ timestamp: new Date().toISOString(),
98
+ user: 'test@example.com'
99
+ })
100
+ });
101
+ const url = `${process.env.SEMIONT_API_URL}/api/hello/${encodeURIComponent(testName)}`;
102
+ const response = await fetch(url, {
103
+ method: 'GET',
104
+ headers: {
105
+ 'Authorization': `Bearer ${process.env.SEMIONT_API_TOKEN}`,
106
+ 'Content-Type': 'application/json',
107
+ },
108
+ });
109
+ expect(global.fetch).toHaveBeenCalledWith(`http://test.api.semiont.com/api/hello/${testName}`, expect.anything());
110
+ const data = await response.json();
111
+ expect(data.message).toContain(testName);
112
+ });
113
+ it('should handle network errors gracefully', async () => {
114
+ // Mock network error
115
+ global.fetch.mockRejectedValue(new Error('Network error'));
116
+ const url = `${process.env.SEMIONT_API_URL}/api/hello`;
117
+ await expect(fetch(url, {
118
+ method: 'GET',
119
+ headers: {
120
+ 'Authorization': `Bearer ${process.env.SEMIONT_API_TOKEN}`,
121
+ 'Content-Type': 'application/json',
122
+ },
123
+ })).rejects.toThrow('Network error');
124
+ });
125
+ });
126
+ describe('Environment Configuration', () => {
127
+ it('should use default API URL when not specified', async () => {
128
+ delete process.env.SEMIONT_API_URL;
129
+ // Re-import to get default values
130
+ const module = await import('./index.js');
131
+ // The module should use the default URL
132
+ // Since we can't access the const directly, we verify it doesn't crash
133
+ expect(module).toBeDefined();
134
+ });
135
+ it('should handle missing API token', async () => {
136
+ delete process.env.SEMIONT_API_TOKEN;
137
+ // Mock API call without token
138
+ global.fetch.mockResolvedValue({
139
+ ok: false,
140
+ status: 401,
141
+ statusText: 'Unauthorized'
142
+ });
143
+ const url = 'http://localhost:4000/api/hello';
144
+ const response = await fetch(url, {
145
+ method: 'GET',
146
+ headers: {
147
+ 'Authorization': 'Bearer ',
148
+ 'Content-Type': 'application/json',
149
+ },
150
+ });
151
+ expect(response.status).toBe(401);
152
+ });
153
+ });
154
+ describe('Input Validation', () => {
155
+ it('should handle name parameter with special characters', () => {
156
+ const specialName = 'Test User & Co. <script>';
157
+ const encoded = encodeURIComponent(specialName);
158
+ expect(encoded).toBe('Test%20User%20%26%20Co.%20%3Cscript%3E');
159
+ // Verify the URL is properly constructed
160
+ const url = `http://test.api.semiont.com/api/hello/${encoded}`;
161
+ expect(url).toContain('Test%20User%20%26%20Co.%20%3Cscript%3E');
162
+ });
163
+ it('should handle very long name parameters', () => {
164
+ const longName = 'A'.repeat(150); // Exceeds typical 100 char limit
165
+ const encoded = encodeURIComponent(longName);
166
+ // The encoding should work regardless of length
167
+ expect(encoded).toBe(longName);
168
+ // Server should handle length validation
169
+ const url = `http://test.api.semiont.com/api/hello/${encoded}`;
170
+ expect(url.length).toBeGreaterThan(150);
171
+ });
172
+ it('should handle empty name parameter', () => {
173
+ const emptyName = '';
174
+ const encoded = encodeURIComponent(emptyName);
175
+ expect(encoded).toBe('');
176
+ // Should use the base URL without name
177
+ const baseUrl = 'http://test.api.semiont.com/api/hello';
178
+ const url = emptyName ? `${baseUrl}/${encoded}` : baseUrl;
179
+ expect(url).toBe(baseUrl);
180
+ });
181
+ });
182
+ });
183
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}