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,215 +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
|
|
4
|
-
|
|
5
|
-
"""``slm summary`` — the readable layer over your memories (issue #113).
|
|
6
|
-
|
|
7
|
-
WHY THIS FILE EXISTS
|
|
8
|
-
--------------------
|
|
9
|
-
4.0.6 shipped the three generators in ``superlocalmemory/summaries/`` with no way
|
|
10
|
-
to call them: no command, no MCP tool, no route. The changelog listed the feature
|
|
11
|
-
as added, the issue reply said it had landed, and a user could do nothing with it.
|
|
12
|
-
This is that missing surface.
|
|
13
|
-
|
|
14
|
-
Three summaries, each bounded and traceable:
|
|
15
|
-
|
|
16
|
-
``slm summary session <id>`` what one session covered
|
|
17
|
-
``slm summary day [DATE]`` what a day's main topics were
|
|
18
|
-
``slm summary project <path>`` what was worked on in a project
|
|
19
|
-
|
|
20
|
-
Every result states its coverage. Session data in particular is sparse — roughly
|
|
21
|
-
4% of facts carry a session id on a real store — so a session summary reports what
|
|
22
|
-
fraction it could actually see rather than presenting a slice as the whole.
|
|
23
|
-
|
|
24
|
-
No language model is required: the generators are extractive by default, so this
|
|
25
|
-
works in Local Guardian mode with nothing installed.
|
|
26
|
-
"""
|
|
27
|
-
|
|
28
|
-
from __future__ import annotations
|
|
29
|
-
|
|
30
|
-
import json
|
|
31
|
-
from argparse import Namespace
|
|
32
|
-
from datetime import date, timedelta
|
|
33
|
-
from pathlib import Path
|
|
34
|
-
from typing import Any
|
|
35
|
-
|
|
36
|
-
from superlocalmemory.infra.data_root import state_path
|
|
37
|
-
|
|
38
|
-
def _coverage_is_complete(coverage: str) -> bool:
|
|
39
|
-
"""Whether *coverage* means "this really is the whole picture".
|
|
40
|
-
|
|
41
|
-
Deliberately inverted. My first version listed the values that needed a
|
|
42
|
-
caveat — ``("partial", "sparse", "none", "empty")`` — and three of those four
|
|
43
|
-
are not values this system emits. The real vocabulary is COVERAGE_FULL /
|
|
44
|
-
PARTIAL / INSUFFICIENT / NO_SESSION / UNAVAILABLE, so a session summary
|
|
45
|
-
reporting "no_session" printed no caveat at all: the one honesty feature
|
|
46
|
-
issue #113 asked for, silently inactive.
|
|
47
|
-
|
|
48
|
-
Testing for completeness instead means any value that is not FULL — including
|
|
49
|
-
one added later — gets the caveat. The failure mode becomes an unnecessary
|
|
50
|
-
warning rather than a missing one.
|
|
51
|
-
"""
|
|
52
|
-
try:
|
|
53
|
-
from superlocalmemory.summaries.base import COVERAGE_FULL
|
|
54
|
-
|
|
55
|
-
return coverage == COVERAGE_FULL
|
|
56
|
-
except Exception:
|
|
57
|
-
return coverage == "full"
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
def _db_path() -> Path:
|
|
61
|
-
return state_path("memory.db")
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
def _active_profile() -> str:
|
|
65
|
-
"""Resolve the active profile without a daemon and without side effects.
|
|
66
|
-
|
|
67
|
-
Reads the ``active`` pointer out of ``profiles.json`` directly.
|
|
68
|
-
``ProfileManager`` would give the same answer, but its constructor calls
|
|
69
|
-
``mkdir(parents=True)`` — creating directories is not something a read-only
|
|
70
|
-
summary command should do. ``core.profiles`` also has no module-level
|
|
71
|
-
accessor; ``get_active_profile`` there is a method on the manager, and the
|
|
72
|
-
module-level one lives in ``server/routes/helpers.py``, which the CLI must
|
|
73
|
-
not import.
|
|
74
|
-
"""
|
|
75
|
-
try:
|
|
76
|
-
from superlocalmemory.core.profiles import DEFAULT_PROFILES_FILE
|
|
77
|
-
|
|
78
|
-
path = state_path(DEFAULT_PROFILES_FILE)
|
|
79
|
-
if path.exists():
|
|
80
|
-
raw = json.loads(path.read_text(encoding="utf-8"))
|
|
81
|
-
active = raw.get("active")
|
|
82
|
-
if isinstance(active, str) and active:
|
|
83
|
-
return active
|
|
84
|
-
except Exception:
|
|
85
|
-
pass
|
|
86
|
-
return "default"
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
def _load_config() -> Any:
|
|
90
|
-
"""The active SLMConfig, so Mode B/C get LLM-written summaries.
|
|
91
|
-
|
|
92
|
-
Without this the generators receive ``config=None``, ``get_mode_str`` returns
|
|
93
|
-
``"a"``, and the LLM branch is unreachable — every summary comes out
|
|
94
|
-
extractive no matter which mode the user runs. That is not a graceful
|
|
95
|
-
fallback, it is the enrichment path never being offered.
|
|
96
|
-
|
|
97
|
-
Returns None on any failure, which lands on the extractive path. That is the
|
|
98
|
-
right fallback: a deterministic summary beats an error.
|
|
99
|
-
"""
|
|
100
|
-
try:
|
|
101
|
-
from superlocalmemory.core.config import SLMConfig
|
|
102
|
-
|
|
103
|
-
return SLMConfig.load()
|
|
104
|
-
except Exception:
|
|
105
|
-
return None
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
def _emit(result: Any, as_json: bool) -> None:
|
|
109
|
-
"""Print a SummaryResult as JSON or as prose."""
|
|
110
|
-
if as_json:
|
|
111
|
-
print(json.dumps({
|
|
112
|
-
"kind": result.kind,
|
|
113
|
-
"profile_id": result.profile_id,
|
|
114
|
-
"content": result.content,
|
|
115
|
-
"source_fact_ids": result.source_fact_ids,
|
|
116
|
-
"coverage": result.coverage,
|
|
117
|
-
"generated_by": result.generated_by,
|
|
118
|
-
"metadata": result.metadata,
|
|
119
|
-
}, indent=2, default=str))
|
|
120
|
-
return
|
|
121
|
-
|
|
122
|
-
print()
|
|
123
|
-
print(result.content.rstrip() or "(nothing recorded)")
|
|
124
|
-
print()
|
|
125
|
-
|
|
126
|
-
# Coverage is not decoration. A summary built from a fraction of the data
|
|
127
|
-
# that presents itself as the whole is the failure mode issue #113 called
|
|
128
|
-
# out by name, so it is stated on every single result, not only bad ones.
|
|
129
|
-
n = len(result.source_fact_ids)
|
|
130
|
-
line = f"Built from {n} memor{'y' if n == 1 else 'ies'} · coverage: {result.coverage}"
|
|
131
|
-
if not _coverage_is_complete(result.coverage):
|
|
132
|
-
line += " — treat as a partial view, not a complete record"
|
|
133
|
-
print(line)
|
|
134
|
-
if result.generated_by:
|
|
135
|
-
print(f"Method: {result.generated_by}")
|
|
136
|
-
print("Use --json to see the exact memories this came from.")
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
def cmd_summary(args: Namespace) -> None:
|
|
140
|
-
"""Dispatch ``slm summary <subcommand>``."""
|
|
141
|
-
sub = getattr(args, "summary_command", None)
|
|
142
|
-
as_json = bool(getattr(args, "json", False))
|
|
143
|
-
profile = getattr(args, "profile", None) or _active_profile()
|
|
144
|
-
db = _db_path()
|
|
145
|
-
cfg = _load_config() # Mode B/C enrichment; None -> extractive
|
|
146
|
-
|
|
147
|
-
if not db.exists():
|
|
148
|
-
print(f"No memory database at {db}. Run `slm status` first.")
|
|
149
|
-
return
|
|
150
|
-
|
|
151
|
-
if sub == "session":
|
|
152
|
-
from superlocalmemory.summaries import generate_session_summary
|
|
153
|
-
|
|
154
|
-
_emit(generate_session_summary(db, args.session_id, profile, cfg), as_json)
|
|
155
|
-
return
|
|
156
|
-
|
|
157
|
-
if sub == "day":
|
|
158
|
-
from superlocalmemory.summaries import generate_daily_reflection
|
|
159
|
-
|
|
160
|
-
target = getattr(args, "date", None) or date.today().isoformat()
|
|
161
|
-
if target == "yesterday":
|
|
162
|
-
target = (date.today() - timedelta(days=1)).isoformat()
|
|
163
|
-
elif target == "today":
|
|
164
|
-
target = date.today().isoformat()
|
|
165
|
-
_emit(generate_daily_reflection(db, target, profile, cfg), as_json)
|
|
166
|
-
return
|
|
167
|
-
|
|
168
|
-
if sub == "project":
|
|
169
|
-
from superlocalmemory.summaries import generate_project_work_log
|
|
170
|
-
|
|
171
|
-
path = getattr(args, "path", None) or str(Path.cwd())
|
|
172
|
-
_emit(generate_project_work_log(db, path, profile, cfg), as_json)
|
|
173
|
-
return
|
|
174
|
-
|
|
175
|
-
print("Usage: slm summary {session <id> | day [DATE] | project [PATH]}")
|
|
176
|
-
print()
|
|
177
|
-
print(" slm summary day what you recorded today")
|
|
178
|
-
print(" slm summary day yesterday ...or yesterday")
|
|
179
|
-
print(" slm summary day 2026-08-17 ...or a specific date")
|
|
180
|
-
print(" slm summary project work log for the current directory")
|
|
181
|
-
print(" slm summary session <id> what one session covered")
|
|
182
|
-
print()
|
|
183
|
-
print("Add --json to include the ids of the memories a summary came from.")
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
def register_summary_parser(sub: Any) -> None:
|
|
187
|
-
"""Attach the ``summary`` parser. Called from cli/main.py."""
|
|
188
|
-
p = sub.add_parser(
|
|
189
|
-
"summary",
|
|
190
|
-
help="Readable summaries of your memories (session, day, project)",
|
|
191
|
-
)
|
|
192
|
-
p.add_argument("--json", action="store_true", help="machine-readable output")
|
|
193
|
-
p.add_argument("--profile", help="profile to summarise (default: active)")
|
|
194
|
-
ssub = p.add_subparsers(dest="summary_command", title="summary subcommands")
|
|
195
|
-
|
|
196
|
-
s = ssub.add_parser("session", help="what one session covered")
|
|
197
|
-
s.add_argument("session_id", help="session id (see `slm status`)")
|
|
198
|
-
s.add_argument("--json", action="store_true")
|
|
199
|
-
s.add_argument("--profile")
|
|
200
|
-
|
|
201
|
-
d = ssub.add_parser("day", help="what a day's main topics were")
|
|
202
|
-
d.add_argument(
|
|
203
|
-
"date", nargs="?",
|
|
204
|
-
help="YYYY-MM-DD, 'today' or 'yesterday' (default: today)",
|
|
205
|
-
)
|
|
206
|
-
d.add_argument("--json", action="store_true")
|
|
207
|
-
d.add_argument("--profile")
|
|
208
|
-
|
|
209
|
-
pr = ssub.add_parser("project", help="what was worked on in a project")
|
|
210
|
-
pr.add_argument(
|
|
211
|
-
"path", nargs="?",
|
|
212
|
-
help="project directory (default: current directory)",
|
|
213
|
-
)
|
|
214
|
-
pr.add_argument("--json", action="store_true")
|
|
215
|
-
pr.add_argument("--profile")
|
|
@@ -1,202 +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
|
-
"""Post-upgrade version banner.
|
|
6
|
-
|
|
7
|
-
Writes ``$SLM_DATA_DIR/.version`` (default ``~/.superlocalmemory/.version``)
|
|
8
|
-
and prints a short factual banner the first time the CLI or daemon is
|
|
9
|
-
invoked after a ``pip install -U`` / ``npm install -g`` that changes the
|
|
10
|
-
installed version. Every subsequent invocation is a no-op.
|
|
11
|
-
|
|
12
|
-
The banner is best-effort and must never raise — a disk error or a
|
|
13
|
-
corrupt marker makes the banner silent, not the CLI broken.
|
|
14
|
-
"""
|
|
15
|
-
from __future__ import annotations
|
|
16
|
-
|
|
17
|
-
import os
|
|
18
|
-
import re
|
|
19
|
-
import sys
|
|
20
|
-
from pathlib import Path
|
|
21
|
-
|
|
22
|
-
# Strict allowlist: semver-ish only. Anything else in the marker is
|
|
23
|
-
# treated as "unknown" so a tampered or binary marker can't leak into
|
|
24
|
-
# banner strings or downstream consumers.
|
|
25
|
-
_VERSION_PATTERN = re.compile(r"^[0-9A-Za-z.\-+_]{1,32}$")
|
|
26
|
-
|
|
27
|
-
_MAX_MARKER_BYTES = 64 # a semver string is ≤ 32 chars; 64 is plenty
|
|
28
|
-
|
|
29
|
-
_RELEASE_NOTES: dict[str, tuple[str, ...]] = {
|
|
30
|
-
"3.8.1": (
|
|
31
|
-
"Large existing databases no longer delay daemon readiness",
|
|
32
|
-
"Failed enrichment retries stop after ten automatic attempts",
|
|
33
|
-
"Dashboard panes stay mounted between navigation changes",
|
|
34
|
-
"Local model workers stay warm for a 30-minute working session",
|
|
35
|
-
),
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
def _data_dir() -> Path:
|
|
40
|
-
from superlocalmemory.infra.data_root import canonical_data_root
|
|
41
|
-
return canonical_data_root()
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
def _marker_path() -> Path:
|
|
45
|
-
return _data_dir() / ".version"
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
def read_marker_version() -> str | None:
|
|
49
|
-
"""Return the marker string or None if missing / unreadable / invalid."""
|
|
50
|
-
target = _marker_path()
|
|
51
|
-
# Refuse to follow symlinks on the marker file — a co-tenant
|
|
52
|
-
# attacker who can drop a symlink into our data dir must not be
|
|
53
|
-
# able to redirect us to an arbitrary file.
|
|
54
|
-
try:
|
|
55
|
-
st = target.lstat()
|
|
56
|
-
except (FileNotFoundError, NotADirectoryError, PermissionError, OSError):
|
|
57
|
-
return None
|
|
58
|
-
import stat as _stat
|
|
59
|
-
if _stat.S_ISLNK(st.st_mode) or not _stat.S_ISREG(st.st_mode):
|
|
60
|
-
return None
|
|
61
|
-
try:
|
|
62
|
-
with open(target, "rb") as f:
|
|
63
|
-
raw = f.read(_MAX_MARKER_BYTES + 1)
|
|
64
|
-
except (FileNotFoundError, NotADirectoryError, PermissionError, OSError):
|
|
65
|
-
return None
|
|
66
|
-
if len(raw) > _MAX_MARKER_BYTES:
|
|
67
|
-
return None
|
|
68
|
-
try:
|
|
69
|
-
text = raw.decode("ascii").strip()
|
|
70
|
-
except UnicodeDecodeError:
|
|
71
|
-
return None
|
|
72
|
-
if not _VERSION_PATTERN.fullmatch(text):
|
|
73
|
-
return None
|
|
74
|
-
return text
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
def write_marker_version(version: str) -> bool:
|
|
78
|
-
"""Persist the current version to the marker with 0600 perms.
|
|
79
|
-
|
|
80
|
-
Uses a PID-scoped tmp file + ``os.replace`` for atomicity so
|
|
81
|
-
concurrent CLI / daemon / npm-postinstall invocations can't corrupt
|
|
82
|
-
each other's write. The final file is mode 0600 so the upgrade
|
|
83
|
-
timestamp is not a side-channel for co-tenant attackers.
|
|
84
|
-
"""
|
|
85
|
-
# Validate input — never write garbage, even on a programmer bug.
|
|
86
|
-
if not _VERSION_PATTERN.fullmatch(version):
|
|
87
|
-
return False
|
|
88
|
-
target = _marker_path()
|
|
89
|
-
try:
|
|
90
|
-
target.parent.mkdir(parents=True, exist_ok=True)
|
|
91
|
-
# Parent dir 0700 on POSIX (mirrors safe_fs._ensure_parent_0700)
|
|
92
|
-
if sys.platform != "win32":
|
|
93
|
-
try:
|
|
94
|
-
os.chmod(target.parent, 0o700)
|
|
95
|
-
except OSError:
|
|
96
|
-
pass
|
|
97
|
-
tmp = target.parent / f".version.tmp.{os.getpid()}"
|
|
98
|
-
# Open with 0600 so the tmp is never world-readable either.
|
|
99
|
-
flags = os.O_WRONLY | os.O_CREAT | os.O_TRUNC
|
|
100
|
-
if hasattr(os, "O_NOFOLLOW"):
|
|
101
|
-
flags |= os.O_NOFOLLOW
|
|
102
|
-
fd = os.open(tmp, flags, 0o600)
|
|
103
|
-
try:
|
|
104
|
-
os.write(fd, (version + "\n").encode("ascii"))
|
|
105
|
-
finally:
|
|
106
|
-
os.close(fd)
|
|
107
|
-
os.replace(tmp, target)
|
|
108
|
-
if sys.platform != "win32":
|
|
109
|
-
try:
|
|
110
|
-
os.chmod(target, 0o600)
|
|
111
|
-
except OSError:
|
|
112
|
-
pass
|
|
113
|
-
return True
|
|
114
|
-
except OSError:
|
|
115
|
-
return False
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
def _has_existing_db() -> bool:
|
|
119
|
-
"""True if a memory.db already exists — signals a pre-v3.4.26 user
|
|
120
|
-
upgrading in-place (the marker only began shipping in v3.4.26)."""
|
|
121
|
-
return (_data_dir() / "memory.db").exists()
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
def _banner(prior: str | None, current: str) -> str:
|
|
125
|
-
header = (f"SuperLocalMemory upgraded from {prior} to {current}"
|
|
126
|
-
if prior else
|
|
127
|
-
f"SuperLocalMemory upgraded to {current} (from an earlier version)")
|
|
128
|
-
notes = _RELEASE_NOTES.get(
|
|
129
|
-
current,
|
|
130
|
-
(
|
|
131
|
-
"The installed version has changed; existing memory remains in place",
|
|
132
|
-
"See the release notes for version-specific changes",
|
|
133
|
-
),
|
|
134
|
-
)
|
|
135
|
-
return "\n".join([
|
|
136
|
-
header,
|
|
137
|
-
*(f" - {note}" for note in notes),
|
|
138
|
-
"Run `slm doctor` to verify your setup.",
|
|
139
|
-
"",
|
|
140
|
-
])
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
def check_and_emit_upgrade_banner(current: str) -> bool:
|
|
144
|
-
"""Print the banner once per upgrade boundary. Idempotent.
|
|
145
|
-
|
|
146
|
-
Returns True if the banner was emitted on this call, else False.
|
|
147
|
-
Never raises — swallows I/O errors so a broken data directory cannot
|
|
148
|
-
take down the CLI.
|
|
149
|
-
|
|
150
|
-
Concurrent CLI + daemon + npm-postinstall callers serialize through
|
|
151
|
-
an O_CREAT|O_EXCL lock file so at most one emits the banner.
|
|
152
|
-
"""
|
|
153
|
-
try:
|
|
154
|
-
prior = read_marker_version()
|
|
155
|
-
|
|
156
|
-
if prior == current:
|
|
157
|
-
return False
|
|
158
|
-
|
|
159
|
-
# Fresh install: no marker, no DB. Stay quiet — the setup wizard
|
|
160
|
-
# handles the welcome. Still write the marker so subsequent
|
|
161
|
-
# invocations are no-ops.
|
|
162
|
-
if prior is None and not _has_existing_db():
|
|
163
|
-
write_marker_version(current)
|
|
164
|
-
return False
|
|
165
|
-
|
|
166
|
-
# Serialize concurrent emitters via O_CREAT|O_EXCL lock file.
|
|
167
|
-
lock = _data_dir() / ".version-banner.lock"
|
|
168
|
-
lock_fd = None
|
|
169
|
-
try:
|
|
170
|
-
lock.parent.mkdir(parents=True, exist_ok=True)
|
|
171
|
-
lock_fd = os.open(
|
|
172
|
-
str(lock), os.O_CREAT | os.O_EXCL | os.O_WRONLY, 0o600,
|
|
173
|
-
)
|
|
174
|
-
except FileExistsError:
|
|
175
|
-
return False
|
|
176
|
-
except OSError:
|
|
177
|
-
pass
|
|
178
|
-
|
|
179
|
-
try:
|
|
180
|
-
# Re-check after winning the lock — the loser may have
|
|
181
|
-
# already written the marker while we raced.
|
|
182
|
-
if read_marker_version() == current:
|
|
183
|
-
return False
|
|
184
|
-
|
|
185
|
-
# v3.6.13 (CRITICAL): write to STDERR, never stdout. On the `slm mcp`
|
|
186
|
-
# stdio transport, ANY stdout byte that isn't JSON-RPC corrupts the
|
|
187
|
-
# stream and the MCP client (e.g. Claude Desktop) rejects every
|
|
188
|
-
# message as "not valid JSON". The banner is a human notice → stderr.
|
|
189
|
-
sys.stderr.write(_banner(prior, current))
|
|
190
|
-
sys.stderr.flush()
|
|
191
|
-
write_marker_version(current)
|
|
192
|
-
return True
|
|
193
|
-
finally:
|
|
194
|
-
if lock_fd is not None:
|
|
195
|
-
os.close(lock_fd)
|
|
196
|
-
try:
|
|
197
|
-
lock.unlink(missing_ok=True)
|
|
198
|
-
except OSError:
|
|
199
|
-
pass
|
|
200
|
-
except Exception:
|
|
201
|
-
# Banner is advisory. A failure here must never propagate.
|
|
202
|
-
return False
|
|
@@ -1,129 +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
|
-
"""Setup-wizard extensions for v3.4.26.
|
|
6
|
-
|
|
7
|
-
Keeps the user-facing surface tiny: one yes/no prompt for the queue.
|
|
8
|
-
Everything else defaults; advanced users edit ``v3426_options.json``.
|
|
9
|
-
|
|
10
|
-
Also validates the chosen data directory at install time so cloud-sync
|
|
11
|
-
folders (iCloud, Dropbox, OneDrive, …) fail loud BEFORE the user stores
|
|
12
|
-
their first memory.
|
|
13
|
-
"""
|
|
14
|
-
from __future__ import annotations
|
|
15
|
-
|
|
16
|
-
import json
|
|
17
|
-
import logging
|
|
18
|
-
import os
|
|
19
|
-
import sys
|
|
20
|
-
from dataclasses import asdict, dataclass
|
|
21
|
-
from pathlib import Path
|
|
22
|
-
|
|
23
|
-
from superlocalmemory.core.safe_fs import SafeFsError, validate_data_dir
|
|
24
|
-
|
|
25
|
-
logger = logging.getLogger(__name__)
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
# Defaults tuned for a commodity laptop with 4 concurrent IDEs
|
|
29
|
-
# (Claude Code, Cursor, Antigravity, VS Code). See the release notes
|
|
30
|
-
# for the reasoning behind the numbers.
|
|
31
|
-
_DEFAULT_QUEUE_ENABLED = True
|
|
32
|
-
_DEFAULT_RATE_PER_PID = 30
|
|
33
|
-
_DEFAULT_RATE_PER_AGENT = 10
|
|
34
|
-
_DEFAULT_RATE_GLOBAL = 100
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
@dataclass(frozen=True)
|
|
38
|
-
class V3426Options:
|
|
39
|
-
queue_enabled: bool
|
|
40
|
-
rate_limit_per_pid: int
|
|
41
|
-
rate_limit_per_agent: int
|
|
42
|
-
rate_limit_global: int
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
def _default_options() -> V3426Options:
|
|
46
|
-
return V3426Options(
|
|
47
|
-
queue_enabled=_DEFAULT_QUEUE_ENABLED,
|
|
48
|
-
rate_limit_per_pid=_DEFAULT_RATE_PER_PID,
|
|
49
|
-
rate_limit_per_agent=_DEFAULT_RATE_PER_AGENT,
|
|
50
|
-
rate_limit_global=_DEFAULT_RATE_GLOBAL,
|
|
51
|
-
)
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
def prompt_v3426_options(interactive: bool) -> V3426Options:
|
|
55
|
-
"""Return user-chosen (or default) v3.4.26 options.
|
|
56
|
-
|
|
57
|
-
Non-interactive / EOFError (pipe) returns the defaults silently.
|
|
58
|
-
Ctrl-C propagates so the user can actually abort install.
|
|
59
|
-
"""
|
|
60
|
-
if not interactive:
|
|
61
|
-
return _default_options()
|
|
62
|
-
|
|
63
|
-
try:
|
|
64
|
-
answer = input(
|
|
65
|
-
"Enable SLM's concurrent-recall queue (recommended)? [Y/n]: "
|
|
66
|
-
).strip().lower()
|
|
67
|
-
except EOFError:
|
|
68
|
-
return _default_options()
|
|
69
|
-
|
|
70
|
-
queue_enabled = answer not in ("n", "no")
|
|
71
|
-
return V3426Options(
|
|
72
|
-
queue_enabled=queue_enabled,
|
|
73
|
-
rate_limit_per_pid=_DEFAULT_RATE_PER_PID,
|
|
74
|
-
rate_limit_per_agent=_DEFAULT_RATE_PER_AGENT,
|
|
75
|
-
rate_limit_global=_DEFAULT_RATE_GLOBAL,
|
|
76
|
-
)
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
def validate_install_data_dir(path: Path) -> tuple[bool, str]:
|
|
80
|
-
"""Return (ok, reason). Empty reason on success."""
|
|
81
|
-
try:
|
|
82
|
-
validate_data_dir(path)
|
|
83
|
-
except SafeFsError as exc:
|
|
84
|
-
return False, str(exc)
|
|
85
|
-
return True, ""
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
def persist_v3426_options(opts: V3426Options, home_dir: Path) -> Path:
|
|
89
|
-
"""Write the options JSON with 0600 perms and atomic replace.
|
|
90
|
-
|
|
91
|
-
Atomic: a crash mid-write leaves either the old file or nothing,
|
|
92
|
-
never a truncated JSON that the daemon can't parse on boot.
|
|
93
|
-
0600: rate-limit config is not sensitive per se, but the file
|
|
94
|
-
also carries future secrets — enforce the tight mode now.
|
|
95
|
-
"""
|
|
96
|
-
home_dir.mkdir(parents=True, exist_ok=True)
|
|
97
|
-
if sys.platform != "win32":
|
|
98
|
-
try:
|
|
99
|
-
os.chmod(home_dir, 0o700)
|
|
100
|
-
except OSError as exc:
|
|
101
|
-
logger.warning("could not tighten %s to 0700: %s", home_dir, exc)
|
|
102
|
-
target = home_dir / "v3426_options.json"
|
|
103
|
-
payload = (json.dumps(asdict(opts), indent=2) + "\n").encode("utf-8")
|
|
104
|
-
tmp = home_dir / f"v3426_options.json.tmp.{os.getpid()}"
|
|
105
|
-
flags = os.O_WRONLY | os.O_CREAT | os.O_TRUNC
|
|
106
|
-
if hasattr(os, "O_NOFOLLOW"):
|
|
107
|
-
flags |= os.O_NOFOLLOW
|
|
108
|
-
try:
|
|
109
|
-
fd = os.open(tmp, flags, 0o600)
|
|
110
|
-
try:
|
|
111
|
-
os.write(fd, payload)
|
|
112
|
-
finally:
|
|
113
|
-
os.close(fd)
|
|
114
|
-
os.replace(tmp, target)
|
|
115
|
-
if sys.platform != "win32":
|
|
116
|
-
try:
|
|
117
|
-
os.chmod(target, 0o600)
|
|
118
|
-
except OSError:
|
|
119
|
-
pass
|
|
120
|
-
except OSError:
|
|
121
|
-
# Fallback for odd filesystems that don't support O_NOFOLLOW
|
|
122
|
-
# or the perm bits — log + emit something rather than crash.
|
|
123
|
-
logger.warning(
|
|
124
|
-
"atomic write of %s failed; falling back to write_text", target,
|
|
125
|
-
)
|
|
126
|
-
target.write_text(
|
|
127
|
-
json.dumps(asdict(opts), indent=2) + "\n", encoding="utf-8",
|
|
128
|
-
)
|
|
129
|
-
return target
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
# Copyright (c) 2026 Varun Pratap Bhardwaj / Qualixar
|
|
2
|
-
# Licensed under AGPL-3.0-or-later - see LICENSE file
|
|
3
|
-
# Part of SuperLocalMemory v3.4 — CodeGraph Module
|
|
4
|
-
|
|
5
|
-
"""Code Knowledge Graph for SuperLocalMemory.
|
|
6
|
-
|
|
7
|
-
Unifies AST-derived code structure with SLM's semantic memory.
|
|
8
|
-
Separate code_graph.db — does not touch memory.db.
|
|
9
|
-
|
|
10
|
-
Usage:
|
|
11
|
-
from superlocalmemory.code_graph import CodeGraphService, CodeGraphConfig
|
|
12
|
-
|
|
13
|
-
config = CodeGraphConfig(enabled=True, repo_root=Path("/my/repo"))
|
|
14
|
-
service = CodeGraphService(config)
|
|
15
|
-
stats = service.get_stats()
|
|
16
|
-
"""
|
|
17
|
-
|
|
18
|
-
from superlocalmemory.code_graph.config import CodeGraphConfig
|
|
19
|
-
from superlocalmemory.code_graph.models import (
|
|
20
|
-
CodeMemoryLink,
|
|
21
|
-
EdgeKind,
|
|
22
|
-
FileRecord,
|
|
23
|
-
GraphEdge,
|
|
24
|
-
GraphNode,
|
|
25
|
-
LinkType,
|
|
26
|
-
NodeKind,
|
|
27
|
-
ParseResult,
|
|
28
|
-
)
|
|
29
|
-
from superlocalmemory.code_graph.service import (
|
|
30
|
-
CodeGraphNotEnabledError,
|
|
31
|
-
CodeGraphService,
|
|
32
|
-
)
|
|
33
|
-
|
|
34
|
-
__all__ = [
|
|
35
|
-
"CodeGraphConfig",
|
|
36
|
-
"CodeGraphService",
|
|
37
|
-
"CodeGraphNotEnabledError",
|
|
38
|
-
"GraphNode",
|
|
39
|
-
"GraphEdge",
|
|
40
|
-
"FileRecord",
|
|
41
|
-
"CodeMemoryLink",
|
|
42
|
-
"ParseResult",
|
|
43
|
-
"NodeKind",
|
|
44
|
-
"EdgeKind",
|
|
45
|
-
"LinkType",
|
|
46
|
-
]
|