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,162 +0,0 @@
|
|
|
1
|
-
# Copyright (c) 2026 Varun Pratap Bhardwaj / Qualixar
|
|
2
|
-
# Licensed under AGPL-3.0-or-later - see LICENSE file
|
|
3
|
-
|
|
4
|
-
"""M037 — additive columns for HMAC manifest/receipt versioning.
|
|
5
|
-
|
|
6
|
-
Adds ``manifest_version`` to ``completion_manifests`` and
|
|
7
|
-
``receipt_version`` to ``erasure_receipts``. Default value 1 means the
|
|
8
|
-
existing rows were written with the unkeyed SHA-256 scheme (v1). New rows
|
|
9
|
-
are written with version 2 (HMAC-SHA256). The verify path reads the
|
|
10
|
-
version column and selects the appropriate verification algorithm.
|
|
11
|
-
|
|
12
|
-
Dependency: M033 (completion_manifests), M035 (erasure_receipts).
|
|
13
|
-
"""
|
|
14
|
-
|
|
15
|
-
from __future__ import annotations
|
|
16
|
-
|
|
17
|
-
import json
|
|
18
|
-
import sqlite3
|
|
19
|
-
|
|
20
|
-
NAME = "M037_manifest_hmac_version"
|
|
21
|
-
DB_TARGET = "memory"
|
|
22
|
-
|
|
23
|
-
_ADDED_COLUMNS: dict[str, tuple[str, str]] = {
|
|
24
|
-
"manifest_version_in_completion_manifests": (
|
|
25
|
-
"completion_manifests",
|
|
26
|
-
"manifest_version INTEGER NOT NULL DEFAULT 1",
|
|
27
|
-
),
|
|
28
|
-
"receipt_version_in_erasure_receipts": (
|
|
29
|
-
"erasure_receipts",
|
|
30
|
-
"receipt_version INTEGER NOT NULL DEFAULT 1",
|
|
31
|
-
),
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
DDL = "\n".join(
|
|
35
|
-
f"ALTER TABLE {tbl} ADD COLUMN {col_def};"
|
|
36
|
-
for _, (tbl, col_def) in _ADDED_COLUMNS.items()
|
|
37
|
-
)
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
def apply(conn: sqlite3.Connection) -> None:
|
|
41
|
-
for _key, (table, col_def) in _ADDED_COLUMNS.items():
|
|
42
|
-
if not _table_exists(conn, table):
|
|
43
|
-
continue
|
|
44
|
-
col_name = col_def.split()[0]
|
|
45
|
-
if col_name not in _columns(conn, table):
|
|
46
|
-
conn.execute(f"ALTER TABLE {table} ADD COLUMN {col_def}")
|
|
47
|
-
|
|
48
|
-
# Re-seal pre-existing v1 rows to v2 HMAC so verify_manifest / verify_receipt
|
|
49
|
-
# continue to PASS post-migration. Without re-seal, the verify path rejects
|
|
50
|
-
# v1 rows on v2 DBs as potential downgrade attacks, silently breaking every
|
|
51
|
-
# evidence chain written before M037 was applied.
|
|
52
|
-
_reseal_manifests(conn)
|
|
53
|
-
_reseal_receipts(conn)
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
def _reseal_manifests(conn: sqlite3.Connection) -> None:
|
|
57
|
-
"""Re-seal completion_manifests rows from v1 (unkeyed SHA) to v2 (HMAC)."""
|
|
58
|
-
if not _table_exists(conn, "completion_manifests"):
|
|
59
|
-
return
|
|
60
|
-
if "manifest_version" not in _columns(conn, "completion_manifests"):
|
|
61
|
-
return # column not yet present — nothing to re-seal
|
|
62
|
-
|
|
63
|
-
from superlocalmemory.core.transactions.manifest import (
|
|
64
|
-
MANIFEST_V2,
|
|
65
|
-
_canonical_envelope,
|
|
66
|
-
)
|
|
67
|
-
from superlocalmemory.core.transactions.manifest_key import (
|
|
68
|
-
compute_hmac,
|
|
69
|
-
derive_manifest_hmac_key,
|
|
70
|
-
)
|
|
71
|
-
|
|
72
|
-
key = derive_manifest_hmac_key()
|
|
73
|
-
rows = conn.execute(
|
|
74
|
-
"SELECT operation_id, profile_id, state, all_met, obligation_count, "
|
|
75
|
-
"owner_evidence_json FROM completion_manifests WHERE manifest_version = 1"
|
|
76
|
-
).fetchall()
|
|
77
|
-
for row in rows:
|
|
78
|
-
evidence_dicts = json.loads(row[5] or "[]")
|
|
79
|
-
canonical = _canonical_envelope(
|
|
80
|
-
operation_id=row[0],
|
|
81
|
-
profile_id=row[1],
|
|
82
|
-
state=row[2],
|
|
83
|
-
all_met=bool(row[3]),
|
|
84
|
-
obligation_count=int(row[4]),
|
|
85
|
-
evidence_dicts=evidence_dicts,
|
|
86
|
-
manifest_version=MANIFEST_V2,
|
|
87
|
-
)
|
|
88
|
-
new_hash = compute_hmac(key, canonical)
|
|
89
|
-
conn.execute(
|
|
90
|
-
"UPDATE completion_manifests SET manifest_hash = ?, manifest_version = ? "
|
|
91
|
-
"WHERE operation_id = ?",
|
|
92
|
-
(new_hash, MANIFEST_V2, row[0]),
|
|
93
|
-
)
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
def _reseal_receipts(conn: sqlite3.Connection) -> None:
|
|
97
|
-
"""Re-seal erasure_receipts rows from v1 (unkeyed SHA) to v2 (HMAC)."""
|
|
98
|
-
if not _table_exists(conn, "erasure_receipts"):
|
|
99
|
-
return
|
|
100
|
-
if "receipt_version" not in _columns(conn, "erasure_receipts"):
|
|
101
|
-
return # column not yet present — nothing to re-seal
|
|
102
|
-
|
|
103
|
-
from superlocalmemory.core.transactions.erasure import (
|
|
104
|
-
_RECEIPT_V2,
|
|
105
|
-
_erasure_canonical,
|
|
106
|
-
)
|
|
107
|
-
from superlocalmemory.core.transactions.manifest_key import (
|
|
108
|
-
compute_hmac,
|
|
109
|
-
derive_receipt_hmac_key,
|
|
110
|
-
)
|
|
111
|
-
|
|
112
|
-
key = derive_receipt_hmac_key()
|
|
113
|
-
rows = conn.execute(
|
|
114
|
-
"SELECT erasure_id, profile_id, subject_type, subject_id, requested_by, "
|
|
115
|
-
"fact_count, state, all_erased, owner_evidence_json, requested_at, completed_at "
|
|
116
|
-
"FROM erasure_receipts WHERE receipt_version = 1"
|
|
117
|
-
).fetchall()
|
|
118
|
-
for row in rows:
|
|
119
|
-
canonical = _erasure_canonical(
|
|
120
|
-
erasure_id=row[0],
|
|
121
|
-
profile_id=row[1],
|
|
122
|
-
subject_type=row[2],
|
|
123
|
-
subject_id=row[3],
|
|
124
|
-
requested_by=row[4],
|
|
125
|
-
fact_count=int(row[5]),
|
|
126
|
-
state=row[6],
|
|
127
|
-
all_erased=bool(row[7]),
|
|
128
|
-
evidence_json=row[8],
|
|
129
|
-
requested_at=float(row[9]),
|
|
130
|
-
completed_at=float(row[10]),
|
|
131
|
-
receipt_version=_RECEIPT_V2,
|
|
132
|
-
)
|
|
133
|
-
new_hash = compute_hmac(key, canonical)
|
|
134
|
-
conn.execute(
|
|
135
|
-
"UPDATE erasure_receipts SET audit_hash = ?, receipt_version = ? "
|
|
136
|
-
"WHERE erasure_id = ?",
|
|
137
|
-
(new_hash, _RECEIPT_V2, row[0]),
|
|
138
|
-
)
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
def repair(conn: sqlite3.Connection) -> None:
|
|
142
|
-
apply(conn)
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
def verify(conn: sqlite3.Connection) -> bool:
|
|
146
|
-
for _key, (table, col_def) in _ADDED_COLUMNS.items():
|
|
147
|
-
if not _table_exists(conn, table):
|
|
148
|
-
return False
|
|
149
|
-
col_name = col_def.split()[0]
|
|
150
|
-
if col_name not in _columns(conn, table):
|
|
151
|
-
return False
|
|
152
|
-
return True
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
def _table_exists(conn: sqlite3.Connection, name: str) -> bool:
|
|
156
|
-
return conn.execute(
|
|
157
|
-
"SELECT 1 FROM sqlite_master WHERE type='table' AND name=?", (name,),
|
|
158
|
-
).fetchone() is not None
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
def _columns(conn: sqlite3.Connection, table: str) -> set[str]:
|
|
162
|
-
return {row[1] for row in conn.execute(f"PRAGMA table_info({table})").fetchall()}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
# Copyright (c) 2026 Varun Pratap Bhardwaj / Qualixar
|
|
2
|
-
# Licensed under AGPL-3.0-or-later - see LICENSE file
|
|
3
|
-
# Ported into the SuperLocalMemory V4 migration sequence.
|
|
4
|
-
|
|
5
|
-
"""M038 — add the ``channel`` column to ``learning_feedback``.
|
|
6
|
-
|
|
7
|
-
``pattern_miner._mine_channel_and_coretrieval`` has always executed::
|
|
8
|
-
|
|
9
|
-
SELECT channel, COUNT(*) AS cnt, AVG(signal_value) AS avg_signal
|
|
10
|
-
FROM learning_feedback GROUP BY channel
|
|
11
|
-
|
|
12
|
-
but ``channel`` was never defined on the table. Every database therefore
|
|
13
|
-
raised ``sqlite3.OperationalError: no such column: channel``. That error was
|
|
14
|
-
caught by the miner's outer ``except Exception`` and logged at DEBUG, so the
|
|
15
|
-
failure was invisible — and because the channel query runs FIRST inside that
|
|
16
|
-
try block, it also aborted the co-retrieval mining below it. One missing
|
|
17
|
-
column silently disabled two pattern types (issue #102, "Patterns learned
|
|
18
|
-
remains 0" despite a restored backup: restoring rows cannot fix a schema gap).
|
|
19
|
-
|
|
20
|
-
Additive only — ``ALTER TABLE ADD COLUMN`` with a default. No data loss and no
|
|
21
|
-
type changes; existing rows get ``'unknown'``, which groups cleanly rather than
|
|
22
|
-
being dropped by the miner's ``GROUP BY``.
|
|
23
|
-
|
|
24
|
-
``learning_feedback`` is bootstrapped at runtime by
|
|
25
|
-
``learning.feedback.FeedbackCollector._ensure_schema`` rather than by a
|
|
26
|
-
migration, so the DDL below CREATEs it (without ``channel``) when absent
|
|
27
|
-
before the ALTER. That keeps all three states correct:
|
|
28
|
-
|
|
29
|
-
- table missing -> CREATE, then ALTER adds ``channel``
|
|
30
|
-
- table present, no column -> CREATE is a no-op, ALTER adds ``channel``
|
|
31
|
-
- table already migrated -> ``verify()`` returns True, runner skips entirely
|
|
32
|
-
"""
|
|
33
|
-
|
|
34
|
-
from __future__ import annotations
|
|
35
|
-
|
|
36
|
-
import sqlite3
|
|
37
|
-
|
|
38
|
-
NAME = "M038_learning_feedback_channel"
|
|
39
|
-
DB_TARGET = "learning"
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
def verify(conn: sqlite3.Connection) -> bool:
|
|
43
|
-
"""Return True if ``learning_feedback.channel`` already exists."""
|
|
44
|
-
try:
|
|
45
|
-
cols = {
|
|
46
|
-
row[1] for row in
|
|
47
|
-
conn.execute("PRAGMA table_info(learning_feedback)").fetchall()
|
|
48
|
-
}
|
|
49
|
-
except sqlite3.Error:
|
|
50
|
-
return False
|
|
51
|
-
# An empty set means the table does not exist yet — not migrated.
|
|
52
|
-
return bool(cols) and "channel" in cols
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
DDL = """
|
|
56
|
-
BEGIN IMMEDIATE;
|
|
57
|
-
|
|
58
|
-
CREATE TABLE IF NOT EXISTS learning_feedback (
|
|
59
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
60
|
-
profile_id TEXT NOT NULL,
|
|
61
|
-
fact_id TEXT NOT NULL,
|
|
62
|
-
signal_type TEXT NOT NULL,
|
|
63
|
-
signal_value REAL NOT NULL,
|
|
64
|
-
query_hash TEXT,
|
|
65
|
-
created_at TEXT NOT NULL,
|
|
66
|
-
metadata TEXT
|
|
67
|
-
);
|
|
68
|
-
|
|
69
|
-
ALTER TABLE learning_feedback ADD COLUMN channel TEXT DEFAULT 'unknown';
|
|
70
|
-
|
|
71
|
-
CREATE INDEX IF NOT EXISTS idx_feedback_profile
|
|
72
|
-
ON learning_feedback (profile_id, created_at DESC);
|
|
73
|
-
CREATE INDEX IF NOT EXISTS idx_feedback_channel
|
|
74
|
-
ON learning_feedback (profile_id, channel);
|
|
75
|
-
|
|
76
|
-
COMMIT;
|
|
77
|
-
"""
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
# Copyright (c) 2026 Varun Pratap Bhardwaj / Qualixar
|
|
2
|
-
# Licensed under AGPL-3.0-or-later
|
|
3
|
-
|
|
4
|
-
"""M039 — normalized scene/fact membership for bounded assignment.
|
|
5
|
-
|
|
6
|
-
``memory_scenes.fact_ids_json`` remains the public compatibility format. This
|
|
7
|
-
additive projection provides the indexed reverse lookup needed to map nearest
|
|
8
|
-
fact-vector hits back to candidate scenes without scanning every scene for
|
|
9
|
-
every ingested fact. Triggers keep all existing scene write paths synchronized.
|
|
10
|
-
"""
|
|
11
|
-
|
|
12
|
-
from __future__ import annotations
|
|
13
|
-
|
|
14
|
-
import sqlite3
|
|
15
|
-
|
|
16
|
-
NAME = "M039_scene_fact_members"
|
|
17
|
-
DB_TARGET = "memory"
|
|
18
|
-
|
|
19
|
-
DDL = """
|
|
20
|
-
BEGIN IMMEDIATE;
|
|
21
|
-
|
|
22
|
-
-- Keep the deferred migration independently safe for partial/legacy installs.
|
|
23
|
-
-- On normal daemon startup MemoryEngine has already created this table.
|
|
24
|
-
CREATE TABLE IF NOT EXISTS memory_scenes (
|
|
25
|
-
scene_id TEXT PRIMARY KEY,
|
|
26
|
-
profile_id TEXT NOT NULL DEFAULT 'default',
|
|
27
|
-
theme TEXT NOT NULL DEFAULT '',
|
|
28
|
-
fact_ids_json TEXT NOT NULL DEFAULT '[]',
|
|
29
|
-
entity_ids_json TEXT NOT NULL DEFAULT '[]',
|
|
30
|
-
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
31
|
-
last_updated TEXT NOT NULL DEFAULT (datetime('now')),
|
|
32
|
-
FOREIGN KEY (profile_id) REFERENCES profiles(profile_id) ON DELETE CASCADE
|
|
33
|
-
);
|
|
34
|
-
CREATE INDEX IF NOT EXISTS idx_scenes_profile ON memory_scenes(profile_id);
|
|
35
|
-
CREATE UNIQUE INDEX IF NOT EXISTS uq_scenes_profile_scene
|
|
36
|
-
ON memory_scenes (profile_id, scene_id);
|
|
37
|
-
CREATE UNIQUE INDEX IF NOT EXISTS uq_facts_profile_fact
|
|
38
|
-
ON atomic_facts (profile_id, fact_id);
|
|
39
|
-
|
|
40
|
-
CREATE TABLE IF NOT EXISTS scene_fact_members (
|
|
41
|
-
profile_id TEXT NOT NULL,
|
|
42
|
-
scene_id TEXT NOT NULL,
|
|
43
|
-
fact_id TEXT NOT NULL,
|
|
44
|
-
position INTEGER NOT NULL DEFAULT 0,
|
|
45
|
-
PRIMARY KEY (scene_id, fact_id),
|
|
46
|
-
FOREIGN KEY (profile_id, scene_id)
|
|
47
|
-
REFERENCES memory_scenes(profile_id, scene_id) ON DELETE CASCADE,
|
|
48
|
-
FOREIGN KEY (profile_id, fact_id)
|
|
49
|
-
REFERENCES atomic_facts(profile_id, fact_id) ON DELETE CASCADE,
|
|
50
|
-
FOREIGN KEY (profile_id) REFERENCES profiles(profile_id) ON DELETE CASCADE
|
|
51
|
-
);
|
|
52
|
-
|
|
53
|
-
CREATE INDEX IF NOT EXISTS idx_scene_fact_members_lookup
|
|
54
|
-
ON scene_fact_members (profile_id, fact_id, scene_id);
|
|
55
|
-
CREATE INDEX IF NOT EXISTS idx_scene_fact_members_order
|
|
56
|
-
ON scene_fact_members (scene_id, position);
|
|
57
|
-
|
|
58
|
-
CREATE TRIGGER IF NOT EXISTS trg_scene_fact_members_insert
|
|
59
|
-
AFTER INSERT ON memory_scenes
|
|
60
|
-
BEGIN
|
|
61
|
-
DELETE FROM scene_fact_members WHERE scene_id = NEW.scene_id;
|
|
62
|
-
INSERT OR IGNORE INTO scene_fact_members
|
|
63
|
-
(profile_id, scene_id, fact_id, position)
|
|
64
|
-
SELECT NEW.profile_id, NEW.scene_id, af.fact_id, CAST(member.key AS INTEGER)
|
|
65
|
-
FROM json_each(
|
|
66
|
-
CASE WHEN json_valid(NEW.fact_ids_json)
|
|
67
|
-
THEN NEW.fact_ids_json ELSE '[]' END
|
|
68
|
-
) AS member
|
|
69
|
-
JOIN atomic_facts AS af
|
|
70
|
-
ON af.fact_id = member.value
|
|
71
|
-
AND af.profile_id = NEW.profile_id;
|
|
72
|
-
END;
|
|
73
|
-
|
|
74
|
-
CREATE TRIGGER IF NOT EXISTS trg_scene_fact_members_update
|
|
75
|
-
AFTER UPDATE OF profile_id, fact_ids_json ON memory_scenes
|
|
76
|
-
BEGIN
|
|
77
|
-
DELETE FROM scene_fact_members WHERE scene_id = NEW.scene_id;
|
|
78
|
-
INSERT OR IGNORE INTO scene_fact_members
|
|
79
|
-
(profile_id, scene_id, fact_id, position)
|
|
80
|
-
SELECT NEW.profile_id, NEW.scene_id, af.fact_id, CAST(member.key AS INTEGER)
|
|
81
|
-
FROM json_each(
|
|
82
|
-
CASE WHEN json_valid(NEW.fact_ids_json)
|
|
83
|
-
THEN NEW.fact_ids_json ELSE '[]' END
|
|
84
|
-
) AS member
|
|
85
|
-
JOIN atomic_facts AS af
|
|
86
|
-
ON af.fact_id = member.value
|
|
87
|
-
AND af.profile_id = NEW.profile_id;
|
|
88
|
-
END;
|
|
89
|
-
|
|
90
|
-
INSERT OR IGNORE INTO scene_fact_members
|
|
91
|
-
(profile_id, scene_id, fact_id, position)
|
|
92
|
-
SELECT ms.profile_id, ms.scene_id, af.fact_id, CAST(member.key AS INTEGER)
|
|
93
|
-
FROM memory_scenes AS ms
|
|
94
|
-
JOIN json_each(
|
|
95
|
-
CASE WHEN json_valid(ms.fact_ids_json) THEN ms.fact_ids_json ELSE '[]' END
|
|
96
|
-
) AS member
|
|
97
|
-
JOIN atomic_facts AS af
|
|
98
|
-
ON af.fact_id = member.value
|
|
99
|
-
AND af.profile_id = ms.profile_id;
|
|
100
|
-
|
|
101
|
-
COMMIT;
|
|
102
|
-
"""
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
def verify(conn: sqlite3.Connection) -> bool:
|
|
106
|
-
"""Verify the table, covering indexes, and synchronization triggers."""
|
|
107
|
-
objects = {
|
|
108
|
-
(str(row[0]), str(row[1]))
|
|
109
|
-
for row in conn.execute(
|
|
110
|
-
"SELECT name, type FROM sqlite_master "
|
|
111
|
-
"WHERE name IN (?, ?, ?, ?, ?, ?, ?)"
|
|
112
|
-
,
|
|
113
|
-
(
|
|
114
|
-
"scene_fact_members",
|
|
115
|
-
"idx_scene_fact_members_lookup",
|
|
116
|
-
"idx_scene_fact_members_order",
|
|
117
|
-
"trg_scene_fact_members_insert",
|
|
118
|
-
"trg_scene_fact_members_update",
|
|
119
|
-
"uq_scenes_profile_scene",
|
|
120
|
-
"uq_facts_profile_fact",
|
|
121
|
-
),
|
|
122
|
-
).fetchall()
|
|
123
|
-
}
|
|
124
|
-
return objects == {
|
|
125
|
-
("scene_fact_members", "table"),
|
|
126
|
-
("idx_scene_fact_members_lookup", "index"),
|
|
127
|
-
("idx_scene_fact_members_order", "index"),
|
|
128
|
-
("trg_scene_fact_members_insert", "trigger"),
|
|
129
|
-
("trg_scene_fact_members_update", "trigger"),
|
|
130
|
-
("uq_scenes_profile_scene", "index"),
|
|
131
|
-
("uq_facts_profile_fact", "index"),
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
def repair(conn: sqlite3.Connection) -> None:
|
|
136
|
-
"""Restore an accidentally dropped projection and re-backfill it."""
|
|
137
|
-
conn.executescript(DDL)
|
|
@@ -1,254 +0,0 @@
|
|
|
1
|
-
"""M040 — profile-scoped Agent Experience receipts in ``learning.db``.
|
|
2
|
-
|
|
3
|
-
The receipt plane deliberately has no foreign keys into ``memory.db``. It is
|
|
4
|
-
therefore not part of recall's lock domain: profile lifecycle coordinates its
|
|
5
|
-
cross-store erasure as a retryable saga instead of using ``ATTACH``.
|
|
6
|
-
"""
|
|
7
|
-
|
|
8
|
-
from __future__ import annotations
|
|
9
|
-
|
|
10
|
-
import sqlite3
|
|
11
|
-
|
|
12
|
-
NAME = "M040_agent_experience_receipts"
|
|
13
|
-
DB_TARGET = "learning"
|
|
14
|
-
|
|
15
|
-
DDL = """
|
|
16
|
-
BEGIN IMMEDIATE;
|
|
17
|
-
CREATE TABLE IF NOT EXISTS agent_experiences (
|
|
18
|
-
profile_id TEXT NOT NULL,
|
|
19
|
-
experience_id TEXT NOT NULL,
|
|
20
|
-
occurred_at TEXT NOT NULL,
|
|
21
|
-
task_class TEXT NOT NULL,
|
|
22
|
-
project_scope TEXT NOT NULL,
|
|
23
|
-
route_json TEXT NOT NULL,
|
|
24
|
-
verification_authority TEXT NOT NULL,
|
|
25
|
-
verification_digest TEXT NOT NULL,
|
|
26
|
-
verification_reference TEXT,
|
|
27
|
-
producer_claim TEXT NOT NULL,
|
|
28
|
-
terminal_status TEXT NOT NULL,
|
|
29
|
-
failure_class TEXT,
|
|
30
|
-
human_intervention INTEGER CHECK (human_intervention IN (0, 1)),
|
|
31
|
-
lessons TEXT,
|
|
32
|
-
receipt_digest TEXT,
|
|
33
|
-
artifact_digests_json TEXT NOT NULL,
|
|
34
|
-
payload_sha256 TEXT NOT NULL,
|
|
35
|
-
created_at TEXT NOT NULL,
|
|
36
|
-
PRIMARY KEY (profile_id, experience_id)
|
|
37
|
-
);
|
|
38
|
-
CREATE TABLE IF NOT EXISTS cognitive_turn_receipts (
|
|
39
|
-
profile_id TEXT NOT NULL,
|
|
40
|
-
receipt_id TEXT NOT NULL,
|
|
41
|
-
task_id TEXT NOT NULL,
|
|
42
|
-
project_scope TEXT NOT NULL,
|
|
43
|
-
query_digest TEXT NOT NULL,
|
|
44
|
-
fact_decisions_json TEXT NOT NULL,
|
|
45
|
-
state TEXT NOT NULL CHECK (state IN ('open', 'finalized', 'abandoned', 'reconciled')),
|
|
46
|
-
outcome_json TEXT,
|
|
47
|
-
payload_sha256 TEXT NOT NULL,
|
|
48
|
-
created_at TEXT NOT NULL,
|
|
49
|
-
updated_at TEXT NOT NULL,
|
|
50
|
-
PRIMARY KEY (profile_id, receipt_id)
|
|
51
|
-
);
|
|
52
|
-
CREATE TABLE IF NOT EXISTS agent_receipt_profile_closures (
|
|
53
|
-
profile_id TEXT PRIMARY KEY,
|
|
54
|
-
closed_at TEXT NOT NULL
|
|
55
|
-
);
|
|
56
|
-
CREATE INDEX IF NOT EXISTS idx_agent_experiences_profile_occurred
|
|
57
|
-
ON agent_experiences (profile_id, occurred_at DESC);
|
|
58
|
-
CREATE INDEX IF NOT EXISTS idx_agent_experiences_profile_project_occurred
|
|
59
|
-
ON agent_experiences (profile_id, project_scope, occurred_at DESC);
|
|
60
|
-
CREATE INDEX IF NOT EXISTS idx_cognitive_turns_profile_task_updated
|
|
61
|
-
ON cognitive_turn_receipts (profile_id, task_id, updated_at DESC);
|
|
62
|
-
CREATE INDEX IF NOT EXISTS idx_cognitive_turns_profile_state_updated
|
|
63
|
-
ON cognitive_turn_receipts (profile_id, state, updated_at DESC);
|
|
64
|
-
COMMIT;
|
|
65
|
-
"""
|
|
66
|
-
|
|
67
|
-
_TABLE_COLUMNS = {
|
|
68
|
-
"agent_experiences": (
|
|
69
|
-
"profile_id",
|
|
70
|
-
"experience_id",
|
|
71
|
-
"occurred_at",
|
|
72
|
-
"task_class",
|
|
73
|
-
"project_scope",
|
|
74
|
-
"route_json",
|
|
75
|
-
"verification_authority",
|
|
76
|
-
"verification_digest",
|
|
77
|
-
"verification_reference",
|
|
78
|
-
"producer_claim",
|
|
79
|
-
"terminal_status",
|
|
80
|
-
"failure_class",
|
|
81
|
-
"human_intervention",
|
|
82
|
-
"lessons",
|
|
83
|
-
"receipt_digest",
|
|
84
|
-
"artifact_digests_json",
|
|
85
|
-
"payload_sha256",
|
|
86
|
-
"created_at",
|
|
87
|
-
),
|
|
88
|
-
"cognitive_turn_receipts": (
|
|
89
|
-
"profile_id",
|
|
90
|
-
"receipt_id",
|
|
91
|
-
"task_id",
|
|
92
|
-
"project_scope",
|
|
93
|
-
"query_digest",
|
|
94
|
-
"fact_decisions_json",
|
|
95
|
-
"state",
|
|
96
|
-
"outcome_json",
|
|
97
|
-
"payload_sha256",
|
|
98
|
-
"created_at",
|
|
99
|
-
"updated_at",
|
|
100
|
-
),
|
|
101
|
-
"agent_receipt_profile_closures": ("profile_id", "closed_at"),
|
|
102
|
-
}
|
|
103
|
-
_PRIMARY_KEYS = {
|
|
104
|
-
"agent_experiences": ("profile_id", "experience_id"),
|
|
105
|
-
"cognitive_turn_receipts": ("profile_id", "receipt_id"),
|
|
106
|
-
"agent_receipt_profile_closures": ("profile_id",),
|
|
107
|
-
}
|
|
108
|
-
_COLUMN_TYPES = {
|
|
109
|
-
"agent_experiences": (
|
|
110
|
-
"TEXT",
|
|
111
|
-
"TEXT",
|
|
112
|
-
"TEXT",
|
|
113
|
-
"TEXT",
|
|
114
|
-
"TEXT",
|
|
115
|
-
"TEXT",
|
|
116
|
-
"TEXT",
|
|
117
|
-
"TEXT",
|
|
118
|
-
"TEXT",
|
|
119
|
-
"TEXT",
|
|
120
|
-
"TEXT",
|
|
121
|
-
"TEXT",
|
|
122
|
-
"INTEGER",
|
|
123
|
-
"TEXT",
|
|
124
|
-
"TEXT",
|
|
125
|
-
"TEXT",
|
|
126
|
-
"TEXT",
|
|
127
|
-
"TEXT",
|
|
128
|
-
),
|
|
129
|
-
"cognitive_turn_receipts": ("TEXT",) * len(_TABLE_COLUMNS["cognitive_turn_receipts"]),
|
|
130
|
-
"agent_receipt_profile_closures": ("TEXT", "TEXT"),
|
|
131
|
-
}
|
|
132
|
-
_REQUIRED_NOT_NULL = {
|
|
133
|
-
"agent_experiences": frozenset(_TABLE_COLUMNS["agent_experiences"])
|
|
134
|
-
- {
|
|
135
|
-
"verification_reference",
|
|
136
|
-
"failure_class",
|
|
137
|
-
"human_intervention",
|
|
138
|
-
"lessons",
|
|
139
|
-
"receipt_digest",
|
|
140
|
-
},
|
|
141
|
-
"cognitive_turn_receipts": frozenset(_TABLE_COLUMNS["cognitive_turn_receipts"])
|
|
142
|
-
- {"outcome_json"},
|
|
143
|
-
"agent_receipt_profile_closures": frozenset(_TABLE_COLUMNS["agent_receipt_profile_closures"]),
|
|
144
|
-
}
|
|
145
|
-
_INDEXES = {
|
|
146
|
-
"idx_agent_experiences_profile_occurred": ("agent_experiences", ("profile_id", "occurred_at")),
|
|
147
|
-
"idx_agent_experiences_profile_project_occurred": (
|
|
148
|
-
"agent_experiences",
|
|
149
|
-
("profile_id", "project_scope", "occurred_at"),
|
|
150
|
-
),
|
|
151
|
-
"idx_cognitive_turns_profile_task_updated": (
|
|
152
|
-
"cognitive_turn_receipts",
|
|
153
|
-
("profile_id", "task_id", "updated_at"),
|
|
154
|
-
),
|
|
155
|
-
"idx_cognitive_turns_profile_state_updated": (
|
|
156
|
-
"cognitive_turn_receipts",
|
|
157
|
-
("profile_id", "state", "updated_at"),
|
|
158
|
-
),
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
def apply(conn: sqlite3.Connection) -> None:
|
|
163
|
-
"""Atomically install M040 or leave the learning DB unchanged."""
|
|
164
|
-
if verify(conn):
|
|
165
|
-
return
|
|
166
|
-
if _tables_are_malformed(conn):
|
|
167
|
-
raise sqlite3.OperationalError("M040 receipt tables are malformed; refusing rebuild")
|
|
168
|
-
if all(name in _tables(conn) for name in _TABLE_COLUMNS):
|
|
169
|
-
repair(conn)
|
|
170
|
-
return
|
|
171
|
-
conn.executescript(DDL)
|
|
172
|
-
if not verify(conn):
|
|
173
|
-
# A pre-existing same-named index can make CREATE INDEX IF NOT EXISTS
|
|
174
|
-
# a no-op even though that index belongs to another table. Rebuild the
|
|
175
|
-
# derived index set transactionally after all required tables exist.
|
|
176
|
-
repair(conn)
|
|
177
|
-
if not verify(conn):
|
|
178
|
-
raise sqlite3.OperationalError("M040 schema did not reach its required end-state")
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
def repair(conn: sqlite3.Connection) -> None:
|
|
182
|
-
"""Restore missing/wrong indexes only; never rebuild user evidence."""
|
|
183
|
-
if _tables_are_malformed(conn):
|
|
184
|
-
raise sqlite3.OperationalError("M040 receipt tables are malformed; refusing rebuild")
|
|
185
|
-
if not all(name in _tables(conn) for name in _TABLE_COLUMNS):
|
|
186
|
-
apply(conn)
|
|
187
|
-
return
|
|
188
|
-
drops = "\n".join(f"DROP INDEX IF EXISTS {name};" for name in _INDEXES)
|
|
189
|
-
creates = "\n".join(
|
|
190
|
-
f"CREATE INDEX {name} ON {table} ({', '.join(columns)});"
|
|
191
|
-
for name, (table, columns) in _INDEXES.items()
|
|
192
|
-
)
|
|
193
|
-
conn.executescript(f"BEGIN IMMEDIATE;\n{drops}\n{creates}\nCOMMIT;")
|
|
194
|
-
if not verify(conn):
|
|
195
|
-
raise sqlite3.OperationalError("M040 index repair did not restore required end-state")
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
def verify(conn: sqlite3.Connection) -> bool:
|
|
199
|
-
return not _tables_are_malformed(conn) and all(
|
|
200
|
-
_index_columns(conn, name) == columns for name, (_, columns) in _INDEXES.items()
|
|
201
|
-
)
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
def _tables_are_malformed(conn: sqlite3.Connection) -> bool:
|
|
205
|
-
tables = _tables(conn)
|
|
206
|
-
for table, columns in _TABLE_COLUMNS.items():
|
|
207
|
-
if table not in tables:
|
|
208
|
-
continue
|
|
209
|
-
info = conn.execute(f"PRAGMA table_info({table})").fetchall()
|
|
210
|
-
actual = tuple(row[1] for row in info)
|
|
211
|
-
types = tuple(str(row[2]).upper() for row in info)
|
|
212
|
-
primary_key = tuple(row[1] for row in sorted(info, key=lambda row: row[5]) if row[5])
|
|
213
|
-
not_null = {row[1] for row in info if row[3] or row[5]}
|
|
214
|
-
if (
|
|
215
|
-
actual != columns
|
|
216
|
-
or types != _COLUMN_TYPES[table]
|
|
217
|
-
or primary_key != _PRIMARY_KEYS[table]
|
|
218
|
-
or not_null != _REQUIRED_NOT_NULL[table]
|
|
219
|
-
or not _required_checks_present(conn, table)
|
|
220
|
-
):
|
|
221
|
-
return True
|
|
222
|
-
if conn.execute(f"PRAGMA foreign_key_list({table})").fetchone() is not None:
|
|
223
|
-
return True
|
|
224
|
-
return False
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
def _tables(conn: sqlite3.Connection) -> set[str]:
|
|
228
|
-
return {row[0] for row in conn.execute("SELECT name FROM sqlite_master WHERE type='table'")}
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
def _index_columns(conn: sqlite3.Connection, name: str) -> tuple[str, ...] | None:
|
|
232
|
-
row = conn.execute(
|
|
233
|
-
"SELECT tbl_name FROM sqlite_master WHERE type='index' AND name=?", (name,)
|
|
234
|
-
).fetchone()
|
|
235
|
-
expected = _INDEXES.get(name)
|
|
236
|
-
if row is None or expected is None or row[0] != expected[0]:
|
|
237
|
-
return None
|
|
238
|
-
return tuple(
|
|
239
|
-
row[2]
|
|
240
|
-
for row in conn.execute(f"PRAGMA index_xinfo({name})")
|
|
241
|
-
if row[5] and row[2] is not None
|
|
242
|
-
)
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
def _required_checks_present(conn: sqlite3.Connection, table: str) -> bool:
|
|
246
|
-
sql_row = conn.execute(
|
|
247
|
-
"SELECT sql FROM sqlite_master WHERE type='table' AND name=?", (table,)
|
|
248
|
-
).fetchone()
|
|
249
|
-
sql = "" if sql_row is None or sql_row[0] is None else "".join(str(sql_row[0]).lower().split())
|
|
250
|
-
if table == "agent_experiences":
|
|
251
|
-
return "check(human_interventionin(0,1))" in sql
|
|
252
|
-
if table == "cognitive_turn_receipts":
|
|
253
|
-
return "check(statein('open','finalized','abandoned','reconciled'))" in sql
|
|
254
|
-
return True
|