@raviolelabs/engram-mcp 0.5.3 → 0.5.4

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 (168) hide show
  1. package/dist/cloud/pairing.d.ts.map +1 -1
  2. package/dist/cloud/pairing.js +45 -4
  3. package/dist/cloud/pairing.js.map +1 -1
  4. package/package.json +1 -2
  5. package/dist/mcp-server/tests/mcp-e2e.test.d.ts +0 -2
  6. package/dist/mcp-server/tests/mcp-e2e.test.d.ts.map +0 -1
  7. package/dist/mcp-server/tests/mcp-e2e.test.js +0 -157
  8. package/dist/mcp-server/tests/mcp-e2e.test.js.map +0 -1
  9. package/dist/memory/modules/_custom/tests/custom-types.test.d.ts +0 -2
  10. package/dist/memory/modules/_custom/tests/custom-types.test.d.ts.map +0 -1
  11. package/dist/memory/modules/_custom/tests/custom-types.test.js +0 -96
  12. package/dist/memory/modules/_custom/tests/custom-types.test.js.map +0 -1
  13. package/dist/memory/modules/audio/tests/audio.test.d.ts +0 -2
  14. package/dist/memory/modules/audio/tests/audio.test.d.ts.map +0 -1
  15. package/dist/memory/modules/audio/tests/audio.test.js +0 -66
  16. package/dist/memory/modules/audio/tests/audio.test.js.map +0 -1
  17. package/dist/memory/modules/audio/tests/transcriber.test.d.ts +0 -2
  18. package/dist/memory/modules/audio/tests/transcriber.test.d.ts.map +0 -1
  19. package/dist/memory/modules/audio/tests/transcriber.test.js +0 -27
  20. package/dist/memory/modules/audio/tests/transcriber.test.js.map +0 -1
  21. package/dist/memory/modules/conversations/tests/conversations.test.d.ts +0 -2
  22. package/dist/memory/modules/conversations/tests/conversations.test.d.ts.map +0 -1
  23. package/dist/memory/modules/conversations/tests/conversations.test.js +0 -75
  24. package/dist/memory/modules/conversations/tests/conversations.test.js.map +0 -1
  25. package/dist/memory/modules/drive/tests/drive.test.d.ts +0 -2
  26. package/dist/memory/modules/drive/tests/drive.test.d.ts.map +0 -1
  27. package/dist/memory/modules/drive/tests/drive.test.js +0 -66
  28. package/dist/memory/modules/drive/tests/drive.test.js.map +0 -1
  29. package/dist/memory/modules/notes/tests/notes.test.d.ts +0 -2
  30. package/dist/memory/modules/notes/tests/notes.test.d.ts.map +0 -1
  31. package/dist/memory/modules/notes/tests/notes.test.js +0 -64
  32. package/dist/memory/modules/notes/tests/notes.test.js.map +0 -1
  33. package/dist/memory/modules/notion/tests/notion.test.d.ts +0 -2
  34. package/dist/memory/modules/notion/tests/notion.test.d.ts.map +0 -1
  35. package/dist/memory/modules/notion/tests/notion.test.js +0 -53
  36. package/dist/memory/modules/notion/tests/notion.test.js.map +0 -1
  37. package/dist/memory/modules/obsidian/tests/obsidian.test.d.ts +0 -2
  38. package/dist/memory/modules/obsidian/tests/obsidian.test.d.ts.map +0 -1
  39. package/dist/memory/modules/obsidian/tests/obsidian.test.js +0 -72
  40. package/dist/memory/modules/obsidian/tests/obsidian.test.js.map +0 -1
  41. package/dist/memory/modules/obsidian/tests/vault-reader.test.d.ts +0 -2
  42. package/dist/memory/modules/obsidian/tests/vault-reader.test.d.ts.map +0 -1
  43. package/dist/memory/modules/obsidian/tests/vault-reader.test.js +0 -37
  44. package/dist/memory/modules/obsidian/tests/vault-reader.test.js.map +0 -1
  45. package/dist/memory/modules/youtube/tests/channel.test.d.ts +0 -2
  46. package/dist/memory/modules/youtube/tests/channel.test.d.ts.map +0 -1
  47. package/dist/memory/modules/youtube/tests/channel.test.js +0 -61
  48. package/dist/memory/modules/youtube/tests/channel.test.js.map +0 -1
  49. package/dist/memory/modules/youtube/tests/transcript-fetcher.test.d.ts +0 -2
  50. package/dist/memory/modules/youtube/tests/transcript-fetcher.test.d.ts.map +0 -1
  51. package/dist/memory/modules/youtube/tests/transcript-fetcher.test.js +0 -23
  52. package/dist/memory/modules/youtube/tests/transcript-fetcher.test.js.map +0 -1
  53. package/dist/memory/modules/youtube/tests/youtube.test.d.ts +0 -2
  54. package/dist/memory/modules/youtube/tests/youtube.test.d.ts.map +0 -1
  55. package/dist/memory/modules/youtube/tests/youtube.test.js +0 -61
  56. package/dist/memory/modules/youtube/tests/youtube.test.js.map +0 -1
  57. package/dist/sync/tests/apply.test.d.ts +0 -4
  58. package/dist/sync/tests/apply.test.d.ts.map +0 -1
  59. package/dist/sync/tests/apply.test.js +0 -117
  60. package/dist/sync/tests/apply.test.js.map +0 -1
  61. package/dist/sync/tests/ops-log.test.d.ts +0 -2
  62. package/dist/sync/tests/ops-log.test.d.ts.map +0 -1
  63. package/dist/sync/tests/ops-log.test.js +0 -105
  64. package/dist/sync/tests/ops-log.test.js.map +0 -1
  65. package/dist/sync/tests/two-device-sync.test.d.ts +0 -2
  66. package/dist/sync/tests/two-device-sync.test.d.ts.map +0 -1
  67. package/dist/sync/tests/two-device-sync.test.js +0 -250
  68. package/dist/sync/tests/two-device-sync.test.js.map +0 -1
  69. package/dist/tests/chunker.test.d.ts +0 -2
  70. package/dist/tests/chunker.test.d.ts.map +0 -1
  71. package/dist/tests/chunker.test.js +0 -24
  72. package/dist/tests/chunker.test.js.map +0 -1
  73. package/dist/tests/cloud-auth.test.d.ts +0 -2
  74. package/dist/tests/cloud-auth.test.d.ts.map +0 -1
  75. package/dist/tests/cloud-auth.test.js +0 -75
  76. package/dist/tests/cloud-auth.test.js.map +0 -1
  77. package/dist/tests/cloud-crypto.test.d.ts +0 -2
  78. package/dist/tests/cloud-crypto.test.d.ts.map +0 -1
  79. package/dist/tests/cloud-crypto.test.js +0 -58
  80. package/dist/tests/cloud-crypto.test.js.map +0 -1
  81. package/dist/tests/cloud-integration.test.d.ts +0 -2
  82. package/dist/tests/cloud-integration.test.d.ts.map +0 -1
  83. package/dist/tests/cloud-integration.test.js +0 -193
  84. package/dist/tests/cloud-integration.test.js.map +0 -1
  85. package/dist/tests/cloud-pairing.test.d.ts +0 -2
  86. package/dist/tests/cloud-pairing.test.d.ts.map +0 -1
  87. package/dist/tests/cloud-pairing.test.js +0 -86
  88. package/dist/tests/cloud-pairing.test.js.map +0 -1
  89. package/dist/tests/cloud-saves-integration.test.d.ts +0 -2
  90. package/dist/tests/cloud-saves-integration.test.d.ts.map +0 -1
  91. package/dist/tests/cloud-saves-integration.test.js +0 -92
  92. package/dist/tests/cloud-saves-integration.test.js.map +0 -1
  93. package/dist/tests/cloud-transit.test.d.ts +0 -2
  94. package/dist/tests/cloud-transit.test.d.ts.map +0 -1
  95. package/dist/tests/cloud-transit.test.js +0 -263
  96. package/dist/tests/cloud-transit.test.js.map +0 -1
  97. package/dist/tests/config.test.d.ts +0 -2
  98. package/dist/tests/config.test.d.ts.map +0 -1
  99. package/dist/tests/config.test.js +0 -25
  100. package/dist/tests/config.test.js.map +0 -1
  101. package/dist/tests/db.test.d.ts +0 -2
  102. package/dist/tests/db.test.d.ts.map +0 -1
  103. package/dist/tests/db.test.js +0 -73
  104. package/dist/tests/db.test.js.map +0 -1
  105. package/dist/tests/embeddings-providers.test.d.ts +0 -2
  106. package/dist/tests/embeddings-providers.test.d.ts.map +0 -1
  107. package/dist/tests/embeddings-providers.test.js +0 -62
  108. package/dist/tests/embeddings-providers.test.js.map +0 -1
  109. package/dist/tests/embeddings.test.d.ts +0 -2
  110. package/dist/tests/embeddings.test.d.ts.map +0 -1
  111. package/dist/tests/embeddings.test.js +0 -22
  112. package/dist/tests/embeddings.test.js.map +0 -1
  113. package/dist/tests/integrations-api.test.d.ts +0 -2
  114. package/dist/tests/integrations-api.test.d.ts.map +0 -1
  115. package/dist/tests/integrations-api.test.js +0 -129
  116. package/dist/tests/integrations-api.test.js.map +0 -1
  117. package/dist/tests/memory-store.test.d.ts +0 -2
  118. package/dist/tests/memory-store.test.d.ts.map +0 -1
  119. package/dist/tests/memory-store.test.js +0 -129
  120. package/dist/tests/memory-store.test.js.map +0 -1
  121. package/dist/tests/module-registry.test.d.ts +0 -2
  122. package/dist/tests/module-registry.test.d.ts.map +0 -1
  123. package/dist/tests/module-registry.test.js +0 -44
  124. package/dist/tests/module-registry.test.js.map +0 -1
  125. package/dist/tests/property-extractor.test.d.ts +0 -2
  126. package/dist/tests/property-extractor.test.d.ts.map +0 -1
  127. package/dist/tests/property-extractor.test.js +0 -24
  128. package/dist/tests/property-extractor.test.js.map +0 -1
  129. package/dist/tests/public-tools.test.d.ts +0 -2
  130. package/dist/tests/public-tools.test.d.ts.map +0 -1
  131. package/dist/tests/public-tools.test.js +0 -286
  132. package/dist/tests/public-tools.test.js.map +0 -1
  133. package/dist/tests/reindex.test.d.ts +0 -2
  134. package/dist/tests/reindex.test.d.ts.map +0 -1
  135. package/dist/tests/reindex.test.js +0 -58
  136. package/dist/tests/reindex.test.js.map +0 -1
  137. package/dist/tests/scope-encryption.test.d.ts +0 -2
  138. package/dist/tests/scope-encryption.test.d.ts.map +0 -1
  139. package/dist/tests/scope-encryption.test.js +0 -71
  140. package/dist/tests/scope-encryption.test.js.map +0 -1
  141. package/dist/tests/shamir.test.d.ts +0 -2
  142. package/dist/tests/shamir.test.d.ts.map +0 -1
  143. package/dist/tests/shamir.test.js +0 -57
  144. package/dist/tests/shamir.test.js.map +0 -1
  145. package/dist/tests/source-registry.test.d.ts +0 -2
  146. package/dist/tests/source-registry.test.d.ts.map +0 -1
  147. package/dist/tests/source-registry.test.js +0 -58
  148. package/dist/tests/source-registry.test.js.map +0 -1
  149. package/dist/tests/types.test.d.ts +0 -2
  150. package/dist/tests/types.test.d.ts.map +0 -1
  151. package/dist/tests/types.test.js +0 -26
  152. package/dist/tests/types.test.js.map +0 -1
  153. package/dist/tests/vector.test.d.ts +0 -2
  154. package/dist/tests/vector.test.d.ts.map +0 -1
  155. package/dist/tests/vector.test.js +0 -61
  156. package/dist/tests/vector.test.js.map +0 -1
  157. package/dist/tests/wikilinks.test.d.ts +0 -2
  158. package/dist/tests/wikilinks.test.d.ts.map +0 -1
  159. package/dist/tests/wikilinks.test.js +0 -20
  160. package/dist/tests/wikilinks.test.js.map +0 -1
  161. package/dist/webapp/tests/api.test.d.ts +0 -2
  162. package/dist/webapp/tests/api.test.d.ts.map +0 -1
  163. package/dist/webapp/tests/api.test.js +0 -125
  164. package/dist/webapp/tests/api.test.js.map +0 -1
  165. package/dist/webapp/tests/mcp-http.test.d.ts +0 -2
  166. package/dist/webapp/tests/mcp-http.test.d.ts.map +0 -1
  167. package/dist/webapp/tests/mcp-http.test.js +0 -47
  168. package/dist/webapp/tests/mcp-http.test.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"pairing.d.ts","sourceRoot":"","sources":["../../src/cloud/pairing.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAeH,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAqHD,MAAM,WAAW,mBAAmB;IAClC,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAAC,aAAa,CAAC,CA4BzF"}
1
+ {"version":3,"file":"pairing.d.ts","sourceRoot":"","sources":["../../src/cloud/pairing.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAeH,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAyJD,MAAM,WAAW,mBAAmB;IAClC,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAAC,aAAa,CAAC,CA4BzF"}
@@ -54,16 +54,57 @@ function openBrowser(url) {
54
54
  */
55
55
  function startCallbackServer() {
56
56
  return new Promise((resolve, reject) => {
57
- const server = http.createServer((req, res) => {
57
+ const server = http.createServer(async (req, res) => {
58
58
  if (!req.url?.startsWith('/callback')) {
59
59
  res.writeHead(404);
60
60
  res.end('Not found');
61
61
  return;
62
62
  }
63
+ // SECURITY: prefer reading tokens from the request body (POST) rather
64
+ // than the URL query string. URLs end up in DevTools Network panel,
65
+ // server access logs, and Referer headers — bodies do not. Fall back
66
+ // to query string so dashboards predating this change still work.
67
+ let jwt = '';
68
+ let refreshToken = '';
69
+ let apiKey = '';
63
70
  const parsed = new URL(req.url, `http://localhost:${CALLBACK_PORT}`);
64
- const jwt = parsed.searchParams.get('jwt') ?? '';
65
- const refreshToken = parsed.searchParams.get('refreshToken') ?? '';
66
- const apiKey = parsed.searchParams.get('apiKey') ?? '';
71
+ if (req.method === 'POST') {
72
+ const chunks = [];
73
+ let total = 0;
74
+ const MAX = 64 * 1024; // 64 KB cap — tokens are tiny; reject larger
75
+ try {
76
+ for await (const chunk of req) {
77
+ const buf = chunk;
78
+ total += buf.length;
79
+ if (total > MAX) {
80
+ res.writeHead(413);
81
+ res.end('Body too large');
82
+ return;
83
+ }
84
+ chunks.push(buf);
85
+ }
86
+ const raw = Buffer.concat(chunks).toString('utf8');
87
+ if (raw) {
88
+ const body = JSON.parse(raw);
89
+ if (typeof body.jwt === 'string')
90
+ jwt = body.jwt;
91
+ if (typeof body.refreshToken === 'string')
92
+ refreshToken = body.refreshToken;
93
+ if (typeof body.apiKey === 'string')
94
+ apiKey = body.apiKey;
95
+ }
96
+ }
97
+ catch {
98
+ // Body unreadable or not JSON — fall through to query string
99
+ }
100
+ }
101
+ // Query-string fallback for backwards compatibility with older dashboards
102
+ if (!jwt)
103
+ jwt = parsed.searchParams.get('jwt') ?? '';
104
+ if (!refreshToken)
105
+ refreshToken = parsed.searchParams.get('refreshToken') ?? '';
106
+ if (!apiKey)
107
+ apiKey = parsed.searchParams.get('apiKey') ?? '';
67
108
  if (!jwt || !refreshToken || !apiKey) {
68
109
  res.writeHead(400, { 'Content-Type': 'text/html' });
69
110
  res.end('<p>Pairing failed — missing parameters. Close this tab and try again.</p>');
@@ -1 +1 @@
1
- {"version":3,"file":"pairing.js","sourceRoot":"","sources":["../../src/cloud/pairing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pairing.js","sourceRoot":"","sources":["../../src/cloud/pairing.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@raviolelabs/engram-mcp",
3
- "version": "0.5.3",
3
+ "version": "0.5.4",
4
4
  "mcpName": "io.github.RavioleLabs/engram-mcp",
5
5
  "description": "EngramMCP — local-first semantic memory layer for AI agents",
6
6
  "license": "Elastic-2.0",
@@ -95,7 +95,6 @@
95
95
  "src/private/README.md",
96
96
  "README.md",
97
97
  "SKILL.md",
98
- "CLAUDE.md",
99
98
  "LICENSE"
100
99
  ],
101
100
  "publishConfig": {
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=mcp-e2e.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-e2e.test.d.ts","sourceRoot":"","sources":["../../../src/mcp-server/tests/mcp-e2e.test.ts"],"names":[],"mappings":""}
@@ -1,157 +0,0 @@
1
- // src/mcp-server/tests/mcp-e2e.test.ts
2
- // E2E tests against the full 21-tool public surface.
3
- import { describe, it, expect, beforeAll, afterAll } from 'vitest';
4
- import { Client } from '@modelcontextprotocol/sdk/client/index.js';
5
- import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
6
- import fs from 'fs';
7
- import os from 'os';
8
- import path from 'path';
9
- describe('MCP E2E (real subprocess) — full 24-tool public surface', () => {
10
- let tmpDir;
11
- let client;
12
- beforeAll(async () => {
13
- tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'engram-e2e-'));
14
- const transport = new StdioClientTransport({
15
- command: 'npx',
16
- args: ['tsx', 'src/scripts/serve.ts', '--no-http'],
17
- env: { ...process.env, ENGRAM_CONFIG_DIR: tmpDir, DATA_DIR: tmpDir },
18
- cwd: process.cwd(),
19
- });
20
- client = new Client({ name: 'engram-e2e-test', version: '0.0.0' }, { capabilities: {} });
21
- await client.connect(transport);
22
- }, 30_000);
23
- afterAll(async () => {
24
- await client.close();
25
- fs.rmSync(tmpDir, { recursive: true, force: true });
26
- });
27
- it('lists exactly 24 public tools (all tools always available)', async () => {
28
- const result = await client.listTools();
29
- const names = result.tools.map((t) => t.name);
30
- // Core memory tools
31
- expect(names).toContain('remember');
32
- expect(names).toContain('recall');
33
- expect(names).toContain('get');
34
- expect(names).toContain('update');
35
- expect(names).toContain('forget');
36
- expect(names).toContain('relate');
37
- expect(names).toContain('list_types');
38
- expect(names).toContain('recent');
39
- expect(names).toContain('ingest');
40
- expect(names).toContain('suggest_properties');
41
- expect(names).toContain('get_ingest_status');
42
- // Watch/source tools
43
- expect(names).toContain('watch');
44
- expect(names).toContain('unwatch');
45
- expect(names).toContain('list_sources');
46
- // Type tools
47
- expect(names).toContain('create_type');
48
- expect(names).toContain('delete_type');
49
- // Previously-admin tools — now always public
50
- expect(names).toContain('connect_drive');
51
- expect(names).toContain('list_drive_files');
52
- expect(names).toContain('connect_notion');
53
- expect(names).toContain('list_notion_pages');
54
- expect(names).toContain('import_watch_later');
55
- // Cross-memory inference tools
56
- expect(names).toContain('analyze_patterns');
57
- expect(names).toContain('summarize_recent');
58
- expect(names).toContain('find_gaps');
59
- // Old per-module tools must NOT be present
60
- expect(names).not.toContain('add_note');
61
- expect(names).not.toContain('search_notes');
62
- expect(names).not.toContain('search_all');
63
- expect(names).not.toContain('get_memory');
64
- expect(names).not.toContain('remember_exchange');
65
- expect(names).not.toContain('search_conversations');
66
- expect(names).not.toContain('find_related');
67
- expect(names).not.toContain('delete_memory');
68
- expect(names).not.toContain('set_properties');
69
- expect(names).not.toContain('add_audio_file');
70
- expect(names).not.toContain('add_youtube_url');
71
- expect(names).not.toContain('create_custom_type');
72
- // Total should be exactly 24 (+ custom types loaded at boot, which is 0 for fresh tmpDir)
73
- expect(names.length).toBe(24);
74
- });
75
- it('remember then recall finds the memory', async () => {
76
- const remRes = await client.callTool({
77
- name: 'remember',
78
- arguments: {
79
- content: 'ULIDs are temporally ordered and sortable, unlike UUIDs which are random.',
80
- title: 'ULID vs UUID comparison',
81
- tags: ['ulid', 'uuid', 'identifiers'],
82
- type: 'notes',
83
- },
84
- });
85
- expect(remRes.isError).toBeFalsy();
86
- const remPayload = JSON.parse(remRes.content[0].text);
87
- expect(remPayload.id).toBeTruthy();
88
- const recallRes = await client.callTool({
89
- name: 'recall',
90
- arguments: { query: 'sortable identifiers', limit: 5 },
91
- });
92
- const recallPayload = JSON.parse(recallRes.content[0].text);
93
- expect(recallPayload.length).toBeGreaterThan(0);
94
- expect(recallPayload[0].score).toBeGreaterThan(0.3);
95
- }, 30_000);
96
- it('remember then get retrieves full memory', async () => {
97
- const remRes = await client.callTool({
98
- name: 'remember',
99
- arguments: {
100
- content: 'Polymarket pricing strategy for sports markets uses Kelly criterion.',
101
- title: 'Polymarket sports strategy',
102
- tags: ['polymarket', 'sports', 'kelly'],
103
- },
104
- });
105
- expect(remRes.isError).toBeFalsy();
106
- const { id } = JSON.parse(remRes.content[0].text);
107
- const getRes = await client.callTool({ name: 'get', arguments: { id } });
108
- expect(getRes.isError).toBeFalsy();
109
- const getPayload = JSON.parse(getRes.content[0].text);
110
- expect(getPayload.id).toBe(id);
111
- expect(getPayload.content).toContain('Kelly');
112
- expect(getPayload.properties.title).toBe('Polymarket sports strategy');
113
- }, 20_000);
114
- it('update mutates properties on an existing memory', async () => {
115
- const remRes = await client.callTool({
116
- name: 'remember',
117
- arguments: { content: 'Meeting notes from standup, no title yet.' },
118
- });
119
- const { id } = JSON.parse(remRes.content[0].text);
120
- const updRes = await client.callTool({
121
- name: 'update',
122
- arguments: { id, title: 'Standup May 19', tags: ['standup', 'meeting'] },
123
- });
124
- expect(updRes.isError).toBeFalsy();
125
- const updPayload = JSON.parse(updRes.content[0].text);
126
- expect(updPayload.updated).toBe(true);
127
- const getRes = await client.callTool({ name: 'get', arguments: { id } });
128
- const getPayload = JSON.parse(getRes.content[0].text);
129
- expect(getPayload.properties.title).toBe('Standup May 19');
130
- expect(getPayload.properties.tags).toContain('standup');
131
- }, 20_000);
132
- it('forget removes the memory', async () => {
133
- const remRes = await client.callTool({
134
- name: 'remember',
135
- arguments: { content: 'Temporary test memory — please delete.' },
136
- });
137
- const { id } = JSON.parse(remRes.content[0].text);
138
- const forgetRes = await client.callTool({ name: 'forget', arguments: { id } });
139
- expect(forgetRes.isError).toBeFalsy();
140
- const getRes = await client.callTool({ name: 'get', arguments: { id } });
141
- const getPayload = JSON.parse(getRes.content[0].text);
142
- expect(getPayload.error).toBe('not_found');
143
- }, 20_000);
144
- it('ingest routes a .md file and returns id', async () => {
145
- const mdPath = path.join(tmpDir, `test-${Date.now()}.md`);
146
- fs.writeFileSync(mdPath, '# Ingest Test\n\nThis note was ingested via the ingest tool.');
147
- const ingestRes = await client.callTool({
148
- name: 'ingest',
149
- arguments: { uri: mdPath, tags: ['ingest-test'] },
150
- });
151
- expect(ingestRes.isError).toBeFalsy();
152
- const payload = JSON.parse(ingestRes.content[0].text);
153
- expect(payload.id).toBeTruthy();
154
- expect(payload.type).toBe('notes');
155
- }, 20_000);
156
- });
157
- //# sourceMappingURL=mcp-e2e.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-e2e.test.js","sourceRoot":"","sources":["../../../src/mcp-server/tests/mcp-e2e.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=custom-types.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"custom-types.test.d.ts","sourceRoot":"","sources":["../../../../../src/memory/modules/_custom/tests/custom-types.test.ts"],"names":[],"mappings":""}
@@ -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":""}