superlocalmemory 2.8.3 → 2.8.5
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/ATTRIBUTION.md +1 -1
- package/CHANGELOG.md +17 -0
- package/bin/slm +35 -0
- package/mcp_server.py +75 -7
- package/package.json +1 -1
- package/src/memory_store_v2.py +12 -2
package/ATTRIBUTION.md
CHANGED
|
@@ -38,7 +38,7 @@ is_valid = QualixarSigner.verify(signed_output)
|
|
|
38
38
|
|
|
39
39
|
### Research Initiative
|
|
40
40
|
|
|
41
|
-
Qualixar is a research
|
|
41
|
+
Qualixar is a research initiative for AI agent development tools by Varun Pratap Bhardwaj. SuperLocalMemory is one of several research initiatives under the Qualixar umbrella.
|
|
42
42
|
|
|
43
43
|
### Third-Party Acknowledgments
|
|
44
44
|
|
package/CHANGELOG.md
CHANGED
|
@@ -16,6 +16,23 @@ SuperLocalMemory V2 - Intelligent local memory system for AI coding assistants.
|
|
|
16
16
|
|
|
17
17
|
---
|
|
18
18
|
|
|
19
|
+
## [2.8.3] - 2026-03-05
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
- Windows installation and cross-platform compatibility
|
|
23
|
+
- Database stability under concurrent usage
|
|
24
|
+
- Forward compatibility with latest Python versions
|
|
25
|
+
|
|
26
|
+
### Added
|
|
27
|
+
- Full Windows support with PowerShell scripts for all operations
|
|
28
|
+
- `slm attribution` command for license and creator information
|
|
29
|
+
|
|
30
|
+
### Improved
|
|
31
|
+
- Overall reliability and code quality
|
|
32
|
+
- Dependency management for reproducible installs
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
19
36
|
## [2.8.2] - 2026-03-04
|
|
20
37
|
|
|
21
38
|
### Fixed
|
package/bin/slm
CHANGED
|
@@ -310,6 +310,38 @@ except Exception as e:
|
|
|
310
310
|
"
|
|
311
311
|
;;
|
|
312
312
|
|
|
313
|
+
attribution)
|
|
314
|
+
python3 -c "
|
|
315
|
+
import sys
|
|
316
|
+
sys.path.insert(0, '${SLM_DIR}')
|
|
317
|
+
try:
|
|
318
|
+
from memory_store_v2 import MemoryStoreV2
|
|
319
|
+
store = MemoryStoreV2()
|
|
320
|
+
attr = store.get_attribution()
|
|
321
|
+
print('SuperLocalMemory — Attribution')
|
|
322
|
+
print('=' * 45)
|
|
323
|
+
print(f\"Creator: {attr.get('creator_name', 'Varun Pratap Bhardwaj')}\")
|
|
324
|
+
print(f\"Role: {attr.get('creator_role', 'Solution Architect')}\")
|
|
325
|
+
print(f\"Platform: {attr.get('platform', 'Qualixar')}\")
|
|
326
|
+
print(f\"License: {attr.get('license', 'MIT')}\")
|
|
327
|
+
print(f\"Website: {attr.get('website', 'https://superlocalmemory.com')}\")
|
|
328
|
+
print(f\"Author: {attr.get('author_website', 'https://varunpratap.com')}\")
|
|
329
|
+
print('=' * 45)
|
|
330
|
+
try:
|
|
331
|
+
from qualixar_attribution import QualixarSigner
|
|
332
|
+
from qualixar_watermark import encode_watermark
|
|
333
|
+
print('Layer 1 (Visible): Active')
|
|
334
|
+
print('Layer 2 (Cryptographic): Active')
|
|
335
|
+
print('Layer 3 (Steganographic): Active')
|
|
336
|
+
except ImportError:
|
|
337
|
+
print('Layer 1 (Visible): Active')
|
|
338
|
+
print('Layer 2 (Cryptographic): Not available')
|
|
339
|
+
print('Layer 3 (Steganographic): Not available')
|
|
340
|
+
except Exception as e:
|
|
341
|
+
print(f'Error: {e}')
|
|
342
|
+
"
|
|
343
|
+
;;
|
|
344
|
+
|
|
313
345
|
help|--help|-h)
|
|
314
346
|
cat <<EOF
|
|
315
347
|
SuperLocalMemory V2 - Universal CLI
|
|
@@ -356,6 +388,9 @@ HTTP SERVER (MCP):
|
|
|
356
388
|
slm serve [PORT] Start MCP HTTP server (default port 8417)
|
|
357
389
|
For ChatGPT/remote: ngrok http PORT
|
|
358
390
|
|
|
391
|
+
ATTRIBUTION:
|
|
392
|
+
slm attribution Show creator attribution and provenance status
|
|
393
|
+
|
|
359
394
|
ADVANCED:
|
|
360
395
|
slm reset soft Soft reset (clear memories)
|
|
361
396
|
slm reset hard --confirm Hard reset (nuclear option)
|
package/mcp_server.py
CHANGED
|
@@ -61,6 +61,26 @@ try:
|
|
|
61
61
|
except ImportError:
|
|
62
62
|
TRUST_AVAILABLE = False
|
|
63
63
|
|
|
64
|
+
# Qualixar Attribution (v2.8.3 — 3-layer provenance)
|
|
65
|
+
try:
|
|
66
|
+
from qualixar_attribution import QualixarSigner
|
|
67
|
+
from qualixar_watermark import encode_watermark
|
|
68
|
+
_signer = QualixarSigner("superlocalmemory", "2.8.3")
|
|
69
|
+
ATTRIBUTION_AVAILABLE = True
|
|
70
|
+
except ImportError:
|
|
71
|
+
_signer = None
|
|
72
|
+
ATTRIBUTION_AVAILABLE = False
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def _sign_response(response: dict) -> dict:
|
|
76
|
+
"""Apply Layer 2 cryptographic signing to MCP tool responses."""
|
|
77
|
+
if _signer and isinstance(response, dict):
|
|
78
|
+
try:
|
|
79
|
+
return _signer.sign(response)
|
|
80
|
+
except Exception:
|
|
81
|
+
pass
|
|
82
|
+
return response
|
|
83
|
+
|
|
64
84
|
# Learning System (v2.7+)
|
|
65
85
|
try:
|
|
66
86
|
sys.path.insert(0, str(Path(__file__).parent / "src"))
|
|
@@ -676,12 +696,12 @@ async def remember(
|
|
|
676
696
|
# Format response
|
|
677
697
|
preview = content[:100] + "..." if len(content) > 100 else content
|
|
678
698
|
|
|
679
|
-
return {
|
|
699
|
+
return _sign_response({
|
|
680
700
|
"success": True,
|
|
681
701
|
"memory_id": memory_id,
|
|
682
702
|
"message": f"Memory saved with ID {memory_id}",
|
|
683
703
|
"content_preview": preview
|
|
684
|
-
}
|
|
704
|
+
})
|
|
685
705
|
|
|
686
706
|
except Exception as e:
|
|
687
707
|
return {
|
|
@@ -805,13 +825,13 @@ async def recall(
|
|
|
805
825
|
if r.get('score', 0) >= min_score
|
|
806
826
|
]
|
|
807
827
|
|
|
808
|
-
return {
|
|
828
|
+
return _sign_response({
|
|
809
829
|
"success": True,
|
|
810
830
|
"query": query,
|
|
811
831
|
"results": filtered_results,
|
|
812
832
|
"count": len(filtered_results),
|
|
813
833
|
"total_searched": len(results)
|
|
814
|
-
}
|
|
834
|
+
})
|
|
815
835
|
|
|
816
836
|
except Exception as e:
|
|
817
837
|
return {
|
|
@@ -888,10 +908,10 @@ async def get_status() -> dict:
|
|
|
888
908
|
# Call existing get_stats method
|
|
889
909
|
stats = store.get_stats()
|
|
890
910
|
|
|
891
|
-
return {
|
|
911
|
+
return _sign_response({
|
|
892
912
|
"success": True,
|
|
893
913
|
**stats
|
|
894
|
-
}
|
|
914
|
+
})
|
|
895
915
|
|
|
896
916
|
except Exception as e:
|
|
897
917
|
return {
|
|
@@ -1637,6 +1657,54 @@ async def project_context_prompt(project_name: str) -> str:
|
|
|
1637
1657
|
# SERVER STARTUP
|
|
1638
1658
|
# ============================================================================
|
|
1639
1659
|
|
|
1660
|
+
@mcp.tool(annotations=ToolAnnotations(
|
|
1661
|
+
readOnlyHint=True,
|
|
1662
|
+
destructiveHint=False,
|
|
1663
|
+
openWorldHint=False,
|
|
1664
|
+
))
|
|
1665
|
+
async def get_attribution() -> dict:
|
|
1666
|
+
"""
|
|
1667
|
+
Get creator attribution and provenance verification for SuperLocalMemory.
|
|
1668
|
+
|
|
1669
|
+
Returns creator information, license details, and verification status
|
|
1670
|
+
for the 3-layer Qualixar attribution system.
|
|
1671
|
+
|
|
1672
|
+
Returns:
|
|
1673
|
+
{
|
|
1674
|
+
"creator": str,
|
|
1675
|
+
"license": str,
|
|
1676
|
+
"platform": str,
|
|
1677
|
+
"layers": {
|
|
1678
|
+
"visible": bool,
|
|
1679
|
+
"cryptographic": bool,
|
|
1680
|
+
"steganographic": bool
|
|
1681
|
+
}
|
|
1682
|
+
}
|
|
1683
|
+
"""
|
|
1684
|
+
try:
|
|
1685
|
+
store = get_store()
|
|
1686
|
+
attribution = store.get_attribution()
|
|
1687
|
+
|
|
1688
|
+
return _sign_response({
|
|
1689
|
+
"success": True,
|
|
1690
|
+
**attribution,
|
|
1691
|
+
"website": "https://superlocalmemory.com",
|
|
1692
|
+
"author_website": "https://varunpratap.com",
|
|
1693
|
+
"attribution_layers": {
|
|
1694
|
+
"layer1_visible": True,
|
|
1695
|
+
"layer2_cryptographic": ATTRIBUTION_AVAILABLE,
|
|
1696
|
+
"layer3_steganographic": ATTRIBUTION_AVAILABLE,
|
|
1697
|
+
},
|
|
1698
|
+
})
|
|
1699
|
+
|
|
1700
|
+
except Exception as e:
|
|
1701
|
+
return {
|
|
1702
|
+
"success": False,
|
|
1703
|
+
"error": _sanitize_error(e),
|
|
1704
|
+
"message": "Failed to get attribution"
|
|
1705
|
+
}
|
|
1706
|
+
|
|
1707
|
+
|
|
1640
1708
|
if __name__ == "__main__":
|
|
1641
1709
|
import argparse
|
|
1642
1710
|
|
|
@@ -1662,7 +1730,7 @@ if __name__ == "__main__":
|
|
|
1662
1730
|
# Print startup message to stderr (stdout is used for MCP protocol)
|
|
1663
1731
|
print("=" * 60, file=sys.stderr)
|
|
1664
1732
|
print("SuperLocalMemory V2 - MCP Server", file=sys.stderr)
|
|
1665
|
-
print("Version: 2.
|
|
1733
|
+
print("Version: 2.8.3", file=sys.stderr)
|
|
1666
1734
|
print("=" * 60, file=sys.stderr)
|
|
1667
1735
|
print("Created by: Varun Pratap Bhardwaj (Solution Architect)", file=sys.stderr)
|
|
1668
1736
|
print("Repository: https://github.com/varun369/SuperLocalMemoryV2", file=sys.stderr)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "superlocalmemory",
|
|
3
|
-
"version": "2.8.
|
|
3
|
+
"version": "2.8.5",
|
|
4
4
|
"description": "Your AI Finally Remembers You - Local-first intelligent memory system for AI assistants. Works with Claude, Cursor, Windsurf, VS Code/Copilot, Codex, and 17+ AI tools. 100% local, zero cloud dependencies.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai-memory",
|
package/src/memory_store_v2.py
CHANGED
|
@@ -1105,7 +1105,8 @@ class MemoryStoreV2:
|
|
|
1105
1105
|
|
|
1106
1106
|
# Qualixar platform provenance (non-breaking additions)
|
|
1107
1107
|
attribution['platform'] = 'Qualixar'
|
|
1108
|
-
attribution['
|
|
1108
|
+
attribution['website'] = 'https://superlocalmemory.com'
|
|
1109
|
+
attribution['author_website'] = 'https://varunpratap.com'
|
|
1109
1110
|
|
|
1110
1111
|
return attribution
|
|
1111
1112
|
|
|
@@ -1136,7 +1137,16 @@ class MemoryStoreV2:
|
|
|
1136
1137
|
output.append(entry)
|
|
1137
1138
|
char_count += len(entry)
|
|
1138
1139
|
|
|
1139
|
-
|
|
1140
|
+
text = ''.join(output)
|
|
1141
|
+
|
|
1142
|
+
# Layer 3: Steganographic watermark on text exports
|
|
1143
|
+
try:
|
|
1144
|
+
from qualixar_watermark import encode_watermark
|
|
1145
|
+
text = encode_watermark(text, "slm")
|
|
1146
|
+
except ImportError:
|
|
1147
|
+
pass
|
|
1148
|
+
|
|
1149
|
+
return text
|
|
1140
1150
|
|
|
1141
1151
|
|
|
1142
1152
|
# CLI interface (V1 compatible + V2 extensions)
|