superlocalmemory 3.6.23 → 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.
Files changed (301) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/README.md +271 -71
  3. package/bin/slm-npm +43 -89
  4. package/ide/configs/antigravity-mcp.json +2 -2
  5. package/ide/configs/chatgpt-desktop-mcp.json +1 -1
  6. package/ide/configs/claude-desktop-mcp.json +2 -2
  7. package/ide/configs/windsurf-mcp.json +2 -2
  8. package/ide/hooks/context-hook.js +6 -2
  9. package/ide/hooks/post-recall-hook.js +7 -3
  10. package/ide/hooks/tool-event-hook.sh +2 -1
  11. package/package.json +18 -10
  12. package/plugin/.claude-plugin/plugin.json +1 -1
  13. package/plugin/_GENERATED.md +1 -1
  14. package/plugin/agents/slm-memory-advisor.md +1 -1
  15. package/plugin/requirements.txt +1 -1
  16. package/plugin/skills/slm-session/SKILL.md +1 -1
  17. package/plugin-src/rules/AGENTS.md +1 -1
  18. package/pyproject.toml +40 -8
  19. package/scripts/postinstall-interactive.js +17 -94
  20. package/scripts/postinstall.js +185 -258
  21. package/scripts/preuninstall.js +9 -50
  22. package/src/superlocalmemory/__init__.py +2 -2
  23. package/src/superlocalmemory/attribution/mathematical_dna.py +1 -1
  24. package/src/superlocalmemory/attribution/signer.py +34 -19
  25. package/src/superlocalmemory/attribution/watermark.py +1 -1
  26. package/src/superlocalmemory/cli/_lazy_init.py +3 -5
  27. package/src/superlocalmemory/cli/commands.py +453 -191
  28. package/src/superlocalmemory/cli/context_commands.py +5 -4
  29. package/src/superlocalmemory/cli/daemon.py +282 -187
  30. package/src/superlocalmemory/cli/db_migrate.py +3 -1
  31. package/src/superlocalmemory/cli/diagnostics_cmd.py +28 -0
  32. package/src/superlocalmemory/cli/evidence_cmd.py +103 -0
  33. package/src/superlocalmemory/cli/ingest_cmd.py +7 -3
  34. package/src/superlocalmemory/cli/main.py +128 -31
  35. package/src/superlocalmemory/cli/pending_store.py +54 -38
  36. package/src/superlocalmemory/cli/scale_engine_cmd.py +37 -0
  37. package/src/superlocalmemory/cli/service_installer.py +57 -52
  38. package/src/superlocalmemory/cli/setup_wizard.py +142 -88
  39. package/src/superlocalmemory/cli/version_banner.py +2 -1
  40. package/src/superlocalmemory/code_graph/config.py +3 -1
  41. package/src/superlocalmemory/core/backend_orchestrator.py +81 -21
  42. package/src/superlocalmemory/core/config.py +65 -20
  43. package/src/superlocalmemory/core/consolidation_engine.py +9 -7
  44. package/src/superlocalmemory/core/context_cache.py +56 -8
  45. package/src/superlocalmemory/core/derivation_lineage.py +246 -0
  46. package/src/superlocalmemory/core/embedding_worker.py +32 -20
  47. package/src/superlocalmemory/core/embeddings.py +54 -18
  48. package/src/superlocalmemory/core/engine.py +150 -104
  49. package/src/superlocalmemory/core/engine_ingestion.py +513 -0
  50. package/src/superlocalmemory/core/engine_wiring.py +2 -0
  51. package/src/superlocalmemory/core/evidence_bundle.py +526 -0
  52. package/src/superlocalmemory/core/fact_consolidator.py +5 -11
  53. package/src/superlocalmemory/core/graph_analyzer.py +2 -2
  54. package/src/superlocalmemory/core/health_monitor.py +4 -2
  55. package/src/superlocalmemory/core/ingestion_command.py +636 -0
  56. package/src/superlocalmemory/core/injection.py +69 -18
  57. package/src/superlocalmemory/core/lifecycle_state.py +153 -0
  58. package/src/superlocalmemory/core/maintenance.py +1 -1
  59. package/src/superlocalmemory/core/maintenance_scheduler.py +51 -35
  60. package/src/superlocalmemory/core/mutations.py +143 -0
  61. package/src/superlocalmemory/core/platform_utils.py +7 -4
  62. package/src/superlocalmemory/core/ram_lock.py +16 -5
  63. package/src/superlocalmemory/core/rate_limit.py +1 -1
  64. package/src/superlocalmemory/core/recall_pipeline.py +60 -101
  65. package/src/superlocalmemory/core/recall_worker.py +76 -59
  66. package/src/superlocalmemory/core/registry.py +1 -1
  67. package/src/superlocalmemory/core/scale_engine.py +293 -0
  68. package/src/superlocalmemory/core/score_contract.py +62 -0
  69. package/src/superlocalmemory/core/security_primitives.py +3 -1
  70. package/src/superlocalmemory/core/slm_disabled.py +3 -5
  71. package/src/superlocalmemory/core/store_pipeline.py +172 -40
  72. package/src/superlocalmemory/core/tier_manager.py +32 -20
  73. package/src/superlocalmemory/core/worker_pool.py +13 -4
  74. package/src/superlocalmemory/dynamics/activation_guided_quantization.py +1 -1
  75. package/src/superlocalmemory/dynamics/eap_scheduler.py +10 -3
  76. package/src/superlocalmemory/dynamics/ebbinghaus_langevin_coupling.py +1 -1
  77. package/src/superlocalmemory/dynamics/fisher_langevin_coupling.py +1 -1
  78. package/src/superlocalmemory/encoding/auto_linker.py +1 -1
  79. package/src/superlocalmemory/encoding/cognitive_consolidator.py +7 -16
  80. package/src/superlocalmemory/encoding/consolidator.py +22 -5
  81. package/src/superlocalmemory/encoding/fact_extractor.py +1 -1
  82. package/src/superlocalmemory/encoding/foresight.py +2 -0
  83. package/src/superlocalmemory/encoding/graph_builder.py +1 -1
  84. package/src/superlocalmemory/encoding/temporal_parser.py +2 -0
  85. package/src/superlocalmemory/evaluation/__init__.py +13 -0
  86. package/src/superlocalmemory/evaluation/calibration.py +308 -0
  87. package/src/superlocalmemory/evolution/skill_evolver.py +2 -1
  88. package/src/superlocalmemory/graph/cozo_backend.py +256 -23
  89. package/src/superlocalmemory/hooks/_outcome_common.py +21 -11
  90. package/src/superlocalmemory/hooks/antigravity_adapter.py +10 -31
  91. package/src/superlocalmemory/hooks/auto_invoker.py +25 -27
  92. package/src/superlocalmemory/hooks/auto_recall.py +31 -6
  93. package/src/superlocalmemory/hooks/auto_recall_hook.py +13 -33
  94. package/src/superlocalmemory/hooks/before_web_hook.py +9 -7
  95. package/src/superlocalmemory/hooks/claude_code_hooks.py +123 -35
  96. package/src/superlocalmemory/hooks/codex_assets.py +59 -0
  97. package/src/superlocalmemory/hooks/codex_hooks.py +186 -0
  98. package/src/superlocalmemory/hooks/context_payload.py +1 -1
  99. package/src/superlocalmemory/hooks/copilot_adapter.py +9 -24
  100. package/src/superlocalmemory/hooks/cursor_adapter.py +10 -32
  101. package/src/superlocalmemory/hooks/hook_daemon.py +4 -2
  102. package/src/superlocalmemory/hooks/hook_handlers.py +219 -32
  103. package/src/superlocalmemory/hooks/memory_protocol.py +5 -3
  104. package/src/superlocalmemory/hooks/post_tool_async_hook.py +4 -2
  105. package/src/superlocalmemory/hooks/session_registry.py +15 -8
  106. package/src/superlocalmemory/hooks/stop_outcome_hook.py +10 -6
  107. package/src/superlocalmemory/hooks/topic_shift_hook.py +42 -12
  108. package/src/superlocalmemory/hooks/user_prompt_hook.py +9 -14
  109. package/src/superlocalmemory/hooks/user_prompt_rehash_hook.py +19 -11
  110. package/src/superlocalmemory/infra/auth_middleware.py +38 -5
  111. package/src/superlocalmemory/infra/backup.py +7 -5
  112. package/src/superlocalmemory/infra/cloud_backup.py +18 -8
  113. package/src/superlocalmemory/infra/daemon_identity.py +248 -0
  114. package/src/superlocalmemory/infra/data_root.py +199 -0
  115. package/src/superlocalmemory/infra/event_bus.py +3 -1
  116. package/src/superlocalmemory/infra/local_diagnostics.py +327 -0
  117. package/src/superlocalmemory/infra/process_reaper.py +23 -0
  118. package/src/superlocalmemory/ingestion/adapter_manager.py +27 -9
  119. package/src/superlocalmemory/ingestion/base_adapter.py +25 -31
  120. package/src/superlocalmemory/ingestion/calendar_adapter.py +13 -4
  121. package/src/superlocalmemory/ingestion/credentials.py +14 -7
  122. package/src/superlocalmemory/ingestion/gmail_adapter.py +13 -4
  123. package/src/superlocalmemory/ingestion/transcript_adapter.py +7 -2
  124. package/src/superlocalmemory/learning/consolidation_quantization_worker.py +1 -1
  125. package/src/superlocalmemory/learning/ensemble.py +11 -0
  126. package/src/superlocalmemory/learning/entity_compiler.py +1 -1
  127. package/src/superlocalmemory/learning/feedback.py +1 -1
  128. package/src/superlocalmemory/learning/forgetting_scheduler.py +12 -7
  129. package/src/superlocalmemory/learning/quantization_scheduler.py +1 -1
  130. package/src/superlocalmemory/learning/ranker.py +4 -1
  131. package/src/superlocalmemory/learning/source_quality.py +1 -1
  132. package/src/superlocalmemory/learning/trigram_index.py +3 -2
  133. package/src/superlocalmemory/llm/backbone.py +1 -1
  134. package/src/superlocalmemory/math/ebbinghaus.py +1 -1
  135. package/src/superlocalmemory/math/fisher.py +1 -1
  136. package/src/superlocalmemory/math/fisher_quantized.py +1 -1
  137. package/src/superlocalmemory/math/hopfield.py +1 -1
  138. package/src/superlocalmemory/math/langevin.py +1 -1
  139. package/src/superlocalmemory/math/polar_quant.py +3 -4
  140. package/src/superlocalmemory/math/qjl.py +1 -1
  141. package/src/superlocalmemory/math/sheaf.py +1 -1
  142. package/src/superlocalmemory/math/turbo_quant.py +3 -2
  143. package/src/superlocalmemory/mcp/_daemon_proxy.py +12 -11
  144. package/src/superlocalmemory/mcp/_pool_adapter.py +27 -0
  145. package/src/superlocalmemory/mcp/http_transport.py +53 -0
  146. package/src/superlocalmemory/mcp/server.py +39 -13
  147. package/src/superlocalmemory/mcp/shared.py +69 -3
  148. package/src/superlocalmemory/mcp/tools_active.py +141 -31
  149. package/src/superlocalmemory/mcp/tools_core.py +128 -29
  150. package/src/superlocalmemory/mcp/tools_evolution.py +5 -7
  151. package/src/superlocalmemory/mcp/tools_learning.py +42 -2
  152. package/src/superlocalmemory/mcp/tools_mesh.py +7 -23
  153. package/src/superlocalmemory/mcp/tools_optimize.py +8 -1
  154. package/src/superlocalmemory/mcp/tools_v28.py +23 -2
  155. package/src/superlocalmemory/mcp/tools_v3.py +26 -1
  156. package/src/superlocalmemory/mcp/tools_v33.py +56 -17
  157. package/src/superlocalmemory/mesh/broker.py +2 -0
  158. package/src/superlocalmemory/mesh/remote_sync.py +50 -12
  159. package/src/superlocalmemory/optimize/cache/manager.py +77 -1
  160. package/src/superlocalmemory/optimize/cache/semantic.py +23 -3
  161. package/src/superlocalmemory/optimize/compress/ccr.py +4 -0
  162. package/src/superlocalmemory/optimize/compress/router.py +6 -1
  163. package/src/superlocalmemory/optimize/config/__init__.py +5 -0
  164. package/src/superlocalmemory/optimize/config/store.py +6 -4
  165. package/src/superlocalmemory/optimize/proxy/_helpers.py +15 -5
  166. package/src/superlocalmemory/optimize/proxy/capture.py +3 -2
  167. package/src/superlocalmemory/optimize/proxy/server.py +2 -2
  168. package/src/superlocalmemory/optimize/storage/db.py +12 -12
  169. package/src/superlocalmemory/retrieval/agentic.py +1 -1
  170. package/src/superlocalmemory/retrieval/ann_index.py +1 -1
  171. package/src/superlocalmemory/retrieval/bm25_channel.py +35 -11
  172. package/src/superlocalmemory/retrieval/bridge_discovery.py +73 -8
  173. package/src/superlocalmemory/retrieval/engine.py +169 -79
  174. package/src/superlocalmemory/retrieval/entity_channel.py +289 -67
  175. package/src/superlocalmemory/retrieval/forgetting_filter.py +1 -1
  176. package/src/superlocalmemory/retrieval/fusion.py +1 -1
  177. package/src/superlocalmemory/retrieval/hopfield_channel.py +118 -30
  178. package/src/superlocalmemory/retrieval/profile_channel.py +1 -1
  179. package/src/superlocalmemory/retrieval/quantization_aware_search.py +16 -10
  180. package/src/superlocalmemory/retrieval/reranker.py +56 -20
  181. package/src/superlocalmemory/retrieval/scope_policy.py +85 -0
  182. package/src/superlocalmemory/retrieval/semantic_channel.py +122 -14
  183. package/src/superlocalmemory/retrieval/spreading_activation.py +141 -25
  184. package/src/superlocalmemory/retrieval/strategy.py +1 -1
  185. package/src/superlocalmemory/retrieval/temporal_channel.py +30 -15
  186. package/src/superlocalmemory/retrieval/vector_store.py +1 -1
  187. package/src/superlocalmemory/server/api.py +10 -7
  188. package/src/superlocalmemory/server/bandit_loops.py +4 -2
  189. package/src/superlocalmemory/server/recall_serializer.py +24 -0
  190. package/src/superlocalmemory/server/route_mutations.py +84 -0
  191. package/src/superlocalmemory/server/routes/agents.py +8 -6
  192. package/src/superlocalmemory/server/routes/brain.py +14 -12
  193. package/src/superlocalmemory/server/routes/chat.py +29 -12
  194. package/src/superlocalmemory/server/routes/data_io.py +55 -24
  195. package/src/superlocalmemory/server/routes/helpers.py +8 -63
  196. package/src/superlocalmemory/server/routes/ingest.py +53 -36
  197. package/src/superlocalmemory/server/routes/memories.py +104 -43
  198. package/src/superlocalmemory/server/routes/mesh.py +31 -0
  199. package/src/superlocalmemory/server/routes/profiles.py +26 -4
  200. package/src/superlocalmemory/server/routes/tiers.py +43 -11
  201. package/src/superlocalmemory/server/routes/timeline.py +5 -1
  202. package/src/superlocalmemory/server/routes/v3_api.py +76 -21
  203. package/src/superlocalmemory/server/security_middleware.py +1 -1
  204. package/src/superlocalmemory/server/unified_daemon.py +680 -293
  205. package/src/superlocalmemory/server/write_identity.py +147 -0
  206. package/src/superlocalmemory/storage/access_log.py +4 -3
  207. package/src/superlocalmemory/storage/database.py +118 -25
  208. package/src/superlocalmemory/storage/migration_runner.py +84 -1
  209. package/src/superlocalmemory/storage/migration_v33.py +1 -1
  210. package/src/superlocalmemory/storage/migrations/M002_model_state_history.py +6 -60
  211. package/src/superlocalmemory/storage/migrations/M018_ingestion_operations.py +120 -0
  212. package/src/superlocalmemory/storage/migrations/M019_derivation_lineage.py +54 -0
  213. package/src/superlocalmemory/storage/migrations/M020_model_state_integrity.py +52 -0
  214. package/src/superlocalmemory/storage/migrations/__init__.py +5 -0
  215. package/src/superlocalmemory/storage/models.py +16 -0
  216. package/src/superlocalmemory/storage/quantized_store.py +20 -3
  217. package/src/superlocalmemory/storage/v2_migrator.py +5 -3
  218. package/src/superlocalmemory/ui/favicon.svg +5 -0
  219. package/src/superlocalmemory/ui/index.html +1 -0
  220. package/src/superlocalmemory/ui/js/compliance.js +1 -1
  221. package/src/superlocalmemory/ui/js/core.js +49 -8
  222. package/src/superlocalmemory/ui/js/dashboard.js +23 -2
  223. package/src/superlocalmemory/ui/js/feedback.js +1 -1
  224. package/src/superlocalmemory/ui/js/graph-filters.js +1 -1
  225. package/src/superlocalmemory/ui/js/graph-ui.js +1 -1
  226. package/src/superlocalmemory/ui/js/lifecycle.js +1 -1
  227. package/src/superlocalmemory/ui/js/ng-mesh.js +15 -49
  228. package/src/superlocalmemory/ui/js/settings.js +4 -2
  229. package/src/superlocalmemory/vector/lancedb_backend.py +57 -9
  230. package/bin/slm +0 -59
  231. package/bin/slm.bat +0 -77
  232. package/bin/slm.cmd +0 -5
  233. package/ide/integrations/langchain/README.md +0 -106
  234. package/ide/integrations/langchain/langchain_superlocalmemory/__init__.py +0 -9
  235. package/ide/integrations/langchain/langchain_superlocalmemory/chat_message_history.py +0 -201
  236. package/ide/integrations/langchain/pyproject.toml +0 -38
  237. package/ide/integrations/langchain/tests/__init__.py +0 -3
  238. package/ide/integrations/langchain/tests/test_chat_message_history.py +0 -215
  239. package/ide/integrations/langchain/tests/test_security.py +0 -117
  240. package/ide/integrations/llamaindex/README.md +0 -81
  241. package/ide/integrations/llamaindex/llama_index/storage/chat_store/superlocalmemory/__init__.py +0 -9
  242. package/ide/integrations/llamaindex/llama_index/storage/chat_store/superlocalmemory/base.py +0 -316
  243. package/ide/integrations/llamaindex/pyproject.toml +0 -43
  244. package/ide/integrations/llamaindex/tests/__init__.py +0 -3
  245. package/ide/integrations/llamaindex/tests/test_chat_store.py +0 -294
  246. package/ide/integrations/llamaindex/tests/test_security.py +0 -241
  247. package/plugin-src/.mcp.json +0 -12
  248. package/plugin-src/agents/slm-memory-advisor.md +0 -44
  249. package/plugin-src/agents/slm-optimize-advisor.md +0 -38
  250. package/plugin-src/hooks/.gitkeep +0 -0
  251. package/plugin-src/hooks/hooks.json +0 -23
  252. package/plugin-src/manifest.json +0 -25
  253. package/plugin-src/requirements.txt +0 -1
  254. package/plugin-src/rules/CLAUDE.md.fragment +0 -44
  255. package/plugin-src/scripts/ensure-venv.bat +0 -122
  256. package/plugin-src/scripts/ensure-venv.sh +0 -105
  257. package/plugin-src/scripts/slm-launch +0 -15
  258. package/plugin-src/scripts/slm-launch.bat +0 -17
  259. package/plugin-src/settings.json +0 -16
  260. package/plugin-src/skills/slm-cache/SKILL.md +0 -140
  261. package/plugin-src/skills/slm-compress/SKILL.md +0 -143
  262. package/plugin-src/skills/slm-graph/SKILL.md +0 -300
  263. package/plugin-src/skills/slm-recall/SKILL.md +0 -204
  264. package/plugin-src/skills/slm-remember/SKILL.md +0 -194
  265. package/plugin-src/skills/slm-session/SKILL.md +0 -207
  266. package/plugin-src/skills/slm-status/SKILL.md +0 -149
  267. package/scripts/__tests__/build-plugin.test.mjs +0 -613
  268. package/scripts/_savings_math.py +0 -270
  269. package/scripts/build-dmg.sh +0 -417
  270. package/scripts/build-plugin.js +0 -742
  271. package/scripts/build-slm-hook.ps1 +0 -40
  272. package/scripts/build-slm-hook.sh +0 -45
  273. package/scripts/build_entry.py +0 -452
  274. package/scripts/ci/stage5b_gate.sh +0 -50
  275. package/scripts/dogfood_savings.py +0 -490
  276. package/scripts/generate-thumbnails.py +0 -218
  277. package/scripts/install-skills.ps1 +0 -4
  278. package/scripts/install-skills.sh +0 -5
  279. package/scripts/install.ps1 +0 -701
  280. package/scripts/install.sh +0 -1015
  281. package/scripts/postinstall_binary.js +0 -287
  282. package/scripts/prepack.js +0 -33
  283. package/scripts/release_manifest.py +0 -273
  284. package/scripts/slm-hook.spec +0 -56
  285. package/scripts/start-dashboard.ps1 +0 -52
  286. package/scripts/start-dashboard.sh +0 -41
  287. package/scripts/sync-wiki.ps1 +0 -127
  288. package/scripts/sync-wiki.sh +0 -82
  289. package/scripts/test-dmg.sh +0 -161
  290. package/scripts/test-npm-package.ps1 +0 -252
  291. package/scripts/test-npm-package.sh +0 -207
  292. package/scripts/verify-install.ps1 +0 -294
  293. package/scripts/verify-install.sh +0 -266
  294. package/scripts/verify-v27.ps1 +0 -301
  295. package/scripts/verify-v27.sh +0 -233
  296. package/src/superlocalmemory.egg-info/PKG-INFO +0 -516
  297. package/src/superlocalmemory.egg-info/SOURCES.txt +0 -529
  298. package/src/superlocalmemory.egg-info/dependency_links.txt +0 -1
  299. package/src/superlocalmemory.egg-info/entry_points.txt +0 -2
  300. package/src/superlocalmemory.egg-info/requires.txt +0 -71
  301. package/src/superlocalmemory.egg-info/top_level.txt +0 -1
@@ -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 ""