superlocalmemory 4.1.13 → 4.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +103 -0
- package/README.md +3 -3
- package/package.json +1 -8
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/CLAUDE.md +3 -3
- package/plugin/agents/slm-governance-advisor.md +1 -1
- package/plugin/agents/slm-loop-runner.md +1 -1
- package/plugin/agents/slm-memory-advisor.md +1 -1
- package/plugin/agents/slm-optimize-advisor.md +1 -1
- package/plugin/requirements.txt +1 -1
- package/plugin/skills/slm-cache/SKILL.md +1 -1
- package/plugin/skills/slm-compress/SKILL.md +1 -1
- package/plugin/skills/slm-governance/SKILL.md +1 -1
- package/plugin/skills/slm-graph/SKILL.md +1 -1
- package/plugin/skills/slm-loop/SKILL.md +1 -1
- package/plugin/skills/slm-mesh/SKILL.md +1 -1
- package/plugin/skills/slm-profile/SKILL.md +1 -1
- package/plugin/skills/slm-recall/SKILL.md +1 -1
- package/plugin/skills/slm-remember/SKILL.md +1 -1
- package/plugin/skills/slm-scope/SKILL.md +1 -1
- package/plugin/skills/slm-session/SKILL.md +1 -1
- package/plugin/skills/slm-status/SKILL.md +1 -1
- package/plugin-src/agents/slm-memory-advisor.md +1 -1
- package/plugin-src/agents/slm-optimize-advisor.md +1 -1
- package/plugin-src/rules/AGENTS.md +1 -1
- package/plugin-src/skills/slm-cache/SKILL.md +1 -1
- package/plugin-src/skills/slm-compress/SKILL.md +1 -1
- package/plugin-src/skills/slm-governance/SKILL.md +1 -1
- package/plugin-src/skills/slm-graph/SKILL.md +1 -1
- package/plugin-src/skills/slm-loop/SKILL.md +1 -1
- package/plugin-src/skills/slm-mesh/SKILL.md +1 -1
- package/plugin-src/skills/slm-profile/SKILL.md +1 -1
- package/plugin-src/skills/slm-recall/SKILL.md +1 -1
- package/plugin-src/skills/slm-remember/SKILL.md +1 -1
- package/plugin-src/skills/slm-scope/SKILL.md +1 -1
- package/plugin-src/skills/slm-session/SKILL.md +1 -1
- package/plugin-src/skills/slm-status/SKILL.md +1 -1
- package/scripts/postinstall.js +71 -2
- package/pyproject.toml +0 -250
- package/src/superlocalmemory/__init__.py +0 -82
- package/src/superlocalmemory/access/__init__.py +0 -3
- package/src/superlocalmemory/access/rbac.py +0 -575
- package/src/superlocalmemory/attribution/__init__.py +0 -9
- package/src/superlocalmemory/attribution/signer.py +0 -173
- package/src/superlocalmemory/attribution/watermark.py +0 -189
- package/src/superlocalmemory/brain/__init__.py +0 -5
- package/src/superlocalmemory/brain/truth.py +0 -418
- package/src/superlocalmemory/cli/__init__.py +0 -5
- package/src/superlocalmemory/cli/__main__.py +0 -17
- package/src/superlocalmemory/cli/_lazy_init.py +0 -115
- package/src/superlocalmemory/cli/cache_cmd.py +0 -198
- package/src/superlocalmemory/cli/commands.py +0 -4710
- package/src/superlocalmemory/cli/compress_cmd.py +0 -151
- package/src/superlocalmemory/cli/context_commands.py +0 -193
- package/src/superlocalmemory/cli/daemon.py +0 -909
- package/src/superlocalmemory/cli/db_migrate.py +0 -150
- package/src/superlocalmemory/cli/diagnostics_cmd.py +0 -101
- package/src/superlocalmemory/cli/escape_hatch.py +0 -220
- package/src/superlocalmemory/cli/evidence_cmd.py +0 -103
- package/src/superlocalmemory/cli/gdpr_cmd.py +0 -792
- package/src/superlocalmemory/cli/gdpr_io.py +0 -109
- package/src/superlocalmemory/cli/help_cmd.py +0 -197
- package/src/superlocalmemory/cli/host_upgrades.py +0 -189
- package/src/superlocalmemory/cli/ingest_cmd.py +0 -327
- package/src/superlocalmemory/cli/json_output.py +0 -81
- package/src/superlocalmemory/cli/loop_cmd.py +0 -187
- package/src/superlocalmemory/cli/main.py +0 -1145
- package/src/superlocalmemory/cli/mesh_cmd.py +0 -38
- package/src/superlocalmemory/cli/migrate_cmd.py +0 -55
- package/src/superlocalmemory/cli/ops_cmd.py +0 -281
- package/src/superlocalmemory/cli/optimize_cmd.py +0 -179
- package/src/superlocalmemory/cli/optimize_constants.py +0 -31
- package/src/superlocalmemory/cli/pending_store.py +0 -296
- package/src/superlocalmemory/cli/proxy_cmd.py +0 -108
- package/src/superlocalmemory/cli/scale_engine_cmd.py +0 -56
- package/src/superlocalmemory/cli/service_installer.py +0 -373
- package/src/superlocalmemory/cli/setup_wizard.py +0 -1162
- package/src/superlocalmemory/cli/summary_cmd.py +0 -215
- package/src/superlocalmemory/cli/version_banner.py +0 -202
- package/src/superlocalmemory/cli/wizard_v3426_options.py +0 -129
- package/src/superlocalmemory/code_graph/__init__.py +0 -46
- package/src/superlocalmemory/code_graph/blast_radius.py +0 -177
- package/src/superlocalmemory/code_graph/bridge/__init__.py +0 -36
- package/src/superlocalmemory/code_graph/bridge/entity_resolver.py +0 -490
- package/src/superlocalmemory/code_graph/bridge/event_listeners.py +0 -206
- package/src/superlocalmemory/code_graph/bridge/fact_enricher.py +0 -159
- package/src/superlocalmemory/code_graph/bridge/hebbian_linker.py +0 -170
- package/src/superlocalmemory/code_graph/bridge/maintenance.py +0 -220
- package/src/superlocalmemory/code_graph/bridge/temporal_checker.py +0 -152
- package/src/superlocalmemory/code_graph/changes.py +0 -363
- package/src/superlocalmemory/code_graph/communities.py +0 -299
- package/src/superlocalmemory/code_graph/config.py +0 -154
- package/src/superlocalmemory/code_graph/database.py +0 -526
- package/src/superlocalmemory/code_graph/extractors/__init__.py +0 -95
- package/src/superlocalmemory/code_graph/extractors/python.py +0 -413
- package/src/superlocalmemory/code_graph/extractors/typescript.py +0 -556
- package/src/superlocalmemory/code_graph/flows.py +0 -350
- package/src/superlocalmemory/code_graph/git_hooks.py +0 -226
- package/src/superlocalmemory/code_graph/graph_engine.py +0 -295
- package/src/superlocalmemory/code_graph/graph_store.py +0 -335
- package/src/superlocalmemory/code_graph/incremental.py +0 -200
- package/src/superlocalmemory/code_graph/models.py +0 -130
- package/src/superlocalmemory/code_graph/parser.py +0 -687
- package/src/superlocalmemory/code_graph/resolver.py +0 -321
- package/src/superlocalmemory/code_graph/search.py +0 -460
- package/src/superlocalmemory/code_graph/service.py +0 -95
- package/src/superlocalmemory/code_graph/watcher.py +0 -207
- package/src/superlocalmemory/compliance/__init__.py +0 -0
- package/src/superlocalmemory/compliance/abac.py +0 -204
- package/src/superlocalmemory/compliance/audit.py +0 -385
- package/src/superlocalmemory/compliance/eu_ai_act.py +0 -101
- package/src/superlocalmemory/compliance/gdpr.py +0 -1479
- package/src/superlocalmemory/compliance/lifecycle.py +0 -158
- package/src/superlocalmemory/compliance/retention.py +0 -415
- package/src/superlocalmemory/compliance/scheduler.py +0 -217
- package/src/superlocalmemory/contracts/__init__.py +0 -1
- package/src/superlocalmemory/contracts/schemas/agent-experience-v1.schema.json +0 -92
- package/src/superlocalmemory/contracts/schemas/agent-integration-contract-v2.schema.json +0 -46
- package/src/superlocalmemory/contracts/schemas/cognitive-turn-receipt-v1.schema.json +0 -59
- package/src/superlocalmemory/contracts/v402.py +0 -62
- package/src/superlocalmemory/core/__init__.py +0 -0
- package/src/superlocalmemory/core/actor_context.py +0 -166
- package/src/superlocalmemory/core/admission.py +0 -769
- package/src/superlocalmemory/core/backend_orchestrator.py +0 -637
- package/src/superlocalmemory/core/block_hygiene.py +0 -147
- package/src/superlocalmemory/core/community_summary.py +0 -267
- package/src/superlocalmemory/core/component_healer.py +0 -144
- package/src/superlocalmemory/core/component_registry.py +0 -514
- package/src/superlocalmemory/core/config.py +0 -2204
- package/src/superlocalmemory/core/consolidation_engine.py +0 -983
- package/src/superlocalmemory/core/context_cache.py +0 -574
- package/src/superlocalmemory/core/derivation_lineage.py +0 -246
- package/src/superlocalmemory/core/embedding_worker.py +0 -208
- package/src/superlocalmemory/core/embeddings.py +0 -1052
- package/src/superlocalmemory/core/engine.py +0 -1395
- package/src/superlocalmemory/core/engine_capabilities.py +0 -24
- package/src/superlocalmemory/core/engine_ingestion.py +0 -983
- package/src/superlocalmemory/core/engine_lock.py +0 -75
- package/src/superlocalmemory/core/engine_wiring.py +0 -776
- package/src/superlocalmemory/core/entity_community.py +0 -178
- package/src/superlocalmemory/core/error_envelope.py +0 -60
- package/src/superlocalmemory/core/evidence_bundle.py +0 -528
- package/src/superlocalmemory/core/fact_consolidator.py +0 -812
- package/src/superlocalmemory/core/file_lock.py +0 -92
- package/src/superlocalmemory/core/graph_analyzer.py +0 -456
- package/src/superlocalmemory/core/graph_metrics.py +0 -597
- package/src/superlocalmemory/core/graph_pruner.py +0 -939
- package/src/superlocalmemory/core/health_monitor.py +0 -338
- package/src/superlocalmemory/core/hooks.py +0 -65
- package/src/superlocalmemory/core/ingest_gate.py +0 -133
- package/src/superlocalmemory/core/ingest_policy.py +0 -38
- package/src/superlocalmemory/core/ingestion_command.py +0 -1042
- package/src/superlocalmemory/core/injection.py +0 -434
- package/src/superlocalmemory/core/install_detector.py +0 -131
- package/src/superlocalmemory/core/key_expander.py +0 -138
- package/src/superlocalmemory/core/lifecycle_state.py +0 -153
- package/src/superlocalmemory/core/maintenance.py +0 -777
- package/src/superlocalmemory/core/maintenance_scheduler.py +0 -507
- package/src/superlocalmemory/core/materialization_control.py +0 -20
- package/src/superlocalmemory/core/mcp_embedder_proxy.py +0 -89
- package/src/superlocalmemory/core/memory_health.py +0 -266
- package/src/superlocalmemory/core/mode_capability.py +0 -111
- package/src/superlocalmemory/core/modes.py +0 -168
- package/src/superlocalmemory/core/mutations.py +0 -688
- package/src/superlocalmemory/core/ollama_embedder.py +0 -266
- package/src/superlocalmemory/core/ollama_validator.py +0 -315
- package/src/superlocalmemory/core/operation_policy.py +0 -92
- package/src/superlocalmemory/core/operation_policy_registry.py +0 -542
- package/src/superlocalmemory/core/operation_request.py +0 -127
- package/src/superlocalmemory/core/ops_remediation.py +0 -542
- package/src/superlocalmemory/core/pii.py +0 -105
- package/src/superlocalmemory/core/platform_utils.py +0 -138
- package/src/superlocalmemory/core/profiles.py +0 -234
- package/src/superlocalmemory/core/progressive_abstraction.py +0 -208
- package/src/superlocalmemory/core/projection_drain.py +0 -380
- package/src/superlocalmemory/core/queue_consumer.py +0 -168
- package/src/superlocalmemory/core/ram_lock.py +0 -160
- package/src/superlocalmemory/core/rate_limit.py +0 -151
- package/src/superlocalmemory/core/recall_gate.py +0 -95
- package/src/superlocalmemory/core/recall_pipeline.py +0 -1337
- package/src/superlocalmemory/core/recall_queue.py +0 -377
- package/src/superlocalmemory/core/recall_worker.py +0 -414
- package/src/superlocalmemory/core/registry.py +0 -121
- package/src/superlocalmemory/core/remember_admission.py +0 -161
- package/src/superlocalmemory/core/remember_runtime.py +0 -1190
- package/src/superlocalmemory/core/remote_mode.py +0 -214
- package/src/superlocalmemory/core/reranker_worker.py +0 -338
- package/src/superlocalmemory/core/safe_fs.py +0 -108
- package/src/superlocalmemory/core/scale_autopromote.py +0 -196
- package/src/superlocalmemory/core/scale_engine.py +0 -915
- package/src/superlocalmemory/core/score_contract.py +0 -82
- package/src/superlocalmemory/core/security_primitives.py +0 -672
- package/src/superlocalmemory/core/session_identity.py +0 -98
- package/src/superlocalmemory/core/shadow_router.py +0 -319
- package/src/superlocalmemory/core/slm_disabled.py +0 -85
- package/src/superlocalmemory/core/status_contract.py +0 -108
- package/src/superlocalmemory/core/store_pipeline.py +0 -1404
- package/src/superlocalmemory/core/summarizer.py +0 -200
- package/src/superlocalmemory/core/tier_manager.py +0 -461
- package/src/superlocalmemory/core/topic_signature.py +0 -156
- package/src/superlocalmemory/core/transactions/__init__.py +0 -78
- package/src/superlocalmemory/core/transactions/concrete_owners.py +0 -604
- package/src/superlocalmemory/core/transactions/erasure.py +0 -825
- package/src/superlocalmemory/core/transactions/manifest.py +0 -255
- package/src/superlocalmemory/core/transactions/manifest_key.py +0 -155
- package/src/superlocalmemory/core/transactions/obligations.py +0 -272
- package/src/superlocalmemory/core/transactions/owners.py +0 -114
- package/src/superlocalmemory/core/transactions/reconciler.py +0 -285
- package/src/superlocalmemory/core/transactions/service.py +0 -330
- package/src/superlocalmemory/core/worker_pool.py +0 -377
- package/src/superlocalmemory/core/working_memory.py +0 -288
- package/src/superlocalmemory/dynamics/__init__.py +0 -0
- package/src/superlocalmemory/dynamics/activation_guided_quantization.py +0 -374
- package/src/superlocalmemory/dynamics/eap_scheduler.py +0 -294
- package/src/superlocalmemory/dynamics/ebbinghaus_langevin_coupling.py +0 -171
- package/src/superlocalmemory/dynamics/fisher_langevin_coupling.py +0 -227
- package/src/superlocalmemory/encoding/__init__.py +0 -0
- package/src/superlocalmemory/encoding/auto_linker.py +0 -308
- package/src/superlocalmemory/encoding/cognitive_consolidator.py +0 -899
- package/src/superlocalmemory/encoding/consolidator.py +0 -472
- package/src/superlocalmemory/encoding/context_generator.py +0 -175
- package/src/superlocalmemory/encoding/emotional.py +0 -189
- package/src/superlocalmemory/encoding/entity_reflexion.py +0 -200
- package/src/superlocalmemory/encoding/entity_resolver.py +0 -687
- package/src/superlocalmemory/encoding/entropy_gate.py +0 -101
- package/src/superlocalmemory/encoding/fact_extractor.py +0 -877
- package/src/superlocalmemory/encoding/foresight.py +0 -93
- package/src/superlocalmemory/encoding/graph_builder.py +0 -346
- package/src/superlocalmemory/encoding/observation_builder.py +0 -177
- package/src/superlocalmemory/encoding/prospective_markers.py +0 -262
- package/src/superlocalmemory/encoding/scene_builder.py +0 -410
- package/src/superlocalmemory/encoding/signal_inference.py +0 -90
- package/src/superlocalmemory/encoding/temporal_parser.py +0 -432
- package/src/superlocalmemory/encoding/temporal_validator.py +0 -572
- package/src/superlocalmemory/encoding/type_router.py +0 -237
- package/src/superlocalmemory/evaluation/__init__.py +0 -13
- package/src/superlocalmemory/evaluation/calibration.py +0 -308
- package/src/superlocalmemory/evolution/__init__.py +0 -29
- package/src/superlocalmemory/evolution/blind_verifier.py +0 -122
- package/src/superlocalmemory/evolution/budget.py +0 -356
- package/src/superlocalmemory/evolution/evolution_store.py +0 -619
- package/src/superlocalmemory/evolution/llm_dispatch.py +0 -559
- package/src/superlocalmemory/evolution/model_selection.py +0 -175
- package/src/superlocalmemory/evolution/mutation_generator.py +0 -226
- package/src/superlocalmemory/evolution/skill_activator.py +0 -270
- package/src/superlocalmemory/evolution/skill_evolver.py +0 -928
- package/src/superlocalmemory/evolution/triggers.py +0 -376
- package/src/superlocalmemory/evolution/types.py +0 -114
- package/src/superlocalmemory/graph/__init__.py +0 -9
- package/src/superlocalmemory/graph/cozo_adjacency.py +0 -122
- package/src/superlocalmemory/graph/cozo_backend.py +0 -751
- package/src/superlocalmemory/hooks/__init__.py +0 -3
- package/src/superlocalmemory/hooks/_outcome_common.py +0 -523
- package/src/superlocalmemory/hooks/adapter_base.py +0 -347
- package/src/superlocalmemory/hooks/antigravity_adapter.py +0 -171
- package/src/superlocalmemory/hooks/auto_capture.py +0 -133
- package/src/superlocalmemory/hooks/auto_invoker.py +0 -521
- package/src/superlocalmemory/hooks/auto_parameterize.py +0 -147
- package/src/superlocalmemory/hooks/auto_recall.py +0 -191
- package/src/superlocalmemory/hooks/auto_recall_hook.py +0 -251
- package/src/superlocalmemory/hooks/before_web_hook.py +0 -131
- package/src/superlocalmemory/hooks/claude_code_hooks.py +0 -637
- package/src/superlocalmemory/hooks/codex_assets.py +0 -251
- package/src/superlocalmemory/hooks/codex_hooks.py +0 -186
- package/src/superlocalmemory/hooks/context_payload.py +0 -311
- package/src/superlocalmemory/hooks/copilot_adapter.py +0 -208
- package/src/superlocalmemory/hooks/cross_platform_connector.py +0 -90
- package/src/superlocalmemory/hooks/cursor_adapter.py +0 -173
- package/src/superlocalmemory/hooks/hook_daemon.py +0 -295
- package/src/superlocalmemory/hooks/hook_handlers.py +0 -822
- package/src/superlocalmemory/hooks/ide_connector.py +0 -246
- package/src/superlocalmemory/hooks/memory_protocol.py +0 -158
- package/src/superlocalmemory/hooks/portable_kit.py +0 -755
- package/src/superlocalmemory/hooks/post_tool_async_hook.py +0 -183
- package/src/superlocalmemory/hooks/post_tool_outcome_hook.py +0 -351
- package/src/superlocalmemory/hooks/prewarm_auth.py +0 -187
- package/src/superlocalmemory/hooks/rules_engine.py +0 -99
- package/src/superlocalmemory/hooks/session_registry.py +0 -330
- package/src/superlocalmemory/hooks/stop_outcome_hook.py +0 -138
- package/src/superlocalmemory/hooks/sync_loop.py +0 -114
- package/src/superlocalmemory/hooks/topic_shift_hook.py +0 -302
- package/src/superlocalmemory/hooks/user_prompt_hook.py +0 -131
- package/src/superlocalmemory/hooks/user_prompt_rehash_hook.py +0 -210
- package/src/superlocalmemory/infra/__init__.py +0 -3
- package/src/superlocalmemory/infra/auth_middleware.py +0 -145
- package/src/superlocalmemory/infra/backup.py +0 -974
- package/src/superlocalmemory/infra/backup_obligations.py +0 -423
- package/src/superlocalmemory/infra/cache_manager.py +0 -267
- package/src/superlocalmemory/infra/cloud_backup.py +0 -788
- package/src/superlocalmemory/infra/daemon_identity.py +0 -300
- package/src/superlocalmemory/infra/data_root.py +0 -238
- package/src/superlocalmemory/infra/event_bus.py +0 -637
- package/src/superlocalmemory/infra/local_diagnostics.py +0 -327
- package/src/superlocalmemory/infra/pid_manager.py +0 -193
- package/src/superlocalmemory/infra/process_identity.py +0 -180
- package/src/superlocalmemory/infra/process_reaper.py +0 -624
- package/src/superlocalmemory/infra/rate_limiter.py +0 -228
- package/src/superlocalmemory/infra/self_heal.py +0 -401
- package/src/superlocalmemory/infra/version_integrity.py +0 -229
- package/src/superlocalmemory/ingestion/__init__.py +0 -13
- package/src/superlocalmemory/ingestion/adapter_manager.py +0 -255
- package/src/superlocalmemory/ingestion/base_adapter.py +0 -171
- package/src/superlocalmemory/ingestion/calendar_adapter.py +0 -349
- package/src/superlocalmemory/ingestion/credentials.py +0 -125
- package/src/superlocalmemory/ingestion/gmail_adapter.py +0 -378
- package/src/superlocalmemory/ingestion/parsers.py +0 -100
- package/src/superlocalmemory/ingestion/transcript_adapter.py +0 -161
- package/src/superlocalmemory/integrations/__init__.py +0 -1
- package/src/superlocalmemory/integrations/bounded_loops_mcp.py +0 -431
- package/src/superlocalmemory/integrations/bounded_loops_v051.py +0 -236
- package/src/superlocalmemory/learning/__init__.py +0 -0
- package/src/superlocalmemory/learning/adaptive.py +0 -172
- package/src/superlocalmemory/learning/arm_catalog.py +0 -97
- package/src/superlocalmemory/learning/assertion_miner.py +0 -403
- package/src/superlocalmemory/learning/bandit.py +0 -654
- package/src/superlocalmemory/learning/bandit_cache.py +0 -131
- package/src/superlocalmemory/learning/behavioral.py +0 -542
- package/src/superlocalmemory/learning/bootstrap.py +0 -298
- package/src/superlocalmemory/learning/consolidation_cycle.py +0 -398
- package/src/superlocalmemory/learning/consolidation_quantization_worker.py +0 -115
- package/src/superlocalmemory/learning/consolidation_worker.py +0 -261
- package/src/superlocalmemory/learning/cross_project.py +0 -408
- package/src/superlocalmemory/learning/database.py +0 -698
- package/src/superlocalmemory/learning/dedup_hnsw.py +0 -413
- package/src/superlocalmemory/learning/engagement.py +0 -487
- package/src/superlocalmemory/learning/engagement_features.py +0 -279
- package/src/superlocalmemory/learning/ensemble.py +0 -309
- package/src/superlocalmemory/learning/entity_compiler.py +0 -356
- package/src/superlocalmemory/learning/fact_outcome_joins.py +0 -207
- package/src/superlocalmemory/learning/features.py +0 -138
- package/src/superlocalmemory/learning/feedback.py +0 -724
- package/src/superlocalmemory/learning/forgetting_scheduler.py +0 -375
- package/src/superlocalmemory/learning/hnsw_dedup.py +0 -69
- package/src/superlocalmemory/learning/labeler.py +0 -85
- package/src/superlocalmemory/learning/legacy_migration.py +0 -316
- package/src/superlocalmemory/learning/lightgbm_subprocess.py +0 -236
- package/src/superlocalmemory/learning/memory_merge.py +0 -175
- package/src/superlocalmemory/learning/model_cache.py +0 -267
- package/src/superlocalmemory/learning/model_rollback.py +0 -281
- package/src/superlocalmemory/learning/outcome_queue.py +0 -306
- package/src/superlocalmemory/learning/outcomes.py +0 -286
- package/src/superlocalmemory/learning/pattern_miner.py +0 -465
- package/src/superlocalmemory/learning/pattern_miner_constants.py +0 -90
- package/src/superlocalmemory/learning/pcos.py +0 -291
- package/src/superlocalmemory/learning/project_context.py +0 -366
- package/src/superlocalmemory/learning/propensity.py +0 -131
- package/src/superlocalmemory/learning/ranker.py +0 -300
- package/src/superlocalmemory/learning/ranker_common.py +0 -163
- package/src/superlocalmemory/learning/ranker_retrain_legacy.py +0 -210
- package/src/superlocalmemory/learning/ranker_retrain_online.py +0 -423
- package/src/superlocalmemory/learning/reward.py +0 -888
- package/src/superlocalmemory/learning/reward_archive.py +0 -223
- package/src/superlocalmemory/learning/reward_boost.py +0 -211
- package/src/superlocalmemory/learning/reward_from_outcomes.py +0 -365
- package/src/superlocalmemory/learning/reward_model.py +0 -144
- package/src/superlocalmemory/learning/reward_proxy.py +0 -578
- package/src/superlocalmemory/learning/shadow_test.py +0 -524
- package/src/superlocalmemory/learning/signal_kinds.py +0 -79
- package/src/superlocalmemory/learning/signal_worker.py +0 -268
- package/src/superlocalmemory/learning/signals.py +0 -646
- package/src/superlocalmemory/learning/skill_performance_miner.py +0 -422
- package/src/superlocalmemory/learning/source_quality.py +0 -828
- package/src/superlocalmemory/learning/trigram_index.py +0 -548
- package/src/superlocalmemory/learning/workflows.py +0 -309
- package/src/superlocalmemory/llm/__init__.py +0 -0
- package/src/superlocalmemory/llm/backbone.py +0 -364
- package/src/superlocalmemory/loops/__init__.py +0 -58
- package/src/superlocalmemory/loops/budget.py +0 -58
- package/src/superlocalmemory/loops/engine.py +0 -174
- package/src/superlocalmemory/loops/ledger.py +0 -298
- package/src/superlocalmemory/loops/models.py +0 -152
- package/src/superlocalmemory/loops/rules.py +0 -52
- package/src/superlocalmemory/math/__init__.py +0 -0
- package/src/superlocalmemory/math/ebbinghaus.py +0 -352
- package/src/superlocalmemory/math/fisher.py +0 -356
- package/src/superlocalmemory/math/fisher_quantized.py +0 -255
- package/src/superlocalmemory/math/hopfield.py +0 -282
- package/src/superlocalmemory/math/langevin.py +0 -411
- package/src/superlocalmemory/math/polar_quant.py +0 -414
- package/src/superlocalmemory/math/qjl.py +0 -115
- package/src/superlocalmemory/math/sheaf.py +0 -261
- package/src/superlocalmemory/math/turbo_quant.py +0 -318
- package/src/superlocalmemory/mcp/__init__.py +0 -0
- package/src/superlocalmemory/mcp/_daemon_proxy.py +0 -203
- package/src/superlocalmemory/mcp/_pool_adapter.py +0 -181
- package/src/superlocalmemory/mcp/_stdin_guard.py +0 -60
- package/src/superlocalmemory/mcp/agent_context.py +0 -115
- package/src/superlocalmemory/mcp/cli_fallback.py +0 -602
- package/src/superlocalmemory/mcp/http_transport.py +0 -85
- package/src/superlocalmemory/mcp/profiles.py +0 -154
- package/src/superlocalmemory/mcp/resources.py +0 -281
- package/src/superlocalmemory/mcp/server.py +0 -480
- package/src/superlocalmemory/mcp/session_binding.py +0 -98
- package/src/superlocalmemory/mcp/shared.py +0 -112
- package/src/superlocalmemory/mcp/tools.py +0 -18
- package/src/superlocalmemory/mcp/tools_active.py +0 -958
- package/src/superlocalmemory/mcp/tools_brain.py +0 -298
- package/src/superlocalmemory/mcp/tools_code_graph.py +0 -1717
- package/src/superlocalmemory/mcp/tools_context.py +0 -239
- package/src/superlocalmemory/mcp/tools_core.py +0 -1112
- package/src/superlocalmemory/mcp/tools_evolution.py +0 -343
- package/src/superlocalmemory/mcp/tools_learning.py +0 -393
- package/src/superlocalmemory/mcp/tools_loops.py +0 -345
- package/src/superlocalmemory/mcp/tools_mesh.py +0 -429
- package/src/superlocalmemory/mcp/tools_ops.py +0 -115
- package/src/superlocalmemory/mcp/tools_optimize.py +0 -322
- package/src/superlocalmemory/mcp/tools_summaries.py +0 -147
- package/src/superlocalmemory/mcp/tools_v28.py +0 -292
- package/src/superlocalmemory/mcp/tools_v3.py +0 -398
- package/src/superlocalmemory/mcp/tools_v33.py +0 -507
- package/src/superlocalmemory/mesh/__init__.py +0 -12
- package/src/superlocalmemory/mesh/broker.py +0 -812
- package/src/superlocalmemory/mesh/broker_security.py +0 -470
- package/src/superlocalmemory/mesh/discovery.py +0 -365
- package/src/superlocalmemory/mesh/lock_protocol.py +0 -313
- package/src/superlocalmemory/mesh/node_identity.py +0 -97
- package/src/superlocalmemory/mesh/outbox_remote.py +0 -429
- package/src/superlocalmemory/mesh/remote_sync.py +0 -829
- package/src/superlocalmemory/mesh/state_sync.py +0 -286
- package/src/superlocalmemory/migrations/__init__.py +0 -5
- package/src/superlocalmemory/migrations/v3_4_25_to_v3_4_26.py +0 -144
- package/src/superlocalmemory/optimize/NOTICE +0 -6
- package/src/superlocalmemory/optimize/__init__.py +0 -0
- package/src/superlocalmemory/optimize/adapters/__init__.py +0 -68
- package/src/superlocalmemory/optimize/adapters/_agent_registry.py +0 -120
- package/src/superlocalmemory/optimize/adapters/anthropic_adapter.py +0 -112
- package/src/superlocalmemory/optimize/adapters/openai_adapter.py +0 -122
- package/src/superlocalmemory/optimize/adapters/wrap.py +0 -228
- package/src/superlocalmemory/optimize/cache/__init__.py +0 -31
- package/src/superlocalmemory/optimize/cache/boundary_store.py +0 -488
- package/src/superlocalmemory/optimize/cache/centroid_store.py +0 -199
- package/src/superlocalmemory/optimize/cache/context_key.py +0 -67
- package/src/superlocalmemory/optimize/cache/exact.py +0 -88
- package/src/superlocalmemory/optimize/cache/invalidation.py +0 -36
- package/src/superlocalmemory/optimize/cache/key_builder.py +0 -111
- package/src/superlocalmemory/optimize/cache/manager.py +0 -737
- package/src/superlocalmemory/optimize/cache/semantic.py +0 -637
- package/src/superlocalmemory/optimize/cache/stampede.py +0 -50
- package/src/superlocalmemory/optimize/compress/__init__.py +0 -17
- package/src/superlocalmemory/optimize/compress/align.py +0 -159
- package/src/superlocalmemory/optimize/compress/ccr.py +0 -116
- package/src/superlocalmemory/optimize/compress/prose_llmlingua.py +0 -71
- package/src/superlocalmemory/optimize/compress/router.py +0 -667
- package/src/superlocalmemory/optimize/config/__init__.py +0 -56
- package/src/superlocalmemory/optimize/config/defaults.py +0 -43
- package/src/superlocalmemory/optimize/config/schema.py +0 -327
- package/src/superlocalmemory/optimize/config/store.py +0 -270
- package/src/superlocalmemory/optimize/metrics/__init__.py +0 -8
- package/src/superlocalmemory/optimize/metrics/counters.py +0 -155
- package/src/superlocalmemory/optimize/metrics/estimator.py +0 -87
- package/src/superlocalmemory/optimize/metrics/exporters.py +0 -77
- package/src/superlocalmemory/optimize/metrics/persistence.py +0 -115
- package/src/superlocalmemory/optimize/proxy/__init__.py +0 -28
- package/src/superlocalmemory/optimize/proxy/_helpers.py +0 -730
- package/src/superlocalmemory/optimize/proxy/anthropic_surface.py +0 -375
- package/src/superlocalmemory/optimize/proxy/capture.py +0 -550
- package/src/superlocalmemory/optimize/proxy/gemini_surface.py +0 -528
- package/src/superlocalmemory/optimize/proxy/lifecycle.py +0 -126
- package/src/superlocalmemory/optimize/proxy/openai_surface.py +0 -465
- package/src/superlocalmemory/optimize/proxy/server.py +0 -199
- package/src/superlocalmemory/optimize/proxy/vertex_surface.py +0 -246
- package/src/superlocalmemory/optimize/storage/__init__.py +0 -0
- package/src/superlocalmemory/optimize/storage/db.py +0 -1185
- package/src/superlocalmemory/optimize/storage/schema.py +0 -205
- package/src/superlocalmemory/parameterization/__init__.py +0 -47
- package/src/superlocalmemory/parameterization/cross_project.py +0 -12
- package/src/superlocalmemory/parameterization/pattern_extractor.py +0 -584
- package/src/superlocalmemory/parameterization/pii_filter.py +0 -106
- package/src/superlocalmemory/parameterization/prompt_injector.py +0 -219
- package/src/superlocalmemory/parameterization/prompt_lifecycle.py +0 -281
- package/src/superlocalmemory/parameterization/soft_prompt_generator.py +0 -542
- package/src/superlocalmemory/parameterization/workflow_miner.py +0 -17
- package/src/superlocalmemory/reliability/__init__.py +0 -45
- package/src/superlocalmemory/reliability/join_liveness.py +0 -301
- package/src/superlocalmemory/reliability/prior_distance.py +0 -243
- package/src/superlocalmemory/retrieval/__init__.py +0 -0
- package/src/superlocalmemory/retrieval/agentic.py +0 -367
- package/src/superlocalmemory/retrieval/ann_index.py +0 -235
- package/src/superlocalmemory/retrieval/bm25_channel.py +0 -451
- package/src/superlocalmemory/retrieval/bridge_discovery.py +0 -253
- package/src/superlocalmemory/retrieval/channel_registry.py +0 -154
- package/src/superlocalmemory/retrieval/channel_status.py +0 -117
- package/src/superlocalmemory/retrieval/engine.py +0 -1615
- package/src/superlocalmemory/retrieval/entity_channel.py +0 -994
- package/src/superlocalmemory/retrieval/forgetting_filter.py +0 -160
- package/src/superlocalmemory/retrieval/fusion.py +0 -81
- package/src/superlocalmemory/retrieval/graph_adjacency.py +0 -219
- package/src/superlocalmemory/retrieval/hopfield_channel.py +0 -465
- package/src/superlocalmemory/retrieval/profile_channel.py +0 -105
- package/src/superlocalmemory/retrieval/quantization_aware_search.py +0 -147
- package/src/superlocalmemory/retrieval/remote_reranker.py +0 -758
- package/src/superlocalmemory/retrieval/reranker.py +0 -674
- package/src/superlocalmemory/retrieval/scope_policy.py +0 -126
- package/src/superlocalmemory/retrieval/semantic_channel.py +0 -638
- package/src/superlocalmemory/retrieval/spreading.py +0 -288
- package/src/superlocalmemory/retrieval/spreading_activation.py +0 -616
- package/src/superlocalmemory/retrieval/strategy.py +0 -248
- package/src/superlocalmemory/retrieval/temporal_channel.py +0 -433
- package/src/superlocalmemory/retrieval/temporal_frame.py +0 -102
- package/src/superlocalmemory/retrieval/temporal_utils.py +0 -122
- package/src/superlocalmemory/retrieval/temporal_validity_filter.py +0 -499
- package/src/superlocalmemory/retrieval/time_window.py +0 -181
- package/src/superlocalmemory/retrieval/vector_store.py +0 -863
- package/src/superlocalmemory/server/__init__.py +0 -1
- package/src/superlocalmemory/server/api.py +0 -310
- package/src/superlocalmemory/server/asset_versions.py +0 -171
- package/src/superlocalmemory/server/bandit_loops.py +0 -158
- package/src/superlocalmemory/server/config_file.py +0 -90
- package/src/superlocalmemory/server/consolidation_runner.py +0 -140
- package/src/superlocalmemory/server/egress_policy.py +0 -258
- package/src/superlocalmemory/server/loopback.py +0 -85
- package/src/superlocalmemory/server/middleware/__init__.py +0 -11
- package/src/superlocalmemory/server/middleware/security_headers.py +0 -144
- package/src/superlocalmemory/server/origin.py +0 -55
- package/src/superlocalmemory/server/profile_runtime.py +0 -515
- package/src/superlocalmemory/server/rbac_enforce.py +0 -194
- package/src/superlocalmemory/server/recall_health.py +0 -343
- package/src/superlocalmemory/server/recall_serializer.py +0 -320
- package/src/superlocalmemory/server/route_mutations.py +0 -104
- package/src/superlocalmemory/server/routes/__init__.py +0 -4
- package/src/superlocalmemory/server/routes/abstraction.py +0 -314
- package/src/superlocalmemory/server/routes/adapters.py +0 -63
- package/src/superlocalmemory/server/routes/agents.py +0 -303
- package/src/superlocalmemory/server/routes/backup.py +0 -869
- package/src/superlocalmemory/server/routes/behavioral.py +0 -659
- package/src/superlocalmemory/server/routes/brain.py +0 -1892
- package/src/superlocalmemory/server/routes/chat.py +0 -393
- package/src/superlocalmemory/server/routes/compliance.py +0 -533
- package/src/superlocalmemory/server/routes/config_api.py +0 -703
- package/src/superlocalmemory/server/routes/data_io.py +0 -329
- package/src/superlocalmemory/server/routes/entity.py +0 -237
- package/src/superlocalmemory/server/routes/events.py +0 -214
- package/src/superlocalmemory/server/routes/evolution.py +0 -510
- package/src/superlocalmemory/server/routes/helpers.py +0 -499
- package/src/superlocalmemory/server/routes/ingest.py +0 -137
- package/src/superlocalmemory/server/routes/insights.py +0 -366
- package/src/superlocalmemory/server/routes/learning.py +0 -834
- package/src/superlocalmemory/server/routes/learning_telemetry.py +0 -154
- package/src/superlocalmemory/server/routes/lifecycle.py +0 -184
- package/src/superlocalmemory/server/routes/memories.py +0 -1661
- package/src/superlocalmemory/server/routes/mesh.py +0 -517
- package/src/superlocalmemory/server/routes/mesh_lock.py +0 -54
- package/src/superlocalmemory/server/routes/mesh_state.py +0 -63
- package/src/superlocalmemory/server/routes/optimize.py +0 -197
- package/src/superlocalmemory/server/routes/prewarm.py +0 -173
- package/src/superlocalmemory/server/routes/profiles.py +0 -292
- package/src/superlocalmemory/server/routes/ratelimit.py +0 -132
- package/src/superlocalmemory/server/routes/rbac.py +0 -366
- package/src/superlocalmemory/server/routes/stats.py +0 -385
- package/src/superlocalmemory/server/routes/tiers.py +0 -222
- package/src/superlocalmemory/server/routes/timeline.py +0 -258
- package/src/superlocalmemory/server/routes/token.py +0 -90
- package/src/superlocalmemory/server/routes/v3_api.py +0 -3023
- package/src/superlocalmemory/server/routes/ws.py +0 -171
- package/src/superlocalmemory/server/security_middleware.py +0 -89
- package/src/superlocalmemory/server/ui.py +0 -354
- package/src/superlocalmemory/server/unified_daemon.py +0 -6326
- package/src/superlocalmemory/server/write_identity.py +0 -195
- package/src/superlocalmemory/storage/__init__.py +0 -0
- package/src/superlocalmemory/storage/_migration_internals.py +0 -638
- package/src/superlocalmemory/storage/_schema_version.py +0 -174
- package/src/superlocalmemory/storage/access_log.py +0 -170
- package/src/superlocalmemory/storage/admission_codec.py +0 -129
- package/src/superlocalmemory/storage/admission_journal.py +0 -843
- package/src/superlocalmemory/storage/agent_experience.py +0 -546
- package/src/superlocalmemory/storage/backup.py +0 -531
- package/src/superlocalmemory/storage/correction_cases.py +0 -670
- package/src/superlocalmemory/storage/database.py +0 -3180
- package/src/superlocalmemory/storage/deferred_writes.py +0 -209
- package/src/superlocalmemory/storage/embedding_codec.py +0 -200
- package/src/superlocalmemory/storage/embedding_migrator.py +0 -672
- package/src/superlocalmemory/storage/erasure_fence.py +0 -45
- package/src/superlocalmemory/storage/execution_learning.py +0 -285
- package/src/superlocalmemory/storage/external_evidence.py +0 -359
- package/src/superlocalmemory/storage/generation_fence.py +0 -63
- package/src/superlocalmemory/storage/lineage_retention.py +0 -236
- package/src/superlocalmemory/storage/logical_edges.py +0 -86
- package/src/superlocalmemory/storage/memory_write.py +0 -115
- package/src/superlocalmemory/storage/migration_runner.py +0 -895
- package/src/superlocalmemory/storage/migration_v33.py +0 -140
- package/src/superlocalmemory/storage/migrations/M001_add_signal_features_columns.py +0 -67
- package/src/superlocalmemory/storage/migrations/M002_model_state_history.py +0 -107
- package/src/superlocalmemory/storage/migrations/M003_migration_log.py +0 -38
- package/src/superlocalmemory/storage/migrations/M004_cross_platform_sync_log.py +0 -46
- package/src/superlocalmemory/storage/migrations/M005_bandit_tables.py +0 -75
- package/src/superlocalmemory/storage/migrations/M006_action_outcomes_reward.py +0 -75
- package/src/superlocalmemory/storage/migrations/M007_pending_outcomes.py +0 -63
- package/src/superlocalmemory/storage/migrations/M009_model_lineage.py +0 -94
- package/src/superlocalmemory/storage/migrations/M010_evolution_config.py +0 -80
- package/src/superlocalmemory/storage/migrations/M011_archive_and_merge.py +0 -87
- package/src/superlocalmemory/storage/migrations/M012_shadow_observations.py +0 -72
- package/src/superlocalmemory/storage/migrations/M013_bi_temporal_columns.py +0 -55
- package/src/superlocalmemory/storage/migrations/M014_v345_scale_ready.py +0 -45
- package/src/superlocalmemory/storage/migrations/M015_add_pinned_column.py +0 -58
- package/src/superlocalmemory/storage/migrations/M016_add_scope_support.py +0 -120
- package/src/superlocalmemory/storage/migrations/M017_ccq_scope_column.py +0 -79
- package/src/superlocalmemory/storage/migrations/M018_ingestion_operations.py +0 -120
- package/src/superlocalmemory/storage/migrations/M019_derivation_lineage.py +0 -54
- package/src/superlocalmemory/storage/migrations/M020_model_state_integrity.py +0 -52
- package/src/superlocalmemory/storage/migrations/M021_ingestion_log_profile.py +0 -108
- package/src/superlocalmemory/storage/migrations/M022_entity_aliases_profile.py +0 -86
- package/src/superlocalmemory/storage/migrations/M023_mesh_profile_isolation.py +0 -194
- package/src/superlocalmemory/storage/migrations/M024_rbac_users_roles.py +0 -87
- package/src/superlocalmemory/storage/migrations/M025_perf_indexes.py +0 -90
- package/src/superlocalmemory/storage/migrations/M026_rbac_memberships_fk.py +0 -136
- package/src/superlocalmemory/storage/migrations/M027_transferable_patterns_profile.py +0 -163
- package/src/superlocalmemory/storage/migrations/M028_fact_entity_associations.py +0 -305
- package/src/superlocalmemory/storage/migrations/M029_behavioral_history_indexes.py +0 -137
- package/src/superlocalmemory/storage/migrations/M030_entity_explorer_indexes.py +0 -93
- package/src/superlocalmemory/storage/migrations/M031_dead_letter_operations.py +0 -80
- package/src/superlocalmemory/storage/migrations/M032_write_coordinator_admission.py +0 -188
- package/src/superlocalmemory/storage/migrations/M033_projection_transactions.py +0 -148
- package/src/superlocalmemory/storage/migrations/M034_obligation_integrity.py +0 -58
- package/src/superlocalmemory/storage/migrations/M035_erasure_receipts.py +0 -113
- package/src/superlocalmemory/storage/migrations/M036_vector_row_map.py +0 -107
- package/src/superlocalmemory/storage/migrations/M037_manifest_hmac_version.py +0 -162
- package/src/superlocalmemory/storage/migrations/M038_learning_feedback_channel.py +0 -77
- package/src/superlocalmemory/storage/migrations/M039_scene_fact_members.py +0 -137
- package/src/superlocalmemory/storage/migrations/M040_agent_experience_receipts.py +0 -254
- package/src/superlocalmemory/storage/migrations/M041_external_evidence_receipts.py +0 -189
- package/src/superlocalmemory/storage/migrations/M042_correction_case_ledger.py +0 -245
- package/src/superlocalmemory/storage/migrations/M043_quarantine_display_summaries.py +0 -512
- package/src/superlocalmemory/storage/migrations/M044_play_carries_its_own_evidence.py +0 -127
- package/src/superlocalmemory/storage/migrations/M045_fact_outcome_score.py +0 -158
- package/src/superlocalmemory/storage/migrations/M046_prospective_memory_has_its_own_name.py +0 -620
- package/src/superlocalmemory/storage/migrations/M047_fisher_vectors_are_stored_like_every_other_vector.py +0 -306
- package/src/superlocalmemory/storage/migrations/M048_upcoming_holds_only_what_is_upcoming.py +0 -229
- package/src/superlocalmemory/storage/migrations/M049_a_schema_version_marker_is_one_row.py +0 -201
- package/src/superlocalmemory/storage/migrations/M050_execution_learning_v2.py +0 -70
- package/src/superlocalmemory/storage/migrations/__init__.py +0 -103
- package/src/superlocalmemory/storage/migrations.py +0 -333
- package/src/superlocalmemory/storage/models.py +0 -500
- package/src/superlocalmemory/storage/projection_outbox.py +0 -346
- package/src/superlocalmemory/storage/quantized_store.py +0 -280
- package/src/superlocalmemory/storage/read_connection.py +0 -115
- package/src/superlocalmemory/storage/retention_policy.py +0 -860
- package/src/superlocalmemory/storage/schema.py +0 -1108
- package/src/superlocalmemory/storage/schema_code_graph.py +0 -282
- package/src/superlocalmemory/storage/schema_v32.py +0 -382
- package/src/superlocalmemory/storage/schema_v3410.py +0 -159
- package/src/superlocalmemory/storage/schema_v3411.py +0 -149
- package/src/superlocalmemory/storage/schema_v343.py +0 -315
- package/src/superlocalmemory/storage/schema_v345.py +0 -109
- package/src/superlocalmemory/storage/schema_v347.py +0 -140
- package/src/superlocalmemory/storage/sqlite_vectors.py +0 -169
- package/src/superlocalmemory/storage/v2_migrator.py +0 -466
- package/src/superlocalmemory/storage/write_coordinator.py +0 -949
- package/src/superlocalmemory/storage/write_lock.py +0 -88
- package/src/superlocalmemory/summaries/__init__.py +0 -37
- package/src/superlocalmemory/summaries/base.py +0 -267
- package/src/superlocalmemory/summaries/daily_reflection.py +0 -340
- package/src/superlocalmemory/summaries/non_answer.py +0 -223
- package/src/superlocalmemory/summaries/project_work_log.py +0 -440
- package/src/superlocalmemory/summaries/session_summary.py +0 -311
- package/src/superlocalmemory/trust/__init__.py +0 -0
- package/src/superlocalmemory/trust/gate.py +0 -171
- package/src/superlocalmemory/trust/provenance.py +0 -124
- package/src/superlocalmemory/trust/scorer.py +0 -413
- package/src/superlocalmemory/trust/signals.py +0 -153
- package/src/superlocalmemory/ui/assets/slm-icon-white.svg +0 -64
- package/src/superlocalmemory/ui/assets/slm-icon.svg +0 -36
- package/src/superlocalmemory/ui/css/brain.css +0 -409
- package/src/superlocalmemory/ui/css/design-system.css +0 -696
- package/src/superlocalmemory/ui/css/legacy-dashboard.css +0 -663
- package/src/superlocalmemory/ui/css/neural-glass.css +0 -1599
- package/src/superlocalmemory/ui/css/od-bridge.css +0 -158
- package/src/superlocalmemory/ui/favicon.svg +0 -36
- package/src/superlocalmemory/ui/index.html +0 -1638
- package/src/superlocalmemory/ui/js/agents.js +0 -192
- package/src/superlocalmemory/ui/js/auto-settings.js +0 -624
- package/src/superlocalmemory/ui/js/brain.js +0 -1400
- package/src/superlocalmemory/ui/js/clusters.js +0 -326
- package/src/superlocalmemory/ui/js/compliance.js +0 -307
- package/src/superlocalmemory/ui/js/core.js +0 -566
- package/src/superlocalmemory/ui/js/dashboard.js +0 -503
- package/src/superlocalmemory/ui/js/event-delegation.js +0 -113
- package/src/superlocalmemory/ui/js/events.js +0 -178
- package/src/superlocalmemory/ui/js/fact-detail.js +0 -142
- package/src/superlocalmemory/ui/js/feedback.js +0 -339
- package/src/superlocalmemory/ui/js/graph-event-bus.js +0 -83
- package/src/superlocalmemory/ui/js/graph-filters.js +0 -220
- package/src/superlocalmemory/ui/js/graph-ui.js +0 -214
- package/src/superlocalmemory/ui/js/ide-status.js +0 -115
- package/src/superlocalmemory/ui/js/init.js +0 -54
- package/src/superlocalmemory/ui/js/knowledge-graph.js +0 -945
- package/src/superlocalmemory/ui/js/lifecycle.js +0 -387
- package/src/superlocalmemory/ui/js/math-health.js +0 -114
- package/src/superlocalmemory/ui/js/memories.js +0 -394
- package/src/superlocalmemory/ui/js/memory-chat.js +0 -371
- package/src/superlocalmemory/ui/js/memory-timeline.js +0 -265
- package/src/superlocalmemory/ui/js/modal.js +0 -733
- package/src/superlocalmemory/ui/js/ng-entities.js +0 -298
- package/src/superlocalmemory/ui/js/ng-health.js +0 -208
- package/src/superlocalmemory/ui/js/ng-ingestion.js +0 -203
- package/src/superlocalmemory/ui/js/ng-mesh.js +0 -374
- package/src/superlocalmemory/ui/js/ng-shell.js +0 -524
- package/src/superlocalmemory/ui/js/ng-skills.js +0 -663
- package/src/superlocalmemory/ui/js/od-agents.js +0 -588
- package/src/superlocalmemory/ui/js/od-auth-gate.js +0 -257
- package/src/superlocalmemory/ui/js/od-backup.js +0 -878
- package/src/superlocalmemory/ui/js/od-boundedloops.js +0 -324
- package/src/superlocalmemory/ui/js/od-brain.js +0 -1095
- package/src/superlocalmemory/ui/js/od-compliance-ext.js +0 -301
- package/src/superlocalmemory/ui/js/od-components.js +0 -147
- package/src/superlocalmemory/ui/js/od-entities.js +0 -622
- package/src/superlocalmemory/ui/js/od-graph.js +0 -776
- package/src/superlocalmemory/ui/js/od-health.js +0 -579
- package/src/superlocalmemory/ui/js/od-mcp.js +0 -508
- package/src/superlocalmemory/ui/js/od-memories.js +0 -1499
- package/src/superlocalmemory/ui/js/od-mesh.js +0 -645
- package/src/superlocalmemory/ui/js/od-operations.js +0 -1268
- package/src/superlocalmemory/ui/js/od-ops-health.js +0 -417
- package/src/superlocalmemory/ui/js/od-optimize.js +0 -828
- package/src/superlocalmemory/ui/js/od-settings.js +0 -1275
- package/src/superlocalmemory/ui/js/od-shell.js +0 -819
- package/src/superlocalmemory/ui/js/od-skills.js +0 -600
- package/src/superlocalmemory/ui/js/od-team.js +0 -265
- package/src/superlocalmemory/ui/js/optimize.js +0 -191
- package/src/superlocalmemory/ui/js/profiles.js +0 -362
- package/src/superlocalmemory/ui/js/quick-actions.js +0 -334
- package/src/superlocalmemory/ui/js/recall-lab.js +0 -373
- package/src/superlocalmemory/ui/js/search.js +0 -86
- package/src/superlocalmemory/ui/js/settings.js +0 -556
- package/src/superlocalmemory/ui/js/timeline.js +0 -62
- package/src/superlocalmemory/ui/js/trust-dashboard.js +0 -225
- package/src/superlocalmemory/ui/vendor/bootstrap-icons/bootstrap-icons.css +0 -2018
- package/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff +0 -0
- package/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff2 +0 -0
- package/src/superlocalmemory/ui/vendor/bootstrap.bundle.min.js +0 -7
- package/src/superlocalmemory/ui/vendor/bootstrap.min.css +0 -6
- package/src/superlocalmemory/ui/vendor/d3.v7.min.js +0 -2
- package/src/superlocalmemory/ui/vendor/graphology-library.min.js +0 -2
- package/src/superlocalmemory/ui/vendor/graphology.umd.min.js +0 -2
- package/src/superlocalmemory/ui/vendor/inter-ui/inter-variable.min.css +0 -8
- package/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable-Italic.woff2 +0 -0
- package/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable.woff2 +0 -0
- package/src/superlocalmemory/ui/vendor/sigma.min.js +0 -1
- package/src/superlocalmemory/vector/__init__.py +0 -9
- package/src/superlocalmemory/vector/lancedb_backend.py +0 -366
|
@@ -1,305 +0,0 @@
|
|
|
1
|
-
# Copyright (c) 2026 Varun Pratap Bhardwaj / Qualixar
|
|
2
|
-
# Licensed under AGPL-3.0-or-later
|
|
3
|
-
|
|
4
|
-
"""M028 — normalized fact/entity associations for O(1) ingest effects.
|
|
5
|
-
|
|
6
|
-
The table is both an association index and an idempotency ledger. Its
|
|
7
|
-
composite primary key means a fact can contribute to an entity's ``fact_count``
|
|
8
|
-
once, regardless of ingestion retries or how many operations converge on the
|
|
9
|
-
same consolidated fact.
|
|
10
|
-
"""
|
|
11
|
-
|
|
12
|
-
from __future__ import annotations
|
|
13
|
-
|
|
14
|
-
import json
|
|
15
|
-
import sqlite3
|
|
16
|
-
from datetime import UTC, datetime
|
|
17
|
-
from pathlib import Path
|
|
18
|
-
|
|
19
|
-
NAME = "M028_fact_entity_associations"
|
|
20
|
-
DB_TARGET = "memory"
|
|
21
|
-
|
|
22
|
-
DDL = """
|
|
23
|
-
CREATE TABLE IF NOT EXISTS fact_entity_associations (
|
|
24
|
-
profile_id TEXT NOT NULL,
|
|
25
|
-
fact_id TEXT NOT NULL,
|
|
26
|
-
entity_id TEXT NOT NULL,
|
|
27
|
-
first_operation_id TEXT NOT NULL DEFAULT '',
|
|
28
|
-
count_applied INTEGER NOT NULL DEFAULT 0
|
|
29
|
-
CHECK (count_applied IN (0, 1)),
|
|
30
|
-
created_at TEXT NOT NULL DEFAULT (
|
|
31
|
-
strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
|
|
32
|
-
),
|
|
33
|
-
PRIMARY KEY (profile_id, fact_id, entity_id),
|
|
34
|
-
FOREIGN KEY (fact_id) REFERENCES atomic_facts(fact_id) ON DELETE CASCADE,
|
|
35
|
-
FOREIGN KEY (entity_id)
|
|
36
|
-
REFERENCES canonical_entities(entity_id) ON DELETE CASCADE
|
|
37
|
-
);
|
|
38
|
-
CREATE INDEX IF NOT EXISTS idx_fact_entity_associations_entity
|
|
39
|
-
ON fact_entity_associations(profile_id, entity_id, fact_id);
|
|
40
|
-
CREATE TABLE IF NOT EXISTS fact_entity_association_repair_state (
|
|
41
|
-
repair_key TEXT PRIMARY KEY,
|
|
42
|
-
state TEXT NOT NULL DEFAULT 'pending'
|
|
43
|
-
CHECK (state IN ('pending', 'running', 'retrying', 'complete')),
|
|
44
|
-
target_fact_rowid INTEGER NOT NULL DEFAULT -1,
|
|
45
|
-
last_fact_rowid INTEGER NOT NULL DEFAULT 0,
|
|
46
|
-
scanned INTEGER NOT NULL DEFAULT 0,
|
|
47
|
-
inserted INTEGER NOT NULL DEFAULT 0,
|
|
48
|
-
last_error TEXT NOT NULL DEFAULT '',
|
|
49
|
-
updated_at TEXT NOT NULL
|
|
50
|
-
);
|
|
51
|
-
"""
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
def _table_exists(conn: sqlite3.Connection, table: str) -> bool:
|
|
55
|
-
return conn.execute(
|
|
56
|
-
"SELECT 1 FROM sqlite_master WHERE type='table' AND name=?",
|
|
57
|
-
(table,),
|
|
58
|
-
).fetchone() is not None
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
def apply(conn: sqlite3.Connection) -> None:
|
|
62
|
-
"""Install schema and capture a constant-time historical rowid boundary."""
|
|
63
|
-
conn.executescript(DDL)
|
|
64
|
-
association_columns = {
|
|
65
|
-
row[1]
|
|
66
|
-
for row in conn.execute(
|
|
67
|
-
"PRAGMA table_info(fact_entity_associations)"
|
|
68
|
-
).fetchall()
|
|
69
|
-
}
|
|
70
|
-
if "count_applied" not in association_columns:
|
|
71
|
-
conn.execute(
|
|
72
|
-
"ALTER TABLE fact_entity_associations "
|
|
73
|
-
"ADD COLUMN count_applied INTEGER NOT NULL DEFAULT 0 "
|
|
74
|
-
"CHECK (count_applied IN (0, 1))"
|
|
75
|
-
)
|
|
76
|
-
repair_columns = {
|
|
77
|
-
row[1]
|
|
78
|
-
for row in conn.execute(
|
|
79
|
-
"PRAGMA table_info(fact_entity_association_repair_state)"
|
|
80
|
-
).fetchall()
|
|
81
|
-
}
|
|
82
|
-
if "target_fact_rowid" not in repair_columns:
|
|
83
|
-
conn.execute(
|
|
84
|
-
"ALTER TABLE fact_entity_association_repair_state "
|
|
85
|
-
"ADD COLUMN target_fact_rowid INTEGER NOT NULL DEFAULT -1"
|
|
86
|
-
)
|
|
87
|
-
target = int(conn.execute(
|
|
88
|
-
"SELECT COALESCE(MAX(rowid), 0) FROM atomic_facts"
|
|
89
|
-
).fetchone()[0])
|
|
90
|
-
conn.executescript(
|
|
91
|
-
"INSERT OR IGNORE INTO fact_entity_association_repair_state "
|
|
92
|
-
"(repair_key,state,target_fact_rowid,updated_at) "
|
|
93
|
-
f"VALUES ('historical-backfill','pending',{target},'');"
|
|
94
|
-
"UPDATE fact_entity_association_repair_state "
|
|
95
|
-
f"SET target_fact_rowid={target} "
|
|
96
|
-
"WHERE repair_key='historical-backfill' AND target_fact_rowid < 0;"
|
|
97
|
-
)
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
def _now() -> str:
|
|
101
|
-
return datetime.now(UTC).isoformat()
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
def _connect_read(db_path: Path) -> sqlite3.Connection:
|
|
105
|
-
"""Read-only connection with system-default busy_timeout.
|
|
106
|
-
|
|
107
|
-
Concurrency fix (v3.8.4): busy_timeout raised from 5 s to match the
|
|
108
|
-
system default (10 s, env SLM_DB_BUSY_TIMEOUT_MS). Timeout raised from
|
|
109
|
-
5 s to 10 s for the same reason. Write connections now go through
|
|
110
|
-
memory_write() so they acquire get_write_lock() and never use this helper.
|
|
111
|
-
"""
|
|
112
|
-
import os
|
|
113
|
-
|
|
114
|
-
try:
|
|
115
|
-
ms = max(0, int(os.environ.get("SLM_DB_BUSY_TIMEOUT_MS", "10000")))
|
|
116
|
-
except (TypeError, ValueError):
|
|
117
|
-
ms = 10000
|
|
118
|
-
conn = sqlite3.connect(str(db_path), timeout=ms / 1000.0)
|
|
119
|
-
conn.row_factory = sqlite3.Row
|
|
120
|
-
conn.execute(f"PRAGMA busy_timeout={ms}")
|
|
121
|
-
conn.execute("PRAGMA foreign_keys=ON")
|
|
122
|
-
return conn
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
def get_repair_status(db_path: Path) -> dict[str, int | str]:
|
|
126
|
-
"""Read durable backfill progress without inferring it from schema."""
|
|
127
|
-
conn = _connect_read(Path(db_path))
|
|
128
|
-
try:
|
|
129
|
-
row = conn.execute(
|
|
130
|
-
"SELECT state,target_fact_rowid,last_fact_rowid,scanned,inserted,"
|
|
131
|
-
"last_error,updated_at "
|
|
132
|
-
"FROM fact_entity_association_repair_state "
|
|
133
|
-
"WHERE repair_key='historical-backfill'"
|
|
134
|
-
).fetchone()
|
|
135
|
-
if row is None:
|
|
136
|
-
return {
|
|
137
|
-
"state": "pending", "target_fact_rowid": 0,
|
|
138
|
-
"last_fact_rowid": 0,
|
|
139
|
-
"scanned": 0, "inserted": 0,
|
|
140
|
-
"last_error": "", "updated_at": "",
|
|
141
|
-
}
|
|
142
|
-
return dict(row)
|
|
143
|
-
finally:
|
|
144
|
-
conn.close()
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
def _entity_ids(raw: object) -> tuple[str, ...]:
|
|
148
|
-
try:
|
|
149
|
-
values = json.loads(str(raw or "[]"))
|
|
150
|
-
except (TypeError, ValueError):
|
|
151
|
-
return ()
|
|
152
|
-
if not isinstance(values, list):
|
|
153
|
-
return ()
|
|
154
|
-
return tuple(dict.fromkeys(str(value) for value in values if value))
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
def _repair_batch(conn: sqlite3.Connection, batch_size: int) -> dict[str, int | bool]:
|
|
158
|
-
"""Execute one backfill batch on *conn*.
|
|
159
|
-
|
|
160
|
-
Concurrency fix (v3.8.4): caller MUST hold the write lock via
|
|
161
|
-
memory_write() before calling this function. The explicit
|
|
162
|
-
``conn.execute("BEGIN IMMEDIATE")`` has been removed because:
|
|
163
|
-
|
|
164
|
-
* memory_write() already acquired get_write_lock() (Python-level
|
|
165
|
-
serialisation) — no other in-process writer can start.
|
|
166
|
-
* SQLite's implicit deferred transaction is promoted to a write
|
|
167
|
-
transaction on the first INSERT, which is equivalent to BEGIN
|
|
168
|
-
IMMEDIATE for in-process serialisation.
|
|
169
|
-
* The explicit BEGIN IMMEDIATE previously bypassed get_write_lock()
|
|
170
|
-
and would retry at the SQLite layer only (busy_timeout=5 s, now
|
|
171
|
-
10 s) without respecting the Python-level write lock order.
|
|
172
|
-
|
|
173
|
-
Transaction boundary (commit/rollback) is managed by memory_write().
|
|
174
|
-
"""
|
|
175
|
-
status = conn.execute(
|
|
176
|
-
"SELECT last_fact_rowid,target_fact_rowid "
|
|
177
|
-
"FROM fact_entity_association_repair_state "
|
|
178
|
-
"WHERE repair_key='historical-backfill'"
|
|
179
|
-
).fetchone()
|
|
180
|
-
if status is None:
|
|
181
|
-
return {"scanned": 0, "inserted": 0, "complete": True}
|
|
182
|
-
cursor = int(status["last_fact_rowid"] or 0)
|
|
183
|
-
target = int(status["target_fact_rowid"])
|
|
184
|
-
rows = conn.execute(
|
|
185
|
-
"SELECT rowid,fact_id,profile_id,canonical_entities_json "
|
|
186
|
-
"FROM atomic_facts WHERE rowid>? AND rowid<=? "
|
|
187
|
-
"ORDER BY rowid LIMIT ?",
|
|
188
|
-
(cursor, target, batch_size),
|
|
189
|
-
).fetchall()
|
|
190
|
-
if not rows:
|
|
191
|
-
conn.execute(
|
|
192
|
-
"UPDATE fact_entity_association_repair_state "
|
|
193
|
-
"SET state='complete',last_error='',updated_at=? "
|
|
194
|
-
"WHERE repair_key='historical-backfill'",
|
|
195
|
-
(_now(),),
|
|
196
|
-
)
|
|
197
|
-
return {"scanned": 0, "inserted": 0, "complete": True}
|
|
198
|
-
inserted = 0
|
|
199
|
-
for row in rows:
|
|
200
|
-
for entity_id in _entity_ids(row["canonical_entities_json"]):
|
|
201
|
-
result = conn.execute(
|
|
202
|
-
"INSERT OR IGNORE INTO fact_entity_associations "
|
|
203
|
-
"(profile_id,fact_id,entity_id,first_operation_id,"
|
|
204
|
-
"count_applied) "
|
|
205
|
-
"SELECT ?,?,?,?,? FROM canonical_entities "
|
|
206
|
-
"WHERE profile_id=? AND entity_id=?",
|
|
207
|
-
(
|
|
208
|
-
row["profile_id"], row["fact_id"], entity_id,
|
|
209
|
-
"migration-backfill", 0,
|
|
210
|
-
row["profile_id"], entity_id,
|
|
211
|
-
),
|
|
212
|
-
)
|
|
213
|
-
inserted += max(0, result.rowcount)
|
|
214
|
-
conn.execute(
|
|
215
|
-
"UPDATE fact_entity_association_repair_state SET "
|
|
216
|
-
"state='running',last_fact_rowid=?,scanned=scanned+?,"
|
|
217
|
-
"inserted=inserted+?,last_error='',updated_at=? "
|
|
218
|
-
"WHERE repair_key='historical-backfill'",
|
|
219
|
-
(int(rows[-1]["rowid"]), len(rows), inserted, _now()),
|
|
220
|
-
)
|
|
221
|
-
return {"scanned": len(rows), "inserted": inserted, "complete": False}
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
def repair_fact_entity_associations(
|
|
225
|
-
db_path: Path,
|
|
226
|
-
*,
|
|
227
|
-
batch_size: int = 250,
|
|
228
|
-
max_batches: int = 1,
|
|
229
|
-
) -> dict[str, int | bool]:
|
|
230
|
-
"""Run bounded, restartable short-transaction backfill batches.
|
|
231
|
-
|
|
232
|
-
Concurrency fix (v3.8.4): each batch is now wrapped in memory_write()
|
|
233
|
-
which acquires get_write_lock() (process-level write serialisation) and
|
|
234
|
-
sets the system-default busy_timeout (10 s) before opening the SQLite
|
|
235
|
-
connection. Previously the loop used a single raw _connect() (timeout=5,
|
|
236
|
-
busy_timeout=5000) without get_write_lock(), which bypassed in-process
|
|
237
|
-
write serialisation and could cause SQLITE_BUSY after only 5 s.
|
|
238
|
-
"""
|
|
239
|
-
from superlocalmemory.storage.memory_write import memory_write
|
|
240
|
-
|
|
241
|
-
if batch_size < 1 or max_batches < 1:
|
|
242
|
-
raise ValueError("batch_size and max_batches must be positive")
|
|
243
|
-
totals: dict[str, int | bool] = {"scanned": 0, "inserted": 0, "complete": False}
|
|
244
|
-
for _ in range(max_batches):
|
|
245
|
-
try:
|
|
246
|
-
with memory_write(Path(db_path)) as conn:
|
|
247
|
-
conn.execute("PRAGMA foreign_keys=ON")
|
|
248
|
-
result = _repair_batch(conn, batch_size)
|
|
249
|
-
totals["scanned"] += int(result["scanned"])
|
|
250
|
-
totals["inserted"] += int(result["inserted"])
|
|
251
|
-
totals["complete"] = bool(result["complete"])
|
|
252
|
-
except sqlite3.Error as exc:
|
|
253
|
-
# On error, record the retrying state in a separate short write.
|
|
254
|
-
try:
|
|
255
|
-
with memory_write(Path(db_path)) as econn:
|
|
256
|
-
econn.execute(
|
|
257
|
-
"UPDATE fact_entity_association_repair_state SET "
|
|
258
|
-
"state='retrying',last_error=?,updated_at=? "
|
|
259
|
-
"WHERE repair_key='historical-backfill'",
|
|
260
|
-
(type(exc).__name__, _now()),
|
|
261
|
-
)
|
|
262
|
-
except sqlite3.Error:
|
|
263
|
-
pass
|
|
264
|
-
raise
|
|
265
|
-
if totals["complete"]:
|
|
266
|
-
break
|
|
267
|
-
return totals
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
def verify(conn: sqlite3.Connection) -> bool:
|
|
271
|
-
"""Return true when the normalized association contract is indexed."""
|
|
272
|
-
if not (
|
|
273
|
-
_table_exists(conn, "fact_entity_associations")
|
|
274
|
-
and _table_exists(conn, "fact_entity_association_repair_state")
|
|
275
|
-
):
|
|
276
|
-
return False
|
|
277
|
-
association_columns = {
|
|
278
|
-
row[1]
|
|
279
|
-
for row in conn.execute(
|
|
280
|
-
"PRAGMA table_info(fact_entity_associations)"
|
|
281
|
-
).fetchall()
|
|
282
|
-
}
|
|
283
|
-
repair_columns = {
|
|
284
|
-
row[1]
|
|
285
|
-
for row in conn.execute(
|
|
286
|
-
"PRAGMA table_info(fact_entity_association_repair_state)"
|
|
287
|
-
).fetchall()
|
|
288
|
-
}
|
|
289
|
-
if (
|
|
290
|
-
"count_applied" not in association_columns
|
|
291
|
-
or "target_fact_rowid" not in repair_columns
|
|
292
|
-
):
|
|
293
|
-
return False
|
|
294
|
-
indexes = {
|
|
295
|
-
row[1]
|
|
296
|
-
for row in conn.execute(
|
|
297
|
-
"PRAGMA index_list(fact_entity_associations)"
|
|
298
|
-
).fetchall()
|
|
299
|
-
}
|
|
300
|
-
return "idx_fact_entity_associations_entity" in indexes
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
def repair(conn: sqlite3.Connection) -> None:
|
|
304
|
-
"""Restore additive M028 schema without recapturing its high-water mark."""
|
|
305
|
-
apply(conn)
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
# Copyright (c) 2026 Varun Pratap Bhardwaj / Qualixar
|
|
2
|
-
# Licensed under AGPL-3.0-or-later
|
|
3
|
-
|
|
4
|
-
"""M029 — profile-scoped indexes for large behavioral histories.
|
|
5
|
-
|
|
6
|
-
Dashboard reads always filter behavioral and outcome history by profile before
|
|
7
|
-
sorting or aggregating. These composite indexes keep those operations bounded
|
|
8
|
-
to one tenant as the shared database grows.
|
|
9
|
-
"""
|
|
10
|
-
|
|
11
|
-
from __future__ import annotations
|
|
12
|
-
|
|
13
|
-
import sqlite3
|
|
14
|
-
|
|
15
|
-
NAME = "M029_behavioral_history_indexes"
|
|
16
|
-
DB_TARGET = "memory"
|
|
17
|
-
|
|
18
|
-
DDL = """
|
|
19
|
-
CREATE INDEX IF NOT EXISTS idx_outcomes_profile_outcome_time
|
|
20
|
-
ON action_outcomes(profile_id, outcome, timestamp DESC);
|
|
21
|
-
CREATE INDEX IF NOT EXISTS idx_outcomes_profile_settled_time
|
|
22
|
-
ON action_outcomes(profile_id, settled, settled_at DESC);
|
|
23
|
-
CREATE INDEX IF NOT EXISTS idx_outcomes_profile_settled_cursor
|
|
24
|
-
ON action_outcomes(
|
|
25
|
-
profile_id, settled, COALESCE(settled_at, ''), outcome_id
|
|
26
|
-
);
|
|
27
|
-
CREATE INDEX IF NOT EXISTS idx_assertions_profile_confidence
|
|
28
|
-
ON behavioral_assertions(profile_id, confidence DESC);
|
|
29
|
-
CREATE INDEX IF NOT EXISTS idx_tool_events_profile_created
|
|
30
|
-
ON tool_events(profile_id, created_at DESC);
|
|
31
|
-
CREATE INDEX IF NOT EXISTS idx_soft_prompts_profile_active_category
|
|
32
|
-
ON soft_prompt_templates(profile_id, active, category, prompt_id);
|
|
33
|
-
"""
|
|
34
|
-
|
|
35
|
-
_INDEXES: tuple[tuple[str, str, tuple[str, ...]], ...] = (
|
|
36
|
-
(
|
|
37
|
-
"idx_outcomes_profile_outcome_time",
|
|
38
|
-
"action_outcomes",
|
|
39
|
-
("profile_id", "outcome", "timestamp"),
|
|
40
|
-
),
|
|
41
|
-
(
|
|
42
|
-
"idx_outcomes_profile_settled_time",
|
|
43
|
-
"action_outcomes",
|
|
44
|
-
("profile_id", "settled", "settled_at"),
|
|
45
|
-
),
|
|
46
|
-
(
|
|
47
|
-
"idx_outcomes_profile_settled_cursor",
|
|
48
|
-
"action_outcomes",
|
|
49
|
-
("profile_id", "settled", "settled_at", "outcome_id"),
|
|
50
|
-
),
|
|
51
|
-
(
|
|
52
|
-
"idx_assertions_profile_confidence",
|
|
53
|
-
"behavioral_assertions",
|
|
54
|
-
("profile_id", "confidence"),
|
|
55
|
-
),
|
|
56
|
-
(
|
|
57
|
-
"idx_tool_events_profile_created",
|
|
58
|
-
"tool_events",
|
|
59
|
-
("profile_id", "created_at"),
|
|
60
|
-
),
|
|
61
|
-
(
|
|
62
|
-
"idx_soft_prompts_profile_active_category",
|
|
63
|
-
"soft_prompt_templates",
|
|
64
|
-
("profile_id", "active", "category", "prompt_id"),
|
|
65
|
-
),
|
|
66
|
-
)
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
def _columns(conn: sqlite3.Connection, table: str) -> set[str]:
|
|
70
|
-
return {
|
|
71
|
-
str(row[1])
|
|
72
|
-
for row in conn.execute(f"PRAGMA table_info({table})").fetchall()
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
def _index_sql(name: str) -> str:
|
|
77
|
-
statements = {
|
|
78
|
-
"idx_outcomes_profile_outcome_time": (
|
|
79
|
-
"CREATE INDEX IF NOT EXISTS idx_outcomes_profile_outcome_time "
|
|
80
|
-
"ON action_outcomes(profile_id, outcome, timestamp DESC)"
|
|
81
|
-
),
|
|
82
|
-
"idx_outcomes_profile_settled_time": (
|
|
83
|
-
"CREATE INDEX IF NOT EXISTS idx_outcomes_profile_settled_time "
|
|
84
|
-
"ON action_outcomes(profile_id, settled, settled_at DESC)"
|
|
85
|
-
),
|
|
86
|
-
"idx_outcomes_profile_settled_cursor": (
|
|
87
|
-
"CREATE INDEX IF NOT EXISTS idx_outcomes_profile_settled_cursor "
|
|
88
|
-
"ON action_outcomes("
|
|
89
|
-
"profile_id, settled, COALESCE(settled_at, ''), outcome_id)"
|
|
90
|
-
),
|
|
91
|
-
"idx_assertions_profile_confidence": (
|
|
92
|
-
"CREATE INDEX IF NOT EXISTS idx_assertions_profile_confidence "
|
|
93
|
-
"ON behavioral_assertions(profile_id, confidence DESC)"
|
|
94
|
-
),
|
|
95
|
-
"idx_tool_events_profile_created": (
|
|
96
|
-
"CREATE INDEX IF NOT EXISTS idx_tool_events_profile_created "
|
|
97
|
-
"ON tool_events(profile_id, created_at DESC)"
|
|
98
|
-
),
|
|
99
|
-
"idx_soft_prompts_profile_active_category": (
|
|
100
|
-
"CREATE INDEX IF NOT EXISTS "
|
|
101
|
-
"idx_soft_prompts_profile_active_category "
|
|
102
|
-
"ON soft_prompt_templates(profile_id, active, category, prompt_id)"
|
|
103
|
-
),
|
|
104
|
-
}
|
|
105
|
-
return statements[name]
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
def apply(conn: sqlite3.Connection) -> None:
|
|
109
|
-
"""Add each index supported by the installed runtime schema.
|
|
110
|
-
|
|
111
|
-
Optional v3.2/v3.4.7 tables also declare these indexes in their owning
|
|
112
|
-
schema modules, so a partial bootstrap cannot permanently miss an index
|
|
113
|
-
when those tables are created later.
|
|
114
|
-
"""
|
|
115
|
-
for name, table, required_columns in _INDEXES:
|
|
116
|
-
if set(required_columns) <= _columns(conn, table):
|
|
117
|
-
conn.execute(_index_sql(name))
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
def verify(conn: sqlite3.Connection) -> bool:
|
|
121
|
-
"""Require each index whose backing table and columns are present."""
|
|
122
|
-
names = {
|
|
123
|
-
str(row[0])
|
|
124
|
-
for row in conn.execute(
|
|
125
|
-
"SELECT name FROM sqlite_master WHERE type='index'"
|
|
126
|
-
).fetchall()
|
|
127
|
-
}
|
|
128
|
-
return all(
|
|
129
|
-
name in names
|
|
130
|
-
for name, table, required_columns in _INDEXES
|
|
131
|
-
if set(required_columns) <= _columns(conn, table)
|
|
132
|
-
)
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
def repair(conn: sqlite3.Connection) -> None:
|
|
136
|
-
"""Create only indexes supported by the current optional schema."""
|
|
137
|
-
apply(conn)
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
# Copyright (c) 2026 Varun Pratap Bhardwaj / Qualixar
|
|
2
|
-
# Licensed under AGPL-3.0-or-later
|
|
3
|
-
|
|
4
|
-
"""M030 — page-first Entity Explorer indexes for large installations."""
|
|
5
|
-
|
|
6
|
-
from __future__ import annotations
|
|
7
|
-
|
|
8
|
-
import sqlite3
|
|
9
|
-
|
|
10
|
-
NAME = "M030_entity_explorer_indexes"
|
|
11
|
-
DB_TARGET = "memory"
|
|
12
|
-
|
|
13
|
-
DDL = """
|
|
14
|
-
CREATE INDEX IF NOT EXISTS idx_entities_profile_fact_count_id
|
|
15
|
-
ON canonical_entities(profile_id, fact_count DESC, entity_id ASC);
|
|
16
|
-
CREATE INDEX IF NOT EXISTS idx_entities_profile_type_fact_count_id
|
|
17
|
-
ON canonical_entities(
|
|
18
|
-
profile_id, entity_type COLLATE NOCASE, fact_count DESC, entity_id ASC
|
|
19
|
-
);
|
|
20
|
-
CREATE INDEX IF NOT EXISTS idx_entity_profiles_profile_entity_rank
|
|
21
|
-
ON entity_profiles(
|
|
22
|
-
profile_id, entity_id, last_compiled_at DESC,
|
|
23
|
-
project_name COLLATE NOCASE
|
|
24
|
-
);
|
|
25
|
-
"""
|
|
26
|
-
|
|
27
|
-
_INDEXES: tuple[tuple[str, str, tuple[str, ...], str], ...] = (
|
|
28
|
-
(
|
|
29
|
-
"idx_entities_profile_fact_count_id",
|
|
30
|
-
"canonical_entities",
|
|
31
|
-
("profile_id", "fact_count", "entity_id"),
|
|
32
|
-
"CREATE INDEX IF NOT EXISTS idx_entities_profile_fact_count_id "
|
|
33
|
-
"ON canonical_entities(profile_id, fact_count DESC, entity_id ASC)",
|
|
34
|
-
),
|
|
35
|
-
(
|
|
36
|
-
"idx_entities_profile_type_fact_count_id",
|
|
37
|
-
"canonical_entities",
|
|
38
|
-
("profile_id", "entity_type", "fact_count", "entity_id"),
|
|
39
|
-
"CREATE INDEX IF NOT EXISTS idx_entities_profile_type_fact_count_id "
|
|
40
|
-
"ON canonical_entities("
|
|
41
|
-
"profile_id, entity_type COLLATE NOCASE, fact_count DESC, entity_id ASC"
|
|
42
|
-
")",
|
|
43
|
-
),
|
|
44
|
-
(
|
|
45
|
-
"idx_entity_profiles_profile_entity_rank",
|
|
46
|
-
"entity_profiles",
|
|
47
|
-
(
|
|
48
|
-
"profile_id",
|
|
49
|
-
"entity_id",
|
|
50
|
-
"last_compiled_at",
|
|
51
|
-
"project_name",
|
|
52
|
-
),
|
|
53
|
-
"CREATE INDEX IF NOT EXISTS idx_entity_profiles_profile_entity_rank "
|
|
54
|
-
"ON entity_profiles("
|
|
55
|
-
"profile_id, entity_id, last_compiled_at DESC, "
|
|
56
|
-
"project_name COLLATE NOCASE"
|
|
57
|
-
")",
|
|
58
|
-
),
|
|
59
|
-
)
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
def _columns(conn: sqlite3.Connection, table: str) -> set[str]:
|
|
63
|
-
return {
|
|
64
|
-
str(row[1])
|
|
65
|
-
for row in conn.execute(f"PRAGMA table_info({table})").fetchall()
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
def apply(conn: sqlite3.Connection) -> None:
|
|
70
|
-
"""Create every index supported by the installed optional schema."""
|
|
71
|
-
for _, table, required_columns, sql in _INDEXES:
|
|
72
|
-
if set(required_columns) <= _columns(conn, table):
|
|
73
|
-
conn.execute(sql)
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
def verify(conn: sqlite3.Connection) -> bool:
|
|
77
|
-
"""Require indexes only when their complete backing schema exists."""
|
|
78
|
-
names = {
|
|
79
|
-
str(row[0])
|
|
80
|
-
for row in conn.execute(
|
|
81
|
-
"SELECT name FROM sqlite_master WHERE type='index'"
|
|
82
|
-
).fetchall()
|
|
83
|
-
}
|
|
84
|
-
return all(
|
|
85
|
-
name in names
|
|
86
|
-
for name, table, required_columns, _ in _INDEXES
|
|
87
|
-
if set(required_columns) <= _columns(conn, table)
|
|
88
|
-
)
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
def repair(conn: sqlite3.Connection) -> None:
|
|
92
|
-
"""Safely restore a dropped index without replaying data migrations."""
|
|
93
|
-
apply(conn)
|
|
@@ -1,80 +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
|
-
"""M031 — dead-letter queue for exhausted ingestion operations (Fix E, issue #77).
|
|
6
|
-
|
|
7
|
-
Additive migration: creates dead_letter_operations if not present.
|
|
8
|
-
Existing rows in ingestion_operations are unaffected.
|
|
9
|
-
|
|
10
|
-
When an M018 ingestion operation exhausts _MAX_AUTOMATIC_MATERIALIZATION_ATTEMPTS
|
|
11
|
-
(10) it previously remained silently in FAILED state — invisible to operators and
|
|
12
|
-
unreachable by the materialiser. This table gives operators a persistent,
|
|
13
|
-
inspectable record of every poisoned operation: original content, error, attempt
|
|
14
|
-
count, timestamps, and profile scope.
|
|
15
|
-
|
|
16
|
-
Schema design:
|
|
17
|
-
- original_op_id references ingestion_operations.operation_id (soft ref — no FK
|
|
18
|
-
so that dead-lettered rows survive if the source row is later cleaned up).
|
|
19
|
-
- profile_id allows per-profile DLQ dashboards.
|
|
20
|
-
- dead_lettered_at defaults to the current epoch for point-in-time auditing.
|
|
21
|
-
- No TTL/expiry here — retention policy belongs to a future maintenance sweep.
|
|
22
|
-
"""
|
|
23
|
-
|
|
24
|
-
from __future__ import annotations
|
|
25
|
-
|
|
26
|
-
import sqlite3
|
|
27
|
-
|
|
28
|
-
NAME = "M031_dead_letter_operations"
|
|
29
|
-
DB_TARGET = "memory"
|
|
30
|
-
|
|
31
|
-
DDL = """
|
|
32
|
-
CREATE TABLE IF NOT EXISTS dead_letter_operations (
|
|
33
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
34
|
-
original_op_id TEXT NOT NULL,
|
|
35
|
-
operation_type TEXT NOT NULL DEFAULT 'M018',
|
|
36
|
-
content TEXT,
|
|
37
|
-
metadata_json TEXT,
|
|
38
|
-
error TEXT,
|
|
39
|
-
attempt_count INTEGER,
|
|
40
|
-
first_attempt_at REAL,
|
|
41
|
-
dead_lettered_at REAL NOT NULL DEFAULT (unixepoch('now')),
|
|
42
|
-
profile_id TEXT
|
|
43
|
-
);
|
|
44
|
-
CREATE INDEX IF NOT EXISTS idx_dlq_profile
|
|
45
|
-
ON dead_letter_operations (profile_id);
|
|
46
|
-
CREATE INDEX IF NOT EXISTS idx_dlq_op_id
|
|
47
|
-
ON dead_letter_operations (original_op_id);
|
|
48
|
-
"""
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
def apply(conn: sqlite3.Connection) -> None:
|
|
52
|
-
"""Create the dead_letter_operations table and indexes idempotently."""
|
|
53
|
-
conn.executescript(DDL)
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
def verify(conn: sqlite3.Connection) -> bool:
|
|
57
|
-
"""Return True only when the complete M031 contract is present."""
|
|
58
|
-
table = conn.execute(
|
|
59
|
-
"SELECT 1 FROM sqlite_master WHERE type='table' "
|
|
60
|
-
"AND name='dead_letter_operations'"
|
|
61
|
-
).fetchone()
|
|
62
|
-
if table is None:
|
|
63
|
-
return False
|
|
64
|
-
columns = {
|
|
65
|
-
row[1]
|
|
66
|
-
for row in conn.execute(
|
|
67
|
-
"PRAGMA table_info(dead_letter_operations)"
|
|
68
|
-
).fetchall()
|
|
69
|
-
}
|
|
70
|
-
required = {
|
|
71
|
-
"id",
|
|
72
|
-
"original_op_id",
|
|
73
|
-
"operation_type",
|
|
74
|
-
"content",
|
|
75
|
-
"error",
|
|
76
|
-
"attempt_count",
|
|
77
|
-
"dead_lettered_at",
|
|
78
|
-
"profile_id",
|
|
79
|
-
}
|
|
80
|
-
return required <= columns
|