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,286 +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 V4 | https://qualixar.com | https://varunpratap.com
|
|
4
|
-
|
|
5
|
-
"""LWW remote state convergence for the SLM mesh (3c-1).
|
|
6
|
-
|
|
7
|
-
Convergence guarantee
|
|
8
|
-
---------------------
|
|
9
|
-
Leaderless, pull-based, deterministic Last-Writer-Wins. Every node that
|
|
10
|
-
exchanges deltas converges on the same ``(value, revision, node_id)`` for
|
|
11
|
-
every key.
|
|
12
|
-
|
|
13
|
-
This is NOT linearizable consensus. Concurrent writes can interleave; the
|
|
14
|
-
winner is chosen deterministically by a TOTAL ORDER on ``(revision: int,
|
|
15
|
-
node_id: str)``. Same revision → higher ``node_id`` wins (lexicographic).
|
|
16
|
-
Because the order is total, every node independently computes the same
|
|
17
|
-
winner given the same set of writes.
|
|
18
|
-
|
|
19
|
-
Backward compatibility
|
|
20
|
-
----------------------
|
|
21
|
-
``set_state`` in the broker never sets ``origin_node``; rows it writes have
|
|
22
|
-
``origin_node = ''`` (the column default added here). At merge and
|
|
23
|
-
serialization time ``''`` is interpreted as the LOCAL node_id, so existing
|
|
24
|
-
rows participate correctly in the LWW protocol without any change to
|
|
25
|
-
``broker.py``.
|
|
26
|
-
|
|
27
|
-
Author: Varun Pratap Bhardwaj
|
|
28
|
-
"""
|
|
29
|
-
|
|
30
|
-
from __future__ import annotations
|
|
31
|
-
|
|
32
|
-
import logging
|
|
33
|
-
import sqlite3
|
|
34
|
-
from typing import Any
|
|
35
|
-
|
|
36
|
-
from superlocalmemory.mesh.node_identity import get_node_id
|
|
37
|
-
|
|
38
|
-
logger = logging.getLogger("superlocalmemory.mesh.state_sync")
|
|
39
|
-
|
|
40
|
-
# ---------------------------------------------------------------------------
|
|
41
|
-
# Schema migration (additive, idempotent)
|
|
42
|
-
# ---------------------------------------------------------------------------
|
|
43
|
-
|
|
44
|
-
_ALTER_ORIGIN_NODE = (
|
|
45
|
-
"ALTER TABLE mesh_state ADD COLUMN origin_node TEXT NOT NULL DEFAULT ''"
|
|
46
|
-
)
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
# ---------------------------------------------------------------------------
|
|
50
|
-
# StateSyncer
|
|
51
|
-
# ---------------------------------------------------------------------------
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
class StateSyncer:
|
|
55
|
-
"""Pull-based LWW convergence helper for the ``mesh_state`` table.
|
|
56
|
-
|
|
57
|
-
Designed to be instantiated on-demand (route handler, sync loop); all DB
|
|
58
|
-
connections are short-lived. Every operation is fail-soft: errors are
|
|
59
|
-
logged and the caller never receives an unhandled exception from here.
|
|
60
|
-
"""
|
|
61
|
-
|
|
62
|
-
def __init__(self, broker: Any) -> None:
|
|
63
|
-
self._broker = broker
|
|
64
|
-
self._db_path: str = str(broker._db_path)
|
|
65
|
-
# Resolved once; stable for the lifetime of this instance.
|
|
66
|
-
self._node_id: str = get_node_id(self._db_path)
|
|
67
|
-
self._ensure_origin_node_column()
|
|
68
|
-
|
|
69
|
-
# ------------------------------------------------------------------
|
|
70
|
-
# Schema bootstrap
|
|
71
|
-
# ------------------------------------------------------------------
|
|
72
|
-
|
|
73
|
-
def _ensure_origin_node_column(self) -> None:
|
|
74
|
-
"""Add ``origin_node`` to ``mesh_state``; no-op if already present."""
|
|
75
|
-
try:
|
|
76
|
-
conn = sqlite3.connect(self._db_path, timeout=5.0)
|
|
77
|
-
try:
|
|
78
|
-
conn.execute(_ALTER_ORIGIN_NODE)
|
|
79
|
-
conn.commit()
|
|
80
|
-
except sqlite3.OperationalError as exc:
|
|
81
|
-
if "duplicate column" in str(exc).lower():
|
|
82
|
-
pass # Expected on second startup / upgrade
|
|
83
|
-
else:
|
|
84
|
-
logger.error(
|
|
85
|
-
"StateSyncer._ensure_origin_node_column: unexpected "
|
|
86
|
-
"OperationalError at %s: %s",
|
|
87
|
-
self._db_path, exc,
|
|
88
|
-
)
|
|
89
|
-
finally:
|
|
90
|
-
conn.close()
|
|
91
|
-
except sqlite3.Error as exc:
|
|
92
|
-
logger.error(
|
|
93
|
-
"StateSyncer._ensure_origin_node_column: DB error at %s: %s",
|
|
94
|
-
self._db_path, exc,
|
|
95
|
-
)
|
|
96
|
-
|
|
97
|
-
# ------------------------------------------------------------------
|
|
98
|
-
# Internal helpers
|
|
99
|
-
# ------------------------------------------------------------------
|
|
100
|
-
|
|
101
|
-
def _effective_node(self, stored_origin: str) -> str:
|
|
102
|
-
"""Resolve ``origin_node=''`` (BC rows) to this node's id at call time."""
|
|
103
|
-
return stored_origin if stored_origin else self._node_id
|
|
104
|
-
|
|
105
|
-
def _open_conn(self) -> sqlite3.Connection:
|
|
106
|
-
conn = sqlite3.connect(self._db_path, timeout=5.0)
|
|
107
|
-
conn.row_factory = sqlite3.Row
|
|
108
|
-
return conn
|
|
109
|
-
|
|
110
|
-
# ------------------------------------------------------------------
|
|
111
|
-
# Public API
|
|
112
|
-
# ------------------------------------------------------------------
|
|
113
|
-
|
|
114
|
-
def local_delta(
|
|
115
|
-
self,
|
|
116
|
-
profile_id: str = "default",
|
|
117
|
-
since_revision: int = 0,
|
|
118
|
-
) -> list[dict]:
|
|
119
|
-
"""Return rows with ``revision > since_revision`` for a profile.
|
|
120
|
-
|
|
121
|
-
The ``node_id`` field in each entry reflects the *effective* node:
|
|
122
|
-
the stored ``origin_node`` when non-empty, or the local node_id for
|
|
123
|
-
BC rows written by the broker (``origin_node = ''``).
|
|
124
|
-
|
|
125
|
-
Returns ``[]`` on any DB error (fail-soft).
|
|
126
|
-
"""
|
|
127
|
-
try:
|
|
128
|
-
conn = self._open_conn()
|
|
129
|
-
try:
|
|
130
|
-
rows = conn.execute(
|
|
131
|
-
"SELECT key, value, set_by, updated_at,"
|
|
132
|
-
" COALESCE(revision, 0) AS revision,"
|
|
133
|
-
" COALESCE(origin_node, '') AS origin_node"
|
|
134
|
-
" FROM mesh_state"
|
|
135
|
-
" WHERE profile_id = ? AND COALESCE(revision, 0) > ?",
|
|
136
|
-
(profile_id, int(since_revision)),
|
|
137
|
-
).fetchall()
|
|
138
|
-
return [
|
|
139
|
-
{
|
|
140
|
-
"key": row["key"],
|
|
141
|
-
"value": row["value"],
|
|
142
|
-
"set_by": row["set_by"],
|
|
143
|
-
"updated_at": row["updated_at"],
|
|
144
|
-
"revision": int(row["revision"]),
|
|
145
|
-
"node_id": self._effective_node(row["origin_node"]),
|
|
146
|
-
}
|
|
147
|
-
for row in rows
|
|
148
|
-
]
|
|
149
|
-
finally:
|
|
150
|
-
conn.close()
|
|
151
|
-
except sqlite3.Error as exc:
|
|
152
|
-
logger.error(
|
|
153
|
-
"StateSyncer.local_delta: DB error at %s: %s",
|
|
154
|
-
self._db_path, exc,
|
|
155
|
-
)
|
|
156
|
-
return []
|
|
157
|
-
|
|
158
|
-
def merge_remote(
|
|
159
|
-
self,
|
|
160
|
-
profile_id: str,
|
|
161
|
-
remote_entries: list[dict],
|
|
162
|
-
) -> dict:
|
|
163
|
-
"""Merge remote delta entries using deterministic LWW.
|
|
164
|
-
|
|
165
|
-
For each entry ``{key, value, set_by, updated_at, revision, node_id}``:
|
|
166
|
-
|
|
167
|
-
* If ``(remote_rev, remote_node) > (local_rev, local_node)`` (total
|
|
168
|
-
order): UPSERT the local row. The winning ``revision`` is preserved
|
|
169
|
-
as-is — never incremented — so re-merging the same delta is a no-op
|
|
170
|
-
(idempotent convergence).
|
|
171
|
-
* Otherwise: do nothing.
|
|
172
|
-
|
|
173
|
-
Returns ``{"applied": N, "skipped": M}``. Errors per-entry are
|
|
174
|
-
logged and counted as skipped; they never propagate to the caller.
|
|
175
|
-
"""
|
|
176
|
-
applied = 0
|
|
177
|
-
skipped = 0
|
|
178
|
-
for entry in remote_entries:
|
|
179
|
-
# Compute a safe log key BEFORE the try so a non-dict entry can
|
|
180
|
-
# never make the error handler itself raise (audit P0/P2 — the
|
|
181
|
-
# handler previously called entry.get() on possibly-non-dict).
|
|
182
|
-
entry_key = entry.get("key") if isinstance(entry, dict) else repr(entry)
|
|
183
|
-
try:
|
|
184
|
-
if self._merge_one(profile_id, entry):
|
|
185
|
-
applied += 1
|
|
186
|
-
else:
|
|
187
|
-
skipped += 1
|
|
188
|
-
except sqlite3.Error as exc:
|
|
189
|
-
logger.error(
|
|
190
|
-
"StateSyncer.merge_remote: DB error on key=%r: %s",
|
|
191
|
-
entry_key, exc,
|
|
192
|
-
)
|
|
193
|
-
skipped += 1
|
|
194
|
-
except (KeyError, TypeError, ValueError, AttributeError) as exc:
|
|
195
|
-
logger.error(
|
|
196
|
-
"StateSyncer.merge_remote: malformed entry key=%r: %s",
|
|
197
|
-
entry_key, exc,
|
|
198
|
-
)
|
|
199
|
-
skipped += 1
|
|
200
|
-
return {"applied": applied, "skipped": skipped}
|
|
201
|
-
|
|
202
|
-
def _merge_one(self, profile_id: str, entry: dict) -> bool:
|
|
203
|
-
"""Apply one remote entry if it wins the LWW comparison.
|
|
204
|
-
|
|
205
|
-
Returns ``True`` if the local row was updated; ``False`` if local
|
|
206
|
-
won or the comparison was a tie (same revision, same node_id).
|
|
207
|
-
|
|
208
|
-
CRITICAL: ``revision`` is never incremented here. Preserving the
|
|
209
|
-
winning revision is what makes convergence idempotent — a second
|
|
210
|
-
merge of the same delta computes the identical comparison result and
|
|
211
|
-
takes no action.
|
|
212
|
-
"""
|
|
213
|
-
# Audit P0/P2: a non-dict entry must never crash the merge.
|
|
214
|
-
if not isinstance(entry, dict):
|
|
215
|
-
return False
|
|
216
|
-
key = str(entry["key"])
|
|
217
|
-
# Guard: cast revision to int to prevent string lexicographic miscompare
|
|
218
|
-
# (e.g. "10" < "9" as strings but 10 > 9 as ints).
|
|
219
|
-
remote_rev: int = int(entry["revision"])
|
|
220
|
-
remote_node: str = str(entry.get("node_id", "")).strip()
|
|
221
|
-
# Audit P1: an empty node_id would be stored as origin_node='' and then
|
|
222
|
-
# re-exported under THIS node's id, rewriting provenance and corrupting
|
|
223
|
-
# the tie-break. Refuse an entry without a real origin.
|
|
224
|
-
if not remote_node:
|
|
225
|
-
return False
|
|
226
|
-
# Audit P2: never persist a NULL value as the literal string "None".
|
|
227
|
-
if entry.get("value") is None:
|
|
228
|
-
return False
|
|
229
|
-
|
|
230
|
-
conn = self._open_conn()
|
|
231
|
-
# Audit P1 (TOCTOU): the read-compare-write MUST be atomic against a
|
|
232
|
-
# concurrent broker.set_state on the same key. Without a write lock, a
|
|
233
|
-
# stale local read lets a lower remote revision overwrite a fresher
|
|
234
|
-
# local write (losing local-highest-revision). BEGIN IMMEDIATE takes the
|
|
235
|
-
# write lock for the whole critical section.
|
|
236
|
-
conn.isolation_level = None # manual transaction control
|
|
237
|
-
try:
|
|
238
|
-
conn.execute("BEGIN IMMEDIATE")
|
|
239
|
-
row = conn.execute(
|
|
240
|
-
"SELECT COALESCE(revision, 0) AS revision,"
|
|
241
|
-
" COALESCE(origin_node, '') AS origin_node"
|
|
242
|
-
" FROM mesh_state"
|
|
243
|
-
" WHERE profile_id = ? AND key = ?",
|
|
244
|
-
(profile_id, key),
|
|
245
|
-
).fetchone()
|
|
246
|
-
|
|
247
|
-
if row is None:
|
|
248
|
-
local_rev: int = 0
|
|
249
|
-
local_node: str = "" # No row — treat as the absolute minimum
|
|
250
|
-
else:
|
|
251
|
-
local_rev = int(row["revision"])
|
|
252
|
-
local_node = self._effective_node(row["origin_node"])
|
|
253
|
-
|
|
254
|
-
# Total order: compare revision (int) first; break ties by node_id (str lex).
|
|
255
|
-
# A strict > means ties-to-local (same rev, same node) → do nothing (idempotent).
|
|
256
|
-
remote_wins: bool = (remote_rev, remote_node) > (local_rev, local_node)
|
|
257
|
-
if not remote_wins:
|
|
258
|
-
conn.execute("ROLLBACK")
|
|
259
|
-
return False
|
|
260
|
-
|
|
261
|
-
# UPSERT: set origin_node = remote_node so subsequent merges of the
|
|
262
|
-
# same delta compute the same winner without re-resolving local node_id.
|
|
263
|
-
conn.execute(
|
|
264
|
-
"INSERT INTO mesh_state"
|
|
265
|
-
" (profile_id, key, value, set_by, updated_at, revision, origin_node)"
|
|
266
|
-
" VALUES (?, ?, ?, ?, ?, ?, ?)"
|
|
267
|
-
" ON CONFLICT(profile_id, key) DO UPDATE SET"
|
|
268
|
-
" value = excluded.value,"
|
|
269
|
-
" set_by = excluded.set_by,"
|
|
270
|
-
" updated_at = excluded.updated_at,"
|
|
271
|
-
" revision = excluded.revision,"
|
|
272
|
-
" origin_node = excluded.origin_node",
|
|
273
|
-
(
|
|
274
|
-
profile_id,
|
|
275
|
-
key,
|
|
276
|
-
str(entry["value"]),
|
|
277
|
-
str(entry["set_by"]),
|
|
278
|
-
str(entry["updated_at"]),
|
|
279
|
-
remote_rev,
|
|
280
|
-
remote_node,
|
|
281
|
-
),
|
|
282
|
-
)
|
|
283
|
-
conn.execute("COMMIT")
|
|
284
|
-
return True
|
|
285
|
-
finally:
|
|
286
|
-
conn.close()
|
|
@@ -1,144 +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
|
-
"""Idempotent migration from v3.4.25 to v3.4.26 data layout.
|
|
6
|
-
|
|
7
|
-
Part of Qualixar | Author: Varun Pratap Bhardwaj
|
|
8
|
-
"""
|
|
9
|
-
|
|
10
|
-
from __future__ import annotations
|
|
11
|
-
|
|
12
|
-
import logging
|
|
13
|
-
from pathlib import Path
|
|
14
|
-
|
|
15
|
-
logger = logging.getLogger(__name__)
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
def _daemon_running() -> bool:
|
|
19
|
-
"""Return True if an SLM daemon is holding the data dir.
|
|
20
|
-
|
|
21
|
-
Defined as a module-level indirection so tests can monkey-patch it
|
|
22
|
-
without reaching into ``cli.daemon``.
|
|
23
|
-
"""
|
|
24
|
-
from superlocalmemory.cli.daemon import is_daemon_running
|
|
25
|
-
return bool(is_daemon_running())
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
def migrate_if_safe(data_dir: Path) -> dict[str, object]:
|
|
29
|
-
"""Run :func:`migrate` only when it's safe to touch the data dir.
|
|
30
|
-
|
|
31
|
-
Safety guarantees:
|
|
32
|
-
|
|
33
|
-
1. A live daemon means defer — the daemon is the authoritative DB
|
|
34
|
-
holder and will apply the migration on its next start.
|
|
35
|
-
2. If the daemon probe itself fails, err on the safe side and defer.
|
|
36
|
-
3. Concurrent CLI + daemon-start + npm-postinstall invocations on
|
|
37
|
-
the same data dir serialize through a file lock, so no two
|
|
38
|
-
processes can race into ``migrate()`` at the same moment.
|
|
39
|
-
|
|
40
|
-
Returns a dict with a ``status`` in
|
|
41
|
-
``{applied, already_applied, deferred}``.
|
|
42
|
-
"""
|
|
43
|
-
data_dir = Path(data_dir)
|
|
44
|
-
|
|
45
|
-
if is_ready(data_dir):
|
|
46
|
-
return {"status": "already_applied", "data_dir": str(data_dir)}
|
|
47
|
-
|
|
48
|
-
try:
|
|
49
|
-
daemon_up = _daemon_running()
|
|
50
|
-
except Exception as exc:
|
|
51
|
-
logger.warning(
|
|
52
|
-
"daemon probe failed, deferring migrate_if_safe: %s", exc,
|
|
53
|
-
)
|
|
54
|
-
daemon_up = True
|
|
55
|
-
|
|
56
|
-
if daemon_up:
|
|
57
|
-
return {
|
|
58
|
-
"status": "deferred",
|
|
59
|
-
"data_dir": str(data_dir),
|
|
60
|
-
"reason": "daemon is running — migration will apply on next daemon start",
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
# Serialize concurrent CLI / postinstall / daemon-boot callers.
|
|
64
|
-
data_dir.mkdir(parents=True, exist_ok=True)
|
|
65
|
-
lock_path = data_dir / ".migrate-v3.4.26.lock"
|
|
66
|
-
lock_fd = None
|
|
67
|
-
try:
|
|
68
|
-
import os
|
|
69
|
-
lock_fd = os.open(str(lock_path), os.O_CREAT | os.O_RDWR, 0o600)
|
|
70
|
-
import sys
|
|
71
|
-
if sys.platform == "win32":
|
|
72
|
-
try:
|
|
73
|
-
import msvcrt
|
|
74
|
-
msvcrt.locking(lock_fd, msvcrt.LK_LOCK, 1)
|
|
75
|
-
except (IOError, OSError):
|
|
76
|
-
# Another process is mid-migrate — they will apply it.
|
|
77
|
-
return {
|
|
78
|
-
"status": "deferred",
|
|
79
|
-
"data_dir": str(data_dir),
|
|
80
|
-
"reason": "concurrent migrate_if_safe in progress",
|
|
81
|
-
}
|
|
82
|
-
else:
|
|
83
|
-
try:
|
|
84
|
-
import fcntl
|
|
85
|
-
fcntl.flock(lock_fd, fcntl.LOCK_EX)
|
|
86
|
-
except (IOError, OSError):
|
|
87
|
-
return {
|
|
88
|
-
"status": "deferred",
|
|
89
|
-
"data_dir": str(data_dir),
|
|
90
|
-
"reason": "concurrent migrate_if_safe in progress",
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
# Re-check the sentinel now that we own the lock — another
|
|
94
|
-
# process may have applied the migration while we waited.
|
|
95
|
-
if is_ready(data_dir):
|
|
96
|
-
return {"status": "already_applied", "data_dir": str(data_dir)}
|
|
97
|
-
|
|
98
|
-
result = migrate(data_dir)
|
|
99
|
-
result["status"] = "applied"
|
|
100
|
-
return result
|
|
101
|
-
finally:
|
|
102
|
-
if lock_fd is not None:
|
|
103
|
-
try:
|
|
104
|
-
import os as _os
|
|
105
|
-
_os.close(lock_fd)
|
|
106
|
-
except OSError:
|
|
107
|
-
pass
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
def migrate(data_dir: Path) -> dict[str, object]:
|
|
111
|
-
"""Prepare v3.4.26 data directory. Safe to run any number of times.
|
|
112
|
-
|
|
113
|
-
memory.db is untouched; the migration only provisions the new
|
|
114
|
-
recall_queue.db and marks readiness with a sentinel file.
|
|
115
|
-
"""
|
|
116
|
-
result: dict[str, object] = {
|
|
117
|
-
"data_dir": str(data_dir),
|
|
118
|
-
"created": [],
|
|
119
|
-
"already_present": [],
|
|
120
|
-
}
|
|
121
|
-
data_dir = Path(data_dir)
|
|
122
|
-
data_dir.mkdir(parents=True, exist_ok=True)
|
|
123
|
-
|
|
124
|
-
from superlocalmemory.core.recall_queue import RecallQueue
|
|
125
|
-
|
|
126
|
-
queue_path = data_dir / "recall_queue.db"
|
|
127
|
-
if queue_path.exists():
|
|
128
|
-
result["already_present"].append(str(queue_path))
|
|
129
|
-
else:
|
|
130
|
-
result["created"].append(str(queue_path))
|
|
131
|
-
q = RecallQueue(db_path=queue_path)
|
|
132
|
-
q.close()
|
|
133
|
-
|
|
134
|
-
marker = data_dir / ".slm-v3.4.26-ready"
|
|
135
|
-
if marker.exists():
|
|
136
|
-
result["already_present"].append(str(marker))
|
|
137
|
-
else:
|
|
138
|
-
marker.write_text("3.4.26\n", encoding="utf-8")
|
|
139
|
-
result["created"].append(str(marker))
|
|
140
|
-
return result
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
def is_ready(data_dir: Path) -> bool:
|
|
144
|
-
return (Path(data_dir) / ".slm-v3.4.26-ready").exists()
|
|
File without changes
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
"""optimize/adapters — SDK adapters for OpenAI / Anthropic / LangChain.
|
|
2
|
-
|
|
3
|
-
SECURITY: No pickle anywhere. JSON+pydantic only (SEC-C-04, CWE-502).
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from __future__ import annotations
|
|
7
|
-
|
|
8
|
-
import logging
|
|
9
|
-
from typing import Any
|
|
10
|
-
|
|
11
|
-
logger = logging.getLogger("superlocalmemory.optimize.adapters")
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
def withSLM(client: Any, *, tenant_id: str = "default") -> Any:
|
|
15
|
-
"""Wrap any supported SDK client with SLM cache hooks.
|
|
16
|
-
|
|
17
|
-
FAIL-OPEN GUARANTEE:
|
|
18
|
-
- If Optimize is disabled (config.enabled == False) → return client unchanged.
|
|
19
|
-
- If cache is unavailable → return client unchanged, log WARNING.
|
|
20
|
-
- If client type unrecognized → return client unchanged, log WARNING.
|
|
21
|
-
"""
|
|
22
|
-
try:
|
|
23
|
-
from superlocalmemory.optimize.config import get_optimize_config
|
|
24
|
-
from superlocalmemory.optimize.cache.manager import CacheManager
|
|
25
|
-
except ImportError as exc:
|
|
26
|
-
logger.warning("SLM Optimize not available (%s) — pass-through active", exc)
|
|
27
|
-
return client
|
|
28
|
-
|
|
29
|
-
config = get_optimize_config()
|
|
30
|
-
if not config.enabled:
|
|
31
|
-
return client # DEFAULT STATE — zero behavioral change
|
|
32
|
-
|
|
33
|
-
try:
|
|
34
|
-
cache_manager = CacheManager.get_instance()
|
|
35
|
-
except Exception as exc:
|
|
36
|
-
logger.warning("SLM cache unavailable (%s) — pass-through active", exc)
|
|
37
|
-
return client
|
|
38
|
-
|
|
39
|
-
# Anthropic (.messages.create)
|
|
40
|
-
if hasattr(client, "messages") and hasattr(client.messages, "create"):
|
|
41
|
-
try:
|
|
42
|
-
from superlocalmemory.optimize.adapters.anthropic_adapter import (
|
|
43
|
-
SLMAnthropicAdapter,
|
|
44
|
-
)
|
|
45
|
-
return SLMAnthropicAdapter(client, cache_manager, config, tenant_id)
|
|
46
|
-
except Exception as exc:
|
|
47
|
-
logger.warning("SLM Anthropic adapter init failed: %s", exc)
|
|
48
|
-
return client
|
|
49
|
-
|
|
50
|
-
# OpenAI (.chat.completions)
|
|
51
|
-
if hasattr(client, "chat") and hasattr(client.chat, "completions"):
|
|
52
|
-
try:
|
|
53
|
-
from superlocalmemory.optimize.adapters.openai_adapter import (
|
|
54
|
-
SLMOpenAIAdapter,
|
|
55
|
-
)
|
|
56
|
-
return SLMOpenAIAdapter(client, cache_manager, config, tenant_id)
|
|
57
|
-
except Exception as exc:
|
|
58
|
-
logger.warning("SLM OpenAI adapter init failed: %s", exc)
|
|
59
|
-
return client
|
|
60
|
-
|
|
61
|
-
logger.warning(
|
|
62
|
-
"withSLM: unrecognized client type %s — pass-through active",
|
|
63
|
-
type(client).__name__,
|
|
64
|
-
)
|
|
65
|
-
return client
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
__all__ = ["withSLM"]
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
"""Agent redirect registry — DATA ONLY, no logic.
|
|
2
|
-
|
|
3
|
-
PORT: 8765 (INTERFACE-CONTRACT §0). There is NO port 52415 anywhere.
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from __future__ import annotations
|
|
7
|
-
|
|
8
|
-
from typing import Any
|
|
9
|
-
|
|
10
|
-
AGENT_REGISTRY: dict[str, dict[str, Any]] = {
|
|
11
|
-
"claude": {
|
|
12
|
-
"binary": "claude",
|
|
13
|
-
"mechanism": "env",
|
|
14
|
-
"env_vars": {"ANTHROPIC_BASE_URL": "http://127.0.0.1:8765"},
|
|
15
|
-
"settings_path": None,
|
|
16
|
-
"protocol": "anthropic",
|
|
17
|
-
"print_only": False,
|
|
18
|
-
"help_text": (
|
|
19
|
-
"Launches `claude` with ANTHROPIC_BASE_URL pointing at the SLM proxy.\n"
|
|
20
|
-
"All Claude Code calls are intercepted: cache checked, response stored."
|
|
21
|
-
),
|
|
22
|
-
},
|
|
23
|
-
"claude-settings": {
|
|
24
|
-
"binary": None,
|
|
25
|
-
"mechanism": "settings-file",
|
|
26
|
-
"settings_path": "~/.claude/settings.json",
|
|
27
|
-
"env_vars": {"ANTHROPIC_BASE_URL": "http://127.0.0.1:8765"},
|
|
28
|
-
"protocol": "anthropic",
|
|
29
|
-
"print_only": False,
|
|
30
|
-
"help_text": (
|
|
31
|
-
"Writes ANTHROPIC_BASE_URL into ~/.claude/settings.json env block."
|
|
32
|
-
),
|
|
33
|
-
},
|
|
34
|
-
"antigravity": {
|
|
35
|
-
"binary": "agy",
|
|
36
|
-
"mechanism": "print-only",
|
|
37
|
-
"protocol": "anthropic",
|
|
38
|
-
"print_only": True,
|
|
39
|
-
"help_text": (
|
|
40
|
-
"Antigravity (agy) redirect must be verified at runtime.\n"
|
|
41
|
-
"Run: agy --help | grep -i base\n"
|
|
42
|
-
"Then export the appropriate env var manually."
|
|
43
|
-
),
|
|
44
|
-
},
|
|
45
|
-
"cline": {
|
|
46
|
-
"binary": None,
|
|
47
|
-
"mechanism": "config-file",
|
|
48
|
-
"config_path": "{vscode_user_dir}/settings.json",
|
|
49
|
-
"config_key": "cline.openAiApiBase",
|
|
50
|
-
"config_value": "http://127.0.0.1:8765/v1",
|
|
51
|
-
"protocol": "openai",
|
|
52
|
-
"print_only": False,
|
|
53
|
-
"help_text": (
|
|
54
|
-
"Edits VS Code user settings to set cline.openAiApiBase."
|
|
55
|
-
),
|
|
56
|
-
},
|
|
57
|
-
"opencode": {
|
|
58
|
-
"binary": "opencode",
|
|
59
|
-
"mechanism": "print-only",
|
|
60
|
-
"protocol": "openai",
|
|
61
|
-
"print_only": True,
|
|
62
|
-
"help_text": (
|
|
63
|
-
"OpenCode redirect must be verified at runtime.\n"
|
|
64
|
-
"Run: opencode --print-config"
|
|
65
|
-
),
|
|
66
|
-
},
|
|
67
|
-
"cursor": {
|
|
68
|
-
"binary": "cursor",
|
|
69
|
-
"mechanism": "print-only",
|
|
70
|
-
"protocol": "openai",
|
|
71
|
-
"print_only": True,
|
|
72
|
-
"help_text": (
|
|
73
|
-
"Cursor settings cannot be automated via env vars.\n"
|
|
74
|
-
"Manual: Settings → Models → Override OpenAI Base URL → http://127.0.0.1:8765/v1"
|
|
75
|
-
),
|
|
76
|
-
},
|
|
77
|
-
"aider": {
|
|
78
|
-
"binary": "aider",
|
|
79
|
-
"mechanism": "env",
|
|
80
|
-
"env_vars": {
|
|
81
|
-
"OPENAI_API_BASE": "http://127.0.0.1:8765/v1",
|
|
82
|
-
"ANTHROPIC_BASE_URL": "http://127.0.0.1:8765",
|
|
83
|
-
},
|
|
84
|
-
"protocol": "both",
|
|
85
|
-
"print_only": False,
|
|
86
|
-
"help_text": (
|
|
87
|
-
"Launches `aider` with both OpenAI and Anthropic base URLs set."
|
|
88
|
-
),
|
|
89
|
-
},
|
|
90
|
-
"codex": {
|
|
91
|
-
"binary": "codex",
|
|
92
|
-
"mechanism": "env",
|
|
93
|
-
"env_vars": {"OPENAI_BASE_URL": "http://127.0.0.1:8765/v1"},
|
|
94
|
-
"protocol": "openai",
|
|
95
|
-
"print_only": False,
|
|
96
|
-
"help_text": (
|
|
97
|
-
"Launches `codex` with OPENAI_BASE_URL pointing at the SLM proxy."
|
|
98
|
-
),
|
|
99
|
-
},
|
|
100
|
-
"copilot": {
|
|
101
|
-
"binary": "copilot",
|
|
102
|
-
"mechanism": "print-only",
|
|
103
|
-
"protocol": "anthropic",
|
|
104
|
-
"print_only": True,
|
|
105
|
-
"help_text": (
|
|
106
|
-
"Copilot redirect must be verified at runtime.\n"
|
|
107
|
-
"Run: gh copilot --help | grep -i provider"
|
|
108
|
-
),
|
|
109
|
-
},
|
|
110
|
-
"generic": {
|
|
111
|
-
"binary": None,
|
|
112
|
-
"mechanism": "print-only",
|
|
113
|
-
"protocol": "openai",
|
|
114
|
-
"print_only": True,
|
|
115
|
-
"help_text": (
|
|
116
|
-
"Generic OpenAI-compatible client:\n"
|
|
117
|
-
" export OPENAI_BASE_URL=http://127.0.0.1:8765/v1"
|
|
118
|
-
),
|
|
119
|
-
},
|
|
120
|
-
}
|