superlocalmemory 4.1.18 → 4.1.19
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 +100 -0
- package/README.md +13 -13
- package/bin/slm-npm +1 -1
- package/ide/configs/cursor-mcp.json +4 -1
- package/package.json +1 -1
- package/plugin/.claude-plugin/plugin.json +2 -2
- package/plugin/CLAUDE.md +4 -4
- 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.bat +5 -5
- package/plugin/scripts/ensure-venv.sh +4 -4
- 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 +4 -4
- 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 +1 -1
- package/plugin-src/agents/slm-memory-advisor.md +1 -1
- package/plugin-src/agents/slm-optimize-advisor.md +1 -1
- package/plugin-src/rules/AGENTS.md +22 -11
- 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-governance/SKILL.md +1 -1
- package/plugin-src/skills/slm-graph/SKILL.md +1 -1
- package/plugin-src/skills/slm-loop/SKILL.md +1 -1
- package/plugin-src/skills/slm-mesh/SKILL.md +1 -1
- package/plugin-src/skills/slm-profile/SKILL.md +4 -4
- package/plugin-src/skills/slm-recall/SKILL.md +1 -1
- package/plugin-src/skills/slm-remember/SKILL.md +1 -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 +1 -1
- package/scripts/postinstall.js +47 -16
|
@@ -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.
|
|
12
|
+
"description": "Local-first agent memory + reversible context compression and KV cache, as an MCP server. 38-tool code profile with graph intelligence.",
|
|
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.1.
|
|
24
|
+
"version": "4.1.19"
|
|
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.1.
|
|
42
|
+
"version": "4.1.19"
|
|
43
43
|
}
|
|
44
44
|
]
|
|
45
45
|
}
|
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,106 @@ 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.1.19] — Memories know what kind they are
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **Nine memory kinds.** A memory can be a fact, an event, a current status, an
|
|
13
|
+
opinion, a standing rule, a decision, a how-to, a plan or a correction. You
|
|
14
|
+
or your agent can say which when saving (`kind` on `remember`, `--kind` on
|
|
15
|
+
the CLI); otherwise SLM suggests one. A suggestion changes nothing until
|
|
16
|
+
someone confirms it.
|
|
17
|
+
- **Standing rules at session start.** Rules and decisions you confirmed are
|
|
18
|
+
given to every new agent session, up to ten rules and five decisions.
|
|
19
|
+
Proposed, rejected, archived, quarantined and replaced items are never
|
|
20
|
+
included.
|
|
21
|
+
- **Classify existing memories** in the background (`slm kinds backfill`, or
|
|
22
|
+
HTTP), with progress, pause, cancel and an exact undo. It never changes a
|
|
23
|
+
kind you confirmed. Classifying online with Jev needs its own consent and a
|
|
24
|
+
confirmation that memory text leaves this machine.
|
|
25
|
+
- **Review and confirm kinds** from agents (four new tools in the default,
|
|
26
|
+
code, full and power tool sets), the CLI (`slm kinds set | review | confirm`)
|
|
27
|
+
and HTTP.
|
|
28
|
+
- **Ask for a kind of memory.** Recall, search and list take a `kind` filter.
|
|
29
|
+
"What did we decide" favours decisions, "how do I" favours how-tos, and "what
|
|
30
|
+
is the current state" puts the newest confirmed status or decision first.
|
|
31
|
+
Questions that ask for no particular kind are ranked exactly as before.
|
|
32
|
+
- **Narrow a recall** by project, by the agent that saved a memory, or by who
|
|
33
|
+
or what it is about (`project`, `saved_by`, `about`). The filter applies on
|
|
34
|
+
every recall path and before the answer check, so the check judges only what
|
|
35
|
+
you will see.
|
|
36
|
+
- **Say which memory a new one replaces.** `remember(..., replaces=<id>)`
|
|
37
|
+
retires the old memory (kept, never deleted) and recall shows the new one.
|
|
38
|
+
Undoing it through correction review brings the old memory back exactly.
|
|
39
|
+
It works with a per-request `profile_id` too: a client routed to its own
|
|
40
|
+
profile can replace a memory and undo it there (`review_correction` and
|
|
41
|
+
`list_corrections` take the same `profile_id`), without switching the
|
|
42
|
+
daemon's active profile.
|
|
43
|
+
- **Upgrades keep a verified copy you can go back to:** restore points, a
|
|
44
|
+
restore that also brings back memories saved since the copy, and a prepared
|
|
45
|
+
path back to the previous version (`slm db restore-points | restore |
|
|
46
|
+
prepare-downgrade`).
|
|
47
|
+
- **Encrypted cloud backups** (see Security), with `slm backup recovery-key` and
|
|
48
|
+
`slm backup decrypt`.
|
|
49
|
+
|
|
50
|
+
### Fixed
|
|
51
|
+
|
|
52
|
+
- **Recall never writes.** Asking about an unknown name no longer creates
|
|
53
|
+
entities or calls a model, which also removes a multi-second delay on the
|
|
54
|
+
first question about a new name.
|
|
55
|
+
- **Enrichment no longer gets stuck** on memories that hold credentials.
|
|
56
|
+
- **Memories blanked by an earlier release are repaired once**, after a
|
|
57
|
+
verified safety copy: their text, the facts searched from it, and wrongly
|
|
58
|
+
set "replaced" marks.
|
|
59
|
+
- **A restore never repeats a loss.** It deletes again only what you or a
|
|
60
|
+
privacy erasure deleted, works when the live store is damaged, refuses a copy
|
|
61
|
+
made by a newer version, keeps kinds you confirmed after the copy, keeps
|
|
62
|
+
erased profiles erased in learning data, and cannot be cancelled half-way
|
|
63
|
+
through. Its messages say what actually happened.
|
|
64
|
+
- **A kind you confirmed is never overwritten** by background work, and a
|
|
65
|
+
machine suggestion never changes a memory's type.
|
|
66
|
+
- **The same request gives the same answer on MCP, the CLI and HTTP**,
|
|
67
|
+
including refusals. Every `--json` command prints JSON on errors too.
|
|
68
|
+
- **The Hermes plugin works with the release it ships with**, and asks for
|
|
69
|
+
confirmation before `remember --replaces`.
|
|
70
|
+
- **Windows:** the test suite runs on Windows again, and a read timeout in the
|
|
71
|
+
embedding worker no longer freezes it.
|
|
72
|
+
- **npm install on Linux finds `python3.12` and newer** next to an older
|
|
73
|
+
`python3`, and honours `SLM_PYTHON`.
|
|
74
|
+
|
|
75
|
+
### Security
|
|
76
|
+
|
|
77
|
+
- **Credentials leave this machine redacted on every path.** One outbound gate
|
|
78
|
+
covers model providers, cloud embedders, summaries, the reranker, the
|
|
79
|
+
answer check, a LAN Ollama and mesh peers; a model provider's key is sent only
|
|
80
|
+
to that provider. Context given to agent sessions is redacted the same way,
|
|
81
|
+
with no last-four-character tails. Requests to this machine never go through
|
|
82
|
+
an environment proxy.
|
|
83
|
+
- **Cloud backups are encrypted on this machine before upload** to GitHub or
|
|
84
|
+
Google Drive. You get a recovery key; keep it to restore on another
|
|
85
|
+
machine. Backups made by earlier releases still restore.
|
|
86
|
+
- **Every new read route checks permission.**
|
|
87
|
+
- **Error responses no longer include file paths or internal messages.**
|
|
88
|
+
|
|
89
|
+
### Changed
|
|
90
|
+
|
|
91
|
+
- **Credentials you save are stored as written.** Up to 4.1.18, known key
|
|
92
|
+
formats were removed on save. SLM keeps them so your agents can recall them,
|
|
93
|
+
and redacts them on the way out.
|
|
94
|
+
- **Python 3.12 or newer is required**, and every check now says so.
|
|
95
|
+
- **Tool sets:** default and full 54 tools, code 38, power 66. The Antigravity
|
|
96
|
+
plugin uses the power set (within Antigravity's limit) and the Cursor
|
|
97
|
+
configuration uses the code set.
|
|
98
|
+
- **Recall's ceiling is 3.0 seconds** including the answer check.
|
|
99
|
+
|
|
100
|
+
### Known limits
|
|
101
|
+
|
|
102
|
+
- **Macs shared by several user accounts:** the per-account check is still not
|
|
103
|
+
in this release. Turn on company mode (Team → Access policy) on a shared Mac.
|
|
104
|
+
- **Classifying existing memories with a cloud model** uses on-device rules.
|
|
105
|
+
- **Drive does not rotate old backups**: delete plain-text backups made before
|
|
106
|
+
this release yourself.
|
|
107
|
+
|
|
8
108
|
## [4.1.18] — Recall can say "I don't have that"
|
|
9
109
|
|
|
10
110
|
### Added
|
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
</picture>
|
|
6
6
|
</p>
|
|
7
7
|
|
|
8
|
-
<h1 align="center">SuperLocalMemory V4.1.
|
|
8
|
+
<h1 align="center">SuperLocalMemory V4.1.19 — local-first memory for AI agents</h1>
|
|
9
9
|
|
|
10
10
|
<h2 align="center">Rent the LLM. Own the memory.</h2>
|
|
11
11
|
|
|
@@ -50,12 +50,12 @@ guarantee here is stated as a falsifiable invariant, tested under an adversarial
|
|
|
50
50
|
negative control, and shipped with the harness that regenerates the evidence:
|
|
51
51
|
<code>python benchmark/run_all.py --trials 200 --output-dir results/</code>. What each experiment
|
|
52
52
|
does <em>not</em> exercise is stated too.</p>
|
|
53
|
-
<p align="center"><code>v4.1.
|
|
53
|
+
<p align="center"><code>v4.1.19</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/>
|
|
54
54
|
Proxy: <code>slm wrap claude</code> · MCP: add <code>slm_compress</code> to your config · Skill: zero-config</p>
|
|
55
55
|
<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>
|
|
56
56
|
|
|
57
57
|
<p align="center">
|
|
58
|
-
<a href="CHANGELOG.md"><img src="https://img.shields.io/badge/v4.1.
|
|
58
|
+
<a href="CHANGELOG.md"><img src="https://img.shields.io/badge/v4.1.19-Current_Release-2ea44f?style=for-the-badge&logo=checkmarx&logoColor=white" alt="v4.1.19 — Current Release"/></a>
|
|
59
59
|
<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>
|
|
60
60
|
<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>
|
|
61
61
|
<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>
|
|
@@ -94,7 +94,7 @@ SuperLocalMemory V4 combines conventional dense and lexical retrieval with graph
|
|
|
94
94
|
- **Modes A / B / C** — local-only by default (A), on-device LLM enrichment (B), provider-assisted (C). An operating mode records technical locality facts; it does **not** determine EU AI Act legal compliance (that is deployment-context assessment — see [Privacy controls](#privacy-controls-and-operating-modes)).
|
|
95
95
|
- **GDPR posture, retention & audit chain** — export, fail-closed cross-store erasure, retention policies, and a hash-chained audit trail. Engineering controls for compliance programs, not a legal certification.
|
|
96
96
|
- **7-layer retrieval/recall stack & code graph** — multi-channel candidates (semantic, BM25, temporal, Hopfield, spreading activation) plus optional code-graph tools for blast radius and review context.
|
|
97
|
-
- **MCP profiles** — `code`
|
|
97
|
+
- **MCP profiles** — `code` (38 tools) for installed coding agents; `full` (54 tools); `power` (66 tools); `whole` (101 tools, all registered). Also `core` (18 tools), `mesh` (8 tools), and the unrestricted default surface — the same 54 tools as `full`.
|
|
98
98
|
- **Governed write path & verifiable transactions** — admission + policy control, a per-owner obligation ledger, and a hash-sealed completion manifest with a reconciler that redrives unmet obligations.
|
|
99
99
|
- **Self-healing lifecycle & admin remediation** — stale locks cleared on restart; list/resolve stuck operations from CLI, MCP, or the dashboard.
|
|
100
100
|
|
|
@@ -403,10 +403,10 @@ Full docs: [docs/multi-machine.md](docs/multi-machine.md) · [docs/distributed-d
|
|
|
403
403
|
| Path | Command | When |
|
|
404
404
|
|:-----|:--------|:-----|
|
|
405
405
|
| **npm global CLI** (primary) | `npm install -g superlocalmemory` | Node 18+; package-owned virtual environment; system Python is not modified; run `slm setup` explicitly afterward |
|
|
406
|
-
| **Python CLI + SDK** (primary) | Activate a Python virtual environment, then `python -m pip install superlocalmemory` | Python 3.
|
|
406
|
+
| **Python CLI + SDK** (primary) | Activate a Python virtual environment, then `python -m pip install superlocalmemory` | Python 3.12+; the `slm` CLI and importable SDK stay inside that environment |
|
|
407
407
|
| **Repository clone — macOS/Linux** | `./scripts/install.sh install` | Research/contributor path; delegates to an existing uv or pipx installation |
|
|
408
408
|
| **Repository clone — Windows** | `.\scripts\install.ps1 -Action Install` | Research/contributor path; delegates to an existing uv or pipx installation |
|
|
409
|
-
| **Claude Code Plugin** | `/plugin marketplace add qualixar/superlocalmemory` then `/plugin install superlocalmemory@qualixar` | Self-bootstraps venv, isolated
|
|
409
|
+
| **Claude Code Plugin** | `/plugin marketplace add qualixar/superlocalmemory` then `/plugin install superlocalmemory@qualixar` | Self-bootstraps venv, additive, no isolated data directory — reads the same store as every other install and sets no `SLM_MCP_PROFILE`, so it defaults to the same 54-tool `full` surface. Ships the skills/agents/hooks/commands |
|
|
410
410
|
| **Portable / IDE connect** | `slm connect <ide> [--here]` | Wire any IDE without reinstalling; `slm connect claude-code` → plugin pointer |
|
|
411
411
|
|
|
412
412
|
After any install path: `slm setup` → `slm doctor` → `slm warmup` (optional, pre-downloads ~500MB embedding model).
|
|
@@ -459,12 +459,12 @@ Control tool surface via `SLM_MCP_PROFILE`:
|
|
|
459
459
|
|
|
460
460
|
| Profile | Tools | Use case |
|
|
461
461
|
|:--------|:-----:|:---------|
|
|
462
|
-
| `core` |
|
|
463
|
-
| `code` |
|
|
462
|
+
| `core` | 18 | Memory, session, optimize, and correction review |
|
|
463
|
+
| `code` | 38 | Core + portable Brain evidence + code-graph tools + profile switching + bounded loops + memory-kind management |
|
|
464
464
|
| `mesh` | 8 | SLM-Mesh only — multi-session / multi-machine coordination |
|
|
465
|
-
| `full` |
|
|
466
|
-
| `power` |
|
|
467
|
-
| `whole` |
|
|
465
|
+
| `full` | 54 | Memory + portable Brain evidence + optimize + evolution + mesh + bounded loops + memory-kind management (also the no-profile default) |
|
|
466
|
+
| `power` | 66 | Full + administration, lifecycle, and diagnostics |
|
|
467
|
+
| `whole` | 101 | Every registered MCP tool |
|
|
468
468
|
|
|
469
469
|
**Precedence:** `ALL` > `TOOLS` > `PROFILE` > `default`
|
|
470
470
|
|
|
@@ -515,7 +515,7 @@ Hermes users get the same SLM skills and advisor roles through a native
|
|
|
515
515
|
`plugin.yaml` package, plus `/slm <command>` and generated `/slm-<command>`
|
|
516
516
|
aliases for the public CLI surface. The plugin is intentionally separate from
|
|
517
517
|
the PyPI/npm runtime: install the owning SLM runtime first, then install the
|
|
518
|
-
reviewed pinned pack from the `v4.1.
|
|
518
|
+
reviewed pinned pack from the `v4.1.19` GitHub release. It is additive and does
|
|
519
519
|
not replace Hermes's selected memory provider or existing configuration. See
|
|
520
520
|
[the Hermes integration guide](docs/hermes.md).
|
|
521
521
|
|
|
@@ -549,7 +549,7 @@ slm mode b # Local Ollama
|
|
|
549
549
|
slm mode c # Cloud LLM
|
|
550
550
|
```
|
|
551
551
|
|
|
552
|
-
Mode A can run core memory operations without sending memory content to a cloud model provider. This does not disable optional connectors, cloud backup, proxy providers, dependency acquisition, or model downloads; review configuration and network policy for the deployment.
|
|
552
|
+
Mode A can run core memory operations without sending memory content to a cloud model provider. This does not disable optional connectors, cloud backup, proxy providers, dependency acquisition, or model downloads; review configuration and network policy for the deployment. Memory content leaves the machine in two opt-in cases, not one. The online answer check: off unless you turn it on and agree, in any mode, and while it is on each recall sends its question and top memories to the provider you chose — the dashboard and the MCP `get_mode` tool say so. Jev memory-kind typing: off unless the answer check is already using Jev AND you separately consent to kind typing — both must be the literal boolean `true` — and while it is on, a memory's content (not just the recall question) is sent to Jev to suggest its kind.
|
|
553
553
|
|
|
554
554
|
SuperLocalMemory provides local storage, export/erasure commands, provenance, policy, and audit features that can support a compliance program. The software is not a legal certification, and compliance depends on the use case, operator, configuration, and surrounding systems.
|
|
555
555
|
|
package/bin/slm-npm
CHANGED
|
@@ -28,7 +28,7 @@ if (!fs.existsSync(runtimePython)) {
|
|
|
28
28
|
console.error(`Expected the package-owned interpreter at: ${runtimePython}`);
|
|
29
29
|
console.error('Repair it without touching system Python by running:');
|
|
30
30
|
console.error(' npm rebuild superlocalmemory');
|
|
31
|
-
console.error('If Python is missing, install Python 3.
|
|
31
|
+
console.error('If Python is missing, install Python 3.12-3.14 first.');
|
|
32
32
|
process.exit(1);
|
|
33
33
|
}
|
|
34
34
|
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "Qualixar",
|
|
4
4
|
"url": "https://github.com/qualixar/superlocalmemory"
|
|
5
5
|
},
|
|
6
|
-
"description": "Local-first agent memory + reversible context compression and KV cache, as an MCP server.
|
|
6
|
+
"description": "Local-first agent memory + reversible context compression and KV cache, as an MCP server. 38-tool code profile with graph intelligence.",
|
|
7
7
|
"displayName": "SuperLocalMemory",
|
|
8
8
|
"keywords": [
|
|
9
9
|
"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.1.
|
|
18
|
+
"version": "4.1.19"
|
|
19
19
|
}
|
package/plugin/CLAUDE.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
<!-- BEGIN SuperLocalMemory v4.1.
|
|
1
|
+
<!-- BEGIN SuperLocalMemory v4.1.19 -->
|
|
2
2
|
|
|
3
3
|
## SuperLocalMemory (SLM) — Agent Rules
|
|
4
4
|
|
|
5
|
-
SLM is local-first memory for agents. All tools run on the user's machine; nothing goes to the cloud unless the user chose Mode C
|
|
5
|
+
SLM is local-first memory for agents. All tools run on the user's machine; nothing goes to the cloud unless the user chose Mode C, turned on the online answer check, or separately opted into Jev memory-kind typing (its own consent, on top of the answer check already using Jev).
|
|
6
6
|
|
|
7
7
|
### Session start
|
|
8
8
|
Call `session_init(project_path, query)` ONCE per fresh session before any recall/remember. Never twice.
|
|
@@ -40,6 +40,6 @@ slm-recall · slm-remember · slm-session · slm-status · slm-cache · slm-comp
|
|
|
40
40
|
### Subagents
|
|
41
41
|
slm-memory-advisor (memory decisions, session hygiene, scope/profile guidance) · slm-optimize-advisor (context compression + KV cache) · slm-governance-advisor (scope/roles/compliance/GDPR)
|
|
42
42
|
|
|
43
|
-
<!-- END SuperLocalMemory v4.1.
|
|
43
|
+
<!-- END SuperLocalMemory v4.1.19 -->
|
|
44
44
|
|
|
45
|
-
SuperLocalMemory v4.1.
|
|
45
|
+
SuperLocalMemory v4.1.19 · 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.1.
|
|
80
|
+
SuperLocalMemory v4.1.19 · Qualixar · AGPL-3.0-or-later
|
|
@@ -47,4 +47,4 @@ slm-recall · slm-remember · slm-session · slm-scope · slm-profile · slm-gov
|
|
|
47
47
|
# What NOT to do
|
|
48
48
|
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.
|
|
49
49
|
|
|
50
|
-
SuperLocalMemory v4.1.
|
|
50
|
+
SuperLocalMemory v4.1.19 · 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.1.
|
|
44
|
+
SuperLocalMemory v4.1.19 · Qualixar · AGPL-3.0-or-later
|
package/plugin/requirements.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
superlocalmemory==4.1.
|
|
1
|
+
superlocalmemory==4.1.19
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
:: Exit codes: 0 = venv ready non-0 = failure (logged to stderr)
|
|
13
13
|
:: All informational output goes to stderr (stdout reserved for MCP stdio protocol).
|
|
14
14
|
::
|
|
15
|
-
:: Requires: Python 3.
|
|
15
|
+
:: Requires: Python 3.12+ on PATH, pip, standard Windows cmd.exe
|
|
16
16
|
|
|
17
17
|
setlocal EnableDelayedExpansion
|
|
18
18
|
|
|
@@ -29,13 +29,13 @@ if not defined CLAUDE_PLUGIN_DATA (
|
|
|
29
29
|
)
|
|
30
30
|
|
|
31
31
|
:: ---------------------------------------------------------------------------
|
|
32
|
-
:: Python >= 3.
|
|
32
|
+
:: Python >= 3.12 guard
|
|
33
33
|
:: ---------------------------------------------------------------------------
|
|
34
|
-
python -c "import sys; sys.exit(0 if sys.version_info >= (3,
|
|
34
|
+
python -c "import sys; sys.exit(0 if sys.version_info >= (3, 12) else 1)" 2>nul
|
|
35
35
|
if errorlevel 1 (
|
|
36
36
|
for /f "tokens=*" %%v in ('python --version 2^>^&1') do set PY_VER=%%v
|
|
37
|
-
echo ERROR: SuperLocalMemory plugin requires Python ^>= 3.
|
|
38
|
-
echo Install Python 3.
|
|
37
|
+
echo ERROR: SuperLocalMemory plugin requires Python ^>= 3.12, found: !PY_VER! >&2
|
|
38
|
+
echo Install Python 3.12+ and ensure it is first on PATH. >&2
|
|
39
39
|
exit /b 1
|
|
40
40
|
)
|
|
41
41
|
|
|
@@ -25,12 +25,12 @@ set -euo pipefail
|
|
|
25
25
|
exec 1>&2
|
|
26
26
|
|
|
27
27
|
# ---------------------------------------------------------------------------
|
|
28
|
-
# Python >= 3.
|
|
28
|
+
# Python >= 3.12 guard
|
|
29
29
|
# ---------------------------------------------------------------------------
|
|
30
|
-
if ! python3 -c "import sys; sys.exit(0 if sys.version_info >= (3,
|
|
30
|
+
if ! python3 -c "import sys; sys.exit(0 if sys.version_info >= (3, 12) else 1)" 2>/dev/null; then
|
|
31
31
|
PY_VER=$(python3 --version 2>&1 || echo "unknown")
|
|
32
|
-
echo "ERROR: SuperLocalMemory plugin requires Python >= 3.
|
|
33
|
-
echo "Install Python 3.
|
|
32
|
+
echo "ERROR: SuperLocalMemory plugin requires Python >= 3.12, found: ${PY_VER}" >&2
|
|
33
|
+
echo "Install Python 3.12+ and ensure it is first on PATH." >&2
|
|
34
34
|
exit 1
|
|
35
35
|
fi
|
|
36
36
|
|
|
@@ -31,9 +31,9 @@ project, a client engagement, a production vs staging environment.
|
|
|
31
31
|
| Profile | Tools | When to use |
|
|
32
32
|
|---------|-------|-------------|
|
|
33
33
|
| `core` | 18 tools — remember, recall, search, session, optimize | Minimal footprint, no code tools |
|
|
34
|
-
| `code` |
|
|
35
|
-
| `full` |
|
|
36
|
-
| `power` |
|
|
34
|
+
| `code` | 38 tools — core + portable Brain evidence + code graph + profile switching + bounded loops + memory-kind management | Default for IDE/coding agents |
|
|
35
|
+
| `full` | 54 tools — code + all memory ops + mesh + bounded loops | Multi-session, team workflows |
|
|
36
|
+
| `power` | 66 tools — full + governance + behavioral tools | Enterprise, admin, audit use cases |
|
|
37
37
|
| `mesh` | 8 tools — mesh coordination only | Lightweight cross-session signalling |
|
|
38
38
|
|
|
39
39
|
The profile is set at MCP server startup via `SLM_MCP_PROFILE` in the MCP config.
|
|
@@ -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.1.
|
|
149
|
+
*SuperLocalMemory v4.1.19 · Qualixar · AGPL-3.0-or-later*
|
|
@@ -47,4 +47,4 @@ slm-recall · slm-remember · slm-session · slm-scope · slm-profile · slm-gov
|
|
|
47
47
|
# What NOT to do
|
|
48
48
|
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.
|
|
49
49
|
|
|
50
|
-
SuperLocalMemory v4.1.
|
|
50
|
+
SuperLocalMemory v4.1.19 · 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.1.
|
|
44
|
+
SuperLocalMemory v4.1.19 · Qualixar · AGPL-3.0-or-later
|
|
@@ -83,16 +83,27 @@ When the SLM MCP server is unavailable, use these CLI equivalents:
|
|
|
83
83
|
|
|
84
84
|
## Tool reference (core profile — 18 tools)
|
|
85
85
|
|
|
86
|
-
> The MCP config ships `
|
|
87
|
-
>
|
|
88
|
-
>
|
|
89
|
-
>
|
|
90
|
-
> `
|
|
91
|
-
>
|
|
92
|
-
> `
|
|
93
|
-
> `
|
|
94
|
-
>
|
|
95
|
-
>
|
|
86
|
+
> The MCP config ships only `SLM_AGENT_ID=claude_code` — no `SLM_MCP_PROFILE` —
|
|
87
|
+
> so it falls back to the same no-profile default every install gets: the
|
|
88
|
+
> 54-tool `full` surface. That is the 18 core tools below **plus** mesh
|
|
89
|
+
> coordination (8: `mesh_summary`, `mesh_peers`, `mesh_send`, `mesh_inbox`,
|
|
90
|
+
> `mesh_state`, `mesh_lock`, `mesh_events`, `mesh_status`), portable-evidence
|
|
91
|
+
> tools (5: `get_brain_evidence_status`, `record_agent_experience`,
|
|
92
|
+
> `record_cognitive_turn`, `finalize_cognitive_turn`,
|
|
93
|
+
> `observe_bounded_loop_evidence`), memory-kind tools (4: `set_memory_kind`,
|
|
94
|
+
> `memory_kinds_status`, `review_memory_kinds`, `confirm_memory_kinds`),
|
|
95
|
+
> bounded-loop tools (3: `slm_loop_run`, `slm_loop_history`, `slm_loop_show`),
|
|
96
|
+
> usefulness reports (2: `report_outcome`, `report_feedback`) and 14 more
|
|
97
|
+
> administration/learning tools (`delete_memory`, `get_status`, `observe`,
|
|
98
|
+
> `run_maintenance`, `consolidate_cognitive`, `get_soft_prompts`, `set_mode`,
|
|
99
|
+
> `log_tool_event`, `get_assertions`, `reinforce_assertion`,
|
|
100
|
+
> `contradict_assertion`, `evolve_skill`, `skill_health`, `skill_lineage`).
|
|
101
|
+
> Set `SLM_MCP_PROFILE=code` yourself for the narrower 38-tool `code` surface,
|
|
102
|
+
> which trades mesh and administration tools for 6 code-graph tools
|
|
103
|
+
> (`build_code_graph`, `get_blast_radius`, `query_graph`,
|
|
104
|
+
> `semantic_search_code`, `get_review_context`, `detect_changes`). Use
|
|
105
|
+
> `power` (66 tools) for governance and audit tools. See slm-profile for
|
|
106
|
+
> profile switching.
|
|
96
107
|
|
|
97
108
|
| Tool | Signature (key params) | Notes |
|
|
98
109
|
|--------------------|----------------------------------------------------------------------------------------------|----------------------------------------|
|
|
@@ -138,4 +149,4 @@ When the SLM MCP server is unavailable, use these CLI equivalents:
|
|
|
138
149
|
- **slm-optimize-advisor** — context compression and KV cache
|
|
139
150
|
- **slm-governance-advisor** — scope/role compliance, retention policies, GDPR
|
|
140
151
|
|
|
141
|
-
SuperLocalMemory v4.1.
|
|
152
|
+
SuperLocalMemory v4.1.19 · Qualixar · AGPL-3.0-or-later
|
|
@@ -31,9 +31,9 @@ project, a client engagement, a production vs staging environment.
|
|
|
31
31
|
| Profile | Tools | When to use |
|
|
32
32
|
|---------|-------|-------------|
|
|
33
33
|
| `core` | 18 tools — remember, recall, search, session, optimize | Minimal footprint, no code tools |
|
|
34
|
-
| `code` |
|
|
35
|
-
| `full` |
|
|
36
|
-
| `power` |
|
|
34
|
+
| `code` | 38 tools — core + portable Brain evidence + code graph + profile switching + bounded loops + memory-kind management | Default for IDE/coding agents |
|
|
35
|
+
| `full` | 54 tools — code + all memory ops + mesh + bounded loops | Multi-session, team workflows |
|
|
36
|
+
| `power` | 66 tools — full + governance + behavioral tools | Enterprise, admin, audit use cases |
|
|
37
37
|
| `mesh` | 8 tools — mesh coordination only | Lightweight cross-session signalling |
|
|
38
38
|
|
|
39
39
|
The profile is set at MCP server startup via `SLM_MCP_PROFILE` in the MCP config.
|
|
@@ -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.1.
|
|
149
|
+
*SuperLocalMemory v4.1.19 · Qualixar · AGPL-3.0-or-later*
|
package/scripts/postinstall.js
CHANGED
|
@@ -17,7 +17,7 @@ const fs = require('fs');
|
|
|
17
17
|
const path = require('path');
|
|
18
18
|
const os = require('os');
|
|
19
19
|
|
|
20
|
-
const MIN_PYTHON = Object.freeze([3,
|
|
20
|
+
const MIN_PYTHON = Object.freeze([3, 12]);
|
|
21
21
|
const MAX_PYTHON_EXCLUSIVE = Object.freeze([3, 15]);
|
|
22
22
|
const INSTALL_TIMEOUT_MS = 15 * 60 * 1000;
|
|
23
23
|
|
|
@@ -43,12 +43,19 @@ function pythonCandidates(platform = os.platform()) {
|
|
|
43
43
|
['py', '-3.14'],
|
|
44
44
|
['py', '-3.13'],
|
|
45
45
|
['py', '-3.12'],
|
|
46
|
-
['py', '-3.11'],
|
|
47
46
|
['python3'],
|
|
48
47
|
['python'],
|
|
49
48
|
];
|
|
50
49
|
}
|
|
50
|
+
// Debian 12, Ubuntu 22.04 (with deadsnakes) and RHEL 9 all ship a system
|
|
51
|
+
// `python3` older than 3.12, with the supported versioned interpreter
|
|
52
|
+
// installed alongside it, unused. Try the versioned names first so that
|
|
53
|
+
// interpreter is found before falling back to the bare names and the
|
|
54
|
+
// fixed absolute paths below.
|
|
51
55
|
return [
|
|
56
|
+
['python3.14'],
|
|
57
|
+
['python3.13'],
|
|
58
|
+
['python3.12'],
|
|
52
59
|
['python3'],
|
|
53
60
|
['python'],
|
|
54
61
|
['/opt/homebrew/bin/python3'],
|
|
@@ -57,21 +64,44 @@ function pythonCandidates(platform = os.platform()) {
|
|
|
57
64
|
];
|
|
58
65
|
}
|
|
59
66
|
|
|
67
|
+
function probePython(command, prefixArgs) {
|
|
68
|
+
try {
|
|
69
|
+
const result = spawnSync(command, [...prefixArgs, '--version'], {
|
|
70
|
+
stdio: 'pipe',
|
|
71
|
+
timeout: 5000,
|
|
72
|
+
env: process.env,
|
|
73
|
+
});
|
|
74
|
+
const output = `${(result.stdout || '').toString()} ${(result.stderr || '').toString()}`;
|
|
75
|
+
return { status: result.status, version: parsePythonVersion(output) };
|
|
76
|
+
} catch (error) {
|
|
77
|
+
return { status: null, version: null, error };
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
60
81
|
function findSupportedPython() {
|
|
82
|
+
const override = String(process.env.SLM_PYTHON || '').trim();
|
|
83
|
+
if (override) {
|
|
84
|
+
// The user named this interpreter explicitly (docs/getting-started.md's
|
|
85
|
+
// escape hatch for a system where no supported `python3` is on PATH, for
|
|
86
|
+
// example a deadsnakes or pyenv install at a custom path). Honour it,
|
|
87
|
+
// but still version-check it — and if it fails, say so plainly instead
|
|
88
|
+
// of silently trying a different interpreter the user did not choose.
|
|
89
|
+
const probe = probePython(override, []);
|
|
90
|
+
if (probe.status === 0 && isSupportedPython(probe.version)) {
|
|
91
|
+
return { command: override, prefixArgs: [], version: probe.version };
|
|
92
|
+
}
|
|
93
|
+
const detail = probe.status === 0 && probe.version
|
|
94
|
+
? `found Python ${probe.version.join('.')}, which is not supported (need 3.12-3.14)`
|
|
95
|
+
: 'could not be run (check the path and that it is executable)';
|
|
96
|
+
console.error(`SuperLocalMemory: SLM_PYTHON=${override} ${detail}.`);
|
|
97
|
+
console.error('Point SLM_PYTHON at a Python 3.12-3.14 interpreter, or unset it to let the installer search automatically.');
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
|
|
61
101
|
for (const candidate of pythonCandidates()) {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
timeout: 5000,
|
|
66
|
-
env: process.env,
|
|
67
|
-
});
|
|
68
|
-
const output = `${(result.stdout || '').toString()} ${(result.stderr || '').toString()}`;
|
|
69
|
-
const version = parsePythonVersion(output);
|
|
70
|
-
if (result.status === 0 && isSupportedPython(version)) {
|
|
71
|
-
return { command: candidate[0], prefixArgs: candidate.slice(1), version };
|
|
72
|
-
}
|
|
73
|
-
} catch (_error) {
|
|
74
|
-
// Try the next interpreter without mutating PATH or the machine.
|
|
102
|
+
const probe = probePython(candidate[0], candidate.slice(1));
|
|
103
|
+
if (probe.status === 0 && isSupportedPython(probe.version)) {
|
|
104
|
+
return { command: candidate[0], prefixArgs: candidate.slice(1), version: probe.version };
|
|
75
105
|
}
|
|
76
106
|
}
|
|
77
107
|
return null;
|
|
@@ -142,7 +172,7 @@ function validateRuntimeLocation(venvRoot) {
|
|
|
142
172
|
|
|
143
173
|
function printPythonGuidance() {
|
|
144
174
|
console.error('');
|
|
145
|
-
console.error('SuperLocalMemory requires Python 3.
|
|
175
|
+
console.error('SuperLocalMemory requires Python 3.12, 3.13, or 3.14.');
|
|
146
176
|
console.error('Install Python from https://www.python.org/downloads/ and rerun:');
|
|
147
177
|
console.error(' npm rebuild superlocalmemory');
|
|
148
178
|
console.error('The npm installer will create a private virtual environment;');
|
|
@@ -296,6 +326,7 @@ module.exports = {
|
|
|
296
326
|
isSupportedPython,
|
|
297
327
|
main,
|
|
298
328
|
parsePythonVersion,
|
|
329
|
+
probePython,
|
|
299
330
|
pypiSpecifier,
|
|
300
331
|
pythonCandidates,
|
|
301
332
|
runtimePythonPath,
|