superlocalmemory 3.6.22 → 3.7.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 +52 -0
- package/README.md +275 -72
- package/bin/slm-npm +43 -89
- package/docs/pi-dev-integration.md +43 -0
- package/ide/configs/antigravity-mcp.json +2 -2
- package/ide/configs/chatgpt-desktop-mcp.json +1 -1
- package/ide/configs/claude-desktop-mcp.json +2 -2
- package/ide/configs/windsurf-mcp.json +2 -2
- package/ide/hooks/context-hook.js +6 -2
- package/ide/hooks/post-recall-hook.js +7 -3
- package/ide/hooks/tool-event-hook.sh +2 -1
- package/package.json +19 -10
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/_GENERATED.md +1 -1
- package/plugin/agents/slm-memory-advisor.md +1 -1
- package/plugin/requirements.txt +1 -1
- package/plugin/skills/slm-session/SKILL.md +1 -1
- package/plugin-src/rules/AGENTS.md +1 -1
- package/pyproject.toml +40 -8
- package/scripts/postinstall-interactive.js +17 -94
- package/scripts/postinstall.js +185 -258
- package/scripts/preuninstall.js +9 -50
- package/src/superlocalmemory/__init__.py +2 -2
- package/src/superlocalmemory/attribution/mathematical_dna.py +1 -1
- package/src/superlocalmemory/attribution/signer.py +34 -19
- package/src/superlocalmemory/attribution/watermark.py +1 -1
- package/src/superlocalmemory/cli/_lazy_init.py +3 -5
- package/src/superlocalmemory/cli/commands.py +490 -195
- package/src/superlocalmemory/cli/context_commands.py +5 -4
- package/src/superlocalmemory/cli/daemon.py +282 -187
- package/src/superlocalmemory/cli/db_migrate.py +3 -1
- package/src/superlocalmemory/cli/diagnostics_cmd.py +28 -0
- package/src/superlocalmemory/cli/evidence_cmd.py +103 -0
- package/src/superlocalmemory/cli/ingest_cmd.py +7 -3
- package/src/superlocalmemory/cli/main.py +128 -31
- package/src/superlocalmemory/cli/pending_store.py +54 -38
- package/src/superlocalmemory/cli/scale_engine_cmd.py +37 -0
- package/src/superlocalmemory/cli/service_installer.py +57 -52
- package/src/superlocalmemory/cli/setup_wizard.py +142 -88
- package/src/superlocalmemory/cli/version_banner.py +2 -1
- package/src/superlocalmemory/code_graph/config.py +3 -1
- package/src/superlocalmemory/core/backend_orchestrator.py +81 -21
- package/src/superlocalmemory/core/config.py +65 -20
- package/src/superlocalmemory/core/consolidation_engine.py +9 -7
- package/src/superlocalmemory/core/context_cache.py +56 -8
- package/src/superlocalmemory/core/derivation_lineage.py +246 -0
- package/src/superlocalmemory/core/embedding_worker.py +32 -20
- package/src/superlocalmemory/core/embeddings.py +54 -18
- package/src/superlocalmemory/core/engine.py +150 -104
- package/src/superlocalmemory/core/engine_ingestion.py +513 -0
- package/src/superlocalmemory/core/engine_wiring.py +2 -0
- package/src/superlocalmemory/core/evidence_bundle.py +526 -0
- package/src/superlocalmemory/core/fact_consolidator.py +5 -11
- package/src/superlocalmemory/core/graph_analyzer.py +2 -2
- package/src/superlocalmemory/core/health_monitor.py +4 -2
- package/src/superlocalmemory/core/ingestion_command.py +636 -0
- package/src/superlocalmemory/core/injection.py +69 -18
- package/src/superlocalmemory/core/lifecycle_state.py +153 -0
- package/src/superlocalmemory/core/maintenance.py +23 -22
- package/src/superlocalmemory/core/maintenance_scheduler.py +51 -35
- package/src/superlocalmemory/core/mutations.py +143 -0
- package/src/superlocalmemory/core/platform_utils.py +7 -4
- package/src/superlocalmemory/core/ram_lock.py +16 -5
- package/src/superlocalmemory/core/rate_limit.py +1 -1
- package/src/superlocalmemory/core/recall_pipeline.py +60 -101
- package/src/superlocalmemory/core/recall_worker.py +76 -59
- package/src/superlocalmemory/core/registry.py +1 -1
- package/src/superlocalmemory/core/scale_engine.py +293 -0
- package/src/superlocalmemory/core/score_contract.py +62 -0
- package/src/superlocalmemory/core/security_primitives.py +3 -1
- package/src/superlocalmemory/core/slm_disabled.py +3 -5
- package/src/superlocalmemory/core/store_pipeline.py +172 -40
- package/src/superlocalmemory/core/tier_manager.py +32 -20
- package/src/superlocalmemory/core/worker_pool.py +13 -4
- package/src/superlocalmemory/dynamics/activation_guided_quantization.py +1 -1
- package/src/superlocalmemory/dynamics/eap_scheduler.py +10 -3
- package/src/superlocalmemory/dynamics/ebbinghaus_langevin_coupling.py +1 -1
- package/src/superlocalmemory/dynamics/fisher_langevin_coupling.py +1 -1
- package/src/superlocalmemory/encoding/auto_linker.py +1 -1
- package/src/superlocalmemory/encoding/cognitive_consolidator.py +7 -16
- package/src/superlocalmemory/encoding/consolidator.py +22 -5
- package/src/superlocalmemory/encoding/fact_extractor.py +1 -1
- package/src/superlocalmemory/encoding/foresight.py +2 -0
- package/src/superlocalmemory/encoding/graph_builder.py +1 -1
- package/src/superlocalmemory/encoding/temporal_parser.py +2 -0
- package/src/superlocalmemory/evaluation/__init__.py +13 -0
- package/src/superlocalmemory/evaluation/calibration.py +308 -0
- package/src/superlocalmemory/evolution/skill_evolver.py +2 -1
- package/src/superlocalmemory/graph/cozo_backend.py +256 -23
- package/src/superlocalmemory/hooks/_outcome_common.py +21 -11
- package/src/superlocalmemory/hooks/antigravity_adapter.py +10 -31
- package/src/superlocalmemory/hooks/auto_invoker.py +25 -27
- package/src/superlocalmemory/hooks/auto_recall.py +31 -6
- package/src/superlocalmemory/hooks/auto_recall_hook.py +13 -33
- package/src/superlocalmemory/hooks/before_web_hook.py +9 -7
- package/src/superlocalmemory/hooks/claude_code_hooks.py +126 -39
- package/src/superlocalmemory/hooks/codex_assets.py +59 -0
- package/src/superlocalmemory/hooks/codex_hooks.py +186 -0
- package/src/superlocalmemory/hooks/context_payload.py +1 -1
- package/src/superlocalmemory/hooks/copilot_adapter.py +9 -24
- package/src/superlocalmemory/hooks/cursor_adapter.py +10 -32
- package/src/superlocalmemory/hooks/hook_daemon.py +4 -2
- package/src/superlocalmemory/hooks/hook_handlers.py +241 -55
- package/src/superlocalmemory/hooks/memory_protocol.py +5 -3
- package/src/superlocalmemory/hooks/post_tool_async_hook.py +4 -2
- package/src/superlocalmemory/hooks/session_registry.py +15 -8
- package/src/superlocalmemory/hooks/stop_outcome_hook.py +10 -6
- package/src/superlocalmemory/hooks/topic_shift_hook.py +42 -12
- package/src/superlocalmemory/hooks/user_prompt_hook.py +9 -14
- package/src/superlocalmemory/hooks/user_prompt_rehash_hook.py +19 -11
- package/src/superlocalmemory/infra/auth_middleware.py +38 -5
- package/src/superlocalmemory/infra/backup.py +7 -5
- package/src/superlocalmemory/infra/cloud_backup.py +18 -8
- package/src/superlocalmemory/infra/daemon_identity.py +248 -0
- package/src/superlocalmemory/infra/data_root.py +199 -0
- package/src/superlocalmemory/infra/event_bus.py +3 -1
- package/src/superlocalmemory/infra/local_diagnostics.py +327 -0
- package/src/superlocalmemory/infra/process_reaper.py +23 -0
- package/src/superlocalmemory/ingestion/adapter_manager.py +27 -9
- package/src/superlocalmemory/ingestion/base_adapter.py +25 -31
- package/src/superlocalmemory/ingestion/calendar_adapter.py +13 -4
- package/src/superlocalmemory/ingestion/credentials.py +14 -7
- package/src/superlocalmemory/ingestion/gmail_adapter.py +13 -4
- package/src/superlocalmemory/ingestion/transcript_adapter.py +7 -2
- package/src/superlocalmemory/learning/consolidation_quantization_worker.py +1 -1
- package/src/superlocalmemory/learning/ensemble.py +11 -0
- package/src/superlocalmemory/learning/entity_compiler.py +1 -1
- package/src/superlocalmemory/learning/feedback.py +1 -1
- package/src/superlocalmemory/learning/forgetting_scheduler.py +12 -7
- package/src/superlocalmemory/learning/quantization_scheduler.py +1 -1
- package/src/superlocalmemory/learning/ranker.py +4 -1
- package/src/superlocalmemory/learning/source_quality.py +1 -1
- package/src/superlocalmemory/learning/trigram_index.py +3 -2
- package/src/superlocalmemory/llm/backbone.py +13 -8
- package/src/superlocalmemory/math/ebbinghaus.py +1 -1
- package/src/superlocalmemory/math/fisher.py +1 -1
- package/src/superlocalmemory/math/fisher_quantized.py +1 -1
- package/src/superlocalmemory/math/hopfield.py +1 -1
- package/src/superlocalmemory/math/langevin.py +1 -1
- package/src/superlocalmemory/math/polar_quant.py +3 -4
- package/src/superlocalmemory/math/qjl.py +1 -1
- package/src/superlocalmemory/math/sheaf.py +1 -1
- package/src/superlocalmemory/math/turbo_quant.py +3 -2
- package/src/superlocalmemory/mcp/_daemon_proxy.py +12 -11
- package/src/superlocalmemory/mcp/_pool_adapter.py +27 -0
- package/src/superlocalmemory/mcp/http_transport.py +53 -0
- package/src/superlocalmemory/mcp/server.py +39 -13
- package/src/superlocalmemory/mcp/shared.py +69 -3
- package/src/superlocalmemory/mcp/tools_active.py +141 -31
- package/src/superlocalmemory/mcp/tools_core.py +128 -29
- package/src/superlocalmemory/mcp/tools_evolution.py +5 -7
- package/src/superlocalmemory/mcp/tools_learning.py +42 -2
- package/src/superlocalmemory/mcp/tools_mesh.py +7 -23
- package/src/superlocalmemory/mcp/tools_optimize.py +8 -1
- package/src/superlocalmemory/mcp/tools_v28.py +23 -2
- package/src/superlocalmemory/mcp/tools_v3.py +26 -1
- package/src/superlocalmemory/mcp/tools_v33.py +56 -17
- package/src/superlocalmemory/mesh/broker.py +2 -0
- package/src/superlocalmemory/mesh/remote_sync.py +50 -12
- package/src/superlocalmemory/optimize/cache/manager.py +77 -1
- package/src/superlocalmemory/optimize/cache/semantic.py +23 -3
- package/src/superlocalmemory/optimize/compress/ccr.py +4 -0
- package/src/superlocalmemory/optimize/compress/router.py +6 -1
- package/src/superlocalmemory/optimize/config/__init__.py +5 -0
- package/src/superlocalmemory/optimize/config/store.py +6 -4
- package/src/superlocalmemory/optimize/proxy/_helpers.py +15 -5
- package/src/superlocalmemory/optimize/proxy/capture.py +3 -2
- package/src/superlocalmemory/optimize/proxy/server.py +2 -2
- package/src/superlocalmemory/optimize/storage/db.py +14 -13
- package/src/superlocalmemory/retrieval/agentic.py +1 -1
- package/src/superlocalmemory/retrieval/ann_index.py +1 -1
- package/src/superlocalmemory/retrieval/bm25_channel.py +35 -11
- package/src/superlocalmemory/retrieval/bridge_discovery.py +73 -8
- package/src/superlocalmemory/retrieval/engine.py +169 -79
- package/src/superlocalmemory/retrieval/entity_channel.py +289 -67
- package/src/superlocalmemory/retrieval/forgetting_filter.py +1 -1
- package/src/superlocalmemory/retrieval/fusion.py +1 -1
- package/src/superlocalmemory/retrieval/hopfield_channel.py +118 -30
- package/src/superlocalmemory/retrieval/profile_channel.py +1 -1
- package/src/superlocalmemory/retrieval/quantization_aware_search.py +16 -10
- package/src/superlocalmemory/retrieval/reranker.py +56 -20
- package/src/superlocalmemory/retrieval/scope_policy.py +85 -0
- package/src/superlocalmemory/retrieval/semantic_channel.py +122 -14
- package/src/superlocalmemory/retrieval/spreading_activation.py +141 -25
- package/src/superlocalmemory/retrieval/strategy.py +1 -1
- package/src/superlocalmemory/retrieval/temporal_channel.py +30 -15
- package/src/superlocalmemory/retrieval/vector_store.py +1 -1
- package/src/superlocalmemory/server/api.py +10 -7
- package/src/superlocalmemory/server/bandit_loops.py +4 -2
- package/src/superlocalmemory/server/recall_serializer.py +24 -0
- package/src/superlocalmemory/server/route_mutations.py +84 -0
- package/src/superlocalmemory/server/routes/agents.py +8 -6
- package/src/superlocalmemory/server/routes/brain.py +14 -12
- package/src/superlocalmemory/server/routes/chat.py +29 -12
- package/src/superlocalmemory/server/routes/data_io.py +55 -24
- package/src/superlocalmemory/server/routes/helpers.py +29 -4
- package/src/superlocalmemory/server/routes/ingest.py +53 -36
- package/src/superlocalmemory/server/routes/memories.py +104 -43
- package/src/superlocalmemory/server/routes/mesh.py +31 -0
- package/src/superlocalmemory/server/routes/profiles.py +26 -4
- package/src/superlocalmemory/server/routes/tiers.py +43 -11
- package/src/superlocalmemory/server/routes/timeline.py +5 -1
- package/src/superlocalmemory/server/routes/v3_api.py +76 -21
- package/src/superlocalmemory/server/security_middleware.py +1 -1
- package/src/superlocalmemory/server/ui.py +6 -3
- package/src/superlocalmemory/server/unified_daemon.py +680 -293
- package/src/superlocalmemory/server/write_identity.py +147 -0
- package/src/superlocalmemory/storage/access_log.py +4 -3
- package/src/superlocalmemory/storage/database.py +118 -25
- package/src/superlocalmemory/storage/migration_runner.py +84 -1
- package/src/superlocalmemory/storage/migration_v33.py +1 -1
- package/src/superlocalmemory/storage/migrations/M002_model_state_history.py +6 -60
- package/src/superlocalmemory/storage/migrations/M018_ingestion_operations.py +120 -0
- package/src/superlocalmemory/storage/migrations/M019_derivation_lineage.py +54 -0
- package/src/superlocalmemory/storage/migrations/M020_model_state_integrity.py +52 -0
- package/src/superlocalmemory/storage/migrations/__init__.py +5 -0
- package/src/superlocalmemory/storage/models.py +16 -0
- package/src/superlocalmemory/storage/quantized_store.py +20 -3
- package/src/superlocalmemory/storage/v2_migrator.py +5 -3
- package/src/superlocalmemory/ui/favicon.svg +5 -0
- package/src/superlocalmemory/ui/index.html +1 -0
- package/src/superlocalmemory/ui/js/compliance.js +1 -1
- package/src/superlocalmemory/ui/js/core.js +49 -8
- package/src/superlocalmemory/ui/js/dashboard.js +23 -2
- package/src/superlocalmemory/ui/js/feedback.js +1 -1
- package/src/superlocalmemory/ui/js/graph-filters.js +1 -1
- package/src/superlocalmemory/ui/js/graph-ui.js +1 -1
- package/src/superlocalmemory/ui/js/lifecycle.js +1 -1
- package/src/superlocalmemory/ui/js/ng-mesh.js +15 -49
- package/src/superlocalmemory/ui/js/settings.js +4 -2
- package/src/superlocalmemory/vector/lancedb_backend.py +57 -9
- package/bin/slm +0 -59
- package/bin/slm.bat +0 -77
- package/bin/slm.cmd +0 -5
- package/ide/integrations/langchain/README.md +0 -106
- package/ide/integrations/langchain/langchain_superlocalmemory/__init__.py +0 -9
- package/ide/integrations/langchain/langchain_superlocalmemory/chat_message_history.py +0 -201
- package/ide/integrations/langchain/pyproject.toml +0 -38
- package/ide/integrations/langchain/tests/__init__.py +0 -3
- package/ide/integrations/langchain/tests/test_chat_message_history.py +0 -215
- package/ide/integrations/langchain/tests/test_security.py +0 -117
- package/ide/integrations/llamaindex/README.md +0 -81
- package/ide/integrations/llamaindex/llama_index/storage/chat_store/superlocalmemory/__init__.py +0 -9
- package/ide/integrations/llamaindex/llama_index/storage/chat_store/superlocalmemory/base.py +0 -316
- package/ide/integrations/llamaindex/pyproject.toml +0 -43
- package/ide/integrations/llamaindex/tests/__init__.py +0 -3
- package/ide/integrations/llamaindex/tests/test_chat_store.py +0 -294
- package/ide/integrations/llamaindex/tests/test_security.py +0 -241
- package/plugin-src/.mcp.json +0 -12
- package/plugin-src/agents/slm-memory-advisor.md +0 -44
- package/plugin-src/agents/slm-optimize-advisor.md +0 -38
- package/plugin-src/hooks/.gitkeep +0 -0
- package/plugin-src/hooks/hooks.json +0 -23
- package/plugin-src/manifest.json +0 -25
- package/plugin-src/requirements.txt +0 -1
- package/plugin-src/rules/CLAUDE.md.fragment +0 -44
- package/plugin-src/scripts/ensure-venv.bat +0 -122
- package/plugin-src/scripts/ensure-venv.sh +0 -105
- package/plugin-src/scripts/slm-launch +0 -15
- package/plugin-src/scripts/slm-launch.bat +0 -17
- package/plugin-src/settings.json +0 -16
- package/plugin-src/skills/slm-cache/SKILL.md +0 -140
- package/plugin-src/skills/slm-compress/SKILL.md +0 -143
- package/plugin-src/skills/slm-graph/SKILL.md +0 -300
- package/plugin-src/skills/slm-recall/SKILL.md +0 -204
- package/plugin-src/skills/slm-remember/SKILL.md +0 -194
- package/plugin-src/skills/slm-session/SKILL.md +0 -207
- package/plugin-src/skills/slm-status/SKILL.md +0 -149
- package/scripts/__tests__/build-plugin.test.mjs +0 -613
- package/scripts/_savings_math.py +0 -270
- package/scripts/build-dmg.sh +0 -417
- package/scripts/build-plugin.js +0 -742
- package/scripts/build-slm-hook.ps1 +0 -40
- package/scripts/build-slm-hook.sh +0 -45
- package/scripts/build_entry.py +0 -452
- package/scripts/ci/stage5b_gate.sh +0 -50
- package/scripts/dogfood_savings.py +0 -490
- package/scripts/generate-thumbnails.py +0 -218
- package/scripts/install-skills.ps1 +0 -4
- package/scripts/install-skills.sh +0 -5
- package/scripts/install.ps1 +0 -701
- package/scripts/install.sh +0 -1015
- package/scripts/postinstall_binary.js +0 -287
- package/scripts/prepack.js +0 -33
- package/scripts/release_manifest.py +0 -273
- package/scripts/slm-hook.spec +0 -56
- package/scripts/start-dashboard.ps1 +0 -52
- package/scripts/start-dashboard.sh +0 -41
- package/scripts/sync-wiki.ps1 +0 -127
- package/scripts/sync-wiki.sh +0 -82
- package/scripts/test-dmg.sh +0 -161
- package/scripts/test-npm-package.ps1 +0 -252
- package/scripts/test-npm-package.sh +0 -207
- package/scripts/verify-install.ps1 +0 -294
- package/scripts/verify-install.sh +0 -266
- package/scripts/verify-v27.ps1 +0 -301
- package/scripts/verify-v27.sh +0 -233
- package/src/superlocalmemory.egg-info/PKG-INFO +0 -513
- package/src/superlocalmemory.egg-info/SOURCES.txt +0 -529
- package/src/superlocalmemory.egg-info/dependency_links.txt +0 -1
- package/src/superlocalmemory.egg-info/entry_points.txt +0 -2
- package/src/superlocalmemory.egg-info/requires.txt +0 -71
- package/src/superlocalmemory.egg-info/top_level.txt +0 -1
package/scripts/install.ps1
DELETED
|
@@ -1,701 +0,0 @@
|
|
|
1
|
-
# ============================================================================
|
|
2
|
-
# SuperLocalMemory V3 - Windows Installation Script (PowerShell)
|
|
3
|
-
# Copyright (c) 2026 Varun Pratap Bhardwaj
|
|
4
|
-
# Licensed under MIT License
|
|
5
|
-
# Repository: https://github.com/qualixar/superlocalmemory
|
|
6
|
-
# ============================================================================
|
|
7
|
-
|
|
8
|
-
# IMPORTANT: param() must be the FIRST executable statement in PowerShell
|
|
9
|
-
param(
|
|
10
|
-
[switch]$NonInteractive,
|
|
11
|
-
[switch]$Auto,
|
|
12
|
-
[switch]$Yes,
|
|
13
|
-
[switch]$y
|
|
14
|
-
)
|
|
15
|
-
|
|
16
|
-
$ErrorActionPreference = "Stop"
|
|
17
|
-
|
|
18
|
-
$INSTALL_DIR = if ($env:SL_MEMORY_PATH) { $env:SL_MEMORY_PATH } else { Join-Path $env:USERPROFILE ".superlocalmemory" }
|
|
19
|
-
$REPO_DIR = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
20
|
-
|
|
21
|
-
# Auto-detect non-interactive environment
|
|
22
|
-
$NON_INTERACTIVE = $false
|
|
23
|
-
if (-not [Environment]::UserInteractive) {
|
|
24
|
-
$NON_INTERACTIVE = $true
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
if ($NonInteractive -or $Auto -or $Yes -or $y) {
|
|
28
|
-
$NON_INTERACTIVE = $true
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
# Print banner
|
|
32
|
-
Write-Host ""
|
|
33
|
-
Write-Host "=================================================================="
|
|
34
|
-
Write-Host " SuperLocalMemory V3 - Windows Installation "
|
|
35
|
-
Write-Host " by Varun Pratap Bhardwaj "
|
|
36
|
-
Write-Host " https://github.com/qualixar/superlocalmemory "
|
|
37
|
-
Write-Host "=================================================================="
|
|
38
|
-
Write-Host ""
|
|
39
|
-
|
|
40
|
-
# Show mode if non-interactive
|
|
41
|
-
if ($NON_INTERACTIVE) {
|
|
42
|
-
Write-Host "🤖 Running in non-interactive mode" -ForegroundColor Cyan
|
|
43
|
-
Write-Host " Skipping optional prompts, using defaults" -ForegroundColor Cyan
|
|
44
|
-
Write-Host ""
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
# Check Python version
|
|
48
|
-
Write-Host "Checking Python version..."
|
|
49
|
-
try {
|
|
50
|
-
$PYTHON_VERSION = & python -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')" 2>&1
|
|
51
|
-
$PYTHON_MAJOR = & python -c "import sys; print(sys.version_info.major)" 2>&1
|
|
52
|
-
$PYTHON_MINOR = & python -c "import sys; print(sys.version_info.minor)" 2>&1
|
|
53
|
-
|
|
54
|
-
if ([int]$PYTHON_MAJOR -lt 3 -or ([int]$PYTHON_MAJOR -eq 3 -and [int]$PYTHON_MINOR -lt 8)) {
|
|
55
|
-
Write-Host "ERROR: Python 3.8+ required (found $PYTHON_VERSION)" -ForegroundColor Red
|
|
56
|
-
exit 1
|
|
57
|
-
}
|
|
58
|
-
Write-Host "OK Python $PYTHON_VERSION" -ForegroundColor Green
|
|
59
|
-
} catch {
|
|
60
|
-
Write-Host "ERROR: Python not found in PATH" -ForegroundColor Red
|
|
61
|
-
Write-Host "Install Python 3.8+ from https://www.python.org/downloads/" -ForegroundColor Yellow
|
|
62
|
-
Write-Host "Make sure to check 'Add Python to PATH' during installation" -ForegroundColor Yellow
|
|
63
|
-
exit 1
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
# Create installation directory
|
|
67
|
-
Write-Host ""
|
|
68
|
-
Write-Host "Creating installation directory..."
|
|
69
|
-
if (-not (Test-Path $INSTALL_DIR)) {
|
|
70
|
-
New-Item -ItemType Directory -Path $INSTALL_DIR -Force | Out-Null
|
|
71
|
-
}
|
|
72
|
-
Write-Host "OK Directory: $INSTALL_DIR" -ForegroundColor Green
|
|
73
|
-
|
|
74
|
-
# Copy source files
|
|
75
|
-
Write-Host ""
|
|
76
|
-
Write-Host "Copying source files..."
|
|
77
|
-
$srcDir = Join-Path $REPO_DIR "src"
|
|
78
|
-
if (Test-Path $srcDir) {
|
|
79
|
-
Copy-Item -Path (Join-Path $srcDir "*") -Destination $INSTALL_DIR -Recurse -Force
|
|
80
|
-
Write-Host "OK Source files copied" -ForegroundColor Green
|
|
81
|
-
} else {
|
|
82
|
-
Write-Host "WARNING: Source directory not found, skipping" -ForegroundColor Yellow
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
# Copy hooks
|
|
86
|
-
Write-Host "Copying hooks..."
|
|
87
|
-
$hooksDir = Join-Path $REPO_DIR "hooks"
|
|
88
|
-
$installHooksDir = Join-Path $INSTALL_DIR "hooks"
|
|
89
|
-
if (-not (Test-Path $installHooksDir)) {
|
|
90
|
-
New-Item -ItemType Directory -Path $installHooksDir -Force | Out-Null
|
|
91
|
-
}
|
|
92
|
-
if (Test-Path $hooksDir) {
|
|
93
|
-
Copy-Item -Path (Join-Path $hooksDir "*") -Destination $installHooksDir -Recurse -Force
|
|
94
|
-
Write-Host "OK Hooks copied" -ForegroundColor Green
|
|
95
|
-
} else {
|
|
96
|
-
Write-Host "INFO: No hooks to copy" -ForegroundColor Yellow
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
# Copy CLI wrappers
|
|
100
|
-
Write-Host "Copying CLI wrappers..."
|
|
101
|
-
$binDir = Join-Path $REPO_DIR "bin"
|
|
102
|
-
$installBinDir = Join-Path $INSTALL_DIR "bin"
|
|
103
|
-
if (-not (Test-Path $installBinDir)) {
|
|
104
|
-
New-Item -ItemType Directory -Path $installBinDir -Force | Out-Null
|
|
105
|
-
}
|
|
106
|
-
if (Test-Path $binDir) {
|
|
107
|
-
Copy-Item -Path (Join-Path $binDir "*") -Destination $installBinDir -Recurse -Force
|
|
108
|
-
Write-Host "OK CLI wrappers installed" -ForegroundColor Green
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
# Copy API server
|
|
112
|
-
$apiServerPath = Join-Path $REPO_DIR "api_server.py"
|
|
113
|
-
if (Test-Path $apiServerPath) {
|
|
114
|
-
Copy-Item -Path $apiServerPath -Destination $INSTALL_DIR -Force
|
|
115
|
-
Write-Host "OK API server copied" -ForegroundColor Green
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
# Copy UI server
|
|
119
|
-
$uiServerPath = Join-Path $REPO_DIR "ui_server.py"
|
|
120
|
-
if (Test-Path $uiServerPath) {
|
|
121
|
-
Copy-Item -Path $uiServerPath -Destination $INSTALL_DIR -Force
|
|
122
|
-
Write-Host "OK UI server copied" -ForegroundColor Green
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
# Copy security middleware (required by ui_server.py)
|
|
126
|
-
$securityMiddlewarePath = Join-Path $REPO_DIR "security_middleware.py"
|
|
127
|
-
if (Test-Path $securityMiddlewarePath) {
|
|
128
|
-
Copy-Item -Path $securityMiddlewarePath -Destination $INSTALL_DIR -Force
|
|
129
|
-
Write-Host "OK Security middleware copied" -ForegroundColor Green
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
# Copy routes (required by ui_server.py)
|
|
133
|
-
$routesDir = Join-Path $REPO_DIR "routes"
|
|
134
|
-
$installRoutesDir = Join-Path $INSTALL_DIR "routes"
|
|
135
|
-
if (Test-Path $routesDir) {
|
|
136
|
-
if (-not (Test-Path $installRoutesDir)) {
|
|
137
|
-
New-Item -ItemType Directory -Path $installRoutesDir -Force | Out-Null
|
|
138
|
-
}
|
|
139
|
-
Copy-Item -Path (Join-Path $routesDir "*") -Destination $installRoutesDir -Recurse -Force
|
|
140
|
-
Write-Host "OK Routes copied" -ForegroundColor Green
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
# Copy UI assets (required by ui_server.py)
|
|
144
|
-
$uiDir = Join-Path $REPO_DIR "ui"
|
|
145
|
-
$installUiDir = Join-Path $INSTALL_DIR "ui"
|
|
146
|
-
if (Test-Path $uiDir) {
|
|
147
|
-
if (-not (Test-Path $installUiDir)) {
|
|
148
|
-
New-Item -ItemType Directory -Path $installUiDir -Force | Out-Null
|
|
149
|
-
}
|
|
150
|
-
Copy-Item -Path (Join-Path $uiDir "*") -Destination $installUiDir -Recurse -Force
|
|
151
|
-
Write-Host "OK UI assets copied" -ForegroundColor Green
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
# Copy MCP server
|
|
155
|
-
$mcpServerPath = Join-Path $REPO_DIR "mcp_server.py"
|
|
156
|
-
if (Test-Path $mcpServerPath) {
|
|
157
|
-
Copy-Item -Path $mcpServerPath -Destination $INSTALL_DIR -Force
|
|
158
|
-
Write-Host "OK MCP Server installed" -ForegroundColor Green
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
# Copy config if not exists
|
|
162
|
-
$configPath = Join-Path $INSTALL_DIR "config.json"
|
|
163
|
-
if (-not (Test-Path $configPath)) {
|
|
164
|
-
Write-Host "Creating default config..."
|
|
165
|
-
$repoConfigPath = Join-Path $REPO_DIR "config.json"
|
|
166
|
-
if (Test-Path $repoConfigPath) {
|
|
167
|
-
Copy-Item -Path $repoConfigPath -Destination $configPath -Force
|
|
168
|
-
Write-Host "OK Config created" -ForegroundColor Green
|
|
169
|
-
} else {
|
|
170
|
-
Write-Host "WARNING: config.json not found, using defaults" -ForegroundColor Yellow
|
|
171
|
-
}
|
|
172
|
-
} else {
|
|
173
|
-
Write-Host "INFO: Config exists (keeping existing)" -ForegroundColor Yellow
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
# Create necessary directories
|
|
177
|
-
Write-Host ""
|
|
178
|
-
Write-Host "Creating directories..."
|
|
179
|
-
$directories = @("backups", "profiles", "vectors", "cold-storage", "jobs")
|
|
180
|
-
foreach ($dir in $directories) {
|
|
181
|
-
$dirPath = Join-Path $INSTALL_DIR $dir
|
|
182
|
-
if (-not (Test-Path $dirPath)) {
|
|
183
|
-
New-Item -ItemType Directory -Path $dirPath -Force | Out-Null
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
Write-Host "OK Directories created" -ForegroundColor Green
|
|
187
|
-
|
|
188
|
-
# Initialize database
|
|
189
|
-
Write-Host ""
|
|
190
|
-
Write-Host "Initializing database..."
|
|
191
|
-
$setupValidatorPath = Join-Path $INSTALL_DIR "setup_validator.py"
|
|
192
|
-
if (Test-Path $setupValidatorPath) {
|
|
193
|
-
try {
|
|
194
|
-
& python $setupValidatorPath --init 2>$null | Out-Null
|
|
195
|
-
Write-Host "OK Database initialized" -ForegroundColor Green
|
|
196
|
-
} catch {
|
|
197
|
-
Write-Host "WARNING: Database init failed, creating basic schema..." -ForegroundColor Yellow
|
|
198
|
-
# Fallback: create basic database
|
|
199
|
-
& python -c @"
|
|
200
|
-
import sqlite3
|
|
201
|
-
import os
|
|
202
|
-
from pathlib import Path
|
|
203
|
-
db_path = Path(os.environ.get('SL_MEMORY_PATH') or str(Path.home() / '.superlocalmemory')) / 'memory.db'
|
|
204
|
-
conn = sqlite3.connect(db_path)
|
|
205
|
-
cursor = conn.cursor()
|
|
206
|
-
cursor.execute('''CREATE TABLE IF NOT EXISTS memories (
|
|
207
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
208
|
-
content TEXT NOT NULL,
|
|
209
|
-
summary TEXT,
|
|
210
|
-
project_path TEXT,
|
|
211
|
-
project_name TEXT,
|
|
212
|
-
tags TEXT DEFAULT '[]',
|
|
213
|
-
category TEXT,
|
|
214
|
-
parent_id INTEGER,
|
|
215
|
-
tree_path TEXT DEFAULT '/',
|
|
216
|
-
depth INTEGER DEFAULT 0,
|
|
217
|
-
memory_type TEXT DEFAULT 'session',
|
|
218
|
-
importance INTEGER DEFAULT 5,
|
|
219
|
-
content_hash TEXT,
|
|
220
|
-
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
221
|
-
last_accessed TIMESTAMP,
|
|
222
|
-
access_count INTEGER DEFAULT 0,
|
|
223
|
-
cluster_id INTEGER
|
|
224
|
-
)''')
|
|
225
|
-
cursor.execute('CREATE TABLE IF NOT EXISTS sessions (id INTEGER PRIMARY KEY AUTOINCREMENT, session_id TEXT UNIQUE, project_path TEXT, started_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, ended_at TIMESTAMP, summary TEXT)')
|
|
226
|
-
conn.commit()
|
|
227
|
-
conn.close()
|
|
228
|
-
print('Database ready')
|
|
229
|
-
"@
|
|
230
|
-
Write-Host "OK Database initialized (fallback)" -ForegroundColor Green
|
|
231
|
-
}
|
|
232
|
-
} else {
|
|
233
|
-
Write-Host "WARNING: setup_validator.py not found, skipping database init" -ForegroundColor Yellow
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
# Install SuperLocalMemory and all dependencies via pyproject.toml (single source of truth)
|
|
237
|
-
Write-Host ""
|
|
238
|
-
Write-Host "Installing SuperLocalMemory and all dependencies..."
|
|
239
|
-
Write-Host "INFO: Versions are pinned in pyproject.toml -- same versions for every install path" -ForegroundColor Yellow
|
|
240
|
-
|
|
241
|
-
# Find pyproject.toml (parent of scripts/ or scripts/ itself)
|
|
242
|
-
$ParentDir = Split-Path -Parent $REPO_DIR
|
|
243
|
-
if (Test-Path (Join-Path $ParentDir "pyproject.toml")) {
|
|
244
|
-
$ProjRoot = $ParentDir
|
|
245
|
-
} elseif (Test-Path (Join-Path $REPO_DIR "pyproject.toml")) {
|
|
246
|
-
$ProjRoot = $REPO_DIR
|
|
247
|
-
} else {
|
|
248
|
-
$ProjRoot = $null
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
if ($ProjRoot) {
|
|
252
|
-
try {
|
|
253
|
-
& python -m pip install -q -e $ProjRoot 2>$null
|
|
254
|
-
Write-Host "OK SuperLocalMemory and all dependencies installed (pinned versions)" -ForegroundColor Green
|
|
255
|
-
} catch {
|
|
256
|
-
Write-Host "WARNING: Dependency installation failed." -ForegroundColor Yellow
|
|
257
|
-
Write-Host " Install manually: python -m pip install -e $ProjRoot" -ForegroundColor Yellow
|
|
258
|
-
}
|
|
259
|
-
} else {
|
|
260
|
-
Write-Host "WARNING: pyproject.toml not found, cannot install dependencies" -ForegroundColor Yellow
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
# Verify critical dependency versions (pip resolver can override pins)
|
|
264
|
-
Write-Host ""
|
|
265
|
-
Write-Host "Verifying critical dependency versions..."
|
|
266
|
-
$criticalDeps = @{ "sentence_transformers" = "5.3.0"; "onnxruntime" = "1.24.4" }
|
|
267
|
-
foreach ($mod in $criticalDeps.Keys) {
|
|
268
|
-
$expected = $criticalDeps[$mod]
|
|
269
|
-
$pipName = $mod.Replace("_", "-")
|
|
270
|
-
$actual = & python -c "import $mod; print(getattr($mod,'__version__',''))" 2>$null
|
|
271
|
-
if ($actual -and $actual -ne $expected) {
|
|
272
|
-
Write-Host "WARNING: $pipName is $actual, expected $expected. Fixing..." -ForegroundColor Yellow
|
|
273
|
-
& python -m pip install -q "$pipName==$expected" 2>$null
|
|
274
|
-
Write-Host "OK $pipName==$expected installed" -ForegroundColor Green
|
|
275
|
-
} elseif ($actual -eq $expected) {
|
|
276
|
-
Write-Host "OK $mod==$expected" -ForegroundColor Green
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
# Initialize knowledge graph and pattern learning
|
|
281
|
-
Write-Host ""
|
|
282
|
-
Write-Host "Initializing advanced features..."
|
|
283
|
-
|
|
284
|
-
# Add sample memories if database is empty (for first-time users)
|
|
285
|
-
$memoryCount = & python -c @"
|
|
286
|
-
import sqlite3
|
|
287
|
-
import os
|
|
288
|
-
from pathlib import Path
|
|
289
|
-
db_path = Path(os.environ.get('SL_MEMORY_PATH') or str(Path.home() / '.superlocalmemory')) / 'memory.db'
|
|
290
|
-
conn = sqlite3.connect(db_path)
|
|
291
|
-
cursor = conn.cursor()
|
|
292
|
-
cursor.execute('SELECT COUNT(*) FROM memories')
|
|
293
|
-
print(cursor.fetchone()[0])
|
|
294
|
-
conn.close()
|
|
295
|
-
"@ 2>$null
|
|
296
|
-
|
|
297
|
-
if (-not $memoryCount) { $memoryCount = 0 }
|
|
298
|
-
|
|
299
|
-
if ([int]$memoryCount -eq 0) {
|
|
300
|
-
Write-Host "INFO: Adding sample memories for demonstration..." -ForegroundColor Yellow
|
|
301
|
-
& python "$INSTALL_DIR\superlocalmemory.cli.main" add "SuperLocalMemory V2 is a local-first, privacy-focused memory system for AI assistants. All data stays on your machine." --tags "supermemory,system,intro" --importance 8 2>$null | Out-Null
|
|
302
|
-
& python "$INSTALL_DIR\superlocalmemory.cli.main" add "Knowledge graph uses TF-IDF for entity extraction and Leiden clustering for community detection." --tags "architecture,graph" --importance 7 2>$null | Out-Null
|
|
303
|
-
& python "$INSTALL_DIR\superlocalmemory.cli.main" add "Pattern learning analyzes your coding preferences, style, and terminology to provide better context." --tags "architecture,patterns" --importance 7 2>$null | Out-Null
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
# Build knowledge graph (Layer 3)
|
|
307
|
-
Write-Host "INFO: Building knowledge graph..." -ForegroundColor Yellow
|
|
308
|
-
try {
|
|
309
|
-
& python "$INSTALL_DIR\graph_engine.py" build 2>$null | Out-Null
|
|
310
|
-
Write-Host " OK Knowledge graph initialized" -ForegroundColor Green
|
|
311
|
-
} catch {
|
|
312
|
-
Write-Host " WARNING: Graph build skipped (dependencies not installed)" -ForegroundColor Yellow
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
# Run pattern learning (Layer 4)
|
|
316
|
-
Write-Host "INFO: Learning patterns..." -ForegroundColor Yellow
|
|
317
|
-
try {
|
|
318
|
-
& python "$INSTALL_DIR\pattern_learner.py" update 2>$null | Out-Null
|
|
319
|
-
$patternCount = & python -c @"
|
|
320
|
-
import sqlite3
|
|
321
|
-
import os
|
|
322
|
-
from pathlib import Path
|
|
323
|
-
db_path = Path(os.environ.get('SL_MEMORY_PATH') or str(Path.home() / '.superlocalmemory')) / 'memory.db'
|
|
324
|
-
conn = sqlite3.connect(db_path)
|
|
325
|
-
cursor = conn.cursor()
|
|
326
|
-
cursor.execute('SELECT COUNT(*) FROM identity_patterns')
|
|
327
|
-
count = cursor.fetchone()[0]
|
|
328
|
-
conn.close()
|
|
329
|
-
print(count)
|
|
330
|
-
"@ 2>$null
|
|
331
|
-
if (-not $patternCount) { $patternCount = 0 }
|
|
332
|
-
Write-Host " OK Pattern learning complete ($patternCount patterns found)" -ForegroundColor Green
|
|
333
|
-
} catch {
|
|
334
|
-
Write-Host " WARNING: Pattern learning skipped (dependencies not installed)" -ForegroundColor Yellow
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
# Check optional dependencies
|
|
338
|
-
Write-Host ""
|
|
339
|
-
Write-Host "Checking optional dependencies..."
|
|
340
|
-
$dependencies = @{
|
|
341
|
-
"sklearn" = "scikit-learn (Knowledge Graph)"
|
|
342
|
-
"numpy" = "numpy (Vector Operations)"
|
|
343
|
-
"igraph" = "python-igraph (Clustering)"
|
|
344
|
-
"fastapi" = "fastapi (UI Server)"
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
foreach ($module in $dependencies.Keys) {
|
|
348
|
-
try {
|
|
349
|
-
& python -c "import $module" 2>$null
|
|
350
|
-
Write-Host "OK $($dependencies[$module])" -ForegroundColor Green
|
|
351
|
-
} catch {
|
|
352
|
-
Write-Host "INFO: $($dependencies[$module]) not installed (optional)" -ForegroundColor Yellow
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
# Configure PATH
|
|
357
|
-
Write-Host ""
|
|
358
|
-
Write-Host "Configuring PATH..."
|
|
359
|
-
$userPath = [Environment]::GetEnvironmentVariable("PATH", "User")
|
|
360
|
-
if ($userPath -notlike "*$installBinDir*") {
|
|
361
|
-
$newPath = "$installBinDir;$userPath"
|
|
362
|
-
[Environment]::SetEnvironmentVariable("PATH", $newPath, "User")
|
|
363
|
-
Write-Host "OK PATH configured (restart terminal to use commands)" -ForegroundColor Green
|
|
364
|
-
$env:PATH = "$installBinDir;$env:PATH"
|
|
365
|
-
} else {
|
|
366
|
-
Write-Host "INFO: PATH already configured" -ForegroundColor Yellow
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
# ============================================================================
|
|
370
|
-
# MCP Auto-Configuration — Detect and configure AI tools
|
|
371
|
-
# ============================================================================
|
|
372
|
-
Write-Host ""
|
|
373
|
-
Write-Host "=================================================================="
|
|
374
|
-
Write-Host " Universal Integration - Auto-Detection "
|
|
375
|
-
Write-Host "=================================================================="
|
|
376
|
-
Write-Host ""
|
|
377
|
-
Write-Host "Detecting installed AI tools..."
|
|
378
|
-
Write-Host ""
|
|
379
|
-
|
|
380
|
-
# Use Continue for MCP section so missing tools don't abort the installer
|
|
381
|
-
$savedErrorAction = $ErrorActionPreference
|
|
382
|
-
$ErrorActionPreference = "Continue"
|
|
383
|
-
|
|
384
|
-
$DETECTED_TOOLS = @()
|
|
385
|
-
|
|
386
|
-
# Helper: configure MCP for a given tool using its template
|
|
387
|
-
function Configure-McpTool {
|
|
388
|
-
param(
|
|
389
|
-
[string]$ToolName,
|
|
390
|
-
[string]$TemplatePath,
|
|
391
|
-
[string]$ConfigPath
|
|
392
|
-
)
|
|
393
|
-
|
|
394
|
-
if (-not (Test-Path $TemplatePath)) {
|
|
395
|
-
Write-Host " WARNING: Template not found for $ToolName — skipping" -ForegroundColor Yellow
|
|
396
|
-
return
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
# Create config directory if needed
|
|
400
|
-
$configDir = Split-Path -Parent $ConfigPath
|
|
401
|
-
if (-not (Test-Path $configDir)) {
|
|
402
|
-
New-Item -ItemType Directory -Path $configDir -Force | Out-Null
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
# Check if already configured
|
|
406
|
-
if ((Test-Path $ConfigPath) -and (Select-String -Path $ConfigPath -Pattern "superlocalmemory" -Quiet -ErrorAction SilentlyContinue)) {
|
|
407
|
-
Write-Host " INFO: $ToolName already configured" -ForegroundColor Yellow
|
|
408
|
-
return
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
# Backup existing config with timestamp
|
|
412
|
-
if (Test-Path $ConfigPath) {
|
|
413
|
-
$timestamp = Get-Date -Format "yyyyMMdd-HHmmss"
|
|
414
|
-
Copy-Item -Path $ConfigPath -Destination "$ConfigPath.backup.$timestamp" -Force
|
|
415
|
-
Write-Host " OK Backed up existing $ToolName config" -ForegroundColor Green
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
# Read template, substitute install path, fix command for Windows (python not python3)
|
|
419
|
-
$configContent = (Get-Content $TemplatePath -Raw) -replace '\{\{INSTALL_DIR\}\}', ($INSTALL_DIR -replace '\\', '\\')
|
|
420
|
-
$configContent = $configContent -replace '"python3"', '"python"'
|
|
421
|
-
Set-Content -Path $ConfigPath -Value $configContent -Encoding UTF8 -Force
|
|
422
|
-
|
|
423
|
-
Write-Host " OK $ToolName MCP configured" -ForegroundColor Green
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
# Copy MCP server to install directory (ensure it is present)
|
|
427
|
-
$mcpServerSrc = Join-Path $REPO_DIR "mcp_server.py"
|
|
428
|
-
if (Test-Path $mcpServerSrc) {
|
|
429
|
-
Copy-Item -Path $mcpServerSrc -Destination $INSTALL_DIR -Force
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
# --- 1. Claude Desktop ---
|
|
433
|
-
$claudeAppData = Join-Path $env:APPDATA "Claude"
|
|
434
|
-
if (Test-Path $claudeAppData) {
|
|
435
|
-
$DETECTED_TOOLS += "Claude Desktop"
|
|
436
|
-
$template = Join-Path $REPO_DIR "configs\claude-desktop-mcp.json"
|
|
437
|
-
$configDest = Join-Path $claudeAppData "claude_desktop_config.json"
|
|
438
|
-
Configure-McpTool -ToolName "Claude Desktop" -TemplatePath $template -ConfigPath $configDest
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
# --- 2. Cursor ---
|
|
442
|
-
$cursorDir = Join-Path $env:USERPROFILE ".cursor"
|
|
443
|
-
$cursorCmd = Get-Command cursor -ErrorAction SilentlyContinue
|
|
444
|
-
if ((Test-Path $cursorDir) -or $cursorCmd) {
|
|
445
|
-
$DETECTED_TOOLS += "Cursor"
|
|
446
|
-
$template = Join-Path $REPO_DIR "configs\cursor-mcp.json"
|
|
447
|
-
$configDest = Join-Path $cursorDir "mcp_settings.json"
|
|
448
|
-
Configure-McpTool -ToolName "Cursor" -TemplatePath $template -ConfigPath $configDest
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
# --- 3. Windsurf ---
|
|
452
|
-
$windsurfDir = Join-Path $env:USERPROFILE ".windsurf"
|
|
453
|
-
$windsurfCmd = Get-Command windsurf -ErrorAction SilentlyContinue
|
|
454
|
-
if ((Test-Path $windsurfDir) -or $windsurfCmd) {
|
|
455
|
-
$DETECTED_TOOLS += "Windsurf"
|
|
456
|
-
$template = Join-Path $REPO_DIR "configs\windsurf-mcp.json"
|
|
457
|
-
$configDest = Join-Path $windsurfDir "mcp_settings.json"
|
|
458
|
-
Configure-McpTool -ToolName "Windsurf" -TemplatePath $template -ConfigPath $configDest
|
|
459
|
-
}
|
|
460
|
-
|
|
461
|
-
# --- 4. VS Code / GitHub Copilot ---
|
|
462
|
-
$vscodeCmd = Get-Command code -ErrorAction SilentlyContinue
|
|
463
|
-
$vscodeInsidersCmd = Get-Command code-insiders -ErrorAction SilentlyContinue
|
|
464
|
-
if ($vscodeCmd -or $vscodeInsidersCmd) {
|
|
465
|
-
$DETECTED_TOOLS += "VS Code/Copilot"
|
|
466
|
-
$template = Join-Path $REPO_DIR "configs\vscode-copilot-mcp.json"
|
|
467
|
-
$vscodeDir = Join-Path $env:USERPROFILE ".vscode"
|
|
468
|
-
$configDest = Join-Path $vscodeDir "mcp.json"
|
|
469
|
-
Configure-McpTool -ToolName "VS Code/Copilot" -TemplatePath $template -ConfigPath $configDest
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
# --- 5. Gemini CLI ---
|
|
473
|
-
$geminiCmd = Get-Command gemini -ErrorAction SilentlyContinue
|
|
474
|
-
$geminiSettings = Join-Path $env:USERPROFILE ".gemini\settings.json"
|
|
475
|
-
if ($geminiCmd -or (Test-Path $geminiSettings)) {
|
|
476
|
-
$DETECTED_TOOLS += "Gemini CLI"
|
|
477
|
-
$template = Join-Path $REPO_DIR "configs\gemini-cli-mcp.json"
|
|
478
|
-
$geminiDir = Join-Path $env:USERPROFILE ".gemini"
|
|
479
|
-
$configDest = Join-Path $geminiDir "settings.json"
|
|
480
|
-
Configure-McpTool -ToolName "Gemini CLI" -TemplatePath $template -ConfigPath $configDest
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
# --- 6. Codex CLI ---
|
|
484
|
-
$codexDir = Join-Path $env:USERPROFILE ".codex"
|
|
485
|
-
$codexCmd = Get-Command codex -ErrorAction SilentlyContinue
|
|
486
|
-
if ((Test-Path $codexDir) -or $codexCmd) {
|
|
487
|
-
$DETECTED_TOOLS += "Codex CLI"
|
|
488
|
-
|
|
489
|
-
$codexConfigured = $false
|
|
490
|
-
|
|
491
|
-
# Preferred: use native codex mcp add command
|
|
492
|
-
if ($codexCmd) {
|
|
493
|
-
try {
|
|
494
|
-
& codex mcp add superlocalmemory-v2 --env "PYTHONPATH=$INSTALL_DIR" -- python "$INSTALL_DIR\mcp_server.py" 2>$null
|
|
495
|
-
Write-Host " OK Codex CLI MCP configured (via codex mcp add)" -ForegroundColor Green
|
|
496
|
-
$codexConfigured = $true
|
|
497
|
-
} catch {
|
|
498
|
-
# codex mcp add failed — fall through to TOML method
|
|
499
|
-
}
|
|
500
|
-
}
|
|
501
|
-
|
|
502
|
-
# Fallback: write TOML config directly
|
|
503
|
-
if (-not $codexConfigured) {
|
|
504
|
-
$codexConfig = Join-Path $codexDir "config.toml"
|
|
505
|
-
if (-not (Test-Path $codexDir)) {
|
|
506
|
-
New-Item -ItemType Directory -Path $codexDir -Force | Out-Null
|
|
507
|
-
}
|
|
508
|
-
|
|
509
|
-
if ((Test-Path $codexConfig) -and (Select-String -Path $codexConfig -Pattern "superlocalmemory-v2" -Quiet -ErrorAction SilentlyContinue)) {
|
|
510
|
-
Write-Host " INFO: Codex CLI already configured" -ForegroundColor Yellow
|
|
511
|
-
} else {
|
|
512
|
-
# Backup existing config
|
|
513
|
-
if (Test-Path $codexConfig) {
|
|
514
|
-
$timestamp = Get-Date -Format "yyyyMMdd-HHmmss"
|
|
515
|
-
Copy-Item -Path $codexConfig -Destination "$codexConfig.backup.$timestamp" -Force
|
|
516
|
-
Write-Host " OK Backed up existing Codex CLI config" -ForegroundColor Green
|
|
517
|
-
}
|
|
518
|
-
|
|
519
|
-
# Append TOML block
|
|
520
|
-
$tomlBlock = @"
|
|
521
|
-
|
|
522
|
-
[mcp_servers.superlocalmemory-v2]
|
|
523
|
-
command = "python"
|
|
524
|
-
args = ["$INSTALL_DIR\mcp_server.py"]
|
|
525
|
-
|
|
526
|
-
[mcp_servers.superlocalmemory-v2.env]
|
|
527
|
-
PYTHONPATH = "$INSTALL_DIR"
|
|
528
|
-
"@
|
|
529
|
-
Add-Content -Path $codexConfig -Value $tomlBlock -Encoding UTF8
|
|
530
|
-
Write-Host " OK Codex CLI MCP configured (TOML appended)" -ForegroundColor Green
|
|
531
|
-
}
|
|
532
|
-
}
|
|
533
|
-
}
|
|
534
|
-
|
|
535
|
-
# --- 7. Perplexity ---
|
|
536
|
-
$perplexityDir = Join-Path $env:USERPROFILE ".perplexity"
|
|
537
|
-
if (Test-Path $perplexityDir) {
|
|
538
|
-
$DETECTED_TOOLS += "Perplexity"
|
|
539
|
-
$template = Join-Path $REPO_DIR "configs\perplexity-mcp.json"
|
|
540
|
-
$configDest = Join-Path $perplexityDir "mcp.json"
|
|
541
|
-
Configure-McpTool -ToolName "Perplexity" -TemplatePath $template -ConfigPath $configDest
|
|
542
|
-
}
|
|
543
|
-
|
|
544
|
-
# --- 8. OpenCode ---
|
|
545
|
-
$opencodeDir = Join-Path $env:USERPROFILE ".opencode"
|
|
546
|
-
if (Test-Path $opencodeDir) {
|
|
547
|
-
$DETECTED_TOOLS += "OpenCode"
|
|
548
|
-
$template = Join-Path $REPO_DIR "configs\opencode-mcp.json"
|
|
549
|
-
$configDest = Join-Path $opencodeDir "mcp.json"
|
|
550
|
-
Configure-McpTool -ToolName "OpenCode" -TemplatePath $template -ConfigPath $configDest
|
|
551
|
-
}
|
|
552
|
-
|
|
553
|
-
# --- 9. Zed Editor ---
|
|
554
|
-
$zedConfigDir = Join-Path $env:USERPROFILE ".config\zed"
|
|
555
|
-
$zedCmd = Get-Command zed -ErrorAction SilentlyContinue
|
|
556
|
-
if ((Test-Path $zedConfigDir) -or $zedCmd) {
|
|
557
|
-
$DETECTED_TOOLS += "Zed Editor"
|
|
558
|
-
$template = Join-Path $REPO_DIR "configs\zed-mcp.json"
|
|
559
|
-
$configDest = Join-Path $zedConfigDir "context_servers.json"
|
|
560
|
-
Configure-McpTool -ToolName "Zed Editor" -TemplatePath $template -ConfigPath $configDest
|
|
561
|
-
}
|
|
562
|
-
|
|
563
|
-
# Install MCP Python package if not present
|
|
564
|
-
try {
|
|
565
|
-
& python -c "import mcp" 2>$null
|
|
566
|
-
} catch {
|
|
567
|
-
Write-Host ""
|
|
568
|
-
Write-Host "Installing MCP SDK..."
|
|
569
|
-
try {
|
|
570
|
-
& python -m pip install mcp -q 2>$null
|
|
571
|
-
Write-Host "OK MCP SDK installed" -ForegroundColor Green
|
|
572
|
-
} catch {
|
|
573
|
-
Write-Host "INFO: MCP SDK install failed (manual install: python -m pip install mcp)" -ForegroundColor Yellow
|
|
574
|
-
}
|
|
575
|
-
}
|
|
576
|
-
|
|
577
|
-
# Summary of detected tools
|
|
578
|
-
Write-Host ""
|
|
579
|
-
if ($DETECTED_TOOLS.Count -gt 0) {
|
|
580
|
-
Write-Host "OK Detected and configured:" -ForegroundColor Green
|
|
581
|
-
foreach ($tool in $DETECTED_TOOLS) {
|
|
582
|
-
Write-Host " * $tool"
|
|
583
|
-
}
|
|
584
|
-
Write-Host ""
|
|
585
|
-
Write-Host "These tools now have native access to SuperLocalMemory!"
|
|
586
|
-
Write-Host "Restart them to use the new MCP integration."
|
|
587
|
-
} else {
|
|
588
|
-
Write-Host "INFO: No additional AI tools detected" -ForegroundColor Yellow
|
|
589
|
-
Write-Host " MCP server is available if you install Claude Desktop, Cursor, etc."
|
|
590
|
-
}
|
|
591
|
-
|
|
592
|
-
# Restore original error action preference
|
|
593
|
-
$ErrorActionPreference = $savedErrorAction
|
|
594
|
-
|
|
595
|
-
# Summary
|
|
596
|
-
Write-Host ""
|
|
597
|
-
Write-Host "=================================================================="
|
|
598
|
-
Write-Host " Installation Complete! "
|
|
599
|
-
Write-Host "=================================================================="
|
|
600
|
-
Write-Host ""
|
|
601
|
-
Write-Host "OK Commands available after terminal restart!" -ForegroundColor Green
|
|
602
|
-
Write-Host ""
|
|
603
|
-
Write-Host "Quick start (restart terminal first):"
|
|
604
|
-
Write-Host " python $INSTALL_DIR\superlocalmemory.cli.main"
|
|
605
|
-
Write-Host ""
|
|
606
|
-
|
|
607
|
-
# Optional: Offer to install optional features
|
|
608
|
-
Write-Host ""
|
|
609
|
-
Write-Host "=================================================================="
|
|
610
|
-
Write-Host " Optional Features Available "
|
|
611
|
-
Write-Host "=================================================================="
|
|
612
|
-
Write-Host ""
|
|
613
|
-
Write-Host "SuperLocalMemory includes optional features:"
|
|
614
|
-
Write-Host ""
|
|
615
|
-
Write-Host " 1) Advanced Search (~1.5GB, 5-10 min)"
|
|
616
|
-
Write-Host " - Semantic search with sentence transformers"
|
|
617
|
-
Write-Host " - Vector similarity with HNSWLIB"
|
|
618
|
-
Write-Host ""
|
|
619
|
-
Write-Host " 2) Web Dashboard (~50MB, 1-2 min)"
|
|
620
|
-
Write-Host " - Graph visualization"
|
|
621
|
-
Write-Host " - API server (FastAPI)"
|
|
622
|
-
Write-Host ""
|
|
623
|
-
Write-Host " 3) Full Package (~1.5GB, 5-10 min)"
|
|
624
|
-
Write-Host " - Everything: Search + Dashboard"
|
|
625
|
-
Write-Host ""
|
|
626
|
-
Write-Host " N) Skip (install later)"
|
|
627
|
-
Write-Host ""
|
|
628
|
-
|
|
629
|
-
# Handle interactive vs non-interactive mode
|
|
630
|
-
if ($NON_INTERACTIVE) {
|
|
631
|
-
$INSTALL_CHOICE = "N"
|
|
632
|
-
Write-Host "Auto-selecting: N (Skip)" -ForegroundColor Cyan
|
|
633
|
-
} else {
|
|
634
|
-
$INSTALL_CHOICE = Read-Host "Choose option [1/2/3/N]"
|
|
635
|
-
}
|
|
636
|
-
|
|
637
|
-
$requirementsDir = $REPO_DIR
|
|
638
|
-
switch ($INSTALL_CHOICE) {
|
|
639
|
-
"1" {
|
|
640
|
-
Write-Host ""
|
|
641
|
-
Write-Host "Installing Advanced Search features..."
|
|
642
|
-
Write-Host "Downloading ~1.5GB (ML models)..." -ForegroundColor Yellow
|
|
643
|
-
$searchReqPath = Join-Path $requirementsDir "requirements-search.txt"
|
|
644
|
-
if (Test-Path $searchReqPath) {
|
|
645
|
-
& pip install -r $searchReqPath
|
|
646
|
-
Write-Host "OK Advanced Search installed successfully" -ForegroundColor Green
|
|
647
|
-
} else {
|
|
648
|
-
Write-Host "ERROR: requirements-search.txt not found" -ForegroundColor Red
|
|
649
|
-
}
|
|
650
|
-
}
|
|
651
|
-
"2" {
|
|
652
|
-
Write-Host ""
|
|
653
|
-
Write-Host "Installing Web Dashboard..."
|
|
654
|
-
Write-Host "Downloading ~50MB..." -ForegroundColor Yellow
|
|
655
|
-
$uiReqPath = Join-Path $requirementsDir "requirements-ui.txt"
|
|
656
|
-
if (Test-Path $uiReqPath) {
|
|
657
|
-
& pip install -r $uiReqPath
|
|
658
|
-
Write-Host "OK Web Dashboard installed successfully" -ForegroundColor Green
|
|
659
|
-
Write-Host ""
|
|
660
|
-
Write-Host "Start Web UI:"
|
|
661
|
-
Write-Host " python $INSTALL_DIR\api_server.py"
|
|
662
|
-
Write-Host " Then open: http://127.0.0.1:8000"
|
|
663
|
-
} else {
|
|
664
|
-
Write-Host "ERROR: requirements-ui.txt not found" -ForegroundColor Red
|
|
665
|
-
}
|
|
666
|
-
}
|
|
667
|
-
"3" {
|
|
668
|
-
Write-Host ""
|
|
669
|
-
Write-Host "Installing Full Package (Search + Dashboard)..."
|
|
670
|
-
Write-Host "Downloading ~1.5GB..." -ForegroundColor Yellow
|
|
671
|
-
$fullReqPath = Join-Path $requirementsDir "requirements-full.txt"
|
|
672
|
-
if (Test-Path $fullReqPath) {
|
|
673
|
-
& pip install -r $fullReqPath
|
|
674
|
-
Write-Host "OK Full package installed successfully" -ForegroundColor Green
|
|
675
|
-
Write-Host ""
|
|
676
|
-
Write-Host "All features enabled!"
|
|
677
|
-
} else {
|
|
678
|
-
Write-Host "ERROR: requirements-full.txt not found" -ForegroundColor Red
|
|
679
|
-
}
|
|
680
|
-
}
|
|
681
|
-
default {
|
|
682
|
-
Write-Host ""
|
|
683
|
-
Write-Host "Skipping optional features."
|
|
684
|
-
Write-Host ""
|
|
685
|
-
Write-Host "To install later:"
|
|
686
|
-
Write-Host " Advanced Search: pip install -r requirements-search.txt"
|
|
687
|
-
Write-Host " Web Dashboard: pip install -r requirements-ui.txt"
|
|
688
|
-
Write-Host " Full Package: pip install -r requirements-full.txt"
|
|
689
|
-
}
|
|
690
|
-
}
|
|
691
|
-
|
|
692
|
-
Write-Host ""
|
|
693
|
-
Write-Host "=================================================================="
|
|
694
|
-
Write-Host " ATTRIBUTION NOTICE (REQUIRED BY MIT LICENSE) "
|
|
695
|
-
Write-Host "=================================================================="
|
|
696
|
-
Write-Host " Created by: Varun Pratap Bhardwaj "
|
|
697
|
-
Write-Host " Role: Solution Architect & Original Creator "
|
|
698
|
-
Write-Host " Repository: github.com/qualixar/superlocalmemory "
|
|
699
|
-
Write-Host " License: MIT (attribution must be preserved) "
|
|
700
|
-
Write-Host "=================================================================="
|
|
701
|
-
Write-Host ""
|