@hilbras/remembra 3.7.0 → 3.8.0

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.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,77 @@ Format follows [Keep a Changelog](https://keepachangelog.com/).
7
7
  > (3.0.0 = v3). Earlier releases used independent semver: 0.1.0 = v1,
8
8
  > 0.2.0 = v1.5, 0.3.0 = v2, 0.4.0 = v3.
9
9
 
10
+ ## [3.8.0] — 2026-09-23
11
+
12
+ **Phase 8 of the deep audit — Advanced Capabilities.** All five roadmap
13
+ items covered; both storage-altering features are **opt-in** (scope review:
14
+ plain markdown and byte-faithful storage remain the defaults).
15
+
16
+ ### Added
17
+ - **Relationship graph** — `related: [ids]` frontmatter (directed, single
18
+ write; backlinks derived at read time), `memory_relate` MCP tool
19
+ (add/remove, targets validated, self-links rejected, idempotent), plus the
20
+ missing read surfaces: **`memory_get`** / `GET /memories/:id` return a
21
+ memory with resolved `related` + `backlinks`. Retrieval ranking untouched —
22
+ graph is structure for the consumer, not a score.
23
+ - **Confidence scores** — `confidence: 0–1` frontmatter: explicit stores
24
+ default `1.0`, digest extractions `0.7` (the extraction LLM may supply its
25
+ own via the extended prompt/schema). Surfaced everywhere and carried through
26
+ merge/export/import; **deliberately not ranked** — importance answers
27
+ "relevant?", confidence answers "true?" (Phase 4 weight decisions stay
28
+ closed).
29
+ - **PII redaction filter** (opt-in `REMEMBRA_REDACT=1`) — pattern filter at
30
+ the *ingest layer* (`memory_store`, digest items, merge output): emails,
31
+ Luhn-valid cards, SSNs, phone numbers, provider tokens / ≥40-char entropy
32
+ blobs → typed placeholders (`<EMAIL>` …). Cards must pass Luhn; phone
33
+ matching requires separators + 10–15 digits, so dates/versions never match.
34
+ Irreversible by design; `remembra_redactions_total{kind}` + `redacted`
35
+ log event (counts only, never matched text). Reverses the former "no PII
36
+ filter" non-goal — documented with its limits in `docs/security.md`.
37
+ - **Encrypted storage mode** (opt-in `REMEMBRA_ENCRYPT_KEY`) — AES-256-GCM
38
+ per file via `node:crypto` (zero deps): magic-header detection, transparent
39
+ decrypt-on-read, encrypt-on-write, mixed plain/cipher trees supported;
40
+ `remembra encrypt` / `remembra decrypt` migrate the whole tree (incl.
41
+ history) idempotently under the advisory lock. Missing/wrong key fails
42
+ **loudly**: `ENCRYPTED_NO_KEY` (HTTP 503, `/health` `storage` field) —
43
+ never warn-skipped into silent partial results. GCM makes wrong-key ≡
44
+ tampered. Reverses the former "no encryption at rest" non-goal with an
45
+ explicit threat-model section (protects stolen backups / copied dirs, not
46
+ a runtime attacker with your env).
47
+ - **Diff/history view** — content-changing updates snapshot the raw
48
+ on-disk pre-image into `.history/<id>/<epochMs>-<seq>.md` first (content-
49
+ equality gate: embedding backfills and linking never snapshot);
50
+ `memory_history` MCP tool + `GET /memories/:id/history?limit=` return
51
+ versions newest-first, each with a **unified line diff** against its
52
+ predecessor (own ~60-line LCS, zero deps, cell-budget fallback for huge
53
+ contents). Pruned to `REMEMBRA_HISTORY_LIMIT` (default 20, `0` disables);
54
+ `.history` is never walked by `all()`/search.
55
+
56
+ ### Changed
57
+ - Error classification gains `ENCRYPTED_NO_KEY` (503) and documents why it
58
+ breaks the skip-malformed-file rule; `metrics` route enum gains
59
+ `memory_sub` (the relate/history sub-routes).
60
+ - Extraction system prompt optionally returns `confidence` (0–1).
61
+
62
+ ### Docs
63
+ `tools` (+3 tools, 9 total, encrypt/decrypt CLI), `memory-model`
64
+ (relationships, version history, metadata rows, layout incl. `.history`),
65
+ `security` (encryption + redaction sections replace the two reversed
66
+ non-goals, checklist items), `architecture` (encryption format, history
67
+ snapshot design, error table), `clients` (+3 env vars), `observability`
68
+ (+4 counters, `memory_sub`, `redacted` event), `chatgpt` (+3 routes),
69
+ `lifecycle` (merge → history cross-ref), README (9 tools, 11 routes).
70
+
71
+ ### Tests
72
+ - **148 tests** (+16: redaction patterns + false-positive guards + service
73
+ on/off, digest redaction & confidence pass-through, confidence round-trip,
74
+ relations incl. backlinks/validation/idempotence/persistence, diff unit,
75
+ merge → snapshot → diff view, embedding-gate + limit pruning, encryption
76
+ round-trip / missing-key loud failure / wrong-key / mixed trees /
77
+ idempotent both-way migration incl. history, HTTP GET/relate/history
78
+ routes + `memory_sub` metric label). Suite verified stable across 3
79
+ consecutive runs.
80
+
10
81
  ## [3.7.0] — 2026-09-23
11
82
 
12
83
  **Phase 7 of the deep audit** — observability. All five roadmap items
package/README.md CHANGED
@@ -85,10 +85,14 @@ Then wire a Custom GPT to the API — full walkthrough in **[docs/chatgpt.md](do
85
85
 
86
86
  | Method | Route | Purpose |
87
87
  |--------|-------|---------|
88
- | GET | `/health` | Liveness (no auth) |
88
+ | GET | `/health` | Liveness + readiness (no auth) |
89
+ | GET | `/metrics` | Prometheus metrics (auth when keyed) |
89
90
  | POST | `/memories` | Store a memory |
90
91
  | GET | `/memories/search?query=&scope=` | Search |
91
92
  | GET | `/memories?scope=&type=` | List |
93
+ | GET | `/memories/:id` | One memory + related links + backlinks |
94
+ | POST | `/memories/:id/relate` | Link / unlink memories |
95
+ | GET | `/memories/:id/history` | Version history with line diffs |
92
96
  | POST | `/memories/digest` | LLM extract + store from a transcript |
93
97
  | POST | `/maintain` | Decay sweep + vector backfill |
94
98
  | DELETE | `/memories/:id` | Forget |
@@ -123,6 +127,9 @@ tampered snapshot is rejected atomically, never half-imported. Of course,
123
127
  | `memory_digest` | Extract + store memories from a transcript (LLM) |
124
128
  | `memory_search` | Retrieve relevant memories (pass `scope` = current project) |
125
129
  | `memory_list` | Browse stored memories |
130
+ | `memory_get` | Fetch one memory with its links and backlinks |
131
+ | `memory_relate` | Link / unlink memories (relationship graph) |
132
+ | `memory_history` | Version history of a memory with line diffs |
126
133
  | `memory_maintain` | Archive decayed / delete expired / backfill vectors |
127
134
  | `memory_forget` | Delete by id |
128
135
 
package/dist/backend.d.ts CHANGED
@@ -1,4 +1,14 @@
1
1
  import type { Memory, StoreInput } from "./types.js";
2
+ /** One superseded pre-image from `.history/<id>/` (audit Phase 8). */
3
+ export interface HistoryEntry {
4
+ /** Snapshot file name (`${epochMs}-${seq}.md`). */
5
+ file: string;
6
+ /** The pre-image's own `updatedAt` — when this version was current. */
7
+ at?: string;
8
+ /** When the snapshot was taken (from the file name's epoch prefix). */
9
+ snapshotAt?: string;
10
+ content: string;
11
+ }
2
12
  /**
3
13
  * Storage abstraction (audit: Phase 3 — separate MemoryStore abstraction to
4
14
  * enable a future DB swap).
@@ -31,4 +41,6 @@ export interface MemoryBackend {
31
41
  touch(id: string): Promise<void>;
32
42
  forget(id: string): Promise<boolean>;
33
43
  importMemory(m: Memory): Promise<boolean>;
44
+ /** Optional (audit Phase 8): superseded pre-images, newest first. */
45
+ history?(id: string): Promise<HistoryEntry[]>;
34
46
  }
@@ -0,0 +1,10 @@
1
+ export declare function encryptionEnabled(): boolean;
2
+ /** Cheap detection: does this file already hold ciphertext? */
3
+ export declare function isEncrypted(buf: Buffer): boolean;
4
+ export declare function encryptBuffer(plain: Buffer): Buffer;
5
+ /**
6
+ * Decrypt a file buffer. Throws `ENCRYPTED_NO_KEY` when the key is missing
7
+ * or wrong (GCM authentication failure covers both — a tampered file must
8
+ * fail identically).
9
+ */
10
+ export declare function decryptBuffer(buf: Buffer): Buffer;
package/dist/crypto.js ADDED
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Encrypted storage mode (audit Phase 8).
3
+ *
4
+ * Opt-in: `REMEMBRA_ENCRYPT_KEY` set → memory files are written as
5
+ * AES-256-GCM ciphertext (node:crypto — zero dependencies) and decrypted
6
+ * transparently on read. Unset → plain markdown, exactly as before.
7
+ *
8
+ * Key material: a 64-hex-char (32-byte) key, used directly — no KDF, no
9
+ * salt (a high-entropy symmetric key needs neither; per-file random nonces
10
+ * provide uniqueness). Generate one with:
11
+ * node -p 'require("node:crypto").randomBytes(32).toString("hex")'
12
+ *
13
+ * On-disk format (files keep their .md names; detection is by magic bytes):
14
+ * MAGIC(7) "RMBENC1" | nonce(12) | tag(16) | ciphertext
15
+ * The AAD is empty — files move between trees (archive/revive) freely.
16
+ *
17
+ * Failure mode without the key: reading an encrypted file throws
18
+ * `ENCRYPTED_NO_KEY` (HTTP 503, health `storage: ENCRYPTED_NO_KEY`) instead
19
+ * of warn-skipping — a store you cannot read must fail loudly, never
20
+ * silently serve partial data.
21
+ *
22
+ * Migration: `remembra encrypt` / `remembra decrypt` rewrite the tree under
23
+ * the storage lock (idempotent; already-converted files are skipped).
24
+ */
25
+ import { randomBytes, createCipheriv, createDecipheriv } from "node:crypto";
26
+ import { RemembraError } from "./errors.js";
27
+ const MAGIC = Buffer.from("RMBENC1", "ascii");
28
+ const NONCE_LEN = 12;
29
+ const TAG_LEN = 16;
30
+ export function encryptionEnabled() {
31
+ return (process.env.REMEMBRA_ENCRYPT_KEY ?? "").length > 0;
32
+ }
33
+ function rawKey() {
34
+ const hex = process.env.REMEMBRA_ENCRYPT_KEY ?? "";
35
+ if (!/^[0-9a-fA-F]{64}$/.test(hex)) {
36
+ throw new RemembraError("INVALID_INPUT", "REMEMBRA_ENCRYPT_KEY must be 64 hex chars (32 bytes). Generate one: " +
37
+ `node -p 'require("node:crypto").randomBytes(32).toString("hex")'`);
38
+ }
39
+ return Buffer.from(hex, "hex");
40
+ }
41
+ /** Cheap detection: does this file already hold ciphertext? */
42
+ export function isEncrypted(buf) {
43
+ return buf.length > MAGIC.length && buf.subarray(0, MAGIC.length).equals(MAGIC);
44
+ }
45
+ export function encryptBuffer(plain) {
46
+ const nonce = randomBytes(NONCE_LEN);
47
+ const cipher = createCipheriv("aes-256-gcm", rawKey(), nonce);
48
+ const ct = Buffer.concat([cipher.update(plain), cipher.final()]);
49
+ return Buffer.concat([MAGIC, nonce, cipher.getAuthTag(), ct]);
50
+ }
51
+ /**
52
+ * Decrypt a file buffer. Throws `ENCRYPTED_NO_KEY` when the key is missing
53
+ * or wrong (GCM authentication failure covers both — a tampered file must
54
+ * fail identically).
55
+ */
56
+ export function decryptBuffer(buf) {
57
+ if (!isEncrypted(buf))
58
+ return buf; // plain file first: plain mode must never throw
59
+ if (!encryptionEnabled()) {
60
+ throw new RemembraError("ENCRYPTED_NO_KEY", "storage contains encrypted memories but REMEMBRA_ENCRYPT_KEY is not set");
61
+ }
62
+ if (buf.length < MAGIC.length + NONCE_LEN + TAG_LEN + 1) {
63
+ throw new RemembraError("ENCRYPTED_NO_KEY", "encrypted file is truncated");
64
+ }
65
+ const nonce = buf.subarray(MAGIC.length, MAGIC.length + NONCE_LEN);
66
+ const tag = buf.subarray(MAGIC.length + NONCE_LEN, MAGIC.length + NONCE_LEN + TAG_LEN);
67
+ const ct = buf.subarray(MAGIC.length + NONCE_LEN + TAG_LEN);
68
+ try {
69
+ const decipher = createDecipheriv("aes-256-gcm", rawKey(), nonce);
70
+ decipher.setAuthTag(tag);
71
+ return Buffer.concat([decipher.update(ct), decipher.final()]);
72
+ }
73
+ catch {
74
+ throw new RemembraError("ENCRYPTED_NO_KEY", "cannot decrypt: wrong REMEMBRA_ENCRYPT_KEY or corrupted file");
75
+ }
76
+ }
77
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"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"}
package/dist/diff.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Line-based unified diff (audit Phase 8 — diff/history view).
3
+ *
4
+ * Zero-dependency LCS over lines producing standard unified format with 2
5
+ * lines of context, so any client that renders `diff -u` output renders our
6
+ * history view for free.
7
+ *
8
+ * Guard: the LCS table is O(n·m) — contents above the cell budget fall back
9
+ * to a coarse whole-block diff instead of allocating hundreds of megabytes.
10
+ */
11
+ /**
12
+ * Unified diff of `prev` → `next`. Empty string when identical.
13
+ * `fromLabel`/`toLabel` name the sides (defaults: previous/current).
14
+ */
15
+ export declare function unifiedDiff(prev: string, next: string, fromLabel?: string, toLabel?: string): string;
package/dist/diff.js ADDED
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Line-based unified diff (audit Phase 8 — diff/history view).
3
+ *
4
+ * Zero-dependency LCS over lines producing standard unified format with 2
5
+ * lines of context, so any client that renders `diff -u` output renders our
6
+ * history view for free.
7
+ *
8
+ * Guard: the LCS table is O(n·m) — contents above the cell budget fall back
9
+ * to a coarse whole-block diff instead of allocating hundreds of megabytes.
10
+ */
11
+ const MAX_CELLS = 4_000_000;
12
+ const CONTEXT = 2;
13
+ function lcsOps(a, b) {
14
+ const n = a.length;
15
+ const m = b.length;
16
+ // dp[i][j] = LCS length of a[i:], b[j:]
17
+ const dp = new Uint32Array((n + 1) * (m + 1));
18
+ for (let i = n - 1; i >= 0; i--) {
19
+ for (let j = m - 1; j >= 0; j--) {
20
+ dp[i * (m + 1) + j] =
21
+ a[i] === b[j] ? dp[(i + 1) * (m + 1) + j + 1] + 1 : Math.max(dp[(i + 1) * (m + 1) + j], dp[i * (m + 1) + j + 1]);
22
+ }
23
+ }
24
+ const ops = [];
25
+ let i = 0;
26
+ let j = 0;
27
+ while (i < n && j < m) {
28
+ if (a[i] === b[j]) {
29
+ ops.push({ kind: "keep", line: a[i] });
30
+ i++;
31
+ j++;
32
+ }
33
+ else if (dp[(i + 1) * (m + 1) + j] >= dp[i * (m + 1) + j + 1]) {
34
+ ops.push({ kind: "remove", line: a[i] });
35
+ i++;
36
+ }
37
+ else {
38
+ ops.push({ kind: "add", line: b[j] });
39
+ j++;
40
+ }
41
+ }
42
+ while (i < n)
43
+ ops.push({ kind: "remove", line: a[i++] });
44
+ while (j < m)
45
+ ops.push({ kind: "add", line: b[j++] });
46
+ return ops;
47
+ }
48
+ /**
49
+ * Unified diff of `prev` → `next`. Empty string when identical.
50
+ * `fromLabel`/`toLabel` name the sides (defaults: previous/current).
51
+ */
52
+ export function unifiedDiff(prev, next, fromLabel = "previous", toLabel = "current") {
53
+ if (prev === next)
54
+ return "";
55
+ const a = prev.split("\n");
56
+ const b = next.split("\n");
57
+ if ((a.length + 1) * (b.length + 1) > MAX_CELLS) {
58
+ // Coarse fallback: claim a full rewrite rather than allocating the table.
59
+ return [
60
+ `--- ${fromLabel}`,
61
+ `+++ ${toLabel}`,
62
+ `@@ -1,${a.length} +1,${b.length} @@ (diff omitted: content too large for line diff)`,
63
+ ...a.map((l) => `-${l}`),
64
+ ...b.map((l) => `+${l}`),
65
+ ].join("\n");
66
+ }
67
+ const ops = lcsOps(a, b);
68
+ const header = [`--- ${fromLabel}`, `+++ ${toLabel}`];
69
+ let out = header.join("\n");
70
+ // Group changed regions (with context) into hunks.
71
+ let idx = 0;
72
+ while (idx < ops.length) {
73
+ if (ops[idx].kind === "keep") {
74
+ idx++;
75
+ continue;
76
+ }
77
+ // Expand over the changed run.
78
+ let end = idx;
79
+ while (end < ops.length) {
80
+ if (ops[end].kind !== "keep") {
81
+ end++;
82
+ continue;
83
+ }
84
+ // Peek: a keep run shorter than 2·context followed by more changes
85
+ // belongs to the same hunk.
86
+ let run = 0;
87
+ let probe = end;
88
+ while (probe < ops.length && ops[probe].kind === "keep") {
89
+ run++;
90
+ probe++;
91
+ }
92
+ if (probe < ops.length && run <= CONTEXT * 2) {
93
+ end = probe; // small keep-gap: bridge it and keep consuming changes
94
+ continue;
95
+ }
96
+ break;
97
+ }
98
+ const start = Math.max(0, idx - CONTEXT);
99
+ const stop = Math.min(ops.length, end + CONTEXT);
100
+ // Line numbers (1-based) for the hunk header.
101
+ let aLine = 0;
102
+ let bLine = 0;
103
+ for (let k = 0; k < start; k++) {
104
+ if (ops[k].kind !== "add")
105
+ aLine++;
106
+ if (ops[k].kind !== "remove")
107
+ bLine++;
108
+ }
109
+ const aStart = aLine + 1;
110
+ const bStart = bLine + 1;
111
+ let aCount = 0;
112
+ let bCount = 0;
113
+ const hunk = [];
114
+ for (let k = start; k < stop; k++) {
115
+ const op = ops[k];
116
+ if (op.kind === "keep") {
117
+ hunk.push(` ${op.line}`);
118
+ aCount++;
119
+ bCount++;
120
+ }
121
+ else if (op.kind === "remove") {
122
+ hunk.push(`-${op.line}`);
123
+ aCount++;
124
+ }
125
+ else {
126
+ hunk.push(`+${op.line}`);
127
+ bCount++;
128
+ }
129
+ }
130
+ out += `\n@@ -${aStart},${aCount} +${bStart},${bCount} @@\n${hunk.join("\n")}`;
131
+ idx = stop;
132
+ }
133
+ return out + "\n";
134
+ }
135
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../src/diff.ts"],"names":[],"mappings":"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"}
package/dist/errors.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export type ErrorCode = "INVALID_INPUT" | "SNAPSHOT_INVALID" | "SCOPE_ESCAPES_ROOT" | "NOT_FOUND" | "CONFLICT" | "LOCK_TIMEOUT" | "IO_ERROR" | "LLM_ERROR";
1
+ export type ErrorCode = "INVALID_INPUT" | "SNAPSHOT_INVALID" | "SCOPE_ESCAPES_ROOT" | "NOT_FOUND" | "CONFLICT" | "LOCK_TIMEOUT" | "IO_ERROR" | "LLM_ERROR" | "ENCRYPTED_NO_KEY";
2
2
  export declare class RemembraError extends Error {
3
3
  readonly code: ErrorCode;
4
4
  constructor(code: ErrorCode, message: string, options?: {
package/dist/errors.js CHANGED
@@ -26,6 +26,7 @@ const HTTP_STATUS = {
26
26
  LOCK_TIMEOUT: 423, // Locked
27
27
  IO_ERROR: 500,
28
28
  LLM_ERROR: 502,
29
+ ENCRYPTED_NO_KEY: 503, // Service Unavailable — storage unreadable without the key
29
30
  };
30
31
  export function statusFor(err) {
31
32
  return HTTP_STATUS[err.code] ?? 500;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
package/dist/http.d.ts CHANGED
@@ -30,6 +30,9 @@ export declare function resolveListen(host: string | undefined, hasKey: boolean)
30
30
  * GET /memories → ?scope=&type=&includeArchived=&offset=&limit=
31
31
  * POST /memories/digest → LLM extraction
32
32
  * POST /maintain → decay sweep + vector backfill
33
+ * GET /memories/:id → one memory + related + backlinks (Phase 8)
34
+ * POST /memories/:id/relate → link/unlink memories (Phase 8)
35
+ * GET /memories/:id/history→ version history + line diffs (Phase 8)
33
36
  * DELETE /memories/:id → forget
34
37
  */
35
38
  export declare function createHttpServer(service: MemoryService, opts?: HttpOptions): http.Server;
package/dist/http.js CHANGED
@@ -34,6 +34,9 @@ export function resolveListen(host, hasKey) {
34
34
  * GET /memories → ?scope=&type=&includeArchived=&offset=&limit=
35
35
  * POST /memories/digest → LLM extraction
36
36
  * POST /maintain → decay sweep + vector backfill
37
+ * GET /memories/:id → one memory + related + backlinks (Phase 8)
38
+ * POST /memories/:id/relate → link/unlink memories (Phase 8)
39
+ * GET /memories/:id/history→ version history + line diffs (Phase 8)
37
40
  * DELETE /memories/:id → forget
38
41
  */
39
42
  export function createHttpServer(service, opts = {}) {
@@ -120,6 +123,26 @@ export function createHttpServer(service, opts = {}) {
120
123
  const result = await service.forget(decodeURIComponent(del[1]));
121
124
  return send(res, result.ok ? 200 : 404, result);
122
125
  }
126
+ // Graph sub-routes (audit Phase 8): POST relate, GET history.
127
+ const sub = path.match(/^\/memories\/([^/]+)\/(relate|history)$/);
128
+ if (sub && req.method === "POST" && sub[2] === "relate") {
129
+ const body = (await readBody(req, maxBody));
130
+ const result = await service.relate({ ...body, id: decodeURIComponent(sub[1]) }); // path id wins
131
+ return send(res, 200, result);
132
+ }
133
+ if (sub && req.method === "GET" && sub[2] === "history") {
134
+ const result = await service.history({
135
+ id: decodeURIComponent(sub[1]),
136
+ limit: intParam(url.searchParams.get("limit"), 1) ?? undefined,
137
+ });
138
+ return send(res, 200, result);
139
+ }
140
+ // GET /memories/:id — memory with related links + backlinks
141
+ const single = path.match(/^\/memories\/([^/]+)$/);
142
+ if (req.method === "GET" && single) {
143
+ const result = await service.get(decodeURIComponent(single[1]));
144
+ return send(res, 200, result);
145
+ }
123
146
  send(res, 404, { error: `No route: ${req.method} ${path}` });
124
147
  }
125
148
  catch (err) {
@@ -172,6 +195,8 @@ function routeLabel(p) {
172
195
  case "/maintain":
173
196
  return "maintain";
174
197
  default:
198
+ if (/^\/memories\/[^/]+\/(relate|history)$/.test(p))
199
+ return "memory_sub";
175
200
  return /^\/memories\/[^/]+$/.test(p) ? "memory_item" : "other";
176
201
  }
177
202
  }
package/dist/http.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -7,7 +7,7 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
7
7
  import { MemoryStore } from "./store.js";
8
8
  import { MemoryService } from "./service.js";
9
9
  import { createHttpServer } from "./http.js";
10
- import { DigestInput, storeInputShape, digestInputShape, searchInputShape, listInputShape, forgetInputShape, } from "./types.js";
10
+ import { DigestInput, storeInputShape, digestInputShape, searchInputShape, listInputShape, forgetInputShape, getInputShape, relateInputShape, historyInputShape, } from "./types.js";
11
11
  import { toolFail } from "./errors.js";
12
12
  const store = new MemoryStore(MemoryStore.defaultRoot());
13
13
  const service = new MemoryService(store);
@@ -60,6 +60,21 @@ else if (maintainFlag) {
60
60
  console.log(JSON.stringify(result, null, 2));
61
61
  process.exit(0);
62
62
  }
63
+ else if (argv[0] === "encrypt" || argv[0] === "decrypt") {
64
+ // CLI encryption migration (audit Phase 8): rewrite the tree in place
65
+ // under the storage lock. Requires REMEMBRA_ENCRYPT_KEY either way.
66
+ // remembra encrypt → plain files become AES-256-GCM ciphertext
67
+ // remembra decrypt → ciphertext becomes plain markdown again
68
+ try {
69
+ const result = await store.migrateEncryption(argv[0]);
70
+ console.log(`${argv[0]}: ${result.converted} converted, ${result.skipped} already in target state`);
71
+ process.exit(0);
72
+ }
73
+ catch (err) {
74
+ console.error(`${argv[0]} failed: ${err instanceof Error ? err.message : err}`);
75
+ process.exit(1);
76
+ }
77
+ }
63
78
  else if (httpFlag) {
64
79
  // HTTP mode: long-running API for non-MCP clients (ChatGPT, scripts, ...).
65
80
  const httpServer = createHttpServer(service, {
@@ -177,6 +192,49 @@ async function startMcp() {
177
192
  return toolFail(err);
178
193
  }
179
194
  });
195
+ server.registerTool("memory_get", {
196
+ title: "Get a memory",
197
+ description: "Fetch one memory by id with its related links and backlinks (memories that point at it). " +
198
+ "Use after memory_search when you need the full statement, not the snippet.",
199
+ inputSchema: getInputShape,
200
+ }, async ({ id }) => {
201
+ try {
202
+ const result = await service.get(id);
203
+ return { content: [{ type: "text", text: result.text }] };
204
+ }
205
+ catch (err) {
206
+ return toolFail(err);
207
+ }
208
+ });
209
+ server.registerTool("memory_relate", {
210
+ title: "Link memories",
211
+ description: "Create or remove directed links between memories (the relationship graph): " +
212
+ "e.g. tie a decision to the facts it depends on, or a history entry to the decision it records. " +
213
+ "Targets must exist; backlinks are visible via memory_get.",
214
+ inputSchema: relateInputShape,
215
+ }, async (args) => {
216
+ try {
217
+ const result = await service.relate(args);
218
+ return { content: [{ type: "text", text: result.text }] };
219
+ }
220
+ catch (err) {
221
+ return toolFail(err);
222
+ }
223
+ });
224
+ server.registerTool("memory_history", {
225
+ title: "Show memory history",
226
+ description: "Version history of one memory with unified line diffs — every content-changing " +
227
+ "update (e.g. a contradiction merge) snapshots the previous version. Newest first.",
228
+ inputSchema: historyInputShape,
229
+ }, async (args) => {
230
+ try {
231
+ const result = await service.history(args);
232
+ return { content: [{ type: "text", text: result.text }] };
233
+ }
234
+ catch (err) {
235
+ return toolFail(err);
236
+ }
237
+ });
180
238
  const transport = new StdioServerTransport();
181
239
  await server.connect(transport);
182
240
  // Log hygiene (audit #7): filesystem paths only under REMEMBRA_DEBUG.