surreal-memory 2.3.2__tar.gz → 2.4.0__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 (380) hide show
  1. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/PKG-INFO +3 -3
  2. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/pyproject.toml +2 -2
  3. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/__init__.py +1 -1
  4. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/core/synapse.py +2 -0
  5. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/consolidation.py +9 -3
  6. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/embedding/gemini_embedding.py +24 -4
  7. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/base.py +2 -0
  8. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/memory_store.py +3 -0
  9. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/shared_store.py +7 -1
  10. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_synapses.py +6 -1
  11. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/projects.py +2 -0
  12. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/schema.py +17 -16
  13. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/sources.py +2 -0
  14. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/store.py +39 -27
  15. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/.gitignore +0 -0
  16. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/LICENSE +0 -0
  17. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/NOTICE +0 -0
  18. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/README.md +0 -0
  19. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/__init__.py +0 -0
  20. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/__main__.py +0 -0
  21. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/_helpers.py +0 -0
  22. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/__init__.py +0 -0
  23. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/brain.py +0 -0
  24. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/codebase.py +0 -0
  25. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/config_cmd.py +0 -0
  26. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/habits.py +0 -0
  27. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/info.py +0 -0
  28. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/listing.py +0 -0
  29. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/memory.py +0 -0
  30. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/project.py +0 -0
  31. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/reindex.py +0 -0
  32. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/shared.py +0 -0
  33. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/shortcuts.py +0 -0
  34. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/storage.py +0 -0
  35. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/telegram.py +0 -0
  36. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/tools.py +0 -0
  37. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/train.py +0 -0
  38. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/update.py +0 -0
  39. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/version.py +0 -0
  40. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/watch.py +0 -0
  41. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/config.py +0 -0
  42. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/doctor.py +0 -0
  43. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/embedding_setup.py +0 -0
  44. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/full_setup.py +0 -0
  45. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/graph_export.py +0 -0
  46. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/ide_rules.py +0 -0
  47. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/main.py +0 -0
  48. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/markdown_export.py +0 -0
  49. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/setup.py +0 -0
  50. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/storage.py +0 -0
  51. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/tui.py +0 -0
  52. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/update_check.py +0 -0
  53. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/wizard.py +0 -0
  54. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/config_presets.py +0 -0
  55. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/core/__init__.py +0 -0
  56. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/core/action_event.py +0 -0
  57. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/core/alert.py +0 -0
  58. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/core/brain.py +0 -0
  59. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/core/brain_mode.py +0 -0
  60. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/core/eternal_context.py +0 -0
  61. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/core/fiber.py +0 -0
  62. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/core/memory_types.py +0 -0
  63. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/core/neuron.py +0 -0
  64. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/core/project.py +0 -0
  65. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/core/review_schedule.py +0 -0
  66. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/core/source.py +0 -0
  67. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/core/trigger_engine.py +0 -0
  68. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/__init__.py +0 -0
  69. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/activation.py +0 -0
  70. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/arousal.py +0 -0
  71. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/associative_inference.py +0 -0
  72. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/brain_evolution.py +0 -0
  73. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/brain_transplant.py +0 -0
  74. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/brain_versioning.py +0 -0
  75. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/causal_traversal.py +0 -0
  76. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/chart_generator.py +0 -0
  77. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/chunking.py +0 -0
  78. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/citation.py +0 -0
  79. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/clustering.py +0 -0
  80. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/codebase_encoder.py +0 -0
  81. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/cognitive.py +0 -0
  82. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/compression.py +0 -0
  83. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/conflict_auto_resolve.py +0 -0
  84. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/conflict_detection.py +0 -0
  85. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/connection_explainer.py +0 -0
  86. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/consolidation_delta.py +0 -0
  87. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/context_merger.py +0 -0
  88. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/context_optimizer.py +0 -0
  89. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/context_retrieval.py +0 -0
  90. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/cross_brain.py +0 -0
  91. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/db_introspector.py +0 -0
  92. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/db_knowledge.py +0 -0
  93. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/db_trainer.py +0 -0
  94. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/decision_intel.py +0 -0
  95. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/dedup/__init__.py +0 -0
  96. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/dedup/config.py +0 -0
  97. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/dedup/llm_judge.py +0 -0
  98. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/dedup/pipeline.py +0 -0
  99. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/dedup/prompts.py +0 -0
  100. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/depth_prior.py +0 -0
  101. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/diagnostics.py +0 -0
  102. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/doc_chunker.py +0 -0
  103. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/doc_extractor.py +0 -0
  104. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/doc_trainer.py +0 -0
  105. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/dream.py +0 -0
  106. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/drift_detection.py +0 -0
  107. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/embedding/__init__.py +0 -0
  108. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/embedding/capability.py +0 -0
  109. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/embedding/config.py +0 -0
  110. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/embedding/ollama_embedding.py +0 -0
  111. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/embedding/openai_embedding.py +0 -0
  112. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/embedding/openrouter_embedding.py +0 -0
  113. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/embedding/provider.py +0 -0
  114. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/embedding/retry.py +0 -0
  115. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/embedding/sentence_transformer.py +0 -0
  116. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/encoder.py +0 -0
  117. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/enrichment.py +0 -0
  118. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/fidelity.py +0 -0
  119. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/file_watcher.py +0 -0
  120. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/fuzzy_match.py +0 -0
  121. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/fuzzy_query.py +0 -0
  122. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/gromov.py +0 -0
  123. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/hippocampal_replay.py +0 -0
  124. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/hooks.py +0 -0
  125. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/idf_anchor.py +0 -0
  126. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/importance.py +0 -0
  127. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/interference.py +0 -0
  128. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/koopman.py +0 -0
  129. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/learning_rule.py +0 -0
  130. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/lifecycle.py +0 -0
  131. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/memory_stages.py +0 -0
  132. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/merge.py +0 -0
  133. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/narrative.py +0 -0
  134. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/pattern_extraction.py +0 -0
  135. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/pipeline.py +0 -0
  136. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/pipeline_steps.py +0 -0
  137. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/ppr_activation.py +0 -0
  138. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/prediction_error.py +0 -0
  139. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/priming.py +0 -0
  140. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/quality_scorer.py +0 -0
  141. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/query_expander.py +0 -0
  142. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/query_expansion.py +0 -0
  143. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/query_pattern_mining.py +0 -0
  144. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/reconsolidation.py +0 -0
  145. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/reconstruction.py +0 -0
  146. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/reflection.py +0 -0
  147. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/reflex_activation.py +0 -0
  148. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/reranker.py +0 -0
  149. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/retrieval.py +0 -0
  150. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/retrieval_context.py +0 -0
  151. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/retrieval_types.py +0 -0
  152. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/schema_assimilation.py +0 -0
  153. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/score_fusion.py +0 -0
  154. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/semantic_discovery.py +0 -0
  155. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/sequence_mining.py +0 -0
  156. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/session_state.py +0 -0
  157. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/spaced_repetition.py +0 -0
  158. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/stabilization.py +0 -0
  159. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/sufficiency.py +0 -0
  160. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/temporal_binding.py +0 -0
  161. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/tier_engine.py +0 -0
  162. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/token_budget.py +0 -0
  163. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/token_normalizer.py +0 -0
  164. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/tool_memory.py +0 -0
  165. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/topology_analysis.py +0 -0
  166. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/watch_state.py +0 -0
  167. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/workflow_suggest.py +0 -0
  168. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/write_queue.py +0 -0
  169. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/extraction/__init__.py +0 -0
  170. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/extraction/codebase.py +0 -0
  171. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/extraction/entities.py +0 -0
  172. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/extraction/keywords.py +0 -0
  173. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/extraction/llm_provider.py +0 -0
  174. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/extraction/parser.py +0 -0
  175. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/extraction/relations.py +0 -0
  176. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/extraction/router.py +0 -0
  177. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/extraction/sentiment.py +0 -0
  178. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/extraction/structure_detector.py +0 -0
  179. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/extraction/temporal.py +0 -0
  180. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/git_context.py +0 -0
  181. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/hooks/__init__.py +0 -0
  182. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/hooks/post_tool_use.py +0 -0
  183. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/hooks/pre_compact.py +0 -0
  184. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/hooks/project_context.py +0 -0
  185. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/hooks/session_start.py +0 -0
  186. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/hooks/stop.py +0 -0
  187. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/hooks/task_context.py +0 -0
  188. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integration/__init__.py +0 -0
  189. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integration/adapter.py +0 -0
  190. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integration/adapters/__init__.py +0 -0
  191. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integration/adapters/awf_adapter.py +0 -0
  192. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integration/adapters/chromadb_adapter.py +0 -0
  193. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integration/adapters/cognee_adapter.py +0 -0
  194. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integration/adapters/graphiti_adapter.py +0 -0
  195. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integration/adapters/llamaindex_adapter.py +0 -0
  196. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integration/adapters/mem0_adapter.py +0 -0
  197. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integration/mapper.py +0 -0
  198. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integration/models.py +0 -0
  199. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integration/sync_engine.py +0 -0
  200. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integration/telegram.py +0 -0
  201. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integrations/__init__.py +0 -0
  202. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integrations/nanobot/__init__.py +0 -0
  203. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integrations/nanobot/base_tool.py +0 -0
  204. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integrations/nanobot/context.py +0 -0
  205. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integrations/nanobot/memory_store.py +0 -0
  206. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integrations/nanobot/protocol.py +0 -0
  207. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integrations/nanobot/setup.py +0 -0
  208. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integrations/nanobot/tools.py +0 -0
  209. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integrations/openclaw_config.py +0 -0
  210. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/__init__.py +0 -0
  211. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/__main__.py +0 -0
  212. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/alert_handler.py +0 -0
  213. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/auto_capture.py +0 -0
  214. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/auto_handler.py +0 -0
  215. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/budget_handler.py +0 -0
  216. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/cognitive_handler.py +0 -0
  217. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/conflict_handler.py +0 -0
  218. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/connection_handler.py +0 -0
  219. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/constants.py +0 -0
  220. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/db_train_handler.py +0 -0
  221. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/drift_handler.py +0 -0
  222. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/eternal_handler.py +0 -0
  223. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/evolution_handler.py +0 -0
  224. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/expiry_cleanup_handler.py +0 -0
  225. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/http_transport.py +0 -0
  226. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/index_handler.py +0 -0
  227. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/instruction_handler.py +0 -0
  228. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/lifecycle_handler.py +0 -0
  229. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/maintenance_handler.py +0 -0
  230. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/mem0_sync_handler.py +0 -0
  231. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/narrative_handler.py +0 -0
  232. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/onboarding_handler.py +0 -0
  233. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/prompt.py +0 -0
  234. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/provenance_handler.py +0 -0
  235. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/recall_handler.py +0 -0
  236. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/remember_handler.py +0 -0
  237. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/response_compactor.py +0 -0
  238. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/review_handler.py +0 -0
  239. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/scheduled_consolidation_handler.py +0 -0
  240. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/server.py +0 -0
  241. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/session_handler.py +0 -0
  242. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/stats_handler.py +0 -0
  243. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/surface_handler.py +0 -0
  244. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/sync_handler.py +0 -0
  245. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/telegram_handler.py +0 -0
  246. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/tier_handler.py +0 -0
  247. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/tool_handler_utils.py +0 -0
  248. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/tool_handlers.py +0 -0
  249. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/tool_schemas.py +0 -0
  250. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/train_handler.py +0 -0
  251. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/version_check_handler.py +0 -0
  252. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/visualize_handler.py +0 -0
  253. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/watch_handler.py +0 -0
  254. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/plugins/__init__.py +0 -0
  255. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/plugins/base.py +0 -0
  256. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/plugins/community.py +0 -0
  257. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/py.typed +0 -0
  258. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/safety/__init__.py +0 -0
  259. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/safety/encryption.py +0 -0
  260. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/safety/freshness.py +0 -0
  261. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/safety/input_firewall.py +0 -0
  262. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/safety/sensitive.py +0 -0
  263. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/__init__.py +0 -0
  264. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/app.py +0 -0
  265. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/dependencies.py +0 -0
  266. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/models.py +0 -0
  267. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/routes/__init__.py +0 -0
  268. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/routes/brain.py +0 -0
  269. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/routes/consolidation.py +0 -0
  270. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/routes/dashboard_api.py +0 -0
  271. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/routes/hub.py +0 -0
  272. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/routes/integration_status.py +0 -0
  273. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/routes/memory.py +0 -0
  274. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/routes/oauth.py +0 -0
  275. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/routes/openclaw_api.py +0 -0
  276. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/routes/sync.py +0 -0
  277. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/DiagramsPage-BZV40eAE.css +0 -0
  278. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/DiagramsPage-DxR1C_Ua.js +0 -0
  279. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/EvolutionPage-By828lS5.js +0 -0
  280. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/GraphPage-DwQB1_DY.js +0 -0
  281. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/HealthPage-DetJg-Qr.js +0 -0
  282. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/OraclePage-7FBeVFXa.js +0 -0
  283. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/OverviewPage-xe8kFqX3.js +0 -0
  284. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/ProGate-CwBF4etn.js +0 -0
  285. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/SettingsPage-CH2mIMiD.js +0 -0
  286. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/StoragePage-CLDPXEH8.js +0 -0
  287. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/SyncPage-MbtH1dwD.js +0 -0
  288. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/TimelinePage-BIybkdH4.js +0 -0
  289. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/ToolStatsPage-BA-DvxES.js +0 -0
  290. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/VisualizePage-B_IPrBGU.js +0 -0
  291. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/card-B0vNsxr_.js +0 -0
  292. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/embed-gLOWnRXV.js +0 -0
  293. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/index-BFkJgtCN.css +0 -0
  294. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/index-C26pxqlr.js +0 -0
  295. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/skeleton-DQJ-n00q.js +0 -0
  296. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/timer-DWAvo6M8.js +0 -0
  297. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/vendor-icons-BYlYobEK.js +0 -0
  298. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/vendor-motion-Ct_HHbYW.js +0 -0
  299. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/vendor-query-CqA1cBNl.js +0 -0
  300. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/vendor-react-BfuodpLv.js +0 -0
  301. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/vendor-recharts-BkwZfCWA.js +0 -0
  302. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/vendor-ui-Qm4_4bAc.js +0 -0
  303. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/index.html +0 -0
  304. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/skills/__init__.py +0 -0
  305. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/skills/memory-audit/SKILL.md +0 -0
  306. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/skills/memory-evolution/SKILL.md +0 -0
  307. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/skills/memory-intake/SKILL.md +0 -0
  308. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/__init__.py +0 -0
  309. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/factory.py +0 -0
  310. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/memory_brain_ops.py +0 -0
  311. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/memory_collections.py +0 -0
  312. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/memory_reviews.py +0 -0
  313. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/neuron_cache.py +0 -0
  314. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/read_pool.py +0 -0
  315. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/shared_store_collections.py +0 -0
  316. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/shared_store_mappers.py +0 -0
  317. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_action_log.py +0 -0
  318. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_alerts.py +0 -0
  319. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_brain_ops.py +0 -0
  320. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_calibration.py +0 -0
  321. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_change_log.py +0 -0
  322. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_coactivation.py +0 -0
  323. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_cognitive.py +0 -0
  324. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_compression.py +0 -0
  325. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_depth_priors.py +0 -0
  326. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_devices.py +0 -0
  327. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_drift.py +0 -0
  328. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_entity_refs.py +0 -0
  329. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_fibers.py +0 -0
  330. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_maturation.py +0 -0
  331. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_merkle.py +0 -0
  332. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_neurons.py +0 -0
  333. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_projects.py +0 -0
  334. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_reviews.py +0 -0
  335. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_row_mappers.py +0 -0
  336. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_schema.py +0 -0
  337. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_sessions.py +0 -0
  338. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_sources.py +0 -0
  339. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_store.py +0 -0
  340. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_sync_state.py +0 -0
  341. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_tool_events.py +0 -0
  342. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_training_files.py +0 -0
  343. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_typed.py +0 -0
  344. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_versioning.py +0 -0
  345. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/__init__.py +0 -0
  346. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/activity.py +0 -0
  347. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/alerts.py +0 -0
  348. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/cognitive.py +0 -0
  349. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/compression.py +0 -0
  350. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/connection.py +0 -0
  351. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/depth_priors.py +0 -0
  352. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/keyword_entity.py +0 -0
  353. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/review_schedules.py +0 -0
  354. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/tool_events.py +0 -0
  355. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/typed_memory.py +0 -0
  356. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/versions.py +0 -0
  357. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/surface/__init__.py +0 -0
  358. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/surface/generator.py +0 -0
  359. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/surface/lifecycle.py +0 -0
  360. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/surface/models.py +0 -0
  361. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/surface/parser.py +0 -0
  362. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/surface/resolver.py +0 -0
  363. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/surface/serializer.py +0 -0
  364. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/surface/token_budget.py +0 -0
  365. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/sync/__init__.py +0 -0
  366. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/sync/client.py +0 -0
  367. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/sync/device.py +0 -0
  368. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/sync/incremental_merge.py +0 -0
  369. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/sync/merkle.py +0 -0
  370. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/sync/protocol.py +0 -0
  371. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/sync/sync_engine.py +0 -0
  372. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/unified_config.py +0 -0
  373. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/utils/__init__.py +0 -0
  374. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/utils/config.py +0 -0
  375. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/utils/consolidation_lock.py +0 -0
  376. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/utils/sandbox.py +0 -0
  377. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/utils/simhash.py +0 -0
  378. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/utils/ssl_helper.py +0 -0
  379. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/utils/tag_normalizer.py +0 -0
  380. {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/utils/timeutils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: surreal-memory
3
- Version: 2.3.2
3
+ Version: 2.4.0
4
4
  Summary: Reflex-based memory system for AI agents with SurrealDB backend — retrieval through activation, not search
5
5
  Project-URL: Homepage, https://github.com/acidkill/surreal-memory
6
6
  Project-URL: Documentation, https://github.com/acidkill/surreal-memory/blob/main/docs/getting-started/quickstart.md
@@ -38,7 +38,7 @@ Requires-Dist: mem0ai>=0.1.0; extra == 'all'
38
38
  Requires-Dist: python-multipart>=0.0.22; extra == 'all'
39
39
  Requires-Dist: pyvi>=0.1; extra == 'all'
40
40
  Requires-Dist: spacy>=3.6; extra == 'all'
41
- Requires-Dist: surrealdb>=0.4.0; extra == 'all'
41
+ Requires-Dist: surrealdb<3.0.0,>=2.0.0; extra == 'all'
42
42
  Requires-Dist: underthesea>=6.0; extra == 'all'
43
43
  Requires-Dist: uvicorn[standard]>=0.23; extra == 'all'
44
44
  Provides-Extra: chromadb
@@ -104,7 +104,7 @@ Requires-Dist: httpx>=0.24; extra == 'server'
104
104
  Requires-Dist: python-multipart>=0.0.22; extra == 'server'
105
105
  Requires-Dist: uvicorn[standard]>=0.23; extra == 'server'
106
106
  Provides-Extra: surrealdb
107
- Requires-Dist: surrealdb>=0.4.0; extra == 'surrealdb'
107
+ Requires-Dist: surrealdb<3.0.0,>=2.0.0; extra == 'surrealdb'
108
108
  Provides-Extra: watch
109
109
  Requires-Dist: watchdog>=4.0.0; extra == 'watch'
110
110
  Description-Content-Type: text/markdown
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "surreal-memory"
7
- version = "2.3.2"
7
+ version = "2.4.0"
8
8
  description = "Reflex-based memory system for AI agents with SurrealDB backend — retrieval through activation, not search"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -52,7 +52,7 @@ server = [
52
52
  "httpx>=0.24",
53
53
  ]
54
54
  surrealdb = [
55
- "surrealdb>=0.4.0",
55
+ "surrealdb>=2.0.0,<3.0.0",
56
56
  ]
57
57
  encryption = [
58
58
  "cryptography>=46.0.5",
@@ -16,7 +16,7 @@ from surreal_memory.engine.encoder import EncodingResult, MemoryEncoder
16
16
  from surreal_memory.engine.reflex_activation import CoActivation, ReflexActivation
17
17
  from surreal_memory.engine.retrieval import DepthLevel, ReflexPipeline, RetrievalResult
18
18
 
19
- __version__ = "2.3.2"
19
+ __version__ = "2.4.0"
20
20
 
21
21
  __all__ = [
22
22
  "__version__",
@@ -94,6 +94,8 @@ class Direction(StrEnum):
94
94
 
95
95
  UNIDIRECTIONAL = "uni" # One-way: source -> target
96
96
  BIDIRECTIONAL = "bi" # Two-way: source <-> target
97
+ FORWARD = "forward" # legacy rows; also _row_to_synapse default in surrealdb store
98
+ BACKWARD = "backward" # legacy rows: target -> source
97
99
 
98
100
 
99
101
  # Synapse types that are typically bidirectional
@@ -598,6 +598,14 @@ class ConsolidationEngine:
598
598
  states = await self._storage.get_neuron_states_batch(batch_ids)
599
599
 
600
600
  for neuron in batch:
601
+ # Never auto-prune pinned neurons, whether isolated (orphan) or
602
+ # dead. The dead-neuron path already honored pinned, but the
603
+ # orphan path short-circuited above it, so pinned isolated
604
+ # neurons were permanently deleted. Hoist the guard so it
605
+ # protects both paths.
606
+ if neuron.id in pinned_neuron_ids:
607
+ continue
608
+
601
609
  is_orphan = (
602
610
  neuron.id not in connected_neuron_ids and neuron.id not in fiber_neuron_ids
603
611
  )
@@ -606,9 +614,7 @@ class ConsolidationEngine:
606
614
  orphan_ids.append(neuron.id)
607
615
  continue
608
616
 
609
- # Dead neuron: has connections but never accessed, old enough, not pinned
610
- if neuron.id in pinned_neuron_ids:
611
- continue
617
+ # Dead neuron: has connections but never accessed, old enough
612
618
  state = states.get(neuron.id)
613
619
  freq = state.access_frequency if state else 0
614
620
  if freq > 0:
@@ -61,7 +61,21 @@ class GeminiEmbedding(EmbeddingProvider):
61
61
  "Install it with: pip install 'surreal-memory[embeddings-gemini]'"
62
62
  ) from exc
63
63
 
64
- self._client = genai.Client(api_key=self._api_key)
64
+ # Optional gateway routing: honour GOOGLE_GEMINI_BASE_URL (the
65
+ # SDK env var) but build the client explicitly, because our
66
+ # gateway path already pins the API version — api_version must be
67
+ # emptied or the SDK doubles it ('/v1beta/v1beta/...').
68
+ base_url = os.getenv("GOOGLE_GEMINI_BASE_URL")
69
+ if base_url:
70
+ self._client = genai.Client(
71
+ api_key=self._api_key,
72
+ http_options={
73
+ "base_url": base_url,
74
+ "api_version": os.getenv("GOOGLE_GEMINI_API_VERSION", ""),
75
+ },
76
+ )
77
+ else:
78
+ self._client = genai.Client(api_key=self._api_key)
65
79
 
66
80
  return self._client
67
81
 
@@ -94,13 +108,19 @@ class GeminiEmbedding(EmbeddingProvider):
94
108
  batch_size = 100
95
109
  for i in range(0, len(texts), batch_size):
96
110
  chunk = texts[i : i + batch_size]
97
- # functools.partial binds `chunk` at creation (satisfies ruff B023,
98
- # no loop-var late binding) and types cleanly for mypy.
111
+ # google-genai >= 2.0 folds a plain list[str] into ONE multi-part
112
+ # content (N texts -> 1 embedding); give each text its own content
113
+ # so the API returns one embedding per text. Plain ContentDicts are
114
+ # used instead of types.Content to avoid importing google.genai here
115
+ # (keeps this path working when the SDK is mocked/absent in tests).
116
+ chunk_contents = [{"parts": [{"text": t}]} for t in chunk]
117
+ # functools.partial binds the chunk at creation (satisfies ruff
118
+ # B023, no loop-var late binding) and types cleanly for mypy.
99
119
  response = await call_with_retry(
100
120
  partial(
101
121
  client.aio.models.embed_content,
102
122
  model=self._model,
103
- contents=chunk,
123
+ contents=chunk_contents,
104
124
  config={"task_type": self._task_type},
105
125
  ),
106
126
  provider="gemini",
@@ -304,6 +304,7 @@ class NeuralStorage(ABC):
304
304
  target_id: str | None = None,
305
305
  type: SynapseType | None = None,
306
306
  min_weight: float | None = None,
307
+ limit: int | None = None,
307
308
  ) -> list[Synapse]:
308
309
  """
309
310
  Find synapses matching criteria.
@@ -313,6 +314,7 @@ class NeuralStorage(ABC):
313
314
  target_id: Filter by target neuron
314
315
  type: Filter by synapse type
315
316
  min_weight: Filter by minimum weight
317
+ limit: Optional cap on number of returned synapses
316
318
 
317
319
  Returns:
318
320
  List of matching synapses
@@ -251,6 +251,7 @@ class InMemoryStorage(
251
251
  target_id: str | None = None,
252
252
  type: SynapseType | None = None,
253
253
  min_weight: float | None = None,
254
+ limit: int | None = None,
254
255
  ) -> list[Synapse]:
255
256
  brain_id = self._get_brain_id()
256
257
  results: list[Synapse] = []
@@ -266,6 +267,8 @@ class InMemoryStorage(
266
267
  continue
267
268
  results.append(synapse)
268
269
 
270
+ if limit is not None:
271
+ return results[:limit]
269
272
  return results
270
273
 
271
274
  async def get_synapses_for_neurons(
@@ -316,6 +316,7 @@ class SharedStorage(SharedFiberBrainMixin, NeuralStorage):
316
316
  target_id: str | None = None,
317
317
  type: SynapseType | None = None,
318
318
  min_weight: float | None = None,
319
+ limit: int | None = None,
319
320
  ) -> list[Synapse]:
320
321
  """Find synapses matching criteria."""
321
322
  params: dict[str, Any] = {}
@@ -327,9 +328,14 @@ class SharedStorage(SharedFiberBrainMixin, NeuralStorage):
327
328
  params["type"] = type.value
328
329
  if min_weight is not None:
329
330
  params["min_weight"] = min_weight
331
+ if limit is not None:
332
+ params["limit"] = limit
330
333
 
331
334
  result = await self._request("GET", "/memory/synapses", params=params)
332
- return [dict_to_synapse(s) for s in result.get("synapses", [])]
335
+ synapses = [dict_to_synapse(s) for s in result.get("synapses", [])]
336
+ if limit is not None:
337
+ return synapses[:limit]
338
+ return synapses
333
339
 
334
340
  async def update_synapse(self, synapse: Synapse) -> None:
335
341
  """Update an existing synapse."""
@@ -100,6 +100,7 @@ class SQLiteSynapseMixin:
100
100
  target_id: str | None = None,
101
101
  type: SynapseType | None = None,
102
102
  min_weight: float | None = None,
103
+ limit: int | None = None,
103
104
  ) -> list[Synapse]:
104
105
  conn = self._ensure_read_conn()
105
106
  brain_id = self._get_brain_id()
@@ -123,7 +124,11 @@ class SQLiteSynapseMixin:
123
124
  query += " AND weight >= ?"
124
125
  params.append(min_weight)
125
126
 
126
- query += " LIMIT 10000"
127
+ if limit is not None:
128
+ query += " LIMIT ?"
129
+ params.append(limit)
130
+ else:
131
+ query += " LIMIT 10000"
127
132
 
128
133
  async with conn.execute(query, params) as cursor:
129
134
  rows = await cursor.fetchall()
@@ -22,6 +22,8 @@ logger = logging.getLogger(__name__)
22
22
 
23
23
 
24
24
  def _to_surreal_id(record_id: str) -> str:
25
+ if ":" in record_id:
26
+ record_id = record_id.rsplit(":", 1)[1]
25
27
  return record_id.replace("-", "_")
26
28
 
27
29
 
@@ -21,7 +21,7 @@ DEFINE FIELD brain_id ON neuron TYPE string;
21
21
  DEFINE FIELD type ON neuron TYPE string;
22
22
  DEFINE FIELD content ON neuron TYPE string;
23
23
  DEFINE FIELD content_hash ON neuron TYPE int DEFAULT 0;
24
- DEFINE FIELD metadata ON neuron TYPE object DEFAULT {{}};
24
+ DEFINE FIELD metadata ON neuron TYPE object DEFAULT {};
25
25
  DEFINE FIELD embedding_vec ON neuron TYPE option<array<float>>;
26
26
  DEFINE FIELD ephemeral ON neuron TYPE bool DEFAULT false;
27
27
  DEFINE FIELD created_at ON neuron TYPE datetime DEFAULT time::now();
@@ -54,23 +54,24 @@ DEFINE FIELD created_at ON neuron_state TYPE datetime DEFAULT time::now()
54
54
  DEFINE INDEX idx_state_neuron ON neuron_state FIELDS brain_id, neuron_id UNIQUE;
55
55
 
56
56
  -- Synapses (graph edges between neurons)
57
+ -- Edge endpoints live in source_id/target_id (the fields the store reads and
58
+ -- writes); they are declared here so the schema matches what is persisted, and
59
+ -- the source/target indexes below cover the columns lookups actually use.
57
60
  DEFINE TABLE synapse SCHEMAFULL;
58
61
  DEFINE FIELD id ON synapse TYPE string;
59
- DEFINE FIELD brain_id ON synapse TYPE string;
62
+ DEFINE FIELD brain_id ON synapse TYPE string DEFAULT 'default';
60
63
  DEFINE FIELD type ON synapse TYPE string;
64
+ DEFINE FIELD source_id ON synapse TYPE string;
65
+ DEFINE FIELD target_id ON synapse TYPE string;
61
66
  DEFINE FIELD weight ON synapse TYPE float DEFAULT 1.0;
62
67
  DEFINE FIELD direction ON synapse TYPE string DEFAULT 'forward';
63
- DEFINE FIELD metadata ON synapse TYPE object DEFAULT {{}};
68
+ DEFINE FIELD metadata ON synapse TYPE object DEFAULT {};
64
69
  DEFINE FIELD created_at ON synapse TYPE datetime DEFAULT time::now();
65
70
  DEFINE FIELD last_activated ON synapse TYPE option<datetime>;
66
71
  DEFINE FIELD reinforced_count ON synapse TYPE int DEFAULT 0;
67
72
  DEFINE INDEX idx_synapse_brain ON synapse FIELDS brain_id;
68
- DEFINE INDEX idx_synapse_source ON synapse FIELDS brain_id, out;
69
- DEFINE INDEX idx_synapse_target ON synapse FIELDS brain_id, in;
70
-
71
- -- Synapse edge connections (for graph traversal)
72
- DEFINE TABLE connects_to SCHEMAFULL;
73
- DEFINE FIELD brain_id ON connects_to TYPE string;
73
+ DEFINE INDEX idx_synapse_source ON synapse FIELDS brain_id, source_id;
74
+ DEFINE INDEX idx_synapse_target ON synapse FIELDS brain_id, target_id;
74
75
 
75
76
  -- Fibers (memory clusters / signal pathways)
76
77
  DEFINE TABLE fiber SCHEMAFULL;
@@ -91,7 +92,7 @@ DEFINE FIELD summary ON fiber TYPE option<string>;
91
92
  DEFINE FIELD essence ON fiber TYPE option<string>;
92
93
  DEFINE FIELD auto_tags ON fiber TYPE array<string> DEFAULT [];
93
94
  DEFINE FIELD agent_tags ON fiber TYPE array<string> DEFAULT [];
94
- DEFINE FIELD metadata ON fiber TYPE object DEFAULT {{}};
95
+ DEFINE FIELD metadata ON fiber TYPE object DEFAULT {};
95
96
  DEFINE FIELD compression_tier ON fiber TYPE int DEFAULT 0;
96
97
  DEFINE FIELD pinned ON fiber TYPE bool DEFAULT false;
97
98
  DEFINE FIELD created_at ON fiber TYPE datetime DEFAULT time::now();
@@ -103,8 +104,8 @@ DEFINE INDEX idx_fiber_anchor ON fiber FIELDS brain_id, anchor_neuron_id;
103
104
  DEFINE TABLE brain SCHEMAFULL;
104
105
  DEFINE FIELD id ON brain TYPE string;
105
106
  DEFINE FIELD name ON brain TYPE string;
106
- DEFINE FIELD config ON brain TYPE object DEFAULT {{}};
107
- DEFINE FIELD metadata ON brain TYPE object DEFAULT {{}};
107
+ DEFINE FIELD config ON brain TYPE object DEFAULT {};
108
+ DEFINE FIELD metadata ON brain TYPE object DEFAULT {};
108
109
  DEFINE FIELD created_at ON brain TYPE datetime DEFAULT time::now();
109
110
  DEFINE FIELD updated_at ON brain TYPE datetime DEFAULT time::now();
110
111
  -- Removed unique index on name - multiple brains can have same name
@@ -155,7 +156,7 @@ DEFINE FIELD source ON typed_memory TYPE option<string>;
155
156
  DEFINE FIELD project_id ON typed_memory TYPE option<string>;
156
157
  DEFINE FIELD expires_at ON typed_memory TYPE option<datetime>;
157
158
  DEFINE FIELD tier ON typed_memory TYPE string DEFAULT 'warm';
158
- DEFINE FIELD metadata ON typed_memory TYPE object DEFAULT {{}};
159
+ DEFINE FIELD metadata ON typed_memory TYPE object DEFAULT {};
159
160
  DEFINE FIELD created_at ON typed_memory TYPE datetime DEFAULT time::now();
160
161
  DEFINE FIELD updated_at ON typed_memory TYPE datetime DEFAULT time::now();
161
162
  DEFINE INDEX idx_typed_brain ON typed_memory FIELDS brain_id;
@@ -181,7 +182,7 @@ DEFINE FIELD effective_date ON source TYPE option<datetime>;
181
182
  DEFINE FIELD expires_at ON source TYPE option<datetime>;
182
183
  DEFINE FIELD status ON source TYPE string DEFAULT 'active';
183
184
  DEFINE FIELD file_hash ON source TYPE string DEFAULT '';
184
- DEFINE FIELD metadata ON source TYPE object DEFAULT {{}};
185
+ DEFINE FIELD metadata ON source TYPE object DEFAULT {};
185
186
  DEFINE FIELD created_at ON source TYPE datetime DEFAULT time::now();
186
187
  DEFINE FIELD updated_at ON source TYPE datetime DEFAULT time::now();
187
188
  DEFINE INDEX idx_source_brain ON source FIELDS brain_id;
@@ -200,7 +201,7 @@ DEFINE FIELD created_at ON alerts TYPE datetime DEFAULT time::now();
200
201
  DEFINE FIELD seen_at ON alerts TYPE option<datetime>;
201
202
  DEFINE FIELD acknowledged_at ON alerts TYPE option<datetime>;
202
203
  DEFINE FIELD resolved_at ON alerts TYPE option<datetime>;
203
- DEFINE FIELD metadata ON alerts TYPE object DEFAULT {{}};
204
+ DEFINE FIELD metadata ON alerts TYPE object DEFAULT {};
204
205
  DEFINE INDEX idx_alerts_brain ON alerts FIELDS brain_id;
205
206
  DEFINE INDEX idx_alerts_status ON alerts FIELDS brain_id, status;
206
207
 
@@ -275,7 +276,7 @@ DEFINE FIELD fiber_count ON brain_versions TYPE int DEFAULT 0;
275
276
  DEFINE FIELD snapshot_hash ON brain_versions TYPE string DEFAULT '';
276
277
  DEFINE FIELD snapshot_data ON brain_versions TYPE string DEFAULT '';
277
278
  DEFINE FIELD created_at ON brain_versions TYPE datetime DEFAULT time::now();
278
- DEFINE FIELD metadata ON brain_versions TYPE object DEFAULT {{}};
279
+ DEFINE FIELD metadata ON brain_versions TYPE object DEFAULT {};
279
280
  DEFINE INDEX idx_versions_brain ON brain_versions FIELDS brain_id;
280
281
  DEFINE INDEX idx_versions_number ON brain_versions FIELDS brain_id, version_number;
281
282
 
@@ -13,6 +13,8 @@ logger = logging.getLogger(__name__)
13
13
 
14
14
 
15
15
  def _to_surreal_id(record_id: str) -> str:
16
+ if ":" in record_id:
17
+ record_id = record_id.rsplit(":", 1)[1]
16
18
  return record_id.replace("-", "_")
17
19
 
18
20
 
@@ -51,7 +51,13 @@ def _is_auth_error(exc: Exception) -> bool:
51
51
 
52
52
 
53
53
  def _to_surreal_id(record_id: str) -> str:
54
- """Convert a UUID to a valid SurrealDB record name (alphanumeric + _-)."""
54
+ """Convert a record ID to a valid SurrealDB record name (alphanumeric + _-).
55
+
56
+ Strips any existing table prefix (e.g. 'neuron:abc-123' -> 'abc_123')
57
+ to prevent doubling when the caller later prepends 'neuron:'.
58
+ """
59
+ if ":" in record_id:
60
+ record_id = record_id.rsplit(":", 1)[1]
55
61
  return record_id.replace("-", "_")
56
62
 
57
63
 
@@ -92,6 +98,24 @@ def _ensure_naive(dt: datetime) -> datetime:
92
98
  return dt
93
99
 
94
100
 
101
+ def _parse_neuron_type(value: Any) -> NeuronType:
102
+ """Parse a stored neuron type tolerantly.
103
+
104
+ External writers (e.g. an integration plugin) may store enum NAMES in
105
+ uppercase ('CONCEPT'); the engine stores enum VALUES ('concept'). Unknown
106
+ values fall back to CONCEPT instead of raising ValueError, so one foreign
107
+ row cannot break recall over the whole brain.
108
+ """
109
+ try:
110
+ return NeuronType(value)
111
+ except ValueError:
112
+ try:
113
+ return NeuronType(str(value).lower())
114
+ except ValueError:
115
+ logger.warning("Unknown neuron type %r — falling back to 'concept'", value)
116
+ return NeuronType.CONCEPT
117
+
118
+
95
119
  def _row_to_neuron(row: dict[str, Any]) -> Neuron:
96
120
  """Convert a SurrealDB neuron record to a Neuron."""
97
121
  meta = dict(row.get("metadata") or {})
@@ -108,7 +132,7 @@ def _row_to_neuron(row: dict[str, Any]) -> Neuron:
108
132
  neuron_id = neuron_id.replace("_", "-")
109
133
  return Neuron(
110
134
  id=neuron_id,
111
- type=NeuronType(row["type"]),
135
+ type=_parse_neuron_type(row["type"]),
112
136
  content=str(row["content"]),
113
137
  metadata=meta,
114
138
  content_hash=int(row.get("content_hash", 0)),
@@ -211,8 +235,9 @@ class SurrealDBStorage(
211
235
  ):
212
236
  """SurrealDB-backed storage for Surreal-Memory.
213
237
 
214
- Multi-model: documents (neurons), graphs (synapses via RELATE),
215
- and vector search (HNSW via embedding_vec) all in one database.
238
+ Multi-model: documents (neurons), graphs (synapses linking neurons via
239
+ source_id/target_id), and vector search (HNSW via embedding_vec) all in
240
+ one database.
216
241
 
217
242
  Usage:
218
243
  storage = SurrealDBStorage(url="http://localhost:8001", ...)
@@ -564,14 +589,8 @@ class SurrealDBStorage(
564
589
  brain_id=brain_id,
565
590
  nid=sid,
566
591
  )
567
- # Delete related edges
568
- await self._query(
569
- "DELETE connects_to WHERE out = $src OR in = $tgt",
570
- src=f"neuron:{sid}",
571
- tgt=f"neuron:{sid}",
572
- )
573
- # Delete state
574
- await self._query(f"DELETE neuron_state:{sid}")
592
+ # Delete state (record id is state_<sid>, matching the writer in add_neuron)
593
+ await self._query(f"DELETE neuron_state:state_{sid}")
575
594
 
576
595
  try:
577
596
  await conn.delete(f"neuron:{sid}")
@@ -597,7 +616,7 @@ class SurrealDBStorage(
597
616
  conn = self._ensure_conn()
598
617
  sid = _to_surreal_id(neuron_id)
599
618
  try:
600
- result = await conn.select(f"neuron_state:{sid}")
619
+ result = await conn.select(f"neuron_state:state_{sid}")
601
620
  if result:
602
621
  return _row_to_neuron_state(result[0] if isinstance(result, list) else result)
603
622
  except Exception:
@@ -621,7 +640,7 @@ class SurrealDBStorage(
621
640
  if state.refractory_until:
622
641
  update_data["refractory_until"] = state.refractory_until
623
642
 
624
- await conn.merge(f"neuron_state:{sid}", update_data)
643
+ await conn.merge(f"neuron_state:state_{sid}", update_data)
625
644
 
626
645
  # ================================================================
627
646
  # Synapse Operations
@@ -649,17 +668,6 @@ class SurrealDBStorage(
649
668
  }
650
669
  await conn.insert("synapse", record_data)
651
670
 
652
- # Create graph edge for traversal
653
- try:
654
- await self._query(
655
- "RELATE neuron:$src -> connects_to -> neuron:$tgt SET brain_id = $brain_id",
656
- src=ss,
657
- tgt=st,
658
- brain_id=brain_id,
659
- )
660
- except Exception:
661
- pass
662
-
663
671
  await self._record_change_internal("synapse", synapse.id, "insert", synapse)
664
672
  return synapse.id
665
673
 
@@ -680,6 +688,7 @@ class SurrealDBStorage(
680
688
  target_id: str | None = None,
681
689
  type: SynapseType | None = None,
682
690
  min_weight: float | None = None,
691
+ limit: int | None = None,
683
692
  ) -> list[Synapse]:
684
693
  brain_id = self._get_brain_id()
685
694
  conditions = ["brain_id = $brain_id"]
@@ -699,7 +708,10 @@ class SurrealDBStorage(
699
708
  params["min_weight"] = min_weight
700
709
 
701
710
  where = " AND ".join(conditions)
702
- rows = await self._query(f"SELECT * FROM synapse WHERE {where}", **params)
711
+ query_str = f"SELECT * FROM synapse WHERE {where}"
712
+ if limit is not None:
713
+ query_str += f" LIMIT {limit}"
714
+ rows = await self._query(query_str, **params)
703
715
  return [_row_to_synapse(r) for r in rows]
704
716
 
705
717
  async def update_synapse(self, synapse: Synapse) -> None:
@@ -1105,7 +1117,7 @@ class SurrealDBStorage(
1105
1117
  try:
1106
1118
  neuron = Neuron(
1107
1119
  id=str(nd.get("id", "")),
1108
- type=NeuronType(nd["type"]),
1120
+ type=_parse_neuron_type(nd["type"]),
1109
1121
  content=str(nd["content"]),
1110
1122
  metadata=dict(nd.get("metadata") or {}),
1111
1123
  created_at=_parse_datetime(nd.get("created_at")) or utcnow(),
File without changes
File without changes
File without changes