superlocalmemory 3.6.9__tar.gz → 3.6.10__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.9/src/superlocalmemory.egg-info → superlocalmemory-3.6.10}/PKG-INFO +10 -5
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/README.md +8 -4
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/pyproject.toml +6 -1
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/__init__.py +6 -2
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/cli/compress_cmd.py +32 -70
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/cli/optimize_cmd.py +1 -3
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/cli/setup_wizard.py +49 -0
- superlocalmemory-3.6.10/src/superlocalmemory/mcp/agent_context.py +111 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/mcp/tools_active.py +7 -8
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/mcp/tools_core.py +16 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/cache/boundary_store.py +23 -9
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/cache/exact.py +7 -4
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/cache/key_builder.py +13 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/cache/manager.py +70 -8
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/cache/semantic.py +10 -5
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/compress/prose_llmlingua.py +1 -7
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/compress/router.py +82 -87
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/config/__init__.py +16 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/config/defaults.py +1 -6
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/config/schema.py +2 -19
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/config/store.py +15 -1
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/metrics/counters.py +15 -7
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/proxy/_helpers.py +100 -2
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/proxy/anthropic_surface.py +12 -0
- superlocalmemory-3.6.10/src/superlocalmemory/optimize/proxy/capture.py +243 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/proxy/gemini_surface.py +31 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/proxy/openai_surface.py +12 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/proxy/server.py +29 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/storage/db.py +78 -11
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/storage/schema.py +11 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/routes/optimize.py +6 -8
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/unified_daemon.py +26 -5
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/index.html +18 -14
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/auto-settings.js +3 -1
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/ng-shell.js +3 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/optimize.js +9 -9
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10/src/superlocalmemory.egg-info}/PKG-INFO +10 -5
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory.egg-info/SOURCES.txt +2 -2
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory.egg-info/requires.txt +1 -0
- superlocalmemory-3.6.9/src/superlocalmemory/optimize/compress/extractive_code.py +0 -311
- superlocalmemory-3.6.9/src/superlocalmemory/optimize/compress/extractive_json.py +0 -72
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/AUTHORS.md +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/LICENSE +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/NOTICE +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/setup.cfg +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/attribution/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/attribution/mathematical_dna.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/attribution/signer.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/attribution/watermark.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/cli/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/cli/cache_cmd.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/cli/commands.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/cli/context_commands.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/cli/daemon.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/cli/db_migrate.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/cli/doctor_cmd.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/cli/escape_hatch.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/cli/help_cmd.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/cli/ingest_cmd.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/cli/json_output.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/cli/main.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/cli/migrate_cmd.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/cli/optimize_constants.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/cli/pending_store.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/cli/post_install.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/cli/proxy_cmd.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/cli/service_installer.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/cli/version_banner.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/cli/wizard_v3426_options.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/code_graph/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/code_graph/blast_radius.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/code_graph/bridge/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/code_graph/bridge/entity_resolver.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/code_graph/bridge/event_listeners.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/code_graph/bridge/fact_enricher.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/code_graph/bridge/hebbian_linker.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/code_graph/bridge/temporal_checker.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/code_graph/changes.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/code_graph/communities.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/code_graph/config.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/code_graph/database.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/code_graph/extractors/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/code_graph/extractors/python.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/code_graph/extractors/typescript.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/code_graph/flows.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/code_graph/git_hooks.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/code_graph/graph_engine.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/code_graph/graph_store.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/code_graph/incremental.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/code_graph/models.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/code_graph/parser.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/code_graph/resolver.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/code_graph/search.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/code_graph/service.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/code_graph/watcher.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/compliance/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/compliance/abac.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/compliance/audit.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/compliance/eu_ai_act.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/compliance/gdpr.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/compliance/lifecycle.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/compliance/retention.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/compliance/scheduler.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/backend_orchestrator.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/block_hygiene.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/clock_monitor.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/config.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/consolidation_engine.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/context_cache.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/db_pool.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/embedding_worker.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/embeddings.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/engine.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/engine_capabilities.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/engine_lock.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/engine_wiring.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/error_catalog.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/error_envelope.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/fact_consolidator.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/file_lock.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/graph_analyzer.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/graph_pruner.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/health_monitor.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/hooks.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/ingest_gate.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/injection.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/loop_watchdog.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/maintenance.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/maintenance_scheduler.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/mcp_embedder_proxy.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/modes.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/ollama_embedder.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/platform_utils.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/priority_queue.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/profiles.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/pruning_engine.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/queue_consumer.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/queue_dispatcher.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/ram_lock.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/rate_limit.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/recall_gate.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/recall_pipeline.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/recall_queue.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/recall_worker.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/registry.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/reranker_worker.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/safe_fs.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/security_primitives.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/shadow_router.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/slm_disabled.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/slmignore.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/store_pipeline.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/summarizer.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/tier_manager.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/topic_signature.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/core/worker_pool.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/dynamics/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/dynamics/activation_guided_quantization.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/dynamics/eap_scheduler.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/dynamics/ebbinghaus_langevin_coupling.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/dynamics/fisher_langevin_coupling.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/encoding/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/encoding/auto_linker.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/encoding/cognitive_consolidator.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/encoding/consolidator.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/encoding/context_generator.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/encoding/emotional.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/encoding/entity_resolver.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/encoding/entropy_gate.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/encoding/fact_extractor.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/encoding/foresight.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/encoding/graph_builder.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/encoding/observation_builder.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/encoding/scene_builder.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/encoding/signal_inference.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/encoding/temporal_parser.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/encoding/temporal_validator.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/encoding/type_router.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/evolution/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/evolution/blind_verifier.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/evolution/budget.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/evolution/evolution_store.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/evolution/llm_dispatch.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/evolution/mutation_generator.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/evolution/skill_evolver.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/evolution/triggers.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/evolution/types.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/graph/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/graph/cozo_backend.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/hooks/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/hooks/_outcome_common.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/hooks/adapter_base.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/hooks/antigravity_adapter.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/hooks/auto_capture.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/hooks/auto_invoker.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/hooks/auto_parameterize.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/hooks/auto_recall.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/hooks/auto_recall_hook.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/hooks/before_web_hook.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/hooks/claude_code_hooks.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/hooks/context_payload.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/hooks/copilot_adapter.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/hooks/cross_platform_connector.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/hooks/cursor_adapter.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/hooks/hook_daemon.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/hooks/hook_handlers.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/hooks/ide_connector.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/hooks/post_tool_async_hook.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/hooks/post_tool_outcome_hook.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/hooks/prewarm_auth.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/hooks/rules_engine.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/hooks/session_registry.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/hooks/stop_outcome_hook.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/hooks/sync_loop.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/hooks/topic_shift_hook.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/hooks/user_prompt_hook.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/hooks/user_prompt_rehash_hook.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/infra/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/infra/auth_middleware.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/infra/backup.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/infra/cache_manager.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/infra/cloud_backup.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/infra/event_bus.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/infra/heartbeat_monitor.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/infra/pid_manager.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/infra/process_reaper.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/infra/rate_limiter.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/infra/webhook_dispatcher.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ingestion/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ingestion/adapter_manager.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ingestion/base_adapter.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ingestion/calendar_adapter.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ingestion/credentials.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ingestion/gmail_adapter.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ingestion/parsers.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ingestion/transcript_adapter.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/adaptive.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/arm_catalog.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/assertion_miner.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/bandit.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/bandit_cache.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/behavioral.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/behavioral_listener.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/bootstrap.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/consolidation_cycle.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/consolidation_quantization_worker.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/consolidation_worker.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/cross_project.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/database.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/dedup_hnsw.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/engagement.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/ensemble.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/entity_compiler.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/fact_outcome_joins.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/features.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/feedback.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/forgetting_scheduler.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/hnsw_dedup.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/labeler.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/legacy_migration.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/lightgbm_subprocess.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/memory_merge.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/model_cache.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/model_rollback.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/outcome_queue.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/outcomes.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/pattern_miner.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/pattern_miner_constants.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/project_context.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/quantization_scheduler.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/ranker.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/ranker_common.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/ranker_retrain_legacy.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/ranker_retrain_online.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/reward.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/reward_archive.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/reward_boost.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/reward_proxy.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/shadow_test.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/signal_worker.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/signals.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/skill_performance_miner.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/source_quality.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/trigram_index.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/learning/workflows.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/llm/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/llm/backbone.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/math/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/math/ebbinghaus.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/math/fisher.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/math/fisher_quantized.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/math/hopfield.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/math/langevin.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/math/polar_quant.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/math/qjl.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/math/sheaf.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/math/turbo_quant.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/mcp/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/mcp/_daemon_proxy.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/mcp/_pool_adapter.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/mcp/_stdin_guard.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/mcp/resources.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/mcp/server.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/mcp/shared.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/mcp/tools.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/mcp/tools_code_graph.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/mcp/tools_context.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/mcp/tools_evolution.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/mcp/tools_learning.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/mcp/tools_mesh.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/mcp/tools_v28.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/mcp/tools_v3.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/mcp/tools_v33.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/mesh/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/mesh/broker.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/mesh/remote_sync.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/migrations/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/migrations/v3_4_25_to_v3_4_26.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/adapters/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/adapters/_agent_registry.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/adapters/anthropic_adapter.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/adapters/openai_adapter.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/adapters/wrap.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/cache/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/cache/centroid_store.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/cache/context_key.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/cache/invalidation.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/cache/stampede.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/compress/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/compress/align.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/compress/ccr.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/metrics/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/metrics/estimator.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/metrics/exporters.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/metrics/persistence.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/proxy/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/proxy/lifecycle.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/optimize/storage/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/parameterization/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/parameterization/pattern_extractor.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/parameterization/pii_filter.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/parameterization/prompt_injector.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/parameterization/prompt_lifecycle.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/parameterization/soft_prompt_generator.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/retrieval/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/retrieval/agentic.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/retrieval/ann_index.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/retrieval/bm25_channel.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/retrieval/bridge_discovery.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/retrieval/channel_registry.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/retrieval/engine.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/retrieval/entity_channel.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/retrieval/forgetting_filter.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/retrieval/fusion.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/retrieval/hopfield_channel.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/retrieval/profile_channel.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/retrieval/quantization_aware_search.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/retrieval/reranker.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/retrieval/semantic_channel.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/retrieval/spreading_activation.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/retrieval/strategy.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/retrieval/temporal_channel.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/retrieval/vector_store.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/api.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/bandit_loops.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/middleware/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/middleware/security_headers.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/recall_health.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/recall_serializer.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/routes/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/routes/adapters.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/routes/agents.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/routes/backup.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/routes/behavioral.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/routes/brain.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/routes/chat.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/routes/compliance.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/routes/data_io.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/routes/entity.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/routes/events.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/routes/evolution.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/routes/helpers.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/routes/ingest.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/routes/insights.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/routes/learning.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/routes/lifecycle.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/routes/memories.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/routes/mesh.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/routes/prewarm.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/routes/profiles.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/routes/stats.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/routes/tiers.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/routes/timeline.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/routes/token.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/routes/v3_api.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/routes/ws.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/security_middleware.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/server/ui.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/skills/slm-build-graph/SKILL.md +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/skills/slm-list-recent/SKILL.md +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/skills/slm-recall/SKILL.md +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/skills/slm-remember/SKILL.md +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/skills/slm-show-patterns/SKILL.md +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/skills/slm-status/SKILL.md +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/skills/slm-switch-profile/SKILL.md +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/access_control.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/access_log.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/database.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/embedding_migrator.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/migration_runner.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/migration_v33.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/migrations/M001_add_signal_features_columns.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/migrations/M002_model_state_history.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/migrations/M003_migration_log.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/migrations/M004_cross_platform_sync_log.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/migrations/M005_bandit_tables.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/migrations/M006_action_outcomes_reward.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/migrations/M007_pending_outcomes.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/migrations/M009_model_lineage.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/migrations/M010_evolution_config.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/migrations/M011_archive_and_merge.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/migrations/M012_shadow_observations.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/migrations/M013_bi_temporal_columns.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/migrations/M014_v345_scale_ready.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/migrations/M015_add_pinned_column.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/migrations/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/migrations.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/models.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/quantized_store.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/schema.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/schema_code_graph.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/schema_v32.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/schema_v3410.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/schema_v3411.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/schema_v343.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/schema_v345.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/schema_v347.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/storage/v2_migrator.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/trust/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/trust/gate.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/trust/provenance.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/trust/scorer.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/trust/signals.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/css/brain.css +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/css/legacy-dashboard.css +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/css/neural-glass.css +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/agents.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/brain.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/clusters.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/compliance.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/core.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/dashboard.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/events.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/fact-detail.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/feedback.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/graph-event-bus.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/graph-filters.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/graph-ui.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/ide-status.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/init.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/knowledge-graph.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/lifecycle.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/math-health.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/memories.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/memory-chat.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/memory-timeline.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/modal.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/ng-entities.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/ng-health.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/ng-ingestion.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/ng-mesh.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/ng-skills.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/profiles.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/quick-actions.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/recall-lab.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/search.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/settings.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/timeline.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/js/trust-dashboard.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/vendor/bootstrap-icons/bootstrap-icons.css +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff2 +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/vendor/bootstrap.bundle.min.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/vendor/bootstrap.min.css +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/vendor/d3.v7.min.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/vendor/graphology-library.min.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/vendor/graphology.umd.min.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/vendor/inter-ui/inter-variable.min.css +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable-Italic.woff2 +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable.woff2 +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/ui/vendor/sigma.min.js +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/vector/__init__.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory/vector/lancedb_backend.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory.egg-info/dependency_links.txt +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory.egg-info/entry_points.txt +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/src/superlocalmemory.egg-info/top_level.txt +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/tests/test_auto_hooks.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/tests/test_before_web_hook.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/tests/test_behavioral_full.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/tests/test_claude_hooks.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/tests/test_cli_core.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/tests/test_cli_json.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/tests/test_cli_v33.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/tests/test_compliance_full.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/tests/test_config_system.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/tests/test_engine_hooks.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/tests/test_event_bus.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/tests/test_features.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/tests/test_final_locomo_mini.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/tests/test_graph_integrity.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/tests/test_hook_handlers.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/tests/test_ide_connector.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/tests/test_infra.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/tests/test_injection.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/tests/test_learning_advanced.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/tests/test_learning_collectors.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/tests/test_llm_provider.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/tests/test_mcp_server.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/tests/test_migration.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/tests/test_mode_switch_preservation.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/tests/test_post_install.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/tests/test_ranker.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/tests/test_topic_shift_hook.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/tests/test_trust_full.py +0 -0
- {superlocalmemory-3.6.9 → superlocalmemory-3.6.10}/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.10
|
|
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
|
|
@@ -58,6 +58,7 @@ Requires-Dist: huggingface_hub==0.36.2
|
|
|
58
58
|
Requires-Dist: torch==2.11.0
|
|
59
59
|
Requires-Dist: scikit-learn==1.8.0
|
|
60
60
|
Requires-Dist: sqlite-vec==0.1.9
|
|
61
|
+
Requires-Dist: llmlingua==0.2.2
|
|
61
62
|
Provides-Extra: search
|
|
62
63
|
Requires-Dist: sentence-transformers==5.3.0; extra == "search"
|
|
63
64
|
Requires-Dist: optimum==2.1.0; extra == "search"
|
|
@@ -125,18 +126,22 @@ Dynamic: license-file
|
|
|
125
126
|
<details>
|
|
126
127
|
<summary><strong>What's New in V3.6 — Optimize: SKIP, SHRINK, DISCOUNT, REMEMBER</strong> (click to expand)</summary>
|
|
127
128
|
|
|
128
|
-
> V3.6 is the only local-first layer that SKIPS repeat LLM calls (cache: 100% saved), SHRINKS prompts
|
|
129
|
+
> V3.6 is the only local-first layer that SKIPS repeat LLM calls (cache: 100% saved on a hit), SHRINKS prose prompts (compress: lossless-by-default, opt-in LLMLingua-2), and DISCOUNTS prefix costs (align: native KV-cache) — and remembers everything — in one install. **Your first cache hit pays for the install time. Hours of coding on repeat, minimal API cost.**
|
|
130
|
+
>
|
|
131
|
+
> **v3.6.10:** cache and compression are now **independent runtime switches** (cache-only, compress-only, both, or neither — toggle live from the dashboard, no restart). Compression was rebuilt to be **lossless by default** (the old string/array/code truncation is gone); aggressive mode adds LLMLingua-2 for **prose only** — never code, numbers, structured data, or the current turn.
|
|
129
132
|
|
|
130
133
|
### The Three Levers
|
|
131
134
|
|
|
132
135
|
| Lever | Mechanism | Saving | Off by default? |
|
|
133
136
|
|-------|-----------|:------:|:---------------:|
|
|
134
|
-
| **Cache** | Skip repeat calls — exact-match SQLite lookup, vCache-gated semantic (opt-in) | **100% on a hit** (input + output) | Cache ON, Semantic OFF |
|
|
135
|
-
| **Compress** | Shrink prompts —
|
|
137
|
+
| **Cache** | Skip repeat calls — exact-match SQLite lookup (zero false hits), vCache-gated semantic (opt-in) | **100% on a hit** (input + output) | Cache ON, Semantic OFF |
|
|
138
|
+
| **Compress** | Shrink prompts — **safe = lossless** normalization; **aggressive = LLMLingua-2 prose only** (opt-in) | Safe: small + lossless · Aggressive: large on prose | Safe mode, Aggressive OFF |
|
|
136
139
|
| **Align** | Stabilize prefix — maximize provider prefix-cache discounts | **Lossless extra** | ON when compression is ON |
|
|
137
140
|
|
|
138
141
|
**Memory** (v3.5's existing engine) runs in parallel — it shapes *what is in* the prompt (relevant facts); Optimize decides *whether and how* it is sent.
|
|
139
142
|
|
|
143
|
+
> **Independent at runtime:** enable caching only, compression only, both, or neither — from the dashboard Optimize tab, applied live (no restart). Each AI client can also get its own memory identity over HTTP MCP via `http://127.0.0.1:8765/mcp/{agent_id}`.
|
|
144
|
+
|
|
140
145
|
### Quick Start
|
|
141
146
|
|
|
142
147
|
```bash
|
|
@@ -152,7 +157,7 @@ slm wrap claude
|
|
|
152
157
|
|:--------|:-------------|
|
|
153
158
|
| `slm optimize status\|on\|off\|savings` | Master Optimize control + savings report (USD/INR/tokens) |
|
|
154
159
|
| `slm cache status\|clear\|invalidate\|ttl\|semantic` | Cache sub-control — exact + semantic tiers |
|
|
155
|
-
| `slm compress status\|mode\|
|
|
160
|
+
| `slm compress status\|mode\|prose` | Compression control — safe (lossless) / aggressive (LLMLingua-2 prose) |
|
|
156
161
|
| `slm proxy [--port] [--provider]` | Start the interception proxy (port 8765) |
|
|
157
162
|
| `slm wrap <agent>` | Proxy-activate an agent — one command to start saving |
|
|
158
163
|
| `slm help-optimize [topic]` | Full developer reference + per-agent setup recipes |
|
|
@@ -33,18 +33,22 @@
|
|
|
33
33
|
<details>
|
|
34
34
|
<summary><strong>What's New in V3.6 — Optimize: SKIP, SHRINK, DISCOUNT, REMEMBER</strong> (click to expand)</summary>
|
|
35
35
|
|
|
36
|
-
> V3.6 is the only local-first layer that SKIPS repeat LLM calls (cache: 100% saved), SHRINKS prompts
|
|
36
|
+
> V3.6 is the only local-first layer that SKIPS repeat LLM calls (cache: 100% saved on a hit), SHRINKS prose prompts (compress: lossless-by-default, opt-in LLMLingua-2), and DISCOUNTS prefix costs (align: native KV-cache) — and remembers everything — in one install. **Your first cache hit pays for the install time. Hours of coding on repeat, minimal API cost.**
|
|
37
|
+
>
|
|
38
|
+
> **v3.6.10:** cache and compression are now **independent runtime switches** (cache-only, compress-only, both, or neither — toggle live from the dashboard, no restart). Compression was rebuilt to be **lossless by default** (the old string/array/code truncation is gone); aggressive mode adds LLMLingua-2 for **prose only** — never code, numbers, structured data, or the current turn.
|
|
37
39
|
|
|
38
40
|
### The Three Levers
|
|
39
41
|
|
|
40
42
|
| Lever | Mechanism | Saving | Off by default? |
|
|
41
43
|
|-------|-----------|:------:|:---------------:|
|
|
42
|
-
| **Cache** | Skip repeat calls — exact-match SQLite lookup, vCache-gated semantic (opt-in) | **100% on a hit** (input + output) | Cache ON, Semantic OFF |
|
|
43
|
-
| **Compress** | Shrink prompts —
|
|
44
|
+
| **Cache** | Skip repeat calls — exact-match SQLite lookup (zero false hits), vCache-gated semantic (opt-in) | **100% on a hit** (input + output) | Cache ON, Semantic OFF |
|
|
45
|
+
| **Compress** | Shrink prompts — **safe = lossless** normalization; **aggressive = LLMLingua-2 prose only** (opt-in) | Safe: small + lossless · Aggressive: large on prose | Safe mode, Aggressive OFF |
|
|
44
46
|
| **Align** | Stabilize prefix — maximize provider prefix-cache discounts | **Lossless extra** | ON when compression is ON |
|
|
45
47
|
|
|
46
48
|
**Memory** (v3.5's existing engine) runs in parallel — it shapes *what is in* the prompt (relevant facts); Optimize decides *whether and how* it is sent.
|
|
47
49
|
|
|
50
|
+
> **Independent at runtime:** enable caching only, compression only, both, or neither — from the dashboard Optimize tab, applied live (no restart). Each AI client can also get its own memory identity over HTTP MCP via `http://127.0.0.1:8765/mcp/{agent_id}`.
|
|
51
|
+
|
|
48
52
|
### Quick Start
|
|
49
53
|
|
|
50
54
|
```bash
|
|
@@ -60,7 +64,7 @@ slm wrap claude
|
|
|
60
64
|
|:--------|:-------------|
|
|
61
65
|
| `slm optimize status\|on\|off\|savings` | Master Optimize control + savings report (USD/INR/tokens) |
|
|
62
66
|
| `slm cache status\|clear\|invalidate\|ttl\|semantic` | Cache sub-control — exact + semantic tiers |
|
|
63
|
-
| `slm compress status\|mode\|
|
|
67
|
+
| `slm compress status\|mode\|prose` | Compression control — safe (lossless) / aggressive (LLMLingua-2 prose) |
|
|
64
68
|
| `slm proxy [--port] [--provider]` | Start the interception proxy (port 8765) |
|
|
65
69
|
| `slm wrap <agent>` | Proxy-activate an agent — one command to start saving |
|
|
66
70
|
| `slm help-optimize [topic]` | Full developer reference + per-agent setup recipes |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "superlocalmemory"
|
|
3
|
-
version = "3.6.
|
|
3
|
+
version = "3.6.10"
|
|
4
4
|
description = "Information-geometric agent memory with mathematical guarantees"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = {text = "AGPL-3.0-or-later"}
|
|
@@ -69,6 +69,11 @@ dependencies = [
|
|
|
69
69
|
"scikit-learn==1.8.0",
|
|
70
70
|
# Vector KNN extension for the semantic channel.
|
|
71
71
|
"sqlite-vec==0.1.9",
|
|
72
|
+
# v3.6.10: LLMLingua-2 prose compression (aggressive mode, opt-in at runtime).
|
|
73
|
+
# Hard dependency so `pip install superlocalmemory` ships compression-ready;
|
|
74
|
+
# the ~560MB model downloads on first setup/warmup (fail-open). Verified the
|
|
75
|
+
# pin does NOT disturb the transformers/torch/numpy pins above.
|
|
76
|
+
"llmlingua==0.2.2",
|
|
72
77
|
]
|
|
73
78
|
|
|
74
79
|
[project.optional-dependencies]
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
"""SuperLocalMemory — information-geometric agent memory.
|
|
1
|
+
"""SuperLocalMemory — information-geometric agent memory.
|
|
2
|
+
|
|
3
|
+
v3.6.9: all 7 retrieval layers at full quality (Hopfield@1000, entity_graph@100,
|
|
4
|
+
SA neighbor-cache fix, fast=True deprecated). See CHANGELOG.md.
|
|
5
|
+
"""
|
|
2
6
|
|
|
3
7
|
import os
|
|
4
8
|
|
|
@@ -28,7 +32,7 @@ if "OMP_NUM_THREADS" not in os.environ:
|
|
|
28
32
|
os.environ["OMP_NUM_THREADS"] = "2"
|
|
29
33
|
# ---------------------------------------------------------------------------
|
|
30
34
|
|
|
31
|
-
__version__ = "3.6.
|
|
35
|
+
__version__ = "3.6.10"
|
|
32
36
|
|
|
33
37
|
_REQUIRED_VERSIONS = {
|
|
34
38
|
"sentence_transformers": "5.3.0",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# Licensed under AGPL-3.0-or-later - see LICENSE file
|
|
3
3
|
# Part of SuperLocalMemory V3 | https://qualixar.com | https://varunpratap.com
|
|
4
4
|
|
|
5
|
-
"""Handlers for ``slm compress status|mode|
|
|
5
|
+
"""Handlers for ``slm compress status|mode|prose``."""
|
|
6
6
|
|
|
7
7
|
from __future__ import annotations
|
|
8
8
|
|
|
@@ -19,11 +19,6 @@ def _get_store():
|
|
|
19
19
|
return ConfigStore()
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
def _get_cache_db():
|
|
23
|
-
from superlocalmemory.optimize.storage.db import CacheDB
|
|
24
|
-
return CacheDB()
|
|
25
|
-
|
|
26
|
-
|
|
27
22
|
def _write_config(**fields) -> None:
|
|
28
23
|
"""5-step immutable config-write."""
|
|
29
24
|
store = _get_store()
|
|
@@ -44,18 +39,31 @@ def cmd_compress(args: Namespace) -> None:
|
|
|
44
39
|
sub = getattr(args, "compress_command", None)
|
|
45
40
|
_dispatch = {
|
|
46
41
|
"status": cmd_compress_status,
|
|
47
|
-
"mode":
|
|
48
|
-
"
|
|
49
|
-
|
|
50
|
-
"
|
|
51
|
-
"
|
|
42
|
+
"mode": cmd_compress_mode,
|
|
43
|
+
"prose": cmd_compress_prose,
|
|
44
|
+
# removed in v3.6.10: code, ccr, align (extractive compressors removed)
|
|
45
|
+
"code": _cmd_compress_removed("code"),
|
|
46
|
+
"ccr": _cmd_compress_removed("ccr"),
|
|
47
|
+
"align": _cmd_compress_removed("align"),
|
|
52
48
|
}
|
|
53
49
|
handler = _dispatch.get(sub or "")
|
|
54
50
|
if handler:
|
|
55
51
|
handler(args)
|
|
56
52
|
else:
|
|
57
|
-
print("Usage: slm compress status|mode|
|
|
53
|
+
print("Usage: slm compress status|mode|prose [options]")
|
|
54
|
+
sys.exit(0)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def _cmd_compress_removed(name: str):
|
|
58
|
+
def handler(args: Namespace) -> None:
|
|
59
|
+
print(
|
|
60
|
+
f"slm compress {name}: removed in SLM v3.6.10. "
|
|
61
|
+
f"Extractive {name} compression has been replaced by "
|
|
62
|
+
f"Layer 1 (lossless whitespace) + Layer 2 (LLMLingua-2 prose). "
|
|
63
|
+
f"Use 'slm compress prose on' to enable prose compression."
|
|
64
|
+
)
|
|
58
65
|
sys.exit(0)
|
|
66
|
+
return handler
|
|
59
67
|
|
|
60
68
|
|
|
61
69
|
def cmd_compress_status(args: Namespace) -> None:
|
|
@@ -68,21 +76,19 @@ def cmd_compress_status(args: Namespace) -> None:
|
|
|
68
76
|
"status": "ok",
|
|
69
77
|
"compress_enabled": cfg.compress_enabled,
|
|
70
78
|
"compress_mode": cfg.compress_mode,
|
|
71
|
-
"compress_code": cfg.compress_code,
|
|
72
79
|
"compress_prose": cfg.compress_prose,
|
|
73
|
-
"
|
|
80
|
+
"compress_protect_recent": cfg.compress_protect_recent,
|
|
74
81
|
}
|
|
75
82
|
print(json.dumps(data, indent=2))
|
|
76
83
|
return
|
|
77
84
|
|
|
78
85
|
print("Compression status:")
|
|
79
|
-
print(f" Enabled:
|
|
80
|
-
print(f" Mode:
|
|
81
|
-
print(f"
|
|
82
|
-
" (
|
|
83
|
-
print(f"
|
|
84
|
-
print(
|
|
85
|
-
" (reversible context retrieval)")
|
|
86
|
+
print(f" Enabled: {'yes' if cfg.compress_enabled else 'no'}")
|
|
87
|
+
print(f" Mode: {cfg.compress_mode}")
|
|
88
|
+
print(f" Prose (Layer 2): {'ON' if cfg.compress_prose else 'OFF'}"
|
|
89
|
+
" (LLMLingua-2, aggressive mode only)")
|
|
90
|
+
print(f" Protect recent: {cfg.compress_protect_recent} user turns")
|
|
91
|
+
print(" Layer 1 (lossless whitespace normalization) is always ON when enabled.")
|
|
86
92
|
|
|
87
93
|
|
|
88
94
|
def cmd_compress_mode(args: Namespace) -> None:
|
|
@@ -103,23 +109,8 @@ def cmd_compress_mode(args: Namespace) -> None:
|
|
|
103
109
|
print("Daemon hot-reload: active within 2s. No restart required.")
|
|
104
110
|
|
|
105
111
|
|
|
106
|
-
def cmd_compress_code(args: Namespace) -> None:
|
|
107
|
-
"""Enable or disable code/JSON compression."""
|
|
108
|
-
use_json = getattr(args, "json", False)
|
|
109
|
-
value = getattr(args, "code_value", "on")
|
|
110
|
-
|
|
111
|
-
_write_config(compress_code=(value == "on"))
|
|
112
|
-
|
|
113
|
-
if use_json:
|
|
114
|
-
print(json.dumps({"status": "ok", "compress_code": value == "on"}))
|
|
115
|
-
return
|
|
116
|
-
|
|
117
|
-
print(f"Code compression: {'ENABLED' if value == 'on' else 'DISABLED'}.")
|
|
118
|
-
print("Daemon hot-reload: active within 2s.")
|
|
119
|
-
|
|
120
|
-
|
|
121
112
|
def cmd_compress_prose(args: Namespace) -> None:
|
|
122
|
-
"""Enable or disable prose compression."""
|
|
113
|
+
"""Enable or disable prose compression (Layer 2, LLMLingua-2)."""
|
|
123
114
|
use_json = getattr(args, "json", False)
|
|
124
115
|
value = getattr(args, "prose_value", "off")
|
|
125
116
|
|
|
@@ -141,39 +132,10 @@ def cmd_compress_prose(args: Namespace) -> None:
|
|
|
141
132
|
print(json.dumps({"status": "ok", "compress_prose": value == "on"}))
|
|
142
133
|
return
|
|
143
134
|
|
|
144
|
-
print(f"Prose compression: {'ENABLED' if value == 'on' else 'DISABLED'}.")
|
|
135
|
+
print(f"Prose compression (LLMLingua-2): {'ENABLED' if value == 'on' else 'DISABLED'}.")
|
|
136
|
+
if value == "on":
|
|
137
|
+
print(" Requires: compress_mode=aggressive and llmlingua package installed.")
|
|
138
|
+
print(" Run: slm compress mode aggressive (if not already set)")
|
|
145
139
|
if value == "on" and "compress_enabled" in fields:
|
|
146
140
|
print(" (also enabled global compress)")
|
|
147
141
|
print("Daemon hot-reload: active within 2s.")
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
def cmd_compress_align(args: Namespace) -> None:
|
|
151
|
-
"""Enable or disable alignment compression."""
|
|
152
|
-
use_json = getattr(args, "json", False)
|
|
153
|
-
value = getattr(args, "align_value", "on")
|
|
154
|
-
|
|
155
|
-
_write_config(compress_align=(value == "on"))
|
|
156
|
-
|
|
157
|
-
if use_json:
|
|
158
|
-
print(json.dumps({"status": "ok", "compress_align": value == "on"}))
|
|
159
|
-
return
|
|
160
|
-
|
|
161
|
-
print(f"Alignment compression: {'ENABLED' if value == 'on' else 'DISABLED'}.")
|
|
162
|
-
print("Daemon hot-reload: active within 2s.")
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
def cmd_compress_ccr(args: Namespace) -> None:
|
|
166
|
-
"""Enable or disable CCR (Compressed Context Retrieval)."""
|
|
167
|
-
use_json = getattr(args, "json", False)
|
|
168
|
-
value = getattr(args, "ccr_value", "off")
|
|
169
|
-
|
|
170
|
-
_write_config(compress_ccr=(value == "on"))
|
|
171
|
-
|
|
172
|
-
if use_json:
|
|
173
|
-
print(json.dumps({"status": "ok", "compress_ccr": value == "on"}))
|
|
174
|
-
return
|
|
175
|
-
|
|
176
|
-
print(f"CCR (Compressed Context Retrieval): {'ENABLED' if value == 'on' else 'DISABLED'}.")
|
|
177
|
-
if value == "on":
|
|
178
|
-
print("Originals stored in llmcache.db for reversible retrieval.")
|
|
179
|
-
print("Daemon hot-reload: active within 2s.")
|
|
@@ -97,9 +97,7 @@ def cmd_optimize_status(args: Namespace) -> None:
|
|
|
97
97
|
f" semantic: {'OFF' if not cfg.semantic_enabled else f'{cfg.ttl.semantic_seconds}s'})")
|
|
98
98
|
print(f" Compress: {'enabled' if cfg.compress_enabled else 'disabled'}"
|
|
99
99
|
f" (mode: {cfg.compress_mode},"
|
|
100
|
-
f"
|
|
101
|
-
f" prose: {'ON' if cfg.compress_prose else 'OFF'},"
|
|
102
|
-
f" CCR: {'ON' if cfg.compress_ccr else 'OFF'})")
|
|
100
|
+
f" prose/L2: {'ON' if cfg.compress_prose else 'OFF'})")
|
|
103
101
|
proxy_status = f"running on :{OPTIMIZE_DEFAULT_PORT}" if proxy_running else "not running"
|
|
104
102
|
print(f" Proxy: {proxy_status}")
|
|
105
103
|
print(f" Config: ~/.superlocalmemory/optimize.json (version {cfg.config_version})")
|
|
@@ -32,6 +32,8 @@ _SLM_HOME = Path(os.environ.get("SL_MEMORY_PATH", Path.home() / ".superlocalmemo
|
|
|
32
32
|
_SETUP_MARKER = _SLM_HOME / ".setup-complete"
|
|
33
33
|
_EMBED_MODEL = "nomic-ai/nomic-embed-text-v1.5"
|
|
34
34
|
_RERANKER_MODEL = "cross-encoder/ms-marco-MiniLM-L-12-v2"
|
|
35
|
+
# v3.6.10: compulsory LLMLingua-2 prose compression model (~560MB, aggressive mode).
|
|
36
|
+
_COMPRESSOR_MODEL = "microsoft/llmlingua-2-xlm-roberta-large-meetingbank"
|
|
35
37
|
|
|
36
38
|
|
|
37
39
|
# ---------------------------------------------------------------------------
|
|
@@ -178,6 +180,49 @@ def _download_reranker(model_name: str) -> bool:
|
|
|
178
180
|
return False
|
|
179
181
|
|
|
180
182
|
|
|
183
|
+
def _download_compressor(model_name: str) -> bool:
|
|
184
|
+
"""Download the LLMLingua-2 prose compression model (v3.6.10).
|
|
185
|
+
|
|
186
|
+
Mirrors _download_reranker: a subprocess forces the HF download with visible
|
|
187
|
+
progress. Fail-open — a network hiccup must NOT break setup; the model also
|
|
188
|
+
lazy-downloads on first use in prose_llmlingua.py.
|
|
189
|
+
"""
|
|
190
|
+
print(f"\n Downloading compression model: {model_name}")
|
|
191
|
+
print(f" (LLMLingua-2 prose compressor, ~560MB — aggressive mode only)\n")
|
|
192
|
+
|
|
193
|
+
script = (
|
|
194
|
+
"from llmlingua import PromptCompressor; "
|
|
195
|
+
f"PromptCompressor(model_name='{model_name}', use_llmlingua2=True, "
|
|
196
|
+
"device_map='cpu'); "
|
|
197
|
+
"print('OK')"
|
|
198
|
+
)
|
|
199
|
+
|
|
200
|
+
try:
|
|
201
|
+
result = subprocess.run(
|
|
202
|
+
[sys.executable, "-c", script],
|
|
203
|
+
timeout=900, # 560MB on a slow link can exceed 5 min
|
|
204
|
+
capture_output=False,
|
|
205
|
+
text=True,
|
|
206
|
+
env={
|
|
207
|
+
**os.environ,
|
|
208
|
+
"CUDA_VISIBLE_DEVICES": "",
|
|
209
|
+
"TOKENIZERS_PARALLELISM": "false",
|
|
210
|
+
"TORCH_DEVICE": "cpu",
|
|
211
|
+
},
|
|
212
|
+
)
|
|
213
|
+
if result.returncode == 0:
|
|
214
|
+
print(f" ✓ Compression model ready")
|
|
215
|
+
return True
|
|
216
|
+
print(f" ✗ Compression model download failed (will lazy-download on first use)")
|
|
217
|
+
return False
|
|
218
|
+
except ImportError:
|
|
219
|
+
print(f" ⚠ llmlingua not installed — compression model will download on first use")
|
|
220
|
+
return False
|
|
221
|
+
except Exception as exc:
|
|
222
|
+
print(f" ✗ Compression model error: {exc}")
|
|
223
|
+
return False
|
|
224
|
+
|
|
225
|
+
|
|
181
226
|
# ---------------------------------------------------------------------------
|
|
182
227
|
# Verification
|
|
183
228
|
# ---------------------------------------------------------------------------
|
|
@@ -393,6 +438,10 @@ def run_wizard(auto: bool = False) -> None:
|
|
|
393
438
|
else:
|
|
394
439
|
_download_reranker(_RERANKER_MODEL)
|
|
395
440
|
|
|
441
|
+
print()
|
|
442
|
+
print("─── Step 4c/10: Download Compression Model (LLMLingua-2) ───")
|
|
443
|
+
_download_compressor(_COMPRESSOR_MODEL)
|
|
444
|
+
|
|
396
445
|
# -- Step 5: Daemon Configuration (v3.4.3) --
|
|
397
446
|
print()
|
|
398
447
|
print("─── Step 5/10: Daemon Configuration ───")
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"""Per-HTTP-request agent ID resolution — ContextVar home.
|
|
2
|
+
|
|
3
|
+
Kept in a standalone module so both tools_core and tools_active can import
|
|
4
|
+
it without creating circular dependencies (server.py → tools_core → here,
|
|
5
|
+
and unified_daemon.py → here independently).
|
|
6
|
+
|
|
7
|
+
Priority chain (HTTP-first, stdio-fallback):
|
|
8
|
+
1. ContextVar set by _AgentIDExtractorASGI middleware from /mcp/{agent_id} URL path.
|
|
9
|
+
2. SLM_AGENT_ID environment variable (stdio transport legacy).
|
|
10
|
+
3. Hard-coded "mcp_client" sentinel.
|
|
11
|
+
"""
|
|
12
|
+
from __future__ import annotations
|
|
13
|
+
|
|
14
|
+
import contextvars
|
|
15
|
+
import os
|
|
16
|
+
import re
|
|
17
|
+
|
|
18
|
+
_current_agent_id: contextvars.ContextVar[str] = contextvars.ContextVar(
|
|
19
|
+
"slm_agent_id", default="mcp_client"
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
# Agent ids arrive from an untrusted URL path segment. They are ATTRIBUTION
|
|
23
|
+
# metadata, never an authenticated principal — but they reach loggers, the
|
|
24
|
+
# agent registry, and SQL-bound attribution columns, so we hard-restrict the
|
|
25
|
+
# charset at the single extraction chokepoint. This neutralises log-injection
|
|
26
|
+
# (CRLF / ANSI), oversized ids, and any path-ish characters in one place.
|
|
27
|
+
_AGENT_ID_SANITIZE = re.compile(r"[^A-Za-z0-9._-]")
|
|
28
|
+
_AGENT_ID_MAX_LEN = 64
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def sanitize_agent_id(raw: str) -> str:
|
|
32
|
+
"""Coerce an untrusted agent-id segment to a safe, bounded token."""
|
|
33
|
+
return _AGENT_ID_SANITIZE.sub("_", raw)[:_AGENT_ID_MAX_LEN]
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def get_current_agent_id(env_fallback: bool = True) -> str:
|
|
37
|
+
"""Return the agent_id for the current asyncio task.
|
|
38
|
+
|
|
39
|
+
For HTTP transport the ASGI wrapper sets the ContextVar from the URL path
|
|
40
|
+
before the request reaches any MCP tool, so this returns the URL-derived id.
|
|
41
|
+
For stdio transport the ContextVar holds its default ("mcp_client") and we
|
|
42
|
+
fall through to the SLM_AGENT_ID env var instead.
|
|
43
|
+
"""
|
|
44
|
+
ctx_id = _current_agent_id.get()
|
|
45
|
+
if ctx_id != "mcp_client":
|
|
46
|
+
return ctx_id
|
|
47
|
+
if env_fallback:
|
|
48
|
+
return os.environ.get("SLM_AGENT_ID", "mcp_client")
|
|
49
|
+
return "mcp_client"
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class AgentIDExtractorASGI:
|
|
53
|
+
"""ASGI wrapper that maps ``/mcp/{agent_id}`` → the agent-id ContextVar.
|
|
54
|
+
|
|
55
|
+
Mounted at ``/mcp`` in unified_daemon. IMPORTANT: Starlette's ``Mount``
|
|
56
|
+
(≥0.35 / 1.x) does NOT strip the mount prefix from ``scope["path"]`` — it
|
|
57
|
+
records the prefix in ``scope["root_path"]`` and leaves ``path`` as the full
|
|
58
|
+
request path (e.g. ``/mcp/claude`` with ``root_path == "/mcp"``). So we
|
|
59
|
+
compute the mount-relative sub-path ourselves as ``path[len(root_path):]``.
|
|
60
|
+
|
|
61
|
+
Flow for ``POST /mcp/claude``:
|
|
62
|
+
sub-path ``/claude`` → agent id ``claude`` → set ContextVar → rewrite the
|
|
63
|
+
scope path to ``{root_path}/`` so the inner FastMCP app (Starlette, route
|
|
64
|
+
``/``) sees the same mount-relative ``/`` it sees for a bare ``/mcp/``.
|
|
65
|
+
|
|
66
|
+
Backward compatible: bare ``/mcp/`` has sub-path ``/`` → no agent segment →
|
|
67
|
+
the request passes through untouched and the ContextVar keeps its
|
|
68
|
+
``"mcp_client"`` default.
|
|
69
|
+
|
|
70
|
+
Per-request isolation is guaranteed by ContextVar + ``reset(token)`` in a
|
|
71
|
+
``finally``, so concurrent HTTP sessions never see each other's agent id.
|
|
72
|
+
"""
|
|
73
|
+
|
|
74
|
+
__slots__ = ("_app",)
|
|
75
|
+
|
|
76
|
+
def __init__(self, inner) -> None:
|
|
77
|
+
self._app = inner
|
|
78
|
+
|
|
79
|
+
async def __call__(self, scope, receive, send):
|
|
80
|
+
if scope.get("type") == "http":
|
|
81
|
+
root_path: str = scope.get("root_path", "")
|
|
82
|
+
full_path: str = scope.get("path", "/")
|
|
83
|
+
# Mount-relative sub-path (what comes AFTER /mcp). When a root_path
|
|
84
|
+
# is present the request path MUST start with it (Starlette Mount
|
|
85
|
+
# guarantees this); if it somehow does not, treat it as no-agent and
|
|
86
|
+
# pass through untouched rather than mis-parsing the full path.
|
|
87
|
+
if root_path:
|
|
88
|
+
if not full_path.startswith(root_path):
|
|
89
|
+
await self._app(scope, receive, send)
|
|
90
|
+
return
|
|
91
|
+
subpath = full_path[len(root_path):]
|
|
92
|
+
else:
|
|
93
|
+
subpath = full_path
|
|
94
|
+
first = subpath.lstrip("/").split("/")[0]
|
|
95
|
+
if first:
|
|
96
|
+
first = sanitize_agent_id(first)
|
|
97
|
+
token = _current_agent_id.set(first)
|
|
98
|
+
# Rewrite the path so the inner app sees the bare mount root,
|
|
99
|
+
# exactly as it would for a no-agent /mcp/ request.
|
|
100
|
+
new_full = (root_path + "/") if root_path else "/"
|
|
101
|
+
new_scope = {
|
|
102
|
+
**scope,
|
|
103
|
+
"path": new_full,
|
|
104
|
+
"raw_path": new_full.encode(),
|
|
105
|
+
}
|
|
106
|
+
try:
|
|
107
|
+
await self._app(new_scope, receive, send)
|
|
108
|
+
finally:
|
|
109
|
+
_current_agent_id.reset(token)
|
|
110
|
+
return
|
|
111
|
+
await self._app(scope, receive, send)
|
|
@@ -109,15 +109,14 @@ def _sqlite_emergency_recall(
|
|
|
109
109
|
def _get_agent_id(default: str = "mcp_client") -> str:
|
|
110
110
|
"""Resolve the calling agent's ID for attribution.
|
|
111
111
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
v3.4.39+: enables proper per-agent attribution in ``session_init``,
|
|
118
|
-
``observe``, and event emissions.
|
|
112
|
+
Priority chain (v3.6.10+):
|
|
113
|
+
1. ContextVar set by HTTP URL path (/mcp/{agent_id}) — HTTP transport.
|
|
114
|
+
2. SLM_AGENT_ID env var — stdio transport per-process identity.
|
|
115
|
+
3. Provided default (legacy "mcp_client").
|
|
119
116
|
"""
|
|
120
|
-
|
|
117
|
+
from superlocalmemory.mcp.agent_context import get_current_agent_id
|
|
118
|
+
resolved = get_current_agent_id(env_fallback=True)
|
|
119
|
+
return resolved if resolved != "mcp_client" else default
|
|
121
120
|
|
|
122
121
|
|
|
123
122
|
def _emit_event(event_type: str, payload: dict | None = None,
|
|
@@ -110,6 +110,10 @@ def register_core_tools(server, get_engine: Callable) -> None:
|
|
|
110
110
|
Extracts atomic facts, resolves entities, builds graph edges,
|
|
111
111
|
and indexes for 4-channel retrieval.
|
|
112
112
|
"""
|
|
113
|
+
# v3.6.10: resolve "mcp_client" sentinel → URL path (HTTP) or env var (stdio)
|
|
114
|
+
if agent_id == "mcp_client":
|
|
115
|
+
from superlocalmemory.mcp.agent_context import get_current_agent_id
|
|
116
|
+
agent_id = get_current_agent_id()
|
|
113
117
|
meta = {
|
|
114
118
|
"project": project,
|
|
115
119
|
"importance": importance,
|
|
@@ -171,6 +175,10 @@ def register_core_tools(server, get_engine: Callable) -> None:
|
|
|
171
175
|
``CLAUDE_SESSION_ID``. Omitting it degrades to "no closed-loop
|
|
172
176
|
learning for this recall" — the recall itself always works.
|
|
173
177
|
"""
|
|
178
|
+
# v3.6.10: resolve "mcp_client" sentinel → URL path (HTTP) or env var (stdio)
|
|
179
|
+
if agent_id == "mcp_client":
|
|
180
|
+
from superlocalmemory.mcp.agent_context import get_current_agent_id
|
|
181
|
+
agent_id = get_current_agent_id()
|
|
174
182
|
import asyncio
|
|
175
183
|
try:
|
|
176
184
|
from superlocalmemory.mcp._daemon_proxy import choose_pool
|
|
@@ -485,6 +493,10 @@ def register_core_tools(server, get_engine: Callable) -> None:
|
|
|
485
493
|
fact_id: Exact fact ID to delete (from recall or list_recent results).
|
|
486
494
|
agent_id: Identifier of the calling agent (logged for audit).
|
|
487
495
|
"""
|
|
496
|
+
# v3.6.10: resolve "mcp_client" sentinel → URL path (HTTP) or env var (stdio)
|
|
497
|
+
if agent_id == "mcp_client":
|
|
498
|
+
from superlocalmemory.mcp.agent_context import get_current_agent_id
|
|
499
|
+
agent_id = get_current_agent_id()
|
|
488
500
|
try:
|
|
489
501
|
from superlocalmemory.core.worker_pool import WorkerPool
|
|
490
502
|
pool = WorkerPool.shared()
|
|
@@ -519,6 +531,10 @@ def register_core_tools(server, get_engine: Callable) -> None:
|
|
|
519
531
|
content: New content for the memory (cannot be empty).
|
|
520
532
|
agent_id: Identifier of the calling agent (logged for audit).
|
|
521
533
|
"""
|
|
534
|
+
# v3.6.10: resolve "mcp_client" sentinel → URL path (HTTP) or env var (stdio)
|
|
535
|
+
if agent_id == "mcp_client":
|
|
536
|
+
from superlocalmemory.mcp.agent_context import get_current_agent_id
|
|
537
|
+
agent_id = get_current_agent_id()
|
|
522
538
|
try:
|
|
523
539
|
if not content or not content.strip():
|
|
524
540
|
return {"success": False, "error": "content cannot be empty"}
|
|
@@ -93,19 +93,23 @@ class PerItemBoundaryRecord:
|
|
|
93
93
|
query_sim: float,
|
|
94
94
|
delta: float = 0.05,
|
|
95
95
|
epsilon_grid: tuple[float, ...] = (0.01, 0.02, 0.05, 0.10),
|
|
96
|
+
return_threshold: float = 1.0,
|
|
96
97
|
) -> float:
|
|
97
98
|
"""Compute τ̂ — the vCache exploration probability (Eq. 11).
|
|
98
99
|
|
|
99
100
|
Args:
|
|
100
|
-
query_sim:
|
|
101
|
-
delta:
|
|
102
|
-
|
|
103
|
-
epsilon_grid:
|
|
104
|
-
|
|
101
|
+
query_sim: Cosine similarity s(x) ∈ [0, 1] for the incoming query.
|
|
102
|
+
delta: δ — user-defined maximum error rate.
|
|
103
|
+
Theorem 4.1 guarantee: Pr(correct) ≥ 1 - δ.
|
|
104
|
+
epsilon_grid: ε values for the Eq. 11 min sweep.
|
|
105
|
+
Distinct from δ; controls CI conservativeness.
|
|
106
|
+
return_threshold: Semantic return threshold from config (semantic_return_threshold).
|
|
107
|
+
C-03 fix: during cold start, exploit directly when
|
|
108
|
+
query_sim >= return_threshold instead of always exploring.
|
|
105
109
|
|
|
106
110
|
Returns:
|
|
107
111
|
τ̂ ∈ [0.0, 1.0]. Lower = more exploitation.
|
|
108
|
-
Cold start (n < 3):
|
|
112
|
+
Cold start (n < 3): 0.0 if query_sim >= return_threshold, else 1.0.
|
|
109
113
|
|
|
110
114
|
Eq. 11 derivation (from the paper):
|
|
111
115
|
1. I_tt = Σ γ̂² · p_i(1 - p_i) [Fisher info diagonal]
|
|
@@ -117,7 +121,12 @@ class PerItemBoundaryRecord:
|
|
|
117
121
|
"""
|
|
118
122
|
n = len(self.samples)
|
|
119
123
|
if n < 3:
|
|
120
|
-
|
|
124
|
+
# ARCH-02 note: this function serves dual purpose — (a) warm-phase vCache
|
|
125
|
+
# Eq. 11 tau computation and (b) cold-start similarity gate. The cold-start
|
|
126
|
+
# branch (n < 3) is intentionally simple: if the query is already above the
|
|
127
|
+
# return threshold, serve it (tau=0.0 → exploit); otherwise explore (tau=1.0).
|
|
128
|
+
# C-03: honor return_threshold — avoids 100% miss until 3 samples are accumulated.
|
|
129
|
+
return 0.0 if query_sim >= return_threshold else 1.0
|
|
121
130
|
|
|
122
131
|
# Step 1: Fisher-information SE
|
|
123
132
|
i_tt = 0.0
|
|
@@ -144,12 +153,17 @@ class PerItemBoundaryRecord:
|
|
|
144
153
|
|
|
145
154
|
return best_tau
|
|
146
155
|
|
|
147
|
-
def should_explore(
|
|
156
|
+
def should_explore(
|
|
157
|
+
self,
|
|
158
|
+
query_sim: float,
|
|
159
|
+
delta: float = 0.05,
|
|
160
|
+
return_threshold: float = 1.0,
|
|
161
|
+
) -> bool:
|
|
148
162
|
"""Return True (explore = LLM call) or False (exploit = serve cache).
|
|
149
163
|
|
|
150
164
|
Source: vCache Algorithm 2: draw u ~ Uniform(0, 1); explore iff u ≤ τ̂.
|
|
151
165
|
"""
|
|
152
|
-
tau = self.compute_tau(query_sim, delta=delta)
|
|
166
|
+
tau = self.compute_tau(query_sim, delta=delta, return_threshold=return_threshold)
|
|
153
167
|
return _RNG.random() <= tau
|
|
154
168
|
|
|
155
169
|
def add_sample(
|