superlocalmemory 3.4.49__tar.gz → 3.4.52__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.
- {superlocalmemory-3.4.49/src/superlocalmemory.egg-info → superlocalmemory-3.4.52}/PKG-INFO +44 -2
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/README.md +43 -1
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/pyproject.toml +1 -1
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/__init__.py +1 -1
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/cli/commands.py +7 -2
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/cli/main.py +10 -0
- superlocalmemory-3.4.52/src/superlocalmemory/core/backend_orchestrator.py +365 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/ollama_embedder.py +14 -4
- superlocalmemory-3.4.52/src/superlocalmemory/core/pruning_engine.py +216 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/recall_pipeline.py +26 -2
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/store_pipeline.py +21 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/tier_manager.py +124 -0
- superlocalmemory-3.4.52/src/superlocalmemory/graph/__init__.py +9 -0
- superlocalmemory-3.4.52/src/superlocalmemory/graph/cozo_backend.py +527 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/mcp/_daemon_proxy.py +1 -1
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/mcp/_pool_adapter.py +2 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/mcp/tools_active.py +141 -1
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/retrieval/engine.py +15 -3
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/retrieval/entity_channel.py +50 -1
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/retrieval/reranker.py +15 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/retrieval/spreading_activation.py +5 -2
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/unified_daemon.py +73 -5
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/migration_runner.py +3 -0
- superlocalmemory-3.4.52/src/superlocalmemory/storage/migrations/M014_v345_scale_ready.py +45 -0
- superlocalmemory-3.4.52/src/superlocalmemory/storage/schema_v345.py +109 -0
- superlocalmemory-3.4.52/src/superlocalmemory/vector/__init__.py +9 -0
- superlocalmemory-3.4.52/src/superlocalmemory/vector/lancedb_backend.py +299 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52/src/superlocalmemory.egg-info}/PKG-INFO +44 -2
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory.egg-info/SOURCES.txt +8 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/AUTHORS.md +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/LICENSE +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/NOTICE +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/setup.cfg +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/attribution/__init__.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/attribution/mathematical_dna.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/attribution/signer.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/attribution/watermark.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/cli/__init__.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/cli/context_commands.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/cli/daemon.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/cli/db_migrate.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/cli/doctor_cmd.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/cli/escape_hatch.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/cli/ingest_cmd.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/cli/json_output.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/cli/migrate_cmd.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/cli/pending_store.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/cli/post_install.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/cli/service_installer.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/cli/setup_wizard.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/cli/version_banner.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/cli/wizard_v3426_options.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/code_graph/__init__.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/code_graph/blast_radius.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/code_graph/bridge/__init__.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/code_graph/bridge/entity_resolver.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/code_graph/bridge/event_listeners.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/code_graph/bridge/fact_enricher.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/code_graph/bridge/hebbian_linker.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/code_graph/bridge/temporal_checker.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/code_graph/changes.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/code_graph/communities.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/code_graph/config.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/code_graph/database.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/code_graph/extractors/__init__.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/code_graph/extractors/python.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/code_graph/extractors/typescript.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/code_graph/flows.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/code_graph/git_hooks.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/code_graph/graph_engine.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/code_graph/graph_store.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/code_graph/incremental.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/code_graph/models.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/code_graph/parser.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/code_graph/resolver.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/code_graph/search.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/code_graph/service.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/code_graph/watcher.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/compliance/__init__.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/compliance/abac.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/compliance/audit.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/compliance/eu_ai_act.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/compliance/gdpr.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/compliance/lifecycle.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/compliance/retention.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/compliance/scheduler.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/__init__.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/clock_monitor.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/config.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/consolidation_engine.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/context_cache.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/db_pool.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/embedding_worker.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/embeddings.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/engine.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/engine_capabilities.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/engine_lock.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/engine_wiring.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/error_catalog.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/error_envelope.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/fact_consolidator.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/file_lock.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/graph_analyzer.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/graph_pruner.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/health_monitor.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/hooks.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/loop_watchdog.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/maintenance.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/maintenance_scheduler.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/modes.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/platform_utils.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/priority_queue.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/profiles.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/queue_consumer.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/queue_dispatcher.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/ram_lock.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/rate_limit.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/recall_gate.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/recall_queue.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/recall_worker.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/registry.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/reranker_worker.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/safe_fs.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/security_primitives.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/shadow_router.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/slm_disabled.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/slmignore.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/summarizer.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/topic_signature.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/worker_pool.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/dynamics/__init__.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/dynamics/activation_guided_quantization.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/dynamics/eap_scheduler.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/dynamics/ebbinghaus_langevin_coupling.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/dynamics/fisher_langevin_coupling.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/encoding/__init__.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/encoding/auto_linker.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/encoding/cognitive_consolidator.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/encoding/consolidator.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/encoding/context_generator.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/encoding/emotional.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/encoding/entity_resolver.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/encoding/entropy_gate.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/encoding/fact_extractor.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/encoding/foresight.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/encoding/graph_builder.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/encoding/observation_builder.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/encoding/scene_builder.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/encoding/signal_inference.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/encoding/temporal_parser.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/encoding/temporal_validator.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/encoding/type_router.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/evolution/__init__.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/evolution/blind_verifier.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/evolution/budget.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/evolution/evolution_store.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/evolution/llm_dispatch.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/evolution/mutation_generator.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/evolution/skill_evolver.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/evolution/triggers.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/evolution/types.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/hooks/__init__.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/hooks/_outcome_common.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/hooks/adapter_base.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/hooks/antigravity_adapter.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/hooks/auto_capture.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/hooks/auto_invoker.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/hooks/auto_parameterize.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/hooks/auto_recall.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/hooks/auto_recall_hook.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/hooks/before_web_hook.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/hooks/claude_code_hooks.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/hooks/context_payload.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/hooks/copilot_adapter.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/hooks/cross_platform_connector.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/hooks/cursor_adapter.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/hooks/hook_daemon.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/hooks/hook_handlers.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/hooks/ide_connector.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/hooks/post_tool_async_hook.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/hooks/post_tool_outcome_hook.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/hooks/prewarm_auth.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/hooks/rules_engine.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/hooks/session_registry.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/hooks/stop_outcome_hook.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/hooks/sync_loop.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/hooks/topic_shift_hook.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/hooks/user_prompt_hook.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/hooks/user_prompt_rehash_hook.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/infra/__init__.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/infra/auth_middleware.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/infra/backup.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/infra/cache_manager.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/infra/cloud_backup.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/infra/event_bus.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/infra/heartbeat_monitor.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/infra/pid_manager.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/infra/process_reaper.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/infra/rate_limiter.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/infra/webhook_dispatcher.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ingestion/__init__.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ingestion/adapter_manager.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ingestion/base_adapter.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ingestion/calendar_adapter.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ingestion/credentials.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ingestion/gmail_adapter.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ingestion/parsers.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ingestion/transcript_adapter.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/__init__.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/adaptive.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/arm_catalog.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/assertion_miner.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/bandit.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/bandit_cache.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/behavioral.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/behavioral_listener.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/bootstrap.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/consolidation_cycle.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/consolidation_quantization_worker.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/consolidation_worker.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/cross_project.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/database.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/dedup_hnsw.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/engagement.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/ensemble.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/entity_compiler.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/fact_outcome_joins.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/features.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/feedback.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/forgetting_scheduler.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/hnsw_dedup.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/labeler.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/legacy_migration.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/memory_merge.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/model_cache.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/model_rollback.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/outcome_queue.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/outcomes.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/pattern_miner.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/pattern_miner_constants.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/project_context.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/quantization_scheduler.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/ranker.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/ranker_common.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/ranker_retrain_legacy.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/ranker_retrain_online.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/reward.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/reward_archive.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/reward_boost.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/reward_proxy.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/shadow_test.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/signal_worker.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/signals.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/skill_performance_miner.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/source_quality.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/trigram_index.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/learning/workflows.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/llm/__init__.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/llm/backbone.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/math/__init__.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/math/ebbinghaus.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/math/fisher.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/math/fisher_quantized.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/math/hopfield.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/math/langevin.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/math/polar_quant.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/math/qjl.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/math/sheaf.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/math/turbo_quant.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/mcp/__init__.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/mcp/resources.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/mcp/server.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/mcp/shared.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/mcp/tools.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/mcp/tools_code_graph.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/mcp/tools_context.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/mcp/tools_core.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/mcp/tools_evolution.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/mcp/tools_learning.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/mcp/tools_mesh.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/mcp/tools_v28.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/mcp/tools_v3.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/mcp/tools_v33.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/mesh/__init__.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/mesh/broker.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/mesh/remote_sync.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/migrations/__init__.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/migrations/v3_4_25_to_v3_4_26.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/parameterization/__init__.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/parameterization/pattern_extractor.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/parameterization/pii_filter.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/parameterization/prompt_injector.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/parameterization/prompt_lifecycle.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/parameterization/soft_prompt_generator.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/retrieval/__init__.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/retrieval/agentic.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/retrieval/ann_index.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/retrieval/bm25_channel.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/retrieval/bridge_discovery.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/retrieval/channel_registry.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/retrieval/forgetting_filter.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/retrieval/fusion.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/retrieval/hopfield_channel.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/retrieval/profile_channel.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/retrieval/quantization_aware_search.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/retrieval/semantic_channel.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/retrieval/strategy.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/retrieval/temporal_channel.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/retrieval/vector_store.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/__init__.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/api.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/bandit_loops.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/middleware/__init__.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/middleware/security_headers.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/routes/__init__.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/routes/adapters.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/routes/agents.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/routes/backup.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/routes/behavioral.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/routes/brain.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/routes/chat.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/routes/compliance.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/routes/data_io.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/routes/entity.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/routes/events.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/routes/evolution.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/routes/helpers.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/routes/ingest.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/routes/insights.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/routes/learning.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/routes/lifecycle.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/routes/memories.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/routes/mesh.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/routes/prewarm.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/routes/profiles.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/routes/stats.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/routes/tiers.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/routes/timeline.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/routes/token.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/routes/v3_api.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/routes/ws.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/security_middleware.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/server/ui.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/skills/slm-build-graph/SKILL.md +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/skills/slm-list-recent/SKILL.md +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/skills/slm-recall/SKILL.md +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/skills/slm-remember/SKILL.md +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/skills/slm-show-patterns/SKILL.md +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/skills/slm-status/SKILL.md +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/skills/slm-switch-profile/SKILL.md +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/__init__.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/access_control.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/access_log.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/database.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/embedding_migrator.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/migration_v33.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/migrations/M001_add_signal_features_columns.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/migrations/M002_model_state_history.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/migrations/M003_migration_log.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/migrations/M004_cross_platform_sync_log.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/migrations/M005_bandit_tables.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/migrations/M006_action_outcomes_reward.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/migrations/M007_pending_outcomes.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/migrations/M009_model_lineage.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/migrations/M010_evolution_config.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/migrations/M011_archive_and_merge.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/migrations/M012_shadow_observations.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/migrations/M013_bi_temporal_columns.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/migrations/__init__.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/migrations.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/models.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/quantized_store.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/schema.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/schema_code_graph.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/schema_v32.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/schema_v3410.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/schema_v3411.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/schema_v343.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/schema_v347.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/storage/v2_migrator.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/trust/__init__.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/trust/gate.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/trust/provenance.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/trust/scorer.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/trust/signals.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/css/brain.css +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/css/legacy-dashboard.css +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/css/neural-glass.css +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/index.html +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/agents.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/auto-settings.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/brain.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/clusters.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/compliance.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/core.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/dashboard.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/events.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/fact-detail.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/feedback.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/graph-event-bus.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/graph-filters.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/graph-ui.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/ide-status.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/init.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/knowledge-graph.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/lifecycle.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/math-health.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/memories.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/memory-chat.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/memory-timeline.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/modal.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/ng-entities.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/ng-health.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/ng-ingestion.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/ng-mesh.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/ng-shell.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/ng-skills.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/profiles.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/quick-actions.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/recall-lab.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/search.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/settings.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/timeline.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/js/trust-dashboard.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/vendor/bootstrap-icons/bootstrap-icons.css +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff2 +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/vendor/bootstrap.bundle.min.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/vendor/bootstrap.min.css +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/vendor/d3.v7.min.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/vendor/graphology-library.min.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/vendor/graphology.umd.min.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/vendor/inter-ui/inter-variable.min.css +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable-Italic.woff2 +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable.woff2 +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/ui/vendor/sigma.min.js +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory.egg-info/dependency_links.txt +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory.egg-info/entry_points.txt +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory.egg-info/requires.txt +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory.egg-info/top_level.txt +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/tests/test_auto_hooks.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/tests/test_before_web_hook.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/tests/test_behavioral_full.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/tests/test_claude_hooks.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/tests/test_cli.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/tests/test_cli_json.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/tests/test_cli_v33.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/tests/test_compliance_full.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/tests/test_config_system.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/tests/test_engine_hooks.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/tests/test_event_bus.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/tests/test_features.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/tests/test_final_locomo_mini.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/tests/test_hook_handlers.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/tests/test_ide_connector.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/tests/test_infra.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/tests/test_learning_advanced.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/tests/test_learning_collectors.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/tests/test_llm_provider.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/tests/test_mcp_server.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/tests/test_migration.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/tests/test_mode_switch_preservation.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/tests/test_post_install.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/tests/test_ranker.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/tests/test_topic_shift_hook.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/tests/test_trust_full.py +0 -0
- {superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/tests/test_v3_api.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: superlocalmemory
|
|
3
|
-
Version: 3.4.
|
|
3
|
+
Version: 3.4.52
|
|
4
4
|
Summary: Information-geometric agent memory with mathematical guarantees
|
|
5
5
|
Author-email: Varun Pratap Bhardwaj <admin@superlocalmemory.com>
|
|
6
6
|
License: AGPL-3.0-or-later
|
|
@@ -93,7 +93,7 @@ Dynamic: license-file
|
|
|
93
93
|
|
|
94
94
|
<h1 align="center">SuperLocalMemory V3.4</h1>
|
|
95
95
|
<p align="center"><strong>Every other AI forgets. Yours won't.</strong><br/><em>Infinite memory for Claude Code, Cursor, Windsurf, and any MCP-compatible AI client.</em></p>
|
|
96
|
-
<p align="center"><code>v3.4.
|
|
96
|
+
<p align="center"><code>v3.4.51 "Recency Intelligence"</code> — <strong>Session context is now time-aware.</strong><br>Stale memories from old projects no longer surface. Ebbinghaus decay + FSRS stability. One command: <code>pip install -U superlocalmemory && slm restart</code></p>
|
|
97
97
|
<p align="center"><strong>Backed by 3 published research papers</strong> (arXiv preprints + Zenodo-archived) · <a href="https://arxiv.org/abs/2603.02240">arXiv:2603.02240</a> · <a href="https://arxiv.org/abs/2603.14588">arXiv:2603.14588</a> · <a href="https://arxiv.org/abs/2604.04514">arXiv:2604.04514</a></p>
|
|
98
98
|
|
|
99
99
|
<p align="center">
|
|
@@ -272,6 +272,30 @@ slm warmup # Pre-download embedding model (~500MB, optional)
|
|
|
272
272
|
pip install superlocalmemory
|
|
273
273
|
```
|
|
274
274
|
|
|
275
|
+
### Upgrading to v3.4.5 "Scale-Ready"
|
|
276
|
+
|
|
277
|
+
**Migration is automatic.** Upgrade your package, restart the daemon, and your database migrates silently.
|
|
278
|
+
|
|
279
|
+
```bash
|
|
280
|
+
# pip users
|
|
281
|
+
pip install -U superlocalmemory
|
|
282
|
+
slm restart
|
|
283
|
+
|
|
284
|
+
# npm users
|
|
285
|
+
npm update -g superlocalmemory
|
|
286
|
+
slm restart
|
|
287
|
+
|
|
288
|
+
# Verify migration
|
|
289
|
+
slm doctor
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
No manual commands. No data loss. Your database upgrades in-place with zero downtime. The daemon auto-detects the old version and applies the migration on first start.
|
|
293
|
+
|
|
294
|
+
**New capabilities after upgrade:**
|
|
295
|
+
- Tiered storage: memories auto-classified as active/warm/cold/archived
|
|
296
|
+
- Graph pruning: redundant edges removed, queries stay fast at 1M+ connections
|
|
297
|
+
- Optional: `pip install superlocalmemory[cozo,lancedb]` for graph + vector acceleration
|
|
298
|
+
|
|
275
299
|
### First Use
|
|
276
300
|
|
|
277
301
|
```bash
|
|
@@ -499,6 +523,23 @@ Every recall generates learning signals. Over time, the system adapts to your pa
|
|
|
499
523
|
|
|
500
524
|
Auto-capture hooks: `slm hooks install` + `slm observe` + `slm session-context`. MCP tools: `session_init`, `observe`, `report_feedback`.
|
|
501
525
|
|
|
526
|
+
**`session_init` MCP parameters:**
|
|
527
|
+
| Parameter | Type | Default | Description |
|
|
528
|
+
|---|---|---|---|
|
|
529
|
+
| `project_path` | string | `""` | Working directory — used to derive search query |
|
|
530
|
+
| `query` | string | `""` | Override search query |
|
|
531
|
+
| `max_results` | int | `10` | Max memories to return |
|
|
532
|
+
| `max_age_days` | int | `30` | Suppress memories older than N days (0 = disabled). Memories with score ≥ 0.70 always surface regardless of age. |
|
|
533
|
+
|
|
534
|
+
**`slm session-context` CLI flags** (consistent with MCP):
|
|
535
|
+
```bash
|
|
536
|
+
slm session-context # fast path, 30-day window (default)
|
|
537
|
+
slm session-context --max-age-days 7 # only last 7 days
|
|
538
|
+
slm session-context --max-age-days 0 # no age filter
|
|
539
|
+
slm session-context "my query" --full # full engine path (slow, requires Ollama)
|
|
540
|
+
slm session-context --json # agent-native JSON output
|
|
541
|
+
```
|
|
542
|
+
|
|
502
543
|
**No competitor learns at zero token cost.**
|
|
503
544
|
|
|
504
545
|
</details>
|
|
@@ -637,6 +678,7 @@ All 8 mesh tools work seamlessly across machines:
|
|
|
637
678
|
| `slm hooks install` | Wire auto-memory into Claude Code hooks |
|
|
638
679
|
| `slm profile list/create/switch` | Profile management |
|
|
639
680
|
| `slm decay` | Run memory lifecycle review |
|
|
681
|
+
| `slm session-context [query]` | Print session context (for hooks). Flags: `--max-age-days N` (default 30), `--full`, `--json` |
|
|
640
682
|
| `slm quantize` | Run smart compression cycle |
|
|
641
683
|
| `slm consolidate --cognitive` | Extract patterns from memory clusters |
|
|
642
684
|
| `slm soft-prompts` | View auto-learned patterns |
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
<h1 align="center">SuperLocalMemory V3.4</h1>
|
|
6
6
|
<p align="center"><strong>Every other AI forgets. Yours won't.</strong><br/><em>Infinite memory for Claude Code, Cursor, Windsurf, and any MCP-compatible AI client.</em></p>
|
|
7
|
-
<p align="center"><code>v3.4.
|
|
7
|
+
<p align="center"><code>v3.4.51 "Recency Intelligence"</code> — <strong>Session context is now time-aware.</strong><br>Stale memories from old projects no longer surface. Ebbinghaus decay + FSRS stability. One command: <code>pip install -U superlocalmemory && slm restart</code></p>
|
|
8
8
|
<p align="center"><strong>Backed by 3 published research papers</strong> (arXiv preprints + Zenodo-archived) · <a href="https://arxiv.org/abs/2603.02240">arXiv:2603.02240</a> · <a href="https://arxiv.org/abs/2603.14588">arXiv:2603.14588</a> · <a href="https://arxiv.org/abs/2604.04514">arXiv:2604.04514</a></p>
|
|
9
9
|
|
|
10
10
|
<p align="center">
|
|
@@ -183,6 +183,30 @@ slm warmup # Pre-download embedding model (~500MB, optional)
|
|
|
183
183
|
pip install superlocalmemory
|
|
184
184
|
```
|
|
185
185
|
|
|
186
|
+
### Upgrading to v3.4.5 "Scale-Ready"
|
|
187
|
+
|
|
188
|
+
**Migration is automatic.** Upgrade your package, restart the daemon, and your database migrates silently.
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
# pip users
|
|
192
|
+
pip install -U superlocalmemory
|
|
193
|
+
slm restart
|
|
194
|
+
|
|
195
|
+
# npm users
|
|
196
|
+
npm update -g superlocalmemory
|
|
197
|
+
slm restart
|
|
198
|
+
|
|
199
|
+
# Verify migration
|
|
200
|
+
slm doctor
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
No manual commands. No data loss. Your database upgrades in-place with zero downtime. The daemon auto-detects the old version and applies the migration on first start.
|
|
204
|
+
|
|
205
|
+
**New capabilities after upgrade:**
|
|
206
|
+
- Tiered storage: memories auto-classified as active/warm/cold/archived
|
|
207
|
+
- Graph pruning: redundant edges removed, queries stay fast at 1M+ connections
|
|
208
|
+
- Optional: `pip install superlocalmemory[cozo,lancedb]` for graph + vector acceleration
|
|
209
|
+
|
|
186
210
|
### First Use
|
|
187
211
|
|
|
188
212
|
```bash
|
|
@@ -410,6 +434,23 @@ Every recall generates learning signals. Over time, the system adapts to your pa
|
|
|
410
434
|
|
|
411
435
|
Auto-capture hooks: `slm hooks install` + `slm observe` + `slm session-context`. MCP tools: `session_init`, `observe`, `report_feedback`.
|
|
412
436
|
|
|
437
|
+
**`session_init` MCP parameters:**
|
|
438
|
+
| Parameter | Type | Default | Description |
|
|
439
|
+
|---|---|---|---|
|
|
440
|
+
| `project_path` | string | `""` | Working directory — used to derive search query |
|
|
441
|
+
| `query` | string | `""` | Override search query |
|
|
442
|
+
| `max_results` | int | `10` | Max memories to return |
|
|
443
|
+
| `max_age_days` | int | `30` | Suppress memories older than N days (0 = disabled). Memories with score ≥ 0.70 always surface regardless of age. |
|
|
444
|
+
|
|
445
|
+
**`slm session-context` CLI flags** (consistent with MCP):
|
|
446
|
+
```bash
|
|
447
|
+
slm session-context # fast path, 30-day window (default)
|
|
448
|
+
slm session-context --max-age-days 7 # only last 7 days
|
|
449
|
+
slm session-context --max-age-days 0 # no age filter
|
|
450
|
+
slm session-context "my query" --full # full engine path (slow, requires Ollama)
|
|
451
|
+
slm session-context --json # agent-native JSON output
|
|
452
|
+
```
|
|
453
|
+
|
|
413
454
|
**No competitor learns at zero token cost.**
|
|
414
455
|
|
|
415
456
|
</details>
|
|
@@ -548,6 +589,7 @@ All 8 mesh tools work seamlessly across machines:
|
|
|
548
589
|
| `slm hooks install` | Wire auto-memory into Claude Code hooks |
|
|
549
590
|
| `slm profile list/create/switch` | Profile management |
|
|
550
591
|
| `slm decay` | Run memory lifecycle review |
|
|
592
|
+
| `slm session-context [query]` | Print session context (for hooks). Flags: `--max-age-days N` (default 30), `--full`, `--json` |
|
|
551
593
|
| `slm quantize` | Run smart compression cycle |
|
|
552
594
|
| `slm consolidate --cognitive` | Extract patterns from memory clusters |
|
|
553
595
|
| `slm soft-prompts` | View auto-learned patterns |
|
|
@@ -2147,12 +2147,17 @@ def cmd_session_context(args: Namespace) -> None:
|
|
|
2147
2147
|
except sqlite3.OperationalError:
|
|
2148
2148
|
pass
|
|
2149
2149
|
|
|
2150
|
-
# 2. Recent important memories
|
|
2150
|
+
# 2. Recent important memories — age gate from --max-age-days (default 30)
|
|
2151
|
+
max_age = getattr(args, "max_age_days", 30)
|
|
2152
|
+
age_clause = (
|
|
2153
|
+
f"AND created_at >= datetime('now', '-{int(max_age)} days') "
|
|
2154
|
+
if max_age > 0 else ""
|
|
2155
|
+
)
|
|
2151
2156
|
try:
|
|
2152
2157
|
rows = conn.execute(
|
|
2153
2158
|
"SELECT content, fact_type, created_at FROM atomic_facts "
|
|
2154
2159
|
"WHERE profile_id = ? "
|
|
2155
|
-
"
|
|
2160
|
+
f"{age_clause}"
|
|
2156
2161
|
"AND lifecycle = 'active' "
|
|
2157
2162
|
"ORDER BY importance DESC, created_at DESC LIMIT 10",
|
|
2158
2163
|
(pid,),
|
|
@@ -289,6 +289,16 @@ def main() -> None:
|
|
|
289
289
|
|
|
290
290
|
ctx_p = sub.add_parser("session-context", help="Print session context (for hooks)")
|
|
291
291
|
ctx_p.add_argument("query", nargs="?", default="", help="Optional context query")
|
|
292
|
+
ctx_p.add_argument(
|
|
293
|
+
"--max-age-days", type=int, default=30,
|
|
294
|
+
help="Suppress memories older than N days unless score ≥ 0.7 (default: 30). "
|
|
295
|
+
"Set 0 to disable age filter.",
|
|
296
|
+
)
|
|
297
|
+
ctx_p.add_argument(
|
|
298
|
+
"--full", action="store_true",
|
|
299
|
+
help="Use full engine path (slower, requires Ollama). Default is fast SQLite path.",
|
|
300
|
+
)
|
|
301
|
+
ctx_p.add_argument("--json", action="store_true", help="Output structured JSON (agent-native)")
|
|
292
302
|
|
|
293
303
|
obs_p = sub.add_parser("observe", help="Auto-capture content (pipe or argument)")
|
|
294
304
|
obs_p.add_argument("content", nargs="?", default="", help="Content to evaluate")
|
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
# Copyright (c) 2026 Varun Pratap Bhardwaj / Qualixar
|
|
2
|
+
# Licensed under AGPL-3.0-or-later - see LICENSE file
|
|
3
|
+
# Part of SuperLocalMemory V3 | https://qualixar.com | https://varunpratap.com
|
|
4
|
+
|
|
5
|
+
"""SuperLocalMemory v3.4.5 — Backend Orchestrator.
|
|
6
|
+
|
|
7
|
+
Central coordinator for multi-backend architecture.
|
|
8
|
+
Manages CozoDB, LanceDB, and TierManager lifecycle.
|
|
9
|
+
Handles auto-migration, fallback, and incremental sync.
|
|
10
|
+
|
|
11
|
+
This is the ONLY module that imports all three backends.
|
|
12
|
+
Other modules call BackendOrchestrator methods.
|
|
13
|
+
|
|
14
|
+
Part of Qualixar | Author: Varun Pratap Bhardwaj
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
from __future__ import annotations
|
|
18
|
+
|
|
19
|
+
import logging
|
|
20
|
+
import sqlite3
|
|
21
|
+
import threading
|
|
22
|
+
from pathlib import Path
|
|
23
|
+
from typing import TYPE_CHECKING, Any
|
|
24
|
+
|
|
25
|
+
if TYPE_CHECKING:
|
|
26
|
+
from superlocalmemory.core.config import SLMConfig
|
|
27
|
+
from superlocalmemory.storage.database import DatabaseManager
|
|
28
|
+
|
|
29
|
+
logger = logging.getLogger(__name__)
|
|
30
|
+
|
|
31
|
+
# ---------------------------------------------------------------------------
|
|
32
|
+
# Global singleton (set by daemon, read by store_pipeline)
|
|
33
|
+
# ---------------------------------------------------------------------------
|
|
34
|
+
|
|
35
|
+
_orchestrator: BackendOrchestrator | None = None
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def get_orchestrator() -> BackendOrchestrator | None:
|
|
39
|
+
"""Return the global BackendOrchestrator singleton."""
|
|
40
|
+
return _orchestrator
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def set_orchestrator(orch: BackendOrchestrator) -> None:
|
|
44
|
+
"""Set the global BackendOrchestrator singleton."""
|
|
45
|
+
global _orchestrator
|
|
46
|
+
_orchestrator = orch
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
# ---------------------------------------------------------------------------
|
|
50
|
+
# BackendOrchestrator
|
|
51
|
+
# ---------------------------------------------------------------------------
|
|
52
|
+
|
|
53
|
+
class BackendOrchestrator:
|
|
54
|
+
"""Central coordinator for multi-backend architecture.
|
|
55
|
+
|
|
56
|
+
Lifecycle:
|
|
57
|
+
on_daemon_start() → migrate backends → ready
|
|
58
|
+
sync_new_fact() → called from store_pipeline after SQLite write
|
|
59
|
+
health_check() → returns status of all backends
|
|
60
|
+
"""
|
|
61
|
+
|
|
62
|
+
def __init__(self, config: SLMConfig, db: DatabaseManager) -> None:
|
|
63
|
+
self._config = config
|
|
64
|
+
self._db = db
|
|
65
|
+
self._data_dir = Path(config.data_dir)
|
|
66
|
+
self._cozo: Any = None
|
|
67
|
+
self._lancedb: Any = None
|
|
68
|
+
self._tiers: Any = None
|
|
69
|
+
self._backend_cache: dict[str, str] = {}
|
|
70
|
+
|
|
71
|
+
# ------------------------------------------------------------------
|
|
72
|
+
# Daemon Startup
|
|
73
|
+
# ------------------------------------------------------------------
|
|
74
|
+
|
|
75
|
+
def on_daemon_start(self) -> None:
|
|
76
|
+
"""Called once on daemon startup. Order matters (F-11: rebalance before migration)."""
|
|
77
|
+
logger.info("BackendOrchestrator: daemon starting")
|
|
78
|
+
|
|
79
|
+
# 1. Apply schema (if not already applied)
|
|
80
|
+
self._apply_schema_v345()
|
|
81
|
+
|
|
82
|
+
# 2. Initialize TierManager (always)
|
|
83
|
+
try:
|
|
84
|
+
from superlocalmemory.core.tier_manager import evaluate_tiers, set_backends
|
|
85
|
+
self._tiers = evaluate_tiers
|
|
86
|
+
set_backends(cozo=self._cozo, lancedb=self._lancedb)
|
|
87
|
+
logger.info("BackendOrchestrator: TierManager initialized")
|
|
88
|
+
except Exception as exc:
|
|
89
|
+
logger.warning("TierManager init failed (non-fatal): %s", exc)
|
|
90
|
+
|
|
91
|
+
# 3. Run initial tier rebalance FIRST (F-11: before migration)
|
|
92
|
+
try:
|
|
93
|
+
from superlocalmemory.core.tier_manager import evaluate_tiers as rebalance
|
|
94
|
+
result = rebalance(self._db)
|
|
95
|
+
logger.info("BackendOrchestrator: initial rebalance — %s",
|
|
96
|
+
result.get("total_evaluated", "?"))
|
|
97
|
+
except Exception as exc:
|
|
98
|
+
logger.warning("Initial rebalance failed (non-fatal): %s", exc)
|
|
99
|
+
|
|
100
|
+
# 4. Initialize CozoDB if available
|
|
101
|
+
cozo_available = self._detect_cozo()
|
|
102
|
+
if cozo_available:
|
|
103
|
+
self._init_cozo()
|
|
104
|
+
|
|
105
|
+
# 5. Initialize LanceDB if available
|
|
106
|
+
lancedb_available = self._detect_lancedb()
|
|
107
|
+
if lancedb_available:
|
|
108
|
+
self._init_lancedb()
|
|
109
|
+
|
|
110
|
+
# 6. Auto-migrate
|
|
111
|
+
if self._cozo:
|
|
112
|
+
status = self._cozo_status()
|
|
113
|
+
if status in ("not_initialized", "migrating"):
|
|
114
|
+
if status == "migrating":
|
|
115
|
+
logger.warning("CozoDB migration interrupted — rebuilding")
|
|
116
|
+
self._migrate_cozo()
|
|
117
|
+
|
|
118
|
+
if self._lancedb:
|
|
119
|
+
status = self._lancedb_status()
|
|
120
|
+
if status in ("not_initialized", "migrating"):
|
|
121
|
+
if status == "migrating":
|
|
122
|
+
logger.warning("LanceDB migration interrupted — rebuilding")
|
|
123
|
+
self._migrate_lancedb()
|
|
124
|
+
|
|
125
|
+
logger.info("BackendOrchestrator: daemon ready (cozo=%s, lancedb=%s)",
|
|
126
|
+
"active" if self._cozo and self._cozo_status() == "active" else "off",
|
|
127
|
+
"active" if self._lancedb and self._lancedb_status() == "active" else "off")
|
|
128
|
+
|
|
129
|
+
# ------------------------------------------------------------------
|
|
130
|
+
# Incremental Sync (F-04: called from store_pipeline)
|
|
131
|
+
# ------------------------------------------------------------------
|
|
132
|
+
|
|
133
|
+
def sync_new_fact(self, fact: Any) -> None:
|
|
134
|
+
"""Sync a newly stored fact to CozoDB and LanceDB.
|
|
135
|
+
|
|
136
|
+
Called AFTER SQLite write in store_pipeline.
|
|
137
|
+
Non-blocking, best-effort. Failures are logged, not raised.
|
|
138
|
+
"""
|
|
139
|
+
try:
|
|
140
|
+
tier = getattr(fact, "lifecycle", "active")
|
|
141
|
+
except Exception:
|
|
142
|
+
tier = "active"
|
|
143
|
+
|
|
144
|
+
if tier in ("active", "warm"):
|
|
145
|
+
if self._cozo and self._cozo_status() == "active":
|
|
146
|
+
self._sync_fact_entities(fact)
|
|
147
|
+
|
|
148
|
+
if self._lancedb and self._lancedb_status() == "active":
|
|
149
|
+
self._sync_fact_embedding(fact)
|
|
150
|
+
|
|
151
|
+
def _sync_fact_entities(self, fact: Any) -> None:
|
|
152
|
+
"""Sync fact's entities and edges to CozoDB."""
|
|
153
|
+
try:
|
|
154
|
+
entities = getattr(fact, "canonical_entities", []) or []
|
|
155
|
+
for eid in entities:
|
|
156
|
+
self._cozo.add_entity(eid, eid, "concept", {})
|
|
157
|
+
# Add edges from this entity to existing ones
|
|
158
|
+
for other in entities:
|
|
159
|
+
if other != eid:
|
|
160
|
+
self._cozo.add_edge(eid, other, "co_occurs", 1.0)
|
|
161
|
+
except Exception as exc:
|
|
162
|
+
logger.debug("CozoDB incremental sync skipped: %s", exc)
|
|
163
|
+
|
|
164
|
+
def _sync_fact_embedding(self, fact: Any) -> None:
|
|
165
|
+
"""Sync fact's embedding to LanceDB."""
|
|
166
|
+
try:
|
|
167
|
+
embedding = getattr(fact, "embedding", None)
|
|
168
|
+
if embedding:
|
|
169
|
+
tier = getattr(fact, "lifecycle", "active")
|
|
170
|
+
self._lancedb.add_vectors(
|
|
171
|
+
[fact.fact_id], [embedding], [tier],
|
|
172
|
+
)
|
|
173
|
+
except Exception as exc:
|
|
174
|
+
logger.debug("LanceDB incremental sync skipped: %s", exc)
|
|
175
|
+
|
|
176
|
+
# ------------------------------------------------------------------
|
|
177
|
+
# Backend Access
|
|
178
|
+
# ------------------------------------------------------------------
|
|
179
|
+
|
|
180
|
+
def get_graph_backend(self) -> Any:
|
|
181
|
+
"""Return active graph backend or None (caller falls back to NetworkX)."""
|
|
182
|
+
if self._cozo and self._cozo_status() == "active":
|
|
183
|
+
return self._cozo
|
|
184
|
+
return None
|
|
185
|
+
|
|
186
|
+
def get_vector_backend(self) -> Any:
|
|
187
|
+
"""Return active vector backend or None."""
|
|
188
|
+
if self._lancedb and self._lancedb_status() == "active":
|
|
189
|
+
return self._lancedb
|
|
190
|
+
return None
|
|
191
|
+
|
|
192
|
+
# ------------------------------------------------------------------
|
|
193
|
+
# Health Check
|
|
194
|
+
# ------------------------------------------------------------------
|
|
195
|
+
|
|
196
|
+
def health_check(self) -> dict[str, Any]:
|
|
197
|
+
"""Comprehensive health status for dashboard + CLI."""
|
|
198
|
+
result: dict[str, Any] = {
|
|
199
|
+
"sqlite": {"status": "active"},
|
|
200
|
+
"cozo": {"status": "not_available"},
|
|
201
|
+
"lancedb": {"status": "not_available"},
|
|
202
|
+
"tiers": {},
|
|
203
|
+
"warnings": [],
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
try:
|
|
207
|
+
from superlocalmemory.core.tier_manager import get_tier_stats
|
|
208
|
+
result["tiers"] = get_tier_stats(self._db)
|
|
209
|
+
except Exception:
|
|
210
|
+
pass
|
|
211
|
+
|
|
212
|
+
if self._cozo:
|
|
213
|
+
try:
|
|
214
|
+
result["cozo"] = self._cozo.health_check()
|
|
215
|
+
except Exception as exc:
|
|
216
|
+
result["cozo"] = {"status": "error", "error": str(exc)}
|
|
217
|
+
else:
|
|
218
|
+
result["warnings"].append(
|
|
219
|
+
"CozoDB not active. Install: pip install superlocalmemory[cozo]"
|
|
220
|
+
)
|
|
221
|
+
|
|
222
|
+
if self._lancedb:
|
|
223
|
+
try:
|
|
224
|
+
result["lancedb"] = self._lancedb.health_check()
|
|
225
|
+
except Exception as exc:
|
|
226
|
+
result["lancedb"] = {"status": "error", "error": str(exc)}
|
|
227
|
+
else:
|
|
228
|
+
result["warnings"].append(
|
|
229
|
+
"LanceDB not active. Install: pip install superlocalmemory[lancedb]"
|
|
230
|
+
)
|
|
231
|
+
|
|
232
|
+
return result
|
|
233
|
+
|
|
234
|
+
# ------------------------------------------------------------------
|
|
235
|
+
# Internal: Detection
|
|
236
|
+
# ------------------------------------------------------------------
|
|
237
|
+
|
|
238
|
+
def _detect_cozo(self) -> bool:
|
|
239
|
+
if self._config.get("graph_backend") == "sqlite":
|
|
240
|
+
return False
|
|
241
|
+
try:
|
|
242
|
+
import pycozo # noqa: F401
|
|
243
|
+
return True
|
|
244
|
+
except ImportError:
|
|
245
|
+
return False
|
|
246
|
+
|
|
247
|
+
def _detect_lancedb(self) -> bool:
|
|
248
|
+
if self._config.get("vector_backend") == "sqlite-vec":
|
|
249
|
+
return False
|
|
250
|
+
try:
|
|
251
|
+
import lancedb # noqa: F401
|
|
252
|
+
return True
|
|
253
|
+
except ImportError:
|
|
254
|
+
return False
|
|
255
|
+
|
|
256
|
+
# ------------------------------------------------------------------
|
|
257
|
+
# Internal: Init
|
|
258
|
+
# ------------------------------------------------------------------
|
|
259
|
+
|
|
260
|
+
def _init_cozo(self) -> None:
|
|
261
|
+
try:
|
|
262
|
+
from superlocalmemory.graph.cozo_backend import CozoDBGraphBackend
|
|
263
|
+
cozo_path = self._data_dir / "cozo"
|
|
264
|
+
cozo_path.mkdir(parents=True, exist_ok=True)
|
|
265
|
+
self._cozo = CozoDBGraphBackend(str(cozo_path / "graph"))
|
|
266
|
+
self._update_status("cozo", "not_initialized")
|
|
267
|
+
logger.info("CozoDB initialized at %s", cozo_path)
|
|
268
|
+
except Exception as exc:
|
|
269
|
+
logger.warning("CozoDB init failed: %s", exc)
|
|
270
|
+
self._cozo = None
|
|
271
|
+
|
|
272
|
+
def _init_lancedb(self) -> None:
|
|
273
|
+
try:
|
|
274
|
+
from superlocalmemory.vector.lancedb_backend import LanceDBVectorBackend
|
|
275
|
+
lance_path = self._data_dir / "lance"
|
|
276
|
+
self._lancedb = LanceDBVectorBackend(str(lance_path))
|
|
277
|
+
self._update_status("lancedb", "not_initialized")
|
|
278
|
+
logger.info("LanceDB initialized at %s", lance_path)
|
|
279
|
+
except Exception as exc:
|
|
280
|
+
logger.warning("LanceDB init failed: %s", exc)
|
|
281
|
+
self._lancedb = None
|
|
282
|
+
|
|
283
|
+
# ------------------------------------------------------------------
|
|
284
|
+
# Internal: Migration
|
|
285
|
+
# ------------------------------------------------------------------
|
|
286
|
+
|
|
287
|
+
def _migrate_cozo(self) -> None:
|
|
288
|
+
self._update_status("cozo", "migrating")
|
|
289
|
+
|
|
290
|
+
def _run():
|
|
291
|
+
conn = sqlite3.connect(str(self._data_dir / "memory.db"))
|
|
292
|
+
conn.execute("PRAGMA journal_mode=WAL")
|
|
293
|
+
conn.execute("PRAGMA query_only=ON") # F-07: read-only in migration thread
|
|
294
|
+
try:
|
|
295
|
+
count = self._cozo.bulk_import_from_sqlite(conn)
|
|
296
|
+
self._update_status("cozo", "active", count)
|
|
297
|
+
logger.info("CozoDB migration complete: %d edges", count)
|
|
298
|
+
except Exception as exc:
|
|
299
|
+
logger.error("CozoDB migration failed: %s", exc)
|
|
300
|
+
self._update_status("cozo", "failed", error=str(exc))
|
|
301
|
+
finally:
|
|
302
|
+
conn.close()
|
|
303
|
+
|
|
304
|
+
threading.Thread(target=_run, daemon=True).start()
|
|
305
|
+
|
|
306
|
+
def _migrate_lancedb(self) -> None:
|
|
307
|
+
self._update_status("lancedb", "migrating")
|
|
308
|
+
|
|
309
|
+
def _run():
|
|
310
|
+
conn = sqlite3.connect(str(self._data_dir / "memory.db"))
|
|
311
|
+
conn.execute("PRAGMA journal_mode=WAL")
|
|
312
|
+
conn.execute("PRAGMA query_only=ON")
|
|
313
|
+
try:
|
|
314
|
+
count = self._lancedb.bulk_import_from_sqlite(conn)
|
|
315
|
+
self._update_status("lancedb", "active", count)
|
|
316
|
+
logger.info("LanceDB migration complete: %d vectors", count)
|
|
317
|
+
except Exception as exc:
|
|
318
|
+
logger.error("LanceDB migration failed: %s", exc)
|
|
319
|
+
self._update_status("lancedb", "failed", error=str(exc))
|
|
320
|
+
finally:
|
|
321
|
+
conn.close()
|
|
322
|
+
|
|
323
|
+
threading.Thread(target=_run, daemon=True).start()
|
|
324
|
+
|
|
325
|
+
# ------------------------------------------------------------------
|
|
326
|
+
# Internal: Status
|
|
327
|
+
# ------------------------------------------------------------------
|
|
328
|
+
|
|
329
|
+
def _cozo_status(self) -> str:
|
|
330
|
+
return self._backend_cache.get("cozo", "not_initialized")
|
|
331
|
+
|
|
332
|
+
def _lancedb_status(self) -> str:
|
|
333
|
+
return self._backend_cache.get("lancedb", "not_initialized")
|
|
334
|
+
|
|
335
|
+
def _update_status(self, name: str, status: str,
|
|
336
|
+
count: int = 0, error: str = "") -> None:
|
|
337
|
+
self._backend_cache[name] = status
|
|
338
|
+
try:
|
|
339
|
+
self._db.conn.execute(
|
|
340
|
+
"INSERT OR REPLACE INTO backend_status "
|
|
341
|
+
"(backend_name, status, record_count, error_message, last_sync_at) "
|
|
342
|
+
"VALUES (?, ?, ?, ?, datetime('now'))",
|
|
343
|
+
(name, status, count, error),
|
|
344
|
+
)
|
|
345
|
+
self._db.conn.commit()
|
|
346
|
+
except Exception:
|
|
347
|
+
pass
|
|
348
|
+
|
|
349
|
+
# ------------------------------------------------------------------
|
|
350
|
+
# Internal: Schema
|
|
351
|
+
# ------------------------------------------------------------------
|
|
352
|
+
|
|
353
|
+
def _apply_schema_v345(self) -> None:
|
|
354
|
+
try:
|
|
355
|
+
from superlocalmemory.storage.schema_v345 import (
|
|
356
|
+
apply_migration, schema_version_applied,
|
|
357
|
+
)
|
|
358
|
+
if not schema_version_applied(self._db.conn):
|
|
359
|
+
result = apply_migration(self._db.conn)
|
|
360
|
+
if result.get("errors"):
|
|
361
|
+
logger.warning("Schema v3.4.5 had errors: %s", result["errors"])
|
|
362
|
+
except ImportError:
|
|
363
|
+
logger.debug("schema_v345 not found — skipping")
|
|
364
|
+
except Exception as exc:
|
|
365
|
+
logger.warning("Schema v3.4.5 apply failed (non-fatal): %s", exc)
|
{superlocalmemory-3.4.49 → superlocalmemory-3.4.52}/src/superlocalmemory/core/ollama_embedder.py
RENAMED
|
@@ -204,12 +204,18 @@ class OllamaEmbedder:
|
|
|
204
204
|
return False
|
|
205
205
|
|
|
206
206
|
def _call_ollama_embed(self, text: str) -> list[float]:
|
|
207
|
-
"""Call Ollama embed endpoint for a single text.
|
|
207
|
+
"""Call Ollama embed endpoint for a single text.
|
|
208
|
+
|
|
209
|
+
v3.4.52: ``keep_alive: -1`` pins the embedding model in VRAM
|
|
210
|
+
forever so subsequent calls have no cold-start latency. Industry
|
|
211
|
+
pattern (Hindsight, Zep, Supermemory) — without this, Ollama
|
|
212
|
+
unloads after 5min idle and the next call takes 20-30s.
|
|
213
|
+
"""
|
|
208
214
|
import httpx
|
|
209
215
|
|
|
210
216
|
resp = httpx.post(
|
|
211
217
|
f"{self._base_url}/api/embed",
|
|
212
|
-
json={"model": self._model, "input": [text]},
|
|
218
|
+
json={"model": self._model, "input": [text], "keep_alive": -1},
|
|
213
219
|
timeout=httpx.Timeout(_RESPONSE_TIMEOUT, connect=_CONNECT_TIMEOUT),
|
|
214
220
|
)
|
|
215
221
|
resp.raise_for_status()
|
|
@@ -219,12 +225,16 @@ class OllamaEmbedder:
|
|
|
219
225
|
return self._normalize(vec)
|
|
220
226
|
|
|
221
227
|
def _call_ollama_embed_batch(self, texts: list[str]) -> list[list[float] | None]:
|
|
222
|
-
"""Call Ollama embed endpoint with batch input.
|
|
228
|
+
"""Call Ollama embed endpoint with batch input.
|
|
229
|
+
|
|
230
|
+
v3.4.52: ``keep_alive: -1`` pins the embedding model — see
|
|
231
|
+
``_call_ollama_embed`` docstring for rationale.
|
|
232
|
+
"""
|
|
223
233
|
import httpx
|
|
224
234
|
|
|
225
235
|
resp = httpx.post(
|
|
226
236
|
f"{self._base_url}/api/embed",
|
|
227
|
-
json={"model": self._model, "input": texts},
|
|
237
|
+
json={"model": self._model, "input": texts, "keep_alive": -1},
|
|
228
238
|
timeout=httpx.Timeout(_RESPONSE_TIMEOUT, connect=_CONNECT_TIMEOUT),
|
|
229
239
|
)
|
|
230
240
|
resp.raise_for_status()
|