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,376 +0,0 @@
|
|
|
1
|
-
# Copyright (c) 2026 Varun Pratap Bhardwaj / Qualixar
|
|
2
|
-
# Licensed under AGPL-3.0-or-later - see LICENSE file
|
|
3
|
-
# Part of SuperLocalMemory V3 | https://qualixar.com | https://varunpratap.com
|
|
4
|
-
|
|
5
|
-
"""Evolution Triggers — detect when skills need evolution.
|
|
6
|
-
|
|
7
|
-
3-trigger system (adopted from OpenSpace):
|
|
8
|
-
1. Post-session analysis: session ends, scan for skill failures
|
|
9
|
-
2. Skill degradation: behavioral assertion confidence drops
|
|
10
|
-
3. Periodic health check: consolidation cycle scans all skills
|
|
11
|
-
|
|
12
|
-
All triggers are zero-LLM, zero-embedding. Pure SQLite queries.
|
|
13
|
-
They produce EvolutionCandidates — the evolver decides what to do.
|
|
14
|
-
|
|
15
|
-
Part of Qualixar | Author: Varun Pratap Bhardwaj
|
|
16
|
-
"""
|
|
17
|
-
|
|
18
|
-
from __future__ import annotations
|
|
19
|
-
|
|
20
|
-
import hashlib
|
|
21
|
-
import json
|
|
22
|
-
import logging
|
|
23
|
-
import re
|
|
24
|
-
import sqlite3
|
|
25
|
-
from datetime import datetime, timezone
|
|
26
|
-
from pathlib import Path
|
|
27
|
-
|
|
28
|
-
from superlocalmemory.evolution.types import (
|
|
29
|
-
EvolutionCandidate,
|
|
30
|
-
EvolutionType,
|
|
31
|
-
TriggerType,
|
|
32
|
-
)
|
|
33
|
-
|
|
34
|
-
logger = logging.getLogger(__name__)
|
|
35
|
-
|
|
36
|
-
# Thresholds — conservative, matching C1 design doc
|
|
37
|
-
DEGRADATION_THRESHOLD = 0.4 # Effective score below this → FIX candidate
|
|
38
|
-
RECOVERY_THRESHOLD = 0.6 # Above this → skill recovered, prune from addressed
|
|
39
|
-
DERIVED_THRESHOLD = 0.55 # Moderate effectiveness → DERIVED candidate
|
|
40
|
-
MIN_INVOCATIONS = 5 # Don't trigger on insufficient data
|
|
41
|
-
NEGATIVE_SIGNALS_THRESHOLD = 2 # Min negative signals in one session for post-session trigger
|
|
42
|
-
MAX_RSS_MB = 1024 # Skip evolution if process exceeds 1GB RSS
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
def _check_memory_pressure() -> bool:
|
|
46
|
-
"""Return True if process RSS exceeds threshold. Skip evolution if so."""
|
|
47
|
-
try:
|
|
48
|
-
import psutil
|
|
49
|
-
rss_mb = psutil.Process().memory_info().rss / (1024 * 1024)
|
|
50
|
-
if rss_mb > MAX_RSS_MB:
|
|
51
|
-
logger.warning(
|
|
52
|
-
"Memory pressure: %dMB RSS > %dMB limit, skipping evolution",
|
|
53
|
-
int(rss_mb), MAX_RSS_MB,
|
|
54
|
-
)
|
|
55
|
-
return True
|
|
56
|
-
except ImportError:
|
|
57
|
-
pass
|
|
58
|
-
return False
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
class PostSessionTrigger:
|
|
62
|
-
"""Trigger 1: Analyze a completed session for skill failures.
|
|
63
|
-
|
|
64
|
-
Scans tool_events for the given session_id. If any Skill call
|
|
65
|
-
had 2+ negative signals (retries, errors), creates a FIX candidate.
|
|
66
|
-
|
|
67
|
-
Zero-LLM. Runs in ~10ms on indexed table.
|
|
68
|
-
"""
|
|
69
|
-
|
|
70
|
-
def __init__(self, db_path: str | Path):
|
|
71
|
-
self._db_path = str(db_path)
|
|
72
|
-
|
|
73
|
-
def scan(self, session_id: str, profile_id: str = "default") -> list[EvolutionCandidate]:
|
|
74
|
-
if _check_memory_pressure():
|
|
75
|
-
return []
|
|
76
|
-
|
|
77
|
-
candidates = []
|
|
78
|
-
conn = sqlite3.connect(self._db_path, timeout=10)
|
|
79
|
-
conn.row_factory = sqlite3.Row
|
|
80
|
-
|
|
81
|
-
try:
|
|
82
|
-
# Get all Skill events for this session
|
|
83
|
-
rows = conn.execute(
|
|
84
|
-
"SELECT id, tool_name, input_summary, output_summary, created_at "
|
|
85
|
-
"FROM tool_events "
|
|
86
|
-
"WHERE session_id = ? AND profile_id = ? AND tool_name = 'Skill' "
|
|
87
|
-
"ORDER BY id ASC",
|
|
88
|
-
(session_id, profile_id),
|
|
89
|
-
).fetchall()
|
|
90
|
-
|
|
91
|
-
if not rows:
|
|
92
|
-
return []
|
|
93
|
-
|
|
94
|
-
# Parse skill names and count per-skill signals
|
|
95
|
-
skill_signals: dict[str, dict] = {}
|
|
96
|
-
for row in rows:
|
|
97
|
-
d = dict(row)
|
|
98
|
-
skill_name = self._extract_skill_name(d)
|
|
99
|
-
if not skill_name:
|
|
100
|
-
continue
|
|
101
|
-
|
|
102
|
-
if skill_name not in skill_signals:
|
|
103
|
-
skill_signals[skill_name] = {
|
|
104
|
-
"positive": 0, "negative": 0, "event_ids": [],
|
|
105
|
-
}
|
|
106
|
-
skill_signals[skill_name]["event_ids"].append(d["id"])
|
|
107
|
-
|
|
108
|
-
# Check execution traces for each skill
|
|
109
|
-
for skill_name, signals in skill_signals.items():
|
|
110
|
-
for event_id in signals["event_ids"]:
|
|
111
|
-
trace = conn.execute(
|
|
112
|
-
"SELECT tool_name, output_summary FROM tool_events "
|
|
113
|
-
"WHERE profile_id = ? AND id > ? ORDER BY id ASC LIMIT 5",
|
|
114
|
-
(profile_id, event_id),
|
|
115
|
-
).fetchall()
|
|
116
|
-
|
|
117
|
-
has_error = any(
|
|
118
|
-
"error" in (dict(t).get("output_summary", "") or "").lower()
|
|
119
|
-
for t in trace[:3]
|
|
120
|
-
if dict(t)["tool_name"] == "Bash"
|
|
121
|
-
)
|
|
122
|
-
has_retry = any(
|
|
123
|
-
dict(t)["tool_name"] == "Skill"
|
|
124
|
-
for t in trace[:3]
|
|
125
|
-
)
|
|
126
|
-
|
|
127
|
-
if has_error or has_retry:
|
|
128
|
-
signals["negative"] += 1
|
|
129
|
-
else:
|
|
130
|
-
signals["positive"] += 1
|
|
131
|
-
|
|
132
|
-
total_invocations = len(signals["event_ids"])
|
|
133
|
-
if signals["negative"] >= NEGATIVE_SIGNALS_THRESHOLD and total_invocations >= MIN_INVOCATIONS:
|
|
134
|
-
evidence = (
|
|
135
|
-
f"{signals['negative']} negative signals in session {session_id}",
|
|
136
|
-
f"{signals['positive']} positive signals",
|
|
137
|
-
)
|
|
138
|
-
candidates.append(EvolutionCandidate(
|
|
139
|
-
skill_name=skill_name,
|
|
140
|
-
evolution_type=EvolutionType.FIX,
|
|
141
|
-
trigger=TriggerType.POST_SESSION,
|
|
142
|
-
evidence=evidence,
|
|
143
|
-
effective_score=signals["positive"] / max(1, signals["positive"] + signals["negative"]),
|
|
144
|
-
invocation_count=len(signals["event_ids"]),
|
|
145
|
-
session_id=session_id,
|
|
146
|
-
))
|
|
147
|
-
|
|
148
|
-
except Exception as exc:
|
|
149
|
-
logger.debug("Post-session trigger scan failed: %s", exc)
|
|
150
|
-
finally:
|
|
151
|
-
conn.close()
|
|
152
|
-
|
|
153
|
-
return candidates
|
|
154
|
-
|
|
155
|
-
def _extract_skill_name(self, event: dict) -> str:
|
|
156
|
-
for field_key in ("input_summary", "output_summary"):
|
|
157
|
-
raw = event.get(field_key, "") or ""
|
|
158
|
-
if not raw:
|
|
159
|
-
continue
|
|
160
|
-
try:
|
|
161
|
-
parsed = json.loads(raw)
|
|
162
|
-
name = parsed.get("skill") or parsed.get("commandName", "")
|
|
163
|
-
if name:
|
|
164
|
-
return name
|
|
165
|
-
except (json.JSONDecodeError, TypeError):
|
|
166
|
-
# M-JSONPARSE: Fallback for non-JSON plain text
|
|
167
|
-
m = re.search(r"skill[:\s]+['\"]?(\S+)", raw, re.IGNORECASE)
|
|
168
|
-
if m:
|
|
169
|
-
return m.group(1).strip("'\"")
|
|
170
|
-
return ""
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
class DegradationTrigger:
|
|
174
|
-
"""Trigger 2: Detect skills with declining performance assertions.
|
|
175
|
-
|
|
176
|
-
Scans behavioral_assertions for skill_performance category.
|
|
177
|
-
If a skill's confidence dropped below threshold → FIX candidate.
|
|
178
|
-
If moderate with specific failure pattern → DERIVED candidate.
|
|
179
|
-
|
|
180
|
-
Zero-LLM. Runs in ~5ms.
|
|
181
|
-
"""
|
|
182
|
-
|
|
183
|
-
def __init__(self, db_path: str | Path):
|
|
184
|
-
self._db_path = str(db_path)
|
|
185
|
-
|
|
186
|
-
def scan(self, profile_id: str = "default") -> list[EvolutionCandidate]:
|
|
187
|
-
if _check_memory_pressure():
|
|
188
|
-
return []
|
|
189
|
-
|
|
190
|
-
candidates = []
|
|
191
|
-
conn = sqlite3.connect(self._db_path, timeout=10)
|
|
192
|
-
conn.row_factory = sqlite3.Row
|
|
193
|
-
|
|
194
|
-
try:
|
|
195
|
-
rows = conn.execute(
|
|
196
|
-
"SELECT trigger_condition, action, confidence, evidence_count "
|
|
197
|
-
"FROM behavioral_assertions "
|
|
198
|
-
"WHERE profile_id = ? AND category = 'skill_performance' "
|
|
199
|
-
"AND confidence > 0",
|
|
200
|
-
(profile_id,),
|
|
201
|
-
).fetchall()
|
|
202
|
-
|
|
203
|
-
for row in rows:
|
|
204
|
-
d = dict(row)
|
|
205
|
-
# H-TRIGGERPARSE: Extract skill name robustly.
|
|
206
|
-
# Primary: regex on trigger_condition. Fallback: old replace approach.
|
|
207
|
-
skill_name = ""
|
|
208
|
-
tc = d["trigger_condition"]
|
|
209
|
-
m = re.search(r"skill\s+(\S+)", tc)
|
|
210
|
-
if m:
|
|
211
|
-
skill_name = m.group(1)
|
|
212
|
-
else:
|
|
213
|
-
skill_name = tc.replace("when considering skill ", "")
|
|
214
|
-
confidence = d["confidence"]
|
|
215
|
-
evidence = d["evidence_count"]
|
|
216
|
-
|
|
217
|
-
if evidence < MIN_INVOCATIONS:
|
|
218
|
-
continue
|
|
219
|
-
|
|
220
|
-
# Parse effective score from action text
|
|
221
|
-
effective_score = self._parse_effective_score(d["action"])
|
|
222
|
-
|
|
223
|
-
if effective_score < DEGRADATION_THRESHOLD:
|
|
224
|
-
candidates.append(EvolutionCandidate(
|
|
225
|
-
skill_name=skill_name,
|
|
226
|
-
evolution_type=EvolutionType.FIX,
|
|
227
|
-
trigger=TriggerType.DEGRADATION,
|
|
228
|
-
evidence=(d["action"],),
|
|
229
|
-
effective_score=effective_score,
|
|
230
|
-
invocation_count=evidence,
|
|
231
|
-
))
|
|
232
|
-
elif effective_score < DERIVED_THRESHOLD:
|
|
233
|
-
candidates.append(EvolutionCandidate(
|
|
234
|
-
skill_name=skill_name,
|
|
235
|
-
evolution_type=EvolutionType.DERIVED,
|
|
236
|
-
trigger=TriggerType.DEGRADATION,
|
|
237
|
-
evidence=(d["action"],),
|
|
238
|
-
effective_score=effective_score,
|
|
239
|
-
invocation_count=evidence,
|
|
240
|
-
))
|
|
241
|
-
|
|
242
|
-
except Exception as exc:
|
|
243
|
-
logger.debug("Degradation trigger scan failed: %s", exc)
|
|
244
|
-
finally:
|
|
245
|
-
conn.close()
|
|
246
|
-
|
|
247
|
-
return candidates
|
|
248
|
-
|
|
249
|
-
def get_active_degraded(self, profile_id: str = "default") -> set[str]:
|
|
250
|
-
"""Return names of currently degraded skills (for anti-loop pruning)."""
|
|
251
|
-
conn = sqlite3.connect(self._db_path, timeout=10)
|
|
252
|
-
conn.row_factory = sqlite3.Row
|
|
253
|
-
degraded = set()
|
|
254
|
-
try:
|
|
255
|
-
rows = conn.execute(
|
|
256
|
-
"SELECT trigger_condition, action FROM behavioral_assertions "
|
|
257
|
-
"WHERE profile_id = ? AND category = 'skill_performance'",
|
|
258
|
-
(profile_id,),
|
|
259
|
-
).fetchall()
|
|
260
|
-
for row in rows:
|
|
261
|
-
d = dict(row)
|
|
262
|
-
score = self._parse_effective_score(d["action"])
|
|
263
|
-
if score < RECOVERY_THRESHOLD:
|
|
264
|
-
tc = d["trigger_condition"]
|
|
265
|
-
m = re.search(r"skill\s+(\S+)", tc)
|
|
266
|
-
name = m.group(1) if m else tc.replace("when considering skill ", "")
|
|
267
|
-
degraded.add(name)
|
|
268
|
-
except Exception:
|
|
269
|
-
pass
|
|
270
|
-
finally:
|
|
271
|
-
conn.close()
|
|
272
|
-
return degraded
|
|
273
|
-
|
|
274
|
-
def _parse_effective_score(self, action_text: str) -> float:
|
|
275
|
-
"""Extract effective score from assertion action text."""
|
|
276
|
-
import re
|
|
277
|
-
match = re.search(r"effective score:\s*([-\d.]+)%", action_text)
|
|
278
|
-
if match:
|
|
279
|
-
return float(match.group(1)) / 100.0
|
|
280
|
-
return 0.5
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
class HealthCheckTrigger:
|
|
284
|
-
"""Trigger 3: Periodic scan of all skill entities.
|
|
285
|
-
|
|
286
|
-
Runs every N consolidation cycles. Checks Entity Explorer for
|
|
287
|
-
skill entities with low performance.
|
|
288
|
-
|
|
289
|
-
Cycle count is persisted to the evolution_cycle_state table so it
|
|
290
|
-
survives process restarts (H-CYCLECNT fix).
|
|
291
|
-
|
|
292
|
-
Zero-LLM. Runs in ~20ms.
|
|
293
|
-
"""
|
|
294
|
-
|
|
295
|
-
_STATE_KEY = "health_check_cycle_count"
|
|
296
|
-
|
|
297
|
-
def __init__(self, db_path: str | Path, profile_id: str = "default"):
|
|
298
|
-
self._db_path = str(db_path)
|
|
299
|
-
self._profile_id = profile_id or "default"
|
|
300
|
-
self._check_every_n = 3 # Every 3rd consolidation (~18h)
|
|
301
|
-
|
|
302
|
-
def _read_cycle_count(self) -> int:
|
|
303
|
-
"""Read this profile's persisted cycle count."""
|
|
304
|
-
conn = sqlite3.connect(self._db_path, timeout=10)
|
|
305
|
-
try:
|
|
306
|
-
row = conn.execute(
|
|
307
|
-
"SELECT value FROM evolution_cycle_state "
|
|
308
|
-
"WHERE profile_id = ? AND key = ?",
|
|
309
|
-
(self._profile_id, self._STATE_KEY),
|
|
310
|
-
).fetchone()
|
|
311
|
-
return int(row[0]) if row else 0
|
|
312
|
-
except sqlite3.OperationalError:
|
|
313
|
-
# Table may not exist yet
|
|
314
|
-
return 0
|
|
315
|
-
finally:
|
|
316
|
-
conn.close()
|
|
317
|
-
|
|
318
|
-
def _write_cycle_count(self, count: int) -> None:
|
|
319
|
-
"""Persist this profile's cycle count.
|
|
320
|
-
|
|
321
|
-
The evolution_cycle_state table (profile_id, key) is created by
|
|
322
|
-
EvolutionStore with the correct composite-PK schema — we do NOT
|
|
323
|
-
CREATE it here (the old single-key CREATE produced a conflicting
|
|
324
|
-
schema and cross-profile collisions).
|
|
325
|
-
"""
|
|
326
|
-
conn = sqlite3.connect(self._db_path, timeout=10)
|
|
327
|
-
try:
|
|
328
|
-
# Correct composite-PK schema (matches EvolutionStore). Created only
|
|
329
|
-
# for standalone use (tests); a real deployment already has it.
|
|
330
|
-
conn.execute(
|
|
331
|
-
"CREATE TABLE IF NOT EXISTS evolution_cycle_state ("
|
|
332
|
-
"profile_id TEXT NOT NULL DEFAULT 'default', key TEXT NOT NULL, "
|
|
333
|
-
"value INTEGER DEFAULT 0, updated_at TEXT, "
|
|
334
|
-
"PRIMARY KEY (profile_id, key))",
|
|
335
|
-
)
|
|
336
|
-
now = datetime.now(timezone.utc).isoformat()
|
|
337
|
-
conn.execute(
|
|
338
|
-
"INSERT INTO evolution_cycle_state (profile_id, key, value, updated_at) "
|
|
339
|
-
"VALUES (?, ?, ?, ?) "
|
|
340
|
-
"ON CONFLICT(profile_id, key) DO UPDATE SET "
|
|
341
|
-
"value=excluded.value, updated_at=excluded.updated_at",
|
|
342
|
-
(self._profile_id, self._STATE_KEY, count, now),
|
|
343
|
-
)
|
|
344
|
-
conn.commit()
|
|
345
|
-
except sqlite3.OperationalError as exc:
|
|
346
|
-
logger.warning("Failed to persist cycle count: %s", exc)
|
|
347
|
-
finally:
|
|
348
|
-
conn.close()
|
|
349
|
-
|
|
350
|
-
def should_run(self) -> bool:
|
|
351
|
-
cycle_count = self._read_cycle_count() + 1
|
|
352
|
-
self._write_cycle_count(cycle_count)
|
|
353
|
-
return cycle_count % self._check_every_n == 0
|
|
354
|
-
|
|
355
|
-
def scan(self, profile_id: str = "default") -> list[EvolutionCandidate]:
|
|
356
|
-
if _check_memory_pressure():
|
|
357
|
-
return []
|
|
358
|
-
if not self.should_run():
|
|
359
|
-
return []
|
|
360
|
-
|
|
361
|
-
# Delegate to DegradationTrigger — same logic, different trigger label
|
|
362
|
-
deg = DegradationTrigger(self._db_path)
|
|
363
|
-
deg_candidates = deg.scan(profile_id)
|
|
364
|
-
|
|
365
|
-
# Re-label as health_check trigger
|
|
366
|
-
return [
|
|
367
|
-
EvolutionCandidate(
|
|
368
|
-
skill_name=c.skill_name,
|
|
369
|
-
evolution_type=c.evolution_type,
|
|
370
|
-
trigger=TriggerType.HEALTH_CHECK,
|
|
371
|
-
evidence=c.evidence,
|
|
372
|
-
effective_score=c.effective_score,
|
|
373
|
-
invocation_count=c.invocation_count,
|
|
374
|
-
)
|
|
375
|
-
for c in deg_candidates
|
|
376
|
-
]
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
# Copyright (c) 2026 Varun Pratap Bhardwaj / Qualixar
|
|
2
|
-
# Licensed under AGPL-3.0-or-later - see LICENSE file
|
|
3
|
-
# Part of SuperLocalMemory V3 | https://qualixar.com | https://varunpratap.com
|
|
4
|
-
|
|
5
|
-
"""Skill Evolution type definitions.
|
|
6
|
-
|
|
7
|
-
Immutable data classes for evolution candidates, records, and lineage.
|
|
8
|
-
All types are frozen dataclasses — no mutation after creation.
|
|
9
|
-
|
|
10
|
-
Part of Qualixar | Author: Varun Pratap Bhardwaj
|
|
11
|
-
"""
|
|
12
|
-
|
|
13
|
-
from __future__ import annotations
|
|
14
|
-
|
|
15
|
-
from dataclasses import dataclass, field
|
|
16
|
-
from enum import Enum
|
|
17
|
-
from typing import Optional
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
class EvolutionType(str, Enum):
|
|
21
|
-
"""How the skill is being evolved."""
|
|
22
|
-
FIX = "fix" # Repair broken skill in-place
|
|
23
|
-
DERIVED = "derived" # Create specialized variant
|
|
24
|
-
CAPTURED = "captured" # Extract new skill from patterns
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
class TriggerType(str, Enum):
|
|
28
|
-
"""What triggered the evolution."""
|
|
29
|
-
POST_SESSION = "post_session" # Session Stop hook analysis
|
|
30
|
-
DEGRADATION = "degradation" # Behavioral assertion confidence drop
|
|
31
|
-
HEALTH_CHECK = "health_check" # Periodic consolidation scan
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
class EvolutionStatus(str, Enum):
|
|
35
|
-
"""Pipeline status.
|
|
36
|
-
|
|
37
|
-
State machine (Phase 2):
|
|
38
|
-
CANDIDATE → VERIFIED_QUARANTINED → APPROVED → ACTIVE
|
|
39
|
-
↓ ↓
|
|
40
|
-
REJECTED ROLLED_BACK
|
|
41
|
-
|
|
42
|
-
Legacy values (CONFIRMED, MUTATED, VERIFIED, PROMOTED) are retained for
|
|
43
|
-
DB-row compatibility with pre-Phase-2 records. New code uses the states
|
|
44
|
-
above. PROMOTED is an alias for what is now VERIFIED_QUARANTINED in the
|
|
45
|
-
live-in-quarantine sense; new records use VERIFIED_QUARANTINED explicitly.
|
|
46
|
-
"""
|
|
47
|
-
CANDIDATE = "candidate" # Detected, not yet processed
|
|
48
|
-
CONFIRMED = "confirmed" # Legacy: LLM gate passed
|
|
49
|
-
MUTATED = "mutated" # Legacy: new SKILL.md generated
|
|
50
|
-
VERIFIED = "verified" # Legacy: blind verify passed
|
|
51
|
-
PROMOTED = "promoted" # Legacy alias for quarantined
|
|
52
|
-
REJECTED = "rejected" # Failed gate or verification
|
|
53
|
-
FAILED = "failed" # Error during evolution
|
|
54
|
-
# --- Phase 2 states ---
|
|
55
|
-
VERIFIED_QUARANTINED = "verified_quarantined" # Passed blind verify, in quarantine
|
|
56
|
-
APPROVED = "approved" # Human/policy approved; ready to activate
|
|
57
|
-
ACTIVE = "active" # Live in skill directory
|
|
58
|
-
ROLLED_BACK = "rolled_back" # Activation reverted; prior artifact restored
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
@dataclass(frozen=True)
|
|
62
|
-
class EvolutionCandidate:
|
|
63
|
-
"""A skill flagged for potential evolution."""
|
|
64
|
-
skill_name: str
|
|
65
|
-
evolution_type: EvolutionType
|
|
66
|
-
trigger: TriggerType
|
|
67
|
-
evidence: tuple[str, ...] = ()
|
|
68
|
-
effective_score: float = 0.0
|
|
69
|
-
invocation_count: int = 0
|
|
70
|
-
session_id: str = ""
|
|
71
|
-
project_path: str = ""
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
@dataclass(frozen=True)
|
|
75
|
-
class EvolutionRecord:
|
|
76
|
-
"""Persisted record of an evolution attempt."""
|
|
77
|
-
id: str
|
|
78
|
-
skill_name: str
|
|
79
|
-
parent_skill_id: Optional[str]
|
|
80
|
-
evolution_type: EvolutionType
|
|
81
|
-
trigger: TriggerType
|
|
82
|
-
generation: int = 0
|
|
83
|
-
status: EvolutionStatus = EvolutionStatus.CANDIDATE
|
|
84
|
-
mutation_summary: str = ""
|
|
85
|
-
evidence: tuple[str, ...] = ()
|
|
86
|
-
original_content: str = ""
|
|
87
|
-
evolved_content: str = ""
|
|
88
|
-
content_diff: str = ""
|
|
89
|
-
blind_verified: bool = False
|
|
90
|
-
rejection_reason: str = ""
|
|
91
|
-
created_at: str = ""
|
|
92
|
-
completed_at: str = ""
|
|
93
|
-
# Phase 2 (CRIT-2): the sanitized directory name inside the quarantine root,
|
|
94
|
-
# e.g. "brainstorming-vabc12". Distinct from skill_name ("brainstorming").
|
|
95
|
-
# Stored in-memory; not persisted to skill_evolution_log (no schema column).
|
|
96
|
-
# The activator reads this to locate the artifact; it is also stored in the
|
|
97
|
-
# VERIFIED_QUARANTINED transition metadata for auditability.
|
|
98
|
-
quarantine_dir_name: str = ""
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
@dataclass(frozen=True)
|
|
102
|
-
class SkillLineage:
|
|
103
|
-
"""Lineage metadata for an evolved skill."""
|
|
104
|
-
skill_id: str
|
|
105
|
-
parent_skill_id: Optional[str]
|
|
106
|
-
evolution_type: EvolutionType
|
|
107
|
-
generation: int
|
|
108
|
-
trigger: TriggerType
|
|
109
|
-
mutation_summary: str = ""
|
|
110
|
-
created_at: str = ""
|
|
111
|
-
|
|
112
|
-
@property
|
|
113
|
-
def is_root(self) -> bool:
|
|
114
|
-
return self.parent_skill_id is None
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
# Copyright (c) 2026 Varun Pratap Bhardwaj / Qualixar
|
|
2
|
-
# Licensed under AGPL-3.0-or-later - see LICENSE file
|
|
3
|
-
# Part of SuperLocalMemory V3 | https://qualixar.com | https://varunpratap.com
|
|
4
|
-
|
|
5
|
-
"""Graph backends for SuperLocalMemory v3.4.5."""
|
|
6
|
-
|
|
7
|
-
from superlocalmemory.graph.cozo_backend import CozoDBGraphBackend
|
|
8
|
-
|
|
9
|
-
__all__ = ["CozoDBGraphBackend"]
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
# Copyright (c) 2026 Varun Pratap Bhardwaj / Qualixar
|
|
2
|
-
# Licensed under AGPL-3.0-or-later - see LICENSE file
|
|
3
|
-
|
|
4
|
-
"""The graph projection's reader: one profile's edges, for the walk to run over.
|
|
5
|
-
|
|
6
|
-
WHY THIS EXISTS
|
|
7
|
-
---------------
|
|
8
|
-
Until this module the projection had no reader. It was written on every store,
|
|
9
|
-
drained through an outbox, kept at bidirectional parity with SQLite, and purged
|
|
10
|
-
on erasure -- and nothing in retrieval ever queried it. That is the same failure
|
|
11
|
-
the traversal removed from ``cozo_backend`` had ("correct data that nothing could
|
|
12
|
-
use"), one layer up, and it is the honest answer to "what does the graph engine
|
|
13
|
-
buy us": on its own, nothing. It buys something here.
|
|
14
|
-
|
|
15
|
-
Measured on a copy of the author's 208,151-edge store, warmed, five runs:
|
|
16
|
-
|
|
17
|
-
reading one profile's adjacency p50
|
|
18
|
-
SQLite (open + logical-edge query) 2,477 ms
|
|
19
|
-
graph projection (one query) 395 ms 6.3x
|
|
20
|
-
|
|
21
|
-
Recall rebuilds that adjacency whenever the edge count changes or the cache TTL
|
|
22
|
-
expires, so this is on the recall path, and the gap widens with edge count.
|
|
23
|
-
|
|
24
|
-
WHAT IT DELIBERATELY DOES NOT DO
|
|
25
|
-
--------------------------------
|
|
26
|
-
It returns edges. It does not walk them, rank them, or decide what is visible.
|
|
27
|
-
The walk lives once, in ``retrieval/spreading``, as a pure function of a
|
|
28
|
-
snapshot; visibility is applied by the channel, which prunes both endpoints
|
|
29
|
-
against the visible fact corpus. A source that answered questions instead of
|
|
30
|
-
supplying data is exactly the defect the ``AdjacencySource`` seam was carved to
|
|
31
|
-
prevent -- the previous attempt shipped a second, differently-behaved
|
|
32
|
-
implementation of the walk and diverged from SQLite on every query.
|
|
33
|
-
|
|
34
|
-
WHEN IT DECLINES
|
|
35
|
-
----------------
|
|
36
|
-
Global and shared scope. The projection stores one ``profile_id`` per edge and
|
|
37
|
-
this reader filters on it, so a query that must also see another profile's global
|
|
38
|
-
or shared memories would come back short. It returns ``None`` for those, and the
|
|
39
|
-
channel reads SQLite, which is the only store that can answer them. Failing over
|
|
40
|
-
is not a fallback here; it is the correct answer.
|
|
41
|
-
"""
|
|
42
|
-
|
|
43
|
-
from __future__ import annotations
|
|
44
|
-
|
|
45
|
-
import logging
|
|
46
|
-
from typing import Any
|
|
47
|
-
|
|
48
|
-
logger = logging.getLogger(__name__)
|
|
49
|
-
|
|
50
|
-
#: One profile's edges, both directions left to the caller. Selecting the three
|
|
51
|
-
#: columns the walk needs -- and no ``edge_type`` -- lets the engine collapse
|
|
52
|
-
#: parallel typed edges between the same pair, which is what the snapshot does
|
|
53
|
-
#: with them anyway.
|
|
54
|
-
_EDGE_QUERY = (
|
|
55
|
-
"?[source, target, weight] := *edge{from_id: source, to_id: target, "
|
|
56
|
-
" weight: weight, profile_id: $pid}"
|
|
57
|
-
)
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
class CozoAdjacencySource:
|
|
61
|
-
"""Supplies one profile's fact graph from the projection. Data only."""
|
|
62
|
-
|
|
63
|
-
name = "cozo"
|
|
64
|
-
|
|
65
|
-
def __init__(self, backend: Any) -> None:
|
|
66
|
-
self._backend = backend
|
|
67
|
-
|
|
68
|
-
def edges(
|
|
69
|
-
self,
|
|
70
|
-
profile_id: str,
|
|
71
|
-
*,
|
|
72
|
-
include_global: bool = False,
|
|
73
|
-
include_shared: bool = False,
|
|
74
|
-
) -> list[tuple[str, str, float]] | None:
|
|
75
|
-
"""Edge triples, or ``None`` when this source cannot answer in full.
|
|
76
|
-
|
|
77
|
-
``None`` is not an error and must not be logged as one -- it is this
|
|
78
|
-
source saying the question is outside what it holds. A partial answer
|
|
79
|
-
would silently shrink the graph around a candidate, which is the failure
|
|
80
|
-
mode that makes a projection worse than no projection.
|
|
81
|
-
"""
|
|
82
|
-
if include_global or include_shared:
|
|
83
|
-
return None
|
|
84
|
-
client = getattr(self._backend, "_db", None)
|
|
85
|
-
if client is None:
|
|
86
|
-
return None
|
|
87
|
-
try:
|
|
88
|
-
result = client.run(_EDGE_QUERY, {"pid": profile_id})
|
|
89
|
-
except Exception as exc: # noqa: BLE001 -- SQLite can always answer this
|
|
90
|
-
logger.debug("Graph projection unreadable, using SQLite: %s", exc)
|
|
91
|
-
return None
|
|
92
|
-
try:
|
|
93
|
-
return [
|
|
94
|
-
(str(row[0]), str(row[1]), float(row[2]))
|
|
95
|
-
for row in result.values.tolist()
|
|
96
|
-
]
|
|
97
|
-
except Exception as exc: # noqa: BLE001
|
|
98
|
-
logger.debug("Graph projection returned an unusable shape: %s", exc)
|
|
99
|
-
return None
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
def adjacency_source() -> CozoAdjacencySource | None:
|
|
103
|
-
"""The live projection's reader, or None when there is not one.
|
|
104
|
-
|
|
105
|
-
Resolved through the orchestrator because the daemon is the projection's sole
|
|
106
|
-
owner: it runs on RocksDB, which takes an exclusive process lock, so a second
|
|
107
|
-
process opening it would not degrade -- it would fail. ``get_graph_backend``
|
|
108
|
-
already returns the backend only while its status is active.
|
|
109
|
-
"""
|
|
110
|
-
try:
|
|
111
|
-
from superlocalmemory.core.backend_orchestrator import get_orchestrator
|
|
112
|
-
|
|
113
|
-
orchestrator = get_orchestrator()
|
|
114
|
-
if orchestrator is None:
|
|
115
|
-
return None
|
|
116
|
-
backend = orchestrator.get_graph_backend()
|
|
117
|
-
if backend is None:
|
|
118
|
-
return None
|
|
119
|
-
return CozoAdjacencySource(backend)
|
|
120
|
-
except Exception as exc: # noqa: BLE001
|
|
121
|
-
logger.debug("No graph projection available: %s", exc)
|
|
122
|
-
return None
|