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,282 +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
|
-
"""Modern Continuous Hopfield Network (Ramsauer et al., 2020).
|
|
6
|
-
|
|
7
|
-
Implementation of the continuous Hopfield energy and update rules
|
|
8
|
-
from "Hopfield Networks is All You Need" (arXiv 2008.02217).
|
|
9
|
-
|
|
10
|
-
This is the mathematical foundation for the 6th retrieval channel.
|
|
11
|
-
The Hopfield update is equivalent to single-head self-attention:
|
|
12
|
-
xi_new = X' @ softmax(beta * X @ xi)
|
|
13
|
-
|
|
14
|
-
Key properties:
|
|
15
|
-
- Energy function: E(xi) = -logsumexp(beta * X @ xi) + beta/2 * ||xi||^2
|
|
16
|
-
- Update rule: xi_new = X' @ softmax(beta * X @ xi)
|
|
17
|
-
- Beta: 1/sqrt(d) (inverse temperature)
|
|
18
|
-
- Storage capacity: O(exp(d/2)) -- exponential in dimension
|
|
19
|
-
- Convergence: 1 step for well-separated patterns
|
|
20
|
-
|
|
21
|
-
Part of Qualixar | Author: Varun Pratap Bhardwaj
|
|
22
|
-
License: AGPL-3.0-or-later
|
|
23
|
-
"""
|
|
24
|
-
|
|
25
|
-
from __future__ import annotations
|
|
26
|
-
|
|
27
|
-
import logging
|
|
28
|
-
import math
|
|
29
|
-
from dataclasses import dataclass
|
|
30
|
-
from typing import Any
|
|
31
|
-
|
|
32
|
-
import numpy as np
|
|
33
|
-
|
|
34
|
-
logger = logging.getLogger(__name__)
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
# ---------------------------------------------------------------------------
|
|
38
|
-
# Configuration (local definition; Delivery Lead moves to core/config.py)
|
|
39
|
-
# ---------------------------------------------------------------------------
|
|
40
|
-
|
|
41
|
-
@dataclass(frozen=True)
|
|
42
|
-
class HopfieldConfig:
|
|
43
|
-
"""Modern Continuous Hopfield Network configuration.
|
|
44
|
-
|
|
45
|
-
Based on Ramsauer et al. (2020): "Hopfield Networks is All You Need"
|
|
46
|
-
Energy: E(xi) = -log(sum_i exp(B * xi' * x_i)) + B/2 * ||xi||^2
|
|
47
|
-
Update: xi_new = X' @ softmax(B * X @ xi)
|
|
48
|
-
Beta: B = 1/sqrt(d) where d = dimension
|
|
49
|
-
|
|
50
|
-
Storage capacity: O(e^{d/2}) -- exponential in dimension.
|
|
51
|
-
For d=768: theoretical capacity >> millions of patterns.
|
|
52
|
-
"""
|
|
53
|
-
|
|
54
|
-
enabled: bool = True
|
|
55
|
-
dimension: int = 768
|
|
56
|
-
max_iterations: int = 1
|
|
57
|
-
convergence_epsilon: float = 1e-6
|
|
58
|
-
prefilter_threshold: int = 10_000
|
|
59
|
-
# MUST match HopfieldConfig.prefilter_candidates in core/config.py, where the
|
|
60
|
-
# reasoning for the value is written. This stage decides final membership, so
|
|
61
|
-
# this number is a hard limit on which memories can be returned at all.
|
|
62
|
-
prefilter_candidates: int = 500
|
|
63
|
-
skip_threshold: int = 100_000
|
|
64
|
-
cache_ttl_seconds: float = 60.0
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
# ---------------------------------------------------------------------------
|
|
68
|
-
# Hopfield State (immutable result)
|
|
69
|
-
# ---------------------------------------------------------------------------
|
|
70
|
-
|
|
71
|
-
@dataclass(frozen=True)
|
|
72
|
-
class HopfieldState:
|
|
73
|
-
"""Result of a single Hopfield retrieval step."""
|
|
74
|
-
|
|
75
|
-
retrieved_pattern: np.ndarray # d-dimensional completed pattern
|
|
76
|
-
attention_weights: np.ndarray # n-dimensional softmax weights
|
|
77
|
-
energy_before: float # E(xi) before update
|
|
78
|
-
energy_after: float # E(xi_new) after update
|
|
79
|
-
converged: bool # energy_after <= energy_before
|
|
80
|
-
iterations: int # Number of update steps taken
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
# ---------------------------------------------------------------------------
|
|
84
|
-
# Modern Continuous Hopfield Network
|
|
85
|
-
# ---------------------------------------------------------------------------
|
|
86
|
-
|
|
87
|
-
class ModernHopfieldNetwork:
|
|
88
|
-
"""Modern Continuous Hopfield Network (Ramsauer et al., 2020).
|
|
89
|
-
|
|
90
|
-
Provides energy computation, single-step update, full retrieval
|
|
91
|
-
with convergence detection, and attention scoring.
|
|
92
|
-
|
|
93
|
-
Usage::
|
|
94
|
-
|
|
95
|
-
net = ModernHopfieldNetwork(HopfieldConfig(dimension=768))
|
|
96
|
-
state = net.retrieve(query_vec, memory_matrix)
|
|
97
|
-
scores = net.attention_scores(query_vec, memory_matrix)
|
|
98
|
-
"""
|
|
99
|
-
|
|
100
|
-
def __init__(self, config: HopfieldConfig) -> None:
|
|
101
|
-
"""Initialize with config. Computes beta = 1/sqrt(d).
|
|
102
|
-
|
|
103
|
-
HR-01: Beta MUST be 1/sqrt(d), no other values.
|
|
104
|
-
"""
|
|
105
|
-
self._config = config
|
|
106
|
-
self._beta: float = 1.0 / math.sqrt(config.dimension) # HR-01
|
|
107
|
-
|
|
108
|
-
# -- Public API ---------------------------------------------------------
|
|
109
|
-
|
|
110
|
-
def energy(self, xi: np.ndarray, memory_matrix: np.ndarray) -> float:
|
|
111
|
-
"""Compute Modern Hopfield energy function.
|
|
112
|
-
|
|
113
|
-
E(xi) = -logsumexp(beta * X @ xi) + beta/2 * ||xi||^2
|
|
114
|
-
|
|
115
|
-
HR-04: Uses numerically stable logsumexp (shift by max).
|
|
116
|
-
|
|
117
|
-
Args:
|
|
118
|
-
xi: Query vector, shape (d,).
|
|
119
|
-
memory_matrix: Stored patterns, shape (n, d). L2-normalized rows.
|
|
120
|
-
|
|
121
|
-
Returns:
|
|
122
|
-
Energy value (float). Lower = better match to stored patterns.
|
|
123
|
-
Returns 0.0 for empty memory matrix.
|
|
124
|
-
"""
|
|
125
|
-
# Guard: empty matrix
|
|
126
|
-
if memory_matrix.shape[0] == 0:
|
|
127
|
-
return 0.0
|
|
128
|
-
|
|
129
|
-
xi_64 = xi.astype(np.float64) # HR-11: float64 for energy
|
|
130
|
-
mem_64 = memory_matrix.astype(np.float64)
|
|
131
|
-
|
|
132
|
-
# Compute logits: beta * X @ xi, shape (n,)
|
|
133
|
-
logits = self._beta * (mem_64 @ xi_64)
|
|
134
|
-
|
|
135
|
-
# HR-04: Numerically stable logsumexp
|
|
136
|
-
max_logit = float(np.max(logits))
|
|
137
|
-
lse = max_logit + float(np.log(np.sum(np.exp(logits - max_logit))))
|
|
138
|
-
|
|
139
|
-
# Energy: -lse + beta/2 * ||xi||^2
|
|
140
|
-
energy = -lse + (self._beta / 2.0) * float(np.dot(xi_64, xi_64))
|
|
141
|
-
|
|
142
|
-
# Guard against NaN (degenerate all-zero matrix)
|
|
143
|
-
if math.isnan(energy):
|
|
144
|
-
return 0.0
|
|
145
|
-
|
|
146
|
-
return energy
|
|
147
|
-
|
|
148
|
-
def update(self, xi: np.ndarray, memory_matrix: np.ndarray) -> np.ndarray:
|
|
149
|
-
"""Single Hopfield update step.
|
|
150
|
-
|
|
151
|
-
xi_new = X' @ softmax(beta * X @ xi)
|
|
152
|
-
|
|
153
|
-
HR-02: Uses numerically stable softmax (shift by max).
|
|
154
|
-
|
|
155
|
-
Args:
|
|
156
|
-
xi: Query vector, shape (d,).
|
|
157
|
-
memory_matrix: Stored patterns, shape (n, d). L2-normalized rows.
|
|
158
|
-
|
|
159
|
-
Returns:
|
|
160
|
-
Updated vector xi_new, shape (d,). Returns zeros if matrix is empty.
|
|
161
|
-
"""
|
|
162
|
-
d = self._config.dimension
|
|
163
|
-
|
|
164
|
-
# Guard: empty matrix
|
|
165
|
-
if memory_matrix.shape[0] == 0:
|
|
166
|
-
return np.zeros(d, dtype=np.float32)
|
|
167
|
-
|
|
168
|
-
# Compute logits: beta * X @ xi, shape (n,)
|
|
169
|
-
logits = self._beta * (memory_matrix @ xi)
|
|
170
|
-
|
|
171
|
-
# HR-02: Numerically stable softmax
|
|
172
|
-
attention = self._softmax(logits)
|
|
173
|
-
|
|
174
|
-
# Pattern completion: X' @ attention, shape (d,)
|
|
175
|
-
xi_new = memory_matrix.T @ attention
|
|
176
|
-
|
|
177
|
-
return xi_new.astype(np.float32)
|
|
178
|
-
|
|
179
|
-
def retrieve(
|
|
180
|
-
self,
|
|
181
|
-
query: np.ndarray,
|
|
182
|
-
memory_matrix: np.ndarray,
|
|
183
|
-
max_iterations: int = 0,
|
|
184
|
-
) -> HopfieldState:
|
|
185
|
-
"""Full retrieval with convergence detection and energy tracking.
|
|
186
|
-
|
|
187
|
-
Iteratively applies the Hopfield update rule until energy converges
|
|
188
|
-
or max_iterations is reached.
|
|
189
|
-
|
|
190
|
-
Args:
|
|
191
|
-
query: Query vector, shape (d,).
|
|
192
|
-
memory_matrix: Stored patterns, shape (n, d).
|
|
193
|
-
max_iterations: Override for config.max_iterations. 0 = use config.
|
|
194
|
-
|
|
195
|
-
Returns:
|
|
196
|
-
HopfieldState with retrieved pattern, attention, energy, convergence info.
|
|
197
|
-
"""
|
|
198
|
-
d = self._config.dimension
|
|
199
|
-
|
|
200
|
-
# Guard: empty matrix
|
|
201
|
-
if memory_matrix.shape[0] == 0:
|
|
202
|
-
return HopfieldState(
|
|
203
|
-
retrieved_pattern=np.zeros(d, dtype=np.float32),
|
|
204
|
-
attention_weights=np.array([], dtype=np.float32),
|
|
205
|
-
energy_before=0.0,
|
|
206
|
-
energy_after=0.0,
|
|
207
|
-
converged=False,
|
|
208
|
-
iterations=0,
|
|
209
|
-
)
|
|
210
|
-
|
|
211
|
-
iters = max_iterations if max_iterations > 0 else self._config.max_iterations
|
|
212
|
-
|
|
213
|
-
# HR-11: float64 for energy computation precision
|
|
214
|
-
xi = query.copy().astype(np.float64)
|
|
215
|
-
mem_f32 = memory_matrix.astype(np.float32) # HR-11: float32 for memory
|
|
216
|
-
|
|
217
|
-
energy_initial = self.energy(xi.astype(np.float32), mem_f32)
|
|
218
|
-
e_before = energy_initial
|
|
219
|
-
xi_new = xi.copy()
|
|
220
|
-
|
|
221
|
-
iteration = 0
|
|
222
|
-
for iteration in range(iters):
|
|
223
|
-
xi_new = self.update(xi.astype(np.float32), mem_f32).astype(np.float64)
|
|
224
|
-
e_after = self.energy(xi_new.astype(np.float32), mem_f32)
|
|
225
|
-
|
|
226
|
-
# Convergence check
|
|
227
|
-
if abs(e_after - e_before) < self._config.convergence_epsilon:
|
|
228
|
-
break
|
|
229
|
-
|
|
230
|
-
xi = xi_new
|
|
231
|
-
e_before = e_after
|
|
232
|
-
|
|
233
|
-
# Final energy
|
|
234
|
-
e_final = self.energy(xi_new.astype(np.float32), mem_f32)
|
|
235
|
-
|
|
236
|
-
# Final attention weights
|
|
237
|
-
attention = self._softmax(
|
|
238
|
-
self._beta * (mem_f32 @ xi_new.astype(np.float32)),
|
|
239
|
-
)
|
|
240
|
-
|
|
241
|
-
return HopfieldState(
|
|
242
|
-
retrieved_pattern=xi_new.astype(np.float32),
|
|
243
|
-
attention_weights=attention.astype(np.float32),
|
|
244
|
-
energy_before=energy_initial,
|
|
245
|
-
energy_after=e_final,
|
|
246
|
-
converged=(e_final <= energy_initial + 1e-9),
|
|
247
|
-
iterations=iteration + 1,
|
|
248
|
-
)
|
|
249
|
-
|
|
250
|
-
def attention_scores(
|
|
251
|
-
self,
|
|
252
|
-
query: np.ndarray,
|
|
253
|
-
memory_matrix: np.ndarray,
|
|
254
|
-
) -> np.ndarray:
|
|
255
|
-
"""Compute Hopfield attention weights WITHOUT full update.
|
|
256
|
-
|
|
257
|
-
Used for scoring/ranking without pattern completion.
|
|
258
|
-
|
|
259
|
-
Args:
|
|
260
|
-
query: Query vector, shape (d,).
|
|
261
|
-
memory_matrix: Stored patterns, shape (n, d).
|
|
262
|
-
|
|
263
|
-
Returns:
|
|
264
|
-
Attention weights, shape (n,), summing to 1.0.
|
|
265
|
-
"""
|
|
266
|
-
if memory_matrix.shape[0] == 0:
|
|
267
|
-
return np.array([], dtype=np.float32)
|
|
268
|
-
|
|
269
|
-
logits = self._beta * (memory_matrix @ query)
|
|
270
|
-
return self._softmax(logits)
|
|
271
|
-
|
|
272
|
-
# -- Private helpers ----------------------------------------------------
|
|
273
|
-
|
|
274
|
-
def _softmax(self, logits: np.ndarray) -> np.ndarray:
|
|
275
|
-
"""Numerically stable softmax.
|
|
276
|
-
|
|
277
|
-
HR-02: Shift by max to prevent overflow.
|
|
278
|
-
softmax(x) = exp(x - max(x)) / sum(exp(x - max(x)))
|
|
279
|
-
"""
|
|
280
|
-
shifted = logits - np.max(logits) # HR-02
|
|
281
|
-
exp_vals = np.exp(shifted)
|
|
282
|
-
return exp_vals / np.sum(exp_vals)
|
|
@@ -1,411 +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
|
-
"""Riemannian Langevin dynamics with persistence for memory lifecycle.
|
|
6
|
-
|
|
7
|
-
Evolves memory positions via a discretised Langevin SDE driven by an
|
|
8
|
-
access-aware potential function. Frequently accessed memories are
|
|
9
|
-
confined near the origin (ACTIVE, high retrieval weight) by a strong
|
|
10
|
-
potential, while neglected memories diffuse toward the boundary
|
|
11
|
-
(ARCHIVED, weight approaches 0) as their confinement weakens.
|
|
12
|
-
|
|
13
|
-
Core SDE (Girolami & Calderhead 2011):
|
|
14
|
-
|
|
15
|
-
xi_{t+1} = xi_t - g^{-1}(xi_t) * grad U(xi_t) * dt
|
|
16
|
-
+ sqrt(2 * T * dt) * g^{-1/2}(xi_t) * eta
|
|
17
|
-
|
|
18
|
-
Potential function:
|
|
19
|
-
|
|
20
|
-
U(xi) = alpha * ||xi||^2
|
|
21
|
-
- beta * log(access_count + 1)
|
|
22
|
-
+ gamma * age_days
|
|
23
|
-
- delta * importance
|
|
24
|
-
|
|
25
|
-
- Accessed memories: beta term lowers potential -> drift to origin
|
|
26
|
-
- Old / unused: gamma term raises potential -> drift to boundary
|
|
27
|
-
- Important memories: delta term lowers potential -> retain near origin
|
|
28
|
-
|
|
29
|
-
V1 bugs fixed in v3.5:
|
|
30
|
-
1. Positions were computed per-recall then DISCARDED. Now ``step()``
|
|
31
|
-
and ``batch_step()`` return new positions for the caller to persist.
|
|
32
|
-
2. Weight range was [0.7, 1.0] --- too narrow to change rankings.
|
|
33
|
-
Now [0.0, 1.0] so archived memories can be effectively suppressed.
|
|
34
|
-
|
|
35
|
-
References:
|
|
36
|
-
Girolami M & Calderhead B (2011). Riemann manifold Langevin and
|
|
37
|
-
Hamiltonian Monte Carlo methods. JRSS-B, 73(2), 123--214.
|
|
38
|
-
Roberts G O & Tweedie R L (1996). Exponential convergence of Langevin
|
|
39
|
-
distributions. Bernoulli, 2(4), 341--363.
|
|
40
|
-
Xifara T, Sherlock C, Livingstone S, Byrne S & Girolami M (2014).
|
|
41
|
-
Langevin diffusions and the MALA algorithm. Statistics &
|
|
42
|
-
Probability Letters, 91, 59--67.
|
|
43
|
-
|
|
44
|
-
Part of Qualixar | Author: Varun Pratap Bhardwaj
|
|
45
|
-
License: AGPL-3.0-or-later
|
|
46
|
-
"""
|
|
47
|
-
|
|
48
|
-
from __future__ import annotations
|
|
49
|
-
|
|
50
|
-
import math
|
|
51
|
-
from typing import Any
|
|
52
|
-
|
|
53
|
-
import numpy as np
|
|
54
|
-
|
|
55
|
-
from superlocalmemory.storage.models import MemoryLifecycle
|
|
56
|
-
|
|
57
|
-
# ---------------------------------------------------------------------------
|
|
58
|
-
# Lifecycle zone boundaries (radius thresholds on the unit ball)
|
|
59
|
-
# ---------------------------------------------------------------------------
|
|
60
|
-
|
|
61
|
-
_RADIUS_ACTIVE: float = 0.3 # [0, 0.3) -> ACTIVE
|
|
62
|
-
_RADIUS_WARM: float = 0.55 # [0.3, 0.55) -> WARM
|
|
63
|
-
_RADIUS_COLD: float = 0.8 # [0.55, 0.8) -> COLD
|
|
64
|
-
# [0.8, 1.0) -> ARCHIVED
|
|
65
|
-
|
|
66
|
-
# Potential coefficients (defaults)
|
|
67
|
-
# Alpha must be > 0.5*T*(d-2)/lam_inv ≈ 1.8 at T=0.3 for confinement
|
|
68
|
-
# to counter the Riemannian curvature correction near the origin.
|
|
69
|
-
_ALPHA: float = 3.0 # Base confinement (strong enough to counter correction)
|
|
70
|
-
_BETA: float = 0.8 # Access STRENGTHENS confinement (keeps active facts near origin)
|
|
71
|
-
_GAMMA: float = 0.005 # Age WEAKENS confinement (old facts drift to boundary)
|
|
72
|
-
_DELTA: float = 0.5 # Importance STRENGTHENS confinement
|
|
73
|
-
|
|
74
|
-
# Safety
|
|
75
|
-
_MAX_NORM: float = 0.99 # Clamp radius < 1 (open ball)
|
|
76
|
-
_EPS: float = 1e-8
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
# ---------------------------------------------------------------------------
|
|
80
|
-
# Public API
|
|
81
|
-
# ---------------------------------------------------------------------------
|
|
82
|
-
|
|
83
|
-
class LangevinDynamics:
|
|
84
|
-
"""Riemannian Langevin dynamics with persistence for memory lifecycle.
|
|
85
|
-
|
|
86
|
-
Positions live on the open unit ball B^d. The potential function
|
|
87
|
-
encodes access frequency, age, and importance as competing forces.
|
|
88
|
-
The lifecycle state (ACTIVE / WARM / COLD / ARCHIVED) is determined
|
|
89
|
-
purely by radial position.
|
|
90
|
-
|
|
91
|
-
Attributes:
|
|
92
|
-
dt: Time-step size for Euler-Maruyama integration.
|
|
93
|
-
temperature: Boltzmann temperature controlling diffusion spread.
|
|
94
|
-
weight_range: (min_weight, max_weight) for lifecycle weighting.
|
|
95
|
-
dim: Dimensionality of the position space.
|
|
96
|
-
"""
|
|
97
|
-
|
|
98
|
-
__slots__ = (
|
|
99
|
-
"dt", "temperature", "weight_range", "dim",
|
|
100
|
-
"_alpha", "_beta", "_gamma", "_delta",
|
|
101
|
-
)
|
|
102
|
-
|
|
103
|
-
def __init__(
|
|
104
|
-
self,
|
|
105
|
-
dt: float = 0.01,
|
|
106
|
-
temperature: float = 1.0,
|
|
107
|
-
weight_range: tuple[float, float] = (0.0, 1.0),
|
|
108
|
-
dim: int = 8,
|
|
109
|
-
) -> None:
|
|
110
|
-
if dt <= 0:
|
|
111
|
-
raise ValueError(f"dt must be positive, got {dt}")
|
|
112
|
-
if temperature <= 0:
|
|
113
|
-
raise ValueError(f"temperature must be positive, got {temperature}")
|
|
114
|
-
if weight_range[0] > weight_range[1]:
|
|
115
|
-
raise ValueError(
|
|
116
|
-
f"weight_range min > max: {weight_range[0]} > {weight_range[1]}"
|
|
117
|
-
)
|
|
118
|
-
|
|
119
|
-
self.dt = dt
|
|
120
|
-
self.temperature = temperature
|
|
121
|
-
self.weight_range = weight_range
|
|
122
|
-
self.dim = dim
|
|
123
|
-
|
|
124
|
-
# Potential coefficients
|
|
125
|
-
self._alpha = _ALPHA
|
|
126
|
-
self._beta = _BETA
|
|
127
|
-
self._gamma = _GAMMA
|
|
128
|
-
self._delta = _DELTA
|
|
129
|
-
|
|
130
|
-
# ------------------------------------------------------------------
|
|
131
|
-
# Single-fact step
|
|
132
|
-
# ------------------------------------------------------------------
|
|
133
|
-
|
|
134
|
-
def step(
|
|
135
|
-
self,
|
|
136
|
-
position: list[float],
|
|
137
|
-
access_count: int,
|
|
138
|
-
age_days: float,
|
|
139
|
-
importance: float,
|
|
140
|
-
seed: int | None = None,
|
|
141
|
-
) -> tuple[list[float], float]:
|
|
142
|
-
"""One Euler-Maruyama step of the Langevin SDE.
|
|
143
|
-
|
|
144
|
-
Computes the gradient of the potential at the current position,
|
|
145
|
-
applies drift + stochastic diffusion, and returns the new position
|
|
146
|
-
plus the resulting lifecycle weight.
|
|
147
|
-
|
|
148
|
-
The caller is responsible for PERSISTING the returned position
|
|
149
|
-
back to the database. This is the key V1 fix: positions must
|
|
150
|
-
evolve across recalls, not be recomputed from scratch each time.
|
|
151
|
-
|
|
152
|
-
Args:
|
|
153
|
-
position: Current position on the unit ball, length ``dim``.
|
|
154
|
-
access_count: Total number of times this fact has been accessed.
|
|
155
|
-
age_days: Days since the fact was first stored.
|
|
156
|
-
importance: Fact importance score in [0, 1].
|
|
157
|
-
seed: Optional RNG seed for reproducible diffusion.
|
|
158
|
-
|
|
159
|
-
Returns:
|
|
160
|
-
(new_position, lifecycle_weight) where new_position is a list
|
|
161
|
-
of floats inside the unit ball and lifecycle_weight is in
|
|
162
|
-
[weight_range[0], weight_range[1]].
|
|
163
|
-
"""
|
|
164
|
-
xi = np.asarray(position, dtype=np.float64)
|
|
165
|
-
if xi.shape[0] != self.dim:
|
|
166
|
-
# Graceful resize: pad or truncate
|
|
167
|
-
xi = _resize_position(xi, self.dim)
|
|
168
|
-
|
|
169
|
-
# --- Gradient of potential ---
|
|
170
|
-
grad = self._potential_gradient(xi, access_count, age_days, importance)
|
|
171
|
-
|
|
172
|
-
# --- Conformal factor on Poincare ball: lambda = 2 / (1 - ||x||^2) ---
|
|
173
|
-
norm_sq = float(np.dot(xi, xi))
|
|
174
|
-
norm_sq = min(norm_sq, _MAX_NORM ** 2)
|
|
175
|
-
lam = 2.0 / (1.0 - norm_sq + _EPS)
|
|
176
|
-
lam_inv = 1.0 / lam
|
|
177
|
-
|
|
178
|
-
# --- Drift: -lambda^{-2} * grad_U * dt (Eq. 5 term 1) ---
|
|
179
|
-
drift = -(lam_inv ** 2) * grad * self.dt
|
|
180
|
-
|
|
181
|
-
# --- V3.3.12: Ebbinghaus forgetting drift (Eq. 6 in Paper 3) ---
|
|
182
|
-
# λ(m) = 1/S(m) pushes toward boundary (forgetting) based on memory strength.
|
|
183
|
-
# S(m) is computed from access_count + importance. Higher S → less drift.
|
|
184
|
-
strength = max(0.5, 0.3 * math.log(1.0 + access_count) + 0.4 * importance)
|
|
185
|
-
forget_rate = 1.0 / strength # λ(m)
|
|
186
|
-
# F(ξ) = ξ/||ξ|| points outward (toward boundary = archived zone)
|
|
187
|
-
xi_norm = float(np.linalg.norm(xi))
|
|
188
|
-
if xi_norm > _EPS:
|
|
189
|
-
forget_direction = xi / xi_norm
|
|
190
|
-
else:
|
|
191
|
-
forget_direction = np.zeros(self.dim)
|
|
192
|
-
forgetting_drift = forget_rate * forget_direction * self.dt * 0.1 # Scaled down to prevent instability
|
|
193
|
-
|
|
194
|
-
# --- Curvature correction: 0.5 * T * (d-2) * lambda^{-1} * xi * dt (Eq. 5 term 3) ---
|
|
195
|
-
correction = 0.5 * self.temperature * (self.dim - 2) * lam_inv * xi * self.dt
|
|
196
|
-
|
|
197
|
-
# --- Diffusion: sqrt(2T * dt) * lambda^{-1} * noise (Eq. 5 term 2) ---
|
|
198
|
-
rng = np.random.default_rng(seed)
|
|
199
|
-
noise = rng.standard_normal(self.dim)
|
|
200
|
-
diffusion = math.sqrt(2.0 * self.temperature * self.dt) * lam_inv * noise
|
|
201
|
-
|
|
202
|
-
# --- Full Euler-Maruyama update with forgetting (Eq. 6, Girolami & Calderhead 2011) ---
|
|
203
|
-
new_xi = xi + drift + forgetting_drift + correction + diffusion
|
|
204
|
-
|
|
205
|
-
# --- Project back into the open ball ---
|
|
206
|
-
new_xi = _project_to_ball(new_xi)
|
|
207
|
-
|
|
208
|
-
weight = self.compute_lifecycle_weight(new_xi.tolist())
|
|
209
|
-
return new_xi.tolist(), weight
|
|
210
|
-
|
|
211
|
-
# ------------------------------------------------------------------
|
|
212
|
-
# Lifecycle weight from position
|
|
213
|
-
# ------------------------------------------------------------------
|
|
214
|
-
|
|
215
|
-
def compute_lifecycle_weight(self, position: list[float]) -> float:
|
|
216
|
-
"""Compute retrieval weight from radial position.
|
|
217
|
-
|
|
218
|
-
Weight decreases linearly from max to min as radius moves from
|
|
219
|
-
origin to boundary. This ensures archived memories (near boundary)
|
|
220
|
-
are strongly suppressed in retrieval rankings.
|
|
221
|
-
|
|
222
|
-
Args:
|
|
223
|
-
position: Current position, length ``dim``.
|
|
224
|
-
|
|
225
|
-
Returns:
|
|
226
|
-
Weight in [weight_range[0], weight_range[1]].
|
|
227
|
-
"""
|
|
228
|
-
xi = np.asarray(position, dtype=np.float64)
|
|
229
|
-
radius = float(np.linalg.norm(xi))
|
|
230
|
-
radius = min(radius, _MAX_NORM)
|
|
231
|
-
|
|
232
|
-
# Linear interpolation: radius 0 -> max weight, radius 1 -> min weight
|
|
233
|
-
lo, hi = self.weight_range
|
|
234
|
-
weight = hi - (hi - lo) * (radius / _MAX_NORM)
|
|
235
|
-
return max(lo, min(hi, weight))
|
|
236
|
-
|
|
237
|
-
# ------------------------------------------------------------------
|
|
238
|
-
# Lifecycle state classification
|
|
239
|
-
# ------------------------------------------------------------------
|
|
240
|
-
|
|
241
|
-
def get_lifecycle_state(self, weight: float) -> MemoryLifecycle:
|
|
242
|
-
"""Classify lifecycle state from weight.
|
|
243
|
-
|
|
244
|
-
Uses the weight (derived from radius) rather than raw radius,
|
|
245
|
-
so the caller doesn't need to know zone boundaries.
|
|
246
|
-
|
|
247
|
-
Args:
|
|
248
|
-
weight: Lifecycle weight in [0, 1].
|
|
249
|
-
|
|
250
|
-
Returns:
|
|
251
|
-
MemoryLifecycle enum value.
|
|
252
|
-
"""
|
|
253
|
-
# Map weight back to approximate radius for zone classification
|
|
254
|
-
lo, hi = self.weight_range
|
|
255
|
-
span = hi - lo
|
|
256
|
-
if span < _EPS:
|
|
257
|
-
return MemoryLifecycle.ACTIVE
|
|
258
|
-
|
|
259
|
-
# radius_approx: weight=hi -> radius=0, weight=lo -> radius=MAX_NORM
|
|
260
|
-
radius_approx = (hi - weight) / span * _MAX_NORM
|
|
261
|
-
|
|
262
|
-
if radius_approx < _RADIUS_ACTIVE:
|
|
263
|
-
return MemoryLifecycle.ACTIVE
|
|
264
|
-
if radius_approx < _RADIUS_WARM:
|
|
265
|
-
return MemoryLifecycle.WARM
|
|
266
|
-
if radius_approx < _RADIUS_COLD:
|
|
267
|
-
return MemoryLifecycle.COLD
|
|
268
|
-
return MemoryLifecycle.ARCHIVED
|
|
269
|
-
|
|
270
|
-
# ------------------------------------------------------------------
|
|
271
|
-
# Batch step (background maintenance)
|
|
272
|
-
# ------------------------------------------------------------------
|
|
273
|
-
|
|
274
|
-
def batch_step(
|
|
275
|
-
self,
|
|
276
|
-
facts: list[dict[str, Any]],
|
|
277
|
-
seed: int | None = None,
|
|
278
|
-
) -> list[dict[str, Any]]:
|
|
279
|
-
"""Batch Langevin step for background maintenance.
|
|
280
|
-
|
|
281
|
-
Evolves all fact positions in a single pass. Designed to be
|
|
282
|
-
called periodically (e.g. every N hours) to let the memory store
|
|
283
|
-
self-organise over time.
|
|
284
|
-
|
|
285
|
-
Each input dict must contain:
|
|
286
|
-
- ``fact_id``: str
|
|
287
|
-
- ``position``: list[float]
|
|
288
|
-
- ``access_count``: int
|
|
289
|
-
- ``age_days``: float
|
|
290
|
-
- ``importance``: float
|
|
291
|
-
|
|
292
|
-
Args:
|
|
293
|
-
facts: List of fact dicts with position and metadata.
|
|
294
|
-
seed: Optional base seed (incremented per fact for variety).
|
|
295
|
-
|
|
296
|
-
Returns:
|
|
297
|
-
List of dicts with ``fact_id``, ``position`` (updated),
|
|
298
|
-
``weight``, and ``lifecycle`` fields.
|
|
299
|
-
"""
|
|
300
|
-
results: list[dict[str, Any]] = []
|
|
301
|
-
base_seed = seed
|
|
302
|
-
|
|
303
|
-
for i, fact in enumerate(facts):
|
|
304
|
-
fact_seed = (base_seed + i) if base_seed is not None else None
|
|
305
|
-
|
|
306
|
-
new_pos, weight = self.step(
|
|
307
|
-
position=fact["position"],
|
|
308
|
-
access_count=fact["access_count"],
|
|
309
|
-
age_days=fact["age_days"],
|
|
310
|
-
importance=fact["importance"],
|
|
311
|
-
seed=fact_seed,
|
|
312
|
-
)
|
|
313
|
-
|
|
314
|
-
results.append({
|
|
315
|
-
"fact_id": fact["fact_id"],
|
|
316
|
-
"position": new_pos,
|
|
317
|
-
"weight": weight,
|
|
318
|
-
"lifecycle": self.get_lifecycle_state(weight).value,
|
|
319
|
-
})
|
|
320
|
-
|
|
321
|
-
return results
|
|
322
|
-
|
|
323
|
-
# ------------------------------------------------------------------
|
|
324
|
-
# Potential gradient (private)
|
|
325
|
-
# ------------------------------------------------------------------
|
|
326
|
-
|
|
327
|
-
def _potential_gradient(
|
|
328
|
-
self,
|
|
329
|
-
xi: np.ndarray,
|
|
330
|
-
access_count: int,
|
|
331
|
-
age_days: float,
|
|
332
|
-
importance: float,
|
|
333
|
-
) -> np.ndarray:
|
|
334
|
-
"""Metadata-modulated confinement gradient .
|
|
335
|
-
|
|
336
|
-
Potential:
|
|
337
|
-
U(xi) = effective_alpha * ||xi||^2
|
|
338
|
-
|
|
339
|
-
Where effective_alpha is modulated by metadata:
|
|
340
|
-
effective_alpha = alpha
|
|
341
|
-
+ beta * log(access+1)/10 (frequent access → stronger confinement → ACTIVE)
|
|
342
|
-
- gamma * min(age, 365)/365 (aging → weaker confinement → drifts to ARCHIVED)
|
|
343
|
-
+ delta * importance (important → stronger confinement → stays ACTIVE)
|
|
344
|
-
|
|
345
|
-
Gradient:
|
|
346
|
-
grad U = 2 * effective_alpha * xi
|
|
347
|
-
|
|
348
|
-
This ensures metadata drives correct lifecycle dynamics:
|
|
349
|
-
- Frequently accessed facts stay near origin (ACTIVE, high weight)
|
|
350
|
-
- Old unused facts drift toward boundary (ARCHIVED, low weight)
|
|
351
|
-
- Important facts resist archival (persistent)
|
|
352
|
-
|
|
353
|
-
Args:
|
|
354
|
-
xi: Position array.
|
|
355
|
-
access_count: Total access count.
|
|
356
|
-
age_days: Days since creation.
|
|
357
|
-
importance: Importance score [0, 1].
|
|
358
|
-
|
|
359
|
-
Returns:
|
|
360
|
-
Gradient vector, same shape as xi.
|
|
361
|
-
"""
|
|
362
|
-
import math as _math
|
|
363
|
-
effective_alpha = (
|
|
364
|
-
self._alpha
|
|
365
|
-
+ self._beta * _math.log(access_count + 1) / 10.0
|
|
366
|
-
- self._gamma * min(age_days, 365.0) / 365.0
|
|
367
|
-
+ self._delta * importance
|
|
368
|
-
)
|
|
369
|
-
effective_alpha = max(0.1, effective_alpha)
|
|
370
|
-
return 2.0 * effective_alpha * xi
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
# ---------------------------------------------------------------------------
|
|
374
|
-
# Helpers (module-private)
|
|
375
|
-
# ---------------------------------------------------------------------------
|
|
376
|
-
|
|
377
|
-
def _project_to_ball(xi: np.ndarray) -> np.ndarray:
|
|
378
|
-
"""Project point back into the open unit ball.
|
|
379
|
-
|
|
380
|
-
If ||xi|| >= MAX_NORM, rescale to sit at MAX_NORM.
|
|
381
|
-
|
|
382
|
-
Args:
|
|
383
|
-
xi: Position array.
|
|
384
|
-
|
|
385
|
-
Returns:
|
|
386
|
-
Projected position with ||result|| < 1.
|
|
387
|
-
"""
|
|
388
|
-
norm = float(np.linalg.norm(xi))
|
|
389
|
-
if norm >= _MAX_NORM:
|
|
390
|
-
return xi * (_MAX_NORM / (norm + _EPS))
|
|
391
|
-
return xi
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
def _resize_position(xi: np.ndarray, target_dim: int) -> np.ndarray:
|
|
395
|
-
"""Resize a position vector to target dimensionality.
|
|
396
|
-
|
|
397
|
-
Pads with zeros or truncates as needed.
|
|
398
|
-
|
|
399
|
-
Args:
|
|
400
|
-
xi: Source position.
|
|
401
|
-
target_dim: Desired dimensionality.
|
|
402
|
-
|
|
403
|
-
Returns:
|
|
404
|
-
Resized position array.
|
|
405
|
-
"""
|
|
406
|
-
current = xi.shape[0]
|
|
407
|
-
if current == target_dim:
|
|
408
|
-
return xi
|
|
409
|
-
if current < target_dim:
|
|
410
|
-
return np.pad(xi, (0, target_dim - current), constant_values=0.0)
|
|
411
|
-
return xi[:target_dim]
|