diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 7d8b1dab7..90019fb18 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -21,7 +21,7 @@ "license": "AGPL-3.0-or-later", "name": "superlocalmemory", "source": "./plugin", - "version": "4.2.11" + "version": "4.2.12" }, { "author": { @@ -39,7 +39,7 @@ "license": "AGPL-3.0-or-later", "name": "superlocalmemory-codex", "source": "./codex-plugin", - "version": "4.2.11" + "version": "4.2.12" } ] } diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index be0853195..a06ba807b 100644 --- a/.cursor-plugin/marketplace.json +++ b/.cursor-plugin/marketplace.json @@ -23,7 +23,7 @@ "name": "superlocalmemory", "repository": "https://github.com/qualixar/superlocalmemory", "source": "./cursor-plugin", - "version": "4.2.11" + "version": "4.2.12" } ] } diff --git a/.github/plugin/marketplace.json b/.github/plugin/marketplace.json index 4dff50a50..4b17c34fa 100644 --- a/.github/plugin/marketplace.json +++ b/.github/plugin/marketplace.json @@ -9,7 +9,7 @@ "name": "superlocalmemory", "source": "./vscode-agent-plugin", "description": "SuperLocalMemory for VS Code agents: local-first agent memory, SLM-Mesh, skills and sub-agents, served by the `slm mcp` you installed.", - "version": "4.2.11", + "version": "4.2.12", "license": "AGPL-3.0-or-later", "homepage": "https://superlocalmemory.com", "keywords": [ diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e9021738..6a71407dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,43 @@ All notable changes to SuperLocalMemory will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [4.2.12] — Large stores answer, purges finish, the mode says where data goes + +Fixes for six reports filed after 4.2.11. No migration and no command to run. + +### Fixed + +- **A slow recall answers instead of saying busy** (#304). On a store of 37,000 + memories every explicit recall ran past its time limit and came back as HTTP + 503 "ask again in 2 seconds", on an idle daemon, and every retry did the same. + A recall that runs out of time now answers with keyword matches, labelled + `degraded_lexical` and unchecked. "Busy" is kept for when every slot really is + taken, the one case where asking again helps. +- **Recall does a third of the vector work** (#304). Three search channels ran + the same nearest-neighbour search at the same moment on every recall. They + now share one, and the channel phase stops waiting before the caller gives up. +- **A purge finishes after fast note changes** (#297). Editing or deleting a + note while its save was still being enriched made that save fail three times + with "queryable fact profile mismatch or missing fact", and + `sources remove --purge` refused until the retries ran out. Such a save now + settles at once and puts nothing back. +- **A custom embedding endpoint keeps the model you chose** (#302). In Modes A + and B a blank model name was filled with the local model's id and width, which + an endpoint like Ollama's does not serve, so every embedding call failed. + Saving such an endpoint without a model name or width is now refused with a + message saying what to fill in. +- **Modes A and B say when data leaves this computer** (#303). A remote + embedding endpoint, or a hosted language model in Mode B, was accepted while + the mode still reported local-only. The dashboard card, the mode status, the + configuration warnings and the EU AI Act check now follow the configuration. +- **Every MCP tool has a title and all four behaviour hints** (#300), as the + Claude and ChatGPT directories require. `slm_cache_set` no longer claims to be + read-only. +- **The web sign-in tells identical connections apart** (#301). After + reinstalls the connection picker listed several identical entries. Each now + shows a short ID and its expiry, and an opt-in box removes the older ones for + that profile and app. Patch by @DannyGi82. + ## [4.2.11] — Removed notes stay removed, the graph copy stays in step, edits are recalled Three fixes for things that looked done but were not. Upgrading runs one diff --git a/CITATION.cff b/CITATION.cff index 0f6ce77a4..3cc6c0945 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -6,7 +6,7 @@ authors: - family-names: "Bhardwaj" given-names: "Varun Pratap" orcid: "https://orcid.org/0009-0002-8726-4289" -version: "4.2.11" +version: "4.2.12" # RELEASE-DAY PLACEHOLDER: the date below is carried over from 4.1.24 and is not the # publish date. On release day edit it by hand to the publish date (YYYY-MM-DD); # scripts/bump_version.py leaves any valid past date alone. It must stay a real ISO diff --git a/antigravity-plugin/_GENERATED.md b/antigravity-plugin/_GENERATED.md index 3d259c613..1989048dd 100644 --- a/antigravity-plugin/_GENERATED.md +++ b/antigravity-plugin/_GENERATED.md @@ -2,7 +2,7 @@ Built by `scripts/build-antigravity-plugin.mjs` from `plugin-src/`. Version stamped from `plugin-src/manifest.json`. -Version: **4.2.11** +Version: **4.2.12** Do not edit by hand — regenerate instead. diff --git a/antigravity-plugin/agents/slm-governance-advisor.md b/antigravity-plugin/agents/slm-governance-advisor.md index 9732a15fd..f2f0ab4ee 100644 --- a/antigravity-plugin/agents/slm-governance-advisor.md +++ b/antigravity-plugin/agents/slm-governance-advisor.md @@ -81,4 +81,4 @@ slm-scope · slm-governance · slm-profile · slm-remember · slm-recall · slm- # What NOT to do Never session_init twice; never forget without dry-run preview; never run `slm gdpr erase --yes` unasked; never store secrets; never bypass role checks; never claim an erasure succeeded without verifying via recall. -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/antigravity-plugin/agents/slm-loop-runner.md b/antigravity-plugin/agents/slm-loop-runner.md index cdf12f3de..e8289080d 100644 --- a/antigravity-plugin/agents/slm-loop-runner.md +++ b/antigravity-plugin/agents/slm-loop-runner.md @@ -79,4 +79,4 @@ assessment. The gate is the authority. --- -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/antigravity-plugin/agents/slm-memory-advisor.md b/antigravity-plugin/agents/slm-memory-advisor.md index 55f4feeae..4d3bdbd37 100644 --- a/antigravity-plugin/agents/slm-memory-advisor.md +++ b/antigravity-plugin/agents/slm-memory-advisor.md @@ -51,4 +51,4 @@ slm-recall · slm-remember · slm-session · slm-scope · slm-profile · slm-gov # What NOT to do Never session_init twice; never forget dry_run=False without reporting preview; never switch the active profile unasked; 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. -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/antigravity-plugin/agents/slm-optimize-advisor.md b/antigravity-plugin/agents/slm-optimize-advisor.md index 22c9bb016..30fb00d8e 100644 --- a/antigravity-plugin/agents/slm-optimize-advisor.md +++ b/antigravity-plugin/agents/slm-optimize-advisor.md @@ -41,4 +41,4 @@ slm-compress · slm-cache · slm-status · slm-profile # What NOT to do 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 hand a ccr_id to another agent. -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/antigravity-plugin/plugin.json b/antigravity-plugin/plugin.json index 11449ab40..6ded1e4d2 100644 --- a/antigravity-plugin/plugin.json +++ b/antigravity-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "superlocalmemory", - "version": "4.2.11", + "version": "4.2.12", "description": "Local-first agent memory with auditable hybrid retrieval. Remember decisions and recall them by asking, entirely on your machine.", "author": { "name": "Qualixar", diff --git a/antigravity-plugin/skills/slm-bot-memory/SKILL.md b/antigravity-plugin/skills/slm-bot-memory/SKILL.md index 855edf856..f1adefcae 100644 --- a/antigravity-plugin/skills/slm-bot-memory/SKILL.md +++ b/antigravity-plugin/skills/slm-bot-memory/SKILL.md @@ -178,4 +178,4 @@ store every local bot on that computer can reach. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/antigravity-plugin/skills/slm-cache/SKILL.md b/antigravity-plugin/skills/slm-cache/SKILL.md index ccd2341a3..7ee8110e3 100644 --- a/antigravity-plugin/skills/slm-cache/SKILL.md +++ b/antigravity-plugin/skills/slm-cache/SKILL.md @@ -144,4 +144,4 @@ These subcommands control daemon-level cache settings and bulk removal. They do --- -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/antigravity-plugin/skills/slm-compress/SKILL.md b/antigravity-plugin/skills/slm-compress/SKILL.md index 9a0125d22..f1dc967fb 100644 --- a/antigravity-plugin/skills/slm-compress/SKILL.md +++ b/antigravity-plugin/skills/slm-compress/SKILL.md @@ -147,4 +147,4 @@ Content over 1 MB (1 000 000 bytes UTF-8) is processed but `reversible` is force --- -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/antigravity-plugin/skills/slm-getting-started-bot/SKILL.md b/antigravity-plugin/skills/slm-getting-started-bot/SKILL.md index b17643db4..87e5ca222 100644 --- a/antigravity-plugin/skills/slm-getting-started-bot/SKILL.md +++ b/antigravity-plugin/skills/slm-getting-started-bot/SKILL.md @@ -194,4 +194,4 @@ quality on a shared box. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/antigravity-plugin/skills/slm-governance/SKILL.md b/antigravity-plugin/skills/slm-governance/SKILL.md index 81983a8cc..f95404130 100644 --- a/antigravity-plugin/skills/slm-governance/SKILL.md +++ b/antigravity-plugin/skills/slm-governance/SKILL.md @@ -276,4 +276,4 @@ Before running any destructive or state-changing operation (`forget`, --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/antigravity-plugin/skills/slm-graph/SKILL.md b/antigravity-plugin/skills/slm-graph/SKILL.md index 686748f14..8b498a17a 100644 --- a/antigravity-plugin/skills/slm-graph/SKILL.md +++ b/antigravity-plugin/skills/slm-graph/SKILL.md @@ -318,4 +318,4 @@ All are host-only: a remote caller cannot use them. --- -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/antigravity-plugin/skills/slm-loop/SKILL.md b/antigravity-plugin/skills/slm-loop/SKILL.md index 83f4184dd..fac86c23b 100644 --- a/antigravity-plugin/skills/slm-loop/SKILL.md +++ b/antigravity-plugin/skills/slm-loop/SKILL.md @@ -171,4 +171,4 @@ Guides: `docs/skill-evolution.md`, `docs/bounded-loops-bridge.md`. --- -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/antigravity-plugin/skills/slm-media/SKILL.md b/antigravity-plugin/skills/slm-media/SKILL.md index 39de532f4..0d78d0b71 100644 --- a/antigravity-plugin/skills/slm-media/SKILL.md +++ b/antigravity-plugin/skills/slm-media/SKILL.md @@ -337,4 +337,4 @@ minutes (previous vectors are kept) and let them decide. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/antigravity-plugin/skills/slm-mesh/SKILL.md b/antigravity-plugin/skills/slm-mesh/SKILL.md index bd2cc7ccc..24ef1b924 100644 --- a/antigravity-plugin/skills/slm-mesh/SKILL.md +++ b/antigravity-plugin/skills/slm-mesh/SKILL.md @@ -386,4 +386,4 @@ mesh availability. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/antigravity-plugin/skills/slm-profile/SKILL.md b/antigravity-plugin/skills/slm-profile/SKILL.md index d7607b511..2c86bdcd4 100644 --- a/antigravity-plugin/skills/slm-profile/SKILL.md +++ b/antigravity-plugin/skills/slm-profile/SKILL.md @@ -164,4 +164,4 @@ anything but `core` or `mesh`. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/antigravity-plugin/skills/slm-recall/SKILL.md b/antigravity-plugin/skills/slm-recall/SKILL.md index 963153c3d..691b9e1f3 100644 --- a/antigravity-plugin/skills/slm-recall/SKILL.md +++ b/antigravity-plugin/skills/slm-recall/SKILL.md @@ -515,4 +515,4 @@ See `slm-profile`. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/antigravity-plugin/skills/slm-remember/SKILL.md b/antigravity-plugin/skills/slm-remember/SKILL.md index 4aa786cc5..2e449a2e9 100644 --- a/antigravity-plugin/skills/slm-remember/SKILL.md +++ b/antigravity-plugin/skills/slm-remember/SKILL.md @@ -372,4 +372,4 @@ sessions on this machine, so use it only when the user asks to move. See --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/antigravity-plugin/skills/slm-scope/SKILL.md b/antigravity-plugin/skills/slm-scope/SKILL.md index 100d516fd..c49d0d4c3 100644 --- a/antigravity-plugin/skills/slm-scope/SKILL.md +++ b/antigravity-plugin/skills/slm-scope/SKILL.md @@ -180,4 +180,4 @@ to review the impact. See `slm-remember` for the full deletion discipline. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/antigravity-plugin/skills/slm-session/SKILL.md b/antigravity-plugin/skills/slm-session/SKILL.md index 4aaf73138..2daed26e2 100644 --- a/antigravity-plugin/skills/slm-session/SKILL.md +++ b/antigravity-plugin/skills/slm-session/SKILL.md @@ -288,4 +288,4 @@ answered. To also surface shared or global facts, call `recall` with --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/antigravity-plugin/skills/slm-status/SKILL.md b/antigravity-plugin/skills/slm-status/SKILL.md index 8a1c60d43..fb6b93f6b 100644 --- a/antigravity-plugin/skills/slm-status/SKILL.md +++ b/antigravity-plugin/skills/slm-status/SKILL.md @@ -228,4 +228,4 @@ the memory-engine upgrade is pending. --- -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/codex-plugin/.claude-plugin/plugin.json b/codex-plugin/.claude-plugin/plugin.json index ad370fd0d..0fac87236 100644 --- a/codex-plugin/.claude-plugin/plugin.json +++ b/codex-plugin/.claude-plugin/plugin.json @@ -15,5 +15,5 @@ "mcpServers": "./.mcp.json", "name": "superlocalmemory-codex", "repository": "https://github.com/qualixar/superlocalmemory", - "version": "4.2.11" + "version": "4.2.12" } diff --git a/codex-plugin/.codex-plugin/plugin.json b/codex-plugin/.codex-plugin/plugin.json index d439918b5..f56e5fbeb 100644 --- a/codex-plugin/.codex-plugin/plugin.json +++ b/codex-plugin/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "superlocalmemory-codex", - "version": "4.2.11", + "version": "4.2.12", "description": "Local-first agent memory with auditable hybrid retrieval. Remember decisions and recall them by asking, entirely on your machine.", "author": { "name": "Qualixar", diff --git a/codex-plugin/AGENTS.md b/codex-plugin/AGENTS.md index e6049e6ba..668c44029 100644 --- a/codex-plugin/AGENTS.md +++ b/codex-plugin/AGENTS.md @@ -187,4 +187,4 @@ Using this memory from a web assistant or another computer: see the slm-web-acce - **slm-governance-advisor** — scope/role compliance, retention and lifecycle, GDPR - **slm-loop-runner** — bounded, gate-verified loops (the `/slm-loop` command delegates to it) -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/codex-plugin/README.md b/codex-plugin/README.md index 45f978da0..c99c42c1d 100644 --- a/codex-plugin/README.md +++ b/codex-plugin/README.md @@ -2,7 +2,7 @@ Local-first agent memory + reversible context compression for OpenAI Codex CLI. -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later --- @@ -204,4 +204,4 @@ root (not inside a subdirectory), then restart Codex. --- -SuperLocalMemory v4.2.11 · Qualixar · https://github.com/qualixar/superlocalmemory +SuperLocalMemory v4.2.12 · Qualixar · https://github.com/qualixar/superlocalmemory diff --git a/codex-plugin/_GENERATED.md b/codex-plugin/_GENERATED.md index 6596271ff..97bb49834 100644 --- a/codex-plugin/_GENERATED.md +++ b/codex-plugin/_GENERATED.md @@ -2,7 +2,7 @@ Built by `scripts/build-codex-plugin.mjs` from the single source in `plugin-src/`. Version stamped from `plugin-src/manifest.json`. -Version: **4.2.11** +Version: **4.2.12** ## Derived — do not edit by hand diff --git a/codex-plugin/agents/slm-governance-advisor.md b/codex-plugin/agents/slm-governance-advisor.md index 9732a15fd..f2f0ab4ee 100644 --- a/codex-plugin/agents/slm-governance-advisor.md +++ b/codex-plugin/agents/slm-governance-advisor.md @@ -81,4 +81,4 @@ slm-scope · slm-governance · slm-profile · slm-remember · slm-recall · slm- # What NOT to do Never session_init twice; never forget without dry-run preview; never run `slm gdpr erase --yes` unasked; never store secrets; never bypass role checks; never claim an erasure succeeded without verifying via recall. -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/codex-plugin/agents/slm-loop-runner.md b/codex-plugin/agents/slm-loop-runner.md index cdf12f3de..e8289080d 100644 --- a/codex-plugin/agents/slm-loop-runner.md +++ b/codex-plugin/agents/slm-loop-runner.md @@ -79,4 +79,4 @@ assessment. The gate is the authority. --- -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/codex-plugin/agents/slm-memory-advisor.md b/codex-plugin/agents/slm-memory-advisor.md index 55f4feeae..4d3bdbd37 100644 --- a/codex-plugin/agents/slm-memory-advisor.md +++ b/codex-plugin/agents/slm-memory-advisor.md @@ -51,4 +51,4 @@ slm-recall · slm-remember · slm-session · slm-scope · slm-profile · slm-gov # What NOT to do Never session_init twice; never forget dry_run=False without reporting preview; never switch the active profile unasked; 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. -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/codex-plugin/agents/slm-optimize-advisor.md b/codex-plugin/agents/slm-optimize-advisor.md index 22c9bb016..30fb00d8e 100644 --- a/codex-plugin/agents/slm-optimize-advisor.md +++ b/codex-plugin/agents/slm-optimize-advisor.md @@ -41,4 +41,4 @@ slm-compress · slm-cache · slm-status · slm-profile # What NOT to do 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 hand a ccr_id to another agent. -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/codex-plugin/skills/slm-bot-memory/SKILL.md b/codex-plugin/skills/slm-bot-memory/SKILL.md index 855edf856..f1adefcae 100644 --- a/codex-plugin/skills/slm-bot-memory/SKILL.md +++ b/codex-plugin/skills/slm-bot-memory/SKILL.md @@ -178,4 +178,4 @@ store every local bot on that computer can reach. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/codex-plugin/skills/slm-cache/SKILL.md b/codex-plugin/skills/slm-cache/SKILL.md index ccd2341a3..7ee8110e3 100644 --- a/codex-plugin/skills/slm-cache/SKILL.md +++ b/codex-plugin/skills/slm-cache/SKILL.md @@ -144,4 +144,4 @@ These subcommands control daemon-level cache settings and bulk removal. They do --- -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/codex-plugin/skills/slm-compress/SKILL.md b/codex-plugin/skills/slm-compress/SKILL.md index 9a0125d22..f1dc967fb 100644 --- a/codex-plugin/skills/slm-compress/SKILL.md +++ b/codex-plugin/skills/slm-compress/SKILL.md @@ -147,4 +147,4 @@ Content over 1 MB (1 000 000 bytes UTF-8) is processed but `reversible` is force --- -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/codex-plugin/skills/slm-getting-started-bot/SKILL.md b/codex-plugin/skills/slm-getting-started-bot/SKILL.md index b17643db4..87e5ca222 100644 --- a/codex-plugin/skills/slm-getting-started-bot/SKILL.md +++ b/codex-plugin/skills/slm-getting-started-bot/SKILL.md @@ -194,4 +194,4 @@ quality on a shared box. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/codex-plugin/skills/slm-governance/SKILL.md b/codex-plugin/skills/slm-governance/SKILL.md index 81983a8cc..f95404130 100644 --- a/codex-plugin/skills/slm-governance/SKILL.md +++ b/codex-plugin/skills/slm-governance/SKILL.md @@ -276,4 +276,4 @@ Before running any destructive or state-changing operation (`forget`, --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/codex-plugin/skills/slm-graph/SKILL.md b/codex-plugin/skills/slm-graph/SKILL.md index 686748f14..8b498a17a 100644 --- a/codex-plugin/skills/slm-graph/SKILL.md +++ b/codex-plugin/skills/slm-graph/SKILL.md @@ -318,4 +318,4 @@ All are host-only: a remote caller cannot use them. --- -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/codex-plugin/skills/slm-loop/SKILL.md b/codex-plugin/skills/slm-loop/SKILL.md index 83f4184dd..fac86c23b 100644 --- a/codex-plugin/skills/slm-loop/SKILL.md +++ b/codex-plugin/skills/slm-loop/SKILL.md @@ -171,4 +171,4 @@ Guides: `docs/skill-evolution.md`, `docs/bounded-loops-bridge.md`. --- -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/codex-plugin/skills/slm-media/SKILL.md b/codex-plugin/skills/slm-media/SKILL.md index 39de532f4..0d78d0b71 100644 --- a/codex-plugin/skills/slm-media/SKILL.md +++ b/codex-plugin/skills/slm-media/SKILL.md @@ -337,4 +337,4 @@ minutes (previous vectors are kept) and let them decide. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/codex-plugin/skills/slm-mesh/SKILL.md b/codex-plugin/skills/slm-mesh/SKILL.md index bd2cc7ccc..24ef1b924 100644 --- a/codex-plugin/skills/slm-mesh/SKILL.md +++ b/codex-plugin/skills/slm-mesh/SKILL.md @@ -386,4 +386,4 @@ mesh availability. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/codex-plugin/skills/slm-profile/SKILL.md b/codex-plugin/skills/slm-profile/SKILL.md index d7607b511..2c86bdcd4 100644 --- a/codex-plugin/skills/slm-profile/SKILL.md +++ b/codex-plugin/skills/slm-profile/SKILL.md @@ -164,4 +164,4 @@ anything but `core` or `mesh`. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/codex-plugin/skills/slm-recall/SKILL.md b/codex-plugin/skills/slm-recall/SKILL.md index 963153c3d..691b9e1f3 100644 --- a/codex-plugin/skills/slm-recall/SKILL.md +++ b/codex-plugin/skills/slm-recall/SKILL.md @@ -515,4 +515,4 @@ See `slm-profile`. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/codex-plugin/skills/slm-remember/SKILL.md b/codex-plugin/skills/slm-remember/SKILL.md index 4aa786cc5..2e449a2e9 100644 --- a/codex-plugin/skills/slm-remember/SKILL.md +++ b/codex-plugin/skills/slm-remember/SKILL.md @@ -372,4 +372,4 @@ sessions on this machine, so use it only when the user asks to move. See --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/codex-plugin/skills/slm-scope/SKILL.md b/codex-plugin/skills/slm-scope/SKILL.md index 100d516fd..c49d0d4c3 100644 --- a/codex-plugin/skills/slm-scope/SKILL.md +++ b/codex-plugin/skills/slm-scope/SKILL.md @@ -180,4 +180,4 @@ to review the impact. See `slm-remember` for the full deletion discipline. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/codex-plugin/skills/slm-session/SKILL.md b/codex-plugin/skills/slm-session/SKILL.md index 4aaf73138..2daed26e2 100644 --- a/codex-plugin/skills/slm-session/SKILL.md +++ b/codex-plugin/skills/slm-session/SKILL.md @@ -288,4 +288,4 @@ answered. To also surface shared or global facts, call `recall` with --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/codex-plugin/skills/slm-status/SKILL.md b/codex-plugin/skills/slm-status/SKILL.md index 8a1c60d43..fb6b93f6b 100644 --- a/codex-plugin/skills/slm-status/SKILL.md +++ b/codex-plugin/skills/slm-status/SKILL.md @@ -228,4 +228,4 @@ the memory-engine upgrade is pending. --- -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/copilot-plugin/.github/agents/slm-governance-advisor.agent.md b/copilot-plugin/.github/agents/slm-governance-advisor.agent.md index a3a499353..e57c84e81 100644 --- a/copilot-plugin/.github/agents/slm-governance-advisor.agent.md +++ b/copilot-plugin/.github/agents/slm-governance-advisor.agent.md @@ -9,7 +9,7 @@ description: > tools: recall, search, remember, update_memory, list_recent, Read, Bash model: inherit target: vscode -version: "4.2.11" +version: "4.2.12" --- # Role @@ -83,4 +83,4 @@ slm-scope · slm-governance · slm-profile · slm-remember · slm-recall · slm- # What NOT to do Never session_init twice; never forget without dry-run preview; never run `slm gdpr erase --yes` unasked; never store secrets; never bypass role checks; never claim an erasure succeeded without verifying via recall. -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/copilot-plugin/.github/agents/slm-loop-runner.agent.md b/copilot-plugin/.github/agents/slm-loop-runner.agent.md index 6b1a7c31b..9f2d80322 100644 --- a/copilot-plugin/.github/agents/slm-loop-runner.agent.md +++ b/copilot-plugin/.github/agents/slm-loop-runner.agent.md @@ -11,7 +11,7 @@ description: > tools: Bash, recall, remember, Read, slm_loop_run, slm_loop_history, slm_loop_show model: inherit target: vscode -version: "4.2.11" +version: "4.2.12" --- # Role @@ -81,4 +81,4 @@ assessment. The gate is the authority. --- -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/copilot-plugin/.github/agents/slm-memory-advisor.agent.md b/copilot-plugin/.github/agents/slm-memory-advisor.agent.md index a672c91a9..82ec94074 100644 --- a/copilot-plugin/.github/agents/slm-memory-advisor.agent.md +++ b/copilot-plugin/.github/agents/slm-memory-advisor.agent.md @@ -8,7 +8,7 @@ description: > tools: session_init, recall, search, remember, update_memory, forget, list_recent, Read model: inherit target: vscode -version: "4.2.11" +version: "4.2.12" --- # Role @@ -53,4 +53,4 @@ slm-recall · slm-remember · slm-session · slm-scope · slm-profile · slm-gov # What NOT to do Never session_init twice; never forget dry_run=False without reporting preview; never switch the active profile unasked; 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. -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/copilot-plugin/.github/agents/slm-optimize-advisor.agent.md b/copilot-plugin/.github/agents/slm-optimize-advisor.agent.md index f4a54d64d..18da34a1f 100644 --- a/copilot-plugin/.github/agents/slm-optimize-advisor.agent.md +++ b/copilot-plugin/.github/agents/slm-optimize-advisor.agent.md @@ -9,7 +9,7 @@ description: > tools: slm_compress, slm_retrieve, slm_cache_set, slm_cache_get, slm_optimize_stats, Read, Bash model: inherit target: vscode -version: "4.2.11" +version: "4.2.12" --- # Role @@ -43,4 +43,4 @@ slm-compress · slm-cache · slm-status · slm-profile # What NOT to do 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 hand a ccr_id to another agent. -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/copilot-plugin/.github/copilot-instructions.md b/copilot-plugin/.github/copilot-instructions.md index e8ef03f57..ba53680a3 100644 --- a/copilot-plugin/.github/copilot-instructions.md +++ b/copilot-plugin/.github/copilot-instructions.md @@ -1,7 +1,7 @@ - + - + ## SuperLocalMemory (SLM) — Agent Rules @@ -54,8 +54,8 @@ slm-recall · slm-remember · slm-session · slm-status · slm-cache · slm-comp ### Subagents slm-memory-advisor (memory decisions, session hygiene, scope/profile guidance) · slm-optimize-advisor (context compression + KV cache) · slm-governance-advisor (scope/roles/compliance/GDPR) · slm-loop-runner (bounded, gate-verified loops) - + -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/copilot-plugin/.github/prompts/slm-bot-memory.prompt.md b/copilot-plugin/.github/prompts/slm-bot-memory.prompt.md index adaaf5646..88d5c8615 100644 --- a/copilot-plugin/.github/prompts/slm-bot-memory.prompt.md +++ b/copilot-plugin/.github/prompts/slm-bot-memory.prompt.md @@ -1,7 +1,7 @@ --- name: slm-bot-memory description: Cross-bot memory on a shared computer (Grok Bot, Cursor plugin, any host where several agents share one machine). Explains agent_id attribution vs. profile/scope access, how to namespace by agent_id + profile + scope, and what must never be written to memory. Read this before the first remember/recall on a new Grok-Bot-style host. -version: "4.2.11" +version: "4.2.12" agent: agent tools: - remember @@ -177,4 +177,4 @@ store every local bot on that computer can reach. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/copilot-plugin/.github/prompts/slm-cache.prompt.md b/copilot-plugin/.github/prompts/slm-cache.prompt.md index 6c67daa07..5eda5e5b4 100644 --- a/copilot-plugin/.github/prompts/slm-cache.prompt.md +++ b/copilot-plugin/.github/prompts/slm-cache.prompt.md @@ -1,7 +1,7 @@ --- name: slm-cache description: KV cache for repeated reads — call slm_cache_get(key) first; on a miss do the expensive operation then slm_cache_set(key, value, ttl_seconds) to store it; on a hit use the returned value directly; always fail-open (hit:false on any error, never raises); saves tokens when the same file, query result, or tool output is read more than once in a session. -version: "4.2.11" +version: "4.2.12" agent: agent tools: - slm_cache_set @@ -148,4 +148,4 @@ These subcommands control daemon-level cache settings and bulk removal. They do --- -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/copilot-plugin/.github/prompts/slm-compress.prompt.md b/copilot-plugin/.github/prompts/slm-compress.prompt.md index d375bae5f..07d8b8065 100644 --- a/copilot-plugin/.github/prompts/slm-compress.prompt.md +++ b/copilot-plugin/.github/prompts/slm-compress.prompt.md @@ -1,7 +1,7 @@ --- name: slm-compress description: Compress large text, tool output, or transcripts to reduce context-window usage while keeping the full 1M window intact — call slm_compress(content, mode, reversible, ttl_seconds) to shrink content; if the result is lossy a ccr_id is returned so you can call slm_retrieve(ccr_id) later to recover the exact original; always fail-open (ok:false → continue with the original). -version: "4.2.11" +version: "4.2.12" agent: agent tools: - slm_compress @@ -151,4 +151,4 @@ Content over 1 MB (1 000 000 bytes UTF-8) is processed but `reversible` is force --- -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/copilot-plugin/.github/prompts/slm-getting-started-bot.prompt.md b/copilot-plugin/.github/prompts/slm-getting-started-bot.prompt.md index 58eed1db9..93c159fa9 100644 --- a/copilot-plugin/.github/prompts/slm-getting-started-bot.prompt.md +++ b/copilot-plugin/.github/prompts/slm-getting-started-bot.prompt.md @@ -1,7 +1,7 @@ --- name: slm-getting-started-bot description: First-session orientation for SuperLocalMemory on a headless bot host (Grok Bot, or any Cursor-format plugin install with no hooks, no dashboard, and no interactive setup wizard). What is different here vs. Claude Code/Codex, which 19 tools are actually available, and the first three calls to make. -version: "4.2.11" +version: "4.2.12" agent: agent tools: - session_init @@ -193,4 +193,4 @@ quality on a shared box. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/copilot-plugin/.github/prompts/slm-governance.prompt.md b/copilot-plugin/.github/prompts/slm-governance.prompt.md index b57af4658..3ba33bfa9 100644 --- a/copilot-plugin/.github/prompts/slm-governance.prompt.md +++ b/copilot-plugin/.github/prompts/slm-governance.prompt.md @@ -1,7 +1,7 @@ --- name: slm-governance description: Governed-workspace behavior for SuperLocalMemory. Covers roles (admin/member/viewer) and company mode, who administers a company-mode workspace (a signed-in admin, or `slm team` on the SLM computer), `slm token show` in strict mode, what remote web apps can never see or change, retention and lifecycle settings, the audit trail, GDPR export and erasure, and how agents must behave when operating under workspace governance. The audit and retention tools need the power MCP profile. Agents must never bypass governance controls. -version: "4.2.11" +version: "4.2.12" agent: agent tools: - audit_trail @@ -278,4 +278,4 @@ Before running any destructive or state-changing operation (`forget`, --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/copilot-plugin/.github/prompts/slm-graph.prompt.md b/copilot-plugin/.github/prompts/slm-graph.prompt.md index 99b3c8278..354ab7cde 100644 --- a/copilot-plugin/.github/prompts/slm-graph.prompt.md +++ b/copilot-plugin/.github/prompts/slm-graph.prompt.md @@ -1,7 +1,7 @@ --- name: slm-graph description: > -version: "4.2.11" +version: "4.2.12" agent: agent tools: - build_code_graph @@ -313,4 +313,4 @@ All are host-only: a remote caller cannot use them. --- -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/copilot-plugin/.github/prompts/slm-loop.prompt.md b/copilot-plugin/.github/prompts/slm-loop.prompt.md index d306c2646..6d12afcf6 100644 --- a/copilot-plugin/.github/prompts/slm-loop.prompt.md +++ b/copilot-plugin/.github/prompts/slm-loop.prompt.md @@ -1,7 +1,7 @@ --- name: slm-loop description: Gate-verified bounded loops with SuperLocalMemory as the durable ledger. Use when a task has a checkable acceptance condition and you must iterate until an INDEPENDENT gate passes — never stopping because the agent believes it is done. `slm_loop_run` (MCP) waits, under hard bounds, for an independently executed check registered by the operator to pass; `slm loop demo` shows the control flow keyless; `slm loop history` and `slm loop show ` (or `slm_loop_history` / `slm_loop_show`) inspect past runs, whose every lap is stored as queryable SLM memory (tag `loop:`). Terminal statuses are DONE / HALT / PAUSE / KILLED / ERROR — report them exactly, never converting HALT/PAUSE/ERROR into success. -version: "4.2.11" +version: "4.2.12" agent: agent tools: - slm_loop_run @@ -183,4 +183,4 @@ Guides: `docs/skill-evolution.md`, `docs/bounded-loops-bridge.md`. --- -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/copilot-plugin/.github/prompts/slm-media.prompt.md b/copilot-plugin/.github/prompts/slm-media.prompt.md index 1cd378379..9b9cf8653 100644 --- a/copilot-plugin/.github/prompts/slm-media.prompt.md +++ b/copilot-plugin/.github/prompts/slm-media.prompt.md @@ -1,7 +1,7 @@ --- name: slm-media description: Save pictures and PDFs in SuperLocalMemory and find them again by describing them. Covers when to save a picture or document, remember_media, remember_document, get_media, media_status and media_upload_link, how recall returns pictures and PDF pages, the limits, what stays private, turning the feature on with `slm media` (16 GB of memory needed), connecting folders with `slm sources`, and how web apps add files through one-time upload links. Off by default. -version: "4.2.11" +version: "4.2.12" agent: agent tools: - remember_media @@ -338,4 +338,4 @@ minutes (previous vectors are kept) and let them decide. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/copilot-plugin/.github/prompts/slm-mesh.prompt.md b/copilot-plugin/.github/prompts/slm-mesh.prompt.md index 98fd5fd6e..68f0b83a4 100644 --- a/copilot-plugin/.github/prompts/slm-mesh.prompt.md +++ b/copilot-plugin/.github/prompts/slm-mesh.prompt.md @@ -1,7 +1,7 @@ --- name: slm-mesh description: Cross-session peer coordination via the SLM mesh network. Lets multiple AI agent sessions on the same machine, and web apps the owner has allowed (ChatGPT, Claude on the web, Grok Bot, Muse, Composio), discover each other, send messages, wait for replies with mesh_wait, share lightweight state, and lock files to avoid conflicts. Covers the at-least-once delivery rule for web apps (pass ack_ids back as ack) and the two permissions a web app needs. Available in the default tool set and in the full, power and mesh MCP profiles. Only `slm mesh status` and `slm mesh peers` exist on the command line; the other tools are MCP-only. -version: "4.2.11" +version: "4.2.12" agent: agent tools: - mesh_summary @@ -387,4 +387,4 @@ mesh availability. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/copilot-plugin/.github/prompts/slm-profile.prompt.md b/copilot-plugin/.github/prompts/slm-profile.prompt.md index 3137182c9..dcb60c614 100644 --- a/copilot-plugin/.github/prompts/slm-profile.prompt.md +++ b/copilot-plugin/.github/prompts/slm-profile.prompt.md @@ -1,7 +1,7 @@ --- name: slm-profile description: Memory profiles (separate namespaces inside one SuperLocalMemory store) and MCP tool sets (which tools your host sees). Use switch_profile or slm profile switch to change the active memory profile, the profile_id argument to read or write another profile for one call, and `slm tools set ` to choose the tool set every connected app sees. Required when working across multiple projects, clients, or tenants. -version: "4.2.11" +version: "4.2.12" agent: agent tools: - switch_profile @@ -160,4 +160,4 @@ anything but `core` or `mesh`. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/copilot-plugin/.github/prompts/slm-recall.prompt.md b/copilot-plugin/.github/prompts/slm-recall.prompt.md index 62e336033..a560e4877 100644 --- a/copilot-plugin/.github/prompts/slm-recall.prompt.md +++ b/copilot-plugin/.github/prompts/slm-recall.prompt.md @@ -1,7 +1,7 @@ --- name: slm-recall description: Search and retrieve facts, decisions, and past context from SuperLocalMemory. Use when the user asks to recall, find, search, or "what did we decide/say about X". Triggers multi-channel semantic retrieval with reranking; always call before storing anything new. -version: "4.2.11" +version: "4.2.12" agent: agent tools: - recall @@ -520,4 +520,4 @@ See `slm-profile`. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/copilot-plugin/.github/prompts/slm-remember.prompt.md b/copilot-plugin/.github/prompts/slm-remember.prompt.md index 0557b113e..a772ae70c 100644 --- a/copilot-plugin/.github/prompts/slm-remember.prompt.md +++ b/copilot-plugin/.github/prompts/slm-remember.prompt.md @@ -1,7 +1,7 @@ --- name: slm-remember description: Capture durable facts, decisions, constraints, and gotchas into SuperLocalMemory. Use when the user says "remember that", "save this decision", "note this constraint", or when a session produces a conclusion worth persisting across sessions. Always recall first to avoid duplicates. -version: "4.2.11" +version: "4.2.12" agent: agent tools: - remember @@ -377,4 +377,4 @@ sessions on this machine, so use it only when the user asks to move. See --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/copilot-plugin/.github/prompts/slm-scope.prompt.md b/copilot-plugin/.github/prompts/slm-scope.prompt.md index e819cfcc0..f5604a6d3 100644 --- a/copilot-plugin/.github/prompts/slm-scope.prompt.md +++ b/copilot-plugin/.github/prompts/slm-scope.prompt.md @@ -1,7 +1,7 @@ --- name: slm-scope description: Controls memory visibility across profiles — personal (private, default), shared (selected profiles), or global (all profiles on this machine). Default is always personal. Only change scope when the user explicitly asks to share a memory across workspaces. Works with both remember (write scope) and recall (read scope flags). -version: "4.2.11" +version: "4.2.12" agent: agent tools: - remember @@ -180,4 +180,4 @@ to review the impact. See `slm-remember` for the full deletion discipline. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/copilot-plugin/.github/prompts/slm-session.prompt.md b/copilot-plugin/.github/prompts/slm-session.prompt.md index 4c41596fa..fac3b5656 100644 --- a/copilot-plugin/.github/prompts/slm-session.prompt.md +++ b/copilot-plugin/.github/prompts/slm-session.prompt.md @@ -1,7 +1,7 @@ --- name: slm-session description: Manage SuperLocalMemory session lifecycle — call session_init once at the start of every fresh session to load relevant project context and get a session_id; call close_session when work is meaningfully complete to commit temporal summaries. Correct lifecycle hygiene is what makes SLM's learning loop work. -version: "4.2.11" +version: "4.2.12" agent: agent tools: - session_init @@ -288,4 +288,4 @@ answered. To also surface shared or global facts, call `recall` with --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/copilot-plugin/.github/prompts/slm-status.prompt.md b/copilot-plugin/.github/prompts/slm-status.prompt.md index 8816b2951..9eb834363 100644 --- a/copilot-plugin/.github/prompts/slm-status.prompt.md +++ b/copilot-plugin/.github/prompts/slm-status.prompt.md @@ -1,7 +1,7 @@ --- name: slm-status description: Health and optimization stats for SuperLocalMemory — call slm_optimize_stats() for live compression and cache counters (compress_runs, tokens_saved_compress, cache_proxy_hits, cache_proxy_misses, cache_kv_hits, cache_kv_misses); run slm status [--json] for system state (mode, profile, DB size, fact/entity/edge counts) and slm doctor [--json] for preflight including the "Optimize (Surface B)" health line; use together to confirm optimization is actually saving tokens. -version: "4.2.11" +version: "4.2.12" agent: agent tools: - slm_optimize_stats @@ -233,4 +233,4 @@ the memory-engine upgrade is pending. --- -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/copilot-plugin/.github/prompts/slm-web-access.prompt.md b/copilot-plugin/.github/prompts/slm-web-access.prompt.md index 5a917994c..df525de88 100644 --- a/copilot-plugin/.github/prompts/slm-web-access.prompt.md +++ b/copilot-plugin/.github/prompts/slm-web-access.prompt.md @@ -1,7 +1,7 @@ --- name: slm-web-access description: Set up and troubleshoot SuperLocalMemory Web access, the optional link that lets web apps (ChatGPT, Claude on the web, Muse, Composio, other remote MCP clients) use the memory on this computer. Covers turning it on from the dashboard, adding and removing apps, read/save/session permissions, the second yes for bot messages and pictures (the Web access switches in Connected apps), one-time upload links for pictures and PDFs, what leaves the computer, renewal, the connection states, the errors a web app can see, and the copy-paste instructions for web agents. -version: "4.2.11" +version: "4.2.12" agent: agent tools: - get_status diff --git a/copilot-plugin/README.md b/copilot-plugin/README.md index d2c9da4a6..afa5edad3 100644 --- a/copilot-plugin/README.md +++ b/copilot-plugin/README.md @@ -1,4 +1,4 @@ -# SuperLocalMemory — GitHub Copilot plugin (v4.2.11) +# SuperLocalMemory — GitHub Copilot plugin (v4.2.12) Empowers GitHub Copilot (VS Code, Visual Studio, JetBrains, Eclipse, CLI) with SuperLocalMemory as its long-term brain — at parity with the Claude and Codex plugins. @@ -23,4 +23,4 @@ Then copy the add-ons from this folder's `.github/` into your project's `.github MCP works on every Copilot IDE at GA. Prompts, agents, and hooks are additive and degrade gracefully where an IDE does not yet support them (hooks are VS Code Preview as of 2026). SLM lifecycle also has an instruction-level fallback in `copilot-instructions.md`, so memory works even without hooks. -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/copilot-plugin/_GENERATED.md b/copilot-plugin/_GENERATED.md index 92425e670..0d882b50d 100644 --- a/copilot-plugin/_GENERATED.md +++ b/copilot-plugin/_GENERATED.md @@ -2,7 +2,7 @@ Built by `scripts/build-copilot-plugin.mjs` from the single source in `plugin-src/` (+ `ide/configs/vscode-copilot-mcp.json`, `plugin-src/rules/CLAUDE.md.fragment`). Version stamped from `plugin-src/manifest.json`. -Version: **4.2.11** +Version: **4.2.12** | Output | Source | |---|---| diff --git a/copilot-plugin/scripts/slm-launch b/copilot-plugin/scripts/slm-launch index 12c63592f..d8ce88634 100644 --- a/copilot-plugin/scripts/slm-launch +++ b/copilot-plugin/scripts/slm-launch @@ -99,7 +99,7 @@ _ensure_daemon() { # No installed slm and no plugin venv: run this release through uvx. Returns # only when it cannot (no uvx); otherwise it becomes the server. The version is # written in literally at build time (scripts/build-plugin.mjs replaces -# 4.2.11): Anthropic's plugin directory refuses a uvx launch whose pin +# 4.2.12): Anthropic's plugin directory refuses a uvx launch whose pin # it cannot read, and a pin computed at run time is one it cannot read. _slm_run_uvx() { command -v uvx >/dev/null 2>&1 || return 1 @@ -109,12 +109,12 @@ _slm_run_uvx() { fi # slm sets its own thread defaults (cli/main.py, mcp/server.py); this # launcher sets nothing else (guarded in tests/test_plugin). - echo "SLM plugin: no installed slm; running superlocalmemory==4.2.11 through uvx (downloaded once, then cached)." >&2 + echo "SLM plugin: no installed slm; running superlocalmemory==4.2.12 through uvx (downloaded once, then cached)." >&2 if [ "${_daemon_running}" -ne 1 ]; then - uvx --from "superlocalmemory==4.2.11" slm serve start >&2 || \ + uvx --from "superlocalmemory==4.2.12" slm serve start >&2 || \ echo "SLM plugin: daemon did not start; the MCP server will retry on first use." >&2 fi - exec uvx --from "superlocalmemory==4.2.11" slm mcp + exec uvx --from "superlocalmemory==4.2.12" slm mcp } # Opt-in: build the plugin venv now, with the same bootstrap SessionStart runs. diff --git a/cursor-plugin/.cursor-plugin/plugin.json b/cursor-plugin/.cursor-plugin/plugin.json index 5d50f7c76..68c2025d3 100644 --- a/cursor-plugin/.cursor-plugin/plugin.json +++ b/cursor-plugin/.cursor-plugin/plugin.json @@ -20,5 +20,5 @@ "name": "superlocalmemory", "repository": "https://github.com/qualixar/superlocalmemory", "skills": "./cursor-skills/", - "version": "4.2.11" + "version": "4.2.12" } diff --git a/cursor-plugin/cursor-skills/slm-bot-memory/SKILL.md b/cursor-plugin/cursor-skills/slm-bot-memory/SKILL.md index 855edf856..f1adefcae 100644 --- a/cursor-plugin/cursor-skills/slm-bot-memory/SKILL.md +++ b/cursor-plugin/cursor-skills/slm-bot-memory/SKILL.md @@ -178,4 +178,4 @@ store every local bot on that computer can reach. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/cursor-plugin/cursor-skills/slm-cache/SKILL.md b/cursor-plugin/cursor-skills/slm-cache/SKILL.md index ccd2341a3..7ee8110e3 100644 --- a/cursor-plugin/cursor-skills/slm-cache/SKILL.md +++ b/cursor-plugin/cursor-skills/slm-cache/SKILL.md @@ -144,4 +144,4 @@ These subcommands control daemon-level cache settings and bulk removal. They do --- -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/cursor-plugin/cursor-skills/slm-compress/SKILL.md b/cursor-plugin/cursor-skills/slm-compress/SKILL.md index 9a0125d22..f1dc967fb 100644 --- a/cursor-plugin/cursor-skills/slm-compress/SKILL.md +++ b/cursor-plugin/cursor-skills/slm-compress/SKILL.md @@ -147,4 +147,4 @@ Content over 1 MB (1 000 000 bytes UTF-8) is processed but `reversible` is force --- -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/cursor-plugin/cursor-skills/slm-getting-started-bot/SKILL.md b/cursor-plugin/cursor-skills/slm-getting-started-bot/SKILL.md index b17643db4..87e5ca222 100644 --- a/cursor-plugin/cursor-skills/slm-getting-started-bot/SKILL.md +++ b/cursor-plugin/cursor-skills/slm-getting-started-bot/SKILL.md @@ -194,4 +194,4 @@ quality on a shared box. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/cursor-plugin/cursor-skills/slm-governance/SKILL.md b/cursor-plugin/cursor-skills/slm-governance/SKILL.md index 81983a8cc..f95404130 100644 --- a/cursor-plugin/cursor-skills/slm-governance/SKILL.md +++ b/cursor-plugin/cursor-skills/slm-governance/SKILL.md @@ -276,4 +276,4 @@ Before running any destructive or state-changing operation (`forget`, --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/cursor-plugin/cursor-skills/slm-graph/SKILL.md b/cursor-plugin/cursor-skills/slm-graph/SKILL.md index 686748f14..8b498a17a 100644 --- a/cursor-plugin/cursor-skills/slm-graph/SKILL.md +++ b/cursor-plugin/cursor-skills/slm-graph/SKILL.md @@ -318,4 +318,4 @@ All are host-only: a remote caller cannot use them. --- -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/cursor-plugin/cursor-skills/slm-loop/SKILL.md b/cursor-plugin/cursor-skills/slm-loop/SKILL.md index 83f4184dd..fac86c23b 100644 --- a/cursor-plugin/cursor-skills/slm-loop/SKILL.md +++ b/cursor-plugin/cursor-skills/slm-loop/SKILL.md @@ -171,4 +171,4 @@ Guides: `docs/skill-evolution.md`, `docs/bounded-loops-bridge.md`. --- -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/cursor-plugin/cursor-skills/slm-media/SKILL.md b/cursor-plugin/cursor-skills/slm-media/SKILL.md index 39de532f4..0d78d0b71 100644 --- a/cursor-plugin/cursor-skills/slm-media/SKILL.md +++ b/cursor-plugin/cursor-skills/slm-media/SKILL.md @@ -337,4 +337,4 @@ minutes (previous vectors are kept) and let them decide. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/cursor-plugin/cursor-skills/slm-mesh/SKILL.md b/cursor-plugin/cursor-skills/slm-mesh/SKILL.md index bd2cc7ccc..24ef1b924 100644 --- a/cursor-plugin/cursor-skills/slm-mesh/SKILL.md +++ b/cursor-plugin/cursor-skills/slm-mesh/SKILL.md @@ -386,4 +386,4 @@ mesh availability. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/cursor-plugin/cursor-skills/slm-profile/SKILL.md b/cursor-plugin/cursor-skills/slm-profile/SKILL.md index d7607b511..2c86bdcd4 100644 --- a/cursor-plugin/cursor-skills/slm-profile/SKILL.md +++ b/cursor-plugin/cursor-skills/slm-profile/SKILL.md @@ -164,4 +164,4 @@ anything but `core` or `mesh`. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/cursor-plugin/cursor-skills/slm-recall/SKILL.md b/cursor-plugin/cursor-skills/slm-recall/SKILL.md index 963153c3d..691b9e1f3 100644 --- a/cursor-plugin/cursor-skills/slm-recall/SKILL.md +++ b/cursor-plugin/cursor-skills/slm-recall/SKILL.md @@ -515,4 +515,4 @@ See `slm-profile`. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/cursor-plugin/cursor-skills/slm-remember/SKILL.md b/cursor-plugin/cursor-skills/slm-remember/SKILL.md index 4aa786cc5..2e449a2e9 100644 --- a/cursor-plugin/cursor-skills/slm-remember/SKILL.md +++ b/cursor-plugin/cursor-skills/slm-remember/SKILL.md @@ -372,4 +372,4 @@ sessions on this machine, so use it only when the user asks to move. See --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/cursor-plugin/cursor-skills/slm-scope/SKILL.md b/cursor-plugin/cursor-skills/slm-scope/SKILL.md index 100d516fd..c49d0d4c3 100644 --- a/cursor-plugin/cursor-skills/slm-scope/SKILL.md +++ b/cursor-plugin/cursor-skills/slm-scope/SKILL.md @@ -180,4 +180,4 @@ to review the impact. See `slm-remember` for the full deletion discipline. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/cursor-plugin/cursor-skills/slm-session/SKILL.md b/cursor-plugin/cursor-skills/slm-session/SKILL.md index 4aaf73138..2daed26e2 100644 --- a/cursor-plugin/cursor-skills/slm-session/SKILL.md +++ b/cursor-plugin/cursor-skills/slm-session/SKILL.md @@ -288,4 +288,4 @@ answered. To also surface shared or global facts, call `recall` with --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/cursor-plugin/cursor-skills/slm-status/SKILL.md b/cursor-plugin/cursor-skills/slm-status/SKILL.md index 8a1c60d43..fb6b93f6b 100644 --- a/cursor-plugin/cursor-skills/slm-status/SKILL.md +++ b/cursor-plugin/cursor-skills/slm-status/SKILL.md @@ -228,4 +228,4 @@ the memory-engine upgrade is pending. --- -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/cursor-plugin/mcp.cursor.json b/cursor-plugin/mcp.cursor.json index 4d471dcba..e5760530e 100644 --- a/cursor-plugin/mcp.cursor.json +++ b/cursor-plugin/mcp.cursor.json @@ -3,7 +3,7 @@ "superlocalmemory": { "args": [ "--from", - "superlocalmemory==4.2.11", + "superlocalmemory==4.2.12", "slm", "mcp" ], diff --git a/docs/hermes.md b/docs/hermes.md index 1bffefc06..0125ca085 100644 --- a/docs/hermes.md +++ b/docs/hermes.md @@ -6,7 +6,7 @@ not a replacement for, Hermes's built-in memory provider and configuration. Install the owning runtime first: ```bash -python -m pip install --upgrade superlocalmemory==4.2.11 +python -m pip install --upgrade superlocalmemory==4.2.12 slm doctor ``` @@ -52,7 +52,7 @@ SHA=$(git ls-remote https://github.com/qualixar/superlocalmemory.git refs/tags/v hermes plugins install 'https://github.com/qualixar/superlocalmemory.git#hermes-plugin' --force --ref "$SHA" ``` -Replace `v4.2.11` with the release you run (`slm --version`). `hermes plugins +Replace `v4.2.12` with the release you run (`slm --version`). `hermes plugins update superlocalmemory` refuses a pinned plugin by design; `--force` with a new `--ref` is the supported way to move it. diff --git a/hermes-plugin/__init__.py b/hermes-plugin/__init__.py index ae8b004da..575c45047 100644 --- a/hermes-plugin/__init__.py +++ b/hermes-plugin/__init__.py @@ -64,7 +64,7 @@ def _has_high_impact_flag(command: str, argv: list[str]) -> bool: } _MAX_TEXT = 8_000 # Stamped by scripts/build-hermes-plugin.mjs from pyproject.toml at build time. -_RELEASE_SLM_VERSION = (4, 2, 11) +_RELEASE_SLM_VERSION = (4, 2, 12) _SECRET_PATTERNS = ( re.compile(r"\bsk-[A-Za-z0-9_-]{12,}\b"), re.compile(r"\b(?:AKIA|ASIA)[A-Z0-9]{16}\b"), diff --git a/hermes-plugin/agents/slm-governance-advisor.md b/hermes-plugin/agents/slm-governance-advisor.md index 9732a15fd..f2f0ab4ee 100644 --- a/hermes-plugin/agents/slm-governance-advisor.md +++ b/hermes-plugin/agents/slm-governance-advisor.md @@ -81,4 +81,4 @@ slm-scope · slm-governance · slm-profile · slm-remember · slm-recall · slm- # What NOT to do Never session_init twice; never forget without dry-run preview; never run `slm gdpr erase --yes` unasked; never store secrets; never bypass role checks; never claim an erasure succeeded without verifying via recall. -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/hermes-plugin/agents/slm-loop-runner.md b/hermes-plugin/agents/slm-loop-runner.md index cdf12f3de..e8289080d 100644 --- a/hermes-plugin/agents/slm-loop-runner.md +++ b/hermes-plugin/agents/slm-loop-runner.md @@ -79,4 +79,4 @@ assessment. The gate is the authority. --- -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/hermes-plugin/agents/slm-memory-advisor.md b/hermes-plugin/agents/slm-memory-advisor.md index 55f4feeae..4d3bdbd37 100644 --- a/hermes-plugin/agents/slm-memory-advisor.md +++ b/hermes-plugin/agents/slm-memory-advisor.md @@ -51,4 +51,4 @@ slm-recall · slm-remember · slm-session · slm-scope · slm-profile · slm-gov # What NOT to do Never session_init twice; never forget dry_run=False without reporting preview; never switch the active profile unasked; 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. -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/hermes-plugin/agents/slm-optimize-advisor.md b/hermes-plugin/agents/slm-optimize-advisor.md index 22c9bb016..30fb00d8e 100644 --- a/hermes-plugin/agents/slm-optimize-advisor.md +++ b/hermes-plugin/agents/slm-optimize-advisor.md @@ -41,4 +41,4 @@ slm-compress · slm-cache · slm-status · slm-profile # What NOT to do 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 hand a ccr_id to another agent. -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/hermes-plugin/plugin.yaml b/hermes-plugin/plugin.yaml index 8a0993d71..830101372 100644 --- a/hermes-plugin/plugin.yaml +++ b/hermes-plugin/plugin.yaml @@ -1,5 +1,5 @@ name: superlocalmemory -version: 4.2.11 +version: 4.2.12 description: "Native, additive SuperLocalMemory lifecycle, skills, commands, and advisors for Hermes." author: Qualixar manifest_version: 1 diff --git a/hermes-plugin/skills/slm-bot-memory/SKILL.md b/hermes-plugin/skills/slm-bot-memory/SKILL.md index 855edf856..f1adefcae 100644 --- a/hermes-plugin/skills/slm-bot-memory/SKILL.md +++ b/hermes-plugin/skills/slm-bot-memory/SKILL.md @@ -178,4 +178,4 @@ store every local bot on that computer can reach. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/hermes-plugin/skills/slm-cache/SKILL.md b/hermes-plugin/skills/slm-cache/SKILL.md index ccd2341a3..7ee8110e3 100644 --- a/hermes-plugin/skills/slm-cache/SKILL.md +++ b/hermes-plugin/skills/slm-cache/SKILL.md @@ -144,4 +144,4 @@ These subcommands control daemon-level cache settings and bulk removal. They do --- -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/hermes-plugin/skills/slm-compress/SKILL.md b/hermes-plugin/skills/slm-compress/SKILL.md index 9a0125d22..f1dc967fb 100644 --- a/hermes-plugin/skills/slm-compress/SKILL.md +++ b/hermes-plugin/skills/slm-compress/SKILL.md @@ -147,4 +147,4 @@ Content over 1 MB (1 000 000 bytes UTF-8) is processed but `reversible` is force --- -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/hermes-plugin/skills/slm-getting-started-bot/SKILL.md b/hermes-plugin/skills/slm-getting-started-bot/SKILL.md index b17643db4..87e5ca222 100644 --- a/hermes-plugin/skills/slm-getting-started-bot/SKILL.md +++ b/hermes-plugin/skills/slm-getting-started-bot/SKILL.md @@ -194,4 +194,4 @@ quality on a shared box. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/hermes-plugin/skills/slm-governance/SKILL.md b/hermes-plugin/skills/slm-governance/SKILL.md index 81983a8cc..f95404130 100644 --- a/hermes-plugin/skills/slm-governance/SKILL.md +++ b/hermes-plugin/skills/slm-governance/SKILL.md @@ -276,4 +276,4 @@ Before running any destructive or state-changing operation (`forget`, --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/hermes-plugin/skills/slm-graph/SKILL.md b/hermes-plugin/skills/slm-graph/SKILL.md index 686748f14..8b498a17a 100644 --- a/hermes-plugin/skills/slm-graph/SKILL.md +++ b/hermes-plugin/skills/slm-graph/SKILL.md @@ -318,4 +318,4 @@ All are host-only: a remote caller cannot use them. --- -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/hermes-plugin/skills/slm-loop/SKILL.md b/hermes-plugin/skills/slm-loop/SKILL.md index 83f4184dd..fac86c23b 100644 --- a/hermes-plugin/skills/slm-loop/SKILL.md +++ b/hermes-plugin/skills/slm-loop/SKILL.md @@ -171,4 +171,4 @@ Guides: `docs/skill-evolution.md`, `docs/bounded-loops-bridge.md`. --- -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/hermes-plugin/skills/slm-media/SKILL.md b/hermes-plugin/skills/slm-media/SKILL.md index 39de532f4..0d78d0b71 100644 --- a/hermes-plugin/skills/slm-media/SKILL.md +++ b/hermes-plugin/skills/slm-media/SKILL.md @@ -337,4 +337,4 @@ minutes (previous vectors are kept) and let them decide. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/hermes-plugin/skills/slm-mesh/SKILL.md b/hermes-plugin/skills/slm-mesh/SKILL.md index bd2cc7ccc..24ef1b924 100644 --- a/hermes-plugin/skills/slm-mesh/SKILL.md +++ b/hermes-plugin/skills/slm-mesh/SKILL.md @@ -386,4 +386,4 @@ mesh availability. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/hermes-plugin/skills/slm-profile/SKILL.md b/hermes-plugin/skills/slm-profile/SKILL.md index d7607b511..2c86bdcd4 100644 --- a/hermes-plugin/skills/slm-profile/SKILL.md +++ b/hermes-plugin/skills/slm-profile/SKILL.md @@ -164,4 +164,4 @@ anything but `core` or `mesh`. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/hermes-plugin/skills/slm-recall/SKILL.md b/hermes-plugin/skills/slm-recall/SKILL.md index 963153c3d..691b9e1f3 100644 --- a/hermes-plugin/skills/slm-recall/SKILL.md +++ b/hermes-plugin/skills/slm-recall/SKILL.md @@ -515,4 +515,4 @@ See `slm-profile`. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/hermes-plugin/skills/slm-remember/SKILL.md b/hermes-plugin/skills/slm-remember/SKILL.md index 4aa786cc5..2e449a2e9 100644 --- a/hermes-plugin/skills/slm-remember/SKILL.md +++ b/hermes-plugin/skills/slm-remember/SKILL.md @@ -372,4 +372,4 @@ sessions on this machine, so use it only when the user asks to move. See --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/hermes-plugin/skills/slm-scope/SKILL.md b/hermes-plugin/skills/slm-scope/SKILL.md index 100d516fd..c49d0d4c3 100644 --- a/hermes-plugin/skills/slm-scope/SKILL.md +++ b/hermes-plugin/skills/slm-scope/SKILL.md @@ -180,4 +180,4 @@ to review the impact. See `slm-remember` for the full deletion discipline. --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/hermes-plugin/skills/slm-session/SKILL.md b/hermes-plugin/skills/slm-session/SKILL.md index 4aaf73138..2daed26e2 100644 --- a/hermes-plugin/skills/slm-session/SKILL.md +++ b/hermes-plugin/skills/slm-session/SKILL.md @@ -288,4 +288,4 @@ answered. To also surface shared or global facts, call `recall` with --- -*SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later* +*SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later* diff --git a/hermes-plugin/skills/slm-status/SKILL.md b/hermes-plugin/skills/slm-status/SKILL.md index 8a1c60d43..fb6b93f6b 100644 --- a/hermes-plugin/skills/slm-status/SKILL.md +++ b/hermes-plugin/skills/slm-status/SKILL.md @@ -228,4 +228,4 @@ the memory-engine upgrade is pending. --- -SuperLocalMemory v4.2.11 · Qualixar · AGPL-3.0-or-later +SuperLocalMemory v4.2.12 · Qualixar · AGPL-3.0-or-later diff --git a/integrations/remote-gateway/src/owner-selection.ts b/integrations/remote-gateway/src/owner-selection.ts new file mode 100644 index 000000000..74d1546be --- /dev/null +++ b/integrations/remote-gateway/src/owner-selection.ts @@ -0,0 +1,24 @@ +/** GitHub-account-scoped SLM connection picker, with explicit owner cleanup. */ +type Connection = { + connectionId:string; profileId:string; host:string; deviceExpiresAtMs:number; +}; +const htmlEscape=(value:string):string=>value.replaceAll('&','&').replaceAll('<','<') + .replaceAll('>','>').replaceAll('"','"').replaceAll("'",'''); + +export function renderConnectionSelector( + connections:readonly Connection[],handle:string,scopes:readonly string[] +):string { + const ordered=[...connections].sort((a,b)=>b.deviceExpiresAtMs-a.deviceExpiresAtMs); + const options=ordered.map(c=>{ + const expiry=Number.isFinite(c.deviceExpiresAtMs)? + new Date(c.deviceExpiresAtMs).toISOString().slice(0,16).replace('T',' '):'unknown'; + const label=c.profileId+' ('+c.host+') — ID '+c.connectionId.slice(0,8)+' — expires '+expiry+' UTC'; + return ''; + }).join(''); + const cleanup=ordered.length>1? + '':''; + return '

Choose your SLM connection

GitHub sign-in is complete. Select the local profile this application may use. The ID distinguishes otherwise identical connections; verify the current one in your local SLM dashboard.

'+ + '
'+ + cleanup+'
'+ + '
Approved permissions

'+scopes.map(htmlEscape).join(', ')+'

'; +} diff --git a/integrations/remote-gateway/src/prune-owner-connections.ts b/integrations/remote-gateway/src/prune-owner-connections.ts new file mode 100644 index 000000000..33142ef44 --- /dev/null +++ b/integrations/remote-gateway/src/prune-owner-connections.ts @@ -0,0 +1,45 @@ +/** + * Account-owner cleanup initiated by explicit consent on the GitHub-authenticated + * OAuth selection page. This helper is never exposed as an unauthenticated API. + */ +import type {OwnedConnection,OwnerIndexDO} from './owner-index-do.ts'; + +interface OwnerCleanupEnv { + REGISTRIES: {getByName(id:string):{revokeConnection(ownerId:string,generation:number):Promise}}; + DEVICES: {getByName(id:string):{revoke(ownerId:string):Promise}}; + RELAYS: {getByName(id:string):{revoke():Promise}}; +} +type OwnerOps=Pick; + +/** + * Preserve selected current connection and any other host/profile pair. The + * caller is responsible for verifying OAuth owner identity, CSRF and explicit + * opt-in before entering this function. + */ +export async function pruneOtherOwnerConnections({owner,ownerId,selectedId,env}:{ + owner:OwnerOps;ownerId:string;selectedId:string;env:OwnerCleanupEnv; +}):Promise{ + if(!/^[a-f0-9]{32}$/.test(selectedId))throw new Error('invalid_selected_connection'); + const selected=await owner.getConnection(ownerId,selectedId); + if(!selected||selected.revokedAt!==null)throw new Error('selected_connection_unavailable'); + const all=await owner.list(ownerId); + const obsolete=all.filter(row=>row.connectionId!==selectedId&&row.revokedAt===null&& + row.profileId===selected.profileId&&row.host===selected.host); + const revoked:string[]=[]; + for(const row of obsolete){ + // The owner Directory is authoritative: changes between listing and + // revocation are fenced via its current generation. + const live=await owner.getConnection(ownerId,row.connectionId); + if(!live||live.revokedAt!==null||live.profileId!==selected.profileId|| + live.host!==selected.host)continue; + await owner.cancelConnection(ownerId,live.connectionId); + const generation=await owner.revoke(ownerId,live.connectionId,live.generation); + await env.REGISTRIES.getByName(live.connectionId).revokeConnection(ownerId,1); + // A device the kept connection still uses is never revoked with the old one. + if(live.deviceDigest!==selected.deviceDigest)await env.DEVICES.getByName(live.deviceDigest).revoke(ownerId); + await env.RELAYS.getByName(live.connectionId).revoke(); + await owner.markCleanup(ownerId,live.connectionId,generation); + revoked.push(live.connectionId); + } + return revoked; +} diff --git a/integrations/remote-gateway/src/worker-auth.ts b/integrations/remote-gateway/src/worker-auth.ts index e1fcd85a6..d4fd496a0 100644 --- a/integrations/remote-gateway/src/worker-auth.ts +++ b/integrations/remote-gateway/src/worker-auth.ts @@ -14,6 +14,8 @@ import {tokenHash} from './device-proof.ts'; import type {BootstrapBinding} from './bootstrap-do.ts'; import type {AuthProps,Scope} from './contracts.ts'; import {toolsForScopes} from './request-policy.ts'; +import {renderConnectionSelector} from './owner-selection.ts'; +import {pruneOtherOwnerConnections} from './prune-owner-connections.ts'; export interface AuthWorkerEnv extends AuthorizationEnv,IssuedTokenEnv,ConnectEnv,SetupAdmissionEnv {GITHUB_CLIENT_ID:string;GITHUB_CLIENT_SECRET:string;DEVICE_WRAP_KEY:string;} interface ConsentContext {request:AuthRequest;bootstrapId?:string;ownerId?:string;} const LOOPBACK_HOSTS=['127.0.0.1','localhost','[::1]']; @@ -109,8 +111,7 @@ async function githubCallback(request:Request,env:AuthWorkerEnv):PromiseLink your computer first

No active computer connection is available for this GitHub account. Open your local SLM dashboard, enable a web connection, then reconnect this application using the same GitHub account.

'),resumed.headers,resumed.request.redirectUri); const consent=await api.beginConsent(resumed.request); await env.OAUTH_KV.put('slm-consent:'+consent.handle,JSON.stringify({request:resumed.request,ownerId}),{expirationTtl:900}); - const options=connections.map(c=>'').join(''); - return html(renderAuthPage('Choose your SLM connection','

Choose your SLM connection

GitHub sign-in is complete. Select the local profile this application may use.

Approved permissions

'+resumed.request.scope.map(escapeHtml).join(', ')+'

'),consent.headers,resumed.request.redirectUri); + return html(renderAuthPage('Choose your SLM connection',renderConnectionSelector(connections,consent.handle,resumed.request.scope)),consent.headers,resumed.request.redirectUri); } async function selectConnection(request:Request,env:AuthWorkerEnv):Promise{ const fields=await form(request);const handle=fields.get('handle')??'';const saved=await consentContext(handle,env);if(!saved?.ownerId)return missingConsent(request,handle,env); @@ -123,6 +124,19 @@ async function selectConnection(request:Request,env:AuthWorkerEnv):Promise { + const ownerId='1234'; + const entries=[ + {connectionId:'a'.repeat(32),ownerId,profileId:'default',host:'chatgpt',revokedAt:null,generation:2,deviceDigest:'a'.repeat(64)}, + {connectionId:'b'.repeat(32),ownerId,profileId:'default',host:'chatgpt',revokedAt:null,generation:1,deviceDigest:'b'.repeat(64)}, + {connectionId:'c'.repeat(32),ownerId,profileId:'default',host:'chatgpt',revokedAt:null,generation:1,deviceDigest:'c'.repeat(64)}, + {connectionId:'d'.repeat(32),ownerId,profileId:'default',host:'claude_web',revokedAt:null,generation:1,deviceDigest:'d'.repeat(64)}, + {connectionId:'e'.repeat(32),ownerId,profileId:'bughunting',host:'chatgpt',revokedAt:null,generation:1,deviceDigest:'e'.repeat(64)}, + {connectionId:'f'.repeat(32),ownerId,profileId:'default',host:'chatgpt',revokedAt:'2026-10-23',generation:2,deviceDigest:'f'.repeat(64)} + ]; + const steps=[]; + const owner={ + async list(id){assert.equal(id,ownerId);return structuredClone(entries);}, + async getConnection(id,key){assert.equal(id,ownerId);return structuredClone(entries.find(x=>x.connectionId===key)??null);}, + async cancelConnection(id,key){steps.push(['cancel',key]);}, + async revoke(id,key,generation){steps.push(['revoke',key,generation]);const row=entries.find(x=>x.connectionId===key);if(row)row.revokedAt='now';return generation+1;}, + async markCleanup(id,key,generation){steps.push(['cleanup',key,generation]);return true;} + }; + const env={ + REGISTRIES:{getByName(id){return {async revokeConnection(){steps.push(['registry',id]);}}}}, + DEVICES:{getByName(id){return {async revoke(){steps.push(['device',id]);}}}}, + RELAYS:{getByName(id){return {async revoke(){steps.push(['relay',id]);}}}} + }; + return {owner,ownerId,env,steps,entries}; +}; +test('explicit owner-scoped cleanup revokes only other same-profile same-host connections',async()=>{ + const f=fixture();const ids=await pruneOtherOwnerConnections({owner:f.owner,ownerId:f.ownerId,selectedId:'a'.repeat(32),env:f.env}); + assert.deepEqual(ids,['b'.repeat(32),'c'.repeat(32)]); + assert.equal(f.steps.filter(x=>x[0]==='revoke').length,2); + assert.ok(!f.steps.some(x=>['a','d','e','f'].includes(x[1]?.[0]))); + assert.equal(f.entries.filter(x=>x.revokedAt===null&&x.profileId==='default'&&x.host==='chatgpt').length,1); +}); +test('rejects stale selected connection before any revocations',async()=>{ + const f=fixture();f.entries[0].revokedAt='old'; + await assert.rejects(()=>pruneOtherOwnerConnections({owner:f.owner,ownerId:f.ownerId,selectedId:'a'.repeat(32),env:f.env}),/selected_connection_unavailable/); + assert.equal(f.steps.length,0); +}); +test('rejects unknown selection before any revocations',async()=>{ + const f=fixture(); + await assert.rejects(()=>pruneOtherOwnerConnections({owner:f.owner,ownerId:f.ownerId,selectedId:'9'.repeat(32),env:f.env}),/selected_connection_unavailable/); + assert.equal(f.steps.length,0); +}); +test('does not mark cleanup complete if remote revocation fails',async()=>{ + const f=fixture(); + f.env.REGISTRIES.getByName=()=>({async revokeConnection(){throw Error('relay outage')}}); + await assert.rejects(()=>pruneOtherOwnerConnections({owner:f.owner,ownerId:f.ownerId,selectedId:'a'.repeat(32),env:f.env}),/relay outage/); + assert.equal(f.steps.some(x=>x[0]==='cleanup'),false); +}); +test('validates selected identifier to prevent cross-account lookup',async()=>{ + const f=fixture(); + await assert.rejects(()=>pruneOtherOwnerConnections({owner:f.owner,ownerId:f.ownerId,selectedId:'../../not-a-uuid',env:f.env}),/invalid_selected_connection/); + assert.equal(f.steps.length,0); +}); +test('never revokes the device the kept connection still uses',async()=>{ + const f=fixture();f.entries[1].deviceDigest=f.entries[0].deviceDigest; + await pruneOtherOwnerConnections({owner:f.owner,ownerId:f.ownerId,selectedId:'a'.repeat(32),env:f.env}); + const devices=f.steps.filter(x=>x[0]==='device').map(x=>x[1]); + assert.deepEqual(devices,['c'.repeat(64)]); + assert.equal(f.steps.filter(x=>x[0]==='revoke').length,2); +}); diff --git a/integrations/remote-gateway/tests/owner-selection.test.mjs b/integrations/remote-gateway/tests/owner-selection.test.mjs new file mode 100644 index 000000000..4e9f4c259 --- /dev/null +++ b/integrations/remote-gateway/tests/owner-selection.test.mjs @@ -0,0 +1,23 @@ +import {test} from 'node:test'; +import assert from 'node:assert/strict'; +import {renderConnectionSelector} from '../src/owner-selection.ts'; +const c=(id,expires,profile='default',host='chatgpt')=>({connectionId:id,deviceExpiresAtMs:expires,profileId:profile,host,revokedAt:null}); +test('distinguishes identical profile labels with nonsecret short IDs and expiry, recent first',()=>{ + const page=renderConnectionSelector([c('a'.repeat(32),20000),c('b'.repeat(32),50000),c('c'.repeat(32),40000)],'safe-handle',['slm:read']); + assert.equal((page.match(/default \(chatgpt\)/g)||[]).length,3); + assert.ok(page.indexOf('bbbbbbbb'){ + const page=renderConnectionSelector([c('b'.repeat(32),50000),c('a'.repeat(32),40000)],'safe-handle',['slm:read']); + assert.match(page,/name="remove_duplicates" value="yes"/); + assert.doesNotMatch(page,/\bchecked\b/); + assert.match(page,/other connections with the same local profile and app/i); +}); +test('escapes names and consent handle from external data',()=>{ + const page=renderConnectionSelector([c('a'.repeat(32),30000,'','chatgpt')],'',['slm:read']); + assert.doesNotMatch(page,/