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,79 +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.6.18
|
|
4
|
-
|
|
5
|
-
"""M017 — scope column on ccq_consolidated_blocks.
|
|
6
|
-
|
|
7
|
-
The cognitive-consolidation queue table (``ccq_consolidated_blocks``) was
|
|
8
|
-
created before the M016 multi-scope migration and therefore has no ``scope``
|
|
9
|
-
column. Without it, consolidation summaries are always stored as
|
|
10
|
-
``personal`` regardless of the source facts' scope — a silent data-loss edge
|
|
11
|
-
case when a user has opted into global or shared memory.
|
|
12
|
-
|
|
13
|
-
Fix: add a ``scope TEXT NOT NULL DEFAULT 'personal'`` column plus a
|
|
14
|
-
``(profile_id, scope)`` covering index for scope-filtered queries.
|
|
15
|
-
|
|
16
|
-
Deferred (like M006, M011, M013, M016): the CCQ table is created by the
|
|
17
|
-
engine, not by migration DDL, so we apply after engine init via
|
|
18
|
-
``apply_deferred``.
|
|
19
|
-
|
|
20
|
-
Author: Varun Pratap Bhardwaj / Qualixar
|
|
21
|
-
"""
|
|
22
|
-
|
|
23
|
-
from __future__ import annotations
|
|
24
|
-
|
|
25
|
-
import sqlite3
|
|
26
|
-
|
|
27
|
-
NAME = "M017_ccq_scope_column"
|
|
28
|
-
DB_TARGET = "memory"
|
|
29
|
-
|
|
30
|
-
TABLE = "ccq_consolidated_blocks"
|
|
31
|
-
|
|
32
|
-
DDL = (
|
|
33
|
-
f"ALTER TABLE {TABLE} ADD COLUMN scope TEXT NOT NULL DEFAULT 'personal';"
|
|
34
|
-
f"CREATE INDEX IF NOT EXISTS idx_{TABLE}_scope ON {TABLE}(scope);"
|
|
35
|
-
f"CREATE INDEX IF NOT EXISTS idx_{TABLE}_profile_scope ON {TABLE}(profile_id, scope);"
|
|
36
|
-
)
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
def _table_exists(conn: sqlite3.Connection, table: str) -> bool:
|
|
40
|
-
return conn.execute(
|
|
41
|
-
"SELECT 1 FROM sqlite_master WHERE type='table' AND name=?", (table,)
|
|
42
|
-
).fetchone() is not None
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
def _column_names(conn: sqlite3.Connection, table: str) -> set[str]:
|
|
46
|
-
return {r[1] for r in conn.execute(f"PRAGMA table_info({table})").fetchall()}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
def apply(conn: sqlite3.Connection) -> None:
|
|
50
|
-
"""Idempotently add scope column + indexes to ccq_consolidated_blocks.
|
|
51
|
-
|
|
52
|
-
Skips silently when the table doesn't exist yet (engine hasn't created it)
|
|
53
|
-
or when the column is already present (re-apply or fresh install).
|
|
54
|
-
"""
|
|
55
|
-
if not _table_exists(conn, TABLE):
|
|
56
|
-
return
|
|
57
|
-
cols = _column_names(conn, TABLE)
|
|
58
|
-
if "scope" not in cols:
|
|
59
|
-
conn.execute(
|
|
60
|
-
f"ALTER TABLE {TABLE} ADD COLUMN scope TEXT NOT NULL DEFAULT 'personal'"
|
|
61
|
-
)
|
|
62
|
-
conn.execute(f"CREATE INDEX IF NOT EXISTS idx_{TABLE}_scope ON {TABLE}(scope)")
|
|
63
|
-
conn.execute(
|
|
64
|
-
f"CREATE INDEX IF NOT EXISTS idx_{TABLE}_profile_scope ON {TABLE}(profile_id, scope)"
|
|
65
|
-
)
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
def verify(conn: sqlite3.Connection) -> bool:
|
|
69
|
-
"""Applied when ccq_consolidated_blocks has the scope column and index."""
|
|
70
|
-
if not _table_exists(conn, TABLE):
|
|
71
|
-
return True # table absent — apply() skips it; nothing to verify
|
|
72
|
-
cols = _column_names(conn, TABLE)
|
|
73
|
-
if "scope" not in cols:
|
|
74
|
-
return False
|
|
75
|
-
idx = conn.execute(
|
|
76
|
-
"SELECT 1 FROM sqlite_master WHERE type='index' AND name=?",
|
|
77
|
-
(f"idx_{TABLE}_scope",),
|
|
78
|
-
).fetchone()
|
|
79
|
-
return idx is not None
|
|
@@ -1,120 +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
|
-
"""M018 — durable canonical-ingestion operation records.
|
|
6
|
-
|
|
7
|
-
This is the EXPAND phase of the V3.7 ingestion migration. It is additive:
|
|
8
|
-
legacy ``pending_memories`` and ``ingestion_log`` remain untouched until the
|
|
9
|
-
backfill and dual-write comparison prove the new contract.
|
|
10
|
-
"""
|
|
11
|
-
|
|
12
|
-
from __future__ import annotations
|
|
13
|
-
|
|
14
|
-
import sqlite3
|
|
15
|
-
|
|
16
|
-
NAME = "M018_ingestion_operations"
|
|
17
|
-
DB_TARGET = "memory"
|
|
18
|
-
|
|
19
|
-
DDL = """
|
|
20
|
-
CREATE TABLE IF NOT EXISTS ingestion_operations (
|
|
21
|
-
operation_id TEXT PRIMARY KEY,
|
|
22
|
-
profile_id TEXT NOT NULL,
|
|
23
|
-
source_type TEXT NOT NULL,
|
|
24
|
-
idempotency_key TEXT NOT NULL,
|
|
25
|
-
source_hash TEXT NOT NULL,
|
|
26
|
-
raw_content TEXT NOT NULL,
|
|
27
|
-
raw_metadata_json TEXT NOT NULL DEFAULT '{}',
|
|
28
|
-
scope TEXT NOT NULL DEFAULT 'personal'
|
|
29
|
-
CHECK (scope IN ('personal', 'project', 'shared', 'global')),
|
|
30
|
-
shared_with_json TEXT NOT NULL DEFAULT '[]',
|
|
31
|
-
trusted_actor_id TEXT NOT NULL DEFAULT '',
|
|
32
|
-
session_id TEXT NOT NULL DEFAULT '',
|
|
33
|
-
session_date TEXT NOT NULL DEFAULT '',
|
|
34
|
-
speaker TEXT NOT NULL DEFAULT '',
|
|
35
|
-
role TEXT NOT NULL DEFAULT 'user',
|
|
36
|
-
state TEXT NOT NULL DEFAULT 'raw'
|
|
37
|
-
CHECK (state IN ('raw', 'queryable', 'enriching', 'complete', 'failed')),
|
|
38
|
-
queryable_fact_ids_json TEXT NOT NULL DEFAULT '[]',
|
|
39
|
-
final_fact_ids_json TEXT NOT NULL DEFAULT '[]',
|
|
40
|
-
derivation_version TEXT NOT NULL DEFAULT '',
|
|
41
|
-
derivation_state_json TEXT NOT NULL DEFAULT '{}',
|
|
42
|
-
lease_owner TEXT NOT NULL DEFAULT '',
|
|
43
|
-
lease_expires_at REAL NOT NULL DEFAULT 0,
|
|
44
|
-
next_retry_at REAL NOT NULL DEFAULT 0,
|
|
45
|
-
attempt_count INTEGER NOT NULL DEFAULT 0 CHECK (attempt_count >= 0),
|
|
46
|
-
last_error TEXT NOT NULL DEFAULT '',
|
|
47
|
-
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
48
|
-
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
49
|
-
UNIQUE(profile_id, source_type, idempotency_key)
|
|
50
|
-
);
|
|
51
|
-
CREATE INDEX IF NOT EXISTS idx_ingestion_operations_state
|
|
52
|
-
ON ingestion_operations(state, updated_at);
|
|
53
|
-
CREATE INDEX IF NOT EXISTS idx_ingestion_operations_source_hash
|
|
54
|
-
ON ingestion_operations(profile_id, source_hash);
|
|
55
|
-
"""
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
def apply(conn: sqlite3.Connection) -> None:
|
|
59
|
-
"""Create the additive operation table and indexes idempotently."""
|
|
60
|
-
conn.executescript(DDL)
|
|
61
|
-
columns = {
|
|
62
|
-
row[1]
|
|
63
|
-
for row in conn.execute("PRAGMA table_info(ingestion_operations)").fetchall()
|
|
64
|
-
}
|
|
65
|
-
additive_columns = {
|
|
66
|
-
"derivation_state_json": "TEXT NOT NULL DEFAULT '{}'",
|
|
67
|
-
"session_date": "TEXT NOT NULL DEFAULT ''",
|
|
68
|
-
"speaker": "TEXT NOT NULL DEFAULT ''",
|
|
69
|
-
"role": "TEXT NOT NULL DEFAULT 'user'",
|
|
70
|
-
"lease_owner": "TEXT NOT NULL DEFAULT ''",
|
|
71
|
-
"lease_expires_at": "REAL NOT NULL DEFAULT 0",
|
|
72
|
-
"next_retry_at": "REAL NOT NULL DEFAULT 0",
|
|
73
|
-
}
|
|
74
|
-
for name, declaration in additive_columns.items():
|
|
75
|
-
if name not in columns:
|
|
76
|
-
conn.execute(
|
|
77
|
-
f"ALTER TABLE ingestion_operations ADD COLUMN {name} {declaration}"
|
|
78
|
-
)
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
def verify(conn: sqlite3.Connection) -> bool:
|
|
82
|
-
"""Return true only when the complete M018 contract is present."""
|
|
83
|
-
table = conn.execute(
|
|
84
|
-
"SELECT 1 FROM sqlite_master WHERE type='table' "
|
|
85
|
-
"AND name='ingestion_operations'"
|
|
86
|
-
).fetchone()
|
|
87
|
-
if table is None:
|
|
88
|
-
return False
|
|
89
|
-
columns = {
|
|
90
|
-
row[1]
|
|
91
|
-
for row in conn.execute("PRAGMA table_info(ingestion_operations)").fetchall()
|
|
92
|
-
}
|
|
93
|
-
required = {
|
|
94
|
-
"operation_id",
|
|
95
|
-
"profile_id",
|
|
96
|
-
"source_type",
|
|
97
|
-
"idempotency_key",
|
|
98
|
-
"source_hash",
|
|
99
|
-
"raw_content",
|
|
100
|
-
"state",
|
|
101
|
-
"queryable_fact_ids_json",
|
|
102
|
-
"final_fact_ids_json",
|
|
103
|
-
"derivation_version",
|
|
104
|
-
"derivation_state_json",
|
|
105
|
-
"session_date",
|
|
106
|
-
"speaker",
|
|
107
|
-
"role",
|
|
108
|
-
"lease_owner",
|
|
109
|
-
"lease_expires_at",
|
|
110
|
-
"next_retry_at",
|
|
111
|
-
"attempt_count",
|
|
112
|
-
"last_error",
|
|
113
|
-
}
|
|
114
|
-
if not required <= columns:
|
|
115
|
-
return False
|
|
116
|
-
indexes = {
|
|
117
|
-
row[1]
|
|
118
|
-
for row in conn.execute("PRAGMA index_list(ingestion_operations)").fetchall()
|
|
119
|
-
}
|
|
120
|
-
return "idx_ingestion_operations_state" in indexes
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
# Copyright (c) 2026 Varun Pratap Bhardwaj / Qualixar
|
|
2
|
-
# Licensed under AGPL-3.0-or-later - see LICENSE file
|
|
3
|
-
|
|
4
|
-
"""M019 — durable, non-fabricated derivation lineage."""
|
|
5
|
-
|
|
6
|
-
from __future__ import annotations
|
|
7
|
-
|
|
8
|
-
import sqlite3
|
|
9
|
-
|
|
10
|
-
NAME = "M019_derivation_lineage"
|
|
11
|
-
DB_TARGET = "memory"
|
|
12
|
-
|
|
13
|
-
DDL = """
|
|
14
|
-
CREATE TABLE IF NOT EXISTS derivation_lineage (
|
|
15
|
-
lineage_id TEXT PRIMARY KEY,
|
|
16
|
-
profile_id TEXT NOT NULL,
|
|
17
|
-
object_type TEXT NOT NULL,
|
|
18
|
-
object_id TEXT NOT NULL,
|
|
19
|
-
operation_id TEXT NOT NULL DEFAULT '',
|
|
20
|
-
derivation_version TEXT NOT NULL DEFAULT '',
|
|
21
|
-
source_status TEXT NOT NULL
|
|
22
|
-
CHECK (source_status IN ('exact', 'derived_from_facts', 'unresolved', 'not_applicable')),
|
|
23
|
-
source_start INTEGER,
|
|
24
|
-
source_end INTEGER,
|
|
25
|
-
source_text_sha256 TEXT NOT NULL DEFAULT '',
|
|
26
|
-
source_fact_ids_json TEXT NOT NULL DEFAULT '[]',
|
|
27
|
-
unresolved_reason TEXT NOT NULL DEFAULT '',
|
|
28
|
-
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
|
|
29
|
-
UNIQUE(profile_id, object_type, object_id, operation_id)
|
|
30
|
-
);
|
|
31
|
-
CREATE INDEX IF NOT EXISTS idx_derivation_lineage_profile
|
|
32
|
-
ON derivation_lineage(profile_id, object_type, object_id);
|
|
33
|
-
CREATE INDEX IF NOT EXISTS idx_derivation_lineage_operation
|
|
34
|
-
ON derivation_lineage(operation_id);
|
|
35
|
-
"""
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
def apply(conn: sqlite3.Connection) -> None:
|
|
39
|
-
conn.executescript(DDL)
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
def verify(conn: sqlite3.Connection) -> bool:
|
|
43
|
-
table = conn.execute(
|
|
44
|
-
"SELECT 1 FROM sqlite_master WHERE type='table' AND name='derivation_lineage'"
|
|
45
|
-
).fetchone()
|
|
46
|
-
if table is None:
|
|
47
|
-
return False
|
|
48
|
-
columns = {row[1] for row in conn.execute("PRAGMA table_info(derivation_lineage)")}
|
|
49
|
-
return {
|
|
50
|
-
"lineage_id", "profile_id", "object_type", "object_id",
|
|
51
|
-
"operation_id", "derivation_version", "source_status",
|
|
52
|
-
"source_start", "source_end", "source_text_sha256",
|
|
53
|
-
"source_fact_ids_json", "unresolved_reason",
|
|
54
|
-
} <= columns
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
# Copyright (c) 2026 Varun Pratap Bhardwaj / Qualixar
|
|
2
|
-
# Licensed under AGPL-3.0-or-later - see LICENSE file
|
|
3
|
-
|
|
4
|
-
"""M020 — forward-only integrity repair for learned model state.
|
|
5
|
-
|
|
6
|
-
M002's DDL shipped before model-state SHA values were backfilled. Do not
|
|
7
|
-
modify M002: its stored hash is part of every existing user's upgrade record.
|
|
8
|
-
This migration deterministically fills only missing digests and never changes
|
|
9
|
-
the model payload or ranking metadata.
|
|
10
|
-
"""
|
|
11
|
-
|
|
12
|
-
from __future__ import annotations
|
|
13
|
-
|
|
14
|
-
import hashlib
|
|
15
|
-
import sqlite3
|
|
16
|
-
|
|
17
|
-
NAME = "M020_model_state_integrity"
|
|
18
|
-
DB_TARGET = "learning"
|
|
19
|
-
|
|
20
|
-
# The runner records a stable fingerprint even though this migration uses a
|
|
21
|
-
# Python apply function for binary-safe SHA computation.
|
|
22
|
-
DDL = "-- M020: backfill missing learning_model_state.bytes_sha256\n"
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
def verify(conn: sqlite3.Connection) -> bool:
|
|
26
|
-
"""Return True only when every persisted model has an integrity digest."""
|
|
27
|
-
try:
|
|
28
|
-
missing = conn.execute(
|
|
29
|
-
"SELECT 1 FROM learning_model_state "
|
|
30
|
-
"WHERE bytes_sha256 = '' OR bytes_sha256 IS NULL LIMIT 1"
|
|
31
|
-
).fetchone()
|
|
32
|
-
except sqlite3.Error:
|
|
33
|
-
return False
|
|
34
|
-
return missing is None
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
def apply(conn: sqlite3.Connection) -> None:
|
|
38
|
-
"""Backfill SHA-256 values without modifying model bytes or metadata."""
|
|
39
|
-
rows = conn.execute(
|
|
40
|
-
"SELECT id, state_bytes FROM learning_model_state "
|
|
41
|
-
"WHERE bytes_sha256 = '' OR bytes_sha256 IS NULL"
|
|
42
|
-
).fetchall()
|
|
43
|
-
updates = [
|
|
44
|
-
(hashlib.sha256(state_bytes).hexdigest(), row_id)
|
|
45
|
-
for row_id, state_bytes in rows
|
|
46
|
-
if state_bytes is not None
|
|
47
|
-
]
|
|
48
|
-
if updates:
|
|
49
|
-
conn.executemany(
|
|
50
|
-
"UPDATE learning_model_state SET bytes_sha256 = ? WHERE id = ?",
|
|
51
|
-
updates,
|
|
52
|
-
)
|
|
@@ -1,108 +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 — per-profile isolation (I-4)
|
|
4
|
-
|
|
5
|
-
"""M021 — per-profile ingestion_log dedup (memory.db, deferred).
|
|
6
|
-
|
|
7
|
-
``ingestion_log`` is the compatibility ledger for external-adapter ingests. Its
|
|
8
|
-
dedup UNIQUE constraint was global — ``UNIQUE(source_type, dedup_key)`` — so a
|
|
9
|
-
second profile ingesting the same source key could not record its own ledger
|
|
10
|
-
row (INSERT OR IGNORE silently no-op'd), losing that profile's fact_ids in the
|
|
11
|
-
ledger. (The authoritative dedup already moved to the M018 ingestion_operations
|
|
12
|
-
table, which is profile-scoped, so the memory itself is not starved — this
|
|
13
|
-
migration fixes the ledger so per-profile bookkeeping is complete.)
|
|
14
|
-
|
|
15
|
-
SQLite cannot alter a UNIQUE constraint in place, so the table is rebuilt:
|
|
16
|
-
rename → create with profile_id + UNIQUE(profile_id, source_type, dedup_key) →
|
|
17
|
-
copy rows backfilling profile_id='default' → drop old. Idempotent and tolerant
|
|
18
|
-
of a missing table (fresh installs create it correctly via schema_v343).
|
|
19
|
-
|
|
20
|
-
Deferred because ingestion_log is created at engine init (apply_v343_schema),
|
|
21
|
-
after ``apply_all`` runs — same reason as M016.
|
|
22
|
-
|
|
23
|
-
Author: Varun Pratap Bhardwaj / Qualixar
|
|
24
|
-
"""
|
|
25
|
-
|
|
26
|
-
from __future__ import annotations
|
|
27
|
-
|
|
28
|
-
import sqlite3
|
|
29
|
-
|
|
30
|
-
NAME = "M021_ingestion_log_profile"
|
|
31
|
-
DB_TARGET = "memory"
|
|
32
|
-
|
|
33
|
-
# Documentation + drift hash. apply() below is the authoritative executor.
|
|
34
|
-
DDL = (
|
|
35
|
-
"ALTER TABLE ingestion_log ADD COLUMN profile_id TEXT NOT NULL DEFAULT 'default';"
|
|
36
|
-
"-- rebuild for UNIQUE(profile_id, source_type, dedup_key)"
|
|
37
|
-
)
|
|
38
|
-
|
|
39
|
-
_NEW_TABLE = """
|
|
40
|
-
CREATE TABLE ingestion_log (
|
|
41
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
42
|
-
profile_id TEXT NOT NULL DEFAULT 'default',
|
|
43
|
-
source_type TEXT NOT NULL,
|
|
44
|
-
dedup_key TEXT NOT NULL,
|
|
45
|
-
fact_ids TEXT DEFAULT '[]',
|
|
46
|
-
metadata TEXT DEFAULT '{}',
|
|
47
|
-
status TEXT DEFAULT 'ingested',
|
|
48
|
-
ingested_at TEXT NOT NULL,
|
|
49
|
-
UNIQUE(profile_id, source_type, dedup_key)
|
|
50
|
-
)
|
|
51
|
-
"""
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
def _cols(conn: sqlite3.Connection, table: str) -> set[str]:
|
|
55
|
-
return {r[1] for r in conn.execute(f"PRAGMA table_info({table})").fetchall()}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
def _table_exists(conn: sqlite3.Connection, table: str) -> bool:
|
|
59
|
-
return conn.execute(
|
|
60
|
-
"SELECT 1 FROM sqlite_master WHERE type='table' AND name=?", (table,)
|
|
61
|
-
).fetchone() is not None
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
def apply(conn: sqlite3.Connection) -> None:
|
|
65
|
-
"""Rebuild ingestion_log with a profile-scoped dedup constraint.
|
|
66
|
-
|
|
67
|
-
No-op on a fresh install (table already has profile_id) or when the table
|
|
68
|
-
doesn't exist yet. Existing rows backfill to the 'default' profile.
|
|
69
|
-
"""
|
|
70
|
-
if not _table_exists(conn, "ingestion_log"):
|
|
71
|
-
return
|
|
72
|
-
if "profile_id" in _cols(conn, "ingestion_log"):
|
|
73
|
-
return
|
|
74
|
-
|
|
75
|
-
conn.execute("ALTER TABLE ingestion_log RENAME TO _ingestion_log_old")
|
|
76
|
-
conn.executescript(_NEW_TABLE)
|
|
77
|
-
# Copy legacy rows under the 'default' profile. Column set matches the
|
|
78
|
-
# pre-migration schema (id, source_type, dedup_key, fact_ids, metadata,
|
|
79
|
-
# status, ingested_at).
|
|
80
|
-
old_cols = _cols(conn, "_ingestion_log_old")
|
|
81
|
-
has_meta = "metadata" in old_cols
|
|
82
|
-
if has_meta:
|
|
83
|
-
conn.execute(
|
|
84
|
-
"INSERT INTO ingestion_log "
|
|
85
|
-
"(id, profile_id, source_type, dedup_key, fact_ids, metadata, "
|
|
86
|
-
" status, ingested_at) "
|
|
87
|
-
"SELECT id, 'default', source_type, dedup_key, fact_ids, metadata, "
|
|
88
|
-
" status, ingested_at FROM _ingestion_log_old"
|
|
89
|
-
)
|
|
90
|
-
else:
|
|
91
|
-
conn.execute(
|
|
92
|
-
"INSERT INTO ingestion_log "
|
|
93
|
-
"(id, profile_id, source_type, dedup_key, fact_ids, status, ingested_at) "
|
|
94
|
-
"SELECT id, 'default', source_type, dedup_key, fact_ids, "
|
|
95
|
-
" status, ingested_at FROM _ingestion_log_old"
|
|
96
|
-
)
|
|
97
|
-
conn.execute("DROP TABLE _ingestion_log_old")
|
|
98
|
-
conn.execute(
|
|
99
|
-
"CREATE INDEX IF NOT EXISTS idx_ingestion_dedup "
|
|
100
|
-
"ON ingestion_log(profile_id, source_type, dedup_key)"
|
|
101
|
-
)
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
def verify(conn: sqlite3.Connection) -> bool:
|
|
105
|
-
"""Applied once ingestion_log carries profile_id (or is absent on fresh DB)."""
|
|
106
|
-
if not _table_exists(conn, "ingestion_log"):
|
|
107
|
-
return True # nothing to migrate; fresh install creates it correctly
|
|
108
|
-
return "profile_id" in _cols(conn, "ingestion_log")
|
|
@@ -1,86 +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 — per-profile isolation (I-7)
|
|
4
|
-
|
|
5
|
-
"""M022 — profile_id on entity_aliases (memory.db, deferred).
|
|
6
|
-
|
|
7
|
-
entity_aliases had no profile_id, so aliases were keyed by entity_id alone. When
|
|
8
|
-
the same entity_id appears under two profiles, one profile's aliases were
|
|
9
|
-
visible to (and deduped against) the other. Add profile_id and backfill each
|
|
10
|
-
alias from its parent canonical entity's profile (the correct owner), falling
|
|
11
|
-
back to 'default' for orphans.
|
|
12
|
-
|
|
13
|
-
Additive column — no UNIQUE change, so a simple ADD COLUMN + backfill. Deferred
|
|
14
|
-
because entity_aliases is created at engine init (create_all_tables), after
|
|
15
|
-
apply_all runs — same reason as M016.
|
|
16
|
-
|
|
17
|
-
Author: Varun Pratap Bhardwaj / Qualixar
|
|
18
|
-
"""
|
|
19
|
-
|
|
20
|
-
from __future__ import annotations
|
|
21
|
-
|
|
22
|
-
import sqlite3
|
|
23
|
-
|
|
24
|
-
NAME = "M022_entity_aliases_profile"
|
|
25
|
-
DB_TARGET = "memory"
|
|
26
|
-
|
|
27
|
-
DDL = "ALTER TABLE entity_aliases ADD COLUMN profile_id TEXT NOT NULL DEFAULT 'default'"
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
def _cols(conn: sqlite3.Connection, table: str) -> set[str]:
|
|
31
|
-
return {r[1] for r in conn.execute(f"PRAGMA table_info({table})").fetchall()}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
def _table_exists(conn: sqlite3.Connection, table: str) -> bool:
|
|
35
|
-
return conn.execute(
|
|
36
|
-
"SELECT 1 FROM sqlite_master WHERE type='table' AND name=?", (table,)
|
|
37
|
-
).fetchone() is not None
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
def apply(conn: sqlite3.Connection) -> None:
|
|
41
|
-
"""Add profile_id to entity_aliases and backfill from the parent entity.
|
|
42
|
-
|
|
43
|
-
No-op on a fresh install (column already present) or a missing table.
|
|
44
|
-
"""
|
|
45
|
-
if not _table_exists(conn, "entity_aliases"):
|
|
46
|
-
return
|
|
47
|
-
|
|
48
|
-
if "profile_id" not in _cols(conn, "entity_aliases"):
|
|
49
|
-
conn.execute(
|
|
50
|
-
"ALTER TABLE entity_aliases "
|
|
51
|
-
"ADD COLUMN profile_id TEXT NOT NULL DEFAULT 'default'"
|
|
52
|
-
)
|
|
53
|
-
# Backfill each alias from its parent canonical entity's profile. If the
|
|
54
|
-
# parent is missing (orphan) the COALESCE keeps 'default'.
|
|
55
|
-
if _table_exists(conn, "canonical_entities"):
|
|
56
|
-
conn.execute(
|
|
57
|
-
"UPDATE entity_aliases SET profile_id = COALESCE("
|
|
58
|
-
" (SELECT ce.profile_id FROM canonical_entities ce "
|
|
59
|
-
" WHERE ce.entity_id = entity_aliases.entity_id LIMIT 1), 'default')"
|
|
60
|
-
)
|
|
61
|
-
|
|
62
|
-
# Always ensure the index (this migration owns it — schema.create_all_tables
|
|
63
|
-
# deliberately does NOT create it, since on an upgrade the column doesn't
|
|
64
|
-
# exist yet at create-all time). Idempotent for fresh installs too.
|
|
65
|
-
conn.execute(
|
|
66
|
-
"CREATE INDEX IF NOT EXISTS idx_aliases_profile_entity "
|
|
67
|
-
"ON entity_aliases(profile_id, entity_id)"
|
|
68
|
-
)
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
def verify(conn: sqlite3.Connection) -> bool:
|
|
72
|
-
"""Applied once entity_aliases has profile_id AND its index (or is absent).
|
|
73
|
-
|
|
74
|
-
Checking the index (not just the column) means a fresh install — where
|
|
75
|
-
create_all_tables made the column but not the index — still runs apply()
|
|
76
|
-
to create the index.
|
|
77
|
-
"""
|
|
78
|
-
if not _table_exists(conn, "entity_aliases"):
|
|
79
|
-
return True
|
|
80
|
-
if "profile_id" not in _cols(conn, "entity_aliases"):
|
|
81
|
-
return False
|
|
82
|
-
idx = conn.execute(
|
|
83
|
-
"SELECT 1 FROM sqlite_master WHERE type='index' "
|
|
84
|
-
"AND name='idx_aliases_profile_entity'"
|
|
85
|
-
).fetchone()
|
|
86
|
-
return idx is not None
|