superlocalmemory 4.1.9 → 4.1.12

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 (60) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +43 -0
  3. package/README.md +15 -4
  4. package/package.json +1 -1
  5. package/plugin/.claude-plugin/plugin.json +1 -1
  6. package/plugin/CLAUDE.md +3 -3
  7. package/plugin/agents/slm-governance-advisor.md +1 -1
  8. package/plugin/agents/slm-loop-runner.md +1 -1
  9. package/plugin/agents/slm-memory-advisor.md +1 -1
  10. package/plugin/agents/slm-optimize-advisor.md +1 -1
  11. package/plugin/requirements.txt +1 -1
  12. package/plugin/skills/slm-cache/SKILL.md +1 -1
  13. package/plugin/skills/slm-compress/SKILL.md +1 -1
  14. package/plugin/skills/slm-governance/SKILL.md +1 -1
  15. package/plugin/skills/slm-graph/SKILL.md +1 -1
  16. package/plugin/skills/slm-loop/SKILL.md +1 -1
  17. package/plugin/skills/slm-mesh/SKILL.md +1 -1
  18. package/plugin/skills/slm-profile/SKILL.md +1 -1
  19. package/plugin/skills/slm-recall/SKILL.md +1 -1
  20. package/plugin/skills/slm-remember/SKILL.md +1 -1
  21. package/plugin/skills/slm-scope/SKILL.md +1 -1
  22. package/plugin/skills/slm-session/SKILL.md +1 -1
  23. package/plugin/skills/slm-status/SKILL.md +1 -1
  24. package/plugin-src/agents/slm-memory-advisor.md +1 -1
  25. package/plugin-src/agents/slm-optimize-advisor.md +1 -1
  26. package/plugin-src/rules/AGENTS.md +1 -1
  27. package/plugin-src/skills/slm-cache/SKILL.md +1 -1
  28. package/plugin-src/skills/slm-compress/SKILL.md +1 -1
  29. package/plugin-src/skills/slm-governance/SKILL.md +1 -1
  30. package/plugin-src/skills/slm-graph/SKILL.md +1 -1
  31. package/plugin-src/skills/slm-loop/SKILL.md +1 -1
  32. package/plugin-src/skills/slm-mesh/SKILL.md +1 -1
  33. package/plugin-src/skills/slm-profile/SKILL.md +1 -1
  34. package/plugin-src/skills/slm-recall/SKILL.md +1 -1
  35. package/plugin-src/skills/slm-remember/SKILL.md +1 -1
  36. package/plugin-src/skills/slm-scope/SKILL.md +1 -1
  37. package/plugin-src/skills/slm-session/SKILL.md +1 -1
  38. package/plugin-src/skills/slm-status/SKILL.md +1 -1
  39. package/pyproject.toml +1 -1
  40. package/src/superlocalmemory/__init__.py +1 -1
  41. package/src/superlocalmemory/cli/daemon.py +18 -0
  42. package/src/superlocalmemory/integrations/bounded_loops_mcp.py +229 -0
  43. package/src/superlocalmemory/learning/database.py +2 -1
  44. package/src/superlocalmemory/loops/__init__.py +2 -0
  45. package/src/superlocalmemory/loops/ledger.py +35 -0
  46. package/src/superlocalmemory/mcp/_daemon_proxy.py +27 -8
  47. package/src/superlocalmemory/mcp/server.py +6 -1
  48. package/src/superlocalmemory/mcp/tools_active.py +20 -5
  49. package/src/superlocalmemory/mcp/tools_brain.py +38 -1
  50. package/src/superlocalmemory/mcp/tools_learning.py +123 -4
  51. package/src/superlocalmemory/mcp/tools_loops.py +51 -17
  52. package/src/superlocalmemory/server/unified_daemon.py +17 -0
  53. package/src/superlocalmemory/storage/_migration_internals.py +2 -0
  54. package/src/superlocalmemory/storage/_schema_version.py +2 -2
  55. package/src/superlocalmemory/storage/agent_experience.py +38 -4
  56. package/src/superlocalmemory/storage/execution_learning.py +285 -0
  57. package/src/superlocalmemory/storage/migration_runner.py +3 -0
  58. package/src/superlocalmemory/storage/migrations/M050_execution_learning_v2.py +70 -0
  59. package/src/superlocalmemory/storage/migrations/__init__.py +2 -0
  60. package/src/superlocalmemory/ui/index.html +2 -2
@@ -21,7 +21,7 @@
21
21
  "license": "AGPL-3.0-or-later",
22
22
  "name": "superlocalmemory",
23
23
  "source": "./plugin",
24
- "version": "4.1.9"
24
+ "version": "4.1.12"
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.9"
42
+ "version": "4.1.12"
43
43
  }
44
44
  ]
45
45
  }
package/CHANGELOG.md CHANGED
@@ -5,6 +5,49 @@ 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.12] — Native Hermes lifecycle and verified execution learning
9
+
10
+ ### Added
11
+
12
+ - **Native Hermes plugin.** The release ships 12 namespaced SLM skills, four
13
+ real Hermes child-agent roles, the complete SLM command router and generated
14
+ aliases, and lifecycle hooks that preserve one exact Hermes session across
15
+ recall, tool telemetry, optional turn capture, outcome settlement, reset,
16
+ and finalization. It installs additively from the immutable GitHub release
17
+ commit; it never replaces Hermes's memory provider, model, configuration, or
18
+ existing hooks.
19
+ - **Explicit host session identity.** `session_init`, `observe`, and
20
+ `log_tool_event` now accept additive host session/agent identifiers, and
21
+ `settle_session_outcomes` settles only one exact session's pending outcomes.
22
+ Concurrent Hermes conversations cannot share attribution.
23
+ - **`bounded-loops.dev/slm-bridge/v2`.** V2 is negotiated beside unchanged
24
+ observation-only v1. It stores validated, bounded execution receipts and
25
+ derives reversible execution-reliability learning only; it never writes
26
+ semantic user memory or preferences from a gate result.
27
+
28
+ ### Fixed
29
+
30
+ - Profile erasure and global learning reset now remove bridge-v2 receipts and
31
+ derived events. V2 evidence validation rejects demonstrations, cancellations,
32
+ malformed digests, unknown nested fields, and oversized payloads before any
33
+ data is persisted.
34
+
35
+ ## [4.1.11] — MCP loops use the owned runtime
36
+
37
+ ### Fixed
38
+ - MCP bounded loops now route both recall gates and ledger writes through the
39
+ daemon, and normalize ledger tags at the HTTP boundary.
40
+
41
+ ## [4.1.10] — MCP loops use the owned writer
42
+
43
+ ### Fixed
44
+ - MCP bounded loops now persist their ledger through the daemon/worker writer
45
+ instead of calling a write method on the intentionally LIGHT MCP engine, and
46
+ reject stale cross-profile writes rather than misplacing audit records.
47
+ - The benchmark bundle now runs experiments 12 and 13; the emergency-recall
48
+ fixture no longer expires as the calendar advances, and trial totals reflect
49
+ every executed ablation round.
50
+
8
51
  ## [4.1.9] — Silence is not a verdict
9
52
 
10
53
  ### Fixed
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  </picture>
6
6
  </p>
7
7
 
8
- <h1 align="center">SuperLocalMemory V4.1.9</h1>
8
+ <h1 align="center">SuperLocalMemory V4.1.12</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.1.9</code> — one control plane: <strong>SLM-Mesh</strong> peer coordination · multi-scope memory (personal / shared / global) · profiles · Cache · Compress · 7-layer retrieval · code graph · Entity Explorer · skill evolution · Modes A/B/C · GDPR retention &amp; audit chain · bounded loops — across CLI, MCP, dashboard, the <strong>Claude plugin</strong>, the <strong>Codex add-on</strong>, and documented IDE integrations.<br/>
30
+ <p align="center"><code>v4.1.12</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.1.9-Current_Release-2ea44f?style=for-the-badge&logo=checkmarx&logoColor=white" alt="v4.1.9 — Current Release"/></a>
35
+ <a href="CHANGELOG.md"><img src="https://img.shields.io/badge/v4.1.12-Current_Release-2ea44f?style=for-the-badge&logo=checkmarx&logoColor=white" alt="v4.1.12 — 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>
@@ -463,7 +463,7 @@ The plugin is how most people should install SLM. It brings the MCP server, the
463
463
  skills, the sub-agents, the slash commands and the hooks in one step, and keeps
464
464
  them at the same version as the package.
465
465
 
466
- **Four surfaces, one source.** Everything below is generated from `plugin-src/`,
466
+ **Five surfaces, one source.** Everything below is generated from `plugin-src/`,
467
467
  so no surface can quietly fall behind another:
468
468
 
469
469
  | Editor | Install | Skills | Agents | Commands | Hooks |
@@ -472,6 +472,7 @@ so no surface can quietly fall behind another:
472
472
  | **Codex** | copy `codex-plugin/` into your Codex plugins directory | 12 | 4 | 1 | yes |
473
473
  | **VS Code / Copilot** | copy `copilot-plugin/.github/` into your repository | 12 | 4 | as prompts | yes |
474
474
  | **Antigravity** | copy `antigravity-plugin/` into your plugins directory | 12 | 4 | 1 | yes |
475
+ | **Hermes** | install the native plugin from the immutable release commit | 12 | 4 | all SLM commands | yes |
475
476
 
476
477
  ### What you get
477
478
 
@@ -484,6 +485,16 @@ so no surface can quietly fall behind another:
484
485
  - **Hooks** — session start and end, so context loads and commits without being
485
486
  asked.
486
487
 
488
+ ### Hermes
489
+
490
+ Hermes users get the same SLM skills and advisor roles through a native
491
+ `plugin.yaml` package, plus `/slm <command>` and generated `/slm-<command>`
492
+ aliases for the public CLI surface. The plugin is intentionally separate from
493
+ the PyPI/npm runtime: install the owning SLM runtime first, then install the
494
+ reviewed pinned pack from the `v4.1.12` GitHub release. It is additive and does
495
+ not replace Hermes's selected memory provider or existing configuration. See
496
+ [the Hermes integration guide](docs/hermes.md).
497
+
487
498
  ### Keeping it current
488
499
 
489
500
  `pipx upgrade superlocalmemory` upgrades the **package**. It does not
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "superlocalmemory",
3
- "version": "4.1.9",
3
+ "version": "4.1.12",
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.1.9"
18
+ "version": "4.1.12"
19
19
  }
package/plugin/CLAUDE.md CHANGED
@@ -1,4 +1,4 @@
1
- <!-- BEGIN SuperLocalMemory v4.1.9 -->
1
+ <!-- BEGIN SuperLocalMemory v4.1.12 -->
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.1.9 -->
42
+ <!-- END SuperLocalMemory v4.1.12 -->
43
43
 
44
- SuperLocalMemory v4.1.9 · Qualixar · AGPL-3.0-or-later
44
+ SuperLocalMemory v4.1.12 · 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.9 · Qualixar · AGPL-3.0-or-later
80
+ SuperLocalMemory v4.1.12 · 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.1.9 · Qualixar · AGPL-3.0-or-later
71
+ SuperLocalMemory v4.1.12 · 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.1.9 · Qualixar · AGPL-3.0-or-later
49
+ SuperLocalMemory v4.1.12 · 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.9 · Qualixar · AGPL-3.0-or-later
44
+ SuperLocalMemory v4.1.12 · Qualixar · AGPL-3.0-or-later
@@ -1 +1 @@
1
- superlocalmemory==4.1.9
1
+ superlocalmemory==4.1.12
@@ -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.1.9 · Qualixar · AGPL-3.0-or-later
148
+ SuperLocalMemory v4.1.12 · 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.1.9 · Qualixar · AGPL-3.0-or-later
150
+ SuperLocalMemory v4.1.12 · 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.1.9 · Qualixar · AGPL-3.0-or-later*
248
+ *SuperLocalMemory v4.1.12 · 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.1.9 · Qualixar · AGPL-3.0-or-later
315
+ SuperLocalMemory v4.1.12 · 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.1.9 · Qualixar · AGPL-3.0-or-later
99
+ SuperLocalMemory v4.1.12 · Qualixar · AGPL-3.0-or-later
@@ -279,4 +279,4 @@ mesh availability.
279
279
 
280
280
  ---
281
281
 
282
- *SuperLocalMemory v4.1.9 · Qualixar · AGPL-3.0-or-later*
282
+ *SuperLocalMemory v4.1.12 · 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.1.9 · Qualixar · AGPL-3.0-or-later*
149
+ *SuperLocalMemory v4.1.12 · Qualixar · AGPL-3.0-or-later*
@@ -323,4 +323,4 @@ before recalling, then switch back. See `slm-profile` for workspace switching.
323
323
 
324
324
  ---
325
325
 
326
- *SuperLocalMemory v4.1.9 · Qualixar · AGPL-3.0-or-later*
326
+ *SuperLocalMemory v4.1.12 · Qualixar · AGPL-3.0-or-later*
@@ -270,4 +270,4 @@ different workspace, use `switch_profile` first. See `slm-profile`.
270
270
 
271
271
  ---
272
272
 
273
- *SuperLocalMemory v4.1.9 · Qualixar · AGPL-3.0-or-later*
273
+ *SuperLocalMemory v4.1.12 · 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.1.9 · Qualixar · AGPL-3.0-or-later*
176
+ *SuperLocalMemory v4.1.12 · Qualixar · AGPL-3.0-or-later*
@@ -253,4 +253,4 @@ explicitly and call `recall` with `include_global`/`include_shared` after
253
253
 
254
254
  ---
255
255
 
256
- *SuperLocalMemory v4.1.9 · Qualixar · AGPL-3.0-or-later*
256
+ *SuperLocalMemory v4.1.12 · 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.1.9 · Qualixar · AGPL-3.0-or-later
166
+ SuperLocalMemory v4.1.12 · 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.1.9 · Qualixar · AGPL-3.0-or-later
49
+ SuperLocalMemory v4.1.12 · 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.9 · Qualixar · AGPL-3.0-or-later
44
+ SuperLocalMemory v4.1.12 · Qualixar · AGPL-3.0-or-later
@@ -137,4 +137,4 @@ When the SLM MCP server is unavailable, use these CLI equivalents:
137
137
  - **slm-optimize-advisor** — context compression and KV cache
138
138
  - **slm-governance-advisor** — scope/role compliance, retention policies, GDPR
139
139
 
140
- SuperLocalMemory v4.1.9 · Qualixar · AGPL-3.0-or-later
140
+ SuperLocalMemory v4.1.12 · Qualixar · AGPL-3.0-or-later
@@ -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.1.9 · Qualixar · AGPL-3.0-or-later
148
+ SuperLocalMemory v4.1.12 · 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.1.9 · Qualixar · AGPL-3.0-or-later
150
+ SuperLocalMemory v4.1.12 · 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.1.9 · Qualixar · AGPL-3.0-or-later*
248
+ *SuperLocalMemory v4.1.12 · 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.1.9 · Qualixar · AGPL-3.0-or-later
315
+ SuperLocalMemory v4.1.12 · 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.1.9 · Qualixar · AGPL-3.0-or-later
99
+ SuperLocalMemory v4.1.12 · Qualixar · AGPL-3.0-or-later
@@ -279,4 +279,4 @@ mesh availability.
279
279
 
280
280
  ---
281
281
 
282
- *SuperLocalMemory v4.1.9 · Qualixar · AGPL-3.0-or-later*
282
+ *SuperLocalMemory v4.1.12 · 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.1.9 · Qualixar · AGPL-3.0-or-later*
149
+ *SuperLocalMemory v4.1.12 · Qualixar · AGPL-3.0-or-later*
@@ -323,4 +323,4 @@ before recalling, then switch back. See `slm-profile` for workspace switching.
323
323
 
324
324
  ---
325
325
 
326
- *SuperLocalMemory v4.1.9 · Qualixar · AGPL-3.0-or-later*
326
+ *SuperLocalMemory v4.1.12 · Qualixar · AGPL-3.0-or-later*
@@ -270,4 +270,4 @@ different workspace, use `switch_profile` first. See `slm-profile`.
270
270
 
271
271
  ---
272
272
 
273
- *SuperLocalMemory v4.1.9 · Qualixar · AGPL-3.0-or-later*
273
+ *SuperLocalMemory v4.1.12 · 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.1.9 · Qualixar · AGPL-3.0-or-later*
176
+ *SuperLocalMemory v4.1.12 · Qualixar · AGPL-3.0-or-later*
@@ -253,4 +253,4 @@ explicitly and call `recall` with `include_global`/`include_shared` after
253
253
 
254
254
  ---
255
255
 
256
- *SuperLocalMemory v4.1.9 · Qualixar · AGPL-3.0-or-later*
256
+ *SuperLocalMemory v4.1.12 · 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.1.9 · Qualixar · AGPL-3.0-or-later
166
+ SuperLocalMemory v4.1.12 · Qualixar · AGPL-3.0-or-later
package/pyproject.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "superlocalmemory"
3
- version = "4.1.9"
3
+ version = "4.1.12"
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.1.9"
35
+ __version__ = "4.1.12"
36
36
 
37
37
  _REQUIRED_VERSIONS = {
38
38
  "sentence_transformers": "5.3.0",
@@ -364,6 +364,14 @@ class DaemonRefused(RuntimeError):
364
364
  )
365
365
 
366
366
 
367
+ class DaemonConflict(RuntimeError):
368
+ """A deterministic daemon conflict that the caller must resolve."""
369
+
370
+ def __init__(self, detail: str) -> None:
371
+ self.detail = detail or "daemon request conflicted with current state"
372
+ super().__init__(self.detail)
373
+
374
+
367
375
  def daemon_request(
368
376
  method: str,
369
377
  path: str,
@@ -373,6 +381,7 @@ def daemon_request(
373
381
  expected_descriptor=_EXPECTED_DESCRIPTOR_UNSET,
374
382
  expected_legacy: dict | None = None,
375
383
  verify_health: bool = True,
384
+ preserve_conflict: bool = False,
376
385
  ) -> dict | None:
377
386
  """Send a request only after validating the owned daemon identity.
378
387
 
@@ -463,6 +472,15 @@ def daemon_request(
463
472
  # locally as the machine owner.
464
473
  if exc.code in (401, 403):
465
474
  raise DaemonRefused(exc.code, path) from exc
475
+ if exc.code == 409 and preserve_conflict:
476
+ detail = "daemon request conflicted with current state"
477
+ try:
478
+ payload = json.loads(exc.read().decode())
479
+ if isinstance(payload, dict) and payload.get("detail"):
480
+ detail = str(payload["detail"])
481
+ except Exception:
482
+ pass
483
+ raise DaemonConflict(detail) from exc
466
484
  return None
467
485
  except Exception:
468
486
  return None