superlocalmemory 3.5.8__tar.gz → 3.5.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 (472) hide show
  1. {superlocalmemory-3.5.8/src/superlocalmemory.egg-info → superlocalmemory-3.5.9}/PKG-INFO +1 -1
  2. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/pyproject.toml +1 -1
  3. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/__init__.py +1 -1
  4. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/commands.py +9 -2
  5. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/main.py +4 -0
  6. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/config.py +5 -0
  7. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/engine.py +23 -0
  8. superlocalmemory-3.5.9/src/superlocalmemory/core/mcp_embedder_proxy.py +89 -0
  9. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/llm/backbone.py +10 -4
  10. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/server.py +34 -0
  11. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/tools_v3.py +6 -2
  12. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/v3_api.py +63 -1
  13. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9/src/superlocalmemory.egg-info}/PKG-INFO +1 -1
  14. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory.egg-info/SOURCES.txt +1 -0
  15. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/AUTHORS.md +0 -0
  16. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/LICENSE +0 -0
  17. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/NOTICE +0 -0
  18. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/README.md +0 -0
  19. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/setup.cfg +0 -0
  20. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/attribution/__init__.py +0 -0
  21. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/attribution/mathematical_dna.py +0 -0
  22. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/attribution/signer.py +0 -0
  23. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/attribution/watermark.py +0 -0
  24. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/__init__.py +0 -0
  25. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/context_commands.py +0 -0
  26. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/daemon.py +0 -0
  27. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/db_migrate.py +0 -0
  28. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/doctor_cmd.py +0 -0
  29. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/escape_hatch.py +0 -0
  30. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/ingest_cmd.py +0 -0
  31. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/json_output.py +0 -0
  32. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/migrate_cmd.py +0 -0
  33. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/pending_store.py +0 -0
  34. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/post_install.py +0 -0
  35. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/service_installer.py +0 -0
  36. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/setup_wizard.py +0 -0
  37. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/version_banner.py +0 -0
  38. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/wizard_v3426_options.py +0 -0
  39. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/__init__.py +0 -0
  40. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/blast_radius.py +0 -0
  41. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/bridge/__init__.py +0 -0
  42. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/bridge/entity_resolver.py +0 -0
  43. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/bridge/event_listeners.py +0 -0
  44. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/bridge/fact_enricher.py +0 -0
  45. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/bridge/hebbian_linker.py +0 -0
  46. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/bridge/temporal_checker.py +0 -0
  47. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/changes.py +0 -0
  48. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/communities.py +0 -0
  49. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/config.py +0 -0
  50. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/database.py +0 -0
  51. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/extractors/__init__.py +0 -0
  52. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/extractors/python.py +0 -0
  53. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/extractors/typescript.py +0 -0
  54. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/flows.py +0 -0
  55. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/git_hooks.py +0 -0
  56. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/graph_engine.py +0 -0
  57. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/graph_store.py +0 -0
  58. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/incremental.py +0 -0
  59. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/models.py +0 -0
  60. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/parser.py +0 -0
  61. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/resolver.py +0 -0
  62. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/search.py +0 -0
  63. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/service.py +0 -0
  64. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/watcher.py +0 -0
  65. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/compliance/__init__.py +0 -0
  66. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/compliance/abac.py +0 -0
  67. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/compliance/audit.py +0 -0
  68. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/compliance/eu_ai_act.py +0 -0
  69. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/compliance/gdpr.py +0 -0
  70. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/compliance/lifecycle.py +0 -0
  71. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/compliance/retention.py +0 -0
  72. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/compliance/scheduler.py +0 -0
  73. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/__init__.py +0 -0
  74. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/backend_orchestrator.py +0 -0
  75. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/clock_monitor.py +0 -0
  76. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/consolidation_engine.py +0 -0
  77. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/context_cache.py +0 -0
  78. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/db_pool.py +0 -0
  79. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/embedding_worker.py +0 -0
  80. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/embeddings.py +0 -0
  81. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/engine_capabilities.py +0 -0
  82. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/engine_lock.py +0 -0
  83. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/engine_wiring.py +0 -0
  84. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/error_catalog.py +0 -0
  85. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/error_envelope.py +0 -0
  86. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/fact_consolidator.py +0 -0
  87. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/file_lock.py +0 -0
  88. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/graph_analyzer.py +0 -0
  89. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/graph_pruner.py +0 -0
  90. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/health_monitor.py +0 -0
  91. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/hooks.py +0 -0
  92. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/injection.py +0 -0
  93. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/loop_watchdog.py +0 -0
  94. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/maintenance.py +0 -0
  95. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/maintenance_scheduler.py +0 -0
  96. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/modes.py +0 -0
  97. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/ollama_embedder.py +0 -0
  98. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/platform_utils.py +0 -0
  99. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/priority_queue.py +0 -0
  100. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/profiles.py +0 -0
  101. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/pruning_engine.py +0 -0
  102. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/queue_consumer.py +0 -0
  103. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/queue_dispatcher.py +0 -0
  104. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/ram_lock.py +0 -0
  105. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/rate_limit.py +0 -0
  106. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/recall_gate.py +0 -0
  107. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/recall_pipeline.py +0 -0
  108. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/recall_queue.py +0 -0
  109. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/recall_worker.py +0 -0
  110. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/registry.py +0 -0
  111. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/reranker_worker.py +0 -0
  112. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/safe_fs.py +0 -0
  113. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/security_primitives.py +0 -0
  114. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/shadow_router.py +0 -0
  115. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/slm_disabled.py +0 -0
  116. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/slmignore.py +0 -0
  117. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/store_pipeline.py +0 -0
  118. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/summarizer.py +0 -0
  119. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/tier_manager.py +0 -0
  120. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/topic_signature.py +0 -0
  121. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/worker_pool.py +0 -0
  122. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/dynamics/__init__.py +0 -0
  123. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/dynamics/activation_guided_quantization.py +0 -0
  124. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/dynamics/eap_scheduler.py +0 -0
  125. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/dynamics/ebbinghaus_langevin_coupling.py +0 -0
  126. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/dynamics/fisher_langevin_coupling.py +0 -0
  127. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/__init__.py +0 -0
  128. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/auto_linker.py +0 -0
  129. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/cognitive_consolidator.py +0 -0
  130. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/consolidator.py +0 -0
  131. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/context_generator.py +0 -0
  132. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/emotional.py +0 -0
  133. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/entity_resolver.py +0 -0
  134. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/entropy_gate.py +0 -0
  135. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/fact_extractor.py +0 -0
  136. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/foresight.py +0 -0
  137. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/graph_builder.py +0 -0
  138. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/observation_builder.py +0 -0
  139. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/scene_builder.py +0 -0
  140. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/signal_inference.py +0 -0
  141. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/temporal_parser.py +0 -0
  142. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/temporal_validator.py +0 -0
  143. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/type_router.py +0 -0
  144. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/evolution/__init__.py +0 -0
  145. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/evolution/blind_verifier.py +0 -0
  146. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/evolution/budget.py +0 -0
  147. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/evolution/evolution_store.py +0 -0
  148. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/evolution/llm_dispatch.py +0 -0
  149. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/evolution/mutation_generator.py +0 -0
  150. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/evolution/skill_evolver.py +0 -0
  151. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/evolution/triggers.py +0 -0
  152. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/evolution/types.py +0 -0
  153. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/graph/__init__.py +0 -0
  154. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/graph/cozo_backend.py +0 -0
  155. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/__init__.py +0 -0
  156. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/_outcome_common.py +0 -0
  157. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/adapter_base.py +0 -0
  158. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/antigravity_adapter.py +0 -0
  159. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/auto_capture.py +0 -0
  160. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/auto_invoker.py +0 -0
  161. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/auto_parameterize.py +0 -0
  162. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/auto_recall.py +0 -0
  163. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/auto_recall_hook.py +0 -0
  164. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/before_web_hook.py +0 -0
  165. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/claude_code_hooks.py +0 -0
  166. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/context_payload.py +0 -0
  167. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/copilot_adapter.py +0 -0
  168. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/cross_platform_connector.py +0 -0
  169. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/cursor_adapter.py +0 -0
  170. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/hook_daemon.py +0 -0
  171. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/hook_handlers.py +0 -0
  172. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/ide_connector.py +0 -0
  173. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/post_tool_async_hook.py +0 -0
  174. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/post_tool_outcome_hook.py +0 -0
  175. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/prewarm_auth.py +0 -0
  176. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/rules_engine.py +0 -0
  177. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/session_registry.py +0 -0
  178. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/stop_outcome_hook.py +0 -0
  179. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/sync_loop.py +0 -0
  180. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/topic_shift_hook.py +0 -0
  181. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/user_prompt_hook.py +0 -0
  182. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/user_prompt_rehash_hook.py +0 -0
  183. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/infra/__init__.py +0 -0
  184. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/infra/auth_middleware.py +0 -0
  185. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/infra/backup.py +0 -0
  186. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/infra/cache_manager.py +0 -0
  187. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/infra/cloud_backup.py +0 -0
  188. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/infra/event_bus.py +0 -0
  189. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/infra/heartbeat_monitor.py +0 -0
  190. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/infra/pid_manager.py +0 -0
  191. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/infra/process_reaper.py +0 -0
  192. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/infra/rate_limiter.py +0 -0
  193. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/infra/webhook_dispatcher.py +0 -0
  194. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ingestion/__init__.py +0 -0
  195. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ingestion/adapter_manager.py +0 -0
  196. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ingestion/base_adapter.py +0 -0
  197. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ingestion/calendar_adapter.py +0 -0
  198. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ingestion/credentials.py +0 -0
  199. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ingestion/gmail_adapter.py +0 -0
  200. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ingestion/parsers.py +0 -0
  201. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ingestion/transcript_adapter.py +0 -0
  202. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/__init__.py +0 -0
  203. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/adaptive.py +0 -0
  204. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/arm_catalog.py +0 -0
  205. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/assertion_miner.py +0 -0
  206. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/bandit.py +0 -0
  207. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/bandit_cache.py +0 -0
  208. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/behavioral.py +0 -0
  209. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/behavioral_listener.py +0 -0
  210. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/bootstrap.py +0 -0
  211. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/consolidation_cycle.py +0 -0
  212. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/consolidation_quantization_worker.py +0 -0
  213. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/consolidation_worker.py +0 -0
  214. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/cross_project.py +0 -0
  215. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/database.py +0 -0
  216. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/dedup_hnsw.py +0 -0
  217. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/engagement.py +0 -0
  218. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/ensemble.py +0 -0
  219. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/entity_compiler.py +0 -0
  220. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/fact_outcome_joins.py +0 -0
  221. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/features.py +0 -0
  222. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/feedback.py +0 -0
  223. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/forgetting_scheduler.py +0 -0
  224. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/hnsw_dedup.py +0 -0
  225. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/labeler.py +0 -0
  226. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/legacy_migration.py +0 -0
  227. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/lightgbm_subprocess.py +0 -0
  228. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/memory_merge.py +0 -0
  229. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/model_cache.py +0 -0
  230. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/model_rollback.py +0 -0
  231. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/outcome_queue.py +0 -0
  232. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/outcomes.py +0 -0
  233. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/pattern_miner.py +0 -0
  234. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/pattern_miner_constants.py +0 -0
  235. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/project_context.py +0 -0
  236. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/quantization_scheduler.py +0 -0
  237. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/ranker.py +0 -0
  238. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/ranker_common.py +0 -0
  239. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/ranker_retrain_legacy.py +0 -0
  240. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/ranker_retrain_online.py +0 -0
  241. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/reward.py +0 -0
  242. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/reward_archive.py +0 -0
  243. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/reward_boost.py +0 -0
  244. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/reward_proxy.py +0 -0
  245. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/shadow_test.py +0 -0
  246. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/signal_worker.py +0 -0
  247. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/signals.py +0 -0
  248. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/skill_performance_miner.py +0 -0
  249. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/source_quality.py +0 -0
  250. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/trigram_index.py +0 -0
  251. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/workflows.py +0 -0
  252. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/llm/__init__.py +0 -0
  253. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/math/__init__.py +0 -0
  254. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/math/ebbinghaus.py +0 -0
  255. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/math/fisher.py +0 -0
  256. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/math/fisher_quantized.py +0 -0
  257. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/math/hopfield.py +0 -0
  258. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/math/langevin.py +0 -0
  259. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/math/polar_quant.py +0 -0
  260. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/math/qjl.py +0 -0
  261. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/math/sheaf.py +0 -0
  262. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/math/turbo_quant.py +0 -0
  263. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/__init__.py +0 -0
  264. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/_daemon_proxy.py +0 -0
  265. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/_pool_adapter.py +0 -0
  266. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/resources.py +0 -0
  267. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/shared.py +0 -0
  268. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/tools.py +0 -0
  269. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/tools_active.py +0 -0
  270. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/tools_code_graph.py +0 -0
  271. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/tools_context.py +0 -0
  272. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/tools_core.py +0 -0
  273. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/tools_evolution.py +0 -0
  274. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/tools_learning.py +0 -0
  275. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/tools_mesh.py +0 -0
  276. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/tools_v28.py +0 -0
  277. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/tools_v33.py +0 -0
  278. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mesh/__init__.py +0 -0
  279. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mesh/broker.py +0 -0
  280. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mesh/remote_sync.py +0 -0
  281. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/migrations/__init__.py +0 -0
  282. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/migrations/v3_4_25_to_v3_4_26.py +0 -0
  283. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/parameterization/__init__.py +0 -0
  284. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/parameterization/pattern_extractor.py +0 -0
  285. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/parameterization/pii_filter.py +0 -0
  286. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/parameterization/prompt_injector.py +0 -0
  287. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/parameterization/prompt_lifecycle.py +0 -0
  288. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/parameterization/soft_prompt_generator.py +0 -0
  289. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/__init__.py +0 -0
  290. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/agentic.py +0 -0
  291. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/ann_index.py +0 -0
  292. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/bm25_channel.py +0 -0
  293. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/bridge_discovery.py +0 -0
  294. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/channel_registry.py +0 -0
  295. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/engine.py +0 -0
  296. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/entity_channel.py +0 -0
  297. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/forgetting_filter.py +0 -0
  298. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/fusion.py +0 -0
  299. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/hopfield_channel.py +0 -0
  300. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/profile_channel.py +0 -0
  301. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/quantization_aware_search.py +0 -0
  302. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/reranker.py +0 -0
  303. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/semantic_channel.py +0 -0
  304. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/spreading_activation.py +0 -0
  305. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/strategy.py +0 -0
  306. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/temporal_channel.py +0 -0
  307. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/vector_store.py +0 -0
  308. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/__init__.py +0 -0
  309. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/api.py +0 -0
  310. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/bandit_loops.py +0 -0
  311. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/middleware/__init__.py +0 -0
  312. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/middleware/security_headers.py +0 -0
  313. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/__init__.py +0 -0
  314. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/adapters.py +0 -0
  315. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/agents.py +0 -0
  316. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/backup.py +0 -0
  317. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/behavioral.py +0 -0
  318. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/brain.py +0 -0
  319. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/chat.py +0 -0
  320. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/compliance.py +0 -0
  321. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/data_io.py +0 -0
  322. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/entity.py +0 -0
  323. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/events.py +0 -0
  324. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/evolution.py +0 -0
  325. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/helpers.py +0 -0
  326. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/ingest.py +0 -0
  327. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/insights.py +0 -0
  328. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/learning.py +0 -0
  329. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/lifecycle.py +0 -0
  330. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/memories.py +0 -0
  331. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/mesh.py +0 -0
  332. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/prewarm.py +0 -0
  333. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/profiles.py +0 -0
  334. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/stats.py +0 -0
  335. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/tiers.py +0 -0
  336. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/timeline.py +0 -0
  337. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/token.py +0 -0
  338. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/ws.py +0 -0
  339. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/security_middleware.py +0 -0
  340. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/ui.py +0 -0
  341. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/unified_daemon.py +0 -0
  342. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/skills/slm-build-graph/SKILL.md +0 -0
  343. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/skills/slm-list-recent/SKILL.md +0 -0
  344. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/skills/slm-recall/SKILL.md +0 -0
  345. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/skills/slm-remember/SKILL.md +0 -0
  346. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/skills/slm-show-patterns/SKILL.md +0 -0
  347. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/skills/slm-status/SKILL.md +0 -0
  348. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/skills/slm-switch-profile/SKILL.md +0 -0
  349. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/__init__.py +0 -0
  350. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/access_control.py +0 -0
  351. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/access_log.py +0 -0
  352. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/database.py +0 -0
  353. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/embedding_migrator.py +0 -0
  354. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migration_runner.py +0 -0
  355. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migration_v33.py +0 -0
  356. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations/M001_add_signal_features_columns.py +0 -0
  357. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations/M002_model_state_history.py +0 -0
  358. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations/M003_migration_log.py +0 -0
  359. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations/M004_cross_platform_sync_log.py +0 -0
  360. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations/M005_bandit_tables.py +0 -0
  361. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations/M006_action_outcomes_reward.py +0 -0
  362. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations/M007_pending_outcomes.py +0 -0
  363. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations/M009_model_lineage.py +0 -0
  364. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations/M010_evolution_config.py +0 -0
  365. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations/M011_archive_and_merge.py +0 -0
  366. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations/M012_shadow_observations.py +0 -0
  367. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations/M013_bi_temporal_columns.py +0 -0
  368. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations/M014_v345_scale_ready.py +0 -0
  369. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations/M015_add_pinned_column.py +0 -0
  370. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations/__init__.py +0 -0
  371. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations.py +0 -0
  372. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/models.py +0 -0
  373. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/quantized_store.py +0 -0
  374. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/schema.py +0 -0
  375. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/schema_code_graph.py +0 -0
  376. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/schema_v32.py +0 -0
  377. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/schema_v3410.py +0 -0
  378. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/schema_v3411.py +0 -0
  379. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/schema_v343.py +0 -0
  380. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/schema_v345.py +0 -0
  381. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/schema_v347.py +0 -0
  382. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/v2_migrator.py +0 -0
  383. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/trust/__init__.py +0 -0
  384. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/trust/gate.py +0 -0
  385. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/trust/provenance.py +0 -0
  386. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/trust/scorer.py +0 -0
  387. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/trust/signals.py +0 -0
  388. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/css/brain.css +0 -0
  389. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/css/legacy-dashboard.css +0 -0
  390. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/css/neural-glass.css +0 -0
  391. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/index.html +0 -0
  392. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/agents.js +0 -0
  393. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/auto-settings.js +0 -0
  394. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/brain.js +0 -0
  395. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/clusters.js +0 -0
  396. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/compliance.js +0 -0
  397. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/core.js +0 -0
  398. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/dashboard.js +0 -0
  399. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/events.js +0 -0
  400. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/fact-detail.js +0 -0
  401. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/feedback.js +0 -0
  402. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/graph-event-bus.js +0 -0
  403. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/graph-filters.js +0 -0
  404. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/graph-ui.js +0 -0
  405. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/ide-status.js +0 -0
  406. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/init.js +0 -0
  407. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/knowledge-graph.js +0 -0
  408. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/lifecycle.js +0 -0
  409. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/math-health.js +0 -0
  410. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/memories.js +0 -0
  411. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/memory-chat.js +0 -0
  412. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/memory-timeline.js +0 -0
  413. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/modal.js +0 -0
  414. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/ng-entities.js +0 -0
  415. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/ng-health.js +0 -0
  416. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/ng-ingestion.js +0 -0
  417. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/ng-mesh.js +0 -0
  418. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/ng-shell.js +0 -0
  419. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/ng-skills.js +0 -0
  420. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/profiles.js +0 -0
  421. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/quick-actions.js +0 -0
  422. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/recall-lab.js +0 -0
  423. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/search.js +0 -0
  424. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/settings.js +0 -0
  425. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/timeline.js +0 -0
  426. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/trust-dashboard.js +0 -0
  427. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/vendor/bootstrap-icons/bootstrap-icons.css +0 -0
  428. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff +0 -0
  429. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff2 +0 -0
  430. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/vendor/bootstrap.bundle.min.js +0 -0
  431. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/vendor/bootstrap.min.css +0 -0
  432. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/vendor/d3.v7.min.js +0 -0
  433. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/vendor/graphology-library.min.js +0 -0
  434. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/vendor/graphology.umd.min.js +0 -0
  435. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/vendor/inter-ui/inter-variable.min.css +0 -0
  436. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable-Italic.woff2 +0 -0
  437. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable.woff2 +0 -0
  438. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/vendor/sigma.min.js +0 -0
  439. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/vector/__init__.py +0 -0
  440. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/vector/lancedb_backend.py +0 -0
  441. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory.egg-info/dependency_links.txt +0 -0
  442. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory.egg-info/entry_points.txt +0 -0
  443. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory.egg-info/requires.txt +0 -0
  444. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory.egg-info/top_level.txt +0 -0
  445. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_auto_hooks.py +0 -0
  446. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_before_web_hook.py +0 -0
  447. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_behavioral_full.py +0 -0
  448. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_claude_hooks.py +0 -0
  449. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_cli.py +0 -0
  450. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_cli_json.py +0 -0
  451. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_cli_v33.py +0 -0
  452. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_compliance_full.py +0 -0
  453. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_config_system.py +0 -0
  454. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_engine_hooks.py +0 -0
  455. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_event_bus.py +0 -0
  456. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_features.py +0 -0
  457. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_final_locomo_mini.py +0 -0
  458. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_hook_handlers.py +0 -0
  459. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_ide_connector.py +0 -0
  460. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_infra.py +0 -0
  461. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_injection.py +0 -0
  462. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_learning_advanced.py +0 -0
  463. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_learning_collectors.py +0 -0
  464. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_llm_provider.py +0 -0
  465. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_mcp_server.py +0 -0
  466. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_migration.py +0 -0
  467. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_mode_switch_preservation.py +0 -0
  468. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_post_install.py +0 -0
  469. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_ranker.py +0 -0
  470. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_topic_shift_hook.py +0 -0
  471. {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_trust_full.py +0 -0
  472. {superlocalmemory-3.5.8 → superlocalmemory-3.5.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.5.8
3
+ Version: 3.5.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.5.8"
3
+ version = "3.5.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.5.8"
31
+ __version__ = "3.5.9"
32
32
 
33
33
  _REQUIRED_VERSIONS = {
34
34
  "sentence_transformers": "5.3.0",
@@ -2573,6 +2573,11 @@ def cmd_reap(args: Namespace) -> None:
2573
2573
  """Find and kill orphaned SLM processes."""
2574
2574
  use_json = getattr(args, "json", False)
2575
2575
  dry_run = not getattr(args, "force", False)
2576
+ # V3.5.9: --all bypasses orphan detection and kills every slm mcp process
2577
+ # except the current one. Use after switching IDEs to clear stale sessions.
2578
+ use_force_all = getattr(args, "all", False)
2579
+ if use_force_all:
2580
+ dry_run = False # --all always kills; --force is implied
2576
2581
 
2577
2582
  try:
2578
2583
  from superlocalmemory.infra.process_reaper import (
@@ -2581,7 +2586,7 @@ def cmd_reap(args: Namespace) -> None:
2581
2586
  )
2582
2587
 
2583
2588
  config = ReaperConfig()
2584
- result = cleanup_all_orphans(config, dry_run=dry_run)
2589
+ result = cleanup_all_orphans(config, dry_run=dry_run, force=use_force_all)
2585
2590
  except Exception as exc:
2586
2591
  if use_json:
2587
2592
  from superlocalmemory.cli.json_output import json_print
@@ -2600,7 +2605,8 @@ def cmd_reap(args: Namespace) -> None:
2600
2605
  "killed": result.get("killed", 0),
2601
2606
  "skipped": result.get("skipped", 0),
2602
2607
  }, next_actions=[
2603
- {"command": "slm reap --force --json", "description": "Kill orphans"},
2608
+ {"command": "slm reap --force --json", "description": "Kill orphan processes"},
2609
+ {"command": "slm reap --all --json", "description": "Kill ALL slm mcp sessions (IDE switch)"},
2604
2610
  {"command": "slm status --json", "description": "Check status"},
2605
2611
  ])
2606
2612
  return
@@ -2620,3 +2626,4 @@ def cmd_reap(args: Namespace) -> None:
2620
2626
  print(f" Skipped: {skipped}")
2621
2627
  if dry_run and orphans > 0:
2622
2628
  print("\n Use --force to kill orphaned processes.")
2629
+ print(" Use --all to kill ALL slm mcp sessions (after IDE switch).")
@@ -349,6 +349,10 @@ def main() -> None:
349
349
  "--force", action="store_true",
350
350
  help="Kill orphans (default: dry run only)",
351
351
  )
352
+ reap_p.add_argument(
353
+ "--all", action="store_true", dest="all",
354
+ help="Kill ALL slm mcp processes regardless of orphan status (use after IDE switch)",
355
+ )
352
356
  reap_p.add_argument("--json", action="store_true", help="Output structured JSON (agent-native)")
353
357
 
354
358
  # V3.4.3: Ingestion adapters
@@ -691,6 +691,9 @@ class SLMConfig:
691
691
  mode = Mode(data.get("mode", "a"))
692
692
  llm_data = data.get("llm", {})
693
693
  emb_data = data.get("embedding", {})
694
+ # V3.5.9: read base_dir before constructing config so for_mode() builds
695
+ # db_path from the user's directory, not DEFAULT_BASE_DIR.
696
+ raw_base_dir = Path(data.get("base_dir", str(DEFAULT_BASE_DIR)))
694
697
  config = cls.for_mode(
695
698
  mode,
696
699
  llm_provider=llm_data.get("provider", ""),
@@ -703,6 +706,7 @@ class SLMConfig:
703
706
  embedding_deployment=emb_data.get("deployment_name", ""),
704
707
  embedding_model_name=emb_data.get("model_name", ""),
705
708
  embedding_dimension=int(emb_data.get("dimension", 0) or 0),
709
+ base_dir=raw_base_dir,
706
710
  )
707
711
  config.active_profile = data.get("active_profile", "default")
708
712
 
@@ -813,6 +817,7 @@ class SLMConfig:
813
817
  data = {
814
818
  "mode": effective_mode,
815
819
  "active_profile": self.active_profile,
820
+ "base_dir": str(self.base_dir), # V3.5.9: persist so load() can restore custom paths
816
821
  "llm": {
817
822
  "provider": self.llm.provider,
818
823
  "model": self.llm.model,
@@ -126,6 +126,10 @@ class MemoryEngine:
126
126
 
127
127
  if self._capabilities is Capabilities.FULL:
128
128
  self._init_heavy_layer()
129
+ else:
130
+ # V3.5.9: LIGHT mode — try to get embedder from running daemon so that
131
+ # memories stored via MCP have real embeddings (fixes PR #30 NULL embedder).
132
+ self._try_init_proxy()
129
133
 
130
134
  self._initialized = True
131
135
  logger.info(
@@ -187,6 +191,25 @@ class MemoryEngine:
187
191
  from superlocalmemory.learning.adaptive import AdaptiveLearner
188
192
  self._adaptive_learner = AdaptiveLearner(self._db)
189
193
 
194
+ def _try_init_proxy(self) -> None:
195
+ """V3.5.9: Attach McpEmbedderProxy when running in LIGHT mode.
196
+
197
+ If the daemon is reachable, the proxy delegates embed calls over HTTP
198
+ so that MCP-stored facts have real embeddings (fixes PR #30). Silently
199
+ skips if the daemon is not running — keyword recall still works.
200
+ """
201
+ try:
202
+ from superlocalmemory.core.mcp_embedder_proxy import McpEmbedderProxy
203
+ port = getattr(self._config, "daemon_port", 8765)
204
+ proxy = McpEmbedderProxy(port=port)
205
+ if proxy.is_available():
206
+ self._embedder = proxy
207
+ logger.info("MCP embedder proxy attached (daemon port %d)", port)
208
+ else:
209
+ logger.debug("Daemon not reachable — MCP will run without embedder")
210
+ except Exception as exc:
211
+ logger.debug("McpEmbedderProxy init skipped: %s", exc)
212
+
190
213
  def _init_heavy_layer(self) -> None:
191
214
  from superlocalmemory.llm.backbone import LLMBackbone
192
215
  from superlocalmemory.core.engine_wiring import (
@@ -0,0 +1,89 @@
1
+ # Copyright (c) 2026 Varun Pratap Bhardwaj / Qualixar
2
+ # Licensed under AGPL-3.0-or-later - see LICENSE file
3
+ # Part of SuperLocalMemory V3 | https://qualixar.com
4
+
5
+ """V3.5.9 — McpEmbedderProxy: lightweight embedder for the MCP (LIGHT) process.
6
+
7
+ Problem: MemoryEngine(Capabilities.LIGHT) skips _init_heavy_layer(), leaving
8
+ _embedder=None permanently. Any memory stored via MCP tools has NULL embeddings
9
+ → semantic search silently broken; health() lies, reporting unavailable.
10
+
11
+ Solution: a thin proxy that delegates embed_batch() to the running daemon via
12
+ its POST /api/embed endpoint over localhost HTTP. The daemon runs a FULL engine
13
+ with one real ONNX/Ollama worker. No second ONNX process is spawned.
14
+
15
+ Usage (engine.py LIGHT branch):
16
+ proxy = McpEmbedderProxy(port=8765)
17
+ if proxy.is_available():
18
+ engine._embedder = proxy
19
+ """
20
+
21
+ from __future__ import annotations
22
+
23
+ import logging
24
+
25
+ logger = logging.getLogger(__name__)
26
+
27
+ _DEFAULT_TIMEOUT = 5.0 # seconds — fast enough for inline store() calls
28
+
29
+
30
+ class McpEmbedderProxy:
31
+ """Proxy embedder: MCP process → daemon's /api/embed over localhost HTTP."""
32
+
33
+ def __init__(self, port: int = 8765, timeout: float = _DEFAULT_TIMEOUT) -> None:
34
+ self._base_url = f"http://127.0.0.1:{port}"
35
+ self._timeout = timeout
36
+ self._available: bool | None = None # cached after first is_available() call
37
+
38
+ def is_available(self) -> bool:
39
+ """Ping daemon's embed endpoint. Cached after first success."""
40
+ if self._available is True:
41
+ return True
42
+ try:
43
+ import httpx
44
+ resp = httpx.get(f"{self._base_url}/api/v3/embed/ping", timeout=2.0)
45
+ self._available = resp.status_code == 200
46
+ except Exception:
47
+ self._available = False
48
+ return bool(self._available)
49
+
50
+ # -- Embedder interface (matches embeddings.py / ollama_embedder.py) ------
51
+
52
+ def embed(self, text: str) -> list[float] | None:
53
+ """Embed a single text via daemon. Returns None on any error."""
54
+ results = self.embed_batch([text])
55
+ return results[0] if results else None
56
+
57
+ def embed_batch(self, texts: list[str]) -> list[list[float] | None]:
58
+ """Embed a batch of texts via daemon's /api/embed endpoint."""
59
+ if not texts:
60
+ return []
61
+ try:
62
+ import httpx
63
+ resp = httpx.post(
64
+ f"{self._base_url}/api/v3/embed",
65
+ json={"texts": texts},
66
+ timeout=self._timeout,
67
+ )
68
+ resp.raise_for_status()
69
+ data = resp.json()
70
+ embeddings = data.get("embeddings", [])
71
+ # Pad with None if daemon returned fewer results than requested
72
+ while len(embeddings) < len(texts):
73
+ embeddings.append(None)
74
+ return embeddings
75
+ except Exception as exc:
76
+ logger.debug("McpEmbedderProxy.embed_batch failed: %s", exc)
77
+ return [None] * len(texts)
78
+
79
+ def compute_fisher_params(
80
+ self, embedding: list[float]
81
+ ) -> tuple[list[float] | None, list[float] | None]:
82
+ """Fisher-Rao params stay in daemon's FULL engine; proxy returns None.
83
+
84
+ The MCP LIGHT process stores facts with embedding=<vector> but
85
+ fisher_mean=None, fisher_variance=None. The daemon's consolidation
86
+ pass fills these in asynchronously — same behaviour as the
87
+ write-through remember path.
88
+ """
89
+ return None, None
@@ -233,17 +233,23 @@ class LLMBackbone:
233
233
  self, prompt: str, system: str, max_tokens: int, temperature: float,
234
234
  ) -> tuple[str, dict[str, str], dict]:
235
235
  messages = self._make_messages(system, prompt)
236
- headers = {
237
- "Authorization": f"Bearer {self._api_key}",
238
- "Content-Type": "application/json",
239
- }
236
+ # V3.5.9: Skip Authorization header when api_key is empty so unauthenticated
237
+ # local endpoints (llama.cpp, LM Studio, etc.) don't reject with HTTP 401.
238
+ headers = {"Content-Type": "application/json"}
239
+ if self._api_key:
240
+ headers["Authorization"] = f"Bearer {self._api_key}"
240
241
  payload = {
241
242
  "model": self._model,
242
243
  "messages": messages,
243
244
  "max_tokens": max_tokens,
244
245
  "temperature": temperature,
245
246
  }
247
+ # V3.5.9: If base_url is a bare base (e.g. "http://host:port/v1") without
248
+ # the /chat/completions path, append it — matching OpenAI SDK behaviour and
249
+ # fixing the /v1/v1 duplication reported in issue #29.
246
250
  url = self._base_url or _OPENAI_URL
251
+ if self._base_url and not self._base_url.rstrip("/").endswith("chat/completions"):
252
+ url = f"{self._base_url.rstrip('/')}/chat/completions"
247
253
  return url, headers, payload
248
254
 
249
255
  def _build_ollama(
@@ -278,5 +278,39 @@ _watchdog_thread = threading.Thread(target=_parent_watchdog, daemon=True, name="
278
278
  _watchdog_thread.start()
279
279
 
280
280
 
281
+ # V3.5.9: Stdin EOF monitor — complements the parent watchdog for the case where
282
+ # the IDE starts a new MCP session WITHOUT quitting the app. The old stdio pipe
283
+ # is abandoned (write-end closed) but the parent process stays alive, so the
284
+ # watchdog never fires. Without this, each IDE reconnect adds a zombie process
285
+ # (22 seen in production causing 12 GB swap on the M5 Pro).
286
+ #
287
+ # Uses kqueue(2) KQ_EV_EOF on macOS — fires when the write-end of the stdin pipe
288
+ # closes WITHOUT consuming any bytes, so it cannot race with FastMCP's asyncio
289
+ # stdin reader. On Linux (no kqueue), the watchdog alone provides coverage.
290
+ def _stdin_eof_monitor() -> None:
291
+ """Exit when the IDE closes our stdin pipe (kqueue — macOS only)."""
292
+ import select as _sel, os as _os_eof
293
+ _mlog = logging.getLogger(__name__ + ".stdin_monitor")
294
+ if not hasattr(_sel, "kqueue"):
295
+ return # Linux / non-macOS: watchdog covers process death
296
+ try:
297
+ fd = sys.stdin.fileno()
298
+ kq = _sel.kqueue()
299
+ ke = _sel.kevent(fd, filter=_sel.KQ_FILTER_READ, flags=_sel.KQ_EV_ADD | _sel.KQ_EV_EOF)
300
+ kq.control([ke], 0) # register without waiting
301
+ while True:
302
+ evs = kq.control(None, 4, 30.0) # 30 s poll — low cost
303
+ for ev in evs:
304
+ if ev.flags & _sel.KQ_EV_EOF:
305
+ _mlog.info("stdin write-end closed (kqueue EOF), self-terminating")
306
+ _os_eof._exit(0)
307
+ except Exception as exc:
308
+ _mlog.debug("stdin EOF monitor error: %s — watchdog will cover", exc)
309
+
310
+
311
+ _stdin_monitor_thread = threading.Thread(target=_stdin_eof_monitor, daemon=True, name="stdin-eof-monitor")
312
+ _stdin_monitor_thread.start()
313
+
314
+
281
315
  if __name__ == "__main__":
282
316
  server.run(transport="stdio")
@@ -161,9 +161,13 @@ def register_v3_tools(server, get_engine: Callable) -> None:
161
161
  "fact_count": fact_count,
162
162
  }
163
163
 
164
- # Embedding service
164
+ # Embedding service — distinguish real embedder from V3.5.9 daemon proxy
165
+ _emb = engine._embedder
166
+ from superlocalmemory.core.mcp_embedder_proxy import McpEmbedderProxy
167
+ _is_proxy = isinstance(_emb, McpEmbedderProxy)
165
168
  status["components"]["embedder"] = {
166
- "status": "ok" if engine._embedder else "unavailable",
169
+ "status": "ok" if _emb else "unavailable",
170
+ "source": "daemon_proxy" if _is_proxy else "local",
167
171
  "model": engine._config.embedding.model_name,
168
172
  }
169
173
 
@@ -365,6 +365,51 @@ async def test_embedding_endpoint(request: Request):
365
365
  return {"success": False, "error": type(e).__name__}
366
366
 
367
367
 
368
+ @router.get("/embed/ping")
369
+ async def embed_ping():
370
+ """V3.5.9: Liveness probe for McpEmbedderProxy. Returns 200 when daemon
371
+ embedder is ready so the proxy knows the daemon is reachable."""
372
+ try:
373
+ from .helpers import get_engine_lazy
374
+ # We just need to confirm the route is alive — engine check is optional
375
+ return {"ok": True}
376
+ except Exception as e:
377
+ return JSONResponse({"ok": False, "error": str(e)}, status_code=503)
378
+
379
+
380
+ @router.post("/embed")
381
+ async def embed_texts(request: Request):
382
+ """V3.5.9: Embed texts via daemon's FULL engine for McpEmbedderProxy.
383
+
384
+ MCP processes run LIGHT engines (no ONNX worker). This endpoint lets them
385
+ delegate embed_batch() to the daemon's single real embedder — one ONNX
386
+ worker total across all sessions (fixes PR #30 NULL embedder bug).
387
+ """
388
+ import asyncio
389
+ try:
390
+ body = await request.json()
391
+ texts = body.get("texts", [])
392
+ if not texts:
393
+ return {"embeddings": []}
394
+
395
+ from .helpers import get_engine_lazy
396
+ engine = get_engine_lazy(request.app.state)
397
+ if engine is None or engine._embedder is None:
398
+ return JSONResponse(
399
+ {"error": "Embedder not available in daemon"},
400
+ status_code=503,
401
+ )
402
+
403
+ loop = asyncio.get_event_loop()
404
+ embeddings = await loop.run_in_executor(
405
+ None,
406
+ lambda: engine._embedder.embed_batch(texts),
407
+ )
408
+ return {"embeddings": embeddings}
409
+ except Exception as e:
410
+ return JSONResponse({"error": str(e)}, status_code=500)
411
+
412
+
368
413
  @router.post("/provider/test")
369
414
  async def test_provider(request: Request):
370
415
  """Test connectivity to an LLM provider."""
@@ -400,8 +445,25 @@ async def test_provider(request: Request):
400
445
  return {"success": True, "message": "OpenRouter connected, key valid"}
401
446
 
402
447
  if provider == "openai":
448
+ # V3.5.9: custom/local endpoint — api_key is optional (llama.cpp, LM Studio etc.)
449
+ custom_endpoint = body.get("base_url", "").strip() or body.get("endpoint", "").strip()
450
+ if custom_endpoint:
451
+ headers_test = {"Content-Type": "application/json"}
452
+ if api_key:
453
+ headers_test["Authorization"] = f"Bearer {api_key}"
454
+ base = custom_endpoint.rstrip("/")
455
+ if not base.endswith("chat/completions"):
456
+ base = f"{base}/chat/completions"
457
+ with httpx.Client(timeout=httpx.Timeout(10.0)) as c:
458
+ # Probe with a minimal chat request (models list not universal on local servers)
459
+ probe = {"model": body.get("model", "test"), "messages": [{"role": "user", "content": "hi"}], "max_tokens": 1}
460
+ resp = c.post(base, headers=headers_test, json=probe)
461
+ if resp.status_code in (200, 400, 422):
462
+ return {"success": True, "message": f"Custom endpoint reachable (HTTP {resp.status_code})"}
463
+ resp.raise_for_status()
464
+ return {"success": True, "message": "Custom OpenAI-compatible endpoint connected"}
403
465
  if not api_key:
404
- return {"success": False, "error": "API key required"}
466
+ return {"success": False, "error": "API key required for official OpenAI endpoint"}
405
467
  with httpx.Client(timeout=httpx.Timeout(10.0)) as c:
406
468
  resp = c.get("https://api.openai.com/v1/models", headers={"Authorization": f"Bearer {api_key}"})
407
469
  resp.raise_for_status()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: superlocalmemory
3
- Version: 3.5.8
3
+ Version: 3.5.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
@@ -90,6 +90,7 @@ src/superlocalmemory/core/injection.py
90
90
  src/superlocalmemory/core/loop_watchdog.py
91
91
  src/superlocalmemory/core/maintenance.py
92
92
  src/superlocalmemory/core/maintenance_scheduler.py
93
+ src/superlocalmemory/core/mcp_embedder_proxy.py
93
94
  src/superlocalmemory/core/modes.py
94
95
  src/superlocalmemory/core/ollama_embedder.py
95
96
  src/superlocalmemory/core/platform_utils.py