superlocalmemory 3.6.5__tar.gz → 3.6.7__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.
Potentially problematic release.
This version of superlocalmemory might be problematic. Click here for more details.
- {superlocalmemory-3.6.5/src/superlocalmemory.egg-info → superlocalmemory-3.6.7}/PKG-INFO +57 -2
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/README.md +56 -1
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/pyproject.toml +1 -1
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/__init__.py +1 -1
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/cli/commands.py +30 -10
- superlocalmemory-3.6.7/src/superlocalmemory/core/block_hygiene.py +147 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/config.py +36 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/consolidation_engine.py +13 -10
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/engine.py +24 -5
- superlocalmemory-3.6.7/src/superlocalmemory/core/ingest_gate.py +133 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/injection.py +27 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/maintenance_scheduler.py +9 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/recall_pipeline.py +9 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/recall_worker.py +12 -20
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/mcp/server.py +19 -6
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/mcp/tools_core.py +2 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/retrieval/engine.py +58 -0
- superlocalmemory-3.6.7/src/superlocalmemory/server/recall_serializer.py +225 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/unified_daemon.py +85 -56
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/models.py +3 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7/src/superlocalmemory.egg-info}/PKG-INFO +57 -2
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory.egg-info/SOURCES.txt +3 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/AUTHORS.md +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/LICENSE +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/NOTICE +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/setup.cfg +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/attribution/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/attribution/mathematical_dna.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/attribution/signer.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/attribution/watermark.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/cli/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/cli/cache_cmd.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/cli/compress_cmd.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/cli/context_commands.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/cli/daemon.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/cli/db_migrate.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/cli/doctor_cmd.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/cli/escape_hatch.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/cli/help_cmd.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/cli/ingest_cmd.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/cli/json_output.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/cli/main.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/cli/migrate_cmd.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/cli/optimize_cmd.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/cli/optimize_constants.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/cli/pending_store.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/cli/post_install.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/cli/proxy_cmd.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/cli/service_installer.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/cli/setup_wizard.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/cli/version_banner.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/cli/wizard_v3426_options.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/code_graph/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/code_graph/blast_radius.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/code_graph/bridge/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/code_graph/bridge/entity_resolver.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/code_graph/bridge/event_listeners.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/code_graph/bridge/fact_enricher.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/code_graph/bridge/hebbian_linker.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/code_graph/bridge/temporal_checker.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/code_graph/changes.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/code_graph/communities.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/code_graph/config.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/code_graph/database.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/code_graph/extractors/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/code_graph/extractors/python.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/code_graph/extractors/typescript.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/code_graph/flows.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/code_graph/git_hooks.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/code_graph/graph_engine.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/code_graph/graph_store.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/code_graph/incremental.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/code_graph/models.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/code_graph/parser.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/code_graph/resolver.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/code_graph/search.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/code_graph/service.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/code_graph/watcher.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/compliance/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/compliance/abac.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/compliance/audit.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/compliance/eu_ai_act.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/compliance/gdpr.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/compliance/lifecycle.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/compliance/retention.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/compliance/scheduler.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/backend_orchestrator.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/clock_monitor.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/context_cache.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/db_pool.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/embedding_worker.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/embeddings.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/engine_capabilities.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/engine_lock.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/engine_wiring.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/error_catalog.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/error_envelope.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/fact_consolidator.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/file_lock.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/graph_analyzer.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/graph_pruner.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/health_monitor.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/hooks.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/loop_watchdog.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/maintenance.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/mcp_embedder_proxy.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/modes.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/ollama_embedder.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/platform_utils.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/priority_queue.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/profiles.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/pruning_engine.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/queue_consumer.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/queue_dispatcher.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/ram_lock.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/rate_limit.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/recall_gate.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/recall_queue.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/registry.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/reranker_worker.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/safe_fs.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/security_primitives.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/shadow_router.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/slm_disabled.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/slmignore.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/store_pipeline.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/summarizer.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/tier_manager.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/topic_signature.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/worker_pool.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/dynamics/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/dynamics/activation_guided_quantization.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/dynamics/eap_scheduler.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/dynamics/ebbinghaus_langevin_coupling.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/dynamics/fisher_langevin_coupling.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/encoding/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/encoding/auto_linker.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/encoding/cognitive_consolidator.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/encoding/consolidator.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/encoding/context_generator.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/encoding/emotional.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/encoding/entity_resolver.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/encoding/entropy_gate.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/encoding/fact_extractor.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/encoding/foresight.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/encoding/graph_builder.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/encoding/observation_builder.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/encoding/scene_builder.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/encoding/signal_inference.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/encoding/temporal_parser.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/encoding/temporal_validator.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/encoding/type_router.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/evolution/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/evolution/blind_verifier.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/evolution/budget.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/evolution/evolution_store.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/evolution/llm_dispatch.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/evolution/mutation_generator.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/evolution/skill_evolver.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/evolution/triggers.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/evolution/types.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/graph/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/graph/cozo_backend.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/hooks/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/hooks/_outcome_common.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/hooks/adapter_base.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/hooks/antigravity_adapter.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/hooks/auto_capture.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/hooks/auto_invoker.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/hooks/auto_parameterize.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/hooks/auto_recall.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/hooks/auto_recall_hook.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/hooks/before_web_hook.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/hooks/claude_code_hooks.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/hooks/context_payload.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/hooks/copilot_adapter.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/hooks/cross_platform_connector.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/hooks/cursor_adapter.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/hooks/hook_daemon.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/hooks/hook_handlers.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/hooks/ide_connector.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/hooks/post_tool_async_hook.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/hooks/post_tool_outcome_hook.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/hooks/prewarm_auth.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/hooks/rules_engine.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/hooks/session_registry.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/hooks/stop_outcome_hook.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/hooks/sync_loop.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/hooks/topic_shift_hook.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/hooks/user_prompt_hook.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/hooks/user_prompt_rehash_hook.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/infra/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/infra/auth_middleware.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/infra/backup.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/infra/cache_manager.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/infra/cloud_backup.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/infra/event_bus.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/infra/heartbeat_monitor.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/infra/pid_manager.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/infra/process_reaper.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/infra/rate_limiter.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/infra/webhook_dispatcher.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ingestion/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ingestion/adapter_manager.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ingestion/base_adapter.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ingestion/calendar_adapter.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ingestion/credentials.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ingestion/gmail_adapter.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ingestion/parsers.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ingestion/transcript_adapter.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/adaptive.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/arm_catalog.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/assertion_miner.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/bandit.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/bandit_cache.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/behavioral.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/behavioral_listener.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/bootstrap.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/consolidation_cycle.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/consolidation_quantization_worker.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/consolidation_worker.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/cross_project.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/database.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/dedup_hnsw.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/engagement.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/ensemble.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/entity_compiler.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/fact_outcome_joins.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/features.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/feedback.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/forgetting_scheduler.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/hnsw_dedup.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/labeler.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/legacy_migration.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/lightgbm_subprocess.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/memory_merge.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/model_cache.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/model_rollback.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/outcome_queue.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/outcomes.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/pattern_miner.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/pattern_miner_constants.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/project_context.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/quantization_scheduler.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/ranker.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/ranker_common.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/ranker_retrain_legacy.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/ranker_retrain_online.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/reward.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/reward_archive.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/reward_boost.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/reward_proxy.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/shadow_test.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/signal_worker.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/signals.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/skill_performance_miner.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/source_quality.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/trigram_index.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/learning/workflows.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/llm/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/llm/backbone.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/math/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/math/ebbinghaus.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/math/fisher.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/math/fisher_quantized.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/math/hopfield.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/math/langevin.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/math/polar_quant.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/math/qjl.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/math/sheaf.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/math/turbo_quant.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/mcp/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/mcp/_daemon_proxy.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/mcp/_pool_adapter.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/mcp/_stdin_guard.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/mcp/resources.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/mcp/shared.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/mcp/tools.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/mcp/tools_active.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/mcp/tools_code_graph.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/mcp/tools_context.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/mcp/tools_evolution.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/mcp/tools_learning.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/mcp/tools_mesh.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/mcp/tools_v28.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/mcp/tools_v3.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/mcp/tools_v33.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/mesh/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/mesh/broker.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/mesh/remote_sync.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/migrations/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/migrations/v3_4_25_to_v3_4_26.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/adapters/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/adapters/_agent_registry.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/adapters/anthropic_adapter.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/adapters/openai_adapter.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/adapters/wrap.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/cache/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/cache/boundary_store.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/cache/centroid_store.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/cache/context_key.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/cache/exact.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/cache/invalidation.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/cache/key_builder.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/cache/manager.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/cache/semantic.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/cache/stampede.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/compress/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/compress/align.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/compress/ccr.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/compress/extractive_code.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/compress/extractive_json.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/compress/prose_llmlingua.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/compress/router.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/config/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/config/defaults.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/config/schema.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/config/store.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/metrics/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/metrics/counters.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/metrics/estimator.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/metrics/exporters.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/metrics/persistence.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/proxy/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/proxy/_helpers.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/proxy/anthropic_surface.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/proxy/gemini_surface.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/proxy/lifecycle.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/proxy/openai_surface.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/proxy/server.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/storage/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/storage/db.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/optimize/storage/schema.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/parameterization/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/parameterization/pattern_extractor.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/parameterization/pii_filter.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/parameterization/prompt_injector.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/parameterization/prompt_lifecycle.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/parameterization/soft_prompt_generator.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/retrieval/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/retrieval/agentic.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/retrieval/ann_index.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/retrieval/bm25_channel.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/retrieval/bridge_discovery.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/retrieval/channel_registry.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/retrieval/entity_channel.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/retrieval/forgetting_filter.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/retrieval/fusion.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/retrieval/hopfield_channel.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/retrieval/profile_channel.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/retrieval/quantization_aware_search.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/retrieval/reranker.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/retrieval/semantic_channel.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/retrieval/spreading_activation.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/retrieval/strategy.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/retrieval/temporal_channel.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/retrieval/vector_store.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/api.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/bandit_loops.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/middleware/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/middleware/security_headers.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/routes/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/routes/adapters.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/routes/agents.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/routes/backup.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/routes/behavioral.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/routes/brain.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/routes/chat.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/routes/compliance.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/routes/data_io.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/routes/entity.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/routes/events.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/routes/evolution.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/routes/helpers.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/routes/ingest.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/routes/insights.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/routes/learning.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/routes/lifecycle.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/routes/memories.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/routes/mesh.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/routes/optimize.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/routes/prewarm.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/routes/profiles.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/routes/stats.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/routes/tiers.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/routes/timeline.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/routes/token.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/routes/v3_api.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/routes/ws.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/security_middleware.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/server/ui.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/skills/slm-build-graph/SKILL.md +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/skills/slm-list-recent/SKILL.md +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/skills/slm-recall/SKILL.md +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/skills/slm-remember/SKILL.md +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/skills/slm-show-patterns/SKILL.md +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/skills/slm-status/SKILL.md +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/skills/slm-switch-profile/SKILL.md +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/access_control.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/access_log.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/database.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/embedding_migrator.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/migration_runner.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/migration_v33.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/migrations/M001_add_signal_features_columns.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/migrations/M002_model_state_history.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/migrations/M003_migration_log.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/migrations/M004_cross_platform_sync_log.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/migrations/M005_bandit_tables.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/migrations/M006_action_outcomes_reward.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/migrations/M007_pending_outcomes.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/migrations/M009_model_lineage.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/migrations/M010_evolution_config.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/migrations/M011_archive_and_merge.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/migrations/M012_shadow_observations.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/migrations/M013_bi_temporal_columns.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/migrations/M014_v345_scale_ready.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/migrations/M015_add_pinned_column.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/migrations/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/migrations.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/quantized_store.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/schema.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/schema_code_graph.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/schema_v32.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/schema_v3410.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/schema_v3411.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/schema_v343.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/schema_v345.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/schema_v347.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/storage/v2_migrator.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/trust/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/trust/gate.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/trust/provenance.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/trust/scorer.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/trust/signals.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/css/brain.css +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/css/legacy-dashboard.css +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/css/neural-glass.css +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/index.html +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/agents.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/auto-settings.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/brain.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/clusters.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/compliance.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/core.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/dashboard.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/events.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/fact-detail.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/feedback.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/graph-event-bus.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/graph-filters.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/graph-ui.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/ide-status.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/init.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/knowledge-graph.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/lifecycle.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/math-health.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/memories.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/memory-chat.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/memory-timeline.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/modal.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/ng-entities.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/ng-health.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/ng-ingestion.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/ng-mesh.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/ng-shell.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/ng-skills.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/optimize.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/profiles.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/quick-actions.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/recall-lab.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/search.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/settings.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/timeline.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/js/trust-dashboard.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/vendor/bootstrap-icons/bootstrap-icons.css +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff2 +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/vendor/bootstrap.bundle.min.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/vendor/bootstrap.min.css +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/vendor/d3.v7.min.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/vendor/graphology-library.min.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/vendor/graphology.umd.min.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/vendor/inter-ui/inter-variable.min.css +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable-Italic.woff2 +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable.woff2 +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/ui/vendor/sigma.min.js +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/vector/__init__.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/vector/lancedb_backend.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory.egg-info/dependency_links.txt +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory.egg-info/entry_points.txt +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory.egg-info/requires.txt +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory.egg-info/top_level.txt +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/tests/test_auto_hooks.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/tests/test_before_web_hook.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/tests/test_behavioral_full.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/tests/test_claude_hooks.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/tests/test_cli_core.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/tests/test_cli_json.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/tests/test_cli_v33.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/tests/test_compliance_full.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/tests/test_config_system.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/tests/test_engine_hooks.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/tests/test_event_bus.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/tests/test_features.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/tests/test_final_locomo_mini.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/tests/test_graph_integrity.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/tests/test_hook_handlers.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/tests/test_ide_connector.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/tests/test_infra.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/tests/test_injection.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/tests/test_learning_advanced.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/tests/test_learning_collectors.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/tests/test_llm_provider.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/tests/test_mcp_server.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/tests/test_migration.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/tests/test_mode_switch_preservation.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/tests/test_post_install.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/tests/test_ranker.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/tests/test_topic_shift_hook.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/tests/test_trust_full.py +0 -0
- {superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/tests/test_v3_api.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: superlocalmemory
|
|
3
|
-
Version: 3.6.
|
|
3
|
+
Version: 3.6.7
|
|
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
|
|
@@ -401,6 +401,32 @@ slm status
|
|
|
401
401
|
|
|
402
402
|
### MCP Integration (Claude, Cursor, Windsurf, VS Code, etc.)
|
|
403
403
|
|
|
404
|
+
SLM supports **two MCP transports** — use whichever fits your tool. Both expose the same 33 tools and 7 resources.
|
|
405
|
+
|
|
406
|
+
#### Option A — HTTP transport (v3.6.7+, recommended)
|
|
407
|
+
|
|
408
|
+
One shared process handles every client. RAM is flat regardless of how many IDE windows, subagents, or concurrent sessions connect. Requires the SLM daemon to be running (`slm start`).
|
|
409
|
+
|
|
410
|
+
```json
|
|
411
|
+
{
|
|
412
|
+
"mcpServers": {
|
|
413
|
+
"superlocalmemory": {
|
|
414
|
+
"type": "http",
|
|
415
|
+
"url": "http://127.0.0.1:8765/mcp/"
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
> **Claude Code** also accepts:
|
|
422
|
+
> ```bash
|
|
423
|
+
> claude mcp add --transport http superlocalmemory http://127.0.0.1:8765/mcp/
|
|
424
|
+
> ```
|
|
425
|
+
|
|
426
|
+
#### Option B — stdio transport (universal, works everywhere)
|
|
427
|
+
|
|
428
|
+
Spawns one `slm mcp` subprocess per client connection (~90–110 MB each). Works with every MCP-compatible tool including those that do not yet support HTTP transport. No daemon required.
|
|
429
|
+
|
|
404
430
|
```json
|
|
405
431
|
{
|
|
406
432
|
"mcpServers": {
|
|
@@ -412,7 +438,36 @@ slm status
|
|
|
412
438
|
}
|
|
413
439
|
```
|
|
414
440
|
|
|
415
|
-
|
|
441
|
+
#### Option C — `mcp-remote` bridge (for stdio-only tools that want HTTP)
|
|
442
|
+
|
|
443
|
+
Some CLIs (e.g. Grok CLI) only speak stdio but you still want the RAM benefit of HTTP. The [`@modelcontextprotocol/client-cli`](https://www.npmjs.com/package/@modelcontextprotocol/client-cli) package bridges them:
|
|
444
|
+
|
|
445
|
+
```bash
|
|
446
|
+
npm install -g @modelcontextprotocol/client-cli
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
```json
|
|
450
|
+
{
|
|
451
|
+
"mcpServers": {
|
|
452
|
+
"superlocalmemory": {
|
|
453
|
+
"command": "mcp-remote",
|
|
454
|
+
"args": ["http://127.0.0.1:8765/mcp/", "--allow-http", "--transport", "http-only"]
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
#### When to use which
|
|
461
|
+
|
|
462
|
+
| Situation | Use |
|
|
463
|
+
|-----------|-----|
|
|
464
|
+
| Claude Code / Claude Desktop (v3.6.7+) | **HTTP** — zero new processes per session |
|
|
465
|
+
| Cursor, Windsurf, Gemini CLI, Antigravity | **HTTP** — native support |
|
|
466
|
+
| Grok CLI, tools that only support stdio | **`mcp-remote` bridge** |
|
|
467
|
+
| Offline / daemon-free usage | **stdio** |
|
|
468
|
+
| Any tool, any version | **stdio** always works as fallback |
|
|
469
|
+
|
|
470
|
+
See [`docs/ide-setup.md`](docs/ide-setup.md) for per-IDE configs. 33 MCP tools by default (+42 optional behind `SLM_MCP_ALL_TOOLS=1`) + 7 resources. Works with any MCP-compatible client — we ship templated configs for Claude Code, Cursor, Windsurf, VS Code Copilot, Continue, Cody, ChatGPT Desktop, Gemini CLI, JetBrains, Zed, and Antigravity (15 IDE configs in `ide/configs/`).
|
|
416
471
|
|
|
417
472
|
### Dual Interface: MCP + CLI
|
|
418
473
|
|
|
@@ -309,6 +309,32 @@ slm status
|
|
|
309
309
|
|
|
310
310
|
### MCP Integration (Claude, Cursor, Windsurf, VS Code, etc.)
|
|
311
311
|
|
|
312
|
+
SLM supports **two MCP transports** — use whichever fits your tool. Both expose the same 33 tools and 7 resources.
|
|
313
|
+
|
|
314
|
+
#### Option A — HTTP transport (v3.6.7+, recommended)
|
|
315
|
+
|
|
316
|
+
One shared process handles every client. RAM is flat regardless of how many IDE windows, subagents, or concurrent sessions connect. Requires the SLM daemon to be running (`slm start`).
|
|
317
|
+
|
|
318
|
+
```json
|
|
319
|
+
{
|
|
320
|
+
"mcpServers": {
|
|
321
|
+
"superlocalmemory": {
|
|
322
|
+
"type": "http",
|
|
323
|
+
"url": "http://127.0.0.1:8765/mcp/"
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
> **Claude Code** also accepts:
|
|
330
|
+
> ```bash
|
|
331
|
+
> claude mcp add --transport http superlocalmemory http://127.0.0.1:8765/mcp/
|
|
332
|
+
> ```
|
|
333
|
+
|
|
334
|
+
#### Option B — stdio transport (universal, works everywhere)
|
|
335
|
+
|
|
336
|
+
Spawns one `slm mcp` subprocess per client connection (~90–110 MB each). Works with every MCP-compatible tool including those that do not yet support HTTP transport. No daemon required.
|
|
337
|
+
|
|
312
338
|
```json
|
|
313
339
|
{
|
|
314
340
|
"mcpServers": {
|
|
@@ -320,7 +346,36 @@ slm status
|
|
|
320
346
|
}
|
|
321
347
|
```
|
|
322
348
|
|
|
323
|
-
|
|
349
|
+
#### Option C — `mcp-remote` bridge (for stdio-only tools that want HTTP)
|
|
350
|
+
|
|
351
|
+
Some CLIs (e.g. Grok CLI) only speak stdio but you still want the RAM benefit of HTTP. The [`@modelcontextprotocol/client-cli`](https://www.npmjs.com/package/@modelcontextprotocol/client-cli) package bridges them:
|
|
352
|
+
|
|
353
|
+
```bash
|
|
354
|
+
npm install -g @modelcontextprotocol/client-cli
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
```json
|
|
358
|
+
{
|
|
359
|
+
"mcpServers": {
|
|
360
|
+
"superlocalmemory": {
|
|
361
|
+
"command": "mcp-remote",
|
|
362
|
+
"args": ["http://127.0.0.1:8765/mcp/", "--allow-http", "--transport", "http-only"]
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
#### When to use which
|
|
369
|
+
|
|
370
|
+
| Situation | Use |
|
|
371
|
+
|-----------|-----|
|
|
372
|
+
| Claude Code / Claude Desktop (v3.6.7+) | **HTTP** — zero new processes per session |
|
|
373
|
+
| Cursor, Windsurf, Gemini CLI, Antigravity | **HTTP** — native support |
|
|
374
|
+
| Grok CLI, tools that only support stdio | **`mcp-remote` bridge** |
|
|
375
|
+
| Offline / daemon-free usage | **stdio** |
|
|
376
|
+
| Any tool, any version | **stdio** always works as fallback |
|
|
377
|
+
|
|
378
|
+
See [`docs/ide-setup.md`](docs/ide-setup.md) for per-IDE configs. 33 MCP tools by default (+42 optional behind `SLM_MCP_ALL_TOOLS=1`) + 7 resources. Works with any MCP-compatible client — we ship templated configs for Claude Code, Cursor, Windsurf, VS Code Copilot, Continue, Cody, ChatGPT Desktop, Gemini CLI, JetBrains, Zed, and Antigravity (15 IDE configs in `ide/configs/`).
|
|
324
379
|
|
|
325
380
|
### Dual Interface: MCP + CLI
|
|
326
381
|
|
|
@@ -28,7 +28,7 @@ if "OMP_NUM_THREADS" not in os.environ:
|
|
|
28
28
|
os.environ["OMP_NUM_THREADS"] = "2"
|
|
29
29
|
# ---------------------------------------------------------------------------
|
|
30
30
|
|
|
31
|
-
__version__ = "3.6.
|
|
31
|
+
__version__ = "3.6.7"
|
|
32
32
|
|
|
33
33
|
_REQUIRED_VERSIONS = {
|
|
34
34
|
"sentence_transformers": "5.3.0",
|
|
@@ -1001,7 +1001,9 @@ def cmd_recall(args: Namespace) -> None:
|
|
|
1001
1001
|
])
|
|
1002
1002
|
return
|
|
1003
1003
|
if not result["results"]:
|
|
1004
|
-
print("No
|
|
1004
|
+
print("No confident match."
|
|
1005
|
+
if result.get("no_confident_match")
|
|
1006
|
+
else "No matching memories found.")
|
|
1005
1007
|
return
|
|
1006
1008
|
# Text output
|
|
1007
1009
|
print(f"SpreadingActivation.search completed via daemon ({result.get('retrieval_time_ms', 0):.0f}ms)")
|
|
@@ -1030,20 +1032,38 @@ def cmd_recall(args: Namespace) -> None:
|
|
|
1030
1032
|
sys.exit(1)
|
|
1031
1033
|
raise
|
|
1032
1034
|
|
|
1035
|
+
# v3.6.6: route the direct-fallback path through the SAME shared
|
|
1036
|
+
# serializer the daemon uses, so CLI-without-daemon output is identical
|
|
1037
|
+
# to CLI/MCP-with-daemon (budget + source discipline + no_confident_match).
|
|
1038
|
+
from superlocalmemory.server.recall_serializer import serialize_recall_response
|
|
1039
|
+
_rc = getattr(config, "retrieval", None)
|
|
1040
|
+
_ser, _no_match = serialize_recall_response(
|
|
1041
|
+
response,
|
|
1042
|
+
limit=args.limit,
|
|
1043
|
+
per_fact_max=getattr(_rc, "recall_per_fact_max_chars", 2400),
|
|
1044
|
+
total_max=getattr(_rc, "recall_total_max_chars", 12000),
|
|
1045
|
+
full=getattr(args, "full", False),
|
|
1046
|
+
)
|
|
1047
|
+
|
|
1033
1048
|
if use_json:
|
|
1034
1049
|
from superlocalmemory.cli.json_output import json_print
|
|
1035
1050
|
items = []
|
|
1036
|
-
for
|
|
1051
|
+
for d in _ser:
|
|
1037
1052
|
item = {
|
|
1038
|
-
"fact_id":
|
|
1039
|
-
"score": round(
|
|
1053
|
+
"fact_id": d["fact_id"], "content": d["content"],
|
|
1054
|
+
"score": round(d["score"], 3),
|
|
1040
1055
|
}
|
|
1041
|
-
if
|
|
1042
|
-
item["channel_scores"] = {k: round(v, 3) for k, v in
|
|
1056
|
+
if d.get("channel_scores"):
|
|
1057
|
+
item["channel_scores"] = {k: round(v, 3) for k, v in d["channel_scores"].items()}
|
|
1058
|
+
if d.get("truncated"):
|
|
1059
|
+
item["truncated"] = True
|
|
1060
|
+
if d.get("stub"):
|
|
1061
|
+
item["stub"] = True
|
|
1043
1062
|
items.append(item)
|
|
1044
1063
|
json_print("recall", data={
|
|
1045
1064
|
"results": items, "count": len(items),
|
|
1046
1065
|
"query_type": getattr(response, "query_type", "unknown"),
|
|
1066
|
+
"no_confident_match": _no_match,
|
|
1047
1067
|
}, next_actions=[
|
|
1048
1068
|
{"command": "slm list --json", "description": "List recent memories"},
|
|
1049
1069
|
])
|
|
@@ -1055,11 +1075,11 @@ def cmd_recall(args: Namespace) -> None:
|
|
|
1055
1075
|
except Exception:
|
|
1056
1076
|
pass
|
|
1057
1077
|
|
|
1058
|
-
if not
|
|
1059
|
-
print("No memories found.")
|
|
1078
|
+
if not _ser:
|
|
1079
|
+
print("No confident match." if _no_match else "No memories found.")
|
|
1060
1080
|
return
|
|
1061
|
-
for i,
|
|
1062
|
-
print(f" {i}. [{
|
|
1081
|
+
for i, d in enumerate(_ser, 1):
|
|
1082
|
+
print(f" {i}. [{d['score']:.2f}] {d['content']}")
|
|
1063
1083
|
|
|
1064
1084
|
|
|
1065
1085
|
def _cli_record_signals(config, query, results):
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# Copyright (c) 2026 Varun Pratap Bhardwaj / Qualixar
|
|
2
|
+
# Licensed under AGPL-3.0-or-later - see LICENSE file
|
|
3
|
+
# Part of SuperLocalMemory V3 — Core Block Hygiene (v3.6.6)
|
|
4
|
+
|
|
5
|
+
"""Core Memory Block hygiene helpers (v3.6.6 F-5).
|
|
6
|
+
|
|
7
|
+
Three pure functions used by the block compiler:
|
|
8
|
+
- dedupe_block_content: normalized-line dedup within a block
|
|
9
|
+
- filter_low_quality_block_facts: drop is_low_quality facts
|
|
10
|
+
- compile_block_content: full compile pipeline (filter + dedup + cap)
|
|
11
|
+
|
|
12
|
+
Also exports: _recompile_core_blocks — the hook called by MaintenanceScheduler.
|
|
13
|
+
|
|
14
|
+
These are pure functions (no I/O). All I/O lives in the scheduler / consolidation
|
|
15
|
+
engine that calls them.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
from __future__ import annotations
|
|
19
|
+
|
|
20
|
+
import logging
|
|
21
|
+
|
|
22
|
+
logger = logging.getLogger(__name__)
|
|
23
|
+
|
|
24
|
+
_BLOCK_SEPARATOR = "\n---\n"
|
|
25
|
+
_PLACEHOLDER = "No data available."
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
# ---------------------------------------------------------------------------
|
|
29
|
+
# dedupe_block_content
|
|
30
|
+
# ---------------------------------------------------------------------------
|
|
31
|
+
|
|
32
|
+
def dedupe_block_content(lines: list[str]) -> list[str]:
|
|
33
|
+
"""Remove duplicate and empty lines from a block content line-list.
|
|
34
|
+
|
|
35
|
+
Normalization: lowercased, whitespace-collapsed.
|
|
36
|
+
Order is preserved; only the FIRST occurrence is kept.
|
|
37
|
+
|
|
38
|
+
Returns a new list — never mutates input.
|
|
39
|
+
"""
|
|
40
|
+
seen: set[str] = set()
|
|
41
|
+
result: list[str] = []
|
|
42
|
+
for line in lines:
|
|
43
|
+
stripped = line.strip()
|
|
44
|
+
if not stripped:
|
|
45
|
+
continue
|
|
46
|
+
key = " ".join(stripped.lower().split())
|
|
47
|
+
if key in seen:
|
|
48
|
+
continue
|
|
49
|
+
seen.add(key)
|
|
50
|
+
result.append(line)
|
|
51
|
+
return result
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
# ---------------------------------------------------------------------------
|
|
55
|
+
# filter_low_quality_block_facts
|
|
56
|
+
# ---------------------------------------------------------------------------
|
|
57
|
+
|
|
58
|
+
def filter_low_quality_block_facts(facts: list[dict]) -> list[dict]:
|
|
59
|
+
"""Filter fact dicts whose content is low-quality or prompt-template.
|
|
60
|
+
|
|
61
|
+
Delegates to injection.is_low_quality and injection.is_prompt_template.
|
|
62
|
+
Returns a new list — never mutates input.
|
|
63
|
+
"""
|
|
64
|
+
try:
|
|
65
|
+
from superlocalmemory.core.injection import is_low_quality, is_prompt_template
|
|
66
|
+
except Exception:
|
|
67
|
+
return list(facts)
|
|
68
|
+
|
|
69
|
+
result: list[dict] = []
|
|
70
|
+
for f in facts:
|
|
71
|
+
content = f.get("content", "") or ""
|
|
72
|
+
if is_low_quality(content):
|
|
73
|
+
continue
|
|
74
|
+
if is_prompt_template(content):
|
|
75
|
+
continue
|
|
76
|
+
result.append(f)
|
|
77
|
+
return result
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
# ---------------------------------------------------------------------------
|
|
81
|
+
# compile_block_content
|
|
82
|
+
# ---------------------------------------------------------------------------
|
|
83
|
+
|
|
84
|
+
def compile_block_content(
|
|
85
|
+
facts: list[dict],
|
|
86
|
+
max_chars: int = 2000,
|
|
87
|
+
) -> str:
|
|
88
|
+
"""Compile facts into block content with hygiene and char cap.
|
|
89
|
+
|
|
90
|
+
Pipeline:
|
|
91
|
+
1. filter_low_quality_block_facts
|
|
92
|
+
2. Extract content lines from each fact (split by newline / separator)
|
|
93
|
+
3. dedupe_block_content across all lines
|
|
94
|
+
4. Join with separator, truncate to max_chars
|
|
95
|
+
|
|
96
|
+
Returns a string ≤ max_chars. Returns empty string if all facts filtered.
|
|
97
|
+
"""
|
|
98
|
+
clean_facts = filter_low_quality_block_facts(facts)
|
|
99
|
+
if not clean_facts:
|
|
100
|
+
return ""
|
|
101
|
+
|
|
102
|
+
all_lines: list[str] = []
|
|
103
|
+
for f in clean_facts:
|
|
104
|
+
content = (f.get("content") or "").strip()
|
|
105
|
+
if not content:
|
|
106
|
+
continue
|
|
107
|
+
# Split by separator or newline to treat each line independently
|
|
108
|
+
for line in content.replace(_BLOCK_SEPARATOR, "\n").split("\n"):
|
|
109
|
+
all_lines.append(line)
|
|
110
|
+
|
|
111
|
+
deduped = dedupe_block_content(all_lines)
|
|
112
|
+
if not deduped:
|
|
113
|
+
return ""
|
|
114
|
+
|
|
115
|
+
joined = _BLOCK_SEPARATOR.join(deduped)
|
|
116
|
+
return joined[:max_chars]
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
# ---------------------------------------------------------------------------
|
|
120
|
+
# _recompile_core_blocks — scheduler hook (F-5 daily recompile)
|
|
121
|
+
# ---------------------------------------------------------------------------
|
|
122
|
+
|
|
123
|
+
def _recompile_core_blocks(
|
|
124
|
+
db,
|
|
125
|
+
config,
|
|
126
|
+
profile_id: str,
|
|
127
|
+
) -> dict:
|
|
128
|
+
"""Recompile core memory blocks with hygiene applied.
|
|
129
|
+
|
|
130
|
+
Called by MaintenanceScheduler._run() on the daily cycle.
|
|
131
|
+
Delegates to ConsolidationEngine.compile_core_blocks_mode_a() with
|
|
132
|
+
the hygiene improvements applied at the _facts_to_content step.
|
|
133
|
+
|
|
134
|
+
Returns a dict with stats: {blocks_compiled, profile_id}.
|
|
135
|
+
"""
|
|
136
|
+
try:
|
|
137
|
+
from superlocalmemory.core.consolidation_engine import ConsolidationEngine
|
|
138
|
+
engine = ConsolidationEngine(db=db, config=config.consolidation)
|
|
139
|
+
result = engine.compile_core_blocks_mode_a(profile_id)
|
|
140
|
+
logger.info(
|
|
141
|
+
"Daily core-block recompile: profile=%s blocks=%s",
|
|
142
|
+
profile_id, result.get("blocks_compiled", 0),
|
|
143
|
+
)
|
|
144
|
+
return {**result, "profile_id": profile_id}
|
|
145
|
+
except Exception as exc:
|
|
146
|
+
logger.warning("Core-block recompile failed: %s", exc)
|
|
147
|
+
return {"blocks_compiled": 0, "profile_id": profile_id, "error": str(exc)}
|
|
@@ -197,6 +197,17 @@ class RetrievalConfig:
|
|
|
197
197
|
# Used by s19_runner for ablation experiments. Empty = all channels active.
|
|
198
198
|
disabled_channels: list[str] = field(default_factory=list)
|
|
199
199
|
|
|
200
|
+
# v3.6.6: Evidence floor — gate on per-channel scores, not fused/RRF score.
|
|
201
|
+
# Nonsense queries earn 0.0 on every primary channel; real matches earn
|
|
202
|
+
# semantic >= 0.85 or bm25 > 0. The discriminator is earned channel evidence.
|
|
203
|
+
# Env kill-switch: SLM_RECALL_NO_FLOOR=1 disables without release.
|
|
204
|
+
evidence_floor_enabled: bool = True
|
|
205
|
+
min_semantic_evidence: float = 0.60 # Minimum cosine similarity to keep a result
|
|
206
|
+
|
|
207
|
+
# v3.6.6: Recall output budget — protect consuming agents from 585KB responses.
|
|
208
|
+
recall_per_fact_max_chars: int = 2400 # ~600 tokens; head 70% + tail 30%
|
|
209
|
+
recall_total_max_chars: int = 12000 # ~3K tokens; stubs beyond this
|
|
210
|
+
|
|
200
211
|
|
|
201
212
|
# ---------------------------------------------------------------------------
|
|
202
213
|
# Math Config
|
|
@@ -233,6 +244,30 @@ class MathConfig:
|
|
|
233
244
|
# Rate-Distortion (production only, disabled for benchmarks)
|
|
234
245
|
|
|
235
246
|
|
|
247
|
+
# ---------------------------------------------------------------------------
|
|
248
|
+
# Store Config (v3.6.6)
|
|
249
|
+
# ---------------------------------------------------------------------------
|
|
250
|
+
|
|
251
|
+
@dataclass(frozen=True)
|
|
252
|
+
class StoreConfig:
|
|
253
|
+
"""Configuration for the remember/store write path (v3.6.6).
|
|
254
|
+
|
|
255
|
+
Ingest gate: protect the DB from oversized facts and prompt-template
|
|
256
|
+
pollution. Defaults ON; env kill-switch SLM_INGEST_NO_GATE=1.
|
|
257
|
+
"""
|
|
258
|
+
|
|
259
|
+
# Max chars for the FACT content stored in atomic_facts.content.
|
|
260
|
+
# Content above this is clamped to head 70% + tail 30% + truncation marker.
|
|
261
|
+
# The FULL original is preserved in the memories table row. Set high (24K
|
|
262
|
+
# ≈ 6K tokens) so only pathological pastes are touched; normal dense
|
|
263
|
+
# session-handoff memories (6-15K chars) are stored 100% intact.
|
|
264
|
+
max_verbatim_chars: int = 24000
|
|
265
|
+
|
|
266
|
+
# Hard upper bound in bytes. Content above this is rejected outright.
|
|
267
|
+
# Nobody's "memory" is a megabyte (MCP: success=False, HTTP: 413).
|
|
268
|
+
max_ingest_bytes: int = 1_048_576 # 1 MB
|
|
269
|
+
|
|
270
|
+
|
|
236
271
|
# ---------------------------------------------------------------------------
|
|
237
272
|
# Context Injection (v3.4.65)
|
|
238
273
|
# ---------------------------------------------------------------------------
|
|
@@ -658,6 +693,7 @@ class SLMConfig:
|
|
|
658
693
|
default_factory=ParameterizationConfig,
|
|
659
694
|
)
|
|
660
695
|
injection: InjectionConfig = field(default_factory=InjectionConfig)
|
|
696
|
+
store: StoreConfig = field(default_factory=StoreConfig)
|
|
661
697
|
# v3.5.0: scaling backends — "sqlite" / "cozo" / "auto" / "lancedb" / "sqlite-vec" / "auto".
|
|
662
698
|
graph_backend: str = "auto" # "auto" = cozo if pycozo installed, else sqlite
|
|
663
699
|
vector_backend: str = "auto" # "auto" = lancedb if installed, else sqlite-vec
|
{superlocalmemory-3.6.5 → superlocalmemory-3.6.7}/src/superlocalmemory/core/consolidation_engine.py
RENAMED
|
@@ -808,22 +808,25 @@ class ConsolidationEngine:
|
|
|
808
808
|
def _facts_to_content(
|
|
809
809
|
self, facts: list[dict], char_limit: int,
|
|
810
810
|
) -> str:
|
|
811
|
-
"""
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
811
|
+
"""Compile fact contents into a block with hygiene (v3.6.6 F-5).
|
|
812
|
+
|
|
813
|
+
Filters low-quality/template facts, dedupes lines WITHIN the block
|
|
814
|
+
(fixes the "same fixture ×5" core-block bug), caps at char_limit.
|
|
815
|
+
"""
|
|
816
|
+
from superlocalmemory.core.block_hygiene import compile_block_content
|
|
817
|
+
compiled = compile_block_content(facts, max_chars=char_limit)
|
|
818
|
+
return compiled if compiled else "No data available."
|
|
815
819
|
|
|
816
820
|
def _rows_to_content(
|
|
817
821
|
self, rows: list | None, char_limit: int,
|
|
818
822
|
) -> str:
|
|
819
|
-
"""Convert DB rows to content string."""
|
|
823
|
+
"""Convert DB rows to a hygienic block content string (v3.6.6 F-5)."""
|
|
820
824
|
if not rows:
|
|
821
825
|
return "No data available."
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
return joined[:char_limit] if joined else "No data available."
|
|
826
|
+
from superlocalmemory.core.block_hygiene import compile_block_content
|
|
827
|
+
facts = [dict(r) for r in rows]
|
|
828
|
+
compiled = compile_block_content(facts, max_chars=char_limit)
|
|
829
|
+
return compiled if compiled else "No data available."
|
|
827
830
|
|
|
828
831
|
def _compile_behavioral_block(
|
|
829
832
|
self, profile_id: str, char_limit: int,
|
|
@@ -430,6 +430,25 @@ class MemoryEngine:
|
|
|
430
430
|
return []
|
|
431
431
|
except Exception:
|
|
432
432
|
pass
|
|
433
|
+
# v3.6.6 ingest gate: reject 1MB monsters + prompt-template pollution;
|
|
434
|
+
# clamp the searchable FACT copy (head+tail) while the memories row keeps
|
|
435
|
+
# the FULL original. Embedding/BM25 use the clamped copy so a 167KB paste
|
|
436
|
+
# never produces a garbage vector. Env kill-switch: SLM_INGEST_NO_GATE=1.
|
|
437
|
+
fact_text = content
|
|
438
|
+
try:
|
|
439
|
+
from superlocalmemory.core.ingest_gate import apply_ingest_gate
|
|
440
|
+
_sc = getattr(self._config, "store", None)
|
|
441
|
+
gate = apply_ingest_gate(
|
|
442
|
+
content,
|
|
443
|
+
max_verbatim_chars=getattr(_sc, "max_verbatim_chars", 24000),
|
|
444
|
+
max_ingest_bytes=getattr(_sc, "max_ingest_bytes", 1_048_576),
|
|
445
|
+
)
|
|
446
|
+
if gate.rejected:
|
|
447
|
+
logger.debug("store_fast ingest gate rejected: %s", gate.rejection_reason)
|
|
448
|
+
return []
|
|
449
|
+
fact_text = gate.fact_content
|
|
450
|
+
except ImportError:
|
|
451
|
+
pass # gate module missing → store verbatim (never block a write)
|
|
433
452
|
now = datetime.now(timezone.utc).isoformat()
|
|
434
453
|
record = MemoryRecord(
|
|
435
454
|
profile_id=self._profile_id, content=content,
|
|
@@ -440,8 +459,8 @@ class MemoryEngine:
|
|
|
440
459
|
# the entity_graph channel has something to work with before enrichment.
|
|
441
460
|
ents = sorted(
|
|
442
461
|
{m.group(1) for m in _re.finditer(
|
|
443
|
-
r"\b([A-Z][a-z]+(?:\s[A-Z][a-z]+){0,3})\b",
|
|
444
|
-
| {m.group(1) for m in _re.finditer(r"\b([A-Z]{2,})\b",
|
|
462
|
+
r"\b([A-Z][a-z]+(?:\s[A-Z][a-z]+){0,3})\b", fact_text)}
|
|
463
|
+
| {m.group(1) for m in _re.finditer(r"\b([A-Z]{2,})\b", fact_text)}
|
|
445
464
|
)
|
|
446
465
|
# v3.5.5: compute the embedding SYNCHRONOUSLY. A single warm embed is
|
|
447
466
|
# ~22ms (the 30-180s of full store() was LLM fact-extraction + graph,
|
|
@@ -452,14 +471,14 @@ class MemoryEngine:
|
|
|
452
471
|
emb = None
|
|
453
472
|
fmean = fvar = None
|
|
454
473
|
try:
|
|
455
|
-
emb = self._embedder.embed(
|
|
474
|
+
emb = self._embedder.embed(fact_text) if self._embedder else None
|
|
456
475
|
if emb:
|
|
457
476
|
fmean, fvar = self._embedder.compute_fisher_params(emb)
|
|
458
477
|
except Exception:
|
|
459
478
|
emb = None
|
|
460
479
|
fact = AtomicFact(
|
|
461
480
|
fact_id=_uuid.uuid4().hex[:16], memory_id=record.memory_id,
|
|
462
|
-
profile_id=self._profile_id, content=
|
|
481
|
+
profile_id=self._profile_id, content=fact_text,
|
|
463
482
|
fact_type=FactType.EPISODIC, entities=ents,
|
|
464
483
|
observation_date=now[:10], confidence=0.7, importance=0.5,
|
|
465
484
|
embedding=emb, fisher_mean=fmean, fisher_variance=fvar,
|
|
@@ -477,7 +496,7 @@ class MemoryEngine:
|
|
|
477
496
|
try:
|
|
478
497
|
bm25 = getattr(self._retrieval_engine, "_bm25", None)
|
|
479
498
|
if bm25:
|
|
480
|
-
bm25.add(fact.fact_id,
|
|
499
|
+
bm25.add(fact.fact_id, fact_text, self._profile_id)
|
|
481
500
|
except Exception:
|
|
482
501
|
pass
|
|
483
502
|
return [fact.fact_id]
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# Copyright (c) 2026 Varun Pratap Bhardwaj / Qualixar
|
|
2
|
+
# Licensed under AGPL-3.0-or-later - see LICENSE file
|
|
3
|
+
# Part of SuperLocalMemory V3 — Ingest Gate (v3.6.6)
|
|
4
|
+
|
|
5
|
+
"""Ingest gate for the remember/store write path (v3.6.6 F-4).
|
|
6
|
+
|
|
7
|
+
Responsibilities:
|
|
8
|
+
1. Hard reject content > 1MB (nobody's memory is a megabyte).
|
|
9
|
+
2. Clamp content > 24000 chars to head 70% + tail 30% + truncation marker.
|
|
10
|
+
Head+tail (not head-only) preserves OPEN ITEMS that session-close facts put
|
|
11
|
+
at the END. Only pathological pastes (167KB JSON, 50KB logs) are touched;
|
|
12
|
+
normal dense memories (6-15K session handoffs) pass through intact.
|
|
13
|
+
Full original preserved in result.full_content for storage in memories table.
|
|
14
|
+
3. Prompt-template firewall: reject content matching _PROMPT_TEMPLATE_PATTERNS
|
|
15
|
+
(extends v3.6.4 remember-write-02 quality gate).
|
|
16
|
+
|
|
17
|
+
Kill-switch: SLM_INGEST_NO_GATE=1 bypasses rules 2 and 3 (but NOT the 1MB hard cap).
|
|
18
|
+
|
|
19
|
+
Usage::
|
|
20
|
+
from superlocalmemory.core.ingest_gate import apply_ingest_gate
|
|
21
|
+
result = apply_ingest_gate(content)
|
|
22
|
+
if result.rejected:
|
|
23
|
+
return {"success": False, "error": result.rejection_reason}
|
|
24
|
+
store(result.fact_content, full_content=result.full_content)
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
from __future__ import annotations
|
|
28
|
+
|
|
29
|
+
import os
|
|
30
|
+
from dataclasses import dataclass, field
|
|
31
|
+
|
|
32
|
+
# v3.6.6: clamp only pathological monsters; preserve normal dense memories.
|
|
33
|
+
# 24K chars ≈ 6K tokens — well beyond any legitimate single memory.
|
|
34
|
+
_MAX_VERBATIM_CHARS = 24000
|
|
35
|
+
_HEAD_FRACTION = 0.70 # head 70% + tail 30% so OPEN ITEMS at the end survive
|
|
36
|
+
_MAX_INGEST_BYTES = 1_048_576 # 1MB — hard cap, NOT bypassed by kill-switch
|
|
37
|
+
_TRUNCATION_MARKER = "\n…[content truncated at ingest; full text in source memory]…\n"
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@dataclass
|
|
41
|
+
class IngestGateResult:
|
|
42
|
+
"""Result of applying the ingest gate to content.
|
|
43
|
+
|
|
44
|
+
fact_content: Content to store in atomic_facts.content (may be truncated).
|
|
45
|
+
full_content: Original unmodified content (for memories table storage).
|
|
46
|
+
rejected: True if content should be rejected outright.
|
|
47
|
+
rejection_reason: Human-readable reason for rejection (when rejected=True).
|
|
48
|
+
truncated: True if fact_content was head-sliced.
|
|
49
|
+
"""
|
|
50
|
+
fact_content: str
|
|
51
|
+
full_content: str
|
|
52
|
+
rejected: bool = False
|
|
53
|
+
rejection_reason: str = ""
|
|
54
|
+
truncated: bool = False
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def apply_ingest_gate(
|
|
58
|
+
content: str,
|
|
59
|
+
max_verbatim_chars: int = _MAX_VERBATIM_CHARS,
|
|
60
|
+
max_ingest_bytes: int = _MAX_INGEST_BYTES,
|
|
61
|
+
) -> IngestGateResult:
|
|
62
|
+
"""Apply the ingest quality gate to content before storing.
|
|
63
|
+
|
|
64
|
+
Returns IngestGateResult. Callers MUST check result.rejected before
|
|
65
|
+
proceeding with storage.
|
|
66
|
+
|
|
67
|
+
Kill-switch SLM_INGEST_NO_GATE=1 bypasses the verbatim size clamp and
|
|
68
|
+
template firewall but NOT the 1MB hard cap (safety boundary).
|
|
69
|
+
"""
|
|
70
|
+
gate_active = os.environ.get("SLM_INGEST_NO_GATE", "0") != "1"
|
|
71
|
+
|
|
72
|
+
# --- Hard cap: 1MB regardless of kill-switch ---
|
|
73
|
+
try:
|
|
74
|
+
byte_len = len(content.encode("utf-8", errors="replace"))
|
|
75
|
+
except Exception:
|
|
76
|
+
byte_len = len(content)
|
|
77
|
+
if byte_len > max_ingest_bytes:
|
|
78
|
+
return IngestGateResult(
|
|
79
|
+
fact_content=content,
|
|
80
|
+
full_content=content,
|
|
81
|
+
rejected=True,
|
|
82
|
+
rejection_reason=(
|
|
83
|
+
f"Content size {byte_len} bytes exceeds maximum "
|
|
84
|
+
f"{max_ingest_bytes} bytes (1MB). "
|
|
85
|
+
"Nobody's memory is a megabyte."
|
|
86
|
+
),
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
# --- Gate bypassed ---
|
|
90
|
+
if not gate_active:
|
|
91
|
+
return IngestGateResult(
|
|
92
|
+
fact_content=content,
|
|
93
|
+
full_content=content,
|
|
94
|
+
rejected=False,
|
|
95
|
+
truncated=False,
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
# --- Prompt-template firewall ---
|
|
99
|
+
# Extends the v3.6.4 remember-write-02 quality gate.
|
|
100
|
+
try:
|
|
101
|
+
from superlocalmemory.core.injection import is_prompt_template
|
|
102
|
+
if is_prompt_template(content):
|
|
103
|
+
return IngestGateResult(
|
|
104
|
+
fact_content=content,
|
|
105
|
+
full_content=content,
|
|
106
|
+
rejected=True,
|
|
107
|
+
rejection_reason=(
|
|
108
|
+
"Content matches internal prompt-template patterns "
|
|
109
|
+
"(low-quality gate). Prompt machinery must not be stored as memory."
|
|
110
|
+
),
|
|
111
|
+
)
|
|
112
|
+
except Exception:
|
|
113
|
+
pass # Defensive: gate failure must never block a store
|
|
114
|
+
|
|
115
|
+
# --- Verbatim size clamp (head 70% + tail 30%) ---
|
|
116
|
+
if len(content) > max_verbatim_chars:
|
|
117
|
+
budget = max_verbatim_chars - len(_TRUNCATION_MARKER)
|
|
118
|
+
head_len = int(budget * _HEAD_FRACTION)
|
|
119
|
+
tail_len = budget - head_len
|
|
120
|
+
fact_content = content[:head_len] + _TRUNCATION_MARKER + content[-tail_len:]
|
|
121
|
+
return IngestGateResult(
|
|
122
|
+
fact_content=fact_content,
|
|
123
|
+
full_content=content,
|
|
124
|
+
rejected=False,
|
|
125
|
+
truncated=True,
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
return IngestGateResult(
|
|
129
|
+
fact_content=content,
|
|
130
|
+
full_content=content,
|
|
131
|
+
rejected=False,
|
|
132
|
+
truncated=False,
|
|
133
|
+
)
|