superlocalmemory 2.8.6 → 3.0.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 (431) hide show
  1. package/LICENSE +9 -1
  2. package/NOTICE +63 -0
  3. package/README.md +165 -480
  4. package/bin/slm +17 -449
  5. package/bin/slm-npm +62 -48
  6. package/conftest.py +5 -0
  7. package/docs/api-reference.md +284 -0
  8. package/docs/architecture.md +149 -0
  9. package/docs/auto-memory.md +150 -0
  10. package/docs/cli-reference.md +276 -0
  11. package/docs/compliance.md +191 -0
  12. package/docs/configuration.md +182 -0
  13. package/docs/getting-started.md +102 -0
  14. package/docs/ide-setup.md +261 -0
  15. package/docs/mcp-tools.md +220 -0
  16. package/docs/migration-from-v2.md +170 -0
  17. package/docs/profiles.md +173 -0
  18. package/docs/troubleshooting.md +310 -0
  19. package/{configs → ide/configs}/antigravity-mcp.json +3 -3
  20. package/ide/configs/chatgpt-desktop-mcp.json +16 -0
  21. package/{configs → ide/configs}/claude-desktop-mcp.json +3 -3
  22. package/{configs → ide/configs}/codex-mcp.toml +4 -4
  23. package/{configs → ide/configs}/continue-mcp.yaml +4 -3
  24. package/{configs → ide/configs}/continue-skills.yaml +6 -6
  25. package/ide/configs/cursor-mcp.json +15 -0
  26. package/{configs → ide/configs}/gemini-cli-mcp.json +2 -2
  27. package/{configs → ide/configs}/jetbrains-mcp.json +2 -2
  28. package/{configs → ide/configs}/opencode-mcp.json +2 -2
  29. package/{configs → ide/configs}/perplexity-mcp.json +2 -2
  30. package/{configs → ide/configs}/vscode-copilot-mcp.json +2 -2
  31. package/{configs → ide/configs}/windsurf-mcp.json +3 -3
  32. package/{configs → ide/configs}/zed-mcp.json +2 -2
  33. package/{hooks → ide/hooks}/context-hook.js +9 -20
  34. package/ide/hooks/memory-list-skill.js +70 -0
  35. package/ide/hooks/memory-profile-skill.js +101 -0
  36. package/ide/hooks/memory-recall-skill.js +62 -0
  37. package/ide/hooks/memory-remember-skill.js +68 -0
  38. package/ide/hooks/memory-reset-skill.js +160 -0
  39. package/{hooks → ide/hooks}/post-recall-hook.js +2 -2
  40. package/ide/integrations/langchain/README.md +106 -0
  41. package/ide/integrations/langchain/langchain_superlocalmemory/__init__.py +9 -0
  42. package/ide/integrations/langchain/langchain_superlocalmemory/chat_message_history.py +201 -0
  43. package/ide/integrations/langchain/pyproject.toml +38 -0
  44. package/{src/learning → ide/integrations/langchain}/tests/__init__.py +1 -0
  45. package/ide/integrations/langchain/tests/test_chat_message_history.py +215 -0
  46. package/ide/integrations/langchain/tests/test_security.py +117 -0
  47. package/ide/integrations/llamaindex/README.md +81 -0
  48. package/ide/integrations/llamaindex/llama_index/storage/chat_store/superlocalmemory/__init__.py +9 -0
  49. package/ide/integrations/llamaindex/llama_index/storage/chat_store/superlocalmemory/base.py +316 -0
  50. package/ide/integrations/llamaindex/pyproject.toml +43 -0
  51. package/{src/lifecycle → ide/integrations/llamaindex}/tests/__init__.py +1 -2
  52. package/ide/integrations/llamaindex/tests/test_chat_store.py +294 -0
  53. package/ide/integrations/llamaindex/tests/test_security.py +241 -0
  54. package/{skills → ide/skills}/slm-build-graph/SKILL.md +6 -6
  55. package/{skills → ide/skills}/slm-list-recent/SKILL.md +5 -5
  56. package/{skills → ide/skills}/slm-recall/SKILL.md +5 -5
  57. package/{skills → ide/skills}/slm-remember/SKILL.md +6 -6
  58. package/{skills → ide/skills}/slm-show-patterns/SKILL.md +7 -7
  59. package/{skills → ide/skills}/slm-status/SKILL.md +9 -9
  60. package/{skills → ide/skills}/slm-switch-profile/SKILL.md +9 -9
  61. package/package.json +13 -22
  62. package/pyproject.toml +85 -0
  63. package/scripts/build-dmg.sh +417 -0
  64. package/scripts/install-skills.ps1 +334 -0
  65. package/scripts/postinstall.js +2 -2
  66. package/scripts/start-dashboard.ps1 +52 -0
  67. package/scripts/start-dashboard.sh +41 -0
  68. package/scripts/sync-wiki.ps1 +127 -0
  69. package/scripts/sync-wiki.sh +82 -0
  70. package/scripts/test-dmg.sh +161 -0
  71. package/scripts/test-npm-package.ps1 +252 -0
  72. package/scripts/test-npm-package.sh +207 -0
  73. package/scripts/verify-install.ps1 +294 -0
  74. package/scripts/verify-install.sh +266 -0
  75. package/src/superlocalmemory/__init__.py +0 -0
  76. package/src/superlocalmemory/attribution/__init__.py +9 -0
  77. package/src/superlocalmemory/attribution/mathematical_dna.py +235 -0
  78. package/src/superlocalmemory/attribution/signer.py +153 -0
  79. package/src/superlocalmemory/attribution/watermark.py +189 -0
  80. package/src/superlocalmemory/cli/__init__.py +5 -0
  81. package/src/superlocalmemory/cli/commands.py +245 -0
  82. package/src/superlocalmemory/cli/main.py +89 -0
  83. package/src/superlocalmemory/cli/migrate_cmd.py +55 -0
  84. package/src/superlocalmemory/cli/post_install.py +99 -0
  85. package/src/superlocalmemory/cli/setup_wizard.py +129 -0
  86. package/src/superlocalmemory/compliance/__init__.py +0 -0
  87. package/src/superlocalmemory/compliance/abac.py +204 -0
  88. package/src/superlocalmemory/compliance/audit.py +314 -0
  89. package/src/superlocalmemory/compliance/eu_ai_act.py +131 -0
  90. package/src/superlocalmemory/compliance/gdpr.py +294 -0
  91. package/src/superlocalmemory/compliance/lifecycle.py +158 -0
  92. package/src/superlocalmemory/compliance/retention.py +232 -0
  93. package/src/superlocalmemory/compliance/scheduler.py +148 -0
  94. package/src/superlocalmemory/core/__init__.py +0 -0
  95. package/src/superlocalmemory/core/config.py +391 -0
  96. package/src/superlocalmemory/core/embeddings.py +293 -0
  97. package/src/superlocalmemory/core/engine.py +701 -0
  98. package/src/superlocalmemory/core/hooks.py +65 -0
  99. package/src/superlocalmemory/core/maintenance.py +172 -0
  100. package/src/superlocalmemory/core/modes.py +140 -0
  101. package/src/superlocalmemory/core/profiles.py +234 -0
  102. package/src/superlocalmemory/core/registry.py +117 -0
  103. package/src/superlocalmemory/dynamics/__init__.py +0 -0
  104. package/src/superlocalmemory/dynamics/fisher_langevin_coupling.py +223 -0
  105. package/src/superlocalmemory/encoding/__init__.py +0 -0
  106. package/src/superlocalmemory/encoding/consolidator.py +485 -0
  107. package/src/superlocalmemory/encoding/emotional.py +125 -0
  108. package/src/superlocalmemory/encoding/entity_resolver.py +525 -0
  109. package/src/superlocalmemory/encoding/entropy_gate.py +104 -0
  110. package/src/superlocalmemory/encoding/fact_extractor.py +775 -0
  111. package/src/superlocalmemory/encoding/foresight.py +91 -0
  112. package/src/superlocalmemory/encoding/graph_builder.py +302 -0
  113. package/src/superlocalmemory/encoding/observation_builder.py +160 -0
  114. package/src/superlocalmemory/encoding/scene_builder.py +183 -0
  115. package/src/superlocalmemory/encoding/signal_inference.py +90 -0
  116. package/src/superlocalmemory/encoding/temporal_parser.py +426 -0
  117. package/src/superlocalmemory/encoding/type_router.py +235 -0
  118. package/src/superlocalmemory/hooks/__init__.py +3 -0
  119. package/src/superlocalmemory/hooks/auto_capture.py +111 -0
  120. package/src/superlocalmemory/hooks/auto_recall.py +93 -0
  121. package/src/superlocalmemory/hooks/ide_connector.py +204 -0
  122. package/src/superlocalmemory/hooks/rules_engine.py +99 -0
  123. package/src/superlocalmemory/infra/__init__.py +3 -0
  124. package/src/superlocalmemory/infra/auth_middleware.py +82 -0
  125. package/src/superlocalmemory/infra/backup.py +317 -0
  126. package/src/superlocalmemory/infra/cache_manager.py +267 -0
  127. package/src/superlocalmemory/infra/event_bus.py +381 -0
  128. package/src/superlocalmemory/infra/rate_limiter.py +135 -0
  129. package/src/{webhook_dispatcher.py → superlocalmemory/infra/webhook_dispatcher.py} +104 -101
  130. package/src/superlocalmemory/learning/__init__.py +0 -0
  131. package/src/superlocalmemory/learning/adaptive.py +172 -0
  132. package/src/superlocalmemory/learning/behavioral.py +490 -0
  133. package/src/superlocalmemory/learning/behavioral_listener.py +94 -0
  134. package/src/superlocalmemory/learning/bootstrap.py +298 -0
  135. package/src/superlocalmemory/learning/cross_project.py +399 -0
  136. package/src/superlocalmemory/learning/database.py +376 -0
  137. package/src/superlocalmemory/learning/engagement.py +323 -0
  138. package/src/superlocalmemory/learning/features.py +138 -0
  139. package/src/superlocalmemory/learning/feedback.py +316 -0
  140. package/src/superlocalmemory/learning/outcomes.py +255 -0
  141. package/src/superlocalmemory/learning/project_context.py +366 -0
  142. package/src/superlocalmemory/learning/ranker.py +155 -0
  143. package/src/superlocalmemory/learning/source_quality.py +303 -0
  144. package/src/superlocalmemory/learning/workflows.py +309 -0
  145. package/src/superlocalmemory/llm/__init__.py +0 -0
  146. package/src/superlocalmemory/llm/backbone.py +316 -0
  147. package/src/superlocalmemory/math/__init__.py +0 -0
  148. package/src/superlocalmemory/math/fisher.py +356 -0
  149. package/src/superlocalmemory/math/langevin.py +398 -0
  150. package/src/superlocalmemory/math/sheaf.py +257 -0
  151. package/src/superlocalmemory/mcp/__init__.py +0 -0
  152. package/src/superlocalmemory/mcp/resources.py +245 -0
  153. package/src/superlocalmemory/mcp/server.py +61 -0
  154. package/src/superlocalmemory/mcp/tools.py +18 -0
  155. package/src/superlocalmemory/mcp/tools_core.py +305 -0
  156. package/src/superlocalmemory/mcp/tools_v28.py +223 -0
  157. package/src/superlocalmemory/mcp/tools_v3.py +286 -0
  158. package/src/superlocalmemory/retrieval/__init__.py +0 -0
  159. package/src/superlocalmemory/retrieval/agentic.py +295 -0
  160. package/src/superlocalmemory/retrieval/ann_index.py +223 -0
  161. package/src/superlocalmemory/retrieval/bm25_channel.py +185 -0
  162. package/src/superlocalmemory/retrieval/bridge_discovery.py +170 -0
  163. package/src/superlocalmemory/retrieval/engine.py +390 -0
  164. package/src/superlocalmemory/retrieval/entity_channel.py +179 -0
  165. package/src/superlocalmemory/retrieval/fusion.py +78 -0
  166. package/src/superlocalmemory/retrieval/profile_channel.py +105 -0
  167. package/src/superlocalmemory/retrieval/reranker.py +154 -0
  168. package/src/superlocalmemory/retrieval/semantic_channel.py +232 -0
  169. package/src/superlocalmemory/retrieval/strategy.py +96 -0
  170. package/src/superlocalmemory/retrieval/temporal_channel.py +175 -0
  171. package/src/superlocalmemory/server/__init__.py +1 -0
  172. package/src/superlocalmemory/server/api.py +248 -0
  173. package/src/superlocalmemory/server/routes/__init__.py +4 -0
  174. package/src/superlocalmemory/server/routes/agents.py +107 -0
  175. package/src/superlocalmemory/server/routes/backup.py +91 -0
  176. package/src/superlocalmemory/server/routes/behavioral.py +127 -0
  177. package/src/superlocalmemory/server/routes/compliance.py +160 -0
  178. package/src/superlocalmemory/server/routes/data_io.py +188 -0
  179. package/src/superlocalmemory/server/routes/events.py +183 -0
  180. package/src/superlocalmemory/server/routes/helpers.py +85 -0
  181. package/src/superlocalmemory/server/routes/learning.py +273 -0
  182. package/src/superlocalmemory/server/routes/lifecycle.py +116 -0
  183. package/src/superlocalmemory/server/routes/memories.py +399 -0
  184. package/src/superlocalmemory/server/routes/profiles.py +219 -0
  185. package/src/superlocalmemory/server/routes/stats.py +346 -0
  186. package/src/superlocalmemory/server/routes/v3_api.py +365 -0
  187. package/src/superlocalmemory/server/routes/ws.py +82 -0
  188. package/src/superlocalmemory/server/security_middleware.py +57 -0
  189. package/src/superlocalmemory/server/ui.py +245 -0
  190. package/src/superlocalmemory/storage/__init__.py +0 -0
  191. package/src/superlocalmemory/storage/access_control.py +182 -0
  192. package/src/superlocalmemory/storage/database.py +594 -0
  193. package/src/superlocalmemory/storage/migrations.py +303 -0
  194. package/src/superlocalmemory/storage/models.py +406 -0
  195. package/src/superlocalmemory/storage/schema.py +726 -0
  196. package/src/superlocalmemory/storage/v2_migrator.py +317 -0
  197. package/src/superlocalmemory/trust/__init__.py +0 -0
  198. package/src/superlocalmemory/trust/gate.py +130 -0
  199. package/src/superlocalmemory/trust/provenance.py +124 -0
  200. package/src/superlocalmemory/trust/scorer.py +347 -0
  201. package/src/superlocalmemory/trust/signals.py +153 -0
  202. package/ui/index.html +278 -5
  203. package/ui/js/auto-settings.js +70 -0
  204. package/ui/js/dashboard.js +90 -0
  205. package/ui/js/fact-detail.js +92 -0
  206. package/ui/js/feedback.js +2 -2
  207. package/ui/js/ide-status.js +102 -0
  208. package/ui/js/math-health.js +98 -0
  209. package/ui/js/recall-lab.js +127 -0
  210. package/ui/js/settings.js +2 -2
  211. package/ui/js/trust-dashboard.js +73 -0
  212. package/api_server.py +0 -724
  213. package/bin/aider-smart +0 -72
  214. package/bin/superlocalmemoryv2-learning +0 -4
  215. package/bin/superlocalmemoryv2-list +0 -3
  216. package/bin/superlocalmemoryv2-patterns +0 -4
  217. package/bin/superlocalmemoryv2-profile +0 -3
  218. package/bin/superlocalmemoryv2-recall +0 -3
  219. package/bin/superlocalmemoryv2-remember +0 -3
  220. package/bin/superlocalmemoryv2-reset +0 -3
  221. package/bin/superlocalmemoryv2-status +0 -3
  222. package/configs/chatgpt-desktop-mcp.json +0 -16
  223. package/configs/cursor-mcp.json +0 -15
  224. package/hooks/memory-list-skill.js +0 -139
  225. package/hooks/memory-profile-skill.js +0 -273
  226. package/hooks/memory-recall-skill.js +0 -114
  227. package/hooks/memory-remember-skill.js +0 -127
  228. package/hooks/memory-reset-skill.js +0 -274
  229. package/mcp_server.py +0 -1808
  230. package/requirements-core.txt +0 -22
  231. package/requirements-learning.txt +0 -12
  232. package/requirements.txt +0 -12
  233. package/src/agent_registry.py +0 -411
  234. package/src/auth_middleware.py +0 -61
  235. package/src/auto_backup.py +0 -459
  236. package/src/behavioral/__init__.py +0 -49
  237. package/src/behavioral/behavioral_listener.py +0 -203
  238. package/src/behavioral/behavioral_patterns.py +0 -275
  239. package/src/behavioral/cross_project_transfer.py +0 -206
  240. package/src/behavioral/outcome_inference.py +0 -194
  241. package/src/behavioral/outcome_tracker.py +0 -193
  242. package/src/behavioral/tests/__init__.py +0 -4
  243. package/src/behavioral/tests/test_behavioral_integration.py +0 -108
  244. package/src/behavioral/tests/test_behavioral_patterns.py +0 -150
  245. package/src/behavioral/tests/test_cross_project_transfer.py +0 -142
  246. package/src/behavioral/tests/test_mcp_behavioral.py +0 -139
  247. package/src/behavioral/tests/test_mcp_report_outcome.py +0 -117
  248. package/src/behavioral/tests/test_outcome_inference.py +0 -107
  249. package/src/behavioral/tests/test_outcome_tracker.py +0 -96
  250. package/src/cache_manager.py +0 -518
  251. package/src/compliance/__init__.py +0 -48
  252. package/src/compliance/abac_engine.py +0 -149
  253. package/src/compliance/abac_middleware.py +0 -116
  254. package/src/compliance/audit_db.py +0 -215
  255. package/src/compliance/audit_logger.py +0 -148
  256. package/src/compliance/retention_manager.py +0 -289
  257. package/src/compliance/retention_scheduler.py +0 -186
  258. package/src/compliance/tests/__init__.py +0 -4
  259. package/src/compliance/tests/test_abac_enforcement.py +0 -95
  260. package/src/compliance/tests/test_abac_engine.py +0 -124
  261. package/src/compliance/tests/test_abac_mcp_integration.py +0 -118
  262. package/src/compliance/tests/test_audit_db.py +0 -123
  263. package/src/compliance/tests/test_audit_logger.py +0 -98
  264. package/src/compliance/tests/test_mcp_audit.py +0 -128
  265. package/src/compliance/tests/test_mcp_retention_policy.py +0 -125
  266. package/src/compliance/tests/test_retention_manager.py +0 -131
  267. package/src/compliance/tests/test_retention_scheduler.py +0 -99
  268. package/src/compression/__init__.py +0 -25
  269. package/src/compression/cli.py +0 -150
  270. package/src/compression/cold_storage.py +0 -217
  271. package/src/compression/config.py +0 -72
  272. package/src/compression/orchestrator.py +0 -133
  273. package/src/compression/tier2_compressor.py +0 -228
  274. package/src/compression/tier3_compressor.py +0 -153
  275. package/src/compression/tier_classifier.py +0 -148
  276. package/src/db_connection_manager.py +0 -536
  277. package/src/embedding_engine.py +0 -63
  278. package/src/embeddings/__init__.py +0 -47
  279. package/src/embeddings/cache.py +0 -70
  280. package/src/embeddings/cli.py +0 -113
  281. package/src/embeddings/constants.py +0 -47
  282. package/src/embeddings/database.py +0 -91
  283. package/src/embeddings/engine.py +0 -247
  284. package/src/embeddings/model_loader.py +0 -145
  285. package/src/event_bus.py +0 -562
  286. package/src/graph/__init__.py +0 -36
  287. package/src/graph/build_helpers.py +0 -74
  288. package/src/graph/cli.py +0 -87
  289. package/src/graph/cluster_builder.py +0 -188
  290. package/src/graph/cluster_summary.py +0 -148
  291. package/src/graph/constants.py +0 -47
  292. package/src/graph/edge_builder.py +0 -162
  293. package/src/graph/entity_extractor.py +0 -95
  294. package/src/graph/graph_core.py +0 -226
  295. package/src/graph/graph_search.py +0 -231
  296. package/src/graph/hierarchical.py +0 -207
  297. package/src/graph/schema.py +0 -99
  298. package/src/graph_engine.py +0 -52
  299. package/src/hnsw_index.py +0 -628
  300. package/src/hybrid_search.py +0 -46
  301. package/src/learning/__init__.py +0 -217
  302. package/src/learning/adaptive_ranker.py +0 -682
  303. package/src/learning/bootstrap/__init__.py +0 -69
  304. package/src/learning/bootstrap/constants.py +0 -93
  305. package/src/learning/bootstrap/db_queries.py +0 -316
  306. package/src/learning/bootstrap/sampling.py +0 -82
  307. package/src/learning/bootstrap/text_utils.py +0 -71
  308. package/src/learning/cross_project_aggregator.py +0 -857
  309. package/src/learning/db/__init__.py +0 -40
  310. package/src/learning/db/constants.py +0 -44
  311. package/src/learning/db/schema.py +0 -279
  312. package/src/learning/engagement_tracker.py +0 -628
  313. package/src/learning/feature_extractor.py +0 -708
  314. package/src/learning/feedback_collector.py +0 -806
  315. package/src/learning/learning_db.py +0 -915
  316. package/src/learning/project_context_manager.py +0 -572
  317. package/src/learning/ranking/__init__.py +0 -33
  318. package/src/learning/ranking/constants.py +0 -84
  319. package/src/learning/ranking/helpers.py +0 -278
  320. package/src/learning/source_quality_scorer.py +0 -676
  321. package/src/learning/synthetic_bootstrap.py +0 -755
  322. package/src/learning/tests/test_adaptive_ranker.py +0 -325
  323. package/src/learning/tests/test_adaptive_ranker_v28.py +0 -60
  324. package/src/learning/tests/test_aggregator.py +0 -306
  325. package/src/learning/tests/test_auto_retrain_v28.py +0 -35
  326. package/src/learning/tests/test_e2e_ranking_v28.py +0 -82
  327. package/src/learning/tests/test_feature_extractor_v28.py +0 -93
  328. package/src/learning/tests/test_feedback_collector.py +0 -294
  329. package/src/learning/tests/test_learning_db.py +0 -602
  330. package/src/learning/tests/test_learning_db_v28.py +0 -110
  331. package/src/learning/tests/test_learning_init_v28.py +0 -48
  332. package/src/learning/tests/test_outcome_signals.py +0 -48
  333. package/src/learning/tests/test_project_context.py +0 -292
  334. package/src/learning/tests/test_schema_migration.py +0 -319
  335. package/src/learning/tests/test_signal_inference.py +0 -397
  336. package/src/learning/tests/test_source_quality.py +0 -351
  337. package/src/learning/tests/test_synthetic_bootstrap.py +0 -429
  338. package/src/learning/tests/test_workflow_miner.py +0 -318
  339. package/src/learning/workflow_pattern_miner.py +0 -655
  340. package/src/lifecycle/__init__.py +0 -54
  341. package/src/lifecycle/bounded_growth.py +0 -239
  342. package/src/lifecycle/compaction_engine.py +0 -226
  343. package/src/lifecycle/lifecycle_engine.py +0 -355
  344. package/src/lifecycle/lifecycle_evaluator.py +0 -257
  345. package/src/lifecycle/lifecycle_scheduler.py +0 -130
  346. package/src/lifecycle/retention_policy.py +0 -285
  347. package/src/lifecycle/tests/test_bounded_growth.py +0 -193
  348. package/src/lifecycle/tests/test_compaction.py +0 -179
  349. package/src/lifecycle/tests/test_lifecycle_engine.py +0 -137
  350. package/src/lifecycle/tests/test_lifecycle_evaluation.py +0 -177
  351. package/src/lifecycle/tests/test_lifecycle_scheduler.py +0 -127
  352. package/src/lifecycle/tests/test_lifecycle_search.py +0 -109
  353. package/src/lifecycle/tests/test_mcp_compact.py +0 -149
  354. package/src/lifecycle/tests/test_mcp_lifecycle_status.py +0 -114
  355. package/src/lifecycle/tests/test_retention_policy.py +0 -162
  356. package/src/mcp_tools_v28.py +0 -281
  357. package/src/memory/__init__.py +0 -36
  358. package/src/memory/cli.py +0 -205
  359. package/src/memory/constants.py +0 -39
  360. package/src/memory/helpers.py +0 -28
  361. package/src/memory/schema.py +0 -166
  362. package/src/memory-profiles.py +0 -595
  363. package/src/memory-reset.py +0 -491
  364. package/src/memory_compression.py +0 -989
  365. package/src/memory_store_v2.py +0 -1155
  366. package/src/migrate_v1_to_v2.py +0 -629
  367. package/src/pattern_learner.py +0 -34
  368. package/src/patterns/__init__.py +0 -24
  369. package/src/patterns/analyzers.py +0 -251
  370. package/src/patterns/learner.py +0 -271
  371. package/src/patterns/scoring.py +0 -171
  372. package/src/patterns/store.py +0 -225
  373. package/src/patterns/terminology.py +0 -140
  374. package/src/provenance_tracker.py +0 -312
  375. package/src/qualixar_attribution.py +0 -139
  376. package/src/qualixar_watermark.py +0 -78
  377. package/src/query_optimizer.py +0 -511
  378. package/src/rate_limiter.py +0 -83
  379. package/src/search/__init__.py +0 -20
  380. package/src/search/cli.py +0 -77
  381. package/src/search/constants.py +0 -26
  382. package/src/search/engine.py +0 -241
  383. package/src/search/fusion.py +0 -122
  384. package/src/search/index_loader.py +0 -114
  385. package/src/search/methods.py +0 -162
  386. package/src/search_engine_v2.py +0 -401
  387. package/src/setup_validator.py +0 -482
  388. package/src/subscription_manager.py +0 -391
  389. package/src/tree/__init__.py +0 -59
  390. package/src/tree/builder.py +0 -185
  391. package/src/tree/nodes.py +0 -202
  392. package/src/tree/queries.py +0 -257
  393. package/src/tree/schema.py +0 -80
  394. package/src/tree_manager.py +0 -19
  395. package/src/trust/__init__.py +0 -45
  396. package/src/trust/constants.py +0 -66
  397. package/src/trust/queries.py +0 -157
  398. package/src/trust/schema.py +0 -95
  399. package/src/trust/scorer.py +0 -299
  400. package/src/trust/signals.py +0 -95
  401. package/src/trust_scorer.py +0 -44
  402. package/ui/app.js +0 -1588
  403. package/ui/js/graph-cytoscape-monolithic-backup.js +0 -1168
  404. package/ui/js/graph-cytoscape.js +0 -1168
  405. package/ui/js/graph-d3-backup.js +0 -32
  406. package/ui/js/graph.js +0 -32
  407. package/ui_server.py +0 -286
  408. /package/docs/{ACCESSIBILITY.md → v2-archive/ACCESSIBILITY.md} +0 -0
  409. /package/docs/{ARCHITECTURE.md → v2-archive/ARCHITECTURE.md} +0 -0
  410. /package/docs/{CLI-COMMANDS-REFERENCE.md → v2-archive/CLI-COMMANDS-REFERENCE.md} +0 -0
  411. /package/docs/{COMPRESSION-README.md → v2-archive/COMPRESSION-README.md} +0 -0
  412. /package/docs/{FRAMEWORK-INTEGRATIONS.md → v2-archive/FRAMEWORK-INTEGRATIONS.md} +0 -0
  413. /package/docs/{MCP-MANUAL-SETUP.md → v2-archive/MCP-MANUAL-SETUP.md} +0 -0
  414. /package/docs/{MCP-TROUBLESHOOTING.md → v2-archive/MCP-TROUBLESHOOTING.md} +0 -0
  415. /package/docs/{PATTERN-LEARNING.md → v2-archive/PATTERN-LEARNING.md} +0 -0
  416. /package/docs/{PROFILES-GUIDE.md → v2-archive/PROFILES-GUIDE.md} +0 -0
  417. /package/docs/{RESET-GUIDE.md → v2-archive/RESET-GUIDE.md} +0 -0
  418. /package/docs/{SEARCH-ENGINE-V2.2.0.md → v2-archive/SEARCH-ENGINE-V2.2.0.md} +0 -0
  419. /package/docs/{SEARCH-INTEGRATION-GUIDE.md → v2-archive/SEARCH-INTEGRATION-GUIDE.md} +0 -0
  420. /package/docs/{UI-SERVER.md → v2-archive/UI-SERVER.md} +0 -0
  421. /package/docs/{UNIVERSAL-INTEGRATION.md → v2-archive/UNIVERSAL-INTEGRATION.md} +0 -0
  422. /package/docs/{V2.2.0-OPTIONAL-SEARCH.md → v2-archive/V2.2.0-OPTIONAL-SEARCH.md} +0 -0
  423. /package/docs/{WINDOWS-INSTALL-README.txt → v2-archive/WINDOWS-INSTALL-README.txt} +0 -0
  424. /package/docs/{WINDOWS-POST-INSTALL.txt → v2-archive/WINDOWS-POST-INSTALL.txt} +0 -0
  425. /package/docs/{example_graph_usage.py → v2-archive/example_graph_usage.py} +0 -0
  426. /package/{completions → ide/completions}/slm.bash +0 -0
  427. /package/{completions → ide/completions}/slm.zsh +0 -0
  428. /package/{configs → ide/configs}/cody-commands.json +0 -0
  429. /package/{install-skills.sh → scripts/install-skills.sh} +0 -0
  430. /package/{install.ps1 → scripts/install.ps1} +0 -0
  431. /package/{install.sh → scripts/install.sh} +0 -0
@@ -1,482 +0,0 @@
1
- #!/usr/bin/env python3
2
- # SPDX-License-Identifier: MIT
3
- # Copyright (c) 2026 SuperLocalMemory (superlocalmemory.com)
4
- """SuperLocalMemory V2 - Setup Validator
5
-
6
- First-run setup validator that ensures all dependencies are installed
7
- and the database is properly initialized.
8
- """
9
- import sys
10
- import os
11
- import sqlite3
12
- from pathlib import Path
13
- from typing import Tuple, List, Optional
14
-
15
- # Configuration
16
- MEMORY_DIR = Path(os.environ.get('SUPERLOCALEMORY_DIR', str(Path.home() / ".claude-memory")))
17
- DB_PATH = MEMORY_DIR / "memory.db"
18
-
19
- # Required Python version
20
- MIN_PYTHON_VERSION = (3, 8)
21
-
22
- # Required tables for V2
23
- REQUIRED_TABLES = [
24
- 'memories',
25
- 'graph_edges',
26
- 'graph_nodes',
27
- 'graph_clusters',
28
- 'identity_patterns',
29
- 'pattern_examples',
30
- 'memory_tree',
31
- 'memory_archive'
32
- ]
33
-
34
-
35
- def print_banner():
36
- """Print product banner."""
37
- print("""
38
- ╔══════════════════════════════════════════════════════════════╗
39
- ║ SuperLocalMemory - Setup Validator ║
40
- ║ https://superlocalmemory.com ║
41
- ╚══════════════════════════════════════════════════════════════╝
42
- """)
43
-
44
-
45
- def check_python_version() -> Tuple[bool, str]:
46
- """Check Python version meets requirements."""
47
- current = sys.version_info[:2]
48
- if current >= MIN_PYTHON_VERSION:
49
- return True, f"Python {current[0]}.{current[1]}"
50
- else:
51
- return False, f"Python {current[0]}.{current[1]} (need {MIN_PYTHON_VERSION[0]}.{MIN_PYTHON_VERSION[1]}+)"
52
-
53
-
54
- def check_core_dependencies() -> List[Tuple[str, bool, str]]:
55
- """Check core required dependencies."""
56
- results = []
57
-
58
- # SQLite3 (built-in)
59
- try:
60
- import sqlite3
61
- results.append(("sqlite3", True, "Built-in"))
62
- except ImportError:
63
- results.append(("sqlite3", False, "pip install sqlite3"))
64
-
65
- # JSON (built-in)
66
- try:
67
- import json
68
- results.append(("json", True, "Built-in"))
69
- except ImportError:
70
- results.append(("json", False, "Built-in - should be available"))
71
-
72
- # hashlib (built-in)
73
- try:
74
- import hashlib
75
- results.append(("hashlib", True, "Built-in"))
76
- except ImportError:
77
- results.append(("hashlib", False, "Built-in - should be available"))
78
-
79
- return results
80
-
81
-
82
- def check_optional_dependencies() -> List[Tuple[str, bool, str, str]]:
83
- """Check optional dependencies for advanced features."""
84
- results = []
85
-
86
- # scikit-learn (for knowledge graph)
87
- try:
88
- import sklearn
89
- results.append(("scikit-learn", True, sklearn.__version__, "Knowledge Graph"))
90
- except ImportError:
91
- results.append(("scikit-learn", False, "pip install scikit-learn", "Knowledge Graph"))
92
-
93
- # numpy (for vector operations)
94
- try:
95
- import numpy
96
- results.append(("numpy", True, numpy.__version__, "Vector Operations"))
97
- except ImportError:
98
- results.append(("numpy", False, "pip install numpy", "Vector Operations"))
99
-
100
- # igraph (for clustering)
101
- try:
102
- import igraph
103
- results.append(("python-igraph", True, igraph.__version__, "Graph Clustering"))
104
- except ImportError:
105
- results.append(("python-igraph", False, "pip install python-igraph", "Graph Clustering"))
106
-
107
- # leidenalg (for Leiden algorithm)
108
- try:
109
- import leidenalg
110
- results.append(("leidenalg", True, leidenalg.__version__, "Leiden Clustering"))
111
- except ImportError:
112
- results.append(("leidenalg", False, "pip install leidenalg", "Leiden Clustering"))
113
-
114
- # FastAPI (for UI server)
115
- try:
116
- import fastapi
117
- results.append(("fastapi", True, fastapi.__version__, "UI Server"))
118
- except ImportError:
119
- results.append(("fastapi", False, "pip install fastapi uvicorn", "UI Server"))
120
-
121
- return results
122
-
123
-
124
- def check_database() -> Tuple[bool, str, List[str]]:
125
- """Check database status and tables."""
126
- if not DB_PATH.exists():
127
- return False, "Not created yet (will be created on first use)", []
128
-
129
- try:
130
- conn = sqlite3.connect(DB_PATH)
131
- cursor = conn.cursor()
132
-
133
- # Get existing tables
134
- cursor.execute("SELECT name FROM sqlite_master WHERE type='table'")
135
- existing_tables = {row[0] for row in cursor.fetchall()}
136
-
137
- # Check for required tables
138
- missing_tables = []
139
- for table in REQUIRED_TABLES:
140
- if table not in existing_tables:
141
- missing_tables.append(table)
142
-
143
- # Get memory count
144
- try:
145
- cursor.execute("SELECT COUNT(*) FROM memories")
146
- memory_count = cursor.fetchone()[0]
147
- except Exception:
148
- memory_count = 0
149
-
150
- conn.close()
151
-
152
- if missing_tables:
153
- return False, f"Missing tables: {', '.join(missing_tables)}", missing_tables
154
- else:
155
- return True, f"OK ({memory_count} memories)", []
156
-
157
- except Exception as e:
158
- return False, f"Error: {str(e)}", []
159
-
160
-
161
- def check_directory_structure() -> List[Tuple[str, bool, str]]:
162
- """Check required directories exist."""
163
- results = []
164
-
165
- # Memory directory
166
- if MEMORY_DIR.exists():
167
- results.append(("Memory Directory", True, str(MEMORY_DIR)))
168
- else:
169
- results.append(("Memory Directory", False, f"Will be created at {MEMORY_DIR}"))
170
-
171
- # Profiles directory
172
- profiles_dir = MEMORY_DIR / "profiles"
173
- if profiles_dir.exists():
174
- results.append(("Profiles Directory", True, str(profiles_dir)))
175
- else:
176
- results.append(("Profiles Directory", False, "Will be created on first profile"))
177
-
178
- # Backups directory
179
- backups_dir = MEMORY_DIR / "backups"
180
- if backups_dir.exists():
181
- results.append(("Backups Directory", True, str(backups_dir)))
182
- else:
183
- results.append(("Backups Directory", False, "Will be created on first backup"))
184
-
185
- return results
186
-
187
-
188
- def initialize_database() -> Tuple[bool, str]:
189
- """Initialize database with required schema if needed."""
190
- try:
191
- # Create memory directory if needed
192
- MEMORY_DIR.mkdir(parents=True, exist_ok=True)
193
-
194
- conn = sqlite3.connect(DB_PATH)
195
- try:
196
- cursor = conn.cursor()
197
-
198
- # Create memories table (core)
199
- cursor.execute('''
200
- CREATE TABLE IF NOT EXISTS memories (
201
- id INTEGER PRIMARY KEY AUTOINCREMENT,
202
- content TEXT NOT NULL,
203
- summary TEXT,
204
- project_path TEXT,
205
- project_name TEXT,
206
- tags TEXT DEFAULT '[]',
207
- category TEXT,
208
- parent_id INTEGER,
209
- tree_path TEXT DEFAULT '/',
210
- depth INTEGER DEFAULT 0,
211
- memory_type TEXT DEFAULT 'session',
212
- importance INTEGER DEFAULT 5,
213
- content_hash TEXT,
214
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
215
- last_accessed TIMESTAMP,
216
- access_count INTEGER DEFAULT 0,
217
- compressed_at TIMESTAMP,
218
- tier INTEGER DEFAULT 1,
219
- cluster_id INTEGER,
220
- FOREIGN KEY (parent_id) REFERENCES memories(id)
221
- )
222
- ''')
223
-
224
- # Create graph tables
225
- cursor.execute('''
226
- CREATE TABLE IF NOT EXISTS graph_nodes (
227
- id INTEGER PRIMARY KEY AUTOINCREMENT,
228
- memory_id INTEGER UNIQUE NOT NULL,
229
- entities TEXT DEFAULT '[]',
230
- embedding_vector BLOB,
231
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
232
- FOREIGN KEY (memory_id) REFERENCES memories(id)
233
- )
234
- ''')
235
-
236
- cursor.execute('''
237
- CREATE TABLE IF NOT EXISTS graph_edges (
238
- id INTEGER PRIMARY KEY AUTOINCREMENT,
239
- source_memory_id INTEGER NOT NULL,
240
- target_memory_id INTEGER NOT NULL,
241
- similarity REAL NOT NULL,
242
- relationship_type TEXT,
243
- shared_entities TEXT DEFAULT '[]',
244
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
245
- FOREIGN KEY (source_memory_id) REFERENCES memories(id),
246
- FOREIGN KEY (target_memory_id) REFERENCES memories(id),
247
- UNIQUE(source_memory_id, target_memory_id)
248
- )
249
- ''')
250
-
251
- cursor.execute('''
252
- CREATE TABLE IF NOT EXISTS graph_clusters (
253
- id INTEGER PRIMARY KEY AUTOINCREMENT,
254
- cluster_name TEXT,
255
- name TEXT,
256
- description TEXT,
257
- summary TEXT,
258
- memory_count INTEGER DEFAULT 0,
259
- member_count INTEGER DEFAULT 0,
260
- avg_importance REAL DEFAULT 5.0,
261
- top_entities TEXT DEFAULT '[]',
262
- parent_cluster_id INTEGER,
263
- depth INTEGER DEFAULT 0,
264
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
265
- updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
266
- FOREIGN KEY (parent_cluster_id) REFERENCES graph_clusters(id) ON DELETE SET NULL
267
- )
268
- ''')
269
-
270
- # Create pattern learning tables
271
- cursor.execute('''
272
- CREATE TABLE IF NOT EXISTS identity_patterns (
273
- id INTEGER PRIMARY KEY AUTOINCREMENT,
274
- pattern_type TEXT NOT NULL,
275
- pattern_key TEXT NOT NULL,
276
- pattern_value TEXT,
277
- confidence REAL DEFAULT 0.0,
278
- frequency INTEGER DEFAULT 1,
279
- last_seen TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
280
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
281
- UNIQUE(pattern_type, pattern_key)
282
- )
283
- ''')
284
-
285
- cursor.execute('''
286
- CREATE TABLE IF NOT EXISTS pattern_examples (
287
- id INTEGER PRIMARY KEY AUTOINCREMENT,
288
- pattern_id INTEGER NOT NULL,
289
- memory_id INTEGER NOT NULL,
290
- context TEXT,
291
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
292
- FOREIGN KEY (pattern_id) REFERENCES identity_patterns(id),
293
- FOREIGN KEY (memory_id) REFERENCES memories(id)
294
- )
295
- ''')
296
-
297
- # Create tree table
298
- cursor.execute('''
299
- CREATE TABLE IF NOT EXISTS memory_tree (
300
- id INTEGER PRIMARY KEY AUTOINCREMENT,
301
- node_type TEXT NOT NULL,
302
- name TEXT NOT NULL,
303
- parent_id INTEGER,
304
- tree_path TEXT DEFAULT '/',
305
- depth INTEGER DEFAULT 0,
306
- memory_count INTEGER DEFAULT 0,
307
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
308
- FOREIGN KEY (parent_id) REFERENCES memory_tree(id)
309
- )
310
- ''')
311
-
312
- # Create archive table
313
- cursor.execute('''
314
- CREATE TABLE IF NOT EXISTS memory_archive (
315
- id INTEGER PRIMARY KEY AUTOINCREMENT,
316
- original_memory_id INTEGER,
317
- compressed_content TEXT NOT NULL,
318
- compression_type TEXT DEFAULT 'tier2',
319
- original_size INTEGER,
320
- compressed_size INTEGER,
321
- archived_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
322
- )
323
- ''')
324
-
325
- # Create system metadata table for watermarking
326
- cursor.execute('''
327
- CREATE TABLE IF NOT EXISTS system_metadata (
328
- key TEXT PRIMARY KEY,
329
- value TEXT NOT NULL
330
- )
331
- ''')
332
-
333
- # Add system watermark
334
- cursor.execute('''
335
- INSERT OR REPLACE INTO system_metadata (key, value) VALUES
336
- ('product', 'SuperLocalMemory'),
337
- ('website', 'https://superlocalmemory.com'),
338
- ('repository', 'https://github.com/varun369/SuperLocalMemoryV2'),
339
- ('license', 'MIT'),
340
- ('schema_version', '2.0.0')
341
- ''')
342
-
343
- # Create indexes for performance
344
- cursor.execute('CREATE INDEX IF NOT EXISTS idx_memories_project ON memories(project_name)')
345
- cursor.execute('CREATE INDEX IF NOT EXISTS idx_memories_category ON memories(category)')
346
- cursor.execute('CREATE INDEX IF NOT EXISTS idx_memories_cluster ON memories(cluster_id)')
347
- cursor.execute('CREATE INDEX IF NOT EXISTS idx_memories_hash ON memories(content_hash)')
348
- cursor.execute('CREATE INDEX IF NOT EXISTS idx_graph_edges_source ON graph_edges(source_memory_id)')
349
- cursor.execute('CREATE INDEX IF NOT EXISTS idx_graph_edges_target ON graph_edges(target_memory_id)')
350
-
351
- conn.commit()
352
- finally:
353
- conn.close()
354
-
355
- return True, "Database initialized successfully"
356
-
357
- except Exception as e:
358
- return False, f"Error initializing database: {str(e)}"
359
-
360
-
361
- def validate_setup(auto_fix: bool = False) -> bool:
362
- """
363
- Run complete setup validation.
364
-
365
- Args:
366
- auto_fix: If True, automatically initialize missing components
367
-
368
- Returns:
369
- True if all required checks pass
370
- """
371
- print_banner()
372
-
373
- all_passed = True
374
- optional_issues = []
375
-
376
- # Check Python version
377
- print("Checking Python version...")
378
- py_ok, py_msg = check_python_version()
379
- print(f" {'✓' if py_ok else '✗'} {py_msg}")
380
- if not py_ok:
381
- all_passed = False
382
-
383
- print()
384
-
385
- # Check core dependencies
386
- print("Checking core dependencies...")
387
- for name, ok, msg in check_core_dependencies():
388
- print(f" {'✓' if ok else '✗'} {name}: {msg}")
389
- if not ok:
390
- all_passed = False
391
-
392
- print()
393
-
394
- # Check optional dependencies
395
- print("Checking optional dependencies...")
396
- for name, ok, msg, feature in check_optional_dependencies():
397
- status = '✓' if ok else '○'
398
- print(f" {status} {name}: {msg if ok else 'Not installed'} ({feature})")
399
- if not ok:
400
- optional_issues.append((name, msg, feature))
401
-
402
- print()
403
-
404
- # Check directory structure
405
- print("Checking directory structure...")
406
- for name, ok, msg in check_directory_structure():
407
- print(f" {'✓' if ok else '○'} {name}: {msg}")
408
-
409
- print()
410
-
411
- # Check database
412
- print("Checking database...")
413
- db_ok, db_msg, missing_tables = check_database()
414
- print(f" {'✓' if db_ok else '○'} Database: {db_msg}")
415
-
416
- if not db_ok and auto_fix:
417
- print("\n Initializing database...")
418
- init_ok, init_msg = initialize_database()
419
- print(f" {'✓' if init_ok else '✗'} {init_msg}")
420
- if init_ok:
421
- db_ok = True
422
-
423
- print()
424
- print("=" * 60)
425
-
426
- if all_passed and db_ok:
427
- print("\n✓ All required checks passed!")
428
- print("\nQuick Start Commands:")
429
- print(" 1. Add a memory:")
430
- print(" superlocalmemoryv2-remember 'Your content here'")
431
- print("\n 2. Search memories:")
432
- print(" superlocalmemoryv2-recall 'search query'")
433
- print("\n 3. Build knowledge graph (after adding 2+ memories):")
434
- print(" python ~/.claude-memory/graph_engine.py build")
435
- print("\n 4. Start UI server:")
436
- print(" python ~/.claude-memory/api_server.py")
437
- print("\nDocumentation: https://github.com/varun369/SuperLocalMemoryV2")
438
- return True
439
- else:
440
- print("\n⚠ Some checks need attention:")
441
- if not all_passed:
442
- print(" - Fix required dependency issues above")
443
- if not db_ok:
444
- print(" - Database needs initialization")
445
- print(" Run: python setup_validator.py --init")
446
-
447
- if optional_issues:
448
- print("\nOptional (for full features):")
449
- print(" pip install scikit-learn numpy python-igraph leidenalg fastapi uvicorn")
450
-
451
- return False
452
-
453
-
454
- def main():
455
- """Main entry point."""
456
- import argparse
457
-
458
- parser = argparse.ArgumentParser(
459
- description="SuperLocalMemory V2 Setup Validator",
460
- formatter_class=argparse.RawDescriptionHelpFormatter,
461
- epilog="""
462
- Examples:
463
- python setup_validator.py # Check setup
464
- python setup_validator.py --init # Check and initialize database
465
-
466
- Author: Varun Pratap Bhardwaj
467
- Repository: https://github.com/varun369/SuperLocalMemoryV2
468
- """
469
- )
470
- parser.add_argument(
471
- '--init', '-i',
472
- action='store_true',
473
- help='Initialize database if needed'
474
- )
475
-
476
- args = parser.parse_args()
477
- success = validate_setup(auto_fix=args.init)
478
- sys.exit(0 if success else 1)
479
-
480
-
481
- if __name__ == "__main__":
482
- main()