superlocalmemory 3.7.7__tar.gz → 3.7.8__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.7.7/src/superlocalmemory.egg-info → superlocalmemory-3.7.8}/PKG-INFO +3 -4
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/README.md +2 -2
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/pyproject.toml +1 -2
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/__init__.py +1 -1
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/cli/commands.py +2 -2
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/infra/auth_middleware.py +28 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/mcp/tools_core.py +42 -4
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/api.py +17 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/chat.py +63 -12
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/memories.py +58 -11
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/v3_api.py +31 -32
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/ui.py +10 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/unified_daemon.py +47 -19
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/schema_v32.py +0 -9
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8/src/superlocalmemory.egg-info}/PKG-INFO +3 -4
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory.egg-info/requires.txt +0 -1
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/AUTHORS.md +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/LICENSE +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/NOTICE +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/plugin-src/skills/slm-cache/SKILL.md +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/plugin-src/skills/slm-compress/SKILL.md +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/plugin-src/skills/slm-graph/SKILL.md +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/plugin-src/skills/slm-recall/SKILL.md +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/plugin-src/skills/slm-remember/SKILL.md +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/plugin-src/skills/slm-session/SKILL.md +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/plugin-src/skills/slm-status/SKILL.md +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/setup.cfg +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/attribution/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/attribution/mathematical_dna.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/attribution/signer.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/attribution/watermark.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/cli/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/cli/_lazy_init.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/cli/cache_cmd.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/cli/compress_cmd.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/cli/context_commands.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/cli/daemon.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/cli/db_migrate.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/cli/diagnostics_cmd.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/cli/escape_hatch.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/cli/evidence_cmd.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/cli/help_cmd.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/cli/ingest_cmd.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/cli/json_output.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/cli/main.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/cli/migrate_cmd.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/cli/optimize_cmd.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/cli/optimize_constants.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/cli/pending_store.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/cli/post_install.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/cli/proxy_cmd.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/cli/scale_engine_cmd.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/cli/service_installer.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/cli/setup_wizard.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/cli/version_banner.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/cli/wizard_v3426_options.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/code_graph/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/code_graph/blast_radius.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/code_graph/bridge/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/code_graph/bridge/entity_resolver.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/code_graph/bridge/event_listeners.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/code_graph/bridge/fact_enricher.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/code_graph/bridge/hebbian_linker.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/code_graph/bridge/temporal_checker.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/code_graph/changes.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/code_graph/communities.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/code_graph/config.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/code_graph/database.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/code_graph/extractors/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/code_graph/extractors/python.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/code_graph/extractors/typescript.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/code_graph/flows.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/code_graph/git_hooks.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/code_graph/graph_engine.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/code_graph/graph_store.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/code_graph/incremental.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/code_graph/models.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/code_graph/parser.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/code_graph/resolver.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/code_graph/search.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/code_graph/service.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/code_graph/watcher.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/compliance/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/compliance/abac.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/compliance/audit.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/compliance/eu_ai_act.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/compliance/gdpr.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/compliance/lifecycle.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/compliance/retention.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/compliance/scheduler.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/backend_orchestrator.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/block_hygiene.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/clock_monitor.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/config.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/consolidation_engine.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/context_cache.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/db_pool.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/derivation_lineage.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/embedding_worker.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/embeddings.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/engine.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/engine_capabilities.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/engine_ingestion.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/engine_lock.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/engine_wiring.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/error_catalog.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/error_envelope.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/evidence_bundle.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/fact_consolidator.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/file_lock.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/graph_analyzer.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/graph_pruner.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/health_monitor.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/hooks.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/ingest_gate.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/ingestion_command.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/injection.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/lifecycle_state.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/loop_watchdog.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/maintenance.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/maintenance_scheduler.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/mcp_embedder_proxy.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/modes.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/mutations.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/ollama_embedder.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/platform_utils.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/priority_queue.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/profiles.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/pruning_engine.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/queue_consumer.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/queue_dispatcher.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/ram_lock.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/rate_limit.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/recall_gate.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/recall_pipeline.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/recall_queue.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/recall_worker.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/registry.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/remote_mode.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/reranker_worker.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/safe_fs.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/scale_engine.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/score_contract.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/security_primitives.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/shadow_router.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/slm_disabled.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/slmignore.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/store_pipeline.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/summarizer.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/tier_manager.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/topic_signature.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/core/worker_pool.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/dynamics/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/dynamics/activation_guided_quantization.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/dynamics/eap_scheduler.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/dynamics/ebbinghaus_langevin_coupling.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/dynamics/fisher_langevin_coupling.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/encoding/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/encoding/auto_linker.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/encoding/cognitive_consolidator.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/encoding/consolidator.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/encoding/context_generator.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/encoding/emotional.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/encoding/entity_resolver.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/encoding/entropy_gate.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/encoding/fact_extractor.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/encoding/foresight.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/encoding/graph_builder.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/encoding/observation_builder.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/encoding/scene_builder.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/encoding/signal_inference.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/encoding/temporal_parser.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/encoding/temporal_validator.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/encoding/type_router.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/evaluation/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/evaluation/calibration.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/evolution/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/evolution/blind_verifier.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/evolution/budget.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/evolution/evolution_store.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/evolution/llm_dispatch.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/evolution/mutation_generator.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/evolution/skill_evolver.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/evolution/triggers.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/evolution/types.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/graph/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/graph/cozo_backend.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/_outcome_common.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/adapter_base.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/antigravity_adapter.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/auto_capture.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/auto_invoker.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/auto_parameterize.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/auto_recall.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/auto_recall_hook.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/before_web_hook.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/claude_code_hooks.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/codex_assets.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/codex_hooks.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/context_payload.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/copilot_adapter.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/cross_platform_connector.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/cursor_adapter.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/hook_daemon.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/hook_handlers.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/ide_connector.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/memory_protocol.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/portable_kit.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/post_tool_async_hook.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/post_tool_outcome_hook.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/prewarm_auth.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/rules_engine.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/session_registry.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/stop_outcome_hook.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/sync_loop.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/topic_shift_hook.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/user_prompt_hook.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/hooks/user_prompt_rehash_hook.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/infra/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/infra/backup.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/infra/cache_manager.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/infra/cloud_backup.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/infra/daemon_identity.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/infra/data_root.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/infra/event_bus.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/infra/heartbeat_monitor.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/infra/local_diagnostics.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/infra/pid_manager.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/infra/process_reaper.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/infra/rate_limiter.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/infra/webhook_dispatcher.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ingestion/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ingestion/adapter_manager.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ingestion/base_adapter.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ingestion/calendar_adapter.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ingestion/credentials.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ingestion/gmail_adapter.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ingestion/parsers.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ingestion/transcript_adapter.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/adaptive.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/arm_catalog.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/assertion_miner.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/bandit.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/bandit_cache.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/behavioral.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/behavioral_listener.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/bootstrap.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/consolidation_cycle.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/consolidation_quantization_worker.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/consolidation_worker.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/cross_project.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/database.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/dedup_hnsw.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/engagement.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/ensemble.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/entity_compiler.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/fact_outcome_joins.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/features.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/feedback.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/forgetting_scheduler.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/hnsw_dedup.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/labeler.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/legacy_migration.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/lightgbm_subprocess.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/memory_merge.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/model_cache.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/model_rollback.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/outcome_queue.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/outcomes.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/pattern_miner.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/pattern_miner_constants.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/project_context.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/quantization_scheduler.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/ranker.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/ranker_common.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/ranker_retrain_legacy.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/ranker_retrain_online.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/reward.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/reward_archive.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/reward_boost.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/reward_proxy.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/shadow_test.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/signal_worker.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/signals.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/skill_performance_miner.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/source_quality.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/trigram_index.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/learning/workflows.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/llm/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/llm/backbone.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/math/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/math/ebbinghaus.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/math/fisher.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/math/fisher_quantized.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/math/hopfield.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/math/langevin.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/math/polar_quant.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/math/qjl.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/math/sheaf.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/math/turbo_quant.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/mcp/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/mcp/_daemon_proxy.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/mcp/_pool_adapter.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/mcp/_stdin_guard.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/mcp/agent_context.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/mcp/cli_fallback.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/mcp/http_transport.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/mcp/resources.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/mcp/server.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/mcp/shared.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/mcp/tools.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/mcp/tools_active.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/mcp/tools_code_graph.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/mcp/tools_context.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/mcp/tools_evolution.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/mcp/tools_learning.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/mcp/tools_mesh.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/mcp/tools_optimize.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/mcp/tools_v28.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/mcp/tools_v3.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/mcp/tools_v33.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/mesh/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/mesh/broker.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/mesh/remote_sync.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/migrations/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/migrations/v3_4_25_to_v3_4_26.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/NOTICE +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/adapters/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/adapters/_agent_registry.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/adapters/anthropic_adapter.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/adapters/openai_adapter.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/adapters/wrap.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/cache/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/cache/boundary_store.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/cache/centroid_store.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/cache/context_key.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/cache/exact.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/cache/invalidation.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/cache/key_builder.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/cache/manager.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/cache/semantic.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/cache/stampede.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/compress/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/compress/align.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/compress/ccr.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/compress/prose_llmlingua.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/compress/router.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/config/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/config/defaults.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/config/schema.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/config/store.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/metrics/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/metrics/counters.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/metrics/estimator.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/metrics/exporters.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/metrics/persistence.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/proxy/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/proxy/_helpers.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/proxy/anthropic_surface.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/proxy/capture.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/proxy/gemini_surface.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/proxy/lifecycle.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/proxy/openai_surface.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/proxy/server.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/proxy/vertex_surface.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/storage/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/storage/db.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/optimize/storage/schema.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/parameterization/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/parameterization/pattern_extractor.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/parameterization/pii_filter.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/parameterization/prompt_injector.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/parameterization/prompt_lifecycle.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/parameterization/soft_prompt_generator.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/retrieval/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/retrieval/agentic.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/retrieval/ann_index.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/retrieval/bm25_channel.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/retrieval/bridge_discovery.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/retrieval/channel_registry.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/retrieval/engine.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/retrieval/entity_channel.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/retrieval/forgetting_filter.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/retrieval/fusion.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/retrieval/hopfield_channel.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/retrieval/profile_channel.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/retrieval/quantization_aware_search.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/retrieval/reranker.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/retrieval/scope_policy.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/retrieval/semantic_channel.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/retrieval/spreading_activation.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/retrieval/strategy.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/retrieval/temporal_channel.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/retrieval/vector_store.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/bandit_loops.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/middleware/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/middleware/security_headers.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/profile_runtime.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/recall_health.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/recall_serializer.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/route_mutations.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/adapters.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/agents.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/backup.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/behavioral.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/brain.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/compliance.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/data_io.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/entity.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/events.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/evolution.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/helpers.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/ingest.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/insights.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/learning.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/lifecycle.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/mesh.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/optimize.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/prewarm.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/profiles.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/stats.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/tiers.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/timeline.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/token.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/ws.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/security_middleware.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/write_identity.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/access_control.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/access_log.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/database.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/embedding_migrator.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/logical_edges.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/migration_runner.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/migration_v33.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/migrations/M001_add_signal_features_columns.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/migrations/M002_model_state_history.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/migrations/M003_migration_log.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/migrations/M004_cross_platform_sync_log.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/migrations/M005_bandit_tables.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/migrations/M006_action_outcomes_reward.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/migrations/M007_pending_outcomes.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/migrations/M009_model_lineage.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/migrations/M010_evolution_config.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/migrations/M011_archive_and_merge.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/migrations/M012_shadow_observations.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/migrations/M013_bi_temporal_columns.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/migrations/M014_v345_scale_ready.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/migrations/M015_add_pinned_column.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/migrations/M016_add_scope_support.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/migrations/M017_ccq_scope_column.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/migrations/M018_ingestion_operations.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/migrations/M019_derivation_lineage.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/migrations/M020_model_state_integrity.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/migrations/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/migrations.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/models.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/quantized_store.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/schema.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/schema_code_graph.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/schema_v3410.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/schema_v3411.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/schema_v343.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/schema_v345.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/schema_v347.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/sqlite_vectors.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/v2_migrator.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/trust/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/trust/gate.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/trust/provenance.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/trust/scorer.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/trust/signals.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/css/brain.css +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/css/legacy-dashboard.css +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/css/neural-glass.css +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/favicon.svg +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/index.html +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/agents.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/auto-settings.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/brain.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/clusters.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/compliance.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/core.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/dashboard.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/events.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/fact-detail.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/feedback.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/graph-event-bus.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/graph-filters.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/graph-ui.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/ide-status.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/init.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/knowledge-graph.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/lifecycle.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/math-health.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/memories.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/memory-chat.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/memory-timeline.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/modal.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/ng-entities.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/ng-health.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/ng-ingestion.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/ng-mesh.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/ng-shell.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/ng-skills.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/optimize.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/profiles.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/quick-actions.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/recall-lab.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/search.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/settings.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/timeline.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/js/trust-dashboard.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/vendor/bootstrap-icons/bootstrap-icons.css +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff2 +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/vendor/bootstrap.bundle.min.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/vendor/bootstrap.min.css +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/vendor/d3.v7.min.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/vendor/graphology-library.min.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/vendor/graphology.umd.min.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/vendor/inter-ui/inter-variable.min.css +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable-Italic.woff2 +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable.woff2 +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/ui/vendor/sigma.min.js +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/vector/__init__.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/vector/lancedb_backend.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory.egg-info/SOURCES.txt +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory.egg-info/dependency_links.txt +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory.egg-info/entry_points.txt +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory.egg-info/top_level.txt +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_auto_hooks.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_before_web_hook.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_behavioral_full.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_claude_hooks.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_cli_core.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_cli_json.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_cli_v33.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_compliance_full.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_config_system.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_dashboard_preserve_embedding.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_engine_hooks.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_event_bus.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_features.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_final_locomo_mini.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_graph_integrity.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_hook_handlers.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_ide_connector.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_infra.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_injection.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_learning_advanced.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_learning_collectors.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_llm_provider.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_mcp_server.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_migration.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_mode_switch_preservation.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_post_install.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_ranker.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_resource_lifecycle.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_topic_shift_hook.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_trust_full.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_v3_api.py +0 -0
- {superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/tests/test_version_consistency.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: superlocalmemory
|
|
3
|
-
Version: 3.7.
|
|
3
|
+
Version: 3.7.8
|
|
4
4
|
Summary: Local-first agent memory with auditable hybrid retrieval
|
|
5
5
|
Author-email: Varun Pratap Bhardwaj <admin@superlocalmemory.com>
|
|
6
6
|
License-Expression: AGPL-3.0-or-later
|
|
@@ -66,7 +66,6 @@ Requires-Dist: optimum==2.1.0; extra == "search"
|
|
|
66
66
|
Requires-Dist: einops==0.8.2; extra == "search"
|
|
67
67
|
Requires-Dist: torch==2.11.0; extra == "search"
|
|
68
68
|
Requires-Dist: scikit-learn==1.8.0; extra == "search"
|
|
69
|
-
Requires-Dist: geoopt>=0.5.0; extra == "search"
|
|
70
69
|
Requires-Dist: onnxruntime==1.24.4; extra == "search"
|
|
71
70
|
Provides-Extra: ui
|
|
72
71
|
Requires-Dist: fastapi[all]>=0.135.1; extra == "ui"
|
|
@@ -107,10 +106,10 @@ Dynamic: license-file
|
|
|
107
106
|
</picture>
|
|
108
107
|
</p>
|
|
109
108
|
|
|
110
|
-
<h1 align="center">SuperLocalMemory V3.7.
|
|
109
|
+
<h1 align="center">SuperLocalMemory V3.7.8</h1>
|
|
111
110
|
<p align="center"><strong>Cache. Compress. Remember. Three surfaces — proxy, MCP tools, or skill. Every setup covered.</strong><br/>
|
|
112
111
|
<em>Local-first agent memory with explicit operating modes, auditable retrieval, and optional Optimize tools.</em></p>
|
|
113
|
-
<p align="center"><code>v3.7.
|
|
112
|
+
<p align="center"><code>v3.7.8</code> — <strong>Profile-isolation leak fix, opt-in loopback write auth, and fresh-install acceptance verification.</strong><br/>
|
|
114
113
|
Proxy: <code>slm wrap claude</code> · MCP: add <code>slm_compress</code> to your config · Skill: zero-config</p>
|
|
115
114
|
<p align="center"><strong>3 public research preprints</strong> (arXiv + Zenodo archives) · <a href="https://arxiv.org/abs/2603.02240">arXiv:2603.02240</a> · <a href="https://arxiv.org/abs/2603.14588">arXiv:2603.14588</a> · <a href="https://arxiv.org/abs/2604.04514">arXiv:2604.04514</a></p>
|
|
116
115
|
|
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
</picture>
|
|
6
6
|
</p>
|
|
7
7
|
|
|
8
|
-
<h1 align="center">SuperLocalMemory V3.7.
|
|
8
|
+
<h1 align="center">SuperLocalMemory V3.7.8</h1>
|
|
9
9
|
<p align="center"><strong>Cache. Compress. Remember. Three surfaces — proxy, MCP tools, or skill. Every setup covered.</strong><br/>
|
|
10
10
|
<em>Local-first agent memory with explicit operating modes, auditable retrieval, and optional Optimize tools.</em></p>
|
|
11
|
-
<p align="center"><code>v3.7.
|
|
11
|
+
<p align="center"><code>v3.7.8</code> — <strong>Profile-isolation leak fix, opt-in loopback write auth, and fresh-install acceptance verification.</strong><br/>
|
|
12
12
|
Proxy: <code>slm wrap claude</code> · MCP: add <code>slm_compress</code> to your config · Skill: zero-config</p>
|
|
13
13
|
<p align="center"><strong>3 public research preprints</strong> (arXiv + Zenodo archives) · <a href="https://arxiv.org/abs/2603.02240">arXiv:2603.02240</a> · <a href="https://arxiv.org/abs/2603.14588">arXiv:2603.14588</a> · <a href="https://arxiv.org/abs/2604.04514">arXiv:2604.04514</a></p>
|
|
14
14
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "superlocalmemory"
|
|
3
|
-
version = "3.7.
|
|
3
|
+
version = "3.7.8"
|
|
4
4
|
description = "Local-first agent memory with auditable hybrid retrieval"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = "AGPL-3.0-or-later"
|
|
@@ -97,7 +97,6 @@ search = [
|
|
|
97
97
|
"einops==0.8.2",
|
|
98
98
|
"torch==2.11.0",
|
|
99
99
|
"scikit-learn==1.8.0",
|
|
100
|
-
"geoopt>=0.5.0",
|
|
101
100
|
"onnxruntime==1.24.4",
|
|
102
101
|
]
|
|
103
102
|
ui = [
|
|
@@ -32,7 +32,7 @@ if "OMP_NUM_THREADS" not in os.environ:
|
|
|
32
32
|
os.environ["OMP_NUM_THREADS"] = "2"
|
|
33
33
|
# ---------------------------------------------------------------------------
|
|
34
34
|
|
|
35
|
-
__version__ = "3.7.
|
|
35
|
+
__version__ = "3.7.8"
|
|
36
36
|
|
|
37
37
|
_REQUIRED_VERSIONS = {
|
|
38
38
|
"sentence_transformers": "5.3.0",
|
|
@@ -1999,7 +1999,7 @@ def cmd_doctor(args: Namespace) -> None:
|
|
|
1999
1999
|
|
|
2000
2000
|
# 3. Search deps
|
|
2001
2001
|
search_mods = {"sentence_transformers": "sentence-transformers", "torch": "torch",
|
|
2002
|
-
"sklearn": "scikit-learn"
|
|
2002
|
+
"sklearn": "scikit-learn"}
|
|
2003
2003
|
search_ok = []
|
|
2004
2004
|
for mod, pkg in search_mods.items():
|
|
2005
2005
|
try:
|
|
@@ -2008,7 +2008,7 @@ def cmd_doctor(args: Namespace) -> None:
|
|
|
2008
2008
|
except Exception: # dependency import may fail after module discovery
|
|
2009
2009
|
pass
|
|
2010
2010
|
if len(search_ok) == len(search_mods):
|
|
2011
|
-
_check("Search deps", "PASS", "sentence-transformers, torch, sklearn
|
|
2011
|
+
_check("Search deps", "PASS", "sentence-transformers, torch, sklearn")
|
|
2012
2012
|
else:
|
|
2013
2013
|
missing = set(search_mods) - set(search_ok)
|
|
2014
2014
|
_check("Search deps", "WARN", f"Missing: {', '.join(missing)}",
|
{superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/infra/auth_middleware.py
RENAMED
|
@@ -15,6 +15,7 @@ V3 change: base directory moved from ``~/.claude-memory/`` to
|
|
|
15
15
|
import hashlib
|
|
16
16
|
import hmac
|
|
17
17
|
import logging
|
|
18
|
+
import os
|
|
18
19
|
from pathlib import Path
|
|
19
20
|
from typing import Optional
|
|
20
21
|
|
|
@@ -26,6 +27,13 @@ logger = logging.getLogger("superlocalmemory.auth")
|
|
|
26
27
|
MEMORY_DIR = DynamicStatePath()
|
|
27
28
|
API_KEY_FILE = DynamicStatePath("api_key")
|
|
28
29
|
|
|
30
|
+
# v3.7.8 (F1): opt-in env flag that restores the pre-v3.7.6 shared-host
|
|
31
|
+
# posture -- when set AND an api_key file is configured, uncredentialed
|
|
32
|
+
# loopback writes must also present a matching X-SLM-API-Key. Default OFF
|
|
33
|
+
# preserves the v3.7.6 local-first fix (#71/#73/#74): loopback callers are
|
|
34
|
+
# trusted as the local OS-user boundary without needing any credential.
|
|
35
|
+
SLM_REQUIRE_API_KEY_LOOPBACK_ENV = "SLM_REQUIRE_API_KEY_LOOPBACK"
|
|
36
|
+
|
|
29
37
|
|
|
30
38
|
def _load_api_key_hash(key_file: Optional[Path] = None) -> Optional[str]:
|
|
31
39
|
"""Load and hash the API key from disk.
|
|
@@ -96,6 +104,26 @@ def verify_api_key(
|
|
|
96
104
|
return hmac.compare_digest(actual, expected)
|
|
97
105
|
|
|
98
106
|
|
|
107
|
+
def loopback_strict_mode_enabled(key_file: Optional[Path] = None) -> bool:
|
|
108
|
+
"""Whether uncredentialed loopback writes must present the API key.
|
|
109
|
+
|
|
110
|
+
v3.7.8 (F1/F2): opt-in via ``SLM_REQUIRE_API_KEY_LOOPBACK`` (any of
|
|
111
|
+
"1"/"true"/"yes"/"on", case-insensitive). This is the sole enforcement
|
|
112
|
+
point for the strict shared-host posture -- it is checked ONLY for the
|
|
113
|
+
uncredentialed-loopback case (a caller presenting none of
|
|
114
|
+
X-SLM-Daemon-Capability / X-Install-Token / X-SLM-API-Key). Callers who
|
|
115
|
+
already present a valid capability or install token are unaffected: those
|
|
116
|
+
are stronger, explicit credentials and this flag never re-litigates them.
|
|
117
|
+
|
|
118
|
+
Returns ``False`` (no-op) when the flag is unset/false, OR when no
|
|
119
|
+
api_key file is configured -- there is nothing to require in that case.
|
|
120
|
+
"""
|
|
121
|
+
raw = os.environ.get(SLM_REQUIRE_API_KEY_LOOPBACK_ENV, "")
|
|
122
|
+
if raw.strip().lower() not in ("1", "true", "yes", "on"):
|
|
123
|
+
return False
|
|
124
|
+
return _load_api_key_hash(key_file) is not None
|
|
125
|
+
|
|
126
|
+
|
|
99
127
|
def authorize_http_mcp_request(
|
|
100
128
|
request_headers: dict,
|
|
101
129
|
*,
|
|
@@ -587,6 +587,10 @@ def register_core_tools(server, get_engine: Callable) -> None:
|
|
|
587
587
|
)
|
|
588
588
|
|
|
589
589
|
generation = 0
|
|
590
|
+
# Only the profile_id explicitly confirmed by this process
|
|
591
|
+
# (daemon-acknowledged + locally-validated, or locally
|
|
592
|
+
# validated directly) is ever synced into engine state.
|
|
593
|
+
confirmed_profile_id = None
|
|
590
594
|
if await asyncio.to_thread(is_daemon_running):
|
|
591
595
|
result = await asyncio.to_thread(
|
|
592
596
|
daemon_request,
|
|
@@ -599,12 +603,35 @@ def register_core_tools(server, get_engine: Callable) -> None:
|
|
|
599
603
|
"error": "resident daemon rejected the profile switch",
|
|
600
604
|
}
|
|
601
605
|
acknowledged = str(result.get("active_profile", ""))
|
|
602
|
-
if acknowledged != profile_id:
|
|
606
|
+
if not acknowledged or acknowledged != profile_id:
|
|
603
607
|
return {
|
|
604
608
|
"success": False,
|
|
605
609
|
"error": "resident daemon acknowledged a different profile",
|
|
606
610
|
}
|
|
611
|
+
# Local consistency guard (SEC-H-01): the daemon's HTTP
|
|
612
|
+
# acknowledgement alone is not sufficient — this MCP
|
|
613
|
+
# process must also confirm the profile exists in its
|
|
614
|
+
# own local DB handle before syncing local state to it.
|
|
615
|
+
# Mirrors the existence check the no-daemon branch already
|
|
616
|
+
# performs below.
|
|
617
|
+
local_rows = engine._db.execute(
|
|
618
|
+
"SELECT 1 FROM profiles WHERE profile_id = ?",
|
|
619
|
+
(profile_id,),
|
|
620
|
+
)
|
|
621
|
+
if not local_rows:
|
|
622
|
+
return {
|
|
623
|
+
"success": False,
|
|
624
|
+
"error": (
|
|
625
|
+
f"resident daemon acknowledged profile "
|
|
626
|
+
f"'{acknowledged}' but it does not exist in "
|
|
627
|
+
f"this process's local profile store"
|
|
628
|
+
),
|
|
629
|
+
}
|
|
607
630
|
generation = int(result.get("generation", 0))
|
|
631
|
+
# Sync target is the DAEMON-CONFIRMED value, never the raw
|
|
632
|
+
# caller-supplied profile_id, even though they are equal
|
|
633
|
+
# here by construction (checked above).
|
|
634
|
+
confirmed_profile_id = acknowledged
|
|
608
635
|
else:
|
|
609
636
|
rows = engine._db.execute(
|
|
610
637
|
"SELECT 1 FROM profiles WHERE profile_id = ?",
|
|
@@ -628,10 +655,21 @@ def register_core_tools(server, get_engine: Callable) -> None:
|
|
|
628
655
|
engine._config.active_profile = old
|
|
629
656
|
persistence.rollback()
|
|
630
657
|
raise
|
|
658
|
+
confirmed_profile_id = profile_id
|
|
659
|
+
|
|
660
|
+
if not confirmed_profile_id:
|
|
661
|
+
# Defensive: should be unreachable — every path above
|
|
662
|
+
# either returns an error or sets confirmed_profile_id.
|
|
663
|
+
return {
|
|
664
|
+
"success": False,
|
|
665
|
+
"error": "profile switch could not be confirmed",
|
|
666
|
+
}
|
|
631
667
|
|
|
632
|
-
# Synchronize this MCP process only after
|
|
633
|
-
|
|
634
|
-
|
|
668
|
+
# Synchronize this MCP process only after confirmation
|
|
669
|
+
# (daemon-acknowledged + locally-validated, or directly
|
|
670
|
+
# locally-validated in the no-daemon branch above).
|
|
671
|
+
engine.profile_id = confirmed_profile_id
|
|
672
|
+
engine._config.active_profile = confirmed_profile_id
|
|
635
673
|
|
|
636
674
|
# v3.6.12 (search-3): recall/delete run in a separate worker
|
|
637
675
|
# subprocess that caches its engine (and profile_id) at init. Recycle
|
|
@@ -6,6 +6,23 @@
|
|
|
6
6
|
SuperLocalMemory V3 - FastAPI API Server
|
|
7
7
|
Provides REST endpoints for memory visualization and exploration.
|
|
8
8
|
Uses V3 MemoryEngine for all operations.
|
|
9
|
+
|
|
10
|
+
v3.7.8 (WS3 F4): ``create_app()`` in this module is a standalone/legacy app
|
|
11
|
+
factory. The running daemon serves ``superlocalmemory.server.unified_daemon:
|
|
12
|
+
create_app`` (see ``unified_daemon.py``'s uvicorn config); THIS factory is
|
|
13
|
+
reachable only via direct ``python -m superlocalmemory.server.api`` /
|
|
14
|
+
programmatic use and the tests that exercise it directly
|
|
15
|
+
(``tests/test_api/test_api_lifespan_contract.py``,
|
|
16
|
+
``tests/test_security/test_rate_limit_e2e.py``). Its ``auth_middleware``
|
|
17
|
+
below intentionally keeps the older, simpler ``check_api_key``-only gate
|
|
18
|
+
(unconditional per-write check, no daemon-capability / install-token
|
|
19
|
+
identity layer) because it predates and is independent of the unified
|
|
20
|
+
daemon's richer ``write_identity.require_http_mutation_actor`` boundary and
|
|
21
|
+
the ``SLM_REQUIRE_API_KEY_LOOPBACK`` opt-in (see
|
|
22
|
+
``infra/auth_middleware.py``). Do not treat this module's auth posture as
|
|
23
|
+
the production write boundary -- that is ``unified_daemon.py``'s
|
|
24
|
+
``auth_middleware``. ``UI_DIR`` below is still imported by
|
|
25
|
+
``unified_daemon.py`` and must not be removed.
|
|
9
26
|
"""
|
|
10
27
|
|
|
11
28
|
import json
|
{superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/chat.py
RENAMED
|
@@ -76,7 +76,7 @@ async def chat_stream(request: Request):
|
|
|
76
76
|
limit = min(body.get("limit", 10), 20)
|
|
77
77
|
|
|
78
78
|
return StreamingResponse(
|
|
79
|
-
_stream_chat(query, mode, limit),
|
|
79
|
+
_stream_chat(request.app.state, query, mode, limit),
|
|
80
80
|
media_type="text/event-stream",
|
|
81
81
|
headers={
|
|
82
82
|
"Cache-Control": "no-cache",
|
|
@@ -89,15 +89,18 @@ async def chat_stream(request: Request):
|
|
|
89
89
|
# ── Core Chat Logic ──────────────────────────────────────────────
|
|
90
90
|
|
|
91
91
|
async def _stream_chat(
|
|
92
|
-
query: str, mode: str, limit: int,
|
|
92
|
+
app_state, query: str, mode: str, limit: int,
|
|
93
93
|
) -> AsyncGenerator[str, None]:
|
|
94
94
|
"""Retrieve memories, then stream LLM response with citations."""
|
|
95
95
|
|
|
96
|
-
# Step 1: Retrieve memories via
|
|
96
|
+
# Step 1: Retrieve memories via the daemon's resident engine (run in
|
|
97
|
+
# executor to avoid blocking the event loop).
|
|
97
98
|
memories = []
|
|
98
99
|
try:
|
|
99
100
|
loop = asyncio.get_event_loop()
|
|
100
|
-
memories = await loop.run_in_executor(
|
|
101
|
+
memories = await loop.run_in_executor(
|
|
102
|
+
None, _recall_memories, app_state, query, limit,
|
|
103
|
+
)
|
|
101
104
|
except Exception as exc:
|
|
102
105
|
yield _sse_event("error", json.dumps({"message": f"Retrieval failed: {exc}"}))
|
|
103
106
|
yield _sse_event("done", "")
|
|
@@ -314,14 +317,62 @@ async def _stream_openai_compat(
|
|
|
314
317
|
|
|
315
318
|
# ── Retrieval Helper ─────────────────────────────────────────────
|
|
316
319
|
|
|
317
|
-
def _recall_memories(query: str, limit: int) -> list:
|
|
318
|
-
"""Run full recall via
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
320
|
+
def _recall_memories(app_state, query: str, limit: int) -> list:
|
|
321
|
+
"""Run full recall via the daemon's resident, lease-protected engine.
|
|
322
|
+
|
|
323
|
+
v3.7.8 CRITICAL fix: this used to go through ``WorkerPool.shared()``, a
|
|
324
|
+
long-lived subprocess that caches its OWN ``MemoryEngine`` + profile_id
|
|
325
|
+
at process init and is never recycled on a profile switch. That meant a
|
|
326
|
+
switch could serve the OLD profile's memories to this chat endpoint for
|
|
327
|
+
up to 120s — a cross-profile data leak. ``application.state.engine`` is
|
|
328
|
+
rebound synchronously by ``commit_daemon_profile_switch``, so reading it
|
|
329
|
+
(via the queue-consumer's engine adapter, which already holds the same
|
|
330
|
+
profile-runtime lease the daemon's own ``/recall`` route uses) always
|
|
331
|
+
reflects the current profile.
|
|
332
|
+
"""
|
|
333
|
+
adapter = getattr(app_state, "engine_recall_adapter", None)
|
|
334
|
+
if adapter is not None:
|
|
335
|
+
result = adapter.recall(query, limit=limit)
|
|
336
|
+
if result.get("ok"):
|
|
337
|
+
return result.get("results", [])
|
|
338
|
+
return []
|
|
339
|
+
# Fallback (adapter unavailable, e.g. queue-consumer failed to start):
|
|
340
|
+
# recall directly against the resident engine under the same profile
|
|
341
|
+
# lease the HTTP /recall route uses. Never fall back to WorkerPool —
|
|
342
|
+
# that reintroduces the stale-profile leak this fix closes.
|
|
343
|
+
return _recall_via_resident_engine(app_state, query, limit)
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
def _recall_via_resident_engine(app_state, query: str, limit: int) -> list:
|
|
347
|
+
"""Lease-protected direct-engine recall, mirroring the /recall route."""
|
|
348
|
+
from superlocalmemory.server.profile_runtime import get_profile_runtime
|
|
349
|
+
from superlocalmemory.server.routes.helpers import get_engine_lazy
|
|
350
|
+
|
|
351
|
+
runtime = get_profile_runtime(app_state)
|
|
352
|
+
with runtime.operation():
|
|
353
|
+
engine = get_engine_lazy(app_state)
|
|
354
|
+
if engine is None:
|
|
355
|
+
return []
|
|
356
|
+
response = engine.recall(query, limit=limit)
|
|
357
|
+
memory_ids = list({
|
|
358
|
+
r.fact.memory_id for r in response.results[:limit]
|
|
359
|
+
if r.fact.memory_id
|
|
360
|
+
})
|
|
361
|
+
memory_map = (
|
|
362
|
+
engine._db.get_memory_content_batch(memory_ids) if memory_ids else {}
|
|
363
|
+
)
|
|
364
|
+
from superlocalmemory.server.recall_serializer import (
|
|
365
|
+
serialize_recall_response,
|
|
366
|
+
)
|
|
367
|
+
_rc = getattr(engine._config, "retrieval", None)
|
|
368
|
+
results, _no_confident_match = serialize_recall_response(
|
|
369
|
+
response,
|
|
370
|
+
limit=limit,
|
|
371
|
+
memory_map=memory_map,
|
|
372
|
+
per_fact_max=getattr(_rc, "recall_per_fact_max_chars", 2400),
|
|
373
|
+
total_max=getattr(_rc, "recall_total_max_chars", 12000),
|
|
374
|
+
)
|
|
375
|
+
return results
|
|
325
376
|
|
|
326
377
|
|
|
327
378
|
# ── SSE Formatting ───────────────────────────────────────────────
|
{superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/memories.py
RENAMED
|
@@ -662,14 +662,28 @@ async def get_cluster_detail(request: Request, cluster_id: str, limit: int = Que
|
|
|
662
662
|
if not members:
|
|
663
663
|
raise HTTPException(status_code=404, detail="Cluster not found")
|
|
664
664
|
# Generate cluster summary
|
|
665
|
+
# v3.7.8: previously routed through WorkerPool.shared(), a subprocess
|
|
666
|
+
# cache never recycled on a profile switch (CRITICAL cross-profile
|
|
667
|
+
# leak — up to 120s stale). Use the daemon's own resident,
|
|
668
|
+
# lease-protected engine's config instead; the summarizer only
|
|
669
|
+
# consumes already profile-filtered `texts` above, so this closes
|
|
670
|
+
# the stale-engine window without changing behavior.
|
|
665
671
|
summary = ""
|
|
666
672
|
try:
|
|
667
|
-
from superlocalmemory.core.worker_pool import WorkerPool
|
|
668
|
-
pool = WorkerPool.shared()
|
|
669
673
|
texts = [m.get("content", "")[:200] for m in members[:10] if m.get("content")]
|
|
670
674
|
if texts:
|
|
671
|
-
|
|
672
|
-
|
|
675
|
+
from superlocalmemory.core.summarizer import Summarizer
|
|
676
|
+
from superlocalmemory.server.profile_runtime import get_profile_runtime
|
|
677
|
+
from superlocalmemory.server.routes.helpers import get_engine_lazy
|
|
678
|
+
|
|
679
|
+
runtime = get_profile_runtime(request.app.state)
|
|
680
|
+
with runtime.operation():
|
|
681
|
+
engine = get_engine_lazy(request.app.state)
|
|
682
|
+
if engine is not None:
|
|
683
|
+
summarizer = Summarizer(engine._config)
|
|
684
|
+
summary = summarizer.summarize_cluster(
|
|
685
|
+
[{"content": t} for t in texts]
|
|
686
|
+
) or ""
|
|
673
687
|
except Exception:
|
|
674
688
|
pass
|
|
675
689
|
|
|
@@ -687,14 +701,47 @@ async def get_cluster_detail(request: Request, cluster_id: str, limit: int = Que
|
|
|
687
701
|
|
|
688
702
|
@router.get("/api/memories/{memory_id}/facts")
|
|
689
703
|
async def get_memory_facts(request: Request, memory_id: str):
|
|
690
|
-
"""Get original memory text with all its child atomic facts.
|
|
704
|
+
"""Get original memory text with all its child atomic facts.
|
|
705
|
+
|
|
706
|
+
v3.7.8: previously routed through WorkerPool.shared(), a subprocess
|
|
707
|
+
engine cached at process init and never recycled on a profile switch
|
|
708
|
+
(CRITICAL cross-profile leak — served the OLD profile's facts for up to
|
|
709
|
+
120s after a switch). Uses the daemon's own resident, lease-protected
|
|
710
|
+
engine instead, exactly like the /recall route.
|
|
711
|
+
"""
|
|
691
712
|
try:
|
|
692
|
-
from superlocalmemory.
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
713
|
+
from superlocalmemory.server.profile_runtime import get_profile_runtime
|
|
714
|
+
from superlocalmemory.server.routes.helpers import get_engine_lazy
|
|
715
|
+
|
|
716
|
+
runtime = get_profile_runtime(request.app.state)
|
|
717
|
+
with runtime.operation():
|
|
718
|
+
engine = get_engine_lazy(request.app.state)
|
|
719
|
+
if engine is None:
|
|
720
|
+
raise HTTPException(status_code=503, detail="Engine not initialized")
|
|
721
|
+
active_profile = engine.profile_id
|
|
722
|
+
mem_map = engine._db.get_memory_content_batch([memory_id])
|
|
723
|
+
original = mem_map.get(memory_id, "")
|
|
724
|
+
facts = engine._db.get_facts_by_memory_id(memory_id, active_profile)
|
|
725
|
+
fact_list = [
|
|
726
|
+
{
|
|
727
|
+
"fact_id": f.fact_id,
|
|
728
|
+
"content": f.content,
|
|
729
|
+
"fact_type": (
|
|
730
|
+
f.fact_type.value if hasattr(f.fact_type, "value")
|
|
731
|
+
else str(f.fact_type)
|
|
732
|
+
),
|
|
733
|
+
"confidence": round(f.confidence, 3),
|
|
734
|
+
"created_at": f.created_at,
|
|
735
|
+
}
|
|
736
|
+
for f in facts
|
|
737
|
+
]
|
|
738
|
+
return {
|
|
739
|
+
"ok": True,
|
|
740
|
+
"memory_id": memory_id,
|
|
741
|
+
"original_content": original,
|
|
742
|
+
"facts": fact_list,
|
|
743
|
+
"fact_count": len(fact_list),
|
|
744
|
+
}
|
|
698
745
|
except HTTPException:
|
|
699
746
|
raise
|
|
700
747
|
except Exception as e:
|
{superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/routes/v3_api.py
RENAMED
|
@@ -1462,7 +1462,8 @@ async def trigger_consolidation(request: Request):
|
|
|
1462
1462
|
"""Trigger consolidation manually.
|
|
1463
1463
|
|
|
1464
1464
|
Body: {"lightweight": false, "profile": ""}
|
|
1465
|
-
|
|
1465
|
+
Runs under the daemon's profile-runtime operation lease (Rule 18) so a
|
|
1466
|
+
concurrent profile switch cannot commit mid-consolidation.
|
|
1466
1467
|
"""
|
|
1467
1468
|
try:
|
|
1468
1469
|
body = await request.json()
|
|
@@ -1478,44 +1479,42 @@ async def trigger_consolidation(request: Request):
|
|
|
1478
1479
|
profile_id=pid,
|
|
1479
1480
|
)
|
|
1480
1481
|
|
|
1481
|
-
#
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
"lightweight": lightweight,
|
|
1489
|
-
})
|
|
1490
|
-
if result and result.get("ok"):
|
|
1491
|
-
authorization.complete()
|
|
1492
|
-
return {"success": True, **result}
|
|
1493
|
-
except Exception:
|
|
1494
|
-
pass
|
|
1495
|
-
|
|
1496
|
-
# Fallback: direct consolidation if WorkerPool unavailable
|
|
1482
|
+
# v3.7.8 SEC-M-01: the prior "WorkerPool" fast path called
|
|
1483
|
+
# ``pool.send_command(...)``, a method that does not exist on
|
|
1484
|
+
# WorkerPool — every call raised AttributeError, was silently
|
|
1485
|
+
# swallowed by the bare ``except``, and fell through to this direct
|
|
1486
|
+
# path unconditionally. That dead branch is removed; consolidation
|
|
1487
|
+
# always runs directly against a lease-protected DB connection so a
|
|
1488
|
+
# concurrent profile switch cannot commit mid-consolidation.
|
|
1497
1489
|
from superlocalmemory.core.config import SLMConfig
|
|
1498
1490
|
from superlocalmemory.storage.database import DatabaseManager
|
|
1499
1491
|
from superlocalmemory.storage import schema as _schema
|
|
1500
1492
|
from superlocalmemory.core.consolidation_engine import ConsolidationEngine
|
|
1493
|
+
from superlocalmemory.server.profile_runtime import get_profile_runtime
|
|
1501
1494
|
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1495
|
+
runtime = get_profile_runtime(request.app.state)
|
|
1496
|
+
with runtime.operation():
|
|
1497
|
+
config = SLMConfig.load()
|
|
1498
|
+
db = DatabaseManager(config.db_path)
|
|
1499
|
+
db.initialize(_schema)
|
|
1505
1500
|
|
|
1506
|
-
|
|
1507
|
-
|
|
1501
|
+
engine = ConsolidationEngine(
|
|
1502
|
+
db=db, config=config.consolidation, slm_config=config,
|
|
1503
|
+
)
|
|
1504
|
+
result = engine.consolidate(profile_id=pid, lightweight=lightweight)
|
|
1508
1505
|
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1506
|
+
# v3.4.1: Auto-trigger behavioral pattern mining after consolidation
|
|
1507
|
+
try:
|
|
1508
|
+
from superlocalmemory.learning.consolidation_worker import (
|
|
1509
|
+
ConsolidationWorker,
|
|
1510
|
+
)
|
|
1511
|
+
learning_db = config.base_dir / "learning.db"
|
|
1512
|
+
cw = ConsolidationWorker(str(config.db_path), str(learning_db))
|
|
1513
|
+
pattern_count = cw._generate_patterns(pid, False)
|
|
1514
|
+
result["patterns_mined"] = pattern_count
|
|
1515
|
+
logger.info("Auto-mined %d patterns after consolidation", pattern_count)
|
|
1516
|
+
except Exception as exc:
|
|
1517
|
+
logger.debug("Pattern mining after consolidation failed: %s", exc)
|
|
1519
1518
|
|
|
1520
1519
|
authorization.complete()
|
|
1521
1520
|
return {"success": True, **result}
|
|
@@ -15,6 +15,16 @@ All route handlers live in routes/ directory:
|
|
|
15
15
|
routes/events.py -- /events/stream (SSE), /api/events [v2.5]
|
|
16
16
|
routes/agents.py -- /api/agents, /api/trust [v2.5]
|
|
17
17
|
routes/ws.py -- /ws/updates (WebSocket)
|
|
18
|
+
|
|
19
|
+
v3.7.8 (WS3 F4): ``create_app()`` in this module is a standalone/legacy app
|
|
20
|
+
factory, NOT the app the running daemon serves -- that is
|
|
21
|
+
``superlocalmemory.server.unified_daemon:create_app`` (see that module's
|
|
22
|
+
uvicorn config). This module's ``auth_middleware`` keeps the older,
|
|
23
|
+
unconditional ``check_api_key``-only write gate (no daemon-capability /
|
|
24
|
+
install-token identity layer, no ``SLM_REQUIRE_API_KEY_LOOPBACK`` opt-in --
|
|
25
|
+
see ``infra/auth_middleware.py`` for that). Treat this file as a standalone
|
|
26
|
+
entry point only; the production write-auth boundary lives in
|
|
27
|
+
``unified_daemon.py``.
|
|
18
28
|
"""
|
|
19
29
|
|
|
20
30
|
import logging
|
{superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/server/unified_daemon.py
RENAMED
|
@@ -1726,6 +1726,7 @@ def _register_dashboard_routes(application: FastAPI) -> None:
|
|
|
1726
1726
|
from superlocalmemory.infra.auth_middleware import (
|
|
1727
1727
|
authorize_http_mcp_request,
|
|
1728
1728
|
check_api_key,
|
|
1729
|
+
loopback_strict_mode_enabled,
|
|
1729
1730
|
)
|
|
1730
1731
|
from superlocalmemory.server.write_identity import (
|
|
1731
1732
|
require_http_mutation_actor,
|
|
@@ -1801,25 +1802,52 @@ def _register_dashboard_routes(application: FastAPI) -> None:
|
|
|
1801
1802
|
content={"error": str(_identity_exc.detail)},
|
|
1802
1803
|
)
|
|
1803
1804
|
raise
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
|
|
1811
|
-
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
|
|
1822
|
-
|
|
1805
|
+
# v3.7.6 (#71/#73/#74): require_http_mutation_actor above is
|
|
1806
|
+
# the authoritative write-auth boundary — it accepts the
|
|
1807
|
+
# daemon capability, the dashboard install token, a matching
|
|
1808
|
+
# X-SLM-API-Key, or an uncredentialed loopback caller, and
|
|
1809
|
+
# fails closed for everyone else. Running check_api_key as an
|
|
1810
|
+
# unconditional second gate used to 401 write paths stage 1
|
|
1811
|
+
# had already authorized: capability-authenticated daemon
|
|
1812
|
+
# write-throughs (MCP `remember`, #71) and install-token
|
|
1813
|
+
# dashboard writes / config tests (#73/#74) whenever an
|
|
1814
|
+
# api_key file existed.
|
|
1815
|
+
#
|
|
1816
|
+
# v3.7.8 (F1/F2): that fix silently narrowed the api_key
|
|
1817
|
+
# feature — a configured api_key file used to force even
|
|
1818
|
+
# loopback writes to present a credential; after #71/#73/#74
|
|
1819
|
+
# loopback writes need none, with no opt-back-in. This is the
|
|
1820
|
+
# single enforcement point for the opt-in strict posture
|
|
1821
|
+
# (SLM_REQUIRE_API_KEY_LOOPBACK): re-run check_api_key, but
|
|
1822
|
+
# ONLY for the uncredentialed-loopback case — a caller who
|
|
1823
|
+
# presented none of the three credential headers above and
|
|
1824
|
+
# was authorized purely by being loopback. Credentialed
|
|
1825
|
+
# callers (capability / install token / api key) were already
|
|
1826
|
+
# validated by require_http_mutation_actor and are never
|
|
1827
|
+
# re-gated here, so #71/#73/#74 stay fixed.
|
|
1828
|
+
if loopback_strict_mode_enabled():
|
|
1829
|
+
_has_credential = any(
|
|
1830
|
+
headers.get(_h)
|
|
1831
|
+
for _h in (
|
|
1832
|
+
"x-slm-daemon-capability",
|
|
1833
|
+
"x-install-token",
|
|
1834
|
+
"x-slm-api-key",
|
|
1835
|
+
)
|
|
1836
|
+
)
|
|
1837
|
+
if not _has_credential and not check_api_key(
|
|
1838
|
+
headers, is_write=True
|
|
1839
|
+
):
|
|
1840
|
+
from fastapi.responses import JSONResponse
|
|
1841
|
+
return JSONResponse(
|
|
1842
|
+
status_code=401,
|
|
1843
|
+
content={
|
|
1844
|
+
"error": (
|
|
1845
|
+
"SLM_REQUIRE_API_KEY_LOOPBACK is set: "
|
|
1846
|
+
"loopback writes must present a matching "
|
|
1847
|
+
"X-SLM-API-Key."
|
|
1848
|
+
)
|
|
1849
|
+
},
|
|
1850
|
+
)
|
|
1823
1851
|
return await call_next(request)
|
|
1824
1852
|
except Exception as _auth_exc:
|
|
1825
1853
|
# v3.6.12 (failopen-1): security middleware must NEVER fail open silently.
|
{superlocalmemory-3.7.7 → superlocalmemory-3.7.8}/src/superlocalmemory/storage/schema_v32.py
RENAMED
|
@@ -365,15 +365,6 @@ V32_DDL: list[str] = [
|
|
|
365
365
|
""",
|
|
366
366
|
]
|
|
367
367
|
|
|
368
|
-
# vec0 virtual table DDL — executed by VectorStore ONLY (requires extension loaded first).
|
|
369
|
-
# NOT in V32_DDL because executescript cannot load extensions mid-script.
|
|
370
|
-
V32_VEC0_DDL: Final[str] = """
|
|
371
|
-
CREATE VIRTUAL TABLE IF NOT EXISTS fact_embeddings USING vec0(
|
|
372
|
-
profile_id TEXT PARTITION KEY,
|
|
373
|
-
embedding float[768] distance_metric=cosine
|
|
374
|
-
);
|
|
375
|
-
"""
|
|
376
|
-
|
|
377
368
|
# ---------------------------------------------------------------------------
|
|
378
369
|
# Rollback DDL (reverse FK order -- Rule 20)
|
|
379
370
|
# ---------------------------------------------------------------------------
|