weflow-cli 1.5.0 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. package/ARCHITECTURE.md +105 -0
  2. package/CHANGELOG.md +121 -0
  3. package/CONTRIBUTING.md +45 -0
  4. package/LICENSE +21 -21
  5. package/OPERATIONS.md +272 -0
  6. package/README.en.md +281 -0
  7. package/README.md +334 -149
  8. package/SECURITY.md +47 -0
  9. package/bin/weflow-cli.ts +4050 -581
  10. package/dist/bin/weflow-cli.js +4310 -588
  11. package/dist/bin/weflow-cli.js.map +1 -1
  12. package/dist/mcp-server/index.js +178 -236
  13. package/dist/mcp-server/index.js.map +1 -1
  14. package/dist/src/core/dbPathService.d.ts +15 -1
  15. package/dist/src/core/dbPathService.d.ts.map +1 -1
  16. package/dist/src/core/dbPathService.js +177 -19
  17. package/dist/src/core/dbPathService.js.map +1 -1
  18. package/dist/src/core/keyService.d.ts +8 -0
  19. package/dist/src/core/keyService.d.ts.map +1 -1
  20. package/dist/src/core/keyService.js +127 -22
  21. package/dist/src/core/keyService.js.map +1 -1
  22. package/dist/src/core/ntCore.d.ts +59 -1
  23. package/dist/src/core/ntCore.d.ts.map +1 -1
  24. package/dist/src/core/ntCore.js +201 -65
  25. package/dist/src/core/ntCore.js.map +1 -1
  26. package/dist/src/core/sqlcipherCore.d.ts.map +1 -1
  27. package/dist/src/core/sqlcipherCore.js +18 -1
  28. package/dist/src/core/sqlcipherCore.js.map +1 -1
  29. package/dist/src/core/wcdbCore.d.ts.map +1 -1
  30. package/dist/src/core/wcdbCore.js +3 -6
  31. package/dist/src/core/wcdbCore.js.map +1 -1
  32. package/dist/src/services/assistantDaemon.d.ts +19 -0
  33. package/dist/src/services/assistantDaemon.d.ts.map +1 -0
  34. package/dist/src/services/assistantDaemon.js +117 -0
  35. package/dist/src/services/assistantDaemon.js.map +1 -0
  36. package/dist/src/services/assistantMemory.d.ts +36 -0
  37. package/dist/src/services/assistantMemory.d.ts.map +1 -0
  38. package/dist/src/services/assistantMemory.js +182 -0
  39. package/dist/src/services/assistantMemory.js.map +1 -0
  40. package/dist/src/services/assistantPrivacy.d.ts +25 -0
  41. package/dist/src/services/assistantPrivacy.d.ts.map +1 -0
  42. package/dist/src/services/assistantPrivacy.js +77 -0
  43. package/dist/src/services/assistantPrivacy.js.map +1 -0
  44. package/dist/src/services/assistantRouting.d.ts +18 -0
  45. package/dist/src/services/assistantRouting.d.ts.map +1 -0
  46. package/dist/src/services/assistantRouting.js +68 -0
  47. package/dist/src/services/assistantRouting.js.map +1 -0
  48. package/dist/src/services/assistantService.d.ts +37 -0
  49. package/dist/src/services/assistantService.d.ts.map +1 -0
  50. package/dist/src/services/assistantService.js +284 -0
  51. package/dist/src/services/assistantService.js.map +1 -0
  52. package/dist/src/services/assistantTools.d.ts +24 -0
  53. package/dist/src/services/assistantTools.d.ts.map +1 -0
  54. package/dist/src/services/assistantTools.js +582 -0
  55. package/dist/src/services/assistantTools.js.map +1 -0
  56. package/dist/src/services/chatService.d.ts +44 -0
  57. package/dist/src/services/chatService.d.ts.map +1 -1
  58. package/dist/src/services/chatService.js +105 -4
  59. package/dist/src/services/chatService.js.map +1 -1
  60. package/dist/src/services/configService.d.ts +55 -0
  61. package/dist/src/services/configService.d.ts.map +1 -1
  62. package/dist/src/services/configService.js +147 -6
  63. package/dist/src/services/configService.js.map +1 -1
  64. package/dist/src/services/evidenceService.d.ts +30 -0
  65. package/dist/src/services/evidenceService.d.ts.map +1 -0
  66. package/dist/src/services/evidenceService.js +98 -0
  67. package/dist/src/services/evidenceService.js.map +1 -0
  68. package/dist/src/services/exportService.d.ts +13 -20
  69. package/dist/src/services/exportService.d.ts.map +1 -1
  70. package/dist/src/services/exportService.js +113 -47
  71. package/dist/src/services/exportService.js.map +1 -1
  72. package/dist/src/services/initKeyService.d.ts +19 -0
  73. package/dist/src/services/initKeyService.d.ts.map +1 -0
  74. package/dist/src/services/initKeyService.js +80 -0
  75. package/dist/src/services/initKeyService.js.map +1 -0
  76. package/dist/src/services/messageContract.d.ts +23 -0
  77. package/dist/src/services/messageContract.d.ts.map +1 -0
  78. package/dist/src/services/messageContract.js +49 -0
  79. package/dist/src/services/messageContract.js.map +1 -0
  80. package/dist/src/services/messageQuery.d.ts +7 -0
  81. package/dist/src/services/messageQuery.d.ts.map +1 -0
  82. package/dist/src/services/messageQuery.js +30 -0
  83. package/dist/src/services/messageQuery.js.map +1 -0
  84. package/dist/src/services/wechat-formatter.js +14 -14
  85. package/dist/src/services/wechatMessageService.d.ts.map +1 -1
  86. package/dist/src/services/wechatMessageService.js +31 -3
  87. package/dist/src/services/wechatMessageService.js.map +1 -1
  88. package/dist/src/services/whitelistService.d.ts +52 -4
  89. package/dist/src/services/whitelistService.d.ts.map +1 -1
  90. package/dist/src/services/whitelistService.js +183 -17
  91. package/dist/src/services/whitelistService.js.map +1 -1
  92. package/dist/src/types.d.ts +20 -0
  93. package/dist/src/types.d.ts.map +1 -1
  94. package/dist/src/utils/dateRange.d.ts +15 -0
  95. package/dist/src/utils/dateRange.d.ts.map +1 -0
  96. package/dist/src/utils/dateRange.js +48 -0
  97. package/dist/src/utils/dateRange.js.map +1 -0
  98. package/dist/src/utils/mcpSecurity.d.ts +5 -0
  99. package/dist/src/utils/mcpSecurity.d.ts.map +1 -0
  100. package/dist/src/utils/mcpSecurity.js +39 -0
  101. package/dist/src/utils/mcpSecurity.js.map +1 -0
  102. package/dist/src/utils/packageRoot.d.ts +2 -0
  103. package/dist/src/utils/packageRoot.d.ts.map +1 -0
  104. package/dist/src/utils/packageRoot.js +16 -0
  105. package/dist/src/utils/packageRoot.js.map +1 -0
  106. package/dist/src/utils/python.d.ts +2 -0
  107. package/dist/src/utils/python.d.ts.map +1 -0
  108. package/dist/src/utils/python.js +72 -0
  109. package/dist/src/utils/python.js.map +1 -0
  110. package/dist/src/utils/pythonProcessEnv.d.ts +3 -0
  111. package/dist/src/utils/pythonProcessEnv.d.ts.map +1 -0
  112. package/dist/src/utils/pythonProcessEnv.js +46 -0
  113. package/dist/src/utils/pythonProcessEnv.js.map +1 -0
  114. package/dist/src/utils/talkerUtils.d.ts +4 -1
  115. package/dist/src/utils/talkerUtils.d.ts.map +1 -1
  116. package/dist/src/utils/talkerUtils.js +9 -9
  117. package/dist/src/utils/talkerUtils.js.map +1 -1
  118. package/dist/src/utils/wechatEmoji.d.ts +5 -0
  119. package/dist/src/utils/wechatEmoji.d.ts.map +1 -0
  120. package/dist/src/utils/wechatEmoji.js +35 -0
  121. package/dist/src/utils/wechatEmoji.js.map +1 -0
  122. package/docs/AI_INTERFACE.md +189 -0
  123. package/docs/BRANCHES.md +87 -0
  124. package/docs/DATA_CONTRACT.md +74 -0
  125. package/docs/DECISIONS.md +270 -0
  126. package/docs/DEEPSEEK_V4_FLASH/346/226/275/345/267/245/346/226/207/346/241/243.md +234 -0
  127. package/docs/EVIDENCE_GUIDE.md +96 -0
  128. package/docs/MCP.md +95 -0
  129. package/docs/PARTNERS.md +41 -0
  130. package/docs/PROJECT_STATE.md +96 -0
  131. package/docs/RELEASING.md +124 -0
  132. package/docs/ROADMAP.md +191 -0
  133. package/docs/SETUP.md +103 -0
  134. package/docs/images/weflow-architecture-gpt-image-2.png +0 -0
  135. package/docs/images/weflow-architecture.png +0 -0
  136. package/docs/images/weflow-architecture.svg +65 -0
  137. package/mcp-server/index.ts +169 -269
  138. package/package.json +81 -72
  139. package/requirements-3x.txt +4 -0
  140. package/requirements-voice.txt +15 -0
  141. package/requirements.txt +9 -0
  142. package/resources/js/marked.min.js +69 -0
  143. package/resources/wechat-emoji/666.png +0 -0
  144. package/resources/wechat-emoji/Awesome.png +0 -0
  145. package/resources/wechat-emoji/Concerned.png +0 -0
  146. package/resources/wechat-emoji/Cry.png +0 -0
  147. package/resources/wechat-emoji/Emm.png +0 -0
  148. package/resources/wechat-emoji/Facepalm.png +0 -0
  149. package/resources/wechat-emoji/Grin.png +0 -0
  150. package/resources/wechat-emoji/OK.png +0 -0
  151. package/resources/wechat-emoji/Respect.png +0 -0
  152. package/resources/wechat-emoji/Sick.png +0 -0
  153. package/resources/wechat-emoji/Sleep.png +0 -0
  154. package/resources/wechat-emoji/Smile.png +0 -0
  155. package/resources/wechat-emoji//344/272/262/344/272/262.png +0 -0
  156. package/resources/wechat-emoji//344/276/277/344/276/277.png +0 -0
  157. package/resources/wechat-emoji//345/201/267/347/254/221.png +0 -0
  158. package/resources/wechat-emoji//345/202/262/346/205/242.png +0 -0
  159. package/resources/wechat-emoji//345/206/215/350/247/201.png +0 -0
  160. package/resources/wechat-emoji//345/207/213/350/260/242.png +0 -0
  161. package/resources/wechat-emoji//345/212/240/346/262/271.png +0 -0
  162. package/resources/wechat-emoji//345/213/276/345/274/225.png +0 -0
  163. package/resources/wechat-emoji//345/217/221/345/221/206.png +0 -0
  164. package/resources/wechat-emoji//345/217/221/346/200/222.png +0 -0
  165. package/resources/wechat-emoji//345/217/221/346/212/226.png +0 -0
  166. package/resources/wechat-emoji//345/217/257/346/200/234.png +0 -0
  167. package/resources/wechat-emoji//345/217/263/345/223/274/345/223/274.png +0 -0
  168. package/resources/wechat-emoji//345/217/271/346/260/224.png +0 -0
  169. package/resources/wechat-emoji//345/220/203/347/223/234.png +0 -0
  170. package/resources/wechat-emoji//345/220/210/345/215/201.png +0 -0
  171. package/resources/wechat-emoji//345/220/220.png +0 -0
  172. package/resources/wechat-emoji//345/221/262/347/211/231.png +0 -0
  173. package/resources/wechat-emoji//345/222/222/351/252/202.png +0 -0
  174. package/resources/wechat-emoji//345/222/226/345/225/241.png +0 -0
  175. package/resources/wechat-emoji//345/223/207.png +0 -0
  176. package/resources/wechat-emoji//345/225/244/351/205/222.png +0 -0
  177. package/resources/wechat-emoji//345/230/230.png +0 -0
  178. package/resources/wechat-emoji//345/230/264/345/224/207.png +0 -0
  179. package/resources/wechat-emoji//345/230/277/345/223/210.png +0 -0
  180. package/resources/wechat-emoji//345/233/247.png +0 -0
  181. package/resources/wechat-emoji//345/233/260.png +0 -0
  182. package/resources/wechat-emoji//345/235/217/347/254/221.png +0 -0
  183. package/resources/wechat-emoji//345/244/247/345/223/255.png +0 -0
  184. package/resources/wechat-emoji//345/244/251/345/225/212.png +0 -0
  185. package/resources/wechat-emoji//345/244/252/351/230/263.png +0 -0
  186. package/resources/wechat-emoji//345/244/261/346/234/233.png +0 -0
  187. package/resources/wechat-emoji//345/245/270/347/254/221.png +0 -0
  188. package/resources/wechat-emoji//345/245/275/347/232/204.png +0 -0
  189. package/resources/wechat-emoji//345/247/224/345/261/210.png +0 -0
  190. package/resources/wechat-emoji//345/256/263/347/276/236.png +0 -0
  191. package/resources/wechat-emoji//345/260/264/345/260/254.png +0 -0
  192. package/resources/wechat-emoji//345/272/206/347/245/235.png +0 -0
  193. package/resources/wechat-emoji//345/274/261.png +0 -0
  194. package/resources/wechat-emoji//345/274/272.png +0 -0
  195. package/resources/wechat-emoji//345/276/227/346/204/217.png +0 -0
  196. package/resources/wechat-emoji//345/276/256/347/254/221.png +0 -0
  197. package/resources/wechat-emoji//345/277/203/347/242/216.png +0 -0
  198. package/resources/wechat-emoji//345/277/253/345/223/255/344/272/206.png +0 -0
  199. package/resources/wechat-emoji//346/201/220/346/203/247.png +0 -0
  200. package/resources/wechat-emoji//346/202/240/351/227/262.png +0 -0
  201. package/resources/wechat-emoji//346/203/212/346/201/220.png +0 -0
  202. package/resources/wechat-emoji//346/203/212/350/256/266.png +0 -0
  203. package/resources/wechat-emoji//346/204/211/345/277/253.png +0 -0
  204. package/resources/wechat-emoji//346/206/250/347/254/221.png +0 -0
  205. package/resources/wechat-emoji//346/211/223/350/204/270.png +0 -0
  206. package/resources/wechat-emoji//346/212/223/347/213/202.png +0 -0
  207. package/resources/wechat-emoji//346/212/240/351/274/273.png +0 -0
  208. package/resources/wechat-emoji//346/212/261/346/213/263.png +0 -0
  209. package/resources/wechat-emoji//346/213/245/346/212/261.png +0 -0
  210. package/resources/wechat-emoji//346/213/263/345/244/264.png +0 -0
  211. package/resources/wechat-emoji//346/215/202/350/204/270.png +0 -0
  212. package/resources/wechat-emoji//346/217/241/346/211/213.png +0 -0
  213. package/resources/wechat-emoji//346/222/207/345/230/264.png +0 -0
  214. package/resources/wechat-emoji//346/223/246/346/261/227.png +0 -0
  215. package/resources/wechat-emoji//346/225/262/346/211/223.png +0 -0
  216. package/resources/wechat-emoji//346/227/240/350/257/255.png +0 -0
  217. package/resources/wechat-emoji//346/227/272/346/237/264.png +0 -0
  218. package/resources/wechat-emoji//346/231/225.png +0 -0
  219. package/resources/wechat-emoji//346/234/210/344/272/256.png +0 -0
  220. package/resources/wechat-emoji//346/234/272/346/231/272.png +0 -0
  221. package/resources/wechat-emoji//346/261/227.png +0 -0
  222. package/resources/wechat-emoji//346/265/201/346/263/252.png +0 -0
  223. package/resources/wechat-emoji//347/202/270/345/274/271.png +0 -0
  224. package/resources/wechat-emoji//347/203/237/350/212/261.png +0 -0
  225. package/resources/wechat-emoji//347/210/206/347/253/271.png +0 -0
  226. package/resources/wechat-emoji//347/210/261/345/277/203.png +0 -0
  227. package/resources/wechat-emoji//347/214/252/345/244/264.png +0 -0
  228. package/resources/wechat-emoji//347/216/253/347/221/260.png +0 -0
  229. package/resources/wechat-emoji//347/224/237/347/227/205.png +0 -0
  230. package/resources/wechat-emoji//347/226/221/351/227/256.png +0 -0
  231. package/resources/wechat-emoji//347/231/274.png +0 -0
  232. package/resources/wechat-emoji//347/231/275/347/234/274.png +0 -0
  233. package/resources/wechat-emoji//347/232/261/347/234/211.png +0 -0
  234. package/resources/wechat-emoji//347/235/241.png +0 -0
  235. package/resources/wechat-emoji//347/240/264/346/266/225/344/270/272/347/254/221.png +0 -0
  236. package/resources/wechat-emoji//347/244/274/347/211/251.png +0 -0
  237. package/resources/wechat-emoji//347/244/276/344/274/232/347/244/276/344/274/232.png +0 -0
  238. package/resources/wechat-emoji//347/246/217.png +0 -0
  239. package/resources/wechat-emoji//347/254/221/350/204/270.png +0 -0
  240. package/resources/wechat-emoji//347/272/242/345/214/205.png +0 -0
  241. package/resources/wechat-emoji//347/277/273/347/231/275/347/234/274.png +0 -0
  242. package/resources/wechat-emoji//350/200/266.png +0 -0
  243. package/resources/wechat-emoji//350/203/234/345/210/251.png +0 -0
  244. package/resources/wechat-emoji//350/204/270/347/272/242.png +0 -0
  245. package/resources/wechat-emoji//350/211/262.png +0 -0
  246. package/resources/wechat-emoji//350/213/246/346/266/251.png +0 -0
  247. package/resources/wechat-emoji//350/217/234/345/210/200.png +0 -0
  248. package/resources/wechat-emoji//350/233/213/347/263/225.png +0 -0
  249. package/resources/wechat-emoji//350/241/260.png +0 -0
  250. package/resources/wechat-emoji//350/243/202/345/274/200.png +0 -0
  251. package/resources/wechat-emoji//350/256/251/346/210/221/347/234/213/347/234/213.png +0 -0
  252. package/resources/wechat-emoji//350/260/203/347/232/256.png +0 -0
  253. package/resources/wechat-emoji//350/267/263/350/267/263.png +0 -0
  254. package/resources/wechat-emoji//350/275/254/345/234/210.png +0 -0
  255. package/resources/wechat-emoji//351/204/231/350/247/206.png +0 -0
  256. package/resources/wechat-emoji//351/227/255/345/230/264.png +0 -0
  257. package/resources/wechat-emoji//351/230/264/351/231/251.png +0 -0
  258. package/resources/wechat-emoji//351/232/276/350/277/207.png +0 -0
  259. package/resources/wechat-emoji//351/252/267/351/253/205.png +0 -0
  260. package/resources/wechat-emoji//351/274/223/346/216/214.png +0 -0
  261. package/scripts/_batch_link_sources.py +73 -73
  262. package/scripts/_utils.py +29 -0
  263. package/scripts/annual_report.py +796 -796
  264. package/scripts/auto_tag.py +128 -128
  265. package/scripts/biz_daily.py +210 -53
  266. package/scripts/chat_report.py +10 -0
  267. package/scripts/chat_stats.py +702 -702
  268. package/scripts/classify_daily.py +17 -11
  269. package/scripts/create_reading_notes.py +370 -370
  270. package/scripts/daily_stats.py +132 -0
  271. package/scripts/enrich_backlinks.py +163 -163
  272. package/scripts/export_chat_html.py +1704 -107
  273. package/scripts/extract_todos.py +445 -404
  274. package/scripts/fav_server.py +119 -12
  275. package/scripts/fix_topics.py +111 -111
  276. package/scripts/generate_ai_report.py +1 -1
  277. package/scripts/generate_html.py +597 -277
  278. package/scripts/inspection_records.py +354 -0
  279. package/scripts/mcp_bridge.py +398 -398
  280. package/scripts/nt_decrypt.py +702 -48
  281. package/scripts/pipeline.py +27 -19
  282. package/scripts/promote_all.py +312 -310
  283. package/scripts/promote_ideas.py +299 -297
  284. package/scripts/rag_chat.py +194 -191
  285. package/scripts/semantic_search.py +435 -431
  286. package/scripts/sync_fav.py +201 -146
  287. package/scripts/sync_weread.py +192 -192
  288. package/scripts/vault_rag.py +140 -139
  289. package/scripts/vault_search.py +141 -141
  290. package/scripts/wechat_emoji.py +132 -0
  291. package/scripts/wechat_emoticon.py +433 -0
  292. package/scripts/wechat_image.py +258 -0
  293. package/scripts/wechat_voice.py +327 -0
  294. package/src/core/dbPathService.ts +163 -18
  295. package/src/core/keyService.ts +137 -25
  296. package/src/core/ntCore.ts +215 -62
  297. package/src/core/sqlcipherCore.ts +17 -1
  298. package/src/core/wcdbCore.ts +3 -7
  299. package/src/services/assistantDaemon.ts +111 -0
  300. package/src/services/assistantMemory.ts +193 -0
  301. package/src/services/assistantPrivacy.ts +87 -0
  302. package/src/services/assistantRouting.ts +92 -0
  303. package/src/services/assistantService.ts +295 -0
  304. package/src/services/assistantTools.ts +549 -0
  305. package/src/services/chatService.ts +133 -4
  306. package/src/services/configService.ts +194 -6
  307. package/src/services/evidenceService.ts +129 -0
  308. package/src/services/exportService.ts +113 -48
  309. package/src/services/initKeyService.ts +83 -0
  310. package/src/services/messageContract.ts +77 -0
  311. package/src/services/messageQuery.ts +38 -0
  312. package/src/services/wechat-formatter.ts +348 -348
  313. package/src/services/wechatMessageService.ts +25 -3
  314. package/src/services/wereadService.ts +308 -308
  315. package/src/services/whitelistService.ts +209 -22
  316. package/src/types.ts +20 -0
  317. package/src/utils/dateRange.ts +58 -0
  318. package/src/utils/mcpSecurity.ts +39 -0
  319. package/src/utils/packageRoot.ts +14 -0
  320. package/src/utils/python.ts +73 -0
  321. package/src/utils/pythonProcessEnv.ts +45 -0
  322. package/src/utils/talkerUtils.ts +14 -2
  323. package/dist/src/utils/errors.d.ts +0 -25
  324. package/dist/src/utils/errors.d.ts.map +0 -1
  325. package/dist/src/utils/errors.js +0 -43
  326. package/dist/src/utils/errors.js.map +0 -1
  327. package/dist/src/utils/pythonRunner.d.ts +0 -27
  328. package/dist/src/utils/pythonRunner.d.ts.map +0 -1
  329. package/dist/src/utils/pythonRunner.js +0 -62
  330. package/dist/src/utils/pythonRunner.js.map +0 -1
  331. package/src/utils/errors.ts +0 -42
  332. package/src/utils/pythonRunner.ts +0 -81
@@ -0,0 +1,124 @@
1
+ # 发布清单
2
+
3
+ npm 包与 GitHub 分开发布,中间隔多久都不奇怪——`1.5.0` 与主线之间曾拉开 128 个提交、
4
+ 两个多月,直接导致用户照着 README 敲 `init --path` 却报 `unknown option`。
5
+
6
+ 按下面顺序走,每一步都有对应的**失败长什么样**。
7
+
8
+ ## 1. 定版本号
9
+
10
+ 按语义化版本,不是按「改了多少行」:
11
+
12
+ | 改动性质 | 升哪一位 | 例 |
13
+ | --- | --- | --- |
14
+ | 新功能、新命令、新参数 | **minor** | 1.5.0 → 1.6.0 |
15
+ | 只修 bug、只改文档 | patch | 1.6.0 → 1.6.1 |
16
+ | 破坏兼容 | major | 1.6.0 → 2.0.0 |
17
+
18
+ 已备好但**从未发布**的版本号可以并进下一个:`1.5.1` 准备过却没发,
19
+ 它的修复就直接并进了 `1.6.0`。
20
+
21
+ ## 2. 整理 CHANGELOG
22
+
23
+ - 把 `## Unreleased` 改名为 `## <新版本号>`
24
+ - 若上一版已写好但没发布,把它的条目并入,删掉那个空段
25
+ - 通用说明(如「npm 与 GitHub 分开发布」)移到文件顶部,别留在版本段里
26
+
27
+ ## 3. 构建与测试
28
+
29
+ ```powershell
30
+ npm run build
31
+ npm test
32
+ ```
33
+
34
+ ## 4. 打包检查(**不能跳过**)
35
+
36
+ ```powershell
37
+ npm pack --dry-run
38
+ ```
39
+
40
+ 本地常有 `output/`(几 GB 产出)、`models/`(几 GB 模型)、`_env.json`(含密钥)
41
+ 这类东西。`package.json` 的 `files` 是白名单,理论上挡住——但**白名单也可能写漏**,
42
+ 所以逐项确认:
43
+
44
+ ```powershell
45
+ npm pack --dry-run 2>&1 | grep -E "npm notice [0-9]" > /tmp/list.txt
46
+ grep -E "^output/|^models/|node_modules|\.env|\.db$|\.dat$|secret|credential" /tmp/list.txt
47
+ ```
48
+
49
+ **这条命令必须没有输出。** 有输出就停下来查。
50
+
51
+ 同时确认新增文件确实**在**包里(白名单是按目录配的,容易漏):
52
+
53
+ ```powershell
54
+ grep -E "新文件名" /tmp/list.txt
55
+ ```
56
+
57
+ ## 5. 发布
58
+
59
+ 需要 npm 凭据。`ribiaosu` 账号开了 2FA,所以两条路:
60
+
61
+ **凭据(推荐,一次配置长期可用)** — 用**带 `Bypass 2FA` 的 Granular Access Token**,
62
+ 在 https://www.npmjs.com/settings/ribiaosu/tokens 生成时**必须勾选那个框**。
63
+ 漏勾的 token 会在发布时报 `403 ... bypass 2fa enabled is required`。
64
+
65
+ | 现象 | 原因 |
66
+ | --- | --- |
67
+ | `403 ... two-factor authentication ... required` | token 没勾 Bypass 2FA,或没用 OTP |
68
+ | `ENEEAUTH` | 没登录 / 没配 token |
69
+
70
+ **验证 token 是否可用**(`bypass_2fa` 必须是 `true`):
71
+
72
+ ```powershell
73
+ curl -s -H "Authorization: Bearer <token>" https://registry.npmjs.org/-/npm/v1/tokens
74
+ ```
75
+
76
+ **一次性验证码**:
77
+
78
+ ```powershell
79
+ npm publish --otp=<6位码>
80
+ ```
81
+
82
+ ## 6. 触发国内镜像同步(**新加的必要步骤**)
83
+
84
+ 国内用户大多用 `registry.npmmirror.com`(淘宝源),它对新版本有同步延迟。
85
+ 不同步的话,发布后几个小时内会有人来提「版本不存在」的 issue——
86
+ `weflow-cli@1.6.0` 就这样被报过一次(Issue #8)。
87
+
88
+ ```powershell
89
+ curl -X PUT https://registry.npmmirror.com/-/package/weflow-cli/syncs
90
+ ```
91
+
92
+ 返回 `{"ok":true,...,"state":"waiting"}` 即已受理。**约 5 分钟后**生效。
93
+
94
+ ## 7. 验证两个源都是新版本
95
+
96
+ ```powershell
97
+ npm view weflow-cli version --registry=https://registry.npmjs.org
98
+ npm view weflow-cli version --registry=https://registry.npmmirror.com
99
+ ```
100
+
101
+ 两个都要是新版本号才对外宣告。官方源发布后自身也有几分钟 CDN 传播延迟——
102
+ 期间 `npm view` 可能显示旧版本、tarball 可能 404,**这是在传播,不是失败**。
103
+ 用这个判断是否真的发出去了:
104
+
105
+ ```powershell
106
+ npm publish # 再发一次
107
+ ```
108
+
109
+ 报 `409 Conflict - Cannot publish over previously staged version` → **已经发布成功**。
110
+
111
+ ## 8. 兜底:告诉用户怎么绕开镜像
112
+
113
+ ```powershell
114
+ npm config get registry # 看用的哪个源
115
+ npm view weflow-cli version --registry=https://registry.npmjs.org # 用官方源查
116
+ ```
117
+
118
+ 两个源结果不一致 → 是镜像同步问题,不是包的问题:
119
+ `npm install -g weflow-cli@<版本> --registry=https://registry.npmjs.org` 立刻可用。
120
+
121
+ ## 发布后
122
+
123
+ - 回到相关 issue 回复「已发布 + 升级方式」
124
+ - GitHub Release 与本清单解耦:源码、编译包、npm 三者版本差异要对用户可见
@@ -0,0 +1,191 @@
1
+ # WeFlow CLI 整体改进与扩展计划书
2
+
3
+ > 版本:草案 v1.0
4
+ > 适用范围:`weflow-cli` 主仓库、CLI、MCP、本地阅读器,以及基于公开数据契约的合作集成。
5
+ > 本文描述方向、分期、验收标准与维护机制;当前已实现能力以 [PROJECT_STATE.md](PROJECT_STATE.md) 为准。
6
+
7
+ ## 一、定位与目标
8
+
9
+ WeFlow CLI 的长期定位是**用户授权的本地数据底座**:在用户设备上,将本地聊天、公众号阅读、收藏与知识资料整理为可查询、可导出、可被 AI 或合作应用在明确边界内使用的数据能力。
10
+
11
+ 项目不以替代官方客户端或进行账号自动化为目标。核心价值是让用户能够在本地完成资料整理、阅读、检索、导出、复盘与受控分析,并为上层产品提供稳定、可审查的接口。
12
+
13
+ 未来 12 至 18 个月的目标:
14
+
15
+ 1. **稳定可用**:初始化、数据库访问、导出与日报在支持的平台上有清晰诊断、可重试路径和回归验证。
16
+ 2. **数据可信**:消息、媒体、来源、时间范围和导出覆盖状态可被追溯;宁可标记缺失,也不误配内容。
17
+ 3. **AI 可控**:本地流程默认可不用 AI;需要云端 AI 时,让用户看得见输入范围、成本与执行结果。
18
+ 4. **面向合作扩展**:以版本化 JSON 数据契约和只读 MCP 为边界,让 `she-love-me` 等合作项目可以接入,而不触及数据库、密钥或本地目录。
19
+ 5. **长期可维护**:让后续维护者和 Agent 能从项目状态、决策记录、测试与问题模板快速理解现状并连续推进。
20
+
21
+ ## 二、发展原则
22
+
23
+ | 原则 | 具体要求 |
24
+ | --- | --- |
25
+ | 本地优先 | 原始聊天数据、数据库访问凭据、导出文件默认保留在用户设备;不把真实数据写入仓库、测试或公开报告。 |
26
+ | 用户授权 | 仅处理用户本人拥有或明确获授权的数据;涉及写入、发布、云端处理与长期服务时采用预览和确认。 |
27
+ | 准确优先 | 媒体、联系人与会话匹配必须依赖可靠身份;无法可靠对应时显示占位与原因,不以猜测填充。 |
28
+ | 兼容演进 | CLI 人类可用输出保持稳定;面向工具的 JSON/MCP 接口采用版本化、可扩展、保留未知字段的方式演进。 |
29
+ | 默认最小权限 | MCP 默认只读;助手默认拒绝陌生来源;本地阅读器仅监听回环地址。 |
30
+ | 可验证交付 | 每项功能都要有明确入口、成功条件、失败诊断和与风险相称的自动化或本机验证。 |
31
+
32
+ ## 三、现状与主要缺口
33
+
34
+ | 能力线 | 已有基础 | 主要缺口 |
35
+ | --- | --- | --- |
36
+ | 本地聊天数据 | 会话、联系人、消息、收藏、朋友圈缓存与多格式导出;支持部分 NT 媒体和 HTML 阅读 | 微信版本与媒体格式变化快;资源库映射、图片/表情/视频覆盖率仍需提升;导出覆盖情况需要更清晰地呈现。 |
37
+ | 初始化与诊断 | 复用已验证配置、按需刷新、路径发现、缺失密钥测试 | 支持场景需要形成更标准的诊断包与兼容性矩阵,减少 Issue 中的反复沟通。 |
38
+ | 公众号日报 | 来源筛选、分类、补昨日报、无 AI 运行、HTML 阅读器、收藏同步 | 需要提升抓取韧性、增量更新、阅读质量与定时任务可观测性。 |
39
+ | 知识与 AI | Vault、检索、RAG、阅读笔记、报告和隐私模式 | 需要统一数据选择、成本提示、结果引用、可复现评估与本地模型体验。 |
40
+ | Agent/MCP | 只读 MCP、能力发现、版本化消息数据契约 | 工具覆盖仍不完整;需要稳定分页/增量同步、模拟数据集与合作接入指南。 |
41
+ | 工程治理 | 项目状态、技术决策、安全说明、测试与 CI | 需要路线图、发布节奏、依赖治理、性能基线与更结构化的 Issue/PR 流程。 |
42
+
43
+ ## 四、分期路线
44
+
45
+ ### P0:可靠性与导出修复
46
+
47
+ **目标:** 让用户最常使用的初始化、查询和 HTML 导出流程稳定、可解释。
48
+
49
+ | 工作项 | 交付物 | 验收标准 |
50
+ | --- | --- | --- |
51
+ | 初始化兼容性 | 支持版本/平台矩阵、脱敏诊断命令、常见失败决策树 | 在支持版本上可完成配置验证;失败结果能区分路径、运行环境、数据库访问与客户端状态问题。 |
52
+ | 媒体导出可靠性 | 会话级缓存索引、图片/表情/转发卡片渲染、媒体覆盖统计 | HTML 能展示可可靠关联的本地媒体;无法匹配的记录不出现错图;导出完成后报告图片、表情、链接与占位数量。 |
53
+ | 导出性能 | 本地媒体优先、远程资源预算、可选的离线模式 | 大会话导出不会因外部封面请求无限等待;离线模式可在无网络时完成本地内容导出。 |
54
+ | 回归样本 | 完全合成的数据库/缓存夹具与真实机脱敏验证清单 | 每种媒体分支至少有合成回归;发布前按清单完成一次本机真实验证。 |
55
+
56
+ **优先顺序:** 先修复数据错配和导出失败,再增加新媒体格式;所有“显示更多内容”的改动都必须先证明不会把无关媒体关联到消息。
57
+
58
+ ### P1:数据底座与稳定接口
59
+
60
+ **目标:** 将当前 CLI 能力整理为可供其他本地应用和 Agent 安全调用的数据层。
61
+
62
+ | 工作项 | 交付物 | 验收标准 |
63
+ | --- | --- | --- |
64
+ | 数据契约完善 | `weflow-message/v1` 补充媒体状态、来源字段、覆盖信息和兼容策略 | 下游应用无需读取数据库即可消费消息;未知类型、缺失媒体和分页边界均有明确语义。 |
65
+ | 增量同步 | 基于时间窗的重叠读取、去重建议、稳定的同步状态文件 | 重新运行不会遗漏边界消息;下游能判断结果是否可能不完整。 |
66
+ | MCP 扩展 | 与 CLI 共享的只读工具:会话发现、分页读取、导出任务状态、日报读取 | 工具输入有上限和校验;响应不包含密钥、路径、未授权会话或完整无界数据。 |
67
+ | 数据质量报告 | `check` 或独立只读命令输出结构化健康摘要 | 用户可看到数据库可读性、媒体覆盖、日报完整性与配置状态,而不暴露敏感内容。 |
68
+ | 合作接入包 | 合作方 README、模拟数据、兼容性测试和最小示例 | 合作项目可在没有真实微信数据的环境中完成开发与集成测试。 |
69
+
70
+ ### P2:日报与个人知识工作流
71
+
72
+ **目标:** 把公众号阅读、收藏、笔记和知识检索变成连续且可控的个人工作流。
73
+
74
+ | 工作项 | 交付物 | 验收标准 |
75
+ | --- | --- | --- |
76
+ | 日报韧性 | 来源健康状态、失败重试、去重、补报记录、生成摘要 | 当天或昨日报缺失时能说明原因并可重跑;不会重复写入同一篇文章。 |
77
+ | 阅读器体验 | 来源/类别筛选、搜索、阅读进度、收藏与本地笔记关联 | 所有状态保存在本地;刷新后阅读和收藏状态可恢复。 |
78
+ | 来源配置 | 来源类别、白名单/停用状态、来源发现与导入导出 | 已分类来源不重复调用主题分类;用户可迁移自己的来源配置。 |
79
+ | 知识沉淀 | 将日报、收藏和用户笔记转成可追溯的 Vault 条目 | 每条知识条目保留来源、日期和原始链接;生成内容与原始材料可区分。 |
80
+ | 定时运行 | 可查看、可暂停、可重跑的本地任务状态 | 定时任务失败会留下脱敏状态与下一步建议;不会静默重复启动阅读器。 |
81
+
82
+ ### P3:受控 AI 与个人助手
83
+
84
+ **目标:** 让 AI 成为用户的本地数据助手,而不是不透明的数据出口。
85
+
86
+ | 工作项 | 交付物 | 验收标准 |
87
+ | --- | --- | --- |
88
+ | 统一 AI 执行层 | 模型、端点、隐私模式、输入上限、成本预估与执行审计的统一配置 | 每次云端调用可说明发送范围和模型;关闭 AI 后所有非 AI 流程仍完整可用。 |
89
+ | 检索与问答质量 | 引用原始片段、时间/来源筛选、回答置信提示与反馈入口 | 回答能指出使用了哪些本地材料;不把检索结果当作未经核实的事实。 |
90
+ | 法律线索辅助 | 面向用户选择的材料进行事件线索、时间线和证据清单整理 | 输出明确标记为线索整理,不替代法律意见;原始材料、导出副本和分析结果可独立保存。 |
91
+ | 助手权限模型 | 会话/群组级白名单、只读工具选择、人工确认的写操作 | 默认拒绝;任何外发、写入或发布均经过预览与明确确认。 |
92
+ | 本地模型支持 | 本地模型发现、能力检测、降级策略和性能说明 | 未配置云端密钥时,支持的本地模型可完成基础检索与摘要。 |
93
+
94
+ ### P4:生态合作与可持续维护
95
+
96
+ **目标:** 让项目可被可靠复用、协作开发和长期维护。
97
+
98
+ | 工作项 | 交付物 | 验收标准 |
99
+ | --- | --- | --- |
100
+ | 合作模式 | 数据契约版本策略、兼容性承诺、模拟集与集成 CI | 下游项目升级时可自动发现不兼容变更;合作方不能越过本地权限边界。 |
101
+ | 插件/适配器机制 | 受限的本地适配器接口与能力声明 | 第三方扩展无法直接读取配置、数据库或任意文件;扩展能被单独禁用。 |
102
+ | 发布治理 | 版本号、变更日志、GitHub Release、npm 发布核对表 | GitHub 源码、编译包和 npm 版本的差异对用户可见;发布前完成构建、测试和敏感信息检查。 |
103
+ | 社区协作 | Issue 模板、兼容性反馈模板、PR 检查清单、贡献者指南 | 问题报告可复现且脱敏;外部贡献可通过自动检查与人工审阅。 |
104
+ | 可观测性 | 本地匿名/脱敏运行摘要与性能基线 | 不采集真实聊天内容;维护者可定位慢导出、抓取失败和兼容性回归。 |
105
+
106
+ ## 五、横向工程专项
107
+
108
+ ### 1. 测试策略
109
+
110
+ - **单元测试:** 路径解析、输入验证、数据契约、隐私过滤、媒体匹配和 AI 路由。
111
+ - **合成集成测试:** 通过不含真实聊天内容的模拟数据库、缓存文件和 HTTP 夹具验证初始化、导出、日报与 MCP。
112
+ - **本机验收清单:** 在用户授权的本地环境中验证会话读取、日期导出、图片/表情/链接、日报生成与阅读器启动;结果只记录计数和状态。
113
+ - **兼容性回归:** 对每个支持的微信版本、操作系统和安装位置记录验证日期、通过项和已知限制。
114
+
115
+ ### 2. 性能与资源预算
116
+
117
+ - 为导出、媒体扫描、日报抓取、索引和 AI 请求设定时间、文件大小、数量和内存上限。
118
+ - 大任务提供进度、可取消能力和明确的部分完成状态。
119
+ - 优先会话范围、日期范围和增量处理,避免无边界扫描全部数据。
120
+ - 对远程封面、网页抓取和云端 AI 建立独立预算,使它们不阻塞本地核心流程。
121
+
122
+ ### 3. 安全与隐私治理
123
+
124
+ - 新增外部网络访问、MCP 工具、写操作或数据导出格式时,先检查 `SECURITY.md` 与 `DECISIONS.md`。
125
+ - 所有日志、测试夹具、Issue 示例和 CI 产物使用合成或脱敏数据。
126
+ - 密钥仅从加密配置或环境变量进入子进程,绝不写入命令行、HTML、报告或版本库。
127
+ - 定期审查依赖漏洞;升级先在独立改动中验证,不使用未经验证的破坏性自动修复。
128
+
129
+ ## 六、里程碑与验收节奏
130
+
131
+ | 里程碑 | 建议周期 | 通过条件 |
132
+ | --- | --- | --- |
133
+ | M1:稳定导出 | P0 完成时 | 初始化、会话读取和 HTML 导出在支持环境可复现;媒体不发生已知错配;导出不会被外部网络长期阻塞。 |
134
+ | M2:数据底座 v1 | P1 完成时 | CLI JSON 与 MCP 使用同一版本化契约;模拟集和合作接入示例可独立运行。 |
135
+ | M3:阅读与知识闭环 | P2 完成时 | 公众号来源配置、日报、收藏和 Vault 之间可本地追溯,补报与失败恢复可验证。 |
136
+ | M4:受控 AI 助手 | P3 完成时 | AI 调用范围、隐私模式、成本与引用可见;默认权限和确认机制通过回归。 |
137
+ | M5:生态发布 | P4 完成时 | 发布流程、兼容性检查、合作接入和社区反馈机制形成稳定闭环。 |
138
+
139
+ 每个里程碑使用以下最小交付清单:功能说明、数据/权限边界、测试证据、已知限制、文档更新、可回滚方案。未满足这些条件的实验能力不进入默认工作流。
140
+
141
+ ## 七、优先级与资源建议
142
+
143
+ ### 必须优先投入
144
+
145
+ 1. 初始化和数据库兼容性。
146
+ 2. 导出准确性、媒体覆盖和性能。
147
+ 3. 数据契约与 MCP 的稳定性。
148
+ 4. 日报的可靠生成与本地阅读体验。
149
+ 5. 安全边界、文档和回归测试。
150
+
151
+ ### 条件成熟后推进
152
+
153
+ 1. 多模型和更复杂的 AI 分析。
154
+ 2. 法律线索整理与结构化证据包。
155
+ 3. 插件生态和更多外部合作。
156
+ 4. 更多平台与客户端版本的兼容适配。
157
+
158
+ ### 暂不纳入默认能力
159
+
160
+ - 个人微信账号自动发消息、拉群、群管理或未验证的客户端自动化。
161
+ - 向第三方直接暴露数据库、密钥、完整本地目录或无范围限制的聊天内容。
162
+ - 无用户确认的云端分析、自动发布或跨设备同步。
163
+
164
+ ## 八、维护机制
165
+
166
+ 1. **每次改动先定位能力线:** 归入 P0–P4 或横向专项;没有对应目标的改动应说明必要性。
167
+ 2. **每次功能变更同步文档:** 用户可见行为更新 README/CHANGELOG,现状更新 `PROJECT_STATE.md`,长期取舍更新 `DECISIONS.md`。
168
+ 3. **每周维护检查:** 查看 Issue、PR、依赖告警、兼容反馈与定时任务状态;仅记录脱敏摘要。
169
+ 4. **每个发布前复核:** 构建、回归测试、媒体专项测试、敏感信息扫描、源代码与编译产物路径验证。
170
+ 5. **每季度复盘路线:** 根据真实 Issue、成功率、导出覆盖、日报完成率和合作集成反馈调整优先级,而不是仅按功能数量衡量进展。
171
+
172
+ ## 九、近期可执行清单
173
+
174
+ 以下任务可作为下一轮开发候选,按顺序推进:
175
+
176
+ 1. 为 HTML 导出增加结构化媒体覆盖报告,区分“本地缓存命中、远程封面、缺失占位、无法可靠匹配”。
177
+ 2. 完成高位编码的转发卡片渲染:同时保留本地缩略图、标题、描述和原始跳转链接。
178
+ 3. 建立合成 NT 媒体夹具与导出性能基线,覆盖图片、表情、转发文章、视频和缺失资源。
179
+ 4. 将消息契约的覆盖信息暴露给 CLI JSON 与 MCP,供合作项目显示不完整状态。
180
+ 5. 增加 `check --json` 的数据健康摘要,并加入日报与阅读器完整性检查。
181
+ 6. 为日报来源配置增加导入导出、失效来源提示和本地运行历史。
182
+ 7. 为合作项目提供只读集成示例、模拟数据和兼容性测试工作流。
183
+
184
+ ## 十、成功标准
185
+
186
+ 路线完成不是命令数量增加,而是达到以下状态:
187
+
188
+ - 用户可以在支持环境中用清晰步骤完成初始化、读取、导出与日报生成,并在失败时得到不泄露隐私的可操作提示。
189
+ - 导出的内容能够说明哪些媒体和链接被完整保留、哪些没有可靠来源,且不会误配他人或其他会话的媒体。
190
+ - AI、MCP 与合作项目只使用用户明确允许的、范围受限的数据接口。
191
+ - 项目维护者或新的 Agent 能仅依靠仓库文档、测试与模拟数据继续开发,而不依赖真实聊天记录或口头记忆。
package/docs/SETUP.md ADDED
@@ -0,0 +1,103 @@
1
+ # WeFlow CLI 跨电脑部署指南
2
+
3
+ 本指南用于在新电脑部署当前源码。它不迁移数据库、密钥或聊天导出;每台电脑都应在本机重新配置,并只访问用户本人有权访问的数据。
4
+
5
+ ## 前置条件
6
+
7
+ - Windows 10/11 x64 是当前重点验证平台;Node.js 18+、Python 3.10+。
8
+ - 已安装并登录兼容的微信版本。微信数据库格式和平台行为可能随版本变化。
9
+ - 足够的磁盘空间保存本地日报或导出副本。
10
+
11
+ ## 源码安装
12
+
13
+ ```powershell
14
+ git clone https://github.com/zhuobichen/weflow-cli.git
15
+ cd weflow-cli
16
+ npm install
17
+ npm run build
18
+ python -m pip install -r requirements.txt
19
+ weflow-cli check
20
+ ```
21
+
22
+ 开发时使用源码入口:
23
+
24
+ ```powershell
25
+ npm run dev -- check
26
+ npm run dev -- sessions
27
+ ```
28
+
29
+ `npm install -g weflow-cli` 使用 npm 发布包;发布包和 GitHub `master` 的发布时间可能不同。需要确认功能版本时,查看 `package.json`、Git 提交和 `npm view weflow-cli version`,不要假定两者相同。
30
+
31
+ ## 初始化
32
+
33
+ ```powershell
34
+ weflow-cli init
35
+ ```
36
+
37
+ 首次初始化时按 CLI 提示完成微信登录。已有有效配置会先验证并复用。数据在自定义目录时:
38
+
39
+ ```powershell
40
+ weflow-cli init --path "D:\WeChatData"
41
+ weflow-cli init --search-drives
42
+ weflow-cli init --full-scan
43
+ ```
44
+
45
+ 推荐顺序是显式路径、跨磁盘标准目录搜索、深度结构搜索。不要为了排障把真实配置、数据库或密钥复制到仓库。
46
+
47
+ 换账号、换版本或访问失败时:
48
+
49
+ ```powershell
50
+ weflow-cli init --refresh
51
+ ```
52
+
53
+ 完成后用 `sessions`、`contacts` 和一条最小范围的 `messages` 验证,不要直接批量导出。
54
+
55
+ ## Python 环境
56
+
57
+ Node CLI 会调用当前 PATH 中的 Python。若安装了多个 Python,必须在同一个解释器中安装和检查依赖:
58
+
59
+ ```powershell
60
+ python --version
61
+ python -c "import sqlcipher3, cryptography, html2text, zstandard; print('OK')"
62
+ python -m pip install -r requirements.txt
63
+ ```
64
+
65
+ 旧版 3.x 数据另装:
66
+
67
+ ```powershell
68
+ python -m pip install -r requirements-3x.txt
69
+ ```
70
+
71
+ ## 日报与阅读器
72
+
73
+ ```powershell
74
+ weflow-cli daily --no-ai
75
+ weflow-cli daily-server --date YYYY-MM-DD --open
76
+ ```
77
+
78
+ 持久化关闭日报 AI:
79
+
80
+ ```powershell
81
+ weflow-cli config set dailyAiEnabled false
82
+ ```
83
+
84
+ 日报输出和阅读器均为本地文件/回环服务。阅读器默认地址是 `http://127.0.0.1:8765/`,不要把端口暴露到局域网或公网。
85
+
86
+ ## 配置与隐私
87
+
88
+ 配置默认位于用户目录下的 `.weflow-cli/config.json`。路径由程序决定,不要在文档或 Issue 中写入真实用户目录。数据库访问密钥由本机绑定方式加密保存;换电脑不能依赖复制密文,应重新初始化。
89
+
90
+ 以下内容禁止提交:数据库、导出聊天、日报正文、`.env`、MCP 配置中的密钥、账号标识、完整日志和真实截图。MCP 客户端配置前确认其工作目录和权限;云端 AI 只处理明确选择的内容,敏感聊天优先用本地模型。
91
+
92
+ ## 最小验收
93
+
94
+ ```powershell
95
+ weflow-cli check
96
+ weflow-cli sessions -n 3
97
+ weflow-cli contacts -k "关键词"
98
+ weflow-cli messages "联系人A" -n 3
99
+ weflow-cli daily --date YYYY-MM-DD --no-ai
100
+ weflow-cli daily-server --date YYYY-MM-DD --open
101
+ ```
102
+
103
+ 问题反馈只提供操作系统、Node/Python 版本、微信版本、命令和脱敏错误。不要提供密钥、数据库、wxid、聊天正文或完整本地路径。
@@ -0,0 +1,65 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1600" height="1080" viewBox="0 0 1600 1080" role="img" aria-labelledby="title desc">
2
+ <title id="title">WeFlow CLI architecture</title>
3
+ <desc id="desc">Local-first layers from user inputs through CLI, MCP, services and data adapters to local outputs, with optional external services.</desc>
4
+ <defs>
5
+ <style>
6
+ .bg { fill: #f7f8fa; }
7
+ .panel { stroke: #d7dce3; stroke-width: 2; rx: 14; }
8
+ .title { font: 700 27px "Segoe UI", "Microsoft YaHei", sans-serif; fill: #14213d; }
9
+ .label { font: 600 22px "Segoe UI", "Microsoft YaHei", sans-serif; fill: #14213d; }
10
+ .body { font: 18px "Segoe UI", "Microsoft YaHei", sans-serif; fill: #334155; }
11
+ .small { font: 16px "Segoe UI", "Microsoft YaHei", sans-serif; fill: #475569; }
12
+ .tag { font: 700 16px "Segoe UI", "Microsoft YaHei", sans-serif; fill: #ffffff; }
13
+ .arrow { stroke: #64748b; stroke-width: 3; marker-end: url(#arrowhead); }
14
+ </style>
15
+ <marker id="arrowhead" markerWidth="10" markerHeight="8" refX="9" refY="4" orient="auto">
16
+ <path d="M0,0 L10,4 L0,8 Z" fill="#64748b"/>
17
+ </marker>
18
+ </defs>
19
+ <rect class="bg" width="1600" height="1080"/>
20
+ <text class="title" x="80" y="66">WeFlow CLI · 当前技术架构</text>
21
+ <text class="small" x="80" y="96">本地优先:只有用户明确选择的文章抓取、微信读书、Bot 通道或云端 AI 才会联网</text>
22
+
23
+ <rect class="panel" x="80" y="130" width="1440" height="145" fill="#e9eef8"/>
24
+ <rect x="105" y="151" width="112" height="34" rx="17" fill="#3767a8"/><text class="tag" x="130" y="175">入口</text>
25
+ <text class="label" x="105" y="225">终端用户</text><text class="body" x="105" y="255">weflow-cli &lt;command&gt;</text>
26
+ <text class="label" x="460" y="225">MCP 客户端</text><text class="body" x="460" y="255">stdio JSON-RPC</text>
27
+ <text class="label" x="810" y="225">可选 Bot 通道</text><text class="body" x="810" y="255">官方会话与白名单</text>
28
+ <text class="label" x="1190" y="225">维护 Agent</text><text class="body" x="1190" y="255">代码、测试与文档</text>
29
+
30
+ <line class="arrow" x1="800" y1="280" x2="800" y2="320"/>
31
+ <rect class="panel" x="80" y="330" width="1440" height="180" fill="#e7f4f0"/>
32
+ <rect x="105" y="351" width="150" height="34" rx="17" fill="#16866f"/><text class="tag" x="130" y="375">CLI 与服务</text>
33
+ <text class="body" x="105" y="420">初始化与配置 · sessions / contacts / messages</text>
34
+ <text class="body" x="105" y="457">export · evidence · favorites · sns · report · todos</text>
35
+ <text class="body" x="105" y="494">daily / daily-server · vault / wiki / weread · assistant</text>
36
+ <text class="body" x="850" y="420">路径与权限校验</text>
37
+ <text class="body" x="850" y="457">隐私过滤 · 白名单 · 发送确认</text>
38
+ <text class="body" x="850" y="494">日期、来源和 no-ai 开关</text>
39
+
40
+ <line class="arrow" x1="800" y1="515" x2="800" y2="555"/>
41
+ <rect class="panel" x="80" y="565" width="1440" height="180" fill="#fff5df"/>
42
+ <rect x="105" y="586" width="160" height="34" rx="17" fill="#c47b16"/><text class="tag" x="130" y="610">适配与工作流</text>
43
+ <text class="body" x="105" y="655">Node:数据库适配 · 配置加密 · 消息通道 · MCP 工具</text>
44
+ <text class="body" x="105" y="692">Python:NT 数据 · 公众号日报 · HTML 阅读器 · 搜索与报告</text>
45
+ <text class="body" x="105" y="729">媒体导出:按稳定消息身份匹配,无法确认时保留占位符</text>
46
+ <text class="body" x="850" y="655">来源类别优先于文章主题分类</text>
47
+ <text class="body" x="850" y="692">日报无日期时先补齐昨天,再生成今天</text>
48
+ <text class="body" x="850" y="729">Vault promotion 默认不调用 AI</text>
49
+
50
+ <line class="arrow" x1="800" y1="750" x2="800" y2="790"/>
51
+ <rect class="panel" x="80" y="800" width="680" height="190" fill="#edf1f5"/>
52
+ <rect x="105" y="821" width="120" height="34" rx="17" fill="#536579"/><text class="tag" x="130" y="845">本地数据</text>
53
+ <text class="body" x="105" y="885">微信 3.x / 4.x 数据库与媒体缓存</text>
54
+ <text class="body" x="105" y="920">日报、阅读状态、收藏、Vault 与证据包</text>
55
+ <text class="body" x="105" y="955">本机配置、加密密钥与助手记忆</text>
56
+
57
+ <rect class="panel" x="840" y="800" width="680" height="190" fill="#f1eefa"/>
58
+ <rect x="865" y="821" width="150" height="34" rx="17" fill="#7654a8"/><text class="tag" x="890" y="845">按需联网</text>
59
+ <text class="body" x="865" y="885">公众号网页 · 微信读书 API · 官方 Bot</text>
60
+ <text class="body" x="865" y="920">用户配置的云端 AI 端点</text>
61
+ <text class="body" x="865" y="955">默认不自动上传聊天数据库或证据包</text>
62
+
63
+ <rect x="80" y="1015" width="1440" height="40" rx="20" fill="#14213d"/>
64
+ <text class="tag" x="510" y="1042">隐私边界:仅处理本人或明确获授权的数据 · 阅读器默认仅监听 127.0.0.1</text>
65
+ </svg>