superlocalmemory 3.6.1 → 3.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,19 @@ All notable changes to SuperLocalMemory V3 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
+ ## [3.6.2] - 2026-06-08 — wrap dry_run fix for config-file mechanism (macOS CI)
9
+
10
+ ### Fixed
11
+ - **`slm wrap` `config-file` dry_run fails on machines without VS Code installed:** `wrap_agent()`
12
+ with `mechanism="config-file"` called `_vscode_user_dir()` before the `if dry_run: return 0`
13
+ guard. On CI runners (and any machine without VS Code), `_vscode_user_dir()` returns `None`,
14
+ causing the function to return 1 with "[slm wrap] VS Code user dir not found" even for
15
+ `dry_run=True` calls that never need the path to exist. Fix: moved `if dry_run: return 0`
16
+ to before the `_vscode_user_dir()` lookup — consistent with the same pattern already applied
17
+ to the `env` mechanism in v3.6.1.
18
+
19
+ ---
20
+
8
21
  ## [3.6.1] - 2026-06-07 — Optimize module fixes: proxy liveness probe, UI tab init, PyPI CI unblock
9
22
 
10
23
  ### Fixed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "superlocalmemory",
3
- "version": "3.6.1",
3
+ "version": "3.6.2",
4
4
  "description": "Information-geometric agent memory with mathematical guarantees. 4-channel retrieval, Fisher-Rao similarity, zero-LLM mode, EU AI Act compliant. Works with Claude, Cursor, Windsurf, and 17+ AI tools.",
5
5
  "keywords": [
6
6
  "ai-memory",
package/pyproject.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "superlocalmemory"
3
- version = "3.6.1"
3
+ version = "3.6.2"
4
4
  description = "Information-geometric agent memory with mathematical guarantees"
5
5
  readme = "README.md"
6
6
  license = {text = "AGPL-3.0-or-later"}
@@ -28,7 +28,7 @@ if "OMP_NUM_THREADS" not in os.environ:
28
28
  os.environ["OMP_NUM_THREADS"] = "2"
29
29
  # ---------------------------------------------------------------------------
30
30
 
31
- __version__ = "3.6.1"
31
+ __version__ = "3.6.2"
32
32
 
33
33
  _REQUIRED_VERSIONS = {
34
34
  "sentence_transformers": "5.3.0",
@@ -130,6 +130,10 @@ def wrap_agent(
130
130
  if not config_path_str:
131
131
  print("[slm wrap] no config_path specified", file=sys.stderr)
132
132
  return 1
133
+ # dry_run: show intent without requiring VS Code to be installed.
134
+ if dry_run:
135
+ print(f"[slm wrap] would write {config_path_str} key={config_key} value={config_value}")
136
+ return 0
133
137
  if "{vscode_user_dir}" in config_path_str:
134
138
  vscode_dir = _vscode_user_dir()
135
139
  if vscode_dir is None:
@@ -138,9 +142,6 @@ def wrap_agent(
138
142
  path = Path(config_path_str.replace("{vscode_user_dir}", str(vscode_dir)))
139
143
  else:
140
144
  path = Path(config_path_str).expanduser()
141
- if dry_run:
142
- print(f"[slm wrap] would write {path} key={config_key} value={config_value}")
143
- return 0
144
145
  existing = {}
145
146
  if path.exists():
146
147
  try: