superlocalmemory 3.6.8__tar.gz → 3.6.9__tar.gz

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 (528) hide show
  1. {superlocalmemory-3.6.8/src/superlocalmemory.egg-info → superlocalmemory-3.6.9}/PKG-INFO +1 -1
  2. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/pyproject.toml +1 -1
  3. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/__init__.py +1 -1
  4. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/cli/daemon.py +25 -3
  5. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/config.py +28 -0
  6. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/engine.py +15 -4
  7. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/health_monitor.py +32 -9
  8. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/mcp/tools_active.py +40 -4
  9. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/mcp/tools_core.py +6 -2
  10. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/mcp/tools_mesh.py +37 -38
  11. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/retrieval/spreading_activation.py +8 -3
  12. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/unified_daemon.py +42 -6
  13. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9/src/superlocalmemory.egg-info}/PKG-INFO +1 -1
  14. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/AUTHORS.md +0 -0
  15. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/LICENSE +0 -0
  16. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/NOTICE +0 -0
  17. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/README.md +0 -0
  18. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/setup.cfg +0 -0
  19. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/attribution/__init__.py +0 -0
  20. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/attribution/mathematical_dna.py +0 -0
  21. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/attribution/signer.py +0 -0
  22. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/attribution/watermark.py +0 -0
  23. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/cli/__init__.py +0 -0
  24. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/cli/cache_cmd.py +0 -0
  25. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/cli/commands.py +0 -0
  26. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/cli/compress_cmd.py +0 -0
  27. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/cli/context_commands.py +0 -0
  28. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/cli/db_migrate.py +0 -0
  29. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/cli/doctor_cmd.py +0 -0
  30. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/cli/escape_hatch.py +0 -0
  31. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/cli/help_cmd.py +0 -0
  32. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/cli/ingest_cmd.py +0 -0
  33. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/cli/json_output.py +0 -0
  34. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/cli/main.py +0 -0
  35. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/cli/migrate_cmd.py +0 -0
  36. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/cli/optimize_cmd.py +0 -0
  37. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/cli/optimize_constants.py +0 -0
  38. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/cli/pending_store.py +0 -0
  39. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/cli/post_install.py +0 -0
  40. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/cli/proxy_cmd.py +0 -0
  41. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/cli/service_installer.py +0 -0
  42. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/cli/setup_wizard.py +0 -0
  43. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/cli/version_banner.py +0 -0
  44. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/cli/wizard_v3426_options.py +0 -0
  45. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/code_graph/__init__.py +0 -0
  46. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/code_graph/blast_radius.py +0 -0
  47. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/code_graph/bridge/__init__.py +0 -0
  48. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/code_graph/bridge/entity_resolver.py +0 -0
  49. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/code_graph/bridge/event_listeners.py +0 -0
  50. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/code_graph/bridge/fact_enricher.py +0 -0
  51. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/code_graph/bridge/hebbian_linker.py +0 -0
  52. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/code_graph/bridge/temporal_checker.py +0 -0
  53. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/code_graph/changes.py +0 -0
  54. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/code_graph/communities.py +0 -0
  55. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/code_graph/config.py +0 -0
  56. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/code_graph/database.py +0 -0
  57. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/code_graph/extractors/__init__.py +0 -0
  58. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/code_graph/extractors/python.py +0 -0
  59. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/code_graph/extractors/typescript.py +0 -0
  60. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/code_graph/flows.py +0 -0
  61. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/code_graph/git_hooks.py +0 -0
  62. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/code_graph/graph_engine.py +0 -0
  63. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/code_graph/graph_store.py +0 -0
  64. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/code_graph/incremental.py +0 -0
  65. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/code_graph/models.py +0 -0
  66. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/code_graph/parser.py +0 -0
  67. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/code_graph/resolver.py +0 -0
  68. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/code_graph/search.py +0 -0
  69. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/code_graph/service.py +0 -0
  70. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/code_graph/watcher.py +0 -0
  71. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/compliance/__init__.py +0 -0
  72. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/compliance/abac.py +0 -0
  73. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/compliance/audit.py +0 -0
  74. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/compliance/eu_ai_act.py +0 -0
  75. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/compliance/gdpr.py +0 -0
  76. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/compliance/lifecycle.py +0 -0
  77. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/compliance/retention.py +0 -0
  78. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/compliance/scheduler.py +0 -0
  79. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/__init__.py +0 -0
  80. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/backend_orchestrator.py +0 -0
  81. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/block_hygiene.py +0 -0
  82. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/clock_monitor.py +0 -0
  83. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/consolidation_engine.py +0 -0
  84. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/context_cache.py +0 -0
  85. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/db_pool.py +0 -0
  86. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/embedding_worker.py +0 -0
  87. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/embeddings.py +0 -0
  88. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/engine_capabilities.py +0 -0
  89. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/engine_lock.py +0 -0
  90. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/engine_wiring.py +0 -0
  91. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/error_catalog.py +0 -0
  92. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/error_envelope.py +0 -0
  93. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/fact_consolidator.py +0 -0
  94. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/file_lock.py +0 -0
  95. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/graph_analyzer.py +0 -0
  96. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/graph_pruner.py +0 -0
  97. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/hooks.py +0 -0
  98. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/ingest_gate.py +0 -0
  99. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/injection.py +0 -0
  100. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/loop_watchdog.py +0 -0
  101. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/maintenance.py +0 -0
  102. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/maintenance_scheduler.py +0 -0
  103. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/mcp_embedder_proxy.py +0 -0
  104. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/modes.py +0 -0
  105. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/ollama_embedder.py +0 -0
  106. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/platform_utils.py +0 -0
  107. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/priority_queue.py +0 -0
  108. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/profiles.py +0 -0
  109. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/pruning_engine.py +0 -0
  110. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/queue_consumer.py +0 -0
  111. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/queue_dispatcher.py +0 -0
  112. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/ram_lock.py +0 -0
  113. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/rate_limit.py +0 -0
  114. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/recall_gate.py +0 -0
  115. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/recall_pipeline.py +0 -0
  116. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/recall_queue.py +0 -0
  117. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/recall_worker.py +0 -0
  118. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/registry.py +0 -0
  119. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/reranker_worker.py +0 -0
  120. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/safe_fs.py +0 -0
  121. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/security_primitives.py +0 -0
  122. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/shadow_router.py +0 -0
  123. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/slm_disabled.py +0 -0
  124. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/slmignore.py +0 -0
  125. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/store_pipeline.py +0 -0
  126. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/summarizer.py +0 -0
  127. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/tier_manager.py +0 -0
  128. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/topic_signature.py +0 -0
  129. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/core/worker_pool.py +0 -0
  130. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/dynamics/__init__.py +0 -0
  131. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/dynamics/activation_guided_quantization.py +0 -0
  132. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/dynamics/eap_scheduler.py +0 -0
  133. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/dynamics/ebbinghaus_langevin_coupling.py +0 -0
  134. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/dynamics/fisher_langevin_coupling.py +0 -0
  135. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/encoding/__init__.py +0 -0
  136. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/encoding/auto_linker.py +0 -0
  137. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/encoding/cognitive_consolidator.py +0 -0
  138. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/encoding/consolidator.py +0 -0
  139. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/encoding/context_generator.py +0 -0
  140. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/encoding/emotional.py +0 -0
  141. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/encoding/entity_resolver.py +0 -0
  142. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/encoding/entropy_gate.py +0 -0
  143. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/encoding/fact_extractor.py +0 -0
  144. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/encoding/foresight.py +0 -0
  145. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/encoding/graph_builder.py +0 -0
  146. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/encoding/observation_builder.py +0 -0
  147. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/encoding/scene_builder.py +0 -0
  148. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/encoding/signal_inference.py +0 -0
  149. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/encoding/temporal_parser.py +0 -0
  150. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/encoding/temporal_validator.py +0 -0
  151. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/encoding/type_router.py +0 -0
  152. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/evolution/__init__.py +0 -0
  153. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/evolution/blind_verifier.py +0 -0
  154. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/evolution/budget.py +0 -0
  155. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/evolution/evolution_store.py +0 -0
  156. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/evolution/llm_dispatch.py +0 -0
  157. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/evolution/mutation_generator.py +0 -0
  158. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/evolution/skill_evolver.py +0 -0
  159. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/evolution/triggers.py +0 -0
  160. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/evolution/types.py +0 -0
  161. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/graph/__init__.py +0 -0
  162. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/graph/cozo_backend.py +0 -0
  163. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/hooks/__init__.py +0 -0
  164. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/hooks/_outcome_common.py +0 -0
  165. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/hooks/adapter_base.py +0 -0
  166. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/hooks/antigravity_adapter.py +0 -0
  167. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/hooks/auto_capture.py +0 -0
  168. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/hooks/auto_invoker.py +0 -0
  169. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/hooks/auto_parameterize.py +0 -0
  170. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/hooks/auto_recall.py +0 -0
  171. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/hooks/auto_recall_hook.py +0 -0
  172. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/hooks/before_web_hook.py +0 -0
  173. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/hooks/claude_code_hooks.py +0 -0
  174. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/hooks/context_payload.py +0 -0
  175. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/hooks/copilot_adapter.py +0 -0
  176. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/hooks/cross_platform_connector.py +0 -0
  177. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/hooks/cursor_adapter.py +0 -0
  178. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/hooks/hook_daemon.py +0 -0
  179. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/hooks/hook_handlers.py +0 -0
  180. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/hooks/ide_connector.py +0 -0
  181. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/hooks/post_tool_async_hook.py +0 -0
  182. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/hooks/post_tool_outcome_hook.py +0 -0
  183. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/hooks/prewarm_auth.py +0 -0
  184. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/hooks/rules_engine.py +0 -0
  185. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/hooks/session_registry.py +0 -0
  186. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/hooks/stop_outcome_hook.py +0 -0
  187. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/hooks/sync_loop.py +0 -0
  188. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/hooks/topic_shift_hook.py +0 -0
  189. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/hooks/user_prompt_hook.py +0 -0
  190. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/hooks/user_prompt_rehash_hook.py +0 -0
  191. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/infra/__init__.py +0 -0
  192. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/infra/auth_middleware.py +0 -0
  193. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/infra/backup.py +0 -0
  194. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/infra/cache_manager.py +0 -0
  195. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/infra/cloud_backup.py +0 -0
  196. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/infra/event_bus.py +0 -0
  197. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/infra/heartbeat_monitor.py +0 -0
  198. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/infra/pid_manager.py +0 -0
  199. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/infra/process_reaper.py +0 -0
  200. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/infra/rate_limiter.py +0 -0
  201. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/infra/webhook_dispatcher.py +0 -0
  202. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ingestion/__init__.py +0 -0
  203. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ingestion/adapter_manager.py +0 -0
  204. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ingestion/base_adapter.py +0 -0
  205. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ingestion/calendar_adapter.py +0 -0
  206. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ingestion/credentials.py +0 -0
  207. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ingestion/gmail_adapter.py +0 -0
  208. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ingestion/parsers.py +0 -0
  209. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ingestion/transcript_adapter.py +0 -0
  210. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/__init__.py +0 -0
  211. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/adaptive.py +0 -0
  212. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/arm_catalog.py +0 -0
  213. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/assertion_miner.py +0 -0
  214. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/bandit.py +0 -0
  215. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/bandit_cache.py +0 -0
  216. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/behavioral.py +0 -0
  217. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/behavioral_listener.py +0 -0
  218. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/bootstrap.py +0 -0
  219. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/consolidation_cycle.py +0 -0
  220. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/consolidation_quantization_worker.py +0 -0
  221. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/consolidation_worker.py +0 -0
  222. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/cross_project.py +0 -0
  223. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/database.py +0 -0
  224. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/dedup_hnsw.py +0 -0
  225. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/engagement.py +0 -0
  226. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/ensemble.py +0 -0
  227. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/entity_compiler.py +0 -0
  228. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/fact_outcome_joins.py +0 -0
  229. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/features.py +0 -0
  230. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/feedback.py +0 -0
  231. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/forgetting_scheduler.py +0 -0
  232. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/hnsw_dedup.py +0 -0
  233. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/labeler.py +0 -0
  234. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/legacy_migration.py +0 -0
  235. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/lightgbm_subprocess.py +0 -0
  236. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/memory_merge.py +0 -0
  237. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/model_cache.py +0 -0
  238. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/model_rollback.py +0 -0
  239. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/outcome_queue.py +0 -0
  240. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/outcomes.py +0 -0
  241. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/pattern_miner.py +0 -0
  242. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/pattern_miner_constants.py +0 -0
  243. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/project_context.py +0 -0
  244. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/quantization_scheduler.py +0 -0
  245. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/ranker.py +0 -0
  246. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/ranker_common.py +0 -0
  247. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/ranker_retrain_legacy.py +0 -0
  248. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/ranker_retrain_online.py +0 -0
  249. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/reward.py +0 -0
  250. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/reward_archive.py +0 -0
  251. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/reward_boost.py +0 -0
  252. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/reward_proxy.py +0 -0
  253. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/shadow_test.py +0 -0
  254. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/signal_worker.py +0 -0
  255. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/signals.py +0 -0
  256. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/skill_performance_miner.py +0 -0
  257. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/source_quality.py +0 -0
  258. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/trigram_index.py +0 -0
  259. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/learning/workflows.py +0 -0
  260. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/llm/__init__.py +0 -0
  261. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/llm/backbone.py +0 -0
  262. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/math/__init__.py +0 -0
  263. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/math/ebbinghaus.py +0 -0
  264. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/math/fisher.py +0 -0
  265. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/math/fisher_quantized.py +0 -0
  266. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/math/hopfield.py +0 -0
  267. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/math/langevin.py +0 -0
  268. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/math/polar_quant.py +0 -0
  269. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/math/qjl.py +0 -0
  270. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/math/sheaf.py +0 -0
  271. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/math/turbo_quant.py +0 -0
  272. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/mcp/__init__.py +0 -0
  273. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/mcp/_daemon_proxy.py +0 -0
  274. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/mcp/_pool_adapter.py +0 -0
  275. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/mcp/_stdin_guard.py +0 -0
  276. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/mcp/resources.py +0 -0
  277. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/mcp/server.py +0 -0
  278. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/mcp/shared.py +0 -0
  279. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/mcp/tools.py +0 -0
  280. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/mcp/tools_code_graph.py +0 -0
  281. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/mcp/tools_context.py +0 -0
  282. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/mcp/tools_evolution.py +0 -0
  283. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/mcp/tools_learning.py +0 -0
  284. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/mcp/tools_v28.py +0 -0
  285. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/mcp/tools_v3.py +0 -0
  286. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/mcp/tools_v33.py +0 -0
  287. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/mesh/__init__.py +0 -0
  288. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/mesh/broker.py +0 -0
  289. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/mesh/remote_sync.py +0 -0
  290. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/migrations/__init__.py +0 -0
  291. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/migrations/v3_4_25_to_v3_4_26.py +0 -0
  292. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/__init__.py +0 -0
  293. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/adapters/__init__.py +0 -0
  294. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/adapters/_agent_registry.py +0 -0
  295. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/adapters/anthropic_adapter.py +0 -0
  296. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/adapters/openai_adapter.py +0 -0
  297. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/adapters/wrap.py +0 -0
  298. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/cache/__init__.py +0 -0
  299. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/cache/boundary_store.py +0 -0
  300. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/cache/centroid_store.py +0 -0
  301. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/cache/context_key.py +0 -0
  302. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/cache/exact.py +0 -0
  303. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/cache/invalidation.py +0 -0
  304. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/cache/key_builder.py +0 -0
  305. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/cache/manager.py +0 -0
  306. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/cache/semantic.py +0 -0
  307. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/cache/stampede.py +0 -0
  308. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/compress/__init__.py +0 -0
  309. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/compress/align.py +0 -0
  310. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/compress/ccr.py +0 -0
  311. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/compress/extractive_code.py +0 -0
  312. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/compress/extractive_json.py +0 -0
  313. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/compress/prose_llmlingua.py +0 -0
  314. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/compress/router.py +0 -0
  315. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/config/__init__.py +0 -0
  316. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/config/defaults.py +0 -0
  317. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/config/schema.py +0 -0
  318. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/config/store.py +0 -0
  319. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/metrics/__init__.py +0 -0
  320. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/metrics/counters.py +0 -0
  321. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/metrics/estimator.py +0 -0
  322. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/metrics/exporters.py +0 -0
  323. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/metrics/persistence.py +0 -0
  324. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/proxy/__init__.py +0 -0
  325. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/proxy/_helpers.py +0 -0
  326. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/proxy/anthropic_surface.py +0 -0
  327. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/proxy/gemini_surface.py +0 -0
  328. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/proxy/lifecycle.py +0 -0
  329. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/proxy/openai_surface.py +0 -0
  330. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/proxy/server.py +0 -0
  331. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/storage/__init__.py +0 -0
  332. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/storage/db.py +0 -0
  333. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/optimize/storage/schema.py +0 -0
  334. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/parameterization/__init__.py +0 -0
  335. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/parameterization/pattern_extractor.py +0 -0
  336. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/parameterization/pii_filter.py +0 -0
  337. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/parameterization/prompt_injector.py +0 -0
  338. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/parameterization/prompt_lifecycle.py +0 -0
  339. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/parameterization/soft_prompt_generator.py +0 -0
  340. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/retrieval/__init__.py +0 -0
  341. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/retrieval/agentic.py +0 -0
  342. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/retrieval/ann_index.py +0 -0
  343. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/retrieval/bm25_channel.py +0 -0
  344. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/retrieval/bridge_discovery.py +0 -0
  345. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/retrieval/channel_registry.py +0 -0
  346. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/retrieval/engine.py +0 -0
  347. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/retrieval/entity_channel.py +0 -0
  348. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/retrieval/forgetting_filter.py +0 -0
  349. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/retrieval/fusion.py +0 -0
  350. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/retrieval/hopfield_channel.py +0 -0
  351. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/retrieval/profile_channel.py +0 -0
  352. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/retrieval/quantization_aware_search.py +0 -0
  353. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/retrieval/reranker.py +0 -0
  354. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/retrieval/semantic_channel.py +0 -0
  355. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/retrieval/strategy.py +0 -0
  356. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/retrieval/temporal_channel.py +0 -0
  357. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/retrieval/vector_store.py +0 -0
  358. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/__init__.py +0 -0
  359. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/api.py +0 -0
  360. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/bandit_loops.py +0 -0
  361. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/middleware/__init__.py +0 -0
  362. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/middleware/security_headers.py +0 -0
  363. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/recall_health.py +0 -0
  364. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/recall_serializer.py +0 -0
  365. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/routes/__init__.py +0 -0
  366. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/routes/adapters.py +0 -0
  367. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/routes/agents.py +0 -0
  368. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/routes/backup.py +0 -0
  369. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/routes/behavioral.py +0 -0
  370. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/routes/brain.py +0 -0
  371. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/routes/chat.py +0 -0
  372. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/routes/compliance.py +0 -0
  373. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/routes/data_io.py +0 -0
  374. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/routes/entity.py +0 -0
  375. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/routes/events.py +0 -0
  376. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/routes/evolution.py +0 -0
  377. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/routes/helpers.py +0 -0
  378. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/routes/ingest.py +0 -0
  379. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/routes/insights.py +0 -0
  380. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/routes/learning.py +0 -0
  381. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/routes/lifecycle.py +0 -0
  382. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/routes/memories.py +0 -0
  383. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/routes/mesh.py +0 -0
  384. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/routes/optimize.py +0 -0
  385. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/routes/prewarm.py +0 -0
  386. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/routes/profiles.py +0 -0
  387. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/routes/stats.py +0 -0
  388. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/routes/tiers.py +0 -0
  389. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/routes/timeline.py +0 -0
  390. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/routes/token.py +0 -0
  391. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/routes/v3_api.py +0 -0
  392. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/routes/ws.py +0 -0
  393. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/security_middleware.py +0 -0
  394. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/server/ui.py +0 -0
  395. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/skills/slm-build-graph/SKILL.md +0 -0
  396. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/skills/slm-list-recent/SKILL.md +0 -0
  397. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/skills/slm-recall/SKILL.md +0 -0
  398. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/skills/slm-remember/SKILL.md +0 -0
  399. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/skills/slm-show-patterns/SKILL.md +0 -0
  400. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/skills/slm-status/SKILL.md +0 -0
  401. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/skills/slm-switch-profile/SKILL.md +0 -0
  402. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/__init__.py +0 -0
  403. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/access_control.py +0 -0
  404. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/access_log.py +0 -0
  405. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/database.py +0 -0
  406. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/embedding_migrator.py +0 -0
  407. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/migration_runner.py +0 -0
  408. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/migration_v33.py +0 -0
  409. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/migrations/M001_add_signal_features_columns.py +0 -0
  410. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/migrations/M002_model_state_history.py +0 -0
  411. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/migrations/M003_migration_log.py +0 -0
  412. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/migrations/M004_cross_platform_sync_log.py +0 -0
  413. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/migrations/M005_bandit_tables.py +0 -0
  414. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/migrations/M006_action_outcomes_reward.py +0 -0
  415. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/migrations/M007_pending_outcomes.py +0 -0
  416. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/migrations/M009_model_lineage.py +0 -0
  417. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/migrations/M010_evolution_config.py +0 -0
  418. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/migrations/M011_archive_and_merge.py +0 -0
  419. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/migrations/M012_shadow_observations.py +0 -0
  420. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/migrations/M013_bi_temporal_columns.py +0 -0
  421. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/migrations/M014_v345_scale_ready.py +0 -0
  422. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/migrations/M015_add_pinned_column.py +0 -0
  423. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/migrations/__init__.py +0 -0
  424. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/migrations.py +0 -0
  425. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/models.py +0 -0
  426. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/quantized_store.py +0 -0
  427. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/schema.py +0 -0
  428. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/schema_code_graph.py +0 -0
  429. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/schema_v32.py +0 -0
  430. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/schema_v3410.py +0 -0
  431. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/schema_v3411.py +0 -0
  432. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/schema_v343.py +0 -0
  433. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/schema_v345.py +0 -0
  434. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/schema_v347.py +0 -0
  435. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/storage/v2_migrator.py +0 -0
  436. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/trust/__init__.py +0 -0
  437. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/trust/gate.py +0 -0
  438. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/trust/provenance.py +0 -0
  439. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/trust/scorer.py +0 -0
  440. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/trust/signals.py +0 -0
  441. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/css/brain.css +0 -0
  442. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/css/legacy-dashboard.css +0 -0
  443. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/css/neural-glass.css +0 -0
  444. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/index.html +0 -0
  445. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/agents.js +0 -0
  446. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/auto-settings.js +0 -0
  447. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/brain.js +0 -0
  448. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/clusters.js +0 -0
  449. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/compliance.js +0 -0
  450. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/core.js +0 -0
  451. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/dashboard.js +0 -0
  452. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/events.js +0 -0
  453. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/fact-detail.js +0 -0
  454. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/feedback.js +0 -0
  455. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/graph-event-bus.js +0 -0
  456. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/graph-filters.js +0 -0
  457. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/graph-ui.js +0 -0
  458. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/ide-status.js +0 -0
  459. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/init.js +0 -0
  460. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/knowledge-graph.js +0 -0
  461. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/lifecycle.js +0 -0
  462. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/math-health.js +0 -0
  463. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/memories.js +0 -0
  464. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/memory-chat.js +0 -0
  465. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/memory-timeline.js +0 -0
  466. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/modal.js +0 -0
  467. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/ng-entities.js +0 -0
  468. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/ng-health.js +0 -0
  469. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/ng-ingestion.js +0 -0
  470. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/ng-mesh.js +0 -0
  471. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/ng-shell.js +0 -0
  472. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/ng-skills.js +0 -0
  473. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/optimize.js +0 -0
  474. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/profiles.js +0 -0
  475. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/quick-actions.js +0 -0
  476. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/recall-lab.js +0 -0
  477. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/search.js +0 -0
  478. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/settings.js +0 -0
  479. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/timeline.js +0 -0
  480. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/js/trust-dashboard.js +0 -0
  481. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/vendor/bootstrap-icons/bootstrap-icons.css +0 -0
  482. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff +0 -0
  483. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff2 +0 -0
  484. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/vendor/bootstrap.bundle.min.js +0 -0
  485. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/vendor/bootstrap.min.css +0 -0
  486. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/vendor/d3.v7.min.js +0 -0
  487. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/vendor/graphology-library.min.js +0 -0
  488. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/vendor/graphology.umd.min.js +0 -0
  489. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/vendor/inter-ui/inter-variable.min.css +0 -0
  490. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable-Italic.woff2 +0 -0
  491. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable.woff2 +0 -0
  492. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/ui/vendor/sigma.min.js +0 -0
  493. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/vector/__init__.py +0 -0
  494. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory/vector/lancedb_backend.py +0 -0
  495. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory.egg-info/SOURCES.txt +0 -0
  496. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory.egg-info/dependency_links.txt +0 -0
  497. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory.egg-info/entry_points.txt +0 -0
  498. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory.egg-info/requires.txt +0 -0
  499. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/src/superlocalmemory.egg-info/top_level.txt +0 -0
  500. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/tests/test_auto_hooks.py +0 -0
  501. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/tests/test_before_web_hook.py +0 -0
  502. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/tests/test_behavioral_full.py +0 -0
  503. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/tests/test_claude_hooks.py +0 -0
  504. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/tests/test_cli_core.py +0 -0
  505. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/tests/test_cli_json.py +0 -0
  506. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/tests/test_cli_v33.py +0 -0
  507. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/tests/test_compliance_full.py +0 -0
  508. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/tests/test_config_system.py +0 -0
  509. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/tests/test_engine_hooks.py +0 -0
  510. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/tests/test_event_bus.py +0 -0
  511. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/tests/test_features.py +0 -0
  512. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/tests/test_final_locomo_mini.py +0 -0
  513. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/tests/test_graph_integrity.py +0 -0
  514. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/tests/test_hook_handlers.py +0 -0
  515. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/tests/test_ide_connector.py +0 -0
  516. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/tests/test_infra.py +0 -0
  517. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/tests/test_injection.py +0 -0
  518. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/tests/test_learning_advanced.py +0 -0
  519. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/tests/test_learning_collectors.py +0 -0
  520. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/tests/test_llm_provider.py +0 -0
  521. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/tests/test_mcp_server.py +0 -0
  522. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/tests/test_migration.py +0 -0
  523. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/tests/test_mode_switch_preservation.py +0 -0
  524. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/tests/test_post_install.py +0 -0
  525. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/tests/test_ranker.py +0 -0
  526. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/tests/test_topic_shift_hook.py +0 -0
  527. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/tests/test_trust_full.py +0 -0
  528. {superlocalmemory-3.6.8 → superlocalmemory-3.6.9}/tests/test_v3_api.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: superlocalmemory
3
- Version: 3.6.8
3
+ Version: 3.6.9
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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "superlocalmemory"
3
- version = "3.6.8"
3
+ version = "3.6.9"
4
4
  description = "Information-geometric agent memory with mathematical guarantees"
5
5
  readme = "README.md"
6
6
  license = {text = "AGPL-3.0-or-later"}
@@ -28,7 +28,7 @@ if "OMP_NUM_THREADS" not in os.environ:
28
28
  os.environ["OMP_NUM_THREADS"] = "2"
29
29
  # ---------------------------------------------------------------------------
30
30
 
31
- __version__ = "3.6.8"
31
+ __version__ = "3.6.9"
32
32
 
33
33
  _REQUIRED_VERSIONS = {
34
34
  "sentence_transformers": "5.3.0",
@@ -34,7 +34,10 @@ from threading import Thread
34
34
 
35
35
  logger = logging.getLogger(__name__)
36
36
 
37
- _DEFAULT_PORT = 8765 # v3.4.3: unified daemon on 8765 (was 8767)
37
+ try:
38
+ _DEFAULT_PORT = int(os.environ.get("SLM_DAEMON_PORT", "") or 8765)
39
+ except ValueError:
40
+ _DEFAULT_PORT = 8765
38
41
  _LEGACY_PORT = 8767 # backward-compat redirect
39
42
  _DEFAULT_IDLE_TIMEOUT = 0 # v3.4.3: 24/7 default (was 1800)
40
43
  _PID_FILE = Path.home() / ".superlocalmemory" / "daemon.pid"
@@ -160,7 +163,13 @@ def _start_daemon_subprocess() -> bool:
160
163
  return True
161
164
 
162
165
  import subprocess
163
- cmd = [sys.executable, "-m", "superlocalmemory.server.unified_daemon", "--start"]
166
+ # v3.6.9 (#33): pass SLM_DAEMON_PORT as explicit --port= so the daemon
167
+ # binds the right port even when the env var reaches the subprocess.
168
+ _target_port = _DEFAULT_PORT
169
+ cmd = [
170
+ sys.executable, "-m", "superlocalmemory.server.unified_daemon",
171
+ "--start", f"--port={_target_port}",
172
+ ]
164
173
  log_dir = Path.home() / ".superlocalmemory" / "logs"
165
174
  log_dir.mkdir(parents=True, exist_ok=True)
166
175
  log_file = log_dir / "daemon.log"
@@ -187,7 +196,7 @@ def _start_daemon_subprocess() -> bool:
187
196
 
188
197
  # Write PID immediately so other callers see it during warmup
189
198
  _PID_FILE.write_text(str(proc.pid))
190
- _PORT_FILE.write_text(str(_DEFAULT_PORT))
199
+ _PORT_FILE.write_text(str(_target_port))
191
200
 
192
201
  return _wait_for_daemon(timeout=60)
193
202
 
@@ -237,6 +246,19 @@ def ensure_daemon() -> bool:
237
246
  if is_daemon_running():
238
247
  return True
239
248
 
249
+ # v3.6.9 (#36): TCP-level check catches a systemd-started daemon that
250
+ # has bound the port but hasn't written a PID file yet (e.g. different
251
+ # HOME for the service user vs. the SSH user). If the port is already
252
+ # bound, don't start a second daemon — wait for HTTP readiness instead.
253
+ try:
254
+ import socket as _socket
255
+ with _socket.socket(_socket.AF_INET, _socket.SOCK_STREAM) as _s:
256
+ _s.settimeout(1)
257
+ if _s.connect_ex(("127.0.0.1", _DEFAULT_PORT)) == 0:
258
+ return _wait_for_daemon(timeout=30)
259
+ except Exception:
260
+ pass
261
+
240
262
  # Start unified daemon in background — delegated to helper so the
241
263
  # same logic can be reused by callers that already hold the lock.
242
264
  return _start_daemon_subprocess()
@@ -654,6 +654,25 @@ class AutoInvokeConfig:
654
654
  relevance_threshold: float = 0.3 # Legacy compat with AutoRecall
655
655
 
656
656
 
657
+ # ---------------------------------------------------------------------------
658
+ # Health Config (v3.6.9 BUG-A)
659
+ # ---------------------------------------------------------------------------
660
+
661
+ @dataclass
662
+ class HealthConfig:
663
+ """Health-monitor tuning knobs.
664
+
665
+ All values have safe defaults so an empty ``"health": {}`` JSON section
666
+ silently inherits them. The ``global_rss_budget_mb`` default is computed
667
+ at runtime (40% of physical RAM, floor 2500 MB) so low-RAM boxes keep the
668
+ old behaviour while large machines are never accidentally throttled.
669
+ """
670
+ global_rss_budget_mb: int = 0 # 0 = compute at runtime (40% RAM, floor 2500)
671
+ heartbeat_timeout_sec: int = 60
672
+ health_check_interval_sec: int = 15
673
+ enable_structured_logging: bool = True
674
+
675
+
657
676
  # ---------------------------------------------------------------------------
658
677
  # Master Config
659
678
  # ---------------------------------------------------------------------------
@@ -698,6 +717,7 @@ class SLMConfig:
698
717
  graph_backend: str = "auto" # "auto" = cozo if pycozo installed, else sqlite
699
718
  vector_backend: str = "auto" # "auto" = lancedb if installed, else sqlite-vec
700
719
  evolution: EvolutionConfig = field(default_factory=EvolutionConfig)
720
+ health: HealthConfig = field(default_factory=HealthConfig)
701
721
 
702
722
  # v3.4.3: Daemon configuration
703
723
  daemon_idle_timeout: int = 0 # 0 = 24/7 (no auto-kill). >0 = seconds before auto-kill.
@@ -789,6 +809,14 @@ class SLMConfig:
789
809
  if k in EvolutionConfig.__dataclass_fields__
790
810
  })
791
811
 
812
+ # V3.6.9: Health monitor config (BUG-A — previously silently ignored)
813
+ hlth = data.get("health", {})
814
+ if hlth:
815
+ config.health = HealthConfig(**{
816
+ k: v for k, v in hlth.items()
817
+ if k in HealthConfig.__dataclass_fields__
818
+ })
819
+
792
820
  # V3.4.65: Injection config (additive — defaults if missing from JSON)
793
821
  inj = data.get("injection", {}) or {}
794
822
  config.injection = InjectionConfig(
@@ -452,7 +452,9 @@ class MemoryEngine:
452
452
  now = datetime.now(timezone.utc).isoformat()
453
453
  record = MemoryRecord(
454
454
  profile_id=self._profile_id, content=content,
455
- session_date=now[:10], metadata=metadata or {},
455
+ session_date=now[:10],
456
+ session_id=(metadata or {}).get("session_id", ""),
457
+ metadata=metadata or {},
456
458
  )
457
459
  self._db.store_memory(record)
458
460
  # Lightweight regex entities (matches store_pipeline verbatim path) so
@@ -520,13 +522,22 @@ class MemoryEngine:
520
522
  on a background worker.
521
523
 
522
524
  V3.4.40 (2026-05-09): ``fast=True`` skips the SpreadingActivation
523
- 5th channel for sub-second response. The other 4 channels still
524
- run. Use when recall must complete before another tool call (e.g.
525
- agent recall before WebSearch).
525
+ channel. Deprecated in v3.6.9 SA now completes in ~36ms after the
526
+ neighbor-cache fix; fast=True is slower than fast=False and reduces
527
+ recall quality. The parameter is accepted for backward compatibility
528
+ but is silently treated as False.
526
529
  """
527
530
  self._require_full("recall")
528
531
  self._ensure_init()
529
532
 
533
+ if fast:
534
+ logger.warning(
535
+ "fast=True is deprecated (v3.6.9): SpreadingActivation now "
536
+ "completes in ~36ms; fast mode is slower and reduces quality. "
537
+ "Pass fast=False (the default) to silence this warning."
538
+ )
539
+ fast = False
540
+
530
541
  pid = profile_id or self._profile_id
531
542
 
532
543
  from superlocalmemory.core.recall_pipeline import run_recall
@@ -130,14 +130,26 @@ class HealthMonitor:
130
130
  "superlocalmemory.core.reranker_worker",
131
131
  "superlocalmemory.core.recall_worker",
132
132
  )
133
+ # Workers that are LOAD-BEARING for recall quality — never kill these
134
+ # first; prefer killing the reranker (gracefully degrades) or GC instead.
135
+ _EMBEDDING_IDENTIFIER = "superlocalmemory.core.embedding_worker"
133
136
 
134
137
  def __init__(
135
138
  self,
136
- global_rss_budget_mb: int = 2500,
139
+ global_rss_budget_mb: int = 0,
137
140
  heartbeat_timeout_sec: int = 60,
138
141
  check_interval_sec: int = 15,
139
142
  enable_structured_logging: bool = True,
140
143
  ):
144
+ # Compute RAM-scaled default when 0 is passed (or when the caller
145
+ # explicitly passes 0 meaning "auto"). Floor at 2500 so low-RAM boxes
146
+ # keep the old conservative behaviour.
147
+ if global_rss_budget_mb <= 0:
148
+ if PSUTIL_AVAILABLE:
149
+ phys_mb = psutil.virtual_memory().total // (1024 * 1024)
150
+ global_rss_budget_mb = max(2500, int(phys_mb * 0.40))
151
+ else:
152
+ global_rss_budget_mb = 8000 # safe fallback when psutil absent
141
153
  self._budget_mb = global_rss_budget_mb
142
154
  self._heartbeat_timeout = heartbeat_timeout_sec
143
155
  self._interval = check_interval_sec
@@ -207,7 +219,7 @@ class HealthMonitor:
207
219
  slm_workers.append({
208
220
  "pid": child.pid,
209
221
  "rss_mb": round(rss_mb, 1),
210
- "cmdline": cmdline[:80],
222
+ "cmdline": cmdline[:200],
211
223
  })
212
224
  except (psutil.NoSuchProcess, psutil.AccessDenied):
213
225
  continue
@@ -225,22 +237,33 @@ class HealthMonitor:
225
237
  budget_mb=self._budget_mb,
226
238
  )
227
239
 
228
- # RSS budget enforcement
240
+ # RSS budget enforcement — spare the embedding worker (load-bearing for
241
+ # recall quality). Kill the reranker first (degrades gracefully); only
242
+ # fall back to the embedder if it is the only worker remaining.
229
243
  if total_rss_mb > self._budget_mb and slm_workers:
230
- heaviest = max(slm_workers, key=lambda w: w["rss_mb"])
244
+ non_embedder = [
245
+ w for w in slm_workers
246
+ if self._EMBEDDING_IDENTIFIER not in w["cmdline"]
247
+ ]
248
+ candidate = (
249
+ max(non_embedder, key=lambda w: w["rss_mb"])
250
+ if non_embedder
251
+ else max(slm_workers, key=lambda w: w["rss_mb"])
252
+ )
231
253
  logger.warning(
232
- "RSS budget exceeded (%.0fMB > %dMB). Killing heaviest worker PID %d (%.0fMB)",
233
- total_rss_mb, self._budget_mb, heaviest["pid"], heaviest["rss_mb"],
254
+ "RSS budget exceeded (%.0fMB > %dMB). Killing worker PID %d (%.0fMB)",
255
+ total_rss_mb, self._budget_mb, candidate["pid"], candidate["rss_mb"],
234
256
  )
235
257
  log_structured(
236
258
  level="warning",
237
259
  operation="rss_budget_kill",
238
- killed_pid=heaviest["pid"],
239
- killed_rss_mb=heaviest["rss_mb"],
260
+ killed_pid=candidate["pid"],
261
+ killed_rss_mb=candidate["rss_mb"],
240
262
  total_rss_mb=round(total_rss_mb, 1),
263
+ spared_embedder=bool(non_embedder),
241
264
  )
242
265
  try:
243
- psutil.Process(heaviest["pid"]).terminate()
266
+ psutil.Process(candidate["pid"]).terminate()
244
267
  except psutil.NoSuchProcess:
245
268
  pass
246
269
 
@@ -16,9 +16,12 @@ Part of Qualixar | Author: Varun Pratap Bhardwaj
16
16
 
17
17
  from __future__ import annotations
18
18
 
19
+ import asyncio
20
+ import datetime
19
21
  import logging
20
22
  import os
21
23
  import sqlite3
24
+ import uuid
22
25
  from pathlib import Path
23
26
  from typing import Callable
24
27
 
@@ -213,7 +216,13 @@ def register_active_tools(server, get_engine: Callable) -> None:
213
216
  from superlocalmemory.mcp._pool_adapter import PoolError
214
217
  degraded_mode = False
215
218
  try:
216
- response = pool_recall(search_query, limit=max_results, fast=False)
219
+ # v3.6.9-audit: pool_recall uses blocking urllib under the hood
220
+ # (DaemonPoolProxy.recall → urllib.urlopen). Must run in a
221
+ # thread so the async MCP event loop is not stalled — same
222
+ # fix class as #34 mesh tools deadlock.
223
+ response = await asyncio.to_thread(
224
+ pool_recall, search_query, limit=max_results, fast=False,
225
+ )
217
226
  except (PoolError, Exception) as exc:
218
227
  logger.warning(
219
228
  "session_init: daemon recall failed (%s) — using FTS5 emergency fallback. "
@@ -349,6 +358,13 @@ def register_active_tools(server, get_engine: Callable) -> None:
349
358
  "session_init feedback_count read failed: %s", exc,
350
359
  )
351
360
 
361
+ # v3.6.9 (#35): generate a stable session_id so clients can pass it
362
+ # to remember() and close_session() for proper session aggregation.
363
+ session_id = (
364
+ f"slm-{datetime.datetime.now(datetime.timezone.utc):%Y%m%d}"
365
+ f"-{uuid.uuid4().hex[:8]}"
366
+ )
367
+
352
368
  # Register agent + emit event (v3.4.39: SLM_AGENT_ID env support)
353
369
  agent_id = _get_agent_id()
354
370
  _register_agent(agent_id, pid)
@@ -360,6 +376,7 @@ def register_active_tools(server, get_engine: Callable) -> None:
360
376
 
361
377
  return {
362
378
  "success": True,
379
+ "session_id": session_id,
363
380
  "context": context,
364
381
  "memories": memories[:max_results],
365
382
  "memory_count": len(memories),
@@ -430,8 +447,11 @@ def register_active_tools(server, get_engine: Callable) -> None:
430
447
  "confidence": round(decision.confidence, 3),
431
448
  }
432
449
 
433
- # Auto-store via engine
434
- stored = auto.capture(
450
+ # Auto-store via engine.
451
+ # pool_store uses blocking urllib (DaemonPoolProxy) — run in
452
+ # thread so the MCP event loop stays unblocked (#34 class).
453
+ stored = await asyncio.to_thread(
454
+ auto.capture,
435
455
  content,
436
456
  category=decision.category,
437
457
  metadata={"agent_id": agent_id, "source": "auto-observe"},
@@ -525,8 +545,24 @@ def register_active_tools(server, get_engine: Callable) -> None:
525
545
  try:
526
546
  engine = get_engine()
527
547
  sid = session_id or getattr(engine, '_last_session_id', '')
548
+ # v3.6.9 (#35): _last_session_id was never assigned — fall back to
549
+ # querying the DB for the most recent session_id instead of silently
550
+ # returning summary_events_created: 0.
551
+ if not sid:
552
+ try:
553
+ db = getattr(engine, '_db', None) or getattr(engine, 'db', None)
554
+ if db and hasattr(db, 'execute'):
555
+ rows = db.execute(
556
+ "SELECT session_id FROM memories "
557
+ "WHERE session_id != '' ORDER BY created_at DESC LIMIT 1",
558
+ ()
559
+ )
560
+ if rows:
561
+ sid = str(rows[0][0])
562
+ except Exception:
563
+ pass
528
564
  if not sid:
529
- return {"success": False, "error": "No session_id provided"}
565
+ return {"success": False, "error": "No session_id provided or found"}
530
566
  count = engine.close_session(sid)
531
567
  return {
532
568
  "success": True,
@@ -122,9 +122,13 @@ def register_core_tools(server, get_engine: Callable) -> None:
122
122
  # recall window so a parallel/next agent finds memories saved seconds ago.
123
123
  # Falls back to pending.db only if the daemon is unreachable.
124
124
  try:
125
+ import asyncio as _asyncio
125
126
  from superlocalmemory.cli.daemon import daemon_request, is_daemon_running
126
- if is_daemon_running():
127
- resp = daemon_request("POST", "/remember", {
127
+ # is_daemon_running() and daemon_request() both use blocking urllib
128
+ # against the same uvicorn server — run in threads so the MCP
129
+ # event loop stays unblocked (#34 class bug).
130
+ if await _asyncio.to_thread(is_daemon_running):
131
+ resp = await _asyncio.to_thread(daemon_request, "POST", "/remember", {
128
132
  "content": content, "tags": tags, "metadata": meta,
129
133
  })
130
134
  if resp and (resp.get("fact_ids") is not None or resp.get("ok")):
@@ -16,6 +16,7 @@ Auto-heartbeat keeps the session alive as long as the MCP server is running.
16
16
 
17
17
  from __future__ import annotations
18
18
 
19
+ import asyncio
19
20
  import json
20
21
  import logging
21
22
  import os
@@ -141,20 +142,20 @@ def register_mesh_tools(server, get_engine: Callable) -> None:
141
142
  global _SESSION_SUMMARY
142
143
  _SESSION_SUMMARY = summary or "Active session"
143
144
 
144
- _ensure_registered()
145
+ await asyncio.to_thread(_ensure_registered)
145
146
 
146
147
  # Update summary
147
- result = _mesh_request("POST", "/summary", {
148
- "peer_id": _PEER_ID,
149
- "summary": _SESSION_SUMMARY,
150
- })
148
+ result = await asyncio.to_thread(
149
+ _mesh_request, "POST", "/summary",
150
+ {"peer_id": _PEER_ID, "summary": _SESSION_SUMMARY},
151
+ )
151
152
 
152
153
  return {
153
154
  "peer_id": _PEER_ID,
154
155
  "summary": _SESSION_SUMMARY,
155
156
  "project_path": _PROJECT_PATH,
156
- "registered": True,
157
- "heartbeat_active": _HEARTBEAT_THREAD is not None,
157
+ "registered": _REGISTERED,
158
+ "heartbeat_active": _HEARTBEAT_THREAD is not None and _HEARTBEAT_THREAD.is_alive(),
158
159
  "broker_response": result,
159
160
  }
160
161
 
@@ -165,8 +166,8 @@ def register_mesh_tools(server, get_engine: Callable) -> None:
165
166
  Shows other Claude Code, Cursor, or AI agent sessions that are
166
167
  connected to the same SLM mesh network.
167
168
  """
168
- _ensure_registered()
169
- result = _mesh_request("GET", "/peers")
169
+ await asyncio.to_thread(_ensure_registered)
170
+ result = await asyncio.to_thread(_mesh_request, "GET", "/peers")
170
171
  peers = (result or {}).get("peers", [])
171
172
  return {
172
173
  "peers": peers,
@@ -185,12 +186,11 @@ def register_mesh_tools(server, get_engine: Callable) -> None:
185
186
  - "project:/path/to/dir" (all sessions in that project directory)
186
187
  message: The message content (max 4KB — use file paths for large data)
187
188
  """
188
- _ensure_registered()
189
- result = _mesh_request("POST", "/send", {
190
- "from_peer": _PEER_ID,
191
- "to_peer": to,
192
- "content": message,
193
- })
189
+ await asyncio.to_thread(_ensure_registered)
190
+ result = await asyncio.to_thread(
191
+ _mesh_request, "POST", "/send",
192
+ {"from_peer": _PEER_ID, "to_peer": to, "content": message},
193
+ )
194
194
  return result or {"error": "Failed to send message"}
195
195
 
196
196
  @server.tool()
@@ -201,18 +201,19 @@ def register_mesh_tools(server, get_engine: Callable) -> None:
201
201
  Broadcast/project messages are delivered to ALL matching sessions.
202
202
  Messages auto-expire after 48 hours.
203
203
  """
204
- _ensure_registered()
204
+ await asyncio.to_thread(_ensure_registered)
205
205
  project = _PROJECT_PATH or _detect_project_path()
206
- messages = _mesh_request(
207
- "GET", f"/inbox/{_PEER_ID}?project_path={project}",
206
+ messages = await asyncio.to_thread(
207
+ _mesh_request, "GET", f"/inbox/{_PEER_ID}?project_path={project}",
208
208
  )
209
209
  msg_list = (messages or {}).get("messages", [])
210
210
  # Auto-mark unread messages as read
211
211
  unread_ids = [m["id"] for m in msg_list if not m.get("read")]
212
212
  if unread_ids:
213
- _mesh_request("POST", f"/inbox/{_PEER_ID}/read", {
214
- "message_ids": unread_ids,
215
- })
213
+ await asyncio.to_thread(
214
+ _mesh_request, "POST", f"/inbox/{_PEER_ID}/read",
215
+ {"message_ids": unread_ids},
216
+ )
216
217
  return {
217
218
  "messages": msg_list,
218
219
  "count": len(msg_list),
@@ -231,21 +232,20 @@ def register_mesh_tools(server, get_engine: Callable) -> None:
231
232
  value: Value to set (only for action="set")
232
233
  action: "get" (read all or one key), "set" (write a key)
233
234
  """
234
- _ensure_registered()
235
+ await asyncio.to_thread(_ensure_registered)
235
236
 
236
237
  if action == "set" and key:
237
- result = _mesh_request("POST", "/state", {
238
- "key": key,
239
- "value": value,
240
- "set_by": _PEER_ID,
241
- })
238
+ result = await asyncio.to_thread(
239
+ _mesh_request, "POST", "/state",
240
+ {"key": key, "value": value, "set_by": _PEER_ID},
241
+ )
242
242
  return result or {"error": "Failed to set state"}
243
243
 
244
244
  if key:
245
- result = _mesh_request("GET", f"/state/{key}")
245
+ result = await asyncio.to_thread(_mesh_request, "GET", f"/state/{key}")
246
246
  return result or {"key": key, "value": None}
247
247
 
248
- result = _mesh_request("GET", "/state")
248
+ result = await asyncio.to_thread(_mesh_request, "GET", "/state")
249
249
  return result or {"state": {}}
250
250
 
251
251
  @server.tool()
@@ -261,12 +261,11 @@ def register_mesh_tools(server, get_engine: Callable) -> None:
261
261
  file_path: Path to the file
262
262
  action: "query" (check lock), "acquire" (lock file), "release" (unlock)
263
263
  """
264
- _ensure_registered()
265
- result = _mesh_request("POST", "/lock", {
266
- "file_path": file_path,
267
- "action": action,
268
- "locked_by": _PEER_ID,
269
- })
264
+ await asyncio.to_thread(_ensure_registered)
265
+ result = await asyncio.to_thread(
266
+ _mesh_request, "POST", "/lock",
267
+ {"file_path": file_path, "action": action, "locked_by": _PEER_ID},
268
+ )
270
269
  return result or {"error": "Lock operation failed"}
271
270
 
272
271
  @server.tool(annotations=ToolAnnotations(readOnlyHint=True))
@@ -275,7 +274,7 @@ def register_mesh_tools(server, get_engine: Callable) -> None:
275
274
 
276
275
  Shows the activity log of the mesh network.
277
276
  """
278
- result = _mesh_request("GET", "/events")
277
+ result = await asyncio.to_thread(_mesh_request, "GET", "/events")
279
278
  return result or {"events": []}
280
279
 
281
280
  @server.tool(annotations=ToolAnnotations(readOnlyHint=True))
@@ -284,10 +283,10 @@ def register_mesh_tools(server, get_engine: Callable) -> None:
284
283
 
285
284
  Shows broker uptime, peer count, and connection status.
286
285
  """
287
- result = _mesh_request("GET", "/status")
286
+ result = await asyncio.to_thread(_mesh_request, "GET", "/status")
288
287
  if result:
289
288
  result["my_peer_id"] = _PEER_ID
290
- result["heartbeat_active"] = _HEARTBEAT_THREAD is not None
289
+ result["heartbeat_active"] = _HEARTBEAT_THREAD is not None and _HEARTBEAT_THREAD.is_alive()
291
290
  return result or {
292
291
  "broker_up": False,
293
292
  "error": "Cannot reach mesh broker. Is the daemon running? (slm serve start)",
@@ -170,8 +170,11 @@ class SpreadingActivation:
170
170
  for fact_id, similarity in seeds:
171
171
  activations[fact_id] = cfg.alpha * similarity
172
172
 
173
- # Precompute out-degrees for fan effect
173
+ # Cache neighbor lookups and out-degrees across iterations — same node
174
+ # often survives multiple rounds via self-retention (delta=0.5);
175
+ # caching here cuts ~80% of SQL queries vs per-iteration re-query.
174
176
  degree_cache: dict[str, int] = {}
177
+ neighbor_cache: dict[str, list] = {}
175
178
 
176
179
  # Steps 2-4, repeated T times
177
180
  for _iteration in range(cfg.max_iterations):
@@ -181,8 +184,10 @@ class SpreadingActivation:
181
184
  if activation < 0.001:
182
185
  continue
183
186
 
184
- # Get neighbors from BOTH tables (Rule 13)
185
- neighbors = self._get_unified_neighbors(node_id, profile_id)
187
+ # Get neighbors from BOTH tables (Rule 13) — cached per node
188
+ if node_id not in neighbor_cache:
189
+ neighbor_cache[node_id] = self._get_unified_neighbors(node_id, profile_id)
190
+ neighbors = neighbor_cache[node_id]
186
191
 
187
192
  # Out-degree for fan effect normalization
188
193
  if node_id not in degree_cache:
@@ -746,8 +746,12 @@ async def lifespan(application: FastAPI):
746
746
  try:
747
747
  from superlocalmemory.core.health_monitor import HealthMonitor
748
748
  health_config = getattr(config, 'health', None)
749
+ # v3.6.9 BUG-A: env override + RAM-scaled default (HealthMonitor computes
750
+ # 40% of physical RAM when budget=0). SLM_RSS_BUDGET_MB takes priority.
751
+ _env_budget = int(os.environ.get("SLM_RSS_BUDGET_MB", "0") or 0)
752
+ _cfg_budget = getattr(health_config, 'global_rss_budget_mb', 0) if health_config else 0
749
753
  monitor = HealthMonitor(
750
- global_rss_budget_mb=getattr(health_config, 'global_rss_budget_mb', 2500) if health_config else 2500,
754
+ global_rss_budget_mb=_env_budget or _cfg_budget or 0,
751
755
  heartbeat_timeout_sec=getattr(health_config, 'heartbeat_timeout_sec', 60) if health_config else 60,
752
756
  check_interval_sec=getattr(health_config, 'health_check_interval_sec', 15) if health_config else 15,
753
757
  enable_structured_logging=getattr(health_config, 'enable_structured_logging', True) if health_config else True,
@@ -881,12 +885,21 @@ async def lifespan(application: FastAPI):
881
885
  # lifespan every POST /mcp 500s with "Task group is not initialized."
882
886
  # AsyncExitStack enters the context only when _mcp_app was mounted; if the
883
887
  # mount failed (non-fatal) the daemon starts normally without HTTP MCP.
888
+ # v3.6.9 (#34): wrap the MCP lifespan in shield so an unhandled exception
889
+ # or tool-level cancellation inside a session manager task group cannot
890
+ # propagate out and trigger uvicorn's graceful-shutdown handler.
884
891
  async with AsyncExitStack() as _mcp_stack:
885
892
  if _mcp_app is not None:
886
- await _mcp_stack.enter_async_context(
887
- _mcp_app.router.lifespan_context(_mcp_app)
888
- )
889
- logger.info("MCP HTTP session manager started (Streamable-HTTP on /mcp)")
893
+ try:
894
+ await _mcp_stack.enter_async_context(
895
+ _mcp_app.router.lifespan_context(_mcp_app)
896
+ )
897
+ logger.info("MCP HTTP session manager started (Streamable-HTTP on /mcp)")
898
+ except Exception as _mcp_lifespan_exc:
899
+ logger.warning(
900
+ "MCP HTTP session manager failed to start (non-fatal, stdio still works): %s",
901
+ _mcp_lifespan_exc,
902
+ )
890
903
 
891
904
  yield
892
905
 
@@ -1210,6 +1223,27 @@ def create_app() -> FastAPI:
1210
1223
  from superlocalmemory.mcp.server import server as _mcp_fastmcp
1211
1224
  _mcp_fastmcp.settings.streamable_http_path = "/"
1212
1225
  _mcp_fastmcp._session_manager = None # Defensive reset for idempotency
1226
+ # v3.6.9 (#36): configure DNS-rebinding protection from env.
1227
+ # Default: localhost-only (safe). Set SLM_MCP_ALLOWED_HOSTS=192.168.x.y:*
1228
+ # (comma-separated, e.g. "192.168.50.144:*,slm.lan:*") to open to a LAN.
1229
+ # Use "*" to disable protection entirely (trusted private network only).
1230
+ # TransportSecuritySettings imported lazily here so that MCP mount
1231
+ # works on older SDK versions when SLM_MCP_ALLOWED_HOSTS is not set.
1232
+ _mcp_allowed = os.environ.get("SLM_MCP_ALLOWED_HOSTS", "").strip()
1233
+ if _mcp_allowed:
1234
+ from mcp.server.transport_security import TransportSecuritySettings
1235
+ if _mcp_allowed == "*":
1236
+ _mcp_fastmcp.settings.transport_security = TransportSecuritySettings(
1237
+ enable_dns_rebinding_protection=False,
1238
+ )
1239
+ else:
1240
+ _hosts = [h.strip() for h in _mcp_allowed.split(",") if h.strip()]
1241
+ _mcp_fastmcp.settings.transport_security = TransportSecuritySettings(
1242
+ enable_dns_rebinding_protection=True,
1243
+ allowed_hosts=_hosts,
1244
+ allowed_origins=[f"http://{h}" for h in _hosts],
1245
+ )
1246
+ logger.info("MCP transport security: allowed_hosts=%r", _mcp_allowed)
1213
1247
  global _mcp_app
1214
1248
  _mcp_app = _mcp_fastmcp.streamable_http_app()
1215
1249
  application.mount("/mcp", _mcp_app)
@@ -2222,7 +2256,9 @@ if __name__ == "__main__":
2222
2256
  # freshly-sized file.
2223
2257
  rotate_oversized_logs()
2224
2258
  logging.basicConfig(level=logging.INFO, format="%(asctime)s %(message)s")
2225
- port = _DEFAULT_PORT
2259
+ # v3.6.9 (#33): honour SLM_DAEMON_PORT env so operators can configure the
2260
+ # port without changing the launch command. --port= arg takes precedence.
2261
+ port = int(os.environ.get("SLM_DAEMON_PORT", "") or _DEFAULT_PORT)
2226
2262
  for arg in sys.argv:
2227
2263
  if arg.startswith("--port="):
2228
2264
  port = int(arg.split("=")[1])
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: superlocalmemory
3
- Version: 3.6.8
3
+ Version: 3.6.9
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