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
@@ -18,8 +18,52 @@ export declare class ChatService {
18
18
  private connect3x;
19
19
  listSessions(keyword?: string, limit?: number): Promise<ChatSession[]>;
20
20
  getMessages(talker: string, limit?: number, offset?: number): Promise<Message[]>;
21
+ getMessagesInRange(talker: string, limit?: number, from?: number, to?: number): Promise<Message[]>;
21
22
  listContacts(keyword?: string, limit?: number): Promise<Contact[]>;
22
23
  disconnect(): void;
24
+ /** 当前连接是否支持朋友圈查询 */
25
+ isSnsSupported(): boolean;
26
+ getSnsTimeline(opts?: {
27
+ limit?: number;
28
+ offset?: number;
29
+ usernames?: string[];
30
+ keyword?: string;
31
+ startTime?: number;
32
+ endTime?: number;
33
+ }): Promise<{
34
+ success: boolean;
35
+ timeline?: any[];
36
+ error?: string;
37
+ }>;
38
+ getSnsUsernames(): Promise<{
39
+ success: boolean;
40
+ usernames?: string[];
41
+ error?: string;
42
+ }>;
43
+ getSnsExportStats(myWxid?: string): Promise<{
44
+ success: boolean;
45
+ data?: {
46
+ totalPosts: number;
47
+ totalFriends: number;
48
+ myPosts: number | null;
49
+ };
50
+ error?: string;
51
+ }>;
52
+ /** 当前连接是否支持收藏查询 */
53
+ isFavSupported(): boolean;
54
+ /** 解析收藏密钥: 优先 favKey, 其次从 favPassphrase + 库 salt 派生 */
55
+ private resolveFavKey;
56
+ getFavorites(opts?: {
57
+ limit?: number;
58
+ offset?: number;
59
+ keyword?: string;
60
+ favType?: number;
61
+ }): Promise<{
62
+ success: boolean;
63
+ favorites?: any[];
64
+ total?: number;
65
+ error?: string;
66
+ }>;
23
67
  }
24
68
  export declare const chatService: ChatService;
25
69
  //# sourceMappingURL=chatService.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chatService.d.ts","sourceRoot":"","sources":["../../../src/services/chatService.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAe,MAAM,aAAa,CAAA;AAM7E,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,aAAa,CAA2B;IAChD,yCAAyC;IACzC,OAAO,CAAC,cAAc,CAAQ;IAC9B,wCAAwC;IACxC,OAAO,CAAC,MAAM,CAAsB;IAEpC;;OAEG;IACH,OAAO,CAAC,aAAa;IAgBf,OAAO,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;YAehD,SAAS;YAiGT,SAAS;IAkBjB,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAsClE,WAAW,CACf,MAAM,EAAE,MAAM,EACd,KAAK,SAAI,EACT,MAAM,SAAI,GACT,OAAO,CAAC,OAAO,EAAE,CAAC;IA0Bf,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAuCrE,UAAU,IAAI,IAAI;CAgBnB;AAED,eAAO,MAAM,WAAW,aAAoB,CAAA"}
1
+ {"version":3,"file":"chatService.d.ts","sourceRoot":"","sources":["../../../src/services/chatService.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAe,MAAM,aAAa,CAAA;AAQ7E,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,aAAa,CAA2B;IAChD,yCAAyC;IACzC,OAAO,CAAC,cAAc,CAAQ;IAC9B,wCAAwC;IACxC,OAAO,CAAC,MAAM,CAAsB;IAEpC;;OAEG;IACH,OAAO,CAAC,aAAa;IAgBf,OAAO,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;YAehD,SAAS;YAmGT,SAAS;IAkBjB,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAsClE,WAAW,CACf,MAAM,EAAE,MAAM,EACd,KAAK,SAAI,EACT,MAAM,SAAI,GACT,OAAO,CAAC,OAAO,EAAE,CAAC;IA0Bf,kBAAkB,CACtB,MAAM,EAAE,MAAM,EACd,KAAK,SAAI,EACT,IAAI,CAAC,EAAE,MAAM,EACb,EAAE,CAAC,EAAE,MAAM,GACV,OAAO,CAAC,OAAO,EAAE,CAAC;IAWf,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAuCrE,UAAU,IAAI,IAAI;IAoBlB,oBAAoB;IACpB,cAAc,IAAI,OAAO;IAcnB,cAAc,CAAC,IAAI,GAAE;QACzB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;QACpB,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,OAAO,CAAC,EAAE,MAAM,CAAA;KACZ,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAsBlE,eAAe,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAatF,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAepK,mBAAmB;IACnB,cAAc,IAAI,OAAO;IAQzB,uDAAuD;IACvD,OAAO,CAAC,aAAa;IAaf,YAAY,CAAC,IAAI,GAAE;QACvB,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;KAChE,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAS1F;AAED,eAAO,MAAM,WAAW,aAAoB,CAAA"}
@@ -1,10 +1,11 @@
1
- import { join, dirname } from 'path';
2
- import { fileURLToPath } from 'url';
1
+ import { join } from 'path';
3
2
  import { existsSync } from 'fs';
4
3
  import { WcdbCore } from '../core/wcdbCore.js';
5
4
  import { SqlcipherCore } from '../core/sqlcipherCore.js';
6
5
  import { NtCore } from '../core/ntCore.js';
7
6
  import { configService } from './configService.js';
7
+ import { collectMessagesInRange } from './messageQuery.js';
8
+ import { resolvePackageRoot } from '../utils/packageRoot.js';
8
9
  // 创建单例
9
10
  const wcdbCore = new WcdbCore();
10
11
  const sqlcipherCore = new SqlcipherCore();
@@ -51,7 +52,9 @@ export class ChatService {
51
52
  const dbPath = configService.get('dbPath');
52
53
  const wxid = configService.get('wxid');
53
54
  const decryptKey = configService.get('decryptKey');
54
- if (!dbPath || !decryptKey) {
55
+ const ntConfigured = !!(configService.get('ntDbPath') && configService.get('ntKey'));
56
+ // NT 配置完整时无需 decryptKey(非 Windows 平台密钥自动提取不可用,仅有 NT 密钥)
57
+ if (!dbPath || (!decryptKey && !ntConfigured)) {
55
58
  return { success: false, error: '4.x 配置不完整,请运行 weflow-cli init' };
56
59
  }
57
60
  // 方案 1: 使用已解密的 MSG0_decrypted.db (纯 SQLite)
@@ -101,7 +104,7 @@ export class ChatService {
101
104
  }
102
105
  // 方案 4: 尝试 WCDB API 连接 (需要 db_storage/session.db 结构,仅 3.x 兼容)
103
106
  // Use package root instead of cwd for global install support
104
- const pkgRoot = join(dirname(fileURLToPath(import.meta.url)), '..', '..', '..');
107
+ const pkgRoot = resolvePackageRoot(import.meta.url);
105
108
  const resourcesPath = join(pkgRoot, 'resources');
106
109
  wcdbCore.setPaths(resourcesPath, '');
107
110
  const ok = await wcdbCore.open(dbPath, decryptKey, wxid || '');
@@ -220,6 +223,12 @@ export class ChatService {
220
223
  }
221
224
  return [];
222
225
  }
226
+ async getMessagesInRange(talker, limit = 0, from, to) {
227
+ if (from === undefined && to === undefined) {
228
+ return this.getMessages(talker, limit);
229
+ }
230
+ return collectMessagesInRange((pageLimit, offset) => this.getMessages(talker, pageLimit, offset), limit, { from, to });
231
+ }
223
232
  async listContacts(keyword, limit = 200) {
224
233
  const conn = await this.connect();
225
234
  if (!conn.success)
@@ -286,6 +295,98 @@ export class ChatService {
286
295
  this.activeVersion = null;
287
296
  this.useRawSqlite4x = false;
288
297
  }
298
+ // ====== SNS (朋友圈本地缓存查询) ======
299
+ // 4.x 支持两条路径: WCDB API 或 NT (Python sqlcipher3)
300
+ /** 当前连接是否支持朋友圈查询 */
301
+ isSnsSupported() {
302
+ if (!this.connected || this.activeVersion !== '4.x')
303
+ return false;
304
+ // 路径 1: WCDB API (传统 4.x)
305
+ if (!this.useRawSqlite4x && !this.ntCore)
306
+ return true;
307
+ // 路径 2: NT + sns config 已配置
308
+ if (this.ntCore) {
309
+ const snsPath = configService.get('snsDbPath');
310
+ const snsKey = configService.get('snsKey');
311
+ const snsSalt = configService.get('snsSalt');
312
+ return !!(snsPath && snsKey && snsSalt);
313
+ }
314
+ return false;
315
+ }
316
+ async getSnsTimeline(opts = {}) {
317
+ if (!this.isSnsSupported()) {
318
+ return { success: false, error: '当前数据通道不支持朋友圈查询 (需 4.x WCDB 或 NT+sns 配置)' };
319
+ }
320
+ // NT 路径
321
+ if (this.ntCore) {
322
+ const snsPath = configService.get('snsDbPath');
323
+ const snsKey = configService.get('snsKey');
324
+ const snsSalt = configService.get('snsSalt');
325
+ return this.ntCore.getSnsTimeline(snsPath, snsKey, snsSalt, opts);
326
+ }
327
+ // WCDB 路径
328
+ return wcdbCore.getSnsTimeline(opts.limit ?? 20, opts.offset ?? 0, opts.usernames, opts.keyword, opts.startTime, opts.endTime);
329
+ }
330
+ async getSnsUsernames() {
331
+ if (!this.isSnsSupported()) {
332
+ return { success: false, error: '当前数据通道不支持朋友圈查询 (需 4.x WCDB 或 NT+sns 配置)' };
333
+ }
334
+ if (this.ntCore) {
335
+ const snsPath = configService.get('snsDbPath');
336
+ const snsKey = configService.get('snsKey');
337
+ const snsSalt = configService.get('snsSalt');
338
+ return this.ntCore.getSnsUsernames(snsPath, snsKey, snsSalt);
339
+ }
340
+ return wcdbCore.getSnsUsernames();
341
+ }
342
+ async getSnsExportStats(myWxid) {
343
+ if (!this.isSnsSupported()) {
344
+ return { success: false, error: '当前数据通道不支持朋友圈查询 (需 4.x WCDB 或 NT+sns 配置)' };
345
+ }
346
+ if (this.ntCore) {
347
+ const snsPath = configService.get('snsDbPath');
348
+ const snsKey = configService.get('snsKey');
349
+ const snsSalt = configService.get('snsSalt');
350
+ return this.ntCore.getSnsExportStats(snsPath, snsKey, snsSalt, myWxid);
351
+ }
352
+ return wcdbCore.getSnsExportStats(myWxid);
353
+ }
354
+ // ====== 收藏 (favorite.db, 仅 NT 路径) ======
355
+ /** 当前连接是否支持收藏查询 */
356
+ isFavSupported() {
357
+ if (!this.connected || this.activeVersion !== '4.x' || !this.ntCore)
358
+ return false;
359
+ const favPath = configService.get('favDbPath');
360
+ const favKey = configService.get('favKey');
361
+ const favPass = configService.get('favPassphrase');
362
+ return !!(favPath && (favKey || favPass));
363
+ }
364
+ /** 解析收藏密钥: 优先 favKey, 其次从 favPassphrase + 库 salt 派生 */
365
+ resolveFavKey() {
366
+ const favKey = configService.get('favKey');
367
+ if (favKey)
368
+ return favKey;
369
+ const favPass = configService.get('favPassphrase');
370
+ const favPath = configService.get('favDbPath');
371
+ if (!favPass || !favPath)
372
+ return null;
373
+ const salt = NtCore.readDbSalt(favPath);
374
+ if (!salt)
375
+ return null;
376
+ const derived = NtCore.deriveRawKey(favPass, salt);
377
+ configService.set('favKey', derived);
378
+ return derived;
379
+ }
380
+ async getFavorites(opts = {}) {
381
+ if (!this.isFavSupported()) {
382
+ return { success: false, error: '当前数据通道不支持收藏查询 (需 4.x NT 连接 + fav 配置)' };
383
+ }
384
+ const favPath = configService.get('favDbPath');
385
+ const favKey = this.resolveFavKey();
386
+ if (!favKey)
387
+ return { success: false, error: '收藏密钥解析失败 (favKey/favPassphrase 配置无效)' };
388
+ return this.ntCore.getFavorites(favPath, favKey, opts);
389
+ }
289
390
  }
290
391
  export const chatService = new ChatService();
291
392
  //# sourceMappingURL=chatService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chatService.js","sourceRoot":"","sources":["../../../src/services/chatService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chatService.js","sourceRoot":"","sources":["../../../src/services/chatService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAE5D,OAAO;AACP,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAA;AAC/B,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAA;AAEzC,MAAM,OAAO,WAAW;IACd,SAAS,GAAG,KAAK,CAAA;IACjB,aAAa,GAAuB,IAAI,CAAA;IAChD,yCAAyC;IACjC,cAAc,GAAG,KAAK,CAAA;IAC9B,wCAAwC;IAChC,MAAM,GAAkB,IAAI,CAAA;IAEpC;;OAEG;IACK,aAAa;QACnB,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;QAChD,IAAI,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,KAAK;YAAE,OAAO,OAAsB,CAAA;QAEzE,iBAAiB;QACjB,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC5C,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QAC7C,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;QAE/C,IAAI,QAAQ,IAAI,KAAK;YAAE,OAAO,KAAK,CAAA;QACnC,IAAI,QAAQ,IAAI,KAAK;YAAE,OAAO,KAAK,CAAA;QAEnC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;QAE5C,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QACpC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAA;QAC/D,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,SAAS,EAAE,CAAA;QACzB,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,SAAS,EAAE,CAAA;QACzB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC1C,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACtC,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QAClD,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;QAEpF,wDAAwD;QACxD,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAA;QACnE,CAAC;QAED,4CAA4C;QAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAA;QACjF,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,CAAA;YACnE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;gBACrB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAA;gBAC1B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;gBAC1B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;YAC1B,CAAC;QACH,CAAC;QAED,oCAAoC;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAA;QACpE,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,UAAU,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,CAAA;YAC3E,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;gBACrB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAA;gBAC1B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;gBAC1B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;YAC1B,CAAC;QACH,CAAC;QAED,sEAAsE;QACtE,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACxC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC1C,IAAI,QAAQ,IAAI,KAAK,IAAI,MAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxD,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;YACjD,qBAAqB;YACrB,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,EAAE,CAAC;gBACtC,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,EAAE,CAAA;gBACxC,IAAI,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;oBAClD,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAA;oBAC7C,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,CAAA;gBACjD,CAAC;YACH,CAAC;YACD,iBAAiB;YACjB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAA;YAClD,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;gBACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;gBACrB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAA;gBAC1B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;YAC1B,CAAC;YACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QACpB,CAAC;QAED,8DAA8D;QAC9D,6DAA6D;QAC7D,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACnD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;QAChD,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;QAEpC,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,CAAA;QAC9D,IAAI,EAAE,EAAE,CAAC;YACP,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;YACrB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAA;YAC1B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAA;YAC3B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;QAC1B,CAAC;QAED,iBAAiB;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;QACvD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE;gBACL,wBAAwB;gBACxB,EAAE;gBACF,qBAAqB;gBACrB,6CAA6C,QAAQ,YAAY,WAAW,GAAG;gBAC/E,EAAE;gBACF,8BAA8B;gBAC9B,eAAe;gBACf,yCAAyC;gBACzC,EAAE;gBACF,yBAAyB;gBACzB,4BAA4B;gBAC5B,4CAA4C;gBAC5C,0BAA0B;gBAC1B,qDAAqD;gBACrD,EAAE;gBACF,sBAAsB;gBACtB,iBAAiB,WAAW,EAAE;aAC/B,CAAC,IAAI,CAAC,IAAI,CAAC;SACb,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAC5C,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACtC,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;QAEpD,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAC3B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAA;QACnE,CAAC;QAED,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,CAAA;QACnE,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;YACrB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAA;YAC1B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;QAC1B,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,aAAa,EAAE,CAAA;IAC7D,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAgB,EAAE,KAAK,GAAG,EAAE;QAC7C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;QACjC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAA;QAE5B,IAAI,QAAQ,GAAkB,EAAE,CAAA;QAEhC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;YACrD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAAE,OAAO,EAAE,CAAA;YAClD,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;QAC5B,CAAC;aAAM,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;YACxC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,CAAA;gBAChD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ;oBAAE,OAAO,EAAE,CAAA;gBAClD,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;YAC5B,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAA;gBAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ;oBAAE,OAAO,EAAE,CAAA;gBAClD,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;YAC5B,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,CAAA;YAChD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAAE,OAAO,EAAE,CAAA;YAClD,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;QAC5B,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;YAChC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC7B,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7C,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChD,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAC7C,CAAA;QACH,CAAC;QAED,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IACjC,CAAC;IAED,KAAK,CAAC,WAAW,CACf,MAAc,EACd,KAAK,GAAG,CAAC,EACT,MAAM,GAAG,CAAC;QAEV,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;QACjC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAA;QAE5B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;YACnE,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAAE,OAAO,EAAE,CAAA;YAClD,OAAO,MAAM,CAAC,QAAQ,CAAA;QACxB,CAAC;aAAM,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;YACxC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;gBACrE,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ;oBAAE,OAAO,EAAE,CAAA;gBAClD,OAAO,MAAM,CAAC,QAAQ,CAAA;YACxB,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;YAChE,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAAE,OAAO,EAAE,CAAA;YAClD,OAAO,MAAM,CAAC,QAAQ,CAAA;QACxB,CAAC;aAAM,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;YACrE,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAAE,OAAO,EAAE,CAAA;YAClD,OAAO,MAAM,CAAC,QAAQ,CAAA;QACxB,CAAC;QAED,OAAO,EAAE,CAAA;IACX,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,MAAc,EACd,KAAK,GAAG,CAAC,EACT,IAAa,EACb,EAAW;QAEX,IAAI,IAAI,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QACxC,CAAC;QACD,OAAO,sBAAsB,CAC3B,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAClE,KAAK,EACL,EAAE,IAAI,EAAE,EAAE,EAAE,CACb,CAAA;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAgB,EAAE,KAAK,GAAG,GAAG;QAC9C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;QACjC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAA;QAE5B,IAAI,QAAQ,GAAc,EAAE,CAAA;QAE5B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;YAC5D,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAAE,OAAO,EAAE,CAAA;YAClD,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;QAC5B,CAAC;aAAM,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;YACxC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,CAAA;gBAChD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ;oBAAE,OAAO,EAAE,CAAA;gBAClD,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;YAC5B,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,kBAAkB,EAAE,CAAA;gBAClD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ;oBAAE,OAAO,EAAE,CAAA;gBAClD,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;YAC5B,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,CAAA;YAChD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAAE,OAAO,EAAE,CAAA;YAClD,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;QAC5B,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;YAChC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC7B,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7C,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChD,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3C,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAC9C,CAAA;QACH,CAAC;QAED,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IACjC,CAAC;IAED,UAAU;QACR,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QACpB,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,IAAI,CAAC;oBAAC,aAAa,CAAC,KAAK,EAAE,CAAA;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,CAAC;YACzC,CAAC;YACD,IAAI,CAAC;gBAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,CAAC;QACpC,CAAC;aAAM,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;YACxC,IAAI,CAAC;gBAAC,aAAa,CAAC,KAAK,EAAE,CAAA;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;QACtB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;QACzB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAA;IAC7B,CAAC;IAED,gCAAgC;IAChC,gDAAgD;IAEhD,oBAAoB;IACpB,cAAc;QACZ,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK;YAAE,OAAO,KAAK,CAAA;QACjE,0BAA0B;QAC1B,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAA;QACrD,4BAA4B;QAC5B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;YAC9C,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YAC1C,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YAC5C,OAAO,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,IAAI,OAAO,CAAC,CAAA;QACzC,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAOjB,EAAE;QACJ,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC3B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,yCAAyC,EAAE,CAAA;QAC7E,CAAC;QACD,QAAQ;QACR,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;YAC9C,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YAC1C,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YAC5C,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;QACnE,CAAC;QACD,UAAU;QACV,OAAO,QAAQ,CAAC,cAAc,CAC5B,IAAI,CAAC,KAAK,IAAI,EAAE,EAChB,IAAI,CAAC,MAAM,IAAI,CAAC,EAChB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,OAAO,CACb,CAAA;IACH,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC3B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,yCAAyC,EAAE,CAAA;QAC7E,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;YAC9C,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YAC1C,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YAC5C,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;QAC9D,CAAC;QACD,OAAO,QAAQ,CAAC,eAAe,EAAE,CAAA;IACnC,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,MAAe;QACrC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC3B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,yCAAyC,EAAE,CAAA;QAC7E,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;YAC9C,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YAC1C,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YAC5C,OAAO,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;QACxE,CAAC;QACD,OAAO,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAC3C,CAAC;IAED,0CAA0C;IAE1C,mBAAmB;IACnB,cAAc;QACZ,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAA;QACjF,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAC9C,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC1C,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;QAClD,OAAO,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAA;IAC3C,CAAC;IAED,uDAAuD;IAC/C,aAAa;QACnB,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC1C,IAAI,MAAM;YAAE,OAAO,MAAM,CAAA;QACzB,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;QAClD,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAC9C,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAA;QACrC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;QACvC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAA;QACtB,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QAClD,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QACpC,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAEf,EAAE;QACJ,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC3B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,sCAAsC,EAAE,CAAA;QAC1E,CAAC;QACD,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QACnC,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,sCAAsC,EAAE,CAAA;QACrF,OAAO,IAAI,CAAC,MAAO,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;IACzD,CAAC;CACF;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAA"}
@@ -16,14 +16,54 @@ interface CliConfig {
16
16
  wechatOcAccountId: string;
17
17
  wechatOcBaseUrl: string;
18
18
  wechatOcSyncBuf: string;
19
+ /** 持久化的 context_token: wxid -> token (加密 JSON 字符串) */
20
+ wechatOcContextTokens: string;
19
21
  whitelist: string[];
22
+ blacklist: string[];
23
+ /** 白名单带昵称: {wxid, displayName, addedAt}[] */
24
+ whitelistEntries: ListEntry[];
25
+ /** 黑名单带昵称: {wxid, displayName, addedAt, reason?}[] */
26
+ blacklistEntries: ListEntry[];
20
27
  vaultRepo: string;
21
28
  aiEngine: string;
22
29
  wereadApiKey: string;
23
30
  deepseekApiKey: string;
31
+ snsDbPath: string;
32
+ snsKey: string;
33
+ snsSalt: string;
34
+ favDbPath: string;
35
+ favKey: string;
36
+ emoticonSeed: string;
37
+ favPassphrase: string;
38
+ /** 隐私模式: open | balanced | strict,默认 strict */
39
+ assistantPrivacy: string;
40
+ /** 本地推理引擎模型名 (ollama/lmstudio) */
41
+ localModel: string;
42
+ /** 自定义 AI 端点 (OpenAI 兼容中转站); 设置后云端引擎走此地址 */
43
+ aiBaseUrl: string;
44
+ /** 自定义端点使用的模型名 */
45
+ aiModel: string;
46
+ /** 助手白名单 (@im.wechat ID, 逗号/空格分隔); 空 = 拒绝所有人 */
47
+ assistantWhitelist: string;
48
+ /** 官方通道明确提供群 ID 时才使用;空 = 拒绝所有群 */
49
+ assistantGroupWhitelist: string;
50
+ /** 群内是否必须明确 @ 机器人;默认开启 */
51
+ assistantGroupRequireMention: string;
52
+ dailySources: string;
53
+ /** 公众号类别映射,JSON 对象:公众号名称或 gh_ ID -> 类别 */
54
+ dailySourceCategories: string;
55
+ dailyAiEnabled: string;
56
+ }
57
+ export interface ListEntry {
58
+ wxid: string;
59
+ displayName?: string;
60
+ addedAt?: number;
61
+ reason?: string;
24
62
  }
25
63
  export declare class ConfigService {
26
64
  private config;
65
+ /** 本进程修改过、待回写的字段 (多进程并发写保护) */
66
+ private dirty;
27
67
  constructor();
28
68
  private load;
29
69
  private save;
@@ -32,7 +72,22 @@ export declare class ConfigService {
32
72
  getAll(): ConfigData;
33
73
  getWhitelist(): string[];
34
74
  setWhitelist(list: string[]): void;
75
+ getWhitelistEntries(): ListEntry[];
76
+ setWhitelistEntries(entries: ListEntry[]): void;
77
+ getBlacklist(): string[];
78
+ setBlacklist(list: string[]): void;
79
+ getBlacklistEntries(): ListEntry[];
80
+ setBlacklistEntries(entries: ListEntry[]): void;
81
+ /** 读取持久化的 context_token: wxid -> token */
82
+ getContextTokens(): Record<string, string>;
83
+ /** 持久化 context_token 集合 (加密存储) */
84
+ setContextTokens(tokens: Record<string, string>): void;
85
+ /** 增量更新单个 wxid 的 context_token */
86
+ upsertContextToken(wxid: string, token: string): void;
35
87
  isConfigured(): boolean;
88
+ clearDatabaseKeys(): void;
89
+ maskDatabaseKeysForTesting(): void;
90
+ private clearDatabaseKeysInMemory;
36
91
  clear(): void;
37
92
  private lockEncrypt;
38
93
  private lockDecrypt;
@@ -1 +1 @@
1
- {"version":3,"file":"configService.d.ts","sourceRoot":"","sources":["../../../src/services/configService.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAI7C,UAAU,SAAS;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IAEnB,aAAa,EAAE,MAAM,CAAA;IACrB,iBAAiB,EAAE,MAAM,CAAA;IACzB,eAAe,EAAE,MAAM,CAAA;IACvB,eAAe,EAAE,MAAM,CAAA;IAEvB,SAAS,EAAE,MAAM,EAAE,CAAA;IAEnB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAEhB,YAAY,EAAE,MAAM,CAAA;IAEpB,cAAc,EAAE,MAAM,CAAA;CACvB;AAWD,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAA8W;;IAM5X,OAAO,CAAC,IAAI;IAkCZ,OAAO,CAAC,IAAI;IAWZ,GAAG,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IAWpD,GAAG,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI;IAWjE,MAAM,IAAI,UAAU;IAiBpB,YAAY,IAAI,MAAM,EAAE;IAIxB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAKlC,YAAY,IAAI,OAAO;IAOvB,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,YAAY;CAIrB;AAED,eAAO,MAAM,aAAa,eAAsB,CAAA"}
1
+ {"version":3,"file":"configService.d.ts","sourceRoot":"","sources":["../../../src/services/configService.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { join } from 'path';
2
- import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
2
+ import { existsSync, readFileSync, writeFileSync, mkdirSync, renameSync } from 'fs';
3
3
  import { homedir, hostname, userInfo } from 'os';
4
4
  import crypto from 'crypto';
5
5
  import { expandHomePath } from '../utils/pathUtils.js';
@@ -7,12 +7,15 @@ const LOCK_PREFIX = 'lock:';
7
7
  /** 需要加密存储的字段 */
8
8
  const ENCRYPTED_KEYS = new Set([
9
9
  'decryptKey', 'decryptKey3x', 'ntKey', 'contactKey',
10
- 'wechatOcToken', 'wereadApiKey', 'deepseekApiKey',
10
+ 'wechatOcToken', 'wereadApiKey', 'deepseekApiKey', 'snsKey',
11
+ 'favKey', 'favPassphrase',
11
12
  ]);
12
13
  const CONFIG_DIR = join(homedir(), '.weflow-cli');
13
14
  const CONFIG_FILE = join(CONFIG_DIR, 'config.json');
14
15
  export class ConfigService {
15
- config = { dbPath: '', wxid: '', decryptKey: '', decryptKey3x: '', dataVersion: '', dbPath3x: '', ntDbPath: '', ntKey: '', ntSalt: '', contactDbPath: '', contactKey: '', contactSalt: '', wechatOcToken: '', wechatOcAccountId: '', wechatOcBaseUrl: '', wechatOcSyncBuf: '', whitelist: [], vaultRepo: '', aiEngine: 'deepseek', wereadApiKey: '', deepseekApiKey: '' };
16
+ config = { dbPath: '', wxid: '', decryptKey: '', decryptKey3x: '', dataVersion: '', dbPath3x: '', ntDbPath: '', ntKey: '', ntSalt: '', contactDbPath: '', contactKey: '', contactSalt: '', wechatOcToken: '', wechatOcAccountId: '', wechatOcBaseUrl: '', wechatOcSyncBuf: '', wechatOcContextTokens: '', whitelist: [], blacklist: [], whitelistEntries: [], blacklistEntries: [], vaultRepo: '', aiEngine: 'deepseek', wereadApiKey: '', deepseekApiKey: '', snsDbPath: '', snsKey: '', snsSalt: '', favDbPath: '', favKey: '', favPassphrase: '', emoticonSeed: '', assistantPrivacy: 'strict', localModel: '', aiBaseUrl: '', aiModel: '', assistantWhitelist: '', assistantGroupWhitelist: '', assistantGroupRequireMention: 'true', dailySources: '', dailySourceCategories: '', dailyAiEnabled: 'true' };
17
+ /** 本进程修改过、待回写的字段 (多进程并发写保护) */
18
+ dirty = new Set();
16
19
  constructor() {
17
20
  this.load();
18
21
  }
@@ -20,6 +23,15 @@ export class ConfigService {
20
23
  try {
21
24
  if (existsSync(CONFIG_FILE)) {
22
25
  const data = JSON.parse(readFileSync(CONFIG_FILE, 'utf8'));
26
+ const whitelist = Array.isArray(data.whitelist) ? data.whitelist : [];
27
+ const blacklist = Array.isArray(data.blacklist) ? data.blacklist : [];
28
+ // entries 优先; 缺失时从旧 string[] 迁移
29
+ const whitelistEntries = Array.isArray(data.whitelistEntries)
30
+ ? data.whitelistEntries
31
+ : whitelist.map((wxid) => ({ wxid }));
32
+ const blacklistEntries = Array.isArray(data.blacklistEntries)
33
+ ? data.blacklistEntries
34
+ : blacklist.map((wxid) => ({ wxid }));
23
35
  this.config = {
24
36
  dbPath: data.dbPath || '',
25
37
  wxid: data.wxid || '',
@@ -37,11 +49,32 @@ export class ConfigService {
37
49
  wechatOcAccountId: data.wechatOcAccountId || '',
38
50
  wechatOcBaseUrl: data.wechatOcBaseUrl || '',
39
51
  wechatOcSyncBuf: data.wechatOcSyncBuf || '',
40
- whitelist: Array.isArray(data.whitelist) ? data.whitelist : [],
52
+ wechatOcContextTokens: data.wechatOcContextTokens || '',
53
+ whitelist,
54
+ blacklist,
55
+ whitelistEntries,
56
+ blacklistEntries,
41
57
  vaultRepo: data.vaultRepo || '',
42
58
  aiEngine: data.aiEngine || 'deepseek',
43
59
  wereadApiKey: data.wereadApiKey || '',
44
60
  deepseekApiKey: data.deepseekApiKey || '',
61
+ snsDbPath: data.snsDbPath || '',
62
+ snsKey: data.snsKey || '',
63
+ snsSalt: data.snsSalt || '',
64
+ favDbPath: data.favDbPath || '',
65
+ favKey: data.favKey || '',
66
+ favPassphrase: data.favPassphrase || '',
67
+ emoticonSeed: data.emoticonSeed || '',
68
+ assistantPrivacy: data.assistantPrivacy || 'strict',
69
+ localModel: data.localModel || '',
70
+ aiBaseUrl: data.aiBaseUrl || '',
71
+ aiModel: data.aiModel || '',
72
+ assistantWhitelist: data.assistantWhitelist || '',
73
+ assistantGroupWhitelist: data.assistantGroupWhitelist || '',
74
+ assistantGroupRequireMention: data.assistantGroupRequireMention === 'false' ? 'false' : 'true',
75
+ dailySources: data.dailySources || '',
76
+ dailySourceCategories: data.dailySourceCategories || '',
77
+ dailyAiEnabled: data.dailyAiEnabled === 'false' ? 'false' : 'true',
45
78
  };
46
79
  }
47
80
  }
@@ -55,7 +88,26 @@ export class ConfigService {
55
88
  if (!existsSync(CONFIG_DIR)) {
56
89
  mkdirSync(CONFIG_DIR, { recursive: true });
57
90
  }
58
- writeFileSync(CONFIG_FILE, JSON.stringify(this.config, null, 2), 'utf8');
91
+ // 多进程安全 (守护进程与 CLI 并发): 只回写本进程修改过的字段,
92
+ // 其余字段以磁盘最新值保留, 避免旧内存快照覆盖他人写入 (幽灵回写)。
93
+ let merged = { ...this.config };
94
+ try {
95
+ if (existsSync(CONFIG_FILE) && this.dirty.size > 0) {
96
+ const onDisk = JSON.parse(readFileSync(CONFIG_FILE, 'utf8'));
97
+ merged = { ...onDisk, ...this.config };
98
+ for (const key of Object.keys(onDisk)) {
99
+ if (this.dirty.has(key))
100
+ continue;
101
+ merged[key] = onDisk[key];
102
+ }
103
+ }
104
+ }
105
+ catch { /* 磁盘副本不可读时退回整份写入 */ }
106
+ // 原子写入: 先写临时文件再改名, 防止进程中途被杀导致配置损坏
107
+ const tmpFile = CONFIG_FILE + '.tmp';
108
+ writeFileSync(tmpFile, JSON.stringify(merged, null, 2), 'utf8');
109
+ renameSync(tmpFile, CONFIG_FILE);
110
+ this.dirty.clear();
59
111
  }
60
112
  catch (e) {
61
113
  console.error('保存配置失败:', e);
@@ -81,6 +133,7 @@ export class ConfigService {
81
133
  else {
82
134
  this.config[key] = value;
83
135
  }
136
+ this.dirty.add(key);
84
137
  this.save();
85
138
  }
86
139
  getAll() {
@@ -97,6 +150,9 @@ export class ConfigService {
97
150
  contactDbPath: this.config.contactDbPath,
98
151
  contactKey: this.get('contactKey'),
99
152
  contactSalt: this.config.contactSalt,
153
+ snsDbPath: this.config.snsDbPath,
154
+ snsKey: this.get('snsKey'),
155
+ snsSalt: this.config.snsSalt,
100
156
  };
101
157
  }
102
158
  getWhitelist() {
@@ -104,16 +160,101 @@ export class ConfigService {
104
160
  }
105
161
  setWhitelist(list) {
106
162
  this.config.whitelist = list;
163
+ this.dirty.add('whitelist');
164
+ this.save();
165
+ }
166
+ getWhitelistEntries() {
167
+ return this.config.whitelistEntries || [];
168
+ }
169
+ setWhitelistEntries(entries) {
170
+ this.config.whitelistEntries = entries;
171
+ // 同步 string[] 视图, 供旧代码使用
172
+ this.config.whitelist = entries.map(e => e.wxid);
173
+ this.dirty.add('whitelistEntries');
174
+ this.dirty.add('whitelist');
175
+ this.save();
176
+ }
177
+ getBlacklist() {
178
+ return this.config.blacklist || [];
179
+ }
180
+ setBlacklist(list) {
181
+ this.config.blacklist = list;
182
+ this.dirty.add('blacklist');
183
+ this.save();
184
+ }
185
+ getBlacklistEntries() {
186
+ return this.config.blacklistEntries || [];
187
+ }
188
+ setBlacklistEntries(entries) {
189
+ this.config.blacklistEntries = entries;
190
+ this.config.blacklist = entries.map(e => e.wxid);
191
+ this.dirty.add('blacklistEntries');
192
+ this.dirty.add('blacklist');
193
+ this.save();
194
+ }
195
+ /** 读取持久化的 context_token: wxid -> token */
196
+ getContextTokens() {
197
+ const raw = this.config.wechatOcContextTokens || '';
198
+ if (!raw)
199
+ return {};
200
+ const json = raw.startsWith(LOCK_PREFIX) ? this.lockDecrypt(raw) : raw;
201
+ if (!json)
202
+ return {};
203
+ try {
204
+ const obj = JSON.parse(json);
205
+ return (obj && typeof obj === 'object') ? obj : {};
206
+ }
207
+ catch {
208
+ return {};
209
+ }
210
+ }
211
+ /** 持久化 context_token 集合 (加密存储) */
212
+ setContextTokens(tokens) {
213
+ const json = JSON.stringify(tokens || {});
214
+ this.config.wechatOcContextTokens = json ? this.lockEncrypt(json) : '';
215
+ this.dirty.add('wechatOcContextTokens');
107
216
  this.save();
108
217
  }
218
+ /** 增量更新单个 wxid 的 context_token */
219
+ upsertContextToken(wxid, token) {
220
+ if (!wxid || !token)
221
+ return;
222
+ const tokens = this.getContextTokens();
223
+ if (tokens[wxid] === token)
224
+ return;
225
+ tokens[wxid] = token;
226
+ this.setContextTokens(tokens);
227
+ }
109
228
  isConfigured() {
110
229
  const has4x = !!(this.config.dbPath && this.config.decryptKey);
111
230
  const has3x = !!(this.config.dbPath3x && this.config.decryptKey3x);
112
231
  const hasNt = !!(this.config.ntDbPath && this.config.ntKey && this.config.ntSalt);
113
232
  return has4x || has3x || hasNt;
114
233
  }
234
+ clearDatabaseKeys() {
235
+ this.clearDatabaseKeysInMemory(true);
236
+ }
237
+ maskDatabaseKeysForTesting() {
238
+ this.clearDatabaseKeysInMemory(false);
239
+ }
240
+ clearDatabaseKeysInMemory(persist) {
241
+ const keyFields = [
242
+ 'decryptKey', 'decryptKey3x', 'ntKey', 'ntSalt',
243
+ 'contactKey', 'contactSalt', 'snsKey', 'snsSalt',
244
+ 'favKey', 'favPassphrase',
245
+ ];
246
+ for (const key of keyFields) {
247
+ this.config[key] = '';
248
+ if (persist)
249
+ this.dirty.add(key);
250
+ }
251
+ if (persist)
252
+ this.save();
253
+ }
115
254
  clear() {
116
- this.config = { dbPath: '', wxid: '', decryptKey: '', decryptKey3x: '', dataVersion: '', dbPath3x: '', ntDbPath: '', ntKey: '', ntSalt: '', contactDbPath: '', contactKey: '', contactSalt: '', wechatOcToken: '', wechatOcAccountId: '', wechatOcBaseUrl: '', wechatOcSyncBuf: '', whitelist: [], vaultRepo: '', aiEngine: 'deepseek', wereadApiKey: '', deepseekApiKey: '' };
255
+ this.config = { dbPath: '', wxid: '', decryptKey: '', decryptKey3x: '', dataVersion: '', dbPath3x: '', ntDbPath: '', ntKey: '', ntSalt: '', contactDbPath: '', contactKey: '', contactSalt: '', wechatOcToken: '', wechatOcAccountId: '', wechatOcBaseUrl: '', wechatOcSyncBuf: '', wechatOcContextTokens: '', whitelist: [], blacklist: [], whitelistEntries: [], blacklistEntries: [], vaultRepo: '', aiEngine: 'deepseek', wereadApiKey: '', deepseekApiKey: '', snsDbPath: '', snsKey: '', snsSalt: '', favDbPath: '', favKey: '', favPassphrase: '', emoticonSeed: '', assistantPrivacy: 'strict', localModel: '', aiBaseUrl: '', aiModel: '', assistantWhitelist: '', assistantGroupWhitelist: '', assistantGroupRequireMention: 'true', dailySources: '', dailySourceCategories: '', dailyAiEnabled: 'true' };
256
+ // clear 意图是全量重置: 所有字段标记为脏, 覆盖磁盘上的全部旧值
257
+ this.dirty = new Set(Object.keys(this.config));
117
258
  this.save();
118
259
  }
119
260
  lockEncrypt(plaintext) {
@@ -1 +1 @@
1
- {"version":3,"file":"configService.js","sourceRoot":"","sources":["../../../src/services/configService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"configService.js","sourceRoot":"","sources":["../../../src/services/configService.ts"],"names":[],"mappings":"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"}