superlocalmemory 3.4.57__tar.gz → 3.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {superlocalmemory-3.4.57/src/superlocalmemory.egg-info → superlocalmemory-3.5.0}/PKG-INFO +4 -2
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/pyproject.toml +5 -2
- superlocalmemory-3.5.0/src/superlocalmemory/__init__.py +65 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/cli/commands.py +80 -33
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/cli/daemon.py +14 -1
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/cli/main.py +1 -1
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/backend_orchestrator.py +19 -13
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/config.py +137 -47
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/graph_pruner.py +92 -2
- superlocalmemory-3.5.0/src/superlocalmemory/core/injection.py +351 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/recall_pipeline.py +29 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/store_pipeline.py +13 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/encoding/graph_builder.py +32 -8
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/hooks/auto_recall_hook.py +50 -26
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/hooks/before_web_hook.py +3 -2
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/hooks/user_prompt_hook.py +5 -2
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/ranker_retrain_legacy.py +9 -1
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/ranker_retrain_online.py +11 -1
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/mcp/_daemon_proxy.py +1 -1
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/mcp/tools_active.py +130 -9
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/mcp/tools_context.py +18 -4
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/retrieval/bm25_channel.py +50 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/retrieval/engine.py +43 -9
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/retrieval/hopfield_channel.py +22 -9
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/retrieval/spreading_activation.py +27 -7
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/retrieval/temporal_channel.py +10 -1
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/routes/memories.py +43 -12
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/routes/v3_api.py +40 -25
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/unified_daemon.py +110 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/database.py +47 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/migration_runner.py +4 -0
- superlocalmemory-3.5.0/src/superlocalmemory/storage/migrations/M015_add_pinned_column.py +40 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/migrations/__init__.py +1 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/models.py +3 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0/src/superlocalmemory.egg-info}/PKG-INFO +4 -2
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory.egg-info/SOURCES.txt +3 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory.egg-info/requires.txt +4 -1
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/tests/test_before_web_hook.py +1 -1
- superlocalmemory-3.5.0/tests/test_injection.py +424 -0
- superlocalmemory-3.4.57/src/superlocalmemory/__init__.py +0 -40
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/AUTHORS.md +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/LICENSE +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/NOTICE +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/README.md +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/setup.cfg +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/attribution/__init__.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/attribution/mathematical_dna.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/attribution/signer.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/attribution/watermark.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/cli/__init__.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/cli/context_commands.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/cli/db_migrate.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/cli/doctor_cmd.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/cli/escape_hatch.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/cli/ingest_cmd.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/cli/json_output.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/cli/migrate_cmd.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/cli/pending_store.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/cli/post_install.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/cli/service_installer.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/cli/setup_wizard.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/cli/version_banner.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/cli/wizard_v3426_options.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/code_graph/__init__.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/code_graph/blast_radius.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/code_graph/bridge/__init__.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/code_graph/bridge/entity_resolver.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/code_graph/bridge/event_listeners.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/code_graph/bridge/fact_enricher.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/code_graph/bridge/hebbian_linker.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/code_graph/bridge/temporal_checker.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/code_graph/changes.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/code_graph/communities.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/code_graph/config.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/code_graph/database.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/code_graph/extractors/__init__.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/code_graph/extractors/python.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/code_graph/extractors/typescript.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/code_graph/flows.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/code_graph/git_hooks.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/code_graph/graph_engine.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/code_graph/graph_store.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/code_graph/incremental.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/code_graph/models.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/code_graph/parser.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/code_graph/resolver.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/code_graph/search.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/code_graph/service.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/code_graph/watcher.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/compliance/__init__.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/compliance/abac.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/compliance/audit.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/compliance/eu_ai_act.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/compliance/gdpr.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/compliance/lifecycle.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/compliance/retention.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/compliance/scheduler.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/__init__.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/clock_monitor.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/consolidation_engine.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/context_cache.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/db_pool.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/embedding_worker.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/embeddings.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/engine.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/engine_capabilities.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/engine_lock.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/engine_wiring.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/error_catalog.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/error_envelope.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/fact_consolidator.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/file_lock.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/graph_analyzer.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/health_monitor.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/hooks.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/loop_watchdog.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/maintenance.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/maintenance_scheduler.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/modes.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/ollama_embedder.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/platform_utils.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/priority_queue.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/profiles.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/pruning_engine.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/queue_consumer.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/queue_dispatcher.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/ram_lock.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/rate_limit.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/recall_gate.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/recall_queue.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/recall_worker.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/registry.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/reranker_worker.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/safe_fs.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/security_primitives.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/shadow_router.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/slm_disabled.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/slmignore.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/summarizer.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/tier_manager.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/topic_signature.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/worker_pool.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/dynamics/__init__.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/dynamics/activation_guided_quantization.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/dynamics/eap_scheduler.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/dynamics/ebbinghaus_langevin_coupling.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/dynamics/fisher_langevin_coupling.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/encoding/__init__.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/encoding/auto_linker.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/encoding/cognitive_consolidator.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/encoding/consolidator.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/encoding/context_generator.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/encoding/emotional.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/encoding/entity_resolver.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/encoding/entropy_gate.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/encoding/fact_extractor.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/encoding/foresight.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/encoding/observation_builder.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/encoding/scene_builder.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/encoding/signal_inference.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/encoding/temporal_parser.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/encoding/temporal_validator.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/encoding/type_router.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/evolution/__init__.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/evolution/blind_verifier.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/evolution/budget.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/evolution/evolution_store.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/evolution/llm_dispatch.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/evolution/mutation_generator.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/evolution/skill_evolver.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/evolution/triggers.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/evolution/types.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/graph/__init__.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/graph/cozo_backend.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/hooks/__init__.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/hooks/_outcome_common.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/hooks/adapter_base.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/hooks/antigravity_adapter.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/hooks/auto_capture.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/hooks/auto_invoker.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/hooks/auto_parameterize.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/hooks/auto_recall.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/hooks/claude_code_hooks.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/hooks/context_payload.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/hooks/copilot_adapter.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/hooks/cross_platform_connector.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/hooks/cursor_adapter.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/hooks/hook_daemon.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/hooks/hook_handlers.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/hooks/ide_connector.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/hooks/post_tool_async_hook.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/hooks/post_tool_outcome_hook.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/hooks/prewarm_auth.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/hooks/rules_engine.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/hooks/session_registry.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/hooks/stop_outcome_hook.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/hooks/sync_loop.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/hooks/topic_shift_hook.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/hooks/user_prompt_rehash_hook.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/infra/__init__.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/infra/auth_middleware.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/infra/backup.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/infra/cache_manager.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/infra/cloud_backup.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/infra/event_bus.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/infra/heartbeat_monitor.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/infra/pid_manager.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/infra/process_reaper.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/infra/rate_limiter.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/infra/webhook_dispatcher.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ingestion/__init__.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ingestion/adapter_manager.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ingestion/base_adapter.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ingestion/calendar_adapter.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ingestion/credentials.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ingestion/gmail_adapter.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ingestion/parsers.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ingestion/transcript_adapter.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/__init__.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/adaptive.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/arm_catalog.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/assertion_miner.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/bandit.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/bandit_cache.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/behavioral.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/behavioral_listener.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/bootstrap.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/consolidation_cycle.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/consolidation_quantization_worker.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/consolidation_worker.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/cross_project.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/database.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/dedup_hnsw.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/engagement.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/ensemble.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/entity_compiler.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/fact_outcome_joins.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/features.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/feedback.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/forgetting_scheduler.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/hnsw_dedup.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/labeler.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/legacy_migration.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/memory_merge.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/model_cache.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/model_rollback.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/outcome_queue.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/outcomes.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/pattern_miner.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/pattern_miner_constants.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/project_context.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/quantization_scheduler.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/ranker.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/ranker_common.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/reward.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/reward_archive.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/reward_boost.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/reward_proxy.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/shadow_test.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/signal_worker.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/signals.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/skill_performance_miner.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/source_quality.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/trigram_index.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/learning/workflows.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/llm/__init__.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/llm/backbone.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/math/__init__.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/math/ebbinghaus.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/math/fisher.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/math/fisher_quantized.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/math/hopfield.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/math/langevin.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/math/polar_quant.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/math/qjl.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/math/sheaf.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/math/turbo_quant.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/mcp/__init__.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/mcp/_pool_adapter.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/mcp/resources.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/mcp/server.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/mcp/shared.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/mcp/tools.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/mcp/tools_code_graph.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/mcp/tools_core.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/mcp/tools_evolution.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/mcp/tools_learning.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/mcp/tools_mesh.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/mcp/tools_v28.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/mcp/tools_v3.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/mcp/tools_v33.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/mesh/__init__.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/mesh/broker.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/mesh/remote_sync.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/migrations/__init__.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/migrations/v3_4_25_to_v3_4_26.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/parameterization/__init__.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/parameterization/pattern_extractor.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/parameterization/pii_filter.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/parameterization/prompt_injector.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/parameterization/prompt_lifecycle.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/parameterization/soft_prompt_generator.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/retrieval/__init__.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/retrieval/agentic.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/retrieval/ann_index.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/retrieval/bridge_discovery.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/retrieval/channel_registry.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/retrieval/entity_channel.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/retrieval/forgetting_filter.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/retrieval/fusion.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/retrieval/profile_channel.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/retrieval/quantization_aware_search.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/retrieval/reranker.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/retrieval/semantic_channel.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/retrieval/strategy.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/retrieval/vector_store.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/__init__.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/api.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/bandit_loops.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/middleware/__init__.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/middleware/security_headers.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/routes/__init__.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/routes/adapters.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/routes/agents.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/routes/backup.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/routes/behavioral.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/routes/brain.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/routes/chat.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/routes/compliance.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/routes/data_io.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/routes/entity.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/routes/events.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/routes/evolution.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/routes/helpers.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/routes/ingest.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/routes/insights.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/routes/learning.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/routes/lifecycle.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/routes/mesh.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/routes/prewarm.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/routes/profiles.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/routes/stats.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/routes/tiers.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/routes/timeline.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/routes/token.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/routes/ws.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/security_middleware.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/server/ui.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/skills/slm-build-graph/SKILL.md +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/skills/slm-list-recent/SKILL.md +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/skills/slm-recall/SKILL.md +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/skills/slm-remember/SKILL.md +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/skills/slm-show-patterns/SKILL.md +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/skills/slm-status/SKILL.md +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/skills/slm-switch-profile/SKILL.md +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/__init__.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/access_control.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/access_log.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/embedding_migrator.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/migration_v33.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/migrations/M001_add_signal_features_columns.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/migrations/M002_model_state_history.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/migrations/M003_migration_log.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/migrations/M004_cross_platform_sync_log.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/migrations/M005_bandit_tables.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/migrations/M006_action_outcomes_reward.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/migrations/M007_pending_outcomes.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/migrations/M009_model_lineage.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/migrations/M010_evolution_config.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/migrations/M011_archive_and_merge.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/migrations/M012_shadow_observations.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/migrations/M013_bi_temporal_columns.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/migrations/M014_v345_scale_ready.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/migrations.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/quantized_store.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/schema.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/schema_code_graph.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/schema_v32.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/schema_v3410.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/schema_v3411.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/schema_v343.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/schema_v345.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/schema_v347.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/storage/v2_migrator.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/trust/__init__.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/trust/gate.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/trust/provenance.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/trust/scorer.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/trust/signals.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/css/brain.css +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/css/legacy-dashboard.css +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/css/neural-glass.css +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/index.html +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/agents.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/auto-settings.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/brain.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/clusters.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/compliance.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/core.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/dashboard.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/events.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/fact-detail.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/feedback.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/graph-event-bus.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/graph-filters.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/graph-ui.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/ide-status.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/init.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/knowledge-graph.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/lifecycle.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/math-health.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/memories.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/memory-chat.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/memory-timeline.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/modal.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/ng-entities.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/ng-health.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/ng-ingestion.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/ng-mesh.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/ng-shell.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/ng-skills.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/profiles.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/quick-actions.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/recall-lab.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/search.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/settings.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/timeline.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/js/trust-dashboard.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/vendor/bootstrap-icons/bootstrap-icons.css +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff2 +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/vendor/bootstrap.bundle.min.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/vendor/bootstrap.min.css +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/vendor/d3.v7.min.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/vendor/graphology-library.min.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/vendor/graphology.umd.min.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/vendor/inter-ui/inter-variable.min.css +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable-Italic.woff2 +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable.woff2 +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/ui/vendor/sigma.min.js +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/vector/__init__.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/vector/lancedb_backend.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory.egg-info/dependency_links.txt +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory.egg-info/entry_points.txt +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory.egg-info/top_level.txt +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/tests/test_auto_hooks.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/tests/test_behavioral_full.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/tests/test_claude_hooks.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/tests/test_cli.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/tests/test_cli_json.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/tests/test_cli_v33.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/tests/test_compliance_full.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/tests/test_config_system.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/tests/test_engine_hooks.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/tests/test_event_bus.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/tests/test_features.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/tests/test_final_locomo_mini.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/tests/test_hook_handlers.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/tests/test_ide_connector.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/tests/test_infra.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/tests/test_learning_advanced.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/tests/test_learning_collectors.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/tests/test_llm_provider.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/tests/test_mcp_server.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/tests/test_migration.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/tests/test_mode_switch_preservation.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/tests/test_post_install.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/tests/test_ranker.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/tests/test_topic_shift_hook.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/tests/test_trust_full.py +0 -0
- {superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/tests/test_v3_api.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: superlocalmemory
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.5.0
|
|
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
|
|
@@ -69,6 +69,8 @@ Provides-Extra: ui
|
|
|
69
69
|
Requires-Dist: fastapi[all]>=0.135.1; extra == "ui"
|
|
70
70
|
Requires-Dist: uvicorn>=0.42.0; extra == "ui"
|
|
71
71
|
Requires-Dist: python-multipart<1.0.0,>=0.0.6; extra == "ui"
|
|
72
|
+
Provides-Extra: injection
|
|
73
|
+
Requires-Dist: tiktoken>=0.8.0; extra == "injection"
|
|
72
74
|
Provides-Extra: learning
|
|
73
75
|
Requires-Dist: lightgbm>=4.0.0; extra == "learning"
|
|
74
76
|
Provides-Extra: performance
|
|
@@ -79,7 +81,7 @@ Requires-Dist: google-auth-oauthlib>=1.2.0; extra == "ingestion"
|
|
|
79
81
|
Requires-Dist: google-api-python-client>=2.100.0; extra == "ingestion"
|
|
80
82
|
Requires-Dist: icalendar>=6.0.0; extra == "ingestion"
|
|
81
83
|
Provides-Extra: full
|
|
82
|
-
Requires-Dist: superlocalmemory[ingestion,learning,performance,search,ui]; extra == "full"
|
|
84
|
+
Requires-Dist: superlocalmemory[ingestion,injection,learning,performance,search,ui]; extra == "full"
|
|
83
85
|
Provides-Extra: dev
|
|
84
86
|
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
85
87
|
Requires-Dist: pytest-cov>=4.1; extra == "dev"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "superlocalmemory"
|
|
3
|
-
version = "3.
|
|
3
|
+
version = "3.5.0"
|
|
4
4
|
description = "Information-geometric agent memory with mathematical guarantees"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = {text = "AGPL-3.0-or-later"}
|
|
@@ -89,6 +89,9 @@ ui = [
|
|
|
89
89
|
"uvicorn>=0.42.0",
|
|
90
90
|
"python-multipart>=0.0.6,<1.0.0",
|
|
91
91
|
]
|
|
92
|
+
injection = [
|
|
93
|
+
"tiktoken>=0.8.0",
|
|
94
|
+
]
|
|
92
95
|
learning = [
|
|
93
96
|
"lightgbm>=4.0.0",
|
|
94
97
|
]
|
|
@@ -102,7 +105,7 @@ ingestion = [
|
|
|
102
105
|
"icalendar>=6.0.0",
|
|
103
106
|
]
|
|
104
107
|
full = [
|
|
105
|
-
"superlocalmemory[search,ui,learning,performance,ingestion]",
|
|
108
|
+
"superlocalmemory[search,ui,learning,performance,ingestion,injection]",
|
|
106
109
|
]
|
|
107
110
|
dev = [
|
|
108
111
|
"pytest>=8.0",
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"""SuperLocalMemory — information-geometric agent memory."""
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
|
|
5
|
+
# --- OpenMP multi-library guard (permanent fix, v3.4.58) -------------------
|
|
6
|
+
# SLM ships with torch, scikit-learn, and lightgbm — each bundles its own
|
|
7
|
+
# libomp.dylib on macOS ARM (Apple Silicon). When all three are loaded in the
|
|
8
|
+
# same process, the Intel OpenMP runtime detects duplicate libraries and either
|
|
9
|
+
# (a) emits OMP: Error #15 and aborts, or (b) crashes with SIGSEGV in
|
|
10
|
+
# __kmp_suspend_initialize_thread (address 0x580 — null thread-struct deref)
|
|
11
|
+
# when LightGBM's parallel fork tries to coordinate with PyTorch's thread pool.
|
|
12
|
+
#
|
|
13
|
+
# KMP_DUPLICATE_LIB_OK=TRUE tells the runtime to elect one master instance
|
|
14
|
+
# and continue rather than abort. This is the upstream-recommended workaround
|
|
15
|
+
# for mixed-dependency environments (PyTorch docs, scikit-learn FAQ, LightGBM
|
|
16
|
+
# issue #3877). Use unconditional assignment — not setdefault — so user env
|
|
17
|
+
# cannot accidentally disable this safety net by setting it to FALSE.
|
|
18
|
+
#
|
|
19
|
+
# OMP_NUM_THREADS=2 caps the maximum thread count before any C library reads
|
|
20
|
+
# it. With ≤2 threads the problematic parallel fork path in LightGBM's
|
|
21
|
+
# DatasetLoader::ConstructFromSampleData is avoided on all observed crash
|
|
22
|
+
# configurations. SLM datasets are small (50–5 000 rows); 2 threads gives
|
|
23
|
+
# ~90% of the performance of max-core training at zero crash risk.
|
|
24
|
+
# Users who need more threads can set SLM_LGBM_THREADS=N to override
|
|
25
|
+
# the per-call cap in ranker_retrain_online.py.
|
|
26
|
+
os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"
|
|
27
|
+
if "OMP_NUM_THREADS" not in os.environ:
|
|
28
|
+
os.environ["OMP_NUM_THREADS"] = "2"
|
|
29
|
+
# ---------------------------------------------------------------------------
|
|
30
|
+
|
|
31
|
+
__version__ = "3.4.64"
|
|
32
|
+
|
|
33
|
+
_REQUIRED_VERSIONS = {
|
|
34
|
+
"sentence_transformers": "5.3.0",
|
|
35
|
+
"onnxruntime": "1.24.4",
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def _check_critical_deps() -> None:
|
|
40
|
+
"""Warn if embedding-critical packages have wrong versions."""
|
|
41
|
+
import warnings
|
|
42
|
+
for mod_name, expected in _REQUIRED_VERSIONS.items():
|
|
43
|
+
try:
|
|
44
|
+
mod = __import__(mod_name)
|
|
45
|
+
actual = getattr(mod, "__version__", None)
|
|
46
|
+
if actual and actual != expected:
|
|
47
|
+
warnings.warn(
|
|
48
|
+
f"SuperLocalMemory requires {mod_name}=={expected} but "
|
|
49
|
+
f"{actual} is installed. This causes memory blow-up on "
|
|
50
|
+
f"Apple Silicon. Fix: pip install {mod_name}=={expected}",
|
|
51
|
+
stacklevel=2,
|
|
52
|
+
)
|
|
53
|
+
except ImportError:
|
|
54
|
+
pass
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
# Only run the dep check when a full (non-LIGHT) engine is in use.
|
|
58
|
+
# The MCP server runs in LIGHT mode — importing onnxruntime here
|
|
59
|
+
# breaks the LIGHT engine contract (ONNX_LOADED must stay False).
|
|
60
|
+
# Skip when SLM_SKIP_DEP_CHECK=1 or SLM_DISABLE_WARMUP_SIDE_EFFECTS=1.
|
|
61
|
+
if not (
|
|
62
|
+
os.environ.get("SLM_SKIP_DEP_CHECK") == "1"
|
|
63
|
+
or os.environ.get("SLM_DISABLE_WARMUP_SIDE_EFFECTS") == "1"
|
|
64
|
+
):
|
|
65
|
+
_check_critical_deps()
|
|
@@ -2067,14 +2067,18 @@ def cmd_session_context(args: Namespace) -> None:
|
|
|
2067
2067
|
This ensures the SessionStart hook completes within its 15s timeout even
|
|
2068
2068
|
when Ollama requires a 60s+ cold start. The fast path returns:
|
|
2069
2069
|
- Core Memory blocks (always-on context)
|
|
2070
|
-
- Recent high-importance memories (last
|
|
2070
|
+
- Recent high-importance memories (last N days)
|
|
2071
2071
|
- Session summary from last session
|
|
2072
2072
|
Falls back to the full engine path only if --full is passed explicitly.
|
|
2073
|
+
|
|
2074
|
+
v3.4.65: uses shared injection formatter (render_context) for identical
|
|
2075
|
+
output across MCP and CLI surfaces. --json flag returns structured JSON.
|
|
2073
2076
|
"""
|
|
2074
2077
|
import sqlite3
|
|
2075
2078
|
from pathlib import Path
|
|
2076
2079
|
from superlocalmemory.core.config import SLMConfig
|
|
2077
2080
|
|
|
2081
|
+
use_json = getattr(args, "json", False)
|
|
2078
2082
|
use_full = getattr(args, "full", False)
|
|
2079
2083
|
|
|
2080
2084
|
if use_full:
|
|
@@ -2093,13 +2097,21 @@ def cmd_session_context(args: Namespace) -> None:
|
|
|
2093
2097
|
query=getattr(args, "query", "") or "recent decisions and important context",
|
|
2094
2098
|
)
|
|
2095
2099
|
if context:
|
|
2096
|
-
|
|
2100
|
+
if use_json:
|
|
2101
|
+
from superlocalmemory.cli.json_output import json_print
|
|
2102
|
+
json_print("session-context", data={"context": context}, next_actions=[
|
|
2103
|
+
{"command": "slm recall --json <query>", "description": "Search memories"},
|
|
2104
|
+
])
|
|
2105
|
+
else:
|
|
2106
|
+
print(context)
|
|
2097
2107
|
except Exception as exc:
|
|
2098
2108
|
logger.debug("session-context (full) failed: %s", exc)
|
|
2099
2109
|
return
|
|
2100
2110
|
|
|
2101
2111
|
# ── FAST PATH: direct SQLite, no engine, <500ms ──────────────
|
|
2102
2112
|
try:
|
|
2113
|
+
from superlocalmemory.core.injection import InjectableMemory, render_context
|
|
2114
|
+
|
|
2103
2115
|
config = SLMConfig.load()
|
|
2104
2116
|
db_path = config.base_dir / "memory.db"
|
|
2105
2117
|
if not db_path.exists():
|
|
@@ -2108,78 +2120,113 @@ def cmd_session_context(args: Namespace) -> None:
|
|
|
2108
2120
|
pid = config.active_profile
|
|
2109
2121
|
conn = sqlite3.connect(str(db_path))
|
|
2110
2122
|
conn.row_factory = sqlite3.Row
|
|
2111
|
-
sections = []
|
|
2112
2123
|
|
|
2113
|
-
#
|
|
2124
|
+
# Collect facts for injection — same queries as pre-v3.4.65 but
|
|
2125
|
+
# mapped into InjectableMemory for the shared formatter.
|
|
2126
|
+
inj_mems: list[InjectableMemory] = []
|
|
2127
|
+
|
|
2128
|
+
# Core Memory blocks (compiled high-value context)
|
|
2114
2129
|
try:
|
|
2115
|
-
|
|
2130
|
+
cm_rows = conn.execute(
|
|
2116
2131
|
"SELECT block_type, content FROM core_memory_blocks "
|
|
2117
2132
|
"WHERE profile_id = ? ORDER BY block_type",
|
|
2118
2133
|
(pid,),
|
|
2119
2134
|
).fetchall()
|
|
2120
|
-
|
|
2121
|
-
|
|
2122
|
-
|
|
2135
|
+
for r in cm_rows:
|
|
2136
|
+
content = f"[{r['block_type']}] {r['content']}"
|
|
2137
|
+
inj_mems.append(InjectableMemory(
|
|
2138
|
+
content=content, score=1.0, fact_id="",
|
|
2139
|
+
importance=1.0, access_count=10,
|
|
2140
|
+
pinned=True,
|
|
2141
|
+
))
|
|
2123
2142
|
except sqlite3.OperationalError:
|
|
2124
2143
|
pass
|
|
2125
2144
|
|
|
2126
|
-
#
|
|
2145
|
+
# Recent important memories — age gate from --max-age-days (default 30)
|
|
2127
2146
|
max_age = getattr(args, "max_age_days", 30)
|
|
2128
2147
|
age_clause = (
|
|
2129
2148
|
f"AND created_at >= datetime('now', '-{int(max_age)} days') "
|
|
2130
2149
|
if max_age > 0 else ""
|
|
2131
2150
|
)
|
|
2132
2151
|
try:
|
|
2133
|
-
|
|
2134
|
-
"SELECT content,
|
|
2152
|
+
fact_rows = conn.execute(
|
|
2153
|
+
"SELECT fact_id, content, importance, access_count, fact_type FROM atomic_facts "
|
|
2135
2154
|
"WHERE profile_id = ? "
|
|
2136
2155
|
f"{age_clause}"
|
|
2137
2156
|
"AND lifecycle = 'active' "
|
|
2138
2157
|
"ORDER BY importance DESC, created_at DESC LIMIT 10",
|
|
2139
2158
|
(pid,),
|
|
2140
2159
|
).fetchall()
|
|
2141
|
-
|
|
2142
|
-
|
|
2143
|
-
|
|
2144
|
-
|
|
2145
|
-
|
|
2146
|
-
|
|
2160
|
+
for r in fact_rows:
|
|
2161
|
+
inj_mems.append(InjectableMemory(
|
|
2162
|
+
content=r["content"],
|
|
2163
|
+
score=r["importance"] or 0.5,
|
|
2164
|
+
fact_id=r["fact_id"],
|
|
2165
|
+
importance=r["importance"] or 0.0,
|
|
2166
|
+
access_count=r["access_count"] or 0,
|
|
2167
|
+
))
|
|
2147
2168
|
except sqlite3.OperationalError:
|
|
2148
2169
|
pass
|
|
2149
2170
|
|
|
2150
|
-
#
|
|
2171
|
+
# Session markers (last session summary)
|
|
2151
2172
|
try:
|
|
2152
|
-
|
|
2153
|
-
"SELECT content,
|
|
2173
|
+
sess_rows = conn.execute(
|
|
2174
|
+
"SELECT fact_id, content, importance, access_count FROM atomic_facts "
|
|
2154
2175
|
"WHERE profile_id = ? AND content LIKE 'Session%' "
|
|
2155
2176
|
"ORDER BY created_at DESC LIMIT 3",
|
|
2156
2177
|
(pid,),
|
|
2157
2178
|
).fetchall()
|
|
2158
|
-
|
|
2159
|
-
|
|
2160
|
-
|
|
2179
|
+
for r in sess_rows:
|
|
2180
|
+
inj_mems.append(InjectableMemory(
|
|
2181
|
+
content=r["content"],
|
|
2182
|
+
score=r["importance"] or 0.3,
|
|
2183
|
+
fact_id=r["fact_id"],
|
|
2184
|
+
importance=r["importance"] or 0.0,
|
|
2185
|
+
access_count=r["access_count"] or 0,
|
|
2186
|
+
))
|
|
2161
2187
|
except sqlite3.OperationalError:
|
|
2162
2188
|
pass
|
|
2163
2189
|
|
|
2164
|
-
|
|
2190
|
+
conn.close()
|
|
2191
|
+
|
|
2192
|
+
if not inj_mems:
|
|
2193
|
+
return
|
|
2194
|
+
|
|
2195
|
+
# V3.3 Soft prompts (auto-learned patterns) — append as high-importance
|
|
2165
2196
|
try:
|
|
2166
|
-
|
|
2197
|
+
conn2 = sqlite3.connect(str(db_path))
|
|
2198
|
+
conn2.row_factory = sqlite3.Row
|
|
2199
|
+
sp_rows = conn2.execute(
|
|
2167
2200
|
"SELECT category, content FROM soft_prompt_templates "
|
|
2168
2201
|
"WHERE profile_id = ? AND active = 1 "
|
|
2169
2202
|
"ORDER BY confidence DESC LIMIT 5",
|
|
2170
2203
|
(pid,),
|
|
2171
2204
|
).fetchall()
|
|
2172
|
-
|
|
2173
|
-
|
|
2174
|
-
|
|
2175
|
-
|
|
2205
|
+
conn2.close()
|
|
2206
|
+
for r in sp_rows:
|
|
2207
|
+
inj_mems.append(InjectableMemory(
|
|
2208
|
+
content=f"[{r['category']}] {r['content']}",
|
|
2209
|
+
score=0.7, fact_id="",
|
|
2210
|
+
importance=0.7, access_count=5,
|
|
2211
|
+
))
|
|
2212
|
+
except Exception:
|
|
2176
2213
|
pass
|
|
2177
2214
|
|
|
2178
|
-
|
|
2215
|
+
cfg_inj = getattr(config, "injection", None)
|
|
2216
|
+
context = render_context(inj_mems, mode=config.mode.value.upper(), cfg=cfg_inj, wrap=True)
|
|
2217
|
+
if context:
|
|
2218
|
+
if use_json:
|
|
2219
|
+
from superlocalmemory.cli.json_output import json_print
|
|
2220
|
+
json_print("session-context", data={
|
|
2221
|
+
"context": context,
|
|
2222
|
+
"memory_count": len(inj_mems),
|
|
2223
|
+
"mode": config.mode.value.upper(),
|
|
2224
|
+
}, next_actions=[
|
|
2225
|
+
{"command": "slm recall --json <query>", "description": "Search memories"},
|
|
2226
|
+
])
|
|
2227
|
+
else:
|
|
2228
|
+
print(context)
|
|
2179
2229
|
|
|
2180
|
-
if sections:
|
|
2181
|
-
header = f"# SLM Session Context — {config.active_profile}"
|
|
2182
|
-
print(header + "\n\n" + "\n\n".join(sections))
|
|
2183
2230
|
except Exception as exc:
|
|
2184
2231
|
logger.debug("session-context (fast) failed: %s", exc)
|
|
2185
2232
|
|
|
@@ -171,6 +171,17 @@ def _start_daemon_subprocess() -> bool:
|
|
|
171
171
|
else:
|
|
172
172
|
kwargs["start_new_session"] = True
|
|
173
173
|
|
|
174
|
+
# v3.4.60: Force OMP_NUM_THREADS=1 in daemon env BEFORE Python imports
|
|
175
|
+
# numpy/torch/lightgbm. Setting it in __init__.py is too late on M5 Pro —
|
|
176
|
+
# by the time superlocalmemory.__init__ runs, libomp has already been
|
|
177
|
+
# initialized by an earlier import, causing the SIGSEGV at
|
|
178
|
+
# __kmp_suspend_initialize_thread when lightgbm forks its worker pool.
|
|
179
|
+
# Forcing serial OpenMP eliminates the parallel barrier race entirely.
|
|
180
|
+
daemon_env = os.environ.copy()
|
|
181
|
+
daemon_env["OMP_NUM_THREADS"] = "1"
|
|
182
|
+
daemon_env["KMP_DUPLICATE_LIB_OK"] = "TRUE"
|
|
183
|
+
kwargs["env"] = daemon_env
|
|
184
|
+
|
|
174
185
|
with open(log_file, "a") as lf:
|
|
175
186
|
proc = subprocess.Popen(cmd, stdout=lf, stderr=lf, **kwargs)
|
|
176
187
|
|
|
@@ -523,8 +534,10 @@ class DaemonHandler(BaseHTTPRequestHandler):
|
|
|
523
534
|
session_id = f"http:{int(_t.time() * 1000)}"
|
|
524
535
|
|
|
525
536
|
engine = _get_engine()
|
|
537
|
+
raw_fast = params.get("fast", ["false"])[0]
|
|
538
|
+
fast = raw_fast.lower() in ("true", "1")
|
|
526
539
|
response = engine.recall(
|
|
527
|
-
query, limit=limit, session_id=session_id,
|
|
540
|
+
query, limit=limit, session_id=session_id, fast=fast,
|
|
528
541
|
)
|
|
529
542
|
# Return the same field shape as recall_worker._handle_recall,
|
|
530
543
|
# so MCP processes that proxy through the daemon get recall_trace-
|
|
@@ -136,7 +136,7 @@ def main() -> None:
|
|
|
136
136
|
|
|
137
137
|
mode_p = sub.add_parser("mode", help="Get or set operating mode (a/b/c)")
|
|
138
138
|
mode_p.add_argument(
|
|
139
|
-
"value", nargs="?", choices=["a", "b", "c"], help="Mode to set",
|
|
139
|
+
"value", nargs="?", choices=["a", "b", "c", "A", "B", "C"], help="Mode to set",
|
|
140
140
|
)
|
|
141
141
|
mode_p.add_argument("--json", action="store_true", help="Output structured JSON (agent-native)")
|
|
142
142
|
|
{superlocalmemory-3.4.57 → superlocalmemory-3.5.0}/src/superlocalmemory/core/backend_orchestrator.py
RENAMED
|
@@ -62,7 +62,7 @@ class BackendOrchestrator:
|
|
|
62
62
|
def __init__(self, config: SLMConfig, db: DatabaseManager) -> None:
|
|
63
63
|
self._config = config
|
|
64
64
|
self._db = db
|
|
65
|
-
self._data_dir = Path(config
|
|
65
|
+
self._data_dir = Path(getattr(config, "data_dir", None) or config.base_dir)
|
|
66
66
|
self._cozo: Any = None
|
|
67
67
|
self._lancedb: Any = None
|
|
68
68
|
self._tiers: Any = None
|
|
@@ -236,22 +236,28 @@ class BackendOrchestrator:
|
|
|
236
236
|
# ------------------------------------------------------------------
|
|
237
237
|
|
|
238
238
|
def _detect_cozo(self) -> bool:
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
try:
|
|
242
|
-
import pycozo # noqa: F401
|
|
243
|
-
return True
|
|
244
|
-
except ImportError:
|
|
239
|
+
gb = getattr(self._config, "graph_backend", "auto") or "auto"
|
|
240
|
+
if gb == "sqlite":
|
|
245
241
|
return False
|
|
242
|
+
if gb in ("auto", "cozo"):
|
|
243
|
+
try:
|
|
244
|
+
import pycozo # noqa: F401
|
|
245
|
+
return True
|
|
246
|
+
except ImportError:
|
|
247
|
+
return False
|
|
248
|
+
return False
|
|
246
249
|
|
|
247
250
|
def _detect_lancedb(self) -> bool:
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
try:
|
|
251
|
-
import lancedb # noqa: F401
|
|
252
|
-
return True
|
|
253
|
-
except ImportError:
|
|
251
|
+
vb = getattr(self._config, "vector_backend", "auto") or "auto"
|
|
252
|
+
if vb == "sqlite-vec":
|
|
254
253
|
return False
|
|
254
|
+
if vb in ("auto", "lancedb"):
|
|
255
|
+
try:
|
|
256
|
+
import lancedb # noqa: F401
|
|
257
|
+
return True
|
|
258
|
+
except ImportError:
|
|
259
|
+
return False
|
|
260
|
+
return False
|
|
255
261
|
|
|
256
262
|
# ------------------------------------------------------------------
|
|
257
263
|
# Internal: Init
|
|
@@ -233,6 +233,50 @@ class MathConfig:
|
|
|
233
233
|
# Rate-Distortion (production only, disabled for benchmarks)
|
|
234
234
|
|
|
235
235
|
|
|
236
|
+
# ---------------------------------------------------------------------------
|
|
237
|
+
# Context Injection (v3.4.65)
|
|
238
|
+
# ---------------------------------------------------------------------------
|
|
239
|
+
|
|
240
|
+
@dataclass(frozen=True)
|
|
241
|
+
class InjectionConfig:
|
|
242
|
+
"""Context-injection budgets & framing (v3.4.65).
|
|
243
|
+
|
|
244
|
+
Single source of truth for what reaches the agent at session_init,
|
|
245
|
+
prestage_context, and the recall hooks. Replaces scattered char caps.
|
|
246
|
+
|
|
247
|
+
Budgets are in *estimated tokens* (chars/4 heuristic; see
|
|
248
|
+
core/injection.estimate_tokens). Mode-aware: A=fast/cheap, C=rich.
|
|
249
|
+
"""
|
|
250
|
+
enabled: bool = True
|
|
251
|
+
|
|
252
|
+
# Mode-aware TOTAL budget (core block + recall), in estimated tokens.
|
|
253
|
+
total_budget_tokens_a: int = 2000
|
|
254
|
+
total_budget_tokens_b: int = 4000
|
|
255
|
+
total_budget_tokens_c: int = 8000
|
|
256
|
+
|
|
257
|
+
# Per-memory ceiling (estimated tokens). Whole-memory inclusion until
|
|
258
|
+
# the total budget is hit; this only clamps a single oversized memory.
|
|
259
|
+
per_memory_max_tokens: int = 600
|
|
260
|
+
|
|
261
|
+
# Core Memory Block (Letta pattern).
|
|
262
|
+
core_block_enabled: bool = True
|
|
263
|
+
core_block_max_facts: int = 5
|
|
264
|
+
core_block_max_tokens: int = 1000
|
|
265
|
+
core_block_importance_min: float = 0.8
|
|
266
|
+
core_block_min_access_count: int = 2
|
|
267
|
+
|
|
268
|
+
# Lost-in-the-middle: place strongest at top & bottom edges.
|
|
269
|
+
edge_ordering: bool = True
|
|
270
|
+
|
|
271
|
+
# Trust framing. False (shipped) = cautious "reference only" wrapper.
|
|
272
|
+
# True (Varun personal) = clean "memory context" framing.
|
|
273
|
+
# redact_secrets ALWAYS runs regardless.
|
|
274
|
+
trust_first_party: bool = False
|
|
275
|
+
|
|
276
|
+
# prestage_context response byte cap (was hardcoded 16 KB).
|
|
277
|
+
prestage_max_response_bytes: int = 64 * 1024
|
|
278
|
+
|
|
279
|
+
|
|
236
280
|
# ---------------------------------------------------------------------------
|
|
237
281
|
# Master Config
|
|
238
282
|
# ---------------------------------------------------------------------------
|
|
@@ -613,6 +657,10 @@ class SLMConfig:
|
|
|
613
657
|
parameterization: ParameterizationConfig = field(
|
|
614
658
|
default_factory=ParameterizationConfig,
|
|
615
659
|
)
|
|
660
|
+
injection: InjectionConfig = field(default_factory=InjectionConfig)
|
|
661
|
+
# v3.5.0: scaling backends — "sqlite" / "cozo" / "auto" / "lancedb" / "sqlite-vec" / "auto".
|
|
662
|
+
graph_backend: str = "auto" # "auto" = cozo if pycozo installed, else sqlite
|
|
663
|
+
vector_backend: str = "auto" # "auto" = lancedb if installed, else sqlite-vec
|
|
616
664
|
evolution: EvolutionConfig = field(default_factory=EvolutionConfig)
|
|
617
665
|
|
|
618
666
|
# v3.4.3: Daemon configuration
|
|
@@ -701,6 +749,24 @@ class SLMConfig:
|
|
|
701
749
|
if k in EvolutionConfig.__dataclass_fields__
|
|
702
750
|
})
|
|
703
751
|
|
|
752
|
+
# V3.4.65: Injection config (additive — defaults if missing from JSON)
|
|
753
|
+
inj = data.get("injection", {}) or {}
|
|
754
|
+
config.injection = InjectionConfig(
|
|
755
|
+
enabled=bool(inj.get("enabled", True)),
|
|
756
|
+
total_budget_tokens_a=int(inj.get("total_budget_tokens_a", 2000)),
|
|
757
|
+
total_budget_tokens_b=int(inj.get("total_budget_tokens_b", 4000)),
|
|
758
|
+
total_budget_tokens_c=int(inj.get("total_budget_tokens_c", 8000)),
|
|
759
|
+
per_memory_max_tokens=int(inj.get("per_memory_max_tokens", 600)),
|
|
760
|
+
core_block_enabled=bool(inj.get("core_block_enabled", True)),
|
|
761
|
+
core_block_max_facts=int(inj.get("core_block_max_facts", 5)),
|
|
762
|
+
core_block_max_tokens=int(inj.get("core_block_max_tokens", 1000)),
|
|
763
|
+
core_block_importance_min=float(inj.get("core_block_importance_min", 0.8)),
|
|
764
|
+
core_block_min_access_count=int(inj.get("core_block_min_access_count", 2)),
|
|
765
|
+
edge_ordering=bool(inj.get("edge_ordering", True)),
|
|
766
|
+
trust_first_party=bool(inj.get("trust_first_party", False)),
|
|
767
|
+
prestage_max_response_bytes=int(inj.get("prestage_max_response_bytes", 64 * 1024)),
|
|
768
|
+
)
|
|
769
|
+
|
|
704
770
|
return config
|
|
705
771
|
|
|
706
772
|
def save(
|
|
@@ -775,6 +841,23 @@ class SLMConfig:
|
|
|
775
841
|
"max_evolutions_per_cycle": self.evolution.max_evolutions_per_cycle,
|
|
776
842
|
}
|
|
777
843
|
|
|
844
|
+
# V3.4.65: Persist injection config
|
|
845
|
+
data["injection"] = {
|
|
846
|
+
"enabled": self.injection.enabled,
|
|
847
|
+
"total_budget_tokens_a": self.injection.total_budget_tokens_a,
|
|
848
|
+
"total_budget_tokens_b": self.injection.total_budget_tokens_b,
|
|
849
|
+
"total_budget_tokens_c": self.injection.total_budget_tokens_c,
|
|
850
|
+
"per_memory_max_tokens": self.injection.per_memory_max_tokens,
|
|
851
|
+
"core_block_enabled": self.injection.core_block_enabled,
|
|
852
|
+
"core_block_max_facts": self.injection.core_block_max_facts,
|
|
853
|
+
"core_block_max_tokens": self.injection.core_block_max_tokens,
|
|
854
|
+
"core_block_importance_min": self.injection.core_block_importance_min,
|
|
855
|
+
"core_block_min_access_count": self.injection.core_block_min_access_count,
|
|
856
|
+
"edge_ordering": self.injection.edge_ordering,
|
|
857
|
+
"trust_first_party": self.injection.trust_first_party,
|
|
858
|
+
"prestage_max_response_bytes": self.injection.prestage_max_response_bytes,
|
|
859
|
+
}
|
|
860
|
+
|
|
778
861
|
# Preserve existing V3.3 config sections that aren't in for_mode()
|
|
779
862
|
for key in ("forgetting", "quantization", "sagq", "embedding_signature", "auto_invoke"):
|
|
780
863
|
if key in existing:
|
|
@@ -1000,80 +1083,87 @@ class SLMConfig:
|
|
|
1000
1083
|
new_mode: str,
|
|
1001
1084
|
base_dir: Path | None = None,
|
|
1002
1085
|
) -> "SLMConfig":
|
|
1003
|
-
"""Switch to a different mode, preserving
|
|
1004
|
-
|
|
1005
|
-
v3.4.
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1086
|
+
"""Switch to a different mode, preserving ALL non-mode settings.
|
|
1087
|
+
|
|
1088
|
+
v3.4.58 fix: Only ``config.mode`` changes. The previous implementation
|
|
1089
|
+
called ``for_mode()`` (which resets embedding/LLM/retrieval to mode
|
|
1090
|
+
defaults) whenever the target mode's per-mode file didn't exist.
|
|
1091
|
+
This silently clobbered custom embeddings, endpoints, and LLM config.
|
|
1092
|
+
|
|
1093
|
+
Correct behavior:
|
|
1094
|
+
- Load the current (old) config from config.json.
|
|
1095
|
+
- Save it to mode_{old}.json for the 3-mode system.
|
|
1096
|
+
- If mode_{new}.json exists, load it (user had a prior config for that mode).
|
|
1097
|
+
- If mode_{new}.json does NOT exist: start from the OLD config, change
|
|
1098
|
+
only the mode field. This preserves embedding, retrieval, forgetting, etc.
|
|
1099
|
+
- Exception: if user has NO LLM provider AND is switching to B/C, populate
|
|
1100
|
+
sensible LLM defaults so the daemon doesn't start dead.
|
|
1101
|
+
- Write the result to config.json (backward compat) and current_mode.
|
|
1010
1102
|
|
|
1011
1103
|
Returns the new active config.
|
|
1012
1104
|
"""
|
|
1105
|
+
import copy
|
|
1106
|
+
import dataclasses
|
|
1107
|
+
|
|
1013
1108
|
from superlocalmemory.storage.models import Mode as _M
|
|
1014
1109
|
_base = base_dir or DEFAULT_BASE_DIR
|
|
1015
1110
|
_base.mkdir(parents=True, exist_ok=True)
|
|
1016
1111
|
|
|
1017
1112
|
old_config = cls.load(_base / "config.json")
|
|
1018
1113
|
old_mode = old_config.mode.value.lower()
|
|
1019
|
-
|
|
1020
1114
|
new_mode_val = _M(new_mode.lower())
|
|
1021
1115
|
|
|
1022
|
-
# 1. Save current config to its per-mode file (
|
|
1023
|
-
# matched — prevents overwriting user customizations)
|
|
1116
|
+
# 1. Save current config to its per-mode file (preserve customizations)
|
|
1024
1117
|
if old_mode != new_mode.lower():
|
|
1025
1118
|
old_path = cls._mode_config_path(_base, old_config.mode)
|
|
1026
1119
|
old_config.save(old_path)
|
|
1027
1120
|
|
|
1028
|
-
# 2.
|
|
1121
|
+
# 2. Determine new config:
|
|
1122
|
+
# a) mode_{new}.json exists → user had prior config for this mode, use it
|
|
1123
|
+
# b) otherwise → copy old config, change only mode
|
|
1029
1124
|
new_path = cls._mode_config_path(_base, new_mode_val)
|
|
1030
|
-
need_migration = False
|
|
1031
1125
|
if new_path.exists():
|
|
1032
1126
|
try:
|
|
1033
1127
|
new_config = cls.load(new_path)
|
|
1034
|
-
# Ensure the loaded config actually has the right mode
|
|
1035
1128
|
if new_config.mode != new_mode_val:
|
|
1036
|
-
|
|
1129
|
+
# Corrupt/mismatched mode file — rebuild preserving old values
|
|
1130
|
+
new_config = copy.copy(old_config)
|
|
1131
|
+
new_config.mode = new_mode_val
|
|
1037
1132
|
except Exception:
|
|
1038
|
-
new_config =
|
|
1133
|
+
new_config = copy.copy(old_config)
|
|
1134
|
+
new_config.mode = new_mode_val
|
|
1039
1135
|
else:
|
|
1040
|
-
# First time switching to this mode:
|
|
1041
|
-
#
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
else:
|
|
1057
|
-
new_config =
|
|
1136
|
+
# First time switching to this mode: start from old config, change mode only.
|
|
1137
|
+
# Use dataclasses.replace() to produce a new frozen-compatible object.
|
|
1138
|
+
new_config = dataclasses.replace(old_config, mode=new_mode_val)
|
|
1139
|
+
|
|
1140
|
+
# 3. LLM default population — ONLY if user has no provider AND switching to B/C.
|
|
1141
|
+
# Never overwrites an existing provider.
|
|
1142
|
+
if new_mode_val in (_M.B, _M.C) and not new_config.llm.provider:
|
|
1143
|
+
if new_mode_val == _M.B:
|
|
1144
|
+
new_config = dataclasses.replace(
|
|
1145
|
+
new_config,
|
|
1146
|
+
llm=LLMConfig(
|
|
1147
|
+
provider="ollama",
|
|
1148
|
+
model="llama3.2",
|
|
1149
|
+
api_base="http://localhost:11434",
|
|
1150
|
+
),
|
|
1151
|
+
)
|
|
1152
|
+
else: # Mode C
|
|
1153
|
+
new_config = dataclasses.replace(
|
|
1154
|
+
new_config,
|
|
1155
|
+
llm=LLMConfig(
|
|
1156
|
+
provider="openrouter",
|
|
1157
|
+
model="anthropic/claude-sonnet-4",
|
|
1158
|
+
),
|
|
1159
|
+
)
|
|
1058
1160
|
|
|
1059
|
-
#
|
|
1161
|
+
# 4. Save as active config.json (backward compat)
|
|
1060
1162
|
new_config.save(_base / "config.json", mode_change=True)
|
|
1061
1163
|
|
|
1062
|
-
#
|
|
1164
|
+
# 5. Write current_mode
|
|
1063
1165
|
cls.write_current_mode(new_mode, _base)
|
|
1064
1166
|
|
|
1065
|
-
# 5. On first migration, also save mode_a.json and mode_c.json
|
|
1066
|
-
# so users have a complete set
|
|
1067
|
-
if need_migration:
|
|
1068
|
-
for _m in (_M.A, _M.B, _M.C):
|
|
1069
|
-
_mp = cls._mode_config_path(_base, _m)
|
|
1070
|
-
if not _mp.exists():
|
|
1071
|
-
try:
|
|
1072
|
-
_mc = cls.for_mode(_m, base_dir=_base)
|
|
1073
|
-
_mc.save(_mp)
|
|
1074
|
-
except Exception:
|
|
1075
|
-
pass
|
|
1076
|
-
|
|
1077
1167
|
return new_config
|
|
1078
1168
|
|
|
1079
1169
|
@classmethod
|