nexusmem 0.4.0 → 0.5.1
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 +35 -1
- package/README.md +24 -1
- package/dist/cli/index.js +866 -361
- package/dist/cli/index.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,38 @@ built from, matched by publish timestamp: `v0.1.0` → `67a4776`, `v0.1.1` → `
|
|
|
9
9
|
|
|
10
10
|
## [Unreleased]
|
|
11
11
|
|
|
12
|
+
## [0.5.1] — 2026-08-17
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
|
|
16
|
+
- **`nexusmem forget --export <path>` / `forget --import <path>`: carry a deny-list across a clone or
|
|
17
|
+
restore.** `.nexusmem/` is gitignored by design, so `deny_list` never traveled with `git clone`/
|
|
18
|
+
`git push` — confirmed live 2026-08-17 that a fresh clone of the exact same repo resurrected a value
|
|
19
|
+
already forgotten elsewhere, with zero deny-list protection, because git history (what a fresh `sync`
|
|
20
|
+
re-derives from) is fully portable while the deny-list that would have blocked it was not. `--export`
|
|
21
|
+
writes the active entries to a plaintext JSON file (loudly warned as exactly as sensitive as the
|
|
22
|
+
values it holds — never meant for git, moved through whatever secure channel the user already
|
|
23
|
+
trusts); `--import` re-applies each new entry through `forget` itself, so an imported value is
|
|
24
|
+
deleted from the new checkout's nodes too, not just blocked going forward. Same dry-run-by-default /
|
|
25
|
+
`--yes` convention as the rest of `forget`. See `docs/forget-mechanism.md`.
|
|
26
|
+
|
|
27
|
+
## [0.5.0] — 2026-08-17
|
|
28
|
+
|
|
29
|
+
### Added
|
|
30
|
+
|
|
31
|
+
- **`nexusmem forget <value>`: permanent, value-keyed deletion.** The finer-grained complement to
|
|
32
|
+
`sync --prune-source` (which only deletes at the whole-collector-source granularity): forgets one
|
|
33
|
+
exact string or `--regex` pattern, deleting every node it currently matches *and* writing a
|
|
34
|
+
standing deny-list entry so the value can never be re-ingested — closing the one gap an external
|
|
35
|
+
source-level review flagged as its most serious finding: the append-only shell-hook log (and a
|
|
36
|
+
full transcript re-read) are untouched by any prune, so `sync --rebuild` used to resurrect exactly
|
|
37
|
+
what had just been deleted. Every removal leaves a hash-only tombstone (never the forgotten
|
|
38
|
+
content itself — `body`/`title` are stored as sha256 only) and the whole operation writes one
|
|
39
|
+
`mutation_audit` row, whether or not anything matched. Dry-run by default, matching
|
|
40
|
+
`--prune-source`'s convention exactly; `--yes` confirms; `--list` shows active entries. Permanent
|
|
41
|
+
in v0 — no `--remove`, matching the existing irreversible framing of `--prune-source`/`--rebuild`.
|
|
42
|
+
See `docs/forget-mechanism.md`.
|
|
43
|
+
|
|
12
44
|
## [0.4.0] — 2026-08-16
|
|
13
45
|
|
|
14
46
|
### Added
|
|
@@ -320,7 +352,9 @@ First public release.
|
|
|
320
352
|
there is no local-model summarization pass, and the conversation collector has never been audited
|
|
321
353
|
for the stale-node bug that was found and fixed in the docs collector.
|
|
322
354
|
|
|
323
|
-
[Unreleased]: https://github.com/yaminbkk/NexusMem/compare/v0.
|
|
355
|
+
[Unreleased]: https://github.com/yaminbkk/NexusMem/compare/v0.5.1...HEAD
|
|
356
|
+
[0.5.1]: https://github.com/yaminbkk/NexusMem/compare/v0.5.0...v0.5.1
|
|
357
|
+
[0.5.0]: https://github.com/yaminbkk/NexusMem/compare/v0.4.0...v0.5.0
|
|
324
358
|
[0.4.0]: https://github.com/yaminbkk/NexusMem/compare/v0.3.3...v0.4.0
|
|
325
359
|
[0.3.3]: https://github.com/yaminbkk/NexusMem/compare/v0.3.2...v0.3.3
|
|
326
360
|
[0.3.2]: https://github.com/yaminbkk/NexusMem/compare/v0.3.1...v0.3.2
|
package/README.md
CHANGED
|
@@ -318,10 +318,24 @@ optimizing, and it is somebody else's process.
|
|
|
318
318
|
against this repo's own memory, switching to the joint cap moved the section that answered the
|
|
319
319
|
question up in three of them (the rationale section for "why BM25 before vector search" went from
|
|
320
320
|
rank 4 to rank 1) and displaced no query's correct top hit.
|
|
321
|
+
- **`forget` is per-repository, not global.** Its deny-list lives in the one `.nexusmem/memory.db` it
|
|
322
|
+
ran against (plus that repo's stale prior identities, same scope `--prune-source` already uses). A
|
|
323
|
+
value that leaked into shell history from several repositories needs `forget` run once per repo —
|
|
324
|
+
there is no shared, machine-wide deny-list across every project you have synced.
|
|
325
|
+
- **A deny-list doesn't survive a clone or restore on its own.** `.nexusmem/` is gitignored by design,
|
|
326
|
+
so `deny_list` never travels with `git clone`/`git push` — while git history itself, the thing a
|
|
327
|
+
fresh `sync` re-derives from, is fully portable and copied by every clone. A teammate's fresh
|
|
328
|
+
checkout, a new machine, or a restored backup starts with zero protection: the forgotten value comes
|
|
329
|
+
right back on the first sync. Confirmed live 2026-08-17, not just a theoretical read of the code.
|
|
330
|
+
`forget --export <path>` / `forget --import <path>` close this: export writes the active entries to
|
|
331
|
+
a plaintext JSON file you move through a channel you control (never git — the file is exactly as
|
|
332
|
+
sensitive as the value it holds), and import re-applies them in the new checkout, deleting any
|
|
333
|
+
copies that already synced back in. It is deliberately manual, not automatic on every `sync`.
|
|
321
334
|
|
|
322
335
|
## Commands
|
|
323
336
|
|
|
324
|
-
`init`, `sync`, `query <text>`, `status`, `projects`, `mcp`,
|
|
337
|
+
`init`, `sync`, `query <text>`, `status`, `projects`, `mcp`, `forget <value>`, and
|
|
338
|
+
`hook install|remove|status`.
|
|
325
339
|
|
|
326
340
|
There are also five dry-run previews (`scan-git`, `scan-diff`, `scan-shell`, `scan-docs`,
|
|
327
341
|
`scan-conversation`)
|
|
@@ -334,6 +348,15 @@ transcript source in for one run without persisting it, `--no-embed` skips the v
|
|
|
334
348
|
`--link-failures` builds the failure → fix chains described above, and `--rebuild` drops the
|
|
335
349
|
project's nodes and re-ingests from scratch.
|
|
336
350
|
|
|
351
|
+
`sync --prune-source <name>` deletes an entire collector source (e.g. `shell:pwsh`); `forget <value>`
|
|
352
|
+
is the finer-grained complement — it deletes every node matching one exact string (or `--regex`
|
|
353
|
+
pattern) *and* writes a standing deny-list entry so the value can never be re-ingested, even by a
|
|
354
|
+
later `sync --rebuild` re-reading the append-only shell-hook log or a full transcript scan. Every
|
|
355
|
+
removal leaves a hash-only tombstone, never the forgotten content itself. Both are dry-run by
|
|
356
|
+
default; `--yes` confirms. `forget --list` shows active entries; `forget --export <path>` /
|
|
357
|
+
`forget --import <path>` carry them to another checkout of the same repo (see the limitation above).
|
|
358
|
+
See [`docs/forget-mechanism.md`](docs/forget-mechanism.md) for why this exists.
|
|
359
|
+
|
|
337
360
|
## Recall across projects
|
|
338
361
|
|
|
339
362
|
`query --all-projects` searches every repository you have run NexusMem in, not just the current one,
|