superlocalmemory 2.8.5 → 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 (434) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/LICENSE +9 -1
  3. package/NOTICE +63 -0
  4. package/README.md +165 -480
  5. package/bin/slm +17 -449
  6. package/bin/slm-npm +2 -2
  7. package/bin/slm.bat +4 -2
  8. package/conftest.py +5 -0
  9. package/docs/api-reference.md +284 -0
  10. package/docs/architecture.md +149 -0
  11. package/docs/auto-memory.md +150 -0
  12. package/docs/cli-reference.md +276 -0
  13. package/docs/compliance.md +191 -0
  14. package/docs/configuration.md +182 -0
  15. package/docs/getting-started.md +102 -0
  16. package/docs/ide-setup.md +261 -0
  17. package/docs/mcp-tools.md +220 -0
  18. package/docs/migration-from-v2.md +170 -0
  19. package/docs/profiles.md +173 -0
  20. package/docs/troubleshooting.md +310 -0
  21. package/{configs → ide/configs}/antigravity-mcp.json +3 -3
  22. package/ide/configs/chatgpt-desktop-mcp.json +16 -0
  23. package/{configs → ide/configs}/claude-desktop-mcp.json +3 -3
  24. package/{configs → ide/configs}/codex-mcp.toml +4 -4
  25. package/{configs → ide/configs}/continue-mcp.yaml +4 -3
  26. package/{configs → ide/configs}/continue-skills.yaml +6 -6
  27. package/ide/configs/cursor-mcp.json +15 -0
  28. package/{configs → ide/configs}/gemini-cli-mcp.json +2 -2
  29. package/{configs → ide/configs}/jetbrains-mcp.json +2 -2
  30. package/{configs → ide/configs}/opencode-mcp.json +2 -2
  31. package/{configs → ide/configs}/perplexity-mcp.json +2 -2
  32. package/{configs → ide/configs}/vscode-copilot-mcp.json +2 -2
  33. package/{configs → ide/configs}/windsurf-mcp.json +3 -3
  34. package/{configs → ide/configs}/zed-mcp.json +2 -2
  35. package/{hooks → ide/hooks}/context-hook.js +9 -20
  36. package/ide/hooks/memory-list-skill.js +70 -0
  37. package/ide/hooks/memory-profile-skill.js +101 -0
  38. package/ide/hooks/memory-recall-skill.js +62 -0
  39. package/ide/hooks/memory-remember-skill.js +68 -0
  40. package/ide/hooks/memory-reset-skill.js +160 -0
  41. package/{hooks → ide/hooks}/post-recall-hook.js +2 -2
  42. package/ide/integrations/langchain/README.md +106 -0
  43. package/ide/integrations/langchain/langchain_superlocalmemory/__init__.py +9 -0
  44. package/ide/integrations/langchain/langchain_superlocalmemory/chat_message_history.py +201 -0
  45. package/ide/integrations/langchain/pyproject.toml +38 -0
  46. package/{src/learning → ide/integrations/langchain}/tests/__init__.py +1 -0
  47. package/ide/integrations/langchain/tests/test_chat_message_history.py +215 -0
  48. package/ide/integrations/langchain/tests/test_security.py +117 -0
  49. package/ide/integrations/llamaindex/README.md +81 -0
  50. package/ide/integrations/llamaindex/llama_index/storage/chat_store/superlocalmemory/__init__.py +9 -0
  51. package/ide/integrations/llamaindex/llama_index/storage/chat_store/superlocalmemory/base.py +316 -0
  52. package/ide/integrations/llamaindex/pyproject.toml +43 -0
  53. package/{src/lifecycle → ide/integrations/llamaindex}/tests/__init__.py +1 -2
  54. package/ide/integrations/llamaindex/tests/test_chat_store.py +294 -0
  55. package/ide/integrations/llamaindex/tests/test_security.py +241 -0
  56. package/{skills → ide/skills}/slm-build-graph/SKILL.md +6 -6
  57. package/{skills → ide/skills}/slm-list-recent/SKILL.md +5 -5
  58. package/{skills → ide/skills}/slm-recall/SKILL.md +5 -5
  59. package/{skills → ide/skills}/slm-remember/SKILL.md +6 -6
  60. package/{skills → ide/skills}/slm-show-patterns/SKILL.md +7 -7
  61. package/{skills → ide/skills}/slm-status/SKILL.md +9 -9
  62. package/{skills → ide/skills}/slm-switch-profile/SKILL.md +9 -9
  63. package/package.json +13 -22
  64. package/pyproject.toml +85 -0
  65. package/scripts/build-dmg.sh +417 -0
  66. package/scripts/install-skills.ps1 +334 -0
  67. package/{install.ps1 → scripts/install.ps1} +36 -4
  68. package/{install.sh → scripts/install.sh} +14 -13
  69. package/scripts/postinstall.js +2 -2
  70. package/scripts/start-dashboard.ps1 +52 -0
  71. package/scripts/start-dashboard.sh +41 -0
  72. package/scripts/sync-wiki.ps1 +127 -0
  73. package/scripts/sync-wiki.sh +82 -0
  74. package/scripts/test-dmg.sh +161 -0
  75. package/scripts/test-npm-package.ps1 +252 -0
  76. package/scripts/test-npm-package.sh +207 -0
  77. package/scripts/verify-install.ps1 +294 -0
  78. package/scripts/verify-install.sh +266 -0
  79. package/src/superlocalmemory/__init__.py +0 -0
  80. package/src/superlocalmemory/attribution/__init__.py +9 -0
  81. package/src/superlocalmemory/attribution/mathematical_dna.py +235 -0
  82. package/src/superlocalmemory/attribution/signer.py +153 -0
  83. package/src/superlocalmemory/attribution/watermark.py +189 -0
  84. package/src/superlocalmemory/cli/__init__.py +5 -0
  85. package/src/superlocalmemory/cli/commands.py +245 -0
  86. package/src/superlocalmemory/cli/main.py +89 -0
  87. package/src/superlocalmemory/cli/migrate_cmd.py +55 -0
  88. package/src/superlocalmemory/cli/post_install.py +99 -0
  89. package/src/superlocalmemory/cli/setup_wizard.py +129 -0
  90. package/src/superlocalmemory/compliance/__init__.py +0 -0
  91. package/src/superlocalmemory/compliance/abac.py +204 -0
  92. package/src/superlocalmemory/compliance/audit.py +314 -0
  93. package/src/superlocalmemory/compliance/eu_ai_act.py +131 -0
  94. package/src/superlocalmemory/compliance/gdpr.py +294 -0
  95. package/src/superlocalmemory/compliance/lifecycle.py +158 -0
  96. package/src/superlocalmemory/compliance/retention.py +232 -0
  97. package/src/superlocalmemory/compliance/scheduler.py +148 -0
  98. package/src/superlocalmemory/core/__init__.py +0 -0
  99. package/src/superlocalmemory/core/config.py +391 -0
  100. package/src/superlocalmemory/core/embeddings.py +293 -0
  101. package/src/superlocalmemory/core/engine.py +701 -0
  102. package/src/superlocalmemory/core/hooks.py +65 -0
  103. package/src/superlocalmemory/core/maintenance.py +172 -0
  104. package/src/superlocalmemory/core/modes.py +140 -0
  105. package/src/superlocalmemory/core/profiles.py +234 -0
  106. package/src/superlocalmemory/core/registry.py +117 -0
  107. package/src/superlocalmemory/dynamics/__init__.py +0 -0
  108. package/src/superlocalmemory/dynamics/fisher_langevin_coupling.py +223 -0
  109. package/src/superlocalmemory/encoding/__init__.py +0 -0
  110. package/src/superlocalmemory/encoding/consolidator.py +485 -0
  111. package/src/superlocalmemory/encoding/emotional.py +125 -0
  112. package/src/superlocalmemory/encoding/entity_resolver.py +525 -0
  113. package/src/superlocalmemory/encoding/entropy_gate.py +104 -0
  114. package/src/superlocalmemory/encoding/fact_extractor.py +775 -0
  115. package/src/superlocalmemory/encoding/foresight.py +91 -0
  116. package/src/superlocalmemory/encoding/graph_builder.py +302 -0
  117. package/src/superlocalmemory/encoding/observation_builder.py +160 -0
  118. package/src/superlocalmemory/encoding/scene_builder.py +183 -0
  119. package/src/superlocalmemory/encoding/signal_inference.py +90 -0
  120. package/src/superlocalmemory/encoding/temporal_parser.py +426 -0
  121. package/src/superlocalmemory/encoding/type_router.py +235 -0
  122. package/src/superlocalmemory/hooks/__init__.py +3 -0
  123. package/src/superlocalmemory/hooks/auto_capture.py +111 -0
  124. package/src/superlocalmemory/hooks/auto_recall.py +93 -0
  125. package/src/superlocalmemory/hooks/ide_connector.py +204 -0
  126. package/src/superlocalmemory/hooks/rules_engine.py +99 -0
  127. package/src/superlocalmemory/infra/__init__.py +3 -0
  128. package/src/superlocalmemory/infra/auth_middleware.py +82 -0
  129. package/src/superlocalmemory/infra/backup.py +317 -0
  130. package/src/superlocalmemory/infra/cache_manager.py +267 -0
  131. package/src/superlocalmemory/infra/event_bus.py +381 -0
  132. package/src/superlocalmemory/infra/rate_limiter.py +135 -0
  133. package/src/{webhook_dispatcher.py → superlocalmemory/infra/webhook_dispatcher.py} +104 -101
  134. package/src/superlocalmemory/learning/__init__.py +0 -0
  135. package/src/superlocalmemory/learning/adaptive.py +172 -0
  136. package/src/superlocalmemory/learning/behavioral.py +490 -0
  137. package/src/superlocalmemory/learning/behavioral_listener.py +94 -0
  138. package/src/superlocalmemory/learning/bootstrap.py +298 -0
  139. package/src/superlocalmemory/learning/cross_project.py +399 -0
  140. package/src/superlocalmemory/learning/database.py +376 -0
  141. package/src/superlocalmemory/learning/engagement.py +323 -0
  142. package/src/superlocalmemory/learning/features.py +138 -0
  143. package/src/superlocalmemory/learning/feedback.py +316 -0
  144. package/src/superlocalmemory/learning/outcomes.py +255 -0
  145. package/src/superlocalmemory/learning/project_context.py +366 -0
  146. package/src/superlocalmemory/learning/ranker.py +155 -0
  147. package/src/superlocalmemory/learning/source_quality.py +303 -0
  148. package/src/superlocalmemory/learning/workflows.py +309 -0
  149. package/src/superlocalmemory/llm/__init__.py +0 -0
  150. package/src/superlocalmemory/llm/backbone.py +316 -0
  151. package/src/superlocalmemory/math/__init__.py +0 -0
  152. package/src/superlocalmemory/math/fisher.py +356 -0
  153. package/src/superlocalmemory/math/langevin.py +398 -0
  154. package/src/superlocalmemory/math/sheaf.py +257 -0
  155. package/src/superlocalmemory/mcp/__init__.py +0 -0
  156. package/src/superlocalmemory/mcp/resources.py +245 -0
  157. package/src/superlocalmemory/mcp/server.py +61 -0
  158. package/src/superlocalmemory/mcp/tools.py +18 -0
  159. package/src/superlocalmemory/mcp/tools_core.py +305 -0
  160. package/src/superlocalmemory/mcp/tools_v28.py +223 -0
  161. package/src/superlocalmemory/mcp/tools_v3.py +286 -0
  162. package/src/superlocalmemory/retrieval/__init__.py +0 -0
  163. package/src/superlocalmemory/retrieval/agentic.py +295 -0
  164. package/src/superlocalmemory/retrieval/ann_index.py +223 -0
  165. package/src/superlocalmemory/retrieval/bm25_channel.py +185 -0
  166. package/src/superlocalmemory/retrieval/bridge_discovery.py +170 -0
  167. package/src/superlocalmemory/retrieval/engine.py +390 -0
  168. package/src/superlocalmemory/retrieval/entity_channel.py +179 -0
  169. package/src/superlocalmemory/retrieval/fusion.py +78 -0
  170. package/src/superlocalmemory/retrieval/profile_channel.py +105 -0
  171. package/src/superlocalmemory/retrieval/reranker.py +154 -0
  172. package/src/superlocalmemory/retrieval/semantic_channel.py +232 -0
  173. package/src/superlocalmemory/retrieval/strategy.py +96 -0
  174. package/src/superlocalmemory/retrieval/temporal_channel.py +175 -0
  175. package/src/superlocalmemory/server/__init__.py +1 -0
  176. package/src/superlocalmemory/server/api.py +248 -0
  177. package/src/superlocalmemory/server/routes/__init__.py +4 -0
  178. package/src/superlocalmemory/server/routes/agents.py +107 -0
  179. package/src/superlocalmemory/server/routes/backup.py +91 -0
  180. package/src/superlocalmemory/server/routes/behavioral.py +127 -0
  181. package/src/superlocalmemory/server/routes/compliance.py +160 -0
  182. package/src/superlocalmemory/server/routes/data_io.py +188 -0
  183. package/src/superlocalmemory/server/routes/events.py +183 -0
  184. package/src/superlocalmemory/server/routes/helpers.py +85 -0
  185. package/src/superlocalmemory/server/routes/learning.py +273 -0
  186. package/src/superlocalmemory/server/routes/lifecycle.py +116 -0
  187. package/src/superlocalmemory/server/routes/memories.py +399 -0
  188. package/src/superlocalmemory/server/routes/profiles.py +219 -0
  189. package/src/superlocalmemory/server/routes/stats.py +346 -0
  190. package/src/superlocalmemory/server/routes/v3_api.py +365 -0
  191. package/src/superlocalmemory/server/routes/ws.py +82 -0
  192. package/src/superlocalmemory/server/security_middleware.py +57 -0
  193. package/src/superlocalmemory/server/ui.py +245 -0
  194. package/src/superlocalmemory/storage/__init__.py +0 -0
  195. package/src/superlocalmemory/storage/access_control.py +182 -0
  196. package/src/superlocalmemory/storage/database.py +594 -0
  197. package/src/superlocalmemory/storage/migrations.py +303 -0
  198. package/src/superlocalmemory/storage/models.py +406 -0
  199. package/src/superlocalmemory/storage/schema.py +726 -0
  200. package/src/superlocalmemory/storage/v2_migrator.py +317 -0
  201. package/src/superlocalmemory/trust/__init__.py +0 -0
  202. package/src/superlocalmemory/trust/gate.py +130 -0
  203. package/src/superlocalmemory/trust/provenance.py +124 -0
  204. package/src/superlocalmemory/trust/scorer.py +347 -0
  205. package/src/superlocalmemory/trust/signals.py +153 -0
  206. package/ui/index.html +278 -5
  207. package/ui/js/auto-settings.js +70 -0
  208. package/ui/js/dashboard.js +90 -0
  209. package/ui/js/fact-detail.js +92 -0
  210. package/ui/js/feedback.js +2 -2
  211. package/ui/js/ide-status.js +102 -0
  212. package/ui/js/math-health.js +98 -0
  213. package/ui/js/recall-lab.js +127 -0
  214. package/ui/js/settings.js +2 -2
  215. package/ui/js/trust-dashboard.js +73 -0
  216. package/api_server.py +0 -724
  217. package/bin/aider-smart +0 -72
  218. package/bin/superlocalmemoryv2-learning +0 -4
  219. package/bin/superlocalmemoryv2-list +0 -3
  220. package/bin/superlocalmemoryv2-patterns +0 -4
  221. package/bin/superlocalmemoryv2-profile +0 -3
  222. package/bin/superlocalmemoryv2-recall +0 -3
  223. package/bin/superlocalmemoryv2-remember +0 -3
  224. package/bin/superlocalmemoryv2-reset +0 -3
  225. package/bin/superlocalmemoryv2-status +0 -3
  226. package/configs/chatgpt-desktop-mcp.json +0 -16
  227. package/configs/cursor-mcp.json +0 -15
  228. package/docs/SECURITY-QUICK-REFERENCE.md +0 -214
  229. package/hooks/memory-list-skill.js +0 -139
  230. package/hooks/memory-profile-skill.js +0 -273
  231. package/hooks/memory-recall-skill.js +0 -114
  232. package/hooks/memory-remember-skill.js +0 -127
  233. package/hooks/memory-reset-skill.js +0 -274
  234. package/mcp_server.py +0 -1800
  235. package/requirements-core.txt +0 -22
  236. package/requirements-learning.txt +0 -12
  237. package/requirements.txt +0 -12
  238. package/src/agent_registry.py +0 -411
  239. package/src/auth_middleware.py +0 -61
  240. package/src/auto_backup.py +0 -459
  241. package/src/behavioral/__init__.py +0 -49
  242. package/src/behavioral/behavioral_listener.py +0 -203
  243. package/src/behavioral/behavioral_patterns.py +0 -275
  244. package/src/behavioral/cross_project_transfer.py +0 -206
  245. package/src/behavioral/outcome_inference.py +0 -194
  246. package/src/behavioral/outcome_tracker.py +0 -193
  247. package/src/behavioral/tests/__init__.py +0 -4
  248. package/src/behavioral/tests/test_behavioral_integration.py +0 -108
  249. package/src/behavioral/tests/test_behavioral_patterns.py +0 -150
  250. package/src/behavioral/tests/test_cross_project_transfer.py +0 -142
  251. package/src/behavioral/tests/test_mcp_behavioral.py +0 -139
  252. package/src/behavioral/tests/test_mcp_report_outcome.py +0 -117
  253. package/src/behavioral/tests/test_outcome_inference.py +0 -107
  254. package/src/behavioral/tests/test_outcome_tracker.py +0 -96
  255. package/src/cache_manager.py +0 -518
  256. package/src/compliance/__init__.py +0 -48
  257. package/src/compliance/abac_engine.py +0 -149
  258. package/src/compliance/abac_middleware.py +0 -116
  259. package/src/compliance/audit_db.py +0 -215
  260. package/src/compliance/audit_logger.py +0 -148
  261. package/src/compliance/retention_manager.py +0 -289
  262. package/src/compliance/retention_scheduler.py +0 -186
  263. package/src/compliance/tests/__init__.py +0 -4
  264. package/src/compliance/tests/test_abac_enforcement.py +0 -95
  265. package/src/compliance/tests/test_abac_engine.py +0 -124
  266. package/src/compliance/tests/test_abac_mcp_integration.py +0 -118
  267. package/src/compliance/tests/test_audit_db.py +0 -123
  268. package/src/compliance/tests/test_audit_logger.py +0 -98
  269. package/src/compliance/tests/test_mcp_audit.py +0 -128
  270. package/src/compliance/tests/test_mcp_retention_policy.py +0 -125
  271. package/src/compliance/tests/test_retention_manager.py +0 -131
  272. package/src/compliance/tests/test_retention_scheduler.py +0 -99
  273. package/src/compression/__init__.py +0 -25
  274. package/src/compression/cli.py +0 -150
  275. package/src/compression/cold_storage.py +0 -217
  276. package/src/compression/config.py +0 -72
  277. package/src/compression/orchestrator.py +0 -133
  278. package/src/compression/tier2_compressor.py +0 -228
  279. package/src/compression/tier3_compressor.py +0 -153
  280. package/src/compression/tier_classifier.py +0 -148
  281. package/src/db_connection_manager.py +0 -536
  282. package/src/embedding_engine.py +0 -63
  283. package/src/embeddings/__init__.py +0 -47
  284. package/src/embeddings/cache.py +0 -70
  285. package/src/embeddings/cli.py +0 -113
  286. package/src/embeddings/constants.py +0 -47
  287. package/src/embeddings/database.py +0 -91
  288. package/src/embeddings/engine.py +0 -247
  289. package/src/embeddings/model_loader.py +0 -145
  290. package/src/event_bus.py +0 -562
  291. package/src/graph/__init__.py +0 -36
  292. package/src/graph/build_helpers.py +0 -74
  293. package/src/graph/cli.py +0 -87
  294. package/src/graph/cluster_builder.py +0 -188
  295. package/src/graph/cluster_summary.py +0 -148
  296. package/src/graph/constants.py +0 -47
  297. package/src/graph/edge_builder.py +0 -162
  298. package/src/graph/entity_extractor.py +0 -95
  299. package/src/graph/graph_core.py +0 -226
  300. package/src/graph/graph_search.py +0 -231
  301. package/src/graph/hierarchical.py +0 -207
  302. package/src/graph/schema.py +0 -99
  303. package/src/graph_engine.py +0 -52
  304. package/src/hnsw_index.py +0 -628
  305. package/src/hybrid_search.py +0 -46
  306. package/src/learning/__init__.py +0 -217
  307. package/src/learning/adaptive_ranker.py +0 -682
  308. package/src/learning/bootstrap/__init__.py +0 -69
  309. package/src/learning/bootstrap/constants.py +0 -93
  310. package/src/learning/bootstrap/db_queries.py +0 -316
  311. package/src/learning/bootstrap/sampling.py +0 -82
  312. package/src/learning/bootstrap/text_utils.py +0 -71
  313. package/src/learning/cross_project_aggregator.py +0 -857
  314. package/src/learning/db/__init__.py +0 -40
  315. package/src/learning/db/constants.py +0 -44
  316. package/src/learning/db/schema.py +0 -279
  317. package/src/learning/engagement_tracker.py +0 -628
  318. package/src/learning/feature_extractor.py +0 -708
  319. package/src/learning/feedback_collector.py +0 -806
  320. package/src/learning/learning_db.py +0 -915
  321. package/src/learning/project_context_manager.py +0 -572
  322. package/src/learning/ranking/__init__.py +0 -33
  323. package/src/learning/ranking/constants.py +0 -84
  324. package/src/learning/ranking/helpers.py +0 -278
  325. package/src/learning/source_quality_scorer.py +0 -676
  326. package/src/learning/synthetic_bootstrap.py +0 -755
  327. package/src/learning/tests/test_adaptive_ranker.py +0 -325
  328. package/src/learning/tests/test_adaptive_ranker_v28.py +0 -60
  329. package/src/learning/tests/test_aggregator.py +0 -306
  330. package/src/learning/tests/test_auto_retrain_v28.py +0 -35
  331. package/src/learning/tests/test_e2e_ranking_v28.py +0 -82
  332. package/src/learning/tests/test_feature_extractor_v28.py +0 -93
  333. package/src/learning/tests/test_feedback_collector.py +0 -294
  334. package/src/learning/tests/test_learning_db.py +0 -602
  335. package/src/learning/tests/test_learning_db_v28.py +0 -110
  336. package/src/learning/tests/test_learning_init_v28.py +0 -48
  337. package/src/learning/tests/test_outcome_signals.py +0 -48
  338. package/src/learning/tests/test_project_context.py +0 -292
  339. package/src/learning/tests/test_schema_migration.py +0 -319
  340. package/src/learning/tests/test_signal_inference.py +0 -397
  341. package/src/learning/tests/test_source_quality.py +0 -351
  342. package/src/learning/tests/test_synthetic_bootstrap.py +0 -429
  343. package/src/learning/tests/test_workflow_miner.py +0 -318
  344. package/src/learning/workflow_pattern_miner.py +0 -655
  345. package/src/lifecycle/__init__.py +0 -54
  346. package/src/lifecycle/bounded_growth.py +0 -239
  347. package/src/lifecycle/compaction_engine.py +0 -226
  348. package/src/lifecycle/lifecycle_engine.py +0 -355
  349. package/src/lifecycle/lifecycle_evaluator.py +0 -257
  350. package/src/lifecycle/lifecycle_scheduler.py +0 -130
  351. package/src/lifecycle/retention_policy.py +0 -285
  352. package/src/lifecycle/tests/test_bounded_growth.py +0 -193
  353. package/src/lifecycle/tests/test_compaction.py +0 -179
  354. package/src/lifecycle/tests/test_lifecycle_engine.py +0 -137
  355. package/src/lifecycle/tests/test_lifecycle_evaluation.py +0 -177
  356. package/src/lifecycle/tests/test_lifecycle_scheduler.py +0 -127
  357. package/src/lifecycle/tests/test_lifecycle_search.py +0 -109
  358. package/src/lifecycle/tests/test_mcp_compact.py +0 -149
  359. package/src/lifecycle/tests/test_mcp_lifecycle_status.py +0 -114
  360. package/src/lifecycle/tests/test_retention_policy.py +0 -162
  361. package/src/mcp_tools_v28.py +0 -281
  362. package/src/memory/__init__.py +0 -36
  363. package/src/memory/cli.py +0 -205
  364. package/src/memory/constants.py +0 -39
  365. package/src/memory/helpers.py +0 -28
  366. package/src/memory/schema.py +0 -166
  367. package/src/memory-profiles.py +0 -595
  368. package/src/memory-reset.py +0 -491
  369. package/src/memory_compression.py +0 -989
  370. package/src/memory_store_v2.py +0 -1155
  371. package/src/migrate_v1_to_v2.py +0 -629
  372. package/src/pattern_learner.py +0 -34
  373. package/src/patterns/__init__.py +0 -24
  374. package/src/patterns/analyzers.py +0 -251
  375. package/src/patterns/learner.py +0 -271
  376. package/src/patterns/scoring.py +0 -171
  377. package/src/patterns/store.py +0 -225
  378. package/src/patterns/terminology.py +0 -140
  379. package/src/provenance_tracker.py +0 -312
  380. package/src/qualixar_attribution.py +0 -139
  381. package/src/qualixar_watermark.py +0 -78
  382. package/src/query_optimizer.py +0 -511
  383. package/src/rate_limiter.py +0 -83
  384. package/src/search/__init__.py +0 -20
  385. package/src/search/cli.py +0 -77
  386. package/src/search/constants.py +0 -26
  387. package/src/search/engine.py +0 -241
  388. package/src/search/fusion.py +0 -122
  389. package/src/search/index_loader.py +0 -114
  390. package/src/search/methods.py +0 -162
  391. package/src/search_engine_v2.py +0 -401
  392. package/src/setup_validator.py +0 -482
  393. package/src/subscription_manager.py +0 -391
  394. package/src/tree/__init__.py +0 -59
  395. package/src/tree/builder.py +0 -185
  396. package/src/tree/nodes.py +0 -202
  397. package/src/tree/queries.py +0 -257
  398. package/src/tree/schema.py +0 -80
  399. package/src/tree_manager.py +0 -19
  400. package/src/trust/__init__.py +0 -45
  401. package/src/trust/constants.py +0 -66
  402. package/src/trust/queries.py +0 -157
  403. package/src/trust/schema.py +0 -95
  404. package/src/trust/scorer.py +0 -299
  405. package/src/trust/signals.py +0 -95
  406. package/src/trust_scorer.py +0 -44
  407. package/ui/app.js +0 -1588
  408. package/ui/js/graph-cytoscape-monolithic-backup.js +0 -1168
  409. package/ui/js/graph-cytoscape.js +0 -1168
  410. package/ui/js/graph-d3-backup.js +0 -32
  411. package/ui/js/graph.js +0 -32
  412. package/ui_server.py +0 -266
  413. /package/docs/{ACCESSIBILITY.md → v2-archive/ACCESSIBILITY.md} +0 -0
  414. /package/docs/{ARCHITECTURE.md → v2-archive/ARCHITECTURE.md} +0 -0
  415. /package/docs/{CLI-COMMANDS-REFERENCE.md → v2-archive/CLI-COMMANDS-REFERENCE.md} +0 -0
  416. /package/docs/{COMPRESSION-README.md → v2-archive/COMPRESSION-README.md} +0 -0
  417. /package/docs/{FRAMEWORK-INTEGRATIONS.md → v2-archive/FRAMEWORK-INTEGRATIONS.md} +0 -0
  418. /package/docs/{MCP-MANUAL-SETUP.md → v2-archive/MCP-MANUAL-SETUP.md} +0 -0
  419. /package/docs/{MCP-TROUBLESHOOTING.md → v2-archive/MCP-TROUBLESHOOTING.md} +0 -0
  420. /package/docs/{PATTERN-LEARNING.md → v2-archive/PATTERN-LEARNING.md} +0 -0
  421. /package/docs/{PROFILES-GUIDE.md → v2-archive/PROFILES-GUIDE.md} +0 -0
  422. /package/docs/{RESET-GUIDE.md → v2-archive/RESET-GUIDE.md} +0 -0
  423. /package/docs/{SEARCH-ENGINE-V2.2.0.md → v2-archive/SEARCH-ENGINE-V2.2.0.md} +0 -0
  424. /package/docs/{SEARCH-INTEGRATION-GUIDE.md → v2-archive/SEARCH-INTEGRATION-GUIDE.md} +0 -0
  425. /package/docs/{UI-SERVER.md → v2-archive/UI-SERVER.md} +0 -0
  426. /package/docs/{UNIVERSAL-INTEGRATION.md → v2-archive/UNIVERSAL-INTEGRATION.md} +0 -0
  427. /package/docs/{V2.2.0-OPTIONAL-SEARCH.md → v2-archive/V2.2.0-OPTIONAL-SEARCH.md} +0 -0
  428. /package/docs/{WINDOWS-INSTALL-README.txt → v2-archive/WINDOWS-INSTALL-README.txt} +0 -0
  429. /package/docs/{WINDOWS-POST-INSTALL.txt → v2-archive/WINDOWS-POST-INSTALL.txt} +0 -0
  430. /package/docs/{example_graph_usage.py → v2-archive/example_graph_usage.py} +0 -0
  431. /package/{completions → ide/completions}/slm.bash +0 -0
  432. /package/{completions → ide/completions}/slm.zsh +0 -0
  433. /package/{configs → ide/configs}/cody-commands.json +0 -0
  434. /package/{install-skills.sh → scripts/install-skills.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)