weflow-cli 1.9.0 → 1.11.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 (134) hide show
  1. package/ARCHITECTURE.md +62 -26
  2. package/CHANGELOG.md +1051 -0
  3. package/OPERATIONS.md +99 -13
  4. package/README.en.md +14 -5
  5. package/README.md +23 -8
  6. package/bin/weflow-cli.ts +364 -40
  7. package/dist/bin/weflow-cli.js +381 -69
  8. package/dist/bin/weflow-cli.js.map +1 -1
  9. package/dist/mcp-server/index.d.ts.map +1 -1
  10. package/dist/mcp-server/index.js +19 -1
  11. package/dist/mcp-server/index.js.map +1 -1
  12. package/dist/src/core/dbPathService.d.ts +12 -0
  13. package/dist/src/core/dbPathService.d.ts.map +1 -1
  14. package/dist/src/core/dbPathService.js +20 -3
  15. package/dist/src/core/dbPathService.js.map +1 -1
  16. package/dist/src/panel/server.d.ts.map +1 -1
  17. package/dist/src/panel/server.js +35 -0
  18. package/dist/src/panel/server.js.map +1 -1
  19. package/dist/src/services/assistantService.d.ts +19 -0
  20. package/dist/src/services/assistantService.d.ts.map +1 -1
  21. package/dist/src/services/assistantService.js +20 -0
  22. package/dist/src/services/assistantService.js.map +1 -1
  23. package/dist/src/services/assistantTools.d.ts +27 -1
  24. package/dist/src/services/assistantTools.d.ts.map +1 -1
  25. package/dist/src/services/assistantTools.js +169 -35
  26. package/dist/src/services/assistantTools.js.map +1 -1
  27. package/dist/src/services/configService.d.ts +2 -0
  28. package/dist/src/services/configService.d.ts.map +1 -1
  29. package/dist/src/services/configService.js +3 -2
  30. package/dist/src/services/configService.js.map +1 -1
  31. package/dist/src/services/exportService.d.ts +43 -0
  32. package/dist/src/services/exportService.d.ts.map +1 -1
  33. package/dist/src/services/exportService.js +116 -11
  34. package/dist/src/services/exportService.js.map +1 -1
  35. package/dist/src/services/messageQuery.d.ts +18 -0
  36. package/dist/src/services/messageQuery.d.ts.map +1 -1
  37. package/dist/src/services/messageQuery.js +29 -0
  38. package/dist/src/services/messageQuery.js.map +1 -1
  39. package/dist/src/services/wechatClient.d.ts +125 -0
  40. package/dist/src/services/wechatClient.d.ts.map +1 -0
  41. package/dist/src/services/wechatClient.js +344 -0
  42. package/dist/src/services/wechatClient.js.map +1 -0
  43. package/dist/src/services/wechatMedia.d.ts +44 -0
  44. package/dist/src/services/wechatMedia.d.ts.map +1 -0
  45. package/dist/src/services/wechatMedia.js +155 -0
  46. package/dist/src/services/wechatMedia.js.map +1 -0
  47. package/dist/src/services/wechatMessageService.d.ts +11 -0
  48. package/dist/src/services/wechatMessageService.d.ts.map +1 -1
  49. package/dist/src/services/wechatMessageService.js +55 -11
  50. package/dist/src/services/wechatMessageService.js.map +1 -1
  51. package/dist/src/types.d.ts +4 -0
  52. package/dist/src/types.d.ts.map +1 -1
  53. package/docs/CONTACT_DB_SCHEMA.md +1085 -0
  54. package/docs/DECISIONS.md +1274 -0
  55. package/docs/EXTENDING.md +69 -7
  56. package/docs/FUNCTIONAL-IMPROVEMENT-SPEC.md +27 -0
  57. package/docs/HEALTH-CHECK.md +12 -7
  58. package/docs/JEV/345/272/224/347/224/250/346/226/275/345/267/245/346/226/207/346/241/243.md +2 -2
  59. package/docs/MCP.md +2 -2
  60. package/docs/PROJECT_STATE.md +64 -5
  61. package/docs/RELEASING.md +128 -1
  62. package/docs/images/weflow-architecture-gpt-image-2.png +0 -0
  63. package/logo.png +0 -0
  64. package/mcp-server/index.ts +18 -3
  65. package/package.json +5 -3
  66. package/resources/js/graph3d/NOTICE.txt +35 -0
  67. package/resources/js/graph3d/d3-binarytree.min.js +2 -0
  68. package/resources/js/graph3d/d3-dispatch.min.js +2 -0
  69. package/resources/js/graph3d/d3-force-3d.min.js +2 -0
  70. package/resources/js/graph3d/d3-octree.min.js +2 -0
  71. package/resources/js/graph3d/d3-quadtree.min.js +2 -0
  72. package/resources/js/graph3d/d3-timer.min.js +2 -0
  73. package/resources/js/graph3d/layout.mjs +63 -0
  74. package/resources/js/graph3d/three.min.js +6 -0
  75. package/resources/js/graph3d/viewer2d.js +448 -0
  76. package/resources/panel/index.html +12 -0
  77. package/resources/panel/mascot-blink-1.png +0 -0
  78. package/resources/panel/mascot-blink-2.png +0 -0
  79. package/resources/panel/mascot-lift-down-1.png +0 -0
  80. package/resources/panel/mascot-lift-down-2.png +0 -0
  81. package/resources/panel/mascot-lift-down-3.png +0 -0
  82. package/resources/panel/mascot-lift-down-4.png +0 -0
  83. package/resources/panel/mascot-lift-down-5.png +0 -0
  84. package/resources/panel/mascot-lift-down-6.png +0 -0
  85. package/resources/panel/mascot-lift-up-1.png +0 -0
  86. package/resources/panel/mascot-lift-up-2.png +0 -0
  87. package/resources/panel/mascot-lift-up-3.png +0 -0
  88. package/resources/panel/mascot-lift-up-4.png +0 -0
  89. package/resources/panel/mascot-lift-up-5.png +0 -0
  90. package/resources/panel/mascot-lift-up-6.png +0 -0
  91. package/resources/panel/mascot-tickle-1.png +0 -0
  92. package/resources/panel/mascot-tickle-2.png +0 -0
  93. package/resources/panel/mascot-tickle-3.png +0 -0
  94. package/resources/panel/mascot-tickle-4.png +0 -0
  95. package/resources/panel/panel.css +111 -0
  96. package/resources/panel/renderer.js +480 -8
  97. package/scripts/_utils.py +1203 -977
  98. package/scripts/biz_daily.py +25 -10
  99. package/scripts/chat_notes.py +15 -5
  100. package/scripts/check_readme_commands.py +426 -0
  101. package/scripts/compile_wiki.py +163 -57
  102. package/scripts/contact_schema.py +339 -0
  103. package/scripts/data/wechat_emoji.json +225 -0
  104. package/scripts/export_chat_html.py +346 -6
  105. package/scripts/fav_notes.py +4 -1
  106. package/scripts/graph_2d.py +151 -0
  107. package/scripts/graph_3d.py +646 -0
  108. package/scripts/health_check.py +163 -26
  109. package/scripts/nt_decrypt.py +3 -3
  110. package/scripts/panel_frames.py +683 -0
  111. package/scripts/pipeline.py +21 -10
  112. package/scripts/quality_eval.py +5 -0
  113. package/scripts/rag_chat.py +33 -16
  114. package/scripts/reply_debt.py +26 -6
  115. package/scripts/semantic_search.py +212 -58
  116. package/scripts/vault_rag.py +42 -16
  117. package/scripts/vault_search.py +44 -8
  118. package/scripts/wechat_emoticon.py +6 -0
  119. package/scripts/wiki_lint.py +94 -17
  120. package/src/core/dbPathService.ts +22 -4
  121. package/src/panel/server.ts +33 -0
  122. package/src/services/assistantService.ts +26 -0
  123. package/src/services/assistantTools.ts +2452 -2319
  124. package/src/services/configService.ts +5 -2
  125. package/src/services/exportService.ts +129 -12
  126. package/src/services/messageQuery.ts +29 -0
  127. package/src/services/wechatClient.ts +380 -0
  128. package/src/services/wechatMedia.ts +166 -0
  129. package/src/services/wechatMessageService.ts +62 -11
  130. package/src/types.ts +4 -0
  131. package/dist/src/utils/wechatEmoji.d.ts +0 -5
  132. package/dist/src/utils/wechatEmoji.d.ts.map +0 -1
  133. package/dist/src/utils/wechatEmoji.js +0 -35
  134. package/dist/src/utils/wechatEmoji.js.map +0 -1
@@ -5,11 +5,54 @@ export interface ExportResult {
5
5
  count?: number;
6
6
  error?: string;
7
7
  }
8
+ /**
9
+ * md 导出落盘的媒体清单:`<output>/<talker>_assets/manifest.json`(`local_id:create_time` → 条目)。
10
+ *
11
+ * 这是"其余格式也能带图/带文件"的那一半:**md 导出抽取媒体,json/txt/excel 消费同一份清单** —— 匹配
12
+ * 逻辑(缓存缩略图、资源 md5、原图那档、`msg/file` 里的文档本体)只存在于 Python 那条路上,在这里重写
13
+ * 一遍必然与它漂移。读不到就返回空表:那说明还没跑过 md/`--media` 导出,行为与从前一致。
14
+ */
15
+ export interface MediaRecord {
16
+ /** 相对输出目录的路径;`kind: 'file'` 时指向 `files/` 下的文档。 */
17
+ path: string;
18
+ kind: 'image' | 'file';
19
+ /** 文档的原始文件名(图片没有)。 */
20
+ name?: string;
21
+ }
22
+ /**
23
+ * 从清单里取这条消息的媒体条目。
24
+ *
25
+ * 键是 `local_id:create_time`:**local_id 会在分片之间重复**(同一会话的表可能存在于多个分片,
26
+ * 各片自己编号),只按 local_id 查会让 json/txt/excel 引用到别的消息的图。两条消息硬要同 id 同秒
27
+ * 才算撞上,那个概率可以忽略;回退查裸 local_id 是为了兼容更早写出的清单。
28
+ */
29
+ export declare function mediaFor(manifest: Record<string, MediaRecord>, message: {
30
+ localId?: unknown;
31
+ createTime?: unknown;
32
+ }): MediaRecord | undefined;
33
+ export declare function readMediaManifest(outputDir: string, talker: string): Record<string, MediaRecord>;
8
34
  export declare class ExportService {
9
35
  exportJson(talker: string, outputDir: string, limit?: number, from?: number, to?: number, contract?: ExportContract): Promise<ExportResult>;
10
36
  exportTxt(talker: string, outputDir: string, limit?: number, from?: number, to?: number): Promise<ExportResult>;
11
37
  exportHtml(talker: string, outputDir: string, limit?: number, date?: string, from?: number, to?: number, quiet?: boolean, options?: {
12
38
  fullImages?: boolean;
39
+ format?: 'html' | 'md';
40
+ assetsOnly?: boolean;
41
+ }): Promise<ExportResult>;
42
+ /**
43
+ * 只抽媒体(图片与文档落盘 + 清单),不产出正文 —— `export … json|txt|excel --media` 先跑这一步。
44
+ * 与 markdown 导出共用同一条 Python 通路与同一个资产目录,所以清单只有一份。
45
+ *
46
+ * `limit`/`date` 必须跟着调用方走:抽取原本固定按"整个会话"跑,而消费它的 json/txt/excel 是按
47
+ * `--limit` 切片的 —— `--limit 200` 于是把整段历史的媒体都抽出来(文档还要拷成文件),
48
+ * 实测 67 份里只有 33 份落在导出的 200 条里。
49
+ */
50
+ extractMedia(talker: string, outputDir: string, quiet?: boolean, options?: {
51
+ fullImages?: boolean;
52
+ }, limit?: number, date?: string): Promise<ExportResult>;
53
+ /** markdown + 图片落盘到 `<output>/<talker>_assets/`(同一条 Python 通路,换个输出形态)。 */
54
+ exportMarkdown(talker: string, outputDir: string, limit?: number, date?: string, from?: number, to?: number, quiet?: boolean, options?: {
55
+ fullImages?: boolean;
13
56
  }): Promise<ExportResult>;
14
57
  private exportHtmlBasic;
15
58
  exportExcel(talker: string, outputDir: string, limit?: number, from?: number, to?: number): Promise<ExportResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"exportService.d.ts","sourceRoot":"","sources":["../../../src/services/exportService.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,WAAW,CAAA;AAChD,MAAM,WAAW,YAAY;IAAG,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE;AAOjG,qBAAa,aAAa;IAClB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,SAAI,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAE,cAAsB,GAAG,OAAO,CAAC,YAAY,CAAC;IAuB7I,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,SAAI,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAuB1G,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,SAAI,EAAE,IAAI,SAAK,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,UAAQ,EAAE,OAAO,GAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,YAAY,CAAC;YAgIrK,eAAe;IAavB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,SAAI,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA8ClH,OAAO,CAAC,SAAS;IA8CjB,OAAO,CAAC,oBAAoB;IAsD5B,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,eAAe;CAOxB;AAED,eAAO,MAAM,aAAa,eAAsB,CAAA"}
1
+ {"version":3,"file":"exportService.d.ts","sourceRoot":"","sources":["../../../src/services/exportService.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,WAAW,CAAA;AAChD,MAAM,WAAW,YAAY;IAAG,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE;AAIjG;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,OAAO,GAAG,MAAM,CAAA;IACtB,sBAAsB;IACtB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,WAAW,GAAG,SAAS,CAG7I;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAsBhG;AAWD,qBAAa,aAAa;IAClB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,SAAI,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAE,cAAsB,GAAG,OAAO,CAAC,YAAY,CAAC;IAoC7I,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,SAAI,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA4B1G,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,SAAI,EAAE,IAAI,SAAK,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,UAAQ,EAAE,OAAO,GAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,YAAY,CAAC;IAoJjO;;;;;;;OAOG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,UAAQ,EAAE,OAAO,GAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAO,EAAE,KAAK,SAAI,EAAE,IAAI,SAAK,GAAG,OAAO,CAAC,YAAY,CAAC;IAKzJ,0EAA0E;IACpE,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,SAAI,EAAE,IAAI,SAAK,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,UAAQ,EAAE,OAAO,GAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,YAAY,CAAC;YAIzK,eAAe;IAavB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,SAAI,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAkDlH,OAAO,CAAC,SAAS;IA8CjB,OAAO,CAAC,oBAAoB;IAsD5B,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,eAAe;CAOxB;AAED,eAAO,MAAM,aAAa,eAAsB,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { join, dirname } from 'path';
2
- import { existsSync, mkdirSync, writeFileSync } from 'fs';
2
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
3
3
  import { execFile } from 'child_process';
4
4
  import { promisify } from 'util';
5
5
  import { chatService } from './chatService.js';
@@ -10,9 +10,53 @@ import { createWeFlowEnvelope } from './messageContract.js';
10
10
  import { parseLocalDateOrIso } from '../utils/dateRange.js';
11
11
  import { resolvePackageRoot } from '../utils/packageRoot.js';
12
12
  const execFileAsync = promisify(execFile);
13
+ /**
14
+ * 从清单里取这条消息的媒体条目。
15
+ *
16
+ * 键是 `local_id:create_time`:**local_id 会在分片之间重复**(同一会话的表可能存在于多个分片,
17
+ * 各片自己编号),只按 local_id 查会让 json/txt/excel 引用到别的消息的图。两条消息硬要同 id 同秒
18
+ * 才算撞上,那个概率可以忽略;回退查裸 local_id 是为了兼容更早写出的清单。
19
+ */
20
+ export function mediaFor(manifest, message) {
21
+ const id = String(message.localId);
22
+ return manifest[`${id}:${message.createTime}`] ?? manifest[id];
23
+ }
24
+ export function readMediaManifest(outputDir, talker) {
25
+ try {
26
+ const file = join(outputDir, `${talker}_assets`, 'manifest.json');
27
+ if (!existsSync(file))
28
+ return {};
29
+ const data = JSON.parse(readFileSync(file, 'utf8'));
30
+ const map = data && data.messages;
31
+ if (!map || typeof map !== 'object')
32
+ return {};
33
+ // v1 的值是裸字符串(只有图片),v2 起是带 `kind` 的对象。升级不该让磁盘上已有的清单失效 ——
34
+ // 用户不会因为升了个版本就重跑一次导出。
35
+ const normalized = {};
36
+ for (const [key, value] of Object.entries(map)) {
37
+ if (typeof value === 'string') {
38
+ normalized[key] = { path: value, kind: 'image' };
39
+ }
40
+ else if (value && typeof value === 'object' && typeof value.path === 'string') {
41
+ const record = value;
42
+ normalized[key] = { ...record, kind: record.kind === 'file' ? 'file' : 'image' };
43
+ }
44
+ }
45
+ return normalized;
46
+ }
47
+ catch {
48
+ return {};
49
+ }
50
+ }
13
51
  function getPackageRoot() {
14
52
  return resolvePackageRoot(import.meta.url);
15
53
  }
54
+ /** txt/excel 共用的文字标签:文档要带上原名,光一个相对路径看不出那是什么东西。 */
55
+ function mediaLabel(record) {
56
+ if (!record)
57
+ return '';
58
+ return record.kind === 'file' ? `${record.name || record.path} (${record.path})` : record.path;
59
+ }
16
60
  export class ExportService {
17
61
  async exportJson(talker, outputDir, limit = 0, from, to, contract = 'raw') {
18
62
  try {
@@ -22,13 +66,27 @@ export class ExportService {
22
66
  }
23
67
  const dir = this.ensureOutputDir(outputDir);
24
68
  const filePath = join(dir, `${talker}_messages.json`);
69
+ // 有清单就带上媒体相对路径(清单由 markdown 导出产生,见 readMediaManifest)
70
+ const mediaMap = readMediaManifest(dir, talker);
71
+ const withMedia = Object.keys(mediaMap).length
72
+ ? messages.map(m => {
73
+ const media = mediaFor(mediaMap, m);
74
+ // `media` 保持"相对路径字符串"这个老形状(已有消费方按字符串读);`mediaKind`/`mediaName`
75
+ // 是新增的 —— 不带这两项,读 JSON 的人只能靠扩展名猜这是图片还是文档,而导出明明知道。
76
+ if (!media)
77
+ return m;
78
+ return media.kind === 'file'
79
+ ? { ...m, media: media.path, mediaKind: media.kind, mediaName: media.name }
80
+ : { ...m, media: media.path, mediaKind: media.kind };
81
+ })
82
+ : messages;
25
83
  const payload = contract === 'weflow-v1'
26
- ? createWeFlowEnvelope(messages, new Date().toISOString(), {
84
+ ? createWeFlowEnvelope(withMedia, new Date().toISOString(), {
27
85
  requestedFrom: from,
28
86
  requestedTo: to,
29
87
  requestedLimit: limit,
30
88
  })
31
- : messages;
89
+ : withMedia;
32
90
  writeFileSync(filePath, JSON.stringify(payload, null, 2), 'utf8');
33
91
  return { success: true, path: filePath, count: messages.length };
34
92
  }
@@ -42,10 +100,15 @@ export class ExportService {
42
100
  if (messages.length === 0) {
43
101
  return { success: false, error: '未找到消息' };
44
102
  }
103
+ const mediaMap = readMediaManifest(this.ensureOutputDir(outputDir), talker);
45
104
  const lines = messages.map(m => {
46
105
  const time = new Date(m.createTime * 1000).toLocaleString('zh-CN');
47
106
  const sender = m.isSend ? '我' : (m.senderUsername || talker);
48
- const content = m.parsedContent || m.rawContent || '';
107
+ // 有清单就把 `[图片]` / `[文件] 名字` 换成能直接打开的引用,没有就保持原样
108
+ const media = mediaFor(mediaMap, m);
109
+ const content = media
110
+ ? (media.kind === 'file' ? `[文件: ${mediaLabel(media)}]` : `[图片: ${media.path}]`)
111
+ : (m.parsedContent || m.rawContent || '');
49
112
  return `[${time}] ${sender}: ${content}`;
50
113
  });
51
114
  const dir = this.ensureOutputDir(outputDir);
@@ -58,6 +121,11 @@ export class ExportService {
58
121
  }
59
122
  }
60
123
  async exportHtml(talker, outputDir, limit = 0, date = '', from, to, quiet = false, options = {}) {
124
+ const format = options.format ?? 'html';
125
+ if (format === 'md' && (from !== undefined || to !== undefined)) {
126
+ // 不静默降级成「导出全部」:范围是调用方明确要的,做不到就说出来。
127
+ return { success: false, error: 'markdown 导出暂不支持 --from/--to:请用 --date,或整段导出' };
128
+ }
61
129
  try {
62
130
  if (from !== undefined || to !== undefined) {
63
131
  return this.exportHtmlBasic(talker, outputDir, limit, from, to);
@@ -73,6 +141,9 @@ export class ExportService {
73
141
  // dormant and exports stop at the first shard's last message.
74
142
  const passphrase = configService.get('favPassphrase') || cfg.decryptKey || '';
75
143
  if (!db || !key || !salt) {
144
+ if (format === 'md') {
145
+ return { success: false, error: 'markdown 导出需要已配置的数据库与密钥(这条路没有简版回退)' };
146
+ }
76
147
  // Fallback: basic HTML
77
148
  let fallbackFrom = from;
78
149
  let fallbackTo = to;
@@ -101,11 +172,18 @@ export class ExportService {
101
172
  }
102
173
  }
103
174
  catch { }
104
- const args = [
105
- script,
175
+ const args = [script];
176
+ if (format === 'md') {
177
+ // 图片落盘 + 清单。资产目录按 **talker** 命名,好让 json/txt/excel 导出能确定性找到它
178
+ // (它们的文件前缀是 talker,而 md 文件名用的是显示名,不显式指定就对不上)。
179
+ args.push('--format', 'md', '--assets-dir', join(outputDir || './output', `${talker}_assets`));
180
+ if (options.assetsOnly)
181
+ args.push('--assets-only');
182
+ }
183
+ else {
106
184
  // Paginate: a whole year of chat in one file makes the browser crawl.
107
- '--per-page', '100',
108
- ];
185
+ args.push('--per-page', '100');
186
+ }
109
187
  const ownWxid = String(cfg.wxid || '').trim();
110
188
  const exportCacheDir = cacheDir && existsSync(cacheDir) ? cacheDir : undefined;
111
189
  const exportAccountDir = accountDir && existsSync(accountDir) ? accountDir : undefined;
@@ -179,10 +257,33 @@ export class ExportService {
179
257
  if (date) {
180
258
  return { success: false, error: `指定日期导出失败: ${failure}` };
181
259
  }
182
- // Fallback to basic HTML
260
+ if (format === 'md') {
261
+ // markdown 没有「简版」:回退成 HTML 会让调用方以为拿到了 .md。失败就是失败。
262
+ return { success: false, error: failure };
263
+ }
264
+ // Fallback to basic HTML:**这条回退不带内嵌图片**,调用方得知道 ——
265
+ // 2026-10-13 实测:Python 因一个 AttributeError 退出后,这里静默回退,
266
+ // 而 CLI 照样打印「✓ 导出成功」,人只会以为导出正常。
267
+ if (!quiet)
268
+ console.error(' ⚠ 已回退到简版 HTML(不含内嵌图片)');
183
269
  return this.exportHtmlBasic(talker, outputDir, limit, from, to);
184
270
  }
185
271
  }
272
+ /**
273
+ * 只抽媒体(图片与文档落盘 + 清单),不产出正文 —— `export … json|txt|excel --media` 先跑这一步。
274
+ * 与 markdown 导出共用同一条 Python 通路与同一个资产目录,所以清单只有一份。
275
+ *
276
+ * `limit`/`date` 必须跟着调用方走:抽取原本固定按"整个会话"跑,而消费它的 json/txt/excel 是按
277
+ * `--limit` 切片的 —— `--limit 200` 于是把整段历史的媒体都抽出来(文档还要拷成文件),
278
+ * 实测 67 份里只有 33 份落在导出的 200 条里。
279
+ */
280
+ async extractMedia(talker, outputDir, quiet = false, options = {}, limit = 0, date = '') {
281
+ return this.exportHtml(talker, outputDir, limit, date, undefined, undefined, quiet, { ...options, format: 'md', assetsOnly: true });
282
+ }
283
+ /** markdown + 图片落盘到 `<output>/<talker>_assets/`(同一条 Python 通路,换个输出形态)。 */
284
+ async exportMarkdown(talker, outputDir, limit = 0, date = '', from, to, quiet = false, options = {}) {
285
+ return this.exportHtml(talker, outputDir, limit, date, from, to, quiet, { ...options, format: 'md' });
286
+ }
186
287
  async exportHtmlBasic(talker, outputDir, limit = 0, from, to) {
187
288
  const messages = await chatService.getMessagesInRange(talker, limit, from, to);
188
289
  if (messages.length === 0) {
@@ -213,15 +314,19 @@ export class ExportService {
213
314
  { header: '发送者', key: 'sender', width: 15 },
214
315
  { header: '类型', key: 'type', width: 10 },
215
316
  { header: '内容', key: 'content', width: 80 },
216
- { header: '消息ID', key: 'msgId', width: 15 }
317
+ { header: '消息ID', key: 'msgId', width: 15 },
318
+ // 有清单时填相对路径(清单由 markdown 导出产生)
319
+ { header: '媒体', key: 'media', width: 40 }
217
320
  ];
321
+ const mediaMap = readMediaManifest(this.ensureOutputDir(outputDir), talker);
218
322
  for (const m of messages) {
219
323
  sheet.addRow({
220
324
  time: new Date(m.createTime * 1000).toLocaleString('zh-CN'),
221
325
  sender: m.isSend ? '我' : (m.senderUsername || talker),
222
326
  type: this.getMessageTypeName(m.localType),
223
327
  content: m.parsedContent || m.rawContent || '',
224
- msgId: m.localId
328
+ msgId: m.localId,
329
+ media: mediaLabel(mediaFor(mediaMap, m))
225
330
  });
226
331
  }
227
332
  const dir = this.ensureOutputDir(outputDir);
@@ -1 +1 @@
1
- {"version":3,"file":"exportService.js","sourceRoot":"","sources":["../../../src/services/exportService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"exportService.js","sourceRoot":"","sources":["../../../src/services/exportService.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,24 @@ export interface MessageTimeRange {
3
3
  from?: number;
4
4
  to?: number;
5
5
  }
6
+ /**
7
+ * 这三种形状的输入会被 `resolveTalker` **原样返回**(见 `src/utils/talkerUtils.ts`),
8
+ * 于是拼错的 ID 会一路走到「取不到消息」,和「这条会话在窗口内确实没有消息」长得一模一样。
9
+ * 只看形状,不碰 IO —— 判定所需的名单由调用方传进来。
10
+ */
11
+ export declare function looksLikeTalkerId(input: string): boolean;
12
+ /**
13
+ * 空结果时补的一句话:**只在"看起来是 ID、但会话与联系人都没有它"时**才给。
14
+ * 返回空串表示没什么可补的 —— 名字形状的输入本来就由 `resolveTalker` 报错,认识的 ID
15
+ * 取不到消息是正常结果。
16
+ *
17
+ * 这里**不改退出码、也不改 `success`**:既有契约里「没有消息」不是错误(脚本与 MCP 依赖它,
18
+ * 见 `docs/HEALTH-CHECK.md` 的那一行),所以只把歧义说出来,不动语义。
19
+ */
20
+ export declare function emptyMessagesNote(input: string, known: {
21
+ sessionUsernames: Iterable<string>;
22
+ contactUsernames: Iterable<string>;
23
+ }): string;
6
24
  export declare function collectMessagesInRange(fetchPage: (limit: number, offset: number) => Promise<Message[]>, limit: number, range: MessageTimeRange, pageSize?: number): Promise<Message[]>;
7
25
  /** Why the paging loop stopped. The first two are expected; the last two are not. */
8
26
  export type StopReason =
@@ -1 +1 @@
1
- {"version":3,"file":"messageQuery.d.ts","sourceRoot":"","sources":["../../../src/services/messageQuery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ;AAED,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,EAChE,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,gBAAgB,EACvB,QAAQ,SAAM,GACb,OAAO,CAAC,OAAO,EAAE,CAAC,CAyBpB;AAED,qFAAqF;AACrF,MAAM,MAAM,UAAU;AACpB,0CAA0C;AACxC,OAAO;AACT,uDAAuD;GACrD,WAAW;AACb,oCAAoC;GAClC,OAAO;AACT,6EAA6E;GAC3E,YAAY,CAAA;AAEhB,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,UAAU,CAAA;IACrB,WAAW,EAAE,OAAO,CAAA;IACpB;;;;;;;;;OASG;IACH,cAAc,EAAE,OAAO,CAAA;CACxB;AAED;;;;;;GAMG;AACH,wBAAsB,8BAA8B,CAClD,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,EAChE,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,gBAAgB,EACvB,QAAQ,SAAM,GACb,OAAO,CAAC,yBAAyB,CAAC,CAsDpC"}
1
+ {"version":3,"file":"messageQuery.d.ts","sourceRoot":"","sources":["../../../src/services/messageQuery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGxD;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE;IAAE,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAAC,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;CAAE,GAChF,MAAM,CAMR;AAED,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,EAChE,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,gBAAgB,EACvB,QAAQ,SAAM,GACb,OAAO,CAAC,OAAO,EAAE,CAAC,CAyBpB;AAED,qFAAqF;AACrF,MAAM,MAAM,UAAU;AACpB,0CAA0C;AACxC,OAAO;AACT,uDAAuD;GACrD,WAAW;AACb,oCAAoC;GAClC,OAAO;AACT,6EAA6E;GAC3E,YAAY,CAAA;AAEhB,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,UAAU,CAAA;IACrB,WAAW,EAAE,OAAO,CAAA;IACpB;;;;;;;;;OASG;IACH,cAAc,EAAE,OAAO,CAAA;CACxB;AAED;;;;;;GAMG;AACH,wBAAsB,8BAA8B,CAClD,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,EAChE,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,gBAAgB,EACvB,QAAQ,SAAM,GACb,OAAO,CAAC,yBAAyB,CAAC,CAsDpC"}
@@ -1,3 +1,32 @@
1
+ /**
2
+ * 这三种形状的输入会被 `resolveTalker` **原样返回**(见 `src/utils/talkerUtils.ts`),
3
+ * 于是拼错的 ID 会一路走到「取不到消息」,和「这条会话在窗口内确实没有消息」长得一模一样。
4
+ * 只看形状,不碰 IO —— 判定所需的名单由调用方传进来。
5
+ */
6
+ export function looksLikeTalkerId(input) {
7
+ const value = String(input || '');
8
+ return value.startsWith('wxid_') || value.includes('@chatroom') || value.includes('@openim');
9
+ }
10
+ /**
11
+ * 空结果时补的一句话:**只在"看起来是 ID、但会话与联系人都没有它"时**才给。
12
+ * 返回空串表示没什么可补的 —— 名字形状的输入本来就由 `resolveTalker` 报错,认识的 ID
13
+ * 取不到消息是正常结果。
14
+ *
15
+ * 这里**不改退出码、也不改 `success`**:既有契约里「没有消息」不是错误(脚本与 MCP 依赖它,
16
+ * 见 `docs/HEALTH-CHECK.md` 的那一行),所以只把歧义说出来,不动语义。
17
+ */
18
+ export function emptyMessagesNote(input, known) {
19
+ if (!looksLikeTalkerId(input))
20
+ return '';
21
+ for (const id of known.sessionUsernames)
22
+ if (id === input)
23
+ return '';
24
+ for (const id of known.contactUsernames)
25
+ if (id === input)
26
+ return '';
27
+ return `这个 ID 既不在会话里、也不在联系人里:${input}` +
28
+ ' —— 先确认有没有拼错(weflow-cli sessions / weflow-cli contacts)';
29
+ }
1
30
  export async function collectMessagesInRange(fetchPage, limit, range, pageSize = 500) {
2
31
  const result = [];
3
32
  let offset = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"messageQuery.js","sourceRoot":"","sources":["../../../src/services/messageQuery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"messageQuery.js","sourceRoot":"","sources":["../../../src/services/messageQuery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ /** 一个 `Weixin.exe` 进程的画像(只留判版本要用的两个字段)。 */
2
+ export interface WechatClientProcess {
3
+ pid: number;
4
+ exe: string;
5
+ /** 命令行里的 `--user-lib-dir`;进程没带就是 null(**逆向报告实测**:`--type=xplayer` 那个不带)。 */
6
+ loadedDir: string | null;
7
+ /** 命令行里的 `--wechat-files-path`:客户端自己说数据目录在哪(小程序那组进程会带)。 */
8
+ dataDir: string | null;
9
+ /** 命令行里的 `--client_version`:客户端自己的版本 token(十进制,如 `0xF2541F0D`)。 */
10
+ versionToken: string | null;
11
+ }
12
+ /** 版本的判据与结论 —— 只跟"哪个进程加载了哪个目录"有关,读不到**别的来源**。 */
13
+ export interface WechatVersionFacts {
14
+ /** 本机有没有在跑的 `Weixin.exe`(没跑 ⇒ 版本未知,不是"没问题")。 */
15
+ running: boolean;
16
+ /** 去重后的实际加载目录,按出现顺序。 */
17
+ loadedDirs: string[];
18
+ /** 版本号 = 加载目录的名字;**恰好一个**目录时才给,否则 null。 */
19
+ version: string | null;
20
+ /** `version` 为 null 时说清为什么。 */
21
+ note: string;
22
+ /** 安装根下**不能用的**版本目录(没有 `Weixin.dll`)。 */
23
+ unusableVersionDirs: Array<{
24
+ dir: string;
25
+ files: number;
26
+ }>;
27
+ }
28
+ export interface WechatClientFacts extends WechatVersionFacts {
29
+ /** 客户端自报的构建 token(`--client_version`,如 `0xF2541F0D`)—— 与目录名并列的**第二个来源**。 */
30
+ versionTokens: string[];
31
+ /** 进程命令行里的 `--wechat-files-path`:**客户端自己说**数据目录在哪。 */
32
+ dataDirs: string[];
33
+ /** `update\update.data` 在不在(在 ⇒ 加载路径可能不由命令行决定;见 `caveats`)。 */
34
+ updateData: {
35
+ path: string;
36
+ present: boolean;
37
+ };
38
+ /** 客户端崩溃记录:只报条数与最近时间,**不读内容**。 */
39
+ crashRecords: {
40
+ dir: string;
41
+ reports: number;
42
+ records: number;
43
+ newest: string | null;
44
+ };
45
+ /** 读这个版本时**必须一起说出去**的不确定(目前只有一条:`update.data` 在场)。 */
46
+ caveats: string[];
47
+ }
48
+ export declare function parseProcessRows(raw: string): WechatClientProcess[];
49
+ /**
50
+ * 从一条命令行里取 `--user-lib-dir` 的值。**两种写法都认**(`=` 与空格、带引号与不带),
51
+ * 取不到返回 null。
52
+ *
53
+ * 注意这个参数**不在 `Weixin.exe` 的字符串表里**(**逆向报告实测**:0 命中)—— 它是被加载的 DLL
54
+ * 自己解析的。也就是说:只有**进程**能告诉我们它,二进制里搜不到。
55
+ */
56
+ export declare function userLibDir(commandLine: string): string | null;
57
+ /**
58
+ * 从命令行里取 `--wechat-files-path`:**客户端自己说数据目录在哪**。
59
+ *
60
+ * 用处在排查:它和配置里的数据目录不一致时,说明两边指向的不是同一份库(本机数据目录
61
+ * 还有 D 盘软链,同一份库两条路径)。只报出来,**不拿它去改配置**。
62
+ */
63
+ export declare function wechatFilesPath(commandLine: string): string | null;
64
+ /**
65
+ * 命令行里的 `--client_version`:客户端**自己的版本 token**(十进制)。
66
+ *
67
+ * 为什么要报它:它是"哪个构建"的**另一个独立来源** —— 版本目录名(`4.1.15.13`)是装载位置,
68
+ * 而这个是客户端自报的构建标识,两者来自不同的地方。顺带:实测本机这个值 `4065599245`
69
+ * 正是 `0xF2541F0D`,也就是那份逆向报告从三处(反编译 / 插件 manifest / UA)定下来的版本号。
70
+ *
71
+ * ⚠️ **不给"版本号"**:token 与三段式版本号之间的编码规则**没人解出来**(报告只确认"旧版
72
+ * `0xF2541D0C` → 新版 `0xF2541F0D`,高 16 位两版都是 `F254`")。所以它只作为**并列的第二来源**
73
+ * 报出去,不拿它去推版本号。
74
+ */
75
+ export declare function clientVersionToken(commandLine: string): string | null;
76
+ /** 客户端崩溃记录:只数文件、只取最近时间,**不读任何内容**。 */
77
+ export declare function crashSummary(root: string): WechatClientFacts['crashRecords'];
78
+ /** 两条路径是不是同一个位置。**按真身比**:本机数据目录有 D 盘软链,同一份库有两条路径。 */
79
+ export declare function samePath(a: string, b: string): boolean;
80
+ /** `%APPDATA%\Tencent\xwechat` —— 崩溃记录与 `update.data` 都在这棵树下。 */
81
+ export declare function xwechatRoot(appData?: string | undefined): string | null;
82
+ /**
83
+ * `update.data` 在场时**必须一起说出去**的那句话。
84
+ *
85
+ * 报告把这条明确留成未解:"若该文件存在,exe 侧第一次 `LoadLibraryExW` 就会用它,
86
+ * 根本不会看命令行 —— 两条路谁优先【未知】"。所以这个函数的存在意义是:
87
+ * 别让新报出去的那个版本在那种机器上**悄悄变成错的**。
88
+ */
89
+ export declare function updateDataCaveats(present: boolean): string[];
90
+ /** 一个版本目录能不能用:**有没有 `Weixin.dll`**(启动器加载的就是它)。 */
91
+ export declare function versionDirFiles(dir: string): string[] | null;
92
+ /** 把一堆目录名分成"能用的版本目录 / 不能用的 / 与版本无关的"。纯函数,便于测。 */
93
+ export declare function classifyVersionDirs(entries: Array<{
94
+ name: string;
95
+ files: string[];
96
+ }>): {
97
+ usable: string[];
98
+ unusable: Array<{
99
+ dir: string;
100
+ files: number;
101
+ }>;
102
+ };
103
+ /** 安装根(`D:\WeiXin`)→ 它的版本目录分类。读不出来就当空(不猜)。 */
104
+ export declare function versionDirsUnder(installRoot: string): ReturnType<typeof classifyVersionDirs>;
105
+ export declare function summarize(processes: WechatClientProcess[], unusable: Array<{
106
+ dir: string;
107
+ files: number;
108
+ }>): WechatVersionFacts;
109
+ /** 默认的执行器:`Get-CimInstance`。测试里换掉它,别真去问系统。 */
110
+ export type PowershellRunner = (command: string) => Promise<string>;
111
+ /**
112
+ * **只要那一句话**:客户端自报的数据目录。
113
+ *
114
+ * 给 `init` 的数据目录发现用(`DbPathService.autoDetect({ hintedRoots })`)—— 它是唯一
115
+ * **来自客户端自己**的来源,别的都是按目录名猜的。找不到就返回空数组(调用方走老路),
116
+ * **不抛**:这只是个线索,不该让初始化失败。
117
+ */
118
+ export declare function reportedDataDirs(run?: PowershellRunner): Promise<string[]>;
119
+ /**
120
+ * 汇总:进程画像 + 每个安装根下"不能用的版本目录"。
121
+ *
122
+ * 非 Windows 直接返回"平台不支持"(`Get-CimInstance` 是 Windows 的),**不是**返回"没问题"。
123
+ */
124
+ export declare function detectWechatClient(run?: PowershellRunner): Promise<WechatClientFacts>;
125
+ //# sourceMappingURL=wechatClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wechatClient.d.ts","sourceRoot":"","sources":["../../../src/services/wechatClient.ts"],"names":[],"mappings":"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"}