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
package/bin/aider-smart
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# aider-smart - Aider with SuperLocalMemory context injection
|
|
3
|
-
#
|
|
4
|
-
# Copyright (c) 2026 Varun Pratap Bhardwaj
|
|
5
|
-
# Licensed under MIT License
|
|
6
|
-
#
|
|
7
|
-
# Automatically injects relevant project context from SuperLocalMemory
|
|
8
|
-
# when launching Aider CLI for AI-assisted coding.
|
|
9
|
-
|
|
10
|
-
set -e
|
|
11
|
-
|
|
12
|
-
SLM_DIR="${HOME}/.claude-memory"
|
|
13
|
-
|
|
14
|
-
# Check if Aider is installed
|
|
15
|
-
if ! command -v aider &> /dev/null; then
|
|
16
|
-
echo "Error: Aider not found. Install: pip install aider-chat"
|
|
17
|
-
exit 1
|
|
18
|
-
fi
|
|
19
|
-
|
|
20
|
-
# Check if SuperLocalMemory is installed
|
|
21
|
-
if [ ! -d "$SLM_DIR" ]; then
|
|
22
|
-
echo "Error: SuperLocalMemory V2 not installed"
|
|
23
|
-
echo "Install from: https://github.com/varun369/SuperLocalMemoryV2"
|
|
24
|
-
exit 1
|
|
25
|
-
fi
|
|
26
|
-
|
|
27
|
-
# Generate context from current project
|
|
28
|
-
project=$(basename "$PWD")
|
|
29
|
-
CONTEXT_FILE="/tmp/slm-aider-context-$$.txt"
|
|
30
|
-
|
|
31
|
-
echo "🧠 Gathering project context from SuperLocalMemory..."
|
|
32
|
-
echo ""
|
|
33
|
-
|
|
34
|
-
# Get recent project memories
|
|
35
|
-
if command -v slm &> /dev/null; then
|
|
36
|
-
# Use slm command if available
|
|
37
|
-
slm context > "$CONTEXT_FILE" 2>/dev/null || {
|
|
38
|
-
"$SLM_DIR/bin/superlocalmemoryv2-recall" "$project" --limit 5 > "$CONTEXT_FILE" 2>/dev/null || true
|
|
39
|
-
}
|
|
40
|
-
else
|
|
41
|
-
# Fallback to direct command
|
|
42
|
-
"$SLM_DIR/bin/superlocalmemoryv2-recall" "$project" --limit 5 > "$CONTEXT_FILE" 2>/dev/null || true
|
|
43
|
-
fi
|
|
44
|
-
|
|
45
|
-
# Get coding patterns if available
|
|
46
|
-
if [ -f "$SLM_DIR/pattern_learner.py" ]; then
|
|
47
|
-
echo "" >> "$CONTEXT_FILE"
|
|
48
|
-
echo "## Your Coding Patterns:" >> "$CONTEXT_FILE"
|
|
49
|
-
python3 "$SLM_DIR/pattern_learner.py" context 0.6 >> "$CONTEXT_FILE" 2>/dev/null || true
|
|
50
|
-
fi
|
|
51
|
-
|
|
52
|
-
# Launch Aider with context
|
|
53
|
-
if [ -s "$CONTEXT_FILE" ] && [ "$(wc -l < "$CONTEXT_FILE")" -gt 1 ]; then
|
|
54
|
-
echo "✓ Context loaded from SuperLocalMemory"
|
|
55
|
-
echo ""
|
|
56
|
-
|
|
57
|
-
# Pass context to Aider
|
|
58
|
-
aider \
|
|
59
|
-
--read "$CONTEXT_FILE" \
|
|
60
|
-
--message "Context from SuperLocalMemory V2 loaded. I have access to your project's memory and coding patterns." \
|
|
61
|
-
"$@"
|
|
62
|
-
else
|
|
63
|
-
echo "⚠ No context found for project: $project"
|
|
64
|
-
echo " Use: slm remember \"project info\" to save context"
|
|
65
|
-
echo ""
|
|
66
|
-
|
|
67
|
-
# Launch Aider without context
|
|
68
|
-
aider "$@"
|
|
69
|
-
fi
|
|
70
|
-
|
|
71
|
-
# Cleanup
|
|
72
|
-
rm -f "$CONTEXT_FILE"
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"_README": "ChatGPT Integration — SuperLocalMemory V2 as ChatGPT Connector",
|
|
3
|
-
"_requires": "ChatGPT Pro/Plus/Business/Enterprise with Developer Mode enabled",
|
|
4
|
-
"_tools": "search(query) and fetch(id) — required by OpenAI MCP spec for Connectors",
|
|
5
|
-
"_setup": {
|
|
6
|
-
"step1": "Start MCP server: slm serve --port 8417",
|
|
7
|
-
"step2": "Expose via tunnel: ngrok http 8417",
|
|
8
|
-
"step3": "Copy the HTTPS URL from ngrok (e.g. https://abc123.ngrok.app)",
|
|
9
|
-
"step4": "In ChatGPT: Settings → Connectors → Advanced → Enable Developer Mode",
|
|
10
|
-
"step5": "Create new Connector → paste URL with /sse/ suffix (e.g. https://abc123.ngrok.app/sse/)",
|
|
11
|
-
"step6": "Name it 'SuperLocalMemory' and click Create",
|
|
12
|
-
"step7": "In any chat, click + → More → select SuperLocalMemory connector"
|
|
13
|
-
},
|
|
14
|
-
"_alternative_transport": "For Streamable HTTP (recommended): slm serve --transport streamable-http --port 8417",
|
|
15
|
-
"_note": "100% local — your MCP server runs on YOUR machine. The tunnel just makes it reachable by ChatGPT servers. All data stays in ~/.claude-memory/memory.db"
|
|
16
|
-
}
|
package/configs/cursor-mcp.json
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"mcpServers": {
|
|
3
|
-
"superlocalmemory-v2": {
|
|
4
|
-
"command": "python3",
|
|
5
|
-
"args": [
|
|
6
|
-
"{{INSTALL_DIR}}/mcp_server.py"
|
|
7
|
-
],
|
|
8
|
-
"cwd": "{{INSTALL_DIR}}",
|
|
9
|
-
"env": {
|
|
10
|
-
"PYTHONPATH": "{{INSTALL_DIR}}"
|
|
11
|
-
},
|
|
12
|
-
"description": "SuperLocalMemory V2 - Local memory system with knowledge graphs and pattern learning"
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
}
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Memory List CLI Skill
|
|
4
|
-
* List recent memories with sorting and filtering
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
const { execFile } = require('child_process');
|
|
8
|
-
const { promisify } = require('util');
|
|
9
|
-
const path = require('path');
|
|
10
|
-
|
|
11
|
-
const execFileAsync = promisify(execFile);
|
|
12
|
-
|
|
13
|
-
async function memoryListSkill() {
|
|
14
|
-
const memoryScript = path.join(process.env.HOME, '.claude-memory', 'memory_store_v2.py');
|
|
15
|
-
const args = process.argv.slice(2);
|
|
16
|
-
|
|
17
|
-
// Show help if --help
|
|
18
|
-
if (args.includes('--help') || args.includes('-h')) {
|
|
19
|
-
console.log(`
|
|
20
|
-
╔══════════════════════════════════════════════════════════╗
|
|
21
|
-
║ ║
|
|
22
|
-
║ SuperLocalMemory V2 - List Recent Memories ║
|
|
23
|
-
║ ║
|
|
24
|
-
╚══════════════════════════════════════════════════════════╝
|
|
25
|
-
|
|
26
|
-
Display recent memories with optional sorting and limits.
|
|
27
|
-
Quick overview of what's stored in your memory database.
|
|
28
|
-
|
|
29
|
-
Usage: memory-list [options]
|
|
30
|
-
|
|
31
|
-
Options:
|
|
32
|
-
--limit <n> Number of memories to show (default: 20)
|
|
33
|
-
--sort <field> Sort by: recent, accessed, importance
|
|
34
|
-
• recent: Latest created first (default)
|
|
35
|
-
• accessed: Most recently accessed
|
|
36
|
-
• importance: Highest importance first
|
|
37
|
-
--full Show complete content without truncation
|
|
38
|
-
|
|
39
|
-
Examples:
|
|
40
|
-
memory-list
|
|
41
|
-
|
|
42
|
-
memory-list --limit 50
|
|
43
|
-
|
|
44
|
-
memory-list --sort importance
|
|
45
|
-
|
|
46
|
-
memory-list --limit 10 --sort accessed --full
|
|
47
|
-
|
|
48
|
-
Output Format:
|
|
49
|
-
• ID, Content (smart truncated), Tags, Importance
|
|
50
|
-
• Creation timestamp
|
|
51
|
-
• Access count and last accessed time
|
|
52
|
-
|
|
53
|
-
Notes:
|
|
54
|
-
• Default shows last 20 memories
|
|
55
|
-
• Smart truncation: full content if <5000 chars, preview if ≥5000 chars
|
|
56
|
-
• Use --full flag to always show complete content
|
|
57
|
-
• Sort by 'accessed' to find frequently used memories
|
|
58
|
-
`);
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// Parse options
|
|
63
|
-
let limit = 20;
|
|
64
|
-
let sortBy = 'recent';
|
|
65
|
-
let showFull = false;
|
|
66
|
-
|
|
67
|
-
for (let i = 0; i < args.length; i++) {
|
|
68
|
-
const arg = args[i];
|
|
69
|
-
|
|
70
|
-
if (arg === '--limit' && i + 1 < args.length) {
|
|
71
|
-
const parsedLimit = parseInt(args[i + 1]);
|
|
72
|
-
if (parsedLimit > 0 && parsedLimit <= 1000) {
|
|
73
|
-
limit = parsedLimit;
|
|
74
|
-
} else {
|
|
75
|
-
console.error('❌ ERROR: Limit must be between 1-1000');
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
i++;
|
|
79
|
-
} else if (arg === '--sort' && i + 1 < args.length) {
|
|
80
|
-
const validSorts = ['recent', 'accessed', 'importance'];
|
|
81
|
-
if (validSorts.includes(args[i + 1])) {
|
|
82
|
-
sortBy = args[i + 1];
|
|
83
|
-
} else {
|
|
84
|
-
console.error(`❌ ERROR: Sort must be one of: ${validSorts.join(', ')}`);
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
i++;
|
|
88
|
-
} else if (arg === '--full') {
|
|
89
|
-
showFull = true;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// Build Python command based on sort type
|
|
94
|
-
// Note: V1 store only supports 'recent' and 'list' commands without sort flags
|
|
95
|
-
let pythonArgs = [];
|
|
96
|
-
|
|
97
|
-
if (sortBy === 'recent' || sortBy === 'accessed') {
|
|
98
|
-
pythonArgs = ['recent', limit.toString()];
|
|
99
|
-
} else {
|
|
100
|
-
// Default to list for importance or other sorts
|
|
101
|
-
pythonArgs = ['list', limit.toString()];
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// Add --full flag if requested
|
|
105
|
-
if (showFull) {
|
|
106
|
-
pythonArgs.push('--full');
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
try {
|
|
110
|
-
const { stdout, stderr } = await execFileAsync('python3', [memoryScript, ...pythonArgs]);
|
|
111
|
-
|
|
112
|
-
if (stderr) {
|
|
113
|
-
console.error('⚠️ Warning:', stderr);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
console.log(`
|
|
117
|
-
╔══════════════════════════════════════════════════════════╗
|
|
118
|
-
║ Recent Memories (${sortBy} | limit: ${limit})
|
|
119
|
-
╚══════════════════════════════════════════════════════════╝
|
|
120
|
-
`);
|
|
121
|
-
|
|
122
|
-
console.log(stdout);
|
|
123
|
-
|
|
124
|
-
// Show helpful next steps
|
|
125
|
-
console.log(`
|
|
126
|
-
Next steps:
|
|
127
|
-
• Use \`memory-recall <query>\` to search memories
|
|
128
|
-
• Use \`memory-remember <content>\` to add new memories
|
|
129
|
-
• Use \`memory-list --sort <field>\` to change sort order
|
|
130
|
-
`);
|
|
131
|
-
|
|
132
|
-
} catch (error) {
|
|
133
|
-
console.error('❌ Error listing memories:', error.message);
|
|
134
|
-
if (error.stdout) console.log(error.stdout);
|
|
135
|
-
if (error.stderr) console.error(error.stderr);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
memoryListSkill();
|
|
@@ -1,273 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Memory Profile CLI Skill
|
|
4
|
-
* Provides memory-profile commands for managing multiple memory contexts
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
const { execFile } = require('child_process');
|
|
8
|
-
const { promisify } = require('util');
|
|
9
|
-
const path = require('path');
|
|
10
|
-
const readline = require('readline');
|
|
11
|
-
|
|
12
|
-
const execFileAsync = promisify(execFile);
|
|
13
|
-
|
|
14
|
-
const rl = readline.createInterface({
|
|
15
|
-
input: process.stdin,
|
|
16
|
-
output: process.stdout
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
const question = (query) => new Promise((resolve) => rl.question(query, resolve));
|
|
20
|
-
|
|
21
|
-
async function memoryProfileSkill() {
|
|
22
|
-
const profileScript = path.join(process.env.HOME, '.claude-memory', 'memory-profiles.py');
|
|
23
|
-
const args = process.argv.slice(2); // Get command line arguments
|
|
24
|
-
|
|
25
|
-
// Show help if no args
|
|
26
|
-
if (args.length === 0 || args[0] === '--help' || args[0] === '-h') {
|
|
27
|
-
console.log(`
|
|
28
|
-
╔══════════════════════════════════════════════════════════╗
|
|
29
|
-
║ ║
|
|
30
|
-
║ SuperLocalMemory V2 - Profile Management ║
|
|
31
|
-
║ ║
|
|
32
|
-
╚══════════════════════════════════════════════════════════╝
|
|
33
|
-
|
|
34
|
-
Profiles let you maintain separate memory contexts in ONE database:
|
|
35
|
-
• Work vs Personal projects
|
|
36
|
-
• Different clients or teams
|
|
37
|
-
• Experimentation vs Production
|
|
38
|
-
|
|
39
|
-
All profiles share one database. Switching is instant and safe.
|
|
40
|
-
No data copying, no data loss risk.
|
|
41
|
-
|
|
42
|
-
Usage: memory-profile <command> [options]
|
|
43
|
-
|
|
44
|
-
Commands:
|
|
45
|
-
list List all profiles and show active one
|
|
46
|
-
current Show current active profile
|
|
47
|
-
create <name> Create a new empty profile
|
|
48
|
-
switch <name> Switch to a different profile (requires restart)
|
|
49
|
-
delete <name> Delete a profile (with confirmation)
|
|
50
|
-
|
|
51
|
-
Examples:
|
|
52
|
-
memory-profile list
|
|
53
|
-
memory-profile current
|
|
54
|
-
memory-profile create work
|
|
55
|
-
memory-profile switch work
|
|
56
|
-
memory-profile delete old-project
|
|
57
|
-
|
|
58
|
-
Notes:
|
|
59
|
-
• Default profile is always available
|
|
60
|
-
• Switching profiles requires restarting Claude CLI
|
|
61
|
-
• Deleting a profile is permanent (but creates backup)
|
|
62
|
-
`);
|
|
63
|
-
rl.close();
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
const command = args[0];
|
|
68
|
-
|
|
69
|
-
// LIST command
|
|
70
|
-
if (command === 'list') {
|
|
71
|
-
try {
|
|
72
|
-
const { stdout } = await execFileAsync('python', [profileScript, 'list']);
|
|
73
|
-
console.log(stdout);
|
|
74
|
-
} catch (error) {
|
|
75
|
-
console.error('❌ Error:', error.message);
|
|
76
|
-
}
|
|
77
|
-
rl.close();
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// CURRENT command
|
|
82
|
-
if (command === 'current') {
|
|
83
|
-
try {
|
|
84
|
-
const { stdout } = await execFileAsync('python', [profileScript, 'current']);
|
|
85
|
-
console.log(stdout);
|
|
86
|
-
} catch (error) {
|
|
87
|
-
console.error('❌ Error:', error.message);
|
|
88
|
-
}
|
|
89
|
-
rl.close();
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// CREATE command
|
|
94
|
-
if (command === 'create') {
|
|
95
|
-
if (args.length < 2) {
|
|
96
|
-
console.log(`
|
|
97
|
-
❌ ERROR: Profile name required
|
|
98
|
-
|
|
99
|
-
Usage: memory-profile create <name> [options]
|
|
100
|
-
|
|
101
|
-
Options:
|
|
102
|
-
--description "text" Profile description
|
|
103
|
-
--from-current Copy current profile's data to new profile
|
|
104
|
-
|
|
105
|
-
Examples:
|
|
106
|
-
memory-profile create work
|
|
107
|
-
memory-profile create work --description "Work projects"
|
|
108
|
-
memory-profile create personal --from-current
|
|
109
|
-
`);
|
|
110
|
-
rl.close();
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
const profileName = args[1];
|
|
115
|
-
const pythonArgs = ['create', profileName];
|
|
116
|
-
|
|
117
|
-
// Check for --description flag
|
|
118
|
-
const descIndex = args.indexOf('--description');
|
|
119
|
-
if (descIndex !== -1 && descIndex + 1 < args.length) {
|
|
120
|
-
pythonArgs.push('--description', args[descIndex + 1]);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
// Check for --from-current flag
|
|
124
|
-
if (args.includes('--from-current')) {
|
|
125
|
-
pythonArgs.push('--from-current');
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
try {
|
|
129
|
-
const { stdout } = await execFileAsync('python', [profileScript, ...pythonArgs]);
|
|
130
|
-
console.log(stdout);
|
|
131
|
-
} catch (error) {
|
|
132
|
-
console.error('❌ Error:', error.message);
|
|
133
|
-
if (error.stdout) console.log(error.stdout);
|
|
134
|
-
}
|
|
135
|
-
rl.close();
|
|
136
|
-
return;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
// SWITCH command
|
|
140
|
-
if (command === 'switch') {
|
|
141
|
-
if (args.length < 2) {
|
|
142
|
-
console.log(`
|
|
143
|
-
❌ ERROR: Profile name required
|
|
144
|
-
|
|
145
|
-
Usage: memory-profile switch <name>
|
|
146
|
-
|
|
147
|
-
Example:
|
|
148
|
-
memory-profile switch work
|
|
149
|
-
|
|
150
|
-
After switching, restart Claude CLI for changes to take effect.
|
|
151
|
-
`);
|
|
152
|
-
rl.close();
|
|
153
|
-
return;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
const profileName = args[1];
|
|
157
|
-
|
|
158
|
-
console.log(`
|
|
159
|
-
╔══════════════════════════════════════════════════════════╗
|
|
160
|
-
║ Profile Switch ║
|
|
161
|
-
╚══════════════════════════════════════════════════════════╝
|
|
162
|
-
|
|
163
|
-
This will switch the active profile to "${profileName}".
|
|
164
|
-
All profiles share one database — switching is instant and safe.
|
|
165
|
-
Your current memories are always preserved.
|
|
166
|
-
`);
|
|
167
|
-
|
|
168
|
-
const answer = await question('Proceed with profile switch? (yes/no): ');
|
|
169
|
-
|
|
170
|
-
if (answer.toLowerCase() === 'yes') {
|
|
171
|
-
try {
|
|
172
|
-
const { stdout } = await execFileAsync('python', [
|
|
173
|
-
profileScript,
|
|
174
|
-
'switch',
|
|
175
|
-
profileName
|
|
176
|
-
]);
|
|
177
|
-
console.log(stdout);
|
|
178
|
-
} catch (error) {
|
|
179
|
-
console.error('❌ Error:', error.message);
|
|
180
|
-
if (error.stdout) console.log(error.stdout);
|
|
181
|
-
}
|
|
182
|
-
} else {
|
|
183
|
-
console.log('\nCancelled. No changes made.');
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
rl.close();
|
|
187
|
-
return;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
// DELETE command
|
|
191
|
-
if (command === 'delete') {
|
|
192
|
-
if (args.length < 2) {
|
|
193
|
-
console.log(`
|
|
194
|
-
❌ ERROR: Profile name required
|
|
195
|
-
|
|
196
|
-
Usage: memory-profile delete <name>
|
|
197
|
-
|
|
198
|
-
Example:
|
|
199
|
-
memory-profile delete old-project
|
|
200
|
-
|
|
201
|
-
Cannot delete:
|
|
202
|
-
• The "default" profile
|
|
203
|
-
• The currently active profile
|
|
204
|
-
`);
|
|
205
|
-
rl.close();
|
|
206
|
-
return;
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
const profileName = args[1];
|
|
210
|
-
|
|
211
|
-
// Prevent deleting default
|
|
212
|
-
if (profileName === 'default') {
|
|
213
|
-
console.log(`
|
|
214
|
-
❌ ERROR: Cannot delete the default profile
|
|
215
|
-
|
|
216
|
-
The default profile is protected and cannot be deleted.
|
|
217
|
-
`);
|
|
218
|
-
rl.close();
|
|
219
|
-
return;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
console.log(`
|
|
223
|
-
╔══════════════════════════════════════════════════════════╗
|
|
224
|
-
║ ⚠️ DELETE PROFILE WARNING ⚠️ ║
|
|
225
|
-
╚══════════════════════════════════════════════════════════╝
|
|
226
|
-
|
|
227
|
-
This will PERMANENTLY delete profile: "${profileName}"
|
|
228
|
-
|
|
229
|
-
What will be deleted:
|
|
230
|
-
🔴 All memories in this profile
|
|
231
|
-
🔴 Graph data (nodes, edges, clusters)
|
|
232
|
-
🔴 Learned patterns
|
|
233
|
-
🔴 Compressed archives
|
|
234
|
-
|
|
235
|
-
A backup will be created before deletion.
|
|
236
|
-
|
|
237
|
-
`);
|
|
238
|
-
|
|
239
|
-
const answer = await question(`Type the profile name "${profileName}" to confirm: `);
|
|
240
|
-
|
|
241
|
-
if (answer === profileName) {
|
|
242
|
-
try {
|
|
243
|
-
const { stdout } = await execFileAsync('python', [
|
|
244
|
-
profileScript,
|
|
245
|
-
'delete',
|
|
246
|
-
profileName
|
|
247
|
-
]);
|
|
248
|
-
console.log(stdout);
|
|
249
|
-
} catch (error) {
|
|
250
|
-
console.error('❌ Error:', error.message);
|
|
251
|
-
if (error.stdout) console.log(error.stdout);
|
|
252
|
-
}
|
|
253
|
-
} else {
|
|
254
|
-
console.log('\nCancelled. No changes made.');
|
|
255
|
-
console.log(`(You must type exactly "${profileName}" to confirm)`);
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
rl.close();
|
|
259
|
-
return;
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
// Unknown command
|
|
263
|
-
console.log(`
|
|
264
|
-
❌ Unknown command: ${command}
|
|
265
|
-
|
|
266
|
-
Valid commands: list, current, create, switch, delete
|
|
267
|
-
|
|
268
|
-
Use: memory-profile --help for more information
|
|
269
|
-
`);
|
|
270
|
-
rl.close();
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
memoryProfileSkill();
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Memory Recall CLI Skill
|
|
4
|
-
* Search and retrieve memories with advanced filtering
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
const { execFile } = require('child_process');
|
|
8
|
-
const { promisify } = require('util');
|
|
9
|
-
const path = require('path');
|
|
10
|
-
|
|
11
|
-
const execFileAsync = promisify(execFile);
|
|
12
|
-
|
|
13
|
-
async function memoryRecallSkill() {
|
|
14
|
-
const memoryScript = path.join(process.env.HOME, '.claude-memory', 'memory_store_v2.py');
|
|
15
|
-
const args = process.argv.slice(2);
|
|
16
|
-
|
|
17
|
-
// Show help if no args or --help
|
|
18
|
-
if (args.length === 0 || args[0] === '--help' || args[0] === '-h') {
|
|
19
|
-
console.log(`
|
|
20
|
-
╔══════════════════════════════════════════════════════════╗
|
|
21
|
-
║ ║
|
|
22
|
-
║ SuperLocalMemory V2 - Recall (Search Memories) ║
|
|
23
|
-
║ ║
|
|
24
|
-
╚══════════════════════════════════════════════════════════╝
|
|
25
|
-
|
|
26
|
-
Search your memory store using semantic search and filters.
|
|
27
|
-
Finds relevant memories using TF-IDF similarity and metadata.
|
|
28
|
-
|
|
29
|
-
Usage: memory-recall <query> [options]
|
|
30
|
-
|
|
31
|
-
Arguments:
|
|
32
|
-
<query> Search query (required)
|
|
33
|
-
|
|
34
|
-
Options:
|
|
35
|
-
--limit <n> Maximum results to return (default: 10)
|
|
36
|
-
--full Show complete content without truncation
|
|
37
|
-
|
|
38
|
-
Examples:
|
|
39
|
-
memory-recall "authentication bug"
|
|
40
|
-
|
|
41
|
-
memory-recall "API configuration" --limit 5
|
|
42
|
-
|
|
43
|
-
memory-recall "security best practices" --full
|
|
44
|
-
|
|
45
|
-
memory-recall "user preferences"
|
|
46
|
-
|
|
47
|
-
Output Format:
|
|
48
|
-
• Ranked by relevance (TF-IDF cosine similarity)
|
|
49
|
-
• Shows: ID, Content, Tags, Importance, Timestamp
|
|
50
|
-
• Higher scores = better matches
|
|
51
|
-
• Smart truncation: full content if <5000 chars, preview if ≥5000 chars
|
|
52
|
-
• Use --full flag to always show complete content
|
|
53
|
-
|
|
54
|
-
Notes:
|
|
55
|
-
• Uses local TF-IDF search (no external APIs)
|
|
56
|
-
• Searches content, summary, and tags
|
|
57
|
-
• Empty query returns recent memories
|
|
58
|
-
• Use quotes for multi-word queries
|
|
59
|
-
`);
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
// Parse query and options
|
|
64
|
-
let query = null;
|
|
65
|
-
const pythonArgs = ['search'];
|
|
66
|
-
|
|
67
|
-
for (let i = 0; i < args.length; i++) {
|
|
68
|
-
const arg = args[i];
|
|
69
|
-
|
|
70
|
-
if (arg === '--limit' && i + 1 < args.length) {
|
|
71
|
-
// Note: V1 store doesn't support --limit in search, will truncate output instead
|
|
72
|
-
i++; // Skip but don't add to pythonArgs
|
|
73
|
-
} else if (arg === '--full') {
|
|
74
|
-
pythonArgs.push('--full');
|
|
75
|
-
} else if (!arg.startsWith('--') && query === null) {
|
|
76
|
-
query = arg;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// Validate query
|
|
81
|
-
if (!query || query.trim().length === 0) {
|
|
82
|
-
console.log(`
|
|
83
|
-
❌ ERROR: Search query required
|
|
84
|
-
|
|
85
|
-
Usage: memory-recall <query> [options]
|
|
86
|
-
|
|
87
|
-
Example:
|
|
88
|
-
memory-recall "search term" --limit 10
|
|
89
|
-
|
|
90
|
-
Use --help for more information
|
|
91
|
-
`);
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
// Add query to Python args
|
|
96
|
-
pythonArgs.push(query);
|
|
97
|
-
|
|
98
|
-
try {
|
|
99
|
-
const { stdout, stderr } = await execFileAsync('python3', [memoryScript, ...pythonArgs]);
|
|
100
|
-
|
|
101
|
-
if (stderr) {
|
|
102
|
-
console.error('⚠️ Warning:', stderr);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
console.log(stdout);
|
|
106
|
-
|
|
107
|
-
} catch (error) {
|
|
108
|
-
console.error('❌ Error searching memories:', error.message);
|
|
109
|
-
if (error.stdout) console.log(error.stdout);
|
|
110
|
-
if (error.stderr) console.error(error.stderr);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
memoryRecallSkill();
|