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,340 +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
|
-
"""Daily Reflection — issue #113 bounded summary.
|
|
6
|
-
|
|
7
|
-
Produces a human-readable summary of all facts recorded on a specific date,
|
|
8
|
-
grouped by time of day and sorted by importance.
|
|
9
|
-
|
|
10
|
-
MEASURED DATA REALITY
|
|
11
|
-
---------------------
|
|
12
|
-
On a real 3,294-fact store there are 48 distinct active days.
|
|
13
|
-
Per-day volumes range from 4 to 454 facts. Daily reflections are
|
|
14
|
-
structurally viable for this store.
|
|
15
|
-
|
|
16
|
-
DETERMINISTIC FALLBACK
|
|
17
|
-
-----------------------
|
|
18
|
-
The extractive path groups facts by topic entities and summarises the top-N
|
|
19
|
-
by importance. It never calls an LLM and never fails to return a result.
|
|
20
|
-
Mode B/C enrichment is attempted when configured, but falls back to extractive
|
|
21
|
-
on any failure — silence is not acceptable.
|
|
22
|
-
|
|
23
|
-
HOT PATH EXCLUSION
|
|
24
|
-
-------------------
|
|
25
|
-
This module must NEVER be imported from core/recall_pipeline.py or
|
|
26
|
-
core/store_pipeline.py.
|
|
27
|
-
"""
|
|
28
|
-
|
|
29
|
-
from __future__ import annotations
|
|
30
|
-
|
|
31
|
-
import logging
|
|
32
|
-
import sqlite3
|
|
33
|
-
from datetime import date
|
|
34
|
-
from pathlib import Path
|
|
35
|
-
|
|
36
|
-
from .base import (
|
|
37
|
-
clean_llm_summary,
|
|
38
|
-
format_highlight,
|
|
39
|
-
SUMMARY_SYSTEM_PROMPT,
|
|
40
|
-
COVERAGE_FULL,
|
|
41
|
-
COVERAGE_INSUFFICIENT,
|
|
42
|
-
COVERAGE_UNAVAILABLE,
|
|
43
|
-
GENERATED_BY_EXTRACTIVE,
|
|
44
|
-
GENERATED_BY_LLM_B,
|
|
45
|
-
GENERATED_BY_LLM_C,
|
|
46
|
-
SummaryResult,
|
|
47
|
-
get_mode_str,
|
|
48
|
-
)
|
|
49
|
-
|
|
50
|
-
logger = logging.getLogger("superlocalmemory.summaries.daily")
|
|
51
|
-
|
|
52
|
-
_MIN_FACTS = 2 # Below this threshold, coverage=insufficient
|
|
53
|
-
_BODY_FACTS = 10 # Top-N facts shown in extractive summary
|
|
54
|
-
_MAX_FACT_CHARS = 300 # Per-fact character cap in the body
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
def generate_daily_reflection(
|
|
58
|
-
db_path: str | Path,
|
|
59
|
-
target_date: str | date,
|
|
60
|
-
profile_id: str = "default",
|
|
61
|
-
config: object | None = None,
|
|
62
|
-
) -> SummaryResult:
|
|
63
|
-
"""Generate a Daily Reflection for a specific date.
|
|
64
|
-
|
|
65
|
-
Args:
|
|
66
|
-
db_path: Path to memory.db.
|
|
67
|
-
target_date: The date to reflect on. Accepts ``date`` objects or
|
|
68
|
-
ISO-format strings ("2026-08-17").
|
|
69
|
-
profile_id: Profile scope — never mix profiles.
|
|
70
|
-
config: Optional SLMConfig for LLM enrichment. None = Mode A
|
|
71
|
-
(extractive, always deterministic).
|
|
72
|
-
|
|
73
|
-
Returns:
|
|
74
|
-
SummaryResult with source_fact_ids for every contributing fact.
|
|
75
|
-
Never returns None.
|
|
76
|
-
"""
|
|
77
|
-
db_path = Path(db_path)
|
|
78
|
-
date_str = target_date.isoformat() if isinstance(target_date, date) else str(target_date)
|
|
79
|
-
|
|
80
|
-
# ── query ────────────────────────────────────────────────────────────────
|
|
81
|
-
try:
|
|
82
|
-
conn = sqlite3.connect(str(db_path), timeout=5.0)
|
|
83
|
-
conn.row_factory = sqlite3.Row
|
|
84
|
-
conn.execute("PRAGMA query_only=ON")
|
|
85
|
-
try:
|
|
86
|
-
rows = conn.execute(
|
|
87
|
-
"""
|
|
88
|
-
SELECT fact_id, content, created_at, importance,
|
|
89
|
-
canonical_entities_json, lifecycle
|
|
90
|
-
FROM atomic_facts
|
|
91
|
-
WHERE profile_id = ?
|
|
92
|
-
AND DATE(created_at) = ?
|
|
93
|
-
AND lifecycle != 'archived'
|
|
94
|
-
ORDER BY importance DESC, created_at ASC
|
|
95
|
-
""",
|
|
96
|
-
(profile_id, date_str),
|
|
97
|
-
).fetchall()
|
|
98
|
-
finally:
|
|
99
|
-
conn.close()
|
|
100
|
-
except Exception as exc:
|
|
101
|
-
logger.warning("daily reflection query failed for %s: %s", date_str, exc)
|
|
102
|
-
return SummaryResult(
|
|
103
|
-
kind="daily",
|
|
104
|
-
profile_id=profile_id,
|
|
105
|
-
content=f"Daily reflection for {date_str} is unavailable: data access error.",
|
|
106
|
-
source_fact_ids=[],
|
|
107
|
-
coverage=COVERAGE_UNAVAILABLE,
|
|
108
|
-
generated_by=GENERATED_BY_EXTRACTIVE,
|
|
109
|
-
metadata={"date": date_str, "error": str(exc)},
|
|
110
|
-
)
|
|
111
|
-
|
|
112
|
-
# ── coverage decision ─────────────────────────────────────────────────────
|
|
113
|
-
if not rows:
|
|
114
|
-
return SummaryResult(
|
|
115
|
-
kind="daily",
|
|
116
|
-
profile_id=profile_id,
|
|
117
|
-
content=f"No facts recorded on {date_str}.",
|
|
118
|
-
source_fact_ids=[],
|
|
119
|
-
coverage=COVERAGE_INSUFFICIENT,
|
|
120
|
-
generated_by=GENERATED_BY_EXTRACTIVE,
|
|
121
|
-
metadata={"date": date_str, "fact_count": 0},
|
|
122
|
-
)
|
|
123
|
-
|
|
124
|
-
facts = [dict(r) for r in rows]
|
|
125
|
-
source_fact_ids = [f["fact_id"] for f in facts]
|
|
126
|
-
fact_count = len(facts)
|
|
127
|
-
|
|
128
|
-
if fact_count < _MIN_FACTS:
|
|
129
|
-
coverage = COVERAGE_INSUFFICIENT
|
|
130
|
-
else:
|
|
131
|
-
coverage = COVERAGE_FULL
|
|
132
|
-
|
|
133
|
-
# ── extractive summary (deterministic, always available) ──────────────────
|
|
134
|
-
extractive_content = _build_extractive_content(date_str, facts, fact_count, db_path, profile_id)
|
|
135
|
-
|
|
136
|
-
# ── LLM enrichment (optional) ─────────────────────────────────────────────
|
|
137
|
-
mode = get_mode_str(config)
|
|
138
|
-
if fact_count >= _MIN_FACTS and mode in ("b", "c"):
|
|
139
|
-
llm_content, llm_mode = _try_llm(date_str, facts, config, mode)
|
|
140
|
-
if llm_content:
|
|
141
|
-
return SummaryResult(
|
|
142
|
-
kind="daily",
|
|
143
|
-
profile_id=profile_id,
|
|
144
|
-
content=llm_content,
|
|
145
|
-
source_fact_ids=source_fact_ids,
|
|
146
|
-
coverage=coverage,
|
|
147
|
-
generated_by=llm_mode,
|
|
148
|
-
metadata={"date": date_str, "fact_count": fact_count},
|
|
149
|
-
)
|
|
150
|
-
|
|
151
|
-
return SummaryResult(
|
|
152
|
-
kind="daily",
|
|
153
|
-
profile_id=profile_id,
|
|
154
|
-
content=extractive_content,
|
|
155
|
-
source_fact_ids=source_fact_ids,
|
|
156
|
-
coverage=coverage,
|
|
157
|
-
generated_by=GENERATED_BY_EXTRACTIVE,
|
|
158
|
-
metadata={"date": date_str, "fact_count": fact_count},
|
|
159
|
-
)
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
# ── helpers ──────────────────────────────────────────────────────────────────
|
|
163
|
-
|
|
164
|
-
def _build_extractive_content(
|
|
165
|
-
date_str: str,
|
|
166
|
-
facts: list[dict],
|
|
167
|
-
fact_count: int,
|
|
168
|
-
db_path: str | Path,
|
|
169
|
-
profile_id: str,
|
|
170
|
-
) -> str:
|
|
171
|
-
"""Build a deterministic extractive daily reflection.
|
|
172
|
-
|
|
173
|
-
``db_path`` / ``profile_id`` are needed only to turn entity IDs into names
|
|
174
|
-
for the "Active entities" line — the facts themselves are already loaded.
|
|
175
|
-
"""
|
|
176
|
-
import json
|
|
177
|
-
|
|
178
|
-
lines = [
|
|
179
|
-
f"Daily reflection: {date_str}",
|
|
180
|
-
f"Total facts recorded: {fact_count}",
|
|
181
|
-
"",
|
|
182
|
-
"Highlights:",
|
|
183
|
-
]
|
|
184
|
-
for f in facts[:_BODY_FACTS]:
|
|
185
|
-
content = f.get("content", "")
|
|
186
|
-
content = format_highlight(content)
|
|
187
|
-
lines.append(f" - {content}")
|
|
188
|
-
if fact_count > _BODY_FACTS:
|
|
189
|
-
lines.append(f" ... and {fact_count - _BODY_FACTS} additional facts.")
|
|
190
|
-
|
|
191
|
-
# Entity summary: which entities appeared most
|
|
192
|
-
entity_counts: dict[str, int] = {}
|
|
193
|
-
for f in facts:
|
|
194
|
-
raw = f.get("canonical_entities_json") or "[]"
|
|
195
|
-
try:
|
|
196
|
-
entities = json.loads(raw)
|
|
197
|
-
except (ValueError, TypeError):
|
|
198
|
-
entities = []
|
|
199
|
-
for e in entities:
|
|
200
|
-
entity_counts[e] = entity_counts.get(e, 0) + 1
|
|
201
|
-
|
|
202
|
-
if entity_counts:
|
|
203
|
-
top_entities = sorted(entity_counts.items(), key=lambda x: x[1], reverse=True)[:5]
|
|
204
|
-
# Resolve to names. canonical_entities_json stores entity IDs, so this
|
|
205
|
-
# line previously read "Active entities: 1666abc512904473 (127),
|
|
206
|
-
# 84288f2dde994afe (124)" — five 16-hex identifiers, which tell a reader
|
|
207
|
-
# nothing. They resolve to 'Fixed', 'Gateway', 'REVISED' and so on. This
|
|
208
|
-
# is the same defect 4.0.6 fixed in the Living Brain, where source
|
|
209
|
-
# quality listed internal identifiers; it survived here because this
|
|
210
|
-
# generator was never reachable to be looked at.
|
|
211
|
-
names = _entity_names(db_path, [e for e, _ in top_entities], profile_id)
|
|
212
|
-
labelled = [
|
|
213
|
-
(names.get(eid) or eid, count) for eid, count in top_entities
|
|
214
|
-
]
|
|
215
|
-
entity_str = ", ".join(f"{name} ({c})" for name, c in labelled)
|
|
216
|
-
lines.append("")
|
|
217
|
-
lines.append(f"Active entities: {entity_str}")
|
|
218
|
-
|
|
219
|
-
return "\n".join(lines)
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
def _entity_names(
|
|
223
|
-
db_path: str | Path, entity_ids: list[str], profile_id: str
|
|
224
|
-
) -> dict[str, str]:
|
|
225
|
-
"""Map entity_id → canonical_name. Missing or unreadable rows are omitted.
|
|
226
|
-
|
|
227
|
-
Fail-open: a summary is still useful with a raw id in it, so a query problem
|
|
228
|
-
must not lose the whole line. The caller falls back to the id per entity.
|
|
229
|
-
"""
|
|
230
|
-
if not entity_ids:
|
|
231
|
-
return {}
|
|
232
|
-
try:
|
|
233
|
-
conn = sqlite3.connect(f"file:{db_path}?mode=ro", uri=True)
|
|
234
|
-
try:
|
|
235
|
-
placeholders = ",".join("?" for _ in entity_ids)
|
|
236
|
-
rows = conn.execute(
|
|
237
|
-
f"SELECT entity_id, canonical_name FROM canonical_entities "
|
|
238
|
-
f"WHERE entity_id IN ({placeholders}) AND profile_id = ?",
|
|
239
|
-
(*entity_ids, profile_id),
|
|
240
|
-
).fetchall()
|
|
241
|
-
finally:
|
|
242
|
-
conn.close()
|
|
243
|
-
return {r[0]: r[1] for r in rows if r[1]}
|
|
244
|
-
except sqlite3.Error:
|
|
245
|
-
return {}
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
def _try_llm(
|
|
249
|
-
date_str: str,
|
|
250
|
-
facts: list[dict],
|
|
251
|
-
config: object | None,
|
|
252
|
-
mode: str,
|
|
253
|
-
) -> tuple[str | None, str]:
|
|
254
|
-
"""Attempt LLM-based daily reflection. Returns (content, generated_by)."""
|
|
255
|
-
prompt = (
|
|
256
|
-
f"Write a concise daily reflection for {date_str} based on these facts. "
|
|
257
|
-
f"Focus on main themes and accomplishments in 3-5 sentences."
|
|
258
|
-
)
|
|
259
|
-
if mode == "c":
|
|
260
|
-
result = _call_cloud_llm(prompt, facts, config)
|
|
261
|
-
if result:
|
|
262
|
-
return result, GENERATED_BY_LLM_C
|
|
263
|
-
if mode in ("b", "c"):
|
|
264
|
-
result = _call_ollama(prompt, facts, config)
|
|
265
|
-
if result:
|
|
266
|
-
return result, GENERATED_BY_LLM_B
|
|
267
|
-
return None, GENERATED_BY_EXTRACTIVE
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
def _call_ollama(
|
|
271
|
-
prompt: str,
|
|
272
|
-
facts: list[dict],
|
|
273
|
-
config: object | None,
|
|
274
|
-
) -> str | None:
|
|
275
|
-
"""Mode B: call Ollama. Returns None on any failure (extractive fallback)."""
|
|
276
|
-
try:
|
|
277
|
-
import json
|
|
278
|
-
import urllib.request
|
|
279
|
-
|
|
280
|
-
api_base = "http://localhost:11434"
|
|
281
|
-
model = "llama3.2"
|
|
282
|
-
timeout = 30
|
|
283
|
-
if config and hasattr(config, "llm"):
|
|
284
|
-
api_base = getattr(config.llm, "api_base", api_base) or api_base
|
|
285
|
-
model = getattr(config.llm, "model", model) or model
|
|
286
|
-
timeout = (
|
|
287
|
-
getattr(config.llm, "timeout_seconds", None)
|
|
288
|
-
or getattr(config.llm, "timeout", None)
|
|
289
|
-
or timeout
|
|
290
|
-
)
|
|
291
|
-
|
|
292
|
-
fact_texts = "\n".join(f"- {f['content']}" for f in facts[:15])
|
|
293
|
-
full_prompt = f"{prompt}\n\nFacts from {len(facts)} recorded:\n{fact_texts}"
|
|
294
|
-
payload = json.dumps({
|
|
295
|
-
"model": model,
|
|
296
|
-
"prompt": full_prompt,
|
|
297
|
-
"system": SUMMARY_SYSTEM_PROMPT,
|
|
298
|
-
"stream": False,
|
|
299
|
-
"options": {"num_predict": 300},
|
|
300
|
-
}).encode()
|
|
301
|
-
req = urllib.request.Request(
|
|
302
|
-
f"{api_base}/api/generate",
|
|
303
|
-
data=payload,
|
|
304
|
-
headers={"Content-Type": "application/json"},
|
|
305
|
-
)
|
|
306
|
-
resp = urllib.request.urlopen(req, timeout=timeout)
|
|
307
|
-
data = json.loads(resp.read().decode())
|
|
308
|
-
text = clean_llm_summary(data.get("response", ""))
|
|
309
|
-
return text if text and len(text) > 20 else None
|
|
310
|
-
except Exception as exc:
|
|
311
|
-
logger.debug("Ollama daily reflection failed: %s", exc)
|
|
312
|
-
return None
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
def _call_cloud_llm(
|
|
316
|
-
prompt: str,
|
|
317
|
-
facts: list[dict],
|
|
318
|
-
config: object | None,
|
|
319
|
-
) -> str | None:
|
|
320
|
-
"""Mode C: call the configured cloud LLM. Returns None on any failure."""
|
|
321
|
-
if not config or not hasattr(config, "llm"):
|
|
322
|
-
return None
|
|
323
|
-
try:
|
|
324
|
-
from superlocalmemory.llm.backbone import LLMBackbone
|
|
325
|
-
llm = LLMBackbone(config.llm)
|
|
326
|
-
if not llm.is_available():
|
|
327
|
-
return None
|
|
328
|
-
fact_texts = "\n".join(f"- {f['content']}" for f in facts[:15])
|
|
329
|
-
full_prompt = f"{prompt}\n\nFacts:\n{fact_texts}"
|
|
330
|
-
text = llm.generate(
|
|
331
|
-
prompt=full_prompt,
|
|
332
|
-
system=SUMMARY_SYSTEM_PROMPT,
|
|
333
|
-
max_tokens=300,
|
|
334
|
-
temperature=0.1,
|
|
335
|
-
)
|
|
336
|
-
cleaned = clean_llm_summary(text or "")
|
|
337
|
-
return cleaned if len(cleaned) > 20 else None
|
|
338
|
-
except Exception as exc:
|
|
339
|
-
logger.debug("Cloud LLM daily reflection failed: %s", exc)
|
|
340
|
-
return None
|
|
@@ -1,223 +0,0 @@
|
|
|
1
|
-
# Copyright (c) 2026 Varun Pratap Bhardwaj / Qualixar
|
|
2
|
-
# Licensed under AGPL-3.0-or-later - see LICENSE file
|
|
3
|
-
|
|
4
|
-
"""Refuse to store a model's non-answer as if it were a memory.
|
|
5
|
-
|
|
6
|
-
A summarizer is handed a cluster of facts and asked to merge them. When the
|
|
7
|
-
cluster has nothing in common the model does not fail — it answers the question
|
|
8
|
-
it was asked, in prose, and that prose is indistinguishable from a summary to
|
|
9
|
-
any caller that only checks ``if summary:``. On the author's own store the
|
|
10
|
-
result was rows reading
|
|
11
|
-
|
|
12
|
-
"Unfortunately, there is no information available about 'Gateway', 'State',
|
|
13
|
-
'Bounded', or 'Claude' in the provided text."
|
|
14
|
-
|
|
15
|
-
sitting at ranks 1, 2 and 3 for "what am I working on".
|
|
16
|
-
|
|
17
|
-
WHAT THIS IS AND IS NOT
|
|
18
|
-
-----------------------
|
|
19
|
-
This is a **forward guard**: it stops the next such row from being written. It
|
|
20
|
-
is deliberately NOT the repair for rows already stored, because it cannot be.
|
|
21
|
-
Measured across the 307 retrieval-eligible consolidated rows on the author's
|
|
22
|
-
store, this predicate rejects **34** and lets **273** through — because those
|
|
23
|
-
273 are fluent, plausible, entirely generic prose ("The Pro and
|
|
24
|
-
SuperLocalMemory (SLM) projects have made significant progress...") that no
|
|
25
|
-
honest content predicate can separate from a real summary. Repairing by content
|
|
26
|
-
would have cleared a ninth of the problem and declared victory. Existing rows
|
|
27
|
-
are handled by provenance instead.
|
|
28
|
-
|
|
29
|
-
Measured the other way, on 3,894 genuine facts, it rejects 70 — and all 70 are
|
|
30
|
-
real defects, not false positives: 68 memories carry raw tool-call markup
|
|
31
|
-
scraped in from a transcript, and 2 are a model's refusal that was stored as
|
|
32
|
-
though it were a memory ("I cannot verify when ... ended a session. Can I help
|
|
33
|
-
you with something else?"). Zero legitimate memories are rejected.
|
|
34
|
-
|
|
35
|
-
So the bar here is: catch text that is *addressed to the prompt* rather than
|
|
36
|
-
*about the facts*, and nothing else. Everything is anchored to the start of the
|
|
37
|
-
text or to a whole leading sentence, because a genuine memory may legitimately
|
|
38
|
-
contain "there is no" in the middle of a sentence.
|
|
39
|
-
|
|
40
|
-
Companion to ``clean_llm_summary`` in :mod:`superlocalmemory.summaries.base`,
|
|
41
|
-
which strips scaffolding *around* an answer. This one rejects text that is
|
|
42
|
-
scaffolding *all the way through*. Run the stripper first: "Here is a concise
|
|
43
|
-
summary paragraph: <real content>" is salvageable and must not be discarded.
|
|
44
|
-
"""
|
|
45
|
-
|
|
46
|
-
from __future__ import annotations
|
|
47
|
-
|
|
48
|
-
import re
|
|
49
|
-
|
|
50
|
-
__all__ = ["is_non_answer", "NON_ANSWER_PATTERNS", "MIN_USEFUL_CHARS"]
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
#: A *merged summary* this short did not merge anything. The summarizers already
|
|
54
|
-
#: refuse model output under 50 characters; this is the same floor applied to
|
|
55
|
-
#: text that arrived by another route (extractive mode, or a pre-computed summary
|
|
56
|
-
#: handed in by a caller).
|
|
57
|
-
#:
|
|
58
|
-
#: It is NOT a floor for memories in general, and ``is_non_answer`` therefore
|
|
59
|
-
#: does not apply it unless a caller asks. Measured on the author's store, 730
|
|
60
|
-
#: of 3,894 genuine facts are under 50 characters and every sampled one is a
|
|
61
|
-
#: real memory — "2026-05-02 is the date when the session ended",
|
|
62
|
-
#: "This is the case for keeping AMS." Baking this floor into the default would
|
|
63
|
-
#: have made the guard reject a fifth of a user's memory as junk. The floor is
|
|
64
|
-
#: the *caller's* policy about its own output, not a fact about text.
|
|
65
|
-
MIN_USEFUL_CHARS = 50
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
#: Each entry is (regex, why-it-is-not-a-memory). The reason travels with the
|
|
69
|
-
#: pattern so a future reader can tell whether a new false positive means the
|
|
70
|
-
#: pattern is wrong or the input genuinely is a non-answer.
|
|
71
|
-
_PATTERN_SOURCES: tuple[tuple[str, str], ...] = (
|
|
72
|
-
(
|
|
73
|
-
r"^\W*(?:unfortunately|regrettably|sadly)\b[^.!?]*\bno\b",
|
|
74
|
-
"opens by apologising for having nothing to say",
|
|
75
|
-
),
|
|
76
|
-
(
|
|
77
|
-
r"^\W*there\s+(?:is|are)\s+no\s+"
|
|
78
|
-
r"(?:information|mention|reference|facts?|details?|data|content)\b",
|
|
79
|
-
"states the absence of input rather than summarising input",
|
|
80
|
-
),
|
|
81
|
-
(
|
|
82
|
-
r"\bno\s+(?:information|facts?|details?|data)\s+"
|
|
83
|
-
r"(?:is|are|was|were)?\s*(?:available|provided|given|present)\b",
|
|
84
|
-
"reports an empty input set",
|
|
85
|
-
),
|
|
86
|
-
(
|
|
87
|
-
r"^\W*(?:i\s+(?:cannot|can't|can\s+not|am\s+unable\s+to)|"
|
|
88
|
-
r"it\s+is\s+not\s+possible\s+to)\b",
|
|
89
|
-
"declines the task",
|
|
90
|
-
),
|
|
91
|
-
(
|
|
92
|
-
r"^\W*(?:i\s+don'?t|i\s+do\s+not)\s+(?:have|see|find)\b",
|
|
93
|
-
"declines the task in the first person",
|
|
94
|
-
),
|
|
95
|
-
(
|
|
96
|
-
r"\bthe\s+(?:provided|given|above|following)\s+"
|
|
97
|
-
r"(?:text|facts?|context|input|information)\b",
|
|
98
|
-
"refers to the prompt, so it is talking to the asker, not about the memory",
|
|
99
|
-
),
|
|
100
|
-
(
|
|
101
|
-
r"^\W*(?:as\s+an?\s+(?:ai|language\s+model)|i'?m\s+an?\s+ai)\b",
|
|
102
|
-
"identifies itself as a model",
|
|
103
|
-
),
|
|
104
|
-
(
|
|
105
|
-
r"^\W*(?:please\s+)?(?:provide|share|give)\s+(?:me\s+)?"
|
|
106
|
-
r"(?:more|the|some|additional)\b",
|
|
107
|
-
"asks the user for input instead of answering",
|
|
108
|
-
),
|
|
109
|
-
# The five below were added after running the first four against all 1,035
|
|
110
|
-
# summaries stored on the author's machine. They catch 14 rows the original
|
|
111
|
-
# set let through -- every one a measured string from that store, not a
|
|
112
|
-
# guess about what a model might say.
|
|
113
|
-
(
|
|
114
|
-
r"^\W*i\s+(?:did\s*n[o']?t|didn'?t)\s+receive\b",
|
|
115
|
-
"says it was given nothing to summarise",
|
|
116
|
-
),
|
|
117
|
-
(
|
|
118
|
-
r"\bthere\s+(?:is|are|was|were)\s+n(?:o|ot)\s+\d+\s+facts?\b",
|
|
119
|
-
"argues with the number of facts it was asked to merge",
|
|
120
|
-
),
|
|
121
|
-
(
|
|
122
|
-
r"\bthe\s+text\s+(?:snippet\s+)?"
|
|
123
|
-
r"(?:appears|seems|does\s+not|doesn'?t|is\s+not)\b",
|
|
124
|
-
"describes the prompt instead of summarising it",
|
|
125
|
-
),
|
|
126
|
-
(
|
|
127
|
-
r"\bin\s+the\s+text\s+(?:provided|given|above|supplied)\b"
|
|
128
|
-
r"|\bthe\s+text\s+(?:provided|supplied)\b",
|
|
129
|
-
"refers to the prompt (word order the earlier rule missed)",
|
|
130
|
-
),
|
|
131
|
-
(
|
|
132
|
-
r"^\W*i\s+must\s+point\s+out\b",
|
|
133
|
-
"opens with meta-commentary about the request",
|
|
134
|
-
),
|
|
135
|
-
(
|
|
136
|
-
# "This appears to be a detailed log of progress in writing..." — the
|
|
137
|
-
# model describing the shape of what it was shown rather than saying
|
|
138
|
-
# what it says. Six of the first twelve rows the dashboard rendered
|
|
139
|
-
# opened this way. Deliberately narrower than it could be: "This is a
|
|
140
|
-
# summary of an audit session" is clumsy but it does summarise, so it
|
|
141
|
-
# is left alone.
|
|
142
|
-
r"^\W*this\s+(?:appears|seems)\s+to\s+be\b"
|
|
143
|
-
r"|^\W*this\s+text\s+(?:is|appears|seems)\b",
|
|
144
|
-
"describes the shape of the input instead of its content",
|
|
145
|
-
),
|
|
146
|
-
)
|
|
147
|
-
|
|
148
|
-
#: Compiled once. ``re.IGNORECASE`` throughout — the casing of a refusal is not
|
|
149
|
-
#: information. ``re.DOTALL`` is deliberately NOT set: ``[^.!?]*`` and the
|
|
150
|
-
#: leading anchors are meant to stay within the opening sentence.
|
|
151
|
-
NON_ANSWER_PATTERNS: tuple[tuple[re.Pattern[str], str], ...] = tuple(
|
|
152
|
-
(re.compile(src, re.IGNORECASE), why) for src, why in _PATTERN_SOURCES
|
|
153
|
-
)
|
|
154
|
-
|
|
155
|
-
#: Tool-call and markup fragments. A memory whose content carries these was
|
|
156
|
-
#: assembled from a transcript that still had its plumbing attached; the user
|
|
157
|
-
#: sees raw XML in their own memory list. Matched anywhere, not anchored,
|
|
158
|
-
#: because the fragment can appear at any offset in a spliced transcript.
|
|
159
|
-
_MARKUP = re.compile(
|
|
160
|
-
r"</(?:content|antml:parameter|parameter|invoke|function_calls|thinking)>"
|
|
161
|
-
r"|<(?:antml:)?(?:parameter|invoke|function_calls)\b"
|
|
162
|
-
r"|<\|(?:im_start|im_end|endoftext)\|>",
|
|
163
|
-
re.IGNORECASE,
|
|
164
|
-
)
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
def is_non_answer(
|
|
168
|
-
text: str | None,
|
|
169
|
-
*,
|
|
170
|
-
min_chars: int = 0,
|
|
171
|
-
model_written: bool = True,
|
|
172
|
-
) -> tuple[bool, str]:
|
|
173
|
-
"""Whether ``text`` is a model talking about the prompt, not a memory.
|
|
174
|
-
|
|
175
|
-
Returns ``(rejected, reason)``. ``reason`` is empty when the text is
|
|
176
|
-
acceptable, and otherwise names which rule fired — callers log it, so a
|
|
177
|
-
silent rejection never happens and a false positive is diagnosable from
|
|
178
|
-
normal logs rather than needing a repro.
|
|
179
|
-
|
|
180
|
-
``min_chars`` defaults to **no floor**. A caller that knows its own output
|
|
181
|
-
should be long — a summarizer merging three or more facts — passes
|
|
182
|
-
:data:`MIN_USEFUL_CHARS`. See that constant for why this is not the default.
|
|
183
|
-
|
|
184
|
-
``model_written=False`` applies only the rules that hold for text no model
|
|
185
|
-
composed: the length floor and the markup check. Every other rule here
|
|
186
|
-
describes a MODEL's behaviour — refusing, apologising, discussing the
|
|
187
|
-
prompt — and an extractive summary is the owner's own sentences reassembled,
|
|
188
|
-
so a memory that happens to say "the facts provided" would be rejected for
|
|
189
|
-
having phrased itself like a chatbot. Nothing is lost by exempting it: an
|
|
190
|
-
extractive summary cannot refuse, because there is nobody there to refuse.
|
|
191
|
-
|
|
192
|
-
Cheap and side-effect free: safe to call on every candidate write.
|
|
193
|
-
|
|
194
|
-
>>> is_non_answer("Unfortunately, there is no information available.")[0]
|
|
195
|
-
True
|
|
196
|
-
>>> is_non_answer("Varun ships SLM 4.0.10 with an auto-repair migration.")
|
|
197
|
-
(False, '')
|
|
198
|
-
>>> is_non_answer("The team has no information silo left to dismantle.")[0]
|
|
199
|
-
False
|
|
200
|
-
>>> is_non_answer("2026-05-02 is the date the session ended.")
|
|
201
|
-
(False, '')
|
|
202
|
-
>>> is_non_answer("Too short.", min_chars=MIN_USEFUL_CHARS)[0]
|
|
203
|
-
True
|
|
204
|
-
"""
|
|
205
|
-
if text is None:
|
|
206
|
-
return True, "empty"
|
|
207
|
-
stripped = text.strip()
|
|
208
|
-
if not stripped:
|
|
209
|
-
return True, "empty"
|
|
210
|
-
if min_chars and len(stripped) < min_chars:
|
|
211
|
-
return True, f"shorter than {min_chars} characters"
|
|
212
|
-
|
|
213
|
-
if _MARKUP.search(stripped):
|
|
214
|
-
return True, "contains tool-call or chat-template markup"
|
|
215
|
-
|
|
216
|
-
if not model_written:
|
|
217
|
-
return False, ""
|
|
218
|
-
|
|
219
|
-
for pattern, why in NON_ANSWER_PATTERNS:
|
|
220
|
-
if pattern.search(stripped):
|
|
221
|
-
return True, why
|
|
222
|
-
|
|
223
|
-
return False, ""
|