weflow-cli 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +149 -0
  3. package/bin/weflow-cli-electron.cjs +59 -0
  4. package/bin/weflow-cli.ts +2311 -0
  5. package/cli.cjs +3 -0
  6. package/dist/bin/weflow-cli.d.ts +3 -0
  7. package/dist/bin/weflow-cli.d.ts.map +1 -0
  8. package/dist/bin/weflow-cli.js +2270 -0
  9. package/dist/bin/weflow-cli.js.map +1 -0
  10. package/dist/mcp-server/index.d.ts +3 -0
  11. package/dist/mcp-server/index.d.ts.map +1 -0
  12. package/dist/mcp-server/index.js +690 -0
  13. package/dist/mcp-server/index.js.map +1 -0
  14. package/dist/src/core/dbPathService.d.ts +40 -0
  15. package/dist/src/core/dbPathService.d.ts.map +1 -0
  16. package/dist/src/core/dbPathService.js +324 -0
  17. package/dist/src/core/dbPathService.js.map +1 -0
  18. package/dist/src/core/keyService.d.ts +59 -0
  19. package/dist/src/core/keyService.d.ts.map +1 -0
  20. package/dist/src/core/keyService.js +368 -0
  21. package/dist/src/core/keyService.js.map +1 -0
  22. package/dist/src/core/ntCore.d.ts +62 -0
  23. package/dist/src/core/ntCore.d.ts.map +1 -0
  24. package/dist/src/core/ntCore.js +191 -0
  25. package/dist/src/core/ntCore.js.map +1 -0
  26. package/dist/src/core/sqlcipherCore.d.ts +119 -0
  27. package/dist/src/core/sqlcipherCore.d.ts.map +1 -0
  28. package/dist/src/core/sqlcipherCore.js +693 -0
  29. package/dist/src/core/sqlcipherCore.js.map +1 -0
  30. package/dist/src/core/wcdbCore.d.ts +738 -0
  31. package/dist/src/core/wcdbCore.d.ts.map +1 -0
  32. package/dist/src/core/wcdbCore.js +4545 -0
  33. package/dist/src/core/wcdbCore.js.map +1 -0
  34. package/dist/src/core/wechatClient.d.ts +23 -0
  35. package/dist/src/core/wechatClient.d.ts.map +1 -0
  36. package/dist/src/core/wechatClient.js +166 -0
  37. package/dist/src/core/wechatClient.js.map +1 -0
  38. package/dist/src/services/chatService.d.ts +25 -0
  39. package/dist/src/services/chatService.d.ts.map +1 -0
  40. package/dist/src/services/chatService.js +291 -0
  41. package/dist/src/services/chatService.js.map +1 -0
  42. package/dist/src/services/configService.d.ts +43 -0
  43. package/dist/src/services/configService.d.ts.map +1 -0
  44. package/dist/src/services/configService.js +156 -0
  45. package/dist/src/services/configService.js.map +1 -0
  46. package/dist/src/services/exportService.d.ts +30 -0
  47. package/dist/src/services/exportService.d.ts.map +1 -0
  48. package/dist/src/services/exportService.js +273 -0
  49. package/dist/src/services/exportService.js.map +1 -0
  50. package/dist/src/services/wechat-formatter.d.ts +69 -0
  51. package/dist/src/services/wechat-formatter.d.ts.map +1 -0
  52. package/dist/src/services/wechat-formatter.js +248 -0
  53. package/dist/src/services/wechat-formatter.js.map +1 -0
  54. package/dist/src/services/wechatMessageService.d.ts +28 -0
  55. package/dist/src/services/wechatMessageService.d.ts.map +1 -0
  56. package/dist/src/services/wechatMessageService.js +341 -0
  57. package/dist/src/services/wechatMessageService.js.map +1 -0
  58. package/dist/src/services/wereadService.d.ts +206 -0
  59. package/dist/src/services/wereadService.d.ts.map +1 -0
  60. package/dist/src/services/wereadService.js +145 -0
  61. package/dist/src/services/wereadService.js.map +1 -0
  62. package/dist/src/services/whitelistService.d.ts +20 -0
  63. package/dist/src/services/whitelistService.d.ts.map +1 -0
  64. package/dist/src/services/whitelistService.js +60 -0
  65. package/dist/src/services/whitelistService.js.map +1 -0
  66. package/dist/src/types.d.ts +140 -0
  67. package/dist/src/types.d.ts.map +1 -0
  68. package/dist/src/types.js +2 -0
  69. package/dist/src/types.js.map +1 -0
  70. package/dist/src/utils/errors.d.ts +25 -0
  71. package/dist/src/utils/errors.d.ts.map +1 -0
  72. package/dist/src/utils/errors.js +43 -0
  73. package/dist/src/utils/errors.js.map +1 -0
  74. package/dist/src/utils/pathUtils.d.ts +5 -0
  75. package/dist/src/utils/pathUtils.d.ts.map +1 -0
  76. package/dist/src/utils/pathUtils.js +16 -0
  77. package/dist/src/utils/pathUtils.js.map +1 -0
  78. package/dist/src/utils/pythonRunner.d.ts +27 -0
  79. package/dist/src/utils/pythonRunner.d.ts.map +1 -0
  80. package/dist/src/utils/pythonRunner.js +62 -0
  81. package/dist/src/utils/pythonRunner.js.map +1 -0
  82. package/dist/src/utils/talkerUtils.d.ts +14 -0
  83. package/dist/src/utils/talkerUtils.d.ts.map +1 -0
  84. package/dist/src/utils/talkerUtils.js +73 -0
  85. package/dist/src/utils/talkerUtils.js.map +1 -0
  86. package/mcp-server/index.ts +757 -0
  87. package/package.json +72 -0
  88. package/resources/key/win32/x64/wx_key.dll +0 -0
  89. package/resources/wcdb/win32/x64/SDL2.dll +0 -0
  90. package/resources/wcdb/win32/x64/WCDB.dll +0 -0
  91. package/resources/wcdb/win32/x64/msvcp140.dll +0 -0
  92. package/resources/wcdb/win32/x64/msvcp140_1.dll +0 -0
  93. package/resources/wcdb/win32/x64/vcruntime140.dll +0 -0
  94. package/resources/wcdb/win32/x64/vcruntime140_1.dll +0 -0
  95. package/resources/wcdb/win32/x64/wcdb_api.dll +0 -0
  96. package/scripts/_batch_link_sources.py +73 -0
  97. package/scripts/_utils.py +531 -0
  98. package/scripts/annual_report.py +796 -0
  99. package/scripts/auto_tag.py +128 -0
  100. package/scripts/biz_daily.py +896 -0
  101. package/scripts/chat_report.py +397 -0
  102. package/scripts/chat_stats.py +702 -0
  103. package/scripts/classify_daily.py +411 -0
  104. package/scripts/compile_wiki.py +258 -0
  105. package/scripts/create_reading_notes.py +370 -0
  106. package/scripts/enrich_backlinks.py +163 -0
  107. package/scripts/export_chat_html.py +766 -0
  108. package/scripts/extract_3x_key.py +86 -0
  109. package/scripts/extract_todos.py +404 -0
  110. package/scripts/fav_server.py +392 -0
  111. package/scripts/fix_topics.py +111 -0
  112. package/scripts/generate_ai_report.py +367 -0
  113. package/scripts/generate_html.py +1372 -0
  114. package/scripts/generate_review.py +170 -0
  115. package/scripts/mcp_bridge.py +398 -0
  116. package/scripts/nt_decrypt.py +562 -0
  117. package/scripts/pipeline.py +145 -0
  118. package/scripts/promote_all.py +310 -0
  119. package/scripts/promote_ideas.py +297 -0
  120. package/scripts/rag_chat.py +191 -0
  121. package/scripts/scan_decrypt_4x.py +329 -0
  122. package/scripts/semantic_search.py +431 -0
  123. package/scripts/sync_fav.py +146 -0
  124. package/scripts/sync_weread.py +192 -0
  125. package/scripts/vault_rag.py +139 -0
  126. package/scripts/vault_search.py +141 -0
  127. package/src/core/dbPathService.ts +348 -0
  128. package/src/core/keyService.ts +409 -0
  129. package/src/core/ntCore.ts +224 -0
  130. package/src/core/sqlcipherCore.ts +764 -0
  131. package/src/core/wcdbCore.ts +4568 -0
  132. package/src/core/wechatClient.ts +204 -0
  133. package/src/lz4.d.ts +10 -0
  134. package/src/services/chatService.ts +296 -0
  135. package/src/services/configService.ts +197 -0
  136. package/src/services/exportService.ts +305 -0
  137. package/src/services/wechat-formatter.ts +348 -0
  138. package/src/services/wechatMessageService.ts +383 -0
  139. package/src/services/wereadService.ts +308 -0
  140. package/src/services/whitelistService.ts +72 -0
  141. package/src/types.ts +141 -0
  142. package/src/utils/errors.ts +42 -0
  143. package/src/utils/pathUtils.ts +16 -0
  144. package/src/utils/pythonRunner.ts +81 -0
  145. package/src/utils/talkerUtils.ts +84 -0
@@ -0,0 +1,28 @@
1
+ import type { WechatOCConfig, WechatLoginSession, WechatInboundMessage } from '../types.js';
2
+ export declare class WechatMessageService {
3
+ private client;
4
+ private config;
5
+ private loginSession;
6
+ private shutdownFlag;
7
+ private contextTokens;
8
+ private syncBuf;
9
+ private messageCallbacks;
10
+ constructor(config?: WechatOCConfig);
11
+ startLogin(): Promise<{
12
+ qrcodeUrl: string;
13
+ qrcodeContent: string;
14
+ }>;
15
+ pollQrStatus(): Promise<WechatLoginSession>;
16
+ waitForLogin(pollIntervalMs?: number): Promise<WechatLoginSession>;
17
+ startPolling(): Promise<void>;
18
+ stop(): Promise<void>;
19
+ sendText(userId: string, text: string): Promise<boolean>;
20
+ sendMedia(userId: string, filePath: string, mediaType: 'image' | 'video' | 'file'): Promise<boolean>;
21
+ sendImage(userId: string, imagePath: string): Promise<boolean>;
22
+ sendFile(userId: string, filePath: string, _fileName?: string): Promise<boolean>;
23
+ onMessage(callback: (msg: WechatInboundMessage) => void): void;
24
+ isLoggedIn(): boolean;
25
+ getAccountId(): string | null;
26
+ private parseInboundMessage;
27
+ }
28
+ //# sourceMappingURL=wechatMessageService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wechatMessageService.d.ts","sourceRoot":"","sources":["../../../src/services/wechatMessageService.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,oBAAoB,EAA0B,MAAM,aAAa,CAAA;AAUnH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,gBAAgB,CAAiD;gBAE7D,MAAM,GAAE,cAAmB;IAajC,UAAU,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IAmBnE,YAAY,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAkC3C,YAAY,CAAC,cAAc,SAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAkChE,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAkD7B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAMrB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAyBxD,SAAS,CACb,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GACpC,OAAO,CAAC,OAAO,CAAC;IAwFb,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI9D,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMtF,SAAS,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,oBAAoB,KAAK,IAAI,GAAG,IAAI;IAM9D,UAAU,IAAI,OAAO;IAIrB,YAAY,IAAI,MAAM,GAAG,IAAI;IAM7B,OAAO,CAAC,mBAAmB;CAuD5B"}
@@ -0,0 +1,341 @@
1
+ /**
2
+ * 微信消息收发服务 — 通过 ilink API 桥接登录、收消息、发消息。
3
+ *
4
+ * 协议参考: AstrBot weixin_oc_adapter.py
5
+ */
6
+ import crypto from 'crypto';
7
+ import path from 'path';
8
+ import { WechatClient } from '../core/wechatClient.js';
9
+ import { configService } from './configService.js';
10
+ function sleep(ms) {
11
+ return new Promise(resolve => setTimeout(resolve, ms));
12
+ }
13
+ function uuidHex() {
14
+ return crypto.randomUUID().replace(/-/g, '');
15
+ }
16
+ export class WechatMessageService {
17
+ client;
18
+ config;
19
+ loginSession = null;
20
+ shutdownFlag = false;
21
+ contextTokens = new Map();
22
+ syncBuf;
23
+ messageCallbacks = [];
24
+ constructor(config = {}) {
25
+ this.config = config;
26
+ this.syncBuf = config.syncBuf || '';
27
+ this.client = new WechatClient({
28
+ baseUrl: config.baseUrl,
29
+ cdnBaseUrl: config.cdnBaseUrl,
30
+ apiTimeoutMs: config.apiTimeoutMs,
31
+ token: config.token,
32
+ });
33
+ }
34
+ // ====== Login ======
35
+ async startLogin() {
36
+ const data = await this.client.requestJson('GET', 'ilink/bot/get_bot_qrcode', {
37
+ params: { bot_type: this.config.botType || '3' },
38
+ });
39
+ const qrcode = data.qrcode;
40
+ const qrcodeImgContent = data.qrcode_img_content;
41
+ this.loginSession = {
42
+ sessionKey: uuidHex(),
43
+ qrcode,
44
+ qrcodeImgContent,
45
+ startedAt: Date.now(),
46
+ status: 'wait',
47
+ };
48
+ return { qrcodeUrl: qrcode, qrcodeContent: qrcodeImgContent };
49
+ }
50
+ async pollQrStatus() {
51
+ if (!this.loginSession) {
52
+ throw new Error('未开始登录流程,请先调用 startLogin()');
53
+ }
54
+ const data = await this.client.requestJson('GET', 'ilink/bot/get_qrcode_status', {
55
+ params: { qrcode: this.loginSession.qrcode },
56
+ extraHeaders: { 'iLink-App-ClientVersion': '1' },
57
+ });
58
+ const status = data.status;
59
+ this.loginSession.status = status;
60
+ if (status === 'confirmed') {
61
+ this.loginSession.botToken = data.bot_token;
62
+ this.loginSession.accountId = data.ilink_bot_id;
63
+ this.loginSession.baseUrl = data.baseurl;
64
+ this.loginSession.userId = data.ilink_user_id;
65
+ // Persist token
66
+ if (this.loginSession.botToken) {
67
+ this.client.token = this.loginSession.botToken;
68
+ configService.set('wechatOcToken', this.loginSession.botToken);
69
+ }
70
+ if (this.loginSession.accountId) {
71
+ configService.set('wechatOcAccountId', this.loginSession.accountId);
72
+ }
73
+ }
74
+ else if (status === 'expired') {
75
+ // qrcode expired — caller should retry startLogin()
76
+ }
77
+ return this.loginSession;
78
+ }
79
+ async waitForLogin(pollIntervalMs = 2000) {
80
+ let expiredCount = 0;
81
+ while (true) {
82
+ try {
83
+ const session = await this.pollQrStatus();
84
+ if (session.status === 'confirmed') {
85
+ return session;
86
+ }
87
+ if (session.status === 'expired') {
88
+ expiredCount++;
89
+ if (expiredCount >= 3) {
90
+ session.error = '二维码过期次数过多,请重新运行登录命令';
91
+ return session;
92
+ }
93
+ await this.startLogin();
94
+ console.log('二维码已过期,已获取新二维码,请重新扫码');
95
+ }
96
+ }
97
+ catch (e) {
98
+ // Timeout or network error — retry after interval
99
+ if (e.message?.includes('timeout')) {
100
+ // Expected: QR status poll times out, keep retrying
101
+ }
102
+ else {
103
+ console.error(`轮询异常: ${e.message}`);
104
+ }
105
+ }
106
+ await sleep(pollIntervalMs);
107
+ }
108
+ }
109
+ // ====== Message Polling ======
110
+ async startPolling() {
111
+ while (!this.shutdownFlag) {
112
+ try {
113
+ const data = await this.client.requestJson('POST', 'ilink/bot/getupdates', {
114
+ payload: {
115
+ base_info: { channel_version: 'astrbot' },
116
+ get_updates_buf: this.syncBuf,
117
+ },
118
+ tokenRequired: true,
119
+ timeoutMs: 40_000, // Long-poll: server will hold until message arrives
120
+ });
121
+ // ret/errcode may be absent on empty response (normal for long-poll timeout)
122
+ if (data.ret != null && data.ret !== 0 || data.errcode != null && data.errcode !== 0) {
123
+ console.error(`getupdates error: ret=${data.ret} errcode=${data.errcode} errmsg=${data.errmsg || 'unknown'}`);
124
+ if (data.errcode === -1 || data.errcode === 401) {
125
+ console.error('Token may have expired, please login again');
126
+ }
127
+ await sleep(5000);
128
+ continue;
129
+ }
130
+ if (data.get_updates_buf) {
131
+ this.syncBuf = data.get_updates_buf;
132
+ configService.set('wechatOcSyncBuf', this.syncBuf);
133
+ }
134
+ const msgs = data.msgs || [];
135
+ for (const msg of msgs) {
136
+ if (this.shutdownFlag)
137
+ return;
138
+ const inbound = this.parseInboundMessage(msg);
139
+ if (inbound) {
140
+ for (const cb of this.messageCallbacks) {
141
+ try {
142
+ cb(inbound);
143
+ }
144
+ catch { }
145
+ }
146
+ }
147
+ }
148
+ }
149
+ catch (e) {
150
+ if (this.shutdownFlag)
151
+ return;
152
+ // Long-poll timeout is normal — server holds connection until message arrives
153
+ if (e.name === 'AbortError' || e.message?.includes('timeout')) {
154
+ // Restart poll immediately
155
+ continue;
156
+ }
157
+ console.error(`Polling error: ${e.message}`);
158
+ await sleep(5000);
159
+ }
160
+ }
161
+ }
162
+ async stop() {
163
+ this.shutdownFlag = true;
164
+ }
165
+ // ====== Send ======
166
+ async sendText(userId, text) {
167
+ if (!this.client.token)
168
+ return false;
169
+ const contextToken = this.contextTokens.get(userId);
170
+ if (!contextToken)
171
+ return false;
172
+ const result = await this.client.requestJson('POST', 'ilink/bot/sendmessage', {
173
+ payload: {
174
+ base_info: { channel_version: 'astrbot' },
175
+ msg: {
176
+ from_user_id: '',
177
+ to_user_id: userId,
178
+ client_id: uuidHex(),
179
+ message_type: 2,
180
+ message_state: 2,
181
+ context_token: contextToken,
182
+ item_list: [{ type: 1, text_item: { text } }],
183
+ },
184
+ },
185
+ tokenRequired: true,
186
+ });
187
+ return result.ret === 0 && result.errcode === 0;
188
+ }
189
+ async sendMedia(userId, filePath, mediaType) {
190
+ if (!this.client.token)
191
+ return false;
192
+ const contextToken = this.contextTokens.get(userId);
193
+ if (!contextToken)
194
+ return false;
195
+ const fs = await import('fs/promises');
196
+ const fileBuffer = await fs.readFile(filePath);
197
+ const fileName = path.basename(filePath);
198
+ const rawMD5 = crypto.createHash('md5').update(fileBuffer).digest('hex');
199
+ const rawSize = fileBuffer.length;
200
+ const fileKey = uuidHex();
201
+ const aesKeyHex = crypto.randomBytes(16).toString('hex');
202
+ const cipherSize = WechatClient.aesPaddedSize(rawSize);
203
+ const typeMap = {
204
+ image: { uploadMediaType: 1, itemType: 2 },
205
+ video: { uploadMediaType: 2, itemType: 5 },
206
+ file: { uploadMediaType: 3, itemType: 4 },
207
+ };
208
+ const { uploadMediaType, itemType } = typeMap[mediaType];
209
+ // Get upload URL
210
+ const uploadResult = await this.client.requestJson('POST', 'ilink/bot/getuploadurl', {
211
+ payload: {
212
+ filekey: fileKey,
213
+ media_type: uploadMediaType,
214
+ to_user_id: userId,
215
+ rawsize: rawSize,
216
+ rawfilemd5: rawMD5,
217
+ filesize: cipherSize,
218
+ aeskey: aesKeyHex,
219
+ no_need_thumb: true,
220
+ base_info: { channel_version: 'astrbot' },
221
+ },
222
+ tokenRequired: true,
223
+ });
224
+ if (uploadResult.ret !== 0 || uploadResult.errcode !== 0) {
225
+ console.error(`getuploadurl error: ${uploadResult.errmsg}`);
226
+ return false;
227
+ }
228
+ // Upload to CDN
229
+ const encryptedParam = await this.client.uploadToCdn(uploadResult.upload_full_url, uploadResult.upload_param, fileKey, aesKeyHex, fileBuffer);
230
+ // Build media item and send
231
+ const mediaPayload = {
232
+ encrypt_query_param: encryptedParam,
233
+ aes_key: Buffer.from(aesKeyHex, 'hex').toString('base64'),
234
+ encrypt_type: 1,
235
+ };
236
+ let itemList;
237
+ if (mediaType === 'image') {
238
+ itemList = [{ type: 2, image_item: { media: mediaPayload, mid_size: rawSize, aeskey: aesKeyHex } }];
239
+ }
240
+ else if (mediaType === 'file') {
241
+ itemList = [{ type: 4, file_item: { media: mediaPayload, file_name: fileName, len: rawSize } }];
242
+ }
243
+ else {
244
+ itemList = [{ type: 5, video_item: { media: mediaPayload, video_size: rawSize } }];
245
+ }
246
+ const result = await this.client.requestJson('POST', 'ilink/bot/sendmessage', {
247
+ payload: {
248
+ base_info: { channel_version: 'astrbot' },
249
+ msg: {
250
+ from_user_id: '',
251
+ to_user_id: userId,
252
+ client_id: uuidHex(),
253
+ message_type: 2,
254
+ message_state: 2,
255
+ context_token: contextToken,
256
+ item_list: itemList,
257
+ },
258
+ },
259
+ tokenRequired: true,
260
+ });
261
+ return result.ret === 0 && result.errcode === 0;
262
+ }
263
+ async sendImage(userId, imagePath) {
264
+ return this.sendMedia(userId, imagePath, 'image');
265
+ }
266
+ async sendFile(userId, filePath, _fileName) {
267
+ return this.sendMedia(userId, filePath, 'file');
268
+ }
269
+ // ====== Callbacks ======
270
+ onMessage(callback) {
271
+ this.messageCallbacks.push(callback);
272
+ }
273
+ // ====== Status ======
274
+ isLoggedIn() {
275
+ return !!(this.client.token || this.config.token);
276
+ }
277
+ getAccountId() {
278
+ return this.config.accountId || null;
279
+ }
280
+ // ====== Private ======
281
+ parseInboundMessage(msg) {
282
+ const fromUserId = msg.from_user_id || '';
283
+ if (!fromUserId)
284
+ return null;
285
+ // Store context token for future replies
286
+ if (msg.context_token) {
287
+ this.contextTokens.set(fromUserId, msg.context_token);
288
+ }
289
+ const components = [];
290
+ const itemList = msg.item_list || [];
291
+ for (const item of itemList) {
292
+ const itemType = item.type;
293
+ if (itemType === 1 && item.text_item) {
294
+ components.push({ type: 'plain', text: item.text_item.text || '' });
295
+ }
296
+ else if (itemType === 2 && item.image_item) {
297
+ components.push({ type: 'image', filePath: '' }); // image download deferred
298
+ }
299
+ else if (itemType === 3 && item.voice_item) {
300
+ components.push({ type: 'record', filePath: '' });
301
+ }
302
+ else if (itemType === 4 && item.file_item) {
303
+ components.push({ type: 'file', name: item.file_item.file_name || '', filePath: '' });
304
+ }
305
+ else if (itemType === 5 && item.video_item) {
306
+ components.push({ type: 'video', filePath: '' });
307
+ }
308
+ }
309
+ // Determine message kind
310
+ let messageKind = 'unknown';
311
+ if (itemList.length === 1) {
312
+ const t = itemList[0].type;
313
+ if (t === 1)
314
+ messageKind = 'text';
315
+ else if (t === 2)
316
+ messageKind = 'image';
317
+ else if (t === 3)
318
+ messageKind = 'voice';
319
+ else if (t === 4)
320
+ messageKind = 'file';
321
+ else if (t === 5)
322
+ messageKind = 'video';
323
+ }
324
+ const textComponents = components.filter(c => c.type === 'plain');
325
+ const messageStr = textComponents.map(c => c.text).join('');
326
+ return {
327
+ messageId: msg.client_id || uuidHex(),
328
+ fromUserId,
329
+ senderNickname: msg.from_user_id || '',
330
+ timestamp: Math.floor(Date.now() / 1000),
331
+ timestampMs: Date.now(),
332
+ components,
333
+ messageStr,
334
+ messageKind,
335
+ rawMessage: msg,
336
+ isReply: !!(msg.ref_msg),
337
+ quotedText: msg.ref_msg?.text || undefined,
338
+ };
339
+ }
340
+ }
341
+ //# sourceMappingURL=wechatMessageService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wechatMessageService.js","sourceRoot":"","sources":["../../../src/services/wechatMessageService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,206 @@
1
+ /**
2
+ * 微信读书 Agent API Gateway 封装
3
+ *
4
+ * 接口文档: ~/.claude/skills/weread-skills/
5
+ * Gateway: https://i.weread.qq.com/api/agent/gateway
6
+ */
7
+ export interface WereadResult<T = any> {
8
+ ok: boolean;
9
+ data?: T;
10
+ error?: string;
11
+ }
12
+ export interface ShelfBook {
13
+ bookId: string;
14
+ title: string;
15
+ author: string;
16
+ cover: string;
17
+ category: string;
18
+ readUpdateTime: number;
19
+ finishReading: number;
20
+ updateTime: number;
21
+ secret: number;
22
+ isTop: boolean;
23
+ payType: number;
24
+ }
25
+ export interface ShelfData {
26
+ books: ShelfBook[];
27
+ albums: any[];
28
+ mp: any;
29
+ archive: {
30
+ name: string;
31
+ bookIds: string[];
32
+ albumIds: string[];
33
+ }[];
34
+ bookCount: number;
35
+ }
36
+ export interface ReadDetail {
37
+ baseTime: number;
38
+ readTimes: Record<string, number>;
39
+ readDays: number;
40
+ totalReadTime: number;
41
+ dayAverageReadTime: number;
42
+ compare?: number;
43
+ readLongest: {
44
+ book?: any;
45
+ albumInfo?: any;
46
+ readTime: number;
47
+ tags?: string[];
48
+ }[];
49
+ readStat: {
50
+ stat: string;
51
+ counts: string;
52
+ scheme?: string;
53
+ }[];
54
+ preferCategory: {
55
+ categoryId: number;
56
+ categoryTitle: string;
57
+ readingTime: number;
58
+ readingCount: number;
59
+ val: number;
60
+ }[];
61
+ preferCategoryWord?: string;
62
+ preferTime: number[];
63
+ preferTimeWord?: string;
64
+ }
65
+ export interface NotebookItem {
66
+ bookId: string;
67
+ title: string;
68
+ author: string;
69
+ cover: string;
70
+ highlightCount: number;
71
+ noteCount: number;
72
+ bookmarkCount: number;
73
+ updateTime: number;
74
+ }
75
+ export interface NoteDetail {
76
+ bookId: string;
77
+ chapterUid: number;
78
+ chapterTitle: string;
79
+ markText: string;
80
+ content: string;
81
+ range: string;
82
+ createTime: number;
83
+ type: number;
84
+ }
85
+ export interface SearchResult {
86
+ bookId: string;
87
+ title: string;
88
+ author: string;
89
+ cover: string;
90
+ rating: number;
91
+ ratingCount: number;
92
+ category: string;
93
+ wordCount: string;
94
+ intro: string;
95
+ }
96
+ export interface BookInfo {
97
+ bookId: string;
98
+ title: string;
99
+ author: string;
100
+ cover: string;
101
+ rating: number;
102
+ ratingCount: number;
103
+ category: string;
104
+ wordCount: string;
105
+ intro: string;
106
+ publisher: string;
107
+ isbn: string;
108
+ totalWords: string;
109
+ format: string;
110
+ }
111
+ export interface ChapterInfo {
112
+ bookId: string;
113
+ title: string;
114
+ chapters: {
115
+ chapterUid: number;
116
+ title: string;
117
+ level: number;
118
+ wordCount: number;
119
+ }[];
120
+ }
121
+ export interface BookReview {
122
+ reviewId: string;
123
+ content: string;
124
+ rating: number;
125
+ createTime: number;
126
+ user: {
127
+ name: string;
128
+ avatar: string;
129
+ };
130
+ likeCount: number;
131
+ }
132
+ export interface RecommendBook {
133
+ bookId: string;
134
+ title: string;
135
+ author: string;
136
+ cover: string;
137
+ rating: number;
138
+ intro: string;
139
+ }
140
+ export interface UserProfile {
141
+ vid: string;
142
+ name: string;
143
+ avatar: string;
144
+ gender: number;
145
+ totalReadTime: number;
146
+ totalReadDays: number;
147
+ totalBooks: number;
148
+ totalFinished: number;
149
+ totalNotes: number;
150
+ totalHighlights: number;
151
+ totalReviews: number;
152
+ }
153
+ export declare class WereadService {
154
+ private apiKey;
155
+ constructor(apiKey?: string);
156
+ private call;
157
+ /** 书架同步 */
158
+ shelf(): Promise<WereadResult<ShelfData>>;
159
+ /** 阅读统计: mode = weekly | monthly | annually | overall */
160
+ readData(mode?: string, baseTime?: number): Promise<WereadResult<ReadDetail>>;
161
+ /** 笔记列表: 获取用户的笔记本列表 */
162
+ notebooks(count?: number, lastSort?: number): Promise<WereadResult<{
163
+ books: NotebookItem[];
164
+ synckey: number;
165
+ }>>;
166
+ /** 某本书的划线 */
167
+ bookmarks(bookId: string, count?: number): Promise<WereadResult<{
168
+ updated: NoteDetail[];
169
+ removed: any[];
170
+ synckey: number;
171
+ }>>;
172
+ /** 某本书的热门划线 */
173
+ bestBookmarks(bookId: string, count?: number): Promise<WereadResult<{
174
+ chapters: any[];
175
+ }>>;
176
+ /** 搜索书籍 */
177
+ search(keyword: string, count?: number, scope?: string): Promise<WereadResult<{
178
+ books: SearchResult[];
179
+ }>>;
180
+ /** 书籍详情 */
181
+ bookInfo(bookId: string): Promise<WereadResult<BookInfo>>;
182
+ /** 章节目录 */
183
+ chapterInfo(bookId: string): Promise<WereadResult<ChapterInfo>>;
184
+ /** 阅读进度 */
185
+ getProgress(bookId: string): Promise<WereadResult<{
186
+ chapterUid: number;
187
+ chapterTitle: string;
188
+ progress: number;
189
+ }>>;
190
+ /** 书评 */
191
+ reviews(bookId: string, count?: number, sort?: string): Promise<WereadResult<{
192
+ reviews: BookReview[];
193
+ }>>;
194
+ /** 个性化推荐 */
195
+ recommend(count?: number): Promise<WereadResult<{
196
+ books: RecommendBook[];
197
+ }>>;
198
+ /** 相似推荐 */
199
+ similar(bookId: string, count?: number): Promise<WereadResult<{
200
+ books: RecommendBook[];
201
+ }>>;
202
+ /** 个人中心(聚合多个接口) */
203
+ profile(): Promise<WereadResult<UserProfile>>;
204
+ }
205
+ export declare const wereadService: WereadService;
206
+ //# sourceMappingURL=wereadService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wereadService.d.ts","sourceRoot":"","sources":["../../../src/services/wereadService.ts"],"names":[],"mappings":"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"}