superlocalmemory 4.0.6 → 4.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/CHANGELOG.md +128 -4
  2. package/README.md +6 -11
  3. package/package.json +1 -1
  4. package/plugin/.claude-plugin/plugin.json +1 -1
  5. package/plugin/CLAUDE.md +3 -3
  6. package/plugin/agents/slm-governance-advisor.md +1 -1
  7. package/plugin/agents/slm-loop-runner.md +1 -1
  8. package/plugin/agents/slm-memory-advisor.md +1 -1
  9. package/plugin/agents/slm-optimize-advisor.md +1 -1
  10. package/plugin/requirements.txt +1 -1
  11. package/plugin/skills/slm-cache/SKILL.md +1 -1
  12. package/plugin/skills/slm-compress/SKILL.md +1 -1
  13. package/plugin/skills/slm-governance/SKILL.md +1 -1
  14. package/plugin/skills/slm-graph/SKILL.md +1 -1
  15. package/plugin/skills/slm-loop/SKILL.md +1 -1
  16. package/plugin/skills/slm-mesh/SKILL.md +1 -1
  17. package/plugin/skills/slm-profile/SKILL.md +1 -1
  18. package/plugin/skills/slm-recall/SKILL.md +1 -1
  19. package/plugin/skills/slm-remember/SKILL.md +1 -1
  20. package/plugin/skills/slm-scope/SKILL.md +1 -1
  21. package/plugin/skills/slm-session/SKILL.md +1 -1
  22. package/plugin/skills/slm-status/SKILL.md +1 -1
  23. package/plugin-src/rules/AGENTS.md +1 -1
  24. package/pyproject.toml +1 -1
  25. package/src/superlocalmemory/__init__.py +1 -1
  26. package/src/superlocalmemory/cli/commands.py +14 -0
  27. package/src/superlocalmemory/cli/main.py +9 -0
  28. package/src/superlocalmemory/cli/summary_cmd.py +215 -0
  29. package/src/superlocalmemory/code_graph/bridge/entity_resolver.py +26 -0
  30. package/src/superlocalmemory/code_graph/bridge/event_listeners.py +14 -3
  31. package/src/superlocalmemory/code_graph/bridge/maintenance.py +212 -0
  32. package/src/superlocalmemory/code_graph/config.py +65 -1
  33. package/src/superlocalmemory/core/consolidation_engine.py +14 -15
  34. package/src/superlocalmemory/core/fact_consolidator.py +24 -1
  35. package/src/superlocalmemory/core/maintenance.py +51 -1
  36. package/src/superlocalmemory/core/recall_worker.py +4 -0
  37. package/src/superlocalmemory/evolution/skill_evolver.py +16 -1
  38. package/src/superlocalmemory/hooks/hook_handlers.py +38 -11
  39. package/src/superlocalmemory/learning/pattern_miner.py +12 -7
  40. package/src/superlocalmemory/mcp/profiles.py +10 -3
  41. package/src/superlocalmemory/mcp/server.py +7 -0
  42. package/src/superlocalmemory/mcp/tools_code_graph.py +47 -3
  43. package/src/superlocalmemory/mcp/tools_summaries.py +147 -0
  44. package/src/superlocalmemory/server/consolidation_runner.py +140 -0
  45. package/src/superlocalmemory/server/recall_serializer.py +34 -2
  46. package/src/superlocalmemory/server/routes/agents.py +52 -8
  47. package/src/superlocalmemory/server/routes/brain.py +108 -0
  48. package/src/superlocalmemory/server/routes/memories.py +214 -0
  49. package/src/superlocalmemory/server/routes/v3_api.py +24 -46
  50. package/src/superlocalmemory/server/unified_daemon.py +107 -0
  51. package/src/superlocalmemory/storage/schema_code_graph.py +44 -1
  52. package/src/superlocalmemory/summaries/base.py +159 -0
  53. package/src/superlocalmemory/summaries/daily_reflection.py +55 -8
  54. package/src/superlocalmemory/summaries/project_work_log.py +23 -7
  55. package/src/superlocalmemory/summaries/session_summary.py +9 -5
  56. package/src/superlocalmemory/ui/index.html +10 -4
  57. package/src/superlocalmemory/ui/js/fact-detail.js +61 -0
  58. package/src/superlocalmemory/ui/js/od-boundedloops.js +324 -0
  59. package/src/superlocalmemory/ui/js/od-memories.js +337 -12
  60. package/src/superlocalmemory/ui/js/od-mesh.js +97 -5
  61. package/src/superlocalmemory/ui/js/od-operations.js +1 -150
  62. package/src/superlocalmemory/ui/js/od-optimize.js +36 -9
  63. package/src/superlocalmemory/ui/js/od-shell.js +10 -0
package/CHANGELOG.md CHANGED
@@ -5,6 +5,127 @@ 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.8] — Where you were actually looking
9
+
10
+ ### Added
11
+ - **Summaries reach agents and the dashboard.** 4.0.7 gave the summary layer a
12
+ command; an agent still had no way to ask for one, and neither did anyone
13
+ reading the dashboard. Adds the `get_memory_summary` tool and a **Summaries**
14
+ tab under Memories with Today, Yesterday, and a picker listing the projects
15
+ SuperLocalMemory has actually recorded activity in. Every result states how
16
+ many memories it was built from and how much it covered.
17
+ - **Bounded Loops has its own page**, alongside the other integrations. It shows
18
+ whether Bounded Loops is installed, which agreement the two products
19
+ negotiated, and which finished runs have been imported — and states plainly
20
+ that imported evidence is read-only: SuperLocalMemory never learns from it, no
21
+ file paths leave your workspace, and the tamper-evidence it carries is not the
22
+ same thing as independent verification.
23
+ - **Mesh shows its history**, not only who is connected this second. Sessions
24
+ leave the mesh when they end, so the page was empty between sessions even on a
25
+ machine with plenty of mesh activity.
26
+
27
+ ### Changed
28
+ - **Recall Lab is the first thing you see under Memories**, with example
29
+ questions to start from. Summaries sits next to it. The three browsing views
30
+ follow.
31
+
32
+ ### Fixed
33
+ - **Memory stopped learning from use.** Recall marks which memories it returned
34
+ so that later use can be credited back, but the mark never reached the
35
+ assistant, so nothing was ever credited. Every recall was scored as neither
36
+ good nor bad, which is why recall quality sat at its starting value and no
37
+ source ever showed a settled quality signal however much the memory was used.
38
+ - **The behavioural half of consolidation had never run.** Nothing triggered it,
39
+ and when it did run, two of its four steps failed without reporting anything.
40
+ SuperLocalMemory now runs it on a schedule while idle — never while you are
41
+ storing or recalling — and at session end.
42
+ - **"This project" summaries could not work.** The button sent no project, and
43
+ the answer was always an error. SuperLocalMemory installs once for your whole
44
+ machine, so a browser tab has no way to know which project you mean; it now
45
+ lists the ones it has seen.
46
+ - **Locally written summaries began with an apology.** The local model was never
47
+ told what it was writing, so it replied as if in a chat. It now returns the
48
+ summary and nothing else.
49
+ - **A summary built from nothing claimed to cover everything.** A project with
50
+ recorded activity but no saved facts is now reported as a partial view.
51
+ - **Multi-Agent Memory showed access tokens instead of agent names**, and because
52
+ one agent uses many tokens over time, a single agent appeared as dozens.
53
+ - **Optimize invented a chart.** The cache hit-rate graph drew a rising trend
54
+ generated from the current value rather than measured; no history is recorded,
55
+ so it is gone until there is something real to plot. "Tokens saved" was
56
+ labelled as a monthly figure with an upward arrow that nothing ever set — it is
57
+ a total since install, and now says so. The page also explains why its numbers
58
+ are zero while its switches are on.
59
+ - **One kind of memory pattern was never produced.** The query that finds it
60
+ asked for columns that do not exist, so it failed on every run and was skipped
61
+ silently.
62
+ - **Code links never appeared for anyone.** Two separate reasons. The pass that
63
+ creates them matched no facts at all on a real store — it looked for an empty
64
+ archive marker, while live facts carry `live`, so every fact was excluded. And
65
+ the panel that displayed them was the search-results view, not the memory
66
+ drawer people actually open. Both fixed; on a real store this produces 7,470
67
+ links across 3,603 memories.
68
+ - **"Atomic facts" always read "No atomic facts recorded for this memory."** The
69
+ drawer looked up child facts using the row's own id, but a row in that pane is
70
+ itself an atomic fact and its parent is a separate field. Records stored
71
+ directly, which have no parent, now say so rather than reporting missing data.
72
+ - **Summaries ignored your mode.** The command never passed the configuration, so
73
+ every summary took the no-model path — a Mode B user got Mode A output. Ollama
74
+ now writes them when configured, falling back if it is unavailable.
75
+ - **Summary highlights were unreadable.** Truncation counted characters but
76
+ ignored newlines, so one fact containing headings and blank lines rendered as
77
+ six lines and the list stopped being a list.
78
+ - **"Active entities" listed internal identifiers** instead of names. It now
79
+ reads `Fixed (127), Gateway (124)`.
80
+
81
+ ## [4.0.7] — Reachable
82
+
83
+ Everything here was already built. None of it could be used.
84
+
85
+ ### Added
86
+ - **`slm summary` — the readable layer over your memories.** Requested in #113
87
+ and shipped without a way to call it in 4.0.6.
88
+ - `slm summary day` — what you recorded today (also `yesterday`, or a date)
89
+ - `slm summary project` — what was worked on, for a directory
90
+ - `slm summary session <id>` — what one session covered
91
+
92
+ Every summary says how much of the underlying data it could actually see, and
93
+ `--json` lists the exact memories it was built from. Session data is sparse —
94
+ roughly 4% of facts carry a session id — so a session summary reports that
95
+ rather than presenting a fraction as the whole. No language model needed, so
96
+ these work in the fully offline mode.
97
+ - **Memories now link to the code they mention.** A memory that names a
98
+ function, method or file is connected to it in the code graph, with a short
99
+ description of what it points at and a marker when the code has since changed.
100
+ Expanding a memory in the dashboard shows this; nothing appears if you have no
101
+ code graph. Runs during background maintenance, never when a memory is saved,
102
+ and requires no language model.
103
+ - **`scripts/bump_version.py`** sets the release version in all fifteen places
104
+ that declare one, with `--check` for CI.
105
+
106
+ ### Fixed
107
+ - **The code↔memory bridge never ran.** Four things were missing at once: setup
108
+ wrote a `bridge_enabled` flag no code read, the code-graph build discarded it,
109
+ the code-graph settings had no loader at all, and the method the bridge was
110
+ written against was an unimplemented placeholder. Enabling the code graph
111
+ during setup left the flag on disk and the feature inert, with nothing to
112
+ indicate it.
113
+ - **Version numbers disagreed across the project.** 4.0.6 shipped with the pip
114
+ requirements pins, the npm lockfile, the editor plugin manifest, the citation
115
+ metadata and the lockfile all still reading 4.0.5, and the agent rule footers
116
+ reading 4.0.4. Installing from `requirements.txt` fetched the wrong release.
117
+ - **Stale-memory checks reported "nothing is stale" when the feature was off.**
118
+ They answer entirely from code links, so with linking disabled they returned an
119
+ empty list — the most reassuring possible answer, from something that never
120
+ ran. They now say the feature is off, and the remediation message names a
121
+ setting that exists (it previously named one that did not).
122
+ - **`slm help` did not mention `gdpr`**, which shipped in 4.0.6. The drift guard
123
+ that should have caught it only read one file, so a command registered
124
+ elsewhere was exempt from the check.
125
+ - **Consolidation could create a database file named after a bad argument.**
126
+ Given something that was neither a database handle nor a path, it stringified
127
+ the object and let SQLite create that filename. It now refuses the argument.
128
+
8
129
  ## [4.0.6] — The Connected Brain
9
130
 
10
131
  ### Added
@@ -14,10 +135,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
14
135
  a starting value as a measured result. Source quality no longer lists internal
15
136
  identifiers; when nothing has been measured yet it says so and explains what
16
137
  would change that.
17
- - **Session, daily and project summaries.** A readable layer over your memories:
18
- what a session covered, what a day's main topics were, and what was worked on
19
- per project. Each one links back to the memories it came from, and each states
20
- how much of the underlying data it could actually cover. Requested in #113.
138
+ - **Session, daily and project summaries generators only, not yet reachable.**
139
+ A readable layer over your memories: what a session covered, what a day's main
140
+ topics were, and what was worked on per project. Each links back to the
141
+ memories it came from and states how much of the underlying data it could
142
+ actually cover. Corrected after release: 4.0.6 ships the generators but no
143
+ command, tool or endpoint that calls them, so there is no way to use this yet.
144
+ The surface lands in 4.0.7. Requested in #113.
21
145
  - **Entity-level memory consolidation now runs.** Repeated facts about the same
22
146
  entity are merged during maintenance, and the originals are archived rather
23
147
  than deleted.
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  </picture>
6
6
  </p>
7
7
 
8
- <h1 align="center">SuperLocalMemory V4.0.6</h1>
8
+ <h1 align="center">SuperLocalMemory V4.0.8</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.6</code> — one control plane: <strong>SLM-Mesh</strong> peer coordination · multi-scope memory (personal / shared / global) · profiles · Cache · Compress · 7-layer retrieval · code graph · Entity Explorer · skill evolution · Modes A/B/C · GDPR retention &amp; audit chain · bounded loops — across CLI, MCP, dashboard, the <strong>Claude plugin</strong>, the <strong>Codex add-on</strong>, and documented IDE integrations.<br/>
30
+ <p align="center"><code>v4.0.8</code> — one control plane: <strong>SLM-Mesh</strong> peer coordination · multi-scope memory (personal / shared / global) · profiles · Cache · Compress · 7-layer retrieval · code graph · Entity Explorer · skill evolution · Modes A/B/C · GDPR retention &amp; audit chain · bounded loops — across CLI, MCP, dashboard, the <strong>Claude plugin</strong>, the <strong>Codex add-on</strong>, and documented IDE integrations.<br/>
31
31
  Proxy: <code>slm wrap claude</code> &nbsp;·&nbsp; MCP: add <code>slm_compress</code> to your config &nbsp;·&nbsp; Skill: zero-config</p>
32
32
  <p align="center"><strong>Four public arXiv preprints</strong> · V4: <a href="https://arxiv.org/abs/2608.08253">arXiv:2608.08253</a> · companion archive: <a href="https://zenodo.org/records/21853302">Zenodo 21853302</a> (<a href="https://doi.org/10.5281/zenodo.21853302">DOI 10.5281/zenodo.21853302</a>) · prior preprints: <a href="https://arxiv.org/abs/2603.02240">2603.02240</a> · <a href="https://arxiv.org/abs/2603.14588">2603.14588</a> · <a href="https://arxiv.org/abs/2604.04514">2604.04514</a>.</p>
33
33
 
34
34
  <p align="center">
35
- <a href="CHANGELOG.md"><img src="https://img.shields.io/badge/v4.0.6-Current_Release-2ea44f?style=for-the-badge&logo=checkmarx&logoColor=white" alt="v4.0.6 — Current Release"/></a>
35
+ <a href="CHANGELOG.md"><img src="https://img.shields.io/badge/v4.0.8-Current_Release-2ea44f?style=for-the-badge&logo=checkmarx&logoColor=white" alt="v4.0.8 — Current Release"/></a>
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>
@@ -62,16 +62,11 @@ SuperLocalMemory V4 combines conventional dense and lexical retrieval with graph
62
62
 
63
63
  **Memory with a sense of time.** SLM does not only store *what* an agent learned — it records *when*. Every fact carries ingestion timing and provenance; recall runs a dedicated temporal candidate channel alongside semantic, lexical, and associative retrieval; scenes and entity timelines reconstruct sequence; and the lifecycle lets neglected memory decay and self-archive instead of growing without bound. Time is a first-class ranking and lifecycle signal rather than a timestamp column an agent never reads — which is what lets a long-lived agent reason about how its context changed, not only what it currently holds.
64
64
 
65
- **What V4.0.6 ships.** The Living Brain is written for the person who owns the memory, not for the person who built the ranker. It leads with how many questions your memory has actually answered instead of a raw event count, names its ranking phase in words, and refuses to present an untrained starting value as a measured result where nothing has been measured yet, it says so and says what would change that. Alongside it, a readable consolidation layer: session, daily, and project summaries, each linked back to the memories it was derived from and each explicit about how much of the underlying data it could cover. Entity-level consolidation now actually runs during maintenance, merging repeated facts about the same entity and archiving the originals rather than deleting them. Codex and Bounded Loops are detected and shown among connected clients, labelled by the evidence that supports them configuration proves setup, not traffic, and the dashboard says which one it has. Presence now distinguishes "no agents are active" from "presence has stopped being recorded", because those looked identical before and only one of them is fine. See [reviewed corrections](docs/reviewed-corrections.md) for the correction lifecycle and [MCP tools](docs/mcp-tools.md) for host-facing commands.
65
+ **What V4.0.7 ships.** Three things that existed but could not be used. `slm summary` gives you a readable layer over your own memories `day` for what you recorded today, `project` for a directory, `session` for one session each stating how much of the underlying data it could actually see, with `--json` listing the exact memories it came from. Memories that mention a function, method or file are now linked to that code, with a short description of what they point at and a marker once the code has changed; expanding a memory in the dashboard shows it. Both need no language model, so they work in the fully local mode. The code↔memory bridge behind the second one had never run at all: the setup flag was written and never read, the build discarded it, its settings had no loader, and the method it was written against was an unimplemented placeholder. Linking runs during background maintenance, never when a memory is saved. See [reviewed corrections](docs/reviewed-corrections.md) for the correction lifecycle and [MCP tools](docs/mcp-tools.md) for host-facing commands.
66
66
 
67
- **Fixed in V4.0.6.** The knowledge graph no longer opens blank. It framed itself against a canvas that had no size yet, spent its whole frame budget drawing off-screen, and stopped so the graph appeared only after you moved the node slider. Returning to the pane cleared the canvas without redrawing it, which failed the same way for a different reason. Both are fixed, the default node count is 50, and on narrower screens the details and chat panel is reachable instead of stranded a screen-height below the fold. Recall no longer raises when the reranker reports success but returns no scores; it falls back to its existing ranking. Corrections attempted without the daemon now refuse with the reason and the remedy, rather than reporting a transient error that could never clear.
67
+ **Fixed in V4.0.7.** Version numbers disagreed across the project the pip requirement pins, npm lockfile, editor plugin manifest, citation metadata and lockfile all still named the previous release, so installing from `requirements.txt` fetched the wrong version; one script now sets all fifteen. Stale-memory checks reported "nothing is stale" when code linking was simply switched off, and pointed at a setting that did not exist. `slm gdpr` was missing from `slm help`. Consolidation, handed something that was neither a database handle nor a path, created a file named after the object instead of refusing it.
68
68
 
69
- **Carried forward from V4.0.5.** A correction is a review-gated lifecycle, not an in-place edit: SLM creates an immutable successor, keeps it out of current recall until an authenticated reviewer applies it, and preserves the predecessor for time-aware history. Every candidate path, including cached context, pins, bridge expansion, and scene expansion, uses hard current-truth admission and abstains if that truth cannot be read. `slm brain`, MCP, HTTP, and the Living Brain share one observation-only BrainTruth snapshot; feedback, external Bounded Loops evidence, and receipt claims are shown honestly but do not silently alter recall, ranking, or model routing. The optional Bounded Loops bridge remains capability-negotiated and independent.
70
-
71
- **Adaptive-ranking migration.** V4.0.6 leaves the optional adaptive ranker off
72
- unless an operator sets `SLM_RANKING` (`v1`, `v2`, or `v2-ensemble`). This does
73
- not disable the normal retrieval channels; it prevents feedback and
74
- observation data from changing ranking without an explicit operator decision.
69
+ **Carried forward from V4.0.5 and V4.0.6.** A correction is a review-gated lifecycle, not an in-place edit: SLM creates an immutable successor, keeps it out of current recall until an authenticated reviewer applies it, and preserves the predecessor for time-aware history. Every candidate path cached context, pins, bridge and scene expansion uses hard current-truth admission and abstains if that truth cannot be read. `slm brain`, MCP, HTTP and the Living Brain share one observation-only BrainTruth snapshot; feedback, external Bounded Loops evidence and receipt claims are shown honestly but never silently alter recall, ranking or model routing. The Living Brain leads with how many questions your memory has answered rather than a raw event count, and says so plainly where nothing has been measured yet. The knowledge graph opens reliably, with a default of 50 nodes and its details panel reachable on narrow screens. The optional adaptive ranker stays off unless an operator sets `SLM_RANKING` (`v1`, `v2`, or `v2-ensemble`) — that gate prevents feedback and observation data from changing ranking without an explicit decision, and does not disable the normal retrieval channels.
75
70
 
76
71
  - **[SLM-Mesh](#slm-mesh-cross-session--cross-machine-coordination)** — authenticated cross-session and cross-machine peer coordination (messages, locks, shared state, inbox/outbox, optional discovery). Coordination only — not automatic replicated memory.
77
72
  - **Multi-scope memory & profiles** — workspaces (profiles) plus `personal` / `shared` / `global` scopes; cross-profile recall is default-deny.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "superlocalmemory",
3
- "version": "4.0.6",
3
+ "version": "4.0.8",
4
4
  "description": "Local-first agent memory with MCP and an agent-native CLI. Documented clients include Claude Code, Cursor, and Windsurf.",
5
5
  "keywords": [
6
6
  "ai-memory",
@@ -15,5 +15,5 @@
15
15
  "mcpServers": "./.mcp.json",
16
16
  "name": "superlocalmemory",
17
17
  "repository": "https://github.com/qualixar/superlocalmemory",
18
- "version": "4.0.5"
18
+ "version": "4.0.8"
19
19
  }
package/plugin/CLAUDE.md CHANGED
@@ -1,4 +1,4 @@
1
- <!-- BEGIN SuperLocalMemory v4.0.5 -->
1
+ <!-- BEGIN SuperLocalMemory v4.0.8 -->
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.5 -->
42
+ <!-- END SuperLocalMemory v4.0.8 -->
43
43
 
44
- SuperLocalMemory v4.0.5 · Qualixar · AGPL-3.0-or-later
44
+ SuperLocalMemory v4.0.8 · 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.5 · Qualixar · AGPL-3.0-or-later
80
+ SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later
@@ -68,4 +68,4 @@ assessment. The gate is the authority.
68
68
 
69
69
  ---
70
70
 
71
- SuperLocalMemory v4.0.5 · Qualixar · AGPL-3.0-or-later
71
+ SuperLocalMemory v4.0.8 · 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.5 · Qualixar · AGPL-3.0-or-later
49
+ SuperLocalMemory v4.0.8 · 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.5 · Qualixar · AGPL-3.0-or-later
44
+ SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later
@@ -1 +1 @@
1
- superlocalmemory==4.0.5
1
+ superlocalmemory==4.0.8
@@ -145,4 +145,4 @@ These subcommands control daemon-level cache settings. They do not read or write
145
145
 
146
146
  ---
147
147
 
148
- SuperLocalMemory v4.0.5 · Qualixar · AGPL-3.0-or-later
148
+ SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later
@@ -147,4 +147,4 @@ Content over 1 MB (1 000 000 bytes UTF-8) is processed but `reversible` is force
147
147
 
148
148
  ---
149
149
 
150
- SuperLocalMemory v4.0.5 · Qualixar · AGPL-3.0-or-later
150
+ SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later
@@ -245,4 +245,4 @@ Before running any destructive operation (`forget`, `compact_memories`):
245
245
 
246
246
  ---
247
247
 
248
- *SuperLocalMemory v4.0.5 · Qualixar · AGPL-3.0-or-later*
248
+ *SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later*
@@ -312,4 +312,4 @@ profile. See `slm-profile` for the full profile switching workflow.
312
312
 
313
313
  ---
314
314
 
315
- SuperLocalMemory v4.0.5 · Qualixar · AGPL-3.0-or-later
315
+ SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later
@@ -96,4 +96,4 @@ paused, name the approval needed; when errored, quote the short detail.
96
96
 
97
97
  ---
98
98
 
99
- SuperLocalMemory v4.0.5 · Qualixar · AGPL-3.0-or-later
99
+ SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later
@@ -279,4 +279,4 @@ mesh availability.
279
279
 
280
280
  ---
281
281
 
282
- *SuperLocalMemory v4.0.5 · Qualixar · AGPL-3.0-or-later*
282
+ *SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later*
@@ -146,4 +146,4 @@ Name them differently in your MCP config (e.g. `superlocalmemory-personal` and
146
146
 
147
147
  ---
148
148
 
149
- *SuperLocalMemory v4.0.5 · Qualixar · AGPL-3.0-or-later*
149
+ *SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later*
@@ -236,4 +236,4 @@ before recalling, then switch back. See `slm-profile` for workspace switching.
236
236
 
237
237
  ---
238
238
 
239
- *SuperLocalMemory v4.0.5 · Qualixar · AGPL-3.0-or-later*
239
+ *SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later*
@@ -238,4 +238,4 @@ different workspace, use `switch_profile` first. See `slm-profile`.
238
238
 
239
239
  ---
240
240
 
241
- *SuperLocalMemory v4.0.5 · Qualixar · AGPL-3.0-or-later*
241
+ *SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later*
@@ -173,4 +173,4 @@ to review the impact. See `slm-remember` for the full deletion discipline.
173
173
 
174
174
  ---
175
175
 
176
- *SuperLocalMemory v4.0.5 · Qualixar · AGPL-3.0-or-later*
176
+ *SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later*
@@ -227,4 +227,4 @@ explicitly and call `recall` with `include_global`/`include_shared` after
227
227
 
228
228
  ---
229
229
 
230
- *SuperLocalMemory v4.0.5 · Qualixar · AGPL-3.0-or-later*
230
+ *SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later*
@@ -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.5 · Qualixar · AGPL-3.0-or-later
166
+ SuperLocalMemory v4.0.8 · 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.4 · Qualixar · AGPL-3.0-or-later
132
+ SuperLocalMemory v4.0.8 · Qualixar · AGPL-3.0-or-later
package/pyproject.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "superlocalmemory"
3
- version = "4.0.6"
3
+ version = "4.0.8"
4
4
  description = "Local-first agent memory with auditable hybrid retrieval"
5
5
  readme = "README.md"
6
6
  license = "AGPL-3.0-or-later"
@@ -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.6"
35
+ __version__ = "4.0.8"
36
36
 
37
37
  _REQUIRED_VERSIONS = {
38
38
  "sentence_transformers": "5.3.0",
@@ -282,6 +282,12 @@ def _cmd_gdpr_dispatch(args: Namespace) -> None:
282
282
  cmd_gdpr(args)
283
283
 
284
284
 
285
+ def _cmd_summary_dispatch(args: Namespace) -> None:
286
+ """V4.0.7: readable session/day/project summaries (issue #113)."""
287
+ from superlocalmemory.cli.summary_cmd import cmd_summary
288
+ cmd_summary(args)
289
+
290
+
285
291
  # ---- end SLM v3.6 Optimize dispatch functions ----
286
292
 
287
293
 
@@ -414,6 +420,7 @@ def dispatch(args: Namespace) -> None:
414
420
  "ops": _cmd_ops,
415
421
  # V4.0.6: GDPR subject-rights CLI (Art.15/17/20)
416
422
  "gdpr": _cmd_gdpr_dispatch,
423
+ "summary": _cmd_summary_dispatch,
417
424
  }
418
425
  handler = handlers.get(args.command)
419
426
  if handler:
@@ -2215,6 +2222,13 @@ _COMMAND_GROUPS: list[tuple[str, list[tuple[str, str]]]] = [
2215
2222
  ("forget", "Run the decay cycle (preview first)"),
2216
2223
  ("trace", "Recall with a per-channel score breakdown"),
2217
2224
  ("ingest", "Ingest external observations / documents"),
2225
+ ("summary", "Readable summaries: session, day, or project"),
2226
+ ]),
2227
+ ("Privacy & compliance", [
2228
+ # gdpr shipped in 4.0.6 but was never listed here, so `slm help` did not
2229
+ # mention it at all. The drift test caught it; the omission is the thing
2230
+ # that test exists to prevent.
2231
+ ("gdpr", "Subject rights: status, export, erase, verify"),
2218
2232
  ]),
2219
2233
  ("Run SLM (daemon & dashboard)", [
2220
2234
  ("serve", "Start/stop the background daemon"),
@@ -90,6 +90,9 @@ _NO_DAEMON_COMMANDS = {
90
90
  "serve", "restart",
91
91
  # V4.0.6: GDPR CLI accesses the DB directly; no daemon required.
92
92
  "gdpr",
93
+ # V4.0.7: summaries read memory.db directly and are extractive by default,
94
+ # so they need neither the daemon nor a language model.
95
+ "summary",
93
96
  }
94
97
 
95
98
 
@@ -968,6 +971,12 @@ def main() -> None:
968
971
  _sp.add_argument("--json", action="store_true",
969
972
  help="Output structured JSON (agent-native)")
970
973
 
974
+ # V4.0.7: the readable summary layer from issue #113. The generators shipped
975
+ # in 4.0.6 with no caller; this is the surface that makes them reachable.
976
+ from superlocalmemory.cli.summary_cmd import register_summary_parser
977
+
978
+ register_summary_parser(sub)
979
+
971
980
  # Wave-3 / V4.0.6: GDPR subject-rights CLI (Art.15/17/20)
972
981
  gdpr_p = sub.add_parser(
973
982
  "gdpr",