superlocalmemory 4.1.13 → 4.1.15
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.
- package/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +103 -0
- package/README.md +3 -3
- package/package.json +1 -8
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/CLAUDE.md +3 -3
- package/plugin/agents/slm-governance-advisor.md +1 -1
- package/plugin/agents/slm-loop-runner.md +1 -1
- package/plugin/agents/slm-memory-advisor.md +1 -1
- package/plugin/agents/slm-optimize-advisor.md +1 -1
- package/plugin/requirements.txt +1 -1
- package/plugin/skills/slm-cache/SKILL.md +1 -1
- package/plugin/skills/slm-compress/SKILL.md +1 -1
- package/plugin/skills/slm-governance/SKILL.md +1 -1
- package/plugin/skills/slm-graph/SKILL.md +1 -1
- package/plugin/skills/slm-loop/SKILL.md +1 -1
- package/plugin/skills/slm-mesh/SKILL.md +1 -1
- package/plugin/skills/slm-profile/SKILL.md +1 -1
- package/plugin/skills/slm-recall/SKILL.md +1 -1
- package/plugin/skills/slm-remember/SKILL.md +1 -1
- package/plugin/skills/slm-scope/SKILL.md +1 -1
- package/plugin/skills/slm-session/SKILL.md +1 -1
- package/plugin/skills/slm-status/SKILL.md +1 -1
- package/plugin-src/agents/slm-memory-advisor.md +1 -1
- package/plugin-src/agents/slm-optimize-advisor.md +1 -1
- package/plugin-src/rules/AGENTS.md +1 -1
- package/plugin-src/skills/slm-cache/SKILL.md +1 -1
- package/plugin-src/skills/slm-compress/SKILL.md +1 -1
- package/plugin-src/skills/slm-governance/SKILL.md +1 -1
- package/plugin-src/skills/slm-graph/SKILL.md +1 -1
- package/plugin-src/skills/slm-loop/SKILL.md +1 -1
- package/plugin-src/skills/slm-mesh/SKILL.md +1 -1
- package/plugin-src/skills/slm-profile/SKILL.md +1 -1
- package/plugin-src/skills/slm-recall/SKILL.md +1 -1
- package/plugin-src/skills/slm-remember/SKILL.md +1 -1
- package/plugin-src/skills/slm-scope/SKILL.md +1 -1
- package/plugin-src/skills/slm-session/SKILL.md +1 -1
- package/plugin-src/skills/slm-status/SKILL.md +1 -1
- package/scripts/postinstall.js +71 -2
- package/pyproject.toml +0 -250
- package/src/superlocalmemory/__init__.py +0 -82
- package/src/superlocalmemory/access/__init__.py +0 -3
- package/src/superlocalmemory/access/rbac.py +0 -575
- package/src/superlocalmemory/attribution/__init__.py +0 -9
- package/src/superlocalmemory/attribution/signer.py +0 -173
- package/src/superlocalmemory/attribution/watermark.py +0 -189
- package/src/superlocalmemory/brain/__init__.py +0 -5
- package/src/superlocalmemory/brain/truth.py +0 -418
- package/src/superlocalmemory/cli/__init__.py +0 -5
- package/src/superlocalmemory/cli/__main__.py +0 -17
- package/src/superlocalmemory/cli/_lazy_init.py +0 -115
- package/src/superlocalmemory/cli/cache_cmd.py +0 -198
- package/src/superlocalmemory/cli/commands.py +0 -4710
- package/src/superlocalmemory/cli/compress_cmd.py +0 -151
- package/src/superlocalmemory/cli/context_commands.py +0 -193
- package/src/superlocalmemory/cli/daemon.py +0 -909
- package/src/superlocalmemory/cli/db_migrate.py +0 -150
- package/src/superlocalmemory/cli/diagnostics_cmd.py +0 -101
- package/src/superlocalmemory/cli/escape_hatch.py +0 -220
- package/src/superlocalmemory/cli/evidence_cmd.py +0 -103
- package/src/superlocalmemory/cli/gdpr_cmd.py +0 -792
- package/src/superlocalmemory/cli/gdpr_io.py +0 -109
- package/src/superlocalmemory/cli/help_cmd.py +0 -197
- package/src/superlocalmemory/cli/host_upgrades.py +0 -189
- package/src/superlocalmemory/cli/ingest_cmd.py +0 -327
- package/src/superlocalmemory/cli/json_output.py +0 -81
- package/src/superlocalmemory/cli/loop_cmd.py +0 -187
- package/src/superlocalmemory/cli/main.py +0 -1145
- package/src/superlocalmemory/cli/mesh_cmd.py +0 -38
- package/src/superlocalmemory/cli/migrate_cmd.py +0 -55
- package/src/superlocalmemory/cli/ops_cmd.py +0 -281
- package/src/superlocalmemory/cli/optimize_cmd.py +0 -179
- package/src/superlocalmemory/cli/optimize_constants.py +0 -31
- package/src/superlocalmemory/cli/pending_store.py +0 -296
- package/src/superlocalmemory/cli/proxy_cmd.py +0 -108
- package/src/superlocalmemory/cli/scale_engine_cmd.py +0 -56
- package/src/superlocalmemory/cli/service_installer.py +0 -373
- package/src/superlocalmemory/cli/setup_wizard.py +0 -1162
- package/src/superlocalmemory/cli/summary_cmd.py +0 -215
- package/src/superlocalmemory/cli/version_banner.py +0 -202
- package/src/superlocalmemory/cli/wizard_v3426_options.py +0 -129
- package/src/superlocalmemory/code_graph/__init__.py +0 -46
- package/src/superlocalmemory/code_graph/blast_radius.py +0 -177
- package/src/superlocalmemory/code_graph/bridge/__init__.py +0 -36
- package/src/superlocalmemory/code_graph/bridge/entity_resolver.py +0 -490
- package/src/superlocalmemory/code_graph/bridge/event_listeners.py +0 -206
- package/src/superlocalmemory/code_graph/bridge/fact_enricher.py +0 -159
- package/src/superlocalmemory/code_graph/bridge/hebbian_linker.py +0 -170
- package/src/superlocalmemory/code_graph/bridge/maintenance.py +0 -220
- package/src/superlocalmemory/code_graph/bridge/temporal_checker.py +0 -152
- package/src/superlocalmemory/code_graph/changes.py +0 -363
- package/src/superlocalmemory/code_graph/communities.py +0 -299
- package/src/superlocalmemory/code_graph/config.py +0 -154
- package/src/superlocalmemory/code_graph/database.py +0 -526
- package/src/superlocalmemory/code_graph/extractors/__init__.py +0 -95
- package/src/superlocalmemory/code_graph/extractors/python.py +0 -413
- package/src/superlocalmemory/code_graph/extractors/typescript.py +0 -556
- package/src/superlocalmemory/code_graph/flows.py +0 -350
- package/src/superlocalmemory/code_graph/git_hooks.py +0 -226
- package/src/superlocalmemory/code_graph/graph_engine.py +0 -295
- package/src/superlocalmemory/code_graph/graph_store.py +0 -335
- package/src/superlocalmemory/code_graph/incremental.py +0 -200
- package/src/superlocalmemory/code_graph/models.py +0 -130
- package/src/superlocalmemory/code_graph/parser.py +0 -687
- package/src/superlocalmemory/code_graph/resolver.py +0 -321
- package/src/superlocalmemory/code_graph/search.py +0 -460
- package/src/superlocalmemory/code_graph/service.py +0 -95
- package/src/superlocalmemory/code_graph/watcher.py +0 -207
- package/src/superlocalmemory/compliance/__init__.py +0 -0
- package/src/superlocalmemory/compliance/abac.py +0 -204
- package/src/superlocalmemory/compliance/audit.py +0 -385
- package/src/superlocalmemory/compliance/eu_ai_act.py +0 -101
- package/src/superlocalmemory/compliance/gdpr.py +0 -1479
- package/src/superlocalmemory/compliance/lifecycle.py +0 -158
- package/src/superlocalmemory/compliance/retention.py +0 -415
- package/src/superlocalmemory/compliance/scheduler.py +0 -217
- package/src/superlocalmemory/contracts/__init__.py +0 -1
- package/src/superlocalmemory/contracts/schemas/agent-experience-v1.schema.json +0 -92
- package/src/superlocalmemory/contracts/schemas/agent-integration-contract-v2.schema.json +0 -46
- package/src/superlocalmemory/contracts/schemas/cognitive-turn-receipt-v1.schema.json +0 -59
- package/src/superlocalmemory/contracts/v402.py +0 -62
- package/src/superlocalmemory/core/__init__.py +0 -0
- package/src/superlocalmemory/core/actor_context.py +0 -166
- package/src/superlocalmemory/core/admission.py +0 -769
- package/src/superlocalmemory/core/backend_orchestrator.py +0 -637
- package/src/superlocalmemory/core/block_hygiene.py +0 -147
- package/src/superlocalmemory/core/community_summary.py +0 -267
- package/src/superlocalmemory/core/component_healer.py +0 -144
- package/src/superlocalmemory/core/component_registry.py +0 -514
- package/src/superlocalmemory/core/config.py +0 -2204
- package/src/superlocalmemory/core/consolidation_engine.py +0 -983
- package/src/superlocalmemory/core/context_cache.py +0 -574
- package/src/superlocalmemory/core/derivation_lineage.py +0 -246
- package/src/superlocalmemory/core/embedding_worker.py +0 -208
- package/src/superlocalmemory/core/embeddings.py +0 -1052
- package/src/superlocalmemory/core/engine.py +0 -1395
- package/src/superlocalmemory/core/engine_capabilities.py +0 -24
- package/src/superlocalmemory/core/engine_ingestion.py +0 -983
- package/src/superlocalmemory/core/engine_lock.py +0 -75
- package/src/superlocalmemory/core/engine_wiring.py +0 -776
- package/src/superlocalmemory/core/entity_community.py +0 -178
- package/src/superlocalmemory/core/error_envelope.py +0 -60
- package/src/superlocalmemory/core/evidence_bundle.py +0 -528
- package/src/superlocalmemory/core/fact_consolidator.py +0 -812
- package/src/superlocalmemory/core/file_lock.py +0 -92
- package/src/superlocalmemory/core/graph_analyzer.py +0 -456
- package/src/superlocalmemory/core/graph_metrics.py +0 -597
- package/src/superlocalmemory/core/graph_pruner.py +0 -939
- package/src/superlocalmemory/core/health_monitor.py +0 -338
- package/src/superlocalmemory/core/hooks.py +0 -65
- package/src/superlocalmemory/core/ingest_gate.py +0 -133
- package/src/superlocalmemory/core/ingest_policy.py +0 -38
- package/src/superlocalmemory/core/ingestion_command.py +0 -1042
- package/src/superlocalmemory/core/injection.py +0 -434
- package/src/superlocalmemory/core/install_detector.py +0 -131
- package/src/superlocalmemory/core/key_expander.py +0 -138
- package/src/superlocalmemory/core/lifecycle_state.py +0 -153
- package/src/superlocalmemory/core/maintenance.py +0 -777
- package/src/superlocalmemory/core/maintenance_scheduler.py +0 -507
- package/src/superlocalmemory/core/materialization_control.py +0 -20
- package/src/superlocalmemory/core/mcp_embedder_proxy.py +0 -89
- package/src/superlocalmemory/core/memory_health.py +0 -266
- package/src/superlocalmemory/core/mode_capability.py +0 -111
- package/src/superlocalmemory/core/modes.py +0 -168
- package/src/superlocalmemory/core/mutations.py +0 -688
- package/src/superlocalmemory/core/ollama_embedder.py +0 -266
- package/src/superlocalmemory/core/ollama_validator.py +0 -315
- package/src/superlocalmemory/core/operation_policy.py +0 -92
- package/src/superlocalmemory/core/operation_policy_registry.py +0 -542
- package/src/superlocalmemory/core/operation_request.py +0 -127
- package/src/superlocalmemory/core/ops_remediation.py +0 -542
- package/src/superlocalmemory/core/pii.py +0 -105
- package/src/superlocalmemory/core/platform_utils.py +0 -138
- package/src/superlocalmemory/core/profiles.py +0 -234
- package/src/superlocalmemory/core/progressive_abstraction.py +0 -208
- package/src/superlocalmemory/core/projection_drain.py +0 -380
- package/src/superlocalmemory/core/queue_consumer.py +0 -168
- package/src/superlocalmemory/core/ram_lock.py +0 -160
- package/src/superlocalmemory/core/rate_limit.py +0 -151
- package/src/superlocalmemory/core/recall_gate.py +0 -95
- package/src/superlocalmemory/core/recall_pipeline.py +0 -1337
- package/src/superlocalmemory/core/recall_queue.py +0 -377
- package/src/superlocalmemory/core/recall_worker.py +0 -414
- package/src/superlocalmemory/core/registry.py +0 -121
- package/src/superlocalmemory/core/remember_admission.py +0 -161
- package/src/superlocalmemory/core/remember_runtime.py +0 -1190
- package/src/superlocalmemory/core/remote_mode.py +0 -214
- package/src/superlocalmemory/core/reranker_worker.py +0 -338
- package/src/superlocalmemory/core/safe_fs.py +0 -108
- package/src/superlocalmemory/core/scale_autopromote.py +0 -196
- package/src/superlocalmemory/core/scale_engine.py +0 -915
- package/src/superlocalmemory/core/score_contract.py +0 -82
- package/src/superlocalmemory/core/security_primitives.py +0 -672
- package/src/superlocalmemory/core/session_identity.py +0 -98
- package/src/superlocalmemory/core/shadow_router.py +0 -319
- package/src/superlocalmemory/core/slm_disabled.py +0 -85
- package/src/superlocalmemory/core/status_contract.py +0 -108
- package/src/superlocalmemory/core/store_pipeline.py +0 -1404
- package/src/superlocalmemory/core/summarizer.py +0 -200
- package/src/superlocalmemory/core/tier_manager.py +0 -461
- package/src/superlocalmemory/core/topic_signature.py +0 -156
- package/src/superlocalmemory/core/transactions/__init__.py +0 -78
- package/src/superlocalmemory/core/transactions/concrete_owners.py +0 -604
- package/src/superlocalmemory/core/transactions/erasure.py +0 -825
- package/src/superlocalmemory/core/transactions/manifest.py +0 -255
- package/src/superlocalmemory/core/transactions/manifest_key.py +0 -155
- package/src/superlocalmemory/core/transactions/obligations.py +0 -272
- package/src/superlocalmemory/core/transactions/owners.py +0 -114
- package/src/superlocalmemory/core/transactions/reconciler.py +0 -285
- package/src/superlocalmemory/core/transactions/service.py +0 -330
- package/src/superlocalmemory/core/worker_pool.py +0 -377
- package/src/superlocalmemory/core/working_memory.py +0 -288
- package/src/superlocalmemory/dynamics/__init__.py +0 -0
- package/src/superlocalmemory/dynamics/activation_guided_quantization.py +0 -374
- package/src/superlocalmemory/dynamics/eap_scheduler.py +0 -294
- package/src/superlocalmemory/dynamics/ebbinghaus_langevin_coupling.py +0 -171
- package/src/superlocalmemory/dynamics/fisher_langevin_coupling.py +0 -227
- package/src/superlocalmemory/encoding/__init__.py +0 -0
- package/src/superlocalmemory/encoding/auto_linker.py +0 -308
- package/src/superlocalmemory/encoding/cognitive_consolidator.py +0 -899
- package/src/superlocalmemory/encoding/consolidator.py +0 -472
- package/src/superlocalmemory/encoding/context_generator.py +0 -175
- package/src/superlocalmemory/encoding/emotional.py +0 -189
- package/src/superlocalmemory/encoding/entity_reflexion.py +0 -200
- package/src/superlocalmemory/encoding/entity_resolver.py +0 -687
- package/src/superlocalmemory/encoding/entropy_gate.py +0 -101
- package/src/superlocalmemory/encoding/fact_extractor.py +0 -877
- package/src/superlocalmemory/encoding/foresight.py +0 -93
- package/src/superlocalmemory/encoding/graph_builder.py +0 -346
- package/src/superlocalmemory/encoding/observation_builder.py +0 -177
- package/src/superlocalmemory/encoding/prospective_markers.py +0 -262
- package/src/superlocalmemory/encoding/scene_builder.py +0 -410
- package/src/superlocalmemory/encoding/signal_inference.py +0 -90
- package/src/superlocalmemory/encoding/temporal_parser.py +0 -432
- package/src/superlocalmemory/encoding/temporal_validator.py +0 -572
- package/src/superlocalmemory/encoding/type_router.py +0 -237
- package/src/superlocalmemory/evaluation/__init__.py +0 -13
- package/src/superlocalmemory/evaluation/calibration.py +0 -308
- package/src/superlocalmemory/evolution/__init__.py +0 -29
- package/src/superlocalmemory/evolution/blind_verifier.py +0 -122
- package/src/superlocalmemory/evolution/budget.py +0 -356
- package/src/superlocalmemory/evolution/evolution_store.py +0 -619
- package/src/superlocalmemory/evolution/llm_dispatch.py +0 -559
- package/src/superlocalmemory/evolution/model_selection.py +0 -175
- package/src/superlocalmemory/evolution/mutation_generator.py +0 -226
- package/src/superlocalmemory/evolution/skill_activator.py +0 -270
- package/src/superlocalmemory/evolution/skill_evolver.py +0 -928
- package/src/superlocalmemory/evolution/triggers.py +0 -376
- package/src/superlocalmemory/evolution/types.py +0 -114
- package/src/superlocalmemory/graph/__init__.py +0 -9
- package/src/superlocalmemory/graph/cozo_adjacency.py +0 -122
- package/src/superlocalmemory/graph/cozo_backend.py +0 -751
- package/src/superlocalmemory/hooks/__init__.py +0 -3
- package/src/superlocalmemory/hooks/_outcome_common.py +0 -523
- package/src/superlocalmemory/hooks/adapter_base.py +0 -347
- package/src/superlocalmemory/hooks/antigravity_adapter.py +0 -171
- package/src/superlocalmemory/hooks/auto_capture.py +0 -133
- package/src/superlocalmemory/hooks/auto_invoker.py +0 -521
- package/src/superlocalmemory/hooks/auto_parameterize.py +0 -147
- package/src/superlocalmemory/hooks/auto_recall.py +0 -191
- package/src/superlocalmemory/hooks/auto_recall_hook.py +0 -251
- package/src/superlocalmemory/hooks/before_web_hook.py +0 -131
- package/src/superlocalmemory/hooks/claude_code_hooks.py +0 -637
- package/src/superlocalmemory/hooks/codex_assets.py +0 -251
- package/src/superlocalmemory/hooks/codex_hooks.py +0 -186
- package/src/superlocalmemory/hooks/context_payload.py +0 -311
- package/src/superlocalmemory/hooks/copilot_adapter.py +0 -208
- package/src/superlocalmemory/hooks/cross_platform_connector.py +0 -90
- package/src/superlocalmemory/hooks/cursor_adapter.py +0 -173
- package/src/superlocalmemory/hooks/hook_daemon.py +0 -295
- package/src/superlocalmemory/hooks/hook_handlers.py +0 -822
- package/src/superlocalmemory/hooks/ide_connector.py +0 -246
- package/src/superlocalmemory/hooks/memory_protocol.py +0 -158
- package/src/superlocalmemory/hooks/portable_kit.py +0 -755
- package/src/superlocalmemory/hooks/post_tool_async_hook.py +0 -183
- package/src/superlocalmemory/hooks/post_tool_outcome_hook.py +0 -351
- package/src/superlocalmemory/hooks/prewarm_auth.py +0 -187
- package/src/superlocalmemory/hooks/rules_engine.py +0 -99
- package/src/superlocalmemory/hooks/session_registry.py +0 -330
- package/src/superlocalmemory/hooks/stop_outcome_hook.py +0 -138
- package/src/superlocalmemory/hooks/sync_loop.py +0 -114
- package/src/superlocalmemory/hooks/topic_shift_hook.py +0 -302
- package/src/superlocalmemory/hooks/user_prompt_hook.py +0 -131
- package/src/superlocalmemory/hooks/user_prompt_rehash_hook.py +0 -210
- package/src/superlocalmemory/infra/__init__.py +0 -3
- package/src/superlocalmemory/infra/auth_middleware.py +0 -145
- package/src/superlocalmemory/infra/backup.py +0 -974
- package/src/superlocalmemory/infra/backup_obligations.py +0 -423
- package/src/superlocalmemory/infra/cache_manager.py +0 -267
- package/src/superlocalmemory/infra/cloud_backup.py +0 -788
- package/src/superlocalmemory/infra/daemon_identity.py +0 -300
- package/src/superlocalmemory/infra/data_root.py +0 -238
- package/src/superlocalmemory/infra/event_bus.py +0 -637
- package/src/superlocalmemory/infra/local_diagnostics.py +0 -327
- package/src/superlocalmemory/infra/pid_manager.py +0 -193
- package/src/superlocalmemory/infra/process_identity.py +0 -180
- package/src/superlocalmemory/infra/process_reaper.py +0 -624
- package/src/superlocalmemory/infra/rate_limiter.py +0 -228
- package/src/superlocalmemory/infra/self_heal.py +0 -401
- package/src/superlocalmemory/infra/version_integrity.py +0 -229
- package/src/superlocalmemory/ingestion/__init__.py +0 -13
- package/src/superlocalmemory/ingestion/adapter_manager.py +0 -255
- package/src/superlocalmemory/ingestion/base_adapter.py +0 -171
- package/src/superlocalmemory/ingestion/calendar_adapter.py +0 -349
- package/src/superlocalmemory/ingestion/credentials.py +0 -125
- package/src/superlocalmemory/ingestion/gmail_adapter.py +0 -378
- package/src/superlocalmemory/ingestion/parsers.py +0 -100
- package/src/superlocalmemory/ingestion/transcript_adapter.py +0 -161
- package/src/superlocalmemory/integrations/__init__.py +0 -1
- package/src/superlocalmemory/integrations/bounded_loops_mcp.py +0 -431
- package/src/superlocalmemory/integrations/bounded_loops_v051.py +0 -236
- package/src/superlocalmemory/learning/__init__.py +0 -0
- package/src/superlocalmemory/learning/adaptive.py +0 -172
- package/src/superlocalmemory/learning/arm_catalog.py +0 -97
- package/src/superlocalmemory/learning/assertion_miner.py +0 -403
- package/src/superlocalmemory/learning/bandit.py +0 -654
- package/src/superlocalmemory/learning/bandit_cache.py +0 -131
- package/src/superlocalmemory/learning/behavioral.py +0 -542
- package/src/superlocalmemory/learning/bootstrap.py +0 -298
- package/src/superlocalmemory/learning/consolidation_cycle.py +0 -398
- package/src/superlocalmemory/learning/consolidation_quantization_worker.py +0 -115
- package/src/superlocalmemory/learning/consolidation_worker.py +0 -261
- package/src/superlocalmemory/learning/cross_project.py +0 -408
- package/src/superlocalmemory/learning/database.py +0 -698
- package/src/superlocalmemory/learning/dedup_hnsw.py +0 -413
- package/src/superlocalmemory/learning/engagement.py +0 -487
- package/src/superlocalmemory/learning/engagement_features.py +0 -279
- package/src/superlocalmemory/learning/ensemble.py +0 -309
- package/src/superlocalmemory/learning/entity_compiler.py +0 -356
- package/src/superlocalmemory/learning/fact_outcome_joins.py +0 -207
- package/src/superlocalmemory/learning/features.py +0 -138
- package/src/superlocalmemory/learning/feedback.py +0 -724
- package/src/superlocalmemory/learning/forgetting_scheduler.py +0 -375
- package/src/superlocalmemory/learning/hnsw_dedup.py +0 -69
- package/src/superlocalmemory/learning/labeler.py +0 -85
- package/src/superlocalmemory/learning/legacy_migration.py +0 -316
- package/src/superlocalmemory/learning/lightgbm_subprocess.py +0 -236
- package/src/superlocalmemory/learning/memory_merge.py +0 -175
- package/src/superlocalmemory/learning/model_cache.py +0 -267
- package/src/superlocalmemory/learning/model_rollback.py +0 -281
- package/src/superlocalmemory/learning/outcome_queue.py +0 -306
- package/src/superlocalmemory/learning/outcomes.py +0 -286
- package/src/superlocalmemory/learning/pattern_miner.py +0 -465
- package/src/superlocalmemory/learning/pattern_miner_constants.py +0 -90
- package/src/superlocalmemory/learning/pcos.py +0 -291
- package/src/superlocalmemory/learning/project_context.py +0 -366
- package/src/superlocalmemory/learning/propensity.py +0 -131
- package/src/superlocalmemory/learning/ranker.py +0 -300
- package/src/superlocalmemory/learning/ranker_common.py +0 -163
- package/src/superlocalmemory/learning/ranker_retrain_legacy.py +0 -210
- package/src/superlocalmemory/learning/ranker_retrain_online.py +0 -423
- package/src/superlocalmemory/learning/reward.py +0 -888
- package/src/superlocalmemory/learning/reward_archive.py +0 -223
- package/src/superlocalmemory/learning/reward_boost.py +0 -211
- package/src/superlocalmemory/learning/reward_from_outcomes.py +0 -365
- package/src/superlocalmemory/learning/reward_model.py +0 -144
- package/src/superlocalmemory/learning/reward_proxy.py +0 -578
- package/src/superlocalmemory/learning/shadow_test.py +0 -524
- package/src/superlocalmemory/learning/signal_kinds.py +0 -79
- package/src/superlocalmemory/learning/signal_worker.py +0 -268
- package/src/superlocalmemory/learning/signals.py +0 -646
- package/src/superlocalmemory/learning/skill_performance_miner.py +0 -422
- package/src/superlocalmemory/learning/source_quality.py +0 -828
- package/src/superlocalmemory/learning/trigram_index.py +0 -548
- package/src/superlocalmemory/learning/workflows.py +0 -309
- package/src/superlocalmemory/llm/__init__.py +0 -0
- package/src/superlocalmemory/llm/backbone.py +0 -364
- package/src/superlocalmemory/loops/__init__.py +0 -58
- package/src/superlocalmemory/loops/budget.py +0 -58
- package/src/superlocalmemory/loops/engine.py +0 -174
- package/src/superlocalmemory/loops/ledger.py +0 -298
- package/src/superlocalmemory/loops/models.py +0 -152
- package/src/superlocalmemory/loops/rules.py +0 -52
- package/src/superlocalmemory/math/__init__.py +0 -0
- package/src/superlocalmemory/math/ebbinghaus.py +0 -352
- package/src/superlocalmemory/math/fisher.py +0 -356
- package/src/superlocalmemory/math/fisher_quantized.py +0 -255
- package/src/superlocalmemory/math/hopfield.py +0 -282
- package/src/superlocalmemory/math/langevin.py +0 -411
- package/src/superlocalmemory/math/polar_quant.py +0 -414
- package/src/superlocalmemory/math/qjl.py +0 -115
- package/src/superlocalmemory/math/sheaf.py +0 -261
- package/src/superlocalmemory/math/turbo_quant.py +0 -318
- package/src/superlocalmemory/mcp/__init__.py +0 -0
- package/src/superlocalmemory/mcp/_daemon_proxy.py +0 -203
- package/src/superlocalmemory/mcp/_pool_adapter.py +0 -181
- package/src/superlocalmemory/mcp/_stdin_guard.py +0 -60
- package/src/superlocalmemory/mcp/agent_context.py +0 -115
- package/src/superlocalmemory/mcp/cli_fallback.py +0 -602
- package/src/superlocalmemory/mcp/http_transport.py +0 -85
- package/src/superlocalmemory/mcp/profiles.py +0 -154
- package/src/superlocalmemory/mcp/resources.py +0 -281
- package/src/superlocalmemory/mcp/server.py +0 -480
- package/src/superlocalmemory/mcp/session_binding.py +0 -98
- package/src/superlocalmemory/mcp/shared.py +0 -112
- package/src/superlocalmemory/mcp/tools.py +0 -18
- package/src/superlocalmemory/mcp/tools_active.py +0 -958
- package/src/superlocalmemory/mcp/tools_brain.py +0 -298
- package/src/superlocalmemory/mcp/tools_code_graph.py +0 -1717
- package/src/superlocalmemory/mcp/tools_context.py +0 -239
- package/src/superlocalmemory/mcp/tools_core.py +0 -1112
- package/src/superlocalmemory/mcp/tools_evolution.py +0 -343
- package/src/superlocalmemory/mcp/tools_learning.py +0 -393
- package/src/superlocalmemory/mcp/tools_loops.py +0 -345
- package/src/superlocalmemory/mcp/tools_mesh.py +0 -429
- package/src/superlocalmemory/mcp/tools_ops.py +0 -115
- package/src/superlocalmemory/mcp/tools_optimize.py +0 -322
- package/src/superlocalmemory/mcp/tools_summaries.py +0 -147
- package/src/superlocalmemory/mcp/tools_v28.py +0 -292
- package/src/superlocalmemory/mcp/tools_v3.py +0 -398
- package/src/superlocalmemory/mcp/tools_v33.py +0 -507
- package/src/superlocalmemory/mesh/__init__.py +0 -12
- package/src/superlocalmemory/mesh/broker.py +0 -812
- package/src/superlocalmemory/mesh/broker_security.py +0 -470
- package/src/superlocalmemory/mesh/discovery.py +0 -365
- package/src/superlocalmemory/mesh/lock_protocol.py +0 -313
- package/src/superlocalmemory/mesh/node_identity.py +0 -97
- package/src/superlocalmemory/mesh/outbox_remote.py +0 -429
- package/src/superlocalmemory/mesh/remote_sync.py +0 -829
- package/src/superlocalmemory/mesh/state_sync.py +0 -286
- package/src/superlocalmemory/migrations/__init__.py +0 -5
- package/src/superlocalmemory/migrations/v3_4_25_to_v3_4_26.py +0 -144
- package/src/superlocalmemory/optimize/NOTICE +0 -6
- package/src/superlocalmemory/optimize/__init__.py +0 -0
- package/src/superlocalmemory/optimize/adapters/__init__.py +0 -68
- package/src/superlocalmemory/optimize/adapters/_agent_registry.py +0 -120
- package/src/superlocalmemory/optimize/adapters/anthropic_adapter.py +0 -112
- package/src/superlocalmemory/optimize/adapters/openai_adapter.py +0 -122
- package/src/superlocalmemory/optimize/adapters/wrap.py +0 -228
- package/src/superlocalmemory/optimize/cache/__init__.py +0 -31
- package/src/superlocalmemory/optimize/cache/boundary_store.py +0 -488
- package/src/superlocalmemory/optimize/cache/centroid_store.py +0 -199
- package/src/superlocalmemory/optimize/cache/context_key.py +0 -67
- package/src/superlocalmemory/optimize/cache/exact.py +0 -88
- package/src/superlocalmemory/optimize/cache/invalidation.py +0 -36
- package/src/superlocalmemory/optimize/cache/key_builder.py +0 -111
- package/src/superlocalmemory/optimize/cache/manager.py +0 -737
- package/src/superlocalmemory/optimize/cache/semantic.py +0 -637
- package/src/superlocalmemory/optimize/cache/stampede.py +0 -50
- package/src/superlocalmemory/optimize/compress/__init__.py +0 -17
- package/src/superlocalmemory/optimize/compress/align.py +0 -159
- package/src/superlocalmemory/optimize/compress/ccr.py +0 -116
- package/src/superlocalmemory/optimize/compress/prose_llmlingua.py +0 -71
- package/src/superlocalmemory/optimize/compress/router.py +0 -667
- package/src/superlocalmemory/optimize/config/__init__.py +0 -56
- package/src/superlocalmemory/optimize/config/defaults.py +0 -43
- package/src/superlocalmemory/optimize/config/schema.py +0 -327
- package/src/superlocalmemory/optimize/config/store.py +0 -270
- package/src/superlocalmemory/optimize/metrics/__init__.py +0 -8
- package/src/superlocalmemory/optimize/metrics/counters.py +0 -155
- package/src/superlocalmemory/optimize/metrics/estimator.py +0 -87
- package/src/superlocalmemory/optimize/metrics/exporters.py +0 -77
- package/src/superlocalmemory/optimize/metrics/persistence.py +0 -115
- package/src/superlocalmemory/optimize/proxy/__init__.py +0 -28
- package/src/superlocalmemory/optimize/proxy/_helpers.py +0 -730
- package/src/superlocalmemory/optimize/proxy/anthropic_surface.py +0 -375
- package/src/superlocalmemory/optimize/proxy/capture.py +0 -550
- package/src/superlocalmemory/optimize/proxy/gemini_surface.py +0 -528
- package/src/superlocalmemory/optimize/proxy/lifecycle.py +0 -126
- package/src/superlocalmemory/optimize/proxy/openai_surface.py +0 -465
- package/src/superlocalmemory/optimize/proxy/server.py +0 -199
- package/src/superlocalmemory/optimize/proxy/vertex_surface.py +0 -246
- package/src/superlocalmemory/optimize/storage/__init__.py +0 -0
- package/src/superlocalmemory/optimize/storage/db.py +0 -1185
- package/src/superlocalmemory/optimize/storage/schema.py +0 -205
- package/src/superlocalmemory/parameterization/__init__.py +0 -47
- package/src/superlocalmemory/parameterization/cross_project.py +0 -12
- package/src/superlocalmemory/parameterization/pattern_extractor.py +0 -584
- package/src/superlocalmemory/parameterization/pii_filter.py +0 -106
- package/src/superlocalmemory/parameterization/prompt_injector.py +0 -219
- package/src/superlocalmemory/parameterization/prompt_lifecycle.py +0 -281
- package/src/superlocalmemory/parameterization/soft_prompt_generator.py +0 -542
- package/src/superlocalmemory/parameterization/workflow_miner.py +0 -17
- package/src/superlocalmemory/reliability/__init__.py +0 -45
- package/src/superlocalmemory/reliability/join_liveness.py +0 -301
- package/src/superlocalmemory/reliability/prior_distance.py +0 -243
- package/src/superlocalmemory/retrieval/__init__.py +0 -0
- package/src/superlocalmemory/retrieval/agentic.py +0 -367
- package/src/superlocalmemory/retrieval/ann_index.py +0 -235
- package/src/superlocalmemory/retrieval/bm25_channel.py +0 -451
- package/src/superlocalmemory/retrieval/bridge_discovery.py +0 -253
- package/src/superlocalmemory/retrieval/channel_registry.py +0 -154
- package/src/superlocalmemory/retrieval/channel_status.py +0 -117
- package/src/superlocalmemory/retrieval/engine.py +0 -1615
- package/src/superlocalmemory/retrieval/entity_channel.py +0 -994
- package/src/superlocalmemory/retrieval/forgetting_filter.py +0 -160
- package/src/superlocalmemory/retrieval/fusion.py +0 -81
- package/src/superlocalmemory/retrieval/graph_adjacency.py +0 -219
- package/src/superlocalmemory/retrieval/hopfield_channel.py +0 -465
- package/src/superlocalmemory/retrieval/profile_channel.py +0 -105
- package/src/superlocalmemory/retrieval/quantization_aware_search.py +0 -147
- package/src/superlocalmemory/retrieval/remote_reranker.py +0 -758
- package/src/superlocalmemory/retrieval/reranker.py +0 -674
- package/src/superlocalmemory/retrieval/scope_policy.py +0 -126
- package/src/superlocalmemory/retrieval/semantic_channel.py +0 -638
- package/src/superlocalmemory/retrieval/spreading.py +0 -288
- package/src/superlocalmemory/retrieval/spreading_activation.py +0 -616
- package/src/superlocalmemory/retrieval/strategy.py +0 -248
- package/src/superlocalmemory/retrieval/temporal_channel.py +0 -433
- package/src/superlocalmemory/retrieval/temporal_frame.py +0 -102
- package/src/superlocalmemory/retrieval/temporal_utils.py +0 -122
- package/src/superlocalmemory/retrieval/temporal_validity_filter.py +0 -499
- package/src/superlocalmemory/retrieval/time_window.py +0 -181
- package/src/superlocalmemory/retrieval/vector_store.py +0 -863
- package/src/superlocalmemory/server/__init__.py +0 -1
- package/src/superlocalmemory/server/api.py +0 -310
- package/src/superlocalmemory/server/asset_versions.py +0 -171
- package/src/superlocalmemory/server/bandit_loops.py +0 -158
- package/src/superlocalmemory/server/config_file.py +0 -90
- package/src/superlocalmemory/server/consolidation_runner.py +0 -140
- package/src/superlocalmemory/server/egress_policy.py +0 -258
- package/src/superlocalmemory/server/loopback.py +0 -85
- package/src/superlocalmemory/server/middleware/__init__.py +0 -11
- package/src/superlocalmemory/server/middleware/security_headers.py +0 -144
- package/src/superlocalmemory/server/origin.py +0 -55
- package/src/superlocalmemory/server/profile_runtime.py +0 -515
- package/src/superlocalmemory/server/rbac_enforce.py +0 -194
- package/src/superlocalmemory/server/recall_health.py +0 -343
- package/src/superlocalmemory/server/recall_serializer.py +0 -320
- package/src/superlocalmemory/server/route_mutations.py +0 -104
- package/src/superlocalmemory/server/routes/__init__.py +0 -4
- package/src/superlocalmemory/server/routes/abstraction.py +0 -314
- package/src/superlocalmemory/server/routes/adapters.py +0 -63
- package/src/superlocalmemory/server/routes/agents.py +0 -303
- package/src/superlocalmemory/server/routes/backup.py +0 -869
- package/src/superlocalmemory/server/routes/behavioral.py +0 -659
- package/src/superlocalmemory/server/routes/brain.py +0 -1892
- package/src/superlocalmemory/server/routes/chat.py +0 -393
- package/src/superlocalmemory/server/routes/compliance.py +0 -533
- package/src/superlocalmemory/server/routes/config_api.py +0 -703
- package/src/superlocalmemory/server/routes/data_io.py +0 -329
- package/src/superlocalmemory/server/routes/entity.py +0 -237
- package/src/superlocalmemory/server/routes/events.py +0 -214
- package/src/superlocalmemory/server/routes/evolution.py +0 -510
- package/src/superlocalmemory/server/routes/helpers.py +0 -499
- package/src/superlocalmemory/server/routes/ingest.py +0 -137
- package/src/superlocalmemory/server/routes/insights.py +0 -366
- package/src/superlocalmemory/server/routes/learning.py +0 -834
- package/src/superlocalmemory/server/routes/learning_telemetry.py +0 -154
- package/src/superlocalmemory/server/routes/lifecycle.py +0 -184
- package/src/superlocalmemory/server/routes/memories.py +0 -1661
- package/src/superlocalmemory/server/routes/mesh.py +0 -517
- package/src/superlocalmemory/server/routes/mesh_lock.py +0 -54
- package/src/superlocalmemory/server/routes/mesh_state.py +0 -63
- package/src/superlocalmemory/server/routes/optimize.py +0 -197
- package/src/superlocalmemory/server/routes/prewarm.py +0 -173
- package/src/superlocalmemory/server/routes/profiles.py +0 -292
- package/src/superlocalmemory/server/routes/ratelimit.py +0 -132
- package/src/superlocalmemory/server/routes/rbac.py +0 -366
- package/src/superlocalmemory/server/routes/stats.py +0 -385
- package/src/superlocalmemory/server/routes/tiers.py +0 -222
- package/src/superlocalmemory/server/routes/timeline.py +0 -258
- package/src/superlocalmemory/server/routes/token.py +0 -90
- package/src/superlocalmemory/server/routes/v3_api.py +0 -3023
- package/src/superlocalmemory/server/routes/ws.py +0 -171
- package/src/superlocalmemory/server/security_middleware.py +0 -89
- package/src/superlocalmemory/server/ui.py +0 -354
- package/src/superlocalmemory/server/unified_daemon.py +0 -6326
- package/src/superlocalmemory/server/write_identity.py +0 -195
- package/src/superlocalmemory/storage/__init__.py +0 -0
- package/src/superlocalmemory/storage/_migration_internals.py +0 -638
- package/src/superlocalmemory/storage/_schema_version.py +0 -174
- package/src/superlocalmemory/storage/access_log.py +0 -170
- package/src/superlocalmemory/storage/admission_codec.py +0 -129
- package/src/superlocalmemory/storage/admission_journal.py +0 -843
- package/src/superlocalmemory/storage/agent_experience.py +0 -546
- package/src/superlocalmemory/storage/backup.py +0 -531
- package/src/superlocalmemory/storage/correction_cases.py +0 -670
- package/src/superlocalmemory/storage/database.py +0 -3180
- package/src/superlocalmemory/storage/deferred_writes.py +0 -209
- package/src/superlocalmemory/storage/embedding_codec.py +0 -200
- package/src/superlocalmemory/storage/embedding_migrator.py +0 -672
- package/src/superlocalmemory/storage/erasure_fence.py +0 -45
- package/src/superlocalmemory/storage/execution_learning.py +0 -285
- package/src/superlocalmemory/storage/external_evidence.py +0 -359
- package/src/superlocalmemory/storage/generation_fence.py +0 -63
- package/src/superlocalmemory/storage/lineage_retention.py +0 -236
- package/src/superlocalmemory/storage/logical_edges.py +0 -86
- package/src/superlocalmemory/storage/memory_write.py +0 -115
- package/src/superlocalmemory/storage/migration_runner.py +0 -895
- package/src/superlocalmemory/storage/migration_v33.py +0 -140
- package/src/superlocalmemory/storage/migrations/M001_add_signal_features_columns.py +0 -67
- package/src/superlocalmemory/storage/migrations/M002_model_state_history.py +0 -107
- package/src/superlocalmemory/storage/migrations/M003_migration_log.py +0 -38
- package/src/superlocalmemory/storage/migrations/M004_cross_platform_sync_log.py +0 -46
- package/src/superlocalmemory/storage/migrations/M005_bandit_tables.py +0 -75
- package/src/superlocalmemory/storage/migrations/M006_action_outcomes_reward.py +0 -75
- package/src/superlocalmemory/storage/migrations/M007_pending_outcomes.py +0 -63
- package/src/superlocalmemory/storage/migrations/M009_model_lineage.py +0 -94
- package/src/superlocalmemory/storage/migrations/M010_evolution_config.py +0 -80
- package/src/superlocalmemory/storage/migrations/M011_archive_and_merge.py +0 -87
- package/src/superlocalmemory/storage/migrations/M012_shadow_observations.py +0 -72
- package/src/superlocalmemory/storage/migrations/M013_bi_temporal_columns.py +0 -55
- package/src/superlocalmemory/storage/migrations/M014_v345_scale_ready.py +0 -45
- package/src/superlocalmemory/storage/migrations/M015_add_pinned_column.py +0 -58
- package/src/superlocalmemory/storage/migrations/M016_add_scope_support.py +0 -120
- package/src/superlocalmemory/storage/migrations/M017_ccq_scope_column.py +0 -79
- package/src/superlocalmemory/storage/migrations/M018_ingestion_operations.py +0 -120
- package/src/superlocalmemory/storage/migrations/M019_derivation_lineage.py +0 -54
- package/src/superlocalmemory/storage/migrations/M020_model_state_integrity.py +0 -52
- package/src/superlocalmemory/storage/migrations/M021_ingestion_log_profile.py +0 -108
- package/src/superlocalmemory/storage/migrations/M022_entity_aliases_profile.py +0 -86
- package/src/superlocalmemory/storage/migrations/M023_mesh_profile_isolation.py +0 -194
- package/src/superlocalmemory/storage/migrations/M024_rbac_users_roles.py +0 -87
- package/src/superlocalmemory/storage/migrations/M025_perf_indexes.py +0 -90
- package/src/superlocalmemory/storage/migrations/M026_rbac_memberships_fk.py +0 -136
- package/src/superlocalmemory/storage/migrations/M027_transferable_patterns_profile.py +0 -163
- package/src/superlocalmemory/storage/migrations/M028_fact_entity_associations.py +0 -305
- package/src/superlocalmemory/storage/migrations/M029_behavioral_history_indexes.py +0 -137
- package/src/superlocalmemory/storage/migrations/M030_entity_explorer_indexes.py +0 -93
- package/src/superlocalmemory/storage/migrations/M031_dead_letter_operations.py +0 -80
- package/src/superlocalmemory/storage/migrations/M032_write_coordinator_admission.py +0 -188
- package/src/superlocalmemory/storage/migrations/M033_projection_transactions.py +0 -148
- package/src/superlocalmemory/storage/migrations/M034_obligation_integrity.py +0 -58
- package/src/superlocalmemory/storage/migrations/M035_erasure_receipts.py +0 -113
- package/src/superlocalmemory/storage/migrations/M036_vector_row_map.py +0 -107
- package/src/superlocalmemory/storage/migrations/M037_manifest_hmac_version.py +0 -162
- package/src/superlocalmemory/storage/migrations/M038_learning_feedback_channel.py +0 -77
- package/src/superlocalmemory/storage/migrations/M039_scene_fact_members.py +0 -137
- package/src/superlocalmemory/storage/migrations/M040_agent_experience_receipts.py +0 -254
- package/src/superlocalmemory/storage/migrations/M041_external_evidence_receipts.py +0 -189
- package/src/superlocalmemory/storage/migrations/M042_correction_case_ledger.py +0 -245
- package/src/superlocalmemory/storage/migrations/M043_quarantine_display_summaries.py +0 -512
- package/src/superlocalmemory/storage/migrations/M044_play_carries_its_own_evidence.py +0 -127
- package/src/superlocalmemory/storage/migrations/M045_fact_outcome_score.py +0 -158
- package/src/superlocalmemory/storage/migrations/M046_prospective_memory_has_its_own_name.py +0 -620
- package/src/superlocalmemory/storage/migrations/M047_fisher_vectors_are_stored_like_every_other_vector.py +0 -306
- package/src/superlocalmemory/storage/migrations/M048_upcoming_holds_only_what_is_upcoming.py +0 -229
- package/src/superlocalmemory/storage/migrations/M049_a_schema_version_marker_is_one_row.py +0 -201
- package/src/superlocalmemory/storage/migrations/M050_execution_learning_v2.py +0 -70
- package/src/superlocalmemory/storage/migrations/__init__.py +0 -103
- package/src/superlocalmemory/storage/migrations.py +0 -333
- package/src/superlocalmemory/storage/models.py +0 -500
- package/src/superlocalmemory/storage/projection_outbox.py +0 -346
- package/src/superlocalmemory/storage/quantized_store.py +0 -280
- package/src/superlocalmemory/storage/read_connection.py +0 -115
- package/src/superlocalmemory/storage/retention_policy.py +0 -860
- package/src/superlocalmemory/storage/schema.py +0 -1108
- package/src/superlocalmemory/storage/schema_code_graph.py +0 -282
- package/src/superlocalmemory/storage/schema_v32.py +0 -382
- package/src/superlocalmemory/storage/schema_v3410.py +0 -159
- package/src/superlocalmemory/storage/schema_v3411.py +0 -149
- package/src/superlocalmemory/storage/schema_v343.py +0 -315
- package/src/superlocalmemory/storage/schema_v345.py +0 -109
- package/src/superlocalmemory/storage/schema_v347.py +0 -140
- package/src/superlocalmemory/storage/sqlite_vectors.py +0 -169
- package/src/superlocalmemory/storage/v2_migrator.py +0 -466
- package/src/superlocalmemory/storage/write_coordinator.py +0 -949
- package/src/superlocalmemory/storage/write_lock.py +0 -88
- package/src/superlocalmemory/summaries/__init__.py +0 -37
- package/src/superlocalmemory/summaries/base.py +0 -267
- package/src/superlocalmemory/summaries/daily_reflection.py +0 -340
- package/src/superlocalmemory/summaries/non_answer.py +0 -223
- package/src/superlocalmemory/summaries/project_work_log.py +0 -440
- package/src/superlocalmemory/summaries/session_summary.py +0 -311
- package/src/superlocalmemory/trust/__init__.py +0 -0
- package/src/superlocalmemory/trust/gate.py +0 -171
- package/src/superlocalmemory/trust/provenance.py +0 -124
- package/src/superlocalmemory/trust/scorer.py +0 -413
- package/src/superlocalmemory/trust/signals.py +0 -153
- package/src/superlocalmemory/ui/assets/slm-icon-white.svg +0 -64
- package/src/superlocalmemory/ui/assets/slm-icon.svg +0 -36
- package/src/superlocalmemory/ui/css/brain.css +0 -409
- package/src/superlocalmemory/ui/css/design-system.css +0 -696
- package/src/superlocalmemory/ui/css/legacy-dashboard.css +0 -663
- package/src/superlocalmemory/ui/css/neural-glass.css +0 -1599
- package/src/superlocalmemory/ui/css/od-bridge.css +0 -158
- package/src/superlocalmemory/ui/favicon.svg +0 -36
- package/src/superlocalmemory/ui/index.html +0 -1638
- package/src/superlocalmemory/ui/js/agents.js +0 -192
- package/src/superlocalmemory/ui/js/auto-settings.js +0 -624
- package/src/superlocalmemory/ui/js/brain.js +0 -1400
- package/src/superlocalmemory/ui/js/clusters.js +0 -326
- package/src/superlocalmemory/ui/js/compliance.js +0 -307
- package/src/superlocalmemory/ui/js/core.js +0 -566
- package/src/superlocalmemory/ui/js/dashboard.js +0 -503
- package/src/superlocalmemory/ui/js/event-delegation.js +0 -113
- package/src/superlocalmemory/ui/js/events.js +0 -178
- package/src/superlocalmemory/ui/js/fact-detail.js +0 -142
- package/src/superlocalmemory/ui/js/feedback.js +0 -339
- package/src/superlocalmemory/ui/js/graph-event-bus.js +0 -83
- package/src/superlocalmemory/ui/js/graph-filters.js +0 -220
- package/src/superlocalmemory/ui/js/graph-ui.js +0 -214
- package/src/superlocalmemory/ui/js/ide-status.js +0 -115
- package/src/superlocalmemory/ui/js/init.js +0 -54
- package/src/superlocalmemory/ui/js/knowledge-graph.js +0 -945
- package/src/superlocalmemory/ui/js/lifecycle.js +0 -387
- package/src/superlocalmemory/ui/js/math-health.js +0 -114
- package/src/superlocalmemory/ui/js/memories.js +0 -394
- package/src/superlocalmemory/ui/js/memory-chat.js +0 -371
- package/src/superlocalmemory/ui/js/memory-timeline.js +0 -265
- package/src/superlocalmemory/ui/js/modal.js +0 -733
- package/src/superlocalmemory/ui/js/ng-entities.js +0 -298
- package/src/superlocalmemory/ui/js/ng-health.js +0 -208
- package/src/superlocalmemory/ui/js/ng-ingestion.js +0 -203
- package/src/superlocalmemory/ui/js/ng-mesh.js +0 -374
- package/src/superlocalmemory/ui/js/ng-shell.js +0 -524
- package/src/superlocalmemory/ui/js/ng-skills.js +0 -663
- package/src/superlocalmemory/ui/js/od-agents.js +0 -588
- package/src/superlocalmemory/ui/js/od-auth-gate.js +0 -257
- package/src/superlocalmemory/ui/js/od-backup.js +0 -878
- package/src/superlocalmemory/ui/js/od-boundedloops.js +0 -324
- package/src/superlocalmemory/ui/js/od-brain.js +0 -1095
- package/src/superlocalmemory/ui/js/od-compliance-ext.js +0 -301
- package/src/superlocalmemory/ui/js/od-components.js +0 -147
- package/src/superlocalmemory/ui/js/od-entities.js +0 -622
- package/src/superlocalmemory/ui/js/od-graph.js +0 -776
- package/src/superlocalmemory/ui/js/od-health.js +0 -579
- package/src/superlocalmemory/ui/js/od-mcp.js +0 -508
- package/src/superlocalmemory/ui/js/od-memories.js +0 -1499
- package/src/superlocalmemory/ui/js/od-mesh.js +0 -645
- package/src/superlocalmemory/ui/js/od-operations.js +0 -1268
- package/src/superlocalmemory/ui/js/od-ops-health.js +0 -417
- package/src/superlocalmemory/ui/js/od-optimize.js +0 -828
- package/src/superlocalmemory/ui/js/od-settings.js +0 -1275
- package/src/superlocalmemory/ui/js/od-shell.js +0 -819
- package/src/superlocalmemory/ui/js/od-skills.js +0 -600
- package/src/superlocalmemory/ui/js/od-team.js +0 -265
- package/src/superlocalmemory/ui/js/optimize.js +0 -191
- package/src/superlocalmemory/ui/js/profiles.js +0 -362
- package/src/superlocalmemory/ui/js/quick-actions.js +0 -334
- package/src/superlocalmemory/ui/js/recall-lab.js +0 -373
- package/src/superlocalmemory/ui/js/search.js +0 -86
- package/src/superlocalmemory/ui/js/settings.js +0 -556
- package/src/superlocalmemory/ui/js/timeline.js +0 -62
- package/src/superlocalmemory/ui/js/trust-dashboard.js +0 -225
- package/src/superlocalmemory/ui/vendor/bootstrap-icons/bootstrap-icons.css +0 -2018
- package/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff +0 -0
- package/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff2 +0 -0
- package/src/superlocalmemory/ui/vendor/bootstrap.bundle.min.js +0 -7
- package/src/superlocalmemory/ui/vendor/bootstrap.min.css +0 -6
- package/src/superlocalmemory/ui/vendor/d3.v7.min.js +0 -2
- package/src/superlocalmemory/ui/vendor/graphology-library.min.js +0 -2
- package/src/superlocalmemory/ui/vendor/graphology.umd.min.js +0 -2
- package/src/superlocalmemory/ui/vendor/inter-ui/inter-variable.min.css +0 -8
- package/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable-Italic.woff2 +0 -0
- package/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable.woff2 +0 -0
- package/src/superlocalmemory/ui/vendor/sigma.min.js +0 -1
- package/src/superlocalmemory/vector/__init__.py +0 -9
- package/src/superlocalmemory/vector/lancedb_backend.py +0 -366
|
@@ -1,776 +0,0 @@
|
|
|
1
|
-
# Copyright (c) 2026 Varun Pratap Bhardwaj / Qualixar
|
|
2
|
-
# Licensed under AGPL-3.0-or-later - see LICENSE file
|
|
3
|
-
# Part of SuperLocalMemory V3 | https://qualixar.com | https://varunpratap.com
|
|
4
|
-
|
|
5
|
-
"""Engine wiring — extracted free functions for MemoryEngine initialization.
|
|
6
|
-
|
|
7
|
-
Direction: engine.py imports this module. This module NEVER imports engine.py.
|
|
8
|
-
|
|
9
|
-
Part of Qualixar | Author: Varun Pratap Bhardwaj
|
|
10
|
-
"""
|
|
11
|
-
|
|
12
|
-
from __future__ import annotations
|
|
13
|
-
|
|
14
|
-
import logging
|
|
15
|
-
from typing import TYPE_CHECKING, Any
|
|
16
|
-
|
|
17
|
-
if TYPE_CHECKING:
|
|
18
|
-
from superlocalmemory.core.config import SLMConfig
|
|
19
|
-
from superlocalmemory.core.hooks import HookRegistry
|
|
20
|
-
from superlocalmemory.storage.database import DatabaseManager
|
|
21
|
-
|
|
22
|
-
logger = logging.getLogger(__name__)
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
def init_reranker(retrieval_config: Any) -> Any:
|
|
26
|
-
"""Build the reranker the config asks for — remote endpoint or local worker.
|
|
27
|
-
|
|
28
|
-
v3.8.12 (issue #105). The remote branch is decided HERE, in the parent
|
|
29
|
-
process, before any subprocess exists. Spawning a worker whose only job
|
|
30
|
-
would be to forward an HTTP POST costs a fork, a machine-wide PID
|
|
31
|
-
singleton, and a warmup handshake for nothing — and issue #103 showed that
|
|
32
|
-
singleton blocking a reranker that was never local in the first place.
|
|
33
|
-
|
|
34
|
-
Misconfiguration is reported, never absorbed:
|
|
35
|
-
* remote backend with no/invalid endpoint -> reranking is DISABLED with
|
|
36
|
-
an error naming the fix. Quietly loading the English local model
|
|
37
|
-
instead would recreate the exact silent degradation #105 is about.
|
|
38
|
-
* endpoint set against a LOCAL backend -> error naming both keys, then
|
|
39
|
-
the local reranker runs as the backend actually requested. Before
|
|
40
|
-
3.8.12 this combination was dropped in silence (issue #103).
|
|
41
|
-
|
|
42
|
-
Returns the reranker, or None when reranking must stay off.
|
|
43
|
-
"""
|
|
44
|
-
from superlocalmemory.retrieval.remote_reranker import (
|
|
45
|
-
RemoteReranker,
|
|
46
|
-
RemoteRerankerConfigError,
|
|
47
|
-
is_remote_cross_encoder_backend,
|
|
48
|
-
validate_remote_reranker_config,
|
|
49
|
-
)
|
|
50
|
-
from superlocalmemory.retrieval.reranker import CrossEncoderReranker
|
|
51
|
-
|
|
52
|
-
backend = getattr(retrieval_config, "cross_encoder_backend", "") or ""
|
|
53
|
-
endpoint = getattr(retrieval_config, "cross_encoder_endpoint", "") or ""
|
|
54
|
-
model = getattr(
|
|
55
|
-
retrieval_config, "cross_encoder_model",
|
|
56
|
-
"cross-encoder/ms-marco-MiniLM-L-12-v2",
|
|
57
|
-
)
|
|
58
|
-
remote_requested = is_remote_cross_encoder_backend(backend)
|
|
59
|
-
trust_plain_http_lan = getattr(retrieval_config, "trust_plain_http_lan", True)
|
|
60
|
-
|
|
61
|
-
error = validate_remote_reranker_config(
|
|
62
|
-
backend, endpoint, trust_plain_http_lan=trust_plain_http_lan,
|
|
63
|
-
)
|
|
64
|
-
if error and remote_requested:
|
|
65
|
-
logger.error(
|
|
66
|
-
"Remote reranker not started — %s Reranking is DISABLED; recall "
|
|
67
|
-
"returns fusion-ranked results.", error,
|
|
68
|
-
)
|
|
69
|
-
return None
|
|
70
|
-
if error:
|
|
71
|
-
logger.error(
|
|
72
|
-
"Reranker configuration conflict — %s Continuing with the local "
|
|
73
|
-
"cross-encoder as configured.", error,
|
|
74
|
-
)
|
|
75
|
-
elif remote_requested:
|
|
76
|
-
try:
|
|
77
|
-
return RemoteReranker(
|
|
78
|
-
model,
|
|
79
|
-
endpoint,
|
|
80
|
-
api_key=getattr(retrieval_config, "cross_encoder_api_key", ""),
|
|
81
|
-
backend=backend,
|
|
82
|
-
timeout_seconds=getattr(
|
|
83
|
-
retrieval_config, "cross_encoder_timeout_seconds", 15.0,
|
|
84
|
-
),
|
|
85
|
-
trust_plain_http_lan=trust_plain_http_lan,
|
|
86
|
-
)
|
|
87
|
-
except RemoteRerankerConfigError as exc:
|
|
88
|
-
logger.error(
|
|
89
|
-
"Remote reranker not started — %s Reranking is DISABLED.", exc,
|
|
90
|
-
)
|
|
91
|
-
return None
|
|
92
|
-
|
|
93
|
-
return CrossEncoderReranker(model, backend=backend)
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
def _log_reranker_warmup_status(reranker: Any) -> None:
|
|
97
|
-
"""Record non-blocking reranker warmup state without alarming first-run users."""
|
|
98
|
-
from superlocalmemory.retrieval.remote_reranker import RemoteReranker
|
|
99
|
-
|
|
100
|
-
# isinstance, not a duck-typed attribute probe: MagicMock fabricates any
|
|
101
|
-
# attribute on demand, so ``getattr(reranker, "is_remote", False)`` would
|
|
102
|
-
# route every mocked reranker in the suite down the remote branch. Same
|
|
103
|
-
# hazard RetrievalEngine guards against when it checks the TYPE for
|
|
104
|
-
# ``rerank_with_status``.
|
|
105
|
-
if isinstance(reranker, RemoteReranker):
|
|
106
|
-
# The remote reranker logs its own probe outcome (endpoint, model, and
|
|
107
|
-
# the precise transport error). A second generic line about a local
|
|
108
|
-
# worker singleton would be noise at best and misleading at worst.
|
|
109
|
-
reranker.warmup_sync()
|
|
110
|
-
return
|
|
111
|
-
ready = reranker.warmup_sync(timeout=180)
|
|
112
|
-
if ready:
|
|
113
|
-
logger.info("Cross-encoder reranker warm and ready")
|
|
114
|
-
return
|
|
115
|
-
try:
|
|
116
|
-
from superlocalmemory.retrieval.reranker import _is_reranker_worker_alive
|
|
117
|
-
|
|
118
|
-
if _is_reranker_worker_alive():
|
|
119
|
-
logger.info(
|
|
120
|
-
"Cross-encoder reranker worker held by another process "
|
|
121
|
-
"(machine-wide singleton — usually the unified daemon); "
|
|
122
|
-
"this process will route reranking through that worker"
|
|
123
|
-
)
|
|
124
|
-
return
|
|
125
|
-
except Exception:
|
|
126
|
-
pass
|
|
127
|
-
logger.info(
|
|
128
|
-
"Cross-encoder reranker did not become ready during background warmup; "
|
|
129
|
-
"recalls use fallback scoring. Run 'slm doctor' for diagnostics."
|
|
130
|
-
)
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
# ---------------------------------------------------------------------------
|
|
134
|
-
# init_embedder (was MemoryEngine._init_embedder + helpers)
|
|
135
|
-
# ---------------------------------------------------------------------------
|
|
136
|
-
|
|
137
|
-
def _try_ollama_embedder(emb_cfg: Any) -> Any | None:
|
|
138
|
-
"""Try to create an OllamaEmbedder. Returns it or None."""
|
|
139
|
-
try:
|
|
140
|
-
from superlocalmemory.core.ollama_embedder import OllamaEmbedder
|
|
141
|
-
emb = OllamaEmbedder(
|
|
142
|
-
model=emb_cfg.ollama_model,
|
|
143
|
-
base_url=emb_cfg.ollama_base_url,
|
|
144
|
-
dimension=emb_cfg.dimension,
|
|
145
|
-
)
|
|
146
|
-
if emb.is_available:
|
|
147
|
-
logger.info("Using Ollama embeddings (%s)", emb_cfg.ollama_model)
|
|
148
|
-
return emb
|
|
149
|
-
logger.warning(
|
|
150
|
-
"Ollama embedder not available (model=%s). Falling back.",
|
|
151
|
-
emb_cfg.ollama_model,
|
|
152
|
-
)
|
|
153
|
-
except Exception as exc:
|
|
154
|
-
logger.warning("OllamaEmbedder init failed: %s", exc)
|
|
155
|
-
return None
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
def _try_service_embedder(cls: type, emb_cfg: Any) -> Any | None:
|
|
159
|
-
"""Try to create an EmbeddingService. Returns it or None."""
|
|
160
|
-
try:
|
|
161
|
-
emb = cls(emb_cfg)
|
|
162
|
-
if emb.is_available:
|
|
163
|
-
return emb
|
|
164
|
-
logger.warning("EmbeddingService not available. BM25-only mode. Run 'slm doctor' to diagnose.")
|
|
165
|
-
except Exception as exc:
|
|
166
|
-
logger.warning("Embeddings unavailable (%s). BM25-only mode. Run 'slm doctor' to diagnose.", exc)
|
|
167
|
-
return None
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
def init_embedder(config: SLMConfig) -> Any | None:
|
|
171
|
-
"""Initialize the best available embedding provider.
|
|
172
|
-
|
|
173
|
-
Priority order:
|
|
174
|
-
1. Explicit provider in config (ollama / cloud / sentence-transformers)
|
|
175
|
-
2. Auto-detect: Ollama first (lightweight), then sentence-transformers
|
|
176
|
-
subprocess (NEVER in-process for Mode A/B)
|
|
177
|
-
3. If nothing works -> None (BM25-only mode)
|
|
178
|
-
|
|
179
|
-
Memory safety: Mode A/B NEVER load sentence-transformers in-process.
|
|
180
|
-
EmbeddingService uses subprocess isolation — the main process stays
|
|
181
|
-
at ~60MB and never imports torch.
|
|
182
|
-
"""
|
|
183
|
-
from superlocalmemory.core.embeddings import EmbeddingService
|
|
184
|
-
from superlocalmemory.storage.models import Mode
|
|
185
|
-
|
|
186
|
-
emb_cfg = config.embedding
|
|
187
|
-
provider = emb_cfg.provider
|
|
188
|
-
|
|
189
|
-
# v3.4.55: When provider is ollama, use Ollama's embedding API as
|
|
190
|
-
# PRIMARY. The stored vectors were created by Ollama's nomic-embed-text;
|
|
191
|
-
# sentence-transformers' nomic-embed-text-v1.5 produces different vectors.
|
|
192
|
-
# Mixing them degrades semantic recall. ST subprocess is the fallback,
|
|
193
|
-
# not the primary — this also eliminates the 2-3 minute cold-start
|
|
194
|
-
# where the ST model loads from disk (~2.1 GB) on every daemon restart.
|
|
195
|
-
if provider == "ollama":
|
|
196
|
-
result = _try_ollama_embedder(emb_cfg)
|
|
197
|
-
if result is not None:
|
|
198
|
-
logger.info("Using Ollama embeddings (nomic-embed-text, local)")
|
|
199
|
-
return result
|
|
200
|
-
st_emb = _try_service_embedder(EmbeddingService, emb_cfg)
|
|
201
|
-
if st_emb is not None:
|
|
202
|
-
logger.warning("Ollama unavailable; falling back to sentence-transformers subprocess")
|
|
203
|
-
return st_emb
|
|
204
|
-
return None
|
|
205
|
-
|
|
206
|
-
# --- V3.4.24: Explicit OpenAI-compatible provider ---
|
|
207
|
-
if provider == "openai" and emb_cfg.is_openai_compatible:
|
|
208
|
-
logger.info(
|
|
209
|
-
"Using OpenAI-compatible embedding endpoint: %s (model=%s, dim=%d)",
|
|
210
|
-
emb_cfg.api_endpoint, emb_cfg.model_name, emb_cfg.dimension,
|
|
211
|
-
)
|
|
212
|
-
return _try_service_embedder(EmbeddingService, emb_cfg)
|
|
213
|
-
|
|
214
|
-
# --- Explicit cloud provider ---
|
|
215
|
-
if provider == "cloud" or emb_cfg.is_cloud:
|
|
216
|
-
return _try_service_embedder(EmbeddingService, emb_cfg)
|
|
217
|
-
|
|
218
|
-
# --- Explicit sentence-transformers (subprocess-isolated) ---
|
|
219
|
-
if provider == "sentence-transformers":
|
|
220
|
-
return _try_service_embedder(EmbeddingService, emb_cfg)
|
|
221
|
-
|
|
222
|
-
# --- Auto-detect: try Ollama first (lightweight, <1s) ---
|
|
223
|
-
ollama_emb = _try_ollama_embedder(emb_cfg)
|
|
224
|
-
if ollama_emb is not None:
|
|
225
|
-
logger.info("Auto-detected Ollama embeddings (fast path)")
|
|
226
|
-
return ollama_emb
|
|
227
|
-
|
|
228
|
-
# --- Fallback: sentence-transformers subprocess ---
|
|
229
|
-
# EmbeddingService ALWAYS uses subprocess isolation (see embeddings.py).
|
|
230
|
-
# The main process never imports torch — safe for Mode A/B.
|
|
231
|
-
return _try_service_embedder(EmbeddingService, emb_cfg)
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
# ---------------------------------------------------------------------------
|
|
235
|
-
# init_encoding (was MemoryEngine._init_encoding)
|
|
236
|
-
# ---------------------------------------------------------------------------
|
|
237
|
-
|
|
238
|
-
def init_encoding(
|
|
239
|
-
config: SLMConfig,
|
|
240
|
-
db: DatabaseManager,
|
|
241
|
-
embedder: Any,
|
|
242
|
-
llm: Any,
|
|
243
|
-
) -> dict[str, Any]:
|
|
244
|
-
"""Create all encoding components. Returns dict of components."""
|
|
245
|
-
from superlocalmemory.encoding.fact_extractor import FactExtractor
|
|
246
|
-
from superlocalmemory.encoding.entity_resolver import EntityResolver
|
|
247
|
-
from superlocalmemory.encoding.temporal_parser import TemporalParser
|
|
248
|
-
from superlocalmemory.encoding.type_router import TypeRouter
|
|
249
|
-
from superlocalmemory.encoding.graph_builder import GraphBuilder
|
|
250
|
-
from superlocalmemory.encoding.consolidator import MemoryConsolidator
|
|
251
|
-
from superlocalmemory.encoding.observation_builder import ObservationBuilder
|
|
252
|
-
from superlocalmemory.encoding.scene_builder import SceneBuilder
|
|
253
|
-
from superlocalmemory.encoding.entropy_gate import EntropyGate
|
|
254
|
-
from superlocalmemory.retrieval.ann_index import ANNIndex
|
|
255
|
-
|
|
256
|
-
ann_index = ANNIndex(dimension=config.embedding.dimension)
|
|
257
|
-
fact_extractor = FactExtractor(
|
|
258
|
-
config=config.encoding, llm=llm,
|
|
259
|
-
embedder=embedder, mode=config.mode,
|
|
260
|
-
)
|
|
261
|
-
entity_resolver = EntityResolver(db, llm)
|
|
262
|
-
temporal_parser = TemporalParser()
|
|
263
|
-
type_router = TypeRouter(
|
|
264
|
-
mode=config.mode, embedder=embedder, llm=llm,
|
|
265
|
-
)
|
|
266
|
-
graph_builder = GraphBuilder(db, ann_index)
|
|
267
|
-
consolidator = MemoryConsolidator(
|
|
268
|
-
db, embedder, llm, config.encoding,
|
|
269
|
-
)
|
|
270
|
-
observation_builder = ObservationBuilder(db)
|
|
271
|
-
# V3.2: VectorStore (Phase 1) -- sqlite-vec KNN. Scene assignment also
|
|
272
|
-
# consumes it, so initialize it before the encoding component is wired.
|
|
273
|
-
vector_store = _init_vector_store(config)
|
|
274
|
-
scene_builder = SceneBuilder(db, embedder, vector_store=vector_store)
|
|
275
|
-
entropy_gate = EntropyGate(
|
|
276
|
-
embedder, config.encoding.entropy_threshold,
|
|
277
|
-
)
|
|
278
|
-
|
|
279
|
-
sheaf_checker = None
|
|
280
|
-
if config.math.sheaf_at_encoding:
|
|
281
|
-
from superlocalmemory.math.sheaf import SheafConsistencyChecker
|
|
282
|
-
sheaf_checker = SheafConsistencyChecker(
|
|
283
|
-
db, config.math.sheaf_contradiction_threshold,
|
|
284
|
-
)
|
|
285
|
-
|
|
286
|
-
# V3.2: AccessLog (Phase 1) -- fact access tracking
|
|
287
|
-
access_log = _init_access_log(db)
|
|
288
|
-
|
|
289
|
-
# V3.2: ContextGenerator (Phase 2) -- contextual descriptions for facts
|
|
290
|
-
context_generator = _init_context_generator(config, llm)
|
|
291
|
-
|
|
292
|
-
# V3.2: TemporalValidator (Phase 4) -- bi-temporal fact invalidation
|
|
293
|
-
temporal_validator = _init_temporal(config, db, sheaf_checker, llm)
|
|
294
|
-
|
|
295
|
-
# V3.2: Phase 3 -- Association Graph components
|
|
296
|
-
auto_linker = _init_auto_linker(db, vector_store, context_generator, config)
|
|
297
|
-
graph_analyzer = _init_graph_analyzer(db)
|
|
298
|
-
|
|
299
|
-
return {
|
|
300
|
-
"ann_index": ann_index,
|
|
301
|
-
"fact_extractor": fact_extractor,
|
|
302
|
-
"entity_resolver": entity_resolver,
|
|
303
|
-
"temporal_parser": temporal_parser,
|
|
304
|
-
"type_router": type_router,
|
|
305
|
-
"graph_builder": graph_builder,
|
|
306
|
-
"consolidator": consolidator,
|
|
307
|
-
"observation_builder": observation_builder,
|
|
308
|
-
"scene_builder": scene_builder,
|
|
309
|
-
"entropy_gate": entropy_gate,
|
|
310
|
-
"sheaf_checker": sheaf_checker,
|
|
311
|
-
"vector_store": vector_store,
|
|
312
|
-
"access_log": access_log,
|
|
313
|
-
"context_generator": context_generator,
|
|
314
|
-
"temporal_validator": temporal_validator,
|
|
315
|
-
"auto_linker": auto_linker,
|
|
316
|
-
"graph_analyzer": graph_analyzer,
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
def _init_vector_store(config: SLMConfig) -> Any | None:
|
|
321
|
-
"""Create VectorStore if sqlite-vec is available. Returns None on failure."""
|
|
322
|
-
try:
|
|
323
|
-
from superlocalmemory.retrieval.vector_store import (
|
|
324
|
-
VectorStore, VectorStoreConfig,
|
|
325
|
-
)
|
|
326
|
-
vec_config = VectorStoreConfig(
|
|
327
|
-
dimension=config.embedding.dimension,
|
|
328
|
-
enabled=True,
|
|
329
|
-
)
|
|
330
|
-
vs = VectorStore(config.db_path, vec_config)
|
|
331
|
-
if vs.available:
|
|
332
|
-
logger.info("VectorStore initialized (sqlite-vec KNN enabled)")
|
|
333
|
-
return vs
|
|
334
|
-
logger.debug("VectorStore unavailable; using ANNIndex fallback")
|
|
335
|
-
except Exception as exc:
|
|
336
|
-
logger.debug("VectorStore init failed: %s", exc)
|
|
337
|
-
return None
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
def _init_access_log(db: DatabaseManager) -> Any | None:
|
|
341
|
-
"""Create AccessLog for fact access tracking."""
|
|
342
|
-
try:
|
|
343
|
-
from superlocalmemory.storage.access_log import AccessLog
|
|
344
|
-
return AccessLog(db)
|
|
345
|
-
except Exception as exc:
|
|
346
|
-
logger.debug("AccessLog init failed: %s", exc)
|
|
347
|
-
return None
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
def _init_context_generator(config: SLMConfig, llm: Any) -> Any | None:
|
|
351
|
-
"""Create ContextGenerator for Phase 2 contextual descriptions."""
|
|
352
|
-
try:
|
|
353
|
-
from superlocalmemory.encoding.context_generator import ContextGenerator
|
|
354
|
-
if hasattr(config, "auto_invoke") and config.auto_invoke.enabled:
|
|
355
|
-
return ContextGenerator(llm=llm)
|
|
356
|
-
# Still create the generator (rules-only) even when disabled,
|
|
357
|
-
# so store pipeline can generate context when called directly.
|
|
358
|
-
return ContextGenerator(llm=llm)
|
|
359
|
-
except Exception as exc:
|
|
360
|
-
logger.debug("ContextGenerator init failed: %s", exc)
|
|
361
|
-
return None
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
def _init_temporal(
|
|
365
|
-
config: SLMConfig,
|
|
366
|
-
db: DatabaseManager,
|
|
367
|
-
sheaf_checker: Any,
|
|
368
|
-
llm: Any,
|
|
369
|
-
) -> Any | None:
|
|
370
|
-
"""Create TemporalValidator for Phase 4 temporal intelligence."""
|
|
371
|
-
if not config.temporal_validator.enabled:
|
|
372
|
-
return None
|
|
373
|
-
|
|
374
|
-
try:
|
|
375
|
-
from superlocalmemory.encoding.temporal_validator import TemporalValidator
|
|
376
|
-
from superlocalmemory.trust.scorer import TrustScorer
|
|
377
|
-
|
|
378
|
-
trust_scorer = TrustScorer(db)
|
|
379
|
-
tv = TemporalValidator(
|
|
380
|
-
db=db,
|
|
381
|
-
sheaf_checker=sheaf_checker,
|
|
382
|
-
trust_scorer=trust_scorer,
|
|
383
|
-
llm=llm,
|
|
384
|
-
config=config.temporal_validator,
|
|
385
|
-
)
|
|
386
|
-
logger.info("TemporalValidator initialized (mode=%s)", config.temporal_validator.mode)
|
|
387
|
-
return tv
|
|
388
|
-
except Exception as exc:
|
|
389
|
-
logger.debug("TemporalValidator init failed: %s", exc)
|
|
390
|
-
return None
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
def _init_auto_linker(
|
|
394
|
-
db: DatabaseManager,
|
|
395
|
-
vector_store: Any,
|
|
396
|
-
context_generator: Any,
|
|
397
|
-
config: SLMConfig,
|
|
398
|
-
) -> Any | None:
|
|
399
|
-
"""Create AutoLinker for Phase 3 association graph."""
|
|
400
|
-
try:
|
|
401
|
-
from superlocalmemory.encoding.auto_linker import AutoLinker
|
|
402
|
-
return AutoLinker(
|
|
403
|
-
db=db,
|
|
404
|
-
vector_store=vector_store,
|
|
405
|
-
context_generator=context_generator,
|
|
406
|
-
config=config,
|
|
407
|
-
)
|
|
408
|
-
except Exception as exc:
|
|
409
|
-
logger.debug("AutoLinker init failed: %s", exc)
|
|
410
|
-
return None
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
def _init_graph_analyzer(db: DatabaseManager) -> Any | None:
|
|
414
|
-
"""Create GraphAnalyzer for Phase 3 structural importance."""
|
|
415
|
-
try:
|
|
416
|
-
from superlocalmemory.core.graph_analyzer import GraphAnalyzer
|
|
417
|
-
return GraphAnalyzer(db=db)
|
|
418
|
-
except Exception as exc:
|
|
419
|
-
logger.debug("GraphAnalyzer init failed: %s", exc)
|
|
420
|
-
return None
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
def _init_consolidation(
|
|
424
|
-
config: SLMConfig,
|
|
425
|
-
db: DatabaseManager,
|
|
426
|
-
auto_linker: Any,
|
|
427
|
-
graph_analyzer: Any,
|
|
428
|
-
temporal_validator: Any,
|
|
429
|
-
summarizer: Any,
|
|
430
|
-
behavioral_store: Any,
|
|
431
|
-
embedder: Any = None,
|
|
432
|
-
llm: Any = None,
|
|
433
|
-
) -> Any | None:
|
|
434
|
-
"""Create ConsolidationEngine for Phase 5 sleep-time consolidation."""
|
|
435
|
-
try:
|
|
436
|
-
from superlocalmemory.core.consolidation_engine import ConsolidationEngine
|
|
437
|
-
|
|
438
|
-
# v3.4.7: Create CCQWorker so Step 7 (cognitive consolidation) actually runs.
|
|
439
|
-
# Previously, ccq_worker was always None → Step 7 returned {"enabled": False}.
|
|
440
|
-
ccq_worker = None
|
|
441
|
-
try:
|
|
442
|
-
from superlocalmemory.core.config import CCQConfig
|
|
443
|
-
from superlocalmemory.encoding.cognitive_consolidator import CognitiveConsolidator
|
|
444
|
-
from superlocalmemory.learning.consolidation_quantization_worker import CCQWorker
|
|
445
|
-
ccq_config = getattr(config, "ccq", CCQConfig())
|
|
446
|
-
consolidator = CognitiveConsolidator(
|
|
447
|
-
db=db, embedder=embedder, llm=llm, config=ccq_config,
|
|
448
|
-
)
|
|
449
|
-
ccq_worker = CCQWorker(consolidator=consolidator, config=ccq_config)
|
|
450
|
-
logger.info("CCQ worker initialized (enabled=%s)", ccq_config.enabled)
|
|
451
|
-
except Exception as exc:
|
|
452
|
-
logger.debug("CCQ worker init failed (non-fatal): %s", exc)
|
|
453
|
-
|
|
454
|
-
return ConsolidationEngine(
|
|
455
|
-
db=db,
|
|
456
|
-
config=config.consolidation,
|
|
457
|
-
summarizer=summarizer,
|
|
458
|
-
behavioral_store=behavioral_store,
|
|
459
|
-
auto_linker=auto_linker,
|
|
460
|
-
graph_analyzer=graph_analyzer,
|
|
461
|
-
temporal_validator=temporal_validator,
|
|
462
|
-
slm_config=config,
|
|
463
|
-
ccq_worker=ccq_worker,
|
|
464
|
-
)
|
|
465
|
-
except Exception as exc:
|
|
466
|
-
logger.debug("ConsolidationEngine init failed: %s", exc)
|
|
467
|
-
return None
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
def _init_spreading_activation(
|
|
471
|
-
db: DatabaseManager,
|
|
472
|
-
vector_store: Any,
|
|
473
|
-
) -> Any | None:
|
|
474
|
-
"""Create SpreadingActivation for Phase 3 5th retrieval channel."""
|
|
475
|
-
try:
|
|
476
|
-
from superlocalmemory.retrieval.spreading_activation import (
|
|
477
|
-
SpreadingActivation,
|
|
478
|
-
SpreadingActivationConfig,
|
|
479
|
-
)
|
|
480
|
-
sa_config = SpreadingActivationConfig(
|
|
481
|
-
enabled=True,
|
|
482
|
-
use_pagerank_bias=True, # v3.4.1: PageRank-weighted propagation
|
|
483
|
-
community_boost=0.15, # v3.4.1: 15% boost for same-community nodes
|
|
484
|
-
)
|
|
485
|
-
return SpreadingActivation(
|
|
486
|
-
db=db, vector_store=vector_store, config=sa_config,
|
|
487
|
-
)
|
|
488
|
-
except Exception as exc:
|
|
489
|
-
logger.debug("SpreadingActivation init failed: %s", exc)
|
|
490
|
-
return None
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
def _init_prompt_injector(config: SLMConfig, db: DatabaseManager) -> Any | None:
|
|
494
|
-
"""Construct a profile-scoped PromptInjector for soft-prompt injection (P1-8).
|
|
495
|
-
|
|
496
|
-
Returns None when parameterization is disabled or construction fails.
|
|
497
|
-
Failure is fail-soft — soft-prompt absence must never block auto-invoke.
|
|
498
|
-
"""
|
|
499
|
-
if not hasattr(config, "parameterization") or not config.parameterization.enabled:
|
|
500
|
-
return None
|
|
501
|
-
try:
|
|
502
|
-
from superlocalmemory.parameterization.prompt_injector import PromptInjector
|
|
503
|
-
from superlocalmemory.parameterization.soft_prompt_generator import SoftPromptGenerator
|
|
504
|
-
|
|
505
|
-
generator = SoftPromptGenerator(config.parameterization)
|
|
506
|
-
return PromptInjector(db=db, generator=generator, config=config.parameterization)
|
|
507
|
-
except Exception as exc:
|
|
508
|
-
logger.warning("PromptInjector init failed — soft-prompt injection disabled: %s", exc)
|
|
509
|
-
return None
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
def _init_auto_invoker(
|
|
513
|
-
config: SLMConfig,
|
|
514
|
-
db: DatabaseManager,
|
|
515
|
-
vector_store: Any,
|
|
516
|
-
trust_scorer: Any,
|
|
517
|
-
embedder: Any,
|
|
518
|
-
) -> Any | None:
|
|
519
|
-
"""Create AutoInvoker for Phase 2 multi-signal retrieval.
|
|
520
|
-
|
|
521
|
-
V3.3 (P1-8): A profile-scoped PromptInjector is constructed and wired in
|
|
522
|
-
so stored behavioral soft prompts are prepended to every session context.
|
|
523
|
-
The injector is fail-soft — its absence never blocks auto-invoke.
|
|
524
|
-
"""
|
|
525
|
-
if not hasattr(config, "auto_invoke") or not config.auto_invoke.enabled:
|
|
526
|
-
return None
|
|
527
|
-
try:
|
|
528
|
-
from superlocalmemory.hooks.auto_invoker import AutoInvoker
|
|
529
|
-
|
|
530
|
-
prompt_injector = _init_prompt_injector(config, db)
|
|
531
|
-
return AutoInvoker(
|
|
532
|
-
db=db,
|
|
533
|
-
vector_store=vector_store,
|
|
534
|
-
trust_scorer=trust_scorer,
|
|
535
|
-
embedder=embedder,
|
|
536
|
-
config=config.auto_invoke,
|
|
537
|
-
prompt_injector=prompt_injector,
|
|
538
|
-
)
|
|
539
|
-
except Exception as exc:
|
|
540
|
-
logger.warning("AutoInvoker init failed — auto-invoke disabled: %s", exc)
|
|
541
|
-
return None
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
# ---------------------------------------------------------------------------
|
|
545
|
-
# init_retrieval (was MemoryEngine._init_retrieval)
|
|
546
|
-
# ---------------------------------------------------------------------------
|
|
547
|
-
|
|
548
|
-
def _init_hopfield_channel(
|
|
549
|
-
db: DatabaseManager,
|
|
550
|
-
vector_store: Any,
|
|
551
|
-
config: SLMConfig,
|
|
552
|
-
) -> Any | None:
|
|
553
|
-
"""Create HopfieldChannel for Phase G 6th retrieval channel."""
|
|
554
|
-
if not config.hopfield.enabled:
|
|
555
|
-
return None
|
|
556
|
-
try:
|
|
557
|
-
from superlocalmemory.retrieval.hopfield_channel import HopfieldChannel
|
|
558
|
-
return HopfieldChannel(
|
|
559
|
-
db=db, vector_store=vector_store, config=config.hopfield,
|
|
560
|
-
)
|
|
561
|
-
except Exception as exc:
|
|
562
|
-
logger.debug("HopfieldChannel init failed: %s", exc)
|
|
563
|
-
return None
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
def _init_quantization_aware_search(
|
|
567
|
-
vector_store: Any,
|
|
568
|
-
db: DatabaseManager,
|
|
569
|
-
config: SLMConfig,
|
|
570
|
-
) -> Any | None:
|
|
571
|
-
"""Create QuantizationAwareSearch if quantized store is available.
|
|
572
|
-
|
|
573
|
-
Returns None on failure — SemanticChannel falls back to VectorStore KNN.
|
|
574
|
-
Stateless wrapper: zero memory overhead, no workers, no threads.
|
|
575
|
-
"""
|
|
576
|
-
if vector_store is None:
|
|
577
|
-
return None
|
|
578
|
-
try:
|
|
579
|
-
from superlocalmemory.retrieval.quantization_aware_search import QuantizationAwareSearch
|
|
580
|
-
from superlocalmemory.storage.quantized_store import QuantizedEmbeddingStore
|
|
581
|
-
from superlocalmemory.math.polar_quant import PolarQuantEncoder
|
|
582
|
-
from superlocalmemory.math.qjl import QJLEncoder
|
|
583
|
-
|
|
584
|
-
polar = PolarQuantEncoder(dimension=config.embedding.dimension)
|
|
585
|
-
qjl: QJLEncoder | None = None
|
|
586
|
-
try:
|
|
587
|
-
qjl = QJLEncoder(dimension=config.embedding.dimension)
|
|
588
|
-
except Exception:
|
|
589
|
-
pass # QJL is optional (HR-07)
|
|
590
|
-
|
|
591
|
-
q_store = QuantizedEmbeddingStore(
|
|
592
|
-
db=db, polar=polar, qjl=qjl, config=config.quantization,
|
|
593
|
-
)
|
|
594
|
-
qas = QuantizationAwareSearch(
|
|
595
|
-
vector_store=vector_store,
|
|
596
|
-
quantized_store=q_store,
|
|
597
|
-
config=config.quantization,
|
|
598
|
-
)
|
|
599
|
-
logger.info("QuantizationAwareSearch initialized (3-tier quantization pipeline)")
|
|
600
|
-
return qas
|
|
601
|
-
except Exception as exc:
|
|
602
|
-
logger.debug("QuantizationAwareSearch init failed (non-fatal): %s", exc)
|
|
603
|
-
return None
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
def init_retrieval(
|
|
607
|
-
config: SLMConfig,
|
|
608
|
-
db: DatabaseManager,
|
|
609
|
-
embedder: Any,
|
|
610
|
-
entity_resolver: Any,
|
|
611
|
-
trust_scorer: Any,
|
|
612
|
-
vector_store: Any = None,
|
|
613
|
-
) -> Any:
|
|
614
|
-
"""Create the RetrievalEngine — six candidate producers (semantic, BM25,
|
|
615
|
-
entity_graph, temporal, spreading_activation, hopfield) fused via RRF.
|
|
616
|
-
Returns the engine."""
|
|
617
|
-
from superlocalmemory.retrieval.engine import RetrievalEngine
|
|
618
|
-
from superlocalmemory.retrieval.semantic_channel import SemanticChannel
|
|
619
|
-
from superlocalmemory.retrieval.bm25_channel import BM25Channel
|
|
620
|
-
from superlocalmemory.retrieval.entity_channel import EntityGraphChannel
|
|
621
|
-
from superlocalmemory.retrieval.temporal_channel import TemporalChannel
|
|
622
|
-
from superlocalmemory.retrieval.profile_channel import ProfileChannel
|
|
623
|
-
from superlocalmemory.retrieval.bridge_discovery import BridgeDiscovery
|
|
624
|
-
|
|
625
|
-
# V3.3.19: TurboQuant 3-tier search (stateless, zero memory overhead)
|
|
626
|
-
qas = _init_quantization_aware_search(vector_store, db, config)
|
|
627
|
-
|
|
628
|
-
channels: dict = {
|
|
629
|
-
"semantic": SemanticChannel(
|
|
630
|
-
db,
|
|
631
|
-
fisher_temperature=config.math.fisher_temperature,
|
|
632
|
-
embedder=embedder,
|
|
633
|
-
fisher_mode=config.math.fisher_mode,
|
|
634
|
-
vector_store=vector_store,
|
|
635
|
-
quantization_aware_search=qas,
|
|
636
|
-
),
|
|
637
|
-
"bm25": BM25Channel(db),
|
|
638
|
-
"entity_graph": EntityGraphChannel(db, entity_resolver),
|
|
639
|
-
"temporal": TemporalChannel(db),
|
|
640
|
-
}
|
|
641
|
-
|
|
642
|
-
# Phase 3: Register SpreadingActivation as 5th channel
|
|
643
|
-
sa_channel = _init_spreading_activation(db, vector_store)
|
|
644
|
-
if sa_channel is not None:
|
|
645
|
-
channels["spreading_activation"] = sa_channel
|
|
646
|
-
|
|
647
|
-
# Phase G: Register Hopfield as 6th channel
|
|
648
|
-
hopfield_channel = _init_hopfield_channel(db, vector_store, config)
|
|
649
|
-
if hopfield_channel is not None:
|
|
650
|
-
channels["hopfield"] = hopfield_channel
|
|
651
|
-
|
|
652
|
-
reranker = None
|
|
653
|
-
if config.retrieval.use_cross_encoder:
|
|
654
|
-
reranker = init_reranker(config.retrieval)
|
|
655
|
-
|
|
656
|
-
profile_ch = ProfileChannel(db)
|
|
657
|
-
bridge = BridgeDiscovery(db)
|
|
658
|
-
|
|
659
|
-
engine = RetrievalEngine(
|
|
660
|
-
db=db, config=config.retrieval, channels=channels,
|
|
661
|
-
embedder=embedder, reranker=reranker,
|
|
662
|
-
base_weights=config.channel_weights,
|
|
663
|
-
profile_channel=profile_ch,
|
|
664
|
-
bridge_discovery=bridge,
|
|
665
|
-
trust_scorer=trust_scorer,
|
|
666
|
-
)
|
|
667
|
-
|
|
668
|
-
# V3.3.13: Ensure reranker warmup is in progress.
|
|
669
|
-
# The CrossEncoderReranker constructor starts background warmup, but
|
|
670
|
-
# callers can also call warmup_sync() to block until ready.
|
|
671
|
-
# Here we just log warmup status — benchmark scripts call warmup_sync() explicitly.
|
|
672
|
-
#
|
|
673
|
-
# v3.4.42: Distinguish the legitimate "another process owns the
|
|
674
|
-
# reranker worker" case (machine-wide singleton — usually the unified
|
|
675
|
-
# daemon) from a real warmup failure. Before this fix, any CLI process
|
|
676
|
-
# that wired an Engine while the daemon was up would log
|
|
677
|
-
# "reranker warmup failed — recalls will use fallback scoring" even
|
|
678
|
-
# though the daemon's reranker was healthy and serving fine. The
|
|
679
|
-
# warning was a false positive that masked real failures and eroded
|
|
680
|
-
# trust in slm health / slm doctor output.
|
|
681
|
-
if reranker is not None:
|
|
682
|
-
import threading
|
|
683
|
-
t = threading.Thread(
|
|
684
|
-
target=_log_reranker_warmup_status,
|
|
685
|
-
args=(reranker,),
|
|
686
|
-
daemon=True,
|
|
687
|
-
name="ce-init-warmup",
|
|
688
|
-
)
|
|
689
|
-
t.start()
|
|
690
|
-
|
|
691
|
-
# Phase A: Register forgetting filter into the channel registry
|
|
692
|
-
try:
|
|
693
|
-
from superlocalmemory.retrieval.forgetting_filter import register_forgetting_filter
|
|
694
|
-
register_forgetting_filter(engine._registry, db, config.forgetting)
|
|
695
|
-
except Exception as exc:
|
|
696
|
-
logger.debug("Forgetting filter registration failed: %s", exc)
|
|
697
|
-
|
|
698
|
-
# Phase 4 (T1): Register bi-temporal validity filter. Drops superseded /
|
|
699
|
-
# system-invalidated facts from retrieval so contradicted memories never
|
|
700
|
-
# resurface. Pure SQL, safe in all modes; no-op until a fact is invalidated.
|
|
701
|
-
try:
|
|
702
|
-
from superlocalmemory.retrieval.temporal_validity_filter import (
|
|
703
|
-
register_temporal_validity_filter,
|
|
704
|
-
)
|
|
705
|
-
register_temporal_validity_filter(
|
|
706
|
-
engine._registry, db, config.temporal_validator,
|
|
707
|
-
)
|
|
708
|
-
except Exception as exc:
|
|
709
|
-
logger.debug("Temporal validity filter registration failed: %s", exc)
|
|
710
|
-
|
|
711
|
-
return engine
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
# ---------------------------------------------------------------------------
|
|
715
|
-
# wire_hooks (was MemoryEngine._wire_hooks)
|
|
716
|
-
# ---------------------------------------------------------------------------
|
|
717
|
-
|
|
718
|
-
def wire_hooks(
|
|
719
|
-
hooks: HookRegistry,
|
|
720
|
-
config: SLMConfig,
|
|
721
|
-
db: DatabaseManager,
|
|
722
|
-
trust_scorer: Any,
|
|
723
|
-
profile_id: str,
|
|
724
|
-
) -> dict[str, Any]:
|
|
725
|
-
"""Wire trust, compliance, and event bus hooks into engine lifecycle.
|
|
726
|
-
|
|
727
|
-
Returns dict of created components (signal_recorder, audit_chain)
|
|
728
|
-
so engine can hold references.
|
|
729
|
-
"""
|
|
730
|
-
result: dict[str, Any] = {"signal_recorder": None, "audit_chain": None}
|
|
731
|
-
|
|
732
|
-
# -- Pre-store hooks (synchronous, can reject) --
|
|
733
|
-
if trust_scorer:
|
|
734
|
-
from superlocalmemory.trust.gate import TrustGate
|
|
735
|
-
gate = TrustGate(trust_scorer)
|
|
736
|
-
hooks.register_pre("store", lambda ctx: gate.check_write(
|
|
737
|
-
ctx.get("agent_id", "unknown"), ctx.get("profile_id", profile_id)))
|
|
738
|
-
hooks.register_pre("delete", lambda ctx: gate.check_delete(
|
|
739
|
-
ctx.get("agent_id", "unknown"), ctx.get("profile_id", profile_id)))
|
|
740
|
-
hooks.register_pre("update", lambda ctx: gate.check_write(
|
|
741
|
-
ctx.get("agent_id", "unknown"), ctx.get("profile_id", profile_id)))
|
|
742
|
-
|
|
743
|
-
# -- Post-store hooks (async, never block) --
|
|
744
|
-
if trust_scorer:
|
|
745
|
-
hooks.register_post("store", lambda ctx: trust_scorer.record_signal(
|
|
746
|
-
ctx.get("agent_id", "unknown"), ctx.get("profile_id", profile_id), "store_success"))
|
|
747
|
-
hooks.register_post("recall", lambda ctx: trust_scorer.record_signal(
|
|
748
|
-
ctx.get("agent_id", "unknown"), ctx.get("profile_id", profile_id), "recall_hit"))
|
|
749
|
-
|
|
750
|
-
# -- Burst detection via SignalRecorder --
|
|
751
|
-
try:
|
|
752
|
-
from superlocalmemory.trust.signals import SignalRecorder
|
|
753
|
-
signal_recorder = SignalRecorder(db)
|
|
754
|
-
hooks.register_post("store", lambda ctx: signal_recorder.record(
|
|
755
|
-
ctx.get("agent_id", "unknown"), ctx.get("profile_id", profile_id), "store_success"))
|
|
756
|
-
result["signal_recorder"] = signal_recorder
|
|
757
|
-
except Exception:
|
|
758
|
-
pass
|
|
759
|
-
|
|
760
|
-
# -- Tamper-proof audit chain (all operations logged with hash chain) --
|
|
761
|
-
try:
|
|
762
|
-
from superlocalmemory.compliance.audit import AuditChain
|
|
763
|
-
audit_path = config.db_path.parent / "audit_chain.db"
|
|
764
|
-
audit_chain = AuditChain(audit_path)
|
|
765
|
-
for op in ("store", "recall", "delete"):
|
|
766
|
-
hooks.register_post(op, lambda ctx, _op=op: audit_chain.log(
|
|
767
|
-
operation=_op,
|
|
768
|
-
agent_id=ctx.get("agent_id", "unknown"),
|
|
769
|
-
profile_id=ctx.get("profile_id", profile_id),
|
|
770
|
-
content_hash=ctx.get("content_hash", ""),
|
|
771
|
-
))
|
|
772
|
-
result["audit_chain"] = audit_chain
|
|
773
|
-
except Exception:
|
|
774
|
-
pass
|
|
775
|
-
|
|
776
|
-
return result
|