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,266 +0,0 @@
|
|
|
1
|
-
# Copyright (c) 2026 Varun Pratap Bhardwaj / Qualixar
|
|
2
|
-
# Licensed under AGPL-3.0-or-later - see LICENSE file
|
|
3
|
-
|
|
4
|
-
"""Tell the owner, in their own words, whether their memory works.
|
|
5
|
-
|
|
6
|
-
Until now the only way to learn that 43.7% of a store could not be found by
|
|
7
|
-
asking a question was to write the SQL yourself. One machine sat in exactly
|
|
8
|
-
that state for months while every status line it showed said the system was
|
|
9
|
-
healthy, because nothing measured reachability and nothing reported it.
|
|
10
|
-
|
|
11
|
-
So this module answers four questions a non-engineer can act on:
|
|
12
|
-
|
|
13
|
-
* How many memories do I have?
|
|
14
|
-
* How many can actually be found by asking a question?
|
|
15
|
-
* How many were withheld because a model wrote them, not me?
|
|
16
|
-
* Is anything still being repaired?
|
|
17
|
-
|
|
18
|
-
Read-only, and every query is bounded. Fail-soft by construction: a missing
|
|
19
|
-
table or column yields ``None`` for that line rather than an exception, because
|
|
20
|
-
a health report that crashes on an old store is worse than one that says "not
|
|
21
|
-
known yet".
|
|
22
|
-
|
|
23
|
-
Consumed by ``slm doctor``, ``GET /api/v3/memory-health``, and the dashboard.
|
|
24
|
-
One implementation so the three cannot disagree with each other.
|
|
25
|
-
"""
|
|
26
|
-
|
|
27
|
-
from __future__ import annotations
|
|
28
|
-
|
|
29
|
-
import logging
|
|
30
|
-
import re
|
|
31
|
-
import sqlite3
|
|
32
|
-
from dataclasses import dataclass, field
|
|
33
|
-
from pathlib import Path
|
|
34
|
-
|
|
35
|
-
logger = logging.getLogger(__name__)
|
|
36
|
-
|
|
37
|
-
__all__ = ["MemoryHealth", "measure", "describe"]
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
@dataclass(frozen=True)
|
|
41
|
-
class MemoryHealth:
|
|
42
|
-
"""A store's answer-ability, counted rather than assumed."""
|
|
43
|
-
|
|
44
|
-
#: Memories that recall is allowed to return.
|
|
45
|
-
live_facts: int = 0
|
|
46
|
-
#: Of those, how many have a vector projection, i.e. can be found by
|
|
47
|
-
#: meaning rather than only by matching words.
|
|
48
|
-
findable_by_meaning: int = 0
|
|
49
|
-
#: Memories with no vector at all. These are reachable by keyword only.
|
|
50
|
-
missing_vector: int = 0
|
|
51
|
-
#: Machine-written summaries withheld from recall and kept for display.
|
|
52
|
-
withheld_summaries: int = 0
|
|
53
|
-
#: Summaries preserved in the display table.
|
|
54
|
-
display_summaries: int = 0
|
|
55
|
-
#: Memories hidden by the retention system, excluding the withheld ones.
|
|
56
|
-
hidden_by_forgetting: int = 0
|
|
57
|
-
#: Rows whose retention zone contradicts their retention score, i.e. hidden
|
|
58
|
-
#: while the maths says to keep them. Should be zero after repair.
|
|
59
|
-
inconsistently_hidden: int = 0
|
|
60
|
-
#: Present only when a table or column was absent.
|
|
61
|
-
unavailable: tuple[str, ...] = field(default_factory=tuple)
|
|
62
|
-
|
|
63
|
-
@property
|
|
64
|
-
def reachability(self) -> float:
|
|
65
|
-
"""Share of live memories findable by meaning, 0.0-1.0."""
|
|
66
|
-
if self.live_facts <= 0:
|
|
67
|
-
return 1.0
|
|
68
|
-
return self.findable_by_meaning / self.live_facts
|
|
69
|
-
|
|
70
|
-
@property
|
|
71
|
-
def healthy(self) -> bool:
|
|
72
|
-
"""Whether anything here warrants telling the owner about."""
|
|
73
|
-
return (
|
|
74
|
-
self.reachability >= 0.99
|
|
75
|
-
and self.missing_vector == 0
|
|
76
|
-
and self.inconsistently_hidden == 0
|
|
77
|
-
)
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
def measure(db_path: str | Path) -> MemoryHealth:
|
|
81
|
-
"""Count the store's answer-ability. Read-only; never raises."""
|
|
82
|
-
unavailable: list[str] = []
|
|
83
|
-
try:
|
|
84
|
-
conn = sqlite3.connect(f"file:{Path(db_path)}?mode=ro", uri=True)
|
|
85
|
-
except sqlite3.Error as exc:
|
|
86
|
-
logger.debug("memory health: cannot open %s: %s", db_path, exc)
|
|
87
|
-
return MemoryHealth(unavailable=("database",))
|
|
88
|
-
|
|
89
|
-
try:
|
|
90
|
-
if not _table_exists(conn, "atomic_facts"):
|
|
91
|
-
return MemoryHealth(unavailable=("atomic_facts",))
|
|
92
|
-
|
|
93
|
-
# Quarantine came in 4.0.10. On an older store every fact is "live",
|
|
94
|
-
# which is the honest reading of a store that has no withheld rows.
|
|
95
|
-
has_q = _has_column(conn, "atomic_facts", "quarantined")
|
|
96
|
-
if not has_q:
|
|
97
|
-
unavailable.append("quarantined")
|
|
98
|
-
live_clause = "COALESCE(quarantined, 0) = 0" if has_q else "1=1"
|
|
99
|
-
|
|
100
|
-
live = _count(conn, f"SELECT COUNT(*) FROM atomic_facts WHERE {live_clause}")
|
|
101
|
-
withheld = (
|
|
102
|
-
_count(conn, "SELECT COUNT(*) FROM atomic_facts WHERE quarantined = 1")
|
|
103
|
-
if has_q else 0
|
|
104
|
-
)
|
|
105
|
-
missing_vec = _count(
|
|
106
|
-
conn,
|
|
107
|
-
f"SELECT COUNT(*) FROM atomic_facts "
|
|
108
|
-
f"WHERE embedding IS NULL AND {live_clause}",
|
|
109
|
-
)
|
|
110
|
-
|
|
111
|
-
if _table_exists(conn, "embedding_metadata"):
|
|
112
|
-
findable = _count(
|
|
113
|
-
conn,
|
|
114
|
-
"SELECT COUNT(*) FROM embedding_metadata em "
|
|
115
|
-
"JOIN atomic_facts af ON af.fact_id = em.fact_id "
|
|
116
|
-
f"WHERE {_prefixed(live_clause, 'af')}",
|
|
117
|
-
)
|
|
118
|
-
else:
|
|
119
|
-
unavailable.append("embedding_metadata")
|
|
120
|
-
findable = 0
|
|
121
|
-
|
|
122
|
-
display = (
|
|
123
|
-
_count(conn, "SELECT COUNT(*) FROM consolidated_summaries")
|
|
124
|
-
if _table_exists(conn, "consolidated_summaries") else 0
|
|
125
|
-
)
|
|
126
|
-
if not _table_exists(conn, "consolidated_summaries"):
|
|
127
|
-
unavailable.append("consolidated_summaries")
|
|
128
|
-
|
|
129
|
-
hidden = inconsistent = 0
|
|
130
|
-
if _table_exists(conn, "fact_retention"):
|
|
131
|
-
hidden = _count(
|
|
132
|
-
conn,
|
|
133
|
-
"SELECT COUNT(*) FROM fact_retention r "
|
|
134
|
-
"JOIN atomic_facts af ON af.fact_id = r.fact_id "
|
|
135
|
-
"WHERE r.lifecycle_zone IN ('archive', 'forgotten') "
|
|
136
|
-
f" AND {_prefixed(live_clause, 'af')}",
|
|
137
|
-
)
|
|
138
|
-
# The contradiction M043 repairs: hidden, yet scored to keep.
|
|
139
|
-
inconsistent = _count(
|
|
140
|
-
conn,
|
|
141
|
-
"SELECT COUNT(*) FROM fact_retention r "
|
|
142
|
-
"JOIN atomic_facts af ON af.fact_id = r.fact_id "
|
|
143
|
-
"WHERE r.lifecycle_zone IN ('archive', 'forgotten') "
|
|
144
|
-
" AND r.retention_score > 0.8 "
|
|
145
|
-
f" AND {_prefixed(live_clause, 'af')}",
|
|
146
|
-
)
|
|
147
|
-
else:
|
|
148
|
-
unavailable.append("fact_retention")
|
|
149
|
-
|
|
150
|
-
return MemoryHealth(
|
|
151
|
-
live_facts=live,
|
|
152
|
-
findable_by_meaning=findable,
|
|
153
|
-
missing_vector=missing_vec,
|
|
154
|
-
withheld_summaries=withheld,
|
|
155
|
-
display_summaries=display,
|
|
156
|
-
hidden_by_forgetting=hidden,
|
|
157
|
-
inconsistently_hidden=inconsistent,
|
|
158
|
-
unavailable=tuple(unavailable),
|
|
159
|
-
)
|
|
160
|
-
except sqlite3.Error as exc:
|
|
161
|
-
logger.debug("memory health measurement failed: %s", exc)
|
|
162
|
-
return MemoryHealth(unavailable=(*unavailable, "query_failed"))
|
|
163
|
-
finally:
|
|
164
|
-
conn.close()
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
def describe(health: MemoryHealth) -> list[str]:
|
|
168
|
-
"""Plain-language lines for a reader who does not write SQL.
|
|
169
|
-
|
|
170
|
-
No percentages without the counts behind them, and no jargon: "findable by
|
|
171
|
-
asking a question" rather than "vector coverage", because the person who
|
|
172
|
-
needs this line is the one who would not know what a vector is.
|
|
173
|
-
"""
|
|
174
|
-
lines: list[str] = []
|
|
175
|
-
if "atomic_facts" in health.unavailable or "database" in health.unavailable:
|
|
176
|
-
return ["Memory store not readable yet."]
|
|
177
|
-
|
|
178
|
-
lines.append(f"You have {health.live_facts:,} memories.")
|
|
179
|
-
|
|
180
|
-
if "embedding_metadata" in health.unavailable:
|
|
181
|
-
lines.append(
|
|
182
|
-
"Whether they can be found by asking a question is not known yet — "
|
|
183
|
-
"the search index has not been built."
|
|
184
|
-
)
|
|
185
|
-
elif health.live_facts:
|
|
186
|
-
pct = 100.0 * health.reachability
|
|
187
|
-
if health.findable_by_meaning >= health.live_facts:
|
|
188
|
-
# "All" only when the counts actually agree. The threshold used to
|
|
189
|
-
# be reachability >= 0.99, which printed "All of them can be found
|
|
190
|
-
# by asking a question (5,199 indexed)" on a store of 5,205 — a
|
|
191
|
-
# claim of all, contradicted by the number beside it. This module
|
|
192
|
-
# exists to be believed; it cannot round in its own favour.
|
|
193
|
-
lines.append(
|
|
194
|
-
f"All {health.live_facts:,} of them can be found by asking a "
|
|
195
|
-
f"question."
|
|
196
|
-
)
|
|
197
|
-
elif health.reachability >= 0.99:
|
|
198
|
-
gap = health.live_facts - health.findable_by_meaning
|
|
199
|
-
lines.append(
|
|
200
|
-
f"{health.findable_by_meaning:,} of them can be found by asking "
|
|
201
|
-
f"a question. The other {gap:,} can only be found by matching "
|
|
202
|
-
f"words. That is a small enough share to be normal — a memory "
|
|
203
|
-
f"written moments ago, or one the model could not read."
|
|
204
|
-
)
|
|
205
|
-
else:
|
|
206
|
-
gap = health.live_facts - health.findable_by_meaning
|
|
207
|
-
lines.append(
|
|
208
|
-
f"{health.findable_by_meaning:,} of them ({pct:.0f}%) can be "
|
|
209
|
-
f"found by asking a question. The other {gap:,} can only be "
|
|
210
|
-
f"found by matching words, so a question phrased differently "
|
|
211
|
-
f"will miss them. This repairs itself as the service runs; if "
|
|
212
|
-
f"it does not, the embedding model is unavailable."
|
|
213
|
-
)
|
|
214
|
-
|
|
215
|
-
if health.withheld_summaries:
|
|
216
|
-
lines.append(
|
|
217
|
-
f"{health.withheld_summaries:,} machine-written summaries are kept "
|
|
218
|
-
f"out of your answers and shown on the dashboard instead. They were "
|
|
219
|
-
f"written by the summarizer, not by you, and they used to be "
|
|
220
|
-
f"returned as if they were your own notes."
|
|
221
|
-
)
|
|
222
|
-
|
|
223
|
-
if health.inconsistently_hidden:
|
|
224
|
-
lines.append(
|
|
225
|
-
f"{health.inconsistently_hidden:,} memories are hidden even though "
|
|
226
|
-
f"they are marked worth keeping. This is a fault and it is repaired "
|
|
227
|
-
f"automatically the next time the service starts."
|
|
228
|
-
)
|
|
229
|
-
|
|
230
|
-
if health.hidden_by_forgetting:
|
|
231
|
-
lines.append(
|
|
232
|
-
f"{health.hidden_by_forgetting:,} older memories are set aside by "
|
|
233
|
-
f"the forgetting curve. They are not deleted and a deep search "
|
|
234
|
-
f"still reaches them."
|
|
235
|
-
)
|
|
236
|
-
|
|
237
|
-
return lines
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
def _table_exists(conn: sqlite3.Connection, table: str) -> bool:
|
|
241
|
-
return conn.execute(
|
|
242
|
-
"SELECT 1 FROM sqlite_master WHERE type='table' AND name=?", (table,),
|
|
243
|
-
).fetchone() is not None
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
def _has_column(conn: sqlite3.Connection, table: str, column: str) -> bool:
|
|
247
|
-
return any(
|
|
248
|
-
row[1] == column for row in conn.execute(f"PRAGMA table_info({table})")
|
|
249
|
-
)
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
def _prefixed(clause: str, prefix: str) -> str:
|
|
253
|
-
"""Qualify a bare column reference for use in a joined query.
|
|
254
|
-
|
|
255
|
-
Word-bounded, so a future column named ``quarantined_at`` is not silently
|
|
256
|
-
rewritten to ``af.quarantined_at`` by a substring match. No such column
|
|
257
|
-
exists today; the point is that the failure would be a wrong count rather
|
|
258
|
-
than an error, and a wrong count in a health report is the one thing this
|
|
259
|
-
module must not produce.
|
|
260
|
-
"""
|
|
261
|
-
return re.sub(r"\bquarantined\b", f"{prefix}.quarantined", clause)
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
def _count(conn: sqlite3.Connection, sql: str) -> int:
|
|
265
|
-
row = conn.execute(sql).fetchone()
|
|
266
|
-
return int(row[0]) if row else 0
|
|
@@ -1,111 +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
|
-
"""What the running mode can do with a model, in words a user can act on.
|
|
6
|
-
|
|
7
|
-
WHY THIS EXISTS
|
|
8
|
-
|
|
9
|
-
Mode A runs with no language model at all. That is the point of it: nothing on
|
|
10
|
-
the store or recall path calls out to anything, and a summary is assembled
|
|
11
|
-
directly from the user's own notes rather than written.
|
|
12
|
-
|
|
13
|
-
The surfaces already reported *what* they did -- a summary came back labelled
|
|
14
|
-
"assembled directly from your own notes" -- but never *why*, and never what to do
|
|
15
|
-
about it. Someone looking at a plainer summary than they expected had no way to
|
|
16
|
-
learn that a written one needs a model and which modes have one. They would
|
|
17
|
-
reasonably conclude the feature was broken.
|
|
18
|
-
|
|
19
|
-
So this returns the mode, whether a model is available, and one sentence naming
|
|
20
|
-
the next step. Every model-backed surface returns the same block, so the
|
|
21
|
-
explanation is identical wherever it appears rather than reworded per pane.
|
|
22
|
-
|
|
23
|
-
WHAT IT IS NOT
|
|
24
|
-
|
|
25
|
-
It is not a capability gate. Nothing here decides whether a call is made; the
|
|
26
|
-
mode's configuration does that. This only describes the decision to the person
|
|
27
|
-
looking at the result.
|
|
28
|
-
"""
|
|
29
|
-
|
|
30
|
-
from __future__ import annotations
|
|
31
|
-
|
|
32
|
-
import logging
|
|
33
|
-
from typing import Any
|
|
34
|
-
|
|
35
|
-
logger = logging.getLogger(__name__)
|
|
36
|
-
|
|
37
|
-
#: Named so the message can say which modes to consider without hard-coding the
|
|
38
|
-
#: sentence at each call site.
|
|
39
|
-
_MODE_WITH_LOCAL_MODEL = "B"
|
|
40
|
-
_MODE_WITH_CLOUD_MODEL = "C"
|
|
41
|
-
|
|
42
|
-
_NO_MODEL_MESSAGE = (
|
|
43
|
-
"This mode runs entirely on your machine with no language model, so "
|
|
44
|
-
"summaries are assembled from your own notes rather than written. For "
|
|
45
|
-
f"written summaries and the other model-backed features, switch to Mode "
|
|
46
|
-
f"{_MODE_WITH_LOCAL_MODEL} (a local model) or Mode {_MODE_WITH_CLOUD_MODEL} "
|
|
47
|
-
"(your own cloud model) in Settings and connect one."
|
|
48
|
-
)
|
|
49
|
-
|
|
50
|
-
_MODEL_CONFIGURED_BUT_ABSENT = (
|
|
51
|
-
"This mode uses a language model, but none is reachable right now, so "
|
|
52
|
-
"results fall back to being assembled from your own notes. Check the model "
|
|
53
|
-
"settings, and that the local model server is running if you are using one."
|
|
54
|
-
)
|
|
55
|
-
|
|
56
|
-
_CLOUD_MODEL_HAS_NO_KEY = (
|
|
57
|
-
"This mode uses a hosted language model and no key has been set for it, so "
|
|
58
|
-
"summaries are assembled from your own notes rather than written. Run "
|
|
59
|
-
"`slm provider set` and supply your key, or switch to Mode "
|
|
60
|
-
f"{_MODE_WITH_LOCAL_MODEL} to use a model on this machine."
|
|
61
|
-
)
|
|
62
|
-
|
|
63
|
-
#: Providers that run on the machine and need no credential. Anything else is
|
|
64
|
-
#: a hosted service, and naming one without a key is not a configured model --
|
|
65
|
-
#: which is what this used to report, so the surfaces said everything was fine
|
|
66
|
-
#: while every model-backed feature was about to fall back.
|
|
67
|
-
_LOCAL_PROVIDERS = frozenset({
|
|
68
|
-
"ollama", "lmstudio", "llamacpp", "llama.cpp", "local", "vllm", "none", "",
|
|
69
|
-
})
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
def llm_capability(config: Any, *, llm_reachable: bool | None = None) -> dict:
|
|
73
|
-
"""Describe this mode's model support for a user-facing surface.
|
|
74
|
-
|
|
75
|
-
``llm_reachable`` lets a caller that already knows the answer pass it in --
|
|
76
|
-
a summary route has just tried and knows whether it worked, and asking again
|
|
77
|
-
would mean a second connection attempt to say something it already knows.
|
|
78
|
-
Left as None, availability is taken from configuration alone.
|
|
79
|
-
"""
|
|
80
|
-
mode = ""
|
|
81
|
-
provider = ""
|
|
82
|
-
api_key = ""
|
|
83
|
-
try:
|
|
84
|
-
mode = str(getattr(getattr(config, "mode", None), "value", "") or "").upper()
|
|
85
|
-
llm = getattr(config, "llm", None)
|
|
86
|
-
provider = str(getattr(llm, "provider", "") or "")
|
|
87
|
-
api_key = str(getattr(llm, "api_key", "") or "").strip()
|
|
88
|
-
except Exception as exc: # noqa: BLE001 -- a description must not raise
|
|
89
|
-
logger.debug("mode capability: cannot read config: %s", exc)
|
|
90
|
-
|
|
91
|
-
mode_has_model = mode in (_MODE_WITH_LOCAL_MODEL, _MODE_WITH_CLOUD_MODEL)
|
|
92
|
-
needs_a_key = provider.lower() not in _LOCAL_PROVIDERS
|
|
93
|
-
missing_key = mode_has_model and bool(provider) and needs_a_key and not api_key
|
|
94
|
-
configured = bool(provider) and mode_has_model and not missing_key
|
|
95
|
-
available = configured if llm_reachable is None else bool(llm_reachable)
|
|
96
|
-
|
|
97
|
-
if not mode_has_model:
|
|
98
|
-
message = _NO_MODEL_MESSAGE
|
|
99
|
-
elif missing_key and llm_reachable is not True:
|
|
100
|
-
message = _CLOUD_MODEL_HAS_NO_KEY
|
|
101
|
-
elif not available:
|
|
102
|
-
message = _MODEL_CONFIGURED_BUT_ABSENT
|
|
103
|
-
else:
|
|
104
|
-
message = ""
|
|
105
|
-
|
|
106
|
-
return {
|
|
107
|
-
"mode": mode or "?",
|
|
108
|
-
"llm_available": bool(available),
|
|
109
|
-
"llm_provider": provider,
|
|
110
|
-
"message": message,
|
|
111
|
-
}
|
|
@@ -1,168 +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
|
-
"""SuperLocalMemory V4 mode capability descriptors.
|
|
6
|
-
|
|
7
|
-
Three operating modes with clear capability boundaries.
|
|
8
|
-
Mode A: deterministic local extraction and local inference.
|
|
9
|
-
Mode B: local LLM enrichment and local inference.
|
|
10
|
-
Mode C: configured provider-assisted inference.
|
|
11
|
-
|
|
12
|
-
An operating mode does not determine EU AI Act compliance. That assessment
|
|
13
|
-
depends on the deployment, intended use, operator role, and applicable duties.
|
|
14
|
-
|
|
15
|
-
Part of Qualixar | Author: Varun Pratap Bhardwaj
|
|
16
|
-
"""
|
|
17
|
-
|
|
18
|
-
from __future__ import annotations
|
|
19
|
-
|
|
20
|
-
from dataclasses import dataclass
|
|
21
|
-
|
|
22
|
-
from superlocalmemory.storage.models import Mode
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
@dataclass(frozen=True)
|
|
26
|
-
class ModeCapabilities:
|
|
27
|
-
"""What each mode can and cannot do."""
|
|
28
|
-
|
|
29
|
-
mode: Mode
|
|
30
|
-
|
|
31
|
-
# Encoding capabilities
|
|
32
|
-
llm_fact_extraction: bool # Can use LLM for fact extraction?
|
|
33
|
-
llm_entity_resolution: bool # Can use LLM for entity disambiguation?
|
|
34
|
-
llm_type_classification: bool # Can use LLM for fact type routing?
|
|
35
|
-
llm_importance_scoring: bool # Can use LLM for importance assessment?
|
|
36
|
-
|
|
37
|
-
# Retrieval capabilities
|
|
38
|
-
agentic_retrieval: bool # Can do multi-round LLM-guided retrieval?
|
|
39
|
-
llm_answer_generation: bool # Can LLM generate answers from context?
|
|
40
|
-
cloud_reranker: bool # Can use Cohere / cloud reranker?
|
|
41
|
-
|
|
42
|
-
# Embedding capabilities
|
|
43
|
-
cloud_embeddings: bool # Can use cloud embedding API?
|
|
44
|
-
embedding_dimension: int # Expected embedding dimension
|
|
45
|
-
|
|
46
|
-
# Compliance
|
|
47
|
-
eu_ai_act_compliant: bool | None # None: requires deployment assessment
|
|
48
|
-
data_stays_local: bool # Does ALL data stay on device?
|
|
49
|
-
|
|
50
|
-
# Description
|
|
51
|
-
description: str = ""
|
|
52
|
-
|
|
53
|
-
@property
|
|
54
|
-
def data_locality_label(self) -> str:
|
|
55
|
-
"""UI/API locality label derived from the mode record (single source).
|
|
56
|
-
|
|
57
|
-
Never invent a parallel mode→label map in the dashboard — consume this.
|
|
58
|
-
"""
|
|
59
|
-
return "local-only" if self.data_stays_local else "provider-assisted"
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
# ---------------------------------------------------------------------------
|
|
63
|
-
# Mode Definitions
|
|
64
|
-
# ---------------------------------------------------------------------------
|
|
65
|
-
|
|
66
|
-
MODE_A = ModeCapabilities(
|
|
67
|
-
mode=Mode.A,
|
|
68
|
-
llm_fact_extraction=False,
|
|
69
|
-
llm_entity_resolution=False,
|
|
70
|
-
llm_type_classification=False,
|
|
71
|
-
llm_importance_scoring=False,
|
|
72
|
-
agentic_retrieval=False,
|
|
73
|
-
llm_answer_generation=False,
|
|
74
|
-
cloud_reranker=False,
|
|
75
|
-
cloud_embeddings=False,
|
|
76
|
-
embedding_dimension=768,
|
|
77
|
-
eu_ai_act_compliant=None,
|
|
78
|
-
data_stays_local=True,
|
|
79
|
-
description=(
|
|
80
|
-
"Local Guardian — Zero LLM, zero cloud. "
|
|
81
|
-
"Uses nomic-embed-text-v1.5 encoder (768d, 8K context) for embeddings. "
|
|
82
|
-
"Deterministic rules for extraction and a local PyTorch cross-encoder. "
|
|
83
|
-
"EU AI Act classification requires deployment assessment."
|
|
84
|
-
),
|
|
85
|
-
)
|
|
86
|
-
|
|
87
|
-
MODE_B = ModeCapabilities(
|
|
88
|
-
mode=Mode.B,
|
|
89
|
-
llm_fact_extraction=True,
|
|
90
|
-
llm_entity_resolution=True,
|
|
91
|
-
llm_type_classification=True,
|
|
92
|
-
llm_importance_scoring=True,
|
|
93
|
-
agentic_retrieval=False,
|
|
94
|
-
llm_answer_generation=True,
|
|
95
|
-
cloud_reranker=False,
|
|
96
|
-
cloud_embeddings=False,
|
|
97
|
-
embedding_dimension=768,
|
|
98
|
-
eu_ai_act_compliant=None,
|
|
99
|
-
data_stays_local=True,
|
|
100
|
-
description=(
|
|
101
|
-
"Smart Local — Local Ollama LLM (Phi-3, Llama 3.2). "
|
|
102
|
-
"LLM-quality extraction and classification, fully local. "
|
|
103
|
-
"Local PyTorch cross-encoder reranking. No configured cloud inference. "
|
|
104
|
-
"EU AI Act classification requires deployment assessment."
|
|
105
|
-
),
|
|
106
|
-
)
|
|
107
|
-
|
|
108
|
-
MODE_C = ModeCapabilities(
|
|
109
|
-
mode=Mode.C,
|
|
110
|
-
llm_fact_extraction=True,
|
|
111
|
-
llm_entity_resolution=True,
|
|
112
|
-
llm_type_classification=True,
|
|
113
|
-
llm_importance_scoring=True,
|
|
114
|
-
agentic_retrieval=True,
|
|
115
|
-
llm_answer_generation=True,
|
|
116
|
-
cloud_reranker=True,
|
|
117
|
-
cloud_embeddings=True,
|
|
118
|
-
embedding_dimension=3072,
|
|
119
|
-
eu_ai_act_compliant=None,
|
|
120
|
-
data_stays_local=False,
|
|
121
|
-
description=(
|
|
122
|
-
"FULL POWER — UNRESTRICTED. Best embeddings (text-embedding-3-large, 3072-dim). "
|
|
123
|
-
"Best configured cloud LLMs (e.g. GPT-5, Claude Opus 4). Agentic multi-round retrieval. "
|
|
124
|
-
"Cohere reranker option. Cloud processing requires deployment-specific "
|
|
125
|
-
"privacy, contractual, and EU AI Act assessment."
|
|
126
|
-
),
|
|
127
|
-
)
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
def get_capabilities(mode: Mode) -> ModeCapabilities:
|
|
131
|
-
"""Get capability matrix for a mode."""
|
|
132
|
-
_map = {Mode.A: MODE_A, Mode.B: MODE_B, Mode.C: MODE_C}
|
|
133
|
-
return _map[mode]
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
def dashboard_mode_fields(mode: Mode | str) -> dict[str, object]:
|
|
137
|
-
"""Fields the dashboard API must surface from the mode record.
|
|
138
|
-
|
|
139
|
-
Keeps UI locality claims bound to :class:`ModeCapabilities` so Mode C
|
|
140
|
-
cannot be labeled local-only by a divergent hardcode.
|
|
141
|
-
"""
|
|
142
|
-
if isinstance(mode, str):
|
|
143
|
-
mode = Mode(mode.strip().lower())
|
|
144
|
-
caps = get_capabilities(mode)
|
|
145
|
-
return {
|
|
146
|
-
"data_locality_label": caps.data_locality_label,
|
|
147
|
-
"data_stays_local": caps.data_stays_local,
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
def validate_mode_config(mode: Mode, *, has_ollama: bool = False, has_cloud_llm: bool = False) -> list[str]:
|
|
152
|
-
"""Validate that required services are available for the chosen mode.
|
|
153
|
-
|
|
154
|
-
Returns list of warnings/errors. Empty list = all good.
|
|
155
|
-
"""
|
|
156
|
-
issues: list[str] = []
|
|
157
|
-
caps = get_capabilities(mode)
|
|
158
|
-
|
|
159
|
-
if caps.llm_fact_extraction and mode == Mode.B and not has_ollama:
|
|
160
|
-
issues.append("Mode B requires Ollama but it is not available. Falling back to Mode A extraction.")
|
|
161
|
-
|
|
162
|
-
if caps.cloud_embeddings and not has_cloud_llm:
|
|
163
|
-
issues.append("Mode C cloud embeddings configured but no API endpoint provided.")
|
|
164
|
-
|
|
165
|
-
if caps.agentic_retrieval and not has_cloud_llm:
|
|
166
|
-
issues.append("Mode C agentic retrieval requires cloud LLM but none configured.")
|
|
167
|
-
|
|
168
|
-
return issues
|