superlocalmemory 2.8.6 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +1 -1
  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
@@ -0,0 +1,160 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Memory Reset CLI Skill (V3)
4
+ * Provides /memory-reset command with safety warnings
5
+ */
6
+
7
+ const { execFile } = require('child_process');
8
+ const { promisify } = require('util');
9
+ const readline = require('readline');
10
+
11
+ const execFileAsync = promisify(execFile);
12
+
13
+ const rl = readline.createInterface({
14
+ input: process.stdin,
15
+ output: process.stdout
16
+ });
17
+
18
+ const question = (query) => new Promise((resolve) => rl.question(query, resolve));
19
+
20
+ async function memoryResetSkill() {
21
+ const args = process.argv.slice(2);
22
+
23
+ // Show help if no args
24
+ if (args.length === 0 || args[0] === '--help' || args[0] === '-h') {
25
+ console.log(`
26
+ SuperLocalMemory V3 - Reset Commands
27
+
28
+ Usage: /memory-reset <command> [options]
29
+
30
+ Commands:
31
+ status Show current memory system status (SAFE)
32
+ soft Clear all memories, keep schema (DESTRUCTIVE)
33
+ hard --confirm Delete everything, reinitialize (NUCLEAR)
34
+
35
+ Examples:
36
+ /memory-reset status
37
+ /memory-reset soft
38
+ /memory-reset hard --confirm
39
+
40
+ WARNING: soft/hard operations create automatic backups
41
+ but will delete data. Always check status first!
42
+ `);
43
+ rl.close();
44
+ return;
45
+ }
46
+
47
+ const command = args[0];
48
+
49
+ // STATUS command (safe, no warnings)
50
+ if (command === 'status') {
51
+ try {
52
+ const { stdout } = await execFileAsync('python3', [
53
+ '-m', 'superlocalmemory.cli.main', 'status'
54
+ ]);
55
+ console.log(stdout);
56
+ } catch (error) {
57
+ console.error('Error:', error.message);
58
+ }
59
+ rl.close();
60
+ return;
61
+ }
62
+
63
+ // SOFT RESET command (destructive, show warning)
64
+ if (command === 'soft') {
65
+ console.log(`
66
+ WARNING: SOFT RESET
67
+
68
+ This will:
69
+ - Delete ALL memories from current profile
70
+ - Clear graph data (nodes, edges, clusters)
71
+ - Clear learned patterns
72
+ - Create automatic backup before deletion
73
+ - Keep V3 schema structure intact
74
+
75
+ Backup location: ~/.superlocalmemory/backups/pre-reset-[timestamp].db
76
+ `);
77
+
78
+ const answer = await question('Proceed with soft reset? (yes/no): ');
79
+
80
+ if (answer.toLowerCase() === 'yes') {
81
+ try {
82
+ const { stdout } = await execFileAsync('python3', [
83
+ '-m', 'superlocalmemory.cli.main', 'reset', 'soft'
84
+ ]);
85
+ console.log(stdout);
86
+ } catch (error) {
87
+ console.error('Error:', error.message);
88
+ }
89
+ } else {
90
+ console.log('\nCancelled. No changes made.');
91
+ }
92
+
93
+ rl.close();
94
+ return;
95
+ }
96
+
97
+ // HARD RESET command (nuclear, extra warnings)
98
+ if (command === 'hard') {
99
+ if (!args.includes('--confirm')) {
100
+ console.log(`
101
+ Error: Hard reset requires --confirm flag
102
+
103
+ HARD RESET is DESTRUCTIVE and will:
104
+ - Delete the ENTIRE database file
105
+ - Remove ALL memories permanently
106
+ - Remove ALL graph data permanently
107
+ - Remove ALL learned patterns permanently
108
+
109
+ To proceed, use:
110
+ /memory-reset hard --confirm
111
+ `);
112
+ rl.close();
113
+ return;
114
+ }
115
+
116
+ console.log(`
117
+ DANGER: HARD RESET
118
+
119
+ This will:
120
+ - DELETE the entire database file (memory.db)
121
+ - DESTROY all memories (cannot undo within system)
122
+ - ERASE all graph relationships
123
+ - REMOVE all learned patterns
124
+ - Reinitialize fresh V3 schema
125
+
126
+ Backup location: ~/.superlocalmemory/backups/pre-reset-[timestamp].db
127
+ `);
128
+
129
+ const answer = await question('Type "DELETE EVERYTHING" to confirm: ');
130
+
131
+ if (answer === 'DELETE EVERYTHING') {
132
+ try {
133
+ const { stdout } = await execFileAsync('python3', [
134
+ '-m', 'superlocalmemory.cli.main', 'reset', 'hard', '--confirm'
135
+ ]);
136
+ console.log(stdout);
137
+ } catch (error) {
138
+ console.error('Error:', error.message);
139
+ }
140
+ } else {
141
+ console.log('\nCancelled. No changes made.');
142
+ console.log('(You must type exactly "DELETE EVERYTHING" to confirm)');
143
+ }
144
+
145
+ rl.close();
146
+ return;
147
+ }
148
+
149
+ // Unknown command
150
+ console.log(`
151
+ Unknown command: ${command}
152
+
153
+ Valid commands: status, soft, hard
154
+
155
+ Use: /memory-reset --help for more information
156
+ `);
157
+ rl.close();
158
+ }
159
+
160
+ memoryResetSkill();
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * SuperLocalMemory V2 - Post-Recall Hook (v2.7.4)
3
+ * SuperLocalMemory V3 - Post-Recall Hook
4
4
  * Copyright (c) 2026 Varun Pratap Bhardwaj
5
5
  * Licensed under MIT License
6
6
  *
@@ -16,7 +16,7 @@ const fs = require('fs');
16
16
  const path = require('path');
17
17
  const os = require('os');
18
18
 
19
- const MEMORY_DIR = path.join(os.homedir(), '.claude-memory');
19
+ const MEMORY_DIR = path.join(os.homedir(), '.superlocalmemory');
20
20
  const HOOK_LOG = path.join(MEMORY_DIR, 'recall-events.jsonl');
21
21
 
22
22
  // Parse input from Claude Code hook system
@@ -0,0 +1,106 @@
1
+ # langchain-superlocalmemory
2
+
3
+ LangChain chat message history backed by [SuperLocalMemory V2](https://github.com/varun369/SuperLocalMemoryV2) -- 100% local, zero cloud.
4
+
5
+ Every message stays on your machine in a SQLite database. No API keys, no subscriptions, no telemetry.
6
+
7
+ ## Prerequisites
8
+
9
+ - Python 3.10+
10
+ - [SuperLocalMemory V2](https://github.com/varun369/SuperLocalMemoryV2) installed (`~/.claude-memory/` must exist)
11
+ - `langchain-core >= 1.0.0`
12
+
13
+ ## Installation
14
+
15
+ ```bash
16
+ pip install langchain-superlocalmemory
17
+ ```
18
+
19
+ Or install from source:
20
+
21
+ ```bash
22
+ cd integrations/langchain
23
+ pip install -e .
24
+ ```
25
+
26
+ ## Quick Start
27
+
28
+ ```python
29
+ from langchain_core.messages import AIMessage, HumanMessage
30
+ from langchain_superlocalmemory import SuperLocalMemoryChatMessageHistory
31
+
32
+ # Create a history for a conversation session
33
+ history = SuperLocalMemoryChatMessageHistory(session_id="my-chat-session")
34
+
35
+ # Add messages
36
+ history.add_messages([
37
+ HumanMessage(content="What is SuperLocalMemory?"),
38
+ AIMessage(content="It's a local-first memory system for AI assistants."),
39
+ ])
40
+
41
+ # Retrieve messages (chronological order)
42
+ for msg in history.messages:
43
+ print(f"{msg.type}: {msg.content}")
44
+
45
+ # Clear the session
46
+ history.clear()
47
+ ```
48
+
49
+ ## Features
50
+
51
+ - **Local-first storage** -- all data stays in `~/.claude-memory/memory.db`
52
+ - **Session isolation** -- each `session_id` is completely independent
53
+ - **Full LangChain compatibility** -- implements `BaseChatMessageHistory`
54
+ - **Persistent across restarts** -- SQLite-backed, survives process exit
55
+ - **Works alongside SLM** -- messages are queryable via CLI, MCP, Skills, and REST API
56
+ - **All message types** -- HumanMessage, AIMessage, SystemMessage, FunctionMessage, ToolMessage
57
+ - **additional_kwargs preserved** -- metadata round-trips through serialization
58
+
59
+ ## Multi-Session Example
60
+
61
+ ```python
62
+ from langchain_superlocalmemory import SuperLocalMemoryChatMessageHistory
63
+
64
+ # Two independent conversations
65
+ support = SuperLocalMemoryChatMessageHistory(session_id="support-ticket-42")
66
+ coding = SuperLocalMemoryChatMessageHistory(session_id="code-review-pr-99")
67
+
68
+ # Messages are isolated -- support session cannot see coding session
69
+ support.add_messages([HumanMessage(content="My app is crashing")])
70
+ coding.add_messages([HumanMessage(content="Review this PR please")])
71
+
72
+ assert len(support.messages) == 1
73
+ assert len(coding.messages) == 1
74
+ ```
75
+
76
+ ## Custom Database Path
77
+
78
+ By default the package uses `~/.claude-memory/memory.db`. You can point to a different database:
79
+
80
+ ```python
81
+ history = SuperLocalMemoryChatMessageHistory(
82
+ session_id="my-session",
83
+ db_path="/path/to/custom/memory.db",
84
+ )
85
+ ```
86
+
87
+ ## How It Works
88
+
89
+ Each LangChain message is stored as an individual memory entry in SuperLocalMemory V2:
90
+
91
+ - **Content**: JSON-serialized message (type, content, additional_kwargs)
92
+ - **Tags**: `["langchain", "langchain:session:<session_id>"]`
93
+ - **Importance**: 3 (lower than user memories, so chat history does not crowd search results)
94
+ - **Project**: `"langchain"`
95
+
96
+ This means your LangChain conversations are visible in the SLM dashboard, searchable via `slm recall`, and accessible from any SLM-integrated tool.
97
+
98
+ ## License
99
+
100
+ MIT -- see [LICENSE](../../LICENSE) for details.
101
+
102
+ ## Links
103
+
104
+ - [SuperLocalMemory V2 Repository](https://github.com/varun369/SuperLocalMemoryV2)
105
+ - [Documentation](https://superlocalmemory.com/)
106
+ - [LangChain Documentation](https://python.langchain.com/)
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env python3
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2026 SuperLocalMemory (superlocalmemory.com)
4
+ from langchain_superlocalmemory.chat_message_history import (
5
+ SuperLocalMemoryChatMessageHistory,
6
+ )
7
+
8
+ __all__ = ["SuperLocalMemoryChatMessageHistory"]
9
+ __version__ = "0.1.0"
@@ -0,0 +1,201 @@
1
+ #!/usr/bin/env python3
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2026 SuperLocalMemory (superlocalmemory.com)
4
+ """SuperLocalMemory V2 - LangChain Chat Message History
5
+
6
+ Implements LangChain's BaseChatMessageHistory backed by SuperLocalMemory V2's
7
+ local SQLite storage. All data stays on your machine -- zero cloud, zero telemetry.
8
+
9
+ Usage:
10
+ from langchain_superlocalmemory import SuperLocalMemoryChatMessageHistory
11
+
12
+ history = SuperLocalMemoryChatMessageHistory(session_id="my-session")
13
+ history.add_messages([HumanMessage(content="Hello")])
14
+ print(history.messages)
15
+ """
16
+ import json
17
+ import sys
18
+ from pathlib import Path
19
+ from typing import List, Optional, Sequence
20
+
21
+ from langchain_core.chat_history import BaseChatMessageHistory
22
+ from langchain_core.messages import (
23
+ AIMessage,
24
+ BaseMessage,
25
+ FunctionMessage,
26
+ HumanMessage,
27
+ SystemMessage,
28
+ ToolMessage,
29
+ message_to_dict,
30
+ messages_from_dict,
31
+ )
32
+
33
+ # ---------------------------------------------------------------------------
34
+ # MemoryStoreV2 import strategy
35
+ # ---------------------------------------------------------------------------
36
+ # SuperLocalMemory V2 installs to ~/.claude-memory/. We add that path so
37
+ # the MemoryStoreV2 class can be imported. If SLM is not installed, we
38
+ # raise a clear error at construction time (not import time) so the package
39
+ # itself can still be imported for introspection.
40
+ # ---------------------------------------------------------------------------
41
+
42
+ _SLM_PATH = Path.home() / ".claude-memory"
43
+ _MemoryStoreV2 = None
44
+
45
+
46
+ def _ensure_slm_imported():
47
+ """Lazily import MemoryStoreV2, raising a clear error if unavailable."""
48
+ global _MemoryStoreV2
49
+ if _MemoryStoreV2 is not None:
50
+ return _MemoryStoreV2
51
+
52
+ slm_path_str = str(_SLM_PATH)
53
+ if slm_path_str not in sys.path:
54
+ sys.path.insert(0, slm_path_str)
55
+
56
+ try:
57
+ from memory_store_v2 import MemoryStoreV2 # type: ignore[import-untyped]
58
+
59
+ _MemoryStoreV2 = MemoryStoreV2
60
+ return _MemoryStoreV2
61
+ except ImportError as exc:
62
+ raise ImportError(
63
+ "SuperLocalMemory V2 is not installed. "
64
+ "Run the installer from https://github.com/varun369/SuperLocalMemoryV2 "
65
+ "or ensure ~/.claude-memory/memory_store_v2.py exists."
66
+ ) from exc
67
+
68
+
69
+ # ---------------------------------------------------------------------------
70
+ # Message (de)serialization helpers
71
+ # ---------------------------------------------------------------------------
72
+
73
+ # Map from LangChain message type string to the concrete class used for
74
+ # deserialization. LangChain's own `messages_from_dict` handles this, but we
75
+ # keep a lookup for the fallback path in case the dict format diverges.
76
+
77
+ _MESSAGE_TYPE_MAP = {
78
+ "human": HumanMessage,
79
+ "ai": AIMessage,
80
+ "system": SystemMessage,
81
+ "function": FunctionMessage,
82
+ "tool": ToolMessage,
83
+ }
84
+
85
+
86
+ def _serialize_message(message: BaseMessage) -> str:
87
+ """Serialize a LangChain BaseMessage to a JSON string for SLM storage."""
88
+ return json.dumps(message_to_dict(message), ensure_ascii=False)
89
+
90
+
91
+ def _deserialize_messages(dicts: List[dict]) -> List[BaseMessage]:
92
+ """Deserialize a list of message dicts back to BaseMessage instances.
93
+
94
+ Uses LangChain's ``messages_from_dict`` which handles all known message
95
+ types including ``additional_kwargs``.
96
+ """
97
+ return messages_from_dict(dicts)
98
+
99
+
100
+ # ---------------------------------------------------------------------------
101
+ # Main class
102
+ # ---------------------------------------------------------------------------
103
+
104
+
105
+ class SuperLocalMemoryChatMessageHistory(BaseChatMessageHistory):
106
+ """LangChain chat message history backed by SuperLocalMemory V2.
107
+
108
+ Each message is stored as an individual memory entry in the SLM SQLite
109
+ database, tagged with the session ID for isolation. This keeps the data
110
+ fully local and queryable via any SLM access method (MCP, CLI, Skills,
111
+ REST API).
112
+
113
+ Parameters
114
+ ----------
115
+ session_id : str
116
+ Unique identifier for the conversation session. Messages from
117
+ different session IDs are completely isolated.
118
+ db_path : str or None
119
+ Path to the SQLite database file. Defaults to
120
+ ``~/.claude-memory/memory.db``.
121
+ """
122
+
123
+ # Tag prefix used to isolate LangChain session messages inside SLM.
124
+ _TAG_PREFIX = "langchain:session:"
125
+
126
+ def __init__(self, session_id: str, db_path: Optional[str] = None) -> None:
127
+ self.session_id = session_id
128
+ self.db_path = db_path
129
+
130
+ MemoryStoreV2 = _ensure_slm_imported()
131
+ store_path = Path(db_path) if db_path else None
132
+ self._store = MemoryStoreV2(db_path=store_path)
133
+
134
+ # -- property: messages ------------------------------------------------
135
+
136
+ @property
137
+ def messages(self) -> List[BaseMessage]: # type: ignore[override]
138
+ """Return all messages for this session, ordered chronologically."""
139
+ session_tag = f"{self._TAG_PREFIX}{self.session_id}"
140
+
141
+ # Retrieve a generous batch from SLM. We filter by tag in Python
142
+ # because list_all does not accept a tag filter parameter.
143
+ all_memories = self._store.list_all(limit=10_000)
144
+
145
+ # Filter to memories belonging to this session.
146
+ session_memories = [
147
+ m for m in all_memories if session_tag in (m.get("tags") or [])
148
+ ]
149
+
150
+ # list_all returns newest-first (ORDER BY created_at DESC).
151
+ # We need chronological (oldest-first) order for chat history.
152
+ session_memories.sort(key=lambda m: m.get("created_at", ""))
153
+
154
+ # Deserialize each memory's content back to a BaseMessage.
155
+ message_dicts: List[dict] = []
156
+ for mem in session_memories:
157
+ try:
158
+ parsed = json.loads(mem["content"])
159
+ message_dicts.append(parsed)
160
+ except (json.JSONDecodeError, KeyError, TypeError):
161
+ # Skip malformed entries silently -- they may be non-LangChain
162
+ # memories that happen to share the tag pattern.
163
+ continue
164
+
165
+ if not message_dicts:
166
+ return []
167
+
168
+ return _deserialize_messages(message_dicts)
169
+
170
+ # -- add_messages ------------------------------------------------------
171
+
172
+ def add_messages(self, messages: Sequence[BaseMessage]) -> None:
173
+ """Persist messages to SuperLocalMemory V2.
174
+
175
+ Each message becomes a separate memory entry tagged with the session
176
+ identifier. Importance is set to 3 (lower than typical user
177
+ memories at 5) so LangChain history does not crowd out higher-value
178
+ entries in search results.
179
+ """
180
+ session_tag = f"{self._TAG_PREFIX}{self.session_id}"
181
+
182
+ for message in messages:
183
+ serialized = _serialize_message(message)
184
+ self._store.add_memory(
185
+ content=serialized,
186
+ tags=["langchain", session_tag],
187
+ importance=3,
188
+ project_name="langchain",
189
+ )
190
+
191
+ # -- clear -------------------------------------------------------------
192
+
193
+ def clear(self) -> None:
194
+ """Remove all messages for this session from the store."""
195
+ session_tag = f"{self._TAG_PREFIX}{self.session_id}"
196
+
197
+ all_memories = self._store.list_all(limit=10_000)
198
+
199
+ for mem in all_memories:
200
+ if session_tag in (mem.get("tags") or []):
201
+ self._store.delete_memory(mem["id"])
@@ -0,0 +1,38 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "langchain-superlocalmemory"
7
+ version = "0.1.0"
8
+ description = "LangChain chat message history backed by SuperLocalMemory — 100% local, zero cloud"
9
+ readme = "README.md"
10
+ license = "MIT"
11
+ requires-python = ">=3.10"
12
+ authors = [
13
+ { name = "Varun Pratap Bhardwaj" },
14
+ ]
15
+ keywords = ["langchain", "memory", "local-first", "privacy", "sqlite", "chat-history", "mcp"]
16
+ classifiers = [
17
+ "Development Status :: 4 - Beta",
18
+ "Intended Audience :: Developers",
19
+ "License :: OSI Approved :: MIT License",
20
+ "Programming Language :: Python :: 3",
21
+ "Programming Language :: Python :: 3.10",
22
+ "Programming Language :: Python :: 3.11",
23
+ "Programming Language :: Python :: 3.12",
24
+ "Programming Language :: Python :: 3.13",
25
+ "Topic :: Software Development :: Libraries",
26
+ "Topic :: Scientific/Engineering :: Artificial Intelligence",
27
+ ]
28
+ dependencies = [
29
+ "langchain-core>=1.0.0",
30
+ ]
31
+
32
+ [project.urls]
33
+ Homepage = "https://github.com/varun369/SuperLocalMemoryV2"
34
+ Documentation = "https://superlocalmemory.com/"
35
+ Repository = "https://github.com/varun369/SuperLocalMemoryV2"
36
+
37
+ [tool.pytest.ini_options]
38
+ testpaths = ["tests"]
@@ -1,2 +1,3 @@
1
+ #!/usr/bin/env python3
1
2
  # SPDX-License-Identifier: MIT
2
3
  # Copyright (c) 2026 SuperLocalMemory (superlocalmemory.com)