@raviolelabs/engram-mcp 0.2.2 → 0.2.3

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 (49) hide show
  1. package/README.md +140 -134
  2. package/SKILL.md +33 -0
  3. package/dist/core/db/index.d.ts.map +1 -1
  4. package/dist/core/db/index.js +27 -1
  5. package/dist/core/db/index.js.map +1 -1
  6. package/dist/core/server/http.d.ts +3 -0
  7. package/dist/core/server/http.d.ts.map +1 -1
  8. package/dist/core/server/http.js +6 -0
  9. package/dist/core/server/http.js.map +1 -1
  10. package/dist/core/server/mcp-handler.d.ts.map +1 -1
  11. package/dist/core/server/mcp-handler.js +28 -1
  12. package/dist/core/server/mcp-handler.js.map +1 -1
  13. package/dist/embeddings/index.d.ts +6 -0
  14. package/dist/embeddings/index.d.ts.map +1 -1
  15. package/dist/embeddings/index.js +31 -3
  16. package/dist/embeddings/index.js.map +1 -1
  17. package/dist/embeddings/providers/engram.d.ts +10 -0
  18. package/dist/embeddings/providers/engram.d.ts.map +1 -1
  19. package/dist/embeddings/providers/engram.js +35 -12
  20. package/dist/embeddings/providers/engram.js.map +1 -1
  21. package/dist/memory/core/store.d.ts.map +1 -1
  22. package/dist/memory/core/store.js +5 -4
  23. package/dist/memory/core/store.js.map +1 -1
  24. package/dist/memory/modules/team/keystore.d.ts +38 -0
  25. package/dist/memory/modules/team/keystore.d.ts.map +1 -0
  26. package/dist/memory/modules/team/keystore.js +117 -0
  27. package/dist/memory/modules/team/keystore.js.map +1 -0
  28. package/dist/memory/modules/team/tools.d.ts +10 -0
  29. package/dist/memory/modules/team/tools.d.ts.map +1 -0
  30. package/dist/memory/modules/team/tools.js +252 -0
  31. package/dist/memory/modules/team/tools.js.map +1 -0
  32. package/dist/memory/public/tools.d.ts.map +1 -1
  33. package/dist/memory/public/tools.js +33 -5
  34. package/dist/memory/public/tools.js.map +1 -1
  35. package/dist/sync/team-sync.d.ts +19 -0
  36. package/dist/sync/team-sync.d.ts.map +1 -0
  37. package/dist/sync/team-sync.js +80 -0
  38. package/dist/sync/team-sync.js.map +1 -0
  39. package/dist/tests/scope-encryption.test.d.ts +2 -0
  40. package/dist/tests/scope-encryption.test.d.ts.map +1 -0
  41. package/dist/tests/scope-encryption.test.js +71 -0
  42. package/dist/tests/scope-encryption.test.js.map +1 -0
  43. package/dist/types.d.ts +5 -1
  44. package/dist/types.d.ts.map +1 -1
  45. package/dist/webapp/api/team.d.ts +7 -0
  46. package/dist/webapp/api/team.d.ts.map +1 -0
  47. package/dist/webapp/api/team.js +57 -0
  48. package/dist/webapp/api/team.js.map +1 -0
  49. package/package.json +1 -1
@@ -9,8 +9,14 @@
9
9
  * - openai-compatible (BYO endpoint, requires baseUrl)
10
10
  */
11
11
  import type { EmbeddingsConfig } from '../config/schema.js';
12
+ /** Exported for testing — reset between test runs */
13
+ export declare function resetSessionFallback(): void;
12
14
  /**
13
15
  * Embed a single text string. Returns a Float32Array of the embedding vector.
16
+ *
17
+ * When provider is 'engram'/'engram-hosted' and the hosted endpoint returns
18
+ * {used_fallback: true}, automatically retries via local Ollama and marks the
19
+ * session so future calls skip the hosted endpoint entirely.
14
20
  */
15
21
  export declare function embed(text: string, config: EmbeddingsConfig): Promise<Float32Array>;
16
22
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/embeddings/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAW5D;;GAEG;AACH,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAsBzF;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,YAAY,EAAE,CAAC,CAIzB;AAID,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,MAAM,CAWzE;AAID,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAE5D;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAE9D;AAID,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CASpF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/embeddings/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAc5D,qDAAqD;AACrD,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAID;;;;;;GAMG;AACH,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAuCzF;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,YAAY,EAAE,CAAC,CAIzB;AAID,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,MAAM,CAWzE;AAID,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAE5D;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAE9D;AAID,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CASpF"}
@@ -10,22 +10,50 @@
10
10
  */
11
11
  import { createLogger } from '../logger.js';
12
12
  import { embedOllama } from './providers/ollama.js';
13
- import { embedEngram } from './providers/engram.js';
13
+ import { embedEngram, QuotaFallbackError } from './providers/engram.js';
14
14
  import { embedVoyage } from './providers/voyage.js';
15
15
  import { embedOpenAI } from './providers/openai.js';
16
16
  import { embedOpenAICompat } from './providers/openai-compat.js';
17
17
  const log = createLogger('embeddings');
18
+ // ─── Session-level fallback flag ──────────────────────────────────────────────
19
+ // Set to true when the hosted endpoint signals quota exhaustion (used_fallback).
20
+ // All subsequent requests in this process session use Ollama directly.
21
+ let _sessionFallbackActive = false;
22
+ /** Exported for testing — reset between test runs */
23
+ export function resetSessionFallback() {
24
+ _sessionFallbackActive = false;
25
+ }
18
26
  // ─── Core embed call ──────────────────────────────────────────────────────────
19
27
  /**
20
28
  * Embed a single text string. Returns a Float32Array of the embedding vector.
29
+ *
30
+ * When provider is 'engram'/'engram-hosted' and the hosted endpoint returns
31
+ * {used_fallback: true}, automatically retries via local Ollama and marks the
32
+ * session so future calls skip the hosted endpoint entirely.
21
33
  */
22
34
  export async function embed(text, config) {
23
35
  switch (config.provider) {
24
36
  case 'ollama':
25
37
  return embedOllama(text, config);
26
38
  case 'engram':
27
- case 'engram-hosted':
28
- return embedEngram(text, config);
39
+ case 'engram-hosted': {
40
+ // If this session already fell back, skip to Ollama immediately
41
+ if (_sessionFallbackActive) {
42
+ return embedOllama(text, config);
43
+ }
44
+ try {
45
+ return await embedEngram(text, config);
46
+ }
47
+ catch (e) {
48
+ if (e instanceof QuotaFallbackError) {
49
+ _sessionFallbackActive = true;
50
+ log.info(`Session fallback active — all embeddings this session will use local Ollama. ` +
51
+ `Hosted quota resets: ${e.exhaustedUntil ?? 'next month'}.`);
52
+ return embedOllama(text, config);
53
+ }
54
+ throw e;
55
+ }
56
+ }
29
57
  case 'voyage':
30
58
  return embedVoyage(text, config);
31
59
  case 'openai':
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/embeddings/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/embeddings/index.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,17 @@
1
1
  import type { EmbeddingsConfig } from '../../config/schema.js';
2
+ /**
3
+ * Thrown when the hosted endpoint returns {used_fallback: true}.
4
+ * The dispatcher catches this and retries with Ollama.
5
+ */
6
+ export declare class QuotaFallbackError extends Error {
7
+ readonly exhaustedUntil?: string;
8
+ constructor(message: string, exhaustedUntil?: string);
9
+ }
2
10
  /**
3
11
  * Embed a single text via the Engram-hosted endpoint.
4
12
  * Internally uses the batch API (texts: [text]) and returns the first vector.
13
+ *
14
+ * Throws QuotaFallbackError when the server indicates fallback mode.
5
15
  */
6
16
  export declare function embedEngram(text: string, config: EmbeddingsConfig): Promise<Float32Array>;
7
17
  //# sourceMappingURL=engram.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"engram.d.ts","sourceRoot":"","sources":["../../../src/embeddings/providers/engram.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAM/D;;;GAGG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAwE/F"}
1
+ {"version":3,"file":"engram.d.ts","sourceRoot":"","sources":["../../../src/embeddings/providers/engram.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAM/D;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;gBACrB,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM;CAKrD;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAmF/F"}
@@ -4,13 +4,29 @@
4
4
  * Auth: Bearer <engramAccount.apiKey> from ~/.engram/config.json.
5
5
  *
6
6
  * Falls back gracefully on quota errors with clear messages.
7
+ * When the server returns used_fallback:true, throws QuotaFallbackError
8
+ * so the dispatcher can transparently retry with local Ollama.
7
9
  */
8
10
  import { createLogger } from '../../logger.js';
9
11
  const log = createLogger('embeddings:engram');
10
12
  const ENGRAM_DEFAULT_BASE_URL = 'https://api.engram-mcp.com';
13
+ /**
14
+ * Thrown when the hosted endpoint returns {used_fallback: true}.
15
+ * The dispatcher catches this and retries with Ollama.
16
+ */
17
+ export class QuotaFallbackError extends Error {
18
+ exhaustedUntil;
19
+ constructor(message, exhaustedUntil) {
20
+ super(message);
21
+ this.name = 'QuotaFallbackError';
22
+ this.exhaustedUntil = exhaustedUntil;
23
+ }
24
+ }
11
25
  /**
12
26
  * Embed a single text via the Engram-hosted endpoint.
13
27
  * Internally uses the batch API (texts: [text]) and returns the first vector.
28
+ *
29
+ * Throws QuotaFallbackError when the server indicates fallback mode.
14
30
  */
15
31
  export async function embedEngram(text, config) {
16
32
  if (!config.apiKey) {
@@ -34,27 +50,34 @@ export async function embedEngram(text, config) {
34
50
  catch (err) {
35
51
  throw new Error(`Engram embeddings network error: ${err instanceof Error ? err.message : String(err)}`);
36
52
  }
53
+ // Parse body first so we can check used_fallback on 200
54
+ const body = await res.text();
55
+ let data = {};
56
+ try {
57
+ data = JSON.parse(body);
58
+ }
59
+ catch { /* ignore */ }
60
+ // Fallback signal — server says "use local provider"
61
+ if (res.ok && data.used_fallback) {
62
+ const msg = data.message ?? 'Hosted embedding quota exhausted.';
63
+ log.warn(`Hosted embeddings quota exhausted: ${msg}`);
64
+ log.info('Falling back to local Ollama provider for this and future requests this session.');
65
+ throw new QuotaFallbackError(msg, data.quota_exhausted_until);
66
+ }
37
67
  if (!res.ok) {
38
- const body = await res.text();
39
- let parsed = {};
40
- try {
41
- parsed = JSON.parse(body);
42
- }
43
- catch { /* ignore */ }
44
- if (res.status === 403 || parsed.error === 'pro_required') {
68
+ if (res.status === 403 || data.error === 'pro_required') {
45
69
  throw new Error('Engram-hosted embeddings require a Pro subscription ($9/mo). ' +
46
70
  'Upgrade at https://engram-mcp.com/billing, or switch provider to "ollama".');
47
71
  }
48
- if (res.status === 402 || parsed.error === 'quota_exceeded') {
49
- throw new Error('Engram embedding quota exceeded for this month. ' +
50
- 'Enable overage in your account settings, or wait for the next billing cycle.');
72
+ if (res.status === 402 || data.error === 'quota_exceeded') {
73
+ throw new Error('Engram embedding quota exceeded for this month (block mode). ' +
74
+ 'Change overage_mode in your dashboard, or wait for the next billing cycle.');
51
75
  }
52
76
  throw new Error(`Engram embeddings API ${res.status}: ${body.slice(0, 200)}`);
53
77
  }
54
- const data = (await res.json());
55
78
  if (data.overage_billed) {
56
79
  log.warn(`Engram embeddings overage billed — ${data.tokens_used} tokens used this request. ` +
57
- `Check your usage at https://engram-mcp.com/billing.`);
80
+ `Check your usage at https://engram-mcp.com/dashboard.`);
58
81
  }
59
82
  const vec = data.embeddings?.[0];
60
83
  if (!vec?.length)
@@ -1 +1 @@
1
- {"version":3,"file":"engram.js","sourceRoot":"","sources":["../../../src/embeddings/providers/engram.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engram.js","sourceRoot":"","sources":["../../../src/embeddings/providers/engram.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/memory/core/store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAWtC,OAAO,KAAK,EACV,gBAAgB,EAChB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAIxF,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,gBAAgB,CAAC;IAC7B,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;IAC9C,8DAA8D;IAC9D,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,2DAA2D;IAC3D,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,qBAAa,WAAW;IAIV,OAAO,CAAC,OAAO;IAH3B,QAAQ,CAAC,MAAM,wBAAsB;IACrC,OAAO,CAAC,SAAS,CAAC,CAAY;gBAEV,OAAO,EAAE,kBAAkB;IAE/C,oGAAoG;IACpG,IAAI,UAAU,IAAI,gBAAgB,CAEjC;IAED,qFAAqF;IACrF,IAAI,OAAO,IAAI,aAAa,CAE3B;IAED,kEAAkE;IAClE,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAI/B,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAmF7C,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAkCrC,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAiB9E,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgCjC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASjD,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAQxE,qDAAqD;IAC/C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA2C7E,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,gBAAgB,EAAE,gBAAgB,CAAC,GAAG,OAAO;IAqB7F,6FAA6F;IACvF,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAUvD,6FAA6F;IACvF,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB3D,SAAS,IAAI,MAAM,EAAE;CAMtB"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/memory/core/store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAWtC,OAAO,KAAK,EACV,gBAAgB,EAChB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAIxF,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,gBAAgB,CAAC;IAC7B,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;IAC9C,8DAA8D;IAC9D,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,2DAA2D;IAC3D,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,qBAAa,WAAW;IAIV,OAAO,CAAC,OAAO;IAH3B,QAAQ,CAAC,MAAM,wBAAsB;IACrC,OAAO,CAAC,SAAS,CAAC,CAAY;gBAEV,OAAO,EAAE,kBAAkB;IAE/C,oGAAoG;IACpG,IAAI,UAAU,IAAI,gBAAgB,CAEjC;IAED,qFAAqF;IACrF,IAAI,OAAO,IAAI,aAAa,CAE3B;IAED,kEAAkE;IAClE,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAI/B,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAoF7C,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAoCrC,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAiB9E,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgCjC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASjD,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAQxE,qDAAqD;IAC/C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA2C7E,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,gBAAgB,EAAE,gBAAgB,CAAC,GAAG,OAAO;IAqB7F,6FAA6F;IACvF,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAUvD,6FAA6F;IACvF,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB3D,SAAS,IAAI,MAAM,EAAE;CAMtB"}
@@ -54,10 +54,10 @@ export class MemoryStore {
54
54
  const insert = db.prepare(`
55
55
  INSERT OR REPLACE INTO memories
56
56
  (id, type, source_id, content, content_hash, properties_json,
57
- wikilinks_json, related_ids_json, embedding_model, created_at)
58
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
57
+ wikilinks_json, related_ids_json, embedding_model, created_at, scope)
58
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
59
59
  `);
60
- insert.run(item.id, item.type, item.source_id, item.content, item.content_hash, JSON.stringify(item.properties), JSON.stringify(item.wikilinks), JSON.stringify(item.related_ids), item.embedding_model, Date.parse(item.properties.created_at));
60
+ insert.run(item.id, item.type, item.source_id, item.content, item.content_hash, JSON.stringify(item.properties), JSON.stringify(item.wikilinks), JSON.stringify(item.related_ids), item.embedding_model, Date.parse(item.properties.created_at), item.scope ?? 'personal');
61
61
  // FTS index
62
62
  db.prepare(`INSERT INTO memories_fts (id, content, title, tags) VALUES (?, ?, ?, ?)`).run(item.id, item.content, item.properties.title ?? '', (item.properties.tags ?? []).join(' '));
63
63
  // Vector index — chunk + embed + store per chunk
@@ -83,7 +83,7 @@ export class MemoryStore {
83
83
  getById(id) {
84
84
  const row = getDb()
85
85
  .prepare(`SELECT id, type, source_id, content, content_hash, properties_json,
86
- wikilinks_json, related_ids_json, embedding_model
86
+ wikilinks_json, related_ids_json, embedding_model, scope
87
87
  FROM memories WHERE id = ?`)
88
88
  .get(id);
89
89
  if (!row)
@@ -91,6 +91,7 @@ export class MemoryStore {
91
91
  return {
92
92
  id: row.id,
93
93
  type: row.type,
94
+ scope: row.scope ?? 'personal',
94
95
  source_id: row.source_id,
95
96
  content: row.content,
96
97
  content_hash: row.content_hash,
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/memory/core/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/memory/core/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ export interface X25519Keypair {
2
+ publicKey: Uint8Array;
3
+ privateKey: Uint8Array;
4
+ }
5
+ /**
6
+ * Generate or load the user's X25519 keypair.
7
+ * Private key is stored encrypted with `masterKey` (XSalsa20-Poly1305).
8
+ * Layout: nonce(24 bytes) || ciphertext
9
+ */
10
+ export declare function getOrCreateX25519Keypair(dataDir: string, masterKey: Uint8Array): Promise<X25519Keypair>;
11
+ /**
12
+ * Return the hex-encoded X25519 public key if it exists, or null.
13
+ */
14
+ export declare function getX25519PubkeyHex(dataDir: string): Promise<string | null>;
15
+ /**
16
+ * Load a workspace's team master key from disk.
17
+ * Returns null if the workspace key has not been stored yet.
18
+ */
19
+ export declare function loadWorkspaceKey(dataDir: string, workspaceId: string): Promise<Uint8Array | null>;
20
+ /**
21
+ * Unwrap a team_master_key from a crypto_box_seal ciphertext using our X25519
22
+ * keypair, then persist it at ~/.engram/keys/workspaces/<id>.key
23
+ */
24
+ export declare function unwrapAndStoreWorkspaceKey(dataDir: string, workspaceId: string, wrappedHex: string, keypair: X25519Keypair): Promise<Uint8Array>;
25
+ /**
26
+ * Generate a fresh 32-byte team master key.
27
+ */
28
+ export declare function generateWorkspaceKey(): Promise<Uint8Array>;
29
+ /**
30
+ * Wrap a team_master_key for a recipient's X25519 public key.
31
+ * Returns hex-encoded crypto_box_seal ciphertext (48 bytes → 96 hex chars).
32
+ */
33
+ export declare function wrapKeyForRecipient(teamKey: Uint8Array, recipientPubkeyHex: string): Promise<string>;
34
+ /**
35
+ * Delete a workspace key from local disk (after leaving the workspace).
36
+ */
37
+ export declare function deleteWorkspaceKey(dataDir: string, workspaceId: string): Promise<void>;
38
+ //# sourceMappingURL=keystore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keystore.d.ts","sourceRoot":"","sources":["../../../../src/memory/modules/team/keystore.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,UAAU,CAAC;IACtB,UAAU,EAAE,UAAU,CAAC;CACxB;AAgBD;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,UAAU,GACpB,OAAO,CAAC,aAAa,CAAC,CAgCxB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMhF;AAID;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAQ5B;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,UAAU,CAAC,CAiBrB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,UAAU,CAAC,CAGhE;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,UAAU,EACnB,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAAC,MAAM,CAAC,CAKjB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAIf"}
@@ -0,0 +1,117 @@
1
+ // src/memory/modules/team/keystore.ts
2
+ // X25519 keypair generation + storage, and team master key management.
3
+ // Private key is encrypted with the user's personal master key (XSalsa20-Poly1305).
4
+ // Team master keys are stored at ~/.engram/keys/workspaces/<workspace_id>.key
5
+ import sodium from 'libsodium-wrappers';
6
+ import fs from 'fs/promises';
7
+ import path from 'path';
8
+ import { createLogger } from '../../../logger.js';
9
+ const log = createLogger('team:keystore');
10
+ // ── Internal helpers ──────────────────────────────────────────────────────────
11
+ async function keysDir(dataDir) {
12
+ const dir = path.join(dataDir, 'keys');
13
+ await fs.mkdir(dir, { recursive: true, mode: 0o700 });
14
+ return dir;
15
+ }
16
+ async function fileExists(p) {
17
+ return fs.access(p).then(() => true).catch(() => false);
18
+ }
19
+ // ── X25519 keypair ────────────────────────────────────────────────────────────
20
+ /**
21
+ * Generate or load the user's X25519 keypair.
22
+ * Private key is stored encrypted with `masterKey` (XSalsa20-Poly1305).
23
+ * Layout: nonce(24 bytes) || ciphertext
24
+ */
25
+ export async function getOrCreateX25519Keypair(dataDir, masterKey) {
26
+ await sodium.ready;
27
+ const dir = await keysDir(dataDir);
28
+ const pubPath = path.join(dir, 'x25519.pub');
29
+ const encPath = path.join(dir, 'x25519.enc');
30
+ if ((await fileExists(pubPath)) && (await fileExists(encPath))) {
31
+ const pubBuf = await fs.readFile(pubPath);
32
+ const encBuf = await fs.readFile(encPath);
33
+ const nonce = encBuf.subarray(0, sodium.crypto_secretbox_NONCEBYTES);
34
+ const ciphertext = encBuf.subarray(sodium.crypto_secretbox_NONCEBYTES);
35
+ const privKey = sodium.crypto_secretbox_open_easy(ciphertext, nonce, masterKey);
36
+ return { publicKey: new Uint8Array(pubBuf), privateKey: privKey };
37
+ }
38
+ // Generate fresh keypair
39
+ const kp = sodium.crypto_kx_keypair();
40
+ const nonce = sodium.randombytes_buf(sodium.crypto_secretbox_NONCEBYTES);
41
+ const encPriv = sodium.crypto_secretbox_easy(kp.privateKey, nonce, masterKey);
42
+ await fs.writeFile(pubPath, Buffer.from(kp.publicKey), { mode: 0o600 });
43
+ const encBuf = Buffer.alloc(nonce.length + encPriv.length);
44
+ Buffer.from(nonce).copy(encBuf, 0);
45
+ Buffer.from(encPriv).copy(encBuf, nonce.length);
46
+ await fs.writeFile(encPath, encBuf, { mode: 0o600 });
47
+ log.info('Generated new X25519 keypair');
48
+ return { publicKey: kp.publicKey, privateKey: kp.privateKey };
49
+ }
50
+ /**
51
+ * Return the hex-encoded X25519 public key if it exists, or null.
52
+ */
53
+ export async function getX25519PubkeyHex(dataDir) {
54
+ await sodium.ready;
55
+ const pubPath = path.join(await keysDir(dataDir), 'x25519.pub');
56
+ if (!(await fileExists(pubPath)))
57
+ return null;
58
+ const buf = await fs.readFile(pubPath);
59
+ return sodium.to_hex(new Uint8Array(buf));
60
+ }
61
+ // ── Team (workspace) master keys ─────────────────────────────────────────────
62
+ /**
63
+ * Load a workspace's team master key from disk.
64
+ * Returns null if the workspace key has not been stored yet.
65
+ */
66
+ export async function loadWorkspaceKey(dataDir, workspaceId) {
67
+ const p = path.join(await keysDir(dataDir), 'workspaces', `${workspaceId}.key`);
68
+ try {
69
+ const buf = await fs.readFile(p);
70
+ return new Uint8Array(buf);
71
+ }
72
+ catch {
73
+ return null;
74
+ }
75
+ }
76
+ /**
77
+ * Unwrap a team_master_key from a crypto_box_seal ciphertext using our X25519
78
+ * keypair, then persist it at ~/.engram/keys/workspaces/<id>.key
79
+ */
80
+ export async function unwrapAndStoreWorkspaceKey(dataDir, workspaceId, wrappedHex, keypair) {
81
+ await sodium.ready;
82
+ const wrapped = sodium.from_hex(wrappedHex);
83
+ const teamKey = sodium.crypto_box_seal_open(wrapped, keypair.publicKey, keypair.privateKey);
84
+ const dir = path.join(await keysDir(dataDir), 'workspaces');
85
+ await fs.mkdir(dir, { recursive: true, mode: 0o700 });
86
+ await fs.writeFile(path.join(dir, `${workspaceId}.key`), Buffer.from(teamKey), {
87
+ mode: 0o600,
88
+ });
89
+ log.info(`Stored workspace key for ${workspaceId}`);
90
+ return teamKey;
91
+ }
92
+ /**
93
+ * Generate a fresh 32-byte team master key.
94
+ */
95
+ export async function generateWorkspaceKey() {
96
+ await sodium.ready;
97
+ return sodium.randombytes_buf(32);
98
+ }
99
+ /**
100
+ * Wrap a team_master_key for a recipient's X25519 public key.
101
+ * Returns hex-encoded crypto_box_seal ciphertext (48 bytes → 96 hex chars).
102
+ */
103
+ export async function wrapKeyForRecipient(teamKey, recipientPubkeyHex) {
104
+ await sodium.ready;
105
+ const recipientPub = sodium.from_hex(recipientPubkeyHex);
106
+ const sealed = sodium.crypto_box_seal(teamKey, recipientPub);
107
+ return sodium.to_hex(sealed);
108
+ }
109
+ /**
110
+ * Delete a workspace key from local disk (after leaving the workspace).
111
+ */
112
+ export async function deleteWorkspaceKey(dataDir, workspaceId) {
113
+ const p = path.join(await keysDir(dataDir), 'workspaces', `${workspaceId}.key`);
114
+ await fs.unlink(p).catch(() => { });
115
+ log.info(`Deleted workspace key for ${workspaceId}`);
116
+ }
117
+ //# sourceMappingURL=keystore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keystore.js","sourceRoot":"","sources":["../../../../src/memory/modules/team/keystore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { MCPToolDefinition } from '../../core/module-interface.js';
2
+ import type { EngramConfig } from '../../../config/schema.js';
3
+ export interface WorkspaceToolsContext {
4
+ config: EngramConfig;
5
+ masterKey: Uint8Array;
6
+ /** Optional: pre-resolved jwt for cloud API calls. */
7
+ getJwt: () => Promise<string | null>;
8
+ }
9
+ export declare function buildWorkspaceTools(ctx: WorkspaceToolsContext): MCPToolDefinition[];
10
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../../src/memory/modules/team/tools.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAY9D,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,UAAU,CAAC;IACtB,sDAAsD;IACtD,MAAM,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACtC;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,qBAAqB,GAAG,iBAAiB,EAAE,CAyRnF"}