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.
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/PKG-INFO +3 -3
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/pyproject.toml +2 -2
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/__init__.py +1 -1
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/core/synapse.py +2 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/consolidation.py +9 -3
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/embedding/gemini_embedding.py +24 -4
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/base.py +2 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/memory_store.py +3 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/shared_store.py +7 -1
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_synapses.py +6 -1
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/projects.py +2 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/schema.py +17 -16
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/sources.py +2 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/store.py +39 -27
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/.gitignore +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/LICENSE +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/NOTICE +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/README.md +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/__init__.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/__main__.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/_helpers.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/__init__.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/brain.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/codebase.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/config_cmd.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/habits.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/info.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/listing.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/memory.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/project.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/reindex.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/shared.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/shortcuts.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/storage.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/telegram.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/tools.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/train.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/update.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/version.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/commands/watch.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/config.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/doctor.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/embedding_setup.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/full_setup.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/graph_export.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/ide_rules.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/main.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/markdown_export.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/setup.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/storage.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/tui.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/update_check.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/cli/wizard.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/config_presets.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/core/__init__.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/core/action_event.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/core/alert.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/core/brain.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/core/brain_mode.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/core/eternal_context.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/core/fiber.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/core/memory_types.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/core/neuron.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/core/project.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/core/review_schedule.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/core/source.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/core/trigger_engine.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/__init__.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/activation.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/arousal.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/associative_inference.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/brain_evolution.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/brain_transplant.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/brain_versioning.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/causal_traversal.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/chart_generator.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/chunking.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/citation.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/clustering.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/codebase_encoder.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/cognitive.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/compression.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/conflict_auto_resolve.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/conflict_detection.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/connection_explainer.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/consolidation_delta.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/context_merger.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/context_optimizer.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/context_retrieval.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/cross_brain.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/db_introspector.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/db_knowledge.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/db_trainer.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/decision_intel.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/dedup/__init__.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/dedup/config.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/dedup/llm_judge.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/dedup/pipeline.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/dedup/prompts.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/depth_prior.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/diagnostics.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/doc_chunker.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/doc_extractor.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/doc_trainer.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/dream.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/drift_detection.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/embedding/__init__.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/embedding/capability.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/embedding/config.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/embedding/ollama_embedding.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/embedding/openai_embedding.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/embedding/openrouter_embedding.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/embedding/provider.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/embedding/retry.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/embedding/sentence_transformer.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/encoder.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/enrichment.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/fidelity.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/file_watcher.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/fuzzy_match.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/fuzzy_query.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/gromov.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/hippocampal_replay.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/hooks.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/idf_anchor.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/importance.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/interference.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/koopman.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/learning_rule.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/lifecycle.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/memory_stages.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/merge.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/narrative.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/pattern_extraction.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/pipeline.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/pipeline_steps.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/ppr_activation.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/prediction_error.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/priming.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/quality_scorer.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/query_expander.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/query_expansion.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/query_pattern_mining.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/reconsolidation.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/reconstruction.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/reflection.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/reflex_activation.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/reranker.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/retrieval.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/retrieval_context.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/retrieval_types.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/schema_assimilation.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/score_fusion.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/semantic_discovery.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/sequence_mining.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/session_state.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/spaced_repetition.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/stabilization.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/sufficiency.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/temporal_binding.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/tier_engine.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/token_budget.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/token_normalizer.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/tool_memory.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/topology_analysis.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/watch_state.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/workflow_suggest.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/write_queue.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/extraction/__init__.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/extraction/codebase.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/extraction/entities.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/extraction/keywords.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/extraction/llm_provider.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/extraction/parser.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/extraction/relations.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/extraction/router.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/extraction/sentiment.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/extraction/structure_detector.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/extraction/temporal.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/git_context.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/hooks/__init__.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/hooks/post_tool_use.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/hooks/pre_compact.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/hooks/project_context.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/hooks/session_start.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/hooks/stop.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/hooks/task_context.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integration/__init__.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integration/adapter.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integration/adapters/__init__.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integration/adapters/awf_adapter.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integration/adapters/chromadb_adapter.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integration/adapters/cognee_adapter.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integration/adapters/graphiti_adapter.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integration/adapters/llamaindex_adapter.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integration/adapters/mem0_adapter.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integration/mapper.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integration/models.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integration/sync_engine.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integration/telegram.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integrations/__init__.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integrations/nanobot/__init__.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integrations/nanobot/base_tool.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integrations/nanobot/context.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integrations/nanobot/memory_store.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integrations/nanobot/protocol.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integrations/nanobot/setup.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integrations/nanobot/tools.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/integrations/openclaw_config.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/__init__.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/__main__.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/alert_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/auto_capture.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/auto_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/budget_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/cognitive_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/conflict_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/connection_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/constants.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/db_train_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/drift_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/eternal_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/evolution_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/expiry_cleanup_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/http_transport.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/index_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/instruction_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/lifecycle_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/maintenance_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/mem0_sync_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/narrative_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/onboarding_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/prompt.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/provenance_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/recall_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/remember_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/response_compactor.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/review_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/scheduled_consolidation_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/server.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/session_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/stats_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/surface_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/sync_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/telegram_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/tier_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/tool_handler_utils.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/tool_handlers.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/tool_schemas.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/train_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/version_check_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/visualize_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/mcp/watch_handler.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/plugins/__init__.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/plugins/base.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/plugins/community.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/py.typed +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/safety/__init__.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/safety/encryption.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/safety/freshness.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/safety/input_firewall.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/safety/sensitive.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/__init__.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/app.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/dependencies.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/models.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/routes/__init__.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/routes/brain.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/routes/consolidation.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/routes/dashboard_api.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/routes/hub.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/routes/integration_status.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/routes/memory.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/routes/oauth.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/routes/openclaw_api.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/routes/sync.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/DiagramsPage-BZV40eAE.css +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/DiagramsPage-DxR1C_Ua.js +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/EvolutionPage-By828lS5.js +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/GraphPage-DwQB1_DY.js +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/HealthPage-DetJg-Qr.js +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/OraclePage-7FBeVFXa.js +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/OverviewPage-xe8kFqX3.js +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/ProGate-CwBF4etn.js +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/SettingsPage-CH2mIMiD.js +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/StoragePage-CLDPXEH8.js +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/SyncPage-MbtH1dwD.js +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/TimelinePage-BIybkdH4.js +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/ToolStatsPage-BA-DvxES.js +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/VisualizePage-B_IPrBGU.js +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/card-B0vNsxr_.js +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/embed-gLOWnRXV.js +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/index-BFkJgtCN.css +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/index-C26pxqlr.js +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/skeleton-DQJ-n00q.js +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/timer-DWAvo6M8.js +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/vendor-icons-BYlYobEK.js +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/vendor-motion-Ct_HHbYW.js +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/vendor-query-CqA1cBNl.js +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/vendor-react-BfuodpLv.js +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/vendor-recharts-BkwZfCWA.js +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/assets/vendor-ui-Qm4_4bAc.js +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/server/static/dist/index.html +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/skills/__init__.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/skills/memory-audit/SKILL.md +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/skills/memory-evolution/SKILL.md +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/skills/memory-intake/SKILL.md +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/__init__.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/factory.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/memory_brain_ops.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/memory_collections.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/memory_reviews.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/neuron_cache.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/read_pool.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/shared_store_collections.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/shared_store_mappers.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_action_log.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_alerts.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_brain_ops.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_calibration.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_change_log.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_coactivation.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_cognitive.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_compression.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_depth_priors.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_devices.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_drift.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_entity_refs.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_fibers.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_maturation.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_merkle.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_neurons.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_projects.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_reviews.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_row_mappers.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_schema.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_sessions.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_sources.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_store.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_sync_state.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_tool_events.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_training_files.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_typed.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/sqlite_versioning.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/__init__.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/activity.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/alerts.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/cognitive.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/compression.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/connection.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/depth_priors.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/keyword_entity.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/review_schedules.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/tool_events.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/typed_memory.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/versions.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/surface/__init__.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/surface/generator.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/surface/lifecycle.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/surface/models.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/surface/parser.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/surface/resolver.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/surface/serializer.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/surface/token_budget.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/sync/__init__.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/sync/client.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/sync/device.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/sync/incremental_merge.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/sync/merkle.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/sync/protocol.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/sync/sync_engine.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/unified_config.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/utils/__init__.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/utils/config.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/utils/consolidation_lock.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/utils/sandbox.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/utils/simhash.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/utils/ssl_helper.py +0 -0
- {surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/utils/tag_normalizer.py +0 -0
- {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
|
+
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
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
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
|
-
|
|
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
|
-
#
|
|
98
|
-
#
|
|
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=
|
|
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
|
-
|
|
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
|
-
|
|
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()
|
{surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/storage/surrealdb/schema.py
RENAMED
|
@@ -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,
|
|
69
|
-
DEFINE INDEX idx_synapse_target ON synapse FIELDS brain_id,
|
|
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
|
|
|
@@ -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
|
|
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=
|
|
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
|
|
215
|
-
and vector search (HNSW via embedding_vec) all in
|
|
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
|
|
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
|
-
|
|
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=
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{surreal_memory-2.3.2 → surreal_memory-2.4.0}/src/surreal_memory/engine/associative_inference.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|