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,293 +1,220 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * SuperLocalMemory V3 - NPM Postinstall Script
3
+ * SuperLocalMemory V3 - safe NPM runtime installer.
4
4
  *
5
- * ONE COMMAND INSTALL. Everything the user needs.
6
- * Python deps auto-installed. Embeddings auto-downloaded.
5
+ * NPM owns a private Python virtual environment inside its package directory.
6
+ * This script never installs into system Python and never creates or modifies
7
+ * SLM data, hooks, IDE configuration, daemons, or model caches.
7
8
  *
8
9
  * Copyright (c) 2026 Varun Pratap Bhardwaj / Qualixar
9
- * Licensed under Elastic License 2.0
10
+ * Licensed under AGPL-3.0-or-later.
10
11
  */
11
12
 
13
+ 'use strict';
14
+
12
15
  const { spawnSync } = require('child_process');
16
+ const fs = require('fs');
13
17
  const path = require('path');
14
18
  const os = require('os');
15
- const fs = require('fs');
16
19
 
17
- console.log('\n════════════════════════════════════════════════════════════');
18
- console.log(' SuperLocalMemory V3 The Unified Brain');
19
- console.log(' by Varun Pratap Bhardwaj / Qualixar');
20
- console.log(' https://github.com/qualixar/superlocalmemory');
21
- console.log('════════════════════════════════════════════════════════════\n');
20
+ const MIN_PYTHON = Object.freeze([3, 11]);
21
+ const MAX_PYTHON_EXCLUSIVE = Object.freeze([3, 15]);
22
+ const INSTALL_TIMEOUT_MS = 15 * 60 * 1000;
22
23
 
23
- // --- Step 1: Create data directory ---
24
- const SLM_HOME = path.join(os.homedir(), '.superlocalmemory');
25
- if (!fs.existsSync(SLM_HOME)) {
26
- fs.mkdirSync(SLM_HOME, { recursive: true });
27
- console.log('✓ Created data directory: ' + SLM_HOME);
28
- } else {
29
- console.log('✓ Data directory exists: ' + SLM_HOME);
24
+ function parsePythonVersion(output) {
25
+ const match = String(output || '').match(/Python\s+(\d+)\.(\d+)(?:\.(\d+))?/i);
26
+ if (!match) return null;
27
+ return [Number(match[1]), Number(match[2]), Number(match[3] || 0)];
30
28
  }
31
29
 
32
- // --- Step 2: Find Python 3 ---
33
- function findPython() {
34
- const candidates = [
35
- 'python3', 'python',
36
- '/opt/homebrew/bin/python3', '/usr/local/bin/python3', '/usr/bin/python3',
37
- ];
38
- if (os.platform() === 'win32') candidates.push('py -3');
39
- for (const cmd of candidates) {
40
- try {
41
- const parts = cmd.split(' ');
42
- const r = spawnSync(parts[0], [...parts.slice(1), '--version'], {
43
- stdio: 'pipe', timeout: 5000,
44
- env: { ...process.env, PATH: '/opt/homebrew/bin:/usr/local/bin:/usr/bin:' + (process.env.PATH || '') },
45
- });
46
- if (r.status === 0 && (r.stdout || '').toString().includes('3.')) return parts;
47
- } catch (e) { /* next */ }
48
- }
49
- return null;
30
+ function isSupportedPython(version) {
31
+ if (!version) return false;
32
+ const [major, minor] = version;
33
+ const atLeastMinimum = major > MIN_PYTHON[0]
34
+ || (major === MIN_PYTHON[0] && minor >= MIN_PYTHON[1]);
35
+ const belowMaximum = major < MAX_PYTHON_EXCLUSIVE[0]
36
+ || (major === MAX_PYTHON_EXCLUSIVE[0] && minor < MAX_PYTHON_EXCLUSIVE[1]);
37
+ return atLeastMinimum && belowMaximum;
50
38
  }
51
39
 
52
- const pythonParts = findPython();
53
- if (!pythonParts) {
54
- console.log('');
55
- console.log('╔══════════════════════════════════════════════════════════╗');
56
- console.log('║ ⚠ Python 3.11+ Required ║');
57
- console.log('╚══════════════════════════════════════════════════════════╝');
58
- console.log('');
59
- console.log(' SuperLocalMemory V3 requires Python 3.11+');
60
- console.log(' Install from: https://python.org/downloads/');
61
- console.log(' After installing Python, run: slm setup');
62
- console.log('');
63
- process.exit(0); // Don't fail npm install
40
+ function pythonCandidates(platform = os.platform()) {
41
+ if (platform === 'win32') {
42
+ return [
43
+ ['py', '-3.14'],
44
+ ['py', '-3.13'],
45
+ ['py', '-3.12'],
46
+ ['py', '-3.11'],
47
+ ['python3'],
48
+ ['python'],
49
+ ];
50
+ }
51
+ return [
52
+ ['python3'],
53
+ ['python'],
54
+ ['/opt/homebrew/bin/python3'],
55
+ ['/usr/local/bin/python3'],
56
+ ['/usr/bin/python3'],
57
+ ];
64
58
  }
65
- console.log('✓ Found Python: ' + pythonParts.join(' '));
66
-
67
- // --- Step 3: Install ALL Python dependencies ---
68
- console.log('\nInstalling Python dependencies (this may take 1-2 minutes)...\n');
69
59
 
70
- // Detect if --user or --break-system-packages is needed
71
- function pipInstall(packages, label) {
72
- // Try normal install first
73
- let result = spawnSync(pythonParts[0], [
74
- ...pythonParts.slice(1), '-m', 'pip', 'install', '--quiet', '--disable-pip-version-check',
75
- ...packages,
76
- ], { stdio: 'pipe', timeout: 300000, env: { ...process.env, PATH: '/opt/homebrew/bin:/usr/local/bin:/usr/bin:' + (process.env.PATH || '') } });
77
-
78
- if (result.status === 0) return true;
79
-
80
- // If PEP 668 blocks it, try --user
81
- const stderr = (result.stderr || '').toString();
82
- if (stderr.includes('externally-managed') || stderr.includes('PEP 668')) {
83
- result = spawnSync(pythonParts[0], [
84
- ...pythonParts.slice(1), '-m', 'pip', 'install', '--quiet', '--disable-pip-version-check',
85
- '--user', ...packages,
86
- ], { stdio: 'pipe', timeout: 300000, env: { ...process.env, PATH: '/opt/homebrew/bin:/usr/local/bin:/usr/bin:' + (process.env.PATH || '') } });
87
- if (result.status === 0) return true;
88
-
89
- // Last resort: --break-system-packages
90
- result = spawnSync(pythonParts[0], [
91
- ...pythonParts.slice(1), '-m', 'pip', 'install', '--quiet', '--disable-pip-version-check',
92
- '--break-system-packages', ...packages,
93
- ], { stdio: 'pipe', timeout: 300000, env: { ...process.env, PATH: '/opt/homebrew/bin:/usr/local/bin:/usr/bin:' + (process.env.PATH || '') } });
94
- return result.status === 0;
60
+ function findSupportedPython() {
61
+ for (const candidate of pythonCandidates()) {
62
+ try {
63
+ const result = spawnSync(candidate[0], [...candidate.slice(1), '--version'], {
64
+ stdio: 'pipe',
65
+ timeout: 5000,
66
+ env: process.env,
67
+ });
68
+ const output = `${(result.stdout || '').toString()} ${(result.stderr || '').toString()}`;
69
+ const version = parsePythonVersion(output);
70
+ if (result.status === 0 && isSupportedPython(version)) {
71
+ return { command: candidate[0], prefixArgs: candidate.slice(1), version };
72
+ }
73
+ } catch (_error) {
74
+ // Try the next interpreter without mutating PATH or the machine.
95
75
  }
96
-
97
- return false;
76
+ }
77
+ return null;
98
78
  }
99
79
 
100
- // Install the superlocalmemory package and all its pinned dependencies
101
- // in one shot. pyproject.toml is the single source of truth for versions,
102
- // so users via npm get exactly the same dep set as users via pip.
103
- console.log('\nInstalling SuperLocalMemory and all dependencies...');
104
- console.log(' (Single pip install — versions pinned in pyproject.toml)');
105
- console.log(' This may take 1-3 minutes (downloads ~500MB of models on first use).');
106
- console.log('');
107
- console.log(' Includes: numpy, scipy, fastapi, sentence-transformers, onnxruntime,');
108
- console.log(' torch, transformers, sqlite-vec, lightgbm, mcp, and more.');
109
-
110
- // --- Step 3b: Install the superlocalmemory package itself ---
111
- // This ensures `python -m superlocalmemory.cli.main` always resolves the
112
- // correct version, even when invoked outside the Node.js wrapper (e.g.,
113
- // via slm.bat on Windows or direct Python invocation).
114
- console.log('\nInstalling superlocalmemory Python package...');
115
- const pkgRoot = path.join(__dirname, '..');
116
- const pipInstallPkg = spawnSync(pythonParts[0], [
117
- ...pythonParts.slice(1), '-m', 'pip', 'install', '--quiet', '--disable-pip-version-check',
118
- pkgRoot,
119
- ], { stdio: 'pipe', timeout: 300000, env: { ...process.env, PATH: '/opt/homebrew/bin:/usr/local/bin:/usr/bin:' + (process.env.PATH || '') } });
120
-
121
- if (pipInstallPkg.status === 0) {
122
- console.log('✓ SuperLocalMemory Python package installed');
123
- } else {
124
- // Try with --user if PEP 668
125
- const stderr = (pipInstallPkg.stderr || '').toString();
126
- if (stderr.includes('externally-managed') || stderr.includes('PEP 668')) {
127
- const retryResult = spawnSync(pythonParts[0], [
128
- ...pythonParts.slice(1), '-m', 'pip', 'install', '--quiet', '--disable-pip-version-check',
129
- '--user', pkgRoot,
130
- ], { stdio: 'pipe', timeout: 300000, env: { ...process.env, PATH: '/opt/homebrew/bin:/usr/local/bin:/usr/bin:' + (process.env.PATH || '') } });
131
- if (retryResult.status === 0) {
132
- console.log('✓ SuperLocalMemory Python package installed (--user)');
133
- } else {
134
- // WP-07: --user also failed — try --break-system-packages last-resort,
135
- // then surface the pipx hint (PEP 668 advisory).
136
- const retryBsp = spawnSync(pythonParts[0], [
137
- ...pythonParts.slice(1), '-m', 'pip', 'install', '--quiet',
138
- '--disable-pip-version-check', '--break-system-packages', pkgRoot,
139
- ], { stdio: 'pipe', timeout: 300000, env: { ...process.env, PATH: '/opt/homebrew/bin:/usr/local/bin:/usr/bin:' + (process.env.PATH || '') } });
140
- if (retryBsp.status === 0) {
141
- console.log('✓ SuperLocalMemory Python package installed (--break-system-packages)');
142
- } else {
143
- console.log('⚠ pip install failed (PEP 668 — externally managed Python).');
144
- console.log(' The Node.js wrapper (slm-npm) sets PYTHONPATH automatically,');
145
- console.log(' so the CLI will still work via npm.');
146
- console.log('');
147
- console.log(' To install into an isolated environment (recommended):');
148
- console.log(' pipx install superlocalmemory');
149
- console.log(' Last resort (may break OS packages):');
150
- console.log(' pip install --break-system-packages superlocalmemory');
151
- }
152
- }
153
- } else {
154
- console.log('⚠ Could not pip install the package. The Node.js wrapper (slm-npm)');
155
- console.log(' sets PYTHONPATH automatically, so CLI will still work.');
156
- console.log('');
157
- console.log(' If you see a PEP 668 error in future, install via:');
158
- console.log(' pipx install superlocalmemory');
159
- }
80
+ function runtimePythonPath(packageRoot, platform = os.platform()) {
81
+ return platform === 'win32'
82
+ ? path.join(packageRoot, '.slm-venv', 'Scripts', 'python.exe')
83
+ : path.join(packageRoot, '.slm-venv', 'bin', 'python');
160
84
  }
161
85
 
162
- // --- Step 3c: Verify critical dependency versions ---
163
- // sentence-transformers and onnxruntime MUST be exact versions to avoid
164
- // memory blow-up on Apple Silicon. pip resolver can override pins via
165
- // transitive deps — this step catches and fixes that.
166
- console.log('\nVerifying critical dependency versions...');
167
- const criticalDeps = { 'sentence_transformers': '5.3.0', 'onnxruntime': '1.24.4' };
168
- for (const [mod, expected] of Object.entries(criticalDeps)) {
169
- const check = spawnSync(pythonParts[0], [
170
- ...pythonParts.slice(1), '-c',
171
- `import ${mod}; v=getattr(${mod},'__version__',''); print(v)`,
172
- ], { stdio: 'pipe', timeout: 10000, env: { ...process.env, PATH: '/opt/homebrew/bin:/usr/local/bin:/usr/bin:' + (process.env.PATH || '') } });
173
- const actual = (check.stdout || '').toString().trim();
174
- if (actual && actual !== expected) {
175
- const pipName = mod.replace('_', '-');
176
- console.log(`⚠ ${pipName} is ${actual}, expected ${expected}. Fixing...`);
177
- pipInstall([`${pipName}==${expected}`], pipName);
178
- console.log(`✓ ${pipName}==${expected} installed`);
179
- } else if (actual === expected) {
180
- console.log(`✓ ${mod}==${expected}`);
86
+ function validateRuntimeLocation(venvRoot) {
87
+ if (!fs.existsSync(venvRoot)) return { ok: true };
88
+ try {
89
+ const stat = fs.lstatSync(venvRoot);
90
+ if (stat.isSymbolicLink()) {
91
+ return { ok: false, error: `${venvRoot} is a symbolic link` };
92
+ }
93
+ if (!stat.isDirectory()) {
94
+ return { ok: false, error: `${venvRoot} is not a directory` };
181
95
  }
96
+ return { ok: true };
97
+ } catch (error) {
98
+ return { ok: false, error: `cannot inspect ${venvRoot}: ${error.message}` };
99
+ }
182
100
  }
183
101
 
184
- // --- Step 4: Detect V2 installation ---
185
- const V2_HOME = path.join(os.homedir(), '.claude-memory');
186
- if (fs.existsSync(V2_HOME) && fs.existsSync(path.join(V2_HOME, 'memory.db'))) {
187
- console.log('');
188
- console.log('╔══════════════════════════════════════════════════════════╗');
189
- console.log('║ V2 Installation Detected ║');
190
- console.log('╚══════════════════════════════════════════════════════════╝');
191
- console.log('');
192
- console.log(' Found V2 data at: ' + V2_HOME);
193
- console.log(' Your memories are safe and will NOT be deleted.');
194
- console.log('');
195
- console.log(' To migrate V2 data to V3, run:');
196
- console.log(' slm migrate');
197
- console.log('');
102
+ function printPythonGuidance() {
103
+ console.error('');
104
+ console.error('SuperLocalMemory requires Python 3.11, 3.12, 3.13, or 3.14.');
105
+ console.error('Install Python from https://www.python.org/downloads/ and rerun:');
106
+ console.error(' npm rebuild superlocalmemory');
107
+ console.error('The npm installer will create a private virtual environment;');
108
+ console.error('it will not install packages into your system Python.');
198
109
  }
199
110
 
200
- // --- Step 5: Auto-install Claude Code hooks ---
201
- // "Install once, forget forever" hooks enable automatic memory lifecycle
202
- const hooksDisabledFile = path.join(SLM_HOME, 'hooks', '.hooks-disabled');
203
- if (fs.existsSync(hooksDisabledFile)) {
204
- console.log('⊘ Claude Code hooks: skipped (user opted out via slm hooks remove)');
205
- } else {
206
- console.log('\nInstalling Claude Code hooks (auto-memory lifecycle)...');
207
- const hookResult = spawnSync(pythonParts[0], [
208
- ...pythonParts.slice(1), '-m', 'superlocalmemory.cli.main', 'hooks', 'install',
209
- ], {
210
- stdio: 'pipe', timeout: 15000,
211
- env: {
212
- ...process.env,
213
- PATH: '/opt/homebrew/bin:/usr/local/bin:/usr/bin:' + (process.env.PATH || ''),
214
- PYTHONPATH: path.join(__dirname, '..', 'src') + ':' + (process.env.PYTHONPATH || ''),
215
- },
216
- });
111
+ function failureDetail(result) {
112
+ if (result && result.error) return result.error.message || String(result.error);
113
+ if (result && Number.isInteger(result.status)) return `exit code ${result.status}`;
114
+ return 'process did not complete';
115
+ }
217
116
 
218
- if (hookResult.status === 0) {
219
- console.log(' Claude Code hooks installed (auto-recall, auto-observe, auto-save)');
220
- console.log(' SLM: Hooks installed into Claude Code (slm hooks remove to undo)');
117
+ function main(argv = process.argv.slice(2)) {
118
+ if (argv.includes('--help') || argv.includes('-h')) {
119
+ console.log('Usage: node scripts/postinstall.js');
120
+ console.log('Creates or repairs the package-owned .slm-venv runtime.');
121
+ console.log('This command never configures SLM or writes durable memory.');
122
+ return 0;
123
+ }
124
+
125
+ const packageRoot = path.resolve(__dirname, '..');
126
+ const venvRoot = path.join(packageRoot, '.slm-venv');
127
+ const packageVersion = require(path.join(packageRoot, 'package.json')).version;
128
+ const python = findSupportedPython();
129
+
130
+ console.log('');
131
+ console.log('SuperLocalMemory: creating an isolated npm-owned Python runtime.');
132
+
133
+ if (!python) {
134
+ printPythonGuidance();
135
+ return 1;
136
+ }
137
+
138
+ const locationCheck = validateRuntimeLocation(venvRoot);
139
+ if (!locationCheck.ok) {
140
+ console.error(`SuperLocalMemory: refusing unsafe runtime location: ${locationCheck.error}.`);
141
+ console.error('Move that path aside manually, verify it contains no needed files, then run:');
142
+ console.error(' npm rebuild superlocalmemory');
143
+ return 1;
144
+ }
145
+
146
+ console.log(` Python ${python.version.join('.')} (${[python.command, ...python.prefixArgs].join(' ')})`);
147
+
148
+ const createVenv = spawnSync(
149
+ python.command,
150
+ [...python.prefixArgs, '-m', 'venv', venvRoot],
151
+ { stdio: 'inherit', timeout: 120000, env: process.env },
152
+ );
153
+ if (createVenv.status !== 0) {
154
+ console.error(`SuperLocalMemory: could not create ${venvRoot} (${failureDetail(createVenv)}).`);
155
+ if (os.platform() === 'linux') {
156
+ console.error('Install your distribution\'s Python venv package (for example python3-venv), then run:');
221
157
  } else {
222
- console.log(' Claude Code hooks not installed (run: slm hooks install)');
223
- // Non-fatal — don't block npm install
158
+ console.error('Repair the selected Python installation so the stdlib venv module is available, then run:');
224
159
  }
160
+ console.error(' npm rebuild superlocalmemory');
161
+ return 1;
162
+ }
163
+
164
+ const runtimePython = runtimePythonPath(packageRoot);
165
+ const installPackage = spawnSync(
166
+ runtimePython,
167
+ [
168
+ '-m', 'pip', 'install',
169
+ '--disable-pip-version-check',
170
+ '--no-input',
171
+ '--upgrade',
172
+ packageRoot,
173
+ ],
174
+ { stdio: 'inherit', timeout: INSTALL_TIMEOUT_MS, env: process.env },
175
+ );
176
+ if (installPackage.status !== 0) {
177
+ console.error(`SuperLocalMemory: private-runtime installation failed (${failureDetail(installPackage)}).`);
178
+ console.error('Check network access, available disk space, and Python build prerequisites, then run:');
179
+ console.error(' npm rebuild superlocalmemory');
180
+ console.error('No system Python packages or SLM durable data were modified.');
181
+ return 1;
182
+ }
183
+
184
+ const verify = spawnSync(
185
+ runtimePython,
186
+ [
187
+ '-c',
188
+ "import importlib.metadata as m; print(m.version('superlocalmemory'))",
189
+ ],
190
+ { stdio: 'pipe', timeout: 15000, env: process.env },
191
+ );
192
+ const installedVersion = (verify.stdout || '').toString().trim();
193
+ if (verify.status !== 0 || installedVersion !== packageVersion) {
194
+ console.error(
195
+ `SuperLocalMemory: runtime identity check failed (npm=${packageVersion}, python=${installedVersion || 'unavailable'}).`,
196
+ );
197
+ console.error('Run `npm rebuild superlocalmemory` to repair the package-owned runtime.');
198
+ return 1;
199
+ }
200
+
201
+ console.log(`SuperLocalMemory ${packageVersion}: isolated runtime verified.`);
202
+ console.log('No memory database, IDE hooks, daemon, configuration, or models were changed.');
203
+ console.log('Run `slm setup` explicitly when you are ready to configure SLM.');
204
+ console.log('');
205
+ return 0;
225
206
  }
226
207
 
227
- // --- Step 6: Run interactive setup wizard ---
228
- // Downloads embedding + reranker models, configures mode, verifies installation.
229
- // If TTY is available (interactive terminal), runs the full wizard.
230
- // If not (CI, piped), uses defaults (Mode A, skip model download).
231
- console.log('\n════════════════════════════════════════════════════════════');
232
- console.log(' Running setup wizard (model download + verification)...');
233
- console.log('════════════════════════════════════════════════════════════\n');
234
-
235
- const isTTY = process.stdin.isTTY && process.stdout.isTTY;
236
- const setupArgs = isTTY ? ['setup'] : ['setup'];
237
- const setupEnv = {
238
- ...process.env,
239
- PATH: '/opt/homebrew/bin:/usr/local/bin:/usr/bin:' + (process.env.PATH || ''),
240
- PYTHONPATH: path.join(__dirname, '..', 'src') + ':' + (process.env.PYTHONPATH || ''),
241
- CUDA_VISIBLE_DEVICES: '',
242
- TOKENIZERS_PARALLELISM: 'false',
243
- TORCH_DEVICE: 'cpu',
244
- };
245
-
246
- // Non-interactive: set env flag so wizard uses defaults
247
- if (!isTTY) {
248
- setupEnv.SLM_NON_INTERACTIVE = '1';
249
- }
250
-
251
- const setupResult = spawnSync(pythonParts[0], [
252
- ...pythonParts.slice(1), '-m', 'superlocalmemory.cli.main', ...setupArgs,
253
- ], {
254
- stdio: 'inherit', // Show all output including download progress
255
- timeout: 900000, // 15 min (model downloads can be slow)
256
- env: setupEnv,
257
- });
258
-
259
- if (setupResult.status === 0) {
260
- console.log('✓ Setup wizard completed successfully');
261
- } else {
262
- console.log('⚠ Setup wizard had issues (run: slm setup)');
263
- console.log(' SuperLocalMemory will still work — models download on first use.');
208
+ if (require.main === module) {
209
+ process.exit(main());
264
210
  }
265
211
 
266
- // --- Done ---
267
- console.log('\n════════════════════════════════════════════════════════════');
268
- console.log(' ✓ SuperLocalMemory V3 — The Unified Brain installed!');
269
- console.log('');
270
- console.log(' Quick start:');
271
- console.log(' slm remember "..." # Store a memory');
272
- console.log(' slm recall "..." # Search memories');
273
- console.log(' slm dashboard # Open web dashboard');
274
- console.log(' slm serve # Start 24/7 daemon');
275
- console.log(' slm adapters enable gmail # Enable Gmail ingestion');
276
- console.log(' slm setup # Re-run 9-step wizard');
277
- console.log('');
278
- console.log(' New in v3.4.3:');
279
- console.log(' • Unified daemon (one process, 24/7, < 700MB)');
280
- console.log(' • SLM Mesh (agent-to-agent P2P built in)');
281
- console.log(' • Entity compilation (auto knowledge summaries)');
282
- console.log(' • Ingestion adapters (Gmail, Calendar, Transcripts)');
283
- console.log('');
284
- console.log(' Docs: https://github.com/qualixar/superlocalmemory');
285
- console.log('════════════════════════════════════════════════════════════\n');
286
-
287
- console.log('────────────────────────────────────────────────────────────');
288
- console.log(' ⭐ Help us grow!');
289
- console.log(' If this saves you time, please star the repo:');
290
- console.log(' https://github.com/qualixar/superlocalmemory');
291
- console.log(' Part of the Qualixar AI Agent Reliability Platform:');
292
- console.log(' https://qualixar.com (7 OSS products, 19K+ monthly downloads)');
293
- console.log('────────────────────────────────────────────────────────────\n');
212
+ module.exports = {
213
+ findSupportedPython,
214
+ isSupportedPython,
215
+ main,
216
+ parsePythonVersion,
217
+ pythonCandidates,
218
+ runtimePythonPath,
219
+ validateRuntimeLocation,
220
+ };
@@ -1,57 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * SuperLocalMemory V3 - NPM Preuninstall Script
3
+ * SuperLocalMemory NPM pre-uninstall notice.
4
4
  *
5
- * Copyright (c) 2026 Varun Pratap Bhardwaj
6
- * Solution Architect & Original Creator
5
+ * npm owns and removes the package directory, including its private Python
6
+ * runtime. Durable SLM data has separate ownership and is never inspected or
7
+ * modified by an application-code uninstall.
7
8
  *
8
- * Licensed under Elastic License 2.0 (see LICENSE file)
9
- * Repository: https://github.com/qualixar/superlocalmemory
10
- *
11
- * ATTRIBUTION REQUIRED: This notice must be preserved in all copies.
9
+ * Copyright (c) 2026 Varun Pratap Bhardwaj / Qualixar
10
+ * Licensed under AGPL-3.0-or-later.
12
11
  */
13
12
 
14
- const path = require('path');
15
- const os = require('os');
16
- const fs = require('fs');
17
-
18
- console.log('\n════════════════════════════════════════════════════════════');
19
- console.log(' SuperLocalMemory V3 - Uninstalling');
20
- console.log('════════════════════════════════════════════════════════════\n');
21
-
22
- const SLM_DIR = path.join(os.homedir(), '.superlocalmemory');
23
-
24
- if (fs.existsSync(SLM_DIR)) {
25
- console.log('⚠️ Your data is preserved at: ' + SLM_DIR);
26
- console.log('');
27
- console.log(' This includes:');
28
- console.log(' • Your memory database (memory.db)');
29
- console.log(' • All learned patterns');
30
- console.log(' • Knowledge graph');
31
- console.log(' • Profile data');
32
- console.log('');
33
- console.log(' To completely remove SuperLocalMemory:');
34
- if (os.platform() === 'win32') {
35
- console.log(' rmdir /s "' + SLM_DIR + '"');
36
- } else {
37
- console.log(' rm -rf "' + SLM_DIR + '"');
38
- }
39
- console.log('');
40
- console.log(' To backup your data first:');
41
- if (os.platform() === 'win32') {
42
- console.log(' xcopy "' + SLM_DIR + '" "%USERPROFILE%\\slm-backup\\" /E /I');
43
- } else {
44
- console.log(' cp -r "' + SLM_DIR + '" ~/slm-backup/');
45
- }
46
- console.log('');
47
- } else {
48
- console.log('ℹ️ No data directory found at ' + SLM_DIR);
49
- console.log('');
50
- }
51
-
52
- console.log('📦 Removing NPM package...');
53
- console.log(' (slm and superlocalmemory commands will be unavailable)');
54
- console.log('');
13
+ 'use strict';
55
14
 
56
- // No actual deletion here - we preserve user data
57
- // NPM will remove the package files automatically
15
+ console.log('SuperLocalMemory application code is being removed.');
16
+ console.log('Memory data is preserved. No database, profile, backup, or configuration was inspected or changed.');
@@ -1,7 +1,7 @@
1
1
  """SuperLocalMemory — information-geometric agent memory.
2
2
 
3
3
  v3.6.9: all 7 retrieval layers at full quality (Hopfield@1000, entity_graph@100,
4
- SA neighbor-cache fix, fast=True deprecated). See CHANGELOG.md.
4
+ SA neighbor-cache fix and a genuine latency-bounded fast path). See CHANGELOG.md.
5
5
  """
6
6
 
7
7
  import os
@@ -32,7 +32,7 @@ if "OMP_NUM_THREADS" not in os.environ:
32
32
  os.environ["OMP_NUM_THREADS"] = "2"
33
33
  # ---------------------------------------------------------------------------
34
34
 
35
- __version__ = "3.6.23"
35
+ __version__ = "3.7.0"
36
36
 
37
37
  _REQUIRED_VERSIONS = {
38
38
  "sentence_transformers": "5.3.0",
@@ -22,7 +22,7 @@ If the constraint is violated:
22
22
  - Overall retrieval quality drops 15-20%
23
23
 
24
24
  Part of Qualixar | Author: Varun Pratap Bhardwaj
25
- License: Elastic-2.0
25
+ License: AGPL-3.0-or-later
26
26
  """
27
27
 
28
28
  from __future__ import annotations