superlocalmemory 2.8.6 → 3.0.1
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/LICENSE +9 -1
- package/NOTICE +63 -0
- package/README.md +165 -480
- package/bin/slm +17 -449
- package/bin/slm-npm +62 -48
- package/conftest.py +5 -0
- package/docs/api-reference.md +284 -0
- package/docs/architecture.md +149 -0
- package/docs/auto-memory.md +150 -0
- package/docs/cli-reference.md +276 -0
- package/docs/compliance.md +191 -0
- package/docs/configuration.md +182 -0
- package/docs/getting-started.md +102 -0
- package/docs/ide-setup.md +261 -0
- package/docs/mcp-tools.md +220 -0
- package/docs/migration-from-v2.md +170 -0
- package/docs/profiles.md +173 -0
- package/docs/troubleshooting.md +310 -0
- package/{configs → ide/configs}/antigravity-mcp.json +3 -3
- package/ide/configs/chatgpt-desktop-mcp.json +16 -0
- package/{configs → ide/configs}/claude-desktop-mcp.json +3 -3
- package/{configs → ide/configs}/codex-mcp.toml +4 -4
- package/{configs → ide/configs}/continue-mcp.yaml +4 -3
- package/{configs → ide/configs}/continue-skills.yaml +6 -6
- package/ide/configs/cursor-mcp.json +15 -0
- package/{configs → ide/configs}/gemini-cli-mcp.json +2 -2
- package/{configs → ide/configs}/jetbrains-mcp.json +2 -2
- package/{configs → ide/configs}/opencode-mcp.json +2 -2
- package/{configs → ide/configs}/perplexity-mcp.json +2 -2
- package/{configs → ide/configs}/vscode-copilot-mcp.json +2 -2
- package/{configs → ide/configs}/windsurf-mcp.json +3 -3
- package/{configs → ide/configs}/zed-mcp.json +2 -2
- package/{hooks → ide/hooks}/context-hook.js +9 -20
- package/ide/hooks/memory-list-skill.js +70 -0
- package/ide/hooks/memory-profile-skill.js +101 -0
- package/ide/hooks/memory-recall-skill.js +62 -0
- package/ide/hooks/memory-remember-skill.js +68 -0
- package/ide/hooks/memory-reset-skill.js +160 -0
- package/{hooks → ide/hooks}/post-recall-hook.js +2 -2
- package/ide/integrations/langchain/README.md +106 -0
- package/ide/integrations/langchain/langchain_superlocalmemory/__init__.py +9 -0
- package/ide/integrations/langchain/langchain_superlocalmemory/chat_message_history.py +201 -0
- package/ide/integrations/langchain/pyproject.toml +38 -0
- package/{src/learning → ide/integrations/langchain}/tests/__init__.py +1 -0
- package/ide/integrations/langchain/tests/test_chat_message_history.py +215 -0
- package/ide/integrations/langchain/tests/test_security.py +117 -0
- package/ide/integrations/llamaindex/README.md +81 -0
- package/ide/integrations/llamaindex/llama_index/storage/chat_store/superlocalmemory/__init__.py +9 -0
- package/ide/integrations/llamaindex/llama_index/storage/chat_store/superlocalmemory/base.py +316 -0
- package/ide/integrations/llamaindex/pyproject.toml +43 -0
- package/{src/lifecycle → ide/integrations/llamaindex}/tests/__init__.py +1 -2
- package/ide/integrations/llamaindex/tests/test_chat_store.py +294 -0
- package/ide/integrations/llamaindex/tests/test_security.py +241 -0
- package/{skills → ide/skills}/slm-build-graph/SKILL.md +6 -6
- package/{skills → ide/skills}/slm-list-recent/SKILL.md +5 -5
- package/{skills → ide/skills}/slm-recall/SKILL.md +5 -5
- package/{skills → ide/skills}/slm-remember/SKILL.md +6 -6
- package/{skills → ide/skills}/slm-show-patterns/SKILL.md +7 -7
- package/{skills → ide/skills}/slm-status/SKILL.md +9 -9
- package/{skills → ide/skills}/slm-switch-profile/SKILL.md +9 -9
- package/package.json +13 -22
- package/pyproject.toml +85 -0
- package/scripts/build-dmg.sh +417 -0
- package/scripts/install-skills.ps1 +334 -0
- package/scripts/postinstall.js +2 -2
- package/scripts/start-dashboard.ps1 +52 -0
- package/scripts/start-dashboard.sh +41 -0
- package/scripts/sync-wiki.ps1 +127 -0
- package/scripts/sync-wiki.sh +82 -0
- package/scripts/test-dmg.sh +161 -0
- package/scripts/test-npm-package.ps1 +252 -0
- package/scripts/test-npm-package.sh +207 -0
- package/scripts/verify-install.ps1 +294 -0
- package/scripts/verify-install.sh +266 -0
- package/src/superlocalmemory/__init__.py +0 -0
- package/src/superlocalmemory/attribution/__init__.py +9 -0
- package/src/superlocalmemory/attribution/mathematical_dna.py +235 -0
- package/src/superlocalmemory/attribution/signer.py +153 -0
- package/src/superlocalmemory/attribution/watermark.py +189 -0
- package/src/superlocalmemory/cli/__init__.py +5 -0
- package/src/superlocalmemory/cli/commands.py +245 -0
- package/src/superlocalmemory/cli/main.py +89 -0
- package/src/superlocalmemory/cli/migrate_cmd.py +55 -0
- package/src/superlocalmemory/cli/post_install.py +99 -0
- package/src/superlocalmemory/cli/setup_wizard.py +129 -0
- package/src/superlocalmemory/compliance/__init__.py +0 -0
- package/src/superlocalmemory/compliance/abac.py +204 -0
- package/src/superlocalmemory/compliance/audit.py +314 -0
- package/src/superlocalmemory/compliance/eu_ai_act.py +131 -0
- package/src/superlocalmemory/compliance/gdpr.py +294 -0
- package/src/superlocalmemory/compliance/lifecycle.py +158 -0
- package/src/superlocalmemory/compliance/retention.py +232 -0
- package/src/superlocalmemory/compliance/scheduler.py +148 -0
- package/src/superlocalmemory/core/__init__.py +0 -0
- package/src/superlocalmemory/core/config.py +391 -0
- package/src/superlocalmemory/core/embeddings.py +293 -0
- package/src/superlocalmemory/core/engine.py +701 -0
- package/src/superlocalmemory/core/hooks.py +65 -0
- package/src/superlocalmemory/core/maintenance.py +172 -0
- package/src/superlocalmemory/core/modes.py +140 -0
- package/src/superlocalmemory/core/profiles.py +234 -0
- package/src/superlocalmemory/core/registry.py +117 -0
- package/src/superlocalmemory/dynamics/__init__.py +0 -0
- package/src/superlocalmemory/dynamics/fisher_langevin_coupling.py +223 -0
- package/src/superlocalmemory/encoding/__init__.py +0 -0
- package/src/superlocalmemory/encoding/consolidator.py +485 -0
- package/src/superlocalmemory/encoding/emotional.py +125 -0
- package/src/superlocalmemory/encoding/entity_resolver.py +525 -0
- package/src/superlocalmemory/encoding/entropy_gate.py +104 -0
- package/src/superlocalmemory/encoding/fact_extractor.py +775 -0
- package/src/superlocalmemory/encoding/foresight.py +91 -0
- package/src/superlocalmemory/encoding/graph_builder.py +302 -0
- package/src/superlocalmemory/encoding/observation_builder.py +160 -0
- package/src/superlocalmemory/encoding/scene_builder.py +183 -0
- package/src/superlocalmemory/encoding/signal_inference.py +90 -0
- package/src/superlocalmemory/encoding/temporal_parser.py +426 -0
- package/src/superlocalmemory/encoding/type_router.py +235 -0
- package/src/superlocalmemory/hooks/__init__.py +3 -0
- package/src/superlocalmemory/hooks/auto_capture.py +111 -0
- package/src/superlocalmemory/hooks/auto_recall.py +93 -0
- package/src/superlocalmemory/hooks/ide_connector.py +204 -0
- package/src/superlocalmemory/hooks/rules_engine.py +99 -0
- package/src/superlocalmemory/infra/__init__.py +3 -0
- package/src/superlocalmemory/infra/auth_middleware.py +82 -0
- package/src/superlocalmemory/infra/backup.py +317 -0
- package/src/superlocalmemory/infra/cache_manager.py +267 -0
- package/src/superlocalmemory/infra/event_bus.py +381 -0
- package/src/superlocalmemory/infra/rate_limiter.py +135 -0
- package/src/{webhook_dispatcher.py → superlocalmemory/infra/webhook_dispatcher.py} +104 -101
- package/src/superlocalmemory/learning/__init__.py +0 -0
- package/src/superlocalmemory/learning/adaptive.py +172 -0
- package/src/superlocalmemory/learning/behavioral.py +490 -0
- package/src/superlocalmemory/learning/behavioral_listener.py +94 -0
- package/src/superlocalmemory/learning/bootstrap.py +298 -0
- package/src/superlocalmemory/learning/cross_project.py +399 -0
- package/src/superlocalmemory/learning/database.py +376 -0
- package/src/superlocalmemory/learning/engagement.py +323 -0
- package/src/superlocalmemory/learning/features.py +138 -0
- package/src/superlocalmemory/learning/feedback.py +316 -0
- package/src/superlocalmemory/learning/outcomes.py +255 -0
- package/src/superlocalmemory/learning/project_context.py +366 -0
- package/src/superlocalmemory/learning/ranker.py +155 -0
- package/src/superlocalmemory/learning/source_quality.py +303 -0
- package/src/superlocalmemory/learning/workflows.py +309 -0
- package/src/superlocalmemory/llm/__init__.py +0 -0
- package/src/superlocalmemory/llm/backbone.py +316 -0
- package/src/superlocalmemory/math/__init__.py +0 -0
- package/src/superlocalmemory/math/fisher.py +356 -0
- package/src/superlocalmemory/math/langevin.py +398 -0
- package/src/superlocalmemory/math/sheaf.py +257 -0
- package/src/superlocalmemory/mcp/__init__.py +0 -0
- package/src/superlocalmemory/mcp/resources.py +245 -0
- package/src/superlocalmemory/mcp/server.py +61 -0
- package/src/superlocalmemory/mcp/tools.py +18 -0
- package/src/superlocalmemory/mcp/tools_core.py +305 -0
- package/src/superlocalmemory/mcp/tools_v28.py +223 -0
- package/src/superlocalmemory/mcp/tools_v3.py +286 -0
- package/src/superlocalmemory/retrieval/__init__.py +0 -0
- package/src/superlocalmemory/retrieval/agentic.py +295 -0
- package/src/superlocalmemory/retrieval/ann_index.py +223 -0
- package/src/superlocalmemory/retrieval/bm25_channel.py +185 -0
- package/src/superlocalmemory/retrieval/bridge_discovery.py +170 -0
- package/src/superlocalmemory/retrieval/engine.py +390 -0
- package/src/superlocalmemory/retrieval/entity_channel.py +179 -0
- package/src/superlocalmemory/retrieval/fusion.py +78 -0
- package/src/superlocalmemory/retrieval/profile_channel.py +105 -0
- package/src/superlocalmemory/retrieval/reranker.py +154 -0
- package/src/superlocalmemory/retrieval/semantic_channel.py +232 -0
- package/src/superlocalmemory/retrieval/strategy.py +96 -0
- package/src/superlocalmemory/retrieval/temporal_channel.py +175 -0
- package/src/superlocalmemory/server/__init__.py +1 -0
- package/src/superlocalmemory/server/api.py +248 -0
- package/src/superlocalmemory/server/routes/__init__.py +4 -0
- package/src/superlocalmemory/server/routes/agents.py +107 -0
- package/src/superlocalmemory/server/routes/backup.py +91 -0
- package/src/superlocalmemory/server/routes/behavioral.py +127 -0
- package/src/superlocalmemory/server/routes/compliance.py +160 -0
- package/src/superlocalmemory/server/routes/data_io.py +188 -0
- package/src/superlocalmemory/server/routes/events.py +183 -0
- package/src/superlocalmemory/server/routes/helpers.py +85 -0
- package/src/superlocalmemory/server/routes/learning.py +273 -0
- package/src/superlocalmemory/server/routes/lifecycle.py +116 -0
- package/src/superlocalmemory/server/routes/memories.py +399 -0
- package/src/superlocalmemory/server/routes/profiles.py +219 -0
- package/src/superlocalmemory/server/routes/stats.py +346 -0
- package/src/superlocalmemory/server/routes/v3_api.py +365 -0
- package/src/superlocalmemory/server/routes/ws.py +82 -0
- package/src/superlocalmemory/server/security_middleware.py +57 -0
- package/src/superlocalmemory/server/ui.py +245 -0
- package/src/superlocalmemory/storage/__init__.py +0 -0
- package/src/superlocalmemory/storage/access_control.py +182 -0
- package/src/superlocalmemory/storage/database.py +594 -0
- package/src/superlocalmemory/storage/migrations.py +303 -0
- package/src/superlocalmemory/storage/models.py +406 -0
- package/src/superlocalmemory/storage/schema.py +726 -0
- package/src/superlocalmemory/storage/v2_migrator.py +317 -0
- package/src/superlocalmemory/trust/__init__.py +0 -0
- package/src/superlocalmemory/trust/gate.py +130 -0
- package/src/superlocalmemory/trust/provenance.py +124 -0
- package/src/superlocalmemory/trust/scorer.py +347 -0
- package/src/superlocalmemory/trust/signals.py +153 -0
- package/ui/index.html +278 -5
- package/ui/js/auto-settings.js +70 -0
- package/ui/js/dashboard.js +90 -0
- package/ui/js/fact-detail.js +92 -0
- package/ui/js/feedback.js +2 -2
- package/ui/js/ide-status.js +102 -0
- package/ui/js/math-health.js +98 -0
- package/ui/js/recall-lab.js +127 -0
- package/ui/js/settings.js +2 -2
- package/ui/js/trust-dashboard.js +73 -0
- package/api_server.py +0 -724
- package/bin/aider-smart +0 -72
- package/bin/superlocalmemoryv2-learning +0 -4
- package/bin/superlocalmemoryv2-list +0 -3
- package/bin/superlocalmemoryv2-patterns +0 -4
- package/bin/superlocalmemoryv2-profile +0 -3
- package/bin/superlocalmemoryv2-recall +0 -3
- package/bin/superlocalmemoryv2-remember +0 -3
- package/bin/superlocalmemoryv2-reset +0 -3
- package/bin/superlocalmemoryv2-status +0 -3
- package/configs/chatgpt-desktop-mcp.json +0 -16
- package/configs/cursor-mcp.json +0 -15
- package/hooks/memory-list-skill.js +0 -139
- package/hooks/memory-profile-skill.js +0 -273
- package/hooks/memory-recall-skill.js +0 -114
- package/hooks/memory-remember-skill.js +0 -127
- package/hooks/memory-reset-skill.js +0 -274
- package/mcp_server.py +0 -1808
- package/requirements-core.txt +0 -22
- package/requirements-learning.txt +0 -12
- package/requirements.txt +0 -12
- package/src/agent_registry.py +0 -411
- package/src/auth_middleware.py +0 -61
- package/src/auto_backup.py +0 -459
- package/src/behavioral/__init__.py +0 -49
- package/src/behavioral/behavioral_listener.py +0 -203
- package/src/behavioral/behavioral_patterns.py +0 -275
- package/src/behavioral/cross_project_transfer.py +0 -206
- package/src/behavioral/outcome_inference.py +0 -194
- package/src/behavioral/outcome_tracker.py +0 -193
- package/src/behavioral/tests/__init__.py +0 -4
- package/src/behavioral/tests/test_behavioral_integration.py +0 -108
- package/src/behavioral/tests/test_behavioral_patterns.py +0 -150
- package/src/behavioral/tests/test_cross_project_transfer.py +0 -142
- package/src/behavioral/tests/test_mcp_behavioral.py +0 -139
- package/src/behavioral/tests/test_mcp_report_outcome.py +0 -117
- package/src/behavioral/tests/test_outcome_inference.py +0 -107
- package/src/behavioral/tests/test_outcome_tracker.py +0 -96
- package/src/cache_manager.py +0 -518
- package/src/compliance/__init__.py +0 -48
- package/src/compliance/abac_engine.py +0 -149
- package/src/compliance/abac_middleware.py +0 -116
- package/src/compliance/audit_db.py +0 -215
- package/src/compliance/audit_logger.py +0 -148
- package/src/compliance/retention_manager.py +0 -289
- package/src/compliance/retention_scheduler.py +0 -186
- package/src/compliance/tests/__init__.py +0 -4
- package/src/compliance/tests/test_abac_enforcement.py +0 -95
- package/src/compliance/tests/test_abac_engine.py +0 -124
- package/src/compliance/tests/test_abac_mcp_integration.py +0 -118
- package/src/compliance/tests/test_audit_db.py +0 -123
- package/src/compliance/tests/test_audit_logger.py +0 -98
- package/src/compliance/tests/test_mcp_audit.py +0 -128
- package/src/compliance/tests/test_mcp_retention_policy.py +0 -125
- package/src/compliance/tests/test_retention_manager.py +0 -131
- package/src/compliance/tests/test_retention_scheduler.py +0 -99
- package/src/compression/__init__.py +0 -25
- package/src/compression/cli.py +0 -150
- package/src/compression/cold_storage.py +0 -217
- package/src/compression/config.py +0 -72
- package/src/compression/orchestrator.py +0 -133
- package/src/compression/tier2_compressor.py +0 -228
- package/src/compression/tier3_compressor.py +0 -153
- package/src/compression/tier_classifier.py +0 -148
- package/src/db_connection_manager.py +0 -536
- package/src/embedding_engine.py +0 -63
- package/src/embeddings/__init__.py +0 -47
- package/src/embeddings/cache.py +0 -70
- package/src/embeddings/cli.py +0 -113
- package/src/embeddings/constants.py +0 -47
- package/src/embeddings/database.py +0 -91
- package/src/embeddings/engine.py +0 -247
- package/src/embeddings/model_loader.py +0 -145
- package/src/event_bus.py +0 -562
- package/src/graph/__init__.py +0 -36
- package/src/graph/build_helpers.py +0 -74
- package/src/graph/cli.py +0 -87
- package/src/graph/cluster_builder.py +0 -188
- package/src/graph/cluster_summary.py +0 -148
- package/src/graph/constants.py +0 -47
- package/src/graph/edge_builder.py +0 -162
- package/src/graph/entity_extractor.py +0 -95
- package/src/graph/graph_core.py +0 -226
- package/src/graph/graph_search.py +0 -231
- package/src/graph/hierarchical.py +0 -207
- package/src/graph/schema.py +0 -99
- package/src/graph_engine.py +0 -52
- package/src/hnsw_index.py +0 -628
- package/src/hybrid_search.py +0 -46
- package/src/learning/__init__.py +0 -217
- package/src/learning/adaptive_ranker.py +0 -682
- package/src/learning/bootstrap/__init__.py +0 -69
- package/src/learning/bootstrap/constants.py +0 -93
- package/src/learning/bootstrap/db_queries.py +0 -316
- package/src/learning/bootstrap/sampling.py +0 -82
- package/src/learning/bootstrap/text_utils.py +0 -71
- package/src/learning/cross_project_aggregator.py +0 -857
- package/src/learning/db/__init__.py +0 -40
- package/src/learning/db/constants.py +0 -44
- package/src/learning/db/schema.py +0 -279
- package/src/learning/engagement_tracker.py +0 -628
- package/src/learning/feature_extractor.py +0 -708
- package/src/learning/feedback_collector.py +0 -806
- package/src/learning/learning_db.py +0 -915
- package/src/learning/project_context_manager.py +0 -572
- package/src/learning/ranking/__init__.py +0 -33
- package/src/learning/ranking/constants.py +0 -84
- package/src/learning/ranking/helpers.py +0 -278
- package/src/learning/source_quality_scorer.py +0 -676
- package/src/learning/synthetic_bootstrap.py +0 -755
- package/src/learning/tests/test_adaptive_ranker.py +0 -325
- package/src/learning/tests/test_adaptive_ranker_v28.py +0 -60
- package/src/learning/tests/test_aggregator.py +0 -306
- package/src/learning/tests/test_auto_retrain_v28.py +0 -35
- package/src/learning/tests/test_e2e_ranking_v28.py +0 -82
- package/src/learning/tests/test_feature_extractor_v28.py +0 -93
- package/src/learning/tests/test_feedback_collector.py +0 -294
- package/src/learning/tests/test_learning_db.py +0 -602
- package/src/learning/tests/test_learning_db_v28.py +0 -110
- package/src/learning/tests/test_learning_init_v28.py +0 -48
- package/src/learning/tests/test_outcome_signals.py +0 -48
- package/src/learning/tests/test_project_context.py +0 -292
- package/src/learning/tests/test_schema_migration.py +0 -319
- package/src/learning/tests/test_signal_inference.py +0 -397
- package/src/learning/tests/test_source_quality.py +0 -351
- package/src/learning/tests/test_synthetic_bootstrap.py +0 -429
- package/src/learning/tests/test_workflow_miner.py +0 -318
- package/src/learning/workflow_pattern_miner.py +0 -655
- package/src/lifecycle/__init__.py +0 -54
- package/src/lifecycle/bounded_growth.py +0 -239
- package/src/lifecycle/compaction_engine.py +0 -226
- package/src/lifecycle/lifecycle_engine.py +0 -355
- package/src/lifecycle/lifecycle_evaluator.py +0 -257
- package/src/lifecycle/lifecycle_scheduler.py +0 -130
- package/src/lifecycle/retention_policy.py +0 -285
- package/src/lifecycle/tests/test_bounded_growth.py +0 -193
- package/src/lifecycle/tests/test_compaction.py +0 -179
- package/src/lifecycle/tests/test_lifecycle_engine.py +0 -137
- package/src/lifecycle/tests/test_lifecycle_evaluation.py +0 -177
- package/src/lifecycle/tests/test_lifecycle_scheduler.py +0 -127
- package/src/lifecycle/tests/test_lifecycle_search.py +0 -109
- package/src/lifecycle/tests/test_mcp_compact.py +0 -149
- package/src/lifecycle/tests/test_mcp_lifecycle_status.py +0 -114
- package/src/lifecycle/tests/test_retention_policy.py +0 -162
- package/src/mcp_tools_v28.py +0 -281
- package/src/memory/__init__.py +0 -36
- package/src/memory/cli.py +0 -205
- package/src/memory/constants.py +0 -39
- package/src/memory/helpers.py +0 -28
- package/src/memory/schema.py +0 -166
- package/src/memory-profiles.py +0 -595
- package/src/memory-reset.py +0 -491
- package/src/memory_compression.py +0 -989
- package/src/memory_store_v2.py +0 -1155
- package/src/migrate_v1_to_v2.py +0 -629
- package/src/pattern_learner.py +0 -34
- package/src/patterns/__init__.py +0 -24
- package/src/patterns/analyzers.py +0 -251
- package/src/patterns/learner.py +0 -271
- package/src/patterns/scoring.py +0 -171
- package/src/patterns/store.py +0 -225
- package/src/patterns/terminology.py +0 -140
- package/src/provenance_tracker.py +0 -312
- package/src/qualixar_attribution.py +0 -139
- package/src/qualixar_watermark.py +0 -78
- package/src/query_optimizer.py +0 -511
- package/src/rate_limiter.py +0 -83
- package/src/search/__init__.py +0 -20
- package/src/search/cli.py +0 -77
- package/src/search/constants.py +0 -26
- package/src/search/engine.py +0 -241
- package/src/search/fusion.py +0 -122
- package/src/search/index_loader.py +0 -114
- package/src/search/methods.py +0 -162
- package/src/search_engine_v2.py +0 -401
- package/src/setup_validator.py +0 -482
- package/src/subscription_manager.py +0 -391
- package/src/tree/__init__.py +0 -59
- package/src/tree/builder.py +0 -185
- package/src/tree/nodes.py +0 -202
- package/src/tree/queries.py +0 -257
- package/src/tree/schema.py +0 -80
- package/src/tree_manager.py +0 -19
- package/src/trust/__init__.py +0 -45
- package/src/trust/constants.py +0 -66
- package/src/trust/queries.py +0 -157
- package/src/trust/schema.py +0 -95
- package/src/trust/scorer.py +0 -299
- package/src/trust/signals.py +0 -95
- package/src/trust_scorer.py +0 -44
- package/ui/app.js +0 -1588
- package/ui/js/graph-cytoscape-monolithic-backup.js +0 -1168
- package/ui/js/graph-cytoscape.js +0 -1168
- package/ui/js/graph-d3-backup.js +0 -32
- package/ui/js/graph.js +0 -32
- package/ui_server.py +0 -286
- /package/docs/{ACCESSIBILITY.md → v2-archive/ACCESSIBILITY.md} +0 -0
- /package/docs/{ARCHITECTURE.md → v2-archive/ARCHITECTURE.md} +0 -0
- /package/docs/{CLI-COMMANDS-REFERENCE.md → v2-archive/CLI-COMMANDS-REFERENCE.md} +0 -0
- /package/docs/{COMPRESSION-README.md → v2-archive/COMPRESSION-README.md} +0 -0
- /package/docs/{FRAMEWORK-INTEGRATIONS.md → v2-archive/FRAMEWORK-INTEGRATIONS.md} +0 -0
- /package/docs/{MCP-MANUAL-SETUP.md → v2-archive/MCP-MANUAL-SETUP.md} +0 -0
- /package/docs/{MCP-TROUBLESHOOTING.md → v2-archive/MCP-TROUBLESHOOTING.md} +0 -0
- /package/docs/{PATTERN-LEARNING.md → v2-archive/PATTERN-LEARNING.md} +0 -0
- /package/docs/{PROFILES-GUIDE.md → v2-archive/PROFILES-GUIDE.md} +0 -0
- /package/docs/{RESET-GUIDE.md → v2-archive/RESET-GUIDE.md} +0 -0
- /package/docs/{SEARCH-ENGINE-V2.2.0.md → v2-archive/SEARCH-ENGINE-V2.2.0.md} +0 -0
- /package/docs/{SEARCH-INTEGRATION-GUIDE.md → v2-archive/SEARCH-INTEGRATION-GUIDE.md} +0 -0
- /package/docs/{UI-SERVER.md → v2-archive/UI-SERVER.md} +0 -0
- /package/docs/{UNIVERSAL-INTEGRATION.md → v2-archive/UNIVERSAL-INTEGRATION.md} +0 -0
- /package/docs/{V2.2.0-OPTIONAL-SEARCH.md → v2-archive/V2.2.0-OPTIONAL-SEARCH.md} +0 -0
- /package/docs/{WINDOWS-INSTALL-README.txt → v2-archive/WINDOWS-INSTALL-README.txt} +0 -0
- /package/docs/{WINDOWS-POST-INSTALL.txt → v2-archive/WINDOWS-POST-INSTALL.txt} +0 -0
- /package/docs/{example_graph_usage.py → v2-archive/example_graph_usage.py} +0 -0
- /package/{completions → ide/completions}/slm.bash +0 -0
- /package/{completions → ide/completions}/slm.zsh +0 -0
- /package/{configs → ide/configs}/cody-commands.json +0 -0
- /package/{install-skills.sh → scripts/install-skills.sh} +0 -0
- /package/{install.ps1 → scripts/install.ps1} +0 -0
- /package/{install.sh → scripts/install.sh} +0 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Copyright (c) 2026 Varun Pratap Bhardwaj / Qualixar
|
|
2
|
+
# Licensed under the MIT License - see LICENSE file
|
|
3
|
+
# Part of SuperLocalMemory V3 | https://qualixar.com | https://varunpratap.com
|
|
4
|
+
|
|
5
|
+
"""Agent registry — multi-agent profile isolation.
|
|
6
|
+
|
|
7
|
+
Tracks which agents are using which profiles and prevents
|
|
8
|
+
two agents from writing to the same profile simultaneously
|
|
9
|
+
via an advisory lock mechanism. Persisted as JSON for
|
|
10
|
+
survival across process restarts.
|
|
11
|
+
|
|
12
|
+
Part of Qualixar | Author: Varun Pratap Bhardwaj
|
|
13
|
+
License: MIT
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
import json
|
|
19
|
+
import logging
|
|
20
|
+
import time
|
|
21
|
+
from pathlib import Path
|
|
22
|
+
from typing import Any
|
|
23
|
+
|
|
24
|
+
logger = logging.getLogger(__name__)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class ProfileLockError(Exception):
|
|
28
|
+
"""Raised when an agent tries to write-lock an already-locked profile."""
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class AgentRegistry:
|
|
32
|
+
"""In-memory agent registry with JSON file persistence.
|
|
33
|
+
|
|
34
|
+
Each agent registers with an ID and a target profile.
|
|
35
|
+
Advisory write locks prevent two agents from mutating
|
|
36
|
+
the same profile at the same time.
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
def __init__(self, persist_path: Path | None = None) -> None:
|
|
40
|
+
self._agents: dict[str, dict[str, Any]] = {}
|
|
41
|
+
self._write_locks: dict[str, str] = {} # profile_id -> agent_id
|
|
42
|
+
self._path = persist_path
|
|
43
|
+
if self._path and self._path.exists():
|
|
44
|
+
self._load()
|
|
45
|
+
|
|
46
|
+
# -- Public API ---------------------------------------------------------
|
|
47
|
+
|
|
48
|
+
def register_agent(self, agent_id: str, profile_id: str) -> None:
|
|
49
|
+
"""Register an agent for a profile. Acquires advisory write lock."""
|
|
50
|
+
if agent_id in self._agents:
|
|
51
|
+
self.unregister_agent(agent_id)
|
|
52
|
+
|
|
53
|
+
holder = self._write_locks.get(profile_id)
|
|
54
|
+
if holder and holder != agent_id:
|
|
55
|
+
raise ProfileLockError(
|
|
56
|
+
f"Profile '{profile_id}' is locked by agent '{holder}'."
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
self._agents[agent_id] = {
|
|
60
|
+
"profile_id": profile_id,
|
|
61
|
+
"registered_at": time.time(),
|
|
62
|
+
}
|
|
63
|
+
self._write_locks[profile_id] = agent_id
|
|
64
|
+
self._save()
|
|
65
|
+
logger.info("Agent '%s' registered for profile '%s'", agent_id, profile_id)
|
|
66
|
+
|
|
67
|
+
def unregister_agent(self, agent_id: str) -> None:
|
|
68
|
+
"""Remove an agent and release its write lock."""
|
|
69
|
+
entry = self._agents.pop(agent_id, None)
|
|
70
|
+
if entry:
|
|
71
|
+
profile_id = entry["profile_id"]
|
|
72
|
+
if self._write_locks.get(profile_id) == agent_id:
|
|
73
|
+
del self._write_locks[profile_id]
|
|
74
|
+
self._save()
|
|
75
|
+
logger.info("Agent '%s' unregistered", agent_id)
|
|
76
|
+
|
|
77
|
+
def get_agent_profile(self, agent_id: str) -> str:
|
|
78
|
+
"""Return the profile ID for a registered agent.
|
|
79
|
+
|
|
80
|
+
Raises KeyError if the agent is not registered.
|
|
81
|
+
"""
|
|
82
|
+
entry = self._agents.get(agent_id)
|
|
83
|
+
if entry is None:
|
|
84
|
+
raise KeyError(f"Agent '{agent_id}' is not registered.")
|
|
85
|
+
return entry["profile_id"]
|
|
86
|
+
|
|
87
|
+
def list_agents(self) -> list[dict[str, Any]]:
|
|
88
|
+
"""Return a snapshot of all registered agents."""
|
|
89
|
+
return [
|
|
90
|
+
{
|
|
91
|
+
"agent_id": aid,
|
|
92
|
+
"profile_id": info["profile_id"],
|
|
93
|
+
"registered_at": info["registered_at"],
|
|
94
|
+
}
|
|
95
|
+
for aid, info in self._agents.items()
|
|
96
|
+
]
|
|
97
|
+
|
|
98
|
+
# -- Persistence --------------------------------------------------------
|
|
99
|
+
|
|
100
|
+
def _save(self) -> None:
|
|
101
|
+
if not self._path:
|
|
102
|
+
return
|
|
103
|
+
self._path.parent.mkdir(parents=True, exist_ok=True)
|
|
104
|
+
data = {"agents": self._agents, "write_locks": self._write_locks}
|
|
105
|
+
self._path.write_text(json.dumps(data, indent=2), encoding="utf-8")
|
|
106
|
+
|
|
107
|
+
def _load(self) -> None:
|
|
108
|
+
if not self._path or not self._path.exists():
|
|
109
|
+
return
|
|
110
|
+
try:
|
|
111
|
+
data = json.loads(self._path.read_text(encoding="utf-8"))
|
|
112
|
+
self._agents = data.get("agents", {})
|
|
113
|
+
self._write_locks = data.get("write_locks", {})
|
|
114
|
+
except (json.JSONDecodeError, KeyError):
|
|
115
|
+
logger.warning("Corrupt registry file at %s — starting fresh.", self._path)
|
|
116
|
+
self._agents = {}
|
|
117
|
+
self._write_locks = {}
|
|
File without changes
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
# Copyright (c) 2026 Varun Pratap Bhardwaj / Qualixar
|
|
2
|
+
# Licensed under the MIT License - see LICENSE file
|
|
3
|
+
# Part of SuperLocalMemory V3 | https://qualixar.com | https://varunpratap.com
|
|
4
|
+
|
|
5
|
+
"""Fisher-Langevin Coupling: information-dynamic lifecycle for memory.
|
|
6
|
+
|
|
7
|
+
THE CORE INVENTION — Paper Headline 2 (STRONGEST NOVELTY):
|
|
8
|
+
Fisher information confidence directly drives Langevin dynamics,
|
|
9
|
+
creating self-organizing memory where:
|
|
10
|
+
|
|
11
|
+
- High Fisher confidence (low variance) -> memory stabilizes
|
|
12
|
+
(Langevin drift toward origin -> ACTIVE state)
|
|
13
|
+
- Low Fisher confidence (high variance) -> memory fades
|
|
14
|
+
(Langevin drift toward boundary -> ARCHIVED state)
|
|
15
|
+
- Evidence accumulation -> Fisher variance decreases -> consolidation
|
|
16
|
+
|
|
17
|
+
Mathematical formulation:
|
|
18
|
+
Coupled SDE with information-modulated temperature:
|
|
19
|
+
T_eff = T_0 / (fisher_confidence + epsilon)
|
|
20
|
+
|
|
21
|
+
High confidence -> low T_eff -> less noise -> position stabilizes.
|
|
22
|
+
Low confidence -> high T_eff -> more noise -> position drifts to boundary.
|
|
23
|
+
|
|
24
|
+
This produces a provable Fokker-Planck steady-state distribution where
|
|
25
|
+
the memory system self-organizes without external scheduling.
|
|
26
|
+
|
|
27
|
+
Adapted: uses Langevin position radius for lifecycle zone classification.
|
|
28
|
+
|
|
29
|
+
Part of Qualixar | Author: Varun Pratap Bhardwaj
|
|
30
|
+
License: MIT
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
from __future__ import annotations
|
|
34
|
+
|
|
35
|
+
import logging
|
|
36
|
+
import math
|
|
37
|
+
from dataclasses import dataclass, field
|
|
38
|
+
from typing import Any
|
|
39
|
+
|
|
40
|
+
import numpy as np
|
|
41
|
+
|
|
42
|
+
logger = logging.getLogger(__name__)
|
|
43
|
+
|
|
44
|
+
# Default coupling parameters
|
|
45
|
+
DEFAULT_CONFIDENCE_SCALE = 1.0
|
|
46
|
+
DEFAULT_BASE_TEMPERATURE = 0.3 # Matches Langevin MathConfig default
|
|
47
|
+
DEFAULT_EPSILON = 0.1
|
|
48
|
+
DEFAULT_CONSOLIDATION_THRESHOLD = 0.8
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
@dataclass
|
|
52
|
+
class CouplingState:
|
|
53
|
+
"""State of the Fisher-Langevin coupling for a single memory.
|
|
54
|
+
|
|
55
|
+
Attributes:
|
|
56
|
+
fact_id: Fact identifier.
|
|
57
|
+
fisher_confidence: Current Fisher confidence [0, 1].
|
|
58
|
+
langevin_temperature: Derived effective temperature.
|
|
59
|
+
drift_direction: "stabilize" | "neutral" | "fade".
|
|
60
|
+
lifecycle_weight: Score multiplier from coupling [0.3, 1.0].
|
|
61
|
+
consolidation_signal: Whether to consolidate this memory.
|
|
62
|
+
"""
|
|
63
|
+
|
|
64
|
+
fact_id: str = ""
|
|
65
|
+
fisher_confidence: float = 0.5
|
|
66
|
+
langevin_temperature: float = 0.3
|
|
67
|
+
drift_direction: str = "neutral"
|
|
68
|
+
lifecycle_weight: float = 1.0
|
|
69
|
+
consolidation_signal: bool = False
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class FisherLangevinCoupling:
|
|
73
|
+
"""Couples Fisher information to Langevin dynamics for self-organizing memory.
|
|
74
|
+
|
|
75
|
+
The coupling creates a feedback loop:
|
|
76
|
+
1. Fisher confidence measures how CERTAIN a memory's embedding is.
|
|
77
|
+
2. Confidence drives Langevin TEMPERATURE (high conf -> low noise).
|
|
78
|
+
3. Low noise -> memory position stabilizes near origin (ACTIVE).
|
|
79
|
+
4. High noise -> memory drifts toward boundary (ARCHIVED).
|
|
80
|
+
5. Evidence accumulation -> Fisher variance decreases -> confidence rises.
|
|
81
|
+
|
|
82
|
+
This is a provable self-organizing system with Fokker-Planck steady state.
|
|
83
|
+
"""
|
|
84
|
+
|
|
85
|
+
def __init__(
|
|
86
|
+
self,
|
|
87
|
+
confidence_scale: float = DEFAULT_CONFIDENCE_SCALE,
|
|
88
|
+
base_temperature: float = DEFAULT_BASE_TEMPERATURE,
|
|
89
|
+
epsilon: float = DEFAULT_EPSILON,
|
|
90
|
+
consolidation_threshold: float = DEFAULT_CONSOLIDATION_THRESHOLD,
|
|
91
|
+
) -> None:
|
|
92
|
+
self._scale = confidence_scale
|
|
93
|
+
self._base_temp = base_temperature
|
|
94
|
+
self._epsilon = epsilon
|
|
95
|
+
self._consolidation_threshold = consolidation_threshold
|
|
96
|
+
|
|
97
|
+
def compute_coupling(
|
|
98
|
+
self,
|
|
99
|
+
fisher_variance: np.ndarray | list[float],
|
|
100
|
+
langevin_radius: float,
|
|
101
|
+
access_count: int = 0,
|
|
102
|
+
) -> CouplingState:
|
|
103
|
+
"""Compute the coupled state for a single memory.
|
|
104
|
+
|
|
105
|
+
Args:
|
|
106
|
+
fisher_variance: Fisher variance vector (diagonal).
|
|
107
|
+
langevin_radius: Current Langevin position radius [0, 1).
|
|
108
|
+
access_count: Number of times memory has been accessed.
|
|
109
|
+
|
|
110
|
+
Returns:
|
|
111
|
+
CouplingState with derived temperature, direction, and weight.
|
|
112
|
+
"""
|
|
113
|
+
var_arr = np.asarray(fisher_variance, dtype=np.float64)
|
|
114
|
+
|
|
115
|
+
# Step 1: Fisher confidence from variance
|
|
116
|
+
# Low variance = high confidence (memory is well-characterized)
|
|
117
|
+
avg_var = float(np.mean(np.clip(var_arr, 1e-8, None)))
|
|
118
|
+
fisher_conf = 1.0 / (1.0 + avg_var)
|
|
119
|
+
|
|
120
|
+
# Evidence reinforcement from repeated access
|
|
121
|
+
evidence_boost = min(access_count * 0.02, 0.2)
|
|
122
|
+
fisher_conf = min(1.0, fisher_conf + evidence_boost)
|
|
123
|
+
|
|
124
|
+
# Step 2: Derive Langevin effective temperature
|
|
125
|
+
# T_eff = T_0 / (confidence + epsilon)
|
|
126
|
+
# High confidence -> low temperature -> less noise -> stabilizes
|
|
127
|
+
temperature = self._base_temp / (fisher_conf + self._epsilon)
|
|
128
|
+
|
|
129
|
+
# Step 3: Determine drift direction and lifecycle weight
|
|
130
|
+
if fisher_conf >= self._consolidation_threshold:
|
|
131
|
+
direction = "stabilize"
|
|
132
|
+
weight = 0.9 + 0.1 * fisher_conf
|
|
133
|
+
elif fisher_conf >= 0.5:
|
|
134
|
+
direction = "neutral"
|
|
135
|
+
weight = 0.7 + 0.3 * fisher_conf
|
|
136
|
+
elif fisher_conf >= 0.3:
|
|
137
|
+
direction = "fade"
|
|
138
|
+
weight = 0.4 + 0.6 * fisher_conf
|
|
139
|
+
else:
|
|
140
|
+
direction = "fade"
|
|
141
|
+
weight = max(0.3, fisher_conf)
|
|
142
|
+
|
|
143
|
+
# Step 4: Langevin radius modulates (near-boundary penalty)
|
|
144
|
+
if langevin_radius > 0.85:
|
|
145
|
+
weight *= 0.8
|
|
146
|
+
|
|
147
|
+
return CouplingState(
|
|
148
|
+
fisher_confidence=fisher_conf,
|
|
149
|
+
langevin_temperature=temperature,
|
|
150
|
+
drift_direction=direction,
|
|
151
|
+
lifecycle_weight=weight,
|
|
152
|
+
consolidation_signal=fisher_conf >= self._consolidation_threshold,
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
def apply_to_facts(
|
|
156
|
+
self,
|
|
157
|
+
facts: list[dict[str, Any]],
|
|
158
|
+
) -> list[CouplingState]:
|
|
159
|
+
"""Apply Fisher-Langevin coupling to a list of fact dicts.
|
|
160
|
+
|
|
161
|
+
Each dict must have: fact_id, fisher_variance (or None),
|
|
162
|
+
langevin_position (or None), access_count.
|
|
163
|
+
|
|
164
|
+
Returns:
|
|
165
|
+
List of CouplingState for each fact.
|
|
166
|
+
"""
|
|
167
|
+
states: list[CouplingState] = []
|
|
168
|
+
|
|
169
|
+
for fact in facts:
|
|
170
|
+
fid = fact.get("fact_id", "")
|
|
171
|
+
f_var = fact.get("fisher_variance")
|
|
172
|
+
l_pos = fact.get("langevin_position")
|
|
173
|
+
access = fact.get("access_count", 0)
|
|
174
|
+
|
|
175
|
+
if f_var is None:
|
|
176
|
+
# No Fisher data — use default coupling
|
|
177
|
+
states.append(CouplingState(fact_id=fid))
|
|
178
|
+
continue
|
|
179
|
+
|
|
180
|
+
# Compute Langevin radius from position vector
|
|
181
|
+
radius = 0.5
|
|
182
|
+
if l_pos is not None:
|
|
183
|
+
pos = np.asarray(l_pos, dtype=np.float64)
|
|
184
|
+
radius = float(np.linalg.norm(pos))
|
|
185
|
+
|
|
186
|
+
state = self.compute_coupling(f_var, radius, access)
|
|
187
|
+
state.fact_id = fid
|
|
188
|
+
states.append(state)
|
|
189
|
+
|
|
190
|
+
return states
|
|
191
|
+
|
|
192
|
+
def get_effective_temperature(
|
|
193
|
+
self,
|
|
194
|
+
fisher_variance: np.ndarray | list[float] | None,
|
|
195
|
+
access_count: int = 0,
|
|
196
|
+
) -> float:
|
|
197
|
+
"""Quick helper: get effective Langevin temperature from Fisher variance.
|
|
198
|
+
|
|
199
|
+
Used by maintenance.py when running Langevin batch_step with
|
|
200
|
+
Fisher-coupled temperature.
|
|
201
|
+
"""
|
|
202
|
+
if fisher_variance is None:
|
|
203
|
+
return self._base_temp
|
|
204
|
+
|
|
205
|
+
var_arr = np.asarray(fisher_variance, dtype=np.float64)
|
|
206
|
+
avg_var = float(np.mean(np.clip(var_arr, 1e-8, None)))
|
|
207
|
+
fisher_conf = min(1.0, 1.0 / (1.0 + avg_var) + min(access_count * 0.02, 0.2))
|
|
208
|
+
return self._base_temp / (fisher_conf + self._epsilon)
|
|
209
|
+
|
|
210
|
+
def get_consolidation_candidates(
|
|
211
|
+
self, states: list[CouplingState],
|
|
212
|
+
) -> list[str]:
|
|
213
|
+
"""Return fact IDs that should be consolidated (high confidence)."""
|
|
214
|
+
return [s.fact_id for s in states if s.consolidation_signal]
|
|
215
|
+
|
|
216
|
+
def get_decay_candidates(
|
|
217
|
+
self, states: list[CouplingState],
|
|
218
|
+
) -> list[str]:
|
|
219
|
+
"""Return fact IDs that are fading (low confidence + drifting)."""
|
|
220
|
+
return [
|
|
221
|
+
s.fact_id for s in states
|
|
222
|
+
if s.drift_direction == "fade" and s.fisher_confidence < 0.3
|
|
223
|
+
]
|
|
File without changes
|