superlocalmemory 3.6.21 → 3.6.22

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/README.md CHANGED
@@ -2,10 +2,10 @@
2
2
  <img src="https://superlocalmemory.com/assets/logo-mark.png" alt="SuperLocalMemory" width="200"/>
3
3
  </p>
4
4
 
5
- <h1 align="center">SuperLocalMemory V3.6.18</h1>
5
+ <h1 align="center">SuperLocalMemory V3.6.21</h1>
6
6
  <p align="center"><strong>Cache. Compress. Remember. Three surfaces — proxy, MCP tools, or skill. Every setup covered.</strong><br/>
7
7
  <em>To the best of our knowledge, the only zero-cloud agent memory that beats Mem0's zero-LLM score on LoCoMo. Mode A: 74.8% vs Mem0 64.2% — no GPU, no API key, on CPU.</em></p>
8
- <p align="center"><code>v3.6.18</code> — <strong>Plugin-native. Profile-aware. Distributed-ready.</strong><br/>
8
+ <p align="center"><code>v3.6.21</code> — <strong>Plugin-native. Profile-aware. Distributed-ready.</strong><br/>
9
9
  Proxy: <code>slm wrap claude</code> &nbsp;·&nbsp; MCP: add <code>slm_compress</code> to your config &nbsp;·&nbsp; Skill: zero-config</p>
10
10
  <p align="center"><strong>3 published research papers</strong> (arXiv preprints + Zenodo-archived) · <a href="https://arxiv.org/abs/2603.02240">arXiv:2603.02240</a> · <a href="https://arxiv.org/abs/2603.14588">arXiv:2603.14588</a> · <a href="https://arxiv.org/abs/2604.04514">arXiv:2604.04514</a></p>
11
11
 
@@ -307,6 +307,8 @@ slm dashboard # Opens at http://localhost:8765
307
307
 
308
308
  | Version | Codename | Key Features |
309
309
  |---|---|---|
310
+ | **v3.6.21** | Dashboard Audit | Full UI audit across all 7 dashboard tabs — auth fix for mesh panel (issue #60 frontend), Quick Store endpoint, timeline endpoint, r.ok guards, SSE \r fix, event delegation for lazy tabs, optimize toggle revert; backbone.py JSONDecodeError fix (issue #62) |
311
+ | **v3.6.20** | Mesh Auth | Remote mesh auth fix (issue #60) — `_get_broker` now accepts Bearer + X-Mesh-Secret from non-loopback callers; config settings preservation (AIDEV-86) |
310
312
  | **v3.6.17** | Community | 8 contributor PRs (observability events, marker-bounded adapter writes, daemon port discovery, anthropic `api_base`, OpenMP workers, atomic-write rehash, `_jl` sentinel, LFS pointer); dashboard-feedback fix (#53/#59); env-tunable SQLite knobs + idle backoff; remote LLM test-probe (#40) |
311
313
  | **v3.6.16** | Docs | Corrected Claude Code plugin install — adds the required `/plugin marketplace add` step; clarifies plugin vs pip/npm delivery |
312
314
  | **v3.6.15** | Multi-scope | **Opt-in [shared memory](docs/shared-memory.md)** (personal/shared/global, off by default), default-deny scope at every read path, recall scope-race fix, contributor PRs #42/#43/#44, fixes #46–#49 |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "superlocalmemory",
3
- "version": "3.6.21",
3
+ "version": "3.6.22",
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",
@@ -16,5 +16,5 @@
16
16
  "mcpServers": "./.mcp.json",
17
17
  "name": "superlocalmemory",
18
18
  "repository": "https://github.com/qualixar/superlocalmemory",
19
- "version": "3.6.21"
19
+ "version": "3.6.22"
20
20
  }
@@ -1 +1 @@
1
- superlocalmemory==3.6.21
1
+ superlocalmemory==3.6.22
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "3.6.21",
2
+ "version": "3.6.22",
3
3
  "pluginName": "superlocalmemory",
4
4
  "displayName": "SuperLocalMemory",
5
5
  "repository": "https://github.com/qualixar/superlocalmemory",
@@ -1 +1 @@
1
- superlocalmemory==3.6.21
1
+ superlocalmemory==3.6.22
package/pyproject.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "superlocalmemory"
3
- version = "3.6.21"
3
+ version = "3.6.22"
4
4
  description = "Information-geometric agent memory with mathematical guarantees"
5
5
  readme = "README.md"
6
6
  license = {text = "AGPL-3.0-or-later"}
@@ -32,7 +32,7 @@ if "OMP_NUM_THREADS" not in os.environ:
32
32
  os.environ["OMP_NUM_THREADS"] = "2"
33
33
  # ---------------------------------------------------------------------------
34
34
 
35
- __version__ = "3.6.21"
35
+ __version__ = "3.6.22"
36
36
 
37
37
  _REQUIRED_VERSIONS = {
38
38
  "sentence_transformers": "5.3.0",
@@ -190,7 +190,7 @@ class LLMBackbone:
190
190
  logger.warning("Content filter or bad request (400). Returning empty.")
191
191
  return ""
192
192
  last_error = exc
193
- except (httpx.TimeoutException, httpx.ConnectError) as exc:
193
+ except (httpx.TimeoutException, httpx.ConnectError, ValueError) as exc:
194
194
  last_error = exc
195
195
 
196
196
  if attempt < _MAX_RETRIES - 1:
@@ -217,7 +217,14 @@ class LLMBackbone:
217
217
  with httpx.Client(timeout=timeout) as client:
218
218
  resp = client.post(url, headers=headers, json=payload)
219
219
  resp.raise_for_status()
220
- return resp.json()
220
+ try:
221
+ return resp.json()
222
+ except Exception as exc:
223
+ raise ValueError(
224
+ f"LLM endpoint returned HTTP {resp.status_code} with "
225
+ f"non-JSON body (Content-Length="
226
+ f"{resp.headers.get('content-length', '?')}): {exc}"
227
+ ) from exc
221
228
  finally:
222
229
  socket.setdefaulttimeout(old_default)
223
230
 
@@ -117,6 +117,7 @@ async function loadClusters() {
117
117
  }
118
118
  try {
119
119
  var response = await fetch('/api/clusters');
120
+ if (!response.ok) throw new Error('HTTP ' + response.status);
120
121
  var data = await response.json();
121
122
  _CLUSTERS_STATE.clusters = data.clusters || [];
122
123
  _CLUSTERS_STATE.page = 0;
@@ -13,6 +13,7 @@ async function loadCompliance() {
13
13
  var url = '/api/compliance/status';
14
14
  if (filterValue) url += '?event_type=' + encodeURIComponent(filterValue);
15
15
  var response = await fetch(url);
16
+ if (!response.ok) throw new Error('HTTP ' + response.status);
16
17
  var data = await response.json();
17
18
  _complianceData = data;
18
19
 
@@ -61,7 +61,11 @@ async function loadMathHealth() {
61
61
  var liStatus = document.createElement('li');
62
62
  liStatus.appendChild(document.createTextNode('Status: '));
63
63
  var statusBadge = document.createElement('span');
64
- statusBadge.className = 'badge bg-success';
64
+ var _s = (layer.status || 'active').toLowerCase();
65
+ var _badgeClass = _s === 'error' || _s === 'critical' ? 'bg-danger' :
66
+ _s === 'warning' || _s === 'degraded' ? 'bg-warning text-dark' :
67
+ 'bg-success';
68
+ statusBadge.className = 'badge ' + _badgeClass;
65
69
  statusBadge.textContent = layer.status || 'active';
66
70
  liStatus.appendChild(statusBadge);
67
71
  ul.appendChild(liStatus);
@@ -16,12 +16,16 @@
16
16
  function fetchEntityList(offset) {
17
17
  offset = offset || 0;
18
18
  fetch('/api/entity/list?limit=' + PAGE_SIZE + '&offset=' + offset)
19
- .then(function(r) { return r.json(); })
19
+ .then(function(r) {
20
+ if (!r.ok) throw new Error('HTTP ' + r.status);
21
+ return r.json();
22
+ })
20
23
  .then(function(data) {
21
24
  allEntities = data.entities || [];
22
25
  renderEntityList(allEntities, data.total || 0, offset);
23
26
  })
24
- .catch(function() {
27
+ .catch(function(err) {
28
+ console.error('[entities] fetchEntityList failed:', err);
25
29
  renderEntityList([], 0, 0);
26
30
  });
27
31
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: superlocalmemory
3
- Version: 3.6.21
3
+ Version: 3.6.22
4
4
  Summary: Information-geometric agent memory with mathematical guarantees
5
5
  Author-email: Varun Pratap Bhardwaj <admin@superlocalmemory.com>
6
6
  License: AGPL-3.0-or-later
@@ -96,10 +96,10 @@ Dynamic: license-file
96
96
  <img src="https://superlocalmemory.com/assets/logo-mark.png" alt="SuperLocalMemory" width="200"/>
97
97
  </p>
98
98
 
99
- <h1 align="center">SuperLocalMemory V3.6.18</h1>
99
+ <h1 align="center">SuperLocalMemory V3.6.21</h1>
100
100
  <p align="center"><strong>Cache. Compress. Remember. Three surfaces — proxy, MCP tools, or skill. Every setup covered.</strong><br/>
101
101
  <em>To the best of our knowledge, the only zero-cloud agent memory that beats Mem0's zero-LLM score on LoCoMo. Mode A: 74.8% vs Mem0 64.2% — no GPU, no API key, on CPU.</em></p>
102
- <p align="center"><code>v3.6.18</code> — <strong>Plugin-native. Profile-aware. Distributed-ready.</strong><br/>
102
+ <p align="center"><code>v3.6.21</code> — <strong>Plugin-native. Profile-aware. Distributed-ready.</strong><br/>
103
103
  Proxy: <code>slm wrap claude</code> &nbsp;·&nbsp; MCP: add <code>slm_compress</code> to your config &nbsp;·&nbsp; Skill: zero-config</p>
104
104
  <p align="center"><strong>3 published research papers</strong> (arXiv preprints + Zenodo-archived) · <a href="https://arxiv.org/abs/2603.02240">arXiv:2603.02240</a> · <a href="https://arxiv.org/abs/2603.14588">arXiv:2603.14588</a> · <a href="https://arxiv.org/abs/2604.04514">arXiv:2604.04514</a></p>
105
105
 
@@ -401,6 +401,8 @@ slm dashboard # Opens at http://localhost:8765
401
401
 
402
402
  | Version | Codename | Key Features |
403
403
  |---|---|---|
404
+ | **v3.6.21** | Dashboard Audit | Full UI audit across all 7 dashboard tabs — auth fix for mesh panel (issue #60 frontend), Quick Store endpoint, timeline endpoint, r.ok guards, SSE \r fix, event delegation for lazy tabs, optimize toggle revert; backbone.py JSONDecodeError fix (issue #62) |
405
+ | **v3.6.20** | Mesh Auth | Remote mesh auth fix (issue #60) — `_get_broker` now accepts Bearer + X-Mesh-Secret from non-loopback callers; config settings preservation (AIDEV-86) |
404
406
  | **v3.6.17** | Community | 8 contributor PRs (observability events, marker-bounded adapter writes, daemon port discovery, anthropic `api_base`, OpenMP workers, atomic-write rehash, `_jl` sentinel, LFS pointer); dashboard-feedback fix (#53/#59); env-tunable SQLite knobs + idle backoff; remote LLM test-probe (#40) |
405
407
  | **v3.6.16** | Docs | Corrected Claude Code plugin install — adds the required `/plugin marketplace add` step; clarifies plugin vs pip/npm delivery |
406
408
  | **v3.6.15** | Multi-scope | **Opt-in [shared memory](docs/shared-memory.md)** (personal/shared/global, off by default), default-deny scope at every read path, recall scope-race fix, contributor PRs #42/#43/#44, fixes #46–#49 |