surreal-memory 2.7.2__tar.gz → 2.7.3__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.7.2 → surreal_memory-2.7.3}/PKG-INFO +1 -1
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/pyproject.toml +1 -1
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/__init__.py +1 -1
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/diagnostics.py +43 -17
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/routes/dashboard_api.py +39 -30
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/base.py +3 -1
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/factory.py +6 -2
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/memory_store.py +3 -1
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/shared_store.py +3 -1
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/sqlite_store.py +3 -1
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/surrealdb/store.py +63 -30
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/.gitignore +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/LICENSE +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/NOTICE +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/README.md +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/__init__.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/__main__.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/_helpers.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/commands/__init__.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/commands/brain.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/commands/codebase.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/commands/config_cmd.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/commands/habits.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/commands/info.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/commands/listing.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/commands/memory.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/commands/project.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/commands/reindex.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/commands/shared.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/commands/shortcuts.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/commands/storage.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/commands/telegram.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/commands/tools.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/commands/train.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/commands/update.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/commands/version.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/commands/watch.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/config.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/doctor.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/embedding_setup.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/full_setup.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/graph_export.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/ide_rules.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/main.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/markdown_export.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/setup.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/storage.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/tui.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/update_check.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/cli/wizard.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/config_presets.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/core/__init__.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/core/action_event.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/core/alert.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/core/brain.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/core/brain_mode.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/core/eternal_context.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/core/fiber.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/core/memory_types.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/core/neuron.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/core/project.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/core/review_schedule.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/core/source.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/core/synapse.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/core/trigger_engine.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/__init__.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/activation.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/arousal.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/associative_inference.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/brain_evolution.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/brain_transplant.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/brain_versioning.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/causal_traversal.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/chart_generator.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/chunking.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/citation.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/clustering.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/codebase_encoder.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/cognitive.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/compression.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/conflict_auto_resolve.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/conflict_detection.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/connection_explainer.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/consolidation.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/consolidation_delta.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/context_merger.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/context_optimizer.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/context_retrieval.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/cross_brain.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/db_introspector.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/db_knowledge.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/db_trainer.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/decision_intel.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/dedup/__init__.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/dedup/config.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/dedup/llm_judge.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/dedup/pipeline.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/dedup/prompts.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/depth_prior.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/doc_chunker.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/doc_extractor.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/doc_trainer.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/dream.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/drift_detection.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/embedding/__init__.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/embedding/capability.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/embedding/config.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/embedding/gemini_embedding.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/embedding/ollama_embedding.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/embedding/openai_embedding.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/embedding/openrouter_embedding.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/embedding/provider.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/embedding/retry.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/embedding/sentence_transformer.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/encoder.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/enrichment.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/fidelity.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/file_watcher.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/fuzzy_match.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/fuzzy_query.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/gromov.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/hippocampal_replay.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/hooks.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/idf_anchor.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/importance.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/interference.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/koopman.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/learning_rule.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/lifecycle.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/memory_stages.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/merge.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/narrative.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/pattern_extraction.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/pipeline.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/pipeline_steps.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/ppr_activation.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/prediction_error.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/priming.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/quality_scorer.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/query_expander.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/query_expansion.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/query_pattern_mining.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/reconsolidation.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/reconstruction.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/reflection.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/reflex_activation.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/reranker.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/retrieval.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/retrieval_context.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/retrieval_types.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/schema_assimilation.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/score_fusion.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/semantic_discovery.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/sequence_mining.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/session_state.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/spaced_repetition.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/stabilization.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/sufficiency.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/temporal_binding.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/tier_engine.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/token_budget.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/token_normalizer.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/tool_memory.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/topology_analysis.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/watch_state.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/workflow_suggest.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/write_queue.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/extraction/__init__.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/extraction/codebase.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/extraction/entities.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/extraction/keywords.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/extraction/llm_provider.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/extraction/parser.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/extraction/relations.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/extraction/router.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/extraction/sentiment.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/extraction/structure_detector.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/extraction/temporal.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/git_context.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/hooks/__init__.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/hooks/post_tool_use.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/hooks/pre_compact.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/hooks/project_context.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/hooks/session_start.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/hooks/stop.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/hooks/task_context.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/integration/__init__.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/integration/adapter.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/integration/adapters/__init__.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/integration/adapters/awf_adapter.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/integration/adapters/chromadb_adapter.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/integration/adapters/cognee_adapter.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/integration/adapters/graphiti_adapter.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/integration/adapters/llamaindex_adapter.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/integration/adapters/mem0_adapter.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/integration/mapper.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/integration/models.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/integration/sync_engine.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/integration/telegram.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/integrations/__init__.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/integrations/nanobot/__init__.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/integrations/nanobot/base_tool.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/integrations/nanobot/context.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/integrations/nanobot/memory_store.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/integrations/nanobot/protocol.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/integrations/nanobot/setup.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/integrations/nanobot/tools.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/integrations/openclaw_config.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/__init__.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/__main__.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/alert_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/auto_capture.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/auto_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/budget_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/cognitive_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/conflict_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/connection_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/constants.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/db_train_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/drift_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/eternal_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/evolution_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/expiry_cleanup_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/http_transport.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/index_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/instruction_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/lifecycle_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/maintenance_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/mem0_sync_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/narrative_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/offload_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/onboarding_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/prompt.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/provenance_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/recall_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/remember_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/response_compactor.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/review_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/scheduled_consolidation_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/server.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/session_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/stats_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/surface_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/sync_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/telegram_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/tier_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/tool_handler_utils.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/tool_handlers.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/tool_schemas.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/train_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/version_check_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/visualize_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/mcp/watch_handler.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/plugins/__init__.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/plugins/base.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/plugins/community.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/py.typed +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/safety/__init__.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/safety/encryption.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/safety/freshness.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/safety/input_firewall.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/safety/sensitive.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/__init__.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/app.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/dependencies.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/models.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/routes/__init__.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/routes/brain.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/routes/consolidation.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/routes/hub.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/routes/integration_status.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/routes/memory.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/routes/oauth.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/routes/openclaw_api.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/routes/sync.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/static/dist/assets/DiagramsPage-BZV40eAE.css +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/static/dist/assets/DiagramsPage-DbhaKtcI.js +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/static/dist/assets/EvolutionPage-CzD9dgSX.js +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/static/dist/assets/GraphPage-CrI1ELz_.js +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/static/dist/assets/HealthPage-9CH7uxp0.js +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/static/dist/assets/OraclePage--QnA7bus.js +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/static/dist/assets/OverviewPage-uovTY60B.js +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/static/dist/assets/ProGate-37WFbaAW.js +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/static/dist/assets/SettingsPage-BwQ0sSKJ.js +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/static/dist/assets/StoragePage-Dfp1G5qu.js +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/static/dist/assets/SyncPage-CNbeBod6.js +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/static/dist/assets/TimelinePage-C2MQrnce.js +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/static/dist/assets/ToolStatsPage-zZWqg3RV.js +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/static/dist/assets/VisualizePage-D-CKRU7v.js +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/static/dist/assets/card-CB2KYkrP.js +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/static/dist/assets/embed-gLOWnRXV.js +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/static/dist/assets/index-CWIfFh7B.css +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/static/dist/assets/index-DzyKsRxc.js +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/static/dist/assets/skeleton-B4zDkVHp.js +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/static/dist/assets/timer-DWAvo6M8.js +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/static/dist/assets/vendor-icons-BYlYobEK.js +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/static/dist/assets/vendor-motion-Ct_HHbYW.js +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/static/dist/assets/vendor-query-CqA1cBNl.js +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/static/dist/assets/vendor-react-BfuodpLv.js +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/static/dist/assets/vendor-recharts-BkwZfCWA.js +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/static/dist/assets/vendor-ui-Qm4_4bAc.js +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/static/dist/index.html +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/skills/__init__.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/skills/memory-audit/SKILL.md +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/skills/memory-evolution/SKILL.md +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/skills/memory-intake/SKILL.md +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/__init__.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/memory_brain_ops.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/memory_collections.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/memory_reviews.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/neuron_cache.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/read_pool.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/shared_store_collections.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/shared_store_mappers.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/sqlite_action_log.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/sqlite_alerts.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/sqlite_brain_ops.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/sqlite_calibration.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/sqlite_change_log.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/sqlite_coactivation.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/sqlite_cognitive.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/sqlite_compression.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/sqlite_depth_priors.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/sqlite_devices.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/sqlite_drift.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/sqlite_entity_refs.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/sqlite_fibers.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/sqlite_maturation.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/sqlite_merkle.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/sqlite_neurons.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/sqlite_projects.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/sqlite_reviews.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/sqlite_row_mappers.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/sqlite_schema.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/sqlite_sessions.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/sqlite_sources.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/sqlite_synapses.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/sqlite_sync_state.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/sqlite_tool_events.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/sqlite_training_files.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/sqlite_typed.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/sqlite_versioning.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/surrealdb/__init__.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/surrealdb/activity.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/surrealdb/alerts.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/surrealdb/cognitive.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/surrealdb/compression.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/surrealdb/connection.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/surrealdb/depth_priors.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/surrealdb/keyword_entity.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/surrealdb/maturation.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/surrealdb/migrations.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/surrealdb/projects.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/surrealdb/review_schedules.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/surrealdb/schema.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/surrealdb/sources.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/surrealdb/tool_events.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/surrealdb/typed_memory.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/storage/surrealdb/versions.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/surface/__init__.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/surface/generator.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/surface/lifecycle.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/surface/models.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/surface/parser.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/surface/resolver.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/surface/serializer.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/surface/token_budget.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/sync/__init__.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/sync/client.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/sync/device.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/sync/incremental_merge.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/sync/merkle.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/sync/protocol.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/sync/sync_engine.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/unified_config.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/utils/__init__.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/utils/config.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/utils/consolidation_lock.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/utils/sandbox.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/utils/simhash.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/utils/ssl_helper.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/utils/tag_normalizer.py +0 -0
- {surreal_memory-2.7.2 → surreal_memory-2.7.3}/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.7.
|
|
3
|
+
Version: 2.7.3
|
|
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
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "surreal-memory"
|
|
7
|
-
version = "2.7.
|
|
7
|
+
version = "2.7.3"
|
|
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"
|
|
@@ -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.7.
|
|
19
|
+
__version__ = "2.7.3"
|
|
20
20
|
|
|
21
21
|
__all__ = [
|
|
22
22
|
"__version__",
|
|
@@ -7,6 +7,7 @@ Supports both MCP and CLI exposure.
|
|
|
7
7
|
|
|
8
8
|
from __future__ import annotations
|
|
9
9
|
|
|
10
|
+
import asyncio
|
|
10
11
|
import math
|
|
11
12
|
from dataclasses import dataclass, field
|
|
12
13
|
from datetime import datetime, timedelta
|
|
@@ -322,8 +323,14 @@ class DiagnosticsEngine:
|
|
|
322
323
|
if hasattr(self._storage, "set_brain"):
|
|
323
324
|
self._storage.set_brain(brain_id)
|
|
324
325
|
|
|
325
|
-
# Gather base data
|
|
326
|
-
|
|
326
|
+
# Gather base data. Skip the neuron-type breakdown — it is the priciest
|
|
327
|
+
# query on a large brain (~2.6 s / 64k neurons) and none of the health
|
|
328
|
+
# metrics below read it. Backends whose get_enhanced_stats predates the
|
|
329
|
+
# flag fall back to the full call.
|
|
330
|
+
try:
|
|
331
|
+
enhanced = await self._storage.get_enhanced_stats(brain_id, include_neuron_types=False)
|
|
332
|
+
except TypeError:
|
|
333
|
+
enhanced = await self._storage.get_enhanced_stats(brain_id)
|
|
327
334
|
neuron_count: int = enhanced.get("neuron_count", 0)
|
|
328
335
|
synapse_count: int = enhanced.get("synapse_count", 0)
|
|
329
336
|
fiber_count: int = enhanced.get("fiber_count", 0)
|
|
@@ -335,15 +342,26 @@ class DiagnosticsEngine:
|
|
|
335
342
|
# Compute individual metrics
|
|
336
343
|
synapse_stats = enhanced.get("synapse_stats", {})
|
|
337
344
|
|
|
338
|
-
#
|
|
339
|
-
|
|
345
|
+
# The remaining DB-bound reads are independent, so run them concurrently
|
|
346
|
+
# rather than serially (measured ~1.6x on the shared HTTP connection).
|
|
347
|
+
# orphan-rate needs both fibers and the connected-neuron set, so fetch
|
|
348
|
+
# the set here and hand it in (avoids a second scan inside the compute).
|
|
349
|
+
get_connected = getattr(self._storage, "get_connected_neuron_ids", None)
|
|
350
|
+
|
|
351
|
+
async def _connected_or_none() -> set[str] | None:
|
|
352
|
+
return await get_connected() if get_connected is not None else None
|
|
353
|
+
|
|
354
|
+
fibers, consolidation_ratio, activation_efficiency, connected = await asyncio.gather(
|
|
355
|
+
self._storage.get_fibers(limit=10000),
|
|
356
|
+
self._compute_consolidation_ratio(fiber_count),
|
|
357
|
+
self._compute_activation_efficiency(neuron_count),
|
|
358
|
+
_connected_or_none(),
|
|
359
|
+
)
|
|
340
360
|
|
|
341
361
|
connectivity = self._compute_connectivity(synapse_count, neuron_count)
|
|
342
362
|
diversity = self._compute_diversity(synapse_stats)
|
|
343
363
|
freshness = self._compute_freshness(fibers)
|
|
344
|
-
|
|
345
|
-
orphan_rate = await self._compute_orphan_rate(neuron_count, fibers)
|
|
346
|
-
activation_efficiency = await self._compute_activation_efficiency(neuron_count)
|
|
364
|
+
orphan_rate = await self._compute_orphan_rate(neuron_count, fibers, connected=connected)
|
|
347
365
|
recall_confidence = self._compute_recall_confidence(synapse_stats)
|
|
348
366
|
|
|
349
367
|
# Compute purity score
|
|
@@ -500,7 +518,10 @@ class DiagnosticsEngine:
|
|
|
500
518
|
return len(semantic_records) / fiber_count
|
|
501
519
|
|
|
502
520
|
async def _compute_orphan_rate(
|
|
503
|
-
self,
|
|
521
|
+
self,
|
|
522
|
+
neuron_count: int,
|
|
523
|
+
fibers: list[Any] | None = None,
|
|
524
|
+
connected: set[str] | None = None,
|
|
504
525
|
) -> float:
|
|
505
526
|
"""Compute fraction of neurons with no synapses AND no fiber membership.
|
|
506
527
|
|
|
@@ -513,16 +534,21 @@ class DiagnosticsEngine:
|
|
|
513
534
|
if neuron_count == 0:
|
|
514
535
|
return 0.0
|
|
515
536
|
|
|
516
|
-
#
|
|
517
|
-
#
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
537
|
+
# The caller may hand in the connected-neuron set (computed concurrently
|
|
538
|
+
# with the other reads). Otherwise fetch it: prefer the DB-side
|
|
539
|
+
# distinct-endpoints aggregate over loading ~185k Synapse objects (that
|
|
540
|
+
# scan was seconds of the dashboard's slowness).
|
|
541
|
+
if connected is None:
|
|
542
|
+
get_connected = getattr(self._storage, "get_connected_neuron_ids", None)
|
|
543
|
+
if get_connected is not None:
|
|
544
|
+
connected = set(await get_connected())
|
|
545
|
+
else:
|
|
546
|
+
connected = set()
|
|
547
|
+
for s in await self._storage.get_all_synapses():
|
|
548
|
+
connected.add(s.source_id)
|
|
549
|
+
connected.add(s.target_id)
|
|
521
550
|
else:
|
|
522
|
-
connected = set()
|
|
523
|
-
for s in await self._storage.get_all_synapses():
|
|
524
|
-
connected.add(s.source_id)
|
|
525
|
-
connected.add(s.target_id)
|
|
551
|
+
connected = set(connected)
|
|
526
552
|
|
|
527
553
|
# Also count neurons that belong to fibers as connected
|
|
528
554
|
if fibers:
|
{surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/server/routes/dashboard_api.py
RENAMED
|
@@ -91,42 +91,51 @@ async def get_stats() -> DashboardStats:
|
|
|
91
91
|
active_name = cfg.current_brain
|
|
92
92
|
|
|
93
93
|
async def _analyze_brain(name: str) -> BrainSummary:
|
|
94
|
-
"""
|
|
94
|
+
"""Summarize a single brain.
|
|
95
|
+
|
|
96
|
+
Only the ACTIVE brain gets the full DiagnosticsEngine.analyze (grade +
|
|
97
|
+
purity); every other brain returns just its counts. The overview shows
|
|
98
|
+
the active brain's grade at the top (health_grade) and the per-brain
|
|
99
|
+
grade has its own home (the /brains endpoint + the Health page), so
|
|
100
|
+
running the multi-second analyze for every brain was pure waste — a
|
|
101
|
+
station carrying integration-test residue brains paid a full diagnostic
|
|
102
|
+
pass for each of them on every overview load.
|
|
103
|
+
"""
|
|
104
|
+
is_active = name == active_name
|
|
95
105
|
try:
|
|
96
106
|
brain_storage = await get_shared_storage(brain_name=name)
|
|
97
107
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
stats = await brain_storage.get_stats(name)
|
|
117
|
-
nc = stats.get("neuron_count", 0)
|
|
118
|
-
sc = stats.get("synapse_count", 0)
|
|
119
|
-
fc = stats.get("fiber_count", 0)
|
|
108
|
+
if is_active:
|
|
109
|
+
try:
|
|
110
|
+
from surreal_memory.engine.diagnostics import DiagnosticsEngine
|
|
111
|
+
|
|
112
|
+
diag = DiagnosticsEngine(brain_storage)
|
|
113
|
+
report = await diag.analyze(name)
|
|
114
|
+
return BrainSummary(
|
|
115
|
+
id=name,
|
|
116
|
+
name=name,
|
|
117
|
+
neuron_count=report.neuron_count,
|
|
118
|
+
synapse_count=report.synapse_count,
|
|
119
|
+
fiber_count=report.fiber_count,
|
|
120
|
+
grade=report.grade,
|
|
121
|
+
purity_score=report.purity_score,
|
|
122
|
+
is_active=True,
|
|
123
|
+
)
|
|
124
|
+
except Exception:
|
|
125
|
+
logger.debug("Diagnostics failed for active brain %s", name, exc_info=True)
|
|
120
126
|
|
|
127
|
+
# Inactive brain (or active-brain diagnostics failure): counts only.
|
|
128
|
+
# "—" flags grade as "not computed here" rather than a real F.
|
|
129
|
+
stats = await brain_storage.get_stats(name)
|
|
121
130
|
return BrainSummary(
|
|
122
131
|
id=name,
|
|
123
132
|
name=name,
|
|
124
|
-
neuron_count=
|
|
125
|
-
synapse_count=
|
|
126
|
-
fiber_count=
|
|
127
|
-
grade=
|
|
128
|
-
purity_score=
|
|
129
|
-
is_active=
|
|
133
|
+
neuron_count=stats.get("neuron_count", 0),
|
|
134
|
+
synapse_count=stats.get("synapse_count", 0),
|
|
135
|
+
fiber_count=stats.get("fiber_count", 0),
|
|
136
|
+
grade="F" if is_active else "—",
|
|
137
|
+
purity_score=0.0,
|
|
138
|
+
is_active=is_active,
|
|
130
139
|
)
|
|
131
140
|
except Exception:
|
|
132
141
|
# Surface at WARNING (not debug): swallowing this silently made the
|
|
@@ -134,7 +143,7 @@ async def get_stats() -> DashboardStats:
|
|
|
134
143
|
# storage/config misconfiguration. Keep returning a placeholder so
|
|
135
144
|
# one bad brain does not break the whole dashboard.
|
|
136
145
|
logger.warning("Brain analysis failed for %s", name, exc_info=True)
|
|
137
|
-
return BrainSummary(id=name, name=name, is_active=
|
|
146
|
+
return BrainSummary(id=name, name=name, is_active=is_active)
|
|
138
147
|
|
|
139
148
|
# Analyze brains sequentially, NOT via asyncio.gather: the SurrealDB backend
|
|
140
149
|
# shares one storage singleton with a mutable current-brain pointer, so
|
|
@@ -712,7 +712,9 @@ class NeuralStorage(ABC):
|
|
|
712
712
|
...
|
|
713
713
|
|
|
714
714
|
@abstractmethod
|
|
715
|
-
async def get_enhanced_stats(
|
|
715
|
+
async def get_enhanced_stats(
|
|
716
|
+
self, brain_id: str, include_neuron_types: bool = True
|
|
717
|
+
) -> dict[str, Any]:
|
|
716
718
|
"""
|
|
717
719
|
Get enhanced statistics for a brain.
|
|
718
720
|
|
|
@@ -308,8 +308,12 @@ class HybridStorage:
|
|
|
308
308
|
async def get_stats(self, brain_id: str) -> dict[str, int]:
|
|
309
309
|
return await self._local.get_stats(brain_id)
|
|
310
310
|
|
|
311
|
-
async def get_enhanced_stats(
|
|
312
|
-
|
|
311
|
+
async def get_enhanced_stats(
|
|
312
|
+
self, brain_id: str, include_neuron_types: bool = True
|
|
313
|
+
) -> dict[str, Any]:
|
|
314
|
+
return await self._local.get_enhanced_stats(
|
|
315
|
+
brain_id, include_neuron_types=include_neuron_types
|
|
316
|
+
)
|
|
313
317
|
|
|
314
318
|
async def clear(self, brain_id: str) -> None:
|
|
315
319
|
await self._local.clear(brain_id)
|
|
@@ -421,7 +421,9 @@ class InMemoryStorage(
|
|
|
421
421
|
"project_count": len(self._projects[brain_id]),
|
|
422
422
|
}
|
|
423
423
|
|
|
424
|
-
async def get_enhanced_stats(
|
|
424
|
+
async def get_enhanced_stats(
|
|
425
|
+
self, brain_id: str, include_neuron_types: bool = True
|
|
426
|
+
) -> dict[str, Any]:
|
|
425
427
|
basic_stats = await self.get_stats(brain_id)
|
|
426
428
|
|
|
427
429
|
# Hot neurons by access frequency
|
|
@@ -425,7 +425,9 @@ class SharedStorage(SharedFiberBrainMixin, NeuralStorage):
|
|
|
425
425
|
"fiber_count": result.get("fiber_count", 0),
|
|
426
426
|
}
|
|
427
427
|
|
|
428
|
-
async def get_enhanced_stats(
|
|
428
|
+
async def get_enhanced_stats(
|
|
429
|
+
self, brain_id: str, include_neuron_types: bool = True
|
|
430
|
+
) -> dict[str, Any]:
|
|
429
431
|
"""Get enhanced brain statistics via API."""
|
|
430
432
|
result = await self._request("GET", f"/brain/{brain_id}/stats")
|
|
431
433
|
return result
|
|
@@ -224,7 +224,9 @@ class SQLiteStorage(
|
|
|
224
224
|
"project_count": row["project_count"] if row else 0,
|
|
225
225
|
}
|
|
226
226
|
|
|
227
|
-
async def get_enhanced_stats(
|
|
227
|
+
async def get_enhanced_stats(
|
|
228
|
+
self, brain_id: str, include_neuron_types: bool = True
|
|
229
|
+
) -> dict[str, Any]:
|
|
228
230
|
conn = self._ensure_read_conn()
|
|
229
231
|
basic_stats = await self.get_stats(brain_id)
|
|
230
232
|
|
|
@@ -10,6 +10,7 @@ from __future__ import annotations
|
|
|
10
10
|
import asyncio
|
|
11
11
|
import dataclasses
|
|
12
12
|
import logging
|
|
13
|
+
import re
|
|
13
14
|
from datetime import datetime
|
|
14
15
|
from hashlib import sha256
|
|
15
16
|
from typing import Any, Literal
|
|
@@ -96,6 +97,24 @@ def _to_surreal_id(record_id: str) -> str:
|
|
|
96
97
|
return record_id.replace("-", "_")
|
|
97
98
|
|
|
98
99
|
|
|
100
|
+
_BRAIN_ID_SAFE = re.compile(r"^[a-zA-Z0-9_.\-]+$")
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def _brain_literal(brain_id: str) -> str:
|
|
104
|
+
"""Return ``brain_id`` as a safe inline SurrealQL string literal.
|
|
105
|
+
|
|
106
|
+
SurrealDB 3.2.0's planner only uses the ``brain_id`` index when the value is
|
|
107
|
+
an inline literal — a parameterized ``WHERE brain_id = $bid`` falls back to a
|
|
108
|
+
full table scan. On the 64k-neuron table (each row carrying a 1024-float
|
|
109
|
+
vector) that turned ``count() … GROUP ALL`` from 0.01 s into ~2.5 s, and it
|
|
110
|
+
was the single biggest cost behind the dashboard's stats endpoint. brain_id
|
|
111
|
+
is validated to a strict charset, so inlining it is injection-safe.
|
|
112
|
+
"""
|
|
113
|
+
if not _BRAIN_ID_SAFE.match(brain_id):
|
|
114
|
+
raise ValueError(f"unsafe brain_id for inline query: {brain_id!r}")
|
|
115
|
+
return f'"{brain_id}"'
|
|
116
|
+
|
|
117
|
+
|
|
99
118
|
def _from_surreal_id(surreal_id: str) -> str:
|
|
100
119
|
"""Extract the original ID from a SurrealDB record ID like 'neuron:abc_def'."""
|
|
101
120
|
if ":" in surreal_id:
|
|
@@ -1430,17 +1449,14 @@ class SurrealDBStorage(
|
|
|
1430
1449
|
# ================================================================
|
|
1431
1450
|
|
|
1432
1451
|
async def get_stats(self, brain_id: str) -> dict[str, int]:
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
)
|
|
1437
|
-
synapse_rows = await
|
|
1438
|
-
"SELECT count() AS c FROM
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
fiber_rows = await self._query(
|
|
1442
|
-
"SELECT count() AS c FROM fiber WHERE brain_id = $bid GROUP ALL",
|
|
1443
|
-
bid=brain_id,
|
|
1452
|
+
# Inline the (validated) brain_id so the count() aggregates use the
|
|
1453
|
+
# brain_id index instead of a full scan — see _brain_literal. The three
|
|
1454
|
+
# scans are independent, so run them concurrently.
|
|
1455
|
+
lit = _brain_literal(brain_id)
|
|
1456
|
+
neuron_rows, synapse_rows, fiber_rows = await asyncio.gather(
|
|
1457
|
+
self._query(f"SELECT count() AS c FROM neuron WHERE brain_id = {lit} GROUP ALL"),
|
|
1458
|
+
self._query(f"SELECT count() AS c FROM synapse WHERE brain_id = {lit} GROUP ALL"),
|
|
1459
|
+
self._query(f"SELECT count() AS c FROM fiber WHERE brain_id = {lit} GROUP ALL"),
|
|
1444
1460
|
)
|
|
1445
1461
|
|
|
1446
1462
|
def _count(rows: list[Any]) -> int:
|
|
@@ -1454,15 +1470,22 @@ class SurrealDBStorage(
|
|
|
1454
1470
|
"fiber_count": _count(fiber_rows),
|
|
1455
1471
|
}
|
|
1456
1472
|
|
|
1457
|
-
async def get_enhanced_stats(
|
|
1473
|
+
async def get_enhanced_stats(
|
|
1474
|
+
self, brain_id: str, include_neuron_types: bool = True
|
|
1475
|
+
) -> dict[str, Any]:
|
|
1458
1476
|
stats = await self.get_stats(brain_id)
|
|
1459
1477
|
|
|
1460
|
-
# Neuron type breakdown
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1478
|
+
# Neuron type breakdown. This GROUP BY over the whole neuron table is the
|
|
1479
|
+
# single most expensive query on a large brain (~2.6 s for 64k neurons)
|
|
1480
|
+
# and DiagnosticsEngine never reads it — so callers that only need the
|
|
1481
|
+
# health metrics pass include_neuron_types=False to skip it entirely.
|
|
1482
|
+
type_counts: dict[str, int] = {}
|
|
1483
|
+
if include_neuron_types:
|
|
1484
|
+
type_rows = await self._query(
|
|
1485
|
+
"SELECT type, count() AS c FROM neuron WHERE brain_id = $bid GROUP BY type",
|
|
1486
|
+
bid=brain_id,
|
|
1487
|
+
)
|
|
1488
|
+
type_counts = {str(r.get("type", "unknown")): int(r.get("c", 0)) for r in type_rows}
|
|
1466
1489
|
|
|
1467
1490
|
# Synapse stats by type — required by DiagnosticsEngine for diversity
|
|
1468
1491
|
# (Shannon entropy over by_type counts) and recall_confidence (avg_weight).
|
|
@@ -2084,14 +2107,20 @@ class SurrealDBStorage(
|
|
|
2084
2107
|
replaces loading ~185k Synapse objects (~10 s) for the orphan-rate metric
|
|
2085
2108
|
with two distinct-key scans (~2 s total)."""
|
|
2086
2109
|
bid = brain_id or self._get_brain_id()
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
|
|
2110
|
+
|
|
2111
|
+
async def _endpoints(field: str) -> list[Any]:
|
|
2112
|
+
return await self._query(
|
|
2090
2113
|
f"SELECT VALUE {field} FROM synapse WHERE brain_id = $bid GROUP BY {field}",
|
|
2091
2114
|
bid=bid,
|
|
2092
2115
|
)
|
|
2093
|
-
|
|
2094
|
-
|
|
2116
|
+
|
|
2117
|
+
# The two distinct-endpoint scans are independent, so run them
|
|
2118
|
+
# concurrently — on a large brain this ~halves the wall time (measured
|
|
2119
|
+
# 2.5 s -> ~1.3 s) versus scanning in then out.
|
|
2120
|
+
in_rows, out_rows = await asyncio.gather(_endpoints("in"), _endpoints("out"))
|
|
2121
|
+
connected: set[str] = set()
|
|
2122
|
+
for rid in (*in_rows, *out_rows):
|
|
2123
|
+
connected.add(_from_surreal_id(str(rid)))
|
|
2095
2124
|
return connected
|
|
2096
2125
|
|
|
2097
2126
|
async def get_synapse_degrees(self, brain_id: str | None = None) -> dict[str, int]:
|
|
@@ -2102,17 +2131,21 @@ class SurrealDBStorage(
|
|
|
2102
2131
|
real ``in``/``out`` record links — the ``source_id``/``target_id``
|
|
2103
2132
|
fields are computed and do not aggregate."""
|
|
2104
2133
|
bid = brain_id or self._get_brain_id()
|
|
2105
|
-
|
|
2106
|
-
|
|
2107
|
-
|
|
2134
|
+
|
|
2135
|
+
async def _degree(field: str) -> list[Any]:
|
|
2136
|
+
return await self._query(
|
|
2108
2137
|
f"SELECT {field} AS nid, count() AS deg FROM synapse"
|
|
2109
2138
|
f" WHERE brain_id = $bid GROUP BY {field}",
|
|
2110
2139
|
bid=bid,
|
|
2111
2140
|
)
|
|
2112
|
-
|
|
2113
|
-
|
|
2114
|
-
|
|
2115
|
-
|
|
2141
|
+
|
|
2142
|
+
# The in/out degree scans are independent — run them concurrently.
|
|
2143
|
+
in_rows, out_rows = await asyncio.gather(_degree("in"), _degree("out"))
|
|
2144
|
+
degree: dict[str, int] = {}
|
|
2145
|
+
for r in (*in_rows, *out_rows):
|
|
2146
|
+
nid = _endpoint_to_id(r.get("nid"))
|
|
2147
|
+
if nid:
|
|
2148
|
+
degree[nid] = degree.get(nid, 0) + int(r.get("deg", 0) or 0)
|
|
2116
2149
|
return degree
|
|
2117
2150
|
|
|
2118
2151
|
async def get_edges_for_neurons(self, neuron_ids: list[str]) -> list[Synapse]:
|
|
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
|
|
File without changes
|
{surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/associative_inference.py
RENAMED
|
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.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/conflict_auto_resolve.py
RENAMED
|
File without changes
|
{surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/conflict_detection.py
RENAMED
|
File without changes
|
{surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/connection_explainer.py
RENAMED
|
File without changes
|
|
File without changes
|
{surreal_memory-2.7.2 → surreal_memory-2.7.3}/src/surreal_memory/engine/consolidation_delta.py
RENAMED
|
File without changes
|
|
File without changes
|