superlocalmemory 2.8.6 → 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/LICENSE +9 -1
- package/NOTICE +63 -0
- package/README.md +165 -480
- package/bin/slm +17 -449
- package/bin/slm-npm +1 -1
- 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,161 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# SuperLocalMemory V2 - DMG Testing Script
|
|
4
|
+
#
|
|
5
|
+
# Copyright (c) 2026 Varun Pratap Bhardwaj
|
|
6
|
+
# Solution Architect & Original Creator
|
|
7
|
+
#
|
|
8
|
+
# Licensed under MIT License (see LICENSE file)
|
|
9
|
+
# Repository: https://github.com/varun369/SuperLocalMemoryV2
|
|
10
|
+
#
|
|
11
|
+
# ATTRIBUTION REQUIRED: This notice must be preserved in all copies.
|
|
12
|
+
#
|
|
13
|
+
|
|
14
|
+
set -e
|
|
15
|
+
|
|
16
|
+
# Colors
|
|
17
|
+
RED='\033[0;31m'
|
|
18
|
+
GREEN='\033[0;32m'
|
|
19
|
+
YELLOW='\033[1;33m'
|
|
20
|
+
BLUE='\033[0;34m'
|
|
21
|
+
NC='\033[0m'
|
|
22
|
+
|
|
23
|
+
log_info() {
|
|
24
|
+
echo -e "${BLUE}[TEST]${NC} $1"
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
log_success() {
|
|
28
|
+
echo -e "${GREEN}[PASS]${NC} $1"
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
log_error() {
|
|
32
|
+
echo -e "${RED}[FAIL]${NC} $1"
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
DMG_FILE="SuperLocalMemory-v2.1.0-macos.dmg"
|
|
36
|
+
|
|
37
|
+
if [ ! -f "${DMG_FILE}" ]; then
|
|
38
|
+
log_error "DMG file not found: ${DMG_FILE}"
|
|
39
|
+
exit 1
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
log_info "Testing DMG: ${DMG_FILE}"
|
|
43
|
+
echo ""
|
|
44
|
+
|
|
45
|
+
# Test 1: DMG Integrity
|
|
46
|
+
log_info "Test 1: Checking DMG integrity..."
|
|
47
|
+
if hdiutil verify "${DMG_FILE}" 2>&1 | grep -q "verified"; then
|
|
48
|
+
log_success "DMG integrity check passed"
|
|
49
|
+
else
|
|
50
|
+
log_error "DMG integrity check failed"
|
|
51
|
+
exit 1
|
|
52
|
+
fi
|
|
53
|
+
|
|
54
|
+
# Test 2: Mount DMG
|
|
55
|
+
log_info "Test 2: Mounting DMG..."
|
|
56
|
+
MOUNT_OUTPUT=$(hdiutil attach "${DMG_FILE}" -nobrowse -readonly)
|
|
57
|
+
MOUNT_POINT=$(echo "$MOUNT_OUTPUT" | grep -E '/Volumes/' | awk '{print $3}')
|
|
58
|
+
|
|
59
|
+
if [ -z "$MOUNT_POINT" ]; then
|
|
60
|
+
log_error "Failed to mount DMG"
|
|
61
|
+
exit 1
|
|
62
|
+
fi
|
|
63
|
+
|
|
64
|
+
log_success "DMG mounted at: $MOUNT_POINT"
|
|
65
|
+
|
|
66
|
+
# Test 3: Verify Contents
|
|
67
|
+
log_info "Test 3: Checking DMG contents..."
|
|
68
|
+
|
|
69
|
+
REQUIRED_FILES=(
|
|
70
|
+
"SuperLocalMemory/install.sh"
|
|
71
|
+
"SuperLocalMemory/src"
|
|
72
|
+
"SuperLocalMemory/bin"
|
|
73
|
+
"SuperLocalMemory/configs"
|
|
74
|
+
"SuperLocalMemory/skills"
|
|
75
|
+
"SuperLocalMemory/mcp_server.py"
|
|
76
|
+
"SuperLocalMemory/README.md"
|
|
77
|
+
"SuperLocalMemory/LICENSE"
|
|
78
|
+
"SuperLocalMemory/ATTRIBUTION.md"
|
|
79
|
+
"SuperLocalMemory/README-INSTALLATION.txt"
|
|
80
|
+
"SuperLocalMemory/INSTALL"
|
|
81
|
+
"Applications"
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
ALL_PRESENT=true
|
|
85
|
+
for item in "${REQUIRED_FILES[@]}"; do
|
|
86
|
+
if [ -e "${MOUNT_POINT}/${item}" ]; then
|
|
87
|
+
log_success " ✓ ${item}"
|
|
88
|
+
else
|
|
89
|
+
log_error " ✗ ${item} (MISSING)"
|
|
90
|
+
ALL_PRESENT=false
|
|
91
|
+
fi
|
|
92
|
+
done
|
|
93
|
+
|
|
94
|
+
if [ "$ALL_PRESENT" = false ]; then
|
|
95
|
+
log_error "Some required files are missing"
|
|
96
|
+
hdiutil detach "${MOUNT_POINT}" -quiet
|
|
97
|
+
exit 1
|
|
98
|
+
fi
|
|
99
|
+
|
|
100
|
+
# Test 4: Check installer script
|
|
101
|
+
log_info "Test 4: Checking installer script..."
|
|
102
|
+
if [ -x "${MOUNT_POINT}/SuperLocalMemory/install.sh" ]; then
|
|
103
|
+
log_success "install.sh is executable"
|
|
104
|
+
else
|
|
105
|
+
log_error "install.sh is not executable"
|
|
106
|
+
hdiutil detach "${MOUNT_POINT}" -quiet
|
|
107
|
+
exit 1
|
|
108
|
+
fi
|
|
109
|
+
|
|
110
|
+
# Test 5: Check Applications symlink
|
|
111
|
+
log_info "Test 5: Checking Applications symlink..."
|
|
112
|
+
if [ -L "${MOUNT_POINT}/Applications" ]; then
|
|
113
|
+
TARGET=$(readlink "${MOUNT_POINT}/Applications")
|
|
114
|
+
if [ "$TARGET" = "/Applications" ]; then
|
|
115
|
+
log_success "Applications symlink is correct"
|
|
116
|
+
else
|
|
117
|
+
log_error "Applications symlink points to wrong location: $TARGET"
|
|
118
|
+
fi
|
|
119
|
+
else
|
|
120
|
+
log_error "Applications symlink not found"
|
|
121
|
+
fi
|
|
122
|
+
|
|
123
|
+
# Test 6: Check file sizes
|
|
124
|
+
log_info "Test 6: Checking file sizes..."
|
|
125
|
+
INSTALLER_SIZE=$(du -sh "${MOUNT_POINT}/SuperLocalMemory" | awk '{print $1}')
|
|
126
|
+
log_success "Installer size: ${INSTALLER_SIZE}"
|
|
127
|
+
|
|
128
|
+
# Test 7: Verify attribution
|
|
129
|
+
log_info "Test 7: Checking attribution headers..."
|
|
130
|
+
if grep -q "Varun Pratap Bhardwaj" "${MOUNT_POINT}/SuperLocalMemory/src/memory_store_v2.py"; then
|
|
131
|
+
log_success "Attribution headers present"
|
|
132
|
+
else
|
|
133
|
+
log_error "Attribution headers missing"
|
|
134
|
+
fi
|
|
135
|
+
|
|
136
|
+
# Test 8: Check INSTALL wrapper
|
|
137
|
+
log_info "Test 8: Checking INSTALL wrapper..."
|
|
138
|
+
if [ -x "${MOUNT_POINT}/SuperLocalMemory/INSTALL" ]; then
|
|
139
|
+
log_success "INSTALL wrapper is executable"
|
|
140
|
+
else
|
|
141
|
+
log_error "INSTALL wrapper is not executable"
|
|
142
|
+
fi
|
|
143
|
+
|
|
144
|
+
# Cleanup
|
|
145
|
+
log_info "Unmounting DMG..."
|
|
146
|
+
hdiutil detach "${MOUNT_POINT}" -quiet
|
|
147
|
+
log_success "DMG unmounted"
|
|
148
|
+
|
|
149
|
+
echo ""
|
|
150
|
+
echo "============================================================================"
|
|
151
|
+
log_success "ALL TESTS PASSED!"
|
|
152
|
+
echo "============================================================================"
|
|
153
|
+
echo ""
|
|
154
|
+
echo "DMG is ready for distribution."
|
|
155
|
+
echo ""
|
|
156
|
+
echo "To test installation:"
|
|
157
|
+
echo " 1. Open ${DMG_FILE}"
|
|
158
|
+
echo " 2. Double-click INSTALL"
|
|
159
|
+
echo " 3. Follow prompts"
|
|
160
|
+
echo " 4. Run: slm status"
|
|
161
|
+
echo ""
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
# ============================================================================
|
|
2
|
+
# SuperLocalMemory V2 - NPM Package Testing Script (PowerShell)
|
|
3
|
+
# Copyright (c) 2026 Varun Pratap Bhardwaj
|
|
4
|
+
# Licensed under MIT License
|
|
5
|
+
# Repository: https://github.com/varun369/SuperLocalMemoryV2
|
|
6
|
+
# ============================================================================
|
|
7
|
+
#
|
|
8
|
+
# Tests the NPM package locally before publishing
|
|
9
|
+
# Run this BEFORE npm publish
|
|
10
|
+
#
|
|
11
|
+
|
|
12
|
+
param()
|
|
13
|
+
|
|
14
|
+
$ErrorActionPreference = "Stop"
|
|
15
|
+
|
|
16
|
+
$REPO_DIR = $PSScriptRoot
|
|
17
|
+
|
|
18
|
+
Write-Host "╔══════════════════════════════════════════════════════════════╗"
|
|
19
|
+
Write-Host "║ SuperLocalMemory V2 - NPM Package Test ║"
|
|
20
|
+
Write-Host "║ by Varun Pratap Bhardwaj ║"
|
|
21
|
+
Write-Host "╚══════════════════════════════════════════════════════════════╝"
|
|
22
|
+
Write-Host ""
|
|
23
|
+
|
|
24
|
+
# Step 1: Validate package.json
|
|
25
|
+
Write-Host "📋 Step 1: Validating package.json..."
|
|
26
|
+
$packageJsonPath = Join-Path $REPO_DIR "package.json"
|
|
27
|
+
if (-not (Test-Path $packageJsonPath)) {
|
|
28
|
+
Write-Host "❌ Error: package.json not found" -ForegroundColor Red
|
|
29
|
+
exit 1
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
# Check version
|
|
33
|
+
$packageJson = Get-Content $packageJsonPath | ConvertFrom-Json
|
|
34
|
+
$VERSION = $packageJson.version
|
|
35
|
+
Write-Host " Version: $VERSION"
|
|
36
|
+
|
|
37
|
+
# Check required fields
|
|
38
|
+
$required = @("name", "version", "description", "author", "license", "repository", "bin")
|
|
39
|
+
$missing = @()
|
|
40
|
+
foreach ($field in $required) {
|
|
41
|
+
if (-not $packageJson.$field) {
|
|
42
|
+
$missing += $field
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if ($missing.Count -gt 0) {
|
|
47
|
+
Write-Host "❌ Missing required fields: $($missing -join ', ')" -ForegroundColor Red
|
|
48
|
+
exit 1
|
|
49
|
+
}
|
|
50
|
+
Write-Host " ✓ All required fields present"
|
|
51
|
+
|
|
52
|
+
# Step 2: Check file structure
|
|
53
|
+
Write-Host ""
|
|
54
|
+
Write-Host "📁 Step 2: Checking file structure..."
|
|
55
|
+
|
|
56
|
+
$REQUIRED_FILES = @(
|
|
57
|
+
"bin\slm-npm",
|
|
58
|
+
"scripts\postinstall.js",
|
|
59
|
+
"scripts\preuninstall.js",
|
|
60
|
+
"src\memory_store_v2.py",
|
|
61
|
+
"mcp_server.py",
|
|
62
|
+
"install.sh",
|
|
63
|
+
"install.ps1",
|
|
64
|
+
"README.md",
|
|
65
|
+
"LICENSE",
|
|
66
|
+
"ATTRIBUTION.md"
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
$allPresent = $true
|
|
70
|
+
foreach ($file in $REQUIRED_FILES) {
|
|
71
|
+
$filePath = Join-Path $REPO_DIR $file
|
|
72
|
+
if (-not (Test-Path $filePath)) {
|
|
73
|
+
Write-Host " ❌ Missing: $file" -ForegroundColor Red
|
|
74
|
+
$allPresent = $false
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if (-not $allPresent) {
|
|
79
|
+
exit 1
|
|
80
|
+
}
|
|
81
|
+
Write-Host " ✓ All required files present"
|
|
82
|
+
|
|
83
|
+
# Step 3: Test npm pack
|
|
84
|
+
Write-Host ""
|
|
85
|
+
Write-Host "📦 Step 3: Testing npm pack..."
|
|
86
|
+
Push-Location $REPO_DIR
|
|
87
|
+
try {
|
|
88
|
+
# Remove old tarballs
|
|
89
|
+
Get-ChildItem -Filter "superlocalmemory-*.tgz" | Remove-Item -Force -ErrorAction SilentlyContinue
|
|
90
|
+
|
|
91
|
+
# Create tarball
|
|
92
|
+
$packOutput = npm pack --quiet 2>&1
|
|
93
|
+
$TARBALL = Get-ChildItem -Filter "superlocalmemory-*.tgz" | Select-Object -First 1
|
|
94
|
+
|
|
95
|
+
if (-not $TARBALL) {
|
|
96
|
+
Write-Host " ❌ npm pack failed" -ForegroundColor Red
|
|
97
|
+
exit 1
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
$SIZE = [math]::Round((Get-Item $TARBALL.FullName).Length / 1MB, 2)
|
|
101
|
+
Write-Host " ✓ Package created: $($TARBALL.Name) ($SIZE MB)"
|
|
102
|
+
|
|
103
|
+
# Check package size
|
|
104
|
+
if ($SIZE -gt 1) {
|
|
105
|
+
Write-Host " ⚠️ Warning: Package size is large ($SIZE MB). Target: <0.5MB" -ForegroundColor Yellow
|
|
106
|
+
} else {
|
|
107
|
+
Write-Host " ✓ Package size OK: $SIZE MB"
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
# Step 4: Inspect package contents
|
|
111
|
+
Write-Host ""
|
|
112
|
+
Write-Host "🔍 Step 4: Inspecting package contents..."
|
|
113
|
+
Write-Host " Files included:"
|
|
114
|
+
|
|
115
|
+
# Extract tarball contents list (using tar if available, otherwise show warning)
|
|
116
|
+
try {
|
|
117
|
+
$tarContents = tar -tzf $TARBALL.FullName 2>$null | Select-Object -First 20
|
|
118
|
+
$tarContents | ForEach-Object { Write-Host " $_" }
|
|
119
|
+
$fileCount = (tar -tzf $TARBALL.FullName 2>$null | Measure-Object).Count
|
|
120
|
+
Write-Host " ... ($fileCount total files)"
|
|
121
|
+
|
|
122
|
+
# Check for unwanted files
|
|
123
|
+
$UNWANTED = @("*.pyc", "*.db", ".git", "test_*.py", "wiki-content")
|
|
124
|
+
$foundUnwanted = $false
|
|
125
|
+
foreach ($pattern in $UNWANTED) {
|
|
126
|
+
$found = tar -tzf $TARBALL.FullName 2>$null | Select-String -Pattern $pattern
|
|
127
|
+
if ($found) {
|
|
128
|
+
Write-Host " ⚠️ Warning: Found unwanted files matching: $pattern" -ForegroundColor Yellow
|
|
129
|
+
$foundUnwanted = $true
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
if (-not $foundUnwanted) {
|
|
133
|
+
Write-Host " ✓ No obvious unwanted files found"
|
|
134
|
+
}
|
|
135
|
+
} catch {
|
|
136
|
+
Write-Host " ⚠️ Could not inspect tarball contents (tar not available)" -ForegroundColor Yellow
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
# Step 5: Test npm link (local install)
|
|
140
|
+
Write-Host ""
|
|
141
|
+
Write-Host "🔗 Step 5: Testing npm link (local install)..."
|
|
142
|
+
|
|
143
|
+
# Unlink if already linked
|
|
144
|
+
npm unlink -g superlocalmemory 2>$null
|
|
145
|
+
|
|
146
|
+
# Link
|
|
147
|
+
$linkResult = npm link --quiet 2>&1
|
|
148
|
+
if ($LASTEXITCODE -eq 0) {
|
|
149
|
+
Write-Host " ✓ npm link successful"
|
|
150
|
+
} else {
|
|
151
|
+
Write-Host " ❌ npm link failed" -ForegroundColor Red
|
|
152
|
+
Write-Host " $linkResult"
|
|
153
|
+
exit 1
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
# Step 6: Test CLI command
|
|
157
|
+
Write-Host ""
|
|
158
|
+
Write-Host "🧪 Step 6: Testing CLI command..."
|
|
159
|
+
|
|
160
|
+
$slmCommand = Get-Command slm -ErrorAction SilentlyContinue
|
|
161
|
+
if ($slmCommand) {
|
|
162
|
+
Write-Host " ✓ slm command found"
|
|
163
|
+
|
|
164
|
+
# Test version
|
|
165
|
+
try {
|
|
166
|
+
slm --version 2>&1 | Out-Null
|
|
167
|
+
if ($LASTEXITCODE -eq 0) {
|
|
168
|
+
Write-Host " ✓ slm --version works"
|
|
169
|
+
} else {
|
|
170
|
+
Write-Host " ⚠️ slm --version failed (might be OK if not installed yet)" -ForegroundColor Yellow
|
|
171
|
+
}
|
|
172
|
+
} catch {
|
|
173
|
+
Write-Host " ⚠️ slm --version failed" -ForegroundColor Yellow
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
# Test help
|
|
177
|
+
try {
|
|
178
|
+
slm --help 2>&1 | Out-Null
|
|
179
|
+
if ($LASTEXITCODE -eq 0) {
|
|
180
|
+
Write-Host " ✓ slm --help works"
|
|
181
|
+
} else {
|
|
182
|
+
Write-Host " ⚠️ slm --help failed" -ForegroundColor Yellow
|
|
183
|
+
}
|
|
184
|
+
} catch {
|
|
185
|
+
Write-Host " ⚠️ slm --help failed" -ForegroundColor Yellow
|
|
186
|
+
}
|
|
187
|
+
} else {
|
|
188
|
+
Write-Host " ⚠️ slm command not found (expected for first install)" -ForegroundColor Yellow
|
|
189
|
+
Write-Host " This is OK - postinstall will set it up"
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
# Step 7: Validate scripts
|
|
193
|
+
Write-Host ""
|
|
194
|
+
Write-Host "🔧 Step 7: Validating scripts..."
|
|
195
|
+
|
|
196
|
+
# Check postinstall.js
|
|
197
|
+
try {
|
|
198
|
+
node (Join-Path $REPO_DIR "scripts\postinstall.js") --help 2>&1 | Out-Null
|
|
199
|
+
Write-Host " ✓ postinstall.js is valid Node.js"
|
|
200
|
+
} catch {
|
|
201
|
+
Write-Host " ⚠️ postinstall.js might have issues" -ForegroundColor Yellow
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
# Check executables (Windows doesn't need execute bit)
|
|
205
|
+
$slmNpmPath = Join-Path $REPO_DIR "bin\slm-npm"
|
|
206
|
+
if (Test-Path $slmNpmPath) {
|
|
207
|
+
Write-Host " ✓ bin\slm-npm exists"
|
|
208
|
+
} else {
|
|
209
|
+
Write-Host " ❌ bin\slm-npm not found" -ForegroundColor Red
|
|
210
|
+
exit 1
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
# Step 8: Final summary
|
|
214
|
+
Write-Host ""
|
|
215
|
+
Write-Host "╔══════════════════════════════════════════════════════════════╗"
|
|
216
|
+
Write-Host "║ Test Summary ║"
|
|
217
|
+
Write-Host "╚══════════════════════════════════════════════════════════════╝"
|
|
218
|
+
Write-Host ""
|
|
219
|
+
Write-Host "✅ Package structure: OK"
|
|
220
|
+
Write-Host "✅ File validation: OK"
|
|
221
|
+
Write-Host "✅ npm pack: OK ($SIZE MB)"
|
|
222
|
+
Write-Host "✅ npm link: OK"
|
|
223
|
+
Write-Host "✅ Scripts valid: OK"
|
|
224
|
+
Write-Host ""
|
|
225
|
+
Write-Host "📦 Package ready for testing!"
|
|
226
|
+
Write-Host ""
|
|
227
|
+
Write-Host "Next steps:"
|
|
228
|
+
Write-Host "1. Test manual install:"
|
|
229
|
+
Write-Host " npm install -g .\$($TARBALL.Name)"
|
|
230
|
+
Write-Host " slm status"
|
|
231
|
+
Write-Host " npm uninstall -g superlocalmemory"
|
|
232
|
+
Write-Host ""
|
|
233
|
+
Write-Host "2. Test on Docker (recommended):"
|
|
234
|
+
Write-Host " docker run -it --rm -v ${PWD}:/app node:18 bash"
|
|
235
|
+
Write-Host " cd /app"
|
|
236
|
+
Write-Host " npm install -g ./$($TARBALL.Name)"
|
|
237
|
+
Write-Host " slm status"
|
|
238
|
+
Write-Host ""
|
|
239
|
+
Write-Host "3. When ready to publish:"
|
|
240
|
+
Write-Host " npm login"
|
|
241
|
+
Write-Host " npm publish"
|
|
242
|
+
Write-Host ""
|
|
243
|
+
Write-Host "Full guide: NPM-PUBLISHING-GUIDE.md"
|
|
244
|
+
Write-Host ""
|
|
245
|
+
|
|
246
|
+
# Cleanup
|
|
247
|
+
Remove-Item $TARBALL.FullName -Force
|
|
248
|
+
Write-Host "🧹 Cleaned up test tarball"
|
|
249
|
+
|
|
250
|
+
} finally {
|
|
251
|
+
Pop-Location
|
|
252
|
+
}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# ============================================================================
|
|
3
|
+
# SuperLocalMemory V2 - NPM Package Testing Script
|
|
4
|
+
# Copyright (c) 2026 Varun Pratap Bhardwaj
|
|
5
|
+
# Licensed under MIT License
|
|
6
|
+
# Repository: https://github.com/varun369/SuperLocalMemoryV2
|
|
7
|
+
# ============================================================================
|
|
8
|
+
#
|
|
9
|
+
# Tests the NPM package locally before publishing
|
|
10
|
+
# Run this BEFORE npm publish
|
|
11
|
+
#
|
|
12
|
+
|
|
13
|
+
set -e
|
|
14
|
+
|
|
15
|
+
REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
16
|
+
|
|
17
|
+
echo "╔══════════════════════════════════════════════════════════════╗"
|
|
18
|
+
echo "║ SuperLocalMemory V2 - NPM Package Test ║"
|
|
19
|
+
echo "║ by Varun Pratap Bhardwaj ║"
|
|
20
|
+
echo "╚══════════════════════════════════════════════════════════════╝"
|
|
21
|
+
echo ""
|
|
22
|
+
|
|
23
|
+
# Step 1: Validate package.json
|
|
24
|
+
echo "📋 Step 1: Validating package.json..."
|
|
25
|
+
if [ ! -f "$REPO_DIR/package.json" ]; then
|
|
26
|
+
echo "❌ Error: package.json not found"
|
|
27
|
+
exit 1
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
# Check version
|
|
31
|
+
VERSION=$(node -e "console.log(require('$REPO_DIR/package.json').version)")
|
|
32
|
+
echo " Version: $VERSION"
|
|
33
|
+
|
|
34
|
+
# Check required fields
|
|
35
|
+
node -e "
|
|
36
|
+
const pkg = require('$REPO_DIR/package.json');
|
|
37
|
+
const required = ['name', 'version', 'description', 'author', 'license', 'repository', 'bin'];
|
|
38
|
+
const missing = required.filter(f => !pkg[f]);
|
|
39
|
+
if (missing.length > 0) {
|
|
40
|
+
console.error('❌ Missing required fields:', missing.join(', '));
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
console.log(' ✓ All required fields present');
|
|
44
|
+
"
|
|
45
|
+
|
|
46
|
+
# Step 2: Check file structure
|
|
47
|
+
echo ""
|
|
48
|
+
echo "📁 Step 2: Checking file structure..."
|
|
49
|
+
|
|
50
|
+
REQUIRED_FILES=(
|
|
51
|
+
"bin/slm-npm"
|
|
52
|
+
"scripts/postinstall.js"
|
|
53
|
+
"scripts/preuninstall.js"
|
|
54
|
+
"src/memory_store_v2.py"
|
|
55
|
+
"mcp_server.py"
|
|
56
|
+
"install.sh"
|
|
57
|
+
"install.ps1"
|
|
58
|
+
"README.md"
|
|
59
|
+
"LICENSE"
|
|
60
|
+
"ATTRIBUTION.md"
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
for file in "${REQUIRED_FILES[@]}"; do
|
|
64
|
+
if [ ! -f "$REPO_DIR/$file" ]; then
|
|
65
|
+
echo " ❌ Missing: $file"
|
|
66
|
+
exit 1
|
|
67
|
+
fi
|
|
68
|
+
done
|
|
69
|
+
echo " ✓ All required files present"
|
|
70
|
+
|
|
71
|
+
# Step 3: Test npm pack
|
|
72
|
+
echo ""
|
|
73
|
+
echo "📦 Step 3: Testing npm pack..."
|
|
74
|
+
cd "$REPO_DIR"
|
|
75
|
+
rm -f superlocalmemory-*.tgz
|
|
76
|
+
npm pack --quiet
|
|
77
|
+
TARBALL=$(ls superlocalmemory-*.tgz 2>/dev/null | head -1)
|
|
78
|
+
|
|
79
|
+
if [ -z "$TARBALL" ]; then
|
|
80
|
+
echo " ❌ npm pack failed"
|
|
81
|
+
exit 1
|
|
82
|
+
fi
|
|
83
|
+
|
|
84
|
+
SIZE=$(du -h "$TARBALL" | cut -f1)
|
|
85
|
+
echo " ✓ Package created: $TARBALL ($SIZE)"
|
|
86
|
+
|
|
87
|
+
# Check package size
|
|
88
|
+
SIZE_KB=$(du -k "$TARBALL" | cut -f1)
|
|
89
|
+
if [ "$SIZE_KB" -gt 1024 ]; then
|
|
90
|
+
echo " ⚠️ Warning: Package size is large (${SIZE}). Target: <500KB"
|
|
91
|
+
else
|
|
92
|
+
echo " ✓ Package size OK: $SIZE"
|
|
93
|
+
fi
|
|
94
|
+
|
|
95
|
+
# Step 4: Inspect package contents
|
|
96
|
+
echo ""
|
|
97
|
+
echo "🔍 Step 4: Inspecting package contents..."
|
|
98
|
+
echo " Files included:"
|
|
99
|
+
tar -tzf "$TARBALL" | head -20
|
|
100
|
+
FILE_COUNT=$(tar -tzf "$TARBALL" | wc -l)
|
|
101
|
+
echo " ... ($FILE_COUNT total files)"
|
|
102
|
+
|
|
103
|
+
# Check for unwanted files
|
|
104
|
+
UNWANTED=("*.pyc" "*.db" ".git" "test_*.py" "wiki-content")
|
|
105
|
+
for pattern in "${UNWANTED[@]}"; do
|
|
106
|
+
if tar -tzf "$TARBALL" | grep -q "$pattern"; then
|
|
107
|
+
echo " ⚠️ Warning: Found unwanted files matching: $pattern"
|
|
108
|
+
fi
|
|
109
|
+
done
|
|
110
|
+
echo " ✓ No obvious unwanted files found"
|
|
111
|
+
|
|
112
|
+
# Step 5: Test npm link (local install)
|
|
113
|
+
echo ""
|
|
114
|
+
echo "🔗 Step 5: Testing npm link (local install)..."
|
|
115
|
+
|
|
116
|
+
# Unlink if already linked
|
|
117
|
+
npm unlink -g superlocalmemory 2>/dev/null || true
|
|
118
|
+
|
|
119
|
+
# Link
|
|
120
|
+
if npm link --quiet; then
|
|
121
|
+
echo " ✓ npm link successful"
|
|
122
|
+
else
|
|
123
|
+
echo " ❌ npm link failed"
|
|
124
|
+
exit 1
|
|
125
|
+
fi
|
|
126
|
+
|
|
127
|
+
# Step 6: Test CLI command
|
|
128
|
+
echo ""
|
|
129
|
+
echo "🧪 Step 6: Testing CLI command..."
|
|
130
|
+
|
|
131
|
+
if command -v slm &> /dev/null; then
|
|
132
|
+
echo " ✓ slm command found"
|
|
133
|
+
|
|
134
|
+
# Test version
|
|
135
|
+
if slm --version &> /dev/null; then
|
|
136
|
+
echo " ✓ slm --version works"
|
|
137
|
+
else
|
|
138
|
+
echo " ⚠️ slm --version failed (might be OK if not installed yet)"
|
|
139
|
+
fi
|
|
140
|
+
|
|
141
|
+
# Test help
|
|
142
|
+
if slm --help &> /dev/null; then
|
|
143
|
+
echo " ✓ slm --help works"
|
|
144
|
+
else
|
|
145
|
+
echo " ⚠️ slm --help failed"
|
|
146
|
+
fi
|
|
147
|
+
else
|
|
148
|
+
echo " ⚠️ slm command not found (expected for first install)"
|
|
149
|
+
echo " This is OK - postinstall will set it up"
|
|
150
|
+
fi
|
|
151
|
+
|
|
152
|
+
# Step 7: Validate scripts
|
|
153
|
+
echo ""
|
|
154
|
+
echo "🔧 Step 7: Validating scripts..."
|
|
155
|
+
|
|
156
|
+
# Check postinstall.js
|
|
157
|
+
if node "$REPO_DIR/scripts/postinstall.js" --help &> /dev/null; then
|
|
158
|
+
echo " ✓ postinstall.js is valid Node.js"
|
|
159
|
+
else
|
|
160
|
+
echo " ⚠️ postinstall.js might have issues"
|
|
161
|
+
fi
|
|
162
|
+
|
|
163
|
+
# Check executables
|
|
164
|
+
if [ -x "$REPO_DIR/bin/slm-npm" ]; then
|
|
165
|
+
echo " ✓ bin/slm-npm is executable"
|
|
166
|
+
else
|
|
167
|
+
echo " ❌ bin/slm-npm is not executable"
|
|
168
|
+
echo " Run: chmod +x $REPO_DIR/bin/slm-npm"
|
|
169
|
+
exit 1
|
|
170
|
+
fi
|
|
171
|
+
|
|
172
|
+
# Step 8: Final summary
|
|
173
|
+
echo ""
|
|
174
|
+
echo "╔══════════════════════════════════════════════════════════════╗"
|
|
175
|
+
echo "║ Test Summary ║"
|
|
176
|
+
echo "╚══════════════════════════════════════════════════════════════╝"
|
|
177
|
+
echo ""
|
|
178
|
+
echo "✅ Package structure: OK"
|
|
179
|
+
echo "✅ File validation: OK"
|
|
180
|
+
echo "✅ npm pack: OK ($SIZE)"
|
|
181
|
+
echo "✅ npm link: OK"
|
|
182
|
+
echo "✅ Scripts valid: OK"
|
|
183
|
+
echo ""
|
|
184
|
+
echo "📦 Package ready for testing!"
|
|
185
|
+
echo ""
|
|
186
|
+
echo "Next steps:"
|
|
187
|
+
echo "1. Test manual install:"
|
|
188
|
+
echo " npm install -g ./$TARBALL"
|
|
189
|
+
echo " slm status"
|
|
190
|
+
echo " npm uninstall -g superlocalmemory"
|
|
191
|
+
echo ""
|
|
192
|
+
echo "2. Test on Docker (recommended):"
|
|
193
|
+
echo " docker run -it --rm -v \$(pwd):/app node:18 bash"
|
|
194
|
+
echo " cd /app"
|
|
195
|
+
echo " npm install -g ./$TARBALL"
|
|
196
|
+
echo " slm status"
|
|
197
|
+
echo ""
|
|
198
|
+
echo "3. When ready to publish:"
|
|
199
|
+
echo " npm login"
|
|
200
|
+
echo " npm publish"
|
|
201
|
+
echo ""
|
|
202
|
+
echo "Full guide: NPM-PUBLISHING-GUIDE.md"
|
|
203
|
+
echo ""
|
|
204
|
+
|
|
205
|
+
# Cleanup
|
|
206
|
+
rm -f "$TARBALL"
|
|
207
|
+
echo "🧹 Cleaned up test tarball"
|