superlocalmemory 3.5.8__tar.gz → 3.5.9__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {superlocalmemory-3.5.8/src/superlocalmemory.egg-info → superlocalmemory-3.5.9}/PKG-INFO +1 -1
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/pyproject.toml +1 -1
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/__init__.py +1 -1
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/commands.py +9 -2
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/main.py +4 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/config.py +5 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/engine.py +23 -0
- superlocalmemory-3.5.9/src/superlocalmemory/core/mcp_embedder_proxy.py +89 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/llm/backbone.py +10 -4
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/server.py +34 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/tools_v3.py +6 -2
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/v3_api.py +63 -1
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9/src/superlocalmemory.egg-info}/PKG-INFO +1 -1
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory.egg-info/SOURCES.txt +1 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/AUTHORS.md +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/LICENSE +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/NOTICE +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/README.md +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/setup.cfg +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/attribution/__init__.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/attribution/mathematical_dna.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/attribution/signer.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/attribution/watermark.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/__init__.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/context_commands.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/daemon.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/db_migrate.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/doctor_cmd.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/escape_hatch.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/ingest_cmd.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/json_output.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/migrate_cmd.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/pending_store.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/post_install.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/service_installer.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/setup_wizard.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/version_banner.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/wizard_v3426_options.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/__init__.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/blast_radius.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/bridge/__init__.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/bridge/entity_resolver.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/bridge/event_listeners.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/bridge/fact_enricher.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/bridge/hebbian_linker.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/bridge/temporal_checker.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/changes.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/communities.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/config.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/database.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/extractors/__init__.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/extractors/python.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/extractors/typescript.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/flows.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/git_hooks.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/graph_engine.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/graph_store.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/incremental.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/models.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/parser.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/resolver.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/search.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/service.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/watcher.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/compliance/__init__.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/compliance/abac.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/compliance/audit.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/compliance/eu_ai_act.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/compliance/gdpr.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/compliance/lifecycle.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/compliance/retention.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/compliance/scheduler.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/__init__.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/backend_orchestrator.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/clock_monitor.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/consolidation_engine.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/context_cache.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/db_pool.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/embedding_worker.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/embeddings.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/engine_capabilities.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/engine_lock.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/engine_wiring.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/error_catalog.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/error_envelope.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/fact_consolidator.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/file_lock.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/graph_analyzer.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/graph_pruner.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/health_monitor.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/hooks.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/injection.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/loop_watchdog.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/maintenance.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/maintenance_scheduler.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/modes.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/ollama_embedder.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/platform_utils.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/priority_queue.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/profiles.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/pruning_engine.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/queue_consumer.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/queue_dispatcher.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/ram_lock.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/rate_limit.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/recall_gate.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/recall_pipeline.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/recall_queue.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/recall_worker.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/registry.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/reranker_worker.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/safe_fs.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/security_primitives.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/shadow_router.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/slm_disabled.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/slmignore.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/store_pipeline.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/summarizer.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/tier_manager.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/topic_signature.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/worker_pool.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/dynamics/__init__.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/dynamics/activation_guided_quantization.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/dynamics/eap_scheduler.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/dynamics/ebbinghaus_langevin_coupling.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/dynamics/fisher_langevin_coupling.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/__init__.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/auto_linker.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/cognitive_consolidator.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/consolidator.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/context_generator.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/emotional.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/entity_resolver.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/entropy_gate.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/fact_extractor.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/foresight.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/graph_builder.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/observation_builder.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/scene_builder.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/signal_inference.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/temporal_parser.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/temporal_validator.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/encoding/type_router.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/evolution/__init__.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/evolution/blind_verifier.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/evolution/budget.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/evolution/evolution_store.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/evolution/llm_dispatch.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/evolution/mutation_generator.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/evolution/skill_evolver.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/evolution/triggers.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/evolution/types.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/graph/__init__.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/graph/cozo_backend.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/__init__.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/_outcome_common.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/adapter_base.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/antigravity_adapter.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/auto_capture.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/auto_invoker.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/auto_parameterize.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/auto_recall.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/auto_recall_hook.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/before_web_hook.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/claude_code_hooks.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/context_payload.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/copilot_adapter.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/cross_platform_connector.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/cursor_adapter.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/hook_daemon.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/hook_handlers.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/ide_connector.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/post_tool_async_hook.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/post_tool_outcome_hook.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/prewarm_auth.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/rules_engine.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/session_registry.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/stop_outcome_hook.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/sync_loop.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/topic_shift_hook.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/user_prompt_hook.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/hooks/user_prompt_rehash_hook.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/infra/__init__.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/infra/auth_middleware.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/infra/backup.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/infra/cache_manager.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/infra/cloud_backup.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/infra/event_bus.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/infra/heartbeat_monitor.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/infra/pid_manager.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/infra/process_reaper.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/infra/rate_limiter.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/infra/webhook_dispatcher.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ingestion/__init__.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ingestion/adapter_manager.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ingestion/base_adapter.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ingestion/calendar_adapter.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ingestion/credentials.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ingestion/gmail_adapter.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ingestion/parsers.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ingestion/transcript_adapter.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/__init__.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/adaptive.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/arm_catalog.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/assertion_miner.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/bandit.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/bandit_cache.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/behavioral.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/behavioral_listener.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/bootstrap.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/consolidation_cycle.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/consolidation_quantization_worker.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/consolidation_worker.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/cross_project.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/database.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/dedup_hnsw.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/engagement.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/ensemble.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/entity_compiler.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/fact_outcome_joins.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/features.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/feedback.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/forgetting_scheduler.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/hnsw_dedup.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/labeler.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/legacy_migration.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/lightgbm_subprocess.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/memory_merge.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/model_cache.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/model_rollback.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/outcome_queue.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/outcomes.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/pattern_miner.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/pattern_miner_constants.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/project_context.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/quantization_scheduler.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/ranker.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/ranker_common.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/ranker_retrain_legacy.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/ranker_retrain_online.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/reward.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/reward_archive.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/reward_boost.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/reward_proxy.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/shadow_test.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/signal_worker.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/signals.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/skill_performance_miner.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/source_quality.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/trigram_index.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/learning/workflows.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/llm/__init__.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/math/__init__.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/math/ebbinghaus.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/math/fisher.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/math/fisher_quantized.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/math/hopfield.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/math/langevin.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/math/polar_quant.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/math/qjl.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/math/sheaf.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/math/turbo_quant.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/__init__.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/_daemon_proxy.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/_pool_adapter.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/resources.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/shared.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/tools.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/tools_active.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/tools_code_graph.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/tools_context.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/tools_core.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/tools_evolution.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/tools_learning.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/tools_mesh.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/tools_v28.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mcp/tools_v33.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mesh/__init__.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mesh/broker.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/mesh/remote_sync.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/migrations/__init__.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/migrations/v3_4_25_to_v3_4_26.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/parameterization/__init__.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/parameterization/pattern_extractor.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/parameterization/pii_filter.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/parameterization/prompt_injector.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/parameterization/prompt_lifecycle.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/parameterization/soft_prompt_generator.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/__init__.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/agentic.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/ann_index.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/bm25_channel.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/bridge_discovery.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/channel_registry.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/engine.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/entity_channel.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/forgetting_filter.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/fusion.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/hopfield_channel.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/profile_channel.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/quantization_aware_search.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/reranker.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/semantic_channel.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/spreading_activation.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/strategy.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/temporal_channel.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/retrieval/vector_store.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/__init__.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/api.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/bandit_loops.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/middleware/__init__.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/middleware/security_headers.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/__init__.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/adapters.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/agents.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/backup.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/behavioral.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/brain.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/chat.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/compliance.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/data_io.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/entity.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/events.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/evolution.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/helpers.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/ingest.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/insights.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/learning.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/lifecycle.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/memories.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/mesh.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/prewarm.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/profiles.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/stats.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/tiers.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/timeline.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/token.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/ws.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/security_middleware.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/ui.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/unified_daemon.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/skills/slm-build-graph/SKILL.md +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/skills/slm-list-recent/SKILL.md +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/skills/slm-recall/SKILL.md +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/skills/slm-remember/SKILL.md +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/skills/slm-show-patterns/SKILL.md +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/skills/slm-status/SKILL.md +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/skills/slm-switch-profile/SKILL.md +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/__init__.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/access_control.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/access_log.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/database.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/embedding_migrator.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migration_runner.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migration_v33.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations/M001_add_signal_features_columns.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations/M002_model_state_history.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations/M003_migration_log.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations/M004_cross_platform_sync_log.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations/M005_bandit_tables.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations/M006_action_outcomes_reward.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations/M007_pending_outcomes.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations/M009_model_lineage.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations/M010_evolution_config.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations/M011_archive_and_merge.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations/M012_shadow_observations.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations/M013_bi_temporal_columns.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations/M014_v345_scale_ready.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations/M015_add_pinned_column.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations/__init__.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/migrations.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/models.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/quantized_store.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/schema.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/schema_code_graph.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/schema_v32.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/schema_v3410.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/schema_v3411.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/schema_v343.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/schema_v345.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/schema_v347.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/storage/v2_migrator.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/trust/__init__.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/trust/gate.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/trust/provenance.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/trust/scorer.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/trust/signals.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/css/brain.css +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/css/legacy-dashboard.css +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/css/neural-glass.css +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/index.html +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/agents.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/auto-settings.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/brain.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/clusters.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/compliance.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/core.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/dashboard.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/events.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/fact-detail.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/feedback.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/graph-event-bus.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/graph-filters.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/graph-ui.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/ide-status.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/init.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/knowledge-graph.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/lifecycle.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/math-health.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/memories.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/memory-chat.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/memory-timeline.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/modal.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/ng-entities.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/ng-health.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/ng-ingestion.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/ng-mesh.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/ng-shell.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/ng-skills.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/profiles.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/quick-actions.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/recall-lab.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/search.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/settings.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/timeline.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/js/trust-dashboard.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/vendor/bootstrap-icons/bootstrap-icons.css +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff2 +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/vendor/bootstrap.bundle.min.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/vendor/bootstrap.min.css +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/vendor/d3.v7.min.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/vendor/graphology-library.min.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/vendor/graphology.umd.min.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/vendor/inter-ui/inter-variable.min.css +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable-Italic.woff2 +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable.woff2 +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/ui/vendor/sigma.min.js +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/vector/__init__.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/vector/lancedb_backend.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory.egg-info/dependency_links.txt +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory.egg-info/entry_points.txt +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory.egg-info/requires.txt +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory.egg-info/top_level.txt +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_auto_hooks.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_before_web_hook.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_behavioral_full.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_claude_hooks.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_cli.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_cli_json.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_cli_v33.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_compliance_full.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_config_system.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_engine_hooks.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_event_bus.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_features.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_final_locomo_mini.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_hook_handlers.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_ide_connector.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_infra.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_injection.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_learning_advanced.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_learning_collectors.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_llm_provider.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_mcp_server.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_migration.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_mode_switch_preservation.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_post_install.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_ranker.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_topic_shift_hook.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_trust_full.py +0 -0
- {superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/tests/test_v3_api.py +0 -0
|
@@ -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.5.
|
|
31
|
+
__version__ = "3.5.9"
|
|
32
32
|
|
|
33
33
|
_REQUIRED_VERSIONS = {
|
|
34
34
|
"sentence_transformers": "5.3.0",
|
|
@@ -2573,6 +2573,11 @@ def cmd_reap(args: Namespace) -> None:
|
|
|
2573
2573
|
"""Find and kill orphaned SLM processes."""
|
|
2574
2574
|
use_json = getattr(args, "json", False)
|
|
2575
2575
|
dry_run = not getattr(args, "force", False)
|
|
2576
|
+
# V3.5.9: --all bypasses orphan detection and kills every slm mcp process
|
|
2577
|
+
# except the current one. Use after switching IDEs to clear stale sessions.
|
|
2578
|
+
use_force_all = getattr(args, "all", False)
|
|
2579
|
+
if use_force_all:
|
|
2580
|
+
dry_run = False # --all always kills; --force is implied
|
|
2576
2581
|
|
|
2577
2582
|
try:
|
|
2578
2583
|
from superlocalmemory.infra.process_reaper import (
|
|
@@ -2581,7 +2586,7 @@ def cmd_reap(args: Namespace) -> None:
|
|
|
2581
2586
|
)
|
|
2582
2587
|
|
|
2583
2588
|
config = ReaperConfig()
|
|
2584
|
-
result = cleanup_all_orphans(config, dry_run=dry_run)
|
|
2589
|
+
result = cleanup_all_orphans(config, dry_run=dry_run, force=use_force_all)
|
|
2585
2590
|
except Exception as exc:
|
|
2586
2591
|
if use_json:
|
|
2587
2592
|
from superlocalmemory.cli.json_output import json_print
|
|
@@ -2600,7 +2605,8 @@ def cmd_reap(args: Namespace) -> None:
|
|
|
2600
2605
|
"killed": result.get("killed", 0),
|
|
2601
2606
|
"skipped": result.get("skipped", 0),
|
|
2602
2607
|
}, next_actions=[
|
|
2603
|
-
{"command": "slm reap --force --json", "description": "Kill
|
|
2608
|
+
{"command": "slm reap --force --json", "description": "Kill orphan processes"},
|
|
2609
|
+
{"command": "slm reap --all --json", "description": "Kill ALL slm mcp sessions (IDE switch)"},
|
|
2604
2610
|
{"command": "slm status --json", "description": "Check status"},
|
|
2605
2611
|
])
|
|
2606
2612
|
return
|
|
@@ -2620,3 +2626,4 @@ def cmd_reap(args: Namespace) -> None:
|
|
|
2620
2626
|
print(f" Skipped: {skipped}")
|
|
2621
2627
|
if dry_run and orphans > 0:
|
|
2622
2628
|
print("\n Use --force to kill orphaned processes.")
|
|
2629
|
+
print(" Use --all to kill ALL slm mcp sessions (after IDE switch).")
|
|
@@ -349,6 +349,10 @@ def main() -> None:
|
|
|
349
349
|
"--force", action="store_true",
|
|
350
350
|
help="Kill orphans (default: dry run only)",
|
|
351
351
|
)
|
|
352
|
+
reap_p.add_argument(
|
|
353
|
+
"--all", action="store_true", dest="all",
|
|
354
|
+
help="Kill ALL slm mcp processes regardless of orphan status (use after IDE switch)",
|
|
355
|
+
)
|
|
352
356
|
reap_p.add_argument("--json", action="store_true", help="Output structured JSON (agent-native)")
|
|
353
357
|
|
|
354
358
|
# V3.4.3: Ingestion adapters
|
|
@@ -691,6 +691,9 @@ class SLMConfig:
|
|
|
691
691
|
mode = Mode(data.get("mode", "a"))
|
|
692
692
|
llm_data = data.get("llm", {})
|
|
693
693
|
emb_data = data.get("embedding", {})
|
|
694
|
+
# V3.5.9: read base_dir before constructing config so for_mode() builds
|
|
695
|
+
# db_path from the user's directory, not DEFAULT_BASE_DIR.
|
|
696
|
+
raw_base_dir = Path(data.get("base_dir", str(DEFAULT_BASE_DIR)))
|
|
694
697
|
config = cls.for_mode(
|
|
695
698
|
mode,
|
|
696
699
|
llm_provider=llm_data.get("provider", ""),
|
|
@@ -703,6 +706,7 @@ class SLMConfig:
|
|
|
703
706
|
embedding_deployment=emb_data.get("deployment_name", ""),
|
|
704
707
|
embedding_model_name=emb_data.get("model_name", ""),
|
|
705
708
|
embedding_dimension=int(emb_data.get("dimension", 0) or 0),
|
|
709
|
+
base_dir=raw_base_dir,
|
|
706
710
|
)
|
|
707
711
|
config.active_profile = data.get("active_profile", "default")
|
|
708
712
|
|
|
@@ -813,6 +817,7 @@ class SLMConfig:
|
|
|
813
817
|
data = {
|
|
814
818
|
"mode": effective_mode,
|
|
815
819
|
"active_profile": self.active_profile,
|
|
820
|
+
"base_dir": str(self.base_dir), # V3.5.9: persist so load() can restore custom paths
|
|
816
821
|
"llm": {
|
|
817
822
|
"provider": self.llm.provider,
|
|
818
823
|
"model": self.llm.model,
|
|
@@ -126,6 +126,10 @@ class MemoryEngine:
|
|
|
126
126
|
|
|
127
127
|
if self._capabilities is Capabilities.FULL:
|
|
128
128
|
self._init_heavy_layer()
|
|
129
|
+
else:
|
|
130
|
+
# V3.5.9: LIGHT mode — try to get embedder from running daemon so that
|
|
131
|
+
# memories stored via MCP have real embeddings (fixes PR #30 NULL embedder).
|
|
132
|
+
self._try_init_proxy()
|
|
129
133
|
|
|
130
134
|
self._initialized = True
|
|
131
135
|
logger.info(
|
|
@@ -187,6 +191,25 @@ class MemoryEngine:
|
|
|
187
191
|
from superlocalmemory.learning.adaptive import AdaptiveLearner
|
|
188
192
|
self._adaptive_learner = AdaptiveLearner(self._db)
|
|
189
193
|
|
|
194
|
+
def _try_init_proxy(self) -> None:
|
|
195
|
+
"""V3.5.9: Attach McpEmbedderProxy when running in LIGHT mode.
|
|
196
|
+
|
|
197
|
+
If the daemon is reachable, the proxy delegates embed calls over HTTP
|
|
198
|
+
so that MCP-stored facts have real embeddings (fixes PR #30). Silently
|
|
199
|
+
skips if the daemon is not running — keyword recall still works.
|
|
200
|
+
"""
|
|
201
|
+
try:
|
|
202
|
+
from superlocalmemory.core.mcp_embedder_proxy import McpEmbedderProxy
|
|
203
|
+
port = getattr(self._config, "daemon_port", 8765)
|
|
204
|
+
proxy = McpEmbedderProxy(port=port)
|
|
205
|
+
if proxy.is_available():
|
|
206
|
+
self._embedder = proxy
|
|
207
|
+
logger.info("MCP embedder proxy attached (daemon port %d)", port)
|
|
208
|
+
else:
|
|
209
|
+
logger.debug("Daemon not reachable — MCP will run without embedder")
|
|
210
|
+
except Exception as exc:
|
|
211
|
+
logger.debug("McpEmbedderProxy init skipped: %s", exc)
|
|
212
|
+
|
|
190
213
|
def _init_heavy_layer(self) -> None:
|
|
191
214
|
from superlocalmemory.llm.backbone import LLMBackbone
|
|
192
215
|
from superlocalmemory.core.engine_wiring import (
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Copyright (c) 2026 Varun Pratap Bhardwaj / Qualixar
|
|
2
|
+
# Licensed under AGPL-3.0-or-later - see LICENSE file
|
|
3
|
+
# Part of SuperLocalMemory V3 | https://qualixar.com
|
|
4
|
+
|
|
5
|
+
"""V3.5.9 — McpEmbedderProxy: lightweight embedder for the MCP (LIGHT) process.
|
|
6
|
+
|
|
7
|
+
Problem: MemoryEngine(Capabilities.LIGHT) skips _init_heavy_layer(), leaving
|
|
8
|
+
_embedder=None permanently. Any memory stored via MCP tools has NULL embeddings
|
|
9
|
+
→ semantic search silently broken; health() lies, reporting unavailable.
|
|
10
|
+
|
|
11
|
+
Solution: a thin proxy that delegates embed_batch() to the running daemon via
|
|
12
|
+
its POST /api/embed endpoint over localhost HTTP. The daemon runs a FULL engine
|
|
13
|
+
with one real ONNX/Ollama worker. No second ONNX process is spawned.
|
|
14
|
+
|
|
15
|
+
Usage (engine.py LIGHT branch):
|
|
16
|
+
proxy = McpEmbedderProxy(port=8765)
|
|
17
|
+
if proxy.is_available():
|
|
18
|
+
engine._embedder = proxy
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
from __future__ import annotations
|
|
22
|
+
|
|
23
|
+
import logging
|
|
24
|
+
|
|
25
|
+
logger = logging.getLogger(__name__)
|
|
26
|
+
|
|
27
|
+
_DEFAULT_TIMEOUT = 5.0 # seconds — fast enough for inline store() calls
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class McpEmbedderProxy:
|
|
31
|
+
"""Proxy embedder: MCP process → daemon's /api/embed over localhost HTTP."""
|
|
32
|
+
|
|
33
|
+
def __init__(self, port: int = 8765, timeout: float = _DEFAULT_TIMEOUT) -> None:
|
|
34
|
+
self._base_url = f"http://127.0.0.1:{port}"
|
|
35
|
+
self._timeout = timeout
|
|
36
|
+
self._available: bool | None = None # cached after first is_available() call
|
|
37
|
+
|
|
38
|
+
def is_available(self) -> bool:
|
|
39
|
+
"""Ping daemon's embed endpoint. Cached after first success."""
|
|
40
|
+
if self._available is True:
|
|
41
|
+
return True
|
|
42
|
+
try:
|
|
43
|
+
import httpx
|
|
44
|
+
resp = httpx.get(f"{self._base_url}/api/v3/embed/ping", timeout=2.0)
|
|
45
|
+
self._available = resp.status_code == 200
|
|
46
|
+
except Exception:
|
|
47
|
+
self._available = False
|
|
48
|
+
return bool(self._available)
|
|
49
|
+
|
|
50
|
+
# -- Embedder interface (matches embeddings.py / ollama_embedder.py) ------
|
|
51
|
+
|
|
52
|
+
def embed(self, text: str) -> list[float] | None:
|
|
53
|
+
"""Embed a single text via daemon. Returns None on any error."""
|
|
54
|
+
results = self.embed_batch([text])
|
|
55
|
+
return results[0] if results else None
|
|
56
|
+
|
|
57
|
+
def embed_batch(self, texts: list[str]) -> list[list[float] | None]:
|
|
58
|
+
"""Embed a batch of texts via daemon's /api/embed endpoint."""
|
|
59
|
+
if not texts:
|
|
60
|
+
return []
|
|
61
|
+
try:
|
|
62
|
+
import httpx
|
|
63
|
+
resp = httpx.post(
|
|
64
|
+
f"{self._base_url}/api/v3/embed",
|
|
65
|
+
json={"texts": texts},
|
|
66
|
+
timeout=self._timeout,
|
|
67
|
+
)
|
|
68
|
+
resp.raise_for_status()
|
|
69
|
+
data = resp.json()
|
|
70
|
+
embeddings = data.get("embeddings", [])
|
|
71
|
+
# Pad with None if daemon returned fewer results than requested
|
|
72
|
+
while len(embeddings) < len(texts):
|
|
73
|
+
embeddings.append(None)
|
|
74
|
+
return embeddings
|
|
75
|
+
except Exception as exc:
|
|
76
|
+
logger.debug("McpEmbedderProxy.embed_batch failed: %s", exc)
|
|
77
|
+
return [None] * len(texts)
|
|
78
|
+
|
|
79
|
+
def compute_fisher_params(
|
|
80
|
+
self, embedding: list[float]
|
|
81
|
+
) -> tuple[list[float] | None, list[float] | None]:
|
|
82
|
+
"""Fisher-Rao params stay in daemon's FULL engine; proxy returns None.
|
|
83
|
+
|
|
84
|
+
The MCP LIGHT process stores facts with embedding=<vector> but
|
|
85
|
+
fisher_mean=None, fisher_variance=None. The daemon's consolidation
|
|
86
|
+
pass fills these in asynchronously — same behaviour as the
|
|
87
|
+
write-through remember path.
|
|
88
|
+
"""
|
|
89
|
+
return None, None
|
|
@@ -233,17 +233,23 @@ class LLMBackbone:
|
|
|
233
233
|
self, prompt: str, system: str, max_tokens: int, temperature: float,
|
|
234
234
|
) -> tuple[str, dict[str, str], dict]:
|
|
235
235
|
messages = self._make_messages(system, prompt)
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
236
|
+
# V3.5.9: Skip Authorization header when api_key is empty so unauthenticated
|
|
237
|
+
# local endpoints (llama.cpp, LM Studio, etc.) don't reject with HTTP 401.
|
|
238
|
+
headers = {"Content-Type": "application/json"}
|
|
239
|
+
if self._api_key:
|
|
240
|
+
headers["Authorization"] = f"Bearer {self._api_key}"
|
|
240
241
|
payload = {
|
|
241
242
|
"model": self._model,
|
|
242
243
|
"messages": messages,
|
|
243
244
|
"max_tokens": max_tokens,
|
|
244
245
|
"temperature": temperature,
|
|
245
246
|
}
|
|
247
|
+
# V3.5.9: If base_url is a bare base (e.g. "http://host:port/v1") without
|
|
248
|
+
# the /chat/completions path, append it — matching OpenAI SDK behaviour and
|
|
249
|
+
# fixing the /v1/v1 duplication reported in issue #29.
|
|
246
250
|
url = self._base_url or _OPENAI_URL
|
|
251
|
+
if self._base_url and not self._base_url.rstrip("/").endswith("chat/completions"):
|
|
252
|
+
url = f"{self._base_url.rstrip('/')}/chat/completions"
|
|
247
253
|
return url, headers, payload
|
|
248
254
|
|
|
249
255
|
def _build_ollama(
|
|
@@ -278,5 +278,39 @@ _watchdog_thread = threading.Thread(target=_parent_watchdog, daemon=True, name="
|
|
|
278
278
|
_watchdog_thread.start()
|
|
279
279
|
|
|
280
280
|
|
|
281
|
+
# V3.5.9: Stdin EOF monitor — complements the parent watchdog for the case where
|
|
282
|
+
# the IDE starts a new MCP session WITHOUT quitting the app. The old stdio pipe
|
|
283
|
+
# is abandoned (write-end closed) but the parent process stays alive, so the
|
|
284
|
+
# watchdog never fires. Without this, each IDE reconnect adds a zombie process
|
|
285
|
+
# (22 seen in production causing 12 GB swap on the M5 Pro).
|
|
286
|
+
#
|
|
287
|
+
# Uses kqueue(2) KQ_EV_EOF on macOS — fires when the write-end of the stdin pipe
|
|
288
|
+
# closes WITHOUT consuming any bytes, so it cannot race with FastMCP's asyncio
|
|
289
|
+
# stdin reader. On Linux (no kqueue), the watchdog alone provides coverage.
|
|
290
|
+
def _stdin_eof_monitor() -> None:
|
|
291
|
+
"""Exit when the IDE closes our stdin pipe (kqueue — macOS only)."""
|
|
292
|
+
import select as _sel, os as _os_eof
|
|
293
|
+
_mlog = logging.getLogger(__name__ + ".stdin_monitor")
|
|
294
|
+
if not hasattr(_sel, "kqueue"):
|
|
295
|
+
return # Linux / non-macOS: watchdog covers process death
|
|
296
|
+
try:
|
|
297
|
+
fd = sys.stdin.fileno()
|
|
298
|
+
kq = _sel.kqueue()
|
|
299
|
+
ke = _sel.kevent(fd, filter=_sel.KQ_FILTER_READ, flags=_sel.KQ_EV_ADD | _sel.KQ_EV_EOF)
|
|
300
|
+
kq.control([ke], 0) # register without waiting
|
|
301
|
+
while True:
|
|
302
|
+
evs = kq.control(None, 4, 30.0) # 30 s poll — low cost
|
|
303
|
+
for ev in evs:
|
|
304
|
+
if ev.flags & _sel.KQ_EV_EOF:
|
|
305
|
+
_mlog.info("stdin write-end closed (kqueue EOF), self-terminating")
|
|
306
|
+
_os_eof._exit(0)
|
|
307
|
+
except Exception as exc:
|
|
308
|
+
_mlog.debug("stdin EOF monitor error: %s — watchdog will cover", exc)
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
_stdin_monitor_thread = threading.Thread(target=_stdin_eof_monitor, daemon=True, name="stdin-eof-monitor")
|
|
312
|
+
_stdin_monitor_thread.start()
|
|
313
|
+
|
|
314
|
+
|
|
281
315
|
if __name__ == "__main__":
|
|
282
316
|
server.run(transport="stdio")
|
|
@@ -161,9 +161,13 @@ def register_v3_tools(server, get_engine: Callable) -> None:
|
|
|
161
161
|
"fact_count": fact_count,
|
|
162
162
|
}
|
|
163
163
|
|
|
164
|
-
# Embedding service
|
|
164
|
+
# Embedding service — distinguish real embedder from V3.5.9 daemon proxy
|
|
165
|
+
_emb = engine._embedder
|
|
166
|
+
from superlocalmemory.core.mcp_embedder_proxy import McpEmbedderProxy
|
|
167
|
+
_is_proxy = isinstance(_emb, McpEmbedderProxy)
|
|
165
168
|
status["components"]["embedder"] = {
|
|
166
|
-
"status": "ok" if
|
|
169
|
+
"status": "ok" if _emb else "unavailable",
|
|
170
|
+
"source": "daemon_proxy" if _is_proxy else "local",
|
|
167
171
|
"model": engine._config.embedding.model_name,
|
|
168
172
|
}
|
|
169
173
|
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/server/routes/v3_api.py
RENAMED
|
@@ -365,6 +365,51 @@ async def test_embedding_endpoint(request: Request):
|
|
|
365
365
|
return {"success": False, "error": type(e).__name__}
|
|
366
366
|
|
|
367
367
|
|
|
368
|
+
@router.get("/embed/ping")
|
|
369
|
+
async def embed_ping():
|
|
370
|
+
"""V3.5.9: Liveness probe for McpEmbedderProxy. Returns 200 when daemon
|
|
371
|
+
embedder is ready so the proxy knows the daemon is reachable."""
|
|
372
|
+
try:
|
|
373
|
+
from .helpers import get_engine_lazy
|
|
374
|
+
# We just need to confirm the route is alive — engine check is optional
|
|
375
|
+
return {"ok": True}
|
|
376
|
+
except Exception as e:
|
|
377
|
+
return JSONResponse({"ok": False, "error": str(e)}, status_code=503)
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
@router.post("/embed")
|
|
381
|
+
async def embed_texts(request: Request):
|
|
382
|
+
"""V3.5.9: Embed texts via daemon's FULL engine for McpEmbedderProxy.
|
|
383
|
+
|
|
384
|
+
MCP processes run LIGHT engines (no ONNX worker). This endpoint lets them
|
|
385
|
+
delegate embed_batch() to the daemon's single real embedder — one ONNX
|
|
386
|
+
worker total across all sessions (fixes PR #30 NULL embedder bug).
|
|
387
|
+
"""
|
|
388
|
+
import asyncio
|
|
389
|
+
try:
|
|
390
|
+
body = await request.json()
|
|
391
|
+
texts = body.get("texts", [])
|
|
392
|
+
if not texts:
|
|
393
|
+
return {"embeddings": []}
|
|
394
|
+
|
|
395
|
+
from .helpers import get_engine_lazy
|
|
396
|
+
engine = get_engine_lazy(request.app.state)
|
|
397
|
+
if engine is None or engine._embedder is None:
|
|
398
|
+
return JSONResponse(
|
|
399
|
+
{"error": "Embedder not available in daemon"},
|
|
400
|
+
status_code=503,
|
|
401
|
+
)
|
|
402
|
+
|
|
403
|
+
loop = asyncio.get_event_loop()
|
|
404
|
+
embeddings = await loop.run_in_executor(
|
|
405
|
+
None,
|
|
406
|
+
lambda: engine._embedder.embed_batch(texts),
|
|
407
|
+
)
|
|
408
|
+
return {"embeddings": embeddings}
|
|
409
|
+
except Exception as e:
|
|
410
|
+
return JSONResponse({"error": str(e)}, status_code=500)
|
|
411
|
+
|
|
412
|
+
|
|
368
413
|
@router.post("/provider/test")
|
|
369
414
|
async def test_provider(request: Request):
|
|
370
415
|
"""Test connectivity to an LLM provider."""
|
|
@@ -400,8 +445,25 @@ async def test_provider(request: Request):
|
|
|
400
445
|
return {"success": True, "message": "OpenRouter connected, key valid"}
|
|
401
446
|
|
|
402
447
|
if provider == "openai":
|
|
448
|
+
# V3.5.9: custom/local endpoint — api_key is optional (llama.cpp, LM Studio etc.)
|
|
449
|
+
custom_endpoint = body.get("base_url", "").strip() or body.get("endpoint", "").strip()
|
|
450
|
+
if custom_endpoint:
|
|
451
|
+
headers_test = {"Content-Type": "application/json"}
|
|
452
|
+
if api_key:
|
|
453
|
+
headers_test["Authorization"] = f"Bearer {api_key}"
|
|
454
|
+
base = custom_endpoint.rstrip("/")
|
|
455
|
+
if not base.endswith("chat/completions"):
|
|
456
|
+
base = f"{base}/chat/completions"
|
|
457
|
+
with httpx.Client(timeout=httpx.Timeout(10.0)) as c:
|
|
458
|
+
# Probe with a minimal chat request (models list not universal on local servers)
|
|
459
|
+
probe = {"model": body.get("model", "test"), "messages": [{"role": "user", "content": "hi"}], "max_tokens": 1}
|
|
460
|
+
resp = c.post(base, headers=headers_test, json=probe)
|
|
461
|
+
if resp.status_code in (200, 400, 422):
|
|
462
|
+
return {"success": True, "message": f"Custom endpoint reachable (HTTP {resp.status_code})"}
|
|
463
|
+
resp.raise_for_status()
|
|
464
|
+
return {"success": True, "message": "Custom OpenAI-compatible endpoint connected"}
|
|
403
465
|
if not api_key:
|
|
404
|
-
return {"success": False, "error": "API key required"}
|
|
466
|
+
return {"success": False, "error": "API key required for official OpenAI endpoint"}
|
|
405
467
|
with httpx.Client(timeout=httpx.Timeout(10.0)) as c:
|
|
406
468
|
resp = c.get("https://api.openai.com/v1/models", headers={"Authorization": f"Bearer {api_key}"})
|
|
407
469
|
resp.raise_for_status()
|
|
@@ -90,6 +90,7 @@ src/superlocalmemory/core/injection.py
|
|
|
90
90
|
src/superlocalmemory/core/loop_watchdog.py
|
|
91
91
|
src/superlocalmemory/core/maintenance.py
|
|
92
92
|
src/superlocalmemory/core/maintenance_scheduler.py
|
|
93
|
+
src/superlocalmemory/core/mcp_embedder_proxy.py
|
|
93
94
|
src/superlocalmemory/core/modes.py
|
|
94
95
|
src/superlocalmemory/core/ollama_embedder.py
|
|
95
96
|
src/superlocalmemory/core/platform_utils.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/attribution/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/attribution/signer.py
RENAMED
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/attribution/watermark.py
RENAMED
|
File without changes
|
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/context_commands.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/service_installer.py
RENAMED
|
File without changes
|
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/version_banner.py
RENAMED
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/cli/wizard_v3426_options.py
RENAMED
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/__init__.py
RENAMED
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/blast_radius.py
RENAMED
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/bridge/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/changes.py
RENAMED
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/communities.py
RENAMED
|
File without changes
|
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/database.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/git_hooks.py
RENAMED
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/graph_engine.py
RENAMED
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/graph_store.py
RENAMED
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/incremental.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/resolver.py
RENAMED
|
File without changes
|
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/service.py
RENAMED
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/code_graph/watcher.py
RENAMED
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/compliance/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/compliance/eu_ai_act.py
RENAMED
|
File without changes
|
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/compliance/lifecycle.py
RENAMED
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/compliance/retention.py
RENAMED
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/compliance/scheduler.py
RENAMED
|
File without changes
|
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/backend_orchestrator.py
RENAMED
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/clock_monitor.py
RENAMED
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/consolidation_engine.py
RENAMED
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/context_cache.py
RENAMED
|
File without changes
|
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/embedding_worker.py
RENAMED
|
File without changes
|
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/engine_capabilities.py
RENAMED
|
File without changes
|
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/engine_wiring.py
RENAMED
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/error_catalog.py
RENAMED
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/error_envelope.py
RENAMED
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/fact_consolidator.py
RENAMED
|
File without changes
|
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/graph_analyzer.py
RENAMED
|
File without changes
|
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/health_monitor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/loop_watchdog.py
RENAMED
|
File without changes
|
|
File without changes
|
{superlocalmemory-3.5.8 → superlocalmemory-3.5.9}/src/superlocalmemory/core/maintenance_scheduler.py
RENAMED
|
File without changes
|