superlocalmemory 4.1.13 → 4.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +48 -0
- package/README.md +3 -3
- package/package.json +1 -8
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/CLAUDE.md +3 -3
- package/plugin/agents/slm-governance-advisor.md +1 -1
- package/plugin/agents/slm-loop-runner.md +1 -1
- package/plugin/agents/slm-memory-advisor.md +1 -1
- package/plugin/agents/slm-optimize-advisor.md +1 -1
- package/plugin/requirements.txt +1 -1
- package/plugin/skills/slm-cache/SKILL.md +1 -1
- package/plugin/skills/slm-compress/SKILL.md +1 -1
- package/plugin/skills/slm-governance/SKILL.md +1 -1
- package/plugin/skills/slm-graph/SKILL.md +1 -1
- package/plugin/skills/slm-loop/SKILL.md +1 -1
- package/plugin/skills/slm-mesh/SKILL.md +1 -1
- package/plugin/skills/slm-profile/SKILL.md +1 -1
- package/plugin/skills/slm-recall/SKILL.md +1 -1
- package/plugin/skills/slm-remember/SKILL.md +1 -1
- package/plugin/skills/slm-scope/SKILL.md +1 -1
- package/plugin/skills/slm-session/SKILL.md +1 -1
- package/plugin/skills/slm-status/SKILL.md +1 -1
- package/plugin-src/agents/slm-memory-advisor.md +1 -1
- package/plugin-src/agents/slm-optimize-advisor.md +1 -1
- package/plugin-src/rules/AGENTS.md +1 -1
- package/plugin-src/skills/slm-cache/SKILL.md +1 -1
- package/plugin-src/skills/slm-compress/SKILL.md +1 -1
- package/plugin-src/skills/slm-governance/SKILL.md +1 -1
- package/plugin-src/skills/slm-graph/SKILL.md +1 -1
- package/plugin-src/skills/slm-loop/SKILL.md +1 -1
- package/plugin-src/skills/slm-mesh/SKILL.md +1 -1
- package/plugin-src/skills/slm-profile/SKILL.md +1 -1
- package/plugin-src/skills/slm-recall/SKILL.md +1 -1
- package/plugin-src/skills/slm-remember/SKILL.md +1 -1
- package/plugin-src/skills/slm-scope/SKILL.md +1 -1
- package/plugin-src/skills/slm-session/SKILL.md +1 -1
- package/plugin-src/skills/slm-status/SKILL.md +1 -1
- package/scripts/postinstall.js +71 -2
- package/pyproject.toml +0 -250
- package/src/superlocalmemory/__init__.py +0 -82
- package/src/superlocalmemory/access/__init__.py +0 -3
- package/src/superlocalmemory/access/rbac.py +0 -575
- package/src/superlocalmemory/attribution/__init__.py +0 -9
- package/src/superlocalmemory/attribution/signer.py +0 -173
- package/src/superlocalmemory/attribution/watermark.py +0 -189
- package/src/superlocalmemory/brain/__init__.py +0 -5
- package/src/superlocalmemory/brain/truth.py +0 -418
- package/src/superlocalmemory/cli/__init__.py +0 -5
- package/src/superlocalmemory/cli/__main__.py +0 -17
- package/src/superlocalmemory/cli/_lazy_init.py +0 -115
- package/src/superlocalmemory/cli/cache_cmd.py +0 -198
- package/src/superlocalmemory/cli/commands.py +0 -4710
- package/src/superlocalmemory/cli/compress_cmd.py +0 -151
- package/src/superlocalmemory/cli/context_commands.py +0 -193
- package/src/superlocalmemory/cli/daemon.py +0 -909
- package/src/superlocalmemory/cli/db_migrate.py +0 -150
- package/src/superlocalmemory/cli/diagnostics_cmd.py +0 -101
- package/src/superlocalmemory/cli/escape_hatch.py +0 -220
- package/src/superlocalmemory/cli/evidence_cmd.py +0 -103
- package/src/superlocalmemory/cli/gdpr_cmd.py +0 -792
- package/src/superlocalmemory/cli/gdpr_io.py +0 -109
- package/src/superlocalmemory/cli/help_cmd.py +0 -197
- package/src/superlocalmemory/cli/host_upgrades.py +0 -189
- package/src/superlocalmemory/cli/ingest_cmd.py +0 -327
- package/src/superlocalmemory/cli/json_output.py +0 -81
- package/src/superlocalmemory/cli/loop_cmd.py +0 -187
- package/src/superlocalmemory/cli/main.py +0 -1145
- package/src/superlocalmemory/cli/mesh_cmd.py +0 -38
- package/src/superlocalmemory/cli/migrate_cmd.py +0 -55
- package/src/superlocalmemory/cli/ops_cmd.py +0 -281
- package/src/superlocalmemory/cli/optimize_cmd.py +0 -179
- package/src/superlocalmemory/cli/optimize_constants.py +0 -31
- package/src/superlocalmemory/cli/pending_store.py +0 -296
- package/src/superlocalmemory/cli/proxy_cmd.py +0 -108
- package/src/superlocalmemory/cli/scale_engine_cmd.py +0 -56
- package/src/superlocalmemory/cli/service_installer.py +0 -373
- package/src/superlocalmemory/cli/setup_wizard.py +0 -1162
- package/src/superlocalmemory/cli/summary_cmd.py +0 -215
- package/src/superlocalmemory/cli/version_banner.py +0 -202
- package/src/superlocalmemory/cli/wizard_v3426_options.py +0 -129
- package/src/superlocalmemory/code_graph/__init__.py +0 -46
- package/src/superlocalmemory/code_graph/blast_radius.py +0 -177
- package/src/superlocalmemory/code_graph/bridge/__init__.py +0 -36
- package/src/superlocalmemory/code_graph/bridge/entity_resolver.py +0 -490
- package/src/superlocalmemory/code_graph/bridge/event_listeners.py +0 -206
- package/src/superlocalmemory/code_graph/bridge/fact_enricher.py +0 -159
- package/src/superlocalmemory/code_graph/bridge/hebbian_linker.py +0 -170
- package/src/superlocalmemory/code_graph/bridge/maintenance.py +0 -220
- package/src/superlocalmemory/code_graph/bridge/temporal_checker.py +0 -152
- package/src/superlocalmemory/code_graph/changes.py +0 -363
- package/src/superlocalmemory/code_graph/communities.py +0 -299
- package/src/superlocalmemory/code_graph/config.py +0 -154
- package/src/superlocalmemory/code_graph/database.py +0 -526
- package/src/superlocalmemory/code_graph/extractors/__init__.py +0 -95
- package/src/superlocalmemory/code_graph/extractors/python.py +0 -413
- package/src/superlocalmemory/code_graph/extractors/typescript.py +0 -556
- package/src/superlocalmemory/code_graph/flows.py +0 -350
- package/src/superlocalmemory/code_graph/git_hooks.py +0 -226
- package/src/superlocalmemory/code_graph/graph_engine.py +0 -295
- package/src/superlocalmemory/code_graph/graph_store.py +0 -335
- package/src/superlocalmemory/code_graph/incremental.py +0 -200
- package/src/superlocalmemory/code_graph/models.py +0 -130
- package/src/superlocalmemory/code_graph/parser.py +0 -687
- package/src/superlocalmemory/code_graph/resolver.py +0 -321
- package/src/superlocalmemory/code_graph/search.py +0 -460
- package/src/superlocalmemory/code_graph/service.py +0 -95
- package/src/superlocalmemory/code_graph/watcher.py +0 -207
- package/src/superlocalmemory/compliance/__init__.py +0 -0
- package/src/superlocalmemory/compliance/abac.py +0 -204
- package/src/superlocalmemory/compliance/audit.py +0 -385
- package/src/superlocalmemory/compliance/eu_ai_act.py +0 -101
- package/src/superlocalmemory/compliance/gdpr.py +0 -1479
- package/src/superlocalmemory/compliance/lifecycle.py +0 -158
- package/src/superlocalmemory/compliance/retention.py +0 -415
- package/src/superlocalmemory/compliance/scheduler.py +0 -217
- package/src/superlocalmemory/contracts/__init__.py +0 -1
- package/src/superlocalmemory/contracts/schemas/agent-experience-v1.schema.json +0 -92
- package/src/superlocalmemory/contracts/schemas/agent-integration-contract-v2.schema.json +0 -46
- package/src/superlocalmemory/contracts/schemas/cognitive-turn-receipt-v1.schema.json +0 -59
- package/src/superlocalmemory/contracts/v402.py +0 -62
- package/src/superlocalmemory/core/__init__.py +0 -0
- package/src/superlocalmemory/core/actor_context.py +0 -166
- package/src/superlocalmemory/core/admission.py +0 -769
- package/src/superlocalmemory/core/backend_orchestrator.py +0 -637
- package/src/superlocalmemory/core/block_hygiene.py +0 -147
- package/src/superlocalmemory/core/community_summary.py +0 -267
- package/src/superlocalmemory/core/component_healer.py +0 -144
- package/src/superlocalmemory/core/component_registry.py +0 -514
- package/src/superlocalmemory/core/config.py +0 -2204
- package/src/superlocalmemory/core/consolidation_engine.py +0 -983
- package/src/superlocalmemory/core/context_cache.py +0 -574
- package/src/superlocalmemory/core/derivation_lineage.py +0 -246
- package/src/superlocalmemory/core/embedding_worker.py +0 -208
- package/src/superlocalmemory/core/embeddings.py +0 -1052
- package/src/superlocalmemory/core/engine.py +0 -1395
- package/src/superlocalmemory/core/engine_capabilities.py +0 -24
- package/src/superlocalmemory/core/engine_ingestion.py +0 -983
- package/src/superlocalmemory/core/engine_lock.py +0 -75
- package/src/superlocalmemory/core/engine_wiring.py +0 -776
- package/src/superlocalmemory/core/entity_community.py +0 -178
- package/src/superlocalmemory/core/error_envelope.py +0 -60
- package/src/superlocalmemory/core/evidence_bundle.py +0 -528
- package/src/superlocalmemory/core/fact_consolidator.py +0 -812
- package/src/superlocalmemory/core/file_lock.py +0 -92
- package/src/superlocalmemory/core/graph_analyzer.py +0 -456
- package/src/superlocalmemory/core/graph_metrics.py +0 -597
- package/src/superlocalmemory/core/graph_pruner.py +0 -939
- package/src/superlocalmemory/core/health_monitor.py +0 -338
- package/src/superlocalmemory/core/hooks.py +0 -65
- package/src/superlocalmemory/core/ingest_gate.py +0 -133
- package/src/superlocalmemory/core/ingest_policy.py +0 -38
- package/src/superlocalmemory/core/ingestion_command.py +0 -1042
- package/src/superlocalmemory/core/injection.py +0 -434
- package/src/superlocalmemory/core/install_detector.py +0 -131
- package/src/superlocalmemory/core/key_expander.py +0 -138
- package/src/superlocalmemory/core/lifecycle_state.py +0 -153
- package/src/superlocalmemory/core/maintenance.py +0 -777
- package/src/superlocalmemory/core/maintenance_scheduler.py +0 -507
- package/src/superlocalmemory/core/materialization_control.py +0 -20
- package/src/superlocalmemory/core/mcp_embedder_proxy.py +0 -89
- package/src/superlocalmemory/core/memory_health.py +0 -266
- package/src/superlocalmemory/core/mode_capability.py +0 -111
- package/src/superlocalmemory/core/modes.py +0 -168
- package/src/superlocalmemory/core/mutations.py +0 -688
- package/src/superlocalmemory/core/ollama_embedder.py +0 -266
- package/src/superlocalmemory/core/ollama_validator.py +0 -315
- package/src/superlocalmemory/core/operation_policy.py +0 -92
- package/src/superlocalmemory/core/operation_policy_registry.py +0 -542
- package/src/superlocalmemory/core/operation_request.py +0 -127
- package/src/superlocalmemory/core/ops_remediation.py +0 -542
- package/src/superlocalmemory/core/pii.py +0 -105
- package/src/superlocalmemory/core/platform_utils.py +0 -138
- package/src/superlocalmemory/core/profiles.py +0 -234
- package/src/superlocalmemory/core/progressive_abstraction.py +0 -208
- package/src/superlocalmemory/core/projection_drain.py +0 -380
- package/src/superlocalmemory/core/queue_consumer.py +0 -168
- package/src/superlocalmemory/core/ram_lock.py +0 -160
- package/src/superlocalmemory/core/rate_limit.py +0 -151
- package/src/superlocalmemory/core/recall_gate.py +0 -95
- package/src/superlocalmemory/core/recall_pipeline.py +0 -1337
- package/src/superlocalmemory/core/recall_queue.py +0 -377
- package/src/superlocalmemory/core/recall_worker.py +0 -414
- package/src/superlocalmemory/core/registry.py +0 -121
- package/src/superlocalmemory/core/remember_admission.py +0 -161
- package/src/superlocalmemory/core/remember_runtime.py +0 -1190
- package/src/superlocalmemory/core/remote_mode.py +0 -214
- package/src/superlocalmemory/core/reranker_worker.py +0 -338
- package/src/superlocalmemory/core/safe_fs.py +0 -108
- package/src/superlocalmemory/core/scale_autopromote.py +0 -196
- package/src/superlocalmemory/core/scale_engine.py +0 -915
- package/src/superlocalmemory/core/score_contract.py +0 -82
- package/src/superlocalmemory/core/security_primitives.py +0 -672
- package/src/superlocalmemory/core/session_identity.py +0 -98
- package/src/superlocalmemory/core/shadow_router.py +0 -319
- package/src/superlocalmemory/core/slm_disabled.py +0 -85
- package/src/superlocalmemory/core/status_contract.py +0 -108
- package/src/superlocalmemory/core/store_pipeline.py +0 -1404
- package/src/superlocalmemory/core/summarizer.py +0 -200
- package/src/superlocalmemory/core/tier_manager.py +0 -461
- package/src/superlocalmemory/core/topic_signature.py +0 -156
- package/src/superlocalmemory/core/transactions/__init__.py +0 -78
- package/src/superlocalmemory/core/transactions/concrete_owners.py +0 -604
- package/src/superlocalmemory/core/transactions/erasure.py +0 -825
- package/src/superlocalmemory/core/transactions/manifest.py +0 -255
- package/src/superlocalmemory/core/transactions/manifest_key.py +0 -155
- package/src/superlocalmemory/core/transactions/obligations.py +0 -272
- package/src/superlocalmemory/core/transactions/owners.py +0 -114
- package/src/superlocalmemory/core/transactions/reconciler.py +0 -285
- package/src/superlocalmemory/core/transactions/service.py +0 -330
- package/src/superlocalmemory/core/worker_pool.py +0 -377
- package/src/superlocalmemory/core/working_memory.py +0 -288
- package/src/superlocalmemory/dynamics/__init__.py +0 -0
- package/src/superlocalmemory/dynamics/activation_guided_quantization.py +0 -374
- package/src/superlocalmemory/dynamics/eap_scheduler.py +0 -294
- package/src/superlocalmemory/dynamics/ebbinghaus_langevin_coupling.py +0 -171
- package/src/superlocalmemory/dynamics/fisher_langevin_coupling.py +0 -227
- package/src/superlocalmemory/encoding/__init__.py +0 -0
- package/src/superlocalmemory/encoding/auto_linker.py +0 -308
- package/src/superlocalmemory/encoding/cognitive_consolidator.py +0 -899
- package/src/superlocalmemory/encoding/consolidator.py +0 -472
- package/src/superlocalmemory/encoding/context_generator.py +0 -175
- package/src/superlocalmemory/encoding/emotional.py +0 -189
- package/src/superlocalmemory/encoding/entity_reflexion.py +0 -200
- package/src/superlocalmemory/encoding/entity_resolver.py +0 -687
- package/src/superlocalmemory/encoding/entropy_gate.py +0 -101
- package/src/superlocalmemory/encoding/fact_extractor.py +0 -877
- package/src/superlocalmemory/encoding/foresight.py +0 -93
- package/src/superlocalmemory/encoding/graph_builder.py +0 -346
- package/src/superlocalmemory/encoding/observation_builder.py +0 -177
- package/src/superlocalmemory/encoding/prospective_markers.py +0 -262
- package/src/superlocalmemory/encoding/scene_builder.py +0 -410
- package/src/superlocalmemory/encoding/signal_inference.py +0 -90
- package/src/superlocalmemory/encoding/temporal_parser.py +0 -432
- package/src/superlocalmemory/encoding/temporal_validator.py +0 -572
- package/src/superlocalmemory/encoding/type_router.py +0 -237
- package/src/superlocalmemory/evaluation/__init__.py +0 -13
- package/src/superlocalmemory/evaluation/calibration.py +0 -308
- package/src/superlocalmemory/evolution/__init__.py +0 -29
- package/src/superlocalmemory/evolution/blind_verifier.py +0 -122
- package/src/superlocalmemory/evolution/budget.py +0 -356
- package/src/superlocalmemory/evolution/evolution_store.py +0 -619
- package/src/superlocalmemory/evolution/llm_dispatch.py +0 -559
- package/src/superlocalmemory/evolution/model_selection.py +0 -175
- package/src/superlocalmemory/evolution/mutation_generator.py +0 -226
- package/src/superlocalmemory/evolution/skill_activator.py +0 -270
- package/src/superlocalmemory/evolution/skill_evolver.py +0 -928
- package/src/superlocalmemory/evolution/triggers.py +0 -376
- package/src/superlocalmemory/evolution/types.py +0 -114
- package/src/superlocalmemory/graph/__init__.py +0 -9
- package/src/superlocalmemory/graph/cozo_adjacency.py +0 -122
- package/src/superlocalmemory/graph/cozo_backend.py +0 -751
- package/src/superlocalmemory/hooks/__init__.py +0 -3
- package/src/superlocalmemory/hooks/_outcome_common.py +0 -523
- package/src/superlocalmemory/hooks/adapter_base.py +0 -347
- package/src/superlocalmemory/hooks/antigravity_adapter.py +0 -171
- package/src/superlocalmemory/hooks/auto_capture.py +0 -133
- package/src/superlocalmemory/hooks/auto_invoker.py +0 -521
- package/src/superlocalmemory/hooks/auto_parameterize.py +0 -147
- package/src/superlocalmemory/hooks/auto_recall.py +0 -191
- package/src/superlocalmemory/hooks/auto_recall_hook.py +0 -251
- package/src/superlocalmemory/hooks/before_web_hook.py +0 -131
- package/src/superlocalmemory/hooks/claude_code_hooks.py +0 -637
- package/src/superlocalmemory/hooks/codex_assets.py +0 -251
- package/src/superlocalmemory/hooks/codex_hooks.py +0 -186
- package/src/superlocalmemory/hooks/context_payload.py +0 -311
- package/src/superlocalmemory/hooks/copilot_adapter.py +0 -208
- package/src/superlocalmemory/hooks/cross_platform_connector.py +0 -90
- package/src/superlocalmemory/hooks/cursor_adapter.py +0 -173
- package/src/superlocalmemory/hooks/hook_daemon.py +0 -295
- package/src/superlocalmemory/hooks/hook_handlers.py +0 -822
- package/src/superlocalmemory/hooks/ide_connector.py +0 -246
- package/src/superlocalmemory/hooks/memory_protocol.py +0 -158
- package/src/superlocalmemory/hooks/portable_kit.py +0 -755
- package/src/superlocalmemory/hooks/post_tool_async_hook.py +0 -183
- package/src/superlocalmemory/hooks/post_tool_outcome_hook.py +0 -351
- package/src/superlocalmemory/hooks/prewarm_auth.py +0 -187
- package/src/superlocalmemory/hooks/rules_engine.py +0 -99
- package/src/superlocalmemory/hooks/session_registry.py +0 -330
- package/src/superlocalmemory/hooks/stop_outcome_hook.py +0 -138
- package/src/superlocalmemory/hooks/sync_loop.py +0 -114
- package/src/superlocalmemory/hooks/topic_shift_hook.py +0 -302
- package/src/superlocalmemory/hooks/user_prompt_hook.py +0 -131
- package/src/superlocalmemory/hooks/user_prompt_rehash_hook.py +0 -210
- package/src/superlocalmemory/infra/__init__.py +0 -3
- package/src/superlocalmemory/infra/auth_middleware.py +0 -145
- package/src/superlocalmemory/infra/backup.py +0 -974
- package/src/superlocalmemory/infra/backup_obligations.py +0 -423
- package/src/superlocalmemory/infra/cache_manager.py +0 -267
- package/src/superlocalmemory/infra/cloud_backup.py +0 -788
- package/src/superlocalmemory/infra/daemon_identity.py +0 -300
- package/src/superlocalmemory/infra/data_root.py +0 -238
- package/src/superlocalmemory/infra/event_bus.py +0 -637
- package/src/superlocalmemory/infra/local_diagnostics.py +0 -327
- package/src/superlocalmemory/infra/pid_manager.py +0 -193
- package/src/superlocalmemory/infra/process_identity.py +0 -180
- package/src/superlocalmemory/infra/process_reaper.py +0 -624
- package/src/superlocalmemory/infra/rate_limiter.py +0 -228
- package/src/superlocalmemory/infra/self_heal.py +0 -401
- package/src/superlocalmemory/infra/version_integrity.py +0 -229
- package/src/superlocalmemory/ingestion/__init__.py +0 -13
- package/src/superlocalmemory/ingestion/adapter_manager.py +0 -255
- package/src/superlocalmemory/ingestion/base_adapter.py +0 -171
- package/src/superlocalmemory/ingestion/calendar_adapter.py +0 -349
- package/src/superlocalmemory/ingestion/credentials.py +0 -125
- package/src/superlocalmemory/ingestion/gmail_adapter.py +0 -378
- package/src/superlocalmemory/ingestion/parsers.py +0 -100
- package/src/superlocalmemory/ingestion/transcript_adapter.py +0 -161
- package/src/superlocalmemory/integrations/__init__.py +0 -1
- package/src/superlocalmemory/integrations/bounded_loops_mcp.py +0 -431
- package/src/superlocalmemory/integrations/bounded_loops_v051.py +0 -236
- package/src/superlocalmemory/learning/__init__.py +0 -0
- package/src/superlocalmemory/learning/adaptive.py +0 -172
- package/src/superlocalmemory/learning/arm_catalog.py +0 -97
- package/src/superlocalmemory/learning/assertion_miner.py +0 -403
- package/src/superlocalmemory/learning/bandit.py +0 -654
- package/src/superlocalmemory/learning/bandit_cache.py +0 -131
- package/src/superlocalmemory/learning/behavioral.py +0 -542
- package/src/superlocalmemory/learning/bootstrap.py +0 -298
- package/src/superlocalmemory/learning/consolidation_cycle.py +0 -398
- package/src/superlocalmemory/learning/consolidation_quantization_worker.py +0 -115
- package/src/superlocalmemory/learning/consolidation_worker.py +0 -261
- package/src/superlocalmemory/learning/cross_project.py +0 -408
- package/src/superlocalmemory/learning/database.py +0 -698
- package/src/superlocalmemory/learning/dedup_hnsw.py +0 -413
- package/src/superlocalmemory/learning/engagement.py +0 -487
- package/src/superlocalmemory/learning/engagement_features.py +0 -279
- package/src/superlocalmemory/learning/ensemble.py +0 -309
- package/src/superlocalmemory/learning/entity_compiler.py +0 -356
- package/src/superlocalmemory/learning/fact_outcome_joins.py +0 -207
- package/src/superlocalmemory/learning/features.py +0 -138
- package/src/superlocalmemory/learning/feedback.py +0 -724
- package/src/superlocalmemory/learning/forgetting_scheduler.py +0 -375
- package/src/superlocalmemory/learning/hnsw_dedup.py +0 -69
- package/src/superlocalmemory/learning/labeler.py +0 -85
- package/src/superlocalmemory/learning/legacy_migration.py +0 -316
- package/src/superlocalmemory/learning/lightgbm_subprocess.py +0 -236
- package/src/superlocalmemory/learning/memory_merge.py +0 -175
- package/src/superlocalmemory/learning/model_cache.py +0 -267
- package/src/superlocalmemory/learning/model_rollback.py +0 -281
- package/src/superlocalmemory/learning/outcome_queue.py +0 -306
- package/src/superlocalmemory/learning/outcomes.py +0 -286
- package/src/superlocalmemory/learning/pattern_miner.py +0 -465
- package/src/superlocalmemory/learning/pattern_miner_constants.py +0 -90
- package/src/superlocalmemory/learning/pcos.py +0 -291
- package/src/superlocalmemory/learning/project_context.py +0 -366
- package/src/superlocalmemory/learning/propensity.py +0 -131
- package/src/superlocalmemory/learning/ranker.py +0 -300
- package/src/superlocalmemory/learning/ranker_common.py +0 -163
- package/src/superlocalmemory/learning/ranker_retrain_legacy.py +0 -210
- package/src/superlocalmemory/learning/ranker_retrain_online.py +0 -423
- package/src/superlocalmemory/learning/reward.py +0 -888
- package/src/superlocalmemory/learning/reward_archive.py +0 -223
- package/src/superlocalmemory/learning/reward_boost.py +0 -211
- package/src/superlocalmemory/learning/reward_from_outcomes.py +0 -365
- package/src/superlocalmemory/learning/reward_model.py +0 -144
- package/src/superlocalmemory/learning/reward_proxy.py +0 -578
- package/src/superlocalmemory/learning/shadow_test.py +0 -524
- package/src/superlocalmemory/learning/signal_kinds.py +0 -79
- package/src/superlocalmemory/learning/signal_worker.py +0 -268
- package/src/superlocalmemory/learning/signals.py +0 -646
- package/src/superlocalmemory/learning/skill_performance_miner.py +0 -422
- package/src/superlocalmemory/learning/source_quality.py +0 -828
- package/src/superlocalmemory/learning/trigram_index.py +0 -548
- package/src/superlocalmemory/learning/workflows.py +0 -309
- package/src/superlocalmemory/llm/__init__.py +0 -0
- package/src/superlocalmemory/llm/backbone.py +0 -364
- package/src/superlocalmemory/loops/__init__.py +0 -58
- package/src/superlocalmemory/loops/budget.py +0 -58
- package/src/superlocalmemory/loops/engine.py +0 -174
- package/src/superlocalmemory/loops/ledger.py +0 -298
- package/src/superlocalmemory/loops/models.py +0 -152
- package/src/superlocalmemory/loops/rules.py +0 -52
- package/src/superlocalmemory/math/__init__.py +0 -0
- package/src/superlocalmemory/math/ebbinghaus.py +0 -352
- package/src/superlocalmemory/math/fisher.py +0 -356
- package/src/superlocalmemory/math/fisher_quantized.py +0 -255
- package/src/superlocalmemory/math/hopfield.py +0 -282
- package/src/superlocalmemory/math/langevin.py +0 -411
- package/src/superlocalmemory/math/polar_quant.py +0 -414
- package/src/superlocalmemory/math/qjl.py +0 -115
- package/src/superlocalmemory/math/sheaf.py +0 -261
- package/src/superlocalmemory/math/turbo_quant.py +0 -318
- package/src/superlocalmemory/mcp/__init__.py +0 -0
- package/src/superlocalmemory/mcp/_daemon_proxy.py +0 -203
- package/src/superlocalmemory/mcp/_pool_adapter.py +0 -181
- package/src/superlocalmemory/mcp/_stdin_guard.py +0 -60
- package/src/superlocalmemory/mcp/agent_context.py +0 -115
- package/src/superlocalmemory/mcp/cli_fallback.py +0 -602
- package/src/superlocalmemory/mcp/http_transport.py +0 -85
- package/src/superlocalmemory/mcp/profiles.py +0 -154
- package/src/superlocalmemory/mcp/resources.py +0 -281
- package/src/superlocalmemory/mcp/server.py +0 -480
- package/src/superlocalmemory/mcp/session_binding.py +0 -98
- package/src/superlocalmemory/mcp/shared.py +0 -112
- package/src/superlocalmemory/mcp/tools.py +0 -18
- package/src/superlocalmemory/mcp/tools_active.py +0 -958
- package/src/superlocalmemory/mcp/tools_brain.py +0 -298
- package/src/superlocalmemory/mcp/tools_code_graph.py +0 -1717
- package/src/superlocalmemory/mcp/tools_context.py +0 -239
- package/src/superlocalmemory/mcp/tools_core.py +0 -1112
- package/src/superlocalmemory/mcp/tools_evolution.py +0 -343
- package/src/superlocalmemory/mcp/tools_learning.py +0 -393
- package/src/superlocalmemory/mcp/tools_loops.py +0 -345
- package/src/superlocalmemory/mcp/tools_mesh.py +0 -429
- package/src/superlocalmemory/mcp/tools_ops.py +0 -115
- package/src/superlocalmemory/mcp/tools_optimize.py +0 -322
- package/src/superlocalmemory/mcp/tools_summaries.py +0 -147
- package/src/superlocalmemory/mcp/tools_v28.py +0 -292
- package/src/superlocalmemory/mcp/tools_v3.py +0 -398
- package/src/superlocalmemory/mcp/tools_v33.py +0 -507
- package/src/superlocalmemory/mesh/__init__.py +0 -12
- package/src/superlocalmemory/mesh/broker.py +0 -812
- package/src/superlocalmemory/mesh/broker_security.py +0 -470
- package/src/superlocalmemory/mesh/discovery.py +0 -365
- package/src/superlocalmemory/mesh/lock_protocol.py +0 -313
- package/src/superlocalmemory/mesh/node_identity.py +0 -97
- package/src/superlocalmemory/mesh/outbox_remote.py +0 -429
- package/src/superlocalmemory/mesh/remote_sync.py +0 -829
- package/src/superlocalmemory/mesh/state_sync.py +0 -286
- package/src/superlocalmemory/migrations/__init__.py +0 -5
- package/src/superlocalmemory/migrations/v3_4_25_to_v3_4_26.py +0 -144
- package/src/superlocalmemory/optimize/NOTICE +0 -6
- package/src/superlocalmemory/optimize/__init__.py +0 -0
- package/src/superlocalmemory/optimize/adapters/__init__.py +0 -68
- package/src/superlocalmemory/optimize/adapters/_agent_registry.py +0 -120
- package/src/superlocalmemory/optimize/adapters/anthropic_adapter.py +0 -112
- package/src/superlocalmemory/optimize/adapters/openai_adapter.py +0 -122
- package/src/superlocalmemory/optimize/adapters/wrap.py +0 -228
- package/src/superlocalmemory/optimize/cache/__init__.py +0 -31
- package/src/superlocalmemory/optimize/cache/boundary_store.py +0 -488
- package/src/superlocalmemory/optimize/cache/centroid_store.py +0 -199
- package/src/superlocalmemory/optimize/cache/context_key.py +0 -67
- package/src/superlocalmemory/optimize/cache/exact.py +0 -88
- package/src/superlocalmemory/optimize/cache/invalidation.py +0 -36
- package/src/superlocalmemory/optimize/cache/key_builder.py +0 -111
- package/src/superlocalmemory/optimize/cache/manager.py +0 -737
- package/src/superlocalmemory/optimize/cache/semantic.py +0 -637
- package/src/superlocalmemory/optimize/cache/stampede.py +0 -50
- package/src/superlocalmemory/optimize/compress/__init__.py +0 -17
- package/src/superlocalmemory/optimize/compress/align.py +0 -159
- package/src/superlocalmemory/optimize/compress/ccr.py +0 -116
- package/src/superlocalmemory/optimize/compress/prose_llmlingua.py +0 -71
- package/src/superlocalmemory/optimize/compress/router.py +0 -667
- package/src/superlocalmemory/optimize/config/__init__.py +0 -56
- package/src/superlocalmemory/optimize/config/defaults.py +0 -43
- package/src/superlocalmemory/optimize/config/schema.py +0 -327
- package/src/superlocalmemory/optimize/config/store.py +0 -270
- package/src/superlocalmemory/optimize/metrics/__init__.py +0 -8
- package/src/superlocalmemory/optimize/metrics/counters.py +0 -155
- package/src/superlocalmemory/optimize/metrics/estimator.py +0 -87
- package/src/superlocalmemory/optimize/metrics/exporters.py +0 -77
- package/src/superlocalmemory/optimize/metrics/persistence.py +0 -115
- package/src/superlocalmemory/optimize/proxy/__init__.py +0 -28
- package/src/superlocalmemory/optimize/proxy/_helpers.py +0 -730
- package/src/superlocalmemory/optimize/proxy/anthropic_surface.py +0 -375
- package/src/superlocalmemory/optimize/proxy/capture.py +0 -550
- package/src/superlocalmemory/optimize/proxy/gemini_surface.py +0 -528
- package/src/superlocalmemory/optimize/proxy/lifecycle.py +0 -126
- package/src/superlocalmemory/optimize/proxy/openai_surface.py +0 -465
- package/src/superlocalmemory/optimize/proxy/server.py +0 -199
- package/src/superlocalmemory/optimize/proxy/vertex_surface.py +0 -246
- package/src/superlocalmemory/optimize/storage/__init__.py +0 -0
- package/src/superlocalmemory/optimize/storage/db.py +0 -1185
- package/src/superlocalmemory/optimize/storage/schema.py +0 -205
- package/src/superlocalmemory/parameterization/__init__.py +0 -47
- package/src/superlocalmemory/parameterization/cross_project.py +0 -12
- package/src/superlocalmemory/parameterization/pattern_extractor.py +0 -584
- package/src/superlocalmemory/parameterization/pii_filter.py +0 -106
- package/src/superlocalmemory/parameterization/prompt_injector.py +0 -219
- package/src/superlocalmemory/parameterization/prompt_lifecycle.py +0 -281
- package/src/superlocalmemory/parameterization/soft_prompt_generator.py +0 -542
- package/src/superlocalmemory/parameterization/workflow_miner.py +0 -17
- package/src/superlocalmemory/reliability/__init__.py +0 -45
- package/src/superlocalmemory/reliability/join_liveness.py +0 -301
- package/src/superlocalmemory/reliability/prior_distance.py +0 -243
- package/src/superlocalmemory/retrieval/__init__.py +0 -0
- package/src/superlocalmemory/retrieval/agentic.py +0 -367
- package/src/superlocalmemory/retrieval/ann_index.py +0 -235
- package/src/superlocalmemory/retrieval/bm25_channel.py +0 -451
- package/src/superlocalmemory/retrieval/bridge_discovery.py +0 -253
- package/src/superlocalmemory/retrieval/channel_registry.py +0 -154
- package/src/superlocalmemory/retrieval/channel_status.py +0 -117
- package/src/superlocalmemory/retrieval/engine.py +0 -1615
- package/src/superlocalmemory/retrieval/entity_channel.py +0 -994
- package/src/superlocalmemory/retrieval/forgetting_filter.py +0 -160
- package/src/superlocalmemory/retrieval/fusion.py +0 -81
- package/src/superlocalmemory/retrieval/graph_adjacency.py +0 -219
- package/src/superlocalmemory/retrieval/hopfield_channel.py +0 -465
- package/src/superlocalmemory/retrieval/profile_channel.py +0 -105
- package/src/superlocalmemory/retrieval/quantization_aware_search.py +0 -147
- package/src/superlocalmemory/retrieval/remote_reranker.py +0 -758
- package/src/superlocalmemory/retrieval/reranker.py +0 -674
- package/src/superlocalmemory/retrieval/scope_policy.py +0 -126
- package/src/superlocalmemory/retrieval/semantic_channel.py +0 -638
- package/src/superlocalmemory/retrieval/spreading.py +0 -288
- package/src/superlocalmemory/retrieval/spreading_activation.py +0 -616
- package/src/superlocalmemory/retrieval/strategy.py +0 -248
- package/src/superlocalmemory/retrieval/temporal_channel.py +0 -433
- package/src/superlocalmemory/retrieval/temporal_frame.py +0 -102
- package/src/superlocalmemory/retrieval/temporal_utils.py +0 -122
- package/src/superlocalmemory/retrieval/temporal_validity_filter.py +0 -499
- package/src/superlocalmemory/retrieval/time_window.py +0 -181
- package/src/superlocalmemory/retrieval/vector_store.py +0 -863
- package/src/superlocalmemory/server/__init__.py +0 -1
- package/src/superlocalmemory/server/api.py +0 -310
- package/src/superlocalmemory/server/asset_versions.py +0 -171
- package/src/superlocalmemory/server/bandit_loops.py +0 -158
- package/src/superlocalmemory/server/config_file.py +0 -90
- package/src/superlocalmemory/server/consolidation_runner.py +0 -140
- package/src/superlocalmemory/server/egress_policy.py +0 -258
- package/src/superlocalmemory/server/loopback.py +0 -85
- package/src/superlocalmemory/server/middleware/__init__.py +0 -11
- package/src/superlocalmemory/server/middleware/security_headers.py +0 -144
- package/src/superlocalmemory/server/origin.py +0 -55
- package/src/superlocalmemory/server/profile_runtime.py +0 -515
- package/src/superlocalmemory/server/rbac_enforce.py +0 -194
- package/src/superlocalmemory/server/recall_health.py +0 -343
- package/src/superlocalmemory/server/recall_serializer.py +0 -320
- package/src/superlocalmemory/server/route_mutations.py +0 -104
- package/src/superlocalmemory/server/routes/__init__.py +0 -4
- package/src/superlocalmemory/server/routes/abstraction.py +0 -314
- package/src/superlocalmemory/server/routes/adapters.py +0 -63
- package/src/superlocalmemory/server/routes/agents.py +0 -303
- package/src/superlocalmemory/server/routes/backup.py +0 -869
- package/src/superlocalmemory/server/routes/behavioral.py +0 -659
- package/src/superlocalmemory/server/routes/brain.py +0 -1892
- package/src/superlocalmemory/server/routes/chat.py +0 -393
- package/src/superlocalmemory/server/routes/compliance.py +0 -533
- package/src/superlocalmemory/server/routes/config_api.py +0 -703
- package/src/superlocalmemory/server/routes/data_io.py +0 -329
- package/src/superlocalmemory/server/routes/entity.py +0 -237
- package/src/superlocalmemory/server/routes/events.py +0 -214
- package/src/superlocalmemory/server/routes/evolution.py +0 -510
- package/src/superlocalmemory/server/routes/helpers.py +0 -499
- package/src/superlocalmemory/server/routes/ingest.py +0 -137
- package/src/superlocalmemory/server/routes/insights.py +0 -366
- package/src/superlocalmemory/server/routes/learning.py +0 -834
- package/src/superlocalmemory/server/routes/learning_telemetry.py +0 -154
- package/src/superlocalmemory/server/routes/lifecycle.py +0 -184
- package/src/superlocalmemory/server/routes/memories.py +0 -1661
- package/src/superlocalmemory/server/routes/mesh.py +0 -517
- package/src/superlocalmemory/server/routes/mesh_lock.py +0 -54
- package/src/superlocalmemory/server/routes/mesh_state.py +0 -63
- package/src/superlocalmemory/server/routes/optimize.py +0 -197
- package/src/superlocalmemory/server/routes/prewarm.py +0 -173
- package/src/superlocalmemory/server/routes/profiles.py +0 -292
- package/src/superlocalmemory/server/routes/ratelimit.py +0 -132
- package/src/superlocalmemory/server/routes/rbac.py +0 -366
- package/src/superlocalmemory/server/routes/stats.py +0 -385
- package/src/superlocalmemory/server/routes/tiers.py +0 -222
- package/src/superlocalmemory/server/routes/timeline.py +0 -258
- package/src/superlocalmemory/server/routes/token.py +0 -90
- package/src/superlocalmemory/server/routes/v3_api.py +0 -3023
- package/src/superlocalmemory/server/routes/ws.py +0 -171
- package/src/superlocalmemory/server/security_middleware.py +0 -89
- package/src/superlocalmemory/server/ui.py +0 -354
- package/src/superlocalmemory/server/unified_daemon.py +0 -6326
- package/src/superlocalmemory/server/write_identity.py +0 -195
- package/src/superlocalmemory/storage/__init__.py +0 -0
- package/src/superlocalmemory/storage/_migration_internals.py +0 -638
- package/src/superlocalmemory/storage/_schema_version.py +0 -174
- package/src/superlocalmemory/storage/access_log.py +0 -170
- package/src/superlocalmemory/storage/admission_codec.py +0 -129
- package/src/superlocalmemory/storage/admission_journal.py +0 -843
- package/src/superlocalmemory/storage/agent_experience.py +0 -546
- package/src/superlocalmemory/storage/backup.py +0 -531
- package/src/superlocalmemory/storage/correction_cases.py +0 -670
- package/src/superlocalmemory/storage/database.py +0 -3180
- package/src/superlocalmemory/storage/deferred_writes.py +0 -209
- package/src/superlocalmemory/storage/embedding_codec.py +0 -200
- package/src/superlocalmemory/storage/embedding_migrator.py +0 -672
- package/src/superlocalmemory/storage/erasure_fence.py +0 -45
- package/src/superlocalmemory/storage/execution_learning.py +0 -285
- package/src/superlocalmemory/storage/external_evidence.py +0 -359
- package/src/superlocalmemory/storage/generation_fence.py +0 -63
- package/src/superlocalmemory/storage/lineage_retention.py +0 -236
- package/src/superlocalmemory/storage/logical_edges.py +0 -86
- package/src/superlocalmemory/storage/memory_write.py +0 -115
- package/src/superlocalmemory/storage/migration_runner.py +0 -895
- package/src/superlocalmemory/storage/migration_v33.py +0 -140
- package/src/superlocalmemory/storage/migrations/M001_add_signal_features_columns.py +0 -67
- package/src/superlocalmemory/storage/migrations/M002_model_state_history.py +0 -107
- package/src/superlocalmemory/storage/migrations/M003_migration_log.py +0 -38
- package/src/superlocalmemory/storage/migrations/M004_cross_platform_sync_log.py +0 -46
- package/src/superlocalmemory/storage/migrations/M005_bandit_tables.py +0 -75
- package/src/superlocalmemory/storage/migrations/M006_action_outcomes_reward.py +0 -75
- package/src/superlocalmemory/storage/migrations/M007_pending_outcomes.py +0 -63
- package/src/superlocalmemory/storage/migrations/M009_model_lineage.py +0 -94
- package/src/superlocalmemory/storage/migrations/M010_evolution_config.py +0 -80
- package/src/superlocalmemory/storage/migrations/M011_archive_and_merge.py +0 -87
- package/src/superlocalmemory/storage/migrations/M012_shadow_observations.py +0 -72
- package/src/superlocalmemory/storage/migrations/M013_bi_temporal_columns.py +0 -55
- package/src/superlocalmemory/storage/migrations/M014_v345_scale_ready.py +0 -45
- package/src/superlocalmemory/storage/migrations/M015_add_pinned_column.py +0 -58
- package/src/superlocalmemory/storage/migrations/M016_add_scope_support.py +0 -120
- package/src/superlocalmemory/storage/migrations/M017_ccq_scope_column.py +0 -79
- package/src/superlocalmemory/storage/migrations/M018_ingestion_operations.py +0 -120
- package/src/superlocalmemory/storage/migrations/M019_derivation_lineage.py +0 -54
- package/src/superlocalmemory/storage/migrations/M020_model_state_integrity.py +0 -52
- package/src/superlocalmemory/storage/migrations/M021_ingestion_log_profile.py +0 -108
- package/src/superlocalmemory/storage/migrations/M022_entity_aliases_profile.py +0 -86
- package/src/superlocalmemory/storage/migrations/M023_mesh_profile_isolation.py +0 -194
- package/src/superlocalmemory/storage/migrations/M024_rbac_users_roles.py +0 -87
- package/src/superlocalmemory/storage/migrations/M025_perf_indexes.py +0 -90
- package/src/superlocalmemory/storage/migrations/M026_rbac_memberships_fk.py +0 -136
- package/src/superlocalmemory/storage/migrations/M027_transferable_patterns_profile.py +0 -163
- package/src/superlocalmemory/storage/migrations/M028_fact_entity_associations.py +0 -305
- package/src/superlocalmemory/storage/migrations/M029_behavioral_history_indexes.py +0 -137
- package/src/superlocalmemory/storage/migrations/M030_entity_explorer_indexes.py +0 -93
- package/src/superlocalmemory/storage/migrations/M031_dead_letter_operations.py +0 -80
- package/src/superlocalmemory/storage/migrations/M032_write_coordinator_admission.py +0 -188
- package/src/superlocalmemory/storage/migrations/M033_projection_transactions.py +0 -148
- package/src/superlocalmemory/storage/migrations/M034_obligation_integrity.py +0 -58
- package/src/superlocalmemory/storage/migrations/M035_erasure_receipts.py +0 -113
- package/src/superlocalmemory/storage/migrations/M036_vector_row_map.py +0 -107
- package/src/superlocalmemory/storage/migrations/M037_manifest_hmac_version.py +0 -162
- package/src/superlocalmemory/storage/migrations/M038_learning_feedback_channel.py +0 -77
- package/src/superlocalmemory/storage/migrations/M039_scene_fact_members.py +0 -137
- package/src/superlocalmemory/storage/migrations/M040_agent_experience_receipts.py +0 -254
- package/src/superlocalmemory/storage/migrations/M041_external_evidence_receipts.py +0 -189
- package/src/superlocalmemory/storage/migrations/M042_correction_case_ledger.py +0 -245
- package/src/superlocalmemory/storage/migrations/M043_quarantine_display_summaries.py +0 -512
- package/src/superlocalmemory/storage/migrations/M044_play_carries_its_own_evidence.py +0 -127
- package/src/superlocalmemory/storage/migrations/M045_fact_outcome_score.py +0 -158
- package/src/superlocalmemory/storage/migrations/M046_prospective_memory_has_its_own_name.py +0 -620
- package/src/superlocalmemory/storage/migrations/M047_fisher_vectors_are_stored_like_every_other_vector.py +0 -306
- package/src/superlocalmemory/storage/migrations/M048_upcoming_holds_only_what_is_upcoming.py +0 -229
- package/src/superlocalmemory/storage/migrations/M049_a_schema_version_marker_is_one_row.py +0 -201
- package/src/superlocalmemory/storage/migrations/M050_execution_learning_v2.py +0 -70
- package/src/superlocalmemory/storage/migrations/__init__.py +0 -103
- package/src/superlocalmemory/storage/migrations.py +0 -333
- package/src/superlocalmemory/storage/models.py +0 -500
- package/src/superlocalmemory/storage/projection_outbox.py +0 -346
- package/src/superlocalmemory/storage/quantized_store.py +0 -280
- package/src/superlocalmemory/storage/read_connection.py +0 -115
- package/src/superlocalmemory/storage/retention_policy.py +0 -860
- package/src/superlocalmemory/storage/schema.py +0 -1108
- package/src/superlocalmemory/storage/schema_code_graph.py +0 -282
- package/src/superlocalmemory/storage/schema_v32.py +0 -382
- package/src/superlocalmemory/storage/schema_v3410.py +0 -159
- package/src/superlocalmemory/storage/schema_v3411.py +0 -149
- package/src/superlocalmemory/storage/schema_v343.py +0 -315
- package/src/superlocalmemory/storage/schema_v345.py +0 -109
- package/src/superlocalmemory/storage/schema_v347.py +0 -140
- package/src/superlocalmemory/storage/sqlite_vectors.py +0 -169
- package/src/superlocalmemory/storage/v2_migrator.py +0 -466
- package/src/superlocalmemory/storage/write_coordinator.py +0 -949
- package/src/superlocalmemory/storage/write_lock.py +0 -88
- package/src/superlocalmemory/summaries/__init__.py +0 -37
- package/src/superlocalmemory/summaries/base.py +0 -267
- package/src/superlocalmemory/summaries/daily_reflection.py +0 -340
- package/src/superlocalmemory/summaries/non_answer.py +0 -223
- package/src/superlocalmemory/summaries/project_work_log.py +0 -440
- package/src/superlocalmemory/summaries/session_summary.py +0 -311
- package/src/superlocalmemory/trust/__init__.py +0 -0
- package/src/superlocalmemory/trust/gate.py +0 -171
- package/src/superlocalmemory/trust/provenance.py +0 -124
- package/src/superlocalmemory/trust/scorer.py +0 -413
- package/src/superlocalmemory/trust/signals.py +0 -153
- package/src/superlocalmemory/ui/assets/slm-icon-white.svg +0 -64
- package/src/superlocalmemory/ui/assets/slm-icon.svg +0 -36
- package/src/superlocalmemory/ui/css/brain.css +0 -409
- package/src/superlocalmemory/ui/css/design-system.css +0 -696
- package/src/superlocalmemory/ui/css/legacy-dashboard.css +0 -663
- package/src/superlocalmemory/ui/css/neural-glass.css +0 -1599
- package/src/superlocalmemory/ui/css/od-bridge.css +0 -158
- package/src/superlocalmemory/ui/favicon.svg +0 -36
- package/src/superlocalmemory/ui/index.html +0 -1638
- package/src/superlocalmemory/ui/js/agents.js +0 -192
- package/src/superlocalmemory/ui/js/auto-settings.js +0 -624
- package/src/superlocalmemory/ui/js/brain.js +0 -1400
- package/src/superlocalmemory/ui/js/clusters.js +0 -326
- package/src/superlocalmemory/ui/js/compliance.js +0 -307
- package/src/superlocalmemory/ui/js/core.js +0 -566
- package/src/superlocalmemory/ui/js/dashboard.js +0 -503
- package/src/superlocalmemory/ui/js/event-delegation.js +0 -113
- package/src/superlocalmemory/ui/js/events.js +0 -178
- package/src/superlocalmemory/ui/js/fact-detail.js +0 -142
- package/src/superlocalmemory/ui/js/feedback.js +0 -339
- package/src/superlocalmemory/ui/js/graph-event-bus.js +0 -83
- package/src/superlocalmemory/ui/js/graph-filters.js +0 -220
- package/src/superlocalmemory/ui/js/graph-ui.js +0 -214
- package/src/superlocalmemory/ui/js/ide-status.js +0 -115
- package/src/superlocalmemory/ui/js/init.js +0 -54
- package/src/superlocalmemory/ui/js/knowledge-graph.js +0 -945
- package/src/superlocalmemory/ui/js/lifecycle.js +0 -387
- package/src/superlocalmemory/ui/js/math-health.js +0 -114
- package/src/superlocalmemory/ui/js/memories.js +0 -394
- package/src/superlocalmemory/ui/js/memory-chat.js +0 -371
- package/src/superlocalmemory/ui/js/memory-timeline.js +0 -265
- package/src/superlocalmemory/ui/js/modal.js +0 -733
- package/src/superlocalmemory/ui/js/ng-entities.js +0 -298
- package/src/superlocalmemory/ui/js/ng-health.js +0 -208
- package/src/superlocalmemory/ui/js/ng-ingestion.js +0 -203
- package/src/superlocalmemory/ui/js/ng-mesh.js +0 -374
- package/src/superlocalmemory/ui/js/ng-shell.js +0 -524
- package/src/superlocalmemory/ui/js/ng-skills.js +0 -663
- package/src/superlocalmemory/ui/js/od-agents.js +0 -588
- package/src/superlocalmemory/ui/js/od-auth-gate.js +0 -257
- package/src/superlocalmemory/ui/js/od-backup.js +0 -878
- package/src/superlocalmemory/ui/js/od-boundedloops.js +0 -324
- package/src/superlocalmemory/ui/js/od-brain.js +0 -1095
- package/src/superlocalmemory/ui/js/od-compliance-ext.js +0 -301
- package/src/superlocalmemory/ui/js/od-components.js +0 -147
- package/src/superlocalmemory/ui/js/od-entities.js +0 -622
- package/src/superlocalmemory/ui/js/od-graph.js +0 -776
- package/src/superlocalmemory/ui/js/od-health.js +0 -579
- package/src/superlocalmemory/ui/js/od-mcp.js +0 -508
- package/src/superlocalmemory/ui/js/od-memories.js +0 -1499
- package/src/superlocalmemory/ui/js/od-mesh.js +0 -645
- package/src/superlocalmemory/ui/js/od-operations.js +0 -1268
- package/src/superlocalmemory/ui/js/od-ops-health.js +0 -417
- package/src/superlocalmemory/ui/js/od-optimize.js +0 -828
- package/src/superlocalmemory/ui/js/od-settings.js +0 -1275
- package/src/superlocalmemory/ui/js/od-shell.js +0 -819
- package/src/superlocalmemory/ui/js/od-skills.js +0 -600
- package/src/superlocalmemory/ui/js/od-team.js +0 -265
- package/src/superlocalmemory/ui/js/optimize.js +0 -191
- package/src/superlocalmemory/ui/js/profiles.js +0 -362
- package/src/superlocalmemory/ui/js/quick-actions.js +0 -334
- package/src/superlocalmemory/ui/js/recall-lab.js +0 -373
- package/src/superlocalmemory/ui/js/search.js +0 -86
- package/src/superlocalmemory/ui/js/settings.js +0 -556
- package/src/superlocalmemory/ui/js/timeline.js +0 -62
- package/src/superlocalmemory/ui/js/trust-dashboard.js +0 -225
- package/src/superlocalmemory/ui/vendor/bootstrap-icons/bootstrap-icons.css +0 -2018
- package/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff +0 -0
- package/src/superlocalmemory/ui/vendor/bootstrap-icons/fonts/bootstrap-icons.woff2 +0 -0
- package/src/superlocalmemory/ui/vendor/bootstrap.bundle.min.js +0 -7
- package/src/superlocalmemory/ui/vendor/bootstrap.min.css +0 -6
- package/src/superlocalmemory/ui/vendor/d3.v7.min.js +0 -2
- package/src/superlocalmemory/ui/vendor/graphology-library.min.js +0 -2
- package/src/superlocalmemory/ui/vendor/graphology.umd.min.js +0 -2
- package/src/superlocalmemory/ui/vendor/inter-ui/inter-variable.min.css +0 -8
- package/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable-Italic.woff2 +0 -0
- package/src/superlocalmemory/ui/vendor/inter-ui/variable/InterVariable.woff2 +0 -0
- package/src/superlocalmemory/ui/vendor/sigma.min.js +0 -1
- package/src/superlocalmemory/vector/__init__.py +0 -9
- package/src/superlocalmemory/vector/lancedb_backend.py +0 -366
|
@@ -1,542 +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.3
|
|
4
|
-
|
|
5
|
-
"""SoftPromptGenerator — Convert extracted patterns to text soft prompts.
|
|
6
|
-
|
|
7
|
-
Pure text personality encoding. No LoRA, no model weights.
|
|
8
|
-
Token budget management with priority ordering by category.
|
|
9
|
-
|
|
10
|
-
Part of Qualixar | Author: Varun Pratap Bhardwaj
|
|
11
|
-
"""
|
|
12
|
-
|
|
13
|
-
from __future__ import annotations
|
|
14
|
-
|
|
15
|
-
import logging
|
|
16
|
-
import uuid
|
|
17
|
-
from collections import defaultdict
|
|
18
|
-
from dataclasses import dataclass
|
|
19
|
-
from typing import TYPE_CHECKING
|
|
20
|
-
|
|
21
|
-
if TYPE_CHECKING:
|
|
22
|
-
from superlocalmemory.core.config import ParameterizationConfig
|
|
23
|
-
|
|
24
|
-
from superlocalmemory.parameterization.pattern_extractor import (
|
|
25
|
-
PatternAssertion,
|
|
26
|
-
PatternCategory,
|
|
27
|
-
)
|
|
28
|
-
from superlocalmemory.parameterization.pii_filter import PIIFilter
|
|
29
|
-
|
|
30
|
-
logger = logging.getLogger(__name__)
|
|
31
|
-
|
|
32
|
-
# ---------------------------------------------------------------------------
|
|
33
|
-
# Category templates — natural language patterns for each category
|
|
34
|
-
# ---------------------------------------------------------------------------
|
|
35
|
-
|
|
36
|
-
CATEGORY_TEMPLATES: dict[str, str] = {
|
|
37
|
-
"identity": (
|
|
38
|
-
"The user is {role} with expertise in {domains}. "
|
|
39
|
-
"They work at {organization}."
|
|
40
|
-
),
|
|
41
|
-
"tech_preference": (
|
|
42
|
-
"The user's preferred technology stack includes: {technologies}. "
|
|
43
|
-
"Default to these when generating code or making recommendations."
|
|
44
|
-
),
|
|
45
|
-
"communication_style": (
|
|
46
|
-
"The user prefers {style} responses. {specific_preferences}"
|
|
47
|
-
),
|
|
48
|
-
"workflow_pattern": (
|
|
49
|
-
"The user typically {workflow_description}. "
|
|
50
|
-
"Anticipate this workflow when assisting."
|
|
51
|
-
),
|
|
52
|
-
"project_context": (
|
|
53
|
-
"Current active project: {project_name}. "
|
|
54
|
-
"Key context: {context_summary}."
|
|
55
|
-
),
|
|
56
|
-
# Says only what is actually known — that these subjects recur — rather
|
|
57
|
-
# than inferring a preference, a project or a tool choice from them.
|
|
58
|
-
"topic_interest": (
|
|
59
|
-
"Subjects that come up often in the user's notes: {topics}."
|
|
60
|
-
),
|
|
61
|
-
"decision_history": (
|
|
62
|
-
"Recent key decisions: {decisions}. "
|
|
63
|
-
"These reflect the user's current direction."
|
|
64
|
-
),
|
|
65
|
-
"avoidance": (
|
|
66
|
-
"The user has explicitly asked to avoid: {avoid_list}. "
|
|
67
|
-
"Do not suggest or use these."
|
|
68
|
-
),
|
|
69
|
-
# v3.4.7: Behavioral assertions — learned patterns from tool usage
|
|
70
|
-
"behavioral": (
|
|
71
|
-
"Learned behavior: When {trigger}, {action}. "
|
|
72
|
-
"(Confidence: {confidence}%, based on {evidence} observations)"
|
|
73
|
-
),
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
CATEGORY_PRIORITY_ORDER: list[str] = [
|
|
77
|
-
"identity",
|
|
78
|
-
"tech_preference",
|
|
79
|
-
"communication_style",
|
|
80
|
-
"behavioral", # v3.4.7: behavioral assertions after communication style
|
|
81
|
-
"workflow_pattern",
|
|
82
|
-
"project_context",
|
|
83
|
-
"topic_interest",
|
|
84
|
-
"decision_history",
|
|
85
|
-
"avoidance",
|
|
86
|
-
]
|
|
87
|
-
|
|
88
|
-
# ---------------------------------------------------------------------------
|
|
89
|
-
# Data model
|
|
90
|
-
# ---------------------------------------------------------------------------
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
@dataclass
|
|
94
|
-
class SoftPromptTemplate:
|
|
95
|
-
"""A generated soft prompt for one category."""
|
|
96
|
-
|
|
97
|
-
prompt_id: str
|
|
98
|
-
profile_id: str
|
|
99
|
-
category: str
|
|
100
|
-
content: str
|
|
101
|
-
source_pattern_ids: list[str]
|
|
102
|
-
confidence: float
|
|
103
|
-
effectiveness: float
|
|
104
|
-
token_count: int
|
|
105
|
-
retention_score: float
|
|
106
|
-
active: bool
|
|
107
|
-
version: int
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
# ---------------------------------------------------------------------------
|
|
111
|
-
# SoftPromptGenerator class
|
|
112
|
-
# ---------------------------------------------------------------------------
|
|
113
|
-
|
|
114
|
-
def _empty_words() -> frozenset[str]:
|
|
115
|
-
"""Words that say nothing about a person when listed as a preference.
|
|
116
|
-
|
|
117
|
-
Read from the list the miner already filters on, so there is one definition
|
|
118
|
-
to extend rather than two that drift.
|
|
119
|
-
"""
|
|
120
|
-
try:
|
|
121
|
-
from superlocalmemory.learning.pattern_miner_constants import STOPWORDS
|
|
122
|
-
|
|
123
|
-
return frozenset(STOPWORDS)
|
|
124
|
-
except Exception: # pragma: no cover — the check degrades to "keep it"
|
|
125
|
-
return frozenset()
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
_EMPTY_WORDS = _empty_words()
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
def _is_substantive(category: str, values: dict[str, str]) -> bool:
|
|
132
|
-
"""Whether a rendered prompt says anything at all about the user.
|
|
133
|
-
|
|
134
|
-
Deliberately weak, and it got that way by being wrong in the other
|
|
135
|
-
direction first. The original version required a ``tech_preference`` claim to
|
|
136
|
-
name something from a fixed vocabulary of technologies — which discarded
|
|
137
|
-
``Node.js``, ``Git``, ``pip``, ``npm``, ``zig`` and every stack the list did
|
|
138
|
-
not happen to enumerate. Those were the GENUINE rows on a live store. A
|
|
139
|
-
filter that silently drops real preferences to catch fake ones is a worse
|
|
140
|
-
failure than the one it was added for, because nothing reports it.
|
|
141
|
-
|
|
142
|
-
What it was actually added for no longer arrives here. The live nonsense —
|
|
143
|
-
"preferred technology stack includes: test, gate, practices, compliance,
|
|
144
|
-
projects, while, their, processing, data" — came from word-frequency topics
|
|
145
|
-
being mapped onto this category, and they are now their own category, where
|
|
146
|
-
the same words form a true statement. This is the remaining floor: a prompt
|
|
147
|
-
built entirely out of words that appear in most English sentences says
|
|
148
|
-
nothing, whatever category it lands in.
|
|
149
|
-
|
|
150
|
-
Length is checked per TERM and only against that word list, never as a
|
|
151
|
-
minimum: "CTO", "AWS", "npm" and "R" are all shorter than a threshold would
|
|
152
|
-
allow and all mean something.
|
|
153
|
-
"""
|
|
154
|
-
filled = [
|
|
155
|
-
v.strip() for v in values.values()
|
|
156
|
-
if isinstance(v, str) and v.strip()
|
|
157
|
-
]
|
|
158
|
-
if not filled:
|
|
159
|
-
return False
|
|
160
|
-
terms = [
|
|
161
|
-
t.strip().lower()
|
|
162
|
-
for value in filled
|
|
163
|
-
for t in value.replace(";", ",").split(",")
|
|
164
|
-
if t.strip()
|
|
165
|
-
]
|
|
166
|
-
if not terms:
|
|
167
|
-
return False
|
|
168
|
-
return any(term not in _EMPTY_WORDS for term in terms)
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
def _fix_stutter(content: str) -> str:
|
|
172
|
-
"""Remove the duplicated conjunction where a template meets its value.
|
|
173
|
-
|
|
174
|
-
``"The user typically {workflow_description}"`` was rendering as "The user
|
|
175
|
-
typically When when using X" — the template supplies the lead-in and the
|
|
176
|
-
value already starts with its own. Observed on 19 of 34 stored prompts.
|
|
177
|
-
"""
|
|
178
|
-
import re as _re
|
|
179
|
-
|
|
180
|
-
for word in ("when", "typically", "prefers", "often", "usually"):
|
|
181
|
-
content = _re.sub(
|
|
182
|
-
rf"\b({word})\s+{word}\b", r"\1", content, flags=_re.IGNORECASE,
|
|
183
|
-
)
|
|
184
|
-
# "typically When when" collapses to "typically When"; then the lead-in and
|
|
185
|
-
# the value's own opener are adjacent duplicates of different case.
|
|
186
|
-
content = _re.sub(r"\btypically\s+When\b", "typically, when", content)
|
|
187
|
-
return content
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
class SoftPromptGenerator:
|
|
191
|
-
"""Convert extracted pattern assertions into natural language soft prompts.
|
|
192
|
-
|
|
193
|
-
Respects token budget and priority ordering. Filters PII.
|
|
194
|
-
"""
|
|
195
|
-
|
|
196
|
-
def __init__(self, config: ParameterizationConfig) -> None:
|
|
197
|
-
self._config = config
|
|
198
|
-
self._pii_filter = PIIFilter()
|
|
199
|
-
|
|
200
|
-
# ------------------------------------------------------------------
|
|
201
|
-
# Public API
|
|
202
|
-
# ------------------------------------------------------------------
|
|
203
|
-
|
|
204
|
-
def generate(
|
|
205
|
-
self,
|
|
206
|
-
patterns: list[PatternAssertion],
|
|
207
|
-
profile_id: str,
|
|
208
|
-
*,
|
|
209
|
-
high_reward_source_ids: set[str] | None = None,
|
|
210
|
-
) -> list[SoftPromptTemplate]:
|
|
211
|
-
"""Master generation pipeline: filter, group, render, budget-trim.
|
|
212
|
-
|
|
213
|
-
Args:
|
|
214
|
-
patterns: Extracted pattern assertions.
|
|
215
|
-
profile_id: Target profile.
|
|
216
|
-
high_reward_source_ids: Optional v3.4.22 (LLD-12 §6) filter —
|
|
217
|
-
when provided, only patterns whose source_ids intersect
|
|
218
|
-
this set are considered. When None (default), behaviour
|
|
219
|
-
matches pre-v3.4.22 and every pattern flows through.
|
|
220
|
-
|
|
221
|
-
Returns:
|
|
222
|
-
List of SoftPromptTemplate, ordered by category priority,
|
|
223
|
-
within token budget.
|
|
224
|
-
"""
|
|
225
|
-
# Filter to enabled categories
|
|
226
|
-
enabled = set(self._config.categories_enabled)
|
|
227
|
-
filtered = [
|
|
228
|
-
p for p in patterns if p.category.value in enabled
|
|
229
|
-
]
|
|
230
|
-
|
|
231
|
-
# v3.4.22 (LLD-12 §6): reward-aware filter — opt-in only.
|
|
232
|
-
if high_reward_source_ids is not None:
|
|
233
|
-
filtered = [
|
|
234
|
-
p for p in filtered
|
|
235
|
-
if set(p.source_ids) & high_reward_source_ids
|
|
236
|
-
]
|
|
237
|
-
|
|
238
|
-
# Group by category
|
|
239
|
-
grouped: dict[str, list[PatternAssertion]] = defaultdict(list)
|
|
240
|
-
for p in filtered:
|
|
241
|
-
grouped[p.category.value].append(p)
|
|
242
|
-
|
|
243
|
-
prompts: list[SoftPromptTemplate] = []
|
|
244
|
-
# Reserve tokens for assembly header + separators
|
|
245
|
-
header_overhead = self._estimate_tokens(
|
|
246
|
-
"# User Profile (auto-learned)"
|
|
247
|
-
) + 2 # newlines
|
|
248
|
-
running_token_count = header_overhead
|
|
249
|
-
|
|
250
|
-
for category in CATEGORY_PRIORITY_ORDER:
|
|
251
|
-
if category not in grouped:
|
|
252
|
-
continue
|
|
253
|
-
|
|
254
|
-
template = self._render_category(
|
|
255
|
-
category, grouped[category], profile_id,
|
|
256
|
-
)
|
|
257
|
-
if template is None:
|
|
258
|
-
continue
|
|
259
|
-
|
|
260
|
-
token_count = self._estimate_tokens(template.content)
|
|
261
|
-
|
|
262
|
-
if running_token_count + token_count > self._config.max_prompt_tokens:
|
|
263
|
-
remaining = self._config.max_prompt_tokens - running_token_count
|
|
264
|
-
template = self._trim_content(template, remaining)
|
|
265
|
-
token_count = self._estimate_tokens(template.content)
|
|
266
|
-
if not template.content or len(template.content) < 20:
|
|
267
|
-
break
|
|
268
|
-
|
|
269
|
-
template.token_count = token_count
|
|
270
|
-
prompts.append(template)
|
|
271
|
-
running_token_count += token_count
|
|
272
|
-
|
|
273
|
-
return self._validate(prompts)
|
|
274
|
-
|
|
275
|
-
def assemble(self, prompts: list[SoftPromptTemplate]) -> str:
|
|
276
|
-
"""Assemble prompts into a single text block with header.
|
|
277
|
-
|
|
278
|
-
Args:
|
|
279
|
-
prompts: List of templates to assemble.
|
|
280
|
-
|
|
281
|
-
Returns:
|
|
282
|
-
Assembled text or empty string if no prompts.
|
|
283
|
-
"""
|
|
284
|
-
if not prompts:
|
|
285
|
-
return ""
|
|
286
|
-
|
|
287
|
-
lines = ["# User Profile (auto-learned)", ""]
|
|
288
|
-
|
|
289
|
-
# Sort by priority order
|
|
290
|
-
order_map = {
|
|
291
|
-
cat: idx for idx, cat in enumerate(CATEGORY_PRIORITY_ORDER)
|
|
292
|
-
}
|
|
293
|
-
sorted_prompts = sorted(
|
|
294
|
-
prompts,
|
|
295
|
-
key=lambda p: order_map.get(p.category, len(CATEGORY_PRIORITY_ORDER)),
|
|
296
|
-
)
|
|
297
|
-
|
|
298
|
-
for prompt in sorted_prompts:
|
|
299
|
-
lines.append(prompt.content)
|
|
300
|
-
lines.append("")
|
|
301
|
-
|
|
302
|
-
result = "\n".join(lines).rstrip()
|
|
303
|
-
return result
|
|
304
|
-
|
|
305
|
-
# ------------------------------------------------------------------
|
|
306
|
-
# Rendering
|
|
307
|
-
# ------------------------------------------------------------------
|
|
308
|
-
|
|
309
|
-
def _render_category(
|
|
310
|
-
self,
|
|
311
|
-
category: str,
|
|
312
|
-
patterns: list[PatternAssertion],
|
|
313
|
-
profile_id: str,
|
|
314
|
-
) -> SoftPromptTemplate | None:
|
|
315
|
-
"""Render patterns for a single category into a SoftPromptTemplate."""
|
|
316
|
-
template_str = CATEGORY_TEMPLATES.get(category, "{key}: {value}")
|
|
317
|
-
values = self._extract_template_values(category, patterns)
|
|
318
|
-
|
|
319
|
-
# Fill template with defaultdict for missing keys
|
|
320
|
-
safe_values = defaultdict(str, values)
|
|
321
|
-
try:
|
|
322
|
-
content = template_str.format_map(safe_values)
|
|
323
|
-
except (KeyError, IndexError, ValueError): # pragma: no cover
|
|
324
|
-
content = ", ".join(p.value for p in patterns) # pragma: no cover
|
|
325
|
-
|
|
326
|
-
# Clean up
|
|
327
|
-
content = self._clean_content(content)
|
|
328
|
-
content = _fix_stutter(content)
|
|
329
|
-
|
|
330
|
-
# Filter PII
|
|
331
|
-
content = self._pii_filter.filter_text(content)
|
|
332
|
-
if not content.strip():
|
|
333
|
-
return None
|
|
334
|
-
|
|
335
|
-
# A prompt that says nothing must not be injected. These go into the
|
|
336
|
-
# model's context on every turn, so an empty claim is not neutral — it
|
|
337
|
-
# spends the budget and asserts something false. Measured on a live
|
|
338
|
-
# store: 15 of 34 stored prompts read "the user's preferred technology
|
|
339
|
-
# stack includes: data, processing, their, projects, test", built from
|
|
340
|
-
# common words that happened to appear near a technology keyword.
|
|
341
|
-
if not _is_substantive(category, values):
|
|
342
|
-
logger.debug(
|
|
343
|
-
"soft prompt for %r dropped: no substantive values", category,
|
|
344
|
-
)
|
|
345
|
-
return None
|
|
346
|
-
|
|
347
|
-
# Trim to 100 tokens per category
|
|
348
|
-
content = self._trim_to_tokens(content, 100)
|
|
349
|
-
|
|
350
|
-
# Aggregate confidence
|
|
351
|
-
confidence = (
|
|
352
|
-
sum(p.confidence for p in patterns) / len(patterns)
|
|
353
|
-
if patterns else 0.0
|
|
354
|
-
)
|
|
355
|
-
|
|
356
|
-
# Collect source IDs
|
|
357
|
-
source_ids = [sid for p in patterns for sid in p.source_ids]
|
|
358
|
-
|
|
359
|
-
return SoftPromptTemplate(
|
|
360
|
-
prompt_id=str(uuid.uuid4()),
|
|
361
|
-
profile_id=profile_id,
|
|
362
|
-
category=category,
|
|
363
|
-
content=content,
|
|
364
|
-
source_pattern_ids=source_ids,
|
|
365
|
-
confidence=confidence,
|
|
366
|
-
effectiveness=0.5,
|
|
367
|
-
token_count=0,
|
|
368
|
-
retention_score=1.0,
|
|
369
|
-
active=True,
|
|
370
|
-
version=1,
|
|
371
|
-
)
|
|
372
|
-
|
|
373
|
-
@staticmethod
|
|
374
|
-
def _extract_template_values(
|
|
375
|
-
category: str,
|
|
376
|
-
patterns: list[PatternAssertion],
|
|
377
|
-
) -> dict[str, str]:
|
|
378
|
-
"""Extract placeholder values from patterns for a category template."""
|
|
379
|
-
values: dict[str, str] = {}
|
|
380
|
-
pat_values = [p.value for p in patterns]
|
|
381
|
-
|
|
382
|
-
if category == "identity":
|
|
383
|
-
values["role"] = pat_values[0] if pat_values else ""
|
|
384
|
-
values["domains"] = ", ".join(pat_values)
|
|
385
|
-
org_patterns = [
|
|
386
|
-
p for p in patterns
|
|
387
|
-
if "organization" in p.key or "company" in p.key
|
|
388
|
-
]
|
|
389
|
-
values["organization"] = (
|
|
390
|
-
org_patterns[0].value if org_patterns else ""
|
|
391
|
-
)
|
|
392
|
-
|
|
393
|
-
elif category == "tech_preference":
|
|
394
|
-
values["technologies"] = ", ".join(pat_values)
|
|
395
|
-
|
|
396
|
-
elif category == "communication_style":
|
|
397
|
-
values["style"] = pat_values[0] if pat_values else ""
|
|
398
|
-
values["specific_preferences"] = ", ".join(pat_values[1:])
|
|
399
|
-
|
|
400
|
-
elif category == "workflow_pattern":
|
|
401
|
-
values["workflow_description"] = "; ".join(pat_values)
|
|
402
|
-
|
|
403
|
-
elif category == "topic_interest":
|
|
404
|
-
values["topics"] = ", ".join(pat_values)
|
|
405
|
-
|
|
406
|
-
elif category == "project_context":
|
|
407
|
-
values["project_name"] = pat_values[0] if pat_values else ""
|
|
408
|
-
values["context_summary"] = ", ".join(pat_values[1:])
|
|
409
|
-
|
|
410
|
-
elif category == "decision_history":
|
|
411
|
-
values["decisions"] = ", ".join(pat_values)
|
|
412
|
-
|
|
413
|
-
elif category == "avoidance":
|
|
414
|
-
values["avoid_list"] = ", ".join(pat_values)
|
|
415
|
-
|
|
416
|
-
else:
|
|
417
|
-
# Generic fallback
|
|
418
|
-
values["key"] = patterns[0].key if patterns else ""
|
|
419
|
-
values["value"] = ", ".join(pat_values)
|
|
420
|
-
|
|
421
|
-
return values
|
|
422
|
-
|
|
423
|
-
# ------------------------------------------------------------------
|
|
424
|
-
# Validation
|
|
425
|
-
# ------------------------------------------------------------------
|
|
426
|
-
|
|
427
|
-
def _validate(
|
|
428
|
-
self, prompts: list[SoftPromptTemplate],
|
|
429
|
-
) -> list[SoftPromptTemplate]:
|
|
430
|
-
"""Validate prompts: no empty content, no PII, within token limits."""
|
|
431
|
-
valid: list[SoftPromptTemplate] = []
|
|
432
|
-
seen_categories: set[str] = set()
|
|
433
|
-
|
|
434
|
-
for prompt in prompts:
|
|
435
|
-
if not prompt.content.strip():
|
|
436
|
-
logger.warning(
|
|
437
|
-
"Skipping empty prompt for category %s", prompt.category,
|
|
438
|
-
)
|
|
439
|
-
continue
|
|
440
|
-
if self._pii_filter.has_pii(prompt.content):
|
|
441
|
-
logger.warning(
|
|
442
|
-
"PII detected in prompt for category %s, skipping",
|
|
443
|
-
prompt.category,
|
|
444
|
-
)
|
|
445
|
-
continue
|
|
446
|
-
if prompt.token_count > 100:
|
|
447
|
-
logger.warning(
|
|
448
|
-
"Prompt for %s exceeds 100 tokens (%d), trimming",
|
|
449
|
-
prompt.category, prompt.token_count,
|
|
450
|
-
)
|
|
451
|
-
prompt.content = self._trim_to_tokens(prompt.content, 100)
|
|
452
|
-
prompt.token_count = self._estimate_tokens(prompt.content)
|
|
453
|
-
if prompt.category in seen_categories:
|
|
454
|
-
logger.warning(
|
|
455
|
-
"Duplicate active category %s, skipping", prompt.category,
|
|
456
|
-
)
|
|
457
|
-
continue
|
|
458
|
-
seen_categories.add(prompt.category)
|
|
459
|
-
valid.append(prompt)
|
|
460
|
-
|
|
461
|
-
return valid
|
|
462
|
-
|
|
463
|
-
# ------------------------------------------------------------------
|
|
464
|
-
# Token utilities
|
|
465
|
-
# ------------------------------------------------------------------
|
|
466
|
-
|
|
467
|
-
@staticmethod
|
|
468
|
-
def _estimate_tokens(text: str) -> int:
|
|
469
|
-
"""Estimate token count from text (~1.3 tokens per word)."""
|
|
470
|
-
word_count = len(text.split())
|
|
471
|
-
return max(1, int(word_count * 1.3))
|
|
472
|
-
|
|
473
|
-
@staticmethod
|
|
474
|
-
def _trim_to_tokens(text: str, max_tokens: int) -> str:
|
|
475
|
-
"""Trim text to fit within a token budget by removing sentences."""
|
|
476
|
-
current = SoftPromptGenerator._estimate_tokens(text)
|
|
477
|
-
if current <= max_tokens:
|
|
478
|
-
return text
|
|
479
|
-
|
|
480
|
-
# Split into sentences
|
|
481
|
-
import re
|
|
482
|
-
sentences = re.split(r"(?<=\.)\s+", text)
|
|
483
|
-
result_sentences: list[str] = []
|
|
484
|
-
accumulated = 0
|
|
485
|
-
|
|
486
|
-
for sentence in sentences:
|
|
487
|
-
sent_tokens = SoftPromptGenerator._estimate_tokens(sentence)
|
|
488
|
-
if accumulated + sent_tokens > max_tokens:
|
|
489
|
-
break
|
|
490
|
-
result_sentences.append(sentence)
|
|
491
|
-
accumulated += sent_tokens
|
|
492
|
-
|
|
493
|
-
if not result_sentences:
|
|
494
|
-
# Take first N words if no sentence fits
|
|
495
|
-
words = text.split()
|
|
496
|
-
target_words = max(1, int(max_tokens / 1.3))
|
|
497
|
-
return " ".join(words[:target_words]).rstrip(".,;: ") + "."
|
|
498
|
-
|
|
499
|
-
result = " ".join(result_sentences)
|
|
500
|
-
if not result.endswith("."): # pragma: no cover — regex split keeps "." with chunks
|
|
501
|
-
result += "." # pragma: no cover
|
|
502
|
-
return result
|
|
503
|
-
|
|
504
|
-
@staticmethod
|
|
505
|
-
def _trim_content(
|
|
506
|
-
template: SoftPromptTemplate,
|
|
507
|
-
remaining_budget: int,
|
|
508
|
-
) -> SoftPromptTemplate:
|
|
509
|
-
"""Create a new template with content trimmed to budget (immutable)."""
|
|
510
|
-
trimmed = SoftPromptGenerator._trim_to_tokens(
|
|
511
|
-
template.content, remaining_budget,
|
|
512
|
-
)
|
|
513
|
-
return SoftPromptTemplate(
|
|
514
|
-
prompt_id=template.prompt_id,
|
|
515
|
-
profile_id=template.profile_id,
|
|
516
|
-
category=template.category,
|
|
517
|
-
content=trimmed,
|
|
518
|
-
source_pattern_ids=template.source_pattern_ids,
|
|
519
|
-
confidence=template.confidence,
|
|
520
|
-
effectiveness=template.effectiveness,
|
|
521
|
-
token_count=SoftPromptGenerator._estimate_tokens(trimmed),
|
|
522
|
-
retention_score=template.retention_score,
|
|
523
|
-
active=template.active,
|
|
524
|
-
version=template.version,
|
|
525
|
-
)
|
|
526
|
-
|
|
527
|
-
# ------------------------------------------------------------------
|
|
528
|
-
# Content cleaning
|
|
529
|
-
# ------------------------------------------------------------------
|
|
530
|
-
|
|
531
|
-
@staticmethod
|
|
532
|
-
def _clean_content(content: str) -> str:
|
|
533
|
-
"""Strip extra whitespace, remove empty sentences."""
|
|
534
|
-
import re
|
|
535
|
-
# Collapse multiple spaces
|
|
536
|
-
content = re.sub(r"\s+", " ", content).strip()
|
|
537
|
-
# Remove empty sentences (". .")
|
|
538
|
-
content = re.sub(r"\.\s*\.", ".", content)
|
|
539
|
-
# Ensure ends with period
|
|
540
|
-
if content and not content.endswith("."):
|
|
541
|
-
content += "."
|
|
542
|
-
return content
|
|
@@ -1,17 +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
|
-
"""Workflow miner re-export for the parameterization namespace.
|
|
6
|
-
|
|
7
|
-
The canonical implementation lives in
|
|
8
|
-
:mod:`superlocalmemory.learning.workflows`. This thin module re-exports
|
|
9
|
-
``WorkflowMiner`` so that code in the parameterization subsystem can import
|
|
10
|
-
from the same namespace as the pattern extractor's dependency declaration.
|
|
11
|
-
"""
|
|
12
|
-
|
|
13
|
-
from __future__ import annotations
|
|
14
|
-
|
|
15
|
-
from superlocalmemory.learning.workflows import WorkflowMiner
|
|
16
|
-
|
|
17
|
-
__all__ = ["WorkflowMiner"]
|
|
@@ -1,45 +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 | https://qualixar.com | https://varunpratap.com
|
|
4
|
-
|
|
5
|
-
"""Checks that ask whether a mechanism is *effective*, not merely present.
|
|
6
|
-
|
|
7
|
-
Three questions get confused in a system this size:
|
|
8
|
-
|
|
9
|
-
* **Implemented** — the code exists. A grep answers this.
|
|
10
|
-
* **Reachable** — something calls it. A call-graph trace answers this.
|
|
11
|
-
* **Effective** — it has actually changed an outcome against real data.
|
|
12
|
-
**Neither of the above answers this.** Only querying the store does.
|
|
13
|
-
|
|
14
|
-
A mechanism can pass the first two questions for months and fail the third
|
|
15
|
-
silently: a learner whose reward channel emits a constant still records plays,
|
|
16
|
-
and a conditional path guarded by a missing column still appears in coverage.
|
|
17
|
-
Nothing raises, nothing logs, and every file is present.
|
|
18
|
-
|
|
19
|
-
The two checks here answer the third question directly.
|
|
20
|
-
|
|
21
|
-
* :mod:`.prior_distance` — has a Bayesian learner's posterior actually moved
|
|
22
|
-
away from its prior?
|
|
23
|
-
* :mod:`.join_liveness` — has a schema-guarded code path ever executed against
|
|
24
|
-
this store, and if not, which requirement is missing?
|
|
25
|
-
|
|
26
|
-
Both are read-only, both are fail-soft, and neither is on a hot path.
|
|
27
|
-
"""
|
|
28
|
-
|
|
29
|
-
from superlocalmemory.reliability.join_liveness import (
|
|
30
|
-
GuardVerdict,
|
|
31
|
-
check_schema_guards,
|
|
32
|
-
)
|
|
33
|
-
from superlocalmemory.reliability.prior_distance import (
|
|
34
|
-
DEFAULT_MIN_OBSERVATIONS,
|
|
35
|
-
LearnerVerdict,
|
|
36
|
-
check_beta_learners,
|
|
37
|
-
)
|
|
38
|
-
|
|
39
|
-
__all__ = [
|
|
40
|
-
"DEFAULT_MIN_OBSERVATIONS",
|
|
41
|
-
"GuardVerdict",
|
|
42
|
-
"LearnerVerdict",
|
|
43
|
-
"check_beta_learners",
|
|
44
|
-
"check_schema_guards",
|
|
45
|
-
]
|