nexusmem 0.10.4 → 0.10.5

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,28 +7,85 @@ Tags were added retroactively on 2026-08-11 and point at the exact commits the n
7
7
  built from, matched by publish timestamp: `v0.1.0` → `67a4776`, `v0.1.1` → `809e62c`,
8
8
  `v0.1.2` → `b22a3b0`.
9
9
 
10
- ## [Unreleased]
11
-
12
- No unreleased changes yet.
13
-
14
- ## [0.10.4] — 2026-09-07
15
-
16
- ### Added
17
-
18
- - Fresh-project syncs classify reconstructable Git commits and diffs, timestamped shell history,
19
- and already-supported opt-in coding-agent history as `backfilled` only when a trustworthy source
20
- timestamp predates NexusMem initialization. Trustworthily timestamped events between initialization
21
- and sync time are `observed`. Tracked Markdown, untimestamped shell history, and other records that
22
- cannot be classified remain `unknown`. Retrieval exposes this origin alongside the existing evidence
23
- provenance.
24
-
25
- ### Changed
26
-
27
- - Historical shell entries no longer receive timestamps inferred from history-file mtimes.
28
- Missing timestamp, cwd, exit code, and duration metadata remain null, and incomplete shell
29
- evidence is excluded from failure-to-fix correlation.
30
- - Schema V13 adds `nodes.capture_mode` and nullable `nodes.source_ts`. Existing approximate
31
- shell timestamps and document mtimes migrate to a null `source_ts`; other existing event timestamps are retained.
10
+ ## [Unreleased]
11
+
12
+ No unreleased changes yet.
13
+
14
+ ## [0.10.5] — 2026-09-11
15
+
16
+ Security release. Existing installs need action after upgrading — see "Action required" below.
17
+
18
+ ### Security
19
+
20
+ - Secret redaction missed keys whose secret word is part of a longer identifier: `DB_PASSWORD=x`,
21
+ `OPENAI_API_KEY=x`, `AUTH_TOKEN=x`, `CLIENT_SECRET=x` were kept verbatim (the rule's leading `\b`
22
+ never matches after `_`), as were values shorter than 8 characters or containing characters such
23
+ as `@ ! # $`. This affected `scan-shell` output, stored shell and conversation nodes, session
24
+ summaries, the FTS index, embeddings, and `search_memory` / `query` results.
25
+ - `shell_command` nodes stored the raw command in `meta.command`, so a typed secret was written to
26
+ `memory.db` even when the title showed it redacted, and was printed by `scan-shell --json` and
27
+ `precheck`. `meta.command` is now redacted; `meta.commandHash` keeps the raw command's hash so node
28
+ ids and project-id reconciliation are unchanged.
29
+ - The installed shell hooks appended every command raw to `~/.nexusmem/shell-history.jsonl`. Hooks now
30
+ pass each command to a NexusMem recorder over stdin; the recorder hashes and redacts it in memory
31
+ and writes only the redacted command. It writes no temp files and prints nothing, and it drops any
32
+ event it cannot process instead of writing it raw. Hooks installed by earlier versions keep writing
33
+ raw commands until reinstalled: `hook status` reports them as outdated, and `sync` redacts what they
34
+ write and warns.
35
+ - Redaction now also covers credentials in connection URIs (`postgres://user:pass@host`),
36
+ `Authorization:` headers and bearer tokens, secret-named options whose value is the next argument
37
+ (`--password x`), and `mysql -pX`, `sshpass -p`, `mongosh -p`, `redis-cli -a`, `curl -u user:pass`.
38
+
39
+ ### Added
40
+
41
+ - `nexusmem scrub-secrets [--all-projects] [--yes] [--no-embed]` removes secrets that earlier versions
42
+ already stored: shell, conversation, session-summary and code-diff rows, contradiction reasons, the
43
+ FTS index, embeddings, and the shell hook log. Dry run by default. `--yes` takes a backup of each
44
+ database first and prints its path, redacts rows in place (ids unchanged), drops and re-embeds
45
+ affected vectors, rebuilds the FTS index, runs `VACUUM`, and truncates the WAL. Safe to run
46
+ repeatedly. Existing `memory.db.backup-*` files are listed, never modified or deleted.
47
+
48
+ ### Action required
49
+
50
+ 1. Upgrade every NexusMem install (global CLI, MCP server configs, the post-commit hook's `nexusmem`),
51
+ then restart MCP clients and editors so no older version keeps writing.
52
+ 2. Run `nexusmem hook install` again in each shell you installed the hook for; `nexusmem hook status`
53
+ should say `installed`, not `OUTDATED`.
54
+ 3. Rotate any credential typed at a shell prompt or pasted into a captured conversation in the
55
+ affected forms. Scrubbing cannot recall copies already returned to an LLM, backed up, or synced.
56
+ 4. Run `nexusmem scrub-secrets --all-projects`, review, then re-run with `--yes`.
57
+ 5. Delete the `memory.db.backup-*` files NexusMem lists (they predate redaction) once you have
58
+ verified the scrubbed database.
59
+ 6. Do not use `nexusmem forget <secret>` for this: it stores the value itself in the database's
60
+ deny-list, and the shell hook captures a bare argument unredacted.
61
+
62
+ ### Known limitations
63
+
64
+ - NexusMem cannot change your shell's own history files (PSReadLine `ConsoleHost_history.txt`,
65
+ `~/.bash_history`, `~/.zsh_history`); they still contain whatever you typed.
66
+ - Not yet redacted: a token used as a URL username (`https://TOKEN@host`), `openssl -passin`,
67
+ `keytool -storepass`, `ssh-keygen -N`, secret-bearing keys without a secret word (`STRIPE_KEY`,
68
+ `DB_PW`), secrets passed as plain positional arguments, and commit messages, docs and GitHub
69
+ threads (never redacted).
70
+
71
+ ## [0.10.4] — 2026-09-07
72
+
73
+ ### Added
74
+
75
+ - Fresh-project syncs classify reconstructable Git commits and diffs, timestamped shell history,
76
+ and already-supported opt-in coding-agent history as `backfilled` only when a trustworthy source
77
+ timestamp predates NexusMem initialization. Trustworthily timestamped events between initialization
78
+ and sync time are `observed`. Tracked Markdown, untimestamped shell history, and other records that
79
+ cannot be classified remain `unknown`. Retrieval exposes this origin alongside the existing evidence
80
+ provenance.
81
+
82
+ ### Changed
83
+
84
+ - Historical shell entries no longer receive timestamps inferred from history-file mtimes.
85
+ Missing timestamp, cwd, exit code, and duration metadata remain null, and incomplete shell
86
+ evidence is excluded from failure-to-fix correlation.
87
+ - Schema V13 adds `nodes.capture_mode` and nullable `nodes.source_ts`. Existing approximate
88
+ shell timestamps and document mtimes migrate to a null `source_ts`; other existing event timestamps are retained.
32
89
 
33
90
  ## [0.10.3] — 2026-08-31
34
91
 
@@ -649,7 +706,11 @@ First public release.
649
706
  there is no local-model summarization pass, and the conversation collector has never been audited
650
707
  for the stale-node bug that was found and fixed in the docs collector.
651
708
 
652
- [Unreleased]: https://github.com/yaminbkk/NexusMem/compare/v0.10.1...HEAD
709
+ [Unreleased]: https://github.com/yaminbkk/NexusMem/compare/v0.10.5...HEAD
710
+ [0.10.5]: https://github.com/yaminbkk/NexusMem/compare/v0.10.4...v0.10.5
711
+ [0.10.4]: https://github.com/yaminbkk/NexusMem/compare/v0.10.3...v0.10.4
712
+ [0.10.3]: https://github.com/yaminbkk/NexusMem/compare/v0.10.2...v0.10.3
713
+ [0.10.2]: https://github.com/yaminbkk/NexusMem/compare/v0.10.1...v0.10.2
653
714
  [0.10.1]: https://github.com/yaminbkk/NexusMem/compare/v0.10.0...v0.10.1
654
715
  [0.10.0]: https://github.com/yaminbkk/NexusMem/compare/v0.9.1...v0.10.0
655
716
  [0.9.1]: https://github.com/yaminbkk/NexusMem/compare/v0.9.0...v0.9.1
package/README.md CHANGED
@@ -425,6 +425,9 @@ node afterward. `--verify` is a label only; it does not boost ranking. Every nod
425
425
 
426
426
  `init`, `sync`, `query <text>` (add `--as-of <date>` for a bi-temporal read, see below), `status` (add
427
427
  `--share` for a plain-text summary worth pasting somewhere), `projects`, `mcp`, `forget <value>`,
428
+ `scrub-secrets` (re-redacts secrets that versions before 0.10.5 already stored — database rows, FTS
429
+ index, embeddings and the shell hook log; dry-run unless `--yes`, which backs each database up first;
430
+ `--all-projects` covers every registered repository),
428
431
  `stale` (add `--check-contradictions` for a local-SLM content check, see above), `mark-stale
429
432
  <nodeId> --supersedes <newNodeId>`, `review <nodeId> --verify|--reject` (record a human verdict on
430
433
  one node, see above), `precheck` (advisory — warns about staged files with an unresolved past