superlocalmemory 3.4.35__tar.gz → 3.4.37__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 (453) hide show
  1. {superlocalmemory-3.4.35/src/superlocalmemory.egg-info → superlocalmemory-3.4.37}/PKG-INFO +1 -1
  2. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/pyproject.toml +1 -1
  3. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/__init__.py +1 -1
  4. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/cli/commands.py +1 -0
  5. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/embedding_worker.py +1 -1
  6. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/embeddings.py +5 -8
  7. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/health_monitor.py +2 -2
  8. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/recall_worker.py +3 -1
  9. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/hooks/auto_recall_hook.py +32 -0
  10. superlocalmemory-3.4.37/src/superlocalmemory/hooks/hook_daemon.py +276 -0
  11. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/retrieval/reranker.py +2 -1
  12. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/unified_daemon.py +100 -10
  13. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37/src/superlocalmemory.egg-info}/PKG-INFO +1 -1
  14. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory.egg-info/SOURCES.txt +1 -0
  15. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/AUTHORS.md +0 -0
  16. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/LICENSE +0 -0
  17. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/NOTICE +0 -0
  18. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/README.md +0 -0
  19. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/setup.cfg +0 -0
  20. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/attribution/__init__.py +0 -0
  21. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/attribution/mathematical_dna.py +0 -0
  22. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/attribution/signer.py +0 -0
  23. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/attribution/watermark.py +0 -0
  24. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/cli/__init__.py +0 -0
  25. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/cli/context_commands.py +0 -0
  26. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/cli/daemon.py +0 -0
  27. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/cli/db_migrate.py +0 -0
  28. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/cli/doctor_cmd.py +0 -0
  29. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/cli/escape_hatch.py +0 -0
  30. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/cli/ingest_cmd.py +0 -0
  31. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/cli/json_output.py +0 -0
  32. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/cli/main.py +0 -0
  33. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/cli/migrate_cmd.py +0 -0
  34. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/cli/pending_store.py +0 -0
  35. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/cli/post_install.py +0 -0
  36. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/cli/service_installer.py +0 -0
  37. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/cli/setup_wizard.py +0 -0
  38. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/cli/version_banner.py +0 -0
  39. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/cli/wizard_v3426_options.py +0 -0
  40. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/code_graph/__init__.py +0 -0
  41. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/code_graph/blast_radius.py +0 -0
  42. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/code_graph/bridge/__init__.py +0 -0
  43. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/code_graph/bridge/entity_resolver.py +0 -0
  44. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/code_graph/bridge/event_listeners.py +0 -0
  45. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/code_graph/bridge/fact_enricher.py +0 -0
  46. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/code_graph/bridge/hebbian_linker.py +0 -0
  47. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/code_graph/bridge/temporal_checker.py +0 -0
  48. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/code_graph/changes.py +0 -0
  49. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/code_graph/communities.py +0 -0
  50. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/code_graph/config.py +0 -0
  51. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/code_graph/database.py +0 -0
  52. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/code_graph/extractors/__init__.py +0 -0
  53. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/code_graph/extractors/python.py +0 -0
  54. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/code_graph/extractors/typescript.py +0 -0
  55. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/code_graph/flows.py +0 -0
  56. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/code_graph/git_hooks.py +0 -0
  57. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/code_graph/graph_engine.py +0 -0
  58. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/code_graph/graph_store.py +0 -0
  59. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/code_graph/incremental.py +0 -0
  60. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/code_graph/models.py +0 -0
  61. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/code_graph/parser.py +0 -0
  62. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/code_graph/resolver.py +0 -0
  63. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/code_graph/search.py +0 -0
  64. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/code_graph/service.py +0 -0
  65. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/code_graph/watcher.py +0 -0
  66. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/compliance/__init__.py +0 -0
  67. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/compliance/abac.py +0 -0
  68. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/compliance/audit.py +0 -0
  69. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/compliance/eu_ai_act.py +0 -0
  70. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/compliance/gdpr.py +0 -0
  71. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/compliance/lifecycle.py +0 -0
  72. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/compliance/retention.py +0 -0
  73. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/compliance/scheduler.py +0 -0
  74. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/__init__.py +0 -0
  75. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/clock_monitor.py +0 -0
  76. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/config.py +0 -0
  77. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/consolidation_engine.py +0 -0
  78. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/context_cache.py +0 -0
  79. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/db_pool.py +0 -0
  80. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/engine.py +0 -0
  81. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/engine_capabilities.py +0 -0
  82. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/engine_lock.py +0 -0
  83. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/engine_wiring.py +0 -0
  84. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/error_catalog.py +0 -0
  85. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/error_envelope.py +0 -0
  86. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/fact_consolidator.py +0 -0
  87. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/file_lock.py +0 -0
  88. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/graph_analyzer.py +0 -0
  89. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/graph_pruner.py +0 -0
  90. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/hooks.py +0 -0
  91. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/loop_watchdog.py +0 -0
  92. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/maintenance.py +0 -0
  93. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/maintenance_scheduler.py +0 -0
  94. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/modes.py +0 -0
  95. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/ollama_embedder.py +0 -0
  96. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/platform_utils.py +0 -0
  97. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/priority_queue.py +0 -0
  98. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/profiles.py +0 -0
  99. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/queue_consumer.py +0 -0
  100. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/queue_dispatcher.py +0 -0
  101. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/ram_lock.py +0 -0
  102. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/rate_limit.py +0 -0
  103. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/recall_gate.py +0 -0
  104. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/recall_pipeline.py +0 -0
  105. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/recall_queue.py +0 -0
  106. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/registry.py +0 -0
  107. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/reranker_worker.py +0 -0
  108. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/safe_fs.py +0 -0
  109. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/security_primitives.py +0 -0
  110. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/shadow_router.py +0 -0
  111. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/slm_disabled.py +0 -0
  112. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/slmignore.py +0 -0
  113. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/store_pipeline.py +0 -0
  114. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/summarizer.py +0 -0
  115. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/tier_manager.py +0 -0
  116. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/topic_signature.py +0 -0
  117. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/core/worker_pool.py +0 -0
  118. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/dynamics/__init__.py +0 -0
  119. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/dynamics/activation_guided_quantization.py +0 -0
  120. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/dynamics/eap_scheduler.py +0 -0
  121. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/dynamics/ebbinghaus_langevin_coupling.py +0 -0
  122. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/dynamics/fisher_langevin_coupling.py +0 -0
  123. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/encoding/__init__.py +0 -0
  124. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/encoding/auto_linker.py +0 -0
  125. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/encoding/cognitive_consolidator.py +0 -0
  126. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/encoding/consolidator.py +0 -0
  127. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/encoding/context_generator.py +0 -0
  128. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/encoding/emotional.py +0 -0
  129. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/encoding/entity_resolver.py +0 -0
  130. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/encoding/entropy_gate.py +0 -0
  131. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/encoding/fact_extractor.py +0 -0
  132. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/encoding/foresight.py +0 -0
  133. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/encoding/graph_builder.py +0 -0
  134. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/encoding/observation_builder.py +0 -0
  135. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/encoding/scene_builder.py +0 -0
  136. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/encoding/signal_inference.py +0 -0
  137. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/encoding/temporal_parser.py +0 -0
  138. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/encoding/temporal_validator.py +0 -0
  139. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/encoding/type_router.py +0 -0
  140. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/evolution/__init__.py +0 -0
  141. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/evolution/blind_verifier.py +0 -0
  142. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/evolution/budget.py +0 -0
  143. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/evolution/evolution_store.py +0 -0
  144. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/evolution/llm_dispatch.py +0 -0
  145. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/evolution/mutation_generator.py +0 -0
  146. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/evolution/skill_evolver.py +0 -0
  147. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/evolution/triggers.py +0 -0
  148. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/evolution/types.py +0 -0
  149. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/hooks/__init__.py +0 -0
  150. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/hooks/_outcome_common.py +0 -0
  151. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/hooks/adapter_base.py +0 -0
  152. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/hooks/antigravity_adapter.py +0 -0
  153. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/hooks/auto_capture.py +0 -0
  154. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/hooks/auto_invoker.py +0 -0
  155. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/hooks/auto_parameterize.py +0 -0
  156. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/hooks/auto_recall.py +0 -0
  157. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/hooks/claude_code_hooks.py +0 -0
  158. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/hooks/context_payload.py +0 -0
  159. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/hooks/copilot_adapter.py +0 -0
  160. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/hooks/cross_platform_connector.py +0 -0
  161. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/hooks/cursor_adapter.py +0 -0
  162. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/hooks/hook_handlers.py +0 -0
  163. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/hooks/ide_connector.py +0 -0
  164. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/hooks/post_tool_async_hook.py +0 -0
  165. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/hooks/post_tool_outcome_hook.py +0 -0
  166. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/hooks/prewarm_auth.py +0 -0
  167. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/hooks/rules_engine.py +0 -0
  168. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/hooks/session_registry.py +0 -0
  169. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/hooks/stop_outcome_hook.py +0 -0
  170. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/hooks/sync_loop.py +0 -0
  171. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/hooks/user_prompt_hook.py +0 -0
  172. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/hooks/user_prompt_rehash_hook.py +0 -0
  173. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/infra/__init__.py +0 -0
  174. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/infra/auth_middleware.py +0 -0
  175. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/infra/backup.py +0 -0
  176. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/infra/cache_manager.py +0 -0
  177. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/infra/cloud_backup.py +0 -0
  178. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/infra/event_bus.py +0 -0
  179. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/infra/heartbeat_monitor.py +0 -0
  180. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/infra/pid_manager.py +0 -0
  181. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/infra/process_reaper.py +0 -0
  182. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/infra/rate_limiter.py +0 -0
  183. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/infra/webhook_dispatcher.py +0 -0
  184. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ingestion/__init__.py +0 -0
  185. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ingestion/adapter_manager.py +0 -0
  186. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ingestion/base_adapter.py +0 -0
  187. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ingestion/calendar_adapter.py +0 -0
  188. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ingestion/credentials.py +0 -0
  189. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ingestion/gmail_adapter.py +0 -0
  190. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ingestion/parsers.py +0 -0
  191. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ingestion/transcript_adapter.py +0 -0
  192. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/__init__.py +0 -0
  193. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/adaptive.py +0 -0
  194. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/arm_catalog.py +0 -0
  195. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/assertion_miner.py +0 -0
  196. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/bandit.py +0 -0
  197. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/bandit_cache.py +0 -0
  198. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/behavioral.py +0 -0
  199. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/behavioral_listener.py +0 -0
  200. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/bootstrap.py +0 -0
  201. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/consolidation_cycle.py +0 -0
  202. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/consolidation_quantization_worker.py +0 -0
  203. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/consolidation_worker.py +0 -0
  204. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/cross_project.py +0 -0
  205. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/database.py +0 -0
  206. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/dedup_hnsw.py +0 -0
  207. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/engagement.py +0 -0
  208. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/ensemble.py +0 -0
  209. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/entity_compiler.py +0 -0
  210. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/fact_outcome_joins.py +0 -0
  211. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/features.py +0 -0
  212. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/feedback.py +0 -0
  213. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/forgetting_scheduler.py +0 -0
  214. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/hnsw_dedup.py +0 -0
  215. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/labeler.py +0 -0
  216. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/legacy_migration.py +0 -0
  217. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/memory_merge.py +0 -0
  218. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/model_cache.py +0 -0
  219. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/model_rollback.py +0 -0
  220. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/outcome_queue.py +0 -0
  221. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/outcomes.py +0 -0
  222. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/pattern_miner.py +0 -0
  223. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/pattern_miner_constants.py +0 -0
  224. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/project_context.py +0 -0
  225. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/quantization_scheduler.py +0 -0
  226. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/ranker.py +0 -0
  227. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/ranker_common.py +0 -0
  228. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/ranker_retrain_legacy.py +0 -0
  229. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/ranker_retrain_online.py +0 -0
  230. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/reward.py +0 -0
  231. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/reward_archive.py +0 -0
  232. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/reward_boost.py +0 -0
  233. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/reward_proxy.py +0 -0
  234. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/shadow_test.py +0 -0
  235. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/signal_worker.py +0 -0
  236. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/signals.py +0 -0
  237. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/skill_performance_miner.py +0 -0
  238. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/source_quality.py +0 -0
  239. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/trigram_index.py +0 -0
  240. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/learning/workflows.py +0 -0
  241. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/llm/__init__.py +0 -0
  242. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/llm/backbone.py +0 -0
  243. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/math/__init__.py +0 -0
  244. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/math/ebbinghaus.py +0 -0
  245. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/math/fisher.py +0 -0
  246. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/math/fisher_quantized.py +0 -0
  247. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/math/hopfield.py +0 -0
  248. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/math/langevin.py +0 -0
  249. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/math/polar_quant.py +0 -0
  250. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/math/qjl.py +0 -0
  251. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/math/sheaf.py +0 -0
  252. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/math/turbo_quant.py +0 -0
  253. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/mcp/__init__.py +0 -0
  254. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/mcp/_daemon_proxy.py +0 -0
  255. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/mcp/_pool_adapter.py +0 -0
  256. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/mcp/resources.py +0 -0
  257. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/mcp/server.py +0 -0
  258. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/mcp/shared.py +0 -0
  259. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/mcp/tools.py +0 -0
  260. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/mcp/tools_active.py +0 -0
  261. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/mcp/tools_code_graph.py +0 -0
  262. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/mcp/tools_context.py +0 -0
  263. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/mcp/tools_core.py +0 -0
  264. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/mcp/tools_evolution.py +0 -0
  265. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/mcp/tools_learning.py +0 -0
  266. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/mcp/tools_mesh.py +0 -0
  267. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/mcp/tools_v28.py +0 -0
  268. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/mcp/tools_v3.py +0 -0
  269. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/mcp/tools_v33.py +0 -0
  270. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/mesh/__init__.py +0 -0
  271. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/mesh/broker.py +0 -0
  272. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/migrations/__init__.py +0 -0
  273. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/migrations/v3_4_25_to_v3_4_26.py +0 -0
  274. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/parameterization/__init__.py +0 -0
  275. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/parameterization/pattern_extractor.py +0 -0
  276. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/parameterization/pii_filter.py +0 -0
  277. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/parameterization/prompt_injector.py +0 -0
  278. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/parameterization/prompt_lifecycle.py +0 -0
  279. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/parameterization/soft_prompt_generator.py +0 -0
  280. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/retrieval/__init__.py +0 -0
  281. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/retrieval/agentic.py +0 -0
  282. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/retrieval/ann_index.py +0 -0
  283. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/retrieval/bm25_channel.py +0 -0
  284. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/retrieval/bridge_discovery.py +0 -0
  285. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/retrieval/channel_registry.py +0 -0
  286. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/retrieval/engine.py +0 -0
  287. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/retrieval/entity_channel.py +0 -0
  288. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/retrieval/forgetting_filter.py +0 -0
  289. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/retrieval/fusion.py +0 -0
  290. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/retrieval/hopfield_channel.py +0 -0
  291. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/retrieval/profile_channel.py +0 -0
  292. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/retrieval/quantization_aware_search.py +0 -0
  293. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/retrieval/semantic_channel.py +0 -0
  294. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/retrieval/spreading_activation.py +0 -0
  295. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/retrieval/strategy.py +0 -0
  296. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/retrieval/temporal_channel.py +0 -0
  297. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/retrieval/vector_store.py +0 -0
  298. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/__init__.py +0 -0
  299. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/api.py +0 -0
  300. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/bandit_loops.py +0 -0
  301. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/middleware/__init__.py +0 -0
  302. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/middleware/security_headers.py +0 -0
  303. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/routes/__init__.py +0 -0
  304. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/routes/adapters.py +0 -0
  305. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/routes/agents.py +0 -0
  306. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/routes/backup.py +0 -0
  307. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/routes/behavioral.py +0 -0
  308. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/routes/brain.py +0 -0
  309. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/routes/chat.py +0 -0
  310. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/routes/compliance.py +0 -0
  311. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/routes/data_io.py +0 -0
  312. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/routes/entity.py +0 -0
  313. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/routes/events.py +0 -0
  314. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/routes/evolution.py +0 -0
  315. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/routes/helpers.py +0 -0
  316. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/routes/ingest.py +0 -0
  317. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/routes/insights.py +0 -0
  318. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/routes/learning.py +0 -0
  319. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/routes/lifecycle.py +0 -0
  320. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/routes/memories.py +0 -0
  321. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/routes/mesh.py +0 -0
  322. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/routes/prewarm.py +0 -0
  323. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/routes/profiles.py +0 -0
  324. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/routes/stats.py +0 -0
  325. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/routes/tiers.py +0 -0
  326. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/routes/timeline.py +0 -0
  327. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/routes/token.py +0 -0
  328. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/routes/v3_api.py +0 -0
  329. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/routes/ws.py +0 -0
  330. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/security_middleware.py +0 -0
  331. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/server/ui.py +0 -0
  332. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/skills/slm-build-graph/SKILL.md +0 -0
  333. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/skills/slm-list-recent/SKILL.md +0 -0
  334. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/skills/slm-recall/SKILL.md +0 -0
  335. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/skills/slm-remember/SKILL.md +0 -0
  336. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/skills/slm-show-patterns/SKILL.md +0 -0
  337. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/skills/slm-status/SKILL.md +0 -0
  338. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/skills/slm-switch-profile/SKILL.md +0 -0
  339. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/__init__.py +0 -0
  340. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/access_control.py +0 -0
  341. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/access_log.py +0 -0
  342. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/database.py +0 -0
  343. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/embedding_migrator.py +0 -0
  344. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/migration_runner.py +0 -0
  345. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/migration_v33.py +0 -0
  346. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/migrations/M001_add_signal_features_columns.py +0 -0
  347. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/migrations/M002_model_state_history.py +0 -0
  348. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/migrations/M003_migration_log.py +0 -0
  349. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/migrations/M004_cross_platform_sync_log.py +0 -0
  350. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/migrations/M005_bandit_tables.py +0 -0
  351. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/migrations/M006_action_outcomes_reward.py +0 -0
  352. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/migrations/M007_pending_outcomes.py +0 -0
  353. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/migrations/M009_model_lineage.py +0 -0
  354. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/migrations/M010_evolution_config.py +0 -0
  355. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/migrations/M011_archive_and_merge.py +0 -0
  356. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/migrations/M012_shadow_observations.py +0 -0
  357. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/migrations/M013_bi_temporal_columns.py +0 -0
  358. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/migrations/__init__.py +0 -0
  359. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/migrations.py +0 -0
  360. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/models.py +0 -0
  361. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/quantized_store.py +0 -0
  362. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/schema.py +0 -0
  363. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/schema_code_graph.py +0 -0
  364. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/schema_v32.py +0 -0
  365. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/schema_v3410.py +0 -0
  366. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/schema_v3411.py +0 -0
  367. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/schema_v343.py +0 -0
  368. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/schema_v347.py +0 -0
  369. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/storage/v2_migrator.py +0 -0
  370. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/trust/__init__.py +0 -0
  371. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/trust/gate.py +0 -0
  372. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/trust/provenance.py +0 -0
  373. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/trust/scorer.py +0 -0
  374. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/trust/signals.py +0 -0
  375. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/css/brain.css +0 -0
  376. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/css/legacy-dashboard.css +0 -0
  377. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/css/neural-glass.css +0 -0
  378. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/index.html +0 -0
  379. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/agents.js +0 -0
  380. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/auto-settings.js +0 -0
  381. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/brain.js +0 -0
  382. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/clusters.js +0 -0
  383. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/compliance.js +0 -0
  384. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/core.js +0 -0
  385. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/dashboard.js +0 -0
  386. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/events.js +0 -0
  387. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/fact-detail.js +0 -0
  388. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/feedback.js +0 -0
  389. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/graph-event-bus.js +0 -0
  390. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/graph-filters.js +0 -0
  391. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/graph-ui.js +0 -0
  392. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/ide-status.js +0 -0
  393. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/init.js +0 -0
  394. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/knowledge-graph.js +0 -0
  395. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/lifecycle.js +0 -0
  396. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/math-health.js +0 -0
  397. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/memories.js +0 -0
  398. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/memory-chat.js +0 -0
  399. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/memory-timeline.js +0 -0
  400. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/modal.js +0 -0
  401. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/ng-entities.js +0 -0
  402. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/ng-health.js +0 -0
  403. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/ng-ingestion.js +0 -0
  404. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/ng-mesh.js +0 -0
  405. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/ng-shell.js +0 -0
  406. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/ng-skills.js +0 -0
  407. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/profiles.js +0 -0
  408. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/quick-actions.js +0 -0
  409. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/recall-lab.js +0 -0
  410. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/search.js +0 -0
  411. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/settings.js +0 -0
  412. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/timeline.js +0 -0
  413. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/js/trust-dashboard.js +0 -0
  414. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/vendor/bootstrap-icons/bootstrap-icons.css +0 -0
  415. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff +0 -0
  416. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff2 +0 -0
  417. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/vendor/bootstrap.bundle.min.js +0 -0
  418. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/vendor/bootstrap.min.css +0 -0
  419. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/vendor/d3.v7.min.js +0 -0
  420. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/vendor/graphology-library.min.js +0 -0
  421. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/vendor/graphology.umd.min.js +0 -0
  422. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/vendor/inter-ui/inter-variable.min.css +0 -0
  423. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable-Italic.woff2 +0 -0
  424. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable.woff2 +0 -0
  425. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory/ui/vendor/sigma.min.js +0 -0
  426. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory.egg-info/dependency_links.txt +0 -0
  427. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory.egg-info/entry_points.txt +0 -0
  428. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory.egg-info/requires.txt +0 -0
  429. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/src/superlocalmemory.egg-info/top_level.txt +0 -0
  430. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/tests/test_auto_hooks.py +0 -0
  431. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/tests/test_behavioral_full.py +0 -0
  432. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/tests/test_claude_hooks.py +0 -0
  433. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/tests/test_cli.py +0 -0
  434. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/tests/test_cli_json.py +0 -0
  435. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/tests/test_cli_v33.py +0 -0
  436. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/tests/test_compliance_full.py +0 -0
  437. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/tests/test_config_system.py +0 -0
  438. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/tests/test_engine_hooks.py +0 -0
  439. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/tests/test_event_bus.py +0 -0
  440. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/tests/test_features.py +0 -0
  441. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/tests/test_final_locomo_mini.py +0 -0
  442. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/tests/test_hook_handlers.py +0 -0
  443. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/tests/test_ide_connector.py +0 -0
  444. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/tests/test_infra.py +0 -0
  445. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/tests/test_learning_advanced.py +0 -0
  446. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/tests/test_learning_collectors.py +0 -0
  447. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/tests/test_llm_provider.py +0 -0
  448. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/tests/test_mcp_server.py +0 -0
  449. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/tests/test_migration.py +0 -0
  450. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/tests/test_post_install.py +0 -0
  451. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/tests/test_ranker.py +0 -0
  452. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/tests/test_trust_full.py +0 -0
  453. {superlocalmemory-3.4.35 → superlocalmemory-3.4.37}/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.35
3
+ Version: 3.4.37
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.35"
3
+ version = "3.4.37"
4
4
  description = "Information-geometric agent memory with mathematical guarantees"
5
5
  readme = "README.md"
6
6
  license = {text = "AGPL-3.0-or-later"}
@@ -1,3 +1,3 @@
1
1
  """SuperLocalMemory — information-geometric agent memory."""
2
2
 
3
- __version__ = "3.4.35"
3
+ __version__ = "3.4.37"
@@ -1710,6 +1710,7 @@ def _warmup_diagnose() -> None:
1710
1710
  """Diagnostic helper when warmup fails."""
1711
1711
  print("\nDiagnosing...")
1712
1712
  print(f" Python executable: {sys.executable}")
1713
+ os.environ["ORT_DISABLE_COREML"] = "1"
1713
1714
  try:
1714
1715
  from sentence_transformers import SentenceTransformer
1715
1716
  print(" sentence-transformers: importable")
@@ -151,7 +151,7 @@ def _worker_main() -> None:
151
151
  _respond({"ok": False, "error": str(exc)})
152
152
 
153
153
  # V3.3.16: RSS watchdog — V3.4.24: cross-platform via platform_utils.
154
- _rss_limit = int(os.environ.get("SLM_EMBED_WORKER_RSS_LIMIT_MB", 4000))
154
+ _rss_limit = int(os.environ.get("SLM_EMBED_WORKER_RSS_LIMIT_MB", 1800))
155
155
  rss_mb = get_rss_mb()
156
156
  if rss_mb > 0 and rss_mb > _rss_limit:
157
157
  sys.exit(0)
@@ -140,14 +140,10 @@ def release_embedding_lock() -> None:
140
140
  _embedding_lock_fd = None
141
141
 
142
142
 
143
- _IDLE_TIMEOUT_SECONDS = 1800 # 30 minutes — keep model warm across bursty use.
144
- # V3.3.12: Configurable via SLM_EMBED_IDLE_TIMEOUT env var (seconds).
145
- # V3.4.19: Bumped from 120 1800 to eliminate the 30-60s cold-start pain
146
- # when the embedding worker was killed too aggressively. Safety: the
147
- # per-embed RSS self-check (SLM_EMBED_WORKER_RSS_LIMIT_MB, 4GB default) and
148
- # the daemon memory watchdog (unified_daemon.py, 4GB/60s) still cap any
149
- # runaway. To restore the old aggressive policy without redeploying, set
150
- # ``SLM_EMBED_IDLE_TIMEOUT=120`` and ``slm restart``.
143
+ _IDLE_TIMEOUT_SECONDS = 300 # 5 minutes — balance cold-start vs RAM.
144
+ # V3.4.37: Reduced from 1800 300. Holding 1.1 GB for 30 min idle
145
+ # wastes RAM on laptops. 5 min covers bursty session_init+recall
146
+ # patterns while freeing memory between sessions.
151
147
  _IDLE_TIMEOUT_SECONDS = int(os.environ.get("SLM_EMBED_IDLE_TIMEOUT", _IDLE_TIMEOUT_SECONDS))
152
148
  # V3.3.21: Configurable response timeout — 180s default, but batch ingestion
153
149
  # (2-turn chunks across 10 conversations) needs 600s+ to survive cold-start
@@ -476,6 +472,7 @@ class EmbeddingService:
476
472
  "PYTORCH_ENABLE_MPS_FALLBACK": "1",
477
473
  "TOKENIZERS_PARALLELISM": "false",
478
474
  "TORCH_DEVICE": "cpu",
475
+ "ORT_DISABLE_COREML": "1",
479
476
  }
480
477
  from superlocalmemory.core.platform_utils import popen_platform_kwargs
481
478
  self._worker_proc = subprocess.Popen(
@@ -133,9 +133,9 @@ class HealthMonitor:
133
133
 
134
134
  def __init__(
135
135
  self,
136
- global_rss_budget_mb: int = 4096,
136
+ global_rss_budget_mb: int = 2500,
137
137
  heartbeat_timeout_sec: int = 60,
138
- check_interval_sec: int = 30,
138
+ check_interval_sec: int = 15,
139
139
  enable_structured_logging: bool = True,
140
140
  ):
141
141
  self._budget_mb = global_rss_budget_mb
@@ -28,6 +28,8 @@ os.environ["PYTORCH_MPS_MEM_LIMIT"] = "0"
28
28
  os.environ["PYTORCH_ENABLE_MPS_FALLBACK"] = "1"
29
29
  os.environ["TOKENIZERS_PARALLELISM"] = "false"
30
30
  os.environ["TORCH_DEVICE"] = "cpu"
31
+ # V3.4.37: Disable CoreML EP — uses 3-5GB on ARM64 Mac.
32
+ os.environ["ORT_DISABLE_COREML"] = "1"
31
33
 
32
34
  # SIGTERM bridge: Docker/systemd send SIGTERM to stop processes.
33
35
  # Without this, the worker ignores SIGTERM and becomes a zombie.
@@ -324,7 +326,7 @@ def _worker_main() -> None:
324
326
 
325
327
  # V3.3.16: RSS watchdog — V3.4.24: cross-platform via platform_utils.
326
328
  rss_mb = get_rss_mb()
327
- if rss_mb > 0 and rss_mb > 2500:
329
+ if rss_mb > 0 and rss_mb > 1500:
328
330
  sys.exit(0)
329
331
 
330
332
 
@@ -76,6 +76,30 @@ def _get_queue_db_path():
76
76
  return slm_dir / "recall_queue.db"
77
77
 
78
78
 
79
+ def _try_socket_first(prompt: str, session_id: str) -> dict | None:
80
+ """Try the persistent hook daemon socket. Returns full envelope or None.
81
+
82
+ The socket path returns an already-formatted Claude Code envelope.
83
+ If this returns a non-None dict, the caller writes it to stdout directly
84
+ (skip _do_recall + _format_envelope). Returns None on any failure,
85
+ triggering the subprocess fallback.
86
+ """
87
+ try:
88
+ from superlocalmemory.hooks.hook_daemon import try_socket_recall
89
+ response = try_socket_recall(
90
+ prompt=prompt,
91
+ session_id=session_id,
92
+ timeout=_get_mode_timeout(_detect_mode()),
93
+ )
94
+ if response is None or not isinstance(response, dict):
95
+ return None
96
+ if not response:
97
+ return {}
98
+ return response
99
+ except Exception:
100
+ return None
101
+
102
+
79
103
  def _do_recall(query: str, limit: int = _DEFAULT_LIMIT, session_id: str = "") -> list[dict] | None:
80
104
  """Enqueue recall to queue, poll for result. Returns list of dicts or None."""
81
105
  try:
@@ -192,6 +216,14 @@ def main() -> int:
192
216
  sys.stdout.write("{}")
193
217
  return 0
194
218
 
219
+ try:
220
+ socket_result = _try_socket_first(prompt, session_id)
221
+ if socket_result is not None:
222
+ sys.stdout.write(json.dumps(socket_result) if socket_result else "{}")
223
+ return 0
224
+ except Exception:
225
+ pass
226
+
195
227
  try:
196
228
  results = _do_recall(prompt, limit=_DEFAULT_LIMIT, session_id=session_id)
197
229
  except Exception:
@@ -0,0 +1,276 @@
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 | https://varunpratap.com
4
+
5
+ """Persistent hook daemon — Unix socket server for sub-200ms recall.
6
+
7
+ Eliminates Python subprocess startup (~300-500ms) by keeping a long-lived
8
+ process that Claude Code hooks talk to via Unix domain socket.
9
+
10
+ Protocol (newline-delimited JSON):
11
+ Client → {"prompt": "...", "session_id": "..."}\n
12
+ Server → {"hookSpecificOutput": {...}}\n (or {}\n for ack/empty)
13
+
14
+ MEMORY SAFETY: This module NEVER imports MemoryEngine. All recall goes
15
+ through recall_queue.db → QueueConsumer → pool.recall(). The hook daemon
16
+ stays at ~15-20MB RSS.
17
+
18
+ Lifecycle: started by unified_daemon.py alongside QueueConsumer. If it
19
+ crashes, auto_recall_hook.py falls back to subprocess (v3.4.35 path).
20
+ """
21
+
22
+ from __future__ import annotations
23
+
24
+ import json
25
+ import logging
26
+ import os
27
+ import socket
28
+ import threading
29
+ import time
30
+ from pathlib import Path
31
+
32
+ logger = logging.getLogger(__name__)
33
+
34
+ _DEFAULT_SOCK_NAME = "hook_daemon.sock"
35
+
36
+
37
+ def _default_sock_path() -> Path:
38
+ return Path.home() / ".superlocalmemory" / _DEFAULT_SOCK_NAME
39
+
40
+
41
+ def _default_queue_db_path() -> Path:
42
+ return Path.home() / ".superlocalmemory" / "recall_queue.db"
43
+
44
+
45
+ class HookDaemon:
46
+ """Unix socket server for persistent auto-recall.
47
+
48
+ Accepts newline-delimited JSON requests, runs the same logic as
49
+ auto_recall_hook.main() but without Python startup cost.
50
+ """
51
+
52
+ def __init__(
53
+ self,
54
+ sock_path: Path | None = None,
55
+ queue_db_path: Path | None = None,
56
+ ) -> None:
57
+ self._sock_path = sock_path or _default_sock_path()
58
+ self._queue_db_path = queue_db_path or _default_queue_db_path()
59
+ self._running = False
60
+ self._stop_event = threading.Event()
61
+ self._thread: threading.Thread | None = None
62
+ self._server_sock: socket.socket | None = None
63
+ self._queue = None
64
+
65
+ @property
66
+ def running(self) -> bool:
67
+ return self._running
68
+
69
+ def start(self) -> None:
70
+ if self._running:
71
+ return
72
+ if self._sock_path.exists():
73
+ self._sock_path.unlink()
74
+
75
+ from superlocalmemory.core.recall_queue import RecallQueue
76
+ self._queue = RecallQueue(self._queue_db_path)
77
+
78
+ self._server_sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
79
+ self._server_sock.bind(str(self._sock_path))
80
+ self._server_sock.listen(8)
81
+ self._server_sock.settimeout(1.0)
82
+
83
+ self._stop_event.clear()
84
+ self._running = True
85
+ self._thread = threading.Thread(
86
+ target=self._accept_loop,
87
+ daemon=True,
88
+ name="slm-hook-daemon",
89
+ )
90
+ self._thread.start()
91
+ logger.info("HookDaemon started on %s", self._sock_path)
92
+
93
+ def stop(self) -> None:
94
+ if not self._running:
95
+ return
96
+ self._stop_event.set()
97
+ self._running = False
98
+ if self._server_sock is not None:
99
+ try:
100
+ self._server_sock.close()
101
+ except Exception:
102
+ pass
103
+ self._server_sock = None
104
+ if self._thread is not None:
105
+ self._thread.join(timeout=3.0)
106
+ self._thread = None
107
+ if self._sock_path.exists():
108
+ try:
109
+ self._sock_path.unlink()
110
+ except Exception:
111
+ pass
112
+ if self._queue is not None:
113
+ try:
114
+ self._queue.close()
115
+ except Exception:
116
+ pass
117
+ self._queue = None
118
+ logger.info("HookDaemon stopped")
119
+
120
+ def _accept_loop(self) -> None:
121
+ while not self._stop_event.is_set():
122
+ try:
123
+ client, _ = self._server_sock.accept()
124
+ except socket.timeout:
125
+ continue
126
+ except OSError:
127
+ if self._stop_event.is_set():
128
+ break
129
+ continue
130
+ threading.Thread(
131
+ target=self._handle_client,
132
+ args=(client,),
133
+ daemon=True,
134
+ name="slm-hook-client",
135
+ ).start()
136
+
137
+ def _handle_client(self, client: socket.socket) -> None:
138
+ try:
139
+ client.settimeout(30.0)
140
+ data = b""
141
+ while b"\n" not in data:
142
+ chunk = client.recv(4096)
143
+ if not chunk:
144
+ return
145
+ data += chunk
146
+
147
+ line = data.decode("utf-8").strip()
148
+ if not line:
149
+ client.sendall(b"{}\n")
150
+ return
151
+
152
+ try:
153
+ payload = json.loads(line)
154
+ except Exception:
155
+ client.sendall(b"{}\n")
156
+ return
157
+
158
+ response = self._process_request(payload)
159
+ client.sendall((json.dumps(response) + "\n").encode("utf-8"))
160
+ except Exception:
161
+ try:
162
+ client.sendall(b"{}\n")
163
+ except Exception:
164
+ pass
165
+ finally:
166
+ try:
167
+ client.close()
168
+ except Exception:
169
+ pass
170
+
171
+ def _process_request(self, payload: dict) -> dict:
172
+ from superlocalmemory.hooks.auto_recall_hook import (
173
+ _is_ack, _get_mode_timeout, _detect_mode, _format_envelope,
174
+ _DEFAULT_LIMIT,
175
+ )
176
+ from superlocalmemory.core.recall_queue import QueueTimeoutError
177
+
178
+ prompt = payload.get("prompt", "")
179
+ session_id = payload.get("session_id", "")
180
+
181
+ if not prompt or not isinstance(prompt, str):
182
+ return {}
183
+
184
+ if _is_ack(prompt):
185
+ return {}
186
+
187
+ try:
188
+ mode = _detect_mode()
189
+ timeout = _get_mode_timeout(mode)
190
+ stall_timeout = max(timeout - 5.0, 5.0)
191
+
192
+ request_id = self._queue.enqueue(
193
+ query=prompt,
194
+ limit_n=_DEFAULT_LIMIT,
195
+ mode=mode,
196
+ agent_id="hook_daemon",
197
+ session_id=session_id,
198
+ priority="high",
199
+ stall_timeout_s=stall_timeout,
200
+ )
201
+
202
+ result = self._queue.poll_result(request_id, timeout_s=timeout)
203
+
204
+ if isinstance(result, dict) and result.get("ok") is not False:
205
+ results = result.get("results", [])
206
+ if results:
207
+ return _format_envelope(results)
208
+ return {}
209
+ except (QueueTimeoutError, Exception):
210
+ return {}
211
+
212
+
213
+ def try_socket_recall(
214
+ sock_path: Path | None = None,
215
+ prompt: str = "",
216
+ session_id: str = "",
217
+ timeout: float = 15.0,
218
+ ) -> dict | None:
219
+ """Try to get recall result via the persistent hook daemon socket.
220
+
221
+ Returns the hook envelope dict on success, or None if the daemon
222
+ is unavailable (triggers subprocess fallback in auto_recall_hook).
223
+ """
224
+ path = sock_path or _default_sock_path()
225
+ if not path.exists():
226
+ return None
227
+
228
+ try:
229
+ client = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
230
+ client.settimeout(timeout)
231
+ client.connect(str(path))
232
+
233
+ request = json.dumps({"prompt": prompt, "session_id": session_id}) + "\n"
234
+ client.sendall(request.encode("utf-8"))
235
+
236
+ data = b""
237
+ while b"\n" not in data:
238
+ chunk = client.recv(8192)
239
+ if not chunk:
240
+ break
241
+ data += chunk
242
+
243
+ client.close()
244
+
245
+ if not data.strip():
246
+ return None
247
+
248
+ response = json.loads(data.decode("utf-8").strip())
249
+ return response if isinstance(response, dict) else None
250
+ except Exception:
251
+ return None
252
+
253
+
254
+ def ensure_hook_daemon(
255
+ sock_path: Path | None = None,
256
+ queue_db_path: Path | None = None,
257
+ ) -> HookDaemon | None:
258
+ """Start hook daemon if not already running. Returns daemon or None."""
259
+ path = sock_path or _default_sock_path()
260
+
261
+ if path.exists():
262
+ try:
263
+ test = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
264
+ test.settimeout(1.0)
265
+ test.connect(str(path))
266
+ test.close()
267
+ return None
268
+ except Exception:
269
+ pass
270
+
271
+ daemon = HookDaemon(
272
+ sock_path=path,
273
+ queue_db_path=queue_db_path or _default_queue_db_path(),
274
+ )
275
+ daemon.start()
276
+ return daemon
@@ -51,7 +51,7 @@ _live_rerankers: set[weakref.ref] = set()
51
51
 
52
52
  logger = logging.getLogger(__name__)
53
53
 
54
- _IDLE_TIMEOUT_SECONDS = 1800 # 30 min — keep cross-encoder warm for active sessions.
54
+ _IDLE_TIMEOUT_SECONDS = 300 # V3.4.37: 5 min (was 30) balance cold-start vs RAM.
55
55
  # V3.3.12: Configurable via SLM_RERANKER_IDLE_TIMEOUT env var.
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.
@@ -192,6 +192,7 @@ class CrossEncoderReranker:
192
192
  "PYTORCH_ENABLE_MPS_FALLBACK": "1",
193
193
  "TOKENIZERS_PARALLELISM": "false",
194
194
  "TORCH_DEVICE": "cpu",
195
+ "ORT_DISABLE_COREML": "1",
195
196
  }
196
197
  from superlocalmemory.core.platform_utils import popen_platform_kwargs
197
198
  self._worker_proc = subprocess.Popen(
@@ -66,6 +66,75 @@ class ObserveRequest(BaseModel):
66
66
  content: str
67
67
 
68
68
 
69
+ # ---------------------------------------------------------------------------
70
+ # V3.4.37: Engine recall adapter — routes QueueConsumer through the daemon's
71
+ # in-process MemoryEngine instead of spawning a recall_worker subprocess.
72
+ # Saves ~800 MB by eliminating the duplicate engine.
73
+ # ---------------------------------------------------------------------------
74
+
75
+ class EngineRecallAdapter:
76
+ """Adapts MemoryEngine.recall() to RecallPoolProtocol for QueueConsumer.
77
+
78
+ The daemon already has a full MemoryEngine in-process. The QueueConsumer
79
+ previously routed through WorkerPool → recall_worker subprocess, which
80
+ loaded a SECOND MemoryEngine. This adapter eliminates that duplication.
81
+ """
82
+
83
+ def __init__(self, engine) -> None:
84
+ self._engine = engine
85
+
86
+ def recall(self, query: str, limit: int = 10, session_id: str = "") -> dict:
87
+ response = self._engine.recall(
88
+ query, limit=limit, session_id=session_id or None,
89
+ )
90
+ memory_ids = list({
91
+ r.fact.memory_id for r in response.results[:limit]
92
+ if r.fact.memory_id
93
+ })
94
+ memory_map = (
95
+ self._engine._db.get_memory_content_batch(memory_ids)
96
+ if memory_ids else {}
97
+ )
98
+ results = []
99
+ for r in response.results[:limit]:
100
+ fact_type = getattr(r.fact, "fact_type", None)
101
+ lifecycle = getattr(r.fact, "lifecycle", None)
102
+ results.append({
103
+ "fact_id": r.fact.fact_id,
104
+ "memory_id": r.fact.memory_id,
105
+ "content": r.fact.content[:300],
106
+ "source_content": memory_map.get(r.fact.memory_id, ""),
107
+ "score": round(r.score, 4),
108
+ "confidence": round(r.confidence, 4),
109
+ "trust_score": round(r.trust_score, 4),
110
+ "channel_scores": {
111
+ k: round(v, 4)
112
+ for k, v in (r.channel_scores or {}).items()
113
+ },
114
+ "fact_type": fact_type.value
115
+ if fact_type and hasattr(fact_type, "value") else "",
116
+ "lifecycle": lifecycle.value
117
+ if lifecycle and hasattr(lifecycle, "value") else "",
118
+ "access_count": getattr(r.fact, "access_count", 0),
119
+ "evidence_chain": list(
120
+ getattr(r, "evidence_chain", []) or []
121
+ ),
122
+ })
123
+ return {
124
+ "ok": True,
125
+ "query": query,
126
+ "query_type": response.query_type,
127
+ "result_count": len(results),
128
+ "retrieval_time_ms": round(response.retrieval_time_ms, 1),
129
+ "channel_weights": {
130
+ k: round(v, 3)
131
+ for k, v in (response.channel_weights or {}).items()
132
+ },
133
+ "total_candidates": getattr(response, "total_candidates", 0),
134
+ "results": results,
135
+ }
136
+
137
+
69
138
  # ---------------------------------------------------------------------------
70
139
  # v3.4.32: Recall-priority gate for the pending materializer.
71
140
  # All /remember writes go to pending.db and return fast; a background
@@ -397,9 +466,10 @@ async def lifespan(application: FastAPI):
397
466
  # Set up observe buffer
398
467
  _observe_buffer.set_engine(engine)
399
468
 
400
- # Pre-warm workers (background)
401
- from superlocalmemory.core.worker_pool import WorkerPool
402
- WorkerPool.shared().warmup()
469
+ # V3.4.37: Removed WorkerPool.warmup() — the recall_worker subprocess
470
+ # duplicated the daemon's MemoryEngine (800+ MB). QueueConsumer now
471
+ # uses the daemon's engine directly via EngineRecallAdapter.
472
+ # WorkerPool is still available as fallback for dashboard/chat routes.
403
473
 
404
474
  # Force reranker warmup
405
475
  retrieval_eng = getattr(engine, '_retrieval_engine', None)
@@ -422,8 +492,9 @@ async def lifespan(application: FastAPI):
422
492
  logger.warning("Embedding warmup failed: %s", exc)
423
493
  threading.Thread(target=_warmup_embedder, daemon=True, name="embed-warmup").start()
424
494
 
425
- # v3.4.26: Start QueueConsumer drains recall_queue.db via pool.recall().
426
- # Must start AFTER WorkerPool.warmup() so the worker is ready.
495
+ # v3.4.37: QueueConsumer uses daemon's engine directly via adapter.
496
+ # Previously routed through WorkerPool recall_worker subprocess,
497
+ # which loaded a duplicate MemoryEngine (~800 MB waste).
427
498
  try:
428
499
  from pathlib import Path as _QP
429
500
  from superlocalmemory.core.queue_consumer import QueueConsumer
@@ -432,12 +503,23 @@ async def lifespan(application: FastAPI):
432
503
  _recall_queue = RecallQueue(_queue_db)
433
504
  _queue_consumer = QueueConsumer(
434
505
  queue=_recall_queue,
435
- pool=WorkerPool.shared(),
506
+ pool=EngineRecallAdapter(engine),
436
507
  )
437
508
  _queue_consumer.start()
438
509
  application.state.queue_consumer = _queue_consumer
439
510
  application.state.recall_queue = _recall_queue
440
511
  logger.info("QueueConsumer started (recall_queue.db)")
512
+
513
+ # v3.4.36: Start persistent hook daemon (Unix socket server).
514
+ # Eliminates Python subprocess startup for each recall hook call.
515
+ try:
516
+ from superlocalmemory.hooks.hook_daemon import HookDaemon
517
+ _hook_daemon = HookDaemon(queue_db_path=_queue_db)
518
+ _hook_daemon.start()
519
+ application.state.hook_daemon = _hook_daemon
520
+ except Exception as _hd_exc:
521
+ logger.warning("HookDaemon start failed (non-fatal): %s", _hd_exc)
522
+ application.state.hook_daemon = None
441
523
  except Exception as _qc_exc:
442
524
  logger.warning("QueueConsumer start failed (non-fatal): %s", _qc_exc)
443
525
  application.state.queue_consumer = None
@@ -455,9 +537,9 @@ async def lifespan(application: FastAPI):
455
537
  from superlocalmemory.core.health_monitor import HealthMonitor
456
538
  health_config = getattr(config, 'health', None)
457
539
  monitor = HealthMonitor(
458
- global_rss_budget_mb=getattr(health_config, 'global_rss_budget_mb', 4096) if health_config else 4096,
540
+ global_rss_budget_mb=getattr(health_config, 'global_rss_budget_mb', 2500) if health_config else 2500,
459
541
  heartbeat_timeout_sec=getattr(health_config, 'heartbeat_timeout_sec', 60) if health_config else 60,
460
- check_interval_sec=getattr(health_config, 'health_check_interval_sec', 30) if health_config else 30,
542
+ check_interval_sec=getattr(health_config, 'health_check_interval_sec', 15) if health_config else 15,
461
543
  enable_structured_logging=getattr(health_config, 'enable_structured_logging', True) if health_config else True,
462
544
  )
463
545
  monitor.start()
@@ -592,6 +674,14 @@ async def lifespan(application: FastAPI):
592
674
  except Exception as exc: # pragma: no cover — defensive
593
675
  logger.warning("bandit_tasks cancel failed: %s", exc)
594
676
 
677
+ # v3.4.36: Stop HookDaemon (Unix socket server).
678
+ _hd = getattr(application.state, "hook_daemon", None)
679
+ if _hd is not None:
680
+ try:
681
+ _hd.stop()
682
+ except Exception as exc: # pragma: no cover — defensive
683
+ logger.warning("hook_daemon stop failed: %s", exc)
684
+
595
685
  # v3.4.26: Stop QueueConsumer (recall_queue.db drainer).
596
686
  _qc = getattr(application.state, "queue_consumer", None)
597
687
  if _qc is not None:
@@ -1240,11 +1330,11 @@ def _start_memory_watchdog() -> None:
1240
1330
  """
1241
1331
  import threading
1242
1332
 
1243
- MAX_WORKER_MB = 4096 # 4GB per worker — ONNX full model is 1.6GB + overhead
1333
+ MAX_WORKER_MB = 1800 # V3.4.37: 1.8GB — ONNX nomic-embed is ~1.7GB loaded
1244
1334
 
1245
1335
  def watchdog_loop():
1246
1336
  while True:
1247
- time.sleep(60)
1337
+ time.sleep(15) # V3.4.37: 15s (was 60s) — catch spikes faster
1248
1338
  try:
1249
1339
  import psutil
1250
1340
  parent = psutil.Process(os.getpid())
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: superlocalmemory
3
- Version: 3.4.35
3
+ Version: 3.4.37
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
@@ -158,6 +158,7 @@ src/superlocalmemory/hooks/context_payload.py
158
158
  src/superlocalmemory/hooks/copilot_adapter.py
159
159
  src/superlocalmemory/hooks/cross_platform_connector.py
160
160
  src/superlocalmemory/hooks/cursor_adapter.py
161
+ src/superlocalmemory/hooks/hook_daemon.py
161
162
  src/superlocalmemory/hooks/hook_handlers.py
162
163
  src/superlocalmemory/hooks/ide_connector.py
163
164
  src/superlocalmemory/hooks/post_tool_async_hook.py