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 @@
1
+ {"version":3,"file":"assistantService.d.ts","sourceRoot":"","sources":["../../../src/services/assistantService.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,OAAO,EAAwB,MAAM,aAAa,CAAA;AAyBhE,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,GAAG,CAAoC;IAC/C,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,OAAO,CAAQ;IACvB,+CAA+C;IAC/C,OAAO,CAAC,KAAK,CAAmC;IAChD,2CAA2C;IAC3C,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,SAAS,CAA4B;IAE7C,OAAO,CAAC,YAAY;IAgBpB;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,cAAc;IAMtB,wBAAwB;YACV,OAAO;IA0BrB,iCAAiC;IAC3B,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,UAAU,UAAQ,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IA8BrJ,mCAAmC;IACnC,OAAO,CAAC,iBAAiB;IAWzB,qCAAqC;IAC/B,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiFhF,aAAa;IACP,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAiD1D,IAAI,IAAI,IAAI;IAKZ,SAAS,IAAI,OAAO;IACpB,eAAe,IAAI,MAAM;CAC1B"}
@@ -0,0 +1,284 @@
1
+ /**
2
+ * 第二大脑助手 — 持久化 Agent (主流框架标准架构)。
3
+ *
4
+ * 架构 (参考 LangGraph Agent Loop + Mem0 三层记忆):
5
+ * 微信(iLink) ⇄ 常驻进程
6
+ * ├─ ReAct 循环: LLM 决策 → 本地工具执行 → 观察回填 → 直到产出回答
7
+ * ├─ 三层记忆: L1 工作窗口 / L2 滚动摘要 / L3 长期事实 (本地 JSON)
8
+ * └─ 隐私关卡: 工具结果脱敏后才出境到云端 LLM (本地引擎则完全不出境)
9
+ */
10
+ import { WechatMessageService } from './wechatMessageService.js';
11
+ import { configService } from './configService.js';
12
+ import { AssistantMemory } from './assistantMemory.js';
13
+ import { privacyGate } from './assistantPrivacy.js';
14
+ import { TOOL_DEFS, executeTool } from './assistantTools.js';
15
+ import { appendLog } from './assistantDaemon.js';
16
+ import { buildEvidenceReviewInput } from './evidenceService.js';
17
+ import { evaluateAssistantAccess } from './assistantRouting.js';
18
+ const MAX_TOOL_ROUNDS = 6;
19
+ /** 每日 LLM 处理上限 (护栏: 防 bug 死循环/异常流量烧钱; 0 = 不限制) */
20
+ const DAILY_LIMIT = 100;
21
+ const BASE_PROMPT = `你是"第二大脑", 运行在用户自己的电脑上, 通过微信与用户对话。
22
+ 你可以调用工具查询用户本地微信数据(会话/聊天记录/收藏), 以及读写关于用户的长期记忆。
23
+
24
+ 行为准则:
25
+ - 涉及用户数据的问题, 先调工具查证再回答, 不要编造
26
+ - 用户让你记住某事时, 用 save_memory 工具保存
27
+ - 回复用微信聊天风格, 简洁, 不用 markdown 符号
28
+ - 数据不足时直说需要什么, 不要瞎猜
29
+ - 回复控制在 300 字内, 列表类可放宽`;
30
+ export class AssistantService {
31
+ svc = null;
32
+ memory = new AssistantMemory();
33
+ running = false;
34
+ /** 消息串行队列: 保证 handleMessage 不并发交错 (记忆窗口一致性) */
35
+ queue = Promise.resolve();
36
+ /** 每日用量计数 (内存态, 重启重置 — 配额护栏防烧钱, 无需持久精确) */
37
+ dailyCount = 0;
38
+ dailyDate = new Date().toDateString();
39
+ engineConfig() {
40
+ const engine = String(configService.get('aiEngine') || 'deepseek');
41
+ if (engine === 'ollama' || engine === 'lmstudio') {
42
+ const port = engine === 'lmstudio' ? 1234 : 11434;
43
+ const model = String(configService.get('localModel') || 'llama3');
44
+ return { url: `http://localhost:${port}/v1`, model, key: null, local: true };
45
+ }
46
+ // 自定义 OpenAI 兼容端点 (中转站) 优先
47
+ const baseUrl = String(configService.get('aiBaseUrl') || '').trim().replace(/\/+$/, '');
48
+ if (baseUrl) {
49
+ const model = String(configService.get('aiModel') || 'deepseek-chat');
50
+ return { url: baseUrl, model, key: configService.get('deepseekApiKey'), local: false };
51
+ }
52
+ return { url: 'https://api.deepseek.com/v1', model: 'deepseek-chat', key: configService.get('deepseekApiKey'), local: false };
53
+ }
54
+ /**
55
+ * Direct messages require an explicit sender allowlist. Groups are disabled
56
+ * until the upstream provides an explicit group ID, and then require all
57
+ * three controls: group allowlist, sender allowlist, and an @ mention.
58
+ */
59
+ accessDecision(message) {
60
+ return evaluateAssistantAccess(message, {
61
+ directWhitelist: String(configService.get('assistantWhitelist') || ''),
62
+ groupWhitelist: String(configService.get('assistantGroupWhitelist') || ''),
63
+ requireGroupMention: configService.get('assistantGroupRequireMention') !== 'false',
64
+ });
65
+ }
66
+ dailyQuotaLeft() {
67
+ const today = new Date().toDateString();
68
+ if (today !== this.dailyDate) {
69
+ this.dailyDate = today;
70
+ this.dailyCount = 0;
71
+ }
72
+ return DAILY_LIMIT - this.dailyCount;
73
+ }
74
+ /** 底层 LLM 调用 (含出境审计) */
75
+ async callLLM(messages, tools, maxTokens = 800) {
76
+ const { url, model, key, local } = this.engineConfig();
77
+ if (!key && !local) {
78
+ throw new Error('未配置 LLM (config set deepseekApiKey 或切换 ollama)');
79
+ }
80
+ const body = { model, messages, max_tokens: maxTokens, temperature: 0.4 };
81
+ if (tools?.length) {
82
+ body.tools = tools;
83
+ body.tool_choice = 'auto';
84
+ }
85
+ const res = await fetch(`${url}/chat/completions`, {
86
+ method: 'POST',
87
+ headers: {
88
+ 'Content-Type': 'application/json',
89
+ ...(key ? { Authorization: `Bearer ${key}` } : {}),
90
+ },
91
+ body: JSON.stringify(body),
92
+ signal: AbortSignal.timeout(120_000),
93
+ });
94
+ privacyGate.audit('CLOUD_CALL', JSON.stringify(body).length, local ? 'local' : `${url.split('//')[1].split('/')[0]}`);
95
+ if (!res.ok) {
96
+ const t = await res.text().catch(() => '');
97
+ throw new Error(`LLM ${res.status}: ${t.slice(0, 120)}`);
98
+ }
99
+ return res.json();
100
+ }
101
+ /** 在明确授权后分析本地聊天,输出证据线索而非法律结论。 */
102
+ async reviewEvidence(talker, messages, allowCloud = false) {
103
+ const { local } = this.engineConfig();
104
+ if (!local && !allowCloud) {
105
+ throw new Error('默认禁止将聊天正文发送到云端;请切换本地模型,或明确使用 --allow-cloud');
106
+ }
107
+ const input = buildEvidenceReviewInput(talker, messages, privacyGate.mode(), local);
108
+ const response = await this.callLLM([
109
+ {
110
+ role: 'system',
111
+ content: `你是电子数据整理助手,不是律师。只根据提供的聊天原文进行线索整理,不判断“必然违法”、不判断法院必然采信,也不编造法律条文或事实。
112
+ 请用中文输出以下结构:
113
+ ## 疑似争议线索
114
+ 逐项引用消息ID,区分原文事实和你的待核查推测。
115
+ ## 可能涉及的法律主题
116
+ 只写宽泛主题,例如合同履行、借贷、劳动争议、名誉侵权、隐私或个人信息;不作定性结论。
117
+ ## 还需要核验的材料
118
+ 列出原设备、完整上下文、转账/合同/平台记录、身份归属等缺口。
119
+ ## 保全建议
120
+ 提醒保留原始设备、原始数据、完整对话和导出记录。
121
+ 如果信息不足,明确写“信息不足”,不要补全。${local ? '' : '\n当前不是本地推理:不要复述已被隐私模式屏蔽的聊天正文。'}`,
122
+ },
123
+ { role: 'user', content: input.transcript },
124
+ ], undefined, 1800);
125
+ return {
126
+ text: (response.choices?.[0]?.message?.content || '信息不足,未生成分析。').trim(),
127
+ localInference: local,
128
+ redactions: input.redactions,
129
+ };
130
+ }
131
+ /** 组装系统提示: 基础人格 + L2 摘要 + L3 事实 */
132
+ buildSystemPrompt(userId) {
133
+ const parts = [BASE_PROMPT];
134
+ const summary = this.memory.summary(userId);
135
+ if (summary)
136
+ parts.push(`\n[此前对话摘要]\n${summary}`);
137
+ const facts = this.memory.facts(userId);
138
+ if (facts.length) {
139
+ parts.push(`\n[关于用户的长期记忆]\n${facts.map(f => `· ${f.content}`).join('\n')}`);
140
+ }
141
+ return parts.join('\n');
142
+ }
143
+ /** 单条消息处理: 指令路由 → ReAct 循环 → 记忆更新 */
144
+ async handleMessage(userId, text, kind) {
145
+ if (kind !== 'text')
146
+ return '目前只支持文字消息哦';
147
+ const t = text.trim();
148
+ if (t === '帮助' || t.toLowerCase() === 'help') {
149
+ return ['🧠 第二大脑 Agent', '',
150
+ '直接用自然语言问, 我会自动查本地数据回答:',
151
+ '「我最近都在忙什么?」',
152
+ '「总结我和XX的聊天」',
153
+ '「收藏里有哪些AI文章?」',
154
+ '「记住: 我的项目叫weflow-cli」',
155
+ '', '记忆: 三层 (窗口/摘要/长期事实), 重启不丢',
156
+ '隐私: 数据库不出本机, 出境内容自动脱敏',
157
+ '', '指令: 记忆 | 清空记忆'].join('\n');
158
+ }
159
+ if (t === '清空记忆' || t === '重置') {
160
+ this.memory.reset(userId);
161
+ privacyGate.audit('MEMORY_RESET', 0, userId.slice(0, 8));
162
+ return '✓ 对话记忆已清空, 重新开始';
163
+ }
164
+ if (t === '记忆') {
165
+ const facts = this.memory.facts(userId);
166
+ const s = this.memory.summary(userId);
167
+ const lines = [`工作窗口: ${this.memory.workingWindow(userId).length} 条`];
168
+ lines.push(`滚动摘要: ${s ? `${s.length}字` : '无'}`);
169
+ lines.push(`长期事实: ${facts.length} 条`);
170
+ if (facts.length)
171
+ lines.push(facts.slice(-5).map(f => `· ${f.content}`).join('\n'));
172
+ lines.push(`隐私模式: ${privacyGate.mode()}${privacyGate.isLocalInference() ? ' (本地推理, 不出境)' : ''}`);
173
+ lines.push(`今日用量: ${this.dailyCount}/${DAILY_LIMIT}`);
174
+ return lines.join('\n');
175
+ }
176
+ // === ReAct 主循环 ===
177
+ this.memory.addTurn(userId, 'user', t);
178
+ const messages = [
179
+ { role: 'system', content: this.buildSystemPrompt(userId) },
180
+ ...this.memory.workingWindow(userId).map(turn => ({ role: turn.role, content: turn.content })),
181
+ ];
182
+ let reply = '';
183
+ let toolCalls = 0;
184
+ try {
185
+ for (let round = 0; round < MAX_TOOL_ROUNDS; round++) {
186
+ const data = await this.callLLM(messages, TOOL_DEFS);
187
+ const msg = data.choices?.[0]?.message;
188
+ if (!msg)
189
+ throw new Error('LLM 返回为空');
190
+ if (msg.tool_calls?.length) {
191
+ messages.push({ role: 'assistant', content: msg.content || '', tool_calls: msg.tool_calls });
192
+ for (const tc of msg.tool_calls) {
193
+ toolCalls++;
194
+ let args = {};
195
+ try {
196
+ args = JSON.parse(tc.function?.arguments || '{}');
197
+ }
198
+ catch { /* 参数容错 */ }
199
+ const raw = await executeTool(tc.function?.name || '', args, { userId, memory: this.memory });
200
+ const { safe, redactions } = privacyGate.redact(raw);
201
+ privacyGate.audit(`TOOL:${tc.function?.name}`, raw.length, redactions ? `redacted=${redactions}` : '');
202
+ messages.push({ role: 'tool', tool_call_id: tc.id, content: safe });
203
+ }
204
+ continue;
205
+ }
206
+ reply = (msg.content || '').trim() || '(空回复)';
207
+ break;
208
+ }
209
+ if (!reply)
210
+ reply = '(这轮处理太复杂了, 换个问法试试?)';
211
+ }
212
+ catch (e) {
213
+ reply = `❌ 大脑暂时离线: ${e.message?.slice(0, 100)}\n(本地指令仍可用: 发「帮助」)`;
214
+ }
215
+ // === 记忆更新 (L2 压缩 + L3 提取) ===
216
+ this.memory.addTurn(userId, 'assistant', reply);
217
+ const llm = (msgs, maxTokens) => this.callLLM(msgs, undefined, maxTokens).then((d) => d.choices?.[0]?.message?.content || '');
218
+ try {
219
+ await this.memory.compressIfNeeded(userId, llm);
220
+ }
221
+ catch { /* 压缩失败不阻断 */ }
222
+ try {
223
+ await this.memory.extractFactsIfNeeded(userId, llm);
224
+ }
225
+ catch { /* 提取失败不阻断 */ }
226
+ this.memory.save();
227
+ privacyGate.audit('TURN_DONE', reply.length, `tools=${toolCalls}`);
228
+ return reply;
229
+ }
230
+ /** 启动常驻监听 */
231
+ async start(onLog) {
232
+ const token = configService.get('wechatOcToken');
233
+ if (!token)
234
+ throw new Error('未登录消息通道, 先运行 weflow-cli login-wechat');
235
+ this.svc = new WechatMessageService({ token });
236
+ this.running = true;
237
+ const { local } = this.engineConfig();
238
+ onLog?.(`助手已启动 (bot: ${configService.get('wechatOcAccountId')}, ` +
239
+ `引擎: ${local ? '本地' : '云端'}, 记忆用户数: ${this.memory.userCount()})`);
240
+ this.svc.onMessage((msg) => {
241
+ // 串行入队: 并发到达的消息按顺序处理, 记忆窗口不交错
242
+ this.queue = this.queue.then(async () => {
243
+ if (!this.running)
244
+ return;
245
+ const access = this.accessDecision(msg);
246
+ const sessionId = msg.conversationId;
247
+ if (!access.allowed) {
248
+ privacyGate.audit(`DENY_${access.reason.toUpperCase().replace(/-/g, '_')}`, 0, sessionId.slice(0, 12));
249
+ onLog?.(` → 拒绝: ${sessionId.slice(0, 12)}… ${access.reason} (未回复, 不耗 LLM)`);
250
+ return;
251
+ }
252
+ if (msg.messageKind !== 'text') {
253
+ onLog?.(` → 忽略非文本消息 (${msg.messageKind})`);
254
+ return;
255
+ }
256
+ if (this.dailyQuotaLeft() <= 0) {
257
+ privacyGate.audit('DENY_DAILY_LIMIT', this.dailyCount);
258
+ appendLog(`[配额] 今日 ${DAILY_LIMIT} 条上限已用尽, 拒绝: ${msg.messageStr.slice(0, 30)}`);
259
+ await this.svc.sendText(sessionId, '今日额度已用完, 明天再来吧').catch(() => { });
260
+ return;
261
+ }
262
+ onLog?.(`[${new Date().toLocaleTimeString('zh-CN')}] ${sessionId.slice(0, 12)}…: ${msg.messageStr.slice(0, 40)}`);
263
+ try {
264
+ const reply = await this.handleMessage(sessionId, msg.messageStr, msg.messageKind);
265
+ this.dailyCount++;
266
+ const ok = await this.svc.sendText(sessionId, reply);
267
+ onLog?.(` → ${ok ? `已回复 (${reply.length}字, 今日 ${this.dailyCount}/${DAILY_LIMIT})` : '回复失败'}`);
268
+ }
269
+ catch (e) {
270
+ onLog?.(` → 处理异常: ${e.message}`);
271
+ appendLog(`[${new Date().toLocaleTimeString('zh-CN')}] 异常: ${e.message}`);
272
+ }
273
+ }).catch((e) => appendLog(`队列异常: ${e.message}`));
274
+ });
275
+ await this.svc.startPolling();
276
+ }
277
+ stop() {
278
+ this.running = false;
279
+ this.svc?.stop();
280
+ }
281
+ isRunning() { return this.running; }
282
+ memoryUserCount() { return this.memory.userCount(); }
283
+ }
284
+ //# sourceMappingURL=assistantService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistantService.js","sourceRoot":"","sources":["../../../src/services/assistantService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { AssistantMemory } from './assistantMemory.js';
2
+ export interface ToolDef {
3
+ type: 'function';
4
+ function: {
5
+ name: string;
6
+ description: string;
7
+ parameters: Record<string, unknown>;
8
+ };
9
+ }
10
+ export interface ToolContext {
11
+ userId: string;
12
+ memory: AssistantMemory;
13
+ }
14
+ interface TalkerCandidate {
15
+ username: string;
16
+ displayName?: string | null;
17
+ }
18
+ export declare function boundedToolInteger(value: unknown, fallback: number, maximum: number, field?: string): number;
19
+ export declare function resolveUniqueTalker(name: string, sessions: TalkerCandidate[]): string;
20
+ export declare const TOOL_DEFS: ToolDef[];
21
+ export declare const MCP_READ_ONLY_TOOL_DEFS: ToolDef[];
22
+ export declare function executeTool(name: string, args: Record<string, any>, ctx: ToolContext): Promise<string>;
23
+ export {};
24
+ //# sourceMappingURL=assistantTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistantTools.d.ts","sourceRoot":"","sources":["../../../src/services/assistantTools.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAc3D,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,UAAU,CAAA;IAChB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAA;QACZ,WAAW,EAAE,MAAM,CAAA;QACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KACpC,CAAA;CACF;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,eAAe,CAAA;CACxB;AAqFD,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAID,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,SAAU,GAAG,MAAM,CAO7G;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,MAAM,CAoBrF;AAQD,eAAO,MAAM,SAAS,EAAE,OAAO,EAsK9B,CAAA;AAED,eAAO,MAAM,uBAAuB,WAAiE,CAAA;AAErG,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CA0N5G"}