superlocalmemory 2.8.2 → 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.
Files changed (73) hide show
  1. package/ATTRIBUTION.md +1 -1
  2. package/CHANGELOG.md +17 -0
  3. package/README.md +7 -5
  4. package/api_server.py +5 -0
  5. package/bin/slm +35 -0
  6. package/bin/slm.bat +3 -3
  7. package/docs/SECURITY-QUICK-REFERENCE.md +214 -0
  8. package/install.ps1 +11 -11
  9. package/mcp_server.py +78 -10
  10. package/package.json +2 -2
  11. package/requirements-core.txt +16 -18
  12. package/requirements-learning.txt +8 -8
  13. package/requirements.txt +9 -7
  14. package/scripts/prepack.js +33 -0
  15. package/scripts/verify-v27.ps1 +301 -0
  16. package/src/agent_registry.py +32 -28
  17. package/src/auto_backup.py +12 -6
  18. package/src/cache_manager.py +2 -2
  19. package/src/compression/__init__.py +25 -0
  20. package/src/compression/cli.py +150 -0
  21. package/src/compression/cold_storage.py +217 -0
  22. package/src/compression/config.py +72 -0
  23. package/src/compression/orchestrator.py +133 -0
  24. package/src/compression/tier2_compressor.py +228 -0
  25. package/src/compression/tier3_compressor.py +153 -0
  26. package/src/compression/tier_classifier.py +148 -0
  27. package/src/db_connection_manager.py +5 -5
  28. package/src/event_bus.py +24 -22
  29. package/src/hnsw_index.py +3 -3
  30. package/src/learning/__init__.py +5 -4
  31. package/src/learning/adaptive_ranker.py +14 -265
  32. package/src/learning/bootstrap/__init__.py +69 -0
  33. package/src/learning/bootstrap/constants.py +93 -0
  34. package/src/learning/bootstrap/db_queries.py +316 -0
  35. package/src/learning/bootstrap/sampling.py +82 -0
  36. package/src/learning/bootstrap/text_utils.py +71 -0
  37. package/src/learning/cross_project_aggregator.py +58 -57
  38. package/src/learning/db/__init__.py +40 -0
  39. package/src/learning/db/constants.py +44 -0
  40. package/src/learning/db/schema.py +279 -0
  41. package/src/learning/learning_db.py +15 -234
  42. package/src/learning/ranking/__init__.py +33 -0
  43. package/src/learning/ranking/constants.py +84 -0
  44. package/src/learning/ranking/helpers.py +278 -0
  45. package/src/learning/source_quality_scorer.py +66 -65
  46. package/src/learning/synthetic_bootstrap.py +28 -310
  47. package/src/memory/__init__.py +36 -0
  48. package/src/memory/cli.py +205 -0
  49. package/src/memory/constants.py +39 -0
  50. package/src/memory/helpers.py +28 -0
  51. package/src/memory/schema.py +166 -0
  52. package/src/memory-profiles.py +94 -86
  53. package/src/memory-reset.py +187 -185
  54. package/src/memory_compression.py +2 -2
  55. package/src/memory_store_v2.py +44 -354
  56. package/src/migrate_v1_to_v2.py +11 -10
  57. package/src/patterns/analyzers.py +104 -100
  58. package/src/patterns/learner.py +17 -13
  59. package/src/patterns/scoring.py +25 -21
  60. package/src/patterns/store.py +40 -38
  61. package/src/patterns/terminology.py +53 -51
  62. package/src/provenance_tracker.py +2 -2
  63. package/src/qualixar_attribution.py +1 -1
  64. package/src/search/engine.py +16 -14
  65. package/src/search/index_loader.py +13 -11
  66. package/src/setup_validator.py +160 -158
  67. package/src/subscription_manager.py +20 -18
  68. package/src/tree/builder.py +66 -64
  69. package/src/tree/nodes.py +103 -97
  70. package/src/tree/queries.py +142 -137
  71. package/src/tree/schema.py +46 -42
  72. package/src/webhook_dispatcher.py +3 -3
  73. package/ui_server.py +7 -4
@@ -73,7 +73,7 @@ class WebhookDispatcher:
73
73
  return cls._instances[name]
74
74
 
75
75
  @classmethod
76
- def reset_instance(cls, name: Optional[str] = None):
76
+ def reset_instance(cls, name: Optional[str] = None) -> None:
77
77
  """Remove singleton(s). Used for testing."""
78
78
  with cls._instances_lock:
79
79
  if name is None:
@@ -104,7 +104,7 @@ class WebhookDispatcher:
104
104
  self._worker.start()
105
105
  logger.info("WebhookDispatcher started")
106
106
 
107
- def dispatch(self, event: dict, webhook_url: str):
107
+ def dispatch(self, event: dict, webhook_url: str) -> None:
108
108
  """
109
109
  Enqueue a webhook delivery.
110
110
 
@@ -217,7 +217,7 @@ class WebhookDispatcher:
217
217
  with self._stats_lock:
218
218
  return dict(self._stats)
219
219
 
220
- def close(self):
220
+ def close(self) -> None:
221
221
  """Shut down the dispatcher. Drains remaining items."""
222
222
  if self._closed:
223
223
  return
package/ui_server.py CHANGED
@@ -33,6 +33,8 @@ except ImportError:
33
33
  "Install with: pip install 'fastapi[all]' uvicorn websockets"
34
34
  )
35
35
 
36
+ from security_middleware import SecurityHeadersMiddleware
37
+
36
38
  # Add src/ and routes/ to path
37
39
  sys.path.insert(0, str(Path(__file__).parent / "src"))
38
40
  sys.path.insert(0, str(Path(__file__).parent))
@@ -51,7 +53,9 @@ app = FastAPI(
51
53
  redoc_url="/api/redoc"
52
54
  )
53
55
 
54
- # Middleware
56
+ # Middleware (order matters: security headers should be outermost)
57
+ app.add_middleware(SecurityHeadersMiddleware)
58
+ app.add_middleware(GZipMiddleware, minimum_size=1000)
55
59
  app.add_middleware(
56
60
  CORSMiddleware,
57
61
  allow_origins=[
@@ -61,10 +65,9 @@ app.add_middleware(
61
65
  "http://127.0.0.1:8417",
62
66
  ],
63
67
  allow_credentials=True,
64
- allow_methods=["*"],
65
- allow_headers=["*"],
68
+ allow_methods=["GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"],
69
+ allow_headers=["Content-Type", "Authorization", "X-SLM-API-Key"],
66
70
  )
67
- app.add_middleware(GZipMiddleware, minimum_size=1000)
68
71
 
69
72
  # Rate limiting (v2.6)
70
73
  try: