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
@@ -1,13 +1,13 @@
1
- # SuperLocalMemory V2 - Codex CLI MCP Configuration
1
+ # SuperLocalMemory V3 - Codex CLI MCP Configuration
2
2
  # Copyright (c) 2026 Varun Pratap Bhardwaj
3
3
  # Licensed under MIT License
4
4
  #
5
5
  # Auto-configured by install.sh or use: codex mcp add
6
6
  # Manual: Copy this to ~/.codex/config.toml
7
7
 
8
- [mcp_servers.superlocalmemory-v2]
8
+ [mcp_servers.superlocalmemory]
9
9
  command = "python3"
10
- args = ["{{INSTALL_DIR}}/mcp_server.py"]
10
+ args = ["-m", "superlocalmemory.mcp.server"]
11
11
 
12
- [mcp_servers.superlocalmemory-v2.env]
12
+ [mcp_servers.superlocalmemory.env]
13
13
  PYTHONPATH = "{{INSTALL_DIR}}"
@@ -4,11 +4,12 @@
4
4
  contextProviders:
5
5
  - name: mcp
6
6
  params:
7
- serverName: "superlocalmemory-v2"
7
+ serverName: "superlocalmemory"
8
8
  command: "python3"
9
9
  args:
10
- - "{{INSTALL_DIR}}/mcp_server.py"
11
- description: "SuperLocalMemory V2 - Search your memory system"
10
+ - "-m"
11
+ - "superlocalmemory.mcp.server"
12
+ description: "SuperLocalMemory V3 - Search your memory system"
12
13
 
13
14
  # You can also use Continue's slash commands with SuperLocalMemory
14
15
  # See continue-skills.yaml for slash command configuration
@@ -1,23 +1,23 @@
1
- # Continue.dev Slash Commands for SuperLocalMemory V2
2
- # These map to your existing bash scripts (no duplicate logic)
1
+ # Continue.dev Slash Commands for SuperLocalMemory V3
2
+ # These map to the V3 CLI commands
3
3
  # Add this to ~/.continue/config.yaml
4
4
 
5
5
  slashCommands:
6
6
  - name: "slm-remember"
7
7
  description: "Save to SuperLocalMemory"
8
- run: "~/.claude-memory/bin/superlocalmemoryv2-remember \"{{input}}\""
8
+ run: "slm remember \"{{input}}\""
9
9
 
10
10
  - name: "slm-recall"
11
11
  description: "Search SuperLocalMemory"
12
- run: "~/.claude-memory/bin/superlocalmemoryv2-recall \"{{input}}\""
12
+ run: "slm recall \"{{input}}\""
13
13
 
14
14
  - name: "slm-list"
15
15
  description: "List recent memories"
16
- run: "~/.claude-memory/bin/superlocalmemoryv2-list"
16
+ run: "slm list"
17
17
 
18
18
  - name: "slm-status"
19
19
  description: "SuperLocalMemory system status"
20
- run: "~/.claude-memory/bin/superlocalmemoryv2-status"
20
+ run: "slm status"
21
21
 
22
22
  # Usage in Continue.dev:
23
23
  # /slm-remember Use FastAPI for REST APIs
@@ -0,0 +1,15 @@
1
+ {
2
+ "mcpServers": {
3
+ "superlocalmemory": {
4
+ "command": "python3",
5
+ "args": [
6
+ "-m", "superlocalmemory.mcp.server"
7
+ ],
8
+ "cwd": "{{INSTALL_DIR}}",
9
+ "env": {
10
+ "PYTHONPATH": "{{INSTALL_DIR}}"
11
+ },
12
+ "description": "SuperLocalMemory V3 - Local memory system with mathematical foundations and knowledge graphs"
13
+ }
14
+ }
15
+ }
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "mcpServers": {
3
- "superlocalmemory-v2": {
3
+ "superlocalmemory": {
4
4
  "command": "python3",
5
- "args": ["{{INSTALL_DIR}}/mcp_server.py"],
5
+ "args": ["-m", "superlocalmemory.mcp.server"],
6
6
  "env": {
7
7
  "PYTHONPATH": "{{INSTALL_DIR}}"
8
8
  }
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "mcpServers": {
3
- "superlocalmemory-v2": {
3
+ "superlocalmemory": {
4
4
  "command": "python3",
5
- "args": ["{{INSTALL_DIR}}/mcp_server.py"],
5
+ "args": ["-m", "superlocalmemory.mcp.server"],
6
6
  "env": {
7
7
  "PYTHONPATH": "{{INSTALL_DIR}}"
8
8
  }
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "mcp": {
3
- "superlocalmemory-v2": {
3
+ "superlocalmemory": {
4
4
  "command": "python3",
5
- "args": ["{{INSTALL_DIR}}/mcp_server.py"],
5
+ "args": ["-m", "superlocalmemory.mcp.server"],
6
6
  "env": {
7
7
  "PYTHONPATH": "{{INSTALL_DIR}}"
8
8
  },
@@ -1,7 +1,7 @@
1
1
  {
2
- "superlocalmemory-v2": {
2
+ "superlocalmemory": {
3
3
  "command": "python3",
4
- "args": ["{{INSTALL_DIR}}/mcp_server.py"],
4
+ "args": ["-m", "superlocalmemory.mcp.server"],
5
5
  "env": {
6
6
  "PYTHONPATH": "{{INSTALL_DIR}}"
7
7
  }
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "servers": {
3
- "superlocalmemory-v2": {
3
+ "superlocalmemory": {
4
4
  "type": "stdio",
5
5
  "command": "python3",
6
- "args": ["{{INSTALL_DIR}}/mcp_server.py"],
6
+ "args": ["-m", "superlocalmemory.mcp.server"],
7
7
  "env": {
8
8
  "PYTHONPATH": "{{INSTALL_DIR}}"
9
9
  }
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "mcpServers": {
3
- "superlocalmemory-v2": {
3
+ "superlocalmemory": {
4
4
  "command": "python3",
5
5
  "args": [
6
- "{{INSTALL_DIR}}/mcp_server.py"
6
+ "-m", "superlocalmemory.mcp.server"
7
7
  ],
8
8
  "cwd": "{{INSTALL_DIR}}",
9
9
  "env": {
10
10
  "PYTHONPATH": "{{INSTALL_DIR}}"
11
11
  },
12
12
  "transport": "stdio",
13
- "description": "SuperLocalMemory V2 - 100% local memory system for AI assistants"
13
+ "description": "SuperLocalMemory V3 - 100% local memory system for AI assistants"
14
14
  }
15
15
  }
16
16
  }
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "context_servers": {
3
- "superlocalmemory-v2": {
3
+ "superlocalmemory": {
4
4
  "source": "custom",
5
5
  "command": "python3",
6
- "args": ["{{INSTALL_DIR}}/mcp_server.py"],
6
+ "args": ["-m", "superlocalmemory.mcp.server"],
7
7
  "env": {
8
8
  "PYTHONPATH": "{{INSTALL_DIR}}"
9
9
  }
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * SuperLocalMemory V2 - Session Start Context Hook
3
+ * SuperLocalMemory V3 - Session Start Context Hook
4
4
  * Copyright (c) 2026 Varun Pratap Bhardwaj
5
5
  * Licensed under MIT License
6
6
  *
7
7
  * Loads recent memories and learned patterns on Claude Code session start.
8
8
  * Outputs context to stderr (Claude Code reads hook stderr as context).
9
- * Fails gracefully never blocks session start if DB is missing or errors occur.
9
+ * Fails gracefully -- never blocks session start if DB is missing or errors occur.
10
10
  */
11
11
 
12
12
  const { execFile } = require('child_process');
@@ -16,9 +16,8 @@ const fs = require('fs');
16
16
 
17
17
  const execFileAsync = promisify(execFile);
18
18
 
19
- const MEMORY_DIR = path.join(process.env.HOME, '.claude-memory');
19
+ const MEMORY_DIR = path.join(process.env.HOME, '.superlocalmemory');
20
20
  const DB_PATH = path.join(MEMORY_DIR, 'memory.db');
21
- const MEMORY_SCRIPT = path.join(MEMORY_DIR, 'memory_store_v2.py');
22
21
 
23
22
  async function loadSessionContext() {
24
23
  // Fail gracefully if not installed
@@ -26,19 +25,10 @@ async function loadSessionContext() {
26
25
  return;
27
26
  }
28
27
 
29
- if (!fs.existsSync(MEMORY_SCRIPT)) {
30
- return;
31
- }
32
-
33
28
  try {
34
- // Get stats (memory_store_v2.py stats → JSON output)
29
+ // Get stats via V3 CLI
35
30
  const { stdout: statsOutput } = await execFileAsync('python3', [
36
- MEMORY_SCRIPT, 'stats'
37
- ], { timeout: 5000 });
38
-
39
- // Get recent memories (memory_store_v2.py list <limit>)
40
- const { stdout: recentOutput } = await execFileAsync('python3', [
41
- MEMORY_SCRIPT, 'list', '5'
31
+ '-m', 'superlocalmemory.cli.main', 'status', '--format', 'json'
42
32
  ], { timeout: 5000 });
43
33
 
44
34
  // Build context output
@@ -48,13 +38,12 @@ async function loadSessionContext() {
48
38
  try {
49
39
  const stats = JSON.parse(statsOutput.trim());
50
40
  const total = stats.total_memories || 0;
51
- const clusters = stats.total_clusters || 0;
52
41
  if (total > 0) {
53
- context += 'SuperLocalMemory: ' + total + ' memories, ' + clusters + ' clusters loaded.\n';
42
+ context += 'SuperLocalMemory V3: ' + total + ' memories loaded.\n';
54
43
  }
55
44
  } catch (e) {
56
- // Stats output wasn't JSON use first line as-is
57
- context += 'SuperLocalMemory: ' + statsOutput.trim().split('\n')[0] + '\n';
45
+ // Stats output wasn't JSON -- use first line as-is
46
+ context += 'SuperLocalMemory V3: ' + statsOutput.trim().split('\n')[0] + '\n';
58
47
  }
59
48
  }
60
49
 
@@ -62,7 +51,7 @@ async function loadSessionContext() {
62
51
  process.stderr.write(context);
63
52
  }
64
53
  } catch (error) {
65
- // Never fail session start must not be blocked
54
+ // Never fail -- session start must not be blocked
66
55
  // Silently ignore errors (timeout, missing python, etc.)
67
56
  }
68
57
  }
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Memory List CLI Skill (V3)
4
+ * List recent memories with sorting and filtering
5
+ */
6
+
7
+ const { execFile } = require('child_process');
8
+ const { promisify } = require('util');
9
+
10
+ const execFileAsync = promisify(execFile);
11
+
12
+ async function memoryListSkill() {
13
+ const args = process.argv.slice(2);
14
+
15
+ // Show help if --help
16
+ if (args.includes('--help') || args.includes('-h')) {
17
+ console.log(`
18
+ SuperLocalMemory V3 - List Recent Memories
19
+
20
+ Display recent memories with optional sorting and limits.
21
+ Quick overview of what's stored in your memory database.
22
+
23
+ Usage: memory-list [options]
24
+
25
+ Options:
26
+ --limit <n> Number of memories to show (default: 20)
27
+ --sort <field> Sort by: recent, accessed, importance
28
+ --full Show complete content without truncation
29
+
30
+ Examples:
31
+ memory-list
32
+ memory-list --limit 50
33
+ memory-list --sort importance
34
+ memory-list --limit 10 --sort accessed --full
35
+ `);
36
+ return;
37
+ }
38
+
39
+ // Build CLI args for V3
40
+ const cliArgs = ['-m', 'superlocalmemory.cli.main', 'list'];
41
+
42
+ for (let i = 0; i < args.length; i++) {
43
+ cliArgs.push(args[i]);
44
+ }
45
+
46
+ try {
47
+ const { stdout, stderr } = await execFileAsync('python3', cliArgs);
48
+
49
+ if (stderr) {
50
+ console.error('Warning:', stderr);
51
+ }
52
+
53
+ console.log(stdout);
54
+
55
+ // Show helpful next steps
56
+ console.log(`
57
+ Next steps:
58
+ - Use \`slm recall <query>\` to search memories
59
+ - Use \`slm remember <content>\` to add new memories
60
+ - Use \`slm list --sort <field>\` to change sort order
61
+ `);
62
+
63
+ } catch (error) {
64
+ console.error('Error listing memories:', error.message);
65
+ if (error.stdout) console.log(error.stdout);
66
+ if (error.stderr) console.error(error.stderr);
67
+ }
68
+ }
69
+
70
+ memoryListSkill();
@@ -0,0 +1,101 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Memory Profile CLI Skill (V3)
4
+ * Provides memory-profile commands for managing multiple memory contexts
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 memoryProfileSkill() {
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 - Profile Management
27
+
28
+ Profiles let you maintain separate memory contexts in ONE database:
29
+ - Work vs Personal projects
30
+ - Different clients or teams
31
+ - Experimentation vs Production
32
+
33
+ All profiles share one database. Switching is instant and safe.
34
+ No data copying, no data loss risk.
35
+
36
+ Usage: memory-profile <command> [options]
37
+
38
+ Commands:
39
+ list List all profiles and show active one
40
+ current Show current active profile
41
+ create <name> Create a new empty profile
42
+ switch <name> Switch to a different profile
43
+ delete <name> Delete a profile (with confirmation)
44
+
45
+ Examples:
46
+ memory-profile list
47
+ memory-profile current
48
+ memory-profile create work
49
+ memory-profile switch work
50
+ memory-profile delete old-project
51
+ `);
52
+ rl.close();
53
+ return;
54
+ }
55
+
56
+ const command = args[0];
57
+ const cliArgs = ['-m', 'superlocalmemory.cli.main', 'profile', ...args];
58
+
59
+ // For destructive operations, add confirmation prompts
60
+ if (command === 'delete' && args.length >= 2) {
61
+ const profileName = args[1];
62
+
63
+ if (profileName === 'default') {
64
+ console.log('Error: Cannot delete the default profile.');
65
+ rl.close();
66
+ return;
67
+ }
68
+
69
+ const answer = await question(`Type the profile name "${profileName}" to confirm deletion: `);
70
+
71
+ if (answer !== profileName) {
72
+ console.log('\nCancelled. No changes made.');
73
+ rl.close();
74
+ return;
75
+ }
76
+ }
77
+
78
+ if (command === 'switch' && args.length >= 2) {
79
+ const profileName = args[1];
80
+ const answer = await question(`Switch to profile "${profileName}"? (yes/no): `);
81
+
82
+ if (answer.toLowerCase() !== 'yes') {
83
+ console.log('\nCancelled. No changes made.');
84
+ rl.close();
85
+ return;
86
+ }
87
+ }
88
+
89
+ try {
90
+ const { stdout, stderr } = await execFileAsync('python3', cliArgs);
91
+ if (stdout) console.log(stdout);
92
+ if (stderr) console.error(stderr);
93
+ } catch (error) {
94
+ console.error('Error:', error.message);
95
+ if (error.stdout) console.log(error.stdout);
96
+ }
97
+
98
+ rl.close();
99
+ }
100
+
101
+ memoryProfileSkill();
@@ -0,0 +1,62 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Memory Recall CLI Skill (V3)
4
+ * Search and retrieve memories with advanced filtering
5
+ */
6
+
7
+ const { execFile } = require('child_process');
8
+ const { promisify } = require('util');
9
+
10
+ const execFileAsync = promisify(execFile);
11
+
12
+ async function memoryRecallSkill() {
13
+ const args = process.argv.slice(2);
14
+
15
+ // Show help if no args or --help
16
+ if (args.length === 0 || args[0] === '--help' || args[0] === '-h') {
17
+ console.log(`
18
+ SuperLocalMemory V3 - Recall (Search Memories)
19
+
20
+ Search your memory store using hybrid retrieval (semantic, BM25, graph, temporal).
21
+
22
+ Usage: memory-recall <query> [options]
23
+
24
+ Arguments:
25
+ <query> Search query (required)
26
+
27
+ Options:
28
+ --limit <n> Maximum results to return (default: 10)
29
+ --full Show complete content without truncation
30
+
31
+ Examples:
32
+ memory-recall "authentication bug"
33
+ memory-recall "API configuration" --limit 5
34
+ memory-recall "security best practices" --full
35
+ `);
36
+ return;
37
+ }
38
+
39
+ // Build V3 CLI args
40
+ const cliArgs = ['-m', 'superlocalmemory.cli.main', 'recall'];
41
+
42
+ for (let i = 0; i < args.length; i++) {
43
+ cliArgs.push(args[i]);
44
+ }
45
+
46
+ try {
47
+ const { stdout, stderr } = await execFileAsync('python3', cliArgs);
48
+
49
+ if (stderr) {
50
+ console.error('Warning:', stderr);
51
+ }
52
+
53
+ console.log(stdout);
54
+
55
+ } catch (error) {
56
+ console.error('Error searching memories:', error.message);
57
+ if (error.stdout) console.log(error.stdout);
58
+ if (error.stderr) console.error(error.stderr);
59
+ }
60
+ }
61
+
62
+ memoryRecallSkill();
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Memory Remember CLI Skill (V3)
4
+ * Save memories with tags, project context, and importance levels
5
+ */
6
+
7
+ const { execFile } = require('child_process');
8
+ const { promisify } = require('util');
9
+
10
+ const execFileAsync = promisify(execFile);
11
+
12
+ async function memoryRememberSkill() {
13
+ const args = process.argv.slice(2);
14
+
15
+ // Show help if no args or --help
16
+ if (args.length === 0 || args[0] === '--help' || args[0] === '-h') {
17
+ console.log(`
18
+ SuperLocalMemory V3 - Remember (Save Memory)
19
+
20
+ Save important information to your persistent memory store.
21
+ Memories are indexed, searchable, and integrated with the knowledge graph.
22
+
23
+ Usage: memory-remember <content> [options]
24
+
25
+ Arguments:
26
+ <content> The memory content to save (required)
27
+
28
+ Options:
29
+ --tags <tag1,tag2> Comma-separated tags for categorization
30
+ --project <path> Project path context
31
+
32
+ Examples:
33
+ memory-remember "API key stored in .env file" --tags security,config
34
+ memory-remember "User prefers tabs over spaces"
35
+ memory-remember "Bug in auth.js line 42" --project ~/work/app --tags bug
36
+ `);
37
+ return;
38
+ }
39
+
40
+ // Build V3 CLI args
41
+ const cliArgs = ['-m', 'superlocalmemory.cli.main', 'remember'];
42
+
43
+ for (let i = 0; i < args.length; i++) {
44
+ cliArgs.push(args[i]);
45
+ }
46
+
47
+ try {
48
+ const { stdout, stderr } = await execFileAsync('python3', cliArgs);
49
+
50
+ if (stderr) {
51
+ console.error('Warning:', stderr);
52
+ }
53
+
54
+ console.log(stdout);
55
+
56
+ // Show helpful next steps
57
+ console.log('Next steps:');
58
+ console.log(' - Use `slm recall <query>` to search this memory');
59
+ console.log(' - Use `slm list` to see recent memories');
60
+
61
+ } catch (error) {
62
+ console.error('Error saving memory:', error.message);
63
+ if (error.stdout) console.log(error.stdout);
64
+ if (error.stderr) console.error(error.stderr);
65
+ }
66
+ }
67
+
68
+ memoryRememberSkill();