@timmeck/brain-core 2.36.61 → 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 (254) hide show
  1. package/dist/guardrails/guardrail-engine.d.ts +2 -0
  2. package/dist/guardrails/guardrail-engine.js +29 -13
  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/research/adapters/playwright-adapter.js +28 -2
  8. package/dist/research/adapters/playwright-adapter.js.map +1 -1
  9. package/dist/utils/memory-watchdog.d.ts +33 -0
  10. package/dist/utils/memory-watchdog.js +88 -0
  11. package/dist/utils/memory-watchdog.js.map +1 -0
  12. package/dist/watchdog/watchdog-service.js +11 -5
  13. package/dist/watchdog/watchdog-service.js.map +1 -1
  14. package/package.json +1 -1
  15. package/dist/action/__tests__/action-bridge.test.d.ts +0 -1
  16. package/dist/action/__tests__/action-bridge.test.js +0 -175
  17. package/dist/action/__tests__/action-bridge.test.js.map +0 -1
  18. package/dist/action/__tests__/adjust-parameter-handler.test.d.ts +0 -1
  19. package/dist/action/__tests__/adjust-parameter-handler.test.js +0 -138
  20. package/dist/action/__tests__/adjust-parameter-handler.test.js.map +0 -1
  21. package/dist/action/__tests__/content-handler.test.d.ts +0 -1
  22. package/dist/action/__tests__/content-handler.test.js +0 -100
  23. package/dist/action/__tests__/content-handler.test.js.map +0 -1
  24. package/dist/action/__tests__/creative-seed-handler.test.d.ts +0 -1
  25. package/dist/action/__tests__/creative-seed-handler.test.js +0 -96
  26. package/dist/action/__tests__/creative-seed-handler.test.js.map +0 -1
  27. package/dist/action/__tests__/trade-handler.test.d.ts +0 -1
  28. package/dist/action/__tests__/trade-handler.test.js +0 -165
  29. package/dist/action/__tests__/trade-handler.test.js.map +0 -1
  30. package/dist/active-learning/__tests__/active-learning.test.d.ts +0 -1
  31. package/dist/active-learning/__tests__/active-learning.test.js +0 -132
  32. package/dist/active-learning/__tests__/active-learning.test.js.map +0 -1
  33. package/dist/agent-training/__tests__/agent-trainer.test.d.ts +0 -1
  34. package/dist/agent-training/__tests__/agent-trainer.test.js +0 -158
  35. package/dist/agent-training/__tests__/agent-trainer.test.js.map +0 -1
  36. package/dist/agent-training/__tests__/sub-agent-factory.test.d.ts +0 -1
  37. package/dist/agent-training/__tests__/sub-agent-factory.test.js +0 -100
  38. package/dist/agent-training/__tests__/sub-agent-factory.test.js.map +0 -1
  39. package/dist/agent-training/__tests__/sub-agent.test.d.ts +0 -1
  40. package/dist/agent-training/__tests__/sub-agent.test.js +0 -102
  41. package/dist/agent-training/__tests__/sub-agent.test.js.map +0 -1
  42. package/dist/chat/__tests__/chat-engine.test.d.ts +0 -1
  43. package/dist/chat/__tests__/chat-engine.test.js +0 -209
  44. package/dist/chat/__tests__/chat-engine.test.js.map +0 -1
  45. package/dist/checkpoint/__tests__/checkpoint-manager.test.d.ts +0 -1
  46. package/dist/checkpoint/__tests__/checkpoint-manager.test.js +0 -160
  47. package/dist/checkpoint/__tests__/checkpoint-manager.test.js.map +0 -1
  48. package/dist/code-health/__tests__/code-health.test.d.ts +0 -1
  49. package/dist/code-health/__tests__/code-health.test.js +0 -123
  50. package/dist/code-health/__tests__/code-health.test.js.map +0 -1
  51. package/dist/codegen/__tests__/code-forge.test.d.ts +0 -1
  52. package/dist/codegen/__tests__/code-forge.test.js +0 -105
  53. package/dist/codegen/__tests__/code-forge.test.js.map +0 -1
  54. package/dist/config/__tests__/loader.test.d.ts +0 -1
  55. package/dist/config/__tests__/loader.test.js +0 -86
  56. package/dist/config/__tests__/loader.test.js.map +0 -1
  57. package/dist/consciousness/__tests__/thought-stream.test.d.ts +0 -1
  58. package/dist/consciousness/__tests__/thought-stream.test.js +0 -62
  59. package/dist/consciousness/__tests__/thought-stream.test.js.map +0 -1
  60. package/dist/consensus/__tests__/consensus.test.d.ts +0 -1
  61. package/dist/consensus/__tests__/consensus.test.js +0 -159
  62. package/dist/consensus/__tests__/consensus.test.js.map +0 -1
  63. package/dist/content/__tests__/auto-publisher.test.d.ts +0 -1
  64. package/dist/content/__tests__/auto-publisher.test.js +0 -125
  65. package/dist/content/__tests__/auto-publisher.test.js.map +0 -1
  66. package/dist/content/__tests__/content-forge.test.d.ts +0 -1
  67. package/dist/content/__tests__/content-forge.test.js +0 -117
  68. package/dist/content/__tests__/content-forge.test.js.map +0 -1
  69. package/dist/creative/__tests__/creative-engine.test.d.ts +0 -1
  70. package/dist/creative/__tests__/creative-engine.test.js +0 -229
  71. package/dist/creative/__tests__/creative-engine.test.js.map +0 -1
  72. package/dist/cross-brain/__tests__/borg-sync-engine.test.d.ts +0 -1
  73. package/dist/cross-brain/__tests__/borg-sync-engine.test.js +0 -240
  74. package/dist/cross-brain/__tests__/borg-sync-engine.test.js.map +0 -1
  75. package/dist/cross-brain/__tests__/client.test.d.ts +0 -1
  76. package/dist/cross-brain/__tests__/client.test.js +0 -31
  77. package/dist/cross-brain/__tests__/client.test.js.map +0 -1
  78. package/dist/cross-brain/__tests__/notifications.test.d.ts +0 -1
  79. package/dist/cross-brain/__tests__/notifications.test.js +0 -52
  80. package/dist/cross-brain/__tests__/notifications.test.js.map +0 -1
  81. package/dist/cross-brain/__tests__/signal-router.test.d.ts +0 -1
  82. package/dist/cross-brain/__tests__/signal-router.test.js +0 -218
  83. package/dist/cross-brain/__tests__/signal-router.test.js.map +0 -1
  84. package/dist/cross-brain/__tests__/subscription.test.d.ts +0 -1
  85. package/dist/cross-brain/__tests__/subscription.test.js +0 -75
  86. package/dist/cross-brain/__tests__/subscription.test.js.map +0 -1
  87. package/dist/dashboard/__tests__/command-center-server.test.d.ts +0 -1
  88. package/dist/dashboard/__tests__/command-center-server.test.js +0 -522
  89. package/dist/dashboard/__tests__/command-center-server.test.js.map +0 -1
  90. package/dist/dashboard/__tests__/server.test.d.ts +0 -1
  91. package/dist/dashboard/__tests__/server.test.js +0 -105
  92. package/dist/dashboard/__tests__/server.test.js.map +0 -1
  93. package/dist/db/__tests__/connection.test.d.ts +0 -1
  94. package/dist/db/__tests__/connection.test.js +0 -135
  95. package/dist/db/__tests__/connection.test.js.map +0 -1
  96. package/dist/dream/__tests__/dream-engine.test.d.ts +0 -1
  97. package/dist/dream/__tests__/dream-engine.test.js +0 -184
  98. package/dist/dream/__tests__/dream-engine.test.js.map +0 -1
  99. package/dist/embeddings/__tests__/engine.test.d.ts +0 -1
  100. package/dist/embeddings/__tests__/engine.test.js +0 -82
  101. package/dist/embeddings/__tests__/engine.test.js.map +0 -1
  102. package/dist/feedback/__tests__/feedback-engine.test.d.ts +0 -1
  103. package/dist/feedback/__tests__/feedback-engine.test.js +0 -156
  104. package/dist/feedback/__tests__/feedback-engine.test.js.map +0 -1
  105. package/dist/feedback/__tests__/feedback-router.test.d.ts +0 -1
  106. package/dist/feedback/__tests__/feedback-router.test.js +0 -173
  107. package/dist/feedback/__tests__/feedback-router.test.js.map +0 -1
  108. package/dist/goals/__tests__/goal-engine.test.d.ts +0 -1
  109. package/dist/goals/__tests__/goal-engine.test.js +0 -203
  110. package/dist/goals/__tests__/goal-engine.test.js.map +0 -1
  111. package/dist/guardrails/__tests__/guardrail-engine.test.d.ts +0 -1
  112. package/dist/guardrails/__tests__/guardrail-engine.test.js +0 -343
  113. package/dist/guardrails/__tests__/guardrail-engine.test.js.map +0 -1
  114. package/dist/ipc/__tests__/integration.test.d.ts +0 -1
  115. package/dist/ipc/__tests__/integration.test.js +0 -352
  116. package/dist/ipc/__tests__/integration.test.js.map +0 -1
  117. package/dist/ipc/__tests__/protocol.test.d.ts +0 -1
  118. package/dist/ipc/__tests__/protocol.test.js +0 -69
  119. package/dist/ipc/__tests__/protocol.test.js.map +0 -1
  120. package/dist/knowledge-graph/__tests__/contradiction-resolver.test.d.ts +0 -1
  121. package/dist/knowledge-graph/__tests__/contradiction-resolver.test.js +0 -114
  122. package/dist/knowledge-graph/__tests__/contradiction-resolver.test.js.map +0 -1
  123. package/dist/knowledge-graph/__tests__/knowledge-graph.test.d.ts +0 -1
  124. package/dist/knowledge-graph/__tests__/knowledge-graph.test.js +0 -215
  125. package/dist/knowledge-graph/__tests__/knowledge-graph.test.js.map +0 -1
  126. package/dist/learning/__tests__/base-engine.test.d.ts +0 -1
  127. package/dist/learning/__tests__/base-engine.test.js +0 -49
  128. package/dist/learning/__tests__/base-engine.test.js.map +0 -1
  129. package/dist/llm/__tests__/anthropic-provider.test.d.ts +0 -1
  130. package/dist/llm/__tests__/anthropic-provider.test.js +0 -121
  131. package/dist/llm/__tests__/anthropic-provider.test.js.map +0 -1
  132. package/dist/llm/__tests__/llm-service.test.d.ts +0 -1
  133. package/dist/llm/__tests__/llm-service.test.js +0 -507
  134. package/dist/llm/__tests__/llm-service.test.js.map +0 -1
  135. package/dist/llm/__tests__/ollama-embedding.test.d.ts +0 -1
  136. package/dist/llm/__tests__/ollama-embedding.test.js +0 -128
  137. package/dist/llm/__tests__/ollama-embedding.test.js.map +0 -1
  138. package/dist/llm/__tests__/ollama-provider.test.d.ts +0 -1
  139. package/dist/llm/__tests__/ollama-provider.test.js +0 -213
  140. package/dist/llm/__tests__/ollama-provider.test.js.map +0 -1
  141. package/dist/llm/__tests__/provider.test.d.ts +0 -1
  142. package/dist/llm/__tests__/provider.test.js +0 -126
  143. package/dist/llm/__tests__/provider.test.js.map +0 -1
  144. package/dist/math/__tests__/time-decay.test.d.ts +0 -1
  145. package/dist/math/__tests__/time-decay.test.js +0 -37
  146. package/dist/math/__tests__/time-decay.test.js.map +0 -1
  147. package/dist/math/__tests__/wilson-score.test.d.ts +0 -1
  148. package/dist/math/__tests__/wilson-score.test.js +0 -43
  149. package/dist/math/__tests__/wilson-score.test.js.map +0 -1
  150. package/dist/memory/__tests__/base-memory-engine.test.d.ts +0 -1
  151. package/dist/memory/__tests__/base-memory-engine.test.js +0 -233
  152. package/dist/memory/__tests__/base-memory-engine.test.js.map +0 -1
  153. package/dist/metacognition/__tests__/auto-experiment-engine.test.d.ts +0 -1
  154. package/dist/metacognition/__tests__/auto-experiment-engine.test.js +0 -218
  155. package/dist/metacognition/__tests__/auto-experiment-engine.test.js.map +0 -1
  156. package/dist/metacognition/__tests__/evolution-engine.test.d.ts +0 -1
  157. package/dist/metacognition/__tests__/evolution-engine.test.js +0 -473
  158. package/dist/metacognition/__tests__/evolution-engine.test.js.map +0 -1
  159. package/dist/metacognition/__tests__/parameter-registry.test.d.ts +0 -1
  160. package/dist/metacognition/__tests__/parameter-registry.test.js +0 -223
  161. package/dist/metacognition/__tests__/parameter-registry.test.js.map +0 -1
  162. package/dist/missions/__tests__/mission-engine.test.d.ts +0 -1
  163. package/dist/missions/__tests__/mission-engine.test.js +0 -67
  164. package/dist/missions/__tests__/mission-engine.test.js.map +0 -1
  165. package/dist/notifications/__tests__/notification-service.test.d.ts +0 -1
  166. package/dist/notifications/__tests__/notification-service.test.js +0 -176
  167. package/dist/notifications/__tests__/notification-service.test.js.map +0 -1
  168. package/dist/plugin/__tests__/plugin-registry.test.d.ts +0 -1
  169. package/dist/plugin/__tests__/plugin-registry.test.js +0 -166
  170. package/dist/plugin/__tests__/plugin-registry.test.js.map +0 -1
  171. package/dist/prediction/__tests__/prediction-engine.test.d.ts +0 -1
  172. package/dist/prediction/__tests__/prediction-engine.test.js +0 -252
  173. package/dist/prediction/__tests__/prediction-engine.test.js.map +0 -1
  174. package/dist/proactive/__tests__/proactive-engine.test.d.ts +0 -1
  175. package/dist/proactive/__tests__/proactive-engine.test.js +0 -183
  176. package/dist/proactive/__tests__/proactive-engine.test.js.map +0 -1
  177. package/dist/rag/__tests__/rag-engine.test.d.ts +0 -1
  178. package/dist/rag/__tests__/rag-engine.test.js +0 -235
  179. package/dist/rag/__tests__/rag-engine.test.js.map +0 -1
  180. package/dist/research/__tests__/autonomy-features.test.d.ts +0 -1
  181. package/dist/research/__tests__/autonomy-features.test.js +0 -155
  182. package/dist/research/__tests__/autonomy-features.test.js.map +0 -1
  183. package/dist/research/__tests__/base-engine.test.d.ts +0 -1
  184. package/dist/research/__tests__/base-engine.test.js +0 -56
  185. package/dist/research/__tests__/base-engine.test.js.map +0 -1
  186. package/dist/research/__tests__/semantic-compressor.test.d.ts +0 -1
  187. package/dist/research/__tests__/semantic-compressor.test.js +0 -153
  188. package/dist/research/__tests__/semantic-compressor.test.js.map +0 -1
  189. package/dist/research/adapters/__tests__/web-adapters.test.d.ts +0 -1
  190. package/dist/research/adapters/__tests__/web-adapters.test.js +0 -106
  191. package/dist/research/adapters/__tests__/web-adapters.test.js.map +0 -1
  192. package/dist/sandbox/__tests__/code-sandbox.test.d.ts +0 -1
  193. package/dist/sandbox/__tests__/code-sandbox.test.js +0 -182
  194. package/dist/sandbox/__tests__/code-sandbox.test.js.map +0 -1
  195. package/dist/scanner/__tests__/signal-scanner.test.d.ts +0 -1
  196. package/dist/scanner/__tests__/signal-scanner.test.js +0 -142
  197. package/dist/scanner/__tests__/signal-scanner.test.js.map +0 -1
  198. package/dist/self-modification/__tests__/self-modification-engine.test.d.ts +0 -1
  199. package/dist/self-modification/__tests__/self-modification-engine.test.js +0 -313
  200. package/dist/self-modification/__tests__/self-modification-engine.test.js.map +0 -1
  201. package/dist/strategy/__tests__/strategy-forge.test.d.ts +0 -1
  202. package/dist/strategy/__tests__/strategy-forge.test.js +0 -190
  203. package/dist/strategy/__tests__/strategy-forge.test.js.map +0 -1
  204. package/dist/strategy/__tests__/strategy-mutator.test.d.ts +0 -1
  205. package/dist/strategy/__tests__/strategy-mutator.test.js +0 -141
  206. package/dist/strategy/__tests__/strategy-mutator.test.js.map +0 -1
  207. package/dist/synapses/__tests__/activation.test.d.ts +0 -1
  208. package/dist/synapses/__tests__/activation.test.js +0 -87
  209. package/dist/synapses/__tests__/activation.test.js.map +0 -1
  210. package/dist/synapses/__tests__/decay.test.d.ts +0 -1
  211. package/dist/synapses/__tests__/decay.test.js +0 -73
  212. package/dist/synapses/__tests__/decay.test.js.map +0 -1
  213. package/dist/synapses/__tests__/hebbian.test.d.ts +0 -1
  214. package/dist/synapses/__tests__/hebbian.test.js +0 -95
  215. package/dist/synapses/__tests__/hebbian.test.js.map +0 -1
  216. package/dist/synapses/__tests__/pathfinder.test.d.ts +0 -1
  217. package/dist/synapses/__tests__/pathfinder.test.js +0 -74
  218. package/dist/synapses/__tests__/pathfinder.test.js.map +0 -1
  219. package/dist/synapses/__tests__/synapse-manager.test.d.ts +0 -1
  220. package/dist/synapses/__tests__/synapse-manager.test.js +0 -94
  221. package/dist/synapses/__tests__/synapse-manager.test.js.map +0 -1
  222. package/dist/teaching/__tests__/teaching.test.d.ts +0 -1
  223. package/dist/teaching/__tests__/teaching.test.js +0 -252
  224. package/dist/teaching/__tests__/teaching.test.js.map +0 -1
  225. package/dist/techradar/__tests__/techradar-engine.test.d.ts +0 -1
  226. package/dist/techradar/__tests__/techradar-engine.test.js +0 -246
  227. package/dist/techradar/__tests__/techradar-engine.test.js.map +0 -1
  228. package/dist/tool-learning/__tests__/tool-learning.test.d.ts +0 -1
  229. package/dist/tool-learning/__tests__/tool-learning.test.js +0 -187
  230. package/dist/tool-learning/__tests__/tool-learning.test.js.map +0 -1
  231. package/dist/user-model/__tests__/user-model.test.d.ts +0 -1
  232. package/dist/user-model/__tests__/user-model.test.js +0 -142
  233. package/dist/user-model/__tests__/user-model.test.js.map +0 -1
  234. package/dist/utils/__tests__/batch-queue.test.d.ts +0 -1
  235. package/dist/utils/__tests__/batch-queue.test.js +0 -85
  236. package/dist/utils/__tests__/batch-queue.test.js.map +0 -1
  237. package/dist/utils/__tests__/events.test.d.ts +0 -1
  238. package/dist/utils/__tests__/events.test.js +0 -38
  239. package/dist/utils/__tests__/events.test.js.map +0 -1
  240. package/dist/utils/__tests__/hash.test.d.ts +0 -1
  241. package/dist/utils/__tests__/hash.test.js +0 -25
  242. package/dist/utils/__tests__/hash.test.js.map +0 -1
  243. package/dist/utils/__tests__/logger.test.d.ts +0 -1
  244. package/dist/utils/__tests__/logger.test.js +0 -55
  245. package/dist/utils/__tests__/logger.test.js.map +0 -1
  246. package/dist/utils/__tests__/paths.test.d.ts +0 -1
  247. package/dist/utils/__tests__/paths.test.js +0 -50
  248. package/dist/utils/__tests__/paths.test.js.map +0 -1
  249. package/dist/utils/__tests__/retry.test.d.ts +0 -1
  250. package/dist/utils/__tests__/retry.test.js +0 -91
  251. package/dist/utils/__tests__/retry.test.js.map +0 -1
  252. package/dist/watchdog/__tests__/watchdog-service.test.d.ts +0 -1
  253. package/dist/watchdog/__tests__/watchdog-service.test.js +0 -113
  254. package/dist/watchdog/__tests__/watchdog-service.test.js.map +0 -1
@@ -1,125 +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 { ContentForge } from '../content-forge.js';
7
- import { AutoPublisher } from '../auto-publisher.js';
8
- describe('AutoPublisher', () => {
9
- let db;
10
- let forge;
11
- beforeEach(() => {
12
- db = new Database(':memory:');
13
- forge = new ContentForge(db, { brainName: 'test' });
14
- });
15
- afterEach(() => { db.close(); });
16
- it('creates with default config', () => {
17
- const pub = new AutoPublisher(forge);
18
- const stats = pub.getStats();
19
- expect(stats.publishedToday).toBe(0);
20
- expect(stats.lastPublishAt).toBeNull();
21
- expect(stats.checksRun).toBe(0);
22
- });
23
- it('checkAndPublish returns 0 when no scheduled content', async () => {
24
- const pub = new AutoPublisher(forge);
25
- const result = await pub.checkAndPublish();
26
- expect(result.published).toBe(0);
27
- expect(result.skipped).toBe(0);
28
- });
29
- it('publishes scheduled content when due', async () => {
30
- const mockSocial = { post: vi.fn().mockResolvedValue({ id: 'post-1' }) };
31
- forge.setSocialService(mockSocial);
32
- const piece = forge.generateFromInsight({ insight: 'Test insight for publishing', noveltyScore: 0.8 });
33
- // Schedule for the past so it's due
34
- forge.schedule(piece.id, '2020-01-01T00:00:00Z');
35
- const pub = new AutoPublisher(forge);
36
- const result = await pub.checkAndPublish();
37
- expect(result.published).toBe(1);
38
- expect(mockSocial.post).toHaveBeenCalledOnce();
39
- });
40
- it('skips future-scheduled content', async () => {
41
- forge.setSocialService({ post: vi.fn().mockResolvedValue({ id: 'post-1' }) });
42
- const piece = forge.generateFromInsight({ insight: 'Future content', noveltyScore: 0.8 });
43
- forge.schedule(piece.id, '2099-12-31T23:59:59Z');
44
- const pub = new AutoPublisher(forge);
45
- const result = await pub.checkAndPublish();
46
- expect(result.published).toBe(0);
47
- expect(result.skipped).toBe(1);
48
- });
49
- it('respects rate limit per hour', async () => {
50
- forge.setSocialService({ post: vi.fn().mockResolvedValue({ id: 'post-1' }) });
51
- const p1 = forge.generateFromInsight({ insight: 'Content 1', noveltyScore: 0.8 });
52
- const p2 = forge.generateFromInsight({ insight: 'Content 2', noveltyScore: 0.8 });
53
- forge.schedule(p1.id, '2020-01-01T00:00:00Z');
54
- forge.schedule(p2.id, '2020-01-01T00:00:00Z');
55
- const pub = new AutoPublisher(forge, { maxPublishPerHour: 1, minTimeBetweenPostsMs: 0, engagementCheckDelayMs: 3600000, requireLLMPolish: false });
56
- const result = await pub.checkAndPublish();
57
- expect(result.published).toBe(1);
58
- });
59
- it('handles publish failures gracefully', async () => {
60
- forge.setSocialService({ post: vi.fn().mockRejectedValue(new Error('API down')) });
61
- const piece = forge.generateFromInsight({ insight: 'Will fail', noveltyScore: 0.8 });
62
- forge.schedule(piece.id, '2020-01-01T00:00:00Z');
63
- const pub = new AutoPublisher(forge);
64
- const result = await pub.checkAndPublish();
65
- expect(result.published).toBe(0);
66
- expect(result.skipped).toBe(1);
67
- });
68
- it('auto-schedules drafts at optimal time', async () => {
69
- forge.setSocialService({ post: vi.fn().mockResolvedValue({ id: 'post-1' }) });
70
- // Create a draft but don't schedule it
71
- forge.generateFromInsight({ insight: 'Unscheduled draft content piece', noveltyScore: 0.8 });
72
- const pub = new AutoPublisher(forge);
73
- await pub.checkAndPublish();
74
- // Draft should now be scheduled
75
- const scheduled = forge.getSchedule();
76
- expect(scheduled.length).toBeGreaterThanOrEqual(1);
77
- });
78
- it('tracks stats correctly', async () => {
79
- forge.setSocialService({ post: vi.fn().mockResolvedValue({ id: 'post-1' }) });
80
- const piece = forge.generateFromInsight({ insight: 'Stats test', noveltyScore: 0.8 });
81
- forge.schedule(piece.id, '2020-01-01T00:00:00Z');
82
- const pub = new AutoPublisher(forge, { maxPublishPerHour: 5, minTimeBetweenPostsMs: 0, engagementCheckDelayMs: 100, requireLLMPolish: false });
83
- await pub.checkAndPublish();
84
- const stats = pub.getStats();
85
- expect(stats.publishedToday).toBe(1);
86
- expect(stats.lastPublishAt).not.toBeNull();
87
- expect(stats.checksRun).toBe(1);
88
- });
89
- it('resetDaily clears daily count', async () => {
90
- forge.setSocialService({ post: vi.fn().mockResolvedValue({ id: 'post-1' }) });
91
- const piece = forge.generateFromInsight({ insight: 'Reset test', noveltyScore: 0.8 });
92
- forge.schedule(piece.id, '2020-01-01T00:00:00Z');
93
- const pub = new AutoPublisher(forge, { maxPublishPerHour: 5, minTimeBetweenPostsMs: 0, engagementCheckDelayMs: 100, requireLLMPolish: false });
94
- await pub.checkAndPublish();
95
- expect(pub.getStats().publishedToday).toBe(1);
96
- pub.resetDaily();
97
- expect(pub.getStats().publishedToday).toBe(0);
98
- });
99
- it('refreshEngagement processes due checks', async () => {
100
- const pub = new AutoPublisher(forge, { maxPublishPerHour: 5, minTimeBetweenPostsMs: 0, engagementCheckDelayMs: 0, requireLLMPolish: false });
101
- forge.setSocialService({ post: vi.fn().mockResolvedValue({ id: 'post-1' }) });
102
- const piece = forge.generateFromInsight({ insight: 'Engagement test', noveltyScore: 0.8 });
103
- forge.schedule(piece.id, '2020-01-01T00:00:00Z');
104
- await pub.checkAndPublish();
105
- // With engagementCheckDelayMs: 0, the check should be due immediately
106
- const refreshed = await pub.refreshEngagement();
107
- expect(refreshed).toBeGreaterThanOrEqual(1);
108
- });
109
- it('start and stop manage hourly timer', () => {
110
- const pub = new AutoPublisher(forge);
111
- pub.start();
112
- pub.stop();
113
- // No error = success
114
- });
115
- it('handles no social service gracefully', async () => {
116
- // No social service set → publishNow returns { success: false }
117
- const piece = forge.generateFromInsight({ insight: 'No social', noveltyScore: 0.8 });
118
- forge.schedule(piece.id, '2020-01-01T00:00:00Z');
119
- const pub = new AutoPublisher(forge);
120
- const result = await pub.checkAndPublish();
121
- expect(result.published).toBe(0);
122
- expect(result.skipped).toBe(1);
123
- });
124
- });
125
- //# sourceMappingURL=auto-publisher.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auto-publisher.test.js","sourceRoot":"","sources":["../../../src/content/__tests__/auto-publisher.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,117 +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 { ContentForge, runContentForgeMigration } from '../content-forge.js';
7
- describe('ContentForge', () => {
8
- let db;
9
- beforeEach(() => { db = new Database(':memory:'); });
10
- afterEach(() => { db.close(); });
11
- it('generates content from an insight', () => {
12
- const forge = new ContentForge(db, { brainName: 'test' });
13
- const piece = forge.generateFromInsight({ id: 1, insight: 'Cross-domain patterns emerge between trading and marketing signals', noveltyScore: 0.8 });
14
- expect(piece.id).toBeGreaterThan(0);
15
- expect(piece.sourceType).toBe('insight');
16
- expect(piece.status).toBe('draft');
17
- expect(piece.platform).toBe('bluesky');
18
- });
19
- it('generates content from a mission', () => {
20
- const forge = new ContentForge(db, { brainName: 'test' });
21
- const piece = forge.generateFromMission({ id: 5, topic: 'AI agent architectures', summary: 'Survey of modern agent designs' });
22
- expect(piece.sourceType).toBe('mission');
23
- expect(piece.title).toContain('Research');
24
- });
25
- it('generates content from a trend', () => {
26
- const forge = new ContentForge(db, { brainName: 'test' });
27
- const piece = forge.generateFromTrend({ name: 'WebAssembly', description: 'WASM growing in backend usage', category: 'infrastructure' });
28
- expect(piece.sourceType).toBe('trend');
29
- expect(piece.title).toContain('Trend');
30
- });
31
- it('generates content from a principle', () => {
32
- const forge = new ContentForge(db, { brainName: 'test' });
33
- const piece = forge.generateFromPrinciple({ id: 3, statement: 'Early feedback loops reduce cascading failures', domain: 'engineering' });
34
- expect(piece.sourceType).toBe('principle');
35
- });
36
- it('schedules content for later', () => {
37
- const forge = new ContentForge(db, { brainName: 'test' });
38
- const piece = forge.generateFromInsight({ insight: 'Test insight', noveltyScore: 0.5 });
39
- forge.schedule(piece.id, '2026-03-15T10:00:00Z');
40
- const scheduled = forge.getSchedule();
41
- expect(scheduled).toHaveLength(1);
42
- expect(scheduled[0].scheduledFor).toBe('2026-03-15T10:00:00Z');
43
- expect(scheduled[0].status).toBe('scheduled');
44
- });
45
- it('publishes content via social service', async () => {
46
- const forge = new ContentForge(db, { brainName: 'test' });
47
- forge.setSocialService({ post: vi.fn().mockResolvedValue({ id: 'post-123' }) });
48
- const piece = forge.generateFromInsight({ insight: 'Publish me', noveltyScore: 0.9 });
49
- const result = await forge.publishNow(piece.id);
50
- expect(result.success).toBe(true);
51
- expect(result.postId).toBe('post-123');
52
- const updated = forge.getPiece(piece.id);
53
- expect(updated?.status).toBe('published');
54
- });
55
- it('handles publish failure', async () => {
56
- const forge = new ContentForge(db, { brainName: 'test' });
57
- forge.setSocialService({ post: vi.fn().mockRejectedValue(new Error('Rate limited')) });
58
- const piece = forge.generateFromInsight({ insight: 'Fail publish', noveltyScore: 0.5 });
59
- const result = await forge.publishNow(piece.id);
60
- expect(result.success).toBe(false);
61
- const updated = forge.getPiece(piece.id);
62
- expect(updated?.status).toBe('failed');
63
- });
64
- it('returns failure when no social service', async () => {
65
- const forge = new ContentForge(db, { brainName: 'test' });
66
- const piece = forge.generateFromInsight({ insight: 'No service', noveltyScore: 0.5 });
67
- const result = await forge.publishNow(piece.id);
68
- expect(result.success).toBe(false);
69
- });
70
- it('records engagement metrics', () => {
71
- const forge = new ContentForge(db, { brainName: 'test' });
72
- forge.setSocialService({ post: vi.fn().mockResolvedValue({ id: 'p1' }) });
73
- const piece = forge.generateFromInsight({ insight: 'Engage me', noveltyScore: 0.7 });
74
- forge.recordEngagement(piece.id, { likes: 42, reposts: 10, replies: 5 });
75
- const updated = forge.getPiece(piece.id);
76
- expect(updated?.engagement?.likes).toBe(42);
77
- });
78
- it('gets best performing content', async () => {
79
- const forge = new ContentForge(db, { brainName: 'test' });
80
- forge.setSocialService({ post: vi.fn().mockResolvedValue({ id: 'p1' }) });
81
- const p1 = forge.generateFromInsight({ insight: 'Popular', noveltyScore: 0.9 });
82
- const p2 = forge.generateFromInsight({ insight: 'Less popular', noveltyScore: 0.5 });
83
- await forge.publishNow(p1.id);
84
- await forge.publishNow(p2.id);
85
- forge.recordEngagement(p1.id, { likes: 100, reposts: 50, replies: 20 });
86
- forge.recordEngagement(p2.id, { likes: 5, reposts: 1, replies: 0 });
87
- const best = forge.getBestPerforming(2);
88
- expect(best).toHaveLength(2);
89
- expect(best[0].engagement?.likes).toBe(100);
90
- });
91
- it('returns optimal posting time', () => {
92
- const forge = new ContentForge(db, { brainName: 'test' });
93
- expect(forge.getOptimalTime('bluesky')).toBe('10:00');
94
- expect(forge.getOptimalTime('reddit')).toBe('08:00');
95
- });
96
- it('getStatus returns overview', () => {
97
- const forge = new ContentForge(db, { brainName: 'test' });
98
- forge.generateFromInsight({ insight: 'Draft 1', noveltyScore: 0.5 });
99
- forge.generateFromInsight({ insight: 'Draft 2', noveltyScore: 0.6 });
100
- const status = forge.getStatus();
101
- expect(status.drafts).toBe(2);
102
- expect(status.published).toBe(0);
103
- });
104
- it('migration is idempotent', () => {
105
- const forge = new ContentForge(db, { brainName: 'test' });
106
- forge.generateFromInsight({ insight: 'Survives', noveltyScore: 0.5 });
107
- runContentForgeMigration(db);
108
- const pieces = forge.getByStatus('draft');
109
- expect(pieces).toHaveLength(1);
110
- });
111
- it('uses custom platform', () => {
112
- const forge = new ContentForge(db, { brainName: 'test' });
113
- const piece = forge.generateFromInsight({ insight: 'Reddit post', noveltyScore: 0.7 }, 'reddit');
114
- expect(piece.platform).toBe('reddit');
115
- });
116
- });
117
- //# sourceMappingURL=content-forge.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"content-forge.test.js","sourceRoot":"","sources":["../../../src/content/__tests__/content-forge.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,229 +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 { CreativeEngine, runCreativeMigration } from '../creative-engine.js';
7
- describe('CreativeEngine', () => {
8
- let db;
9
- beforeEach(() => { db = new Database(':memory:'); });
10
- afterEach(() => { db.close(); });
11
- it('creates an instance without errors', () => {
12
- const engine = new CreativeEngine(db, { brainName: 'test' });
13
- expect(engine).toBeDefined();
14
- });
15
- it('getStatus returns initial empty state', () => {
16
- const engine = new CreativeEngine(db, { brainName: 'test' });
17
- const status = engine.getStatus();
18
- expect(status.totalInsights).toBe(0);
19
- expect(status.byType).toEqual({});
20
- expect(status.byStatus).toEqual({});
21
- expect(status.topInsights).toEqual([]);
22
- });
23
- it('crossPollinate returns empty array without distiller', () => {
24
- const engine = new CreativeEngine(db, { brainName: 'test' });
25
- const result = engine.crossPollinate();
26
- expect(result).toEqual([]);
27
- });
28
- it('crossPollinate returns insights when distiller provides multi-domain principles', () => {
29
- const engine = new CreativeEngine(db, { brainName: 'test', overlapThreshold: 1.0 });
30
- engine.setKnowledgeDistiller({
31
- distill: () => ({
32
- principles: [
33
- { statement: 'caching improves performance significantly', domain: 'engineering' },
34
- { statement: 'diversification reduces portfolio variance', domain: 'finance' },
35
- { statement: 'redundancy prevents catastrophic system failure', domain: 'engineering' },
36
- { statement: 'hedging minimizes downside exposure risk', domain: 'finance' },
37
- ],
38
- }),
39
- });
40
- const insights = engine.crossPollinate();
41
- expect(insights.length).toBeGreaterThan(0);
42
- expect(insights[0].type).toBe('cross_pollination');
43
- expect(insights[0].status).toBe('raw');
44
- expect(insights[0].noveltyScore).toBeGreaterThan(0);
45
- expect(insights[0].id).toBeGreaterThan(0);
46
- // Verify stored in DB
47
- const status = engine.getStatus();
48
- expect(status.totalInsights).toBe(insights.length);
49
- expect(status.byType['cross_pollination']).toBe(insights.length);
50
- });
51
- it('crossPollinate with single domain returns insights via fallback grouping', () => {
52
- const engine = new CreativeEngine(db, { brainName: 'test', overlapThreshold: 1.0 });
53
- engine.setKnowledgeDistiller({
54
- distill: () => ({
55
- principles: [
56
- { statement: 'caching improves performance significantly', domain: 'brain' },
57
- { statement: 'monitoring detects anomalies before failures', domain: 'brain' },
58
- { statement: 'validation prevents corrupted data entry', domain: 'brain' },
59
- { statement: 'abstraction reduces cognitive complexity', domain: 'brain' },
60
- ],
61
- }),
62
- });
63
- const insights = engine.crossPollinate();
64
- // With fallback, single domain should still produce insights
65
- expect(insights.length).toBeGreaterThan(0);
66
- });
67
- it('crossPollinate with 2+ domains works as before', () => {
68
- const engine = new CreativeEngine(db, { brainName: 'test', overlapThreshold: 1.0 });
69
- engine.setKnowledgeDistiller({
70
- distill: () => ({
71
- principles: [
72
- { statement: 'caching improves response times', domain: 'engineering' },
73
- { statement: 'diversification reduces risk exposure', domain: 'finance' },
74
- ],
75
- }),
76
- });
77
- const insights = engine.crossPollinate();
78
- expect(insights.length).toBeGreaterThan(0);
79
- expect(insights[0].type).toBe('cross_pollination');
80
- });
81
- it('fallback grouping produces at least 2 groups from single domain', () => {
82
- const engine = new CreativeEngine(db, { brainName: 'test', overlapThreshold: 1.0 });
83
- engine.setKnowledgeDistiller({
84
- distill: () => ({
85
- principles: [
86
- { statement: 'first principle about something important', domain: 'brain' },
87
- { statement: 'second principle about another topic entirely', domain: 'brain' },
88
- { statement: 'third principle about different matters', domain: 'brain' },
89
- { statement: 'fourth principle covering new ground here', domain: 'brain' },
90
- ],
91
- }),
92
- });
93
- // crossPollinate internally groups and should get insights
94
- const insights = engine.crossPollinate();
95
- // If it didn't crash and returned results, fallback worked
96
- expect(Array.isArray(insights)).toBe(true);
97
- });
98
- it('crossPollinate with < 4 single-domain principles still generates insights', () => {
99
- const engine = new CreativeEngine(db, { brainName: 'test', overlapThreshold: 1.0 });
100
- engine.setKnowledgeDistiller({
101
- distill: () => ({
102
- principles: [
103
- { statement: 'caching dramatically improves latency', domain: 'brain' },
104
- { statement: 'monitoring catches failures early', domain: 'brain' },
105
- ],
106
- }),
107
- });
108
- const insights = engine.crossPollinate();
109
- // With only 2 same-domain principles, direct pair-building should kick in
110
- expect(insights.length).toBeGreaterThan(0);
111
- expect(insights[0].type).toBe('cross_pollination');
112
- });
113
- it('getDebugInfo returns principles count and domain distribution', () => {
114
- const engine = new CreativeEngine(db, { brainName: 'test' });
115
- engine.setKnowledgeDistiller({
116
- distill: () => ({
117
- principles: [
118
- { statement: 'principle A', domain: 'domA' },
119
- { statement: 'principle B', domain: 'domA' },
120
- { statement: 'principle C', domain: 'domB' },
121
- ],
122
- }),
123
- });
124
- const debug = engine.getDebugInfo();
125
- expect(debug.principlesCount).toBe(3);
126
- expect(debug.domains).toEqual({ domA: 2, domB: 1 });
127
- expect(debug.distillerAvailable).toBe(true);
128
- });
129
- it('findAnalogies returns empty array without distiller', () => {
130
- const engine = new CreativeEngine(db, { brainName: 'test' });
131
- const result = engine.findAnalogies('some concept');
132
- expect(result).toEqual([]);
133
- });
134
- it('findAnalogies finds structurally similar principles', () => {
135
- const engine = new CreativeEngine(db, { brainName: 'test' });
136
- engine.setKnowledgeDistiller({
137
- distill: () => ({
138
- principles: [
139
- { statement: 'caching improves response times significantly', domain: 'engineering' },
140
- { statement: 'caching improves database query performance', domain: 'databases' },
141
- { statement: 'something completely unrelated', domain: 'art' },
142
- ],
143
- }),
144
- });
145
- const analogies = engine.findAnalogies('caching improves application performance');
146
- expect(analogies.length).toBeGreaterThan(0);
147
- for (const a of analogies) {
148
- expect(a.concept).toBe('caching improves application performance');
149
- expect(a.similarity).toBeGreaterThan(0.1);
150
- expect(a.similarity).toBeLessThan(0.6);
151
- expect(a.explanation).toContain('Shared concepts');
152
- }
153
- });
154
- it('getInsights returns empty list initially', () => {
155
- const engine = new CreativeEngine(db, { brainName: 'test' });
156
- const insights = engine.getInsights();
157
- expect(insights).toEqual([]);
158
- });
159
- it('getInsights returns stored insights after crossPollinate', () => {
160
- const engine = new CreativeEngine(db, { brainName: 'test', overlapThreshold: 1.0 });
161
- engine.setKnowledgeDistiller({
162
- distill: () => ({
163
- principles: [
164
- { statement: 'parallel processing speeds computation', domain: 'computing' },
165
- { statement: 'teamwork divides workload effectively', domain: 'management' },
166
- ],
167
- }),
168
- });
169
- engine.crossPollinate();
170
- const insights = engine.getInsights();
171
- expect(insights.length).toBeGreaterThan(0);
172
- expect(insights[0].id).toBeDefined();
173
- expect(insights[0].createdAt).toBeDefined();
174
- expect(insights[0].sourceA.domain).toBeDefined();
175
- expect(insights[0].sourceB.domain).toBeDefined();
176
- });
177
- it('getInsights filters by status', () => {
178
- const engine = new CreativeEngine(db, { brainName: 'test', overlapThreshold: 1.0 });
179
- engine.setKnowledgeDistiller({
180
- distill: () => ({
181
- principles: [
182
- { statement: 'abstraction hides complexity behind interfaces', domain: 'software' },
183
- { statement: 'delegation assigns responsibility to subordinates', domain: 'leadership' },
184
- ],
185
- }),
186
- });
187
- engine.crossPollinate();
188
- const raw = engine.getInsights(20, 'raw');
189
- expect(raw.length).toBeGreaterThan(0);
190
- const tested = engine.getInsights(20, 'tested');
191
- expect(tested).toEqual([]);
192
- });
193
- it('migration is idempotent', () => {
194
- const engine = new CreativeEngine(db, { brainName: 'test', overlapThreshold: 1.0 });
195
- engine.setKnowledgeDistiller({
196
- distill: () => ({
197
- principles: [
198
- { statement: 'monitoring detects anomalies early', domain: 'ops' },
199
- { statement: 'early diagnosis improves treatment outcomes', domain: 'medicine' },
200
- ],
201
- }),
202
- });
203
- engine.crossPollinate();
204
- // Running migration again should not destroy data
205
- runCreativeMigration(db);
206
- const status = engine.getStatus();
207
- expect(status.totalInsights).toBeGreaterThan(0);
208
- });
209
- it('getStatus reflects insights by type and status', () => {
210
- const engine = new CreativeEngine(db, { brainName: 'test' });
211
- // Manually insert insights of different types
212
- db.prepare(`
213
- INSERT INTO creative_insights (type, source_a_domain, source_a_principle, source_b_domain, source_b_principle, insight, novelty_score, plausibility, status)
214
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
215
- `).run('cross_pollination', 'domA', 'prinA', 'domB', 'prinB', 'insight1', 0.8, 0.5, 'raw');
216
- db.prepare(`
217
- INSERT INTO creative_insights (type, source_a_domain, source_a_principle, source_b_domain, source_b_principle, insight, novelty_score, plausibility, status)
218
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
219
- `).run('imagination', 'domC', 'prinC', 'domD', 'prinD', 'insight2', 0.9, 0.6, 'tested');
220
- const status = engine.getStatus();
221
- expect(status.totalInsights).toBe(2);
222
- expect(status.byType['cross_pollination']).toBe(1);
223
- expect(status.byType['imagination']).toBe(1);
224
- expect(status.byStatus['raw']).toBe(1);
225
- expect(status.byStatus['tested']).toBe(1);
226
- expect(status.topInsights.length).toBe(2);
227
- });
228
- });
229
- //# sourceMappingURL=creative-engine.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"creative-engine.test.js","sourceRoot":"","sources":["../../../src/creative/__tests__/creative-engine.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,EAAE,CAAC,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,CAAC;IACtC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,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,EAAE,CAAC;CACpF,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7E,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAI,EAAqB,CAAC;IAE1B,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjC,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iFAAiF,EAAE,GAAG,EAAE;QACzF,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;QACpF,MAAM,CAAC,qBAAqB,CAAC;YAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;gBACd,UAAU,EAAE;oBACV,EAAE,SAAS,EAAE,4CAA4C,EAAE,MAAM,EAAE,aAAa,EAAE;oBAClF,EAAE,SAAS,EAAE,4CAA4C,EAAE,MAAM,EAAE,SAAS,EAAE;oBAC9E,EAAE,SAAS,EAAE,iDAAiD,EAAE,MAAM,EAAE,aAAa,EAAE;oBACvF,EAAE,SAAS,EAAE,0CAA0C,EAAE,MAAM,EAAE,SAAS,EAAE;iBAC7E;aACF,CAAC;SACI,CAAC,CAAC;QAEV,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;QACzC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACnD,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAE1C,sBAAsB;QACtB,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;QAClF,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;QACpF,MAAM,CAAC,qBAAqB,CAAC;YAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;gBACd,UAAU,EAAE;oBACV,EAAE,SAAS,EAAE,4CAA4C,EAAE,MAAM,EAAE,OAAO,EAAE;oBAC5E,EAAE,SAAS,EAAE,8CAA8C,EAAE,MAAM,EAAE,OAAO,EAAE;oBAC9E,EAAE,SAAS,EAAE,0CAA0C,EAAE,MAAM,EAAE,OAAO,EAAE;oBAC1E,EAAE,SAAS,EAAE,0CAA0C,EAAE,MAAM,EAAE,OAAO,EAAE;iBAC3E;aACF,CAAC;SACI,CAAC,CAAC;QAEV,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;QACzC,6DAA6D;QAC7D,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;QACpF,MAAM,CAAC,qBAAqB,CAAC;YAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;gBACd,UAAU,EAAE;oBACV,EAAE,SAAS,EAAE,iCAAiC,EAAE,MAAM,EAAE,aAAa,EAAE;oBACvE,EAAE,SAAS,EAAE,uCAAuC,EAAE,MAAM,EAAE,SAAS,EAAE;iBAC1E;aACF,CAAC;SACI,CAAC,CAAC;QAEV,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;QACzC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;QACpF,MAAM,CAAC,qBAAqB,CAAC;YAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;gBACd,UAAU,EAAE;oBACV,EAAE,SAAS,EAAE,2CAA2C,EAAE,MAAM,EAAE,OAAO,EAAE;oBAC3E,EAAE,SAAS,EAAE,+CAA+C,EAAE,MAAM,EAAE,OAAO,EAAE;oBAC/E,EAAE,SAAS,EAAE,yCAAyC,EAAE,MAAM,EAAE,OAAO,EAAE;oBACzE,EAAE,SAAS,EAAE,2CAA2C,EAAE,MAAM,EAAE,OAAO,EAAE;iBAC5E;aACF,CAAC;SACI,CAAC,CAAC;QAEV,2DAA2D;QAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;QACzC,2DAA2D;QAC3D,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;QACnF,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;QACpF,MAAM,CAAC,qBAAqB,CAAC;YAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;gBACd,UAAU,EAAE;oBACV,EAAE,SAAS,EAAE,uCAAuC,EAAE,MAAM,EAAE,OAAO,EAAE;oBACvE,EAAE,SAAS,EAAE,mCAAmC,EAAE,MAAM,EAAE,OAAO,EAAE;iBACpE;aACF,CAAC;SACI,CAAC,CAAC;QAEV,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;QACzC,0EAA0E;QAC1E,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7D,MAAM,CAAC,qBAAqB,CAAC;YAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;gBACd,UAAU,EAAE;oBACV,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE;oBAC5C,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE;oBAC5C,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE;iBAC7C;aACF,CAAC;SACI,CAAC,CAAC;QAEV,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACpD,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7D,MAAM,CAAC,qBAAqB,CAAC;YAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;gBACd,UAAU,EAAE;oBACV,EAAE,SAAS,EAAE,+CAA+C,EAAE,MAAM,EAAE,aAAa,EAAE;oBACrF,EAAE,SAAS,EAAE,6CAA6C,EAAE,MAAM,EAAE,WAAW,EAAE;oBACjF,EAAE,SAAS,EAAE,gCAAgC,EAAE,MAAM,EAAE,KAAK,EAAE;iBAC/D;aACF,CAAC;SACI,CAAC,CAAC;QAEV,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC,0CAA0C,CAAC,CAAC;QACnF,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC5C,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1B,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;YACnE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAC1C,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YACvC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QACtC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;QACpF,MAAM,CAAC,qBAAqB,CAAC;YAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;gBACd,UAAU,EAAE;oBACV,EAAE,SAAS,EAAE,wCAAwC,EAAE,MAAM,EAAE,WAAW,EAAE;oBAC5E,EAAE,SAAS,EAAE,uCAAuC,EAAE,MAAM,EAAE,YAAY,EAAE;iBAC7E;aACF,CAAC;SACI,CAAC,CAAC;QAEV,MAAM,CAAC,cAAc,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QACtC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QACjD,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;QACpF,MAAM,CAAC,qBAAqB,CAAC;YAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;gBACd,UAAU,EAAE;oBACV,EAAE,SAAS,EAAE,gDAAgD,EAAE,MAAM,EAAE,UAAU,EAAE;oBACnF,EAAE,SAAS,EAAE,mDAAmD,EAAE,MAAM,EAAE,YAAY,EAAE;iBACzF;aACF,CAAC;SACI,CAAC,CAAC;QAEV,MAAM,CAAC,cAAc,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAEtC,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;QACpF,MAAM,CAAC,qBAAqB,CAAC;YAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;gBACd,UAAU,EAAE;oBACV,EAAE,SAAS,EAAE,oCAAoC,EAAE,MAAM,EAAE,KAAK,EAAE;oBAClE,EAAE,SAAS,EAAE,6CAA6C,EAAE,MAAM,EAAE,UAAU,EAAE;iBACjF;aACF,CAAC;SACI,CAAC,CAAC;QAEV,MAAM,CAAC,cAAc,EAAE,CAAC;QACxB,kDAAkD;QAClD,oBAAoB,CAAC,EAAE,CAAC,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7D,8CAA8C;QAC9C,EAAE,CAAC,OAAO,CAAC;;;KAGV,CAAC,CAAC,GAAG,CAAC,mBAAmB,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3F,EAAE,CAAC,OAAO,CAAC;;;KAGV,CAAC,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QAExF,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};