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 CHANGED
@@ -38,7 +38,7 @@ is_valid = QualixarSigner.verify(signed_output)
38
38
 
39
39
  ### Research Initiative
40
40
 
41
- Qualixar is a research platform for AI agent development tools. SuperLocalMemory is one of several research initiatives under the Qualixar umbrella. For more information, visit qualixar.com.
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.7.4", file=sys.stderr)
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",
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",
@@ -1105,7 +1105,8 @@ class MemoryStoreV2:
1105
1105
 
1106
1106
  # Qualixar platform provenance (non-breaking additions)
1107
1107
  attribution['platform'] = 'Qualixar'
1108
- attribution['verify_url'] = 'https://qualixar.com'
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
- return ''.join(output)
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)