superlocalmemory 4.1.18 → 4.1.19

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