@skillsmith/core 2.1.1 → 2.1.2

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 (194) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/src/analysis/types.d.ts +2 -0
  3. package/dist/src/analysis/types.d.ts.map +1 -1
  4. package/dist/src/analysis/types.js +13 -1
  5. package/dist/src/analysis/types.js.map +1 -1
  6. package/dist/src/analytics/schema.d.ts +1 -1
  7. package/dist/src/analytics/schema.d.ts.map +1 -1
  8. package/dist/src/analytics/schema.js +68 -0
  9. package/dist/src/analytics/schema.js.map +1 -1
  10. package/dist/src/api/client.d.ts +25 -21
  11. package/dist/src/api/client.d.ts.map +1 -1
  12. package/dist/src/api/client.js +13 -8
  13. package/dist/src/api/client.js.map +1 -1
  14. package/dist/src/billing/BillingService.d.ts +139 -0
  15. package/dist/src/billing/BillingService.d.ts.map +1 -0
  16. package/dist/src/billing/BillingService.js +393 -0
  17. package/dist/src/billing/BillingService.js.map +1 -0
  18. package/dist/src/billing/GDPRComplianceService.d.ts +176 -0
  19. package/dist/src/billing/GDPRComplianceService.d.ts.map +1 -0
  20. package/dist/src/billing/GDPRComplianceService.js +361 -0
  21. package/dist/src/billing/GDPRComplianceService.js.map +1 -0
  22. package/dist/src/billing/StripeClient.d.ts +177 -0
  23. package/dist/src/billing/StripeClient.d.ts.map +1 -0
  24. package/dist/src/billing/StripeClient.js +462 -0
  25. package/dist/src/billing/StripeClient.js.map +1 -0
  26. package/dist/src/billing/StripeReconciliationJob.d.ts +95 -0
  27. package/dist/src/billing/StripeReconciliationJob.d.ts.map +1 -0
  28. package/dist/src/billing/StripeReconciliationJob.js +405 -0
  29. package/dist/src/billing/StripeReconciliationJob.js.map +1 -0
  30. package/dist/src/billing/StripeWebhookHandler.d.ts +92 -0
  31. package/dist/src/billing/StripeWebhookHandler.d.ts.map +1 -0
  32. package/dist/src/billing/StripeWebhookHandler.js +409 -0
  33. package/dist/src/billing/StripeWebhookHandler.js.map +1 -0
  34. package/dist/src/billing/index.d.ts +18 -0
  35. package/dist/src/billing/index.d.ts.map +1 -0
  36. package/dist/src/billing/index.js +19 -0
  37. package/dist/src/billing/index.js.map +1 -0
  38. package/dist/src/billing/types.d.ts +266 -0
  39. package/dist/src/billing/types.d.ts.map +1 -0
  40. package/dist/src/billing/types.js +23 -0
  41. package/dist/src/billing/types.js.map +1 -0
  42. package/dist/src/embeddings/hnsw-store.d.ts +568 -0
  43. package/dist/src/embeddings/hnsw-store.d.ts.map +1 -0
  44. package/dist/src/embeddings/hnsw-store.js +805 -0
  45. package/dist/src/embeddings/hnsw-store.js.map +1 -0
  46. package/dist/src/embeddings/index.d.ts +2 -0
  47. package/dist/src/embeddings/index.d.ts.map +1 -1
  48. package/dist/src/embeddings/index.js +2 -0
  49. package/dist/src/embeddings/index.js.map +1 -1
  50. package/dist/src/index.d.ts +1 -0
  51. package/dist/src/index.d.ts.map +1 -1
  52. package/dist/src/index.js +2 -0
  53. package/dist/src/index.js.map +1 -1
  54. package/dist/src/learning/PatternStore.d.ts +457 -0
  55. package/dist/src/learning/PatternStore.d.ts.map +1 -0
  56. package/dist/src/learning/PatternStore.js +893 -0
  57. package/dist/src/learning/PatternStore.js.map +1 -0
  58. package/dist/src/learning/ReasoningBankIntegration.d.ts +403 -0
  59. package/dist/src/learning/ReasoningBankIntegration.d.ts.map +1 -0
  60. package/dist/src/learning/ReasoningBankIntegration.js +627 -0
  61. package/dist/src/learning/ReasoningBankIntegration.js.map +1 -0
  62. package/dist/src/learning/index.d.ts +15 -0
  63. package/dist/src/learning/index.d.ts.map +1 -0
  64. package/dist/src/learning/index.js +15 -0
  65. package/dist/src/learning/index.js.map +1 -0
  66. package/dist/src/routing/SONARouter.d.ts +154 -0
  67. package/dist/src/routing/SONARouter.d.ts.map +1 -0
  68. package/dist/src/routing/SONARouter.js +679 -0
  69. package/dist/src/routing/SONARouter.js.map +1 -0
  70. package/dist/src/routing/index.d.ts +9 -0
  71. package/dist/src/routing/index.d.ts.map +1 -0
  72. package/dist/src/routing/index.js +10 -0
  73. package/dist/src/routing/index.js.map +1 -0
  74. package/dist/src/routing/types.d.ts +331 -0
  75. package/dist/src/routing/types.d.ts.map +1 -0
  76. package/dist/src/routing/types.js +203 -0
  77. package/dist/src/routing/types.js.map +1 -0
  78. package/dist/src/scripts/__tests__/scan-imported-skills.test.js +5 -0
  79. package/dist/src/scripts/__tests__/scan-imported-skills.test.js.map +1 -1
  80. package/dist/src/security/SkillSandbox.d.ts +156 -0
  81. package/dist/src/security/SkillSandbox.d.ts.map +1 -0
  82. package/dist/src/security/SkillSandbox.js +303 -0
  83. package/dist/src/security/SkillSandbox.js.map +1 -0
  84. package/dist/src/security/index.d.ts +3 -1
  85. package/dist/src/security/index.d.ts.map +1 -1
  86. package/dist/src/security/index.js +5 -1
  87. package/dist/src/security/index.js.map +1 -1
  88. package/dist/src/security/rate-limiter/presets.d.ts +12 -0
  89. package/dist/src/security/rate-limiter/presets.d.ts.map +1 -1
  90. package/dist/src/security/rate-limiter/presets.js +12 -0
  91. package/dist/src/security/rate-limiter/presets.js.map +1 -1
  92. package/dist/src/security/sanitization.d.ts +85 -0
  93. package/dist/src/security/sanitization.d.ts.map +1 -1
  94. package/dist/src/security/sanitization.js +133 -0
  95. package/dist/src/security/sanitization.js.map +1 -1
  96. package/dist/src/security/scanner/SecurityScanner.d.ts +22 -1
  97. package/dist/src/security/scanner/SecurityScanner.d.ts.map +1 -1
  98. package/dist/src/security/scanner/SecurityScanner.js +190 -35
  99. package/dist/src/security/scanner/SecurityScanner.js.map +1 -1
  100. package/dist/src/security/scanner/patterns.d.ts +13 -0
  101. package/dist/src/security/scanner/patterns.d.ts.map +1 -1
  102. package/dist/src/security/scanner/patterns.js +51 -0
  103. package/dist/src/security/scanner/patterns.js.map +1 -1
  104. package/dist/src/security/scanner/types.d.ts +13 -1
  105. package/dist/src/security/scanner/types.d.ts.map +1 -1
  106. package/dist/src/security/scanner/weights.d.ts.map +1 -1
  107. package/dist/src/security/scanner/weights.js +1 -0
  108. package/dist/src/security/scanner/weights.js.map +1 -1
  109. package/dist/src/session/SessionManager.d.ts +7 -0
  110. package/dist/src/session/SessionManager.d.ts.map +1 -1
  111. package/dist/src/session/SessionManager.js +117 -10
  112. package/dist/src/session/SessionManager.js.map +1 -1
  113. package/dist/src/sync/SyncEngine.d.ts.map +1 -1
  114. package/dist/src/sync/SyncEngine.js +9 -1
  115. package/dist/src/sync/SyncEngine.js.map +1 -1
  116. package/dist/src/testing/MultiLLMProvider.d.ts +374 -0
  117. package/dist/src/testing/MultiLLMProvider.d.ts.map +1 -0
  118. package/dist/src/testing/MultiLLMProvider.js +720 -0
  119. package/dist/src/testing/MultiLLMProvider.js.map +1 -0
  120. package/dist/src/testing/index.d.ts +8 -0
  121. package/dist/src/testing/index.d.ts.map +1 -0
  122. package/dist/src/testing/index.js +9 -0
  123. package/dist/src/testing/index.js.map +1 -0
  124. package/dist/tests/SecurityScanner.test.js +337 -1
  125. package/dist/tests/SecurityScanner.test.js.map +1 -1
  126. package/dist/tests/billing/BillingService.test.d.ts +7 -0
  127. package/dist/tests/billing/BillingService.test.d.ts.map +1 -0
  128. package/dist/tests/billing/BillingService.test.js +168 -0
  129. package/dist/tests/billing/BillingService.test.js.map +1 -0
  130. package/dist/tests/billing/GDPRCompliance.test.d.ts +7 -0
  131. package/dist/tests/billing/GDPRCompliance.test.d.ts.map +1 -0
  132. package/dist/tests/billing/GDPRCompliance.test.js +195 -0
  133. package/dist/tests/billing/GDPRCompliance.test.js.map +1 -0
  134. package/dist/tests/billing/StripeReconciliation.test.d.ts +7 -0
  135. package/dist/tests/billing/StripeReconciliation.test.d.ts.map +1 -0
  136. package/dist/tests/billing/StripeReconciliation.test.js +266 -0
  137. package/dist/tests/billing/StripeReconciliation.test.js.map +1 -0
  138. package/dist/tests/billing/stripe-validators.test.d.ts +7 -0
  139. package/dist/tests/billing/stripe-validators.test.d.ts.map +1 -0
  140. package/dist/tests/billing/stripe-validators.test.js +107 -0
  141. package/dist/tests/billing/stripe-validators.test.js.map +1 -0
  142. package/dist/tests/embeddings/hnsw-store.test.d.ts +7 -0
  143. package/dist/tests/embeddings/hnsw-store.test.d.ts.map +1 -0
  144. package/dist/tests/embeddings/hnsw-store.test.js +295 -0
  145. package/dist/tests/embeddings/hnsw-store.test.js.map +1 -0
  146. package/dist/tests/integration/neural/e2e-learning.test.d.ts +17 -0
  147. package/dist/tests/integration/neural/e2e-learning.test.d.ts.map +1 -0
  148. package/dist/tests/integration/neural/e2e-learning.test.js +238 -0
  149. package/dist/tests/integration/neural/e2e-learning.test.js.map +1 -0
  150. package/dist/tests/integration/neural/helpers.d.ts +132 -0
  151. package/dist/tests/integration/neural/helpers.d.ts.map +1 -0
  152. package/dist/tests/integration/neural/helpers.js +287 -0
  153. package/dist/tests/integration/neural/helpers.js.map +1 -0
  154. package/dist/tests/integration/neural/personalization.test.d.ts +21 -0
  155. package/dist/tests/integration/neural/personalization.test.d.ts.map +1 -0
  156. package/dist/tests/integration/neural/personalization.test.js +304 -0
  157. package/dist/tests/integration/neural/personalization.test.js.map +1 -0
  158. package/dist/tests/integration/neural/preference-learner.test.d.ts +23 -0
  159. package/dist/tests/integration/neural/preference-learner.test.d.ts.map +1 -0
  160. package/dist/tests/integration/neural/preference-learner.test.js +289 -0
  161. package/dist/tests/integration/neural/preference-learner.test.js.map +1 -0
  162. package/dist/tests/integration/neural/privacy.test.d.ts +19 -0
  163. package/dist/tests/integration/neural/privacy.test.d.ts.map +1 -0
  164. package/dist/tests/integration/neural/privacy.test.js +249 -0
  165. package/dist/tests/integration/neural/privacy.test.js.map +1 -0
  166. package/dist/tests/integration/neural/setup.d.ts +175 -0
  167. package/dist/tests/integration/neural/setup.d.ts.map +1 -0
  168. package/dist/tests/integration/neural/setup.js +487 -0
  169. package/dist/tests/integration/neural/setup.js.map +1 -0
  170. package/dist/tests/integration/neural/signal-collection.test.d.ts +21 -0
  171. package/dist/tests/integration/neural/signal-collection.test.d.ts.map +1 -0
  172. package/dist/tests/integration/neural/signal-collection.test.js +232 -0
  173. package/dist/tests/integration/neural/signal-collection.test.js.map +1 -0
  174. package/dist/tests/learning/PatternStore.test.d.ts +8 -0
  175. package/dist/tests/learning/PatternStore.test.d.ts.map +1 -0
  176. package/dist/tests/learning/PatternStore.test.js +589 -0
  177. package/dist/tests/learning/PatternStore.test.js.map +1 -0
  178. package/dist/tests/learning/ReasoningBankIntegration.test.d.ts +8 -0
  179. package/dist/tests/learning/ReasoningBankIntegration.test.d.ts.map +1 -0
  180. package/dist/tests/learning/ReasoningBankIntegration.test.js +269 -0
  181. package/dist/tests/learning/ReasoningBankIntegration.test.js.map +1 -0
  182. package/dist/tests/routing/SONARouter.test.d.ts +8 -0
  183. package/dist/tests/routing/SONARouter.test.d.ts.map +1 -0
  184. package/dist/tests/routing/SONARouter.test.js +400 -0
  185. package/dist/tests/routing/SONARouter.test.js.map +1 -0
  186. package/dist/tests/security/SkillSandbox.test.d.ts +8 -0
  187. package/dist/tests/security/SkillSandbox.test.d.ts.map +1 -0
  188. package/dist/tests/security/SkillSandbox.test.js +321 -0
  189. package/dist/tests/security/SkillSandbox.test.js.map +1 -0
  190. package/dist/tests/testing/MultiLLMProvider.test.d.ts +14 -0
  191. package/dist/tests/testing/MultiLLMProvider.test.d.ts.map +1 -0
  192. package/dist/tests/testing/MultiLLMProvider.test.js +438 -0
  193. package/dist/tests/testing/MultiLLMProvider.test.js.map +1 -0
  194. package/package.json +16 -3
@@ -0,0 +1,321 @@
1
+ /**
2
+ * SMI-1534: SkillSandbox Unit Tests
3
+ *
4
+ * Tests for the E2B sandbox execution wrapper.
5
+ * Since E2B is an optional dependency, these tests mock the E2B module.
6
+ */
7
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
8
+ import { SkillSandbox, SandboxUnavailableError, withSandbox, } from '../../src/security/SkillSandbox.js';
9
+ // Mock E2B module
10
+ const mockFilesystem = {
11
+ write: vi.fn().mockResolvedValue(undefined),
12
+ read: vi.fn().mockResolvedValue('file content'),
13
+ makeDir: vi.fn().mockResolvedValue(undefined),
14
+ };
15
+ const mockProcess = {
16
+ startAndWait: vi.fn().mockResolvedValue({
17
+ exitCode: 0,
18
+ stdout: 'test output',
19
+ stderr: '',
20
+ }),
21
+ };
22
+ const mockKill = vi.fn().mockResolvedValue(undefined);
23
+ const mockSandboxInstance = {
24
+ filesystem: mockFilesystem,
25
+ process: mockProcess,
26
+ kill: mockKill,
27
+ };
28
+ const mockSandboxCreate = vi.fn().mockResolvedValue(mockSandboxInstance);
29
+ describe('SMI-1534: SkillSandbox', () => {
30
+ beforeEach(() => {
31
+ vi.resetAllMocks();
32
+ // Reset mock implementations
33
+ mockSandboxCreate.mockResolvedValue(mockSandboxInstance);
34
+ mockProcess.startAndWait.mockResolvedValue({
35
+ exitCode: 0,
36
+ stdout: 'test output',
37
+ stderr: '',
38
+ });
39
+ });
40
+ afterEach(() => {
41
+ vi.restoreAllMocks();
42
+ });
43
+ describe('Constructor', () => {
44
+ it('should use default options when none provided', () => {
45
+ const sandbox = new SkillSandbox();
46
+ const status = sandbox.getStatus();
47
+ expect(status.options.timeout).toBe(30000);
48
+ expect(status.options.memoryMB).toBe(256);
49
+ expect(status.options.allowNetwork).toBe(false);
50
+ expect(status.options.env).toEqual({});
51
+ });
52
+ it('should accept custom options', () => {
53
+ const options = {
54
+ timeout: 60000,
55
+ memoryMB: 512,
56
+ allowNetwork: true,
57
+ env: { NODE_ENV: 'test' },
58
+ };
59
+ const sandbox = new SkillSandbox(options);
60
+ const status = sandbox.getStatus();
61
+ expect(status.options.timeout).toBe(60000);
62
+ expect(status.options.memoryMB).toBe(512);
63
+ expect(status.options.allowNetwork).toBe(true);
64
+ expect(status.options.env).toEqual({ NODE_ENV: 'test' });
65
+ });
66
+ });
67
+ describe('Status', () => {
68
+ it('should report not created initially', () => {
69
+ const sandbox = new SkillSandbox();
70
+ const status = sandbox.getStatus();
71
+ expect(status.created).toBe(false);
72
+ expect(status.active).toBe(false);
73
+ });
74
+ it('should report isActive as false when not created', () => {
75
+ const sandbox = new SkillSandbox();
76
+ expect(sandbox.isActive()).toBe(false);
77
+ });
78
+ });
79
+ describe('Create', () => {
80
+ it('should throw if sandbox already created', async () => {
81
+ const sandbox = new SkillSandbox();
82
+ sandbox.created = true;
83
+ await expect(sandbox.create()).rejects.toThrow('Sandbox already created');
84
+ });
85
+ it('should throw error when E2B not installed', async () => {
86
+ const sandbox = new SkillSandbox();
87
+ // The dynamic import will fail since E2B is not installed
88
+ // In test environment, it may throw different errors (SandboxUnavailableError or TypeError)
89
+ await expect(sandbox.create()).rejects.toThrow();
90
+ });
91
+ });
92
+ describe('Operations without creation', () => {
93
+ it('should throw when copying files without create', async () => {
94
+ const sandbox = new SkillSandbox();
95
+ await expect(sandbox.copyFiles([{ path: '/test.txt', content: 'test' }])).rejects.toThrow('Sandbox not created');
96
+ });
97
+ it('should throw when copying skill without create', async () => {
98
+ const sandbox = new SkillSandbox();
99
+ await expect(sandbox.copySkill('skill content')).rejects.toThrow('Sandbox not created');
100
+ });
101
+ it('should throw when executing without create', async () => {
102
+ const sandbox = new SkillSandbox();
103
+ await expect(sandbox.execute('node test.js')).rejects.toThrow('Sandbox not created');
104
+ });
105
+ it('should throw when executing code without create', async () => {
106
+ const sandbox = new SkillSandbox();
107
+ await expect(sandbox.executeCode('console.log("test")')).rejects.toThrow('Sandbox not created');
108
+ });
109
+ });
110
+ describe('Destroy', () => {
111
+ it('should handle destroy when not created', async () => {
112
+ const sandbox = new SkillSandbox();
113
+ // Should not throw
114
+ await expect(sandbox.destroy()).resolves.toBeUndefined();
115
+ });
116
+ });
117
+ describe('SandboxUnavailableError', () => {
118
+ it('should have correct name', () => {
119
+ const error = new SandboxUnavailableError('test message');
120
+ expect(error.name).toBe('SandboxUnavailableError');
121
+ expect(error.message).toBe('test message');
122
+ });
123
+ it('should be instanceof Error', () => {
124
+ const error = new SandboxUnavailableError('test');
125
+ expect(error).toBeInstanceOf(Error);
126
+ expect(error).toBeInstanceOf(SandboxUnavailableError);
127
+ });
128
+ });
129
+ describe('withSandbox helper', () => {
130
+ it('should throw error when E2B not available', async () => {
131
+ // In test environment, dynamic import may throw different errors
132
+ await expect(withSandbox(async (sandbox) => {
133
+ return sandbox.getStatus();
134
+ })).rejects.toThrow();
135
+ });
136
+ it('should pass options to sandbox', async () => {
137
+ const options = {
138
+ timeout: 10000,
139
+ allowNetwork: true,
140
+ };
141
+ // Will still fail because E2B not installed
142
+ await expect(withSandbox(async () => 'result', options)).rejects.toThrow();
143
+ });
144
+ });
145
+ describe('ExecutionResult structure', () => {
146
+ it('should have all required fields defined in type', () => {
147
+ const result = {
148
+ success: true,
149
+ exitCode: 0,
150
+ stdout: 'output',
151
+ stderr: '',
152
+ durationMs: 100,
153
+ timedOut: false,
154
+ };
155
+ expect(result.success).toBe(true);
156
+ expect(result.exitCode).toBe(0);
157
+ expect(result.stdout).toBe('output');
158
+ expect(result.stderr).toBe('');
159
+ expect(result.durationMs).toBe(100);
160
+ expect(result.timedOut).toBe(false);
161
+ });
162
+ it('should allow optional error field', () => {
163
+ const result = {
164
+ success: false,
165
+ exitCode: 1,
166
+ stdout: '',
167
+ stderr: 'error message',
168
+ durationMs: 50,
169
+ timedOut: false,
170
+ error: 'Something went wrong',
171
+ };
172
+ expect(result.error).toBe('Something went wrong');
173
+ });
174
+ });
175
+ describe('Timeout handling', () => {
176
+ it('should report timedOut true in ExecutionResult', () => {
177
+ const result = {
178
+ success: false,
179
+ exitCode: -1,
180
+ stdout: '',
181
+ stderr: 'Execution timed out after 30000ms',
182
+ durationMs: 30000,
183
+ timedOut: true,
184
+ error: 'Timeout',
185
+ };
186
+ expect(result.timedOut).toBe(true);
187
+ expect(result.exitCode).toBe(-1);
188
+ });
189
+ });
190
+ describe('Network isolation configuration', () => {
191
+ it('should default to network disabled', () => {
192
+ const sandbox = new SkillSandbox();
193
+ const status = sandbox.getStatus();
194
+ expect(status.options.allowNetwork).toBe(false);
195
+ });
196
+ it('should allow enabling network when specified', () => {
197
+ const sandbox = new SkillSandbox({ allowNetwork: true });
198
+ const status = sandbox.getStatus();
199
+ expect(status.options.allowNetwork).toBe(true);
200
+ });
201
+ });
202
+ describe('Memory configuration', () => {
203
+ it('should default to 256MB', () => {
204
+ const sandbox = new SkillSandbox();
205
+ const status = sandbox.getStatus();
206
+ expect(status.options.memoryMB).toBe(256);
207
+ });
208
+ it('should allow custom memory limit', () => {
209
+ const sandbox = new SkillSandbox({ memoryMB: 1024 });
210
+ const status = sandbox.getStatus();
211
+ expect(status.options.memoryMB).toBe(1024);
212
+ });
213
+ });
214
+ describe('Environment variables', () => {
215
+ it('should default to empty env', () => {
216
+ const sandbox = new SkillSandbox();
217
+ const status = sandbox.getStatus();
218
+ expect(status.options.env).toEqual({});
219
+ });
220
+ it('should accept custom environment variables', () => {
221
+ const env = {
222
+ NODE_ENV: 'test',
223
+ DEBUG: 'true',
224
+ API_KEY: 'secret',
225
+ };
226
+ const sandbox = new SkillSandbox({ env });
227
+ const status = sandbox.getStatus();
228
+ expect(status.options.env).toEqual(env);
229
+ });
230
+ });
231
+ /**
232
+ * SMI-1534: Integration tests for actual E2B sandbox execution
233
+ * These tests require E2B to be installed and configured.
234
+ * They are wrapped in try/catch to handle E2B unavailability gracefully.
235
+ */
236
+ describe('Integration Tests (E2B required)', () => {
237
+ it('should execute code in sandbox when E2B available', async () => {
238
+ const sandbox = new SkillSandbox({ timeout: 60000 });
239
+ try {
240
+ await sandbox.create();
241
+ const result = await sandbox.executeCode('console.log("Hello from sandbox")');
242
+ expect(result.success).toBe(true);
243
+ expect(result.stdout).toContain('Hello from sandbox');
244
+ expect(result.timedOut).toBe(false);
245
+ }
246
+ catch (error) {
247
+ // E2B not available - skip this test
248
+ if (error instanceof Error && error.message.includes('E2B sandbox not available')) {
249
+ console.log('Skipping: E2B not installed');
250
+ return;
251
+ }
252
+ throw error;
253
+ }
254
+ finally {
255
+ await sandbox.destroy();
256
+ }
257
+ });
258
+ it('should enforce timeout when E2B available', async () => {
259
+ const sandbox = new SkillSandbox({ timeout: 1000 }); // 1 second timeout
260
+ try {
261
+ await sandbox.create();
262
+ const result = await sandbox.executeCode('while(true) {}');
263
+ expect(result.success).toBe(false);
264
+ expect(result.timedOut).toBe(true);
265
+ }
266
+ catch (error) {
267
+ // E2B not available - skip this test
268
+ if (error instanceof Error && error.message.includes('E2B sandbox not available')) {
269
+ console.log('Skipping: E2B not installed');
270
+ return;
271
+ }
272
+ throw error;
273
+ }
274
+ finally {
275
+ await sandbox.destroy();
276
+ }
277
+ });
278
+ it('should copy skill content when E2B available', async () => {
279
+ const sandbox = new SkillSandbox();
280
+ try {
281
+ await sandbox.create();
282
+ await sandbox.copySkill('# Test Skill\n\nThis is a test skill.');
283
+ // Verify file was written by reading it back
284
+ const result = await sandbox.execute('cat /skill/SKILL.md');
285
+ expect(result.stdout).toContain('Test Skill');
286
+ }
287
+ catch (error) {
288
+ // E2B not available - skip this test
289
+ if (error instanceof Error && error.message.includes('E2B sandbox not available')) {
290
+ console.log('Skipping: E2B not installed');
291
+ return;
292
+ }
293
+ throw error;
294
+ }
295
+ finally {
296
+ await sandbox.destroy();
297
+ }
298
+ });
299
+ it('should verify network isolation when E2B available', async () => {
300
+ const sandbox = new SkillSandbox({ allowNetwork: false });
301
+ try {
302
+ await sandbox.create();
303
+ // Network test would have happened during create via verifyNetworkIsolation
304
+ // Just verify sandbox was created successfully
305
+ expect(sandbox.isActive()).toBe(true);
306
+ }
307
+ catch (error) {
308
+ // E2B not available - skip this test
309
+ if (error instanceof Error && error.message.includes('E2B sandbox not available')) {
310
+ console.log('Skipping: E2B not installed');
311
+ return;
312
+ }
313
+ throw error;
314
+ }
315
+ finally {
316
+ await sandbox.destroy();
317
+ }
318
+ });
319
+ });
320
+ });
321
+ //# sourceMappingURL=SkillSandbox.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkillSandbox.test.js","sourceRoot":"","sources":["../../../tests/security/SkillSandbox.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @fileoverview MultiLLMProvider Unit Tests
3
+ *
4
+ * Tests for the multi-LLM provider system including:
5
+ * - Initialization and configuration
6
+ * - Provider management (enable/disable, health checks)
7
+ * - Request completion with failover
8
+ * - Circuit breaker functionality
9
+ * - Load balancing strategies
10
+ * - Skill compatibility testing
11
+ * - Metrics collection
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=MultiLLMProvider.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiLLMProvider.test.d.ts","sourceRoot":"","sources":["../../../tests/testing/MultiLLMProvider.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}