superlocalmemory 3.6.18 → 3.6.20

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "superlocalmemory",
3
- "version": "3.6.18",
3
+ "version": "3.6.20",
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.18"
19
+ "version": "3.6.20"
20
20
  }
@@ -1,6 +1,15 @@
1
1
  {
2
2
  "hooks": {
3
3
  "SessionStart": [
4
+ {
5
+ "hooks": [
6
+ {
7
+ "type": "command",
8
+ "command": "slm hook mandate 2>/dev/null || true",
9
+ "timeout": 5000
10
+ }
11
+ ]
12
+ },
4
13
  {
5
14
  "hooks": [
6
15
  {
@@ -1 +1 @@
1
- superlocalmemory==3.6.18
1
+ superlocalmemory==3.6.20
@@ -1,6 +1,15 @@
1
1
  {
2
2
  "hooks": {
3
3
  "SessionStart": [
4
+ {
5
+ "hooks": [
6
+ {
7
+ "type": "command",
8
+ "command": "slm hook mandate 2>/dev/null || true",
9
+ "timeout": 5000
10
+ }
11
+ ]
12
+ },
4
13
  {
5
14
  "hooks": [
6
15
  {
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "3.6.18",
2
+ "version": "3.6.20",
3
3
  "pluginName": "superlocalmemory",
4
4
  "displayName": "SuperLocalMemory",
5
5
  "repository": "https://github.com/qualixar/superlocalmemory",
@@ -1 +1 @@
1
- superlocalmemory==3.6.18
1
+ superlocalmemory==3.6.20
package/pyproject.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "superlocalmemory"
3
- version = "3.6.18"
3
+ version = "3.6.20"
4
4
  description = "Information-geometric agent memory with mathematical guarantees"
5
5
  readme = "README.md"
6
6
  license = {text = "AGPL-3.0-or-later"}
@@ -30,7 +30,7 @@ import process from 'node:process';
30
30
  // ---------------------------------------------------------------------------
31
31
  // Constants
32
32
  // ---------------------------------------------------------------------------
33
- const VERSION = '3.6.18';
33
+ const VERSION = '3.6.19';
34
34
  const MANIFEST_REL = 'plugin-src/manifest.json';
35
35
  const GENERATED_BANNER = `# _GENERATED — DO NOT HAND-EDIT
36
36
 
@@ -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.18"
35
+ __version__ = "3.6.20"
36
36
 
37
37
  _REQUIRED_VERSIONS = {
38
38
  "sentence_transformers": "5.3.0",
@@ -87,24 +87,18 @@ def _get_broker(request: Request):
87
87
  client_host = request.client.host if request.client else ""
88
88
  if client_host not in ("127.0.0.1", "::1", "localhost"):
89
89
  import hmac
90
- presented = request.headers.get("x-mesh-secret", "")
91
- if not hmac.compare_digest(presented, secret):
90
+ # Accept X-Mesh-Secret (undocumented legacy header, v3.6.12 regression) OR
91
+ # Authorization: Bearer <secret> (RFC 7617 — canonical; what remote_sync.py
92
+ # sends and what the docs specify). Both are constant-time compared.
93
+ presented = (
94
+ request.headers.get("x-mesh-secret")
95
+ or request.headers.get("authorization", "").removeprefix("Bearer ").strip()
96
+ )
97
+ if not presented or not hmac.compare_digest(presented, secret):
92
98
  raise HTTPException(401, detail="invalid or missing mesh secret")
93
99
  return broker
94
100
 
95
101
 
96
- def _validate_remote_auth(request: Request, broker) -> None:
97
- """Validate bearer token for cross-machine requests."""
98
- if not broker._is_remote:
99
- return # local mode — no auth needed
100
- secret = broker._shared_secret
101
- if not secret:
102
- return
103
- auth = request.headers.get("Authorization", "")
104
- if auth != f"Bearer {secret}":
105
- raise HTTPException(401, detail="Unauthorized")
106
-
107
-
108
102
  # -- Routes --
109
103
 
110
104
  @router.post("/register")
@@ -130,7 +124,6 @@ async def deregister(req: DeregisterRequest, request: Request):
130
124
  @router.get("/peers")
131
125
  async def peers(request: Request):
132
126
  broker = _get_broker(request)
133
- _validate_remote_auth(request, broker)
134
127
  return {"peers": broker.list_all_peers()}
135
128
 
136
129
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: superlocalmemory
3
- Version: 3.6.18
3
+ Version: 3.6.20
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