@postalsys/email-content 0.1.7 → 0.1.9

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 (121) hide show
  1. package/README.md +65 -12
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/analyze.d.ts +6 -0
  4. package/dist/analyze.d.ts.map +1 -1
  5. package/dist/analyze.js +27 -6
  6. package/dist/analyze.js.map +1 -1
  7. package/dist/annotate/agreement.d.ts +99 -0
  8. package/dist/annotate/agreement.d.ts.map +1 -0
  9. package/dist/annotate/agreement.js +126 -0
  10. package/dist/annotate/agreement.js.map +1 -0
  11. package/dist/annotate/client.d.ts +7 -19
  12. package/dist/annotate/client.d.ts.map +1 -1
  13. package/dist/annotate/client.js +28 -82
  14. package/dist/annotate/client.js.map +1 -1
  15. package/dist/annotate/http.d.ts +57 -0
  16. package/dist/annotate/http.d.ts.map +1 -0
  17. package/dist/annotate/http.js +99 -0
  18. package/dist/annotate/http.js.map +1 -0
  19. package/dist/annotate/llm.d.ts +17 -0
  20. package/dist/annotate/llm.d.ts.map +1 -1
  21. package/dist/annotate/llm.js +68 -36
  22. package/dist/annotate/llm.js.map +1 -1
  23. package/dist/annotate/probabilities.d.ts +48 -0
  24. package/dist/annotate/probabilities.d.ts.map +1 -0
  25. package/dist/annotate/probabilities.js +119 -0
  26. package/dist/annotate/probabilities.js.map +1 -0
  27. package/dist/annotate/providers.d.ts +26 -0
  28. package/dist/annotate/providers.d.ts.map +1 -0
  29. package/dist/annotate/providers.js +43 -0
  30. package/dist/annotate/providers.js.map +1 -0
  31. package/dist/annotate/store.d.ts +3 -0
  32. package/dist/annotate/store.d.ts.map +1 -1
  33. package/dist/annotate/store.js +3 -2
  34. package/dist/annotate/store.js.map +1 -1
  35. package/dist/annotate/typesafe-client.d.ts +64 -0
  36. package/dist/annotate/typesafe-client.d.ts.map +1 -0
  37. package/dist/annotate/typesafe-client.js +76 -0
  38. package/dist/annotate/typesafe-client.js.map +1 -0
  39. package/dist/annotate/typesafe-prompt.d.ts +64 -0
  40. package/dist/annotate/typesafe-prompt.d.ts.map +1 -0
  41. package/dist/annotate/typesafe-prompt.js +170 -0
  42. package/dist/annotate/typesafe-prompt.js.map +1 -0
  43. package/dist/canonical/text.d.ts +15 -3
  44. package/dist/canonical/text.d.ts.map +1 -1
  45. package/dist/canonical/text.js +20 -4
  46. package/dist/canonical/text.js.map +1 -1
  47. package/dist/classify/rules.d.ts +7 -0
  48. package/dist/classify/rules.d.ts.map +1 -1
  49. package/dist/classify/rules.js +67 -14
  50. package/dist/classify/rules.js.map +1 -1
  51. package/dist/cli/agreement.d.ts +27 -0
  52. package/dist/cli/agreement.d.ts.map +1 -0
  53. package/dist/cli/agreement.js +153 -0
  54. package/dist/cli/agreement.js.map +1 -0
  55. package/dist/cli/annotate.d.ts.map +1 -1
  56. package/dist/cli/annotate.js +28 -16
  57. package/dist/cli/annotate.js.map +1 -1
  58. package/dist/cli/audit.d.ts +12 -0
  59. package/dist/cli/audit.d.ts.map +1 -0
  60. package/dist/cli/audit.js +134 -0
  61. package/dist/cli/audit.js.map +1 -0
  62. package/dist/cli/disagreements.d.ts.map +1 -1
  63. package/dist/cli/disagreements.js +20 -3
  64. package/dist/cli/disagreements.js.map +1 -1
  65. package/dist/cli/evaluate.d.ts.map +1 -1
  66. package/dist/cli/evaluate.js +5 -70
  67. package/dist/cli/evaluate.js.map +1 -1
  68. package/dist/cli/main.js +28 -2
  69. package/dist/cli/main.js.map +1 -1
  70. package/dist/corpus/analyze.d.ts.map +1 -1
  71. package/dist/corpus/analyze.js +4 -5
  72. package/dist/corpus/analyze.js.map +1 -1
  73. package/dist/corpus/migrations/index.d.ts.map +1 -1
  74. package/dist/corpus/migrations/index.js +14 -0
  75. package/dist/corpus/migrations/index.js.map +1 -1
  76. package/dist/corpus/stats.d.ts +1 -0
  77. package/dist/corpus/stats.d.ts.map +1 -1
  78. package/dist/corpus/stats.js +1 -0
  79. package/dist/corpus/stats.js.map +1 -1
  80. package/dist/detect/patterns/forward-headers.json +24 -0
  81. package/dist/detect/patterns/html-clients.json +27 -0
  82. package/dist/detect/patterns/reply-headers.json +368 -0
  83. package/dist/detect/patterns.d.ts +19 -0
  84. package/dist/detect/patterns.d.ts.map +1 -1
  85. package/dist/detect/patterns.js +53 -25
  86. package/dist/detect/patterns.js.map +1 -1
  87. package/dist/detect/reply-header.d.ts.map +1 -1
  88. package/dist/detect/reply-header.js +12 -1
  89. package/dist/detect/reply-header.js.map +1 -1
  90. package/dist/detect/subject.d.ts +16 -0
  91. package/dist/detect/subject.d.ts.map +1 -0
  92. package/dist/detect/subject.js +22 -0
  93. package/dist/detect/subject.js.map +1 -0
  94. package/dist/eval/pattern-audit.d.ts +56 -0
  95. package/dist/eval/pattern-audit.d.ts.map +1 -0
  96. package/dist/eval/pattern-audit.js +111 -0
  97. package/dist/eval/pattern-audit.js.map +1 -0
  98. package/dist/eval/reference.d.ts +44 -0
  99. package/dist/eval/reference.d.ts.map +1 -0
  100. package/dist/eval/reference.js +87 -0
  101. package/dist/eval/reference.js.map +1 -0
  102. package/dist/index.d.ts +5 -1
  103. package/dist/index.d.ts.map +1 -1
  104. package/dist/index.js +7 -2
  105. package/dist/index.js.map +1 -1
  106. package/dist/mime/flowed.d.ts +14 -0
  107. package/dist/mime/flowed.d.ts.map +1 -0
  108. package/dist/mime/flowed.js +71 -0
  109. package/dist/mime/flowed.js.map +1 -0
  110. package/dist/mime/parse.js +2 -5
  111. package/dist/mime/parse.js.map +1 -1
  112. package/dist/segment/html-blocks.d.ts.map +1 -1
  113. package/dist/segment/html-blocks.js +11 -7
  114. package/dist/segment/html-blocks.js.map +1 -1
  115. package/dist/segment/text-blocks.d.ts.map +1 -1
  116. package/dist/segment/text-blocks.js +14 -3
  117. package/dist/segment/text-blocks.js.map +1 -1
  118. package/dist/types.d.ts +18 -3
  119. package/dist/types.d.ts.map +1 -1
  120. package/dist/types.js +2 -2
  121. package/package.json +8 -8
@@ -71,6 +71,7 @@ export interface CorpusStats {
71
71
  };
72
72
  }
73
73
  export declare function computeStats(store: CorpusStore): CorpusStats;
74
+ export declare function pct(value: number, total: number): string;
74
75
  /** Render the statistics as a Markdown report. Safe to share: contains no message content. */
75
76
  export declare function renderReport(stats: CorpusStats, root: string): string;
76
77
  //# sourceMappingURL=stats.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/corpus/stats.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,MAAM,WAAW,YAAY;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE;QACH,KAAK,EAAE,MAAM,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9F,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,UAAU,EAAE;QACR,cAAc,EAAE,MAAM,CAAC;QACvB,sBAAsB,EAAE,MAAM,CAAC;QAC/B,eAAe,EAAE,MAAM,CAAC;QACxB,0BAA0B,EAAE,MAAM,CAAC;KACtC,CAAC;IACF,SAAS,EAAE;QACP,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;QACtB,sBAAsB,EAAE,MAAM,CAAC;QAC/B,cAAc,EAAE,MAAM,CAAC;QACvB,wBAAwB,EAAE,MAAM,CAAC;KACpC,CAAC;IACF,UAAU,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,yBAAyB,EAAE,MAAM,CAAC;QAClC,mBAAmB,EAAE,MAAM,CAAC;QAC5B,qBAAqB,EAAE,MAAM,CAAC;KACjC,CAAC;IACF,gBAAgB,EAAE;QACd,gBAAgB,EAAE,MAAM,CAAC;QACzB,qBAAqB,EAAE,MAAM,CAAC;KACjC,CAAC;CACL;AA8DD,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CA8G5D;AAkCD,8FAA8F;AAC9F,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CA+GrE"}
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/corpus/stats.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,MAAM,WAAW,YAAY;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE;QACH,KAAK,EAAE,MAAM,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9F,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,UAAU,EAAE;QACR,cAAc,EAAE,MAAM,CAAC;QACvB,sBAAsB,EAAE,MAAM,CAAC;QAC/B,eAAe,EAAE,MAAM,CAAC;QACxB,0BAA0B,EAAE,MAAM,CAAC;KACtC,CAAC;IACF,SAAS,EAAE;QACP,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;QACtB,sBAAsB,EAAE,MAAM,CAAC;QAC/B,cAAc,EAAE,MAAM,CAAC;QACvB,wBAAwB,EAAE,MAAM,CAAC;KACpC,CAAC;IACF,UAAU,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,yBAAyB,EAAE,MAAM,CAAC;QAClC,mBAAmB,EAAE,MAAM,CAAC;QAC5B,qBAAqB,EAAE,MAAM,CAAC;KACjC,CAAC;IACF,gBAAgB,EAAE;QACd,gBAAgB,EAAE,MAAM,CAAC;QACzB,qBAAqB,EAAE,MAAM,CAAC;KACjC,CAAC;CACL;AA8DD,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CA8G5D;AAED,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAKxD;AA2BD,8FAA8F;AAC9F,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CA+GrE"}
@@ -9,6 +9,7 @@
9
9
  */
10
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
11
  exports.computeStats = computeStats;
12
+ exports.pct = pct;
12
13
  exports.renderReport = renderReport;
13
14
  function toDistribution(rows, total, limit = 25) {
14
15
  return rows
@@ -1 +1 @@
1
- {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/corpus/stats.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/corpus/stats.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,30 @@
22
22
  "flags": "i",
23
23
  "pattern": "^\\s*-{2,}\\s*(Weitergeleitete Nachricht|Message transf.r.|Mensaje reenviado|Messaggio inoltrato|Doorgestuurd bericht|Edastatud kiri|Edasisaadetud (sõnumi|kirja).{0,20}|Пересылаемое сообщение)\\s*-{2,}\\s*$"
24
24
  },
25
+ {
26
+ "id": "forwarded_message_localised_more",
27
+ "lang": "*",
28
+ "comment": "The 'Forwarded message' marker as SnappyMail translates it, collected from test/fixtures/clients.",
29
+ "strength": 0.95,
30
+ "flags": "i",
31
+ "pattern": "^\\s*-{2,}\\s*(پیام ارسال شده|رسالة معاد توجيهها|전달된 메시지|Προωθημένο μήνυμα|Препратено съобщение|Переслане повідомлення|Перасланае паведамленне|转发邮件|転送されたメッセージ|Áframsend skilaboð|Birbidalitako mezua|Mensagem Encaminhada|Persiųstas pranešimas|Pesan terusan|Posredovano sporočilo|Preposlaná správa|Thư được chuyển tiếp|Továbbított üzenet|Videresendt meddelelse|Videresendt melding|Yönlendirilmiş İleti|轉寄郵件|Välitetty viesti|Wiadomość przekazana|Пересланное сообщение|Vidarebefordrat)\\s*-{2,}\\s*$"
32
+ },
33
+ {
34
+ "id": "beginning_of_forwarded_message",
35
+ "lang": "*",
36
+ "comment": "Yandex Mail's forward marker, in English and Russian: '-------- Beginning of forwarded message --------'.",
37
+ "strength": 0.97,
38
+ "flags": "i",
39
+ "pattern": "^\\s*-{2,}\\s*(Beginning of forwarded message|Начало переадресованного сообщения)\\s*-{2,}\\s*$"
40
+ },
41
+ {
42
+ "id": "begin_forwarded_message_dashed",
43
+ "lang": "*",
44
+ "comment": "Cypht's forward marker, translated with its interface: '----- begin forwarded message -----', '----- début du message transféré -----'. Collected from test/fixtures/clients/cypht.",
45
+ "strength": 0.95,
46
+ "flags": "i",
47
+ "pattern": "^\\s*-{2,}\\s*(begin forwarded message|göndərilmiş mesajın başlanğıcı|Nachrichtweiterleiten beginnen|comenzar mensaje de reenvío|edastatud kirja algus|پیام ارسالی را شروع کنید|début du message transféré|Mulai pesan yang diteruskan|Begin geforward bericht|początek przekazanej wiadomości|iniciar mensagem encaminhada)\\s*-{2,}\\s*$"
48
+ },
25
49
  {
26
50
  "id": "original_message_forward",
27
51
  "lang": "*",
@@ -147,6 +147,33 @@
147
147
  "selector": ".yahoo_quoted",
148
148
  "prevalence": 0.002
149
149
  },
150
+ {
151
+ "id": "gmx_sub_body_container",
152
+ "client": "gmx",
153
+ "role": "quote",
154
+ "strength": 0.95,
155
+ "selector": "div#sub-body-container",
156
+ "prevalence": 0,
157
+ "comment": "GMX and web.de webmail wrap the quoted message in this container, which opens with Sent/From/To/Subject lines, one per element. Not seen in the working corpus, hence prevalence 0; captured in test/fixtures/clients/gmx."
158
+ },
159
+ {
160
+ "id": "lark_history_quote",
161
+ "client": "lark",
162
+ "role": "quote",
163
+ "strength": 0.95,
164
+ "selector": "div.history-quote-wrapper",
165
+ "prevalence": 0,
166
+ "comment": "Lark Mail wraps quoted history in this container. Not seen in the working corpus; captured in test/fixtures/clients/lark."
167
+ },
168
+ {
169
+ "id": "lark_history_quote_meta",
170
+ "client": "lark",
171
+ "role": "attribution",
172
+ "strength": 0.95,
173
+ "selector": ".history-quote-meta-wrapper",
174
+ "prevalence": 0,
175
+ "comment": "Lark Mail's attribution box above quoted history, written 'OnTue, Sep 29, 2026, 12:15 <address> wrote:' with no space after On."
176
+ },
150
177
  {
151
178
  "id": "zimbra_separator",
152
179
  "client": "zimbra",
@@ -16,6 +16,14 @@
16
16
  "flags": "i",
17
17
  "pattern": "^\\s*On\\s+.{3,200}?(\\b\\d{4}\\b|\\b\\d{1,2}:\\d{2}\\b).{0,80}[,:]?\\s*$"
18
18
  },
19
+ {
20
+ "id": "on_weekday_wrote_nospace_en",
21
+ "lang": "en",
22
+ "comment": "Lark Mail drops the space after On: 'OnTue, Sep 29, 2026, 12:15 <address> wrote:'. Anchored on a weekday name so ordinary words starting with On do not match.",
23
+ "strength": 0.95,
24
+ "flags": "i",
25
+ "pattern": "^\\s*On(Mon|Tue|Wed|Thu|Fri|Sat|Sun)\\w*,.{3,200}?\\bwrote\\s*:\\s*$"
26
+ },
19
27
  {
20
28
  "id": "x_wrote_trailing",
21
29
  "lang": "en",
@@ -117,6 +125,318 @@
117
125
  "flags": "i",
118
126
  "pattern": "^\\s*\\d{4}[-/]\\d{1,2}[-/]\\d{1,2}.{0,120}<[^>]+@[^>]+>.{0,40}:\\s*$"
119
127
  },
128
+ {
129
+ "id": "dmy_time_addr_colon",
130
+ "lang": "*",
131
+ "comment": "Yandex Mail's attribution: day first date, time, name and address, then a colon and no verb: '29.09.2026, 11:30, \"Marta Kask\" <address>:', or with the address in parentheses in a forward.",
132
+ "strength": 0.95,
133
+ "flags": "i",
134
+ "pattern": "^\\s*\\d{1,2}\\.\\d{1,2}\\.\\d{4},\\s*\\d{1,2}:\\d{2},\\s*.{0,120}?(<[^>\\s]+@[^>\\s]+>|\\([^)\\s]+@[^)\\s]+\\))\\s*:\\s*$"
135
+ },
136
+ {
137
+ "id": "el_x_va_escriure_ca",
138
+ "lang": "ca",
139
+ "comment": "Catalan, as Roundcube writes it: 'El 2026-09-29 13:55, Marta Kask va escriure:'.",
140
+ "strength": 0.95,
141
+ "flags": "i",
142
+ "pattern": "^\\s*El\\s+.{3,200}?va\\s+escriure\\s*:\\s*$"
143
+ },
144
+ {
145
+ "id": "o_x_escribiu_gl",
146
+ "lang": "gl",
147
+ "comment": "Galician, as Roundcube writes it: 'O 2026-09-29 11:46, Marta Kask escribiu:'.",
148
+ "strength": 0.95,
149
+ "flags": "i",
150
+ "pattern": "^\\s*O\\s+.{3,200}?escribiu\\s*:\\s*$"
151
+ },
152
+ {
153
+ "id": "me_x_shkroi_sq",
154
+ "lang": "sq",
155
+ "comment": "Albanian, as Roundcube writes it: 'Më 2026-09-29 12:36, Marta Kask shkroi:'.",
156
+ "strength": 0.95,
157
+ "flags": "i",
158
+ "pattern": "^\\s*Më\\s+.{3,200}?shkroi\\s*:\\s*$"
159
+ },
160
+ {
161
+ "id": "na_x_napisa_bg_sr_mk",
162
+ "lang": "*",
163
+ "comment": "Bulgarian, Serbian and Macedonian, as Roundcube writes them: 'На 2026-09-29 12:28, Marta Kask написа:', 'Дана ... написа:'. Roundcube's Macedonian template ships unfilled ('На $дата,$праќач напиша:') and is still an attribution.",
164
+ "strength": 0.95,
165
+ "flags": "i",
166
+ "pattern": "^\\s*(На|Дана)\\s+.{3,200}?(написа|напиша)\\s*:\\s*$"
167
+ },
168
+ {
169
+ "id": "dana_x_je_napisao_hr",
170
+ "lang": "hr",
171
+ "comment": "Croatian, as Roundcube writes it: 'Dana 2026-09-29 12:31, Marta Kask je napisao(la):'.",
172
+ "strength": 0.95,
173
+ "flags": "i",
174
+ "pattern": "^\\s*Dana\\s+.{3,200}?je\\s+napisao(\\(la\\)|la)?\\s*:\\s*$"
175
+ },
176
+ {
177
+ "id": "x_napisa_dated_cyrillic",
178
+ "lang": "*",
179
+ "comment": "Ukrainian, Belarusian, Bulgarian and Serbian without an opener, verb followed by an optional date: 'Marta Kask напісаў 2026-09-29 12:28:', '... \"Marta Kask\" <...> написа:'. Requires a clock time on the line, since the bare verb also occurs in prose.",
180
+ "strength": 0.9,
181
+ "flags": "i",
182
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?(написав|напісаў|написал[аи]?|написа|напиша).{0,60}?\\s*[::៖]{1,2}\\s*$"
183
+ },
184
+ {
185
+ "id": "x_egrapse_el",
186
+ "lang": "el",
187
+ "comment": "Greek: 'Στις 2026-09-29 11:47, Marta Kask έγραψε:'. Requires a clock time on the line, which attribution lines carry and prose rarely does.",
188
+ "strength": 0.9,
189
+ "flags": "i",
190
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?έγραψε\\s*[::៖]{1,2}\\s*$"
191
+ },
192
+ {
193
+ "id": "x_idatzi_eu",
194
+ "lang": "eu",
195
+ "comment": "Basque: '2026-09-29 11:43 egunean, Marta Kask-(e)k idatzi du:'. Requires a clock time on the line, which attribution lines carry and prose rarely does.",
196
+ "strength": 0.9,
197
+ "flags": "i",
198
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?(idatzi\\s+du|idatzia)\\s*[::៖]{1,2}\\s*$"
199
+ },
200
+ {
201
+ "id": "x_kirjoitti_dated_fi",
202
+ "lang": "fi",
203
+ "comment": "Finnish with the date after the verb: 'Marta Kask kirjoitti 2026-09-29 12:15:'. The older x_kirjoitti_fi only accepts the verb right before the colon. Requires a clock time on the line, which attribution lines carry and prose rarely does.",
204
+ "strength": 0.9,
205
+ "flags": "i",
206
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?kirjoitti.{0,60}?\\s*[::៖]{1,2}\\s*$"
207
+ },
208
+ {
209
+ "id": "x_schreef_dated_nl",
210
+ "lang": "nl",
211
+ "comment": "Dutch without the Op opener: 'Marta Kask schreef op 2026-09-29 11:46:'. Requires a clock time on the line, since 'schreef' is ordinary prose.",
212
+ "strength": 0.9,
213
+ "flags": "i",
214
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?schreef.{0,80}?\\s*[::៖]{1,2}\\s*$"
215
+ },
216
+ {
217
+ "id": "x_skrev_dated_da_nb",
218
+ "lang": "*",
219
+ "comment": "Danish and Norwegian without the Den opener: '\"Marta Kask\" <...> skrev 29. september 2026 kl. 10:10:', including SnappyMail's doubled colon. Requires a clock time on the line, which attribution lines carry and prose rarely does.",
220
+ "strength": 0.9,
221
+ "flags": "i",
222
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?skrev.{0,80}?\\s*[::៖]{1,2}\\s*$"
223
+ },
224
+ {
225
+ "id": "x_skrifadi_is",
226
+ "lang": "is",
227
+ "comment": "Icelandic: 'September 29, 2026 at 10:06 AM, skrifaði \"Marta Kask\" <...>:'. Requires a clock time on the line, which attribution lines carry and prose rarely does.",
228
+ "strength": 0.9,
229
+ "flags": "i",
230
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?skrifaði.{0,80}?\\s*[::៖]{1,2}\\s*$"
231
+ },
232
+ {
233
+ "id": "x_irta_hu",
234
+ "lang": "hu",
235
+ "comment": "Hungarian: '2026-09-29 11:47 időpontban Marta Kask ezt írta:'. Requires a clock time on the line, which attribution lines carry and prose rarely does.",
236
+ "strength": 0.9,
237
+ "flags": "i",
238
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?(ezt\\s+)?írta\\s*[::៖]{1,2}\\s*$"
239
+ },
240
+ {
241
+ "id": "x_menulis_id",
242
+ "lang": "id",
243
+ "comment": "Indonesian: 'Pada 2026-09-29 11:47, Marta Kask menulis:', SnappyMail '... ditulis:'. Requires a clock time on the line, which attribution lines carry and prose rarely does.",
244
+ "strength": 0.9,
245
+ "flags": "i",
246
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?(menulis|ditulis)\\s*[::៖]{1,2}\\s*$"
247
+ },
248
+ {
249
+ "id": "x_kakimashita_ja",
250
+ "lang": "ja",
251
+ "comment": "Japanese: '2026-09-29 12:33 に Marta Kask さんは書きました:'. Requires a clock time on the line, which attribution lines carry and prose rarely does.",
252
+ "strength": 0.9,
253
+ "flags": "i",
254
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?(書きました|書き込みました)\\s*[::៖]{1,2}\\s*$"
255
+ },
256
+ {
257
+ "id": "x_dawera_ka",
258
+ "lang": "ka",
259
+ "comment": "Georgian: '2026-09-29 11:46-ში, Marta Kask დაწერა:'. Requires a clock time on the line, which attribution lines carry and prose rarely does.",
260
+ "strength": 0.9,
261
+ "flags": "i",
262
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?დაწერა\\s*[::៖]{1,2}\\s*$"
263
+ },
264
+ {
265
+ "id": "x_sarser_km",
266
+ "lang": "km",
267
+ "comment": "Khmer, which ends the line with its own colon sign: 'កាលពី​ថ្ងៃ 2026-09-29 12:33, Marta Kask បាន​សរសេរ៖'. Requires a clock time on the line, which attribution lines carry and prose rarely does.",
268
+ "strength": 0.9,
269
+ "flags": "i",
270
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?បាន[​\\s]*សរសេរ\\s*[::៖]{1,2}\\s*$"
271
+ },
272
+ {
273
+ "id": "x_nivisi_ku",
274
+ "lang": "ku",
275
+ "comment": "Kurdish: 'Di 2026-09-29 11:48 de, şandyar nivîsî:'. Requires a clock time on the line, which attribution lines carry and prose rarely does.",
276
+ "strength": 0.9,
277
+ "flags": "i",
278
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?nivîsî\\s*[::៖]{1,2}\\s*$"
279
+ },
280
+ {
281
+ "id": "x_rakstija_lv",
282
+ "lang": "lv",
283
+ "comment": "Latvian: 'Marta Kask @ 2026-09-29 12:35 rakstīja:', SnappyMail writes it without the macron. Requires a clock time on the line, which attribution lines carry and prose rarely does.",
284
+ "strength": 0.9,
285
+ "flags": "i",
286
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?rakst[īi]ja\\s*[::៖]{1,2}\\s*$"
287
+ },
288
+ {
289
+ "id": "x_parase_lt",
290
+ "lang": "lt",
291
+ "comment": "Lithuanian: '2026 m. rugsėjo 29 d. 10:08, \"Marta Kask\" <...> parašė:'. Requires a clock time on the line, which attribution lines carry and prose rarely does.",
292
+ "strength": 0.9,
293
+ "flags": "i",
294
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?parašė\\s*[::៖]{1,2}\\s*$"
295
+ },
296
+ {
297
+ "id": "x_napisal_dated_pl",
298
+ "lang": "pl",
299
+ "comment": "Polish without the W dniu opener: '29 września 2026 10:11, \"Marta Kask\" <...> napisał/-a/:'. Requires a clock time on the line, which attribution lines carry and prose rarely does.",
300
+ "strength": 0.9,
301
+ "flags": "i",
302
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?napisał\\S*\\s*[::៖]{1,2}\\s*$"
303
+ },
304
+ {
305
+ "id": "x_napisal_sl",
306
+ "lang": "sl",
307
+ "comment": "Slovenian: '29. september 2026 ob 10:15, \"Marta Kask\" <...> je napisal/-a:'. Requires a clock time on the line, which attribution lines carry and prose rarely does.",
308
+ "strength": 0.9,
309
+ "flags": "i",
310
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?(je\\s+)?napisal\\S*\\s*[::៖]{1,2}\\s*$"
311
+ },
312
+ {
313
+ "id": "x_je_napisal_nocolon_sl",
314
+ "lang": "sl",
315
+ "comment": "Slovenian as Roundcube writes it, with no colon: '2026-09-29 11:50, je Marta Kask napisal'. Must start with the date, since without a colon the shape is otherwise ordinary prose.",
316
+ "strength": 0.9,
317
+ "flags": "i",
318
+ "pattern": "^\\s*\\d{4}-\\d{2}-\\d{2}[ T]\\d{1,2}:\\d{2},\\s+je\\s+.{1,120}?\\s+napisal(a|\\/-a)?\\s*:?\\s*$"
319
+ },
320
+ {
321
+ "id": "x_viet_vi",
322
+ "lang": "vi",
323
+ "comment": "Vietnamese: 'Vào ngày 2026-09-29 12:27, Marta Kask viết:', SnappyMail '... đã viết là:'. Requires a clock time on the line, which attribution lines carry and prose rarely does.",
324
+ "strength": 0.9,
325
+ "flags": "i",
326
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?(viết|đã\\s+viết\\s+là)\\s*[::៖]{1,2}\\s*$"
327
+ },
328
+ {
329
+ "id": "x_escribio_dated_es",
330
+ "lang": "es",
331
+ "comment": "Spanish without the El opener: '29 de septiembre de 2026 a las 10:01, \"Marta Kask\" <...> escribió:'. Requires a clock time on the line, which attribution lines carry and prose rarely does.",
332
+ "strength": 0.9,
333
+ "flags": "i",
334
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?escribi[oó]\\s*[::៖]{1,2}\\s*$"
335
+ },
336
+ {
337
+ "id": "x_escreveu_dated_pt",
338
+ "lang": "pt",
339
+ "comment": "Portuguese without the Em opener: '29 de setembro de 2026 às 10:12, \"Marta Kask\" <...> escreveu:'. Requires a clock time on the line, which attribution lines carry and prose rarely does.",
340
+ "strength": 0.9,
341
+ "flags": "i",
342
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?escreveu\\s*[::៖]{1,2}\\s*$"
343
+ },
344
+ {
345
+ "id": "x_a_ecrit_dated_fr",
346
+ "lang": "fr",
347
+ "comment": "French without the Le opener: '29 septembre 2026 à 10:04 \"Marta Kask\" <...> a écrit:'. Requires a clock time on the line, which attribution lines carry and prose rarely does.",
348
+ "strength": 0.9,
349
+ "flags": "i",
350
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?a\\s+écrit\\s*[::៖]{1,2}\\s*$"
351
+ },
352
+ {
353
+ "id": "x_scrive_dated_it",
354
+ "lang": "it",
355
+ "comment": "Italian without the Il opener: '29 settembre 2026 alle ore 10:07, \"Marta Kask\" <...> scrive:'. Requires a clock time on the line, which attribution lines carry and prose rarely does.",
356
+ "strength": 0.9,
357
+ "flags": "i",
358
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?(scrive|ha\\s+scritto)\\s*[::៖]{1,2}\\s*$"
359
+ },
360
+ {
361
+ "id": "x_a_scris_ro",
362
+ "lang": "ro",
363
+ "comment": "Romanian: '29 septembrie 2026 la 10:13, \"Marta Kask\" <...> a scris:'. Requires a clock time on the line, which attribution lines carry and prose rarely does.",
364
+ "strength": 0.9,
365
+ "flags": "i",
366
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?a\\s+scris\\s*[::៖]{1,2}\\s*$"
367
+ },
368
+ {
369
+ "id": "x_yazdi_tr",
370
+ "lang": "tr",
371
+ "comment": "Turkish: '29 Eylül 2026 10:16, \"Marta Kask\" <...> yazdı:'. Requires a clock time on the line, which attribution lines carry and prose rarely does.",
372
+ "strength": 0.9,
373
+ "flags": "i",
374
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?yazdı\\s*[::៖]{1,2}\\s*$"
375
+ },
376
+ {
377
+ "id": "x_bonaen_ko",
378
+ "lang": "ko",
379
+ "comment": "Korean: '2026년 9월 29일 오전 10:08에 \"Marta Kask\" <...>이(가) 보낸 메시지:'. Requires a clock time on the line, which attribution lines carry and prose rarely does.",
380
+ "strength": 0.9,
381
+ "flags": "i",
382
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?(보낸\\s*메시지|작성)\\s*[::៖]{1,2}\\s*$"
383
+ },
384
+ {
385
+ "id": "x_xiedao_zh",
386
+ "lang": "zh",
387
+ "comment": "Chinese, simplified and traditional, with an ASCII or full width colon: '2026年9月29日 10:18, \"Marta Kask\" <...> 写到:'. Requires a clock time on the line, which attribution lines carry and prose rarely does.",
388
+ "strength": 0.9,
389
+ "flags": "i",
390
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?(写到|寫到|写道|寫道)\\s*[::៖]{1,2}\\s*$"
391
+ },
392
+ {
393
+ "id": "x_nevesht_fa",
394
+ "lang": "fa",
395
+ "comment": "Persian: '۷ مهر ۱۴۰۵ ساعت ۱۰:۰۳, \"Marta Kask\" <...> نوشت:'. The digit lookahead accepts Persian and Arabic-Indic digits. Requires a clock time on the line, which attribution lines carry and prose rarely does.",
396
+ "strength": 0.9,
397
+ "flags": "i",
398
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?نوشت\\s*[::៖]{1,2}\\s*$"
399
+ },
400
+ {
401
+ "id": "katab_x_ar",
402
+ "lang": "ar",
403
+ "comment": "Arabic, as Roundcube writes it, verb first: 'كتب Marta Kask في 2026-09-29 11:43:'.",
404
+ "strength": 0.9,
405
+ "flags": "i",
406
+ "pattern": "^\\s*كتب\\s+.{1,160}?[0-9٠-٩].{0,60}:\\s*$"
407
+ },
408
+ {
409
+ "id": "katav_x_he",
410
+ "lang": "he",
411
+ "comment": "Hebrew, as Roundcube writes it, in logical order with the colon first: ':כתב Marta Kask, 2026-09-29 12:30 בתאריך'.",
412
+ "strength": 0.9,
413
+ "flags": "i",
414
+ "pattern": "^\\s*:\\s*כתב\\s+.{1,160}?\\d{4}.{0,60}$"
415
+ },
416
+ {
417
+ "id": "x_skrivet_gant_br",
418
+ "lang": "br",
419
+ "comment": "Breton: \"D'an/ar 2026-09-29 13:54 eo bet skrivet gant Marta Kask:\". Requires a clock time on the line, which attribution lines carry and prose rarely does.",
420
+ "strength": 0.9,
421
+ "flags": "i",
422
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?skrivet\\s+gant.{1,120}?\\s*[::៖]{1,2}\\s*$"
423
+ },
424
+ {
425
+ "id": "dated_addr_said_nocolon",
426
+ "lang": "*",
427
+ "comment": "Cypht's attribution: date, name, address, then a verb with no colon, in many languages ('said', 'sagte', 'a dit', 'mengatakan', 'napisał(a)', ...): 'Am Tue, 29 Sep 2026 08:09:34 +0000Marta Kask marta.kask@example.com sagte'. Requires both a date and an address on the line, since without a colon the verb alone is prose.",
428
+ "strength": 0.9,
429
+ "flags": "i",
430
+ "pattern": "^\\s*(?=.*\\d{1,2}:\\d{2})(?=[^@]*[^\\s@]@[^\\s@]+\\.[a-z]{2,}).{10,250}?\\s(said|sagte|ütles|ha scritto|disse|bildirib|گفت|zei|a scris|kirjutas|schreef|escribió|a écrit|a dit|mengatakan|napisał\\(a\\)|napisał)\\s*:?\\s*$"
431
+ },
432
+ {
433
+ "id": "op_x_skreau_fy",
434
+ "lang": "fy",
435
+ "comment": "Frisian, as Roundcube writes it: 'Op 2026-09-29 13:56, skreau Marta Kask:'.",
436
+ "strength": 0.95,
437
+ "flags": "i",
438
+ "pattern": "^\\s*Op\\s+.{3,200}?skreau\\s+.{1,120}:\\s*$"
439
+ },
120
440
  {
121
441
  "id": "original_message_separator",
122
442
  "lang": "*",
@@ -124,6 +444,54 @@
124
444
  "flags": "i",
125
445
  "pattern": "^\\s*-{2,}\\s*(Original Message|Originalnachricht|Message d'origine|Mensaje original|Messaggio originale|Oorspronkelijk bericht|Algne teade|Исходное сообщение)\\s*-{2,}\\s*$"
126
446
  },
447
+ {
448
+ "id": "x_wrote_dated_celtic_nordic_turkic",
449
+ "lang": "*",
450
+ "comment": "Welsh 'Ar 2026-09-29 14:04, ysgrifennodd Marta Kask:', Irish 'Ar an ..., scríobh Marta Kask:', Nynorsk 'Den ... skreiv Marta Kask:', Turkish '..., Marta Kask yazmış:', Uzbek 'Marta Kask yozgan kun 2026-09-29 14:04:'. Requires a clock time on the line, which attribution lines carry and prose rarely does.",
451
+ "strength": 0.9,
452
+ "flags": "i",
453
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?(ysgrifennodd|scríobh|skreiv|yazmış|yozgan).{0,80}?\\s*:\\s*$"
454
+ },
455
+ {
456
+ "id": "x_napsal_dated_cs_sk_az",
457
+ "lang": "*",
458
+ "comment": "Czech 'Dne 2026-09-29 14:24, Marta Kask napsal:', Slovak 'Dňa ... Marta Kask napísal(a):', Azerbaijani '2026-09-29 14:24 tarixdə, Marta Kask yazıb:'. Requires a clock time on the line, which attribution lines carry and prose rarely does.",
459
+ "strength": 0.9,
460
+ "flags": "i",
461
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?(napsal(a)?|napísal(\\(a\\)|a)?|yazıb)\\s*:\\s*$"
462
+ },
463
+ {
464
+ "id": "x_wrote_dated_more",
465
+ "lang": "*",
466
+ "comment": "More Roundcube translations: Bosnian 'je napisao/la:', Esperanto 'skribis:', Estonian '2026-09-29 14:26 kirjutas Marta Kask:', Persian 'نوشته است:', Faroese 'skrivaði Marta Kask:', Interlingua 'ha scribite:', Korean '쓴 내용:', Luxembourgish 'schreift:', Lithuanian 'rašė:', Marathi 'लिहीले :', Armenian 'գրեց.' (ending in a full stop), and Uyghur 'يازدى:', whose template ships unfilled. Requires a clock time on the line, which attribution lines carry and prose rarely does.",
467
+ "strength": 0.9,
468
+ "flags": "i",
469
+ "pattern": "^\\s*(?=.*[0-9٠-٩۰-۹]{1,2}[:.][0-9٠-٩۰-۹]{2}).{3,200}?(je\\s+napisao\\/la|skribis|kirjutas|نوشته\\s+است|skrivaði|ha\\s+scribite|쓴\\s*내용|schreift|rašė|लिहीले|գրեց|يازدى).{0,80}?\\s*[:.։]\\s*$"
470
+ },
471
+ {
472
+ "id": "pada_x_menulis_nocolon_ms",
473
+ "lang": "ms",
474
+ "comment": "Malay as Roundcube writes it, with no colon: 'Pada 2026-09-29 14:27, Marta Kask menulis'. Anchored on the opener and a timestamp, since without a colon the verb alone is prose.",
475
+ "strength": 0.9,
476
+ "flags": "i",
477
+ "pattern": "^\\s*Pada\\s+\\d{4}-\\d{2}-\\d{2}[ T]\\d{1,2}:\\d{2},\\s+.{1,120}?\\s+menulis\\s*:?\\s*$"
478
+ },
479
+ {
480
+ "id": "roundcube_unfilled_template",
481
+ "lang": "*",
482
+ "comment": "Roundcube's Uyghur attribution template ships with its placeholders unfilled: 'date$ دا، sender$ يازدى:'. The literal placeholders cannot occur in prose.",
483
+ "strength": 0.95,
484
+ "flags": "",
485
+ "pattern": "^\\s*date\\$.{0,40}sender\\$.{0,60}:\\s*$"
486
+ },
487
+ {
488
+ "id": "original_message_separator_localised",
489
+ "lang": "*",
490
+ "comment": "The 'Original Message' separator as Roundcube and SnappyMail translate it, collected from test/fixtures/clients. Roundcube uses it to introduce forwards, which the classifier turns into forwarded content when the subject marks a forward.",
491
+ "strength": 0.97,
492
+ "flags": "i",
493
+ "pattern": "^\\s*-{2,}\\s*(원본 메시지|ಮೂಲ ಸಂದೇಶ|הודעה מקורית|Αρχικό μήνυμα|الرسالة الأساسية|Оригинална порака|ორიგინალი შეტყობინება|Оригінальне повідомлення|Арыгінальнае паведамленне|原始邮件|元のメッセージ|Alkuperäinen viesti|An teachtaireacht bhunaidh|Eredeti üzenet|Izvorna poruka|Jatorrizko mezua|Kemennadenn orin|Missatge Original|Neges Wreiddiol|Oarspronklik Berjocht|Oorspronkelijke bericht|Opprinnelig melding|Originalus laiškas|Orijinal məktub|Peyama orîjînal|Sākotnējā vēstule|Upprunaleg skilaboð|Mesajul original|खरा संदेश|Оригинално писмо|原始郵件|សារ​ដើម|Mensaxe orixinal|Originalna poruka|Původní zpráva|Original besked|Originala mesaĝo|Esialgne kiri|پیام اصلی|Uppruna boð|Courriel original|Առաջին հաղորդագրությունը|Message original|Pesan Asli|Original-Message|യഥാര്‍ഥ സന്ദേശം|യഥാര്‍ഥ സന്ദേശം|Mesej Asal|Orgineel bericht|Opphavleg melding|Wiadomość oryginalna|Mensagem original|Mesaj original|Pôvodná správa|Izvorno sporočilo|Mesazhi Origjinal|Оригинална порука|Ursprungligt meddelande|ข้อความเดิม|Özgün ileti|ئەسلىي خەت|Asl xat|Thư gốc)\\s*-{2,}\\s*$"
494
+ },
127
495
  {
128
496
  "id": "reply_message_separator",
129
497
  "lang": "*",
@@ -67,6 +67,25 @@ export declare function countPatterns(sets: PatternSets): number;
67
67
  export declare function assertPatternsLoaded(sets: PatternSets, source: string): void;
68
68
  /** Load and compile all pattern sets. Cached after the first call. */
69
69
  export declare function loadPatterns(overrideDir?: string | null): PatternSets;
70
+ /** Where the pattern sets used by `extract()` and `analyze()` came from. */
71
+ export interface PatternSource {
72
+ /** The override directory named by EMAIL_CONTENT_PATTERNS, or null for the bundled sets only. */
73
+ override: string | null;
74
+ /**
75
+ * Files actually read from the override directory. Any file not listed came from the bundled
76
+ * set, because an override directory may replace only some files. Empty when `override` is
77
+ * null, and also when the directory exists but holds none of the expected file names.
78
+ */
79
+ overriddenFiles: string[];
80
+ }
81
+ /**
82
+ * Report which pattern source is in effect, so a caller can log it at startup.
83
+ *
84
+ * The override is read from an unprefixed environment variable, so it can be set for a host
85
+ * process without anyone noticing. Nothing in the extraction result says the patterns differ from
86
+ * the bundled ones; this is the only way to find out.
87
+ */
88
+ export declare function patternSource(): PatternSource;
70
89
  /** Reset the cache. Used by tests that swap pattern directories. */
71
90
  export declare function resetPatternCache(): void;
72
91
  //# sourceMappingURL=patterns.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../src/detect/patterns.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,MAAM,WAAW,WAAW;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,GAAG,aAAa,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,GAAG,KAAK,GAAG,MAAM,CAAC;IAC1F,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IACxB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,cAAc,EAAE,WAAW,EAAE,CAAC;IAC9B,kBAAkB,EAAE,WAAW,EAAE,CAAC;IAClC,mBAAmB,EAAE,WAAW,EAAE,CAAC;IACnC,gBAAgB,EAAE,WAAW,EAAE,CAAC;IAChC,iBAAiB,EAAE,WAAW,EAAE,CAAC;IACjC,aAAa,EAAE,eAAe,EAAE,CAAC;IACjC,+DAA+D;IAC/D,OAAO,EAAE,MAAM,EAAE,CAAC;CACrB;AAcD;;;;;;;;GAQG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,6BAA6B;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;gBAEjB,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,GAAG,IAAW;CAK1D;AA0GD,gDAAgD;AAChD,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAUvD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAQ5E;AAID,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,WAAW,CA+BrE;AAED,oEAAoE;AACpE,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
1
+ {"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../src/detect/patterns.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,MAAM,WAAW,WAAW;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,GAAG,aAAa,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,GAAG,KAAK,GAAG,MAAM,CAAC;IAC1F,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IACxB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,cAAc,EAAE,WAAW,EAAE,CAAC;IAC9B,kBAAkB,EAAE,WAAW,EAAE,CAAC;IAClC,mBAAmB,EAAE,WAAW,EAAE,CAAC;IACnC,gBAAgB,EAAE,WAAW,EAAE,CAAC;IAChC,iBAAiB,EAAE,WAAW,EAAE,CAAC;IACjC,aAAa,EAAE,eAAe,EAAE,CAAC;IACjC,+DAA+D;IAC/D,OAAO,EAAE,MAAM,EAAE,CAAC;CACrB;AAcD;;;;;;;;GAQG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,6BAA6B;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;gBAEjB,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,GAAG,IAAW;CAK1D;AA+GD,gDAAgD;AAChD,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAUvD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAQ5E;AAoDD,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,WAAW,CAErE;AAED,4EAA4E;AAC5E,MAAM,WAAW,aAAa;IAC1B,iGAAiG;IACjG,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB;;;;OAIG;IACH,eAAe,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,IAAI,aAAa,CAG7C;AAED,oEAAoE;AACpE,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}