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.
- package/CHANGELOG.md +146 -1
- package/README.md +6 -6
- package/package.json +1 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/CLAUDE.md +3 -3
- package/plugin/agents/slm-governance-advisor.md +1 -1
- package/plugin/agents/slm-loop-runner.md +1 -1
- package/plugin/agents/slm-memory-advisor.md +1 -1
- package/plugin/agents/slm-optimize-advisor.md +1 -1
- package/plugin/requirements.txt +1 -1
- package/plugin/scripts/ensure-venv.sh +1 -1
- package/plugin/skills/slm-cache/SKILL.md +1 -1
- package/plugin/skills/slm-compress/SKILL.md +1 -1
- package/plugin/skills/slm-governance/SKILL.md +1 -1
- package/plugin/skills/slm-graph/SKILL.md +1 -1
- package/plugin/skills/slm-loop/SKILL.md +1 -1
- package/plugin/skills/slm-mesh/SKILL.md +1 -1
- package/plugin/skills/slm-profile/SKILL.md +1 -1
- package/plugin/skills/slm-recall/SKILL.md +1 -1
- package/plugin/skills/slm-remember/SKILL.md +1 -1
- package/plugin/skills/slm-scope/SKILL.md +1 -1
- package/plugin/skills/slm-session/SKILL.md +1 -1
- package/plugin/skills/slm-status/SKILL.md +3 -3
- package/plugin-src/rules/AGENTS.md +1 -1
- package/plugin-src/skills/slm-status/SKILL.md +2 -2
- package/pyproject.toml +1 -1
- package/scripts/postinstall.js +4 -0
- package/src/superlocalmemory/__init__.py +1 -1
- package/src/superlocalmemory/cli/_lazy_init.py +1 -1
- package/src/superlocalmemory/cli/commands.py +119 -9
- package/src/superlocalmemory/cli/db_migrate.py +0 -2
- package/src/superlocalmemory/cli/gdpr_io.py +1 -1
- package/src/superlocalmemory/cli/main.py +5 -5
- package/src/superlocalmemory/cli/service_installer.py +2 -1
- package/src/superlocalmemory/cli/setup_wizard.py +1 -1
- package/src/superlocalmemory/core/config.py +41 -7
- package/src/superlocalmemory/core/context_cache.py +0 -2
- package/src/superlocalmemory/core/engine.py +371 -63
- package/src/superlocalmemory/core/evidence_bundle.py +3 -1
- package/src/superlocalmemory/core/install_detector.py +131 -0
- package/src/superlocalmemory/core/progressive_abstraction.py +1 -1
- package/src/superlocalmemory/core/security_primitives.py +3 -6
- package/src/superlocalmemory/core/store_pipeline.py +94 -26
- package/src/superlocalmemory/core/topic_signature.py +0 -2
- package/src/superlocalmemory/core/transactions/concrete_owners.py +15 -8
- package/src/superlocalmemory/dynamics/eap_scheduler.py +17 -6
- package/src/superlocalmemory/encoding/graph_builder.py +2 -2
- package/src/superlocalmemory/encoding/scene_builder.py +8 -2
- package/src/superlocalmemory/hooks/adapter_base.py +0 -2
- package/src/superlocalmemory/hooks/context_payload.py +0 -2
- package/src/superlocalmemory/hooks/portable_kit.py +8 -8
- package/src/superlocalmemory/hooks/post_tool_async_hook.py +0 -2
- package/src/superlocalmemory/hooks/prewarm_auth.py +0 -2
- package/src/superlocalmemory/hooks/user_prompt_hook.py +0 -2
- package/src/superlocalmemory/infra/backup.py +44 -8
- package/src/superlocalmemory/integrations/bounded_loops_mcp.py +24 -7
- package/src/superlocalmemory/learning/arm_catalog.py +0 -2
- package/src/superlocalmemory/learning/bandit.py +0 -2
- package/src/superlocalmemory/learning/bandit_cache.py +0 -2
- package/src/superlocalmemory/learning/dedup_hnsw.py +11 -11
- package/src/superlocalmemory/learning/ensemble.py +0 -2
- package/src/superlocalmemory/learning/labeler.py +0 -2
- package/src/superlocalmemory/learning/legacy_migration.py +0 -2
- package/src/superlocalmemory/learning/model_cache.py +0 -2
- package/src/superlocalmemory/learning/ranker.py +0 -2
- package/src/superlocalmemory/learning/reward_archive.py +6 -1
- package/src/superlocalmemory/learning/reward_proxy.py +0 -2
- package/src/superlocalmemory/learning/signal_worker.py +0 -2
- package/src/superlocalmemory/math/fisher.py +1 -1
- package/src/superlocalmemory/math/hopfield.py +4 -1
- package/src/superlocalmemory/math/langevin.py +1 -1
- package/src/superlocalmemory/math/sheaf.py +7 -3
- package/src/superlocalmemory/mcp/cli_fallback.py +1 -1
- package/src/superlocalmemory/mcp/profiles.py +1 -1
- package/src/superlocalmemory/mcp/server.py +1 -1
- package/src/superlocalmemory/mcp/tools_active.py +56 -0
- package/src/superlocalmemory/mcp/tools_core.py +1 -1
- package/src/superlocalmemory/optimize/cache/manager.py +2 -2
- package/src/superlocalmemory/optimize/compress/ccr.py +1 -1
- package/src/superlocalmemory/optimize/compress/router.py +1 -1
- package/src/superlocalmemory/optimize/proxy/_helpers.py +2 -2
- package/src/superlocalmemory/optimize/proxy/server.py +1 -1
- package/src/superlocalmemory/optimize/proxy/vertex_surface.py +2 -2
- package/src/superlocalmemory/optimize/storage/db.py +2 -2
- package/src/superlocalmemory/retrieval/agentic.py +1 -1
- package/src/superlocalmemory/retrieval/ann_index.py +9 -2
- package/src/superlocalmemory/retrieval/bm25_channel.py +2 -2
- package/src/superlocalmemory/retrieval/bridge_discovery.py +2 -2
- package/src/superlocalmemory/retrieval/engine.py +272 -43
- package/src/superlocalmemory/retrieval/entity_channel.py +1 -1
- package/src/superlocalmemory/retrieval/hopfield_channel.py +8 -2
- package/src/superlocalmemory/retrieval/profile_channel.py +1 -1
- package/src/superlocalmemory/retrieval/quantization_aware_search.py +1 -1
- package/src/superlocalmemory/retrieval/remote_reranker.py +2 -2
- package/src/superlocalmemory/retrieval/reranker.py +3 -3
- package/src/superlocalmemory/retrieval/semantic_channel.py +3 -3
- package/src/superlocalmemory/retrieval/spreading_activation.py +8 -8
- package/src/superlocalmemory/retrieval/strategy.py +94 -0
- package/src/superlocalmemory/retrieval/temporal_channel.py +167 -10
- package/src/superlocalmemory/retrieval/temporal_validity_filter.py +1 -1
- package/src/superlocalmemory/retrieval/vector_store.py +88 -10
- package/src/superlocalmemory/server/recall_serializer.py +10 -0
- package/src/superlocalmemory/server/routes/brain.py +2 -2
- package/src/superlocalmemory/server/routes/prewarm.py +4 -4
- package/src/superlocalmemory/server/unified_daemon.py +459 -7
- package/src/superlocalmemory/storage/_schema_version.py +46 -3
- package/src/superlocalmemory/storage/backup.py +531 -0
- package/src/superlocalmemory/storage/database.py +11 -4
- package/src/superlocalmemory/storage/embedding_codec.py +129 -0
- package/src/superlocalmemory/storage/embedding_migrator.py +5 -3
- package/src/superlocalmemory/storage/migration_runner.py +142 -2
- package/src/superlocalmemory/storage/migrations/__init__.py +1 -1
- package/src/superlocalmemory/storage/migrations.py +15 -1
- package/src/superlocalmemory/storage/models.py +7 -0
- package/src/superlocalmemory/storage/quantized_store.py +4 -2
- package/src/superlocalmemory/summaries/session_summary.py +1 -1
- package/src/superlocalmemory/ui/css/legacy-dashboard.css +1 -1
- package/src/superlocalmemory/ui/css/neural-glass.css +1 -1
- package/src/superlocalmemory/ui/js/core.js +1 -1
- 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
|
-
|
|
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 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.
|
|
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 & 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> · MCP: add <code>slm_compress</code> to your config · 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.
|
|
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**
|
|
390
|
-
| **Portable / IDE connect**
|
|
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
|
|
436
|
+
### MCP Profiles
|
|
437
437
|
|
|
438
438
|
Control tool surface via `SLM_MCP_PROFILE`:
|
|
439
439
|
|
package/package.json
CHANGED
package/plugin/CLAUDE.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- BEGIN SuperLocalMemory v4.0.
|
|
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.
|
|
42
|
+
<!-- END SuperLocalMemory v4.0.9 -->
|
|
43
43
|
|
|
44
|
-
SuperLocalMemory v4.0.
|
|
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.
|
|
80
|
+
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.
|
|
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.
|
|
44
|
+
SuperLocalMemory v4.0.9 · Qualixar · AGPL-3.0-or-later
|
package/plugin/requirements.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
superlocalmemory==4.0.
|
|
1
|
+
superlocalmemory==4.0.9
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# ensure-venv.sh —
|
|
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.
|
|
@@ -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
|
|
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
|
|
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.
|
|
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.
|
|
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
|
|
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
|
|
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
package/scripts/postinstall.js
CHANGED
|
@@ -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.
|
|
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
|
-
"""
|
|
5
|
+
"""Lazy first-run initialisation for pip cross-installs.
|
|
6
6
|
|
|
7
7
|
Lightweight import only — zero heavy imports, STDOUT-SILENT.
|
|
8
8
|
|