superlocalmemory 3.6.23 → 3.7.1

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 (285) hide show
  1. package/CHANGELOG.md +61 -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 +17 -9
  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/agents/slm-memory-advisor.md +1 -1
  18. package/plugin-src/manifest.json +1 -1
  19. package/plugin-src/requirements.txt +1 -1
  20. package/plugin-src/rules/AGENTS.md +1 -1
  21. package/plugin-src/skills/slm-session/SKILL.md +1 -1
  22. package/pyproject.toml +40 -8
  23. package/scripts/postinstall-interactive.js +17 -94
  24. package/scripts/postinstall.js +185 -258
  25. package/scripts/preuninstall.js +9 -50
  26. package/src/superlocalmemory/__init__.py +2 -2
  27. package/src/superlocalmemory/attribution/mathematical_dna.py +1 -1
  28. package/src/superlocalmemory/attribution/signer.py +34 -19
  29. package/src/superlocalmemory/attribution/watermark.py +1 -1
  30. package/src/superlocalmemory/cli/_lazy_init.py +7 -7
  31. package/src/superlocalmemory/cli/commands.py +453 -191
  32. package/src/superlocalmemory/cli/context_commands.py +5 -4
  33. package/src/superlocalmemory/cli/daemon.py +282 -187
  34. package/src/superlocalmemory/cli/db_migrate.py +3 -1
  35. package/src/superlocalmemory/cli/diagnostics_cmd.py +28 -0
  36. package/src/superlocalmemory/cli/evidence_cmd.py +103 -0
  37. package/src/superlocalmemory/cli/ingest_cmd.py +7 -3
  38. package/src/superlocalmemory/cli/main.py +128 -31
  39. package/src/superlocalmemory/cli/pending_store.py +54 -38
  40. package/src/superlocalmemory/cli/scale_engine_cmd.py +37 -0
  41. package/src/superlocalmemory/cli/service_installer.py +57 -52
  42. package/src/superlocalmemory/cli/setup_wizard.py +142 -88
  43. package/src/superlocalmemory/cli/version_banner.py +2 -1
  44. package/src/superlocalmemory/code_graph/config.py +3 -1
  45. package/src/superlocalmemory/core/backend_orchestrator.py +81 -21
  46. package/src/superlocalmemory/core/config.py +65 -20
  47. package/src/superlocalmemory/core/consolidation_engine.py +9 -7
  48. package/src/superlocalmemory/core/context_cache.py +56 -8
  49. package/src/superlocalmemory/core/derivation_lineage.py +246 -0
  50. package/src/superlocalmemory/core/embedding_worker.py +32 -20
  51. package/src/superlocalmemory/core/embeddings.py +54 -18
  52. package/src/superlocalmemory/core/engine.py +150 -104
  53. package/src/superlocalmemory/core/engine_ingestion.py +513 -0
  54. package/src/superlocalmemory/core/engine_wiring.py +32 -23
  55. package/src/superlocalmemory/core/evidence_bundle.py +526 -0
  56. package/src/superlocalmemory/core/fact_consolidator.py +5 -11
  57. package/src/superlocalmemory/core/graph_analyzer.py +2 -2
  58. package/src/superlocalmemory/core/health_monitor.py +4 -2
  59. package/src/superlocalmemory/core/ingestion_command.py +636 -0
  60. package/src/superlocalmemory/core/injection.py +69 -18
  61. package/src/superlocalmemory/core/lifecycle_state.py +153 -0
  62. package/src/superlocalmemory/core/maintenance.py +1 -1
  63. package/src/superlocalmemory/core/maintenance_scheduler.py +51 -35
  64. package/src/superlocalmemory/core/mutations.py +143 -0
  65. package/src/superlocalmemory/core/platform_utils.py +7 -4
  66. package/src/superlocalmemory/core/ram_lock.py +16 -5
  67. package/src/superlocalmemory/core/rate_limit.py +1 -1
  68. package/src/superlocalmemory/core/recall_pipeline.py +60 -101
  69. package/src/superlocalmemory/core/recall_worker.py +76 -59
  70. package/src/superlocalmemory/core/registry.py +1 -1
  71. package/src/superlocalmemory/core/scale_engine.py +293 -0
  72. package/src/superlocalmemory/core/score_contract.py +62 -0
  73. package/src/superlocalmemory/core/security_primitives.py +3 -1
  74. package/src/superlocalmemory/core/slm_disabled.py +3 -5
  75. package/src/superlocalmemory/core/store_pipeline.py +172 -40
  76. package/src/superlocalmemory/core/tier_manager.py +32 -20
  77. package/src/superlocalmemory/core/worker_pool.py +13 -4
  78. package/src/superlocalmemory/dynamics/activation_guided_quantization.py +1 -1
  79. package/src/superlocalmemory/dynamics/eap_scheduler.py +10 -3
  80. package/src/superlocalmemory/dynamics/ebbinghaus_langevin_coupling.py +1 -1
  81. package/src/superlocalmemory/dynamics/fisher_langevin_coupling.py +1 -1
  82. package/src/superlocalmemory/encoding/auto_linker.py +1 -1
  83. package/src/superlocalmemory/encoding/cognitive_consolidator.py +7 -16
  84. package/src/superlocalmemory/encoding/consolidator.py +22 -5
  85. package/src/superlocalmemory/encoding/fact_extractor.py +1 -1
  86. package/src/superlocalmemory/encoding/foresight.py +2 -0
  87. package/src/superlocalmemory/encoding/graph_builder.py +1 -1
  88. package/src/superlocalmemory/encoding/temporal_parser.py +2 -0
  89. package/src/superlocalmemory/evaluation/__init__.py +13 -0
  90. package/src/superlocalmemory/evaluation/calibration.py +308 -0
  91. package/src/superlocalmemory/evolution/skill_evolver.py +2 -1
  92. package/src/superlocalmemory/graph/cozo_backend.py +256 -23
  93. package/src/superlocalmemory/hooks/_outcome_common.py +21 -11
  94. package/src/superlocalmemory/hooks/antigravity_adapter.py +10 -31
  95. package/src/superlocalmemory/hooks/auto_invoker.py +25 -27
  96. package/src/superlocalmemory/hooks/auto_recall.py +31 -6
  97. package/src/superlocalmemory/hooks/auto_recall_hook.py +13 -33
  98. package/src/superlocalmemory/hooks/before_web_hook.py +9 -7
  99. package/src/superlocalmemory/hooks/claude_code_hooks.py +123 -35
  100. package/src/superlocalmemory/hooks/codex_assets.py +59 -0
  101. package/src/superlocalmemory/hooks/codex_hooks.py +186 -0
  102. package/src/superlocalmemory/hooks/context_payload.py +1 -1
  103. package/src/superlocalmemory/hooks/copilot_adapter.py +9 -24
  104. package/src/superlocalmemory/hooks/cursor_adapter.py +10 -32
  105. package/src/superlocalmemory/hooks/hook_daemon.py +4 -2
  106. package/src/superlocalmemory/hooks/hook_handlers.py +219 -32
  107. package/src/superlocalmemory/hooks/memory_protocol.py +5 -3
  108. package/src/superlocalmemory/hooks/post_tool_async_hook.py +4 -2
  109. package/src/superlocalmemory/hooks/session_registry.py +15 -8
  110. package/src/superlocalmemory/hooks/stop_outcome_hook.py +10 -6
  111. package/src/superlocalmemory/hooks/topic_shift_hook.py +42 -12
  112. package/src/superlocalmemory/hooks/user_prompt_hook.py +9 -14
  113. package/src/superlocalmemory/hooks/user_prompt_rehash_hook.py +19 -11
  114. package/src/superlocalmemory/infra/auth_middleware.py +38 -5
  115. package/src/superlocalmemory/infra/backup.py +7 -5
  116. package/src/superlocalmemory/infra/cloud_backup.py +18 -8
  117. package/src/superlocalmemory/infra/daemon_identity.py +248 -0
  118. package/src/superlocalmemory/infra/data_root.py +199 -0
  119. package/src/superlocalmemory/infra/event_bus.py +3 -1
  120. package/src/superlocalmemory/infra/local_diagnostics.py +327 -0
  121. package/src/superlocalmemory/infra/process_reaper.py +23 -0
  122. package/src/superlocalmemory/ingestion/adapter_manager.py +27 -9
  123. package/src/superlocalmemory/ingestion/base_adapter.py +25 -31
  124. package/src/superlocalmemory/ingestion/calendar_adapter.py +13 -4
  125. package/src/superlocalmemory/ingestion/credentials.py +14 -7
  126. package/src/superlocalmemory/ingestion/gmail_adapter.py +13 -4
  127. package/src/superlocalmemory/ingestion/transcript_adapter.py +7 -2
  128. package/src/superlocalmemory/learning/consolidation_quantization_worker.py +1 -1
  129. package/src/superlocalmemory/learning/ensemble.py +11 -0
  130. package/src/superlocalmemory/learning/entity_compiler.py +1 -1
  131. package/src/superlocalmemory/learning/feedback.py +1 -1
  132. package/src/superlocalmemory/learning/forgetting_scheduler.py +12 -7
  133. package/src/superlocalmemory/learning/quantization_scheduler.py +1 -1
  134. package/src/superlocalmemory/learning/ranker.py +4 -1
  135. package/src/superlocalmemory/learning/source_quality.py +1 -1
  136. package/src/superlocalmemory/learning/trigram_index.py +3 -2
  137. package/src/superlocalmemory/llm/backbone.py +1 -1
  138. package/src/superlocalmemory/math/ebbinghaus.py +1 -1
  139. package/src/superlocalmemory/math/fisher.py +1 -1
  140. package/src/superlocalmemory/math/fisher_quantized.py +1 -1
  141. package/src/superlocalmemory/math/hopfield.py +1 -1
  142. package/src/superlocalmemory/math/langevin.py +1 -1
  143. package/src/superlocalmemory/math/polar_quant.py +3 -4
  144. package/src/superlocalmemory/math/qjl.py +1 -1
  145. package/src/superlocalmemory/math/sheaf.py +1 -1
  146. package/src/superlocalmemory/math/turbo_quant.py +3 -2
  147. package/src/superlocalmemory/mcp/_daemon_proxy.py +12 -11
  148. package/src/superlocalmemory/mcp/_pool_adapter.py +27 -0
  149. package/src/superlocalmemory/mcp/http_transport.py +53 -0
  150. package/src/superlocalmemory/mcp/server.py +39 -13
  151. package/src/superlocalmemory/mcp/shared.py +69 -3
  152. package/src/superlocalmemory/mcp/tools_active.py +141 -31
  153. package/src/superlocalmemory/mcp/tools_core.py +130 -31
  154. package/src/superlocalmemory/mcp/tools_evolution.py +5 -7
  155. package/src/superlocalmemory/mcp/tools_learning.py +42 -2
  156. package/src/superlocalmemory/mcp/tools_mesh.py +7 -23
  157. package/src/superlocalmemory/mcp/tools_optimize.py +8 -1
  158. package/src/superlocalmemory/mcp/tools_v28.py +23 -2
  159. package/src/superlocalmemory/mcp/tools_v3.py +26 -1
  160. package/src/superlocalmemory/mcp/tools_v33.py +56 -17
  161. package/src/superlocalmemory/mesh/broker.py +2 -0
  162. package/src/superlocalmemory/mesh/remote_sync.py +50 -12
  163. package/src/superlocalmemory/optimize/cache/manager.py +77 -1
  164. package/src/superlocalmemory/optimize/cache/semantic.py +23 -3
  165. package/src/superlocalmemory/optimize/compress/ccr.py +4 -0
  166. package/src/superlocalmemory/optimize/compress/router.py +6 -1
  167. package/src/superlocalmemory/optimize/config/__init__.py +5 -0
  168. package/src/superlocalmemory/optimize/config/store.py +6 -4
  169. package/src/superlocalmemory/optimize/proxy/_helpers.py +15 -5
  170. package/src/superlocalmemory/optimize/proxy/capture.py +3 -2
  171. package/src/superlocalmemory/optimize/proxy/server.py +2 -2
  172. package/src/superlocalmemory/optimize/storage/db.py +12 -12
  173. package/src/superlocalmemory/retrieval/agentic.py +1 -1
  174. package/src/superlocalmemory/retrieval/ann_index.py +1 -1
  175. package/src/superlocalmemory/retrieval/bm25_channel.py +35 -11
  176. package/src/superlocalmemory/retrieval/bridge_discovery.py +73 -8
  177. package/src/superlocalmemory/retrieval/engine.py +169 -79
  178. package/src/superlocalmemory/retrieval/entity_channel.py +289 -67
  179. package/src/superlocalmemory/retrieval/forgetting_filter.py +1 -1
  180. package/src/superlocalmemory/retrieval/fusion.py +1 -1
  181. package/src/superlocalmemory/retrieval/hopfield_channel.py +118 -30
  182. package/src/superlocalmemory/retrieval/profile_channel.py +1 -1
  183. package/src/superlocalmemory/retrieval/quantization_aware_search.py +16 -10
  184. package/src/superlocalmemory/retrieval/reranker.py +56 -20
  185. package/src/superlocalmemory/retrieval/scope_policy.py +85 -0
  186. package/src/superlocalmemory/retrieval/semantic_channel.py +122 -14
  187. package/src/superlocalmemory/retrieval/spreading_activation.py +141 -25
  188. package/src/superlocalmemory/retrieval/strategy.py +1 -1
  189. package/src/superlocalmemory/retrieval/temporal_channel.py +30 -15
  190. package/src/superlocalmemory/retrieval/vector_store.py +1 -1
  191. package/src/superlocalmemory/server/api.py +10 -7
  192. package/src/superlocalmemory/server/bandit_loops.py +4 -2
  193. package/src/superlocalmemory/server/recall_serializer.py +24 -0
  194. package/src/superlocalmemory/server/route_mutations.py +84 -0
  195. package/src/superlocalmemory/server/routes/agents.py +8 -6
  196. package/src/superlocalmemory/server/routes/brain.py +14 -12
  197. package/src/superlocalmemory/server/routes/chat.py +29 -12
  198. package/src/superlocalmemory/server/routes/data_io.py +55 -24
  199. package/src/superlocalmemory/server/routes/helpers.py +8 -63
  200. package/src/superlocalmemory/server/routes/ingest.py +53 -36
  201. package/src/superlocalmemory/server/routes/memories.py +104 -43
  202. package/src/superlocalmemory/server/routes/mesh.py +31 -0
  203. package/src/superlocalmemory/server/routes/profiles.py +26 -4
  204. package/src/superlocalmemory/server/routes/tiers.py +43 -11
  205. package/src/superlocalmemory/server/routes/timeline.py +5 -1
  206. package/src/superlocalmemory/server/routes/v3_api.py +76 -21
  207. package/src/superlocalmemory/server/security_middleware.py +1 -1
  208. package/src/superlocalmemory/server/unified_daemon.py +680 -293
  209. package/src/superlocalmemory/server/write_identity.py +147 -0
  210. package/src/superlocalmemory/storage/access_log.py +4 -3
  211. package/src/superlocalmemory/storage/database.py +118 -25
  212. package/src/superlocalmemory/storage/migration_runner.py +84 -1
  213. package/src/superlocalmemory/storage/migration_v33.py +1 -1
  214. package/src/superlocalmemory/storage/migrations/M002_model_state_history.py +6 -60
  215. package/src/superlocalmemory/storage/migrations/M018_ingestion_operations.py +120 -0
  216. package/src/superlocalmemory/storage/migrations/M019_derivation_lineage.py +54 -0
  217. package/src/superlocalmemory/storage/migrations/M020_model_state_integrity.py +52 -0
  218. package/src/superlocalmemory/storage/migrations/__init__.py +5 -0
  219. package/src/superlocalmemory/storage/models.py +16 -0
  220. package/src/superlocalmemory/storage/quantized_store.py +20 -3
  221. package/src/superlocalmemory/storage/v2_migrator.py +5 -3
  222. package/src/superlocalmemory/ui/favicon.svg +5 -0
  223. package/src/superlocalmemory/ui/index.html +1 -0
  224. package/src/superlocalmemory/ui/js/compliance.js +1 -1
  225. package/src/superlocalmemory/ui/js/core.js +49 -8
  226. package/src/superlocalmemory/ui/js/dashboard.js +23 -2
  227. package/src/superlocalmemory/ui/js/feedback.js +1 -1
  228. package/src/superlocalmemory/ui/js/graph-filters.js +1 -1
  229. package/src/superlocalmemory/ui/js/graph-ui.js +1 -1
  230. package/src/superlocalmemory/ui/js/lifecycle.js +1 -1
  231. package/src/superlocalmemory/ui/js/ng-mesh.js +15 -49
  232. package/src/superlocalmemory/ui/js/settings.js +4 -2
  233. package/src/superlocalmemory/vector/lancedb_backend.py +57 -9
  234. package/bin/slm +0 -59
  235. package/bin/slm.bat +0 -77
  236. package/bin/slm.cmd +0 -5
  237. package/ide/integrations/langchain/README.md +0 -106
  238. package/ide/integrations/langchain/langchain_superlocalmemory/__init__.py +0 -9
  239. package/ide/integrations/langchain/langchain_superlocalmemory/chat_message_history.py +0 -201
  240. package/ide/integrations/langchain/pyproject.toml +0 -38
  241. package/ide/integrations/langchain/tests/__init__.py +0 -3
  242. package/ide/integrations/langchain/tests/test_chat_message_history.py +0 -215
  243. package/ide/integrations/langchain/tests/test_security.py +0 -117
  244. package/ide/integrations/llamaindex/README.md +0 -81
  245. package/ide/integrations/llamaindex/llama_index/storage/chat_store/superlocalmemory/__init__.py +0 -9
  246. package/ide/integrations/llamaindex/llama_index/storage/chat_store/superlocalmemory/base.py +0 -316
  247. package/ide/integrations/llamaindex/pyproject.toml +0 -43
  248. package/ide/integrations/llamaindex/tests/__init__.py +0 -3
  249. package/ide/integrations/llamaindex/tests/test_chat_store.py +0 -294
  250. package/ide/integrations/llamaindex/tests/test_security.py +0 -241
  251. package/scripts/__tests__/build-plugin.test.mjs +0 -613
  252. package/scripts/_savings_math.py +0 -270
  253. package/scripts/build-dmg.sh +0 -417
  254. package/scripts/build-plugin.js +0 -742
  255. package/scripts/build-slm-hook.ps1 +0 -40
  256. package/scripts/build-slm-hook.sh +0 -45
  257. package/scripts/build_entry.py +0 -452
  258. package/scripts/ci/stage5b_gate.sh +0 -50
  259. package/scripts/dogfood_savings.py +0 -490
  260. package/scripts/generate-thumbnails.py +0 -218
  261. package/scripts/install-skills.ps1 +0 -4
  262. package/scripts/install-skills.sh +0 -5
  263. package/scripts/install.ps1 +0 -701
  264. package/scripts/install.sh +0 -1015
  265. package/scripts/postinstall_binary.js +0 -287
  266. package/scripts/prepack.js +0 -33
  267. package/scripts/release_manifest.py +0 -273
  268. package/scripts/slm-hook.spec +0 -56
  269. package/scripts/start-dashboard.ps1 +0 -52
  270. package/scripts/start-dashboard.sh +0 -41
  271. package/scripts/sync-wiki.ps1 +0 -127
  272. package/scripts/sync-wiki.sh +0 -82
  273. package/scripts/test-dmg.sh +0 -161
  274. package/scripts/test-npm-package.ps1 +0 -252
  275. package/scripts/test-npm-package.sh +0 -207
  276. package/scripts/verify-install.ps1 +0 -294
  277. package/scripts/verify-install.sh +0 -266
  278. package/scripts/verify-v27.ps1 +0 -301
  279. package/scripts/verify-v27.sh +0 -233
  280. package/src/superlocalmemory.egg-info/PKG-INFO +0 -516
  281. package/src/superlocalmemory.egg-info/SOURCES.txt +0 -529
  282. package/src/superlocalmemory.egg-info/dependency_links.txt +0 -1
  283. package/src/superlocalmemory.egg-info/entry_points.txt +0 -2
  284. package/src/superlocalmemory.egg-info/requires.txt +0 -71
  285. package/src/superlocalmemory.egg-info/top_level.txt +0 -1
@@ -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.1"
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
@@ -9,7 +9,7 @@ by the system carries a verifiable proof of origin. Verification
9
9
  detects any modification to the content after signing.
10
10
 
11
11
  Part of Qualixar | Author: Varun Pratap Bhardwaj
12
- License: Elastic-2.0
12
+ License: AGPL-3.0-or-later
13
13
  """
14
14
 
15
15
  from __future__ import annotations
@@ -17,33 +17,46 @@ from __future__ import annotations
17
17
  import hashlib
18
18
  import hmac
19
19
  import os
20
- import sys
21
20
  from datetime import datetime, timezone
22
21
  from typing import Dict
23
22
 
23
+ from superlocalmemory.infra.data_root import state_path
24
+
25
+
24
26
  def _get_or_create_key() -> str:
25
27
  """Load key from env or generate a persistent random one."""
26
28
  env_key = os.environ.get("SLM_SIGNER_KEY")
27
29
  if env_key:
28
30
  return env_key
29
- key_path = os.path.expanduser("~/.superlocalmemory/.signer_key")
31
+
32
+ key_path = state_path(".signer_key")
30
33
  try:
31
- with open(key_path) as f:
32
- return f.read().strip()
34
+ key = key_path.read_text(encoding="utf-8").strip()
33
35
  except FileNotFoundError:
34
- import secrets
35
- key = secrets.token_hex(32)
36
- os.makedirs(os.path.dirname(key_path), exist_ok=True)
37
- with open(key_path, "w") as f:
38
- f.write(key)
39
- # On POSIX, restrict the key file to owner-only read/write.
40
- # On Windows, os.chmod only supports setting the read-only flag
41
- # and cannot enforce Unix-style permissions, so we skip it.
42
- if sys.platform != "win32":
43
- os.chmod(key_path, 0o600)
36
+ key = ""
37
+ if key:
44
38
  return key
45
39
 
46
- _DEFAULT_KEY: str = _get_or_create_key()
40
+ import secrets
41
+
42
+ key = secrets.token_hex(32)
43
+ key_path.parent.mkdir(parents=True, exist_ok=True)
44
+ flags = os.O_WRONLY | os.O_CREAT | os.O_EXCL
45
+ if hasattr(os, "O_NOFOLLOW"):
46
+ flags |= os.O_NOFOLLOW
47
+ try:
48
+ fd = os.open(str(key_path), flags, 0o600)
49
+ try:
50
+ os.write(fd, key.encode("utf-8"))
51
+ finally:
52
+ os.close(fd)
53
+ except FileExistsError:
54
+ key = key_path.read_text(encoding="utf-8").strip()
55
+ if not key:
56
+ raise RuntimeError(f"signer key is empty: {key_path}")
57
+ if os.name != "nt":
58
+ os.chmod(key_path, 0o600)
59
+ return key
47
60
 
48
61
 
49
62
  class QualixarSigner:
@@ -63,9 +76,11 @@ class QualixarSigner:
63
76
  _PLATFORM: str = "Qualixar"
64
77
  _AUTHOR: str = "Varun Pratap Bhardwaj"
65
78
  _AUTHOR_URL: str = "https://varunpratap.com"
66
- _LICENSE: str = "MIT"
79
+ _LICENSE: str = "AGPL-3.0-or-later"
67
80
 
68
- def __init__(self, secret_key: str = _DEFAULT_KEY) -> None:
81
+ def __init__(self, secret_key: str | None = None) -> None:
82
+ if secret_key is None:
83
+ secret_key = _get_or_create_key()
69
84
  if not secret_key:
70
85
  raise ValueError("secret_key must be a non-empty string")
71
86
  self._secret_key: bytes = secret_key.encode("utf-8")
@@ -85,7 +100,7 @@ class QualixarSigner:
85
100
 
86
101
  - ``platform`` – always ``"Qualixar"``
87
102
  - ``author`` – always ``"Varun Pratap Bhardwaj"``
88
- - ``license`` – always ``"MIT"``
103
+ - ``license`` – always ``"AGPL-3.0-or-later"``
89
104
  - ``content_hash`` – SHA-256 hex digest of *content*
90
105
  - ``signature`` – HMAC-SHA256 hex digest (key-dependent)
91
106
  - ``timestamp`` – ISO 8601 UTC timestamp
@@ -25,7 +25,7 @@ Encoding scheme
25
25
  visible character of the host text.
26
26
 
27
27
  Part of Qualixar | Author: Varun Pratap Bhardwaj
28
- License: Elastic-2.0
28
+ License: AGPL-3.0-or-later
29
29
  """
30
30
 
31
31
  from __future__ import annotations
@@ -4,7 +4,7 @@
4
4
 
5
5
  """WP-07 — Lazy first-run initialisation (pip cross-install).
6
6
 
7
- stdlib-only — zero heavy imports, STDOUT-SILENT.
7
+ Lightweight import only — zero heavy imports, STDOUT-SILENT.
8
8
 
9
9
  Public API
10
10
  ----------
@@ -25,6 +25,8 @@ import json
25
25
  import os
26
26
  from pathlib import Path
27
27
 
28
+ from superlocalmemory import __version__ as _RUNTIME_VERSION
29
+
28
30
 
29
31
  # ---------------------------------------------------------------------------
30
32
  # Public: home resolution
@@ -42,11 +44,9 @@ def slm_home() -> Path:
42
44
 
43
45
  Pure: no mkdir, no side effects.
44
46
  """
45
- for var in ("SLM_DATA_DIR", "SL_MEMORY_PATH", "SLM_HOME"):
46
- val = os.environ.get(var, "").strip()
47
- if val:
48
- return Path(val)
49
- return Path.home() / ".superlocalmemory"
47
+ from superlocalmemory.infra.data_root import canonical_data_root
48
+
49
+ return canonical_data_root()
50
50
 
51
51
 
52
52
  # ---------------------------------------------------------------------------
@@ -57,7 +57,7 @@ def slm_home() -> Path:
57
57
  # Only mode + base_dir; everything else uses SLMConfig defaults.
58
58
  _MINIMAL_CONFIG: dict = {
59
59
  "mode": "a",
60
- "version": "3.6.14",
60
+ "version": _RUNTIME_VERSION,
61
61
  }
62
62
 
63
63