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,491 +0,0 @@
1
- #!/usr/bin/env python3
2
- # SPDX-License-Identifier: MIT
3
- # Copyright (c) 2026 SuperLocalMemory (superlocalmemory.com)
4
- """
5
- SuperLocalMemory V2 - Reset & Reinitialize Utility
6
-
7
- Provides safe ways to reset the memory system:
8
- 1. Soft reset - Clear memories but keep schema
9
- 2. Hard reset - Delete everything and reinitialize
10
- 3. Selective reset - Clear specific layers only
11
- 4. Backup & reset - Always create backup first
12
- """
13
-
14
- import sqlite3
15
- import shutil
16
- import os
17
- import sys
18
- from pathlib import Path
19
- from datetime import datetime
20
- import argparse
21
-
22
- MEMORY_DIR = Path.home() / ".claude-memory"
23
- DB_PATH = MEMORY_DIR / "memory.db"
24
- BACKUP_DIR = MEMORY_DIR / "backups"
25
- VENV_PATH = MEMORY_DIR / "venv"
26
-
27
-
28
- class MemoryReset:
29
- def __init__(self, auto_backup=True):
30
- self.db_path = DB_PATH
31
- self.backup_dir = BACKUP_DIR
32
- self.auto_backup = auto_backup
33
-
34
- def create_backup(self) -> str:
35
- """Create timestamped backup before any reset operation."""
36
- timestamp = datetime.now().strftime("%Y%m%d-%H%M%S")
37
- backup_file = self.backup_dir / f"pre-reset-{timestamp}.db"
38
-
39
- self.backup_dir.mkdir(exist_ok=True)
40
-
41
- if self.db_path.exists():
42
- shutil.copy2(self.db_path, backup_file)
43
- print(f"✓ Backup created: {backup_file}")
44
- return str(backup_file)
45
- else:
46
- print("⚠ No database found to backup")
47
- return None
48
-
49
- def soft_reset(self) -> None:
50
- """Clear all memories but keep V2 schema structure."""
51
- print("\n" + "="*60)
52
- print("SOFT RESET - Clear Memories, Keep Schema")
53
- print("="*60)
54
-
55
- if self.auto_backup:
56
- self.create_backup()
57
-
58
- conn = sqlite3.connect(self.db_path)
59
- cursor = conn.cursor()
60
-
61
- # Delete all data from tables (keeps schema)
62
- tables = [
63
- 'pattern_examples',
64
- 'identity_patterns',
65
- 'memory_archive',
66
- 'graph_edges',
67
- 'graph_clusters',
68
- 'graph_nodes',
69
- 'memory_tree',
70
- 'memories',
71
- 'sessions'
72
- ]
73
-
74
- VALID_TABLES = frozenset(tables) # Whitelist from hardcoded list above
75
-
76
- for table in tables:
77
- try:
78
- if table not in VALID_TABLES:
79
- raise ValueError(f"Invalid table name: {table}")
80
- cursor.execute(f'DELETE FROM {table}') # Safe: validated against whitelist
81
- count = cursor.rowcount
82
- print(f" ✓ Cleared {table}: {count} rows deleted")
83
- except sqlite3.OperationalError as e:
84
- print(f" - Skipped {table}: {e}")
85
-
86
- # Reset sequences
87
- cursor.execute('DELETE FROM sqlite_sequence')
88
- print(f" ✓ Reset auto-increment sequences")
89
-
90
- conn.commit()
91
- conn.close()
92
-
93
- print("\n✅ Soft reset complete!")
94
- print(" Schema preserved, all memories cleared")
95
- print(" You can now add new memories to clean system")
96
-
97
- def hard_reset(self) -> None:
98
- """Delete database completely and reinitialize with V2 schema."""
99
- print("\n" + "="*60)
100
- print("HARD RESET - Delete Everything & Reinitialize")
101
- print("="*60)
102
-
103
- if self.auto_backup:
104
- self.create_backup()
105
-
106
- # Delete database file
107
- if self.db_path.exists():
108
- self.db_path.unlink()
109
- print(f" ✓ Deleted database: {self.db_path}")
110
-
111
- # Reinitialize with V2 schema
112
- print("\n Reinitializing V2 schema...")
113
- self._initialize_v2_schema()
114
-
115
- print("\n✅ Hard reset complete!")
116
- print(" Fresh V2 database created")
117
- print(" Ready for new memories")
118
-
119
- def layer_reset(self, layers: list) -> None:
120
- """Reset specific layers only."""
121
- print("\n" + "="*60)
122
- print(f"LAYER RESET - Clearing Layers: {', '.join(layers)}")
123
- print("="*60)
124
-
125
- if self.auto_backup:
126
- self.create_backup()
127
-
128
- conn = sqlite3.connect(self.db_path)
129
- cursor = conn.cursor()
130
-
131
- layer_tables = {
132
- 'graph': ['graph_edges', 'graph_clusters', 'graph_nodes'],
133
- 'patterns': ['identity_patterns', 'pattern_examples'],
134
- 'tree': ['memory_tree'],
135
- 'archive': ['memory_archive']
136
- }
137
-
138
- VALID_LAYER_TABLES = frozenset(
139
- t for tables_list in layer_tables.values() for t in tables_list
140
- ) # Whitelist from hardcoded dict above
141
-
142
- for layer in layers:
143
- if layer in layer_tables:
144
- print(f"\n Clearing Layer: {layer.upper()}")
145
- for table in layer_tables[layer]:
146
- try:
147
- if table not in VALID_LAYER_TABLES:
148
- raise ValueError(f"Invalid table name: {table}")
149
- cursor.execute(f'DELETE FROM {table}') # Safe: validated against whitelist
150
- count = cursor.rowcount
151
- print(f" ✓ Cleared {table}: {count} rows")
152
- except sqlite3.OperationalError as e:
153
- print(f" - Skipped {table}: {e}")
154
-
155
- # Clear related columns in memories table
156
- if layer == 'graph':
157
- cursor.execute('UPDATE memories SET cluster_id = NULL')
158
- print(f" ✓ Cleared cluster_id from memories")
159
- elif layer == 'tree':
160
- cursor.execute('UPDATE memories SET parent_id = NULL, tree_path = NULL, depth = 0')
161
- print(f" ✓ Cleared tree fields from memories")
162
- else:
163
- print(f" ⚠ Unknown layer: {layer}")
164
-
165
- conn.commit()
166
- conn.close()
167
-
168
- print("\n✅ Layer reset complete!")
169
-
170
- def _initialize_v2_schema(self):
171
- """Initialize fresh V2 database schema."""
172
- conn = sqlite3.connect(self.db_path)
173
- try:
174
- cursor = conn.cursor()
175
-
176
- # Layer 1: Memories table
177
- cursor.execute('''
178
- CREATE TABLE IF NOT EXISTS memories (
179
- id INTEGER PRIMARY KEY AUTOINCREMENT,
180
- content TEXT NOT NULL,
181
- summary TEXT,
182
- project_path TEXT,
183
- project_name TEXT,
184
- tags TEXT,
185
- category TEXT,
186
- memory_type TEXT DEFAULT 'session',
187
- importance INTEGER DEFAULT 5,
188
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
189
- updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
190
- last_accessed TIMESTAMP,
191
- access_count INTEGER DEFAULT 0,
192
- content_hash TEXT UNIQUE,
193
- parent_id INTEGER,
194
- tree_path TEXT,
195
- depth INTEGER DEFAULT 0,
196
- cluster_id INTEGER,
197
- tier INTEGER DEFAULT 1,
198
- FOREIGN KEY (parent_id) REFERENCES memories(id) ON DELETE CASCADE
199
- )
200
- ''')
201
- print(" ✓ Created memories table")
202
-
203
- # FTS5 index
204
- cursor.execute('''
205
- CREATE VIRTUAL TABLE IF NOT EXISTS memories_fts
206
- USING fts5(content, summary, tags, content='memories', content_rowid='id')
207
- ''')
208
- print(" ✓ Created FTS index")
209
-
210
- # Layer 2: Tree
211
- cursor.execute('''
212
- CREATE TABLE IF NOT EXISTS memory_tree (
213
- id INTEGER PRIMARY KEY AUTOINCREMENT,
214
- node_type TEXT NOT NULL,
215
- name TEXT NOT NULL,
216
- description TEXT,
217
- parent_id INTEGER,
218
- tree_path TEXT NOT NULL,
219
- depth INTEGER DEFAULT 0,
220
- memory_count INTEGER DEFAULT 0,
221
- total_size INTEGER DEFAULT 0,
222
- last_updated TIMESTAMP,
223
- memory_id INTEGER,
224
- FOREIGN KEY (parent_id) REFERENCES memory_tree(id) ON DELETE CASCADE,
225
- FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE CASCADE
226
- )
227
- ''')
228
- print(" ✓ Created memory_tree table")
229
-
230
- # Layer 3: Graph
231
- cursor.execute('''
232
- CREATE TABLE IF NOT EXISTS graph_nodes (
233
- id INTEGER PRIMARY KEY AUTOINCREMENT,
234
- memory_id INTEGER UNIQUE NOT NULL,
235
- entities TEXT,
236
- embedding_vector TEXT,
237
- FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE CASCADE
238
- )
239
- ''')
240
-
241
- cursor.execute('''
242
- CREATE TABLE IF NOT EXISTS graph_edges (
243
- id INTEGER PRIMARY KEY AUTOINCREMENT,
244
- source_memory_id INTEGER NOT NULL,
245
- target_memory_id INTEGER NOT NULL,
246
- relationship_type TEXT,
247
- weight REAL DEFAULT 1.0,
248
- shared_entities TEXT,
249
- similarity_score REAL,
250
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
251
- FOREIGN KEY (source_memory_id) REFERENCES memories(id) ON DELETE CASCADE,
252
- FOREIGN KEY (target_memory_id) REFERENCES memories(id) ON DELETE CASCADE,
253
- UNIQUE(source_memory_id, target_memory_id)
254
- )
255
- ''')
256
-
257
- cursor.execute('''
258
- CREATE TABLE IF NOT EXISTS graph_clusters (
259
- id INTEGER PRIMARY KEY AUTOINCREMENT,
260
- name TEXT NOT NULL,
261
- description TEXT,
262
- member_count INTEGER DEFAULT 0,
263
- avg_importance REAL,
264
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
265
- updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
266
- )
267
- ''')
268
- print(" ✓ Created graph tables")
269
-
270
- # Layer 4: Patterns
271
- cursor.execute('''
272
- CREATE TABLE IF NOT EXISTS identity_patterns (
273
- id INTEGER PRIMARY KEY AUTOINCREMENT,
274
- pattern_type TEXT NOT NULL,
275
- key TEXT NOT NULL,
276
- value TEXT NOT NULL,
277
- confidence REAL DEFAULT 0.5,
278
- evidence_count INTEGER DEFAULT 1,
279
- memory_ids TEXT,
280
- category TEXT,
281
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
282
- updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
283
- UNIQUE(pattern_type, key, category)
284
- )
285
- ''')
286
-
287
- cursor.execute('''
288
- CREATE TABLE IF NOT EXISTS pattern_examples (
289
- id INTEGER PRIMARY KEY AUTOINCREMENT,
290
- pattern_id INTEGER NOT NULL,
291
- memory_id INTEGER NOT NULL,
292
- example_text TEXT,
293
- FOREIGN KEY (pattern_id) REFERENCES identity_patterns(id) ON DELETE CASCADE,
294
- FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE CASCADE
295
- )
296
- ''')
297
- print(" ✓ Created pattern tables")
298
-
299
- # Archive table
300
- cursor.execute('''
301
- CREATE TABLE IF NOT EXISTS memory_archive (
302
- id INTEGER PRIMARY KEY AUTOINCREMENT,
303
- memory_id INTEGER UNIQUE NOT NULL,
304
- full_content TEXT NOT NULL,
305
- archived_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
306
- FOREIGN KEY (memory_id) REFERENCES memories(id) ON DELETE CASCADE
307
- )
308
- ''')
309
- print(" ✓ Created archive table")
310
-
311
- # Sessions table
312
- cursor.execute('''
313
- CREATE TABLE IF NOT EXISTS sessions (
314
- id INTEGER PRIMARY KEY AUTOINCREMENT,
315
- session_id TEXT UNIQUE,
316
- project_path TEXT,
317
- started_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
318
- ended_at TIMESTAMP,
319
- summary TEXT
320
- )
321
- ''')
322
- print(" ✓ Created sessions table")
323
-
324
- # System metadata
325
- cursor.execute('''
326
- CREATE TABLE IF NOT EXISTS system_metadata (
327
- key TEXT PRIMARY KEY,
328
- value TEXT,
329
- updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
330
- )
331
- ''')
332
-
333
- cursor.execute('''
334
- INSERT OR REPLACE INTO system_metadata (key, value)
335
- VALUES ('schema_version', '2.0.0')
336
- ''')
337
- print(" ✓ Created metadata table")
338
-
339
- # Create indexes
340
- indexes = [
341
- 'CREATE INDEX IF NOT EXISTS idx_project ON memories(project_path)',
342
- 'CREATE INDEX IF NOT EXISTS idx_category ON memories(category)',
343
- 'CREATE INDEX IF NOT EXISTS idx_cluster ON memories(cluster_id)',
344
- 'CREATE INDEX IF NOT EXISTS idx_tree_path ON memories(tree_path)',
345
- 'CREATE INDEX IF NOT EXISTS idx_tier ON memories(tier)',
346
- 'CREATE INDEX IF NOT EXISTS idx_graph_source ON graph_edges(source_memory_id)',
347
- 'CREATE INDEX IF NOT EXISTS idx_graph_target ON graph_edges(target_memory_id)',
348
- ]
349
-
350
- for idx_sql in indexes:
351
- cursor.execute(idx_sql)
352
- print(" ✓ Created indexes")
353
-
354
- conn.commit()
355
- finally:
356
- conn.close()
357
-
358
- def show_stats(self):
359
- """Show current database statistics."""
360
- print("\n" + "="*60)
361
- print("CURRENT MEMORY SYSTEM STATUS")
362
- print("="*60)
363
-
364
- if not self.db_path.exists():
365
- print("\n⚠ No database found!")
366
- print(" Run 'hard_reset' to initialize fresh V2 system")
367
- return
368
-
369
- conn = sqlite3.connect(self.db_path)
370
- cursor = conn.cursor()
371
-
372
- # Get counts for all tables
373
- tables = {
374
- 'Memories': 'memories',
375
- 'Tree Nodes': 'memory_tree',
376
- 'Graph Nodes': 'graph_nodes',
377
- 'Graph Edges': 'graph_edges',
378
- 'Graph Clusters': 'graph_clusters',
379
- 'Identity Patterns': 'identity_patterns',
380
- 'Archived Memories': 'memory_archive'
381
- }
382
-
383
- VALID_STAT_TABLES = frozenset(tables.values()) # Whitelist from hardcoded dict above
384
-
385
- print("\nTable Statistics:")
386
- for name, table in tables.items():
387
- try:
388
- if table not in VALID_STAT_TABLES:
389
- raise ValueError(f"Invalid table name: {table}")
390
- cursor.execute(f'SELECT COUNT(*) FROM {table}') # Safe: validated against whitelist
391
- count = cursor.fetchone()[0]
392
- print(f" {name:20s}: {count:>5} rows")
393
- except sqlite3.OperationalError:
394
- print(f" {name:20s}: Table not found")
395
-
396
- # Database size
397
- db_size = self.db_path.stat().st_size / (1024 * 1024)
398
- print(f"\nDatabase Size: {db_size:.2f} MB")
399
-
400
- # Backup count
401
- if self.backup_dir.exists():
402
- backup_count = len(list(self.backup_dir.glob("*.db")))
403
- print(f"Backups Available: {backup_count}")
404
-
405
- conn.close()
406
-
407
-
408
- def main():
409
- parser = argparse.ArgumentParser(
410
- description='SuperLocalMemory V2 - Reset & Reinitialize Utility',
411
- formatter_class=argparse.RawDescriptionHelpFormatter,
412
- epilog='''
413
- Examples:
414
- # Show current status
415
- python memory-reset.py status
416
-
417
- # Soft reset (clear memories, keep schema)
418
- python memory-reset.py soft
419
-
420
- # Hard reset (delete everything, reinitialize)
421
- python memory-reset.py hard --confirm
422
-
423
- # Reset specific layers only
424
- python memory-reset.py layer --layers graph patterns
425
-
426
- # Reset without automatic backup
427
- python memory-reset.py soft --no-backup
428
- '''
429
- )
430
-
431
- parser.add_argument('command', choices=['status', 'soft', 'hard', 'layer'],
432
- help='Reset command to execute')
433
- parser.add_argument('--layers', nargs='+',
434
- choices=['graph', 'patterns', 'tree', 'archive'],
435
- help='Layers to reset (for layer command)')
436
- parser.add_argument('--no-backup', action='store_true',
437
- help='Skip automatic backup')
438
- parser.add_argument('--confirm', action='store_true',
439
- help='Confirm destructive operations (required for hard reset)')
440
-
441
- args = parser.parse_args()
442
-
443
- resetter = MemoryReset(auto_backup=not args.no_backup)
444
-
445
- if args.command == 'status':
446
- resetter.show_stats()
447
-
448
- elif args.command == 'soft':
449
- print("\n⚠️ WARNING: This will delete ALL memories but keep the V2 schema.")
450
- print(" Backup will be created automatically unless --no-backup specified.")
451
- response = input("\nProceed with soft reset? (yes/no): ")
452
-
453
- if response.lower() == 'yes':
454
- resetter.soft_reset()
455
- else:
456
- print("Cancelled.")
457
-
458
- elif args.command == 'hard':
459
- if not args.confirm:
460
- print("\n❌ ERROR: Hard reset requires --confirm flag")
461
- print(" This operation deletes EVERYTHING and reinitializes.")
462
- print(" Use: python memory-reset.py hard --confirm")
463
- sys.exit(1)
464
-
465
- print("\n⚠️ WARNING: This will DELETE the entire database!")
466
- print(" All memories, patterns, graphs will be permanently removed.")
467
- print(" A backup will be created automatically unless --no-backup specified.")
468
- response = input("\nType 'DELETE EVERYTHING' to confirm: ")
469
-
470
- if response == 'DELETE EVERYTHING':
471
- resetter.hard_reset()
472
- else:
473
- print("Cancelled.")
474
-
475
- elif args.command == 'layer':
476
- if not args.layers:
477
- print("❌ ERROR: --layers required for layer reset")
478
- print(" Example: python memory-reset.py layer --layers graph patterns")
479
- sys.exit(1)
480
-
481
- print(f"\n⚠️ WARNING: This will clear layers: {', '.join(args.layers)}")
482
- response = input("\nProceed? (yes/no): ")
483
-
484
- if response.lower() == 'yes':
485
- resetter.layer_reset(args.layers)
486
- else:
487
- print("Cancelled.")
488
-
489
-
490
- if __name__ == '__main__':
491
- main()