nexusmem 0.10.3 → 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 +81 -1
- package/README.md +10 -0
- package/dist/cli/index.js +1170 -205
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/recorder.js +207 -0
- package/dist/cli/recorder.js.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -11,6 +11,82 @@ built from, matched by publish timestamp: `v0.1.0` → `67a4776`, `v0.1.1` → `
|
|
|
11
11
|
|
|
12
12
|
No unreleased changes yet.
|
|
13
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.
|
|
89
|
+
|
|
14
90
|
## [0.10.3] — 2026-08-31
|
|
15
91
|
|
|
16
92
|
### Added
|
|
@@ -630,7 +706,11 @@ First public release.
|
|
|
630
706
|
there is no local-model summarization pass, and the conversation collector has never been audited
|
|
631
707
|
for the stale-node bug that was found and fixed in the docs collector.
|
|
632
708
|
|
|
633
|
-
[Unreleased]: https://github.com/yaminbkk/NexusMem/compare/v0.10.
|
|
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
|
|
634
714
|
[0.10.1]: https://github.com/yaminbkk/NexusMem/compare/v0.10.0...v0.10.1
|
|
635
715
|
[0.10.0]: https://github.com/yaminbkk/NexusMem/compare/v0.9.1...v0.10.0
|
|
636
716
|
[0.9.1]: https://github.com/yaminbkk/NexusMem/compare/v0.9.0...v0.9.1
|
package/README.md
CHANGED
|
@@ -23,6 +23,8 @@ The shell history is the part worth caring about. Git tells an agent what shippe
|
|
|
23
23
|
tells it what was attempted, in what order, and which commands exited non-zero. That information
|
|
24
24
|
exists nowhere else, and it disappears when your terminal scrollback rolls over.
|
|
25
25
|
|
|
26
|
+

|
|
27
|
+
|
|
26
28
|
**Contents:** [Try it](#try-it) · [Exact shell capture](#optional-exact-shell-capture) ·
|
|
27
29
|
[Failure → fix chains](#failure--fix-chains-opt-in) · [How retrieval works](#how-retrieval-works) ·
|
|
28
30
|
[Session summaries](#session-summaries-optional-local-model) ·
|
|
@@ -423,6 +425,9 @@ node afterward. `--verify` is a label only; it does not boost ranking. Every nod
|
|
|
423
425
|
|
|
424
426
|
`init`, `sync`, `query <text>` (add `--as-of <date>` for a bi-temporal read, see below), `status` (add
|
|
425
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),
|
|
426
431
|
`stale` (add `--check-contradictions` for a local-SLM content check, see above), `mark-stale
|
|
427
432
|
<nodeId> --supersedes <newNodeId>`, `review <nodeId> --verify|--reject` (record a human verdict on
|
|
428
433
|
one node, see above), `precheck` (advisory — warns about staged files with an unresolved past
|
|
@@ -539,6 +544,11 @@ Tests are behavioral rather than snapshot-based, and several are regressions tie
|
|
|
539
544
|
observed failures. `tests/git-errors.test.ts` injects a fake `spawn` to exercise the Windows
|
|
540
545
|
process-spawn faults, which cannot be provoked on demand.
|
|
541
546
|
|
|
547
|
+
Bug fixes, test coverage, and small focused features are welcome — see
|
|
548
|
+
[CONTRIBUTING.md](CONTRIBUTING.md) for the workflow, or browse issues labeled
|
|
549
|
+
[`good first issue`](https://github.com/yaminbkk/nexusmem/labels/good%20first%20issue)
|
|
550
|
+
for something scoped and self-contained to start with.
|
|
551
|
+
|
|
542
552
|
## On how this was built
|
|
543
553
|
|
|
544
554
|
This started as an experiment in whether a local context-memory engine for coding agents was viable,
|