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
@@ -1,281 +0,0 @@
1
- # SPDX-License-Identifier: MIT
2
- # Copyright (c) 2026 SuperLocalMemory (superlocalmemory.com)
3
- """v2.8 MCP tool handlers — lifecycle, behavioral, compliance tools.
4
-
5
- These functions implement the 6 new MCP tools added in v2.8.
6
- They are registered with the MCP server in mcp_server.py.
7
- Each function is a thin wrapper around the appropriate engine.
8
-
9
- Tool list:
10
- 1. report_outcome — Record action outcomes for behavioral learning
11
- 2. get_lifecycle_status — View memory lifecycle states
12
- 3. set_retention_policy — Configure compliance retention policies
13
- 4. compact_memories — Trigger lifecycle transitions
14
- 5. get_behavioral_patterns — View learned behavioral patterns
15
- 6. audit_trail — Query compliance audit trail
16
- """
17
- import json
18
- import sys
19
- from pathlib import Path
20
- from typing import Optional, Dict, Any
21
-
22
- # Default database paths — overridable for testing
23
- DEFAULT_MEMORY_DB = str(Path.home() / ".claude-memory" / "memory.db")
24
- DEFAULT_LEARNING_DB = str(Path.home() / ".claude-memory" / "learning.db")
25
- DEFAULT_AUDIT_DB = str(Path.home() / ".claude-memory" / "audit.db")
26
-
27
- # Ensure src/ is on the path so subpackage imports work
28
- _SRC_DIR = str(Path(__file__).resolve().parent)
29
- if _SRC_DIR not in sys.path:
30
- sys.path.insert(0, _SRC_DIR)
31
-
32
-
33
- async def report_outcome(
34
- memory_ids: list,
35
- outcome: str,
36
- action_type: str = "other",
37
- context: Optional[str] = None,
38
- agent_id: str = "user",
39
- project: Optional[str] = None,
40
- ) -> Dict[str, Any]:
41
- """Record an action outcome for behavioral learning.
42
-
43
- Args:
44
- memory_ids: List of memory IDs involved in the action.
45
- outcome: One of 'success', 'failure', or 'partial'.
46
- action_type: Category (code_written, decision_made, debug_resolved, etc.).
47
- context: Optional JSON string with additional context metadata.
48
- agent_id: Identifier for the reporting agent.
49
- project: Project name for scoping outcomes.
50
-
51
- Returns:
52
- Dict with success status and outcome_id on success.
53
- """
54
- try:
55
- from behavioral.outcome_tracker import OutcomeTracker
56
-
57
- tracker = OutcomeTracker(DEFAULT_LEARNING_DB)
58
- ctx = json.loads(context) if context else {}
59
- outcome_id = tracker.record_outcome(
60
- memory_ids=memory_ids,
61
- outcome=outcome,
62
- action_type=action_type,
63
- context=ctx,
64
- agent_id=agent_id,
65
- project=project,
66
- )
67
- if outcome_id is None:
68
- return {
69
- "success": False,
70
- "error": f"Invalid outcome: {outcome}. Use success/failure/partial.",
71
- }
72
- return {
73
- "success": True,
74
- "outcome_id": outcome_id,
75
- "outcome": outcome,
76
- "memory_ids": memory_ids,
77
- }
78
- except Exception as e:
79
- return {"success": False, "error": str(e)}
80
-
81
-
82
- async def get_lifecycle_status(
83
- memory_id: Optional[int] = None,
84
- ) -> Dict[str, Any]:
85
- """Get lifecycle status — distribution across states or single memory state.
86
-
87
- Args:
88
- memory_id: Optional specific memory ID. If None, returns full distribution.
89
-
90
- Returns:
91
- Dict with state distribution or single memory lifecycle state.
92
- """
93
- try:
94
- from lifecycle.lifecycle_engine import LifecycleEngine
95
-
96
- engine = LifecycleEngine(DEFAULT_MEMORY_DB)
97
- if memory_id is not None:
98
- state = engine.get_memory_state(memory_id)
99
- if state is None:
100
- return {"success": False, "error": f"Memory {memory_id} not found"}
101
- return {
102
- "success": True,
103
- "memory_id": memory_id,
104
- "lifecycle_state": state,
105
- }
106
- else:
107
- dist = engine.get_state_distribution()
108
- total = sum(dist.values())
109
- return {
110
- "success": True,
111
- "distribution": dist,
112
- "total_memories": total,
113
- }
114
- except Exception as e:
115
- return {"success": False, "error": str(e)}
116
-
117
-
118
- async def set_retention_policy(
119
- name: str,
120
- framework: str,
121
- retention_days: int,
122
- action: str = "retain",
123
- applies_to_tags: Optional[list] = None,
124
- applies_to_project: Optional[str] = None,
125
- ) -> Dict[str, Any]:
126
- """Create a retention policy for compliance.
127
-
128
- Args:
129
- name: Policy name (e.g., 'GDPR Erasure', 'HIPAA Retention').
130
- framework: Regulatory framework (gdpr, hipaa, eu_ai_act, internal).
131
- retention_days: Days to retain (0 = immediate action).
132
- action: Policy action (retain, tombstone, archive).
133
- applies_to_tags: Tags that trigger this policy.
134
- applies_to_project: Project name that triggers this policy.
135
-
136
- Returns:
137
- Dict with policy_id on success.
138
- """
139
- try:
140
- from lifecycle.retention_policy import RetentionPolicyManager
141
-
142
- mgr = RetentionPolicyManager(DEFAULT_MEMORY_DB)
143
- applies_to: Dict[str, Any] = {}
144
- if applies_to_tags:
145
- applies_to["tags"] = applies_to_tags
146
- if applies_to_project:
147
- applies_to["project_name"] = applies_to_project
148
- policy_id = mgr.create_policy(
149
- name=name,
150
- retention_days=retention_days,
151
- framework=framework,
152
- action=action,
153
- applies_to=applies_to,
154
- )
155
- return {
156
- "success": True,
157
- "policy_id": policy_id,
158
- "name": name,
159
- "framework": framework,
160
- }
161
- except Exception as e:
162
- return {"success": False, "error": str(e)}
163
-
164
-
165
- async def compact_memories(
166
- dry_run: bool = True,
167
- profile: Optional[str] = None,
168
- ) -> Dict[str, Any]:
169
- """Evaluate and compact memories — transition stale ones through lifecycle.
170
-
171
- Args:
172
- dry_run: If True (default), show what would happen without changes.
173
- profile: Optional profile filter to scope compaction.
174
-
175
- Returns:
176
- Dict with recommendations (dry_run=True) or transition counts (dry_run=False).
177
- """
178
- active_profile = profile
179
- try:
180
- from lifecycle.lifecycle_evaluator import LifecycleEvaluator
181
- from lifecycle.lifecycle_engine import LifecycleEngine
182
-
183
- evaluator = LifecycleEvaluator(DEFAULT_MEMORY_DB)
184
- recommendations = evaluator.evaluate_memories(profile=active_profile)
185
-
186
- if dry_run:
187
- return {
188
- "success": True,
189
- "dry_run": True,
190
- "recommendations": len(recommendations),
191
- "details": [
192
- {
193
- "memory_id": r["memory_id"],
194
- "from": r["from_state"],
195
- "to": r["to_state"],
196
- "reason": r["reason"],
197
- }
198
- for r in recommendations[:20]
199
- ],
200
- }
201
-
202
- engine = LifecycleEngine(DEFAULT_MEMORY_DB)
203
- transitioned = 0
204
- for rec in recommendations:
205
- result = engine.transition_memory(
206
- rec["memory_id"], rec["to_state"], reason=rec["reason"]
207
- )
208
- if result.get("success"):
209
- transitioned += 1
210
-
211
- return {
212
- "success": True,
213
- "dry_run": False,
214
- "evaluated": len(recommendations),
215
- "transitioned": transitioned,
216
- }
217
- except Exception as e:
218
- return {"success": False, "error": str(e)}
219
-
220
-
221
- async def get_behavioral_patterns(
222
- min_confidence: float = 0.0,
223
- project: Optional[str] = None,
224
- ) -> Dict[str, Any]:
225
- """Get learned behavioral patterns from outcome analysis.
226
-
227
- Args:
228
- min_confidence: Minimum confidence threshold (0.0-1.0).
229
- project: Optional project filter.
230
-
231
- Returns:
232
- Dict with patterns list and count.
233
- """
234
- try:
235
- from behavioral.behavioral_patterns import BehavioralPatternExtractor
236
-
237
- extractor = BehavioralPatternExtractor(DEFAULT_LEARNING_DB)
238
- patterns = extractor.get_patterns(
239
- min_confidence=min_confidence, project=project
240
- )
241
- return {"success": True, "patterns": patterns, "count": len(patterns)}
242
- except Exception as e:
243
- return {"success": False, "error": str(e)}
244
-
245
-
246
- async def audit_trail(
247
- event_type: Optional[str] = None,
248
- actor: Optional[str] = None,
249
- limit: int = 50,
250
- verify_chain: bool = False,
251
- ) -> Dict[str, Any]:
252
- """Query the compliance audit trail.
253
-
254
- Args:
255
- event_type: Filter by event type (memory.created, memory.recalled, etc.).
256
- actor: Filter by actor (user, agent_id, etc.).
257
- limit: Max events to return.
258
- verify_chain: If True, verify hash chain integrity.
259
-
260
- Returns:
261
- Dict with events list, count, and optional chain verification result.
262
- """
263
- try:
264
- from compliance.audit_db import AuditDB
265
-
266
- db = AuditDB(DEFAULT_AUDIT_DB)
267
- result: Dict[str, Any] = {"success": True}
268
-
269
- if verify_chain:
270
- chain_result = db.verify_chain()
271
- result["chain_valid"] = chain_result["valid"]
272
- result["chain_entries"] = chain_result["entries_checked"]
273
-
274
- events = db.query_events(
275
- event_type=event_type, actor=actor, limit=limit
276
- )
277
- result["events"] = events
278
- result["count"] = len(events)
279
- return result
280
- except Exception as e:
281
- return {"success": False, "error": str(e)}
@@ -1,36 +0,0 @@
1
- #!/usr/bin/env python3
2
- # SPDX-License-Identifier: MIT
3
- # Copyright (c) 2026 SuperLocalMemory (superlocalmemory.com)
4
- """
5
- Memory package - Constants, schema, and utilities for MemoryStoreV2.
6
-
7
- This package contains extracted utilities from memory_store_v2.py to keep
8
- the main class focused and under the 800-line target.
9
- """
10
-
11
- from .constants import (
12
- MEMORY_DIR,
13
- DB_PATH,
14
- VECTORS_PATH,
15
- MAX_CONTENT_SIZE,
16
- MAX_SUMMARY_SIZE,
17
- MAX_TAG_LENGTH,
18
- MAX_TAGS,
19
- CREATOR_METADATA,
20
- )
21
-
22
- from .helpers import format_content
23
- from .cli import run_cli
24
-
25
- __all__ = [
26
- 'MEMORY_DIR',
27
- 'DB_PATH',
28
- 'VECTORS_PATH',
29
- 'MAX_CONTENT_SIZE',
30
- 'MAX_SUMMARY_SIZE',
31
- 'MAX_TAG_LENGTH',
32
- 'MAX_TAGS',
33
- 'CREATOR_METADATA',
34
- 'format_content',
35
- 'run_cli',
36
- ]
package/src/memory/cli.py DELETED
@@ -1,205 +0,0 @@
1
- #!/usr/bin/env python3
2
- # SPDX-License-Identifier: MIT
3
- # Copyright (c) 2026 SuperLocalMemory (superlocalmemory.com)
4
- """
5
- Command-line interface for MemoryStoreV2.
6
-
7
- This module contains the CLI implementation extracted from memory_store_v2.py
8
- to reduce file size and improve maintainability.
9
- """
10
-
11
- import sys
12
- import json
13
- from .helpers import format_content
14
-
15
-
16
- def run_cli():
17
- """Main CLI entry point for MemoryStoreV2."""
18
- # Import here to avoid circular dependency
19
- from memory_store_v2 import MemoryStoreV2
20
-
21
- store = MemoryStoreV2()
22
-
23
- if len(sys.argv) < 2:
24
- print("MemoryStore V2 CLI")
25
- print("\nV1 Compatible Commands:")
26
- print(" python memory_store_v2.py add <content> [--project <path>] [--tags tag1,tag2]")
27
- print(" python memory_store_v2.py search <query> [--full]")
28
- print(" python memory_store_v2.py list [limit] [--full]")
29
- print(" python memory_store_v2.py get <id>")
30
- print(" python memory_store_v2.py recent [limit] [--full]")
31
- print(" python memory_store_v2.py stats")
32
- print(" python memory_store_v2.py context <query>")
33
- print(" python memory_store_v2.py delete <id>")
34
- print("\nV2 Extensions:")
35
- print(" python memory_store_v2.py tree [parent_id]")
36
- print(" python memory_store_v2.py cluster <cluster_id> [--full]")
37
- print("\nOptions:")
38
- print(" --full Show complete content (default: smart truncation at 5000 chars)")
39
- sys.exit(0)
40
-
41
- command = sys.argv[1]
42
-
43
- if command == "tree":
44
- parent_id = int(sys.argv[2]) if len(sys.argv) > 2 else None
45
- results = store.get_tree(parent_id)
46
-
47
- if not results:
48
- print("No memories in tree.")
49
- else:
50
- for r in results:
51
- indent = " " * r['depth']
52
- print(f"{indent}[{r['id']}] {r['content'][:50]}...")
53
- if r.get('category'):
54
- print(f"{indent} Category: {r['category']}")
55
-
56
- elif command == "cluster" and len(sys.argv) >= 3:
57
- cluster_id = int(sys.argv[2])
58
- show_full = '--full' in sys.argv
59
- results = store.get_by_cluster(cluster_id)
60
-
61
- if not results:
62
- print(f"No memories in cluster {cluster_id}.")
63
- else:
64
- print(f"Cluster {cluster_id} - {len(results)} memories:")
65
- for r in results:
66
- print(f"\n[{r['id']}] Importance: {r['importance']}")
67
- print(f" {format_content(r['content'], full=show_full)}")
68
-
69
- elif command == "stats":
70
- stats = store.get_stats()
71
- print(json.dumps(stats, indent=2))
72
-
73
- elif command == "add":
74
- # Parse content and options
75
- if len(sys.argv) < 3:
76
- print("Error: Content required")
77
- print("Usage: python memory_store_v2.py add <content> [--project <path>] [--tags tag1,tag2]")
78
- sys.exit(1)
79
-
80
- content = sys.argv[2]
81
- project_path = None
82
- tags = []
83
-
84
- i = 3
85
- while i < len(sys.argv):
86
- if sys.argv[i] == '--project' and i + 1 < len(sys.argv):
87
- project_path = sys.argv[i + 1]
88
- i += 2
89
- elif sys.argv[i] == '--tags' and i + 1 < len(sys.argv):
90
- tags = [t.strip() for t in sys.argv[i + 1].split(',')]
91
- i += 2
92
- else:
93
- i += 1
94
-
95
- mem_id = store.add_memory(content, project_path=project_path, tags=tags)
96
- print(f"Memory added with ID: {mem_id}")
97
-
98
- elif command == "search":
99
- if len(sys.argv) < 3:
100
- print("Error: Search query required")
101
- print("Usage: python memory_store_v2.py search <query> [--full]")
102
- sys.exit(1)
103
-
104
- query = sys.argv[2]
105
- show_full = '--full' in sys.argv
106
- results = store.search(query, limit=5)
107
-
108
- if not results:
109
- print("No results found.")
110
- else:
111
- for r in results:
112
- print(f"\n[{r['id']}] Score: {r['score']:.2f}")
113
- if r.get('project_name'):
114
- print(f"Project: {r['project_name']}")
115
- if r.get('tags'):
116
- print(f"Tags: {', '.join(r['tags'])}")
117
- print(f"Content: {format_content(r['content'], full=show_full)}")
118
- print(f"Created: {r['created_at']}")
119
-
120
- elif command == "recent":
121
- show_full = '--full' in sys.argv
122
- # Parse limit (skip --full flag)
123
- limit = 10
124
- for i, arg in enumerate(sys.argv[2:], start=2):
125
- if arg != '--full' and arg.isdigit():
126
- limit = int(arg)
127
- break
128
-
129
- results = store.get_recent(limit)
130
-
131
- if not results:
132
- print("No memories found.")
133
- else:
134
- for r in results:
135
- print(f"\n[{r['id']}] {r['created_at']}")
136
- if r.get('project_name'):
137
- print(f"Project: {r['project_name']}")
138
- if r.get('tags'):
139
- print(f"Tags: {', '.join(r['tags'])}")
140
- print(f"Content: {format_content(r['content'], full=show_full)}")
141
-
142
- elif command == "list":
143
- show_full = '--full' in sys.argv
144
- # Parse limit (skip --full flag)
145
- limit = 10
146
- for i, arg in enumerate(sys.argv[2:], start=2):
147
- if arg != '--full' and arg.isdigit():
148
- limit = int(arg)
149
- break
150
-
151
- results = store.get_recent(limit)
152
-
153
- if not results:
154
- print("No memories found.")
155
- else:
156
- for r in results:
157
- print(f"[{r['id']}] {format_content(r['content'], full=show_full)}")
158
-
159
- elif command == "get":
160
- if len(sys.argv) < 3:
161
- print("Error: Memory ID required")
162
- print("Usage: python memory_store_v2.py get <id>")
163
- sys.exit(1)
164
-
165
- mem_id = int(sys.argv[2])
166
- memory = store.get_by_id(mem_id)
167
-
168
- if not memory:
169
- print(f"Memory {mem_id} not found.")
170
- else:
171
- print(f"\nID: {memory['id']}")
172
- print(f"Content: {memory['content']}")
173
- if memory.get('summary'):
174
- print(f"Summary: {memory['summary']}")
175
- if memory.get('project_name'):
176
- print(f"Project: {memory['project_name']}")
177
- if memory.get('tags'):
178
- print(f"Tags: {', '.join(memory['tags'])}")
179
- print(f"Created: {memory['created_at']}")
180
- print(f"Importance: {memory['importance']}")
181
- print(f"Access Count: {memory['access_count']}")
182
-
183
- elif command == "context":
184
- if len(sys.argv) < 3:
185
- print("Error: Query required")
186
- print("Usage: python memory_store_v2.py context <query>")
187
- sys.exit(1)
188
-
189
- query = sys.argv[2]
190
- context = store.export_for_context(query)
191
- print(context)
192
-
193
- elif command == "delete":
194
- if len(sys.argv) < 3:
195
- print("Error: Memory ID required")
196
- print("Usage: python memory_store_v2.py delete <id>")
197
- sys.exit(1)
198
-
199
- mem_id = int(sys.argv[2])
200
- store.delete_memory(mem_id)
201
- print(f"Memory {mem_id} deleted.")
202
-
203
- else:
204
- print(f"Unknown command: {command}")
205
- print("Run without arguments to see available commands.")
@@ -1,39 +0,0 @@
1
- #!/usr/bin/env python3
2
- # SPDX-License-Identifier: MIT
3
- # Copyright (c) 2026 SuperLocalMemory (superlocalmemory.com)
4
- """
5
- Constants and configuration values for MemoryStoreV2.
6
-
7
- This module contains all module-level constants extracted from memory_store_v2.py
8
- to reduce file size and improve maintainability.
9
- """
10
-
11
- from pathlib import Path
12
-
13
- # Database paths
14
- MEMORY_DIR = Path.home() / ".claude-memory"
15
- DB_PATH = MEMORY_DIR / "memory.db"
16
- VECTORS_PATH = MEMORY_DIR / "vectors"
17
-
18
- # Security: Input validation limits
19
- MAX_CONTENT_SIZE = 1_000_000 # 1MB max content
20
- MAX_SUMMARY_SIZE = 10_000 # 10KB max summary
21
- MAX_TAG_LENGTH = 50 # 50 chars per tag
22
- MAX_TAGS = 20 # 20 tags max
23
-
24
- # Creator Attribution Metadata (REQUIRED by MIT License)
25
- # This data is embedded in the database creator_metadata table
26
- CREATOR_METADATA = {
27
- 'creator_name': 'Varun Pratap Bhardwaj',
28
- 'creator_role': 'Solution Architect & Original Creator',
29
- 'creator_github': 'varun369',
30
- 'project_name': 'SuperLocalMemory V2',
31
- 'project_url': 'https://github.com/varun369/SuperLocalMemoryV2',
32
- 'license': 'MIT',
33
- 'attribution_required': 'yes',
34
- 'version': '2.5.0',
35
- 'architecture_date': '2026-01-15',
36
- 'release_date': '2026-02-07',
37
- 'signature': 'VBPB-SLM-V2-2026-ARCHITECT',
38
- 'verification_hash': 'sha256:c9f3d1a8b5e2f4c6d8a9b3e7f1c4d6a8b9c3e7f2d5a8c1b4e6f9d2a7c5b8e1'
39
- }
@@ -1,28 +0,0 @@
1
- #!/usr/bin/env python3
2
- # SPDX-License-Identifier: MIT
3
- # Copyright (c) 2026 SuperLocalMemory (superlocalmemory.com)
4
- """
5
- Helper utilities for MemoryStoreV2.
6
-
7
- This module contains standalone utility functions extracted from memory_store_v2.py
8
- to reduce file size and improve maintainability.
9
- """
10
-
11
-
12
- def format_content(content: str, full: bool = False, threshold: int = 5000, preview_len: int = 2000) -> str:
13
- """
14
- Smart content formatting with optional truncation.
15
-
16
- Args:
17
- content: Content to format
18
- full: If True, always show full content
19
- threshold: Max length before truncation (default 5000)
20
- preview_len: Preview length when truncating (default 2000)
21
-
22
- Returns:
23
- Formatted content string
24
- """
25
- if full or len(content) < threshold:
26
- return content
27
- else:
28
- return f"{content[:preview_len]}..."