superlocalmemory 3.4.58__tar.gz → 3.5.1__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 (470) hide show
  1. {superlocalmemory-3.4.58/src/superlocalmemory.egg-info → superlocalmemory-3.5.1}/PKG-INFO +4 -2
  2. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/pyproject.toml +5 -2
  3. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/__init__.py +1 -1
  4. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/cli/commands.py +80 -33
  5. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/cli/daemon.py +14 -1
  6. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/cli/main.py +1 -1
  7. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/backend_orchestrator.py +19 -13
  8. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/config.py +83 -0
  9. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/graph_pruner.py +92 -2
  10. superlocalmemory-3.5.1/src/superlocalmemory/core/injection.py +351 -0
  11. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/recall_pipeline.py +29 -0
  12. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/store_pipeline.py +13 -0
  13. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/encoding/graph_builder.py +32 -8
  14. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/hooks/auto_recall_hook.py +50 -26
  15. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/hooks/before_web_hook.py +3 -2
  16. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/hooks/user_prompt_hook.py +5 -2
  17. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/mcp/_daemon_proxy.py +1 -1
  18. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/mcp/tools_active.py +130 -9
  19. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/mcp/tools_context.py +18 -4
  20. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/retrieval/bm25_channel.py +50 -0
  21. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/retrieval/engine.py +43 -9
  22. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/retrieval/hopfield_channel.py +22 -9
  23. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/retrieval/spreading_activation.py +27 -7
  24. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/retrieval/temporal_channel.py +10 -1
  25. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/routes/memories.py +43 -12
  26. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/routes/v3_api.py +40 -25
  27. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/unified_daemon.py +113 -3
  28. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/database.py +47 -0
  29. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/migration_runner.py +4 -0
  30. superlocalmemory-3.5.1/src/superlocalmemory/storage/migrations/M015_add_pinned_column.py +40 -0
  31. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/migrations/__init__.py +1 -0
  32. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/models.py +3 -0
  33. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1/src/superlocalmemory.egg-info}/PKG-INFO +4 -2
  34. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory.egg-info/SOURCES.txt +3 -0
  35. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory.egg-info/requires.txt +4 -1
  36. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/tests/test_before_web_hook.py +1 -1
  37. superlocalmemory-3.5.1/tests/test_injection.py +424 -0
  38. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/AUTHORS.md +0 -0
  39. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/LICENSE +0 -0
  40. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/NOTICE +0 -0
  41. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/README.md +0 -0
  42. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/setup.cfg +0 -0
  43. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/attribution/__init__.py +0 -0
  44. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/attribution/mathematical_dna.py +0 -0
  45. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/attribution/signer.py +0 -0
  46. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/attribution/watermark.py +0 -0
  47. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/cli/__init__.py +0 -0
  48. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/cli/context_commands.py +0 -0
  49. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/cli/db_migrate.py +0 -0
  50. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/cli/doctor_cmd.py +0 -0
  51. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/cli/escape_hatch.py +0 -0
  52. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/cli/ingest_cmd.py +0 -0
  53. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/cli/json_output.py +0 -0
  54. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/cli/migrate_cmd.py +0 -0
  55. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/cli/pending_store.py +0 -0
  56. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/cli/post_install.py +0 -0
  57. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/cli/service_installer.py +0 -0
  58. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/cli/setup_wizard.py +0 -0
  59. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/cli/version_banner.py +0 -0
  60. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/cli/wizard_v3426_options.py +0 -0
  61. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/code_graph/__init__.py +0 -0
  62. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/code_graph/blast_radius.py +0 -0
  63. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/code_graph/bridge/__init__.py +0 -0
  64. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/code_graph/bridge/entity_resolver.py +0 -0
  65. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/code_graph/bridge/event_listeners.py +0 -0
  66. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/code_graph/bridge/fact_enricher.py +0 -0
  67. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/code_graph/bridge/hebbian_linker.py +0 -0
  68. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/code_graph/bridge/temporal_checker.py +0 -0
  69. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/code_graph/changes.py +0 -0
  70. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/code_graph/communities.py +0 -0
  71. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/code_graph/config.py +0 -0
  72. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/code_graph/database.py +0 -0
  73. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/code_graph/extractors/__init__.py +0 -0
  74. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/code_graph/extractors/python.py +0 -0
  75. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/code_graph/extractors/typescript.py +0 -0
  76. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/code_graph/flows.py +0 -0
  77. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/code_graph/git_hooks.py +0 -0
  78. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/code_graph/graph_engine.py +0 -0
  79. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/code_graph/graph_store.py +0 -0
  80. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/code_graph/incremental.py +0 -0
  81. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/code_graph/models.py +0 -0
  82. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/code_graph/parser.py +0 -0
  83. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/code_graph/resolver.py +0 -0
  84. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/code_graph/search.py +0 -0
  85. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/code_graph/service.py +0 -0
  86. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/code_graph/watcher.py +0 -0
  87. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/compliance/__init__.py +0 -0
  88. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/compliance/abac.py +0 -0
  89. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/compliance/audit.py +0 -0
  90. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/compliance/eu_ai_act.py +0 -0
  91. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/compliance/gdpr.py +0 -0
  92. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/compliance/lifecycle.py +0 -0
  93. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/compliance/retention.py +0 -0
  94. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/compliance/scheduler.py +0 -0
  95. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/__init__.py +0 -0
  96. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/clock_monitor.py +0 -0
  97. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/consolidation_engine.py +0 -0
  98. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/context_cache.py +0 -0
  99. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/db_pool.py +0 -0
  100. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/embedding_worker.py +0 -0
  101. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/embeddings.py +0 -0
  102. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/engine.py +0 -0
  103. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/engine_capabilities.py +0 -0
  104. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/engine_lock.py +0 -0
  105. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/engine_wiring.py +0 -0
  106. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/error_catalog.py +0 -0
  107. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/error_envelope.py +0 -0
  108. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/fact_consolidator.py +0 -0
  109. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/file_lock.py +0 -0
  110. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/graph_analyzer.py +0 -0
  111. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/health_monitor.py +0 -0
  112. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/hooks.py +0 -0
  113. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/loop_watchdog.py +0 -0
  114. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/maintenance.py +0 -0
  115. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/maintenance_scheduler.py +0 -0
  116. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/modes.py +0 -0
  117. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/ollama_embedder.py +0 -0
  118. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/platform_utils.py +0 -0
  119. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/priority_queue.py +0 -0
  120. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/profiles.py +0 -0
  121. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/pruning_engine.py +0 -0
  122. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/queue_consumer.py +0 -0
  123. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/queue_dispatcher.py +0 -0
  124. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/ram_lock.py +0 -0
  125. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/rate_limit.py +0 -0
  126. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/recall_gate.py +0 -0
  127. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/recall_queue.py +0 -0
  128. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/recall_worker.py +0 -0
  129. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/registry.py +0 -0
  130. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/reranker_worker.py +0 -0
  131. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/safe_fs.py +0 -0
  132. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/security_primitives.py +0 -0
  133. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/shadow_router.py +0 -0
  134. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/slm_disabled.py +0 -0
  135. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/slmignore.py +0 -0
  136. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/summarizer.py +0 -0
  137. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/tier_manager.py +0 -0
  138. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/topic_signature.py +0 -0
  139. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/core/worker_pool.py +0 -0
  140. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/dynamics/__init__.py +0 -0
  141. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/dynamics/activation_guided_quantization.py +0 -0
  142. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/dynamics/eap_scheduler.py +0 -0
  143. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/dynamics/ebbinghaus_langevin_coupling.py +0 -0
  144. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/dynamics/fisher_langevin_coupling.py +0 -0
  145. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/encoding/__init__.py +0 -0
  146. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/encoding/auto_linker.py +0 -0
  147. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/encoding/cognitive_consolidator.py +0 -0
  148. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/encoding/consolidator.py +0 -0
  149. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/encoding/context_generator.py +0 -0
  150. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/encoding/emotional.py +0 -0
  151. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/encoding/entity_resolver.py +0 -0
  152. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/encoding/entropy_gate.py +0 -0
  153. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/encoding/fact_extractor.py +0 -0
  154. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/encoding/foresight.py +0 -0
  155. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/encoding/observation_builder.py +0 -0
  156. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/encoding/scene_builder.py +0 -0
  157. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/encoding/signal_inference.py +0 -0
  158. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/encoding/temporal_parser.py +0 -0
  159. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/encoding/temporal_validator.py +0 -0
  160. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/encoding/type_router.py +0 -0
  161. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/evolution/__init__.py +0 -0
  162. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/evolution/blind_verifier.py +0 -0
  163. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/evolution/budget.py +0 -0
  164. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/evolution/evolution_store.py +0 -0
  165. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/evolution/llm_dispatch.py +0 -0
  166. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/evolution/mutation_generator.py +0 -0
  167. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/evolution/skill_evolver.py +0 -0
  168. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/evolution/triggers.py +0 -0
  169. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/evolution/types.py +0 -0
  170. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/graph/__init__.py +0 -0
  171. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/graph/cozo_backend.py +0 -0
  172. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/hooks/__init__.py +0 -0
  173. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/hooks/_outcome_common.py +0 -0
  174. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/hooks/adapter_base.py +0 -0
  175. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/hooks/antigravity_adapter.py +0 -0
  176. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/hooks/auto_capture.py +0 -0
  177. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/hooks/auto_invoker.py +0 -0
  178. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/hooks/auto_parameterize.py +0 -0
  179. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/hooks/auto_recall.py +0 -0
  180. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/hooks/claude_code_hooks.py +0 -0
  181. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/hooks/context_payload.py +0 -0
  182. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/hooks/copilot_adapter.py +0 -0
  183. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/hooks/cross_platform_connector.py +0 -0
  184. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/hooks/cursor_adapter.py +0 -0
  185. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/hooks/hook_daemon.py +0 -0
  186. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/hooks/hook_handlers.py +0 -0
  187. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/hooks/ide_connector.py +0 -0
  188. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/hooks/post_tool_async_hook.py +0 -0
  189. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/hooks/post_tool_outcome_hook.py +0 -0
  190. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/hooks/prewarm_auth.py +0 -0
  191. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/hooks/rules_engine.py +0 -0
  192. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/hooks/session_registry.py +0 -0
  193. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/hooks/stop_outcome_hook.py +0 -0
  194. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/hooks/sync_loop.py +0 -0
  195. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/hooks/topic_shift_hook.py +0 -0
  196. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/hooks/user_prompt_rehash_hook.py +0 -0
  197. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/infra/__init__.py +0 -0
  198. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/infra/auth_middleware.py +0 -0
  199. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/infra/backup.py +0 -0
  200. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/infra/cache_manager.py +0 -0
  201. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/infra/cloud_backup.py +0 -0
  202. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/infra/event_bus.py +0 -0
  203. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/infra/heartbeat_monitor.py +0 -0
  204. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/infra/pid_manager.py +0 -0
  205. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/infra/process_reaper.py +0 -0
  206. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/infra/rate_limiter.py +0 -0
  207. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/infra/webhook_dispatcher.py +0 -0
  208. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ingestion/__init__.py +0 -0
  209. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ingestion/adapter_manager.py +0 -0
  210. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ingestion/base_adapter.py +0 -0
  211. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ingestion/calendar_adapter.py +0 -0
  212. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ingestion/credentials.py +0 -0
  213. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ingestion/gmail_adapter.py +0 -0
  214. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ingestion/parsers.py +0 -0
  215. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ingestion/transcript_adapter.py +0 -0
  216. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/__init__.py +0 -0
  217. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/adaptive.py +0 -0
  218. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/arm_catalog.py +0 -0
  219. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/assertion_miner.py +0 -0
  220. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/bandit.py +0 -0
  221. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/bandit_cache.py +0 -0
  222. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/behavioral.py +0 -0
  223. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/behavioral_listener.py +0 -0
  224. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/bootstrap.py +0 -0
  225. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/consolidation_cycle.py +0 -0
  226. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/consolidation_quantization_worker.py +0 -0
  227. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/consolidation_worker.py +0 -0
  228. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/cross_project.py +0 -0
  229. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/database.py +0 -0
  230. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/dedup_hnsw.py +0 -0
  231. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/engagement.py +0 -0
  232. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/ensemble.py +0 -0
  233. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/entity_compiler.py +0 -0
  234. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/fact_outcome_joins.py +0 -0
  235. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/features.py +0 -0
  236. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/feedback.py +0 -0
  237. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/forgetting_scheduler.py +0 -0
  238. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/hnsw_dedup.py +0 -0
  239. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/labeler.py +0 -0
  240. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/legacy_migration.py +0 -0
  241. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/memory_merge.py +0 -0
  242. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/model_cache.py +0 -0
  243. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/model_rollback.py +0 -0
  244. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/outcome_queue.py +0 -0
  245. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/outcomes.py +0 -0
  246. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/pattern_miner.py +0 -0
  247. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/pattern_miner_constants.py +0 -0
  248. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/project_context.py +0 -0
  249. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/quantization_scheduler.py +0 -0
  250. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/ranker.py +0 -0
  251. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/ranker_common.py +0 -0
  252. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/ranker_retrain_legacy.py +0 -0
  253. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/ranker_retrain_online.py +0 -0
  254. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/reward.py +0 -0
  255. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/reward_archive.py +0 -0
  256. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/reward_boost.py +0 -0
  257. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/reward_proxy.py +0 -0
  258. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/shadow_test.py +0 -0
  259. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/signal_worker.py +0 -0
  260. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/signals.py +0 -0
  261. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/skill_performance_miner.py +0 -0
  262. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/source_quality.py +0 -0
  263. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/trigram_index.py +0 -0
  264. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/learning/workflows.py +0 -0
  265. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/llm/__init__.py +0 -0
  266. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/llm/backbone.py +0 -0
  267. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/math/__init__.py +0 -0
  268. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/math/ebbinghaus.py +0 -0
  269. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/math/fisher.py +0 -0
  270. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/math/fisher_quantized.py +0 -0
  271. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/math/hopfield.py +0 -0
  272. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/math/langevin.py +0 -0
  273. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/math/polar_quant.py +0 -0
  274. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/math/qjl.py +0 -0
  275. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/math/sheaf.py +0 -0
  276. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/math/turbo_quant.py +0 -0
  277. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/mcp/__init__.py +0 -0
  278. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/mcp/_pool_adapter.py +0 -0
  279. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/mcp/resources.py +0 -0
  280. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/mcp/server.py +0 -0
  281. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/mcp/shared.py +0 -0
  282. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/mcp/tools.py +0 -0
  283. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/mcp/tools_code_graph.py +0 -0
  284. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/mcp/tools_core.py +0 -0
  285. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/mcp/tools_evolution.py +0 -0
  286. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/mcp/tools_learning.py +0 -0
  287. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/mcp/tools_mesh.py +0 -0
  288. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/mcp/tools_v28.py +0 -0
  289. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/mcp/tools_v3.py +0 -0
  290. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/mcp/tools_v33.py +0 -0
  291. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/mesh/__init__.py +0 -0
  292. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/mesh/broker.py +0 -0
  293. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/mesh/remote_sync.py +0 -0
  294. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/migrations/__init__.py +0 -0
  295. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/migrations/v3_4_25_to_v3_4_26.py +0 -0
  296. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/parameterization/__init__.py +0 -0
  297. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/parameterization/pattern_extractor.py +0 -0
  298. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/parameterization/pii_filter.py +0 -0
  299. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/parameterization/prompt_injector.py +0 -0
  300. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/parameterization/prompt_lifecycle.py +0 -0
  301. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/parameterization/soft_prompt_generator.py +0 -0
  302. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/retrieval/__init__.py +0 -0
  303. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/retrieval/agentic.py +0 -0
  304. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/retrieval/ann_index.py +0 -0
  305. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/retrieval/bridge_discovery.py +0 -0
  306. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/retrieval/channel_registry.py +0 -0
  307. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/retrieval/entity_channel.py +0 -0
  308. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/retrieval/forgetting_filter.py +0 -0
  309. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/retrieval/fusion.py +0 -0
  310. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/retrieval/profile_channel.py +0 -0
  311. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/retrieval/quantization_aware_search.py +0 -0
  312. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/retrieval/reranker.py +0 -0
  313. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/retrieval/semantic_channel.py +0 -0
  314. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/retrieval/strategy.py +0 -0
  315. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/retrieval/vector_store.py +0 -0
  316. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/__init__.py +0 -0
  317. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/api.py +0 -0
  318. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/bandit_loops.py +0 -0
  319. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/middleware/__init__.py +0 -0
  320. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/middleware/security_headers.py +0 -0
  321. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/routes/__init__.py +0 -0
  322. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/routes/adapters.py +0 -0
  323. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/routes/agents.py +0 -0
  324. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/routes/backup.py +0 -0
  325. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/routes/behavioral.py +0 -0
  326. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/routes/brain.py +0 -0
  327. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/routes/chat.py +0 -0
  328. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/routes/compliance.py +0 -0
  329. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/routes/data_io.py +0 -0
  330. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/routes/entity.py +0 -0
  331. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/routes/events.py +0 -0
  332. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/routes/evolution.py +0 -0
  333. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/routes/helpers.py +0 -0
  334. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/routes/ingest.py +0 -0
  335. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/routes/insights.py +0 -0
  336. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/routes/learning.py +0 -0
  337. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/routes/lifecycle.py +0 -0
  338. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/routes/mesh.py +0 -0
  339. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/routes/prewarm.py +0 -0
  340. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/routes/profiles.py +0 -0
  341. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/routes/stats.py +0 -0
  342. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/routes/tiers.py +0 -0
  343. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/routes/timeline.py +0 -0
  344. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/routes/token.py +0 -0
  345. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/routes/ws.py +0 -0
  346. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/security_middleware.py +0 -0
  347. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/server/ui.py +0 -0
  348. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/skills/slm-build-graph/SKILL.md +0 -0
  349. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/skills/slm-list-recent/SKILL.md +0 -0
  350. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/skills/slm-recall/SKILL.md +0 -0
  351. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/skills/slm-remember/SKILL.md +0 -0
  352. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/skills/slm-show-patterns/SKILL.md +0 -0
  353. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/skills/slm-status/SKILL.md +0 -0
  354. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/skills/slm-switch-profile/SKILL.md +0 -0
  355. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/__init__.py +0 -0
  356. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/access_control.py +0 -0
  357. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/access_log.py +0 -0
  358. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/embedding_migrator.py +0 -0
  359. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/migration_v33.py +0 -0
  360. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/migrations/M001_add_signal_features_columns.py +0 -0
  361. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/migrations/M002_model_state_history.py +0 -0
  362. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/migrations/M003_migration_log.py +0 -0
  363. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/migrations/M004_cross_platform_sync_log.py +0 -0
  364. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/migrations/M005_bandit_tables.py +0 -0
  365. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/migrations/M006_action_outcomes_reward.py +0 -0
  366. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/migrations/M007_pending_outcomes.py +0 -0
  367. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/migrations/M009_model_lineage.py +0 -0
  368. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/migrations/M010_evolution_config.py +0 -0
  369. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/migrations/M011_archive_and_merge.py +0 -0
  370. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/migrations/M012_shadow_observations.py +0 -0
  371. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/migrations/M013_bi_temporal_columns.py +0 -0
  372. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/migrations/M014_v345_scale_ready.py +0 -0
  373. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/migrations.py +0 -0
  374. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/quantized_store.py +0 -0
  375. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/schema.py +0 -0
  376. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/schema_code_graph.py +0 -0
  377. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/schema_v32.py +0 -0
  378. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/schema_v3410.py +0 -0
  379. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/schema_v3411.py +0 -0
  380. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/schema_v343.py +0 -0
  381. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/schema_v345.py +0 -0
  382. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/schema_v347.py +0 -0
  383. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/storage/v2_migrator.py +0 -0
  384. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/trust/__init__.py +0 -0
  385. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/trust/gate.py +0 -0
  386. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/trust/provenance.py +0 -0
  387. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/trust/scorer.py +0 -0
  388. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/trust/signals.py +0 -0
  389. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/css/brain.css +0 -0
  390. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/css/legacy-dashboard.css +0 -0
  391. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/css/neural-glass.css +0 -0
  392. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/index.html +0 -0
  393. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/agents.js +0 -0
  394. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/auto-settings.js +0 -0
  395. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/brain.js +0 -0
  396. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/clusters.js +0 -0
  397. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/compliance.js +0 -0
  398. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/core.js +0 -0
  399. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/dashboard.js +0 -0
  400. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/events.js +0 -0
  401. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/fact-detail.js +0 -0
  402. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/feedback.js +0 -0
  403. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/graph-event-bus.js +0 -0
  404. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/graph-filters.js +0 -0
  405. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/graph-ui.js +0 -0
  406. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/ide-status.js +0 -0
  407. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/init.js +0 -0
  408. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/knowledge-graph.js +0 -0
  409. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/lifecycle.js +0 -0
  410. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/math-health.js +0 -0
  411. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/memories.js +0 -0
  412. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/memory-chat.js +0 -0
  413. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/memory-timeline.js +0 -0
  414. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/modal.js +0 -0
  415. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/ng-entities.js +0 -0
  416. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/ng-health.js +0 -0
  417. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/ng-ingestion.js +0 -0
  418. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/ng-mesh.js +0 -0
  419. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/ng-shell.js +0 -0
  420. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/ng-skills.js +0 -0
  421. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/profiles.js +0 -0
  422. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/quick-actions.js +0 -0
  423. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/recall-lab.js +0 -0
  424. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/search.js +0 -0
  425. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/settings.js +0 -0
  426. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/timeline.js +0 -0
  427. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/js/trust-dashboard.js +0 -0
  428. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/vendor/bootstrap-icons/bootstrap-icons.css +0 -0
  429. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff +0 -0
  430. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff2 +0 -0
  431. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/vendor/bootstrap.bundle.min.js +0 -0
  432. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/vendor/bootstrap.min.css +0 -0
  433. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/vendor/d3.v7.min.js +0 -0
  434. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/vendor/graphology-library.min.js +0 -0
  435. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/vendor/graphology.umd.min.js +0 -0
  436. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/vendor/inter-ui/inter-variable.min.css +0 -0
  437. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable-Italic.woff2 +0 -0
  438. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable.woff2 +0 -0
  439. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/ui/vendor/sigma.min.js +0 -0
  440. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/vector/__init__.py +0 -0
  441. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory/vector/lancedb_backend.py +0 -0
  442. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory.egg-info/dependency_links.txt +0 -0
  443. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory.egg-info/entry_points.txt +0 -0
  444. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/src/superlocalmemory.egg-info/top_level.txt +0 -0
  445. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/tests/test_auto_hooks.py +0 -0
  446. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/tests/test_behavioral_full.py +0 -0
  447. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/tests/test_claude_hooks.py +0 -0
  448. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/tests/test_cli.py +0 -0
  449. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/tests/test_cli_json.py +0 -0
  450. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/tests/test_cli_v33.py +0 -0
  451. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/tests/test_compliance_full.py +0 -0
  452. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/tests/test_config_system.py +0 -0
  453. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/tests/test_engine_hooks.py +0 -0
  454. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/tests/test_event_bus.py +0 -0
  455. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/tests/test_features.py +0 -0
  456. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/tests/test_final_locomo_mini.py +0 -0
  457. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/tests/test_hook_handlers.py +0 -0
  458. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/tests/test_ide_connector.py +0 -0
  459. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/tests/test_infra.py +0 -0
  460. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/tests/test_learning_advanced.py +0 -0
  461. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/tests/test_learning_collectors.py +0 -0
  462. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/tests/test_llm_provider.py +0 -0
  463. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/tests/test_mcp_server.py +0 -0
  464. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/tests/test_migration.py +0 -0
  465. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/tests/test_mode_switch_preservation.py +0 -0
  466. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/tests/test_post_install.py +0 -0
  467. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/tests/test_ranker.py +0 -0
  468. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/tests/test_topic_shift_hook.py +0 -0
  469. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/tests/test_trust_full.py +0 -0
  470. {superlocalmemory-3.4.58 → superlocalmemory-3.5.1}/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.58
3
+ Version: 3.5.1
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
@@ -69,6 +69,8 @@ Provides-Extra: ui
69
69
  Requires-Dist: fastapi[all]>=0.135.1; extra == "ui"
70
70
  Requires-Dist: uvicorn>=0.42.0; extra == "ui"
71
71
  Requires-Dist: python-multipart<1.0.0,>=0.0.6; extra == "ui"
72
+ Provides-Extra: injection
73
+ Requires-Dist: tiktoken>=0.8.0; extra == "injection"
72
74
  Provides-Extra: learning
73
75
  Requires-Dist: lightgbm>=4.0.0; extra == "learning"
74
76
  Provides-Extra: performance
@@ -79,7 +81,7 @@ Requires-Dist: google-auth-oauthlib>=1.2.0; extra == "ingestion"
79
81
  Requires-Dist: google-api-python-client>=2.100.0; extra == "ingestion"
80
82
  Requires-Dist: icalendar>=6.0.0; extra == "ingestion"
81
83
  Provides-Extra: full
82
- Requires-Dist: superlocalmemory[ingestion,learning,performance,search,ui]; extra == "full"
84
+ Requires-Dist: superlocalmemory[ingestion,injection,learning,performance,search,ui]; extra == "full"
83
85
  Provides-Extra: dev
84
86
  Requires-Dist: pytest>=8.0; extra == "dev"
85
87
  Requires-Dist: pytest-cov>=4.1; extra == "dev"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "superlocalmemory"
3
- version = "3.4.58"
3
+ version = "3.5.1"
4
4
  description = "Information-geometric agent memory with mathematical guarantees"
5
5
  readme = "README.md"
6
6
  license = {text = "AGPL-3.0-or-later"}
@@ -89,6 +89,9 @@ ui = [
89
89
  "uvicorn>=0.42.0",
90
90
  "python-multipart>=0.0.6,<1.0.0",
91
91
  ]
92
+ injection = [
93
+ "tiktoken>=0.8.0",
94
+ ]
92
95
  learning = [
93
96
  "lightgbm>=4.0.0",
94
97
  ]
@@ -102,7 +105,7 @@ ingestion = [
102
105
  "icalendar>=6.0.0",
103
106
  ]
104
107
  full = [
105
- "superlocalmemory[search,ui,learning,performance,ingestion]",
108
+ "superlocalmemory[search,ui,learning,performance,ingestion,injection]",
106
109
  ]
107
110
  dev = [
108
111
  "pytest>=8.0",
@@ -28,7 +28,7 @@ if "OMP_NUM_THREADS" not in os.environ:
28
28
  os.environ["OMP_NUM_THREADS"] = "2"
29
29
  # ---------------------------------------------------------------------------
30
30
 
31
- __version__ = "3.4.58"
31
+ __version__ = "3.4.64"
32
32
 
33
33
  _REQUIRED_VERSIONS = {
34
34
  "sentence_transformers": "5.3.0",
@@ -2067,14 +2067,18 @@ def cmd_session_context(args: Namespace) -> None:
2067
2067
  This ensures the SessionStart hook completes within its 15s timeout even
2068
2068
  when Ollama requires a 60s+ cold start. The fast path returns:
2069
2069
  - Core Memory blocks (always-on context)
2070
- - Recent high-importance memories (last 7 days)
2070
+ - Recent high-importance memories (last N days)
2071
2071
  - Session summary from last session
2072
2072
  Falls back to the full engine path only if --full is passed explicitly.
2073
+
2074
+ v3.4.65: uses shared injection formatter (render_context) for identical
2075
+ output across MCP and CLI surfaces. --json flag returns structured JSON.
2073
2076
  """
2074
2077
  import sqlite3
2075
2078
  from pathlib import Path
2076
2079
  from superlocalmemory.core.config import SLMConfig
2077
2080
 
2081
+ use_json = getattr(args, "json", False)
2078
2082
  use_full = getattr(args, "full", False)
2079
2083
 
2080
2084
  if use_full:
@@ -2093,13 +2097,21 @@ def cmd_session_context(args: Namespace) -> None:
2093
2097
  query=getattr(args, "query", "") or "recent decisions and important context",
2094
2098
  )
2095
2099
  if context:
2096
- print(context)
2100
+ if use_json:
2101
+ from superlocalmemory.cli.json_output import json_print
2102
+ json_print("session-context", data={"context": context}, next_actions=[
2103
+ {"command": "slm recall --json <query>", "description": "Search memories"},
2104
+ ])
2105
+ else:
2106
+ print(context)
2097
2107
  except Exception as exc:
2098
2108
  logger.debug("session-context (full) failed: %s", exc)
2099
2109
  return
2100
2110
 
2101
2111
  # ── FAST PATH: direct SQLite, no engine, <500ms ──────────────
2102
2112
  try:
2113
+ from superlocalmemory.core.injection import InjectableMemory, render_context
2114
+
2103
2115
  config = SLMConfig.load()
2104
2116
  db_path = config.base_dir / "memory.db"
2105
2117
  if not db_path.exists():
@@ -2108,78 +2120,113 @@ def cmd_session_context(args: Namespace) -> None:
2108
2120
  pid = config.active_profile
2109
2121
  conn = sqlite3.connect(str(db_path))
2110
2122
  conn.row_factory = sqlite3.Row
2111
- sections = []
2112
2123
 
2113
- # 1. Core Memory blocks (compiled high-value context)
2124
+ # Collect facts for injection same queries as pre-v3.4.65 but
2125
+ # mapped into InjectableMemory for the shared formatter.
2126
+ inj_mems: list[InjectableMemory] = []
2127
+
2128
+ # Core Memory blocks (compiled high-value context)
2114
2129
  try:
2115
- rows = conn.execute(
2130
+ cm_rows = conn.execute(
2116
2131
  "SELECT block_type, content FROM core_memory_blocks "
2117
2132
  "WHERE profile_id = ? ORDER BY block_type",
2118
2133
  (pid,),
2119
2134
  ).fetchall()
2120
- if rows:
2121
- blocks = [f"[{r['block_type']}] {r['content']}" for r in rows]
2122
- sections.append("## Core Memory\n" + "\n".join(blocks))
2135
+ for r in cm_rows:
2136
+ content = f"[{r['block_type']}] {r['content']}"
2137
+ inj_mems.append(InjectableMemory(
2138
+ content=content, score=1.0, fact_id="",
2139
+ importance=1.0, access_count=10,
2140
+ pinned=True,
2141
+ ))
2123
2142
  except sqlite3.OperationalError:
2124
2143
  pass
2125
2144
 
2126
- # 2. Recent important memories — age gate from --max-age-days (default 30)
2145
+ # Recent important memories — age gate from --max-age-days (default 30)
2127
2146
  max_age = getattr(args, "max_age_days", 30)
2128
2147
  age_clause = (
2129
2148
  f"AND created_at >= datetime('now', '-{int(max_age)} days') "
2130
2149
  if max_age > 0 else ""
2131
2150
  )
2132
2151
  try:
2133
- rows = conn.execute(
2134
- "SELECT content, fact_type, created_at FROM atomic_facts "
2152
+ fact_rows = conn.execute(
2153
+ "SELECT fact_id, content, importance, access_count, fact_type FROM atomic_facts "
2135
2154
  "WHERE profile_id = ? "
2136
2155
  f"{age_clause}"
2137
2156
  "AND lifecycle = 'active' "
2138
2157
  "ORDER BY importance DESC, created_at DESC LIMIT 10",
2139
2158
  (pid,),
2140
2159
  ).fetchall()
2141
- if rows:
2142
- items = []
2143
- for r in rows:
2144
- content = r["content"][:200]
2145
- items.append(f"- [{r['fact_type'] or 'fact'}] {content}")
2146
- sections.append("## Recent Context (7 days)\n" + "\n".join(items))
2160
+ for r in fact_rows:
2161
+ inj_mems.append(InjectableMemory(
2162
+ content=r["content"],
2163
+ score=r["importance"] or 0.5,
2164
+ fact_id=r["fact_id"],
2165
+ importance=r["importance"] or 0.0,
2166
+ access_count=r["access_count"] or 0,
2167
+ ))
2147
2168
  except sqlite3.OperationalError:
2148
2169
  pass
2149
2170
 
2150
- # 3. Session markers (last session summary)
2171
+ # Session markers (last session summary)
2151
2172
  try:
2152
- rows = conn.execute(
2153
- "SELECT content, created_at FROM atomic_facts "
2173
+ sess_rows = conn.execute(
2174
+ "SELECT fact_id, content, importance, access_count FROM atomic_facts "
2154
2175
  "WHERE profile_id = ? AND content LIKE 'Session%' "
2155
2176
  "ORDER BY created_at DESC LIMIT 3",
2156
2177
  (pid,),
2157
2178
  ).fetchall()
2158
- if rows:
2159
- items = [f"- {r['content'][:150]}" for r in rows]
2160
- sections.append("## Recent Sessions\n" + "\n".join(items))
2179
+ for r in sess_rows:
2180
+ inj_mems.append(InjectableMemory(
2181
+ content=r["content"],
2182
+ score=r["importance"] or 0.3,
2183
+ fact_id=r["fact_id"],
2184
+ importance=r["importance"] or 0.0,
2185
+ access_count=r["access_count"] or 0,
2186
+ ))
2161
2187
  except sqlite3.OperationalError:
2162
2188
  pass
2163
2189
 
2164
- # 4. V3.3 Soft prompts (auto-learned patterns)
2190
+ conn.close()
2191
+
2192
+ if not inj_mems:
2193
+ return
2194
+
2195
+ # V3.3 Soft prompts (auto-learned patterns) — append as high-importance
2165
2196
  try:
2166
- rows = conn.execute(
2197
+ conn2 = sqlite3.connect(str(db_path))
2198
+ conn2.row_factory = sqlite3.Row
2199
+ sp_rows = conn2.execute(
2167
2200
  "SELECT category, content FROM soft_prompt_templates "
2168
2201
  "WHERE profile_id = ? AND active = 1 "
2169
2202
  "ORDER BY confidence DESC LIMIT 5",
2170
2203
  (pid,),
2171
2204
  ).fetchall()
2172
- if rows:
2173
- items = [f"- [{r['category']}] {r['content'][:150]}" for r in rows]
2174
- sections.append("## Learned Patterns\n" + "\n".join(items))
2175
- except sqlite3.OperationalError:
2205
+ conn2.close()
2206
+ for r in sp_rows:
2207
+ inj_mems.append(InjectableMemory(
2208
+ content=f"[{r['category']}] {r['content']}",
2209
+ score=0.7, fact_id="",
2210
+ importance=0.7, access_count=5,
2211
+ ))
2212
+ except Exception:
2176
2213
  pass
2177
2214
 
2178
- conn.close()
2215
+ cfg_inj = getattr(config, "injection", None)
2216
+ context = render_context(inj_mems, mode=config.mode.value.upper(), cfg=cfg_inj, wrap=True)
2217
+ if context:
2218
+ if use_json:
2219
+ from superlocalmemory.cli.json_output import json_print
2220
+ json_print("session-context", data={
2221
+ "context": context,
2222
+ "memory_count": len(inj_mems),
2223
+ "mode": config.mode.value.upper(),
2224
+ }, next_actions=[
2225
+ {"command": "slm recall --json <query>", "description": "Search memories"},
2226
+ ])
2227
+ else:
2228
+ print(context)
2179
2229
 
2180
- if sections:
2181
- header = f"# SLM Session Context — {config.active_profile}"
2182
- print(header + "\n\n" + "\n\n".join(sections))
2183
2230
  except Exception as exc:
2184
2231
  logger.debug("session-context (fast) failed: %s", exc)
2185
2232
 
@@ -171,6 +171,17 @@ def _start_daemon_subprocess() -> bool:
171
171
  else:
172
172
  kwargs["start_new_session"] = True
173
173
 
174
+ # v3.4.60: Force OMP_NUM_THREADS=1 in daemon env BEFORE Python imports
175
+ # numpy/torch/lightgbm. Setting it in __init__.py is too late on M5 Pro —
176
+ # by the time superlocalmemory.__init__ runs, libomp has already been
177
+ # initialized by an earlier import, causing the SIGSEGV at
178
+ # __kmp_suspend_initialize_thread when lightgbm forks its worker pool.
179
+ # Forcing serial OpenMP eliminates the parallel barrier race entirely.
180
+ daemon_env = os.environ.copy()
181
+ daemon_env["OMP_NUM_THREADS"] = "1"
182
+ daemon_env["KMP_DUPLICATE_LIB_OK"] = "TRUE"
183
+ kwargs["env"] = daemon_env
184
+
174
185
  with open(log_file, "a") as lf:
175
186
  proc = subprocess.Popen(cmd, stdout=lf, stderr=lf, **kwargs)
176
187
 
@@ -523,8 +534,10 @@ class DaemonHandler(BaseHTTPRequestHandler):
523
534
  session_id = f"http:{int(_t.time() * 1000)}"
524
535
 
525
536
  engine = _get_engine()
537
+ raw_fast = params.get("fast", ["false"])[0]
538
+ fast = raw_fast.lower() in ("true", "1")
526
539
  response = engine.recall(
527
- query, limit=limit, session_id=session_id,
540
+ query, limit=limit, session_id=session_id, fast=fast,
528
541
  )
529
542
  # Return the same field shape as recall_worker._handle_recall,
530
543
  # so MCP processes that proxy through the daemon get recall_trace-
@@ -136,7 +136,7 @@ def main() -> None:
136
136
 
137
137
  mode_p = sub.add_parser("mode", help="Get or set operating mode (a/b/c)")
138
138
  mode_p.add_argument(
139
- "value", nargs="?", choices=["a", "b", "c"], help="Mode to set",
139
+ "value", nargs="?", choices=["a", "b", "c", "A", "B", "C"], help="Mode to set",
140
140
  )
141
141
  mode_p.add_argument("--json", action="store_true", help="Output structured JSON (agent-native)")
142
142
 
@@ -62,7 +62,7 @@ class BackendOrchestrator:
62
62
  def __init__(self, config: SLMConfig, db: DatabaseManager) -> None:
63
63
  self._config = config
64
64
  self._db = db
65
- self._data_dir = Path(config.data_dir)
65
+ self._data_dir = Path(getattr(config, "data_dir", None) or config.base_dir)
66
66
  self._cozo: Any = None
67
67
  self._lancedb: Any = None
68
68
  self._tiers: Any = None
@@ -236,22 +236,28 @@ class BackendOrchestrator:
236
236
  # ------------------------------------------------------------------
237
237
 
238
238
  def _detect_cozo(self) -> bool:
239
- if self._config.get("graph_backend") == "sqlite":
240
- return False
241
- try:
242
- import pycozo # noqa: F401
243
- return True
244
- except ImportError:
239
+ gb = getattr(self._config, "graph_backend", "auto") or "auto"
240
+ if gb == "sqlite":
245
241
  return False
242
+ if gb in ("auto", "cozo"):
243
+ try:
244
+ import pycozo # noqa: F401
245
+ return True
246
+ except ImportError:
247
+ return False
248
+ return False
246
249
 
247
250
  def _detect_lancedb(self) -> bool:
248
- if self._config.get("vector_backend") == "sqlite-vec":
249
- return False
250
- try:
251
- import lancedb # noqa: F401
252
- return True
253
- except ImportError:
251
+ vb = getattr(self._config, "vector_backend", "auto") or "auto"
252
+ if vb == "sqlite-vec":
254
253
  return False
254
+ if vb in ("auto", "lancedb"):
255
+ try:
256
+ import lancedb # noqa: F401
257
+ return True
258
+ except ImportError:
259
+ return False
260
+ return False
255
261
 
256
262
  # ------------------------------------------------------------------
257
263
  # Internal: Init
@@ -233,6 +233,50 @@ class MathConfig:
233
233
  # Rate-Distortion (production only, disabled for benchmarks)
234
234
 
235
235
 
236
+ # ---------------------------------------------------------------------------
237
+ # Context Injection (v3.4.65)
238
+ # ---------------------------------------------------------------------------
239
+
240
+ @dataclass(frozen=True)
241
+ class InjectionConfig:
242
+ """Context-injection budgets & framing (v3.4.65).
243
+
244
+ Single source of truth for what reaches the agent at session_init,
245
+ prestage_context, and the recall hooks. Replaces scattered char caps.
246
+
247
+ Budgets are in *estimated tokens* (chars/4 heuristic; see
248
+ core/injection.estimate_tokens). Mode-aware: A=fast/cheap, C=rich.
249
+ """
250
+ enabled: bool = True
251
+
252
+ # Mode-aware TOTAL budget (core block + recall), in estimated tokens.
253
+ total_budget_tokens_a: int = 2000
254
+ total_budget_tokens_b: int = 4000
255
+ total_budget_tokens_c: int = 8000
256
+
257
+ # Per-memory ceiling (estimated tokens). Whole-memory inclusion until
258
+ # the total budget is hit; this only clamps a single oversized memory.
259
+ per_memory_max_tokens: int = 600
260
+
261
+ # Core Memory Block (Letta pattern).
262
+ core_block_enabled: bool = True
263
+ core_block_max_facts: int = 5
264
+ core_block_max_tokens: int = 1000
265
+ core_block_importance_min: float = 0.8
266
+ core_block_min_access_count: int = 2
267
+
268
+ # Lost-in-the-middle: place strongest at top & bottom edges.
269
+ edge_ordering: bool = True
270
+
271
+ # Trust framing. False (shipped) = cautious "reference only" wrapper.
272
+ # True (Varun personal) = clean "memory context" framing.
273
+ # redact_secrets ALWAYS runs regardless.
274
+ trust_first_party: bool = False
275
+
276
+ # prestage_context response byte cap (was hardcoded 16 KB).
277
+ prestage_max_response_bytes: int = 64 * 1024
278
+
279
+
236
280
  # ---------------------------------------------------------------------------
237
281
  # Master Config
238
282
  # ---------------------------------------------------------------------------
@@ -613,6 +657,10 @@ class SLMConfig:
613
657
  parameterization: ParameterizationConfig = field(
614
658
  default_factory=ParameterizationConfig,
615
659
  )
660
+ injection: InjectionConfig = field(default_factory=InjectionConfig)
661
+ # v3.5.0: scaling backends — "sqlite" / "cozo" / "auto" / "lancedb" / "sqlite-vec" / "auto".
662
+ graph_backend: str = "auto" # "auto" = cozo if pycozo installed, else sqlite
663
+ vector_backend: str = "auto" # "auto" = lancedb if installed, else sqlite-vec
616
664
  evolution: EvolutionConfig = field(default_factory=EvolutionConfig)
617
665
 
618
666
  # v3.4.3: Daemon configuration
@@ -701,6 +749,24 @@ class SLMConfig:
701
749
  if k in EvolutionConfig.__dataclass_fields__
702
750
  })
703
751
 
752
+ # V3.4.65: Injection config (additive — defaults if missing from JSON)
753
+ inj = data.get("injection", {}) or {}
754
+ config.injection = InjectionConfig(
755
+ enabled=bool(inj.get("enabled", True)),
756
+ total_budget_tokens_a=int(inj.get("total_budget_tokens_a", 2000)),
757
+ total_budget_tokens_b=int(inj.get("total_budget_tokens_b", 4000)),
758
+ total_budget_tokens_c=int(inj.get("total_budget_tokens_c", 8000)),
759
+ per_memory_max_tokens=int(inj.get("per_memory_max_tokens", 600)),
760
+ core_block_enabled=bool(inj.get("core_block_enabled", True)),
761
+ core_block_max_facts=int(inj.get("core_block_max_facts", 5)),
762
+ core_block_max_tokens=int(inj.get("core_block_max_tokens", 1000)),
763
+ core_block_importance_min=float(inj.get("core_block_importance_min", 0.8)),
764
+ core_block_min_access_count=int(inj.get("core_block_min_access_count", 2)),
765
+ edge_ordering=bool(inj.get("edge_ordering", True)),
766
+ trust_first_party=bool(inj.get("trust_first_party", False)),
767
+ prestage_max_response_bytes=int(inj.get("prestage_max_response_bytes", 64 * 1024)),
768
+ )
769
+
704
770
  return config
705
771
 
706
772
  def save(
@@ -775,6 +841,23 @@ class SLMConfig:
775
841
  "max_evolutions_per_cycle": self.evolution.max_evolutions_per_cycle,
776
842
  }
777
843
 
844
+ # V3.4.65: Persist injection config
845
+ data["injection"] = {
846
+ "enabled": self.injection.enabled,
847
+ "total_budget_tokens_a": self.injection.total_budget_tokens_a,
848
+ "total_budget_tokens_b": self.injection.total_budget_tokens_b,
849
+ "total_budget_tokens_c": self.injection.total_budget_tokens_c,
850
+ "per_memory_max_tokens": self.injection.per_memory_max_tokens,
851
+ "core_block_enabled": self.injection.core_block_enabled,
852
+ "core_block_max_facts": self.injection.core_block_max_facts,
853
+ "core_block_max_tokens": self.injection.core_block_max_tokens,
854
+ "core_block_importance_min": self.injection.core_block_importance_min,
855
+ "core_block_min_access_count": self.injection.core_block_min_access_count,
856
+ "edge_ordering": self.injection.edge_ordering,
857
+ "trust_first_party": self.injection.trust_first_party,
858
+ "prestage_max_response_bytes": self.injection.prestage_max_response_bytes,
859
+ }
860
+
778
861
  # Preserve existing V3.3 config sections that aren't in for_mode()
779
862
  for key in ("forgetting", "quantization", "sagq", "embedding_signature", "auto_invoke"):
780
863
  if key in existing:
@@ -28,12 +28,18 @@ from pathlib import Path
28
28
  logger = logging.getLogger("superlocalmemory.graph_pruner")
29
29
 
30
30
  _CHAIN_BATCH_LIMIT = 10_000
31
+ # v3.4.59: Nodes with more than this many total edges (in+out) are hub nodes.
32
+ # SA and entity_graph channels cap fan-out at 30/node, so edges beyond this
33
+ # threshold provide zero additional recall signal while bloating the graph.
34
+ _MAX_DEGREE_PER_NODE: int = 100
35
+ _HUB_PRUNE_BATCH: int = 500 # delete edges in batches to avoid giant IN clauses
31
36
 
32
37
 
33
38
  def prune_graph(
34
39
  db_path: str | Path,
35
40
  profile_id: str = "default",
36
41
  dry_run: bool = False,
42
+ cap_degree: bool = True,
37
43
  ) -> dict:
38
44
  """Run all graph pruning strategies for a specific profile.
39
45
 
@@ -41,7 +47,7 @@ def prune_graph(
41
47
  """
42
48
  conn = sqlite3.connect(str(db_path))
43
49
  conn.execute("PRAGMA journal_mode=WAL")
44
- conn.execute("PRAGMA busy_timeout=10000")
50
+ conn.execute("PRAGMA busy_timeout=30000")
45
51
  conn.row_factory = sqlite3.Row
46
52
 
47
53
  stats = {
@@ -49,6 +55,7 @@ def prune_graph(
49
55
  "supersedes_collapsed": 0,
50
56
  "self_loops_removed": 0,
51
57
  "duplicates_removed": 0,
58
+ "hub_edges_removed": 0,
52
59
  "total_before": 0,
53
60
  "total_after": 0,
54
61
  }
@@ -72,6 +79,10 @@ def prune_graph(
72
79
  stats["supersedes_collapsed"] = _collapse_supersedes_chains(
73
80
  c, profile_id, dry_run,
74
81
  )
82
+ if cap_degree:
83
+ stats["hub_edges_removed"] = _cap_node_degree(
84
+ c, profile_id, _MAX_DEGREE_PER_NODE, dry_run,
85
+ )
75
86
 
76
87
  if dry_run:
77
88
  c.execute("ROLLBACK")
@@ -91,10 +102,11 @@ def prune_graph(
91
102
  prefix = "(dry-run) " if dry_run else ""
92
103
  logger.info(
93
104
  "%sGraph pruning: removed %d edges (%.1f%%) in %.1fs — "
94
- "orphans=%d, supersedes=%d, self_loops=%d, duplicates=%d",
105
+ "orphans=%d, supersedes=%d, self_loops=%d, duplicates=%d, hub_cap=%d",
95
106
  prefix, total_removed, pct, elapsed,
96
107
  stats["orphans_removed"], stats["supersedes_collapsed"],
97
108
  stats["self_loops_removed"], stats["duplicates_removed"],
109
+ stats["hub_edges_removed"],
98
110
  )
99
111
 
100
112
  except Exception as exc:
@@ -288,3 +300,81 @@ def _collapse_supersedes_chains(
288
300
  )
289
301
 
290
302
  return len(delete_ids)
303
+
304
+
305
+ def _cap_node_degree(
306
+ c: sqlite3.Cursor,
307
+ profile_id: str,
308
+ max_degree: int,
309
+ dry_run: bool,
310
+ ) -> int:
311
+ """Remove low-weight edges from hub nodes (nodes with degree > max_degree).
312
+
313
+ v3.4.59: At 17K facts, popular entities (SLM, Claude, AgentAssert) caused
314
+ 1.4M+ entity edges — avg 121 per node, some nodes with 5000+. SA fan-out
315
+ is capped at 30/node during traversal, so edges beyond max_degree add zero
316
+ recall signal while making every graph query scan millions of rows.
317
+
318
+ Algorithm (single-pass window function — no Python loops):
319
+ 1. ROW_NUMBER() OVER (PARTITION BY source_id ORDER BY weight DESC) ranks
320
+ every edge per node in one full table scan.
321
+ 2. Edges with rn > max_degree are deleted in a single DELETE statement.
322
+ Requires SQLite 3.25+ (window functions). System is on 3.53.1.
323
+ """
324
+ if dry_run:
325
+ c.execute(
326
+ """
327
+ SELECT COUNT(*) as cnt FROM (
328
+ SELECT edge_id,
329
+ ROW_NUMBER() OVER (
330
+ PARTITION BY source_id ORDER BY weight DESC
331
+ ) as rn
332
+ FROM graph_edges
333
+ WHERE profile_id = ?
334
+ ) WHERE rn > ?
335
+ """,
336
+ (profile_id, max_degree),
337
+ )
338
+ excess = c.fetchone()["cnt"]
339
+ logger.info(
340
+ "(dry-run) _cap_node_degree: ~%d edges would be removed (max_degree=%d)",
341
+ excess, max_degree,
342
+ )
343
+ return excess
344
+
345
+ # Step 1: build temp keep-list in one pass (ROW_NUMBER ranks by weight DESC)
346
+ c.execute("CREATE TEMP TABLE IF NOT EXISTS _slm_keep_edges (edge_id TEXT PRIMARY KEY)")
347
+ c.execute("DELETE FROM _slm_keep_edges") # idempotent if called twice
348
+ c.execute(
349
+ """
350
+ INSERT INTO _slm_keep_edges (edge_id)
351
+ SELECT edge_id FROM (
352
+ SELECT edge_id,
353
+ ROW_NUMBER() OVER (
354
+ PARTITION BY source_id ORDER BY weight DESC
355
+ ) as rn
356
+ FROM graph_edges
357
+ WHERE profile_id = ?
358
+ ) WHERE rn <= ?
359
+ """,
360
+ (profile_id, max_degree),
361
+ )
362
+
363
+ # Step 2: delete everything not in keep-list (single DELETE)
364
+ c.execute(
365
+ """
366
+ DELETE FROM graph_edges
367
+ WHERE profile_id = ?
368
+ AND edge_id NOT IN (SELECT edge_id FROM _slm_keep_edges)
369
+ """,
370
+ (profile_id,),
371
+ )
372
+ deleted = c.rowcount
373
+
374
+ c.execute("DROP TABLE IF EXISTS _slm_keep_edges")
375
+
376
+ logger.info(
377
+ "_cap_node_degree: deleted %d low-weight edges (max_degree=%d)",
378
+ deleted, max_degree,
379
+ )
380
+ return deleted