@timmeck/brain 3.36.59 → 3.36.60

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 (48) hide show
  1. package/dist/brain.js +14 -2
  2. package/dist/brain.js.map +1 -1
  3. package/dist/ipc/router.d.ts +1 -0
  4. package/dist/ipc/router.js +2 -0
  5. package/dist/ipc/router.js.map +1 -1
  6. package/package.json +1 -1
  7. package/dist/cli/commands/__tests__/borg.test.d.ts +0 -1
  8. package/dist/cli/commands/__tests__/borg.test.js +0 -84
  9. package/dist/cli/commands/__tests__/borg.test.js.map +0 -1
  10. package/dist/cli/commands/__tests__/plugins.test.d.ts +0 -1
  11. package/dist/cli/commands/__tests__/plugins.test.js +0 -69
  12. package/dist/cli/commands/__tests__/plugins.test.js.map +0 -1
  13. package/dist/cli/commands/__tests__/watchdog.test.d.ts +0 -1
  14. package/dist/cli/commands/__tests__/watchdog.test.js +0 -63
  15. package/dist/cli/commands/__tests__/watchdog.test.js.map +0 -1
  16. package/dist/hooks/__tests__/prompt-submit.test.d.ts +0 -1
  17. package/dist/hooks/__tests__/prompt-submit.test.js +0 -202
  18. package/dist/hooks/__tests__/prompt-submit.test.js.map +0 -1
  19. package/dist/init/__tests__/lifecycle.test.d.ts +0 -1
  20. package/dist/init/__tests__/lifecycle.test.js +0 -43
  21. package/dist/init/__tests__/lifecycle.test.js.map +0 -1
  22. package/dist/ipc/__tests__/notification-bridge.test.d.ts +0 -1
  23. package/dist/ipc/__tests__/notification-bridge.test.js +0 -155
  24. package/dist/ipc/__tests__/notification-bridge.test.js.map +0 -1
  25. package/dist/ipc/__tests__/protocol.test.d.ts +0 -1
  26. package/dist/ipc/__tests__/protocol.test.js +0 -117
  27. package/dist/ipc/__tests__/protocol.test.js.map +0 -1
  28. package/dist/learning/__tests__/confidence-scorer.test.d.ts +0 -1
  29. package/dist/learning/__tests__/confidence-scorer.test.js +0 -75
  30. package/dist/learning/__tests__/confidence-scorer.test.js.map +0 -1
  31. package/dist/mcp/__tests__/prompts.test.d.ts +0 -1
  32. package/dist/mcp/__tests__/prompts.test.js +0 -419
  33. package/dist/mcp/__tests__/prompts.test.js.map +0 -1
  34. package/dist/services/__tests__/auto-resolution.service.test.d.ts +0 -1
  35. package/dist/services/__tests__/auto-resolution.service.test.js +0 -838
  36. package/dist/services/__tests__/auto-resolution.service.test.js.map +0 -1
  37. package/dist/services/__tests__/error.service.auto-resolution.test.d.ts +0 -1
  38. package/dist/services/__tests__/error.service.auto-resolution.test.js +0 -320
  39. package/dist/services/__tests__/error.service.auto-resolution.test.js.map +0 -1
  40. package/dist/signals/__tests__/fingerprint.test.d.ts +0 -1
  41. package/dist/signals/__tests__/fingerprint.test.js +0 -118
  42. package/dist/signals/__tests__/fingerprint.test.js.map +0 -1
  43. package/dist/utils/__tests__/hash.test.d.ts +0 -1
  44. package/dist/utils/__tests__/hash.test.js +0 -32
  45. package/dist/utils/__tests__/hash.test.js.map +0 -1
  46. package/dist/utils/__tests__/paths.test.d.ts +0 -1
  47. package/dist/utils/__tests__/paths.test.js +0 -75
  48. package/dist/utils/__tests__/paths.test.js.map +0 -1
@@ -1,419 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { describe, it, expect, vi, beforeEach } from 'vitest';
3
- import { registerPromptsDirect } from '../prompts.js';
4
- describe('MCP Prompts (registerPromptsDirect)', () => {
5
- let registeredPrompts;
6
- let mockServer;
7
- let mockRouter;
8
- beforeEach(() => {
9
- vi.clearAllMocks();
10
- registeredPrompts = {};
11
- mockServer = {
12
- prompt: vi.fn((...args) => {
13
- // The prompt method can have 3 or 4 args before the callback
14
- const name = args[0];
15
- const cb = args[args.length - 1];
16
- registeredPrompts[name] = cb;
17
- }),
18
- };
19
- mockRouter = {
20
- handle: vi.fn(),
21
- };
22
- });
23
- it('registers all 4 prompts on the server', () => {
24
- registerPromptsDirect(mockServer, mockRouter);
25
- expect(mockServer.prompt).toHaveBeenCalledTimes(4);
26
- expect(registeredPrompts).toHaveProperty('brain-investigate-error');
27
- expect(registeredPrompts).toHaveProperty('brain-before-code-change');
28
- expect(registeredPrompts).toHaveProperty('brain-project-overview');
29
- expect(registeredPrompts).toHaveProperty('brain-review-solution');
30
- });
31
- describe('brain-investigate-error', () => {
32
- beforeEach(() => {
33
- registerPromptsDirect(mockServer, mockRouter);
34
- });
35
- it('calls error.report and returns structured response', async () => {
36
- mockRouter.handle
37
- .mockImplementation((method) => {
38
- if (method === 'error.report') {
39
- return {
40
- errorId: 1,
41
- isNew: true,
42
- matches: [],
43
- crossProjectMatches: [],
44
- };
45
- }
46
- if (method === 'synapse.context') {
47
- return { preventionRules: [], relevantModules: [] };
48
- }
49
- return {};
50
- });
51
- const result = await registeredPrompts['brain-investigate-error']({
52
- error_output: 'TypeError: cannot read property of undefined',
53
- });
54
- expect(mockRouter.handle).toHaveBeenCalledWith('error.report', {
55
- project: 'default',
56
- errorOutput: 'TypeError: cannot read property of undefined',
57
- });
58
- expect(mockRouter.handle).toHaveBeenCalledWith('synapse.context', { errorId: 1 });
59
- expect(result.messages).toHaveLength(1);
60
- expect(result.messages[0].role).toBe('user');
61
- expect(result.messages[0].content.type).toBe('text');
62
- expect(result.messages[0].content.text).toContain('Error #1');
63
- expect(result.messages[0].content.text).toContain('NEW');
64
- });
65
- it('includes suggestions when available', async () => {
66
- mockRouter.handle
67
- .mockImplementation((method) => {
68
- if (method === 'error.report') {
69
- return {
70
- errorId: 5,
71
- isNew: true,
72
- matches: [{ errorId: 2, score: 0.95, isStrong: true, signals: [] }],
73
- crossProjectMatches: [],
74
- suggestions: {
75
- errorId: 5,
76
- suggestions: [
77
- {
78
- category: 'auto',
79
- score: 0.92,
80
- solution: {
81
- id: 10,
82
- description: 'Install missing dependency',
83
- commands: 'npm install lodash',
84
- code_change: null,
85
- },
86
- reasoning: 'Matched error #2 (95% similar). 100% success rate.',
87
- },
88
- ],
89
- autoApply: {
90
- category: 'auto',
91
- score: 0.92,
92
- solution: { id: 10, description: 'Install missing dependency' },
93
- },
94
- totalConsidered: 1,
95
- },
96
- };
97
- }
98
- if (method === 'synapse.context') {
99
- return { preventionRules: [], relevantModules: [] };
100
- }
101
- return {};
102
- });
103
- const result = await registeredPrompts['brain-investigate-error']({
104
- error_output: 'ModuleNotFoundError: lodash',
105
- });
106
- const text = result.messages[0].content.text;
107
- expect(text).toContain('Solution Suggestions');
108
- expect(text).toContain('[AUTO]');
109
- expect(text).toContain('Solution #10');
110
- expect(text).toContain('92%');
111
- expect(text).toContain('Install missing dependency');
112
- expect(text).toContain('npm install lodash');
113
- expect(text).toContain('RECOMMENDED');
114
- });
115
- it('includes similar errors and cross-project matches', async () => {
116
- mockRouter.handle
117
- .mockImplementation((method) => {
118
- if (method === 'error.report') {
119
- return {
120
- errorId: 3,
121
- isNew: true,
122
- matches: [
123
- { errorId: 7, score: 0.88, isStrong: true, signals: [] },
124
- ],
125
- crossProjectMatches: [
126
- { errorId: 15, score: 0.72, isStrong: false, signals: [] },
127
- ],
128
- };
129
- }
130
- if (method === 'synapse.context') {
131
- return { preventionRules: [], relevantModules: [] };
132
- }
133
- return {};
134
- });
135
- const result = await registeredPrompts['brain-investigate-error']({
136
- error_output: 'SyntaxError: unexpected token',
137
- });
138
- const text = result.messages[0].content.text;
139
- expect(text).toContain('Similar Errors');
140
- expect(text).toContain('Error #7');
141
- expect(text).toContain('88%');
142
- expect(text).toContain('STRONG');
143
- expect(text).toContain('Cross-Project Matches');
144
- expect(text).toContain('Error #15');
145
- });
146
- it('includes prevention rules and related modules from synapse context', async () => {
147
- mockRouter.handle
148
- .mockImplementation((method) => {
149
- if (method === 'error.report') {
150
- return {
151
- errorId: 1,
152
- isNew: true,
153
- matches: [],
154
- crossProjectMatches: [],
155
- };
156
- }
157
- if (method === 'synapse.context') {
158
- return {
159
- preventionRules: [{ id: 1 }, { id: 2 }],
160
- relevantModules: [{ id: 10 }],
161
- };
162
- }
163
- return {};
164
- });
165
- const result = await registeredPrompts['brain-investigate-error']({
166
- error_output: 'Error: test',
167
- });
168
- const text = result.messages[0].content.text;
169
- expect(text).toContain('Prevention Rules');
170
- expect(text).toContain('2 prevention rules');
171
- expect(text).toContain('Related Code Modules');
172
- expect(text).toContain('1 code modules');
173
- });
174
- it('handles synapse.context failure gracefully', async () => {
175
- mockRouter.handle
176
- .mockImplementation((method) => {
177
- if (method === 'error.report') {
178
- return {
179
- errorId: 1,
180
- isNew: false,
181
- matches: [],
182
- crossProjectMatches: [],
183
- };
184
- }
185
- if (method === 'synapse.context') {
186
- throw new Error('Synapse not available');
187
- }
188
- return {};
189
- });
190
- const result = await registeredPrompts['brain-investigate-error']({
191
- error_output: 'Error: test',
192
- });
193
- // Should still return a valid result despite synapse error
194
- expect(result.messages).toHaveLength(1);
195
- expect(result.messages[0].content.text).toContain('Error #1');
196
- expect(result.messages[0].content.text).toContain('SEEN BEFORE');
197
- });
198
- });
199
- describe('brain-before-code-change', () => {
200
- beforeEach(() => {
201
- registerPromptsDirect(mockServer, mockRouter);
202
- });
203
- it('returns file advisory with errors and changes', async () => {
204
- mockRouter.handle
205
- .mockImplementation((method) => {
206
- if (method === 'error.query') {
207
- return [
208
- { id: 1, type: 'TypeError', message: 'cannot read property x', resolved: false },
209
- { id: 2, type: 'RangeError', message: 'index out of bounds', resolved: true },
210
- ];
211
- }
212
- if (method === 'changelog.query') {
213
- return [
214
- { change_type: 'refactor', summary: 'Extracted helper function', reason: 'DRY principle' },
215
- ];
216
- }
217
- if (method === 'rule.list') {
218
- return [{ id: 1 }, { id: 2 }, { id: 3 }];
219
- }
220
- if (method === 'decision.query') {
221
- return [
222
- { title: 'Use async/await', description: 'Decided to use async/await instead of callbacks for all new code in this module for consistency.' },
223
- ];
224
- }
225
- return [];
226
- });
227
- const result = await registeredPrompts['brain-before-code-change']({
228
- file_path: 'src/services/auth.ts',
229
- });
230
- const text = result.messages[0].content.text;
231
- expect(text).toContain('Brain Advisory: src/services/auth.ts');
232
- expect(text).toContain('Known Errors');
233
- expect(text).toContain('2 total');
234
- expect(text).toContain('1 unresolved');
235
- expect(text).toContain('#1');
236
- expect(text).toContain('UNRESOLVED');
237
- expect(text).toContain('Recent Changes');
238
- expect(text).toContain('Extracted helper function');
239
- expect(text).toContain('DRY principle');
240
- expect(text).toContain('Active Prevention Rules');
241
- expect(text).toContain('3 learned rules');
242
- expect(text).toContain('Related Decisions');
243
- expect(text).toContain('Use async/await');
244
- });
245
- it('calls correct IPC methods with file_path', async () => {
246
- mockRouter.handle.mockResolvedValue([]);
247
- await registeredPrompts['brain-before-code-change']({
248
- file_path: 'src/index.ts',
249
- });
250
- expect(mockRouter.handle).toHaveBeenCalledWith('error.query', { search: 'src/index.ts' });
251
- expect(mockRouter.handle).toHaveBeenCalledWith('changelog.query', { filePath: 'src/index.ts', limit: 5 });
252
- expect(mockRouter.handle).toHaveBeenCalledWith('rule.list', {});
253
- expect(mockRouter.handle).toHaveBeenCalledWith('decision.query', { query: 'src/index.ts', limit: 3 });
254
- });
255
- it('shows fallback message when no prior knowledge exists', async () => {
256
- mockRouter.handle
257
- .mockImplementation((method) => {
258
- if (method === 'error.query')
259
- return [];
260
- if (method === 'changelog.query')
261
- return [];
262
- if (method === 'rule.list')
263
- return [];
264
- if (method === 'decision.query')
265
- return [];
266
- return [];
267
- });
268
- const result = await registeredPrompts['brain-before-code-change']({
269
- file_path: 'brand-new-file.ts',
270
- });
271
- const text = result.messages[0].content.text;
272
- expect(text).toContain('No prior knowledge about this file');
273
- });
274
- it('handles all IPC calls failing gracefully', async () => {
275
- mockRouter.handle.mockImplementation(() => {
276
- throw new Error('Service unavailable');
277
- });
278
- const result = await registeredPrompts['brain-before-code-change']({
279
- file_path: 'src/broken.ts',
280
- });
281
- // Should still produce valid output — fallback message
282
- expect(result.messages).toHaveLength(1);
283
- expect(result.messages[0].content.text).toContain('No prior knowledge about this file');
284
- });
285
- });
286
- describe('brain-project-overview', () => {
287
- beforeEach(() => {
288
- registerPromptsDirect(mockServer, mockRouter);
289
- });
290
- it('returns health overview with stats', async () => {
291
- mockRouter.handle
292
- .mockImplementation((method) => {
293
- if (method === 'analytics.summary') {
294
- return {
295
- errors: { total: 42, unresolved: 5 },
296
- solutions: { total: 15 },
297
- rules: { active: 8 },
298
- modules: { total: 120 },
299
- insights: { active: 3 },
300
- };
301
- }
302
- if (method === 'synapse.stats') {
303
- return { totalSynapses: 200, totalNodes: 50, avgWeight: 0.456 };
304
- }
305
- if (method === 'synapse.list') {
306
- return [
307
- { sourceType: 'error', sourceId: 1, targetType: 'module', targetId: 5, weight: 0.95, type: 'similar_to' },
308
- ];
309
- }
310
- if (method === 'task.list') {
311
- return [
312
- { priority: 1, title: 'Fix auth bug' },
313
- ];
314
- }
315
- if (method === 'research.insights') {
316
- return [
317
- { type: 'pattern', title: 'Null checks missing', description: 'Multiple modules lack null checks on API responses.' },
318
- ];
319
- }
320
- return {};
321
- });
322
- const result = await registeredPrompts['brain-project-overview']({ project: 'my-app' });
323
- const text = result.messages[0].content.text;
324
- expect(text).toContain('Brain Project Intelligence: my-app');
325
- expect(text).toContain('Health Overview');
326
- expect(text).toContain('42 total');
327
- expect(text).toContain('5 unresolved');
328
- expect(text).toContain('15 recorded');
329
- expect(text).toContain('8 active learned rules');
330
- expect(text).toContain('120 indexed');
331
- expect(text).toContain('3 active');
332
- expect(text).toContain('Synapse Network');
333
- expect(text).toContain('200');
334
- expect(text).toContain('50 nodes');
335
- expect(text).toContain('0.456');
336
- expect(text).toContain('Strongest Connections');
337
- expect(text).toContain('error:1');
338
- expect(text).toContain('module:5');
339
- expect(text).toContain('Active Tasks');
340
- expect(text).toContain('Fix auth bug');
341
- expect(text).toContain('Recent Insights');
342
- expect(text).toContain('Null checks missing');
343
- });
344
- it('works without project name', async () => {
345
- mockRouter.handle.mockImplementation(() => {
346
- throw new Error('Not found');
347
- });
348
- const result = await registeredPrompts['brain-project-overview']({});
349
- const text = result.messages[0].content.text;
350
- expect(text).toContain('Brain Project Intelligence');
351
- expect(text).not.toContain(':');
352
- });
353
- });
354
- describe('brain-review-solution', () => {
355
- beforeEach(() => {
356
- registerPromptsDirect(mockServer, mockRouter);
357
- });
358
- it('returns solution details', async () => {
359
- mockRouter.handle
360
- .mockImplementation((method) => {
361
- if (method === 'solution.query') {
362
- return [{
363
- id: 7,
364
- description: 'Add null check before accessing property',
365
- commands: 'npm run lint --fix',
366
- code_change: '- obj.prop\n+ obj?.prop',
367
- source: 'human',
368
- confidence: 0.88,
369
- success_count: 5,
370
- fail_count: 1,
371
- }];
372
- }
373
- if (method === 'solution.efficiency') {
374
- return {
375
- avgDurationMs: 1200,
376
- successRateOverall: 0.83,
377
- totalAttempts: 6,
378
- };
379
- }
380
- return {};
381
- });
382
- const result = await registeredPrompts['brain-review-solution']({
383
- solution_id: '7',
384
- });
385
- const text = result.messages[0].content.text;
386
- expect(text).toContain('Solution Review');
387
- expect(text).toContain('Solution #7');
388
- expect(text).toContain('Add null check before accessing property');
389
- expect(text).toContain('npm run lint --fix');
390
- expect(text).toContain('obj?.prop');
391
- expect(text).toContain('human');
392
- expect(text).toContain('88%');
393
- expect(text).toContain('5 successes');
394
- expect(text).toContain('1 failures');
395
- expect(text).toContain('Overall Solution Statistics');
396
- expect(text).toContain('1200');
397
- expect(text).toContain('83%');
398
- expect(text).toContain('6');
399
- });
400
- it('calls solution.query with parsed integer errorId', async () => {
401
- mockRouter.handle.mockImplementation(() => {
402
- throw new Error('Not found');
403
- });
404
- await registeredPrompts['brain-review-solution']({ solution_id: '42' });
405
- expect(mockRouter.handle).toHaveBeenCalledWith('solution.query', { errorId: 42 });
406
- });
407
- it('handles missing solution gracefully', async () => {
408
- mockRouter.handle.mockImplementation(() => {
409
- throw new Error('Solution not found');
410
- });
411
- const result = await registeredPrompts['brain-review-solution']({
412
- solution_id: '999',
413
- });
414
- const text = result.messages[0].content.text;
415
- expect(text).toContain('Could not retrieve solution details');
416
- });
417
- });
418
- });
419
- //# sourceMappingURL=prompts.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompts.test.js","sourceRoot":"","sources":["../../../src/mcp/__tests__/prompts.test.ts"],"names":[],"mappings":"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"}