superlocalmemory 3.4.52__tar.gz → 3.4.53__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 (467) hide show
  1. {superlocalmemory-3.4.52/src/superlocalmemory.egg-info → superlocalmemory-3.4.53}/PKG-INFO +1 -1
  2. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/pyproject.toml +1 -1
  3. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/__init__.py +1 -1
  4. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/retrieval/engine.py +56 -42
  5. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/retrieval/reranker.py +44 -27
  6. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/unified_daemon.py +23 -1
  7. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53/src/superlocalmemory.egg-info}/PKG-INFO +1 -1
  8. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/AUTHORS.md +0 -0
  9. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/LICENSE +0 -0
  10. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/NOTICE +0 -0
  11. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/README.md +0 -0
  12. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/setup.cfg +0 -0
  13. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/attribution/__init__.py +0 -0
  14. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/attribution/mathematical_dna.py +0 -0
  15. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/attribution/signer.py +0 -0
  16. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/attribution/watermark.py +0 -0
  17. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/cli/__init__.py +0 -0
  18. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/cli/commands.py +0 -0
  19. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/cli/context_commands.py +0 -0
  20. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/cli/daemon.py +0 -0
  21. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/cli/db_migrate.py +0 -0
  22. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/cli/doctor_cmd.py +0 -0
  23. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/cli/escape_hatch.py +0 -0
  24. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/cli/ingest_cmd.py +0 -0
  25. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/cli/json_output.py +0 -0
  26. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/cli/main.py +0 -0
  27. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/cli/migrate_cmd.py +0 -0
  28. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/cli/pending_store.py +0 -0
  29. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/cli/post_install.py +0 -0
  30. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/cli/service_installer.py +0 -0
  31. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/cli/setup_wizard.py +0 -0
  32. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/cli/version_banner.py +0 -0
  33. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/cli/wizard_v3426_options.py +0 -0
  34. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/code_graph/__init__.py +0 -0
  35. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/code_graph/blast_radius.py +0 -0
  36. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/code_graph/bridge/__init__.py +0 -0
  37. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/code_graph/bridge/entity_resolver.py +0 -0
  38. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/code_graph/bridge/event_listeners.py +0 -0
  39. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/code_graph/bridge/fact_enricher.py +0 -0
  40. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/code_graph/bridge/hebbian_linker.py +0 -0
  41. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/code_graph/bridge/temporal_checker.py +0 -0
  42. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/code_graph/changes.py +0 -0
  43. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/code_graph/communities.py +0 -0
  44. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/code_graph/config.py +0 -0
  45. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/code_graph/database.py +0 -0
  46. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/code_graph/extractors/__init__.py +0 -0
  47. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/code_graph/extractors/python.py +0 -0
  48. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/code_graph/extractors/typescript.py +0 -0
  49. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/code_graph/flows.py +0 -0
  50. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/code_graph/git_hooks.py +0 -0
  51. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/code_graph/graph_engine.py +0 -0
  52. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/code_graph/graph_store.py +0 -0
  53. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/code_graph/incremental.py +0 -0
  54. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/code_graph/models.py +0 -0
  55. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/code_graph/parser.py +0 -0
  56. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/code_graph/resolver.py +0 -0
  57. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/code_graph/search.py +0 -0
  58. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/code_graph/service.py +0 -0
  59. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/code_graph/watcher.py +0 -0
  60. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/compliance/__init__.py +0 -0
  61. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/compliance/abac.py +0 -0
  62. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/compliance/audit.py +0 -0
  63. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/compliance/eu_ai_act.py +0 -0
  64. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/compliance/gdpr.py +0 -0
  65. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/compliance/lifecycle.py +0 -0
  66. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/compliance/retention.py +0 -0
  67. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/compliance/scheduler.py +0 -0
  68. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/__init__.py +0 -0
  69. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/backend_orchestrator.py +0 -0
  70. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/clock_monitor.py +0 -0
  71. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/config.py +0 -0
  72. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/consolidation_engine.py +0 -0
  73. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/context_cache.py +0 -0
  74. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/db_pool.py +0 -0
  75. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/embedding_worker.py +0 -0
  76. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/embeddings.py +0 -0
  77. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/engine.py +0 -0
  78. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/engine_capabilities.py +0 -0
  79. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/engine_lock.py +0 -0
  80. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/engine_wiring.py +0 -0
  81. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/error_catalog.py +0 -0
  82. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/error_envelope.py +0 -0
  83. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/fact_consolidator.py +0 -0
  84. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/file_lock.py +0 -0
  85. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/graph_analyzer.py +0 -0
  86. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/graph_pruner.py +0 -0
  87. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/health_monitor.py +0 -0
  88. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/hooks.py +0 -0
  89. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/loop_watchdog.py +0 -0
  90. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/maintenance.py +0 -0
  91. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/maintenance_scheduler.py +0 -0
  92. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/modes.py +0 -0
  93. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/ollama_embedder.py +0 -0
  94. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/platform_utils.py +0 -0
  95. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/priority_queue.py +0 -0
  96. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/profiles.py +0 -0
  97. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/pruning_engine.py +0 -0
  98. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/queue_consumer.py +0 -0
  99. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/queue_dispatcher.py +0 -0
  100. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/ram_lock.py +0 -0
  101. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/rate_limit.py +0 -0
  102. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/recall_gate.py +0 -0
  103. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/recall_pipeline.py +0 -0
  104. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/recall_queue.py +0 -0
  105. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/recall_worker.py +0 -0
  106. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/registry.py +0 -0
  107. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/reranker_worker.py +0 -0
  108. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/safe_fs.py +0 -0
  109. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/security_primitives.py +0 -0
  110. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/shadow_router.py +0 -0
  111. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/slm_disabled.py +0 -0
  112. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/slmignore.py +0 -0
  113. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/store_pipeline.py +0 -0
  114. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/summarizer.py +0 -0
  115. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/tier_manager.py +0 -0
  116. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/topic_signature.py +0 -0
  117. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/core/worker_pool.py +0 -0
  118. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/dynamics/__init__.py +0 -0
  119. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/dynamics/activation_guided_quantization.py +0 -0
  120. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/dynamics/eap_scheduler.py +0 -0
  121. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/dynamics/ebbinghaus_langevin_coupling.py +0 -0
  122. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/dynamics/fisher_langevin_coupling.py +0 -0
  123. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/encoding/__init__.py +0 -0
  124. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/encoding/auto_linker.py +0 -0
  125. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/encoding/cognitive_consolidator.py +0 -0
  126. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/encoding/consolidator.py +0 -0
  127. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/encoding/context_generator.py +0 -0
  128. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/encoding/emotional.py +0 -0
  129. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/encoding/entity_resolver.py +0 -0
  130. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/encoding/entropy_gate.py +0 -0
  131. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/encoding/fact_extractor.py +0 -0
  132. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/encoding/foresight.py +0 -0
  133. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/encoding/graph_builder.py +0 -0
  134. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/encoding/observation_builder.py +0 -0
  135. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/encoding/scene_builder.py +0 -0
  136. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/encoding/signal_inference.py +0 -0
  137. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/encoding/temporal_parser.py +0 -0
  138. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/encoding/temporal_validator.py +0 -0
  139. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/encoding/type_router.py +0 -0
  140. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/evolution/__init__.py +0 -0
  141. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/evolution/blind_verifier.py +0 -0
  142. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/evolution/budget.py +0 -0
  143. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/evolution/evolution_store.py +0 -0
  144. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/evolution/llm_dispatch.py +0 -0
  145. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/evolution/mutation_generator.py +0 -0
  146. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/evolution/skill_evolver.py +0 -0
  147. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/evolution/triggers.py +0 -0
  148. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/evolution/types.py +0 -0
  149. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/graph/__init__.py +0 -0
  150. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/graph/cozo_backend.py +0 -0
  151. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/hooks/__init__.py +0 -0
  152. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/hooks/_outcome_common.py +0 -0
  153. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/hooks/adapter_base.py +0 -0
  154. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/hooks/antigravity_adapter.py +0 -0
  155. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/hooks/auto_capture.py +0 -0
  156. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/hooks/auto_invoker.py +0 -0
  157. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/hooks/auto_parameterize.py +0 -0
  158. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/hooks/auto_recall.py +0 -0
  159. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/hooks/auto_recall_hook.py +0 -0
  160. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/hooks/before_web_hook.py +0 -0
  161. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/hooks/claude_code_hooks.py +0 -0
  162. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/hooks/context_payload.py +0 -0
  163. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/hooks/copilot_adapter.py +0 -0
  164. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/hooks/cross_platform_connector.py +0 -0
  165. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/hooks/cursor_adapter.py +0 -0
  166. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/hooks/hook_daemon.py +0 -0
  167. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/hooks/hook_handlers.py +0 -0
  168. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/hooks/ide_connector.py +0 -0
  169. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/hooks/post_tool_async_hook.py +0 -0
  170. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/hooks/post_tool_outcome_hook.py +0 -0
  171. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/hooks/prewarm_auth.py +0 -0
  172. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/hooks/rules_engine.py +0 -0
  173. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/hooks/session_registry.py +0 -0
  174. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/hooks/stop_outcome_hook.py +0 -0
  175. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/hooks/sync_loop.py +0 -0
  176. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/hooks/topic_shift_hook.py +0 -0
  177. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/hooks/user_prompt_hook.py +0 -0
  178. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/hooks/user_prompt_rehash_hook.py +0 -0
  179. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/infra/__init__.py +0 -0
  180. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/infra/auth_middleware.py +0 -0
  181. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/infra/backup.py +0 -0
  182. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/infra/cache_manager.py +0 -0
  183. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/infra/cloud_backup.py +0 -0
  184. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/infra/event_bus.py +0 -0
  185. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/infra/heartbeat_monitor.py +0 -0
  186. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/infra/pid_manager.py +0 -0
  187. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/infra/process_reaper.py +0 -0
  188. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/infra/rate_limiter.py +0 -0
  189. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/infra/webhook_dispatcher.py +0 -0
  190. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ingestion/__init__.py +0 -0
  191. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ingestion/adapter_manager.py +0 -0
  192. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ingestion/base_adapter.py +0 -0
  193. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ingestion/calendar_adapter.py +0 -0
  194. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ingestion/credentials.py +0 -0
  195. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ingestion/gmail_adapter.py +0 -0
  196. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ingestion/parsers.py +0 -0
  197. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ingestion/transcript_adapter.py +0 -0
  198. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/__init__.py +0 -0
  199. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/adaptive.py +0 -0
  200. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/arm_catalog.py +0 -0
  201. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/assertion_miner.py +0 -0
  202. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/bandit.py +0 -0
  203. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/bandit_cache.py +0 -0
  204. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/behavioral.py +0 -0
  205. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/behavioral_listener.py +0 -0
  206. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/bootstrap.py +0 -0
  207. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/consolidation_cycle.py +0 -0
  208. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/consolidation_quantization_worker.py +0 -0
  209. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/consolidation_worker.py +0 -0
  210. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/cross_project.py +0 -0
  211. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/database.py +0 -0
  212. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/dedup_hnsw.py +0 -0
  213. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/engagement.py +0 -0
  214. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/ensemble.py +0 -0
  215. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/entity_compiler.py +0 -0
  216. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/fact_outcome_joins.py +0 -0
  217. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/features.py +0 -0
  218. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/feedback.py +0 -0
  219. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/forgetting_scheduler.py +0 -0
  220. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/hnsw_dedup.py +0 -0
  221. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/labeler.py +0 -0
  222. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/legacy_migration.py +0 -0
  223. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/memory_merge.py +0 -0
  224. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/model_cache.py +0 -0
  225. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/model_rollback.py +0 -0
  226. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/outcome_queue.py +0 -0
  227. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/outcomes.py +0 -0
  228. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/pattern_miner.py +0 -0
  229. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/pattern_miner_constants.py +0 -0
  230. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/project_context.py +0 -0
  231. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/quantization_scheduler.py +0 -0
  232. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/ranker.py +0 -0
  233. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/ranker_common.py +0 -0
  234. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/ranker_retrain_legacy.py +0 -0
  235. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/ranker_retrain_online.py +0 -0
  236. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/reward.py +0 -0
  237. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/reward_archive.py +0 -0
  238. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/reward_boost.py +0 -0
  239. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/reward_proxy.py +0 -0
  240. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/shadow_test.py +0 -0
  241. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/signal_worker.py +0 -0
  242. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/signals.py +0 -0
  243. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/skill_performance_miner.py +0 -0
  244. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/source_quality.py +0 -0
  245. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/trigram_index.py +0 -0
  246. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/learning/workflows.py +0 -0
  247. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/llm/__init__.py +0 -0
  248. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/llm/backbone.py +0 -0
  249. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/math/__init__.py +0 -0
  250. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/math/ebbinghaus.py +0 -0
  251. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/math/fisher.py +0 -0
  252. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/math/fisher_quantized.py +0 -0
  253. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/math/hopfield.py +0 -0
  254. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/math/langevin.py +0 -0
  255. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/math/polar_quant.py +0 -0
  256. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/math/qjl.py +0 -0
  257. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/math/sheaf.py +0 -0
  258. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/math/turbo_quant.py +0 -0
  259. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/mcp/__init__.py +0 -0
  260. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/mcp/_daemon_proxy.py +0 -0
  261. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/mcp/_pool_adapter.py +0 -0
  262. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/mcp/resources.py +0 -0
  263. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/mcp/server.py +0 -0
  264. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/mcp/shared.py +0 -0
  265. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/mcp/tools.py +0 -0
  266. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/mcp/tools_active.py +0 -0
  267. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/mcp/tools_code_graph.py +0 -0
  268. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/mcp/tools_context.py +0 -0
  269. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/mcp/tools_core.py +0 -0
  270. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/mcp/tools_evolution.py +0 -0
  271. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/mcp/tools_learning.py +0 -0
  272. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/mcp/tools_mesh.py +0 -0
  273. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/mcp/tools_v28.py +0 -0
  274. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/mcp/tools_v3.py +0 -0
  275. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/mcp/tools_v33.py +0 -0
  276. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/mesh/__init__.py +0 -0
  277. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/mesh/broker.py +0 -0
  278. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/mesh/remote_sync.py +0 -0
  279. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/migrations/__init__.py +0 -0
  280. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/migrations/v3_4_25_to_v3_4_26.py +0 -0
  281. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/parameterization/__init__.py +0 -0
  282. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/parameterization/pattern_extractor.py +0 -0
  283. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/parameterization/pii_filter.py +0 -0
  284. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/parameterization/prompt_injector.py +0 -0
  285. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/parameterization/prompt_lifecycle.py +0 -0
  286. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/parameterization/soft_prompt_generator.py +0 -0
  287. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/retrieval/__init__.py +0 -0
  288. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/retrieval/agentic.py +0 -0
  289. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/retrieval/ann_index.py +0 -0
  290. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/retrieval/bm25_channel.py +0 -0
  291. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/retrieval/bridge_discovery.py +0 -0
  292. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/retrieval/channel_registry.py +0 -0
  293. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/retrieval/entity_channel.py +0 -0
  294. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/retrieval/forgetting_filter.py +0 -0
  295. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/retrieval/fusion.py +0 -0
  296. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/retrieval/hopfield_channel.py +0 -0
  297. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/retrieval/profile_channel.py +0 -0
  298. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/retrieval/quantization_aware_search.py +0 -0
  299. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/retrieval/semantic_channel.py +0 -0
  300. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/retrieval/spreading_activation.py +0 -0
  301. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/retrieval/strategy.py +0 -0
  302. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/retrieval/temporal_channel.py +0 -0
  303. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/retrieval/vector_store.py +0 -0
  304. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/__init__.py +0 -0
  305. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/api.py +0 -0
  306. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/bandit_loops.py +0 -0
  307. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/middleware/__init__.py +0 -0
  308. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/middleware/security_headers.py +0 -0
  309. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/routes/__init__.py +0 -0
  310. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/routes/adapters.py +0 -0
  311. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/routes/agents.py +0 -0
  312. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/routes/backup.py +0 -0
  313. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/routes/behavioral.py +0 -0
  314. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/routes/brain.py +0 -0
  315. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/routes/chat.py +0 -0
  316. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/routes/compliance.py +0 -0
  317. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/routes/data_io.py +0 -0
  318. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/routes/entity.py +0 -0
  319. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/routes/events.py +0 -0
  320. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/routes/evolution.py +0 -0
  321. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/routes/helpers.py +0 -0
  322. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/routes/ingest.py +0 -0
  323. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/routes/insights.py +0 -0
  324. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/routes/learning.py +0 -0
  325. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/routes/lifecycle.py +0 -0
  326. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/routes/memories.py +0 -0
  327. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/routes/mesh.py +0 -0
  328. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/routes/prewarm.py +0 -0
  329. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/routes/profiles.py +0 -0
  330. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/routes/stats.py +0 -0
  331. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/routes/tiers.py +0 -0
  332. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/routes/timeline.py +0 -0
  333. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/routes/token.py +0 -0
  334. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/routes/v3_api.py +0 -0
  335. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/routes/ws.py +0 -0
  336. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/security_middleware.py +0 -0
  337. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/server/ui.py +0 -0
  338. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/skills/slm-build-graph/SKILL.md +0 -0
  339. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/skills/slm-list-recent/SKILL.md +0 -0
  340. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/skills/slm-recall/SKILL.md +0 -0
  341. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/skills/slm-remember/SKILL.md +0 -0
  342. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/skills/slm-show-patterns/SKILL.md +0 -0
  343. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/skills/slm-status/SKILL.md +0 -0
  344. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/skills/slm-switch-profile/SKILL.md +0 -0
  345. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/__init__.py +0 -0
  346. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/access_control.py +0 -0
  347. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/access_log.py +0 -0
  348. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/database.py +0 -0
  349. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/embedding_migrator.py +0 -0
  350. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/migration_runner.py +0 -0
  351. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/migration_v33.py +0 -0
  352. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/migrations/M001_add_signal_features_columns.py +0 -0
  353. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/migrations/M002_model_state_history.py +0 -0
  354. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/migrations/M003_migration_log.py +0 -0
  355. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/migrations/M004_cross_platform_sync_log.py +0 -0
  356. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/migrations/M005_bandit_tables.py +0 -0
  357. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/migrations/M006_action_outcomes_reward.py +0 -0
  358. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/migrations/M007_pending_outcomes.py +0 -0
  359. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/migrations/M009_model_lineage.py +0 -0
  360. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/migrations/M010_evolution_config.py +0 -0
  361. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/migrations/M011_archive_and_merge.py +0 -0
  362. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/migrations/M012_shadow_observations.py +0 -0
  363. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/migrations/M013_bi_temporal_columns.py +0 -0
  364. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/migrations/M014_v345_scale_ready.py +0 -0
  365. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/migrations/__init__.py +0 -0
  366. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/migrations.py +0 -0
  367. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/models.py +0 -0
  368. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/quantized_store.py +0 -0
  369. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/schema.py +0 -0
  370. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/schema_code_graph.py +0 -0
  371. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/schema_v32.py +0 -0
  372. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/schema_v3410.py +0 -0
  373. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/schema_v3411.py +0 -0
  374. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/schema_v343.py +0 -0
  375. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/schema_v345.py +0 -0
  376. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/schema_v347.py +0 -0
  377. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/storage/v2_migrator.py +0 -0
  378. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/trust/__init__.py +0 -0
  379. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/trust/gate.py +0 -0
  380. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/trust/provenance.py +0 -0
  381. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/trust/scorer.py +0 -0
  382. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/trust/signals.py +0 -0
  383. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/css/brain.css +0 -0
  384. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/css/legacy-dashboard.css +0 -0
  385. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/css/neural-glass.css +0 -0
  386. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/index.html +0 -0
  387. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/agents.js +0 -0
  388. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/auto-settings.js +0 -0
  389. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/brain.js +0 -0
  390. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/clusters.js +0 -0
  391. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/compliance.js +0 -0
  392. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/core.js +0 -0
  393. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/dashboard.js +0 -0
  394. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/events.js +0 -0
  395. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/fact-detail.js +0 -0
  396. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/feedback.js +0 -0
  397. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/graph-event-bus.js +0 -0
  398. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/graph-filters.js +0 -0
  399. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/graph-ui.js +0 -0
  400. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/ide-status.js +0 -0
  401. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/init.js +0 -0
  402. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/knowledge-graph.js +0 -0
  403. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/lifecycle.js +0 -0
  404. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/math-health.js +0 -0
  405. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/memories.js +0 -0
  406. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/memory-chat.js +0 -0
  407. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/memory-timeline.js +0 -0
  408. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/modal.js +0 -0
  409. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/ng-entities.js +0 -0
  410. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/ng-health.js +0 -0
  411. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/ng-ingestion.js +0 -0
  412. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/ng-mesh.js +0 -0
  413. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/ng-shell.js +0 -0
  414. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/ng-skills.js +0 -0
  415. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/profiles.js +0 -0
  416. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/quick-actions.js +0 -0
  417. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/recall-lab.js +0 -0
  418. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/search.js +0 -0
  419. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/settings.js +0 -0
  420. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/timeline.js +0 -0
  421. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/js/trust-dashboard.js +0 -0
  422. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/vendor/bootstrap-icons/bootstrap-icons.css +0 -0
  423. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff +0 -0
  424. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff2 +0 -0
  425. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/vendor/bootstrap.bundle.min.js +0 -0
  426. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/vendor/bootstrap.min.css +0 -0
  427. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/vendor/d3.v7.min.js +0 -0
  428. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/vendor/graphology-library.min.js +0 -0
  429. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/vendor/graphology.umd.min.js +0 -0
  430. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/vendor/inter-ui/inter-variable.min.css +0 -0
  431. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable-Italic.woff2 +0 -0
  432. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable.woff2 +0 -0
  433. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/ui/vendor/sigma.min.js +0 -0
  434. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/vector/__init__.py +0 -0
  435. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory/vector/lancedb_backend.py +0 -0
  436. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory.egg-info/SOURCES.txt +0 -0
  437. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory.egg-info/dependency_links.txt +0 -0
  438. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory.egg-info/entry_points.txt +0 -0
  439. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory.egg-info/requires.txt +0 -0
  440. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/src/superlocalmemory.egg-info/top_level.txt +0 -0
  441. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/tests/test_auto_hooks.py +0 -0
  442. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/tests/test_before_web_hook.py +0 -0
  443. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/tests/test_behavioral_full.py +0 -0
  444. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/tests/test_claude_hooks.py +0 -0
  445. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/tests/test_cli.py +0 -0
  446. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/tests/test_cli_json.py +0 -0
  447. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/tests/test_cli_v33.py +0 -0
  448. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/tests/test_compliance_full.py +0 -0
  449. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/tests/test_config_system.py +0 -0
  450. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/tests/test_engine_hooks.py +0 -0
  451. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/tests/test_event_bus.py +0 -0
  452. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/tests/test_features.py +0 -0
  453. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/tests/test_final_locomo_mini.py +0 -0
  454. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/tests/test_hook_handlers.py +0 -0
  455. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/tests/test_ide_connector.py +0 -0
  456. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/tests/test_infra.py +0 -0
  457. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/tests/test_learning_advanced.py +0 -0
  458. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/tests/test_learning_collectors.py +0 -0
  459. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/tests/test_llm_provider.py +0 -0
  460. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/tests/test_mcp_server.py +0 -0
  461. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/tests/test_migration.py +0 -0
  462. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/tests/test_mode_switch_preservation.py +0 -0
  463. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/tests/test_post_install.py +0 -0
  464. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/tests/test_ranker.py +0 -0
  465. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/tests/test_topic_shift_hook.py +0 -0
  466. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/tests/test_trust_full.py +0 -0
  467. {superlocalmemory-3.4.52 → superlocalmemory-3.4.53}/tests/test_v3_api.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: superlocalmemory
3
- Version: 3.4.52
3
+ Version: 3.4.53
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.4.52"
3
+ version = "3.4.53"
4
4
  description = "Information-geometric agent memory with mathematical guarantees"
5
5
  readme = "README.md"
6
6
  license = {text = "AGPL-3.0-or-later"}
@@ -3,7 +3,7 @@
3
3
  import os
4
4
  os.environ.setdefault("KMP_DUPLICATE_LIB_OK", "TRUE")
5
5
 
6
- __version__ = "3.4.52"
6
+ __version__ = "3.4.53"
7
7
 
8
8
  _REQUIRED_VERSIONS = {
9
9
  "sentence_transformers": "5.3.0",
@@ -451,7 +451,17 @@ class RetrievalEngine:
451
451
  def _run_channels(
452
452
  self, query: str, profile_id: str, strat: QueryStrategy,
453
453
  ) -> dict[str, list[tuple[str, float]]]:
454
- """Run active retrieval channels. Respects disabled_channels config for ablation."""
454
+ """Run active retrieval channels.
455
+
456
+ v3.4.53: channels run in PARALLEL via ThreadPoolExecutor. Industry
457
+ standard (EverMemOS, szl-recall, ContentPilot 2026): all channels
458
+ are independent after embedding; running them serially wastes time
459
+ equal to the sum of all channel latencies. Parallel execution brings
460
+ total channel time from sum(semantic+bm25+entity+temporal+hopfield+sa)
461
+ down to max(semantic,bm25,entity,temporal,hopfield,sa) — roughly a
462
+ 3-5x speedup for the channel phase.
463
+ """
464
+ import concurrent.futures
455
465
  out: dict[str, list[tuple[str, float]]] = {}
456
466
  # Skip channels listed in disabled_channels (ablation support)
457
467
  # V3.4.40: union with per-recall extra_disabled set (e.g. --fast skip)
@@ -475,51 +485,55 @@ class RetrievalEngine:
475
485
  except Exception as exc:
476
486
  logger.warning("Query embedding failed: %s", exc)
477
487
 
478
- if self._semantic is not None and q_emb is not None and "semantic" not in disabled:
479
- try:
480
- r = self._semantic.search(q_emb, profile_id, self._config.semantic_top_k)
481
- if r:
482
- out["semantic"] = r
483
- except Exception as exc:
484
- logger.warning("Semantic channel: %s", exc)
485
-
486
- if self._bm25 is not None and "bm25" not in disabled:
487
- try:
488
- r = self._bm25.search(query, profile_id, self._config.bm25_top_k)
489
- if r:
490
- out["bm25"] = r
491
- except Exception as exc:
492
- logger.warning("BM25 channel: %s", exc)
493
-
494
- # V3.4.12: entity_graph is now a signal enhancer (post-RRF boost),
495
- # not an independent channel. Removed from channel execution to avoid
496
- # running spreading activation twice. See score_candidates() in engine.recall().
497
-
498
- if self._temporal is not None and "temporal" not in disabled:
499
- try:
500
- r = self._temporal.search(query, profile_id, top_k=self._config.bm25_top_k)
501
- if r:
502
- out["temporal"] = r
503
- except Exception as exc:
504
- logger.warning("Temporal channel: %s", exc)
488
+ # v3.4.53: collect channel callables and run in parallel.
489
+ # Each channel is a standalone search — no shared mutable state,
490
+ # no ordering dependencies. SQLite WAL mode permits concurrent reads.
491
+ futures: dict[str, concurrent.futures.Future] = {}
505
492
 
506
- # Phase G: Hopfield channel (6th) — energy-based pattern completion
507
- if self._hopfield is not None and q_emb is not None and "hopfield" not in disabled:
493
+ def _safe_channel(name: str, fn, *args):
494
+ """Run a single channel, returning (name, result_or_None)."""
508
495
  try:
509
- r = self._hopfield.search(q_emb, profile_id, self._config.hopfield_top_k)
510
- if r:
511
- out["hopfield"] = r
496
+ res = fn(*args)
497
+ return (name, res if res else None)
512
498
  except Exception as exc:
513
- logger.warning("Hopfield channel: %s", exc)
499
+ logger.warning("%s channel: %s", name, exc)
500
+ return (name, None)
501
+
502
+ with concurrent.futures.ThreadPoolExecutor(max_workers=6) as executor:
503
+ if self._semantic is not None and q_emb is not None and "semantic" not in disabled:
504
+ futures["semantic"] = executor.submit(
505
+ _safe_channel, "semantic",
506
+ self._semantic.search, q_emb, profile_id, self._config.semantic_top_k,
507
+ )
508
+ if self._bm25 is not None and "bm25" not in disabled:
509
+ futures["bm25"] = executor.submit(
510
+ _safe_channel, "bm25",
511
+ self._bm25.search, query, profile_id, self._config.bm25_top_k,
512
+ )
513
+ if self._temporal is not None and "temporal" not in disabled:
514
+ futures["temporal"] = executor.submit(
515
+ _safe_channel, "temporal",
516
+ self._temporal.search, query, profile_id, self._config.bm25_top_k,
517
+ )
518
+ if self._hopfield is not None and q_emb is not None and "hopfield" not in disabled:
519
+ futures["hopfield"] = executor.submit(
520
+ _safe_channel, "hopfield",
521
+ self._hopfield.search, q_emb, profile_id, self._config.hopfield_top_k,
522
+ )
523
+ if self._spreading_activation is not None and q_emb is not None and "spreading_activation" not in disabled:
524
+ futures["spreading_activation"] = executor.submit(
525
+ _safe_channel, "spreading_activation",
526
+ self._spreading_activation.search, q_emb, profile_id, self._config.bm25_top_k,
527
+ )
514
528
 
515
- # Phase 3: Spreading Activation channel (5th) — graph-based associative recall
516
- if self._spreading_activation is not None and q_emb is not None and "spreading_activation" not in disabled:
517
- try:
518
- r = self._spreading_activation.search(q_emb, profile_id, self._config.bm25_top_k)
519
- if r:
520
- out["spreading_activation"] = r
521
- except Exception as exc:
522
- logger.warning("Spreading activation channel: %s", exc)
529
+ # Collect results as channels complete
530
+ for name, fut in futures.items():
531
+ try:
532
+ ch_name, result = fut.result(timeout=30)
533
+ if result:
534
+ out[ch_name] = result
535
+ except Exception as exc:
536
+ logger.warning("Channel %s timed out or failed: %s", name, exc)
523
537
 
524
538
  # Apply registered post-retrieval filters (forgetting filter, etc.)
525
539
  if hasattr(self, '_registry') and self._registry._filters:
@@ -56,7 +56,11 @@ _IDLE_TIMEOUT_SECONDS = 300 # V3.4.37: 5 min (was 30) — balance cold-start vs
56
56
  # V3.4.19: Bumped from 120 → 1800 in lock-step with the embedding worker.
57
57
  # Set ``SLM_RERANKER_IDLE_TIMEOUT=120`` + ``slm restart`` to revert.
58
58
  _IDLE_TIMEOUT_SECONDS = int(os.environ.get("SLM_RERANKER_IDLE_TIMEOUT", _IDLE_TIMEOUT_SECONDS))
59
- _SUBPROCESS_RESPONSE_TIMEOUT = 180 # V3.3.12: 180s (was 120s) for stressed system respawns
59
+ _SUBPROCESS_RESPONSE_TIMEOUT = 15 # v3.4.52: 15s (was 180s). Long timeout blocked the
60
+ # entire FastAPI event loop — a dead reranker subprocess held ALL
61
+ # endpoints hostage for 3 minutes. 15s is enough for ONNX inference
62
+ # cold start; if the worker can't respond, we fall back to fusion
63
+ # scores without reranking.
60
64
  _WORKER_RECYCLE_AFTER = 500 # Recycle after N requests
61
65
 
62
66
 
@@ -231,16 +235,26 @@ class CrossEncoderReranker:
231
235
  logger.warning("Failed to spawn reranker worker: %s", exc)
232
236
  self._worker_proc = None
233
237
 
234
- def _send_request(self, req: dict, timeout: float | None = None) -> dict | None:
238
+ def _send_request(self, req: dict, timeout: float | None = None,
239
+ block: bool = True) -> dict | None:
235
240
  """Send JSON request to worker, get response. Thread-safe.
236
241
 
237
242
  Uses a short timeout (10s) for rerank requests since the model
238
243
  should already be loaded by the background warmup. Uses the full
239
244
  timeout only for explicit load/ping commands.
245
+
246
+ v3.4.52: when ``block=False``, uses ``try_lock`` instead of
247
+ ``lock.acquire()``. If another thread is already using the
248
+ reranker subprocess, returns ``None`` immediately (the caller
249
+ falls back to fusion scores without reranking). This prevents
250
+ concurrent recall requests from serialising on the lock.
240
251
  """
241
252
  effective_timeout = timeout or _SUBPROCESS_RESPONSE_TIMEOUT
242
253
 
243
- with self._lock:
254
+ acquired = self._lock.acquire(blocking=block)
255
+ if not acquired:
256
+ return None # another request is using the subprocess
257
+ try:
244
258
  if self._request_count >= _WORKER_RECYCLE_AFTER and self._worker_proc is not None:
245
259
  logger.info("Recycling reranker worker after %d requests", self._request_count)
246
260
  self._kill_worker()
@@ -253,31 +267,32 @@ class CrossEncoderReranker:
253
267
  if self._worker_proc is None:
254
268
  return None
255
269
 
256
- try:
257
- msg = json.dumps(req) + "\n"
258
- self._worker_proc.stdin.write(msg)
259
- self._worker_proc.stdin.flush()
270
+ msg = json.dumps(req) + "\n"
271
+ self._worker_proc.stdin.write(msg)
272
+ self._worker_proc.stdin.flush()
260
273
 
261
- resp_line = self._readline_with_timeout(
262
- self._worker_proc.stdout,
263
- effective_timeout,
264
- )
265
- if not resp_line:
266
- logger.warning("Reranker worker timed out after %ds", effective_timeout)
267
- self._kill_worker()
268
- self._model_loaded = False
269
- return None
270
-
271
- resp = json.loads(resp_line)
272
- self._reset_idle_timer()
273
- self._request_count += 1
274
- return resp
275
- except (BrokenPipeError, OSError, json.JSONDecodeError) as exc:
276
- logger.warning("Reranker worker communication failed: %s", exc)
274
+ resp_line = self._readline_with_timeout(
275
+ self._worker_proc.stdout,
276
+ effective_timeout,
277
+ )
278
+ if not resp_line:
279
+ logger.warning("Reranker worker timed out after %ds", effective_timeout)
277
280
  self._kill_worker()
278
281
  self._model_loaded = False
279
282
  return None
280
283
 
284
+ resp = json.loads(resp_line)
285
+ self._reset_idle_timer()
286
+ self._request_count += 1
287
+ return resp
288
+ except (BrokenPipeError, OSError, json.JSONDecodeError) as exc:
289
+ logger.warning("Reranker worker communication failed: %s", exc)
290
+ self._kill_worker()
291
+ self._model_loaded = False
292
+ return None
293
+ finally:
294
+ self._lock.release()
295
+
281
296
  @staticmethod
282
297
  def _readline_with_timeout(stream: Any, timeout_seconds: float) -> str:
283
298
  """Read a line from stream with timeout. Returns '' on timeout."""
@@ -363,14 +378,16 @@ class CrossEncoderReranker:
363
378
 
364
379
  documents = [fact.content for fact, _ in candidates]
365
380
 
366
- # V3.3.16: Timeout 180s ONNX CoreML compilation can take 30-60s on
367
- # first inference even after model load. The warmup_inference in the
368
- # worker should prevent this, but 180s is a safety net.
381
+ # v3.4.53: block=Falseif another recall is using the reranker
382
+ # subprocess, skip reranking and return fusion scores directly.
383
+ # This prevents concurrent recalls from serialising on the lock.
384
+ # 15s timeout (was 180s) — warm ONNX inference takes ~100ms; if
385
+ # the worker can't respond in 15s it's dead and we fall back.
369
386
  resp = self._send_request({
370
387
  "cmd": "rerank",
371
388
  "query": query,
372
389
  "documents": documents,
373
- }, timeout=180.0)
390
+ }, timeout=15.0, block=False)
374
391
 
375
392
  if resp is None or not resp.get("ok"):
376
393
  # Fallback: return by existing score
@@ -156,6 +156,13 @@ from superlocalmemory.core.recall_gate import (
156
156
  # daemon startup via engine._process_pending_memories().
157
157
  _engine = None
158
158
 
159
+ # v3.4.53: Limit concurrent full (non-fast) recalls. Without this, N parallel
160
+ # /recall calls spawn N × 6-channel threads → Ollama serialises, reranker
161
+ # lock queues, and total wall time is N × single-recall-time. 3 concurrent
162
+ # full recalls gives parallelism benefit without resource oversaturation.
163
+ import asyncio as _asyncio
164
+ _recall_semaphore = _asyncio.Semaphore(3)
165
+
159
166
  # v3.4.52: Embedding model warm state. Set to True by the async pre-warm
160
167
  # thread once Ollama has loaded the embedding model. /health reports this
161
168
  # so MCP clients can wait for warm state before issuing recall calls.
@@ -1167,9 +1174,22 @@ def _register_daemon_routes(application: FastAPI) -> None:
1167
1174
  import time as _t
1168
1175
  effective_sid = f"http:{int(_t.time() * 1000)}"
1169
1176
  # v3.4.32: mark recall in-flight so the pending materializer pauses
1177
+ # v3.4.52: run engine.recall() in a thread-pool executor so the
1178
+ # FastAPI event loop stays responsive for /health, /remember, and
1179
+ # concurrent /recall requests. Without this, a single slow full
1180
+ # recall (reranker timeout, cold embedder) blocks ALL endpoints.
1181
+ import asyncio
1170
1182
  _begin_recall()
1183
+ # v3.4.53: Full (non-fast) recalls are gated by a semaphore to
1184
+ # prevent resource oversaturation. Ollama serialises concurrent
1185
+ # embedding calls and the reranker subprocess has a single lock —
1186
+ # queuing more than ~3 concurrent full recalls just adds latency.
1187
+ # Fast recalls (SQLite/BM25 only) skip the semaphore.
1188
+ if not fast:
1189
+ await _recall_semaphore.acquire()
1171
1190
  try:
1172
- response = engine.recall(
1191
+ response = await asyncio.to_thread(
1192
+ engine.recall,
1173
1193
  search_query, limit=limit, session_id=effective_sid,
1174
1194
  fast=fast,
1175
1195
  )
@@ -1228,6 +1248,8 @@ def _register_daemon_routes(application: FastAPI) -> None:
1228
1248
  except Exception as exc:
1229
1249
  raise HTTPException(500, detail=str(exc))
1230
1250
  finally:
1251
+ if not fast:
1252
+ _recall_semaphore.release()
1231
1253
  _end_recall()
1232
1254
 
1233
1255
  @application.post("/remember")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: superlocalmemory
3
- Version: 3.4.52
3
+ Version: 3.4.53
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