superlocalmemory 4.1.13 → 4.1.14
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 +48 -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,480 +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 V4 | https://qualixar.com | https://varunpratap.com
|
|
4
|
-
|
|
5
|
-
"""SuperLocalMemory V4 — MCP Server.
|
|
6
|
-
|
|
7
|
-
Clean MCP server calling V3 MemoryEngine. Supports all MCP-compatible IDEs.
|
|
8
|
-
|
|
9
|
-
Part of Qualixar | Author: Varun Pratap Bhardwaj
|
|
10
|
-
"""
|
|
11
|
-
|
|
12
|
-
from __future__ import annotations
|
|
13
|
-
|
|
14
|
-
# CRITICAL: Set BEFORE any torch/transformers import to prevent Metal/MPS
|
|
15
|
-
# GPU memory reservation on Apple Silicon.
|
|
16
|
-
import os as _os
|
|
17
|
-
_os.environ.setdefault('PYTORCH_MPS_HIGH_WATERMARK_RATIO', '0.0')
|
|
18
|
-
_os.environ.setdefault('PYTORCH_MPS_MEM_LIMIT', '0')
|
|
19
|
-
_os.environ.setdefault('PYTORCH_ENABLE_MPS_FALLBACK', '1')
|
|
20
|
-
_os.environ.setdefault('TOKENIZERS_PARALLELISM', 'false')
|
|
21
|
-
_os.environ.setdefault('TORCH_DEVICE', 'cpu')
|
|
22
|
-
# LIGHT engine contract: suppress the top-level dep check in __init__.py
|
|
23
|
-
# that unconditionally imports onnxruntime. MCP runs LIGHT-only — ONNX
|
|
24
|
-
# must never load in this process.
|
|
25
|
-
_os.environ.setdefault('SLM_SKIP_DEP_CHECK', '1')
|
|
26
|
-
|
|
27
|
-
import logging
|
|
28
|
-
import sys
|
|
29
|
-
|
|
30
|
-
from superlocalmemory import __version__ as _slm_version
|
|
31
|
-
from superlocalmemory.mcp.http_transport import SLMFastMCP
|
|
32
|
-
|
|
33
|
-
logger = logging.getLogger(__name__)
|
|
34
|
-
|
|
35
|
-
# mcp 2.0.0: MCPServer takes version= directly (no private _mcp_server poke).
|
|
36
|
-
server = SLMFastMCP("SuperLocalMemory V4", version=_slm_version)
|
|
37
|
-
|
|
38
|
-
# Lazy engine singleton -------------------------------------------------------
|
|
39
|
-
|
|
40
|
-
import threading as _threading
|
|
41
|
-
_engine = None
|
|
42
|
-
_engine_lock = _threading.Lock()
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
def get_engine():
|
|
46
|
-
"""Return (or create) the singleton LIGHT MemoryEngine.
|
|
47
|
-
|
|
48
|
-
FastMCP may call tools concurrently from multiple threads. The
|
|
49
|
-
double-checked lock keeps construction single-shot even if two
|
|
50
|
-
tool invocations race on a cold process — without it we would
|
|
51
|
-
double-run the schema migrations and build two ``AdaptiveLearner``
|
|
52
|
-
instances over the same DB file.
|
|
53
|
-
"""
|
|
54
|
-
global _engine
|
|
55
|
-
if _engine is not None:
|
|
56
|
-
return _engine
|
|
57
|
-
with _engine_lock:
|
|
58
|
-
if _engine is not None:
|
|
59
|
-
return _engine
|
|
60
|
-
from superlocalmemory.core.config import SLMConfig
|
|
61
|
-
from superlocalmemory.core.engine import MemoryEngine
|
|
62
|
-
from superlocalmemory.core.engine_capabilities import Capabilities
|
|
63
|
-
|
|
64
|
-
config = SLMConfig.load()
|
|
65
|
-
new_engine = MemoryEngine(config, capabilities=Capabilities.LIGHT)
|
|
66
|
-
new_engine.initialize()
|
|
67
|
-
_engine = new_engine
|
|
68
|
-
return _engine
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
def reset_engine():
|
|
72
|
-
"""Reset engine singleton (for testing or mode switch)."""
|
|
73
|
-
global _engine
|
|
74
|
-
with _engine_lock:
|
|
75
|
-
_engine = None
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
# Register tools and resources -------------------------------------------------
|
|
79
|
-
#
|
|
80
|
-
# Essential-only default: 41 base tools + 8 mesh tools = 49 registered.
|
|
81
|
-
# when mesh is enabled. Set ``SLM_MCP_ALL_TOOLS=1`` to expose the full
|
|
82
|
-
# toolset. Rationale: IDEs cap at 50-100 tools total (Cursor,
|
|
83
|
-
# Antigravity, Windsurf) and a maximal SLM registration crowds out
|
|
84
|
-
# other MCP servers the user may have installed.
|
|
85
|
-
# Admin/diagnostics tools remain available via CLI (`slm <command>`).
|
|
86
|
-
# Set SLM_MCP_ALL_TOOLS=1 to enable all 94 tools (power users).
|
|
87
|
-
|
|
88
|
-
import os as _os_reg
|
|
89
|
-
|
|
90
|
-
_ESSENTIAL_TOOLS: set[str] = {
|
|
91
|
-
# Core memory operations (8)
|
|
92
|
-
"remember", "recall", "search", "fetch",
|
|
93
|
-
"list_recent", "delete_memory", "update_memory", "get_status",
|
|
94
|
-
"switch_profile",
|
|
95
|
-
# Session lifecycle (3)
|
|
96
|
-
"session_init", "observe", "close_session",
|
|
97
|
-
# Feedback / learning signals — reachable Dash-Core path for
|
|
98
|
-
# thumbs-up / pin / drift signals.
|
|
99
|
-
"report_feedback",
|
|
100
|
-
# v4.0.2 portable Brain evidence: profile-scoped receipt reads/writes.
|
|
101
|
-
"get_brain_evidence_status", "record_agent_experience",
|
|
102
|
-
"record_cognitive_turn", "finalize_cognitive_turn",
|
|
103
|
-
# v4.0.4: explicit, optional observation from the separately installed
|
|
104
|
-
# Bounded Loops MCP producer. It never participates in recall/ranking.
|
|
105
|
-
"observe_bounded_loop_evidence",
|
|
106
|
-
# Update, review, and list form one core correction lifecycle.
|
|
107
|
-
"review_correction", "list_corrections",
|
|
108
|
-
# v4.0.8 (#113): readable summaries. Present here as well as in the named
|
|
109
|
-
# profiles because this set is the FALLBACK surface — it must mirror
|
|
110
|
-
# ``full``, and a tool that ships in the smallest profile ("core") cannot be
|
|
111
|
-
# missing from the fallback without a client silently losing it.
|
|
112
|
-
"get_memory_summary",
|
|
113
|
-
# Memory management (2)
|
|
114
|
-
"forget", "run_maintenance",
|
|
115
|
-
# NOTE: prestage_context IS registered (see register_prestage_tool below)
|
|
116
|
-
# but is deliberately absent from the default surface. Brain evidence is
|
|
117
|
-
# intentionally present: it is the portable contract for installed agents.
|
|
118
|
-
# Infinite memory + learning (4)
|
|
119
|
-
"consolidate_cognitive", "get_soft_prompts",
|
|
120
|
-
"set_mode", "report_outcome",
|
|
121
|
-
# v3.4.7: Two-way learning (4)
|
|
122
|
-
"log_tool_event", "get_assertions",
|
|
123
|
-
"reinforce_assertion", "contradict_assertion",
|
|
124
|
-
# v3.4.11: Skill evolution (3)
|
|
125
|
-
"evolve_skill", "skill_health", "skill_lineage",
|
|
126
|
-
# v3.6.11: Surface B Optimize tools (5)
|
|
127
|
-
"slm_compress", "slm_retrieve", "slm_cache_set", "slm_cache_get", "slm_optimize_stats",
|
|
128
|
-
# v3.8.0: bounded-loop tools (3) — CLI + /slm-loop command + MCP. Kept in
|
|
129
|
-
# the default exposure so any MCP client discovers gated loops, not just
|
|
130
|
-
# profile=code/full/power sessions.
|
|
131
|
-
"slm_loop_run", "slm_loop_history", "slm_loop_show",
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
# v3.4.4: Mesh tools — enabled if mesh_enabled in config or SLM_MCP_MESH_TOOLS=1
|
|
135
|
-
_mesh_tools_enabled = _os_reg.environ.get("SLM_MCP_MESH_TOOLS", "").lower() in ("1", "true")
|
|
136
|
-
if not _mesh_tools_enabled:
|
|
137
|
-
try:
|
|
138
|
-
from superlocalmemory.core.config import SLMConfig
|
|
139
|
-
_cfg = SLMConfig.load()
|
|
140
|
-
_mesh_tools_enabled = getattr(_cfg, "mesh_enabled", True) # default True in v3.4.3+
|
|
141
|
-
except Exception:
|
|
142
|
-
_mesh_tools_enabled = True # Safe default — mesh broker is always in daemon
|
|
143
|
-
|
|
144
|
-
if _mesh_tools_enabled:
|
|
145
|
-
_ESSENTIAL_TOOLS.update({
|
|
146
|
-
"mesh_summary", "mesh_peers", "mesh_send", "mesh_inbox",
|
|
147
|
-
"mesh_state", "mesh_lock", "mesh_events", "mesh_status",
|
|
148
|
-
})
|
|
149
|
-
|
|
150
|
-
_ESSENTIAL_TOOLS = frozenset(_ESSENTIAL_TOOLS)
|
|
151
|
-
|
|
152
|
-
_all_tools = _os_reg.environ.get("SLM_MCP_ALL_TOOLS") == "1"
|
|
153
|
-
|
|
154
|
-
# v3.4.45: Minimal mode — explicit user allowlist via SLM_MCP_TOOLS env var.
|
|
155
|
-
# Format: comma-separated tool names, e.g. "remember,recall,session_init,search"
|
|
156
|
-
# Use case: Claude Code consumer plans with tight context budgets where the
|
|
157
|
-
# 25-tool essential set is still too many. Power users override to expose
|
|
158
|
-
# exactly the tools they invoke. Falls back to _ESSENTIAL_TOOLS when unset.
|
|
159
|
-
_user_allowlist_str = _os_reg.environ.get("SLM_MCP_TOOLS", "").strip()
|
|
160
|
-
|
|
161
|
-
# ---------------------------------------------------------------------------
|
|
162
|
-
# Named profile definitions (introduced in v3.6.14)
|
|
163
|
-
# Extracted to mcp/profiles.py (v3.8.0) — pure data, no side effects.
|
|
164
|
-
# All names re-exported here for backward compatibility with existing tests
|
|
165
|
-
# and any code that imports them from this module.
|
|
166
|
-
# ---------------------------------------------------------------------------
|
|
167
|
-
|
|
168
|
-
from superlocalmemory.mcp.profiles import ( # noqa: E402 (after env setups above)
|
|
169
|
-
_PROFILE_CORE,
|
|
170
|
-
_PROFILE_CODE,
|
|
171
|
-
_PROFILE_FULL_MESH,
|
|
172
|
-
_PROFILE_FULL,
|
|
173
|
-
_PROFILE_POWER,
|
|
174
|
-
_PROFILE_MESH,
|
|
175
|
-
_PROFILE_DEFINITIONS,
|
|
176
|
-
_PROFILE_ALIASES,
|
|
177
|
-
)
|
|
178
|
-
|
|
179
|
-
_profile = _os_reg.environ.get("SLM_MCP_PROFILE", "").strip().lower()
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
def _resolve_profile_allowed(
|
|
183
|
-
profile: str,
|
|
184
|
-
definitions: dict[str, frozenset[str]],
|
|
185
|
-
essential: frozenset[str],
|
|
186
|
-
) -> frozenset[str] | None:
|
|
187
|
-
"""Resolve a profile name to its allowed tool frozenset, or None for raw-server routes.
|
|
188
|
-
|
|
189
|
-
Returns:
|
|
190
|
-
None — for "" (no selection) or "whole" (raw server, all tools).
|
|
191
|
-
frozenset — the profile's tool set for known profiles.
|
|
192
|
-
|
|
193
|
-
Raises:
|
|
194
|
-
ValueError: if ``profile`` is neither canonical nor an explicitly
|
|
195
|
-
supported compatibility alias.
|
|
196
|
-
"""
|
|
197
|
-
canonical = _PROFILE_ALIASES.get(profile, profile)
|
|
198
|
-
if canonical != profile:
|
|
199
|
-
logger.warning(
|
|
200
|
-
"SLM_MCP_PROFILE=%r is deprecated; use %r instead.",
|
|
201
|
-
profile,
|
|
202
|
-
canonical,
|
|
203
|
-
)
|
|
204
|
-
if not canonical or canonical == "whole":
|
|
205
|
-
return None
|
|
206
|
-
if canonical in definitions:
|
|
207
|
-
return definitions[canonical]
|
|
208
|
-
valid = ", ".join((*sorted(definitions), "whole"))
|
|
209
|
-
raise ValueError(
|
|
210
|
-
f"SLM_MCP_PROFILE={profile!r} is not recognised; valid profiles: {valid}"
|
|
211
|
-
)
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
class _FilteredServer:
|
|
215
|
-
"""Wraps FastMCP to only register essential tools.
|
|
216
|
-
|
|
217
|
-
Non-essential tools are silently skipped (not registered on the MCP
|
|
218
|
-
server). They remain available via CLI. When SLM_MCP_ALL_TOOLS=1,
|
|
219
|
-
all tools are registered (bypass filter). When SLM_MCP_TOOLS is set,
|
|
220
|
-
that user allowlist is used instead of _ESSENTIAL_TOOLS.
|
|
221
|
-
"""
|
|
222
|
-
__slots__ = ("_server", "_allowed")
|
|
223
|
-
|
|
224
|
-
def __init__(self, real_server: SLMFastMCP, allowed: frozenset[str]) -> None:
|
|
225
|
-
self._server = real_server
|
|
226
|
-
self._allowed = allowed
|
|
227
|
-
|
|
228
|
-
def tool(self, *args, **kwargs):
|
|
229
|
-
def decorator(func):
|
|
230
|
-
if func.__name__ in self._allowed:
|
|
231
|
-
return self._server.tool(*args, **kwargs)(func)
|
|
232
|
-
return func # Skip registration — still importable, just not MCP-visible
|
|
233
|
-
return decorator
|
|
234
|
-
|
|
235
|
-
def __getattr__(self, name):
|
|
236
|
-
return getattr(self._server, name)
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
# Choose registration target (precedence: ALL > user allowlist > profile > essential)
|
|
240
|
-
if _all_tools:
|
|
241
|
-
_target = server # tier1 (unchanged)
|
|
242
|
-
elif _user_allowlist_str:
|
|
243
|
-
_user_allowlist = frozenset(t.strip() for t in _user_allowlist_str.split(",") if t.strip())
|
|
244
|
-
_target = _FilteredServer(server, _user_allowlist) # tier2 (unchanged)
|
|
245
|
-
elif _profile == "whole":
|
|
246
|
-
_target = server # NEW raw-server
|
|
247
|
-
elif _profile:
|
|
248
|
-
_profile_allowed = _resolve_profile_allowed(
|
|
249
|
-
_profile, _PROFILE_DEFINITIONS, _ESSENTIAL_TOOLS
|
|
250
|
-
)
|
|
251
|
-
_target = (
|
|
252
|
-
server
|
|
253
|
-
if _profile_allowed is None
|
|
254
|
-
else _FilteredServer(server, _profile_allowed)
|
|
255
|
-
)
|
|
256
|
-
else:
|
|
257
|
-
_target = _FilteredServer(server, _ESSENTIAL_TOOLS) # default (unchanged)
|
|
258
|
-
|
|
259
|
-
from superlocalmemory.mcp.tools_core import register_core_tools
|
|
260
|
-
from superlocalmemory.mcp.tools_v28 import register_v28_tools
|
|
261
|
-
from superlocalmemory.mcp.tools_v3 import register_v3_tools
|
|
262
|
-
from superlocalmemory.mcp.tools_active import register_active_tools
|
|
263
|
-
from superlocalmemory.mcp.tools_v33 import register_v33_tools
|
|
264
|
-
from superlocalmemory.mcp.resources import register_resources
|
|
265
|
-
from superlocalmemory.mcp.tools_code_graph import register_code_graph_tools
|
|
266
|
-
from superlocalmemory.mcp.tools_mesh import register_mesh_tools
|
|
267
|
-
from superlocalmemory.mcp.tools_learning import register_learning_tools
|
|
268
|
-
from superlocalmemory.mcp.tools_evolution import register_evolution_tools
|
|
269
|
-
|
|
270
|
-
register_core_tools(_target, get_engine)
|
|
271
|
-
register_v28_tools(_target, get_engine)
|
|
272
|
-
register_v3_tools(_target, get_engine)
|
|
273
|
-
register_active_tools(_target, get_engine)
|
|
274
|
-
register_v33_tools(_target, get_engine)
|
|
275
|
-
register_resources(server, get_engine) # Resources always registered (not tools)
|
|
276
|
-
register_code_graph_tools(_target, get_engine) # CodeGraph: filtered like other tools (SLM_MCP_ALL_TOOLS=1 to show all)
|
|
277
|
-
register_mesh_tools(_target, get_engine) # v3.4.4: Mesh P2P tools — ships with SLM, no separate slm-mesh needed
|
|
278
|
-
register_learning_tools(_target, get_engine) # v3.4.7: Two-way learning tools
|
|
279
|
-
register_evolution_tools(_target, get_engine) # v3.4.11: Skill evolution tools
|
|
280
|
-
from superlocalmemory.mcp.tools_optimize import register_optimize_tools
|
|
281
|
-
register_optimize_tools(_target) # v3.6.11: Surface B Optimize tools (proxy-free)
|
|
282
|
-
from superlocalmemory.mcp.tools_loops import register_loop_tools
|
|
283
|
-
from superlocalmemory.mcp._daemon_proxy import choose_pool as _choose_loop_pool
|
|
284
|
-
register_loop_tools(
|
|
285
|
-
_target,
|
|
286
|
-
get_engine,
|
|
287
|
-
_choose_loop_pool,
|
|
288
|
-
) # v3.8.0: bounded-loop tools (CLI+command+MCP)
|
|
289
|
-
from superlocalmemory.mcp.tools_ops import register_ops_tools
|
|
290
|
-
register_ops_tools(_target, get_engine) # operational recovery & admin remediation
|
|
291
|
-
from superlocalmemory.mcp.tools_brain import register_brain_tools
|
|
292
|
-
register_brain_tools(_target, get_engine) # v4.0.2 portable Brain receipts
|
|
293
|
-
from superlocalmemory.mcp.tools_summaries import register_summary_tools
|
|
294
|
-
register_summary_tools(_target, get_engine) # v4.0.8 issue #113 summary reads
|
|
295
|
-
from superlocalmemory.mcp.tools_context import register_prestage_tool
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
def _prestage_recall(query: str, limit: int, profile_id: str, as_of: str | None = None):
|
|
299
|
-
"""Bridge engine.recall → prestage_context recall_fn shape."""
|
|
300
|
-
engine = get_engine()
|
|
301
|
-
if hasattr(engine, "profile_id") and profile_id:
|
|
302
|
-
try:
|
|
303
|
-
engine.profile_id = profile_id
|
|
304
|
-
except Exception:
|
|
305
|
-
pass
|
|
306
|
-
try:
|
|
307
|
-
if as_of is not None:
|
|
308
|
-
results = engine.recall(query, limit=limit, as_of=as_of)
|
|
309
|
-
else:
|
|
310
|
-
results = engine.recall(query, limit=limit)
|
|
311
|
-
except TypeError:
|
|
312
|
-
results = engine.recall(query, limit=limit)
|
|
313
|
-
out: list[dict] = []
|
|
314
|
-
for r in results or []:
|
|
315
|
-
if isinstance(r, dict):
|
|
316
|
-
out.append({
|
|
317
|
-
"id": str(r.get("fact_id") or r.get("id") or ""),
|
|
318
|
-
"text": str(r.get("content") or r.get("text") or ""),
|
|
319
|
-
"score": float(r.get("score") or r.get("relevance_score") or 0.0),
|
|
320
|
-
"source": str(r.get("source") or "recall"),
|
|
321
|
-
})
|
|
322
|
-
else:
|
|
323
|
-
out.append({
|
|
324
|
-
"id": str(getattr(r, "fact_id", "") or ""),
|
|
325
|
-
"text": str(getattr(r, "content", "") or ""),
|
|
326
|
-
"score": float(getattr(r, "score", 0.0) or 0.0),
|
|
327
|
-
"source": "recall",
|
|
328
|
-
})
|
|
329
|
-
return out
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
register_prestage_tool(_target, _prestage_recall)
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
# Keep stdio MCP processes thin until a tool truly needs a local LIGHT engine.
|
|
336
|
-
# Every open IDE/task owns a stdio process; eagerly opening memory.db in all of
|
|
337
|
-
# them multiplied RAM and SQLite writers on machines with many long-lived
|
|
338
|
-
# sessions. The shared daemon owns model warmup and common remember/recall work.
|
|
339
|
-
def _eager_warmup() -> None:
|
|
340
|
-
"""Ensure the shared daemon is running without opening a per-client engine.
|
|
341
|
-
|
|
342
|
-
Mesh registration is intentionally lazy: a local stdio session is not a
|
|
343
|
-
remote peer, and heartbeat writes should begin only after a mesh tool is
|
|
344
|
-
actually used.
|
|
345
|
-
"""
|
|
346
|
-
_logger = logging.getLogger(__name__)
|
|
347
|
-
|
|
348
|
-
# Measurement / test harnesses set this to skip daemon-start.
|
|
349
|
-
if _os.environ.get("SLM_DISABLE_WARMUP_SIDE_EFFECTS") == "1":
|
|
350
|
-
return
|
|
351
|
-
|
|
352
|
-
# V3.4.4: Also ensure daemon is running for dashboard/mesh/health features.
|
|
353
|
-
# This runs in background — doesn't block MCP tool registration.
|
|
354
|
-
try:
|
|
355
|
-
from superlocalmemory.cli.daemon import ensure_daemon
|
|
356
|
-
if ensure_daemon():
|
|
357
|
-
_logger.info("Daemon auto-started by MCP server")
|
|
358
|
-
except Exception as exc:
|
|
359
|
-
_logger.warning("Daemon auto-start failed: %s", exc)
|
|
360
|
-
|
|
361
|
-
import threading
|
|
362
|
-
|
|
363
|
-
# v3.6.7: Suppress standalone-process behaviours when the MCP server is
|
|
364
|
-
# imported inside the daemon (SLM_MCP_EMBEDDED=1). Three threads are safe
|
|
365
|
-
# to run in a dedicated `slm mcp` subprocess but harmful inside the daemon:
|
|
366
|
-
# mcp-warmup — ensures the shared daemon only; never creates an engine.
|
|
367
|
-
# parent-watchdog — calls os._exit(0) if its parent IDE quits, which would
|
|
368
|
-
# kill the daemon along with it.
|
|
369
|
-
# stdin-eof-monitor — monitors stdin pipe; meaningless inside the daemon.
|
|
370
|
-
_embedded_in_daemon = _os.environ.get("SLM_MCP_EMBEDDED") == "1"
|
|
371
|
-
|
|
372
|
-
if not _embedded_in_daemon:
|
|
373
|
-
_warmup_thread = threading.Thread(target=_eager_warmup, daemon=True, name="mcp-warmup")
|
|
374
|
-
_warmup_thread.start()
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
# V3.4.57: Parent watchdog — self-terminate when the IDE/Claude session dies.
|
|
378
|
-
# FastMCP relies on stdin EOF to stop, but stdin EOF is NOT guaranteed on
|
|
379
|
-
# crash or force-quit. Without this, every abnormal exit leaves an orphaned
|
|
380
|
-
# slm mcp process consuming ~100-200 MB indefinitely. 22 orphans caused a
|
|
381
|
-
# daemon deadlock on May 30 2026 (241% CPU, session_init timeouts).
|
|
382
|
-
def _parent_watchdog() -> None:
|
|
383
|
-
"""Exit when parent IDE process (Claude Code, Cursor, etc.) dies.
|
|
384
|
-
|
|
385
|
-
Polls os.getppid() every 10 seconds. On macOS/Linux, when a parent
|
|
386
|
-
dies the child is reparented to PID 1 (init) — getppid() returns 1.
|
|
387
|
-
Also validates the original parent is still alive via os.kill(ppid, 0).
|
|
388
|
-
Uses os._exit(0) to bypass any atexit handlers that might hang.
|
|
389
|
-
"""
|
|
390
|
-
import os as _os_wd, time as _time
|
|
391
|
-
_wlog = logging.getLogger(__name__ + ".watchdog")
|
|
392
|
-
initial_ppid = _os_wd.getppid()
|
|
393
|
-
if initial_ppid <= 1:
|
|
394
|
-
return # Already reparented at startup — don't self-terminate
|
|
395
|
-
while True:
|
|
396
|
-
_time.sleep(10)
|
|
397
|
-
try:
|
|
398
|
-
current_ppid = _os_wd.getppid()
|
|
399
|
-
if current_ppid != initial_ppid or current_ppid <= 1:
|
|
400
|
-
_wlog.info("Parent PID changed (%d→%d), self-terminating", initial_ppid, current_ppid)
|
|
401
|
-
_os_wd._exit(0)
|
|
402
|
-
_os_wd.kill(initial_ppid, 0) # Raises ProcessLookupError if dead
|
|
403
|
-
except ProcessLookupError:
|
|
404
|
-
_wlog.info("Parent PID %d gone, self-terminating", initial_ppid)
|
|
405
|
-
_os_wd._exit(0)
|
|
406
|
-
except Exception:
|
|
407
|
-
pass # Transient errors — keep watching
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
if not _embedded_in_daemon:
|
|
411
|
-
_watchdog_thread = threading.Thread(target=_parent_watchdog, daemon=True, name="parent-watchdog")
|
|
412
|
-
_watchdog_thread.start()
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
# V3.5.9: Stdin EOF monitor — complements the parent watchdog for the case where
|
|
416
|
-
# the IDE starts a new MCP session WITHOUT quitting the app. The old stdio pipe
|
|
417
|
-
# is abandoned (write-end closed) but the parent process stays alive, so the
|
|
418
|
-
# watchdog never fires. Without this, each IDE reconnect adds a zombie process
|
|
419
|
-
# (22 seen in production causing 12 GB swap on the M5 Pro).
|
|
420
|
-
#
|
|
421
|
-
# Uses kqueue(2) KQ_EV_EOF on macOS — fires when the write-end of the stdin pipe
|
|
422
|
-
# closes WITHOUT consuming any bytes, so it cannot race with FastMCP's asyncio
|
|
423
|
-
# stdin reader. On Linux (no kqueue), the watchdog alone provides coverage.
|
|
424
|
-
def _stdin_eof_monitor() -> None:
|
|
425
|
-
"""Exit when the IDE closes our stdin pipe (kqueue — macOS only).
|
|
426
|
-
|
|
427
|
-
V3.6.4: kqueue ``EVFILT_READ`` reports ``EV_EOF`` *together with*
|
|
428
|
-
still-readable bytes (``ev.data > 0``) when the write-end closes while a
|
|
429
|
-
final request is buffered. Exiting on the EOF flag alone (pre-3.6.4)
|
|
430
|
-
dropped that in-flight request and self-terminated a session that still
|
|
431
|
-
had work to deliver — strict MCP hosts (e.g. the Hermes agent) then
|
|
432
|
-
logged a keepalive failure and respawned the process. We now defer
|
|
433
|
-
termination until the buffer is genuinely drained (see ``_stdin_guard``).
|
|
434
|
-
"""
|
|
435
|
-
import select as _sel, os as _os_eof, time as _time
|
|
436
|
-
from superlocalmemory.mcp._stdin_guard import eof_action
|
|
437
|
-
_mlog = logging.getLogger(__name__ + ".stdin_monitor")
|
|
438
|
-
if not hasattr(_sel, "kqueue"):
|
|
439
|
-
return # Linux / non-macOS: watchdog covers process death
|
|
440
|
-
# Bounded grace for the FastMCP reader to drain a buffered final request
|
|
441
|
-
# before we tear down. ~2 s ceiling (40 × 50 ms): a genuine EOF means the
|
|
442
|
-
# session is ending regardless, so we never wait indefinitely.
|
|
443
|
-
_DRAIN_POLL_S = 0.05
|
|
444
|
-
_DRAIN_MAX_POLLS = 40
|
|
445
|
-
try:
|
|
446
|
-
fd = sys.stdin.fileno()
|
|
447
|
-
kq = _sel.kqueue()
|
|
448
|
-
ke = _sel.kevent(fd, filter=_sel.KQ_FILTER_READ, flags=_sel.KQ_EV_ADD | _sel.KQ_EV_EOF)
|
|
449
|
-
kq.control([ke], 0) # register without waiting
|
|
450
|
-
while True:
|
|
451
|
-
evs = kq.control(None, 4, 30.0) # 30 s poll — low cost
|
|
452
|
-
for ev in evs:
|
|
453
|
-
action = eof_action(ev.flags, ev.data, _sel.KQ_EV_EOF)
|
|
454
|
-
if action == "ignore":
|
|
455
|
-
continue
|
|
456
|
-
if action == "drain":
|
|
457
|
-
# Write-end closed but unread bytes remain. Let the
|
|
458
|
-
# FastMCP reader consume the final request(s); poll until
|
|
459
|
-
# drained or the grace ceiling elapses.
|
|
460
|
-
for _ in range(_DRAIN_MAX_POLLS):
|
|
461
|
-
_time.sleep(_DRAIN_POLL_S)
|
|
462
|
-
recheck = kq.control(None, 4, 0) # non-blocking
|
|
463
|
-
if not recheck:
|
|
464
|
-
break
|
|
465
|
-
ev = recheck[0]
|
|
466
|
-
if eof_action(ev.flags, ev.data, _sel.KQ_EV_EOF) != "drain":
|
|
467
|
-
break
|
|
468
|
-
_mlog.info("stdin write-end closed (kqueue EOF, drained), self-terminating")
|
|
469
|
-
_os_eof._exit(0)
|
|
470
|
-
except Exception as exc:
|
|
471
|
-
_mlog.debug("stdin EOF monitor error: %s — watchdog will cover", exc)
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
if not _embedded_in_daemon:
|
|
475
|
-
_stdin_monitor_thread = threading.Thread(target=_stdin_eof_monitor, daemon=True, name="stdin-eof-monitor")
|
|
476
|
-
_stdin_monitor_thread.start()
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
if __name__ == "__main__":
|
|
480
|
-
server.run(transport="stdio")
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
# Copyright (c) 2026 Varun Pratap Bhardwaj / Qualixar
|
|
2
|
-
# Licensed under AGPL-3.0-or-later - see LICENSE file
|
|
3
|
-
|
|
4
|
-
"""Work out which session a tool call belongs to, the same way every time.
|
|
5
|
-
|
|
6
|
-
``recall`` has resolved this through a four-step ladder since S9-DASH-10 — the
|
|
7
|
-
explicit argument, then the environment, then the hook registry, then a stable
|
|
8
|
-
per-agent fallback — so an engagement signal lands on the right pending outcome.
|
|
9
|
-
``remember`` never had it. It took ``session_id: str = ""`` and stored whatever
|
|
10
|
-
it was handed, which for a caller that does not pass one is nothing.
|
|
11
|
-
|
|
12
|
-
Measured on the author's store: **192 of 3,894 genuine facts carry a session_id
|
|
13
|
-
(4.9%)**, and 4 of the 200 most recent (2%). Every one of the rest was written
|
|
14
|
-
through a path that could have known and did not.
|
|
15
|
-
|
|
16
|
-
That is not bookkeeping. ``RetrievalEngine`` promotes results so the top of an
|
|
17
|
-
answer spans more than one session (its ``sessions_in_top`` pass), and a fact
|
|
18
|
-
with no session_id can never be promoted by it — so the diversity mechanism was
|
|
19
|
-
running against a corpus where 95% of rows were indistinguishable. It also means
|
|
20
|
-
"what did we discuss in that session" has almost nothing to match on.
|
|
21
|
-
|
|
22
|
-
One implementation, called by both tools, so the read path and the write path
|
|
23
|
-
cannot disagree about which session they are in.
|
|
24
|
-
"""
|
|
25
|
-
|
|
26
|
-
from __future__ import annotations
|
|
27
|
-
|
|
28
|
-
import logging
|
|
29
|
-
import os
|
|
30
|
-
|
|
31
|
-
logger = logging.getLogger(__name__)
|
|
32
|
-
|
|
33
|
-
__all__ = ["resolve_session_id", "SESSION_ENV_VARS"]
|
|
34
|
-
|
|
35
|
-
#: Checked in order. Hosts set one or the other; SLM's own takes precedence so a
|
|
36
|
-
#: user can override a host that sets its variable to something unhelpful.
|
|
37
|
-
#: ``CLAUDE_CODE_SESSION_ID`` is the actual variable Claude Code's MCP
|
|
38
|
-
#: subprocess environment carries — verified on a live daemon 2026-08-24,
|
|
39
|
-
#: this pipeline settled 6013/6039 outcomes at the neutral 0.5 fallback
|
|
40
|
-
#: because the old two-name list never matched it, and every recall fell
|
|
41
|
-
#: through to the synthetic ``mcp:<agent_id>`` id that step 4 deliberately
|
|
42
|
-
#: excludes from matching.
|
|
43
|
-
SESSION_ENV_VARS = ("SLM_SESSION_ID", "CLAUDE_SESSION_ID", "CLAUDE_CODE_SESSION_ID")
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
def resolve_session_id(
|
|
47
|
-
explicit: str = "",
|
|
48
|
-
*,
|
|
49
|
-
agent_id: str = "unknown",
|
|
50
|
-
allow_agent_fallback: bool = True,
|
|
51
|
-
) -> str:
|
|
52
|
-
"""Best available session id for this call. Never raises.
|
|
53
|
-
|
|
54
|
-
Order, most to least specific:
|
|
55
|
-
|
|
56
|
-
1. ``explicit`` — what the caller passed. Always wins.
|
|
57
|
-
2. ``SLM_SESSION_ID`` / ``CLAUDE_SESSION_ID`` from the environment.
|
|
58
|
-
3. The hook registry: the session whose parent process is ours, else the
|
|
59
|
-
most recently active one inside 60 seconds. Parent-PID lookup is
|
|
60
|
-
collision-free across parallel host sessions, because each MCP
|
|
61
|
-
server's parent is the editor that spawned it.
|
|
62
|
-
4. ``mcp:<agent_id>`` — stable per agent, and deliberately NOT matched by
|
|
63
|
-
the Stop hook, so the reaper settles those outcomes at a neutral 0.5
|
|
64
|
-
rather than crediting or blaming a session that never existed.
|
|
65
|
-
|
|
66
|
-
``allow_agent_fallback=False`` stops before step 4 and returns "". Use it
|
|
67
|
-
where a synthetic id would be worse than none: grouping memories under
|
|
68
|
-
``mcp:<agent>`` would put every memory an agent ever wrote into one bucket
|
|
69
|
-
and make session-diversity promotion rank them as a single session, which
|
|
70
|
-
is the opposite of what it is for.
|
|
71
|
-
"""
|
|
72
|
-
if explicit and explicit.strip():
|
|
73
|
-
return explicit.strip()
|
|
74
|
-
|
|
75
|
-
for name in SESSION_ENV_VARS:
|
|
76
|
-
value = os.environ.get(name)
|
|
77
|
-
if value and value.strip():
|
|
78
|
-
return value.strip()
|
|
79
|
-
|
|
80
|
-
try:
|
|
81
|
-
from superlocalmemory.hooks.session_registry import (
|
|
82
|
-
lookup_by_parent,
|
|
83
|
-
most_recent_active,
|
|
84
|
-
)
|
|
85
|
-
|
|
86
|
-
found = (
|
|
87
|
-
lookup_by_parent(within_seconds=60)
|
|
88
|
-
or most_recent_active(agent_type="claude", within_seconds=60)
|
|
89
|
-
or ""
|
|
90
|
-
)
|
|
91
|
-
if found:
|
|
92
|
-
return found
|
|
93
|
-
except Exception as exc: # noqa: BLE001 — a hint must never fail a call
|
|
94
|
-
logger.debug("session registry lookup unavailable: %s", exc)
|
|
95
|
-
|
|
96
|
-
if allow_agent_fallback:
|
|
97
|
-
return f"mcp:{agent_id}"
|
|
98
|
-
return ""
|
|
@@ -1,112 +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
|
|
4
|
-
|
|
5
|
-
"""Shared MCP utilities — single source of truth for helpers used
|
|
6
|
-
across tools_core, tools_active, tools_v28, tools_v3, tools_v33.
|
|
7
|
-
|
|
8
|
-
V3.3.12: Extracted _emit_event to eliminate code duplication.
|
|
9
|
-
"""
|
|
10
|
-
|
|
11
|
-
from __future__ import annotations
|
|
12
|
-
|
|
13
|
-
from dataclasses import dataclass
|
|
14
|
-
from typing import Any
|
|
15
|
-
|
|
16
|
-
from superlocalmemory.infra.data_root import state_path
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
def emit_event(event_type: str, payload: dict | None = None,
|
|
20
|
-
source_agent: str = "mcp_client") -> None:
|
|
21
|
-
"""Emit an event to the EventBus (best-effort, never raises)."""
|
|
22
|
-
try:
|
|
23
|
-
from superlocalmemory.infra.event_bus import EventBus
|
|
24
|
-
bus = EventBus.get_instance(state_path("memory.db"))
|
|
25
|
-
bus.emit(event_type, payload=payload, source_agent=source_agent,
|
|
26
|
-
source_protocol="mcp")
|
|
27
|
-
except Exception:
|
|
28
|
-
pass
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
@dataclass
|
|
32
|
-
class MCPMutationAuthorization:
|
|
33
|
-
"""One capability-owned MCP mutation authorized by engine policy."""
|
|
34
|
-
|
|
35
|
-
engine: Any
|
|
36
|
-
operation: str
|
|
37
|
-
context: dict[str, str]
|
|
38
|
-
_completed: bool = False
|
|
39
|
-
|
|
40
|
-
@property
|
|
41
|
-
def actor_id(self) -> str:
|
|
42
|
-
return self.context["agent_id"]
|
|
43
|
-
|
|
44
|
-
def complete(self) -> None:
|
|
45
|
-
"""Emit the matching post hook once the mutation succeeds."""
|
|
46
|
-
if self._completed:
|
|
47
|
-
return
|
|
48
|
-
self.engine._hooks.run_post(self.operation, self.context)
|
|
49
|
-
self._completed = True
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
def authorize_mcp_mutation(
|
|
53
|
-
engine: Any,
|
|
54
|
-
operation: str,
|
|
55
|
-
*,
|
|
56
|
-
mutation_source: str,
|
|
57
|
-
profile_id: str | None = None,
|
|
58
|
-
fact_id: str = "",
|
|
59
|
-
content_preview: str = "",
|
|
60
|
-
) -> MCPMutationAuthorization:
|
|
61
|
-
"""Derive local authority and run policy before a direct MCP write.
|
|
62
|
-
|
|
63
|
-
MCP URL/env agent identifiers remain audit attribution only. The trusted
|
|
64
|
-
principal is derived from the private local install capability, matching
|
|
65
|
-
the canonical ingestion and recall-worker mutation boundaries.
|
|
66
|
-
|
|
67
|
-
Phase 1: Routes through the admission registry so enterprise policy applies
|
|
68
|
-
even when the caller has local trust (trust-hook alone cannot bypass registry).
|
|
69
|
-
AdmissionDenied propagates to the caller; personal OWNER is always admitted.
|
|
70
|
-
"""
|
|
71
|
-
if operation not in {"update", "delete"}:
|
|
72
|
-
raise ValueError("MCP mutations must use update or delete policy")
|
|
73
|
-
|
|
74
|
-
from superlocalmemory.core.actor_context import Transport
|
|
75
|
-
from superlocalmemory.core.admission import (
|
|
76
|
-
AdmissionDenied,
|
|
77
|
-
_resolve_deployment,
|
|
78
|
-
admit,
|
|
79
|
-
resolve_actor,
|
|
80
|
-
)
|
|
81
|
-
from superlocalmemory.core.engine_ingestion import local_trusted_actor_id
|
|
82
|
-
from superlocalmemory.core.operation_request import OperationKind
|
|
83
|
-
from superlocalmemory.mcp.agent_context import get_current_agent_id
|
|
84
|
-
|
|
85
|
-
deployment = _resolve_deployment()
|
|
86
|
-
tier = "enterprise" if deployment.is_enterprise else "personal"
|
|
87
|
-
mode = "company" if deployment.is_enterprise else "local"
|
|
88
|
-
actor = resolve_actor(Transport.MCP, tier=tier, mode=mode)
|
|
89
|
-
kind = OperationKind.FORGET if operation == "delete" else OperationKind.CORRECT
|
|
90
|
-
admit(kind, actor, mode=mode) # raises AdmissionDenied on deny
|
|
91
|
-
|
|
92
|
-
source_agent_id = get_current_agent_id(env_fallback=True)
|
|
93
|
-
context = {
|
|
94
|
-
"operation": operation,
|
|
95
|
-
"agent_id": local_trusted_actor_id("mcp"),
|
|
96
|
-
"source_agent_id": source_agent_id,
|
|
97
|
-
"mutation_source": mutation_source,
|
|
98
|
-
"profile_id": profile_id or engine.profile_id,
|
|
99
|
-
}
|
|
100
|
-
if fact_id:
|
|
101
|
-
context["fact_id"] = fact_id
|
|
102
|
-
if content_preview:
|
|
103
|
-
context["content_preview"] = content_preview[:100]
|
|
104
|
-
engine._hooks.run_pre(operation, context)
|
|
105
|
-
return MCPMutationAuthorization(engine, operation, context)
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
__all__ = [
|
|
109
|
-
"MCPMutationAuthorization",
|
|
110
|
-
"authorize_mcp_mutation",
|
|
111
|
-
"emit_event",
|
|
112
|
-
]
|