superlocalmemory 2.8.5 → 3.0.0
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/CHANGELOG.md +11 -0
- package/LICENSE +9 -1
- package/NOTICE +63 -0
- package/README.md +165 -480
- package/bin/slm +17 -449
- package/bin/slm-npm +2 -2
- package/bin/slm.bat +4 -2
- 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/{install.ps1 → scripts/install.ps1} +36 -4
- package/{install.sh → scripts/install.sh} +14 -13
- 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/docs/SECURITY-QUICK-REFERENCE.md +0 -214
- 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 -1800
- 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 -266
- /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/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,214 +0,0 @@
|
|
|
1
|
-
# Security Quick Reference — For Developers
|
|
2
|
-
|
|
3
|
-
**Last Updated:** March 4, 2026
|
|
4
|
-
|
|
5
|
-
## TL;DR — Safe Coding Patterns
|
|
6
|
-
|
|
7
|
-
### ✅ DO THIS (Safe)
|
|
8
|
-
|
|
9
|
-
```javascript
|
|
10
|
-
// Safe: Use textContent for plain text
|
|
11
|
-
element.textContent = userContent;
|
|
12
|
-
|
|
13
|
-
// Safe: Use escapeHtml() before DOM insertion
|
|
14
|
-
element.innerHTML = escapeHtml(userContent);
|
|
15
|
-
|
|
16
|
-
// Safe: Create elements programmatically
|
|
17
|
-
const div = document.createElement('div');
|
|
18
|
-
div.textContent = userContent;
|
|
19
|
-
parent.appendChild(div);
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
### ❌ DON'T DO THIS (Dangerous)
|
|
23
|
-
|
|
24
|
-
```javascript
|
|
25
|
-
// DANGEROUS: Direct assignment with user content
|
|
26
|
-
element.innerHTML = userContent; // XSS VULNERABLE
|
|
27
|
-
|
|
28
|
-
// DANGEROUS: Using code evaluation with user input
|
|
29
|
-
// Never use eval, Function constructor, or similar
|
|
30
|
-
|
|
31
|
-
// DANGEROUS: Inline event handlers with user content
|
|
32
|
-
element.setAttribute('onclick', userCode); // XSS VULNERABLE
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
## Security Checklist — Before Committing
|
|
36
|
-
|
|
37
|
-
- [ ] No direct innerHTML assignments without escapeHtml()
|
|
38
|
-
- [ ] All user content either uses textContent or is escaped
|
|
39
|
-
- [ ] No code evaluation with user input
|
|
40
|
-
- [ ] No inline event handlers with dynamic content
|
|
41
|
-
- [ ] All API endpoints return explicit Content-Type
|
|
42
|
-
- [ ] SQL queries use parameterized statements (never string concatenation)
|
|
43
|
-
- [ ] No secrets in code or config files
|
|
44
|
-
- [ ] Run security tests: pytest tests/test_security_headers.py -v
|
|
45
|
-
|
|
46
|
-
## Common Patterns
|
|
47
|
-
|
|
48
|
-
### Rendering User-Generated Content
|
|
49
|
-
|
|
50
|
-
**Pattern 1: Plain Text Only**
|
|
51
|
-
```javascript
|
|
52
|
-
const contentDiv = document.getElementById('memory-content');
|
|
53
|
-
contentDiv.textContent = memory.content; // Automatically safe
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
**Pattern 2: Mixed Content (HTML Structure + User Text)**
|
|
57
|
-
```javascript
|
|
58
|
-
const html = `
|
|
59
|
-
<div class="memory-card">
|
|
60
|
-
<h3>${escapeHtml(memory.title)}</h3>
|
|
61
|
-
<p>${escapeHtml(memory.content)}</p>
|
|
62
|
-
<span class="badge">${escapeHtml(memory.category)}</span>
|
|
63
|
-
</div>
|
|
64
|
-
`;
|
|
65
|
-
container.innerHTML = html;
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
**Pattern 3: Building DOM Programmatically (Most Secure)**
|
|
69
|
-
```javascript
|
|
70
|
-
const card = document.createElement('div');
|
|
71
|
-
card.className = 'memory-card';
|
|
72
|
-
|
|
73
|
-
const title = document.createElement('h3');
|
|
74
|
-
title.textContent = memory.title;
|
|
75
|
-
|
|
76
|
-
const content = document.createElement('p');
|
|
77
|
-
content.textContent = memory.content;
|
|
78
|
-
|
|
79
|
-
card.appendChild(title);
|
|
80
|
-
card.appendChild(content);
|
|
81
|
-
container.appendChild(card);
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
### FastAPI Routes
|
|
85
|
-
|
|
86
|
-
**Safe Pattern:**
|
|
87
|
-
```python
|
|
88
|
-
@router.get("/api/memories")
|
|
89
|
-
async def get_memories():
|
|
90
|
-
# FastAPI automatically sets Content-Type: application/json
|
|
91
|
-
return {
|
|
92
|
-
"memories": memories, # User content here is safe in JSON
|
|
93
|
-
"total": len(memories)
|
|
94
|
-
}
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
**SQL Queries:**
|
|
98
|
-
```python
|
|
99
|
-
# SAFE: Parameterized query
|
|
100
|
-
cursor.execute("SELECT * FROM memories WHERE id = ?", (memory_id,))
|
|
101
|
-
|
|
102
|
-
# DANGEROUS: String concatenation (SQL injection)
|
|
103
|
-
# Never use f-strings or concatenation for SQL queries
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
## Testing XSS Protection
|
|
107
|
-
|
|
108
|
-
```python
|
|
109
|
-
# Test that XSS payloads are handled safely
|
|
110
|
-
def test_xss_payload():
|
|
111
|
-
payload = "<script>alert('xss')</script>"
|
|
112
|
-
|
|
113
|
-
# This should be safe when:
|
|
114
|
-
# 1. Returned as JSON with Content-Type: application/json
|
|
115
|
-
# 2. Rendered with escapeHtml() on client
|
|
116
|
-
# 3. Protected by CSP headers
|
|
117
|
-
|
|
118
|
-
response = client.get(f"/api/memory?content={payload}")
|
|
119
|
-
assert response.headers["Content-Type"] == "application/json"
|
|
120
|
-
assert response.headers["X-Content-Type-Options"] == "nosniff"
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
## Security Headers Reference
|
|
124
|
-
|
|
125
|
-
All responses include these headers automatically via SecurityHeadersMiddleware:
|
|
126
|
-
|
|
127
|
-
- X-Content-Type-Options: nosniff
|
|
128
|
-
- X-Frame-Options: DENY
|
|
129
|
-
- X-XSS-Protection: 1; mode=block
|
|
130
|
-
- Content-Security-Policy: (comprehensive policy)
|
|
131
|
-
- Referrer-Policy: strict-origin-when-cross-origin
|
|
132
|
-
- Cache-Control: no-store (API endpoints only)
|
|
133
|
-
|
|
134
|
-
**Don't override these headers** unless you have a specific security reason and understand the implications.
|
|
135
|
-
|
|
136
|
-
## CORS Configuration
|
|
137
|
-
|
|
138
|
-
Current allowed origins:
|
|
139
|
-
- http://localhost:8765
|
|
140
|
-
- http://127.0.0.1:8765
|
|
141
|
-
- http://localhost:8417
|
|
142
|
-
- http://127.0.0.1:8417
|
|
143
|
-
|
|
144
|
-
**To add a new origin:**
|
|
145
|
-
1. Add to the allow_origins list in ui_server.py
|
|
146
|
-
2. Document why it's needed
|
|
147
|
-
3. Never use wildcard * in production
|
|
148
|
-
|
|
149
|
-
## When to Update Security
|
|
150
|
-
|
|
151
|
-
### Add New Route
|
|
152
|
-
- [ ] Verify return type has explicit Content-Type
|
|
153
|
-
- [ ] Test with XSS payloads
|
|
154
|
-
- [ ] Add test case to test_security_headers.py
|
|
155
|
-
|
|
156
|
-
### Add New JavaScript
|
|
157
|
-
- [ ] Use textContent for plain text
|
|
158
|
-
- [ ] Use escapeHtml() for mixed content
|
|
159
|
-
- [ ] Test rendering with XSS payloads
|
|
160
|
-
|
|
161
|
-
### Modify Security Headers
|
|
162
|
-
- [ ] Document reason in commit message
|
|
163
|
-
- [ ] Update SECURITY.md
|
|
164
|
-
- [ ] Run full security test suite
|
|
165
|
-
- [ ] Consider security implications
|
|
166
|
-
|
|
167
|
-
## Resources
|
|
168
|
-
|
|
169
|
-
- **Full Security Policy:** See SECURITY.md
|
|
170
|
-
- **Security Enhancement Details:** .backup/security-enhancement-2026-03-04.md
|
|
171
|
-
- **Security Tests:** tests/test_security_headers.py
|
|
172
|
-
- **Middleware Source:** security_middleware.py
|
|
173
|
-
- **Client-Side Escaping:** ui/app.js (escapeHtml function)
|
|
174
|
-
|
|
175
|
-
## Quick Test Commands
|
|
176
|
-
|
|
177
|
-
```bash
|
|
178
|
-
# Run security tests only
|
|
179
|
-
pytest tests/test_security_headers.py -v
|
|
180
|
-
|
|
181
|
-
# Run all tests
|
|
182
|
-
pytest tests/ -x -q
|
|
183
|
-
|
|
184
|
-
# Manual verification (browser)
|
|
185
|
-
python3 ui_server.py
|
|
186
|
-
# Open http://localhost:8765
|
|
187
|
-
# DevTools → Network → Check response headers
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
## Red Flags — Stop and Review
|
|
191
|
-
|
|
192
|
-
If you see any of these patterns, STOP and review:
|
|
193
|
-
|
|
194
|
-
- innerHTML with user content (without escaping)
|
|
195
|
-
- Code evaluation functions anywhere
|
|
196
|
-
- String concatenation in SQL queries
|
|
197
|
-
- CORS with wildcard *
|
|
198
|
-
- User input in event handler attributes
|
|
199
|
-
- Disabling CSP or security headers
|
|
200
|
-
- Secrets or API keys in code
|
|
201
|
-
|
|
202
|
-
## When in Doubt
|
|
203
|
-
|
|
204
|
-
**Ask these questions:**
|
|
205
|
-
1. Could a user inject a script tag here?
|
|
206
|
-
2. Is this content escaped before rendering?
|
|
207
|
-
3. Does this SQL query use parameters?
|
|
208
|
-
4. Could this header configuration weaken security?
|
|
209
|
-
|
|
210
|
-
**If unsure:** Use the safest pattern (textContent or programmatic DOM creation).
|
|
211
|
-
|
|
212
|
-
---
|
|
213
|
-
|
|
214
|
-
**Remember:** Defense in depth. We have multiple layers (headers, CSP, escaping). Use all of them.
|
|
@@ -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();
|