@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 +71 -0
- package/README.md +8 -1
- package/dist/backend.d.ts +12 -0
- package/dist/crypto.d.ts +10 -0
- package/dist/crypto.js +77 -0
- package/dist/crypto.js.map +1 -0
- package/dist/diff.d.ts +15 -0
- package/dist/diff.js +135 -0
- package/dist/diff.js.map +1 -0
- package/dist/errors.d.ts +1 -1
- package/dist/errors.js +1 -0
- package/dist/errors.js.map +1 -1
- package/dist/http.d.ts +3 -0
- package/dist/http.js +25 -0
- package/dist/http.js.map +1 -1
- package/dist/index.js +59 -1
- package/dist/index.js.map +1 -1
- package/dist/llm.d.ts +2 -0
- package/dist/llm.js +3 -0
- package/dist/llm.js.map +1 -1
- package/dist/metrics.js +4 -0
- package/dist/metrics.js.map +1 -1
- package/dist/redact.d.ts +33 -0
- package/dist/redact.js +104 -0
- package/dist/redact.js.map +1 -0
- package/dist/service.d.ts +59 -0
- package/dist/service.js +169 -4
- package/dist/service.js.map +1 -1
- package/dist/store.d.ts +17 -1
- package/dist/store.js +126 -3
- package/dist/store.js.map +1 -1
- package/dist/types.d.ts +74 -0
- package/dist/types.js +30 -0
- package/dist/types.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/docs/architecture.md +52 -3
- package/docs/chatgpt.md +25 -0
- package/docs/clients.md +3 -0
- package/docs/lifecycle.md +10 -3
- package/docs/memory-model.md +42 -3
- package/docs/observability.md +7 -2
- package/docs/security.md +62 -3
- package/docs/tools.md +48 -1
- package/package.json +1 -1
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
|
}
|
package/dist/crypto.d.ts
ADDED
|
@@ -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
|
package/dist/diff.js.map
ADDED
|
@@ -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
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;
|
|
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.
|