superlocalmemory 3.6.6__tar.gz → 3.6.8__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.6/src/superlocalmemory.egg-info → superlocalmemory-3.6.8}/PKG-INFO +57 -2
  2. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/README.md +56 -1
  3. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/pyproject.toml +1 -1
  4. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/__init__.py +1 -1
  5. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/mcp/server.py +19 -6
  6. superlocalmemory-3.6.8/src/superlocalmemory/server/recall_health.py +237 -0
  7. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/unified_daemon.py +87 -3
  8. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8/src/superlocalmemory.egg-info}/PKG-INFO +57 -2
  9. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory.egg-info/SOURCES.txt +1 -0
  10. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/AUTHORS.md +0 -0
  11. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/LICENSE +0 -0
  12. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/NOTICE +0 -0
  13. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/setup.cfg +0 -0
  14. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/attribution/__init__.py +0 -0
  15. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/attribution/mathematical_dna.py +0 -0
  16. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/attribution/signer.py +0 -0
  17. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/attribution/watermark.py +0 -0
  18. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/cli/__init__.py +0 -0
  19. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/cli/cache_cmd.py +0 -0
  20. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/cli/commands.py +0 -0
  21. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/cli/compress_cmd.py +0 -0
  22. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/cli/context_commands.py +0 -0
  23. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/cli/daemon.py +0 -0
  24. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/cli/db_migrate.py +0 -0
  25. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/cli/doctor_cmd.py +0 -0
  26. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/cli/escape_hatch.py +0 -0
  27. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/cli/help_cmd.py +0 -0
  28. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/cli/ingest_cmd.py +0 -0
  29. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/cli/json_output.py +0 -0
  30. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/cli/main.py +0 -0
  31. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/cli/migrate_cmd.py +0 -0
  32. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/cli/optimize_cmd.py +0 -0
  33. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/cli/optimize_constants.py +0 -0
  34. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/cli/pending_store.py +0 -0
  35. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/cli/post_install.py +0 -0
  36. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/cli/proxy_cmd.py +0 -0
  37. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/cli/service_installer.py +0 -0
  38. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/cli/setup_wizard.py +0 -0
  39. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/cli/version_banner.py +0 -0
  40. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/cli/wizard_v3426_options.py +0 -0
  41. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/code_graph/__init__.py +0 -0
  42. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/code_graph/blast_radius.py +0 -0
  43. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/code_graph/bridge/__init__.py +0 -0
  44. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/code_graph/bridge/entity_resolver.py +0 -0
  45. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/code_graph/bridge/event_listeners.py +0 -0
  46. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/code_graph/bridge/fact_enricher.py +0 -0
  47. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/code_graph/bridge/hebbian_linker.py +0 -0
  48. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/code_graph/bridge/temporal_checker.py +0 -0
  49. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/code_graph/changes.py +0 -0
  50. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/code_graph/communities.py +0 -0
  51. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/code_graph/config.py +0 -0
  52. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/code_graph/database.py +0 -0
  53. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/code_graph/extractors/__init__.py +0 -0
  54. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/code_graph/extractors/python.py +0 -0
  55. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/code_graph/extractors/typescript.py +0 -0
  56. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/code_graph/flows.py +0 -0
  57. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/code_graph/git_hooks.py +0 -0
  58. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/code_graph/graph_engine.py +0 -0
  59. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/code_graph/graph_store.py +0 -0
  60. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/code_graph/incremental.py +0 -0
  61. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/code_graph/models.py +0 -0
  62. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/code_graph/parser.py +0 -0
  63. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/code_graph/resolver.py +0 -0
  64. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/code_graph/search.py +0 -0
  65. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/code_graph/service.py +0 -0
  66. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/code_graph/watcher.py +0 -0
  67. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/compliance/__init__.py +0 -0
  68. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/compliance/abac.py +0 -0
  69. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/compliance/audit.py +0 -0
  70. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/compliance/eu_ai_act.py +0 -0
  71. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/compliance/gdpr.py +0 -0
  72. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/compliance/lifecycle.py +0 -0
  73. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/compliance/retention.py +0 -0
  74. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/compliance/scheduler.py +0 -0
  75. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/__init__.py +0 -0
  76. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/backend_orchestrator.py +0 -0
  77. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/block_hygiene.py +0 -0
  78. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/clock_monitor.py +0 -0
  79. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/config.py +0 -0
  80. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/consolidation_engine.py +0 -0
  81. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/context_cache.py +0 -0
  82. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/db_pool.py +0 -0
  83. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/embedding_worker.py +0 -0
  84. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/embeddings.py +0 -0
  85. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/engine.py +0 -0
  86. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/engine_capabilities.py +0 -0
  87. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/engine_lock.py +0 -0
  88. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/engine_wiring.py +0 -0
  89. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/error_catalog.py +0 -0
  90. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/error_envelope.py +0 -0
  91. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/fact_consolidator.py +0 -0
  92. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/file_lock.py +0 -0
  93. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/graph_analyzer.py +0 -0
  94. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/graph_pruner.py +0 -0
  95. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/health_monitor.py +0 -0
  96. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/hooks.py +0 -0
  97. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/ingest_gate.py +0 -0
  98. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/injection.py +0 -0
  99. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/loop_watchdog.py +0 -0
  100. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/maintenance.py +0 -0
  101. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/maintenance_scheduler.py +0 -0
  102. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/mcp_embedder_proxy.py +0 -0
  103. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/modes.py +0 -0
  104. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/ollama_embedder.py +0 -0
  105. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/platform_utils.py +0 -0
  106. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/priority_queue.py +0 -0
  107. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/profiles.py +0 -0
  108. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/pruning_engine.py +0 -0
  109. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/queue_consumer.py +0 -0
  110. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/queue_dispatcher.py +0 -0
  111. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/ram_lock.py +0 -0
  112. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/rate_limit.py +0 -0
  113. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/recall_gate.py +0 -0
  114. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/recall_pipeline.py +0 -0
  115. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/recall_queue.py +0 -0
  116. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/recall_worker.py +0 -0
  117. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/registry.py +0 -0
  118. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/reranker_worker.py +0 -0
  119. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/safe_fs.py +0 -0
  120. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/security_primitives.py +0 -0
  121. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/shadow_router.py +0 -0
  122. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/slm_disabled.py +0 -0
  123. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/slmignore.py +0 -0
  124. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/store_pipeline.py +0 -0
  125. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/summarizer.py +0 -0
  126. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/tier_manager.py +0 -0
  127. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/topic_signature.py +0 -0
  128. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/core/worker_pool.py +0 -0
  129. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/dynamics/__init__.py +0 -0
  130. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/dynamics/activation_guided_quantization.py +0 -0
  131. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/dynamics/eap_scheduler.py +0 -0
  132. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/dynamics/ebbinghaus_langevin_coupling.py +0 -0
  133. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/dynamics/fisher_langevin_coupling.py +0 -0
  134. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/encoding/__init__.py +0 -0
  135. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/encoding/auto_linker.py +0 -0
  136. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/encoding/cognitive_consolidator.py +0 -0
  137. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/encoding/consolidator.py +0 -0
  138. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/encoding/context_generator.py +0 -0
  139. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/encoding/emotional.py +0 -0
  140. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/encoding/entity_resolver.py +0 -0
  141. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/encoding/entropy_gate.py +0 -0
  142. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/encoding/fact_extractor.py +0 -0
  143. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/encoding/foresight.py +0 -0
  144. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/encoding/graph_builder.py +0 -0
  145. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/encoding/observation_builder.py +0 -0
  146. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/encoding/scene_builder.py +0 -0
  147. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/encoding/signal_inference.py +0 -0
  148. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/encoding/temporal_parser.py +0 -0
  149. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/encoding/temporal_validator.py +0 -0
  150. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/encoding/type_router.py +0 -0
  151. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/evolution/__init__.py +0 -0
  152. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/evolution/blind_verifier.py +0 -0
  153. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/evolution/budget.py +0 -0
  154. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/evolution/evolution_store.py +0 -0
  155. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/evolution/llm_dispatch.py +0 -0
  156. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/evolution/mutation_generator.py +0 -0
  157. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/evolution/skill_evolver.py +0 -0
  158. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/evolution/triggers.py +0 -0
  159. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/evolution/types.py +0 -0
  160. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/graph/__init__.py +0 -0
  161. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/graph/cozo_backend.py +0 -0
  162. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/hooks/__init__.py +0 -0
  163. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/hooks/_outcome_common.py +0 -0
  164. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/hooks/adapter_base.py +0 -0
  165. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/hooks/antigravity_adapter.py +0 -0
  166. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/hooks/auto_capture.py +0 -0
  167. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/hooks/auto_invoker.py +0 -0
  168. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/hooks/auto_parameterize.py +0 -0
  169. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/hooks/auto_recall.py +0 -0
  170. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/hooks/auto_recall_hook.py +0 -0
  171. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/hooks/before_web_hook.py +0 -0
  172. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/hooks/claude_code_hooks.py +0 -0
  173. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/hooks/context_payload.py +0 -0
  174. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/hooks/copilot_adapter.py +0 -0
  175. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/hooks/cross_platform_connector.py +0 -0
  176. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/hooks/cursor_adapter.py +0 -0
  177. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/hooks/hook_daemon.py +0 -0
  178. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/hooks/hook_handlers.py +0 -0
  179. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/hooks/ide_connector.py +0 -0
  180. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/hooks/post_tool_async_hook.py +0 -0
  181. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/hooks/post_tool_outcome_hook.py +0 -0
  182. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/hooks/prewarm_auth.py +0 -0
  183. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/hooks/rules_engine.py +0 -0
  184. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/hooks/session_registry.py +0 -0
  185. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/hooks/stop_outcome_hook.py +0 -0
  186. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/hooks/sync_loop.py +0 -0
  187. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/hooks/topic_shift_hook.py +0 -0
  188. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/hooks/user_prompt_hook.py +0 -0
  189. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/hooks/user_prompt_rehash_hook.py +0 -0
  190. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/infra/__init__.py +0 -0
  191. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/infra/auth_middleware.py +0 -0
  192. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/infra/backup.py +0 -0
  193. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/infra/cache_manager.py +0 -0
  194. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/infra/cloud_backup.py +0 -0
  195. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/infra/event_bus.py +0 -0
  196. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/infra/heartbeat_monitor.py +0 -0
  197. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/infra/pid_manager.py +0 -0
  198. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/infra/process_reaper.py +0 -0
  199. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/infra/rate_limiter.py +0 -0
  200. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/infra/webhook_dispatcher.py +0 -0
  201. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ingestion/__init__.py +0 -0
  202. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ingestion/adapter_manager.py +0 -0
  203. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ingestion/base_adapter.py +0 -0
  204. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ingestion/calendar_adapter.py +0 -0
  205. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ingestion/credentials.py +0 -0
  206. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ingestion/gmail_adapter.py +0 -0
  207. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ingestion/parsers.py +0 -0
  208. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ingestion/transcript_adapter.py +0 -0
  209. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/__init__.py +0 -0
  210. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/adaptive.py +0 -0
  211. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/arm_catalog.py +0 -0
  212. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/assertion_miner.py +0 -0
  213. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/bandit.py +0 -0
  214. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/bandit_cache.py +0 -0
  215. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/behavioral.py +0 -0
  216. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/behavioral_listener.py +0 -0
  217. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/bootstrap.py +0 -0
  218. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/consolidation_cycle.py +0 -0
  219. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/consolidation_quantization_worker.py +0 -0
  220. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/consolidation_worker.py +0 -0
  221. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/cross_project.py +0 -0
  222. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/database.py +0 -0
  223. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/dedup_hnsw.py +0 -0
  224. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/engagement.py +0 -0
  225. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/ensemble.py +0 -0
  226. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/entity_compiler.py +0 -0
  227. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/fact_outcome_joins.py +0 -0
  228. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/features.py +0 -0
  229. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/feedback.py +0 -0
  230. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/forgetting_scheduler.py +0 -0
  231. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/hnsw_dedup.py +0 -0
  232. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/labeler.py +0 -0
  233. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/legacy_migration.py +0 -0
  234. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/lightgbm_subprocess.py +0 -0
  235. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/memory_merge.py +0 -0
  236. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/model_cache.py +0 -0
  237. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/model_rollback.py +0 -0
  238. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/outcome_queue.py +0 -0
  239. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/outcomes.py +0 -0
  240. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/pattern_miner.py +0 -0
  241. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/pattern_miner_constants.py +0 -0
  242. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/project_context.py +0 -0
  243. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/quantization_scheduler.py +0 -0
  244. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/ranker.py +0 -0
  245. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/ranker_common.py +0 -0
  246. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/ranker_retrain_legacy.py +0 -0
  247. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/ranker_retrain_online.py +0 -0
  248. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/reward.py +0 -0
  249. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/reward_archive.py +0 -0
  250. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/reward_boost.py +0 -0
  251. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/reward_proxy.py +0 -0
  252. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/shadow_test.py +0 -0
  253. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/signal_worker.py +0 -0
  254. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/signals.py +0 -0
  255. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/skill_performance_miner.py +0 -0
  256. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/source_quality.py +0 -0
  257. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/trigram_index.py +0 -0
  258. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/learning/workflows.py +0 -0
  259. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/llm/__init__.py +0 -0
  260. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/llm/backbone.py +0 -0
  261. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/math/__init__.py +0 -0
  262. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/math/ebbinghaus.py +0 -0
  263. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/math/fisher.py +0 -0
  264. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/math/fisher_quantized.py +0 -0
  265. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/math/hopfield.py +0 -0
  266. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/math/langevin.py +0 -0
  267. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/math/polar_quant.py +0 -0
  268. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/math/qjl.py +0 -0
  269. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/math/sheaf.py +0 -0
  270. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/math/turbo_quant.py +0 -0
  271. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/mcp/__init__.py +0 -0
  272. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/mcp/_daemon_proxy.py +0 -0
  273. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/mcp/_pool_adapter.py +0 -0
  274. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/mcp/_stdin_guard.py +0 -0
  275. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/mcp/resources.py +0 -0
  276. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/mcp/shared.py +0 -0
  277. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/mcp/tools.py +0 -0
  278. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/mcp/tools_active.py +0 -0
  279. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/mcp/tools_code_graph.py +0 -0
  280. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/mcp/tools_context.py +0 -0
  281. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/mcp/tools_core.py +0 -0
  282. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/mcp/tools_evolution.py +0 -0
  283. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/mcp/tools_learning.py +0 -0
  284. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/mcp/tools_mesh.py +0 -0
  285. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/mcp/tools_v28.py +0 -0
  286. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/mcp/tools_v3.py +0 -0
  287. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/mcp/tools_v33.py +0 -0
  288. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/mesh/__init__.py +0 -0
  289. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/mesh/broker.py +0 -0
  290. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/mesh/remote_sync.py +0 -0
  291. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/migrations/__init__.py +0 -0
  292. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/migrations/v3_4_25_to_v3_4_26.py +0 -0
  293. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/__init__.py +0 -0
  294. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/adapters/__init__.py +0 -0
  295. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/adapters/_agent_registry.py +0 -0
  296. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/adapters/anthropic_adapter.py +0 -0
  297. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/adapters/openai_adapter.py +0 -0
  298. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/adapters/wrap.py +0 -0
  299. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/cache/__init__.py +0 -0
  300. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/cache/boundary_store.py +0 -0
  301. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/cache/centroid_store.py +0 -0
  302. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/cache/context_key.py +0 -0
  303. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/cache/exact.py +0 -0
  304. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/cache/invalidation.py +0 -0
  305. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/cache/key_builder.py +0 -0
  306. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/cache/manager.py +0 -0
  307. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/cache/semantic.py +0 -0
  308. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/cache/stampede.py +0 -0
  309. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/compress/__init__.py +0 -0
  310. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/compress/align.py +0 -0
  311. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/compress/ccr.py +0 -0
  312. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/compress/extractive_code.py +0 -0
  313. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/compress/extractive_json.py +0 -0
  314. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/compress/prose_llmlingua.py +0 -0
  315. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/compress/router.py +0 -0
  316. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/config/__init__.py +0 -0
  317. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/config/defaults.py +0 -0
  318. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/config/schema.py +0 -0
  319. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/config/store.py +0 -0
  320. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/metrics/__init__.py +0 -0
  321. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/metrics/counters.py +0 -0
  322. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/metrics/estimator.py +0 -0
  323. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/metrics/exporters.py +0 -0
  324. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/metrics/persistence.py +0 -0
  325. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/proxy/__init__.py +0 -0
  326. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/proxy/_helpers.py +0 -0
  327. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/proxy/anthropic_surface.py +0 -0
  328. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/proxy/gemini_surface.py +0 -0
  329. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/proxy/lifecycle.py +0 -0
  330. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/proxy/openai_surface.py +0 -0
  331. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/proxy/server.py +0 -0
  332. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/storage/__init__.py +0 -0
  333. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/storage/db.py +0 -0
  334. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/optimize/storage/schema.py +0 -0
  335. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/parameterization/__init__.py +0 -0
  336. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/parameterization/pattern_extractor.py +0 -0
  337. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/parameterization/pii_filter.py +0 -0
  338. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/parameterization/prompt_injector.py +0 -0
  339. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/parameterization/prompt_lifecycle.py +0 -0
  340. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/parameterization/soft_prompt_generator.py +0 -0
  341. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/retrieval/__init__.py +0 -0
  342. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/retrieval/agentic.py +0 -0
  343. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/retrieval/ann_index.py +0 -0
  344. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/retrieval/bm25_channel.py +0 -0
  345. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/retrieval/bridge_discovery.py +0 -0
  346. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/retrieval/channel_registry.py +0 -0
  347. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/retrieval/engine.py +0 -0
  348. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/retrieval/entity_channel.py +0 -0
  349. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/retrieval/forgetting_filter.py +0 -0
  350. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/retrieval/fusion.py +0 -0
  351. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/retrieval/hopfield_channel.py +0 -0
  352. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/retrieval/profile_channel.py +0 -0
  353. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/retrieval/quantization_aware_search.py +0 -0
  354. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/retrieval/reranker.py +0 -0
  355. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/retrieval/semantic_channel.py +0 -0
  356. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/retrieval/spreading_activation.py +0 -0
  357. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/retrieval/strategy.py +0 -0
  358. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/retrieval/temporal_channel.py +0 -0
  359. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/retrieval/vector_store.py +0 -0
  360. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/__init__.py +0 -0
  361. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/api.py +0 -0
  362. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/bandit_loops.py +0 -0
  363. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/middleware/__init__.py +0 -0
  364. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/middleware/security_headers.py +0 -0
  365. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/recall_serializer.py +0 -0
  366. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/routes/__init__.py +0 -0
  367. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/routes/adapters.py +0 -0
  368. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/routes/agents.py +0 -0
  369. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/routes/backup.py +0 -0
  370. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/routes/behavioral.py +0 -0
  371. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/routes/brain.py +0 -0
  372. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/routes/chat.py +0 -0
  373. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/routes/compliance.py +0 -0
  374. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/routes/data_io.py +0 -0
  375. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/routes/entity.py +0 -0
  376. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/routes/events.py +0 -0
  377. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/routes/evolution.py +0 -0
  378. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/routes/helpers.py +0 -0
  379. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/routes/ingest.py +0 -0
  380. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/routes/insights.py +0 -0
  381. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/routes/learning.py +0 -0
  382. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/routes/lifecycle.py +0 -0
  383. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/routes/memories.py +0 -0
  384. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/routes/mesh.py +0 -0
  385. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/routes/optimize.py +0 -0
  386. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/routes/prewarm.py +0 -0
  387. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/routes/profiles.py +0 -0
  388. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/routes/stats.py +0 -0
  389. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/routes/tiers.py +0 -0
  390. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/routes/timeline.py +0 -0
  391. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/routes/token.py +0 -0
  392. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/routes/v3_api.py +0 -0
  393. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/routes/ws.py +0 -0
  394. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/security_middleware.py +0 -0
  395. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/server/ui.py +0 -0
  396. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/skills/slm-build-graph/SKILL.md +0 -0
  397. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/skills/slm-list-recent/SKILL.md +0 -0
  398. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/skills/slm-recall/SKILL.md +0 -0
  399. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/skills/slm-remember/SKILL.md +0 -0
  400. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/skills/slm-show-patterns/SKILL.md +0 -0
  401. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/skills/slm-status/SKILL.md +0 -0
  402. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/skills/slm-switch-profile/SKILL.md +0 -0
  403. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/__init__.py +0 -0
  404. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/access_control.py +0 -0
  405. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/access_log.py +0 -0
  406. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/database.py +0 -0
  407. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/embedding_migrator.py +0 -0
  408. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/migration_runner.py +0 -0
  409. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/migration_v33.py +0 -0
  410. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/migrations/M001_add_signal_features_columns.py +0 -0
  411. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/migrations/M002_model_state_history.py +0 -0
  412. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/migrations/M003_migration_log.py +0 -0
  413. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/migrations/M004_cross_platform_sync_log.py +0 -0
  414. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/migrations/M005_bandit_tables.py +0 -0
  415. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/migrations/M006_action_outcomes_reward.py +0 -0
  416. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/migrations/M007_pending_outcomes.py +0 -0
  417. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/migrations/M009_model_lineage.py +0 -0
  418. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/migrations/M010_evolution_config.py +0 -0
  419. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/migrations/M011_archive_and_merge.py +0 -0
  420. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/migrations/M012_shadow_observations.py +0 -0
  421. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/migrations/M013_bi_temporal_columns.py +0 -0
  422. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/migrations/M014_v345_scale_ready.py +0 -0
  423. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/migrations/M015_add_pinned_column.py +0 -0
  424. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/migrations/__init__.py +0 -0
  425. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/migrations.py +0 -0
  426. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/models.py +0 -0
  427. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/quantized_store.py +0 -0
  428. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/schema.py +0 -0
  429. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/schema_code_graph.py +0 -0
  430. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/schema_v32.py +0 -0
  431. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/schema_v3410.py +0 -0
  432. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/schema_v3411.py +0 -0
  433. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/schema_v343.py +0 -0
  434. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/schema_v345.py +0 -0
  435. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/schema_v347.py +0 -0
  436. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/storage/v2_migrator.py +0 -0
  437. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/trust/__init__.py +0 -0
  438. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/trust/gate.py +0 -0
  439. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/trust/provenance.py +0 -0
  440. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/trust/scorer.py +0 -0
  441. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/trust/signals.py +0 -0
  442. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/css/brain.css +0 -0
  443. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/css/legacy-dashboard.css +0 -0
  444. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/css/neural-glass.css +0 -0
  445. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/index.html +0 -0
  446. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/agents.js +0 -0
  447. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/auto-settings.js +0 -0
  448. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/brain.js +0 -0
  449. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/clusters.js +0 -0
  450. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/compliance.js +0 -0
  451. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/core.js +0 -0
  452. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/dashboard.js +0 -0
  453. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/events.js +0 -0
  454. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/fact-detail.js +0 -0
  455. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/feedback.js +0 -0
  456. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/graph-event-bus.js +0 -0
  457. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/graph-filters.js +0 -0
  458. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/graph-ui.js +0 -0
  459. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/ide-status.js +0 -0
  460. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/init.js +0 -0
  461. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/knowledge-graph.js +0 -0
  462. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/lifecycle.js +0 -0
  463. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/math-health.js +0 -0
  464. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/memories.js +0 -0
  465. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/memory-chat.js +0 -0
  466. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/memory-timeline.js +0 -0
  467. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/modal.js +0 -0
  468. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/ng-entities.js +0 -0
  469. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/ng-health.js +0 -0
  470. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/ng-ingestion.js +0 -0
  471. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/ng-mesh.js +0 -0
  472. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/ng-shell.js +0 -0
  473. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/ng-skills.js +0 -0
  474. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/optimize.js +0 -0
  475. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/profiles.js +0 -0
  476. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/quick-actions.js +0 -0
  477. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/recall-lab.js +0 -0
  478. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/search.js +0 -0
  479. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/settings.js +0 -0
  480. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/timeline.js +0 -0
  481. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/js/trust-dashboard.js +0 -0
  482. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/vendor/bootstrap-icons/bootstrap-icons.css +0 -0
  483. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff +0 -0
  484. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff2 +0 -0
  485. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/vendor/bootstrap.bundle.min.js +0 -0
  486. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/vendor/bootstrap.min.css +0 -0
  487. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/vendor/d3.v7.min.js +0 -0
  488. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/vendor/graphology-library.min.js +0 -0
  489. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/vendor/graphology.umd.min.js +0 -0
  490. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/vendor/inter-ui/inter-variable.min.css +0 -0
  491. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable-Italic.woff2 +0 -0
  492. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable.woff2 +0 -0
  493. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/ui/vendor/sigma.min.js +0 -0
  494. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/vector/__init__.py +0 -0
  495. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory/vector/lancedb_backend.py +0 -0
  496. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory.egg-info/dependency_links.txt +0 -0
  497. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory.egg-info/entry_points.txt +0 -0
  498. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory.egg-info/requires.txt +0 -0
  499. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/src/superlocalmemory.egg-info/top_level.txt +0 -0
  500. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/tests/test_auto_hooks.py +0 -0
  501. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/tests/test_before_web_hook.py +0 -0
  502. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/tests/test_behavioral_full.py +0 -0
  503. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/tests/test_claude_hooks.py +0 -0
  504. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/tests/test_cli_core.py +0 -0
  505. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/tests/test_cli_json.py +0 -0
  506. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/tests/test_cli_v33.py +0 -0
  507. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/tests/test_compliance_full.py +0 -0
  508. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/tests/test_config_system.py +0 -0
  509. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/tests/test_engine_hooks.py +0 -0
  510. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/tests/test_event_bus.py +0 -0
  511. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/tests/test_features.py +0 -0
  512. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/tests/test_final_locomo_mini.py +0 -0
  513. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/tests/test_graph_integrity.py +0 -0
  514. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/tests/test_hook_handlers.py +0 -0
  515. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/tests/test_ide_connector.py +0 -0
  516. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/tests/test_infra.py +0 -0
  517. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/tests/test_injection.py +0 -0
  518. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/tests/test_learning_advanced.py +0 -0
  519. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/tests/test_learning_collectors.py +0 -0
  520. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/tests/test_llm_provider.py +0 -0
  521. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/tests/test_mcp_server.py +0 -0
  522. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/tests/test_migration.py +0 -0
  523. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/tests/test_mode_switch_preservation.py +0 -0
  524. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/tests/test_post_install.py +0 -0
  525. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/tests/test_ranker.py +0 -0
  526. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/tests/test_topic_shift_hook.py +0 -0
  527. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/tests/test_trust_full.py +0 -0
  528. {superlocalmemory-3.6.6 → superlocalmemory-3.6.8}/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.6
3
+ Version: 3.6.8
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
@@ -401,6 +401,32 @@ slm status
401
401
 
402
402
  ### MCP Integration (Claude, Cursor, Windsurf, VS Code, etc.)
403
403
 
404
+ SLM supports **two MCP transports** — use whichever fits your tool. Both expose the same 33 tools and 7 resources.
405
+
406
+ #### Option A — HTTP transport (v3.6.7+, recommended)
407
+
408
+ One shared process handles every client. RAM is flat regardless of how many IDE windows, subagents, or concurrent sessions connect. Requires the SLM daemon to be running (`slm start`).
409
+
410
+ ```json
411
+ {
412
+ "mcpServers": {
413
+ "superlocalmemory": {
414
+ "type": "http",
415
+ "url": "http://127.0.0.1:8765/mcp/"
416
+ }
417
+ }
418
+ }
419
+ ```
420
+
421
+ > **Claude Code** also accepts:
422
+ > ```bash
423
+ > claude mcp add --transport http superlocalmemory http://127.0.0.1:8765/mcp/
424
+ > ```
425
+
426
+ #### Option B — stdio transport (universal, works everywhere)
427
+
428
+ Spawns one `slm mcp` subprocess per client connection (~90–110 MB each). Works with every MCP-compatible tool including those that do not yet support HTTP transport. No daemon required.
429
+
404
430
  ```json
405
431
  {
406
432
  "mcpServers": {
@@ -412,7 +438,36 @@ slm status
412
438
  }
413
439
  ```
414
440
 
415
- 33 MCP tools by default (+42 optional behind `SLM_MCP_ALL_TOOLS=1`) + 7 resources. Works with any MCP-compatible client we ship templated configs for Claude Code, Cursor, Windsurf, VS Code Copilot, Continue, Cody, ChatGPT Desktop, Gemini CLI, JetBrains, Zed, and Antigravity (15 IDE configs in `ide/configs/`). **V3.3: Adaptive lifecycle, smart compression, and pattern learning.**
441
+ #### Option C `mcp-remote` bridge (for stdio-only tools that want HTTP)
442
+
443
+ Some CLIs (e.g. Grok CLI) only speak stdio but you still want the RAM benefit of HTTP. The [`@modelcontextprotocol/client-cli`](https://www.npmjs.com/package/@modelcontextprotocol/client-cli) package bridges them:
444
+
445
+ ```bash
446
+ npm install -g @modelcontextprotocol/client-cli
447
+ ```
448
+
449
+ ```json
450
+ {
451
+ "mcpServers": {
452
+ "superlocalmemory": {
453
+ "command": "mcp-remote",
454
+ "args": ["http://127.0.0.1:8765/mcp/", "--allow-http", "--transport", "http-only"]
455
+ }
456
+ }
457
+ }
458
+ ```
459
+
460
+ #### When to use which
461
+
462
+ | Situation | Use |
463
+ |-----------|-----|
464
+ | Claude Code / Claude Desktop (v3.6.7+) | **HTTP** — zero new processes per session |
465
+ | Cursor, Windsurf, Gemini CLI, Antigravity | **HTTP** — native support |
466
+ | Grok CLI, tools that only support stdio | **`mcp-remote` bridge** |
467
+ | Offline / daemon-free usage | **stdio** |
468
+ | Any tool, any version | **stdio** always works as fallback |
469
+
470
+ See [`docs/ide-setup.md`](docs/ide-setup.md) for per-IDE configs. 33 MCP tools by default (+42 optional behind `SLM_MCP_ALL_TOOLS=1`) + 7 resources. Works with any MCP-compatible client — we ship templated configs for Claude Code, Cursor, Windsurf, VS Code Copilot, Continue, Cody, ChatGPT Desktop, Gemini CLI, JetBrains, Zed, and Antigravity (15 IDE configs in `ide/configs/`).
416
471
 
417
472
  ### Dual Interface: MCP + CLI
418
473
 
@@ -309,6 +309,32 @@ slm status
309
309
 
310
310
  ### MCP Integration (Claude, Cursor, Windsurf, VS Code, etc.)
311
311
 
312
+ SLM supports **two MCP transports** — use whichever fits your tool. Both expose the same 33 tools and 7 resources.
313
+
314
+ #### Option A — HTTP transport (v3.6.7+, recommended)
315
+
316
+ One shared process handles every client. RAM is flat regardless of how many IDE windows, subagents, or concurrent sessions connect. Requires the SLM daemon to be running (`slm start`).
317
+
318
+ ```json
319
+ {
320
+ "mcpServers": {
321
+ "superlocalmemory": {
322
+ "type": "http",
323
+ "url": "http://127.0.0.1:8765/mcp/"
324
+ }
325
+ }
326
+ }
327
+ ```
328
+
329
+ > **Claude Code** also accepts:
330
+ > ```bash
331
+ > claude mcp add --transport http superlocalmemory http://127.0.0.1:8765/mcp/
332
+ > ```
333
+
334
+ #### Option B — stdio transport (universal, works everywhere)
335
+
336
+ Spawns one `slm mcp` subprocess per client connection (~90–110 MB each). Works with every MCP-compatible tool including those that do not yet support HTTP transport. No daemon required.
337
+
312
338
  ```json
313
339
  {
314
340
  "mcpServers": {
@@ -320,7 +346,36 @@ slm status
320
346
  }
321
347
  ```
322
348
 
323
- 33 MCP tools by default (+42 optional behind `SLM_MCP_ALL_TOOLS=1`) + 7 resources. Works with any MCP-compatible client we ship templated configs for Claude Code, Cursor, Windsurf, VS Code Copilot, Continue, Cody, ChatGPT Desktop, Gemini CLI, JetBrains, Zed, and Antigravity (15 IDE configs in `ide/configs/`). **V3.3: Adaptive lifecycle, smart compression, and pattern learning.**
349
+ #### Option C `mcp-remote` bridge (for stdio-only tools that want HTTP)
350
+
351
+ Some CLIs (e.g. Grok CLI) only speak stdio but you still want the RAM benefit of HTTP. The [`@modelcontextprotocol/client-cli`](https://www.npmjs.com/package/@modelcontextprotocol/client-cli) package bridges them:
352
+
353
+ ```bash
354
+ npm install -g @modelcontextprotocol/client-cli
355
+ ```
356
+
357
+ ```json
358
+ {
359
+ "mcpServers": {
360
+ "superlocalmemory": {
361
+ "command": "mcp-remote",
362
+ "args": ["http://127.0.0.1:8765/mcp/", "--allow-http", "--transport", "http-only"]
363
+ }
364
+ }
365
+ }
366
+ ```
367
+
368
+ #### When to use which
369
+
370
+ | Situation | Use |
371
+ |-----------|-----|
372
+ | Claude Code / Claude Desktop (v3.6.7+) | **HTTP** — zero new processes per session |
373
+ | Cursor, Windsurf, Gemini CLI, Antigravity | **HTTP** — native support |
374
+ | Grok CLI, tools that only support stdio | **`mcp-remote` bridge** |
375
+ | Offline / daemon-free usage | **stdio** |
376
+ | Any tool, any version | **stdio** always works as fallback |
377
+
378
+ See [`docs/ide-setup.md`](docs/ide-setup.md) for per-IDE configs. 33 MCP tools by default (+42 optional behind `SLM_MCP_ALL_TOOLS=1`) + 7 resources. Works with any MCP-compatible client — we ship templated configs for Claude Code, Cursor, Windsurf, VS Code Copilot, Continue, Cody, ChatGPT Desktop, Gemini CLI, JetBrains, Zed, and Antigravity (15 IDE configs in `ide/configs/`).
324
379
 
325
380
  ### Dual Interface: MCP + CLI
326
381
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "superlocalmemory"
3
- version = "3.6.6"
3
+ version = "3.6.8"
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.6"
31
+ __version__ = "3.6.8"
32
32
 
33
33
  _REQUIRED_VERSIONS = {
34
34
  "sentence_transformers": "5.3.0",
@@ -237,8 +237,19 @@ def _eager_warmup() -> None:
237
237
  _logger.warning("Mesh auto-register failed: %s", exc)
238
238
 
239
239
  import threading
240
- _warmup_thread = threading.Thread(target=_eager_warmup, daemon=True, name="mcp-warmup")
241
- _warmup_thread.start()
240
+
241
+ # v3.6.7: Suppress standalone-process behaviours when the MCP server is
242
+ # imported inside the daemon (SLM_MCP_EMBEDDED=1). Three threads are safe
243
+ # to run in a dedicated `slm mcp` subprocess but harmful inside the daemon:
244
+ # mcp-warmup — creates a LIGHT engine duplicate; daemon has a FULL one.
245
+ # parent-watchdog — calls os._exit(0) if its parent IDE quits, which would
246
+ # kill the daemon along with it.
247
+ # stdin-eof-monitor — monitors stdin pipe; meaningless inside the daemon.
248
+ _embedded_in_daemon = _os.environ.get("SLM_MCP_EMBEDDED") == "1"
249
+
250
+ if not _embedded_in_daemon:
251
+ _warmup_thread = threading.Thread(target=_eager_warmup, daemon=True, name="mcp-warmup")
252
+ _warmup_thread.start()
242
253
 
243
254
 
244
255
  # V3.4.57: Parent watchdog — self-terminate when the IDE/Claude session dies.
@@ -274,8 +285,9 @@ def _parent_watchdog() -> None:
274
285
  pass # Transient errors — keep watching
275
286
 
276
287
 
277
- _watchdog_thread = threading.Thread(target=_parent_watchdog, daemon=True, name="parent-watchdog")
278
- _watchdog_thread.start()
288
+ if not _embedded_in_daemon:
289
+ _watchdog_thread = threading.Thread(target=_parent_watchdog, daemon=True, name="parent-watchdog")
290
+ _watchdog_thread.start()
279
291
 
280
292
 
281
293
  # V3.5.9: Stdin EOF monitor — complements the parent watchdog for the case where
@@ -337,8 +349,9 @@ def _stdin_eof_monitor() -> None:
337
349
  _mlog.debug("stdin EOF monitor error: %s — watchdog will cover", exc)
338
350
 
339
351
 
340
- _stdin_monitor_thread = threading.Thread(target=_stdin_eof_monitor, daemon=True, name="stdin-eof-monitor")
341
- _stdin_monitor_thread.start()
352
+ if not _embedded_in_daemon:
353
+ _stdin_monitor_thread = threading.Thread(target=_stdin_eof_monitor, daemon=True, name="stdin-eof-monitor")
354
+ _stdin_monitor_thread.start()
342
355
 
343
356
 
344
357
  if __name__ == "__main__":
@@ -0,0 +1,237 @@
1
+ """Runtime recall-health monitor — keep the 6-channel recall path warm,
2
+ detect a "warm-but-broken" embedder at runtime, and self-heal it (v3.6.8).
3
+
4
+ Why this exists
5
+ ---------------
6
+ On a long-running daemon the cold full-fusion recall could exceed the MCP
7
+ pool's 30s timeout, and ``session_init`` then silently fell back to FTS5/BM25
8
+ ("DEGRADED MODE") — observed 7×/2 days in production logs. Two root causes:
9
+
10
+ 1. **Page-cache eviction.** The ~100 MB ``association_edges`` / graph table is
11
+ evicted under memory pressure, so the first recall after idle re-reads it
12
+ from disk (15-24 s+), blowing the pool timeout.
13
+ 2. **Silent embedder death.** ``OllamaEmbedder.embed`` returns ``None`` on a
14
+ transient Ollama failure, while the boot-set ``_embedding_warm`` flag still
15
+ reports ``True``. With ``q_emb is None`` the engine skips the semantic,
16
+ hopfield and spreading_activation channels — recall silently degrades to
17
+ keyword-only (``semantic`` score ``0.0`` on every result).
18
+
19
+ The boot warmup (``_warmup_recall``) runs ONCE and never again, so neither
20
+ condition is repaired in-life.
21
+
22
+ The fix — an industry-standard 3-tier monitor, validated against Ollama
23
+ keep-alive, Chroma's active heartbeat, LangChain's circuit breaker and the
24
+ Kubernetes liveness/readiness split:
25
+
26
+ * **Tier 1 — RE-WARM.** Fire a real ``engine.recall`` every ``interval_s`` to
27
+ keep the graph page cache hot and nomic-embed resident.
28
+ * **Tier 2 — READINESS PROBE.** Assert the semantic channel actually fired
29
+ (``max semantic > 0``). Rows returned with ``semantic == 0`` everywhere is the
30
+ warm-but-broken signature → the embedder is returning ``None``.
31
+ * **Tier 3 — CIRCUIT-BREAKER SELF-HEAL.** Reset the embedder's cached
32
+ ``_available`` flag (the "available once, cached forever" bug), re-exercise
33
+ ``embed()``, track consecutive failures, and log **CRITICAL** so the
34
+ degradation is never silent.
35
+
36
+ All logic is fail-soft: a crash in the monitor never takes down the daemon.
37
+ """
38
+ from __future__ import annotations
39
+
40
+ import logging
41
+ import threading
42
+ from dataclasses import dataclass
43
+
44
+ logger = logging.getLogger(__name__)
45
+
46
+ # A stable probe query. Content-agnostic: we only assert that *some* result
47
+ # carries a non-zero semantic score, which proves the embedder + semantic
48
+ # channel are alive end-to-end.
49
+ DEFAULT_PROBE = "memory recall health probe"
50
+ # A distinct string for the heal embed() call so it is obvious in thread dumps
51
+ # / Ollama logs and never collides with a real cached query embedding.
52
+ HEAL_PROBE = "__recall_health_rewarm__"
53
+
54
+ # Default cadence. 5 min keeps nomic-embed resident (Ollama default unload is
55
+ # 5 min) and the page cache warm without meaningful load.
56
+ DEFAULT_INTERVAL_S = 300
57
+
58
+
59
+ @dataclass
60
+ class RecallHealth:
61
+ """Mutable health state for the recall path."""
62
+
63
+ healthy: bool = True
64
+ consecutive_failures: int = 0
65
+ total_heals: int = 0
66
+ checks: int = 0
67
+ last_semantic_score: float = 0.0
68
+ last_error: str = ""
69
+
70
+
71
+ def _max_semantic(results) -> float:
72
+ """Largest semantic channel score across results (0.0 if none)."""
73
+ best = 0.0
74
+ for r in results:
75
+ cs = getattr(r, "channel_scores", None) or {}
76
+ try:
77
+ best = max(best, float(cs.get("semantic", 0.0) or 0.0))
78
+ except (TypeError, ValueError):
79
+ continue
80
+ return best
81
+
82
+
83
+ def _get_embedder(engine):
84
+ """Locate the engine's embedder (full mode: engine._embedder; some paths
85
+ hang it off the retrieval engine)."""
86
+ emb = getattr(engine, "_embedder", None)
87
+ if emb is None:
88
+ re_eng = getattr(engine, "_retrieval_engine", None)
89
+ emb = getattr(re_eng, "_embedder", None) if re_eng is not None else None
90
+ return emb
91
+
92
+
93
+ def _heal_embedder(engine, *, log) -> bool:
94
+ """Tier 3: reset the cached availability flag and re-exercise the embedder.
95
+
96
+ ``OllamaEmbedder.is_available`` caches its first result forever, so once
97
+ Ollama blips the flag can stay stale. Clearing ``_available`` forces a
98
+ re-probe; ``embed()`` itself always re-attempts the HTTP call, so a single
99
+ successful embed proves recovery. Returns True iff the embedder produced a
100
+ vector.
101
+ """
102
+ emb = _get_embedder(engine)
103
+ if emb is None:
104
+ log.critical("recall-health: no embedder on engine — cannot self-heal")
105
+ return False
106
+ # Reset the "available once, cached forever" flag if present.
107
+ if hasattr(emb, "_available"):
108
+ try:
109
+ emb._available = None
110
+ except Exception: # pragma: no cover - defensive
111
+ pass
112
+ try:
113
+ vec = emb.embed(HEAL_PROBE)
114
+ except Exception as exc:
115
+ log.warning("recall-health: heal embed() raised: %s", exc)
116
+ return False
117
+ return vec is not None and bool(vec)
118
+
119
+
120
+ def run_health_tick(engine, state: RecallHealth, *, probe: str = DEFAULT_PROBE,
121
+ log=logger) -> RecallHealth:
122
+ """One monitor tick: re-warm (Tier 1), probe (Tier 2), self-heal (Tier 3).
123
+
124
+ Mutates and returns ``state``. Never raises — a timed-out / failing recall
125
+ marks the path unhealthy instead of propagating.
126
+ """
127
+ state.checks += 1
128
+
129
+ # Tier 1: re-warm. A real full-fusion recall keeps the graph page cache hot
130
+ # and the embedder resident.
131
+ try:
132
+ resp = engine.recall(probe, limit=3, fast=False)
133
+ except Exception as exc:
134
+ state.healthy = False
135
+ state.consecutive_failures += 1
136
+ state.last_error = f"recall raised: {exc}"
137
+ log.critical(
138
+ "recall-health: re-warm recall FAILED (%s) — recall path unhealthy",
139
+ exc,
140
+ )
141
+ return state
142
+
143
+ results = list(getattr(resp, "results", []) or [])
144
+ sem = _max_semantic(results)
145
+ state.last_semantic_score = sem
146
+
147
+ # Tier 2: readiness. Rows present but semantic never fired == warm-but-broken.
148
+ # Zero results is NOT this signature (could be an empty/filtered corpus).
149
+ broken = bool(results) and sem <= 0.0
150
+ if not broken:
151
+ if not state.healthy:
152
+ log.warning(
153
+ "recall-health: RECOVERED (semantic=%.3f, %d results)",
154
+ sem, len(results),
155
+ )
156
+ state.healthy = True
157
+ state.consecutive_failures = 0
158
+ state.last_error = ""
159
+ return state
160
+
161
+ # Tier 3: self-heal.
162
+ log.critical(
163
+ "recall-health: semantic channel DEAD (%d results, max semantic=0.0) "
164
+ "— embedder returning None; attempting self-heal",
165
+ len(results),
166
+ )
167
+ if _heal_embedder(engine, log=log):
168
+ state.total_heals += 1
169
+ state.healthy = True
170
+ state.consecutive_failures = 0
171
+ state.last_error = ""
172
+ log.warning("recall-health: embedder self-heal SUCCEEDED (re-warmed)")
173
+ else:
174
+ state.healthy = False
175
+ state.consecutive_failures += 1
176
+ state.last_error = "semantic channel dead; embedder heal failed"
177
+ log.critical(
178
+ "recall-health: self-heal FAILED — recall DEGRADED to keyword-only "
179
+ "(consecutive_failures=%d)", state.consecutive_failures,
180
+ )
181
+ return state
182
+
183
+
184
+ def health_monitor_loop(engine, *, interval_s: int, stop_event: threading.Event,
185
+ state: RecallHealth, probe: str = DEFAULT_PROBE,
186
+ log=logger) -> None:
187
+ """Background loop. Sleeps ``interval_s`` between ticks; exits promptly when
188
+ ``stop_event`` is set. An initial short delay avoids racing boot warmup."""
189
+ # Initial delay (bounded) so we don't pile onto the boot warmup threads.
190
+ if stop_event.wait(min(interval_s, 60)):
191
+ return
192
+ while not stop_event.is_set():
193
+ try:
194
+ run_health_tick(engine, state, probe=probe, log=log)
195
+ except Exception as exc: # pragma: no cover - belt & suspenders
196
+ log.warning("recall-health: tick crashed (non-fatal): %s", exc)
197
+ if stop_event.wait(interval_s):
198
+ break
199
+
200
+
201
+ # Module-level state so /health can surface the latest verdict without holding
202
+ # a reference to the thread.
203
+ _GLOBAL_STATE = RecallHealth()
204
+
205
+
206
+ def start_recall_health_monitor(engine, *, interval_s: int = DEFAULT_INTERVAL_S,
207
+ probe: str = DEFAULT_PROBE, log=None):
208
+ """Start the monitor as a daemon thread. Returns ``(thread, stop_event,
209
+ state)``. The state is the shared module-level state read by
210
+ :func:`get_recall_health`."""
211
+ log = log or logger
212
+ state = _GLOBAL_STATE
213
+ stop = threading.Event()
214
+ t = threading.Thread(
215
+ target=health_monitor_loop,
216
+ kwargs=dict(
217
+ engine=engine, interval_s=interval_s, stop_event=stop,
218
+ state=state, probe=probe, log=log,
219
+ ),
220
+ daemon=True,
221
+ name="recall-health",
222
+ )
223
+ t.start()
224
+ return t, stop, state
225
+
226
+
227
+ def get_recall_health() -> dict:
228
+ """Snapshot for /health surfacing (visibility — never silent degradation)."""
229
+ s = _GLOBAL_STATE
230
+ return {
231
+ "recall_healthy": s.healthy,
232
+ "consecutive_failures": s.consecutive_failures,
233
+ "total_heals": s.total_heals,
234
+ "checks": s.checks,
235
+ "last_semantic_score": round(s.last_semantic_score, 4),
236
+ "last_error": s.last_error,
237
+ }
@@ -34,11 +34,17 @@ import signal
34
34
  import sys
35
35
  import threading
36
36
  import time
37
- from contextlib import asynccontextmanager
37
+ from contextlib import asynccontextmanager, AsyncExitStack
38
38
  from datetime import datetime, timezone
39
39
  from pathlib import Path
40
40
  from typing import Optional
41
41
 
42
+ # v3.6.7: Tell mcp/server.py it is being imported inside the daemon process.
43
+ # This suppresses the three side-effect threads (mcp-warmup, parent-watchdog,
44
+ # stdin-eof-monitor) that are harmful when the MCP server runs embedded.
45
+ # Must be set BEFORE any import of superlocalmemory.mcp.server.
46
+ os.environ.setdefault("SLM_MCP_EMBEDDED", "1")
47
+
42
48
  from fastapi import FastAPI, HTTPException, Request
43
49
  from fastapi.middleware.cors import CORSMiddleware
44
50
  from fastapi.middleware.gzip import GZipMiddleware
@@ -677,6 +683,25 @@ async def lifespan(application: FastAPI):
677
683
  threading.Thread(target=_warmup_recall, daemon=True, name="recall-warmup").start()
678
684
  threading.Thread(target=_backfill_vector_store, daemon=True, name="vs-backfill").start()
679
685
 
686
+ # v3.6.8: Runtime recall-health monitor. The three warmups above run
687
+ # ONCE at boot; on a long-running daemon the graph page cache gets
688
+ # evicted and the embedder can start returning None while _embedding_warm
689
+ # still claims True — both silently degrade recall to keyword-only BM25
690
+ # (observed: session_init "pool.recall timed out → DEGRADED MODE", 7×/2d).
691
+ # This monitor re-warms + actively probes the semantic channel + self-heals
692
+ # a dead embedder for the daemon's whole life. See server/recall_health.py.
693
+ try:
694
+ from superlocalmemory.server.recall_health import (
695
+ start_recall_health_monitor,
696
+ )
697
+ _rh_thread, _rh_stop, _ = start_recall_health_monitor(engine)
698
+ application.state.recall_health_stop = _rh_stop
699
+ except Exception as _rh_exc:
700
+ logger.warning(
701
+ "recall-health monitor start failed (non-fatal): %s", _rh_exc,
702
+ )
703
+ application.state.recall_health_stop = None
704
+
680
705
  # v3.4.37: QueueConsumer uses daemon's engine directly via adapter.
681
706
  # Previously routed through WorkerPool → recall_worker subprocess,
682
707
  # which loaded a duplicate MemoryEngine (~800 MB waste).
@@ -850,7 +875,20 @@ async def lifespan(application: FastAPI):
850
875
  except Exception as e:
851
876
  logger.warning("optimize module not available: %s", e)
852
877
 
853
- yield
878
+ # v3.6.7: Start MCP Streamable-HTTP session manager (GOTCHA #1).
879
+ # streamable_http_app() carries its own Starlette lifespan that initialises
880
+ # an anyio task group inside the session manager. Without entering that
881
+ # lifespan every POST /mcp 500s with "Task group is not initialized."
882
+ # AsyncExitStack enters the context only when _mcp_app was mounted; if the
883
+ # mount failed (non-fatal) the daemon starts normally without HTTP MCP.
884
+ async with AsyncExitStack() as _mcp_stack:
885
+ 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)")
890
+
891
+ yield
854
892
 
855
893
  # Cancel optimize metrics flush loop + run final flush before shutdown
856
894
  try:
@@ -949,6 +987,14 @@ async def lifespan(application: FastAPI):
949
987
  except Exception as exc: # pragma: no cover — defensive
950
988
  logger.warning("recall_queue close failed: %s", exc)
951
989
 
990
+ # v3.6.8: Stop recall-health monitor (owns a daemon thread).
991
+ _rh_stop = getattr(application.state, "recall_health_stop", None)
992
+ if _rh_stop is not None:
993
+ try:
994
+ _rh_stop.set()
995
+ except Exception as exc: # pragma: no cover — defensive
996
+ logger.warning("recall_health monitor stop failed: %s", exc)
997
+
952
998
  # Stop HealthMonitor (health_monitor.py owns a daemon thread).
953
999
  _health = getattr(application.state, "health_monitor", None)
954
1000
  if _health is not None:
@@ -1149,6 +1195,28 @@ def create_app() -> FastAPI:
1149
1195
  # -- Daemon-specific routes --
1150
1196
  _register_daemon_routes(application)
1151
1197
 
1198
+ # -- v3.6.7: MCP Streamable-HTTP transport at /mcp --
1199
+ # Mount the FastMCP server as a Starlette ASGI sub-app so ALL clients
1200
+ # (Claude Code sessions, subagents, desktop, hermes) share ONE daemon
1201
+ # process instead of spawning an `slm mcp` subprocess per connection.
1202
+ # The session manager lifespan is started in lifespan() via AsyncExitStack.
1203
+ # Fail-open: if import or mount fails, stdio transport keeps working.
1204
+ #
1205
+ # streamable_http_path is set to "/" so that when mounted at "/mcp" the
1206
+ # effective user-facing endpoint is exactly http://127.0.0.1:8765/mcp.
1207
+ # (FastAPI strips the mount prefix before passing the request to the
1208
+ # sub-app, so the sub-app's internal route must be "/".)
1209
+ try:
1210
+ from superlocalmemory.mcp.server import server as _mcp_fastmcp
1211
+ _mcp_fastmcp.settings.streamable_http_path = "/"
1212
+ _mcp_fastmcp._session_manager = None # Defensive reset for idempotency
1213
+ global _mcp_app
1214
+ _mcp_app = _mcp_fastmcp.streamable_http_app()
1215
+ application.mount("/mcp", _mcp_app)
1216
+ logger.info("MCP HTTP transport mounted at /mcp (Streamable HTTP, port 8765)")
1217
+ except Exception as _mcp_exc: # pragma: no cover — defensive
1218
+ logger.warning("MCP HTTP mount failed (non-fatal, stdio still works): %s", _mcp_exc)
1219
+
1152
1220
  return application
1153
1221
 
1154
1222
 
@@ -1202,7 +1270,9 @@ def _register_dashboard_routes(application: FastAPI) -> None:
1202
1270
  # for Gemini), never X-SLM-API-Key. Verified: auth_middleware.py:50-82
1203
1271
  # returns False for POST when api_key file exists and X-SLM-API-Key
1204
1272
  # is absent.
1205
- _AUTH_EXEMPT_PREFIXES = ("/v1/", "/v1beta/")
1273
+ # v3.6.7: /mcp is also exempt — MCP clients negotiate their own session
1274
+ # via the MCP protocol; they have no knowledge of X-SLM-API-Key.
1275
+ _AUTH_EXEMPT_PREFIXES = ("/v1/", "/v1beta/", "/mcp")
1206
1276
 
1207
1277
  @application.middleware("http")
1208
1278
  async def auth_middleware(request, call_next):
@@ -1536,6 +1606,13 @@ def _register_daemon_routes(application: FastAPI) -> None:
1536
1606
  _update_activity()
1537
1607
  # Non-blocking peek: report status without forcing a re-init.
1538
1608
  engine = getattr(application.state, "engine", None)
1609
+ # v3.6.8: surface the recall-health verdict so a silently-degraded
1610
+ # recall path (warm-but-broken embedder) is VISIBLE, never silent.
1611
+ try:
1612
+ from superlocalmemory.server.recall_health import get_recall_health
1613
+ _recall_health = get_recall_health()
1614
+ except Exception:
1615
+ _recall_health = {"recall_healthy": None}
1539
1616
  return {
1540
1617
  "status": "ok",
1541
1618
  "pid": os.getpid(),
@@ -1544,6 +1621,9 @@ def _register_daemon_routes(application: FastAPI) -> None:
1544
1621
  # v3.4.52: clients can poll this to wait for embedding model
1545
1622
  # readiness before issuing recall calls.
1546
1623
  "embedding_warm": _embedding_warm,
1624
+ # v3.6.8: True iff the semantic channel actually fired on the last
1625
+ # health probe; includes self-heal counters.
1626
+ "recall_health": _recall_health,
1547
1627
  }
1548
1628
 
1549
1629
  @application.get("/recall")
@@ -1820,6 +1900,10 @@ def _update_activity():
1820
1900
 
1821
1901
  _start_time: float | None = None
1822
1902
 
1903
+ # v3.6.7: Starlette app returned by mcp_server.streamable_http_app().
1904
+ # Set in create_app(); consumed by lifespan() to start the session manager.
1905
+ _mcp_app = None
1906
+
1823
1907
 
1824
1908
  # ---------------------------------------------------------------------------
1825
1909
  # Server entry point