@timmeck/brain-core 2.36.62 → 2.36.63

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 (253) hide show
  1. package/dist/guardrails/guardrail-engine.d.ts +2 -0
  2. package/dist/guardrails/guardrail-engine.js +17 -9
  3. package/dist/guardrails/guardrail-engine.js.map +1 -1
  4. package/dist/index.d.ts +2 -0
  5. package/dist/index.js +1 -0
  6. package/dist/index.js.map +1 -1
  7. package/dist/utils/memory-watchdog.d.ts +33 -0
  8. package/dist/utils/memory-watchdog.js +88 -0
  9. package/dist/utils/memory-watchdog.js.map +1 -0
  10. package/package.json +1 -1
  11. package/dist/action/__tests__/action-bridge.test.d.ts +0 -1
  12. package/dist/action/__tests__/action-bridge.test.js +0 -175
  13. package/dist/action/__tests__/action-bridge.test.js.map +0 -1
  14. package/dist/action/__tests__/adjust-parameter-handler.test.d.ts +0 -1
  15. package/dist/action/__tests__/adjust-parameter-handler.test.js +0 -138
  16. package/dist/action/__tests__/adjust-parameter-handler.test.js.map +0 -1
  17. package/dist/action/__tests__/content-handler.test.d.ts +0 -1
  18. package/dist/action/__tests__/content-handler.test.js +0 -100
  19. package/dist/action/__tests__/content-handler.test.js.map +0 -1
  20. package/dist/action/__tests__/creative-seed-handler.test.d.ts +0 -1
  21. package/dist/action/__tests__/creative-seed-handler.test.js +0 -96
  22. package/dist/action/__tests__/creative-seed-handler.test.js.map +0 -1
  23. package/dist/action/__tests__/trade-handler.test.d.ts +0 -1
  24. package/dist/action/__tests__/trade-handler.test.js +0 -165
  25. package/dist/action/__tests__/trade-handler.test.js.map +0 -1
  26. package/dist/active-learning/__tests__/active-learning.test.d.ts +0 -1
  27. package/dist/active-learning/__tests__/active-learning.test.js +0 -132
  28. package/dist/active-learning/__tests__/active-learning.test.js.map +0 -1
  29. package/dist/agent-training/__tests__/agent-trainer.test.d.ts +0 -1
  30. package/dist/agent-training/__tests__/agent-trainer.test.js +0 -158
  31. package/dist/agent-training/__tests__/agent-trainer.test.js.map +0 -1
  32. package/dist/agent-training/__tests__/sub-agent-factory.test.d.ts +0 -1
  33. package/dist/agent-training/__tests__/sub-agent-factory.test.js +0 -100
  34. package/dist/agent-training/__tests__/sub-agent-factory.test.js.map +0 -1
  35. package/dist/agent-training/__tests__/sub-agent.test.d.ts +0 -1
  36. package/dist/agent-training/__tests__/sub-agent.test.js +0 -102
  37. package/dist/agent-training/__tests__/sub-agent.test.js.map +0 -1
  38. package/dist/chat/__tests__/chat-engine.test.d.ts +0 -1
  39. package/dist/chat/__tests__/chat-engine.test.js +0 -209
  40. package/dist/chat/__tests__/chat-engine.test.js.map +0 -1
  41. package/dist/checkpoint/__tests__/checkpoint-manager.test.d.ts +0 -1
  42. package/dist/checkpoint/__tests__/checkpoint-manager.test.js +0 -160
  43. package/dist/checkpoint/__tests__/checkpoint-manager.test.js.map +0 -1
  44. package/dist/code-health/__tests__/code-health.test.d.ts +0 -1
  45. package/dist/code-health/__tests__/code-health.test.js +0 -123
  46. package/dist/code-health/__tests__/code-health.test.js.map +0 -1
  47. package/dist/codegen/__tests__/code-forge.test.d.ts +0 -1
  48. package/dist/codegen/__tests__/code-forge.test.js +0 -105
  49. package/dist/codegen/__tests__/code-forge.test.js.map +0 -1
  50. package/dist/config/__tests__/loader.test.d.ts +0 -1
  51. package/dist/config/__tests__/loader.test.js +0 -86
  52. package/dist/config/__tests__/loader.test.js.map +0 -1
  53. package/dist/consciousness/__tests__/thought-stream.test.d.ts +0 -1
  54. package/dist/consciousness/__tests__/thought-stream.test.js +0 -62
  55. package/dist/consciousness/__tests__/thought-stream.test.js.map +0 -1
  56. package/dist/consensus/__tests__/consensus.test.d.ts +0 -1
  57. package/dist/consensus/__tests__/consensus.test.js +0 -159
  58. package/dist/consensus/__tests__/consensus.test.js.map +0 -1
  59. package/dist/content/__tests__/auto-publisher.test.d.ts +0 -1
  60. package/dist/content/__tests__/auto-publisher.test.js +0 -125
  61. package/dist/content/__tests__/auto-publisher.test.js.map +0 -1
  62. package/dist/content/__tests__/content-forge.test.d.ts +0 -1
  63. package/dist/content/__tests__/content-forge.test.js +0 -117
  64. package/dist/content/__tests__/content-forge.test.js.map +0 -1
  65. package/dist/creative/__tests__/creative-engine.test.d.ts +0 -1
  66. package/dist/creative/__tests__/creative-engine.test.js +0 -229
  67. package/dist/creative/__tests__/creative-engine.test.js.map +0 -1
  68. package/dist/cross-brain/__tests__/borg-sync-engine.test.d.ts +0 -1
  69. package/dist/cross-brain/__tests__/borg-sync-engine.test.js +0 -240
  70. package/dist/cross-brain/__tests__/borg-sync-engine.test.js.map +0 -1
  71. package/dist/cross-brain/__tests__/client.test.d.ts +0 -1
  72. package/dist/cross-brain/__tests__/client.test.js +0 -31
  73. package/dist/cross-brain/__tests__/client.test.js.map +0 -1
  74. package/dist/cross-brain/__tests__/notifications.test.d.ts +0 -1
  75. package/dist/cross-brain/__tests__/notifications.test.js +0 -52
  76. package/dist/cross-brain/__tests__/notifications.test.js.map +0 -1
  77. package/dist/cross-brain/__tests__/signal-router.test.d.ts +0 -1
  78. package/dist/cross-brain/__tests__/signal-router.test.js +0 -218
  79. package/dist/cross-brain/__tests__/signal-router.test.js.map +0 -1
  80. package/dist/cross-brain/__tests__/subscription.test.d.ts +0 -1
  81. package/dist/cross-brain/__tests__/subscription.test.js +0 -75
  82. package/dist/cross-brain/__tests__/subscription.test.js.map +0 -1
  83. package/dist/dashboard/__tests__/command-center-server.test.d.ts +0 -1
  84. package/dist/dashboard/__tests__/command-center-server.test.js +0 -522
  85. package/dist/dashboard/__tests__/command-center-server.test.js.map +0 -1
  86. package/dist/dashboard/__tests__/server.test.d.ts +0 -1
  87. package/dist/dashboard/__tests__/server.test.js +0 -105
  88. package/dist/dashboard/__tests__/server.test.js.map +0 -1
  89. package/dist/db/__tests__/connection.test.d.ts +0 -1
  90. package/dist/db/__tests__/connection.test.js +0 -135
  91. package/dist/db/__tests__/connection.test.js.map +0 -1
  92. package/dist/dream/__tests__/dream-engine.test.d.ts +0 -1
  93. package/dist/dream/__tests__/dream-engine.test.js +0 -184
  94. package/dist/dream/__tests__/dream-engine.test.js.map +0 -1
  95. package/dist/embeddings/__tests__/engine.test.d.ts +0 -1
  96. package/dist/embeddings/__tests__/engine.test.js +0 -82
  97. package/dist/embeddings/__tests__/engine.test.js.map +0 -1
  98. package/dist/feedback/__tests__/feedback-engine.test.d.ts +0 -1
  99. package/dist/feedback/__tests__/feedback-engine.test.js +0 -156
  100. package/dist/feedback/__tests__/feedback-engine.test.js.map +0 -1
  101. package/dist/feedback/__tests__/feedback-router.test.d.ts +0 -1
  102. package/dist/feedback/__tests__/feedback-router.test.js +0 -173
  103. package/dist/feedback/__tests__/feedback-router.test.js.map +0 -1
  104. package/dist/goals/__tests__/goal-engine.test.d.ts +0 -1
  105. package/dist/goals/__tests__/goal-engine.test.js +0 -203
  106. package/dist/goals/__tests__/goal-engine.test.js.map +0 -1
  107. package/dist/guardrails/__tests__/guardrail-engine.test.d.ts +0 -1
  108. package/dist/guardrails/__tests__/guardrail-engine.test.js +0 -343
  109. package/dist/guardrails/__tests__/guardrail-engine.test.js.map +0 -1
  110. package/dist/ipc/__tests__/integration.test.d.ts +0 -1
  111. package/dist/ipc/__tests__/integration.test.js +0 -352
  112. package/dist/ipc/__tests__/integration.test.js.map +0 -1
  113. package/dist/ipc/__tests__/protocol.test.d.ts +0 -1
  114. package/dist/ipc/__tests__/protocol.test.js +0 -69
  115. package/dist/ipc/__tests__/protocol.test.js.map +0 -1
  116. package/dist/knowledge-graph/__tests__/contradiction-resolver.test.d.ts +0 -1
  117. package/dist/knowledge-graph/__tests__/contradiction-resolver.test.js +0 -114
  118. package/dist/knowledge-graph/__tests__/contradiction-resolver.test.js.map +0 -1
  119. package/dist/knowledge-graph/__tests__/knowledge-graph.test.d.ts +0 -1
  120. package/dist/knowledge-graph/__tests__/knowledge-graph.test.js +0 -215
  121. package/dist/knowledge-graph/__tests__/knowledge-graph.test.js.map +0 -1
  122. package/dist/learning/__tests__/base-engine.test.d.ts +0 -1
  123. package/dist/learning/__tests__/base-engine.test.js +0 -49
  124. package/dist/learning/__tests__/base-engine.test.js.map +0 -1
  125. package/dist/llm/__tests__/anthropic-provider.test.d.ts +0 -1
  126. package/dist/llm/__tests__/anthropic-provider.test.js +0 -121
  127. package/dist/llm/__tests__/anthropic-provider.test.js.map +0 -1
  128. package/dist/llm/__tests__/llm-service.test.d.ts +0 -1
  129. package/dist/llm/__tests__/llm-service.test.js +0 -507
  130. package/dist/llm/__tests__/llm-service.test.js.map +0 -1
  131. package/dist/llm/__tests__/ollama-embedding.test.d.ts +0 -1
  132. package/dist/llm/__tests__/ollama-embedding.test.js +0 -128
  133. package/dist/llm/__tests__/ollama-embedding.test.js.map +0 -1
  134. package/dist/llm/__tests__/ollama-provider.test.d.ts +0 -1
  135. package/dist/llm/__tests__/ollama-provider.test.js +0 -213
  136. package/dist/llm/__tests__/ollama-provider.test.js.map +0 -1
  137. package/dist/llm/__tests__/provider.test.d.ts +0 -1
  138. package/dist/llm/__tests__/provider.test.js +0 -126
  139. package/dist/llm/__tests__/provider.test.js.map +0 -1
  140. package/dist/math/__tests__/time-decay.test.d.ts +0 -1
  141. package/dist/math/__tests__/time-decay.test.js +0 -37
  142. package/dist/math/__tests__/time-decay.test.js.map +0 -1
  143. package/dist/math/__tests__/wilson-score.test.d.ts +0 -1
  144. package/dist/math/__tests__/wilson-score.test.js +0 -43
  145. package/dist/math/__tests__/wilson-score.test.js.map +0 -1
  146. package/dist/memory/__tests__/base-memory-engine.test.d.ts +0 -1
  147. package/dist/memory/__tests__/base-memory-engine.test.js +0 -233
  148. package/dist/memory/__tests__/base-memory-engine.test.js.map +0 -1
  149. package/dist/metacognition/__tests__/auto-experiment-engine.test.d.ts +0 -1
  150. package/dist/metacognition/__tests__/auto-experiment-engine.test.js +0 -218
  151. package/dist/metacognition/__tests__/auto-experiment-engine.test.js.map +0 -1
  152. package/dist/metacognition/__tests__/evolution-engine.test.d.ts +0 -1
  153. package/dist/metacognition/__tests__/evolution-engine.test.js +0 -473
  154. package/dist/metacognition/__tests__/evolution-engine.test.js.map +0 -1
  155. package/dist/metacognition/__tests__/parameter-registry.test.d.ts +0 -1
  156. package/dist/metacognition/__tests__/parameter-registry.test.js +0 -223
  157. package/dist/metacognition/__tests__/parameter-registry.test.js.map +0 -1
  158. package/dist/missions/__tests__/mission-engine.test.d.ts +0 -1
  159. package/dist/missions/__tests__/mission-engine.test.js +0 -67
  160. package/dist/missions/__tests__/mission-engine.test.js.map +0 -1
  161. package/dist/notifications/__tests__/notification-service.test.d.ts +0 -1
  162. package/dist/notifications/__tests__/notification-service.test.js +0 -176
  163. package/dist/notifications/__tests__/notification-service.test.js.map +0 -1
  164. package/dist/plugin/__tests__/plugin-registry.test.d.ts +0 -1
  165. package/dist/plugin/__tests__/plugin-registry.test.js +0 -166
  166. package/dist/plugin/__tests__/plugin-registry.test.js.map +0 -1
  167. package/dist/prediction/__tests__/prediction-engine.test.d.ts +0 -1
  168. package/dist/prediction/__tests__/prediction-engine.test.js +0 -252
  169. package/dist/prediction/__tests__/prediction-engine.test.js.map +0 -1
  170. package/dist/proactive/__tests__/proactive-engine.test.d.ts +0 -1
  171. package/dist/proactive/__tests__/proactive-engine.test.js +0 -183
  172. package/dist/proactive/__tests__/proactive-engine.test.js.map +0 -1
  173. package/dist/rag/__tests__/rag-engine.test.d.ts +0 -1
  174. package/dist/rag/__tests__/rag-engine.test.js +0 -235
  175. package/dist/rag/__tests__/rag-engine.test.js.map +0 -1
  176. package/dist/research/__tests__/autonomy-features.test.d.ts +0 -1
  177. package/dist/research/__tests__/autonomy-features.test.js +0 -155
  178. package/dist/research/__tests__/autonomy-features.test.js.map +0 -1
  179. package/dist/research/__tests__/base-engine.test.d.ts +0 -1
  180. package/dist/research/__tests__/base-engine.test.js +0 -56
  181. package/dist/research/__tests__/base-engine.test.js.map +0 -1
  182. package/dist/research/__tests__/semantic-compressor.test.d.ts +0 -1
  183. package/dist/research/__tests__/semantic-compressor.test.js +0 -153
  184. package/dist/research/__tests__/semantic-compressor.test.js.map +0 -1
  185. package/dist/research/adapters/__tests__/playwright-adapter.test.d.ts +0 -1
  186. package/dist/research/adapters/__tests__/playwright-adapter.test.js +0 -64
  187. package/dist/research/adapters/__tests__/playwright-adapter.test.js.map +0 -1
  188. package/dist/research/adapters/__tests__/web-adapters.test.d.ts +0 -1
  189. package/dist/research/adapters/__tests__/web-adapters.test.js +0 -106
  190. package/dist/research/adapters/__tests__/web-adapters.test.js.map +0 -1
  191. package/dist/sandbox/__tests__/code-sandbox.test.d.ts +0 -1
  192. package/dist/sandbox/__tests__/code-sandbox.test.js +0 -182
  193. package/dist/sandbox/__tests__/code-sandbox.test.js.map +0 -1
  194. package/dist/scanner/__tests__/signal-scanner.test.d.ts +0 -1
  195. package/dist/scanner/__tests__/signal-scanner.test.js +0 -142
  196. package/dist/scanner/__tests__/signal-scanner.test.js.map +0 -1
  197. package/dist/self-modification/__tests__/self-modification-engine.test.d.ts +0 -1
  198. package/dist/self-modification/__tests__/self-modification-engine.test.js +0 -313
  199. package/dist/self-modification/__tests__/self-modification-engine.test.js.map +0 -1
  200. package/dist/strategy/__tests__/strategy-forge.test.d.ts +0 -1
  201. package/dist/strategy/__tests__/strategy-forge.test.js +0 -190
  202. package/dist/strategy/__tests__/strategy-forge.test.js.map +0 -1
  203. package/dist/strategy/__tests__/strategy-mutator.test.d.ts +0 -1
  204. package/dist/strategy/__tests__/strategy-mutator.test.js +0 -141
  205. package/dist/strategy/__tests__/strategy-mutator.test.js.map +0 -1
  206. package/dist/synapses/__tests__/activation.test.d.ts +0 -1
  207. package/dist/synapses/__tests__/activation.test.js +0 -87
  208. package/dist/synapses/__tests__/activation.test.js.map +0 -1
  209. package/dist/synapses/__tests__/decay.test.d.ts +0 -1
  210. package/dist/synapses/__tests__/decay.test.js +0 -73
  211. package/dist/synapses/__tests__/decay.test.js.map +0 -1
  212. package/dist/synapses/__tests__/hebbian.test.d.ts +0 -1
  213. package/dist/synapses/__tests__/hebbian.test.js +0 -95
  214. package/dist/synapses/__tests__/hebbian.test.js.map +0 -1
  215. package/dist/synapses/__tests__/pathfinder.test.d.ts +0 -1
  216. package/dist/synapses/__tests__/pathfinder.test.js +0 -74
  217. package/dist/synapses/__tests__/pathfinder.test.js.map +0 -1
  218. package/dist/synapses/__tests__/synapse-manager.test.d.ts +0 -1
  219. package/dist/synapses/__tests__/synapse-manager.test.js +0 -94
  220. package/dist/synapses/__tests__/synapse-manager.test.js.map +0 -1
  221. package/dist/teaching/__tests__/teaching.test.d.ts +0 -1
  222. package/dist/teaching/__tests__/teaching.test.js +0 -252
  223. package/dist/teaching/__tests__/teaching.test.js.map +0 -1
  224. package/dist/techradar/__tests__/techradar-engine.test.d.ts +0 -1
  225. package/dist/techradar/__tests__/techradar-engine.test.js +0 -246
  226. package/dist/techradar/__tests__/techradar-engine.test.js.map +0 -1
  227. package/dist/tool-learning/__tests__/tool-learning.test.d.ts +0 -1
  228. package/dist/tool-learning/__tests__/tool-learning.test.js +0 -187
  229. package/dist/tool-learning/__tests__/tool-learning.test.js.map +0 -1
  230. package/dist/user-model/__tests__/user-model.test.d.ts +0 -1
  231. package/dist/user-model/__tests__/user-model.test.js +0 -142
  232. package/dist/user-model/__tests__/user-model.test.js.map +0 -1
  233. package/dist/utils/__tests__/batch-queue.test.d.ts +0 -1
  234. package/dist/utils/__tests__/batch-queue.test.js +0 -85
  235. package/dist/utils/__tests__/batch-queue.test.js.map +0 -1
  236. package/dist/utils/__tests__/events.test.d.ts +0 -1
  237. package/dist/utils/__tests__/events.test.js +0 -38
  238. package/dist/utils/__tests__/events.test.js.map +0 -1
  239. package/dist/utils/__tests__/hash.test.d.ts +0 -1
  240. package/dist/utils/__tests__/hash.test.js +0 -25
  241. package/dist/utils/__tests__/hash.test.js.map +0 -1
  242. package/dist/utils/__tests__/logger.test.d.ts +0 -1
  243. package/dist/utils/__tests__/logger.test.js +0 -55
  244. package/dist/utils/__tests__/logger.test.js.map +0 -1
  245. package/dist/utils/__tests__/paths.test.d.ts +0 -1
  246. package/dist/utils/__tests__/paths.test.js +0 -50
  247. package/dist/utils/__tests__/paths.test.js.map +0 -1
  248. package/dist/utils/__tests__/retry.test.d.ts +0 -1
  249. package/dist/utils/__tests__/retry.test.js +0 -91
  250. package/dist/utils/__tests__/retry.test.js.map +0 -1
  251. package/dist/watchdog/__tests__/watchdog-service.test.d.ts +0 -1
  252. package/dist/watchdog/__tests__/watchdog-service.test.js +0 -113
  253. package/dist/watchdog/__tests__/watchdog-service.test.js.map +0 -1
@@ -1,153 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
- import Database from 'better-sqlite3';
3
- vi.mock('../../utils/logger.js', () => ({
4
- getLogger: () => ({
5
- info: vi.fn(), warn: vi.fn(), error: vi.fn(), debug: vi.fn(),
6
- }),
7
- }));
8
- import { SemanticCompressor, runSemanticCompressorMigration } from '../semantic-compressor.js';
9
- // ── Helpers ──────────────────────────────────────────────────
10
- function createTestDb() {
11
- return new Database(':memory:');
12
- }
13
- function createEmbedding(values) {
14
- const arr = new Float32Array(values);
15
- return Buffer.from(arr.buffer);
16
- }
17
- function createNormalizedEmbedding(seed, dims = 4) {
18
- const arr = new Float32Array(dims);
19
- for (let i = 0; i < dims; i++) {
20
- arr[i] = Math.sin(seed + i);
21
- }
22
- let norm = 0;
23
- for (let i = 0; i < dims; i++)
24
- norm += arr[i] * arr[i];
25
- norm = Math.sqrt(norm);
26
- if (norm > 0)
27
- for (let i = 0; i < dims; i++)
28
- arr[i] /= norm;
29
- return Buffer.from(arr.buffer);
30
- }
31
- function insertTestVector(db, collection, sourceId, preview, embedding) {
32
- db.prepare('INSERT INTO rag_vectors (collection, source_id, text_hash, text_preview, embedding) VALUES (?, ?, ?, ?, ?)').run(collection, sourceId, `hash-${sourceId}`, preview, embedding);
33
- }
34
- // ── Tests ───────────────────────────────────────────────────
35
- describe('SemanticCompressor', () => {
36
- let db;
37
- let compressor;
38
- beforeEach(() => {
39
- db = createTestDb();
40
- compressor = new SemanticCompressor(db, { brainName: 'test', minClusterSize: 2, similarityThreshold: 0.9 });
41
- });
42
- afterEach(() => {
43
- try {
44
- db.close();
45
- }
46
- catch { /* ignore */ }
47
- });
48
- it('creates compressed_clusters table on migration', () => {
49
- const tables = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='compressed_clusters'").all();
50
- expect(tables).toHaveLength(1);
51
- });
52
- it('migration is idempotent', () => {
53
- runSemanticCompressorMigration(db);
54
- runSemanticCompressorMigration(db);
55
- const tables = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='compressed_clusters'").all();
56
- expect(tables).toHaveLength(1);
57
- });
58
- it('returns empty result for empty collection', async () => {
59
- const result = await compressor.compress('empty-collection');
60
- expect(result.clustersFound).toBe(0);
61
- expect(result.itemsCompressed).toBe(0);
62
- expect(result.metaInsightsCreated).toBe(0);
63
- });
64
- it('does not cluster items below similarity threshold', async () => {
65
- // Insert items with very different embeddings
66
- insertTestVector(db, 'test-col', 1, 'item 1', createEmbedding([1, 0, 0, 0]));
67
- insertTestVector(db, 'test-col', 2, 'item 2', createEmbedding([0, 1, 0, 0]));
68
- insertTestVector(db, 'test-col', 3, 'item 3', createEmbedding([0, 0, 1, 0]));
69
- const result = await compressor.compress('test-col');
70
- expect(result.clustersFound).toBe(0);
71
- });
72
- it('clusters similar items together', async () => {
73
- // Insert items with nearly identical embeddings
74
- const base = [0.5, 0.5, 0.5, 0.5];
75
- insertTestVector(db, 'test-col', 1, 'similar item 1', createEmbedding(base));
76
- insertTestVector(db, 'test-col', 2, 'similar item 2', createEmbedding(base));
77
- insertTestVector(db, 'test-col', 3, 'similar item 3', createEmbedding(base));
78
- const result = await compressor.compress('test-col');
79
- expect(result.clustersFound).toBe(1);
80
- expect(result.itemsCompressed).toBe(3);
81
- expect(result.metaInsightsCreated).toBe(1);
82
- });
83
- it('generates meta-text from previews', async () => {
84
- const base = [0.5, 0.5, 0.5, 0.5];
85
- insertTestVector(db, 'test-col', 1, 'alpha', createEmbedding(base));
86
- insertTestVector(db, 'test-col', 2, 'beta', createEmbedding(base));
87
- insertTestVector(db, 'test-col', 3, 'gamma', createEmbedding(base));
88
- await compressor.compress('test-col');
89
- const clusters = db.prepare('SELECT * FROM compressed_clusters WHERE collection = ?').all('test-col');
90
- expect(clusters).toHaveLength(1);
91
- expect(clusters[0].summary).toContain('alpha');
92
- expect(clusters[0].summary).toContain('beta');
93
- });
94
- it('tracks stats correctly', async () => {
95
- const base = [0.5, 0.5, 0.5, 0.5];
96
- insertTestVector(db, 'col-a', 1, 'a1', createEmbedding(base));
97
- insertTestVector(db, 'col-a', 2, 'a2', createEmbedding(base));
98
- insertTestVector(db, 'col-a', 3, 'a3', createEmbedding(base));
99
- await compressor.compress('col-a');
100
- const stats = compressor.getStats();
101
- expect(stats.totalClusters).toBe(1);
102
- expect(stats.byCollection).toHaveLength(1);
103
- expect(stats.byCollection[0].collection).toBe('col-a');
104
- expect(stats.byCollection[0].clusterCount).toBe(1);
105
- expect(stats.byCollection[0].memberCount).toBe(3);
106
- });
107
- it('returns empty stats when no clusters exist', () => {
108
- const stats = compressor.getStats();
109
- expect(stats.totalClusters).toBe(0);
110
- expect(stats.byCollection).toHaveLength(0);
111
- });
112
- it('respects maxClusterSize limit', async () => {
113
- const compressorSmall = new SemanticCompressor(db, {
114
- brainName: 'test',
115
- minClusterSize: 2,
116
- maxClusterSize: 3,
117
- similarityThreshold: 0.9,
118
- });
119
- const base = [0.5, 0.5, 0.5, 0.5];
120
- for (let i = 1; i <= 6; i++) {
121
- insertTestVector(db, 'big-col', i, `item ${i}`, createEmbedding(base));
122
- }
123
- const result = await compressorSmall.compress('big-col');
124
- // With maxClusterSize=3, the 6 items should be split into 2 clusters
125
- expect(result.clustersFound).toBeGreaterThanOrEqual(2);
126
- // Each cluster should have at most 3 items
127
- const clusters = db.prepare('SELECT member_ids FROM compressed_clusters WHERE collection = ?').all('big-col');
128
- for (const cluster of clusters) {
129
- const members = JSON.parse(cluster.member_ids);
130
- expect(members.length).toBeLessThanOrEqual(3);
131
- }
132
- });
133
- it('skips compression without rag vectors', async () => {
134
- // Compress a collection that has no vectors
135
- const result = await compressor.compress('nonexistent');
136
- expect(result.clustersFound).toBe(0);
137
- });
138
- it('uses LLM for summary when available', async () => {
139
- const mockLLM = {
140
- call: vi.fn().mockResolvedValue({ text: 'LLM generated summary' }),
141
- };
142
- compressor.setLLMService(mockLLM);
143
- const base = [0.5, 0.5, 0.5, 0.5];
144
- insertTestVector(db, 'llm-col', 1, 'item 1', createEmbedding(base));
145
- insertTestVector(db, 'llm-col', 2, 'item 2', createEmbedding(base));
146
- insertTestVector(db, 'llm-col', 3, 'item 3', createEmbedding(base));
147
- await compressor.compress('llm-col');
148
- expect(mockLLM.call).toHaveBeenCalled();
149
- const clusters = db.prepare('SELECT summary FROM compressed_clusters WHERE collection = ?').all('llm-col');
150
- expect(clusters[0].summary).toBe('LLM generated summary');
151
- });
152
- });
153
- //# sourceMappingURL=semantic-compressor.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"semantic-compressor.test.js","sourceRoot":"","sources":["../../../src/research/__tests__/semantic-compressor.test.ts"],"names":[],"mappings":"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"}
@@ -1,64 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from 'vitest';
2
- vi.mock('../../../utils/logger.js', () => ({
3
- getLogger: () => ({
4
- info: vi.fn(), warn: vi.fn(), error: vi.fn(), debug: vi.fn(),
5
- }),
6
- }));
7
- import { PlaywrightAdapter } from '../playwright-adapter.js';
8
- describe('PlaywrightAdapter', () => {
9
- let adapter;
10
- beforeEach(() => {
11
- adapter = new PlaywrightAdapter();
12
- });
13
- describe('getBrowser health check', () => {
14
- it('returns fresh instance after simulated disconnect', async () => {
15
- // Simulate a cached browser that reports disconnected
16
- const mockDisconnectedBrowser = {
17
- isConnected: () => false,
18
- close: vi.fn(),
19
- };
20
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
21
- adapter.browser = mockDisconnectedBrowser;
22
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
23
- adapter.available = true;
24
- // Access private getBrowser
25
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
26
- const getBrowser = adapter.getBrowser.bind(adapter);
27
- // After health check, browser should be null (disconnected detected)
28
- // The actual re-launch would fail without playwright installed,
29
- // but we verify the disconnect detection works
30
- try {
31
- await getBrowser();
32
- }
33
- catch {
34
- // Expected — playwright not installed in test env
35
- }
36
- // The disconnected browser should have been cleared
37
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
38
- expect(adapter.browser).toBeNull();
39
- });
40
- it('reuses connected browser', async () => {
41
- const mockConnectedBrowser = {
42
- isConnected: () => true,
43
- newContext: vi.fn(),
44
- };
45
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
46
- adapter.browser = mockConnectedBrowser;
47
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
48
- const result = await adapter.getBrowser();
49
- expect(result).toBe(mockConnectedBrowser);
50
- });
51
- });
52
- describe('shutdown', () => {
53
- it('closes browser and nulls reference', async () => {
54
- const mockBrowser = { close: vi.fn().mockResolvedValue(undefined) };
55
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
56
- adapter.browser = mockBrowser;
57
- await adapter.shutdown();
58
- expect(mockBrowser.close).toHaveBeenCalled();
59
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
60
- expect(adapter.browser).toBeNull();
61
- });
62
- });
63
- });
64
- //# sourceMappingURL=playwright-adapter.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"playwright-adapter.test.js","sourceRoot":"","sources":["../../../../src/research/adapters/__tests__/playwright-adapter.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAE9D,EAAE,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC;IACzC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QAChB,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;KAC7D,CAAC;CACH,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAI,OAA0B,CAAC;IAE/B,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,GAAG,IAAI,iBAAiB,EAAE,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACvC,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACjE,sDAAsD;YACtD,MAAM,uBAAuB,GAAG;gBAC9B,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK;gBACxB,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;aACf,CAAC;YACF,8DAA8D;YAC7D,OAAe,CAAC,OAAO,GAAG,uBAAuB,CAAC;YACnD,8DAA8D;YAC7D,OAAe,CAAC,SAAS,GAAG,IAAI,CAAC;YAElC,4BAA4B;YAC5B,8DAA8D;YAC9D,MAAM,UAAU,GAAI,OAAe,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAE7D,qEAAqE;YACrE,gEAAgE;YAChE,+CAA+C;YAC/C,IAAI,CAAC;gBACH,MAAM,UAAU,EAAE,CAAC;YACrB,CAAC;YAAC,MAAM,CAAC;gBACP,kDAAkD;YACpD,CAAC;YAED,oDAAoD;YACpD,8DAA8D;YAC9D,MAAM,CAAE,OAAe,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;YACxC,MAAM,oBAAoB,GAAG;gBAC3B,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI;gBACvB,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE;aACpB,CAAC;YACF,8DAA8D;YAC7D,OAAe,CAAC,OAAO,GAAG,oBAAoB,CAAC;YAEhD,8DAA8D;YAC9D,MAAM,MAAM,GAAG,MAAO,OAAe,CAAC,UAAU,EAAE,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,WAAW,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,CAAC;YACpE,8DAA8D;YAC7D,OAAe,CAAC,OAAO,GAAG,WAAW,CAAC;YAEvC,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;YAEzB,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAC7C,8DAA8D;YAC9D,MAAM,CAAE,OAAe,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,106 +0,0 @@
1
- import { describe, it, expect, vi } from 'vitest';
2
- vi.mock('../../../utils/logger.js', () => ({
3
- getLogger: () => ({
4
- info: vi.fn(), warn: vi.fn(), error: vi.fn(), debug: vi.fn(),
5
- }),
6
- }));
7
- import { PlaywrightAdapter } from '../playwright-adapter.js';
8
- import { FirecrawlAdapter } from '../firecrawl-adapter.js';
9
- describe('PlaywrightAdapter', () => {
10
- it('has correct name', () => {
11
- const adapter = new PlaywrightAdapter();
12
- expect(adapter.name).toBe('playwright');
13
- });
14
- it('isEnabled returns true (optimistic)', () => {
15
- const adapter = new PlaywrightAdapter();
16
- expect(adapter.isEnabled()).toBe(true);
17
- });
18
- it('scout returns empty array', async () => {
19
- const adapter = new PlaywrightAdapter();
20
- const discoveries = await adapter.scout();
21
- expect(discoveries).toEqual([]);
22
- });
23
- it('checkAvailable returns false when playwright not installed', async () => {
24
- const adapter = new PlaywrightAdapter();
25
- // In test environment, playwright chromium is likely not installed
26
- const available = await adapter.checkAvailable();
27
- expect(typeof available).toBe('boolean');
28
- });
29
- it('extract returns null when playwright unavailable', async () => {
30
- const adapter = new PlaywrightAdapter();
31
- // Force unavailable
32
- adapter.available = false;
33
- const result = await adapter.extract('https://example.com');
34
- expect(result).toBeNull();
35
- });
36
- it('shutdown is safe when no browser', async () => {
37
- const adapter = new PlaywrightAdapter();
38
- await expect(adapter.shutdown()).resolves.not.toThrow();
39
- });
40
- });
41
- describe('FirecrawlAdapter', () => {
42
- it('has correct name', () => {
43
- const adapter = new FirecrawlAdapter();
44
- expect(adapter.name).toBe('firecrawl');
45
- });
46
- it('isEnabled returns false without API key', () => {
47
- const adapter = new FirecrawlAdapter({ apiKey: undefined });
48
- expect(adapter.isEnabled()).toBe(false);
49
- });
50
- it('isEnabled returns true with API key', () => {
51
- const adapter = new FirecrawlAdapter({ apiKey: 'fc-test' });
52
- expect(adapter.isEnabled()).toBe(true);
53
- });
54
- it('scout returns empty array', async () => {
55
- const adapter = new FirecrawlAdapter();
56
- const discoveries = await adapter.scout();
57
- expect(discoveries).toEqual([]);
58
- });
59
- it('scrape returns null when not enabled', async () => {
60
- const adapter = new FirecrawlAdapter({ apiKey: undefined });
61
- const result = await adapter.scrape('https://example.com');
62
- expect(result).toBeNull();
63
- });
64
- it('crawl returns empty when not enabled', async () => {
65
- const adapter = new FirecrawlAdapter({ apiKey: undefined });
66
- const result = await adapter.crawl('https://example.com');
67
- expect(result).toEqual([]);
68
- });
69
- it('scrape calls API with correct URL', async () => {
70
- const mockFetch = vi.fn().mockResolvedValue({
71
- ok: true,
72
- json: async () => ({
73
- success: true,
74
- data: {
75
- markdown: '# Test\n\nContent here',
76
- metadata: { title: 'Test Page', description: 'A test page' },
77
- },
78
- }),
79
- });
80
- vi.stubGlobal('fetch', mockFetch);
81
- const adapter = new FirecrawlAdapter({ apiKey: 'fc-test' });
82
- const result = await adapter.scrape('https://example.com');
83
- expect(mockFetch).toHaveBeenCalledWith('https://api.firecrawl.dev/v1/scrape', expect.objectContaining({
84
- method: 'POST',
85
- headers: expect.objectContaining({
86
- 'Authorization': 'Bearer fc-test',
87
- }),
88
- }));
89
- expect(result).not.toBeNull();
90
- expect(result.title).toBe('Test Page');
91
- expect(result.markdown).toContain('# Test');
92
- vi.unstubAllGlobals();
93
- });
94
- it('scrape handles API errors gracefully', async () => {
95
- const mockFetch = vi.fn().mockResolvedValue({
96
- ok: false,
97
- status: 500,
98
- });
99
- vi.stubGlobal('fetch', mockFetch);
100
- const adapter = new FirecrawlAdapter({ apiKey: 'fc-test' });
101
- const result = await adapter.scrape('https://example.com');
102
- expect(result).toBeNull();
103
- vi.unstubAllGlobals();
104
- });
105
- });
106
- //# sourceMappingURL=web-adapters.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"web-adapters.test.js","sourceRoot":"","sources":["../../../../src/research/adapters/__tests__/web-adapters.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,182 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
- import Database from 'better-sqlite3';
3
- vi.mock('../../utils/logger.js', () => ({
4
- getLogger: () => ({ info: vi.fn(), warn: vi.fn(), error: vi.fn(), debug: vi.fn() }),
5
- }));
6
- import { CodeSandbox, runSandboxMigration } from '../code-sandbox.js';
7
- describe('CodeSandbox', () => {
8
- let db;
9
- beforeEach(() => { db = new Database(':memory:'); });
10
- afterEach(() => { db.close(); });
11
- // ── Creation ──────────────────────────────────────────
12
- it('creates an instance with default config', () => {
13
- const sandbox = new CodeSandbox(db);
14
- expect(sandbox).toBeDefined();
15
- });
16
- it('creates an instance with custom config', () => {
17
- const sandbox = new CodeSandbox(db, {
18
- preferDocker: false,
19
- defaultTimeoutMs: 5000,
20
- defaultMemoryMb: 64,
21
- maxOutputSize: 50000,
22
- });
23
- expect(sandbox).toBeDefined();
24
- });
25
- // ── getStatus (initial) ───────────────────────────────
26
- it('returns empty status on fresh instance', () => {
27
- const sandbox = new CodeSandbox(db);
28
- const status = sandbox.getStatus();
29
- expect(status.totalExecutions).toBe(0);
30
- expect(status.successCount).toBe(0);
31
- expect(status.failCount).toBe(0);
32
- expect(status.timeoutCount).toBe(0);
33
- expect(status.avgDurationMs).toBe(0);
34
- expect(status.dockerAvailable).toBe(false);
35
- expect(status.languages).toEqual([]);
36
- });
37
- // ── validate ──────────────────────────────────────────
38
- it('validates valid JavaScript code', () => {
39
- const sandbox = new CodeSandbox(db);
40
- const result = sandbox.validate('console.log("hello")', 'javascript');
41
- expect(result).toBeNull();
42
- });
43
- it('validates valid TypeScript code (parsed as JS by Function constructor)', () => {
44
- const sandbox = new CodeSandbox(db);
45
- // The validate method uses `new Function(code)` for TS too,
46
- // so basic JS-compatible TS code passes.
47
- const result = sandbox.validate('const x = 42; console.log(x);', 'typescript');
48
- expect(result).toBeNull();
49
- });
50
- it('returns error for invalid JavaScript code', () => {
51
- const sandbox = new CodeSandbox(db);
52
- const result = sandbox.validate('function {{{', 'javascript');
53
- expect(result).toBeTruthy();
54
- expect(typeof result).toBe('string');
55
- });
56
- it('returns error for invalid TypeScript code', () => {
57
- const sandbox = new CodeSandbox(db);
58
- const result = sandbox.validate('if (', 'typescript');
59
- expect(result).toBeTruthy();
60
- });
61
- it('validates valid Python code', () => {
62
- const sandbox = new CodeSandbox(db);
63
- const result = sandbox.validate('print("hello")', 'python');
64
- expect(result).toBeNull();
65
- });
66
- it('returns error for Python def without colon', () => {
67
- const sandbox = new CodeSandbox(db);
68
- const result = sandbox.validate('def foo()', 'python');
69
- expect(result).toBe('Missing colon after def');
70
- });
71
- it('validates shell code (always passes)', () => {
72
- const sandbox = new CodeSandbox(db);
73
- const result = sandbox.validate('echo hello', 'shell');
74
- expect(result).toBeNull();
75
- });
76
- it('returns error for unsupported language', () => {
77
- const sandbox = new CodeSandbox(db);
78
- const result = sandbox.validate('code', 'rust');
79
- expect(result).toBe('Unsupported language: rust');
80
- });
81
- // ── execute ───────────────────────────────────────────
82
- it('executes simple JavaScript code locally', async () => {
83
- const sandbox = new CodeSandbox(db, { preferDocker: false });
84
- const result = await sandbox.execute({
85
- code: 'console.log("hello")',
86
- language: 'javascript',
87
- timeoutMs: 10000,
88
- name: 'test-exec',
89
- });
90
- expect(result.id).toMatch(/^exec-/);
91
- expect(result.language).toBe('javascript');
92
- expect(result.stdout.trim()).toBe('hello');
93
- expect(result.exitCode).toBe(0);
94
- expect(result.timedOut).toBe(false);
95
- expect(result.durationMs).toBeGreaterThanOrEqual(0);
96
- expect(result.name).toBe('test-exec');
97
- expect(result.createdAt).toBeGreaterThan(0);
98
- }, 15000);
99
- it('captures non-zero exit code on failing code', async () => {
100
- const sandbox = new CodeSandbox(db, { preferDocker: false });
101
- const result = await sandbox.execute({
102
- code: 'process.exit(42)',
103
- language: 'javascript',
104
- timeoutMs: 10000,
105
- });
106
- expect(result.exitCode).not.toBe(0);
107
- }, 15000);
108
- // ── getHistory ────────────────────────────────────────
109
- it('returns execution history after running code', async () => {
110
- const sandbox = new CodeSandbox(db, { preferDocker: false });
111
- await sandbox.execute({
112
- code: 'console.log("history-test")',
113
- language: 'javascript',
114
- timeoutMs: 10000,
115
- name: 'hist-entry',
116
- });
117
- const history = sandbox.getHistory(10);
118
- expect(history).toHaveLength(1);
119
- expect(history[0].language).toBe('javascript');
120
- expect(history[0].exitCode).toBe(0);
121
- expect(history[0].name).toBe('hist-entry');
122
- expect(history[0].timedOut).toBe(false);
123
- }, 15000);
124
- // ── getLanguageStats ──────────────────────────────────
125
- it('returns language stats after executions', async () => {
126
- const sandbox = new CodeSandbox(db, { preferDocker: false });
127
- await sandbox.execute({ code: 'console.log(1)', language: 'javascript', timeoutMs: 10000 });
128
- await sandbox.execute({ code: 'console.log(2)', language: 'javascript', timeoutMs: 10000 });
129
- const stats = sandbox.getLanguageStats();
130
- expect(stats).toHaveLength(1);
131
- expect(stats[0].language).toBe('javascript');
132
- expect(stats[0].total).toBe(2);
133
- expect(stats[0].successRate).toBe(1);
134
- expect(stats[0].avgDuration).toBeGreaterThanOrEqual(0);
135
- }, 20000);
136
- it('returns empty language stats on fresh instance', () => {
137
- const sandbox = new CodeSandbox(db);
138
- const stats = sandbox.getLanguageStats();
139
- expect(stats).toEqual([]);
140
- });
141
- // ── isDockerAvailable ─────────────────────────────────
142
- it('returns boolean from isDockerAvailable (likely false in test env)', async () => {
143
- const sandbox = new CodeSandbox(db);
144
- const available = await sandbox.isDockerAvailable();
145
- expect(typeof available).toBe('boolean');
146
- }, 10000);
147
- it('caches Docker availability on subsequent calls', async () => {
148
- const sandbox = new CodeSandbox(db);
149
- const first = await sandbox.isDockerAvailable();
150
- const second = await sandbox.isDockerAvailable();
151
- expect(first).toBe(second);
152
- }, 10000);
153
- it('resets Docker cache', async () => {
154
- const sandbox = new CodeSandbox(db);
155
- await sandbox.isDockerAvailable();
156
- sandbox.resetDockerCache();
157
- // After reset, the next call re-checks (we just verify it does not throw)
158
- const result = await sandbox.isDockerAvailable();
159
- expect(typeof result).toBe('boolean');
160
- }, 10000);
161
- // ── Status after executions ───────────────────────────
162
- it('reflects executions in status', async () => {
163
- const sandbox = new CodeSandbox(db, { preferDocker: false });
164
- await sandbox.execute({ code: 'console.log("ok")', language: 'javascript', timeoutMs: 10000 });
165
- const status = sandbox.getStatus();
166
- expect(status.totalExecutions).toBe(1);
167
- expect(status.successCount).toBe(1);
168
- expect(status.failCount).toBe(0);
169
- expect(status.timeoutCount).toBe(0);
170
- expect(status.languages).toContain('javascript');
171
- expect(status.avgDurationMs).toBeGreaterThanOrEqual(0);
172
- }, 15000);
173
- // ── Migration idempotency ─────────────────────────────
174
- it('runs migration multiple times without error', () => {
175
- runSandboxMigration(db);
176
- runSandboxMigration(db);
177
- // Table already exists from constructor, third call is fine too
178
- const sandbox = new CodeSandbox(db);
179
- expect(sandbox.getStatus().totalExecutions).toBe(0);
180
- });
181
- });
182
- //# sourceMappingURL=code-sandbox.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"code-sandbox.test.js","sourceRoot":"","sources":["../../../src/sandbox/__tests__/code-sandbox.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};