superlocalmemory 4.1.24 → 4.2.2
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/.claude-plugin/marketplace.json +3 -3
- package/CHANGELOG.md +387 -0
- package/README.md +235 -269
- package/antigravity-plugin/_GENERATED.md +2 -1
- package/antigravity-plugin/agents/slm-governance-advisor.md +10 -4
- package/antigravity-plugin/agents/slm-loop-runner.md +1 -1
- package/antigravity-plugin/agents/slm-memory-advisor.md +8 -4
- package/antigravity-plugin/agents/slm-optimize-advisor.md +1 -1
- package/antigravity-plugin/plugin.json +1 -1
- package/antigravity-plugin/skills/slm-bot-memory/SKILL.md +36 -1
- package/antigravity-plugin/skills/slm-cache/SKILL.md +1 -1
- package/antigravity-plugin/skills/slm-compress/SKILL.md +1 -1
- package/antigravity-plugin/skills/slm-getting-started-bot/SKILL.md +58 -7
- package/antigravity-plugin/skills/slm-governance/SKILL.md +61 -5
- package/antigravity-plugin/skills/slm-graph/SKILL.md +1 -1
- package/antigravity-plugin/skills/slm-loop/SKILL.md +22 -2
- package/antigravity-plugin/skills/slm-media/SKILL.md +340 -0
- package/antigravity-plugin/skills/slm-mesh/SKILL.md +110 -8
- package/antigravity-plugin/skills/slm-profile/SKILL.md +17 -12
- package/antigravity-plugin/skills/slm-recall/SKILL.md +91 -3
- package/antigravity-plugin/skills/slm-remember/SKILL.md +6 -1
- package/antigravity-plugin/skills/slm-scope/SKILL.md +1 -1
- package/antigravity-plugin/skills/slm-session/SKILL.md +1 -1
- package/antigravity-plugin/skills/slm-status/SKILL.md +48 -2
- package/antigravity-plugin/skills/slm-web-access/SKILL.md +92 -6
- package/bin/slm-npm +1 -1
- package/codex-plugin/.claude-plugin/plugin.json +1 -1
- package/codex-plugin/.codex-plugin/plugin.json +1 -1
- package/codex-plugin/AGENTS.md +38 -9
- package/codex-plugin/README.md +8 -6
- package/codex-plugin/_GENERATED.md +2 -1
- package/codex-plugin/agents/slm-governance-advisor.md +10 -4
- package/codex-plugin/agents/slm-loop-runner.md +1 -1
- package/codex-plugin/agents/slm-memory-advisor.md +8 -4
- package/codex-plugin/agents/slm-optimize-advisor.md +1 -1
- package/codex-plugin/skills/slm-bot-memory/SKILL.md +36 -1
- package/codex-plugin/skills/slm-cache/SKILL.md +1 -1
- package/codex-plugin/skills/slm-compress/SKILL.md +1 -1
- package/codex-plugin/skills/slm-getting-started-bot/SKILL.md +58 -7
- package/codex-plugin/skills/slm-governance/SKILL.md +61 -5
- package/codex-plugin/skills/slm-graph/SKILL.md +1 -1
- package/codex-plugin/skills/slm-loop/SKILL.md +22 -2
- package/codex-plugin/skills/slm-media/SKILL.md +340 -0
- package/codex-plugin/skills/slm-mesh/SKILL.md +110 -8
- package/codex-plugin/skills/slm-profile/SKILL.md +17 -12
- package/codex-plugin/skills/slm-recall/SKILL.md +91 -3
- package/codex-plugin/skills/slm-remember/SKILL.md +6 -1
- package/codex-plugin/skills/slm-scope/SKILL.md +1 -1
- package/codex-plugin/skills/slm-session/SKILL.md +1 -1
- package/codex-plugin/skills/slm-status/SKILL.md +48 -2
- package/codex-plugin/skills/slm-web-access/SKILL.md +92 -6
- package/copilot-plugin/.github/agents/slm-governance-advisor.agent.md +11 -5
- package/copilot-plugin/.github/agents/slm-loop-runner.agent.md +2 -2
- package/copilot-plugin/.github/agents/slm-memory-advisor.agent.md +9 -5
- package/copilot-plugin/.github/agents/slm-optimize-advisor.agent.md +2 -2
- package/copilot-plugin/.github/copilot-instructions.md +14 -5
- package/copilot-plugin/.github/prompts/slm-bot-memory.prompt.md +35 -2
- package/copilot-plugin/.github/prompts/slm-cache.prompt.md +2 -2
- package/copilot-plugin/.github/prompts/slm-compress.prompt.md +2 -2
- package/copilot-plugin/.github/prompts/slm-getting-started-bot.prompt.md +57 -8
- package/copilot-plugin/.github/prompts/slm-governance.prompt.md +60 -5
- package/copilot-plugin/.github/prompts/slm-graph.prompt.md +2 -2
- package/copilot-plugin/.github/prompts/slm-loop.prompt.md +28 -2
- package/copilot-plugin/.github/prompts/slm-media.prompt.md +341 -0
- package/copilot-plugin/.github/prompts/slm-mesh.prompt.md +108 -8
- package/copilot-plugin/.github/prompts/slm-profile.prompt.md +18 -13
- package/copilot-plugin/.github/prompts/slm-recall.prompt.md +92 -3
- package/copilot-plugin/.github/prompts/slm-remember.prompt.md +7 -2
- package/copilot-plugin/.github/prompts/slm-scope.prompt.md +2 -2
- package/copilot-plugin/.github/prompts/slm-session.prompt.md +2 -2
- package/copilot-plugin/.github/prompts/slm-status.prompt.md +48 -2
- package/copilot-plugin/.github/prompts/slm-web-access.prompt.md +92 -6
- package/copilot-plugin/README.md +3 -3
- package/copilot-plugin/_GENERATED.md +2 -1
- package/hermes-plugin/__init__.py +21 -10
- package/hermes-plugin/agents/slm-governance-advisor.md +10 -4
- package/hermes-plugin/agents/slm-loop-runner.md +1 -1
- package/hermes-plugin/agents/slm-memory-advisor.md +8 -4
- package/hermes-plugin/agents/slm-optimize-advisor.md +1 -1
- package/hermes-plugin/command-inventory.json +3 -3
- package/hermes-plugin/plugin.yaml +1 -1
- package/hermes-plugin/remote.py +25 -4
- package/hermes-plugin/skills/slm-bot-memory/SKILL.md +36 -1
- package/hermes-plugin/skills/slm-cache/SKILL.md +1 -1
- package/hermes-plugin/skills/slm-compress/SKILL.md +1 -1
- package/hermes-plugin/skills/slm-getting-started-bot/SKILL.md +58 -7
- package/hermes-plugin/skills/slm-governance/SKILL.md +61 -5
- package/hermes-plugin/skills/slm-graph/SKILL.md +1 -1
- package/hermes-plugin/skills/slm-loop/SKILL.md +22 -2
- package/hermes-plugin/skills/slm-media/SKILL.md +340 -0
- package/hermes-plugin/skills/slm-mesh/SKILL.md +110 -8
- package/hermes-plugin/skills/slm-profile/SKILL.md +17 -12
- package/hermes-plugin/skills/slm-recall/SKILL.md +91 -3
- package/hermes-plugin/skills/slm-remember/SKILL.md +6 -1
- package/hermes-plugin/skills/slm-scope/SKILL.md +1 -1
- package/hermes-plugin/skills/slm-session/SKILL.md +1 -1
- package/hermes-plugin/skills/slm-status/SKILL.md +48 -2
- package/hermes-plugin/skills/slm-web-access/SKILL.md +92 -6
- package/ide/configs/cody-commands.json +1 -1
- package/ide/configs/continue-mcp.yaml +9 -14
- package/ide/configs/continue-skills.yaml +8 -3
- package/ide/configs/opencode-mcp.json +4 -5
- package/package.json +38 -21
- package/plugin/.claude-plugin/plugin.json +2 -2
- package/plugin/.cursor-plugin/plugin.json +1 -1
- package/plugin/CLAUDE.md +13 -4
- package/plugin/agents/slm-governance-advisor.md +10 -4
- package/plugin/agents/slm-loop-runner.md +1 -1
- package/plugin/agents/slm-memory-advisor.md +8 -4
- package/plugin/agents/slm-optimize-advisor.md +1 -1
- package/plugin/cursor-skills/slm-bot-memory/SKILL.md +36 -1
- package/plugin/cursor-skills/slm-getting-started-bot/SKILL.md +58 -7
- package/plugin/cursor-skills/slm-recall/SKILL.md +91 -3
- package/plugin/cursor-skills/slm-remember/SKILL.md +6 -1
- package/plugin/cursor-skills/slm-scope/SKILL.md +1 -1
- package/plugin/cursor-skills/slm-session/SKILL.md +1 -1
- package/plugin/mcp.cursor.json +1 -1
- package/plugin/requirements.txt +1 -1
- package/plugin/skills/slm-bot-memory/SKILL.md +36 -1
- package/plugin/skills/slm-cache/SKILL.md +1 -1
- package/plugin/skills/slm-compress/SKILL.md +1 -1
- package/plugin/skills/slm-getting-started-bot/SKILL.md +58 -7
- package/plugin/skills/slm-governance/SKILL.md +61 -5
- package/plugin/skills/slm-graph/SKILL.md +1 -1
- package/plugin/skills/slm-loop/SKILL.md +22 -2
- package/plugin/skills/slm-media/SKILL.md +340 -0
- package/plugin/skills/slm-mesh/SKILL.md +110 -8
- package/plugin/skills/slm-profile/SKILL.md +17 -12
- package/plugin/skills/slm-recall/SKILL.md +91 -3
- package/plugin/skills/slm-remember/SKILL.md +6 -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 +48 -2
- package/plugin/skills/slm-web-access/SKILL.md +92 -6
- package/plugin-src/agents/slm-governance-advisor.md +10 -4
- package/plugin-src/agents/slm-loop-runner.md +1 -1
- package/plugin-src/agents/slm-memory-advisor.md +8 -4
- package/plugin-src/agents/slm-optimize-advisor.md +1 -1
- package/plugin-src/rules/AGENTS.md +38 -9
- package/plugin-src/rules/CLAUDE.md.fragment +13 -4
- package/plugin-src/skills/slm-bot-memory/SKILL.md +36 -1
- package/plugin-src/skills/slm-cache/SKILL.md +1 -1
- package/plugin-src/skills/slm-compress/SKILL.md +1 -1
- package/plugin-src/skills/slm-getting-started-bot/SKILL.md +58 -7
- package/plugin-src/skills/slm-governance/SKILL.md +61 -5
- package/plugin-src/skills/slm-graph/SKILL.md +1 -1
- package/plugin-src/skills/slm-loop/SKILL.md +22 -2
- package/plugin-src/skills/slm-media/SKILL.md +340 -0
- package/plugin-src/skills/slm-mesh/SKILL.md +110 -8
- package/plugin-src/skills/slm-profile/SKILL.md +17 -12
- package/plugin-src/skills/slm-recall/SKILL.md +91 -3
- package/plugin-src/skills/slm-remember/SKILL.md +6 -1
- package/plugin-src/skills/slm-scope/SKILL.md +1 -1
- package/plugin-src/skills/slm-session/SKILL.md +1 -1
- package/plugin-src/skills/slm-status/SKILL.md +48 -2
- package/plugin-src/skills/slm-web-access/SKILL.md +92 -6
- package/scripts/postinstall/engine-upgrade.js +112 -0
- package/scripts/postinstall/media-request.js +203 -0
- package/scripts/postinstall/node-arch.js +27 -0
- package/scripts/postinstall-interactive.js +15 -19
- package/scripts/postinstall.js +101 -13
- package/scripts/preuninstall.js +55 -3
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"author": {
|
|
10
10
|
"name": "Qualixar"
|
|
11
11
|
},
|
|
12
|
-
"description": "Local-first agent memory + reversible context compression and KV cache, as an MCP server. Serves the
|
|
12
|
+
"description": "Local-first agent memory + reversible context compression and KV cache, as an MCP server, with optional pictures, PDFs and bot messaging. Serves the 58-tool full profile by default; set SLM_MCP_PROFILE=code for the 39-tool code profile.",
|
|
13
13
|
"homepage": "https://github.com/qualixar/superlocalmemory",
|
|
14
14
|
"keywords": [
|
|
15
15
|
"memory",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"license": "AGPL-3.0-or-later",
|
|
22
22
|
"name": "superlocalmemory",
|
|
23
23
|
"source": "./plugin",
|
|
24
|
-
"version": "4.
|
|
24
|
+
"version": "4.2.2"
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
"author": {
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"license": "AGPL-3.0-or-later",
|
|
40
40
|
"name": "superlocalmemory-codex",
|
|
41
41
|
"source": "./codex-plugin",
|
|
42
|
-
"version": "4.
|
|
42
|
+
"version": "4.2.2"
|
|
43
43
|
}
|
|
44
44
|
]
|
|
45
45
|
}
|
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,393 @@ 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.2.2] — Recall never refuses answers it has after a model change, and "What am I working on?" answers from your work
|
|
9
|
+
|
|
10
|
+
A fix release. Upgrading never moves or deletes memory. Text stays on the model it uses today.
|
|
11
|
+
|
|
12
|
+
### Fixes
|
|
13
|
+
|
|
14
|
+
- **Moving text to the newer memory engine could make recall refuse answers it had.**
|
|
15
|
+
Recall decides "this is in your memory" with a check fitted on one text model
|
|
16
|
+
(nomic). After "Upgrade memory engine" (the Settings card, or `slm embedder upgrade`)
|
|
17
|
+
moved text to EmbeddingGemma 2, that check scored correct memories far
|
|
18
|
+
below its bar, and recall said "That isn't in SuperLocalMemory" to questions it
|
|
19
|
+
had answered before. The check is now chosen by the text model in use, and
|
|
20
|
+
SuperLocalMemory no longer moves text to a model the check was not fitted for,
|
|
21
|
+
whichever way it is asked (the Settings card, the embedding picker, the config file,
|
|
22
|
+
the CLI or MCP); only `slm embedder switch --force` does. Measured on the release harness (a synthetic store): with the old check, EmbeddingGemma 2 refused all 203 real questions. A check fitted for it found every real answer on questions it had not seen, but also answered questions with no answer (it refused 69% of made-up questions; nomic refuses 98.5%), so it is not used: text stays on nomic, and Gemma keeps serving pictures and documents.
|
|
23
|
+
- **Two models, one memory.** Text is searched with the text model (nomic); if you
|
|
24
|
+
turn on pictures and documents, EmbeddingGemma 2 reads those, and one recall returns
|
|
25
|
+
both. The picture model unloads after 30 minutes unused. "Upgrade memory engine" is
|
|
26
|
+
no longer offered: the Settings card now appears only for a store whose text already
|
|
27
|
+
moved, the npm installer no longer offers it, and `slm embedder upgrade` is hidden.
|
|
28
|
+
- **Install, three ways, the same result.** The README now has a prompt to paste into
|
|
29
|
+
any agent (Claude Code, Codex, Cursor, …), and the npm and pip commands. The agent
|
|
30
|
+
setup steps ask the person one question, whether to turn on pictures and documents,
|
|
31
|
+
and `npm install -g superlocalmemory --media` turns them on from the start.
|
|
32
|
+
- **If your text already moved,** the Settings card, `slm doctor` (new check
|
|
33
|
+
"Answer check fit") and the MCP `health` tool say so and how to go back: Roll back on the card, or
|
|
34
|
+
`slm embedder rollback`. Your previous vectors are kept, so it takes minutes, and
|
|
35
|
+
the rollback message now says that instead of promising a full re-index.
|
|
36
|
+
- **A model switch kept its hub baselines.** Each memory carries a baseline that
|
|
37
|
+
stops a few "close to everything" memories from looking like answers. A switch
|
|
38
|
+
renamed the vector columns, a trigger followed the old column, and the clean-up
|
|
39
|
+
afterwards deleted every baseline (27,236 to 0 on one store). The trigger is now
|
|
40
|
+
re-bound on every switch, a store an earlier switch damaged is repaired by itself,
|
|
41
|
+
and the new model's baselines are measured before the switch finishes.
|
|
42
|
+
- **`slm embedder calibrate` works on a real install.** It stopped on two settings
|
|
43
|
+
that only its own tests had (`config.profile_id`, `RetrievalEngine._channels`). It
|
|
44
|
+
is now tested against a real engine, and a test checks every setting it reads
|
|
45
|
+
exists.
|
|
46
|
+
- **"What am I working on?" answers from your work.** The newest rows on a busy
|
|
47
|
+
store were the hooks' own bookkeeping ("[project] session ended …",
|
|
48
|
+
"File changed: …", "files: …") and the prompts you typed to an agent, so they
|
|
49
|
+
won a question about the present. Bookkeeping is now recognised in all its shapes,
|
|
50
|
+
flagged when it is saved, and the rows already stored are flagged once on upgrade
|
|
51
|
+
(nothing deleted; they stay listable). Your captured prompts stay searchable but
|
|
52
|
+
rank as requests: below what you and your agents saved, and never as the answer
|
|
53
|
+
to "what am I working on?". Ask "what did I ask for…" and they come back first.
|
|
54
|
+
|
|
55
|
+
### Upgrading
|
|
56
|
+
|
|
57
|
+
- The store's schema version moves to 62 (a data repair, no new table). Going back
|
|
58
|
+
to 4.2.1 needs `slm db prepare-downgrade` first, as for earlier releases.
|
|
59
|
+
|
|
60
|
+
## [4.2.1] — Each person sees only their own workspace, and moving to the newer memory engine finishes
|
|
61
|
+
|
|
62
|
+
A fix release. Upgrading never moves or deletes memory.
|
|
63
|
+
|
|
64
|
+
### Security
|
|
65
|
+
|
|
66
|
+
- **Recall Lab, Memories search and memory chat stay in the signed-in person's
|
|
67
|
+
workspace.** These three dashboard requests checked that a signed-in person could
|
|
68
|
+
read their workspace, then searched the machine's active workspace instead. With
|
|
69
|
+
more than one workspace, someone signed in to one could read another's memories.
|
|
70
|
+
They now search only the workspace that was checked, and a test signs in two people
|
|
71
|
+
in two workspaces and fails if either sees the other's memories. Saved views, the
|
|
72
|
+
REST `/recall` route, MCP and the CLI were not affected.
|
|
73
|
+
|
|
74
|
+
### Fixes
|
|
75
|
+
|
|
76
|
+
- **Moving to the newer memory engine no longer stops at a long memory.** A memory
|
|
77
|
+
over 8,000 characters made the EmbeddingGemma 2 worker refuse its batch, and the
|
|
78
|
+
whole re-index stopped. It is now embedded from its start (the model reads about
|
|
79
|
+
that much anyway), the same way the previous engine handled it.
|
|
80
|
+
- **Hermes plugin keeps working after an SLM upgrade.** It refused every `/slm`
|
|
81
|
+
command unless SLM was exactly the release it shipped with. It now works with that
|
|
82
|
+
release and every newer one of the same major version, and its message says how to
|
|
83
|
+
move a pinned plugin ([Hermes](docs/hermes.md#upgrade)).
|
|
84
|
+
- **Recall Lab:** clicking a result opens the whole memory, not the shortened text.
|
|
85
|
+
- **Dashboard:** a source opened from "Ask your memory" opens that memory in the
|
|
86
|
+
Memories tab. Settings no longer comes up blank after moving between panes.
|
|
87
|
+
- **Choose folder:** while remote access is on, folders cannot be connected; the page
|
|
88
|
+
now says so next to the button before anyone clicks, instead of after a click below
|
|
89
|
+
the fold.
|
|
90
|
+
- **Sign-in:** when every person must sign in (company mode), a signed-out visitor
|
|
91
|
+
gets one sign-in screen instead of panes that never load, and a signed-in person
|
|
92
|
+
sees who they are, their role and workspace, with Sign out. On a personal computer
|
|
93
|
+
nothing changes: the owner never signs in. Governance says so plainly, and the first
|
|
94
|
+
person you add starts as an admin. There is no default account or password.
|
|
95
|
+
- **README:** the product film follows the twelve superpowers; the architecture
|
|
96
|
+
diagram is redrawn.
|
|
97
|
+
|
|
98
|
+
## [4.2.0] — Recall that says "That isn't in SuperLocalMemory", memory that looks after itself, pictures and documents
|
|
99
|
+
|
|
100
|
+
This release changes what recall does when memory cannot answer, adds a Memory
|
|
101
|
+
health service that improves older memories without touching what you wrote,
|
|
102
|
+
and lets SLM remember pictures and documents. It also closes a long list of
|
|
103
|
+
erasure, access-control and backup gaps. Upgrading never moves or deletes
|
|
104
|
+
memory, and an update that changes the store takes a restore point first.
|
|
105
|
+
|
|
106
|
+
### Many agents at once
|
|
107
|
+
|
|
108
|
+
- **A question waits for its full answer instead of getting a keyword guess.** When
|
|
109
|
+
several agents ask at once, an agent's recall, `slm recall`, the Recall Lab and
|
|
110
|
+
saved views now wait their turn (up to about twelve seconds) and run the full
|
|
111
|
+
pipeline. If every slot is still busy, they get a plain "SuperLocalMemory is
|
|
112
|
+
answering other questions right now. Ask again in about N seconds" (HTTP 503 with
|
|
113
|
+
`Retry-After`, `code: RECALL_BUSY` over MCP, exit code 75 from the CLI), never a
|
|
114
|
+
stale keyword answer presented as recall. Hooks that run before a prompt keep their
|
|
115
|
+
three-second limit, so typing is never held up. Measured on a 27,000-memory store
|
|
116
|
+
with twelve agents asking at once: twelve full answers in 2.4 to 5.4 seconds, where
|
|
117
|
+
before two of the twelve fell back to keywords.
|
|
118
|
+
- **The same question asked twice at once runs once.** Identical recalls in flight
|
|
119
|
+
share one run, and a complete answer is reused for a few seconds while nothing is
|
|
120
|
+
written. Any write (remember, update, delete, forget, a scope change) drops it at
|
|
121
|
+
once, so an agent never reads an answer from before its own write.
|
|
122
|
+
- **Background work steps aside for questions.** Local-model extraction and summaries
|
|
123
|
+
in Mode B now wait while a recall is running (never more than twenty seconds), so a
|
|
124
|
+
long generation no longer sits in front of every recall.
|
|
125
|
+
- **The dashboard reads once for everyone.** Memory health, totals and the compliance
|
|
126
|
+
pane are computed once and shared for a few seconds between every open dashboard;
|
|
127
|
+
a repeat look answers in milliseconds. The audit trail is opened once, with an
|
|
128
|
+
index for the workspace it is read for.
|
|
129
|
+
- **"What am I working on" answers with your newest memories.** A present-tense
|
|
130
|
+
question no longer faces the word-match test (its answer shares no word with it),
|
|
131
|
+
so it stops saying "That isn't in SuperLocalMemory."
|
|
132
|
+
- **Dashboard:** a "please wait" bar with the mascot while SLM starts or warms up;
|
|
133
|
+
loading and error messages carry the mascot; the folder dialog comes to the front
|
|
134
|
+
instead of opening behind other windows; Settings rows wrap instead of squeezing a
|
|
135
|
+
label to one letter per line.
|
|
136
|
+
|
|
137
|
+
### Recall quality
|
|
138
|
+
|
|
139
|
+
- **Recall says so when nothing supports the question.** Every recall now comes back
|
|
140
|
+
in one of three tiers. *Supported*: at least one memory is strong enough evidence.
|
|
141
|
+
*Closest memories*: nothing supports it, but the question is a real one and a few
|
|
142
|
+
memories are close, so you see up to three, labelled, under "I don't have this
|
|
143
|
+
exactly — here are the closest memories." *Not in memory*: a nonsense question, or
|
|
144
|
+
nothing close, returns no results and the sentence "That isn't in
|
|
145
|
+
SuperLocalMemory." Before this, a nonsense question could still return the nearest
|
|
146
|
+
memories. Each memory is scored on several signals together (meaning, keywords,
|
|
147
|
+
names, rare terms, how the question is phrased, and how often the memory matches
|
|
148
|
+
everything); pinned memories are always returned. The command line and the
|
|
149
|
+
dashboard show the closest memories by default; over MCP and the REST API an agent
|
|
150
|
+
gets them when it asks (`include_related`). It is far better at rejecting nonsense
|
|
151
|
+
than at spotting an on-topic question memory has no answer to, which is what the
|
|
152
|
+
answer check is for ([Recall](docs/recall.md#when-memory-cannot-answer)).
|
|
153
|
+
- **`slm recall --show-weak`** (the `show_weak` option on the MCP recall tool, the
|
|
154
|
+
REST API and the dashboard's "Show closest matches") returns the closest weak
|
|
155
|
+
matches when nothing supports the question, each marked weak, with the same
|
|
156
|
+
sentence on top.
|
|
157
|
+
- **A recall that runs before SLM is ready says so.** For a few minutes after a start
|
|
158
|
+
the models, probes and memory graph are still loading. Recall then shows the
|
|
159
|
+
keyword finds it has (up to five) under "SuperLocalMemory is still warming up —
|
|
160
|
+
results may be incomplete", and never says the memory is empty. The response
|
|
161
|
+
carries `warming_up` and `status_note` for agents.
|
|
162
|
+
- **Layered recall.** `depth` 0 returns ids, the tier and a one-line preview; 1 (the
|
|
163
|
+
default) the full facts; 2 adds the source memory, up to three neighbours from the
|
|
164
|
+
same session, up to three facts about the same entities and the correction that
|
|
165
|
+
replaced it. `max_tokens` is a hard cap that is never exceeded, a new `expand`
|
|
166
|
+
tool drills into one result, and every injected context block is capped too.
|
|
167
|
+
`slm recall --depth 2 --max-tokens 1500`.
|
|
168
|
+
- **A recall that matches by keyword alone is no longer written off**, and the
|
|
169
|
+
keyword fallback serves only memories that cover the words you asked with.
|
|
170
|
+
Questions are also rewritten into base forms and known aliases for the keyword
|
|
171
|
+
search; the check that decides whether a memory answers always reads your
|
|
172
|
+
original words, so a rewrite can never make nonsense answer.
|
|
173
|
+
- **The on-device answer check (Laya) is installed by default where it can run.** On
|
|
174
|
+
an Apple Silicon Mac, setup installs it (about 1.1 GB) without asking in unattended
|
|
175
|
+
runs, and the first command after an upgrade offers it the same way: it asks in a
|
|
176
|
+
terminal and starts a background install without one. It is independent of the
|
|
177
|
+
operating mode, so Mode A and Mode B both run it entirely on your computer. Opt out
|
|
178
|
+
with `slm setup --no-laya` or `SLM_SKIP_LAYA=1`; answering no once is remembered. It is
|
|
179
|
+
never installed on other hardware, over an install you already have, or when you chose
|
|
180
|
+
Off or the online check. The check has its own time budget, so a slow check can no
|
|
181
|
+
longer eat the recall ceiling. The online option (Jev) stays off until you choose it
|
|
182
|
+
and tick its consent.
|
|
183
|
+
- **Local checks are calibrated in the background**, with visible progress and a
|
|
184
|
+
cancel button, and a new calibration is rejected if it does worse than the
|
|
185
|
+
current one on held-out questions.
|
|
186
|
+
- **Recall stays fast while you write.** A save no longer forces the whole graph
|
|
187
|
+
to rebuild on the next recall: the cached graph follows writes, deletes and
|
|
188
|
+
erasures, and full rebuilds run in the background. On a 26,000-fact store with
|
|
189
|
+
a write every 2 seconds, p95 recall fell from 4.3 s to 0.94 s and peak memory
|
|
190
|
+
from up to 1.7 GB to about 260 MB. Large stores get new recall indexes, and
|
|
191
|
+
recall waits are bounded all the way through the HTTP layer.
|
|
192
|
+
- **Entity matching is exact.** A name matches exactly, then after
|
|
193
|
+
normalisation, then with one typo in one word. It never merges different
|
|
194
|
+
numbers or versions, never chains near-miss names into an unrelated person or
|
|
195
|
+
project, and timestamps, hashes, paths, status words and sentence fragments
|
|
196
|
+
are no longer saved as people or projects. `slm db repair-entities` previews,
|
|
197
|
+
applies (after a backup, with an undo record) and undoes the clean-up of links
|
|
198
|
+
left by the older rules.
|
|
199
|
+
- **Saving is checked against what you wrote.** Every statement SLM extracts is
|
|
200
|
+
checked against its source before it is stored: no added names, numbers or
|
|
201
|
+
dates, no flipped negation. The original note is always kept. Quoted speech is
|
|
202
|
+
never rewritten, relative dates ("last Tuesday") resolve against the memory's
|
|
203
|
+
own date, and saving the same text twice adds no row.
|
|
204
|
+
- **The learning loop learns from real outcomes.** One query id runs from recall
|
|
205
|
+
to the reward, and each outcome settles exactly one recall, across restarts.
|
|
206
|
+
`slm outcome success|partial|failure <fact_id>...` tells SLM whether the
|
|
207
|
+
memories a recall gave you helped; MCP, the REST API, the dashboard and the
|
|
208
|
+
command share one writer. Health shows "Not demonstrated" until an outcome has
|
|
209
|
+
settled.
|
|
210
|
+
- **Upgrade memory engine** (preview, opt-in): `slm embedder upgrade` or the
|
|
211
|
+
Settings card re-reads memories with the one-model engine in the background,
|
|
212
|
+
with recall working throughout and one-click rollback.
|
|
213
|
+
- **Quantized retrieval is used when configured**, the status says when a tier is
|
|
214
|
+
degraded, and damaged or older sketches are repaired by `slm quantize` instead
|
|
215
|
+
of hiding the memory from search.
|
|
216
|
+
|
|
217
|
+
### Memory health
|
|
218
|
+
|
|
219
|
+
- **A Memory health card** in the dashboard shows what SLM can improve in older
|
|
220
|
+
memories and what it is doing about it. A background worker runs only when the
|
|
221
|
+
computer is idle and **only adds**: it fills in missing observation and event
|
|
222
|
+
dates, names of people and tools, tags, a project and a kind on older memories,
|
|
223
|
+
and never edits the text you saved or replaces a value you set. It stops when you
|
|
224
|
+
are working and when memory is tight ([Memory health](docs/memory-health.md)).
|
|
225
|
+
- **Stubs are marked, not hidden.** A memory that is only a label and an id
|
|
226
|
+
(for example a session receipt) carries a **stub** badge in lists and counts.
|
|
227
|
+
Only recall leaves stubs out of its answers.
|
|
228
|
+
- **Anything that deletes or moves something waits for your explicit Fix.**
|
|
229
|
+
Repairs that remove junk entity links, re-file hidden memories or repair failed
|
|
230
|
+
saves are offered as a count with a **Fix** button, and every run that changed
|
|
231
|
+
something has an **Undo** that restores exactly what it changed (anything you
|
|
232
|
+
edited since is kept).
|
|
233
|
+
- **`slm enrich`** is the command-line side: `status`, `pause`, `resume`,
|
|
234
|
+
`undo`, and `fix entity-links|refile-hidden|repair-saves` (the last has no
|
|
235
|
+
undo, so it takes a safety copy first and says so). `--include-undone`
|
|
236
|
+
applies items from a repair you undid earlier.
|
|
237
|
+
- **One safety copy per store**, taken before the first automatic change and
|
|
238
|
+
reused by every later run.
|
|
239
|
+
- **`slm doctor`** reports the same state, a **Failed saves** row (it warns when
|
|
240
|
+
saves were given up on after repeated attempts and fails at 50 or more), and
|
|
241
|
+
`slm doctor --refile-hidden` lists memories that were moved out of sight
|
|
242
|
+
although their retention score says to keep them; `--yes` moves exactly those
|
|
243
|
+
back.
|
|
244
|
+
|
|
245
|
+
### Privacy and erasure
|
|
246
|
+
|
|
247
|
+
- **Erasing a person leaves no readable copy.** The bytes of the data folder are
|
|
248
|
+
checked after an erasure and everything they found is closed: queued saves,
|
|
249
|
+
the encrypted request journal, the recall queue, caches, reversible
|
|
250
|
+
compression originals, free pages inside the side databases, event previews,
|
|
251
|
+
the vector index itself, the Lance history, the graph's entity nodes, an erased
|
|
252
|
+
picture's backup mirror and the prompt text two logs kept.
|
|
253
|
+
- **Erasure says exactly what it did.** `slm gdpr erase --json` reports
|
|
254
|
+
`success: false` for an incomplete erasure, the dashboard lists what was
|
|
255
|
+
removed and what remains, and the stored receipt is written after every step.
|
|
256
|
+
A backup keeps its erasure obligation until it is deleted or re-read clean, and
|
|
257
|
+
a restore replays targeted erasures as well as profile ones.
|
|
258
|
+
- **Exporting your data works on a real store.** Export writes plain JSON,
|
|
259
|
+
leaves embeddings out unless you ask (`--include-embeddings`), streams to
|
|
260
|
+
disk, and reports failures instead of "Export started". The full export now
|
|
261
|
+
carries the audit records about you, pictures, documents, folders and jobs,
|
|
262
|
+
and lists what it leaves out under `export_manifest`.
|
|
263
|
+
- **Personal data is redacted on every save path** when redaction is on,
|
|
264
|
+
including metadata, tags, keys and events, for pictures as well as text.
|
|
265
|
+
- **Mode A says what it is:** "Memories are saved and recalled without a
|
|
266
|
+
language model — nothing leaves this device." The server serves that one
|
|
267
|
+
sentence and the dashboard shows it, and it stays true when the on-device
|
|
268
|
+
answer check is running.
|
|
269
|
+
|
|
270
|
+
### Access control
|
|
271
|
+
|
|
272
|
+
- **Company mode checks a role on every change and every data route.** Every
|
|
273
|
+
state-changing route asks for a role before the request body is read, so a
|
|
274
|
+
refusal is 401 or 403, never 422 or 500; with login required, every page of
|
|
275
|
+
data needs a signed-in user. While users are enrolled, the install token or an
|
|
276
|
+
API key alone no longer administers the workspace; use an admin account, or
|
|
277
|
+
`slm team` on the SLM computer (`slm team status`, `slm team policy
|
|
278
|
+
--require-login on|off`, so the owner can never be locked out).
|
|
279
|
+
- **Skill approvals and maintenance are scoped to the workspace.** Skill
|
|
280
|
+
evolution keeps each workspace's skills, backups and quarantine apart; an
|
|
281
|
+
approval applies to the workspace it was made in, and installation-wide
|
|
282
|
+
settings need authority over every workspace.
|
|
283
|
+
- **Roles and profiles apply to every picture, document, folder and feature
|
|
284
|
+
route.** Reading a file by path, connecting a folder and turning features on
|
|
285
|
+
need the owner or an admin, and SLM's own data folder can never be named.
|
|
286
|
+
- **A connected web app cannot see or change what it may not read.** It cannot
|
|
287
|
+
update, delete, pin, replace or give feedback on a memory by id when it may not
|
|
288
|
+
see that memory; it is answered as if the memory did not exist. Pictures saved
|
|
289
|
+
before this release are held back from web apps until they are re-checked in
|
|
290
|
+
the background.
|
|
291
|
+
- With `SLM_REQUIRE_CREDENTIALS=1` the dashboard key is no longer handed to other
|
|
292
|
+
programs on the computer; the dashboard asks for it once (`slm token show`).
|
|
293
|
+
|
|
294
|
+
### Backup and restore
|
|
295
|
+
|
|
296
|
+
- **A restore is all or nothing.** While it runs, the store is held so no daemon
|
|
297
|
+
can start and write part-way; everything the restore may change is copied
|
|
298
|
+
first, and a failure puts those files back. Only if that put-back also fails
|
|
299
|
+
does `slm backup restore-safety-copy` bring back the safety copy taken after
|
|
300
|
+
the service stopped. The dashboard and the command line say in plain words
|
|
301
|
+
what happened and what to run next.
|
|
302
|
+
- **Backups are complete and honest.** Local backups copy picture and PDF
|
|
303
|
+
originals (never the upload-link database), a backup just taken is no longer
|
|
304
|
+
"overdue", and the dashboard export is one archive with every store, the
|
|
305
|
+
originals and a manifest.
|
|
306
|
+
- **A damaged keyword index is repaired for good.** On SQLite 3.44.0 to 3.46.0,
|
|
307
|
+
`slm db repair --apply` turns off the setting that damages the index, rebuilds
|
|
308
|
+
it, checks it again and says plainly if it is still damaged. Your memories are
|
|
309
|
+
kept.
|
|
310
|
+
|
|
311
|
+
### Dashboard
|
|
312
|
+
|
|
313
|
+
- **Documents & Images** pane with progress, a drop zone, **Find a picture**,
|
|
314
|
+
connected folders and a **Choose folder** button that uses the computer's own
|
|
315
|
+
picker; **Bot messages** tab listing every bot by name with mute, rename and
|
|
316
|
+
retire; a **What's new** card that knows what is already on.
|
|
317
|
+
- **Connected apps shows which apps are connected right now**: live MCP
|
|
318
|
+
processes by host with a count, a flag on apps still running older SLM code,
|
|
319
|
+
and a reconnect. Connect, doctor, repair and restart are buttons.
|
|
320
|
+
- **Search says why it found nothing.** The Memories search shows the tier's sentence
|
|
321
|
+
("That isn't in SuperLocalMemory.", the closest memories, or the warming-up note)
|
|
322
|
+
instead of an empty list, and has a **Show closest matches** switch.
|
|
323
|
+
- **Answer Check** tab, Settings → Answer check with a test for each option and
|
|
324
|
+
**Calibrate on my store**, and the Memory health card described above.
|
|
325
|
+
- Memory guards read real memory use on macOS (physical footprint); the
|
|
326
|
+
resident size under-reported up to 15 times on a busy Mac.
|
|
327
|
+
|
|
328
|
+
### Pictures and documents
|
|
329
|
+
|
|
330
|
+
- **Save screenshots, photos and PDFs and find them by describing them.** A
|
|
331
|
+
picture model runs on your computer (EmbeddingGemma 2), OCR reads the text
|
|
332
|
+
inside pictures, and each PDF page is indexed by its picture and its text. No
|
|
333
|
+
generative model looks at your files. Off by default; turn it on from the npm
|
|
334
|
+
installer or upgrader, the dashboard, or `slm media enable`. Pictures live in
|
|
335
|
+
their own database, so your existing memories and embeddings are never
|
|
336
|
+
changed. It needs a computer with 16 GB of memory and downloads about 1.5 GB the
|
|
337
|
+
first time; limits are in `docs/pictures-and-documents.md`.
|
|
338
|
+
- `slm media status|disable|gc|repair`; `slm sources add` mirrors **folders and
|
|
339
|
+
Obsidian vaults** read-only (properties, links and canvases kept) and re-reads a
|
|
340
|
+
file as soon as it changes.
|
|
341
|
+
- **Recall finds pictures and pages** beside text memories, shows them to local AI
|
|
342
|
+
apps, and counts a picture as evidence only above the model's own similarity
|
|
343
|
+
floor. The generated picture caption stays in the picture's metadata and never
|
|
344
|
+
becomes searchable words or facts.
|
|
345
|
+
- **Erasing a memory erases its picture**, and a replaced picture or PDF is
|
|
346
|
+
erased for good at the end of its grace period.
|
|
347
|
+
- Pictures and documents work on Linux 64-bit ARM, are refused with a plain
|
|
348
|
+
reason on computers under 16 GB, and the picture tools are stopped before they
|
|
349
|
+
pass their memory cap. The picture model embeds in small passes; its peak fell
|
|
350
|
+
from about 12 GB to under 4 GB on large batches.
|
|
351
|
+
|
|
352
|
+
### Bots and web apps
|
|
353
|
+
|
|
354
|
+
- **Bots that talk to each other.** Web apps connected through Web access
|
|
355
|
+
(ChatGPT, Claude on the web, Grok Bot, Muse, Composio) can join SLM-Mesh beside
|
|
356
|
+
the agents on your computer: see peers, send a named bot a message, wait for a
|
|
357
|
+
reply and read shared state. Each app needs two yeses: a box on the approval
|
|
358
|
+
page and a switch on the **Web access** row in Connected apps (or `slm remote
|
|
359
|
+
keys allow <key> mesh`). Messages reach a web app at least once, marked as a
|
|
360
|
+
repeat if it did not acknowledge them.
|
|
361
|
+
- **Web apps save real files.** A connected app can ask for a one-time upload
|
|
362
|
+
link: you open it, pick the file, and it streams to your computer through the
|
|
363
|
+
connection gateway, which keeps no copy. A link belongs to the app that asked
|
|
364
|
+
for it, works once and expires in 10 minutes. ChatGPT can hand over an
|
|
365
|
+
attached file directly once its file hosts are on your allowed list.
|
|
366
|
+
- **Frameworks and editors.** Google ADK, CrewAI and Semantic Kernel run through
|
|
367
|
+
an isolated engine bridge instead of failing to install next to SLM; Continue,
|
|
368
|
+
OpenCode, Antigravity, VS Code and Gemini CLI setup write each host's current
|
|
369
|
+
schema; and Claude Desktop on Windows is configured in `%APPDATA%\Claude`.
|
|
370
|
+
- Every plugin, skill and setup text now teaches this release: a new `slm-media`
|
|
371
|
+
skill, and the mesh, web access, governance and bot skills cover upload links,
|
|
372
|
+
`mesh_wait` and the Connected apps switches. Hermes registers all 16 skills
|
|
373
|
+
and its four advisor tools load again.
|
|
374
|
+
|
|
375
|
+
### Reliability
|
|
376
|
+
|
|
377
|
+
- **Windows reads and writes SLM's own files as UTF-8**: the dashboard, the
|
|
378
|
+
answer-check settings and the backup reader no longer depend on the Windows
|
|
379
|
+
code page, so text outside it round-trips.
|
|
380
|
+
- Services and ports belong to one install: `slm dashboard`, Health, Settings and
|
|
381
|
+
HTTP setup use the configured port, strict credential settings survive
|
|
382
|
+
auto-start, and a second install gets its own service name. A daemon started
|
|
383
|
+
with `python -m` publishes its ready record, so `stop` no longer waits 90
|
|
384
|
+
seconds.
|
|
385
|
+
- `--sync` saves return after enrichment completes, the Python API shares the
|
|
386
|
+
daemon's embedder, failed session opens exit non-zero, and a queued embedding
|
|
387
|
+
upgrade says why it waits. A model refused for lack of memory says so instead
|
|
388
|
+
of "no vector", and an embedding pause explains itself in the model status.
|
|
389
|
+
- `npm install` says plainly when the Python it found cannot work (an Intel Mac,
|
|
390
|
+
32-bit Windows, Windows on ARM, 32-bit Linux, Node under Rosetta) and how to
|
|
391
|
+
install a supported one; pip installs on 64-bit ARM Linux.
|
|
392
|
+
- `slm doctor` makes at most one short health probe of the daemon, never starts
|
|
393
|
+
it, and prints a full report within a hard deadline instead of hanging.
|
|
394
|
+
|
|
8
395
|
## [4.1.24] — Connecting ChatGPT, Grok Bot, Muse and dots works the first time
|
|
9
396
|
|
|
10
397
|
### Added
|