@raviolelabs/engram-mcp 0.5.3 → 0.5.5

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 (180) hide show
  1. package/dist/cloud/bridge-client.d.ts.map +1 -1
  2. package/dist/cloud/bridge-client.js +14 -1
  3. package/dist/cloud/bridge-client.js.map +1 -1
  4. package/dist/cloud/pairing.d.ts.map +1 -1
  5. package/dist/cloud/pairing.js +45 -4
  6. package/dist/cloud/pairing.js.map +1 -1
  7. package/dist/core/db/index.d.ts.map +1 -1
  8. package/dist/core/db/index.js +31 -15
  9. package/dist/core/db/index.js.map +1 -1
  10. package/dist/core/logger.d.ts.map +1 -1
  11. package/dist/core/logger.js +22 -4
  12. package/dist/core/logger.js.map +1 -1
  13. package/dist/core/server/http.d.ts.map +1 -1
  14. package/dist/core/server/http.js +14 -3
  15. package/dist/core/server/http.js.map +1 -1
  16. package/package.json +1 -2
  17. package/dist/mcp-server/tests/mcp-e2e.test.d.ts +0 -2
  18. package/dist/mcp-server/tests/mcp-e2e.test.d.ts.map +0 -1
  19. package/dist/mcp-server/tests/mcp-e2e.test.js +0 -157
  20. package/dist/mcp-server/tests/mcp-e2e.test.js.map +0 -1
  21. package/dist/memory/modules/_custom/tests/custom-types.test.d.ts +0 -2
  22. package/dist/memory/modules/_custom/tests/custom-types.test.d.ts.map +0 -1
  23. package/dist/memory/modules/_custom/tests/custom-types.test.js +0 -96
  24. package/dist/memory/modules/_custom/tests/custom-types.test.js.map +0 -1
  25. package/dist/memory/modules/audio/tests/audio.test.d.ts +0 -2
  26. package/dist/memory/modules/audio/tests/audio.test.d.ts.map +0 -1
  27. package/dist/memory/modules/audio/tests/audio.test.js +0 -66
  28. package/dist/memory/modules/audio/tests/audio.test.js.map +0 -1
  29. package/dist/memory/modules/audio/tests/transcriber.test.d.ts +0 -2
  30. package/dist/memory/modules/audio/tests/transcriber.test.d.ts.map +0 -1
  31. package/dist/memory/modules/audio/tests/transcriber.test.js +0 -27
  32. package/dist/memory/modules/audio/tests/transcriber.test.js.map +0 -1
  33. package/dist/memory/modules/conversations/tests/conversations.test.d.ts +0 -2
  34. package/dist/memory/modules/conversations/tests/conversations.test.d.ts.map +0 -1
  35. package/dist/memory/modules/conversations/tests/conversations.test.js +0 -75
  36. package/dist/memory/modules/conversations/tests/conversations.test.js.map +0 -1
  37. package/dist/memory/modules/drive/tests/drive.test.d.ts +0 -2
  38. package/dist/memory/modules/drive/tests/drive.test.d.ts.map +0 -1
  39. package/dist/memory/modules/drive/tests/drive.test.js +0 -66
  40. package/dist/memory/modules/drive/tests/drive.test.js.map +0 -1
  41. package/dist/memory/modules/notes/tests/notes.test.d.ts +0 -2
  42. package/dist/memory/modules/notes/tests/notes.test.d.ts.map +0 -1
  43. package/dist/memory/modules/notes/tests/notes.test.js +0 -64
  44. package/dist/memory/modules/notes/tests/notes.test.js.map +0 -1
  45. package/dist/memory/modules/notion/tests/notion.test.d.ts +0 -2
  46. package/dist/memory/modules/notion/tests/notion.test.d.ts.map +0 -1
  47. package/dist/memory/modules/notion/tests/notion.test.js +0 -53
  48. package/dist/memory/modules/notion/tests/notion.test.js.map +0 -1
  49. package/dist/memory/modules/obsidian/tests/obsidian.test.d.ts +0 -2
  50. package/dist/memory/modules/obsidian/tests/obsidian.test.d.ts.map +0 -1
  51. package/dist/memory/modules/obsidian/tests/obsidian.test.js +0 -72
  52. package/dist/memory/modules/obsidian/tests/obsidian.test.js.map +0 -1
  53. package/dist/memory/modules/obsidian/tests/vault-reader.test.d.ts +0 -2
  54. package/dist/memory/modules/obsidian/tests/vault-reader.test.d.ts.map +0 -1
  55. package/dist/memory/modules/obsidian/tests/vault-reader.test.js +0 -37
  56. package/dist/memory/modules/obsidian/tests/vault-reader.test.js.map +0 -1
  57. package/dist/memory/modules/youtube/tests/channel.test.d.ts +0 -2
  58. package/dist/memory/modules/youtube/tests/channel.test.d.ts.map +0 -1
  59. package/dist/memory/modules/youtube/tests/channel.test.js +0 -61
  60. package/dist/memory/modules/youtube/tests/channel.test.js.map +0 -1
  61. package/dist/memory/modules/youtube/tests/transcript-fetcher.test.d.ts +0 -2
  62. package/dist/memory/modules/youtube/tests/transcript-fetcher.test.d.ts.map +0 -1
  63. package/dist/memory/modules/youtube/tests/transcript-fetcher.test.js +0 -23
  64. package/dist/memory/modules/youtube/tests/transcript-fetcher.test.js.map +0 -1
  65. package/dist/memory/modules/youtube/tests/youtube.test.d.ts +0 -2
  66. package/dist/memory/modules/youtube/tests/youtube.test.d.ts.map +0 -1
  67. package/dist/memory/modules/youtube/tests/youtube.test.js +0 -61
  68. package/dist/memory/modules/youtube/tests/youtube.test.js.map +0 -1
  69. package/dist/sync/tests/apply.test.d.ts +0 -4
  70. package/dist/sync/tests/apply.test.d.ts.map +0 -1
  71. package/dist/sync/tests/apply.test.js +0 -117
  72. package/dist/sync/tests/apply.test.js.map +0 -1
  73. package/dist/sync/tests/ops-log.test.d.ts +0 -2
  74. package/dist/sync/tests/ops-log.test.d.ts.map +0 -1
  75. package/dist/sync/tests/ops-log.test.js +0 -105
  76. package/dist/sync/tests/ops-log.test.js.map +0 -1
  77. package/dist/sync/tests/two-device-sync.test.d.ts +0 -2
  78. package/dist/sync/tests/two-device-sync.test.d.ts.map +0 -1
  79. package/dist/sync/tests/two-device-sync.test.js +0 -250
  80. package/dist/sync/tests/two-device-sync.test.js.map +0 -1
  81. package/dist/tests/chunker.test.d.ts +0 -2
  82. package/dist/tests/chunker.test.d.ts.map +0 -1
  83. package/dist/tests/chunker.test.js +0 -24
  84. package/dist/tests/chunker.test.js.map +0 -1
  85. package/dist/tests/cloud-auth.test.d.ts +0 -2
  86. package/dist/tests/cloud-auth.test.d.ts.map +0 -1
  87. package/dist/tests/cloud-auth.test.js +0 -75
  88. package/dist/tests/cloud-auth.test.js.map +0 -1
  89. package/dist/tests/cloud-crypto.test.d.ts +0 -2
  90. package/dist/tests/cloud-crypto.test.d.ts.map +0 -1
  91. package/dist/tests/cloud-crypto.test.js +0 -58
  92. package/dist/tests/cloud-crypto.test.js.map +0 -1
  93. package/dist/tests/cloud-integration.test.d.ts +0 -2
  94. package/dist/tests/cloud-integration.test.d.ts.map +0 -1
  95. package/dist/tests/cloud-integration.test.js +0 -193
  96. package/dist/tests/cloud-integration.test.js.map +0 -1
  97. package/dist/tests/cloud-pairing.test.d.ts +0 -2
  98. package/dist/tests/cloud-pairing.test.d.ts.map +0 -1
  99. package/dist/tests/cloud-pairing.test.js +0 -86
  100. package/dist/tests/cloud-pairing.test.js.map +0 -1
  101. package/dist/tests/cloud-saves-integration.test.d.ts +0 -2
  102. package/dist/tests/cloud-saves-integration.test.d.ts.map +0 -1
  103. package/dist/tests/cloud-saves-integration.test.js +0 -92
  104. package/dist/tests/cloud-saves-integration.test.js.map +0 -1
  105. package/dist/tests/cloud-transit.test.d.ts +0 -2
  106. package/dist/tests/cloud-transit.test.d.ts.map +0 -1
  107. package/dist/tests/cloud-transit.test.js +0 -263
  108. package/dist/tests/cloud-transit.test.js.map +0 -1
  109. package/dist/tests/config.test.d.ts +0 -2
  110. package/dist/tests/config.test.d.ts.map +0 -1
  111. package/dist/tests/config.test.js +0 -25
  112. package/dist/tests/config.test.js.map +0 -1
  113. package/dist/tests/db.test.d.ts +0 -2
  114. package/dist/tests/db.test.d.ts.map +0 -1
  115. package/dist/tests/db.test.js +0 -73
  116. package/dist/tests/db.test.js.map +0 -1
  117. package/dist/tests/embeddings-providers.test.d.ts +0 -2
  118. package/dist/tests/embeddings-providers.test.d.ts.map +0 -1
  119. package/dist/tests/embeddings-providers.test.js +0 -62
  120. package/dist/tests/embeddings-providers.test.js.map +0 -1
  121. package/dist/tests/embeddings.test.d.ts +0 -2
  122. package/dist/tests/embeddings.test.d.ts.map +0 -1
  123. package/dist/tests/embeddings.test.js +0 -22
  124. package/dist/tests/embeddings.test.js.map +0 -1
  125. package/dist/tests/integrations-api.test.d.ts +0 -2
  126. package/dist/tests/integrations-api.test.d.ts.map +0 -1
  127. package/dist/tests/integrations-api.test.js +0 -129
  128. package/dist/tests/integrations-api.test.js.map +0 -1
  129. package/dist/tests/memory-store.test.d.ts +0 -2
  130. package/dist/tests/memory-store.test.d.ts.map +0 -1
  131. package/dist/tests/memory-store.test.js +0 -129
  132. package/dist/tests/memory-store.test.js.map +0 -1
  133. package/dist/tests/module-registry.test.d.ts +0 -2
  134. package/dist/tests/module-registry.test.d.ts.map +0 -1
  135. package/dist/tests/module-registry.test.js +0 -44
  136. package/dist/tests/module-registry.test.js.map +0 -1
  137. package/dist/tests/property-extractor.test.d.ts +0 -2
  138. package/dist/tests/property-extractor.test.d.ts.map +0 -1
  139. package/dist/tests/property-extractor.test.js +0 -24
  140. package/dist/tests/property-extractor.test.js.map +0 -1
  141. package/dist/tests/public-tools.test.d.ts +0 -2
  142. package/dist/tests/public-tools.test.d.ts.map +0 -1
  143. package/dist/tests/public-tools.test.js +0 -286
  144. package/dist/tests/public-tools.test.js.map +0 -1
  145. package/dist/tests/reindex.test.d.ts +0 -2
  146. package/dist/tests/reindex.test.d.ts.map +0 -1
  147. package/dist/tests/reindex.test.js +0 -58
  148. package/dist/tests/reindex.test.js.map +0 -1
  149. package/dist/tests/scope-encryption.test.d.ts +0 -2
  150. package/dist/tests/scope-encryption.test.d.ts.map +0 -1
  151. package/dist/tests/scope-encryption.test.js +0 -71
  152. package/dist/tests/scope-encryption.test.js.map +0 -1
  153. package/dist/tests/shamir.test.d.ts +0 -2
  154. package/dist/tests/shamir.test.d.ts.map +0 -1
  155. package/dist/tests/shamir.test.js +0 -57
  156. package/dist/tests/shamir.test.js.map +0 -1
  157. package/dist/tests/source-registry.test.d.ts +0 -2
  158. package/dist/tests/source-registry.test.d.ts.map +0 -1
  159. package/dist/tests/source-registry.test.js +0 -58
  160. package/dist/tests/source-registry.test.js.map +0 -1
  161. package/dist/tests/types.test.d.ts +0 -2
  162. package/dist/tests/types.test.d.ts.map +0 -1
  163. package/dist/tests/types.test.js +0 -26
  164. package/dist/tests/types.test.js.map +0 -1
  165. package/dist/tests/vector.test.d.ts +0 -2
  166. package/dist/tests/vector.test.d.ts.map +0 -1
  167. package/dist/tests/vector.test.js +0 -61
  168. package/dist/tests/vector.test.js.map +0 -1
  169. package/dist/tests/wikilinks.test.d.ts +0 -2
  170. package/dist/tests/wikilinks.test.d.ts.map +0 -1
  171. package/dist/tests/wikilinks.test.js +0 -20
  172. package/dist/tests/wikilinks.test.js.map +0 -1
  173. package/dist/webapp/tests/api.test.d.ts +0 -2
  174. package/dist/webapp/tests/api.test.d.ts.map +0 -1
  175. package/dist/webapp/tests/api.test.js +0 -125
  176. package/dist/webapp/tests/api.test.js.map +0 -1
  177. package/dist/webapp/tests/mcp-http.test.d.ts +0 -2
  178. package/dist/webapp/tests/mcp-http.test.d.ts.map +0 -1
  179. package/dist/webapp/tests/mcp-http.test.js +0 -47
  180. package/dist/webapp/tests/mcp-http.test.js.map +0 -1
@@ -1,96 +0,0 @@
1
- // src/memory/modules/_custom/tests/custom-types.test.ts
2
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
3
- import fs from 'fs';
4
- import os from 'os';
5
- import path from 'path';
6
- import { initDb, closeDb } from '../../../../db/index.js';
7
- import { initVectorStore } from '../../../../vector/store.js';
8
- import { MemoryStore } from '../../../core/store.js';
9
- import { moduleRegistry } from '../../../core/module-registry.js';
10
- import { ToolRouter } from '../../../../mcp-server/tool-router.js';
11
- import { buildCustomTypeTools, loadAndRegisterCustomTypes } from '../tools.js';
12
- import { createCustomType, listCustomTypes, deleteCustomType } from '../persistence.js';
13
- const config = {
14
- dataDir: '~/.engram',
15
- embeddings: {
16
- provider: 'ollama',
17
- baseUrl: 'http://localhost:11434',
18
- model: 'nomic-embed-text',
19
- dimensions: 768,
20
- },
21
- drive: undefined,
22
- notion: undefined,
23
- propertyExtraction: {
24
- enabled: false,
25
- baseUrl: 'http://localhost:11434',
26
- model: 'llama3.2:3b',
27
- maxTokens: 300,
28
- },
29
- whisper: { enabled: true, model: 'small.en', language: 'auto' },
30
- youtube: { enabled: true, preferLanguage: 'en', fallbackToYtdlp: false },
31
- modules: {},
32
- mcp: { stdio: true, httpPort: 7777 },
33
- };
34
- describe('custom types e2e', () => {
35
- let tmpDir;
36
- let store;
37
- let router;
38
- beforeEach(() => {
39
- tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'engram-custom-'));
40
- initDb(tmpDir);
41
- initVectorStore(tmpDir);
42
- store = new MemoryStore({ embeddings: config.embeddings });
43
- router = new ToolRouter();
44
- // Clear the registry between tests
45
- for (const m of moduleRegistry.list()) {
46
- moduleRegistry.modules.delete(m.id);
47
- }
48
- moduleRegistry.booted = false;
49
- });
50
- afterEach(() => {
51
- closeDb();
52
- fs.rmSync(tmpDir, { recursive: true, force: true });
53
- });
54
- it('persistence: create + list + delete', () => {
55
- createCustomType({ type_name: 'recipes', display_name: 'Recipes' });
56
- let defs = listCustomTypes();
57
- expect(defs.map((d) => d.type_name)).toContain('recipes');
58
- deleteCustomType('recipes');
59
- defs = listCustomTypes();
60
- expect(defs.map((d) => d.type_name)).not.toContain('recipes');
61
- });
62
- it('rejects reserved names', () => {
63
- expect(() => createCustomType({ type_name: 'notes', display_name: 'Notes' })).toThrow(/reserved/);
64
- });
65
- it('create_custom_type registers add_X / search_X tools live', async () => {
66
- const tools = buildCustomTypeTools(store, config, router);
67
- const result = (await tools
68
- .find((t) => t.name === 'create_custom_type')
69
- .handler({
70
- type_name: 'recipes',
71
- display_name: 'Recipes',
72
- }));
73
- expect(result.tools).toContain('add_recipes');
74
- expect(result.tools).toContain('search_recipes');
75
- // The tool router now has them
76
- const addRecipe = router.list().find((t) => t.name === 'add_recipes');
77
- const searchRecipe = router.list().find((t) => t.name === 'search_recipes');
78
- await addRecipe.handler({
79
- content: 'Pasta carbonara: pancetta, eggs, pecorino, black pepper. Tossed off-heat to keep eggs creamy.',
80
- title: 'Carbonara',
81
- });
82
- const hits = (await searchRecipe.handler({ query: 'pasta eggs cheese' }));
83
- expect(hits.length).toBeGreaterThan(0);
84
- }, 30_000);
85
- it('loadAndRegisterCustomTypes restores types at boot', async () => {
86
- createCustomType({ type_name: 'recipes', display_name: 'Recipes' });
87
- createCustomType({ type_name: 'dream_journal', display_name: 'Dream Journal' });
88
- loadAndRegisterCustomTypes(store, config, router);
89
- const toolNames = router.list().map((t) => t.name);
90
- expect(toolNames).toContain('add_recipes');
91
- expect(toolNames).toContain('search_recipes');
92
- expect(toolNames).toContain('add_dream_journal');
93
- expect(toolNames).toContain('search_dream_journal');
94
- });
95
- });
96
- //# sourceMappingURL=custom-types.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"custom-types.test.js","sourceRoot":"","sources":["../../../../../src/memory/modules/_custom/tests/custom-types.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=audio.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"audio.test.d.ts","sourceRoot":"","sources":["../../../../../src/memory/modules/audio/tests/audio.test.ts"],"names":[],"mappings":""}
@@ -1,66 +0,0 @@
1
- // src/memory/modules/audio/tests/audio.test.ts
2
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
3
- import fs from 'fs';
4
- import os from 'os';
5
- import path from 'path';
6
- import { initDb, closeDb } from '../../../../db/index.js';
7
- import { initVectorStore } from '../../../../vector/store.js';
8
- import { MemoryStore } from '../../../core/store.js';
9
- import { buildAudioModuleTools } from '../module.js';
10
- const TEST_AUDIO = path.join(import.meta.dirname, 'fixtures', 'hello.wav');
11
- const config = {
12
- dataDir: '~/.engram',
13
- embeddings: {
14
- provider: 'ollama',
15
- baseUrl: 'http://localhost:11434',
16
- model: 'nomic-embed-text',
17
- dimensions: 768,
18
- },
19
- drive: undefined,
20
- notion: undefined,
21
- propertyExtraction: {
22
- enabled: false,
23
- baseUrl: 'http://localhost:11434',
24
- model: 'llama3.2:3b',
25
- maxTokens: 300,
26
- },
27
- whisper: { enabled: true, model: 'tiny.en', language: 'en' },
28
- youtube: { enabled: true, preferLanguage: 'en', fallbackToYtdlp: true },
29
- modules: { audio: { enabled: true } },
30
- mcp: { stdio: true, httpPort: 7777 },
31
- };
32
- describe('audio module e2e (real Whisper + LanceDB)', () => {
33
- let tmpDir;
34
- let store;
35
- beforeEach(() => {
36
- tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'engram-audio-'));
37
- initDb(tmpDir);
38
- initVectorStore(tmpDir);
39
- store = new MemoryStore({ embeddings: config.embeddings });
40
- });
41
- afterEach(() => {
42
- closeDb();
43
- fs.rmSync(tmpDir, { recursive: true, force: true });
44
- });
45
- it('add_audio_file → search_audio finds the transcript', async () => {
46
- if (!fs.existsSync(TEST_AUDIO)) {
47
- console.warn('Skipping: hello.wav fixture not generated');
48
- return;
49
- }
50
- const tools = buildAudioModuleTools(store, config);
51
- const addRes = (await tools
52
- .find((t) => t.name === 'add_audio_file')
53
- .handler({
54
- path: TEST_AUDIO,
55
- }));
56
- expect(addRes.id).toBeDefined();
57
- expect(addRes.duration).toBeGreaterThan(0);
58
- const hits = (await tools
59
- .find((t) => t.name === 'search_audio')
60
- .handler({
61
- query: 'hello test',
62
- }));
63
- expect(hits.some((h) => h.id === addRes.id)).toBe(true);
64
- }, 180_000);
65
- });
66
- //# sourceMappingURL=audio.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"audio.test.js","sourceRoot":"","sources":["../../../../../src/memory/modules/audio/tests/audio.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=transcriber.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transcriber.test.d.ts","sourceRoot":"","sources":["../../../../../src/memory/modules/audio/tests/transcriber.test.ts"],"names":[],"mappings":""}
@@ -1,27 +0,0 @@
1
- // src/memory/modules/audio/tests/transcriber.test.ts
2
- import { describe, it, expect } from 'vitest';
3
- import fs from 'fs';
4
- import path from 'path';
5
- import { transcribeAudio } from '../transcriber.js';
6
- const TEST_AUDIO = path.join(import.meta.dirname, 'fixtures', 'hello.wav');
7
- describe('whisper transcriber (real whisper.cpp)', () => {
8
- it('skips if test audio is not present', () => {
9
- if (!fs.existsSync(TEST_AUDIO)) {
10
- console.warn(`Test audio not found: ${TEST_AUDIO}. Create it with:`);
11
- console.warn(` say -o ${TEST_AUDIO} --data-format=LEF32@16000 'hello world this is a test'`);
12
- return;
13
- }
14
- });
15
- it('transcribes a short audio file', async () => {
16
- if (!fs.existsSync(TEST_AUDIO))
17
- return; // skip when fixture missing
18
- const result = await transcribeAudio(TEST_AUDIO, {
19
- enabled: true,
20
- model: 'tiny.en',
21
- language: 'en',
22
- });
23
- expect(result.full_text.toLowerCase()).toMatch(/hello|test/);
24
- expect(result.segments.length).toBeGreaterThan(0);
25
- }, 120_000);
26
- });
27
- //# sourceMappingURL=transcriber.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transcriber.test.js","sourceRoot":"","sources":["../../../../../src/memory/modules/audio/tests/transcriber.test.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;AAE3E,QAAQ,CAAC,wCAAwC,EAAE,GAAG,EAAE;IACtD,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,yBAAyB,UAAU,mBAAmB,CAAC,CAAC;YACrE,OAAO,CAAC,IAAI,CAAC,YAAY,UAAU,yDAAyD,CAAC,CAAC;YAC9F,OAAO;QACT,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAC9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,OAAO,CAAC,4BAA4B;QAEpE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE;YAC/C,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC,EAAE,OAAO,CAAC,CAAC;AACd,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=conversations.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"conversations.test.d.ts","sourceRoot":"","sources":["../../../../../src/memory/modules/conversations/tests/conversations.test.ts"],"names":[],"mappings":""}
@@ -1,75 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import fs from 'fs';
3
- import os from 'os';
4
- import path from 'path';
5
- import { initDb, closeDb } from '../../../../db/index.js';
6
- import { initVectorStore } from '../../../../vector/store.js';
7
- import { MemoryStore } from '../../../core/store.js';
8
- import { createConversationsModule, buildConversationsModuleTools } from '../module.js';
9
- const config = {
10
- dataDir: '~/.engram',
11
- embeddings: {
12
- provider: 'ollama',
13
- baseUrl: 'http://localhost:11434',
14
- model: 'nomic-embed-text',
15
- dimensions: 768,
16
- },
17
- drive: undefined,
18
- notion: undefined,
19
- propertyExtraction: {
20
- enabled: false, // keep tests fast; extraction tested separately
21
- baseUrl: 'http://localhost:11434',
22
- model: 'llama3.2:3b',
23
- maxTokens: 300,
24
- },
25
- whisper: { enabled: true, model: 'small.en', language: 'auto' },
26
- youtube: { enabled: true, preferLanguage: 'en', fallbackToYtdlp: true },
27
- modules: { conversations: { enabled: true } },
28
- mcp: { stdio: true, httpPort: 7777 },
29
- };
30
- describe('conversations module', () => {
31
- let tmpDir;
32
- let store;
33
- beforeEach(async () => {
34
- tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'engram-conv-'));
35
- initDb(tmpDir);
36
- initVectorStore(tmpDir);
37
- store = new MemoryStore({ embeddings: config.embeddings });
38
- const mod = createConversationsModule(config);
39
- await mod.onBoot({ store });
40
- });
41
- afterEach(() => {
42
- closeDb();
43
- fs.rmSync(tmpDir, { recursive: true, force: true });
44
- });
45
- it('remember_exchange stores and search_conversations retrieves it', async () => {
46
- const tools = buildConversationsModuleTools(store, config);
47
- const remember = tools.find((t) => t.name === 'remember_exchange');
48
- const search = tools.find((t) => t.name === 'search_conversations');
49
- await remember.handler({
50
- user_message: 'What do you think of bonding curves for prediction markets?',
51
- assistant_message: 'Bonding curves give continuous liquidity and avoid the LP problem of CPMM. Trade-off: harder pricing.',
52
- agent: 'claude-code',
53
- });
54
- const results = (await search.handler({ query: 'prediction market liquidity' }));
55
- expect(results.length).toBeGreaterThan(0);
56
- expect(results[0].agent).toBe('claude-code');
57
- expect(results[0].score).toBeGreaterThan(0.3);
58
- }, 30_000);
59
- it('ingest() via module accepts JSON content', async () => {
60
- const mod = createConversationsModule(config);
61
- await mod.onBoot({ store });
62
- const items = await mod.ingest({
63
- content: JSON.stringify({
64
- user_message: 'hi',
65
- assistant_message: 'hello',
66
- }),
67
- source_id: 'test:1',
68
- });
69
- expect(items).toHaveLength(1);
70
- expect(items[0].type).toBe('conversations');
71
- expect(items[0].content).toContain('User: hi');
72
- expect(items[0].content).toContain('Assistant: hello');
73
- });
74
- });
75
- //# sourceMappingURL=conversations.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"conversations.test.js","sourceRoot":"","sources":["../../../../../src/memory/modules/conversations/tests/conversations.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=drive.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"drive.test.d.ts","sourceRoot":"","sources":["../../../../../src/memory/modules/drive/tests/drive.test.ts"],"names":[],"mappings":""}
@@ -1,66 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import fs from 'fs';
3
- import os from 'os';
4
- import path from 'path';
5
- import { initDb, closeDb, getDb } from '../../../../db/index.js';
6
- import { initVectorStore } from '../../../../vector/store.js';
7
- import { MemoryStore } from '../../../core/store.js';
8
- import { sourceRegistry } from '../../../core/source-registry.js';
9
- import { buildDriveItem } from '../ingest.js';
10
- const embeddingsConfig = {
11
- provider: 'ollama',
12
- baseUrl: 'http://localhost:11434',
13
- model: 'nomic-embed-text',
14
- dimensions: 768,
15
- };
16
- describe('drive module integration (token + registry + ingest)', () => {
17
- let tmpDir;
18
- let store;
19
- beforeEach(() => {
20
- tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'engram-drive-'));
21
- initDb(tmpDir);
22
- initVectorStore(tmpDir);
23
- store = new MemoryStore({ embeddings: embeddingsConfig });
24
- });
25
- afterEach(() => {
26
- closeDb();
27
- fs.rmSync(tmpDir, { recursive: true, force: true });
28
- });
29
- it('stores OAuth tokens via direct DB write and reads them back', () => {
30
- getDb()
31
- .prepare(`INSERT INTO oauth_tokens (provider, access_token, refresh_token, expires_at, extra_json, updated_at)
32
- VALUES ('drive', 'fake', 'fakerefresh', ?, '{}', ?)`)
33
- .run(Date.now() + 3_600_000, Date.now());
34
- const row = getDb()
35
- .prepare("SELECT access_token FROM oauth_tokens WHERE provider = 'drive'")
36
- .get();
37
- expect(row?.access_token).toBe('fake');
38
- });
39
- it('buildDriveItem + insert + search round-trips', async () => {
40
- const item = buildDriveItem({
41
- metadata: {
42
- id: 'doc-123',
43
- name: 'Quarterly Roadmap',
44
- mimeType: 'application/vnd.google-apps.document',
45
- modifiedTime: '2026-05-15T10:00:00Z',
46
- },
47
- content: 'The roadmap focuses on memory ingestion improvements and cloud transit hardening.',
48
- embeddingModel: 'nomic-embed-text:v1.5',
49
- });
50
- await store.insert(item);
51
- const hits = await store.search('drive', 'cloud transit', 5);
52
- expect(hits.length).toBeGreaterThan(0);
53
- expect(hits[0].memory.id).toBe(item.id);
54
- });
55
- it('watcher records sync timestamps via sourceRegistry', () => {
56
- const id = sourceRegistry.add({
57
- module_id: 'drive',
58
- external_id: 'doc-X',
59
- display_name: 'X',
60
- });
61
- sourceRegistry.recordSync(id, '2026-05-15T11:00:00Z');
62
- const s = sourceRegistry.get(id);
63
- expect(s?.last_modified_remote).toBe('2026-05-15T11:00:00Z');
64
- });
65
- });
66
- //# sourceMappingURL=drive.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"drive.test.js","sourceRoot":"","sources":["../../../../../src/memory/modules/drive/tests/drive.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=notes.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"notes.test.d.ts","sourceRoot":"","sources":["../../../../../src/memory/modules/notes/tests/notes.test.ts"],"names":[],"mappings":""}
@@ -1,64 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import fs from 'fs';
3
- import os from 'os';
4
- import path from 'path';
5
- import { initDb, closeDb } from '../../../../db/index.js';
6
- import { initVectorStore } from '../../../../vector/store.js';
7
- import { MemoryStore } from '../../../core/store.js';
8
- import { createNotesModule, buildNotesModuleTools } from '../module.js';
9
- const config = {
10
- dataDir: '~/.engram',
11
- embeddings: {
12
- provider: 'ollama',
13
- baseUrl: 'http://localhost:11434',
14
- model: 'nomic-embed-text',
15
- dimensions: 768,
16
- },
17
- drive: undefined,
18
- notion: undefined,
19
- propertyExtraction: {
20
- enabled: true,
21
- baseUrl: 'http://localhost:11434',
22
- model: 'llama3.2:3b',
23
- maxTokens: 300,
24
- },
25
- whisper: { enabled: true, model: 'small.en', language: 'auto' },
26
- youtube: { enabled: true, preferLanguage: 'en', fallbackToYtdlp: true },
27
- modules: { notes: { enabled: true } },
28
- mcp: { stdio: true, httpPort: 7777 },
29
- };
30
- describe('notes module', () => {
31
- let tmpDir;
32
- let store;
33
- beforeEach(async () => {
34
- tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'engram-notes-'));
35
- initDb(tmpDir);
36
- initVectorStore(tmpDir);
37
- store = new MemoryStore({ embeddings: config.embeddings });
38
- const mod = createNotesModule(config);
39
- await mod.onBoot({ store });
40
- });
41
- afterEach(() => {
42
- closeDb();
43
- fs.rmSync(tmpDir, { recursive: true, force: true });
44
- });
45
- it('add_note tool inserts and search_notes retrieves it', async () => {
46
- const tools = buildNotesModuleTools(store, config);
47
- const addNote = tools.find((t) => t.name === 'add_note');
48
- const searchNotes = tools.find((t) => t.name === 'search_notes');
49
- await addNote.handler({ content: 'EngramMCP is a memory layer for AI agents' });
50
- const results = (await searchNotes.handler({ query: 'AI memory' }));
51
- expect(results.length).toBeGreaterThan(0);
52
- expect(results[0].score).toBeGreaterThan(0);
53
- });
54
- it('extracts wikilinks from content', async () => {
55
- const mod = createNotesModule(config);
56
- await mod.onBoot({ store });
57
- const items = await mod.ingest({
58
- content: 'See [[ProjectX]] and [[Notes]].',
59
- source_id: 'manual:test',
60
- });
61
- expect(items[0].wikilinks).toEqual(['ProjectX', 'Notes']);
62
- });
63
- });
64
- //# sourceMappingURL=notes.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"notes.test.js","sourceRoot":"","sources":["../../../../../src/memory/modules/notes/tests/notes.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=notion.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"notion.test.d.ts","sourceRoot":"","sources":["../../../../../src/memory/modules/notion/tests/notion.test.ts"],"names":[],"mappings":""}
@@ -1,53 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import fs from 'fs';
3
- import os from 'os';
4
- import path from 'path';
5
- import { initDb, closeDb, getDb } from '../../../../db/index.js';
6
- import { initVectorStore } from '../../../../vector/store.js';
7
- import { MemoryStore } from '../../../core/store.js';
8
- import { isNotionConnected, getNotionToken } from '../oauth.js';
9
- import { buildNotionItem } from '../ingest.js';
10
- const embeddingsConfig = {
11
- provider: 'ollama',
12
- baseUrl: 'http://localhost:11434',
13
- model: 'nomic-embed-text',
14
- dimensions: 768,
15
- };
16
- describe('notion module integration (token + ingest)', () => {
17
- let tmpDir;
18
- let store;
19
- beforeEach(() => {
20
- tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'engram-notion-'));
21
- initDb(tmpDir);
22
- initVectorStore(tmpDir);
23
- store = new MemoryStore({ embeddings: embeddingsConfig });
24
- });
25
- afterEach(() => {
26
- closeDb();
27
- fs.rmSync(tmpDir, { recursive: true, force: true });
28
- });
29
- it('stores OAuth tokens via direct DB write and reads them back', () => {
30
- getDb()
31
- .prepare(`INSERT INTO oauth_tokens (provider, access_token, refresh_token, expires_at, extra_json, updated_at)
32
- VALUES ('notion', 'secret_xyz', NULL, NULL, '{"workspace_id":"w1","workspace_name":"MyOrg","bot_id":"b1"}', ?)`)
33
- .run(Date.now());
34
- expect(isNotionConnected()).toBe(true);
35
- expect(getNotionToken()).toBe('secret_xyz');
36
- });
37
- it('buildNotionItem + insert + search', async () => {
38
- const item = buildNotionItem({
39
- metadata: {
40
- id: 'page-1',
41
- title: 'Engineering Standards',
42
- last_edited_time: '2026-05-15T10:00:00Z',
43
- url: 'https://www.notion.so/Engineering-Standards-page-1',
44
- },
45
- content: 'Use TypeScript strict mode. Use ULIDs. Avoid `any` type.',
46
- embeddingModel: 'nomic-embed-text:v1.5',
47
- });
48
- await store.insert(item);
49
- const hits = await store.search('notion', 'TypeScript guidelines', 5);
50
- expect(hits[0].memory.id).toBe(item.id);
51
- });
52
- });
53
- //# sourceMappingURL=notion.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"notion.test.js","sourceRoot":"","sources":["../../../../../src/memory/modules/notion/tests/notion.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,gBAAgB,GAAG;IACvB,QAAQ,EAAE,QAAiB;IAC3B,OAAO,EAAE,wBAAwB;IACjC,KAAK,EAAE,kBAAkB;IACzB,UAAU,EAAE,GAAG;CAChB,CAAC;AAEF,QAAQ,CAAC,4CAA4C,EAAE,GAAG,EAAE;IAC1D,IAAI,MAAc,CAAC;IACnB,IAAI,KAAkB,CAAC;IAEvB,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,MAAM,CAAC,CAAC;QACf,eAAe,CAAC,MAAM,CAAC,CAAC;QACxB,KAAK,GAAG,IAAI,WAAW,CAAC,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,EAAE,CAAC;QACV,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,KAAK,EAAE;aACJ,OAAO,CACN;wHACgH,CACjH;aACA,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACnB,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,IAAI,GAAG,eAAe,CAAC;YAC3B,QAAQ,EAAE;gBACR,EAAE,EAAE,QAAQ;gBACZ,KAAK,EAAE,uBAAuB;gBAC9B,gBAAgB,EAAE,sBAAsB;gBACxC,GAAG,EAAE,oDAAoD;aAC1D;YACD,OAAO,EAAE,0DAA0D;YACnE,cAAc,EAAE,uBAAuB;SACxC,CAAC,CAAC;QACH,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,uBAAuB,EAAE,CAAC,CAAC,CAAC;QACtE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=obsidian.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"obsidian.test.d.ts","sourceRoot":"","sources":["../../../../../src/memory/modules/obsidian/tests/obsidian.test.ts"],"names":[],"mappings":""}
@@ -1,72 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import fs from 'fs';
3
- import os from 'os';
4
- import path from 'path';
5
- import { initDb, closeDb } from '../../../../db/index.js';
6
- import { initVectorStore } from '../../../../vector/store.js';
7
- import { MemoryStore } from '../../../core/store.js';
8
- import { buildObsidianModuleTools, createObsidianModule } from '../module.js';
9
- const config = {
10
- dataDir: '~/.engram',
11
- embeddings: {
12
- provider: 'ollama',
13
- baseUrl: 'http://localhost:11434',
14
- model: 'nomic-embed-text',
15
- dimensions: 768,
16
- },
17
- drive: undefined,
18
- notion: undefined,
19
- propertyExtraction: {
20
- enabled: false,
21
- baseUrl: 'http://localhost:11434',
22
- model: 'llama3.2:3b',
23
- maxTokens: 300,
24
- },
25
- whisper: { enabled: true, model: 'small.en', language: 'auto' },
26
- youtube: { enabled: true, preferLanguage: 'en', fallbackToYtdlp: false },
27
- modules: { obsidian: { enabled: true } },
28
- mcp: { stdio: true, httpPort: 7777 },
29
- };
30
- describe('obsidian module e2e', () => {
31
- let tmpData;
32
- let vault;
33
- let store;
34
- beforeEach(async () => {
35
- tmpData = fs.mkdtempSync(path.join(os.tmpdir(), 'engram-obs-data-'));
36
- vault = fs.mkdtempSync(path.join(os.tmpdir(), 'engram-obs-vault-'));
37
- initDb(tmpData);
38
- initVectorStore(tmpData);
39
- store = new MemoryStore({ embeddings: config.embeddings });
40
- fs.writeFileSync(path.join(vault, 'engineering-standards.md'), `---\ntitle: Engineering Standards\ntags: [code, standards]\n---\n# Engineering Standards\n\nUse TypeScript strict mode and ULIDs.\n\nSee [[Code Review]] for review process.\n`);
41
- fs.writeFileSync(path.join(vault, 'code-review.md'), `# Code Review\n\nEvery PR needs at least 1 reviewer.\n`);
42
- const mod = createObsidianModule(config);
43
- await mod.onBoot({ store });
44
- });
45
- afterEach(() => {
46
- closeDb();
47
- fs.rmSync(tmpData, { recursive: true, force: true });
48
- fs.rmSync(vault, { recursive: true, force: true });
49
- });
50
- it('add_obsidian_vault indexes every markdown file', async () => {
51
- const tools = buildObsidianModuleTools(store, config);
52
- const result = (await tools
53
- .find((t) => t.name === 'add_obsidian_vault')
54
- .handler({
55
- vault_path: vault,
56
- }));
57
- expect(result.files_ingested).toBe(2);
58
- }, 30_000);
59
- it('parses frontmatter title and tags', async () => {
60
- const tools = buildObsidianModuleTools(store, config);
61
- await tools.find((t) => t.name === 'add_obsidian_vault').handler({ vault_path: vault });
62
- const types = store.listTypes();
63
- expect(types).toContain('obsidian');
64
- const hits = await store.search('obsidian', 'standards typescript ULID', 5);
65
- expect(hits.length).toBeGreaterThan(0);
66
- const top = hits[0].memory;
67
- expect(top.properties.title).toBe('Engineering Standards');
68
- expect(top.properties.tags).toContain('code');
69
- expect(top.wikilinks).toContain('Code Review');
70
- }, 30_000);
71
- });
72
- //# sourceMappingURL=obsidian.test.js.map