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.
- package/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +43 -0
- package/README.md +15 -4
- package/package.json +1 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/CLAUDE.md +3 -3
- package/plugin/agents/slm-governance-advisor.md +1 -1
- package/plugin/agents/slm-loop-runner.md +1 -1
- package/plugin/agents/slm-memory-advisor.md +1 -1
- package/plugin/agents/slm-optimize-advisor.md +1 -1
- package/plugin/requirements.txt +1 -1
- package/plugin/skills/slm-cache/SKILL.md +1 -1
- package/plugin/skills/slm-compress/SKILL.md +1 -1
- package/plugin/skills/slm-governance/SKILL.md +1 -1
- package/plugin/skills/slm-graph/SKILL.md +1 -1
- package/plugin/skills/slm-loop/SKILL.md +1 -1
- package/plugin/skills/slm-mesh/SKILL.md +1 -1
- package/plugin/skills/slm-profile/SKILL.md +1 -1
- package/plugin/skills/slm-recall/SKILL.md +1 -1
- package/plugin/skills/slm-remember/SKILL.md +1 -1
- package/plugin/skills/slm-scope/SKILL.md +1 -1
- package/plugin/skills/slm-session/SKILL.md +1 -1
- package/plugin/skills/slm-status/SKILL.md +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 +1 -1
- package/plugin-src/skills/slm-cache/SKILL.md +1 -1
- package/plugin-src/skills/slm-compress/SKILL.md +1 -1
- package/plugin-src/skills/slm-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 +1 -1
- 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/pyproject.toml +1 -1
- package/src/superlocalmemory/__init__.py +1 -1
- package/src/superlocalmemory/cli/daemon.py +18 -0
- package/src/superlocalmemory/integrations/bounded_loops_mcp.py +229 -0
- package/src/superlocalmemory/learning/database.py +2 -1
- package/src/superlocalmemory/loops/__init__.py +2 -0
- package/src/superlocalmemory/loops/ledger.py +35 -0
- package/src/superlocalmemory/mcp/_daemon_proxy.py +27 -8
- package/src/superlocalmemory/mcp/server.py +6 -1
- package/src/superlocalmemory/mcp/tools_active.py +20 -5
- package/src/superlocalmemory/mcp/tools_brain.py +38 -1
- package/src/superlocalmemory/mcp/tools_learning.py +123 -4
- package/src/superlocalmemory/mcp/tools_loops.py +51 -17
- package/src/superlocalmemory/server/unified_daemon.py +17 -0
- package/src/superlocalmemory/storage/_migration_internals.py +2 -0
- package/src/superlocalmemory/storage/_schema_version.py +2 -2
- package/src/superlocalmemory/storage/agent_experience.py +38 -4
- package/src/superlocalmemory/storage/execution_learning.py +285 -0
- package/src/superlocalmemory/storage/migration_runner.py +3 -0
- package/src/superlocalmemory/storage/migrations/M050_execution_learning_v2.py +70 -0
- package/src/superlocalmemory/storage/migrations/__init__.py +2 -0
- 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.
|
|
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.
|
|
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.
|
|
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.
|
|
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 & audit chain · bounded loops — across CLI, MCP, dashboard, the <strong>Claude plugin</strong>, the <strong>Codex add-on</strong>, and documented IDE integrations.<br/>
|
|
31
31
|
Proxy: <code>slm wrap claude</code> · MCP: add <code>slm_compress</code> to your config · Skill: zero-config</p>
|
|
32
32
|
<p align="center"><strong>Four public arXiv preprints</strong> · V4: <a href="https://arxiv.org/abs/2608.08253">arXiv:2608.08253</a> · companion archive: <a href="https://zenodo.org/records/21853302">Zenodo 21853302</a> (<a href="https://doi.org/10.5281/zenodo.21853302">DOI 10.5281/zenodo.21853302</a>) · prior preprints: <a href="https://arxiv.org/abs/2603.02240">2603.02240</a> · <a href="https://arxiv.org/abs/2603.14588">2603.14588</a> · <a href="https://arxiv.org/abs/2604.04514">2604.04514</a>.</p>
|
|
33
33
|
|
|
34
34
|
<p align="center">
|
|
35
|
-
<a href="CHANGELOG.md"><img src="https://img.shields.io/badge/v4.1.
|
|
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
|
-
**
|
|
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
package/plugin/CLAUDE.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- BEGIN SuperLocalMemory v4.1.
|
|
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.
|
|
42
|
+
<!-- END SuperLocalMemory v4.1.12 -->
|
|
43
43
|
|
|
44
|
-
SuperLocalMemory v4.1.
|
|
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.
|
|
80
|
+
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.
|
|
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.
|
|
44
|
+
SuperLocalMemory v4.1.12 · Qualixar · AGPL-3.0-or-later
|
package/plugin/requirements.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
superlocalmemory==4.1.
|
|
1
|
+
superlocalmemory==4.1.12
|
|
@@ -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.
|
|
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.
|
|
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.
|
|
140
|
+
SuperLocalMemory v4.1.12 · Qualixar · AGPL-3.0-or-later
|
package/pyproject.toml
CHANGED
|
@@ -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.
|
|
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
|