superlocalmemory 4.0.8 → 4.0.9

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.
Files changed (120) hide show
  1. package/CHANGELOG.md +146 -1
  2. package/README.md +6 -6
  3. package/package.json +1 -1
  4. package/plugin/.claude-plugin/plugin.json +1 -1
  5. package/plugin/CLAUDE.md +3 -3
  6. package/plugin/agents/slm-governance-advisor.md +1 -1
  7. package/plugin/agents/slm-loop-runner.md +1 -1
  8. package/plugin/agents/slm-memory-advisor.md +1 -1
  9. package/plugin/agents/slm-optimize-advisor.md +1 -1
  10. package/plugin/requirements.txt +1 -1
  11. package/plugin/scripts/ensure-venv.sh +1 -1
  12. package/plugin/skills/slm-cache/SKILL.md +1 -1
  13. package/plugin/skills/slm-compress/SKILL.md +1 -1
  14. package/plugin/skills/slm-governance/SKILL.md +1 -1
  15. package/plugin/skills/slm-graph/SKILL.md +1 -1
  16. package/plugin/skills/slm-loop/SKILL.md +1 -1
  17. package/plugin/skills/slm-mesh/SKILL.md +1 -1
  18. package/plugin/skills/slm-profile/SKILL.md +1 -1
  19. package/plugin/skills/slm-recall/SKILL.md +1 -1
  20. package/plugin/skills/slm-remember/SKILL.md +1 -1
  21. package/plugin/skills/slm-scope/SKILL.md +1 -1
  22. package/plugin/skills/slm-session/SKILL.md +1 -1
  23. package/plugin/skills/slm-status/SKILL.md +3 -3
  24. package/plugin-src/rules/AGENTS.md +1 -1
  25. package/plugin-src/skills/slm-status/SKILL.md +2 -2
  26. package/pyproject.toml +1 -1
  27. package/scripts/postinstall.js +4 -0
  28. package/src/superlocalmemory/__init__.py +1 -1
  29. package/src/superlocalmemory/cli/_lazy_init.py +1 -1
  30. package/src/superlocalmemory/cli/commands.py +119 -9
  31. package/src/superlocalmemory/cli/db_migrate.py +0 -2
  32. package/src/superlocalmemory/cli/gdpr_io.py +1 -1
  33. package/src/superlocalmemory/cli/main.py +5 -5
  34. package/src/superlocalmemory/cli/service_installer.py +2 -1
  35. package/src/superlocalmemory/cli/setup_wizard.py +1 -1
  36. package/src/superlocalmemory/core/config.py +41 -7
  37. package/src/superlocalmemory/core/context_cache.py +0 -2
  38. package/src/superlocalmemory/core/engine.py +371 -63
  39. package/src/superlocalmemory/core/evidence_bundle.py +3 -1
  40. package/src/superlocalmemory/core/install_detector.py +131 -0
  41. package/src/superlocalmemory/core/progressive_abstraction.py +1 -1
  42. package/src/superlocalmemory/core/security_primitives.py +3 -6
  43. package/src/superlocalmemory/core/store_pipeline.py +94 -26
  44. package/src/superlocalmemory/core/topic_signature.py +0 -2
  45. package/src/superlocalmemory/core/transactions/concrete_owners.py +15 -8
  46. package/src/superlocalmemory/dynamics/eap_scheduler.py +17 -6
  47. package/src/superlocalmemory/encoding/graph_builder.py +2 -2
  48. package/src/superlocalmemory/encoding/scene_builder.py +8 -2
  49. package/src/superlocalmemory/hooks/adapter_base.py +0 -2
  50. package/src/superlocalmemory/hooks/context_payload.py +0 -2
  51. package/src/superlocalmemory/hooks/portable_kit.py +8 -8
  52. package/src/superlocalmemory/hooks/post_tool_async_hook.py +0 -2
  53. package/src/superlocalmemory/hooks/prewarm_auth.py +0 -2
  54. package/src/superlocalmemory/hooks/user_prompt_hook.py +0 -2
  55. package/src/superlocalmemory/infra/backup.py +44 -8
  56. package/src/superlocalmemory/integrations/bounded_loops_mcp.py +24 -7
  57. package/src/superlocalmemory/learning/arm_catalog.py +0 -2
  58. package/src/superlocalmemory/learning/bandit.py +0 -2
  59. package/src/superlocalmemory/learning/bandit_cache.py +0 -2
  60. package/src/superlocalmemory/learning/dedup_hnsw.py +11 -11
  61. package/src/superlocalmemory/learning/ensemble.py +0 -2
  62. package/src/superlocalmemory/learning/labeler.py +0 -2
  63. package/src/superlocalmemory/learning/legacy_migration.py +0 -2
  64. package/src/superlocalmemory/learning/model_cache.py +0 -2
  65. package/src/superlocalmemory/learning/ranker.py +0 -2
  66. package/src/superlocalmemory/learning/reward_archive.py +6 -1
  67. package/src/superlocalmemory/learning/reward_proxy.py +0 -2
  68. package/src/superlocalmemory/learning/signal_worker.py +0 -2
  69. package/src/superlocalmemory/math/fisher.py +1 -1
  70. package/src/superlocalmemory/math/hopfield.py +4 -1
  71. package/src/superlocalmemory/math/langevin.py +1 -1
  72. package/src/superlocalmemory/math/sheaf.py +7 -3
  73. package/src/superlocalmemory/mcp/cli_fallback.py +1 -1
  74. package/src/superlocalmemory/mcp/profiles.py +1 -1
  75. package/src/superlocalmemory/mcp/server.py +1 -1
  76. package/src/superlocalmemory/mcp/tools_active.py +56 -0
  77. package/src/superlocalmemory/mcp/tools_core.py +1 -1
  78. package/src/superlocalmemory/optimize/cache/manager.py +2 -2
  79. package/src/superlocalmemory/optimize/compress/ccr.py +1 -1
  80. package/src/superlocalmemory/optimize/compress/router.py +1 -1
  81. package/src/superlocalmemory/optimize/proxy/_helpers.py +2 -2
  82. package/src/superlocalmemory/optimize/proxy/server.py +1 -1
  83. package/src/superlocalmemory/optimize/proxy/vertex_surface.py +2 -2
  84. package/src/superlocalmemory/optimize/storage/db.py +2 -2
  85. package/src/superlocalmemory/retrieval/agentic.py +1 -1
  86. package/src/superlocalmemory/retrieval/ann_index.py +9 -2
  87. package/src/superlocalmemory/retrieval/bm25_channel.py +2 -2
  88. package/src/superlocalmemory/retrieval/bridge_discovery.py +2 -2
  89. package/src/superlocalmemory/retrieval/engine.py +272 -43
  90. package/src/superlocalmemory/retrieval/entity_channel.py +1 -1
  91. package/src/superlocalmemory/retrieval/hopfield_channel.py +8 -2
  92. package/src/superlocalmemory/retrieval/profile_channel.py +1 -1
  93. package/src/superlocalmemory/retrieval/quantization_aware_search.py +1 -1
  94. package/src/superlocalmemory/retrieval/remote_reranker.py +2 -2
  95. package/src/superlocalmemory/retrieval/reranker.py +3 -3
  96. package/src/superlocalmemory/retrieval/semantic_channel.py +3 -3
  97. package/src/superlocalmemory/retrieval/spreading_activation.py +8 -8
  98. package/src/superlocalmemory/retrieval/strategy.py +94 -0
  99. package/src/superlocalmemory/retrieval/temporal_channel.py +167 -10
  100. package/src/superlocalmemory/retrieval/temporal_validity_filter.py +1 -1
  101. package/src/superlocalmemory/retrieval/vector_store.py +88 -10
  102. package/src/superlocalmemory/server/recall_serializer.py +10 -0
  103. package/src/superlocalmemory/server/routes/brain.py +2 -2
  104. package/src/superlocalmemory/server/routes/prewarm.py +4 -4
  105. package/src/superlocalmemory/server/unified_daemon.py +459 -7
  106. package/src/superlocalmemory/storage/_schema_version.py +46 -3
  107. package/src/superlocalmemory/storage/backup.py +531 -0
  108. package/src/superlocalmemory/storage/database.py +11 -4
  109. package/src/superlocalmemory/storage/embedding_codec.py +129 -0
  110. package/src/superlocalmemory/storage/embedding_migrator.py +5 -3
  111. package/src/superlocalmemory/storage/migration_runner.py +142 -2
  112. package/src/superlocalmemory/storage/migrations/__init__.py +1 -1
  113. package/src/superlocalmemory/storage/migrations.py +15 -1
  114. package/src/superlocalmemory/storage/models.py +7 -0
  115. package/src/superlocalmemory/storage/quantized_store.py +4 -2
  116. package/src/superlocalmemory/summaries/session_summary.py +1 -1
  117. package/src/superlocalmemory/ui/css/legacy-dashboard.css +1 -1
  118. package/src/superlocalmemory/ui/css/neural-glass.css +1 -1
  119. package/src/superlocalmemory/ui/js/core.js +1 -1
  120. package/src/superlocalmemory/ui/js/od-brain.js +1 -1
package/CHANGELOG.md CHANGED
@@ -5,6 +5,151 @@ All notable changes to SuperLocalMemory will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [4.0.9] — Findable the moment you write it
9
+
10
+ ### Fixed
11
+ - **A memory you just wrote could not be found by asking for it.** Until a
12
+ background pass caught up, a new memory was reachable only by quoting its own
13
+ wording — which is not how anyone asks a question. "What am I working on"
14
+ shares no distinctive word with any particular note, so the memory describing
15
+ what you are doing right now was the hardest thing in the store to find. Every
16
+ way of storing one — command line, tool interface, dashboard — now makes it
17
+ searchable by meaning before it answers, bounded so that a slow or missing
18
+ model costs a short wait and never the write itself. The receipt says which of
19
+ three states a memory is in: stored, findable by its wording, findable by
20
+ meaning.
21
+ - **"What am I working on" answered with notes from a month ago.** Four separate
22
+ faults sat between the question and the answer. The present-tense path weighted
23
+ word-matching more heavily than the path it replaced, so a stale note
24
+ containing the word "working" beat a fresh one. A recency lookup was switched
25
+ off by an unrelated condition that is almost always true. A fact carrying
26
+ several dated events crowded out other recent facts with copies of itself. And
27
+ the lookup drew its candidates from a list that is only assembled later, and
28
+ only for notes that mention a recognisable name and a date — so a plain note
29
+ written seconds ago was not merely ranked low, it was not a candidate at all.
30
+ Recent notes are now read from the memories themselves. Questions about topics
31
+ still answer on topic — asking about the schema does not return whatever is
32
+ newest.
33
+ - **A memory could be reported as findable by meaning when it was not.** Two
34
+ things have to agree before a search on meaning can reach a memory, and one of
35
+ the two ways of storing one wrote them in the wrong order: if the second write
36
+ was refused — because the store was at a different size, or the search
37
+ extension was unavailable on the platform — the memory was left in a state that
38
+ reads as complete, so the pass that repairs missed memories skipped it forever
39
+ while the receipt claimed success. Both writes now happen in the one order that
40
+ is safe, through shared code rather than two copies of it, and if the second
41
+ fails the first is undone so the repair pass can retry. "Already findable" is
42
+ now decided by asking whether a search could actually return the memory.
43
+ - **Questions like "what is the latest authentication design" returned the newest
44
+ notes rather than an answer.** Two words routed any question containing them
45
+ down the time-based path, where a question with no recognisable name in it fell
46
+ back to listing recent memories with no regard for the topic. Asking what is
47
+ latest about something now answers about that something. "What am I currently
48
+ focused on" still answers with current work.
49
+ - **A question about a span of time missed anything recorded as spanning it.** An
50
+ entry describing a period rather than a moment carries no single date, and the
51
+ lookup for date-anchored questions required one — so "what happened in March
52
+ 2024" could not return an entry that says it covers March 2024.
53
+ - **The documented switch for turning the present-tense ranking off did nothing
54
+ when set in configuration.** It worked only as an environment variable, which
55
+ is not what it is documented as. Both now work, and the environment variable
56
+ still wins.
57
+ - **Converting a store could stop making progress instead of finishing.** A row
58
+ that cannot be converted — malformed, or the wrong size — was left in place and
59
+ then selected again on the next pass, so a single bad row meant the conversion
60
+ ran indefinitely without converting anything further. It now moves past what it
61
+ cannot convert, reports how many, and finishes.
62
+ - **Retention could delete half of a safety copy.** The two files taken before an
63
+ upgrade were sometimes counted as two separate copies rather than one, so
64
+ retention could keep one file of a pair and discard the other, leaving a copy
65
+ that cannot be restored from. Choosing the newest copy also relied on file
66
+ timestamps, which on some filesystems cannot tell two copies apart; it now uses
67
+ the timestamp in the name, which can.
68
+ - **An upgrade could be refused on a disk with room for it.** The space check
69
+ asked for roughly twice what the copy actually needs.
70
+ - **Retrying an upgrade that had failed did not take a fresh copy first.** A
71
+ failed step was treated as a finished one, so the retry ran against the
72
+ half-changed store with no new copy taken. The message now also says where the
73
+ copy from the first attempt is.
74
+ - **Shutting the service down could exceed its shutdown budget** and be killed
75
+ mid-write, because the workers that make new memories searchable were never
76
+ released. They are now released on shutdown, and a memory arriving during
77
+ shutdown is declined rather than starting new work.
78
+ - **A question about a particular time missed anything older than the most recent
79
+ few thousand events**, returning nothing rather than answering slowly.
80
+ - **`slm remember --sync` promised to wait and did not.** The flag is now
81
+ honoured, and asking to wait buys a longer attempt at making the memory
82
+ searchable.
83
+ - **A failed upgrade could report that your data was untouched when earlier steps
84
+ had already been applied.** The message now distinguishes a partial change from
85
+ no change, and points at the copy taken beforehand.
86
+ - **The copy taken before an upgrade could be deleted by a later start.** It was
87
+ being retaken on every ordinary start and pruned by retention, so two restarts
88
+ after an upgrade removed the last copy of the original. It is now taken only
89
+ when something is actually about to change.
90
+
91
+ ### Changed
92
+ - **Embeddings are stored in binary rather than text** — the same values to the
93
+ last decimal, five and a half times smaller. Existing stores are converted in
94
+ place; the conversion copies the store aside and verifies the copy first,
95
+ refuses while a service still holds it, and asks before rewriting anything.
96
+ - **Recall tail latency is roughly halved**, and the time a write may spend
97
+ making itself findable has been raised rather than lowered. Giving up early on
98
+ that was never free: it decided whether a memory could be found by asking a
99
+ question or only by quoting its own words. A retrieval channel is likewise
100
+ given more time to answer, because a channel that runs out of time contributes
101
+ nothing at all and the answer silently loses whatever only it could see. That
102
+ limit is now what it was always described as — a guard against one part of
103
+ retrieval getting stuck, set far above how long any of them actually takes,
104
+ rather than a cutoff that trims the wait by dropping part of the answer.
105
+ - **When part of an answer is missing, the reply now says which part.** If one
106
+ source of results has to be abandoned, its memories are absent from that
107
+ answer rather than merely late — so asking again can legitimately give
108
+ something better. Replies carry the list of anything that was abandoned, which
109
+ is empty on a healthy answer, so it is possible to tell an incomplete answer
110
+ from a changed one instead of guessing.
111
+ - **Asking the same question twice gives the same answer.** This had two
112
+ separate causes. Several points in retrieval ordered results by score alone,
113
+ so memories that scored equally were ranked by where they happened to sit on
114
+ disk or which thread finished first. And two stages that improve an answer —
115
+ one that brings in related memories, one that re-scores results by how they
116
+ connect to the things your question mentions — ran only if the answer was not
117
+ already taking too long. Both stages change which memory comes first, so
118
+ whether they ran decided the answer, and the time they were measured against
119
+ was close to how long a typical question takes anyway. The same question
120
+ asked twice took different paths depending on how busy the machine was, and
121
+ nothing in the reply said so. Ordering is now decided only by the data, and
122
+ those stages always run. Measured over 140 questions on a 1 GB store, asked
123
+ twice: the top answer changed on 15% of them before and 5.7% after, and the
124
+ top ten changed on 41% before and 13.6% after. Answering takes roughly a
125
+ tenth of a second longer.
126
+ - **A ranking adjustment for questions about time now actually affects the
127
+ order results come back in.** It was being calculated and then discarded.
128
+ - **Storing a memory stays inside its time budget.** The durable write and the
129
+ work that makes the memory findable by meaning run one after the other, and
130
+ each had been given the whole budget, so a slow write could push the reply to
131
+ several seconds. The second now takes what the first left.
132
+ - **Converting a store can no longer report success while storing nonsense.**
133
+ Two malformed shapes — a vector of one-element lists, and numbers too large to
134
+ represent — passed the size check and would have been written as garbage.
135
+ Both are now rejected and reported, and the memory keeps its original value.
136
+ - **A memory is no longer reported findable by meaning unless both of its stored
137
+ forms agree.** Either one alone could be present without the other, and each
138
+ case was invisible to the pass that repairs it.
139
+ - **Shutting the service down twice in one process no longer halves the capacity
140
+ that makes new memories findable.**
141
+ - **More of your memories can be reached at all.** One stage of retrieval decides
142
+ the final set of results, and the number of candidates handed to it had been cut
143
+ to save time — which quietly meant anything ranked below that cut could never be
144
+ returned, no matter how well it matched. The cut is undone. Recall spends a
145
+ little longer and can reach everything.
146
+ - **Questions about the past distinguish two days ago from a month ago again.**
147
+ The adjustment applied to time-based questions was capped so low that it landed
148
+ on the same value for everything inside about five weeks, so it could not tell
149
+ recent from distant. Note that this changes ranking order for such questions.
150
+ - Storing a memory reports whether it is searchable by meaning yet, so a caller
151
+ no longer has to assume.
152
+
8
153
  ## [4.0.8] — Where you were actually looking
9
154
 
10
155
  ### Added
@@ -944,7 +1089,7 @@ Eight community pull requests merged after line-by-line review, plus fixes for t
944
1089
 
945
1090
  ## [3.6.14] - 2026-06-18 — Audit-hardened: memory bounds, cross-tenant cache isolation, atomic credentials
946
1091
 
947
- Shipped through two adversarial audit passes (Qualixar Iron Pattern Stages 8–9), validated against a green 5933-test suite under the real 3.12 runtime. Default single-machine behavior is unchanged.
1092
+ Default single-machine behavior is unchanged.
948
1093
 
949
1094
  ### Security
950
1095
 
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  </picture>
6
6
  </p>
7
7
 
8
- <h1 align="center">SuperLocalMemory V4.0.8</h1>
8
+ <h1 align="center">SuperLocalMemory V4.0.9</h1>
9
9
 
10
10
  <h2 align="center">Rent the LLM. Own the memory.</h2>
11
11
 
@@ -27,12 +27,12 @@ guarantee here is stated as a falsifiable invariant, tested under an adversarial
27
27
  negative control, and shipped with the harness that regenerates the evidence:
28
28
  <code>python benchmark/run_all.py --trials 200 --output-dir results/</code>. What each experiment
29
29
  does <em>not</em> exercise is stated too.</p>
30
- <p align="center"><code>v4.0.8</code> — one control plane: <strong>SLM-Mesh</strong> peer coordination · multi-scope memory (personal / shared / global) · profiles · Cache · Compress · 7-layer retrieval · code graph · Entity Explorer · skill evolution · Modes A/B/C · GDPR retention &amp; audit chain · bounded loops — across CLI, MCP, dashboard, the <strong>Claude plugin</strong>, the <strong>Codex add-on</strong>, and documented IDE integrations.<br/>
30
+ <p align="center"><code>v4.0.9</code> — one control plane: <strong>SLM-Mesh</strong> peer coordination · multi-scope memory (personal / shared / global) · profiles · Cache · Compress · 7-layer retrieval · code graph · Entity Explorer · skill evolution · Modes A/B/C · GDPR retention &amp; audit chain · bounded loops — across CLI, MCP, dashboard, the <strong>Claude plugin</strong>, the <strong>Codex add-on</strong>, and documented IDE integrations.<br/>
31
31
  Proxy: <code>slm wrap claude</code> &nbsp;·&nbsp; MCP: add <code>slm_compress</code> to your config &nbsp;·&nbsp; Skill: zero-config</p>
32
32
  <p align="center"><strong>Four public arXiv preprints</strong> · V4: <a href="https://arxiv.org/abs/2608.08253">arXiv:2608.08253</a> · companion archive: <a href="https://zenodo.org/records/21853302">Zenodo 21853302</a> (<a href="https://doi.org/10.5281/zenodo.21853302">DOI 10.5281/zenodo.21853302</a>) · prior preprints: <a href="https://arxiv.org/abs/2603.02240">2603.02240</a> · <a href="https://arxiv.org/abs/2603.14588">2603.14588</a> · <a href="https://arxiv.org/abs/2604.04514">2604.04514</a>.</p>
33
33
 
34
34
  <p align="center">
35
- <a href="CHANGELOG.md"><img src="https://img.shields.io/badge/v4.0.8-Current_Release-2ea44f?style=for-the-badge&logo=checkmarx&logoColor=white" alt="v4.0.8 — Current Release"/></a>
35
+ <a href="CHANGELOG.md"><img src="https://img.shields.io/badge/v4.0.9-Current_Release-2ea44f?style=for-the-badge&logo=checkmarx&logoColor=white" alt="v4.0.9 — Current Release"/></a>
36
36
  <a href="https://arxiv.org/abs/2608.08253"><img src="https://img.shields.io/badge/arXiv-2608.08253-b31b1b?style=for-the-badge&logo=arxiv&logoColor=white" alt="SuperLocalMemory 4.0 paper on arXiv:2608.08253"/></a>
37
37
  <a href="https://zenodo.org/records/21853302"><img src="https://img.shields.io/badge/Zenodo-10.5281%2Fzenodo.21853302-1682D4?style=for-the-badge&logo=zenodo&logoColor=white" alt="V4 paper on Zenodo: 10.5281/zenodo.21853302"/></a>
38
38
  <a href="https://arxiv.org/abs/2603.14588"><img src="https://img.shields.io/badge/arXiv-2603.14588-b31b1b?style=for-the-badge&logo=arxiv&logoColor=white" alt="arXiv Paper"/></a>
@@ -386,8 +386,8 @@ Full docs: [docs/multi-machine.md](docs/multi-machine.md) · [docs/distributed-d
386
386
  | **Python CLI + SDK** (primary) | Activate a Python virtual environment, then `python -m pip install superlocalmemory` | Python 3.11+; the `slm` CLI and importable SDK stay inside that environment |
387
387
  | **Repository clone — macOS/Linux** | `./scripts/install.sh install` | Research/contributor path; delegates to an existing uv or pipx installation |
388
388
  | **Repository clone — Windows** | `.\scripts\install.ps1 -Action Install` | Research/contributor path; delegates to an existing uv or pipx installation |
389
- | **Claude Code Plugin** (WP-06) | `/plugin marketplace add qualixar/superlocalmemory` then `/plugin install superlocalmemory@qualixar` | Self-bootstraps venv, isolated SLM_DATA_DIR, additive — 16-tool core. Ships the skills/agents/hooks/commands |
390
- | **Portable / IDE connect** (WP-08) | `slm connect <ide> [--here]` | Wire any IDE without reinstalling; `slm connect claude-code` → plugin pointer |
389
+ | **Claude Code Plugin** | `/plugin marketplace add qualixar/superlocalmemory` then `/plugin install superlocalmemory@qualixar` | Self-bootstraps venv, isolated SLM_DATA_DIR, additive — 16-tool core. Ships the skills/agents/hooks/commands |
390
+ | **Portable / IDE connect** | `slm connect <ide> [--here]` | Wire any IDE without reinstalling; `slm connect claude-code` → plugin pointer |
391
391
 
392
392
  After any install path: `slm setup` → `slm doctor` → `slm warmup` (optional, pre-downloads ~500MB embedding model).
393
393
 
@@ -433,7 +433,7 @@ Or: `claude mcp add --transport http superlocalmemory http://127.0.0.1:8765/mcp/
433
433
  { "mcpServers": { "superlocalmemory": { "command": "slm", "args": ["mcp"] } } }
434
434
  ```
435
435
 
436
- ### MCP Profiles (WP-01)
436
+ ### MCP Profiles
437
437
 
438
438
  Control tool surface via `SLM_MCP_PROFILE`:
439
439
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "superlocalmemory",
3
- "version": "4.0.8",
3
+ "version": "4.0.9",
4
4
  "description": "Local-first agent memory with MCP and an agent-native CLI. Documented clients include Claude Code, Cursor, and Windsurf.",
5
5
  "keywords": [
6
6
  "ai-memory",
@@ -15,5 +15,5 @@
15
15
  "mcpServers": "./.mcp.json",
16
16
  "name": "superlocalmemory",
17
17
  "repository": "https://github.com/qualixar/superlocalmemory",
18
- "version": "4.0.8"
18
+ "version": "4.0.9"
19
19
  }
package/plugin/CLAUDE.md CHANGED
@@ -1,4 +1,4 @@
1
- <!-- BEGIN SuperLocalMemory v4.0.8 -->
1
+ <!-- BEGIN SuperLocalMemory v4.0.9 -->
2
2
 
3
3
  ## SuperLocalMemory (SLM) — Agent Rules
4
4
 
@@ -39,6 +39,6 @@ slm-recall · slm-remember · slm-session · slm-status · slm-cache · slm-comp
39
39
  ### Subagents
40
40
  slm-memory-advisor (memory decisions, session hygiene, scope/profile guidance) · slm-optimize-advisor (context compression + KV cache) · slm-governance-advisor (scope/roles/compliance/GDPR)
41
41
 
42
- <!-- END SuperLocalMemory v4.0.8 -->
42
+ <!-- END SuperLocalMemory v4.0.9 -->
43
43
 
44
- SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later
44
+ SuperLocalMemory v4.0.9 · Qualixar · AGPL-3.0-or-later
@@ -77,4 +77,4 @@ slm-scope · slm-governance · slm-profile · slm-remember · slm-recall
77
77
  # What NOT to do
78
78
  Never session_init twice; never forget without dry-run preview; never store secrets; never bypass role checks; never claim an erasure succeeded without verifying via recall.
79
79
 
80
- SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later
80
+ SuperLocalMemory v4.0.9 · Qualixar · AGPL-3.0-or-later
@@ -68,4 +68,4 @@ assessment. The gate is the authority.
68
68
 
69
69
  ---
70
70
 
71
- SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later
71
+ SuperLocalMemory v4.0.9 · Qualixar · AGPL-3.0-or-later
@@ -46,4 +46,4 @@ slm-recall · slm-remember · slm-session · slm-scope · slm-profile · slm-gov
46
46
  # What NOT to do
47
47
  Never session_init twice; never forget dry_run=False without reporting preview; never dump a whole file into remember; never invent a memory; never claim "saved" without success:true / clean CLI exit; never bypass scope or governance restrictions.
48
48
 
49
- SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later
49
+ SuperLocalMemory v4.0.9 · Qualixar · AGPL-3.0-or-later
@@ -41,4 +41,4 @@ slm-compress · slm-cache · slm-status · slm-profile
41
41
  # What NOT to do
42
42
  Never compress code-for-edit/JSON-to-parse/<500 chars; never store secrets/ccr_ids; never let optimize failure block/alter the task; never claim a specific savings %; never carry ccr_ids across profile switches.
43
43
 
44
- SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later
44
+ SuperLocalMemory v4.0.9 · Qualixar · AGPL-3.0-or-later
@@ -1 +1 @@
1
- superlocalmemory==4.0.8
1
+ superlocalmemory==4.0.9
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env bash
2
- # ensure-venv.sh — WP-06 SuperLocalMemory plugin venv bootstrap
2
+ # ensure-venv.sh — SuperLocalMemory plugin venv bootstrap
3
3
  #
4
4
  # Called by Claude Code SessionStart hook. Idempotent: fast-path exits in <100ms
5
5
  # on repeat invocations when requirements.txt is unchanged.
@@ -145,4 +145,4 @@ These subcommands control daemon-level cache settings. They do not read or write
145
145
 
146
146
  ---
147
147
 
148
- SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later
148
+ SuperLocalMemory v4.0.9 · Qualixar · AGPL-3.0-or-later
@@ -147,4 +147,4 @@ Content over 1 MB (1 000 000 bytes UTF-8) is processed but `reversible` is force
147
147
 
148
148
  ---
149
149
 
150
- SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later
150
+ SuperLocalMemory v4.0.9 · Qualixar · AGPL-3.0-or-later
@@ -245,4 +245,4 @@ Before running any destructive operation (`forget`, `compact_memories`):
245
245
 
246
246
  ---
247
247
 
248
- *SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later*
248
+ *SuperLocalMemory v4.0.9 · Qualixar · AGPL-3.0-or-later*
@@ -312,4 +312,4 @@ profile. See `slm-profile` for the full profile switching workflow.
312
312
 
313
313
  ---
314
314
 
315
- SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later
315
+ SuperLocalMemory v4.0.9 · Qualixar · AGPL-3.0-or-later
@@ -96,4 +96,4 @@ paused, name the approval needed; when errored, quote the short detail.
96
96
 
97
97
  ---
98
98
 
99
- SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later
99
+ SuperLocalMemory v4.0.9 · Qualixar · AGPL-3.0-or-later
@@ -279,4 +279,4 @@ mesh availability.
279
279
 
280
280
  ---
281
281
 
282
- *SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later*
282
+ *SuperLocalMemory v4.0.9 · Qualixar · AGPL-3.0-or-later*
@@ -146,4 +146,4 @@ Name them differently in your MCP config (e.g. `superlocalmemory-personal` and
146
146
 
147
147
  ---
148
148
 
149
- *SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later*
149
+ *SuperLocalMemory v4.0.9 · Qualixar · AGPL-3.0-or-later*
@@ -236,4 +236,4 @@ before recalling, then switch back. See `slm-profile` for workspace switching.
236
236
 
237
237
  ---
238
238
 
239
- *SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later*
239
+ *SuperLocalMemory v4.0.9 · Qualixar · AGPL-3.0-or-later*
@@ -238,4 +238,4 @@ different workspace, use `switch_profile` first. See `slm-profile`.
238
238
 
239
239
  ---
240
240
 
241
- *SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later*
241
+ *SuperLocalMemory v4.0.9 · Qualixar · AGPL-3.0-or-later*
@@ -173,4 +173,4 @@ to review the impact. See `slm-remember` for the full deletion discipline.
173
173
 
174
174
  ---
175
175
 
176
- *SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later*
176
+ *SuperLocalMemory v4.0.9 · Qualixar · AGPL-3.0-or-later*
@@ -227,4 +227,4 @@ explicitly and call `recall` with `include_global`/`include_shared` after
227
227
 
228
228
  ---
229
229
 
230
- *SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later*
230
+ *SuperLocalMemory v4.0.9 · Qualixar · AGPL-3.0-or-later*
@@ -61,7 +61,7 @@ If `cache_kv_hits` is 0 after repeated work, verify key naming consistency (the
61
61
  slm status [--json] [--verbose]
62
62
  ```
63
63
 
64
- Reports system-level state — not optimization counters. Canonical fields (WP-02):
64
+ Reports system-level state — not optimization counters. Canonical fields:
65
65
 
66
66
  - **mode** — active operation mode (e.g. `local`)
67
67
  - **profile** — current memory profile name
@@ -101,7 +101,7 @@ Do not rely on the human-readable format for parsing — always use `--json` whe
101
101
  slm doctor [--json] [--quick]
102
102
  ```
103
103
 
104
- Preflight check covering dependencies, embedding worker, daemon connectivity, and Surface B health. The **"Optimize (Surface B)"** line (WP-03) confirms whether the compression and cache subsystem initialised correctly.
104
+ Preflight check covering dependencies, embedding worker, daemon connectivity, and Surface B health. The **"Optimize (Surface B)"** line confirms whether the compression and cache subsystem initialised correctly.
105
105
 
106
106
  `--quick` skips the daemon and embedding probes — runs only dependency and config checks; faster but incomplete.
107
107
 
@@ -163,4 +163,4 @@ multi-profile setup. To switch the active profile, see `slm-profile`.
163
163
 
164
164
  ---
165
165
 
166
- SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later
166
+ SuperLocalMemory v4.0.9 · Qualixar · AGPL-3.0-or-later
@@ -129,4 +129,4 @@ When the SLM MCP server is unavailable, use these CLI equivalents:
129
129
  - **slm-optimize-advisor** — context compression and KV cache
130
130
  - **slm-governance-advisor** — scope/role compliance, retention policies, GDPR
131
131
 
132
- SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later
132
+ SuperLocalMemory v4.0.9 · Qualixar · AGPL-3.0-or-later
@@ -61,7 +61,7 @@ If `cache_kv_hits` is 0 after repeated work, verify key naming consistency (the
61
61
  slm status [--json] [--verbose]
62
62
  ```
63
63
 
64
- Reports system-level state — not optimization counters. Canonical fields (WP-02):
64
+ Reports system-level state — not optimization counters. Canonical fields:
65
65
 
66
66
  - **mode** — active operation mode (e.g. `local`)
67
67
  - **profile** — current memory profile name
@@ -101,7 +101,7 @@ Do not rely on the human-readable format for parsing — always use `--json` whe
101
101
  slm doctor [--json] [--quick]
102
102
  ```
103
103
 
104
- Preflight check covering dependencies, embedding worker, daemon connectivity, and Surface B health. The **"Optimize (Surface B)"** line (WP-03) confirms whether the compression and cache subsystem initialised correctly.
104
+ Preflight check covering dependencies, embedding worker, daemon connectivity, and Surface B health. The **"Optimize (Surface B)"** line confirms whether the compression and cache subsystem initialised correctly.
105
105
 
106
106
  `--quick` skips the daemon and embedding probes — runs only dependency and config checks; faster but incomplete.
107
107
 
package/pyproject.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "superlocalmemory"
3
- version = "4.0.8"
3
+ version = "4.0.9"
4
4
  description = "Local-first agent memory with auditable hybrid retrieval"
5
5
  readme = "README.md"
6
6
  license = "AGPL-3.0-or-later"
@@ -201,6 +201,10 @@ function main(argv = process.argv.slice(2)) {
201
201
  console.log(`SuperLocalMemory ${packageVersion}: isolated runtime verified.`);
202
202
  console.log('No memory database, IDE hooks, daemon, configuration, or models were changed.');
203
203
  console.log('');
204
+ console.log(' Your database will be automatically migrated on first run.');
205
+ console.log(' A backup is created in ~/.superlocalmemory/pre-migration-snapshots/ before');
206
+ console.log(' any migration runs. No action is needed from you.');
207
+ console.log('');
204
208
  console.log(' Next step — run the guided setup (picks your mode, downloads');
205
209
  console.log(' models, connects your IDEs). Takes about a minute:');
206
210
  console.log('');
@@ -32,7 +32,7 @@ if "OMP_NUM_THREADS" not in os.environ:
32
32
  os.environ["OMP_NUM_THREADS"] = "2"
33
33
  # ---------------------------------------------------------------------------
34
34
 
35
- __version__ = "4.0.8"
35
+ __version__ = "4.0.9"
36
36
 
37
37
  _REQUIRED_VERSIONS = {
38
38
  "sentence_transformers": "5.3.0",
@@ -2,7 +2,7 @@
2
2
  # Licensed under AGPL-3.0-or-later - see LICENSE file
3
3
  # Part of SuperLocalMemory V3 | https://qualixar.com | https://varunpratap.com
4
4
 
5
- """WP-07 — Lazy first-run initialisation (pip cross-install).
5
+ """Lazy first-run initialisation for pip cross-installs.
6
6
 
7
7
  Lightweight import only — zero heavy imports, STDOUT-SILENT.
8
8