weflow-cli 1.17.0 → 1.19.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 (73) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/README.md +3 -0
  3. package/bin/weflow-cli.ts +167 -0
  4. package/dist/bin/weflow-cli.js +199 -0
  5. package/dist/bin/weflow-cli.js.map +1 -1
  6. package/dist/src/services/diagnosticReport.d.ts +6 -0
  7. package/dist/src/services/diagnosticReport.d.ts.map +1 -1
  8. package/dist/src/services/diagnosticReport.js +16 -0
  9. package/dist/src/services/diagnosticReport.js.map +1 -1
  10. package/dist/src/services/wechatCompat.d.ts +29 -0
  11. package/dist/src/services/wechatCompat.d.ts.map +1 -0
  12. package/dist/src/services/wechatCompat.js +65 -0
  13. package/dist/src/services/wechatCompat.js.map +1 -0
  14. package/docs/DATA_CONTRACT.md +25 -25
  15. package/docs/DECISIONS.md +26 -0
  16. package/docs/FUNCTIONAL-IMPROVEMENT-SPEC.md +365 -365
  17. package/docs/HEALTH-CHECK.md +104 -104
  18. package/docs/JEV/345/272/224/347/224/250/346/226/275/345/267/245/346/226/207/346/241/243.md +310 -310
  19. package/docs/NEXT_ACTIONS.md +236 -236
  20. package/docs/NPM-PUBLISH.md +130 -130
  21. package/docs/NT_DATABASES.md +47 -0
  22. package/docs/POSITIONING.md +68 -68
  23. package/docs/PROJECT_STATE.md +3 -2
  24. package/docs/RELEASING.md +4 -0
  25. package/package.json +1 -1
  26. package/requirements-3x.txt +4 -4
  27. package/requirements-voice.txt +15 -15
  28. package/resources/js/graph3d/NOTICE.txt +35 -35
  29. package/resources/js/graph3d/d3-binarytree.min.js +2 -2
  30. package/resources/js/graph3d/d3-dispatch.min.js +2 -2
  31. package/resources/js/graph3d/d3-force-3d.min.js +2 -2
  32. package/resources/js/graph3d/d3-octree.min.js +2 -2
  33. package/resources/js/graph3d/d3-quadtree.min.js +2 -2
  34. package/resources/js/graph3d/d3-timer.min.js +2 -2
  35. package/resources/js/graph3d/three.min.js +6 -6
  36. package/resources/panel/quick-menu.cjs +197 -197
  37. package/scripts/_utils.py +1338 -1338
  38. package/scripts/annual_report.py +3 -1
  39. package/scripts/article_notes.py +423 -423
  40. package/scripts/contact_schema.py +339 -339
  41. package/scripts/create_reading_notes.py +11 -11
  42. package/scripts/daily_mail.py +51 -5
  43. package/scripts/daily_task.ps1 +216 -213
  44. package/scripts/extract_todos.py +3 -1
  45. package/scripts/fav_notes.py +321 -321
  46. package/scripts/health_check.py +473 -473
  47. package/scripts/imported_chats.py +68 -68
  48. package/scripts/install_tasks.ps1 +105 -105
  49. package/scripts/key_cache.py +232 -0
  50. package/scripts/leads.py +179 -179
  51. package/scripts/mcp_bridge.py +3 -1
  52. package/scripts/media_index.py +150 -0
  53. package/scripts/network.py +206 -206
  54. package/scripts/nt_common.py +32 -0
  55. package/scripts/nt_decrypt.py +2023 -1954
  56. package/scripts/opinion_timeline.py +138 -138
  57. package/scripts/replay.py +803 -803
  58. package/scripts/run_hidden.vbs +24 -24
  59. package/scripts/semantic_search.py +5 -1
  60. package/scripts/user_notes.py +315 -315
  61. package/scripts/voice_transcribe.py +139 -139
  62. package/scripts/watch_issues.py +212 -212
  63. package/scripts/watch_mail.py +131 -131
  64. package/scripts/wechat_avatar.py +185 -0
  65. package/scripts/wechat_ledger.py +190 -0
  66. package/src/services/cursorProbe.ts +222 -222
  67. package/src/services/diagnosticReport.ts +22 -0
  68. package/src/services/qchatImport.ts +327 -327
  69. package/src/services/setupVenv.ts +238 -238
  70. package/src/services/syncService.ts +363 -363
  71. package/src/services/syncState.ts +275 -275
  72. package/src/services/wechatCompat.ts +67 -0
  73. package/src/services/wechatMedia.ts +166 -166
@@ -59,6 +59,12 @@ export interface DiagnosticInput {
59
59
  dir: string;
60
60
  files: number;
61
61
  }>;
62
+ /** D-130:本机加载版本 vs 本包验证版本(check 那边算好传进来) */
63
+ compatibility?: {
64
+ verifiedVersion: string;
65
+ verifiedAt: string;
66
+ verdict: 'verified' | 'newer-than-verified' | 'older-than-verified' | 'unknown';
67
+ };
62
68
  };
63
69
  /** 最近一次失败的原文(可选;`redactForReport` 会再过一遍) */
64
70
  lastError?: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"diagnosticReport.d.ts","sourceRoot":"","sources":["../../../src/services/diagnosticReport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAA;AAE5D,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,eAAe,CAAA;IACtB,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,sBAAsB;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IAChE,YAAY,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAA;IACvF,aAAa,EAAE;QACb,WAAW,EAAE,OAAO,CAAA;QACpB,eAAe,EAAE,OAAO,CAAA;QACxB,eAAe,CAAC,EAAE,OAAO,CAAA;QACzB,iBAAiB,CAAC,EAAE,OAAO,CAAA;QAC3B,cAAc,CAAC,EAAE,OAAO,CAAA;KACzB,CAAA;IACD,gCAAgC;IAChC,IAAI,EAAE;QAAE,oBAAoB,EAAE,OAAO,CAAC;QAAC,oBAAoB,EAAE,OAAO,CAAA;KAAE,CAAA;IACtE,YAAY,CAAC,EAAE;QACb,OAAO,EAAE,OAAO,CAAA;QAChB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;QACtB,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,oBAAoB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;QACrC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;QACnB,mBAAmB,CAAC,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAC5D,CAAA;IACD,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;AAUD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAcpD;AAED,uCAAuC;AACvC,wBAAgB,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,iBAAiB,EAAE,CAoFpE;AAaD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAgDrE"}
1
+ {"version":3,"file":"diagnosticReport.d.ts","sourceRoot":"","sources":["../../../src/services/diagnosticReport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAA;AAE5D,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,eAAe,CAAA;IACtB,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,sBAAsB;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IAChE,YAAY,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAA;IACvF,aAAa,EAAE;QACb,WAAW,EAAE,OAAO,CAAA;QACpB,eAAe,EAAE,OAAO,CAAA;QACxB,eAAe,CAAC,EAAE,OAAO,CAAA;QACzB,iBAAiB,CAAC,EAAE,OAAO,CAAA;QAC3B,cAAc,CAAC,EAAE,OAAO,CAAA;KACzB,CAAA;IACD,gCAAgC;IAChC,IAAI,EAAE;QAAE,oBAAoB,EAAE,OAAO,CAAC;QAAC,oBAAoB,EAAE,OAAO,CAAA;KAAE,CAAA;IACtE,YAAY,CAAC,EAAE;QACb,OAAO,EAAE,OAAO,CAAA;QAChB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;QACtB,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,oBAAoB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;QACrC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;QACnB,mBAAmB,CAAC,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;QAC3D,4CAA4C;QAC5C,aAAa,CAAC,EAAE;YACd,eAAe,EAAE,MAAM,CAAA;YACvB,UAAU,EAAE,MAAM,CAAA;YAClB,OAAO,EAAE,UAAU,GAAG,qBAAqB,GAAG,qBAAqB,GAAG,SAAS,CAAA;SAChF,CAAA;KACF,CAAA;IACD,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;AAUD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAcpD;AAED,uCAAuC;AACvC,wBAAgB,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,iBAAiB,EAAE,CA4FpE;AAaD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAwDrE"}
@@ -110,6 +110,14 @@ export function diagnose(input) {
110
110
  hint: '指向它的加载会失败。如果客户端起不来,先看这里;正常情况下可以忽略。',
111
111
  });
112
112
  }
113
+ if (client.compatibility?.verdict === 'newer-than-verified') {
114
+ out.push({
115
+ level: 'warning',
116
+ title: `本机微信(${client.version})比本版本验证过的 ${client.compatibility.verifiedVersion} 更新`,
117
+ hint: '如果读不出数据,先怀疑版本变化——去 GitHub 看有没有更新版本的 weflow-cli,'
118
+ + '或把这份报告贴进 issue(版本差就是第一条线索)。',
119
+ });
120
+ }
113
121
  }
114
122
  if (!out.length) {
115
123
  out.push({
@@ -161,6 +169,14 @@ export function renderDiagnosticReport(input) {
161
169
  else {
162
170
  say(`运行中: ${yesNo(client.running)}`);
163
171
  say(`加载版本: ${client.version || `未知${client.note ? `(${client.note})` : ''}`}`);
172
+ if (client.compatibility) {
173
+ const v = client.compatibility.verdict;
174
+ const word = v === 'verified' ? '就是验证过的版本'
175
+ : v === 'newer-than-verified' ? '比验证过的更新(读不出数据先怀疑这里)'
176
+ : v === 'older-than-verified' ? '比验证过的更旧(一般兼容)'
177
+ : '无法判定(微信没在运行或探测失败)';
178
+ say(`与本版本的关系: ${word}(本版本验证过 ${client.compatibility.verifiedVersion},${client.compatibility.verifiedAt})`);
179
+ }
164
180
  if (client.dataDirs?.length)
165
181
  say(`客户端自报数据目录: ${client.dataDirs.join('、')}`);
166
182
  say(`与配置推出来的同一份: ${yesNo(client.dataDirMatchesConfig)}`);
@@ -1 +1 @@
1
- {"version":3,"file":"diagnosticReport.js","sourceRoot":"","sources":["../../../src/services/diagnosticReport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diagnosticReport.js","sourceRoot":"","sources":["../../../src/services/diagnosticReport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * 微信版本兼容:**单一事实源** + 纯比较。
3
+ *
4
+ * 背景(2026-10-25 起立此规矩):微信 4.x 几周一更,而"这版 weflow-cli 在哪个微信版本上
5
+ * 验证过"原来只写在 PROJECT_STATE 的一段散文里——CHANGELOG 不记、机器读不到,用户升级
6
+ * 微信后读不出数据时,第一件事("你的微信比我们验证过的新吗")没人答得上来。
7
+ *
8
+ * 三条接线,都只从这读、别处不许再写一份:
9
+ * - `capabilities --json` 的 `compatibility.wechat`(机器可读);
10
+ * - `check`(含 `--json` / `--report`)拿本机**实际加载**的版本与此比对,给出四种判定之一;
11
+ * - `docs/RELEASING.md` 的发布清单要求每个 CHANGELOG 版本段记录验证版本(来源就是这里)。
12
+ *
13
+ * 更新 `WECHAT_VERIFIED` 的门槛:**必须伴随一次真实数据验证**(不只是"进程起来了"),
14
+ * 验证日期与读了什么写进 `verifiedHow`。没验证就不许改——这正是这个常量存在的意义。
15
+ */
16
+ export declare const WECHAT_VERIFIED: {
17
+ readonly version: "4.1.15.56";
18
+ readonly verifiedAt: "2026-10-26";
19
+ readonly verifiedHow: string;
20
+ };
21
+ export type CompatVerdict = 'verified' | 'newer-than-verified' | 'older-than-verified' | 'unknown';
22
+ /**
23
+ * 四段数字逐段比较(`4.1.15.56` vs `4.1.15.60`)。缺段按 0 处理(`4.1.15` < `4.1.15.56`);
24
+ * 任一侧不是纯数字点分串就不猜——返回 `unknown`。纯函数。
25
+ */
26
+ export declare function compareWechatVersions(live: string | null | undefined, verified: string): CompatVerdict;
27
+ /** 判定的人类可读一句话(check 人类输出与 --report 共用,措辞只有这一份)。 */
28
+ export declare function describeCompatVerdict(verdict: CompatVerdict, verifiedVersion: string): string;
29
+ //# sourceMappingURL=wechatCompat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wechatCompat.d.ts","sourceRoot":"","sources":["../../../src/services/wechatCompat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,eAAe;;;;CAMlB,CAAA;AAEV,MAAM,MAAM,aAAa,GACrB,UAAU,GACV,qBAAqB,GACrB,qBAAqB,GACrB,SAAS,CAAA;AAEb;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,CAkBtG;AAED,mDAAmD;AACnD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,CAY7F"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * 微信版本兼容:**单一事实源** + 纯比较。
3
+ *
4
+ * 背景(2026-10-25 起立此规矩):微信 4.x 几周一更,而"这版 weflow-cli 在哪个微信版本上
5
+ * 验证过"原来只写在 PROJECT_STATE 的一段散文里——CHANGELOG 不记、机器读不到,用户升级
6
+ * 微信后读不出数据时,第一件事("你的微信比我们验证过的新吗")没人答得上来。
7
+ *
8
+ * 三条接线,都只从这读、别处不许再写一份:
9
+ * - `capabilities --json` 的 `compatibility.wechat`(机器可读);
10
+ * - `check`(含 `--json` / `--report`)拿本机**实际加载**的版本与此比对,给出四种判定之一;
11
+ * - `docs/RELEASING.md` 的发布清单要求每个 CHANGELOG 版本段记录验证版本(来源就是这里)。
12
+ *
13
+ * 更新 `WECHAT_VERIFIED` 的门槛:**必须伴随一次真实数据验证**(不只是"进程起来了"),
14
+ * 验证日期与读了什么写进 `verifiedHow`。没验证就不许改——这正是这个常量存在的意义。
15
+ */
16
+ export const WECHAT_VERIFIED = {
17
+ version: '4.1.15.56',
18
+ verifiedAt: '2026-10-26',
19
+ verifiedHow: '升级后不重新提钥,用旧密钥实读真实数据:sessions / messages / contacts / '
20
+ + 'daily-stats / fav / sns stats 全部返回数据(2026-10-19,记录见 PROJECT_STATE「Initialization」);'
21
+ + '2026-10-26 复核:sessions 实读仍正常、check 判定 verified',
22
+ };
23
+ /**
24
+ * 四段数字逐段比较(`4.1.15.56` vs `4.1.15.60`)。缺段按 0 处理(`4.1.15` < `4.1.15.56`);
25
+ * 任一侧不是纯数字点分串就不猜——返回 `unknown`。纯函数。
26
+ */
27
+ export function compareWechatVersions(live, verified) {
28
+ const parse = (v) => {
29
+ const parts = v.split('.');
30
+ if (!parts.length || !parts.every(p => /^\d+$/.test(p)))
31
+ return null;
32
+ return parts.map(Number);
33
+ };
34
+ if (!live)
35
+ return 'unknown';
36
+ const a = parse(live);
37
+ const b = parse(verified);
38
+ if (!a || !b)
39
+ return 'unknown';
40
+ const len = Math.max(a.length, b.length);
41
+ for (let i = 0; i < len; i++) {
42
+ const x = a[i] ?? 0;
43
+ const y = b[i] ?? 0;
44
+ if (x > y)
45
+ return 'newer-than-verified';
46
+ if (x < y)
47
+ return 'older-than-verified';
48
+ }
49
+ return 'verified';
50
+ }
51
+ /** 判定的人类可读一句话(check 人类输出与 --report 共用,措辞只有这一份)。 */
52
+ export function describeCompatVerdict(verdict, verifiedVersion) {
53
+ switch (verdict) {
54
+ case 'verified':
55
+ return `本机加载的微信就是本版本验证过的 ${verifiedVersion}`;
56
+ case 'newer-than-verified':
57
+ return `本机微信比本版本验证过的 ${verifiedVersion} 更新——如果读不出数据,先怀疑这里`
58
+ + '(去 GitHub 看有没有更新版本)';
59
+ case 'older-than-verified':
60
+ return `本机微信比本版本验证过的 ${verifiedVersion} 更旧——一般兼容,但没有专门验证过`;
61
+ default:
62
+ return `无法判定(微信没在运行或版本探测失败);本版本验证过的是 ${verifiedVersion}`;
63
+ }
64
+ }
65
+ //# sourceMappingURL=wechatCompat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wechatCompat.js","sourceRoot":"","sources":["../../../src/services/wechatCompat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,OAAO,EAAE,WAAW;IACpB,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,uDAAuD;UAChE,qFAAqF;UACrF,gDAAgD;CAC5C,CAAA;AAQV;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAA+B,EAAE,QAAgB;IACrF,MAAM,KAAK,GAAG,CAAC,CAAS,EAAmB,EAAE;QAC3C,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC1B,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAA;QACpE,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,CAAC,CAAA;IACD,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAA;IAC3B,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;IACrB,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA;IACzB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,SAAS,CAAA;IAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACnB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACnB,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,qBAAqB,CAAA;QACvC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,qBAAqB,CAAA;IACzC,CAAC;IACD,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,qBAAqB,CAAC,OAAsB,EAAE,eAAuB;IACnF,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,UAAU;YACb,OAAO,oBAAoB,eAAe,EAAE,CAAA;QAC9C,KAAK,qBAAqB;YACxB,OAAO,gBAAgB,eAAe,oBAAoB;kBACtD,qBAAqB,CAAA;QAC3B,KAAK,qBAAqB;YACxB,OAAO,gBAAgB,eAAe,oBAAoB,CAAA;QAC5D;YACE,OAAO,gCAAgC,eAAe,EAAE,CAAA;IAC5D,CAAC;AACH,CAAC"}
@@ -72,28 +72,28 @@ This is a best-effort synchronization recipe. It must not treat a timestamp as a
72
72
  ## Future Direction
73
73
 
74
74
  The existing CLI export is the compatibility layer for the first integration. The same contract is available through the versioned, read-only MCP tool `wechat.export_messages`. It accepts `contact` and optional `limit`, `from`, and `to` values, returns JSON directly, and never returns database paths or keys. It preserves the same authorization, local-only default, field semantics, and privacy rules rather than bypassing the CLI boundary.
75
-
76
- ## QQ Imports (qchat-cli)
77
-
78
- A second upstream now feeds this contract's vocabulary: `weflow-cli import qchat <file-or-dir>`
79
- reads a `qchat-cli` JSON export (`qce export --format json`) and lands it in a local private
80
- store `output/imports/qq/sessions/` (schema `weflow-import/qq-v1`, D-129). The store itself is
81
- not a stable contract; what is stable is the **field semantics**, which are exactly
82
- `weflow-message/v1`'s:
83
-
84
- | qchat-cli field | imported as | Notes |
85
- | --- | --- | --- |
86
- | `messageId` | `serverId` | Server-side globally unique (OneBot) - dedup/merge keys on it, no overlapping-window dance needed. |
87
- | `timestamp` | `createTime` | Unix seconds. |
88
- | `sender.id` | `senderUsername` | A QQ number; treat as sensitive, same level as a wxid. |
89
- | `sender.card` / `sender.name` | `senderName` | Group card first, then nickname. |
90
- | `content` / `rawMessage` | `parsedContent` / `rawContent` | Same guidance as the table above. |
91
- | (derived from `segments`) | `messageType` | OneBot segment types map onto the same stable names (`record→voice`, `reply→quote`, `json/xml→card`, …). |
92
- | — | `isSend` | Only present when the import ran with `--own-id`; absent means unknown, not false. |
93
-
94
- Consumers wired today (both opt-in, defaults unchanged): `chat-notes --source qq|all` produces
95
- QQ knowledge cards (names prefixed `QQ-`, same card shape and same downstream wiki consumer as
96
- WeChat conversations), and `search-index --include-imports` adds QQ sessions to the semantic
97
- index (record ids carry a `chat:qq:` segment, so a record's origin is always readable from the
98
- id; the phrase index derives from the semantic index and follows). Querying QQ sessions through
99
- `sessions` / `messages` is deliberately not part of this round (D-129).
75
+
76
+ ## QQ Imports (qchat-cli)
77
+
78
+ A second upstream now feeds this contract's vocabulary: `weflow-cli import qchat <file-or-dir>`
79
+ reads a `qchat-cli` JSON export (`qce export --format json`) and lands it in a local private
80
+ store `output/imports/qq/sessions/` (schema `weflow-import/qq-v1`, D-129). The store itself is
81
+ not a stable contract; what is stable is the **field semantics**, which are exactly
82
+ `weflow-message/v1`'s:
83
+
84
+ | qchat-cli field | imported as | Notes |
85
+ | --- | --- | --- |
86
+ | `messageId` | `serverId` | Server-side globally unique (OneBot) - dedup/merge keys on it, no overlapping-window dance needed. |
87
+ | `timestamp` | `createTime` | Unix seconds. |
88
+ | `sender.id` | `senderUsername` | A QQ number; treat as sensitive, same level as a wxid. |
89
+ | `sender.card` / `sender.name` | `senderName` | Group card first, then nickname. |
90
+ | `content` / `rawMessage` | `parsedContent` / `rawContent` | Same guidance as the table above. |
91
+ | (derived from `segments`) | `messageType` | OneBot segment types map onto the same stable names (`record→voice`, `reply→quote`, `json/xml→card`, …). |
92
+ | — | `isSend` | Only present when the import ran with `--own-id`; absent means unknown, not false. |
93
+
94
+ Consumers wired today (both opt-in, defaults unchanged): `chat-notes --source qq|all` produces
95
+ QQ knowledge cards (names prefixed `QQ-`, same card shape and same downstream wiki consumer as
96
+ WeChat conversations), and `search-index --include-imports` adds QQ sessions to the semantic
97
+ index (record ids carry a `chat:qq:` segment, so a record's origin is always readable from the
98
+ id; the phrase index derives from the semantic index and follows). Querying QQ sessions through
99
+ `sessions` / `messages` is deliberately not part of this round (D-129).
package/docs/DECISIONS.md CHANGED
@@ -4109,3 +4109,29 @@ ROADMAP P1 给 she-love-me 预留的同一条路;qchat-cli 因此**一行不
4109
4109
  weflow 的纪律——QQ 号与 wxid 同级敏感;知识卡与索引沿用各自既有的出境确认门。
4110
4110
  - `--source all` 在微信库不可用时**降级**为只处理 QQ(说一声,不是静默);`build
4111
4111
  --include-imports` 在没有微信库的机器上也能建索引(纯 QQ 用户是真实场景)。
4112
+
4113
+ ## D-130: 验证过的微信版本有单一事实源,check 主动比对,发布必须记录
4114
+
4115
+ **Status:** Active
4116
+
4117
+ **Decision.** 本包"最后用真实数据验证过的微信版本"只写在 `src/services/wechatCompat.ts` 的
4118
+ `WECHAT_VERIFIED` 一处(版本 + 日期 + 验证方式)。三条接线全部只读它:`capabilities --json`
4119
+ 的 `compatibility.wechat`(机器可读)、`check`(含 `--json` / `--report` / 人类输出)拿本机
4120
+ **实际加载**的版本与之比对给出四态判定(verified / newer-than-verified / older-than-verified /
4121
+ unknown——"微信没在跑"是 unknown,不是"没问题")、`docs/RELEASING.md` 的发布清单要求每个
4122
+ CHANGELOG 版本段记录验证版本(不涉及微信数据读取的版本写明"本版不涉及")。
4123
+
4124
+ **Reason.** 微信 4.x 几周一更,而"这版验证过哪个微信"原来只活在 PROJECT_STATE 的一段散文里:
4125
+ CHANGELOG 不记、机器读不到。用户升级微信后读不出数据时,第一个该被回答的问题("你的微信
4126
+ 比我们验证过的新吗")没有任何面能回答——issue 里的反复沟通就是这么来的。check 本来就在探测
4127
+ 实际加载的版本(D-107/D-125),差的只是把两边的数字放到一起说一句话。
4128
+
4129
+ **Consequences.**
4130
+ - 更新 `WECHAT_VERIFIED` 的门槛是**一次真实数据验证**(不只是"进程起来了"),验证日期与
4131
+ 读了什么写进 `verifiedHow`;没验证不许改——这正是常量存在的意义。
4132
+ - `compareWechatVersions` 是判定的唯一实现(纯函数:四段数字逐段比、缺段补零、形状不猜),
4133
+ 测试钉住四种判定与边界。
4134
+ - `newer-than-verified` 在 `check --report` 里升为 warning(它就是"读不出数据"的第一嫌疑人),
4135
+ 人类输出与 report 的措辞共用 `describeCompatVerdict` / 渲染器里的一份,不各写一套。
4136
+ - 判定是**对"本机此刻"的陈述**,不是兼容性承诺:说"verified"只是"这个组合验证过",
4137
+ "older"一般兼容但没有保证——措辞已按此收敛。