@timmeck/brain-core 2.36.12 → 2.36.14

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 (125) hide show
  1. package/dist/cross-brain/__tests__/borg-sync-engine.test.d.ts +1 -0
  2. package/dist/cross-brain/__tests__/borg-sync-engine.test.js +240 -0
  3. package/dist/cross-brain/__tests__/borg-sync-engine.test.js.map +1 -0
  4. package/dist/cross-brain/borg-sync-engine.d.ts +62 -0
  5. package/dist/cross-brain/borg-sync-engine.js +215 -0
  6. package/dist/cross-brain/borg-sync-engine.js.map +1 -0
  7. package/dist/cross-brain/borg-types.d.ts +37 -0
  8. package/dist/cross-brain/borg-types.js +9 -0
  9. package/dist/cross-brain/borg-types.js.map +1 -0
  10. package/dist/embeddings/engine.js +2 -1
  11. package/dist/embeddings/engine.js.map +1 -1
  12. package/dist/index.d.ts +18 -1
  13. package/dist/index.js +14 -0
  14. package/dist/index.js.map +1 -1
  15. package/dist/llm/__tests__/anthropic-provider.test.d.ts +1 -0
  16. package/dist/llm/__tests__/anthropic-provider.test.js +121 -0
  17. package/dist/llm/__tests__/anthropic-provider.test.js.map +1 -0
  18. package/dist/llm/__tests__/llm-service.test.js +181 -40
  19. package/dist/llm/__tests__/llm-service.test.js.map +1 -1
  20. package/dist/llm/__tests__/ollama-embedding.test.d.ts +1 -0
  21. package/dist/llm/__tests__/ollama-embedding.test.js +128 -0
  22. package/dist/llm/__tests__/ollama-embedding.test.js.map +1 -0
  23. package/dist/llm/__tests__/ollama-provider.test.d.ts +1 -0
  24. package/dist/llm/__tests__/ollama-provider.test.js +213 -0
  25. package/dist/llm/__tests__/ollama-provider.test.js.map +1 -0
  26. package/dist/llm/__tests__/provider.test.d.ts +1 -0
  27. package/dist/llm/__tests__/provider.test.js +126 -0
  28. package/dist/llm/__tests__/provider.test.js.map +1 -0
  29. package/dist/llm/anthropic-provider.d.ts +41 -0
  30. package/dist/llm/anthropic-provider.js +86 -0
  31. package/dist/llm/anthropic-provider.js.map +1 -0
  32. package/dist/llm/index.d.ts +9 -1
  33. package/dist/llm/index.js +4 -0
  34. package/dist/llm/index.js.map +1 -1
  35. package/dist/llm/llm-service.d.ts +55 -7
  36. package/dist/llm/llm-service.js +184 -82
  37. package/dist/llm/llm-service.js.map +1 -1
  38. package/dist/llm/ollama-embedding.d.ts +46 -0
  39. package/dist/llm/ollama-embedding.js +93 -0
  40. package/dist/llm/ollama-embedding.js.map +1 -0
  41. package/dist/llm/ollama-provider.d.ts +80 -0
  42. package/dist/llm/ollama-provider.js +178 -0
  43. package/dist/llm/ollama-provider.js.map +1 -0
  44. package/dist/llm/provider.d.ts +120 -0
  45. package/dist/llm/provider.js +104 -0
  46. package/dist/llm/provider.js.map +1 -0
  47. package/dist/missions/mission-engine.d.ts +4 -0
  48. package/dist/missions/mission-engine.js +30 -8
  49. package/dist/missions/mission-engine.js.map +1 -1
  50. package/dist/notifications/__tests__/notification-service.test.d.ts +1 -0
  51. package/dist/notifications/__tests__/notification-service.test.js +176 -0
  52. package/dist/notifications/__tests__/notification-service.test.js.map +1 -0
  53. package/dist/notifications/discord-provider.d.ts +30 -0
  54. package/dist/notifications/discord-provider.js +89 -0
  55. package/dist/notifications/discord-provider.js.map +1 -0
  56. package/dist/notifications/email-provider.d.ts +41 -0
  57. package/dist/notifications/email-provider.js +101 -0
  58. package/dist/notifications/email-provider.js.map +1 -0
  59. package/dist/notifications/index.d.ts +8 -0
  60. package/dist/notifications/index.js +5 -0
  61. package/dist/notifications/index.js.map +1 -0
  62. package/dist/notifications/notification-provider.d.ts +75 -0
  63. package/dist/notifications/notification-provider.js +47 -0
  64. package/dist/notifications/notification-provider.js.map +1 -0
  65. package/dist/notifications/notification-service.d.ts +85 -0
  66. package/dist/notifications/notification-service.js +184 -0
  67. package/dist/notifications/notification-service.js.map +1 -0
  68. package/dist/notifications/telegram-provider.d.ts +30 -0
  69. package/dist/notifications/telegram-provider.js +78 -0
  70. package/dist/notifications/telegram-provider.js.map +1 -0
  71. package/dist/plugin/__tests__/plugin-registry.test.d.ts +1 -0
  72. package/dist/plugin/__tests__/plugin-registry.test.js +166 -0
  73. package/dist/plugin/__tests__/plugin-registry.test.js.map +1 -0
  74. package/dist/plugin/plugin-registry.d.ts +38 -0
  75. package/dist/plugin/plugin-registry.js +185 -0
  76. package/dist/plugin/plugin-registry.js.map +1 -0
  77. package/dist/plugin/types.d.ts +59 -0
  78. package/dist/plugin/types.js +2 -0
  79. package/dist/plugin/types.js.map +1 -0
  80. package/dist/research/adapters/__tests__/web-adapters.test.d.ts +1 -0
  81. package/dist/research/adapters/__tests__/web-adapters.test.js +106 -0
  82. package/dist/research/adapters/__tests__/web-adapters.test.js.map +1 -0
  83. package/dist/research/adapters/firecrawl-adapter.d.ts +57 -0
  84. package/dist/research/adapters/firecrawl-adapter.js +137 -0
  85. package/dist/research/adapters/firecrawl-adapter.js.map +1 -0
  86. package/dist/research/adapters/index.d.ts +3 -0
  87. package/dist/research/adapters/index.js +2 -0
  88. package/dist/research/adapters/index.js.map +1 -1
  89. package/dist/research/adapters/playwright-adapter.d.ts +54 -0
  90. package/dist/research/adapters/playwright-adapter.js +130 -0
  91. package/dist/research/adapters/playwright-adapter.js.map +1 -0
  92. package/dist/research/research-orchestrator.d.ts +3 -0
  93. package/dist/research/research-orchestrator.js +19 -1
  94. package/dist/research/research-orchestrator.js.map +1 -1
  95. package/dist/techradar/__tests__/techradar-engine.test.d.ts +1 -0
  96. package/dist/techradar/__tests__/techradar-engine.test.js +246 -0
  97. package/dist/techradar/__tests__/techradar-engine.test.js.map +1 -0
  98. package/dist/techradar/daily-digest.d.ts +18 -0
  99. package/dist/techradar/daily-digest.js +100 -0
  100. package/dist/techradar/daily-digest.js.map +1 -0
  101. package/dist/techradar/index.d.ts +5 -0
  102. package/dist/techradar/index.js +5 -0
  103. package/dist/techradar/index.js.map +1 -0
  104. package/dist/techradar/relevance-scorer.d.ts +29 -0
  105. package/dist/techradar/relevance-scorer.js +139 -0
  106. package/dist/techradar/relevance-scorer.js.map +1 -0
  107. package/dist/techradar/repo-watcher.d.ts +24 -0
  108. package/dist/techradar/repo-watcher.js +87 -0
  109. package/dist/techradar/repo-watcher.js.map +1 -0
  110. package/dist/techradar/techradar-engine.d.ts +69 -0
  111. package/dist/techradar/techradar-engine.js +382 -0
  112. package/dist/techradar/techradar-engine.js.map +1 -0
  113. package/dist/techradar/types.d.ts +87 -0
  114. package/dist/techradar/types.js +5 -0
  115. package/dist/techradar/types.js.map +1 -0
  116. package/dist/watchdog/__tests__/watchdog-service.test.d.ts +1 -0
  117. package/dist/watchdog/__tests__/watchdog-service.test.js +113 -0
  118. package/dist/watchdog/__tests__/watchdog-service.test.js.map +1 -0
  119. package/dist/watchdog/watchdog-service.d.ts +60 -0
  120. package/dist/watchdog/watchdog-service.js +275 -0
  121. package/dist/watchdog/watchdog-service.js.map +1 -0
  122. package/dist/watchdog/windows-service.d.ts +39 -0
  123. package/dist/watchdog/windows-service.js +179 -0
  124. package/dist/watchdog/windows-service.js.map +1 -0
  125. package/package.json +20 -2
@@ -0,0 +1,240 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { BorgSyncEngine } from '../borg-sync-engine.js';
3
+ // Mock CrossBrainClient
4
+ function createMockClient() {
5
+ return {
6
+ broadcast: vi.fn().mockResolvedValue([]),
7
+ query: vi.fn().mockResolvedValue(null),
8
+ getAvailablePeers: vi.fn().mockResolvedValue([]),
9
+ getPeerNames: vi.fn().mockReturnValue(['trading-brain', 'marketing-brain']),
10
+ addPeer: vi.fn(),
11
+ removePeer: vi.fn(),
12
+ };
13
+ }
14
+ function createMockProvider(items = []) {
15
+ return {
16
+ getShareableItems: vi.fn().mockReturnValue(items),
17
+ importItems: vi.fn().mockReturnValue(0),
18
+ };
19
+ }
20
+ function makeItem(overrides = {}) {
21
+ return {
22
+ type: 'rule',
23
+ id: 'r1',
24
+ title: 'Test Rule',
25
+ content: 'Always test your code',
26
+ confidence: 0.8,
27
+ source: 'brain',
28
+ createdAt: new Date().toISOString(),
29
+ ...overrides,
30
+ };
31
+ }
32
+ describe('BorgSyncEngine', () => {
33
+ let client;
34
+ let provider;
35
+ beforeEach(() => {
36
+ client = createMockClient();
37
+ provider = createMockProvider();
38
+ vi.useFakeTimers();
39
+ });
40
+ it('starts disabled by default', () => {
41
+ const engine = new BorgSyncEngine('brain', client, provider);
42
+ const status = engine.getStatus();
43
+ expect(status.enabled).toBe(false);
44
+ expect(status.totalSyncs).toBe(0);
45
+ });
46
+ it('getConfig returns config copy', () => {
47
+ const engine = new BorgSyncEngine('brain', client, provider, { enabled: true });
48
+ const config = engine.getConfig();
49
+ expect(config.enabled).toBe(true);
50
+ expect(config.mode).toBe('selective');
51
+ expect(config.minConfidence).toBe(0.6);
52
+ });
53
+ it('setEnabled toggles borg mode', () => {
54
+ const engine = new BorgSyncEngine('brain', client, provider);
55
+ expect(engine.getConfig().enabled).toBe(false);
56
+ engine.setEnabled(true);
57
+ expect(engine.getConfig().enabled).toBe(true);
58
+ engine.setEnabled(false);
59
+ expect(engine.getConfig().enabled).toBe(false);
60
+ engine.stop(); // cleanup
61
+ });
62
+ it('updateConfig merges partial config', () => {
63
+ const engine = new BorgSyncEngine('brain', client, provider);
64
+ engine.updateConfig({ minConfidence: 0.9, mode: 'full' });
65
+ const config = engine.getConfig();
66
+ expect(config.minConfidence).toBe(0.9);
67
+ expect(config.mode).toBe('full');
68
+ });
69
+ it('filterOutgoing respects minConfidence', async () => {
70
+ const items = [
71
+ makeItem({ id: 'r1', confidence: 0.8 }),
72
+ makeItem({ id: 'r2', confidence: 0.3 }), // below threshold
73
+ ];
74
+ provider = createMockProvider(items);
75
+ const engine = new BorgSyncEngine('brain', client, provider, { enabled: true });
76
+ client.broadcast.mockResolvedValue([
77
+ { name: 'trading-brain', result: { accepted: 1, rejected: 0 } },
78
+ ]);
79
+ await engine.syncCycle();
80
+ // Should have broadcast only the high-confidence item
81
+ expect(client.broadcast).toHaveBeenCalledWith('cross-brain.borgSync', expect.objectContaining({
82
+ items: expect.arrayContaining([
83
+ expect.objectContaining({ id: 'r1' }),
84
+ ]),
85
+ }));
86
+ // The low-confidence item should not be included
87
+ const broadcastCall = client.broadcast.mock.calls[0];
88
+ const packet = broadcastCall[1];
89
+ expect(packet.items).toHaveLength(1);
90
+ expect(packet.items[0].id).toBe('r1');
91
+ engine.stop();
92
+ });
93
+ it('filterOutgoing in selective mode only shares configured types', async () => {
94
+ const items = [
95
+ makeItem({ id: 'r1', type: 'rule', confidence: 0.9 }),
96
+ makeItem({ id: 'p1', type: 'pattern', confidence: 0.9 }), // not in default shareTypes
97
+ ];
98
+ provider = createMockProvider(items);
99
+ const engine = new BorgSyncEngine('brain', client, provider, {
100
+ enabled: true,
101
+ shareTypes: ['rule', 'insight'], // pattern not included
102
+ });
103
+ client.broadcast.mockResolvedValue([]);
104
+ await engine.syncCycle();
105
+ const call = client.broadcast.mock.calls[0];
106
+ const packet = call[1];
107
+ expect(packet.items).toHaveLength(1);
108
+ expect(packet.items[0].type).toBe('rule');
109
+ engine.stop();
110
+ });
111
+ it('filterOutgoing in full mode shares all types', async () => {
112
+ const items = [
113
+ makeItem({ id: 'r1', type: 'rule', confidence: 0.9 }),
114
+ makeItem({ id: 'p1', type: 'pattern', confidence: 0.9 }),
115
+ makeItem({ id: 'm1', type: 'memory', confidence: 0.9 }),
116
+ ];
117
+ provider = createMockProvider(items);
118
+ const engine = new BorgSyncEngine('brain', client, provider, {
119
+ enabled: true,
120
+ mode: 'full',
121
+ });
122
+ client.broadcast.mockResolvedValue([]);
123
+ await engine.syncCycle();
124
+ const call = client.broadcast.mock.calls[0];
125
+ const packet = call[1];
126
+ expect(packet.items).toHaveLength(3);
127
+ engine.stop();
128
+ });
129
+ it('handleIncomingSync filters by relevanceThreshold and rejects own items', () => {
130
+ const engine = new BorgSyncEngine('brain', client, provider, {
131
+ enabled: true,
132
+ relevanceThreshold: 0.5,
133
+ });
134
+ provider.importItems.mockReturnValue(1);
135
+ const result = engine.handleIncomingSync({
136
+ source: 'trading-brain',
137
+ timestamp: new Date().toISOString(),
138
+ items: [
139
+ makeItem({ id: 'r1', source: 'trading-brain', confidence: 0.8 }), // accept
140
+ makeItem({ id: 'r2', source: 'brain', confidence: 0.9 }), // reject (own)
141
+ makeItem({ id: 'r3', source: 'trading-brain', confidence: 0.2 }), // reject (low confidence)
142
+ ],
143
+ });
144
+ // importItems should be called with only the first item
145
+ expect(provider.importItems).toHaveBeenCalledWith([expect.objectContaining({ id: 'r1' })], 'trading-brain');
146
+ expect(result.accepted).toBe(1);
147
+ engine.stop();
148
+ });
149
+ it('handleIncomingSync returns all rejected when disabled', () => {
150
+ const engine = new BorgSyncEngine('brain', client, provider);
151
+ // Default: disabled
152
+ const result = engine.handleIncomingSync({
153
+ source: 'trading-brain',
154
+ timestamp: new Date().toISOString(),
155
+ items: [makeItem(), makeItem({ id: 'r2' })],
156
+ });
157
+ expect(result.accepted).toBe(0);
158
+ expect(result.rejected).toBe(2);
159
+ expect(provider.importItems).not.toHaveBeenCalled();
160
+ });
161
+ it('handleExportRequest returns shareable items when enabled', () => {
162
+ const items = [makeItem({ id: 'r1', confidence: 0.9 })];
163
+ provider = createMockProvider(items);
164
+ const engine = new BorgSyncEngine('brain', client, provider, { enabled: true });
165
+ const packet = engine.handleExportRequest();
166
+ expect(packet.source).toBe('brain');
167
+ expect(packet.items).toHaveLength(1);
168
+ expect(packet.items[0].id).toBe('r1');
169
+ });
170
+ it('handleExportRequest returns empty when disabled', () => {
171
+ const items = [makeItem({ id: 'r1', confidence: 0.9 })];
172
+ provider = createMockProvider(items);
173
+ const engine = new BorgSyncEngine('brain', client, provider);
174
+ const packet = engine.handleExportRequest();
175
+ expect(packet.items).toHaveLength(0);
176
+ });
177
+ it('tracks sync history', () => {
178
+ const engine = new BorgSyncEngine('brain', client, provider, { enabled: true });
179
+ engine.handleIncomingSync({
180
+ source: 'trading-brain',
181
+ timestamp: new Date().toISOString(),
182
+ items: [makeItem({ source: 'trading-brain' })],
183
+ });
184
+ const history = engine.getHistory();
185
+ expect(history).toHaveLength(1);
186
+ expect(history[0].direction).toBe('received');
187
+ expect(history[0].peer).toBe('trading-brain');
188
+ });
189
+ it('getStatus returns summary', () => {
190
+ const engine = new BorgSyncEngine('brain', client, provider, { enabled: true });
191
+ engine.handleIncomingSync({
192
+ source: 'trading-brain',
193
+ timestamp: new Date().toISOString(),
194
+ items: [makeItem({ source: 'trading-brain' })],
195
+ });
196
+ const status = engine.getStatus();
197
+ expect(status.enabled).toBe(true);
198
+ expect(status.mode).toBe('selective');
199
+ expect(status.totalSyncs).toBe(1);
200
+ expect(status.lastSync).toBeTruthy();
201
+ });
202
+ it('syncCycle does nothing when disabled', async () => {
203
+ const engine = new BorgSyncEngine('brain', client, provider);
204
+ await engine.syncCycle();
205
+ expect(client.broadcast).not.toHaveBeenCalled();
206
+ });
207
+ it('syncCycle pulls from peers and imports', async () => {
208
+ const items = [makeItem({ id: 'local1', confidence: 0.9 })];
209
+ provider = createMockProvider(items);
210
+ provider.importItems.mockReturnValue(2);
211
+ const engine = new BorgSyncEngine('brain', client, provider, { enabled: true });
212
+ // First broadcast call (borgSync) returns empty
213
+ // Second broadcast call (borgExport) returns peer data
214
+ client.broadcast
215
+ .mockResolvedValueOnce([{ name: 'trading-brain', result: { accepted: 1, rejected: 0 } }])
216
+ .mockResolvedValueOnce([{
217
+ name: 'trading-brain',
218
+ result: {
219
+ source: 'trading-brain',
220
+ timestamp: new Date().toISOString(),
221
+ items: [
222
+ makeItem({ id: 'peer1', source: 'trading-brain', confidence: 0.7 }),
223
+ makeItem({ id: 'peer2', source: 'trading-brain', confidence: 0.8 }),
224
+ ],
225
+ },
226
+ }]);
227
+ await engine.syncCycle();
228
+ // Should have called broadcast twice: borgSync and borgExport
229
+ expect(client.broadcast).toHaveBeenCalledTimes(2);
230
+ expect(client.broadcast).toHaveBeenCalledWith('cross-brain.borgSync', expect.any(Object));
231
+ expect(client.broadcast).toHaveBeenCalledWith('cross-brain.borgExport', expect.any(Object));
232
+ // Should have imported peer items
233
+ expect(provider.importItems).toHaveBeenCalledWith(expect.arrayContaining([
234
+ expect.objectContaining({ id: 'peer1' }),
235
+ expect.objectContaining({ id: 'peer2' }),
236
+ ]), 'trading-brain');
237
+ engine.stop();
238
+ });
239
+ });
240
+ //# sourceMappingURL=borg-sync-engine.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"borg-sync-engine.test.js","sourceRoot":"","sources":["../../../src/cross-brain/__tests__/borg-sync-engine.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import type { CrossBrainClient } from './client.js';
2
+ import type { BorgConfig, SyncPacket, SyncItem, SyncHistoryEntry } from './borg-types.js';
3
+ export interface BorgDataProvider {
4
+ /** Return local items available for sharing. */
5
+ getShareableItems(): SyncItem[];
6
+ /** Import items received from a peer. Return count of accepted items. */
7
+ importItems(items: SyncItem[], source: string): number;
8
+ }
9
+ /**
10
+ * BorgSyncEngine — collective knowledge synchronization between brains.
11
+ *
12
+ * Opt-in. When enabled, periodically broadcasts local knowledge (rules, insights,
13
+ * patterns, memories) to peer brains and imports their knowledge back.
14
+ * Filtering by type, confidence, and relevance threshold.
15
+ */
16
+ export declare class BorgSyncEngine {
17
+ private brainName;
18
+ private crossBrain;
19
+ private dataProvider;
20
+ private logger;
21
+ private config;
22
+ private timer;
23
+ private history;
24
+ private maxHistory;
25
+ constructor(brainName: string, crossBrain: CrossBrainClient, dataProvider: BorgDataProvider, config?: Partial<BorgConfig>);
26
+ /** Start the periodic sync loop (if enabled). */
27
+ start(): void;
28
+ /** Stop the sync loop. */
29
+ stop(): void;
30
+ /** Enable or disable Borg mode at runtime. */
31
+ setEnabled(enabled: boolean): void;
32
+ /** Update config at runtime. */
33
+ updateConfig(partial: Partial<BorgConfig>): void;
34
+ /** Get current config. */
35
+ getConfig(): BorgConfig;
36
+ /** Get sync history. */
37
+ getHistory(limit?: number): SyncHistoryEntry[];
38
+ /** Get status summary. */
39
+ getStatus(): {
40
+ enabled: boolean;
41
+ mode: string;
42
+ syncIntervalMs: number;
43
+ totalSyncs: number;
44
+ totalSent: number;
45
+ totalReceived: number;
46
+ lastSync: string | null;
47
+ };
48
+ /** Run one sync cycle: broadcast own knowledge, then pull from peers. */
49
+ syncCycle(): Promise<void>;
50
+ /** Handle incoming borgSync from a peer. */
51
+ handleIncomingSync(packet: SyncPacket): {
52
+ accepted: number;
53
+ rejected: number;
54
+ };
55
+ /** Handle borgExport request — return our shareable items as a SyncPacket. */
56
+ handleExportRequest(): SyncPacket;
57
+ /** Filter items before sending: apply mode, type, and confidence filters. */
58
+ private filterOutgoing;
59
+ /** Filter items before importing: apply relevance threshold. */
60
+ private filterIncoming;
61
+ private addHistory;
62
+ }
@@ -0,0 +1,215 @@
1
+ import { getLogger } from '../utils/logger.js';
2
+ import { DEFAULT_BORG_CONFIG } from './borg-types.js';
3
+ /**
4
+ * BorgSyncEngine — collective knowledge synchronization between brains.
5
+ *
6
+ * Opt-in. When enabled, periodically broadcasts local knowledge (rules, insights,
7
+ * patterns, memories) to peer brains and imports their knowledge back.
8
+ * Filtering by type, confidence, and relevance threshold.
9
+ */
10
+ export class BorgSyncEngine {
11
+ brainName;
12
+ crossBrain;
13
+ dataProvider;
14
+ logger = getLogger();
15
+ config;
16
+ timer = null;
17
+ history = [];
18
+ maxHistory = 200;
19
+ constructor(brainName, crossBrain, dataProvider, config) {
20
+ this.brainName = brainName;
21
+ this.crossBrain = crossBrain;
22
+ this.dataProvider = dataProvider;
23
+ this.config = { ...DEFAULT_BORG_CONFIG, ...config };
24
+ }
25
+ /** Start the periodic sync loop (if enabled). */
26
+ start() {
27
+ if (!this.config.enabled) {
28
+ this.logger.debug('Borg sync disabled — skipping');
29
+ return;
30
+ }
31
+ this.logger.info(`Borg sync started (mode: ${this.config.mode}, interval: ${this.config.syncIntervalMs}ms)`);
32
+ this.timer = setInterval(() => {
33
+ this.syncCycle().catch(err => {
34
+ this.logger.error(`Borg sync cycle error: ${err.message}`);
35
+ });
36
+ }, this.config.syncIntervalMs);
37
+ // Initial sync after short delay
38
+ setTimeout(() => {
39
+ this.syncCycle().catch(() => { });
40
+ }, 5000);
41
+ }
42
+ /** Stop the sync loop. */
43
+ stop() {
44
+ if (this.timer) {
45
+ clearInterval(this.timer);
46
+ this.timer = null;
47
+ this.logger.info('Borg sync stopped');
48
+ }
49
+ }
50
+ /** Enable or disable Borg mode at runtime. */
51
+ setEnabled(enabled) {
52
+ const wasEnabled = this.config.enabled;
53
+ this.config.enabled = enabled;
54
+ if (enabled && !wasEnabled) {
55
+ this.start();
56
+ }
57
+ else if (!enabled && wasEnabled) {
58
+ this.stop();
59
+ }
60
+ }
61
+ /** Update config at runtime. */
62
+ updateConfig(partial) {
63
+ const wasEnabled = this.config.enabled;
64
+ this.config = { ...this.config, ...partial };
65
+ // Restart timer if interval changed and was running
66
+ if (wasEnabled && this.config.enabled && this.timer) {
67
+ this.stop();
68
+ this.start();
69
+ }
70
+ }
71
+ /** Get current config. */
72
+ getConfig() {
73
+ return { ...this.config };
74
+ }
75
+ /** Get sync history. */
76
+ getHistory(limit = 50) {
77
+ return this.history.slice(-limit);
78
+ }
79
+ /** Get status summary. */
80
+ getStatus() {
81
+ const sent = this.history.filter(h => h.direction === 'sent');
82
+ const received = this.history.filter(h => h.direction === 'received');
83
+ return {
84
+ enabled: this.config.enabled,
85
+ mode: this.config.mode,
86
+ syncIntervalMs: this.config.syncIntervalMs,
87
+ totalSyncs: this.history.length,
88
+ totalSent: sent.reduce((s, h) => s + h.itemCount, 0),
89
+ totalReceived: received.reduce((s, h) => s + h.accepted, 0),
90
+ lastSync: this.history.length > 0 ? this.history[this.history.length - 1].timestamp : null,
91
+ };
92
+ }
93
+ /** Run one sync cycle: broadcast own knowledge, then pull from peers. */
94
+ async syncCycle() {
95
+ if (!this.config.enabled)
96
+ return;
97
+ // 1. Gather local items to share
98
+ const allItems = this.dataProvider.getShareableItems();
99
+ const filtered = this.filterOutgoing(allItems);
100
+ if (filtered.length > 0) {
101
+ const packet = {
102
+ source: this.brainName,
103
+ timestamp: new Date().toISOString(),
104
+ items: filtered,
105
+ };
106
+ // Broadcast to all peers
107
+ try {
108
+ const results = await this.crossBrain.broadcast('cross-brain.borgSync', packet);
109
+ for (const r of results) {
110
+ const res = r.result;
111
+ this.addHistory({
112
+ timestamp: new Date().toISOString(),
113
+ direction: 'sent',
114
+ peer: r.name,
115
+ itemCount: filtered.length,
116
+ accepted: res?.accepted ?? 0,
117
+ rejected: res?.rejected ?? 0,
118
+ });
119
+ }
120
+ }
121
+ catch {
122
+ this.logger.debug('Borg broadcast failed (peers may be offline)');
123
+ }
124
+ }
125
+ // 2. Pull from peers
126
+ try {
127
+ const peerResults = await this.crossBrain.broadcast('cross-brain.borgExport', {
128
+ requester: this.brainName,
129
+ });
130
+ for (const r of peerResults) {
131
+ const packet = r.result;
132
+ if (!packet?.items?.length)
133
+ continue;
134
+ const incoming = this.filterIncoming(packet.items);
135
+ const accepted = this.dataProvider.importItems(incoming, r.name);
136
+ this.addHistory({
137
+ timestamp: new Date().toISOString(),
138
+ direction: 'received',
139
+ peer: r.name,
140
+ itemCount: packet.items.length,
141
+ accepted,
142
+ rejected: incoming.length - accepted,
143
+ });
144
+ }
145
+ }
146
+ catch {
147
+ this.logger.debug('Borg pull failed (peers may be offline)');
148
+ }
149
+ }
150
+ /** Handle incoming borgSync from a peer. */
151
+ handleIncomingSync(packet) {
152
+ if (!this.config.enabled) {
153
+ return { accepted: 0, rejected: packet.items?.length ?? 0 };
154
+ }
155
+ const items = this.filterIncoming(packet.items ?? []);
156
+ const accepted = this.dataProvider.importItems(items, packet.source);
157
+ this.addHistory({
158
+ timestamp: new Date().toISOString(),
159
+ direction: 'received',
160
+ peer: packet.source,
161
+ itemCount: packet.items?.length ?? 0,
162
+ accepted,
163
+ rejected: (packet.items?.length ?? 0) - accepted,
164
+ });
165
+ return { accepted, rejected: (packet.items?.length ?? 0) - accepted };
166
+ }
167
+ /** Handle borgExport request — return our shareable items as a SyncPacket. */
168
+ handleExportRequest() {
169
+ const items = this.config.enabled
170
+ ? this.filterOutgoing(this.dataProvider.getShareableItems())
171
+ : [];
172
+ return {
173
+ source: this.brainName,
174
+ timestamp: new Date().toISOString(),
175
+ items,
176
+ };
177
+ }
178
+ /** Filter items before sending: apply mode, type, and confidence filters. */
179
+ filterOutgoing(items) {
180
+ return items.filter(item => {
181
+ // Confidence gate
182
+ if (item.confidence < this.config.minConfidence)
183
+ return false;
184
+ // Selective mode: only share configured types
185
+ if (this.config.mode === 'selective') {
186
+ return this.config.shareTypes.includes(item.type);
187
+ }
188
+ // Full mode: share everything
189
+ return true;
190
+ });
191
+ }
192
+ /** Filter items before importing: apply relevance threshold. */
193
+ filterIncoming(items) {
194
+ return items.filter(item => {
195
+ // Don't import our own items back
196
+ if (item.source === this.brainName)
197
+ return false;
198
+ // Confidence must meet our threshold
199
+ if (item.confidence < this.config.relevanceThreshold)
200
+ return false;
201
+ // Selective mode: only accept configured types
202
+ if (this.config.mode === 'selective') {
203
+ return this.config.shareTypes.includes(item.type);
204
+ }
205
+ return true;
206
+ });
207
+ }
208
+ addHistory(entry) {
209
+ this.history.push(entry);
210
+ if (this.history.length > this.maxHistory) {
211
+ this.history = this.history.slice(-this.maxHistory);
212
+ }
213
+ }
214
+ }
215
+ //# sourceMappingURL=borg-sync-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"borg-sync-engine.js","sourceRoot":"","sources":["../../src/cross-brain/borg-sync-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ export interface BorgConfig {
2
+ enabled: boolean;
3
+ /** 'selective' = only shareTypes, 'full' = everything */
4
+ mode: 'selective' | 'full';
5
+ /** Sync interval in milliseconds. */
6
+ syncIntervalMs: number;
7
+ /** Only share these types in selective mode. */
8
+ shareTypes: string[];
9
+ /** Minimum confidence to share a rule/insight. */
10
+ minConfidence: number;
11
+ /** Minimum relevance score (0-1) to import from peers. */
12
+ relevanceThreshold: number;
13
+ }
14
+ export declare const DEFAULT_BORG_CONFIG: BorgConfig;
15
+ export interface SyncPacket {
16
+ source: string;
17
+ timestamp: string;
18
+ items: SyncItem[];
19
+ }
20
+ export interface SyncItem {
21
+ type: 'rule' | 'insight' | 'pattern' | 'memory';
22
+ id: string;
23
+ title: string;
24
+ content: string;
25
+ confidence: number;
26
+ source: string;
27
+ createdAt: string;
28
+ metadata?: Record<string, unknown>;
29
+ }
30
+ export interface SyncHistoryEntry {
31
+ timestamp: string;
32
+ direction: 'sent' | 'received';
33
+ peer: string;
34
+ itemCount: number;
35
+ accepted: number;
36
+ rejected: number;
37
+ }
@@ -0,0 +1,9 @@
1
+ export const DEFAULT_BORG_CONFIG = {
2
+ enabled: false,
3
+ mode: 'selective',
4
+ syncIntervalMs: 60_000,
5
+ shareTypes: ['rule', 'insight'],
6
+ minConfidence: 0.6,
7
+ relevanceThreshold: 0.3,
8
+ };
9
+ //# sourceMappingURL=borg-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"borg-types.js","sourceRoot":"","sources":["../../src/cross-brain/borg-types.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,MAAM,mBAAmB,GAAe;IAC7C,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,WAAW;IACjB,cAAc,EAAE,MAAM;IACtB,UAAU,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;IAC/B,aAAa,EAAE,GAAG;IAClB,kBAAkB,EAAE,GAAG;CACxB,CAAC"}
@@ -34,7 +34,8 @@ export class BaseEmbeddingEngine {
34
34
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
35
35
  let env;
36
36
  try {
37
- const transformers = await import('@huggingface/transformers');
37
+ const hfPath = '@huggingface/transformers';
38
+ const transformers = await import(/* webpackIgnore: true */ hfPath);
38
39
  pipelineFn = transformers.pipeline;
39
40
  env = transformers.env;
40
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/embeddings/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/embeddings/engine.ts"],"names":[],"mappings":"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"}