@leemour/cli-messaging 0.126.0 → 0.128.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 (86) hide show
  1. package/THIRD_PARTY_NOTICES +711 -0
  2. package/dist/cli/messenger/chats-command.d.ts.map +1 -1
  3. package/dist/cli/messenger/chats-command.js +1 -1
  4. package/dist/cli/messenger/chats-command.js.map +1 -1
  5. package/dist/cli/messenger/messages-command.d.ts.map +1 -1
  6. package/dist/cli/messenger/messages-command.js +2 -79
  7. package/dist/cli/messenger/messages-command.js.map +1 -1
  8. package/dist/cli/messenger/messages-search-command.d.ts +4 -0
  9. package/dist/cli/messenger/messages-search-command.d.ts.map +1 -0
  10. package/dist/cli/messenger/messages-search-command.js +99 -0
  11. package/dist/cli/messenger/messages-search-command.js.map +1 -0
  12. package/dist/mcp/tool.d.ts +1 -0
  13. package/dist/mcp/tool.d.ts.map +1 -1
  14. package/dist/mcp/tool.js +3 -1
  15. package/dist/mcp/tool.js.map +1 -1
  16. package/dist/mcp/tools/messages.d.ts.map +1 -1
  17. package/dist/mcp/tools/messages.js +14 -10
  18. package/dist/mcp/tools/messages.js.map +1 -1
  19. package/dist/parity/wording.d.ts.map +1 -1
  20. package/dist/parity/wording.js +4 -2
  21. package/dist/parity/wording.js.map +1 -1
  22. package/dist/search/legacy-regex.d.ts +7 -0
  23. package/dist/search/legacy-regex.d.ts.map +1 -0
  24. package/dist/search/legacy-regex.js +48 -0
  25. package/dist/search/legacy-regex.js.map +1 -0
  26. package/dist/search/lucene/automaton.d.ts +12 -0
  27. package/dist/search/lucene/automaton.d.ts.map +1 -0
  28. package/dist/search/lucene/automaton.js +295 -0
  29. package/dist/search/lucene/automaton.js.map +1 -0
  30. package/dist/search/lucene/dates.d.ts +15 -0
  31. package/dist/search/lucene/dates.d.ts.map +1 -0
  32. package/dist/search/lucene/dates.js +82 -0
  33. package/dist/search/lucene/dates.js.map +1 -0
  34. package/dist/search/lucene/migration.d.ts +21 -0
  35. package/dist/search/lucene/migration.d.ts.map +1 -0
  36. package/dist/search/lucene/migration.js +30 -0
  37. package/dist/search/lucene/migration.js.map +1 -0
  38. package/dist/search/lucene/parser.d.ts +3 -0
  39. package/dist/search/lucene/parser.d.ts.map +1 -0
  40. package/dist/search/lucene/parser.js +271 -0
  41. package/dist/search/lucene/parser.js.map +1 -0
  42. package/dist/search/lucene/presets.d.ts +6 -0
  43. package/dist/search/lucene/presets.d.ts.map +1 -0
  44. package/dist/search/lucene/presets.js +53 -0
  45. package/dist/search/lucene/presets.js.map +1 -0
  46. package/dist/search/lucene/registry.d.ts +201 -0
  47. package/dist/search/lucene/registry.d.ts.map +1 -0
  48. package/dist/search/lucene/registry.js +309 -0
  49. package/dist/search/lucene/registry.js.map +1 -0
  50. package/dist/search/lucene/resolved.d.ts +43 -0
  51. package/dist/search/lucene/resolved.d.ts.map +1 -0
  52. package/dist/search/lucene/resolved.js +2 -0
  53. package/dist/search/lucene/resolved.js.map +1 -0
  54. package/dist/search/lucene/types.d.ts +46 -0
  55. package/dist/search/lucene/types.d.ts.map +1 -0
  56. package/dist/search/lucene/types.js +31 -0
  57. package/dist/search/lucene/types.js.map +1 -0
  58. package/dist/services/index.d.ts +5 -0
  59. package/dist/services/index.d.ts.map +1 -1
  60. package/dist/services/index.js +4 -0
  61. package/dist/services/index.js.map +1 -1
  62. package/dist/services/messages-search.d.ts +21 -0
  63. package/dist/services/messages-search.d.ts.map +1 -0
  64. package/dist/services/messages-search.js +165 -0
  65. package/dist/services/messages-search.js.map +1 -0
  66. package/dist/services/messages.d.ts +18 -1
  67. package/dist/services/messages.d.ts.map +1 -1
  68. package/dist/services/messages.js +16 -3
  69. package/dist/services/messages.js.map +1 -1
  70. package/dist/store/sqlite/legacy-regex.d.ts +7 -0
  71. package/dist/store/sqlite/legacy-regex.d.ts.map +1 -0
  72. package/dist/store/sqlite/legacy-regex.js +42 -0
  73. package/dist/store/sqlite/legacy-regex.js.map +1 -0
  74. package/dist/store/sqlite/lucene.d.ts +6 -0
  75. package/dist/store/sqlite/lucene.d.ts.map +1 -0
  76. package/dist/store/sqlite/lucene.js +318 -0
  77. package/dist/store/sqlite/lucene.js.map +1 -0
  78. package/dist/store/sqlite/search.d.ts.map +1 -1
  79. package/dist/store/sqlite/search.js +6 -30
  80. package/dist/store/sqlite/search.js.map +1 -1
  81. package/dist/store/store.d.ts +3 -0
  82. package/dist/store/store.d.ts.map +1 -1
  83. package/dist/store/store.js +4 -1
  84. package/dist/store/store.js.map +1 -1
  85. package/package.json +6 -4
  86. package/parity.json +22 -19
@@ -0,0 +1,271 @@
1
+ // Port of Lucene 9.12.3 StandardSyntaxParser.jj and BooleanModifiersQueryNodeProcessor (Apache-2.0).
2
+ // Upstream sources and notices: scripts/search-reference; adjacency is Query(DisjQuery*), not ConjQuery.
3
+ import { QUERY_LIMITS, queryError } from "./types.js";
4
+ const whitespace = (c) => /[ \t\n\r\u3000]/u.test(c);
5
+ const reserved = new Set([
6
+ "+",
7
+ "-",
8
+ "!",
9
+ "(",
10
+ ")",
11
+ ":",
12
+ "=",
13
+ "^",
14
+ "@",
15
+ "<",
16
+ ">",
17
+ "[",
18
+ "]",
19
+ '"',
20
+ "{",
21
+ "}",
22
+ "~",
23
+ "\\",
24
+ "/",
25
+ ]);
26
+ const decodeEscapes = (raw, span) => {
27
+ let out = "";
28
+ for (let at = 0; at < raw.length; at++) {
29
+ if (raw[at] !== "\\") {
30
+ out += raw[at];
31
+ continue;
32
+ }
33
+ if (++at >= raw.length)
34
+ queryError("invalid_escape", span);
35
+ if (raw[at] === "u") {
36
+ const hex = raw.slice(at + 1, at + 5);
37
+ if (!/^[0-9a-fA-F]{4}$/.test(hex))
38
+ queryError("invalid_escape", span);
39
+ out += String.fromCharCode(Number.parseInt(hex, 16));
40
+ at += 4;
41
+ }
42
+ else
43
+ out += raw[at];
44
+ }
45
+ return out;
46
+ };
47
+ const tokensOf = (text) => {
48
+ const tokens = [];
49
+ let at = 0;
50
+ let range = false;
51
+ while (at < text.length) {
52
+ const start = at;
53
+ const c = text[at] ?? "";
54
+ if (whitespace(c)) {
55
+ at++;
56
+ continue;
57
+ }
58
+ let kind = c;
59
+ if (c === '"' || (!range && c === "/")) {
60
+ at++;
61
+ while (at < text.length && text[at] !== c) {
62
+ if (text[at] === "\\" && (c === '"' || text[at + 1] === "/"))
63
+ at++;
64
+ at++;
65
+ }
66
+ if (at >= text.length)
67
+ queryError("unclosed_literal", { start, end: at });
68
+ at++;
69
+ if (c === "/" && /^[dgimsuvy]+(?:$|[ \t\n\r)])/.test(text.slice(at)))
70
+ queryError("unsupported_regex_flags", { start: at, end: at + 1 }, "Lucene regex does not take JavaScript flags");
71
+ kind = c === '"' ? "quoted" : "regex";
72
+ }
73
+ else if (range && c !== "]" && c !== "}") {
74
+ while (at < text.length && !whitespace(text[at] ?? "") && !["]", "}"].includes(text[at] ?? ""))
75
+ at++;
76
+ kind = "rangeValue";
77
+ }
78
+ else if (reserved.has(c)) {
79
+ if (c === "\\") {
80
+ at += 2;
81
+ while (at < text.length &&
82
+ !whitespace(text[at] ?? "") &&
83
+ (!reserved.has(text[at] ?? "") || ["+", "-"].includes(text[at] ?? "")))
84
+ at++;
85
+ kind = "term";
86
+ }
87
+ else {
88
+ at++;
89
+ if ((c === "<" || c === ">") && text[at] === "=") {
90
+ at++;
91
+ kind += "=";
92
+ }
93
+ if (c === "[" || c === "{")
94
+ range = true;
95
+ if (c === "]" || c === "}")
96
+ range = false;
97
+ }
98
+ }
99
+ else {
100
+ at++;
101
+ while (at < text.length) {
102
+ const next = text[at] ?? "";
103
+ if (next === "\\") {
104
+ if (at + 1 >= text.length)
105
+ queryError("invalid_escape", { start: at, end: at + 1 });
106
+ at += 2;
107
+ continue;
108
+ }
109
+ if (whitespace(next) || (reserved.has(next) && next !== "+" && next !== "-"))
110
+ break;
111
+ at++;
112
+ }
113
+ const raw = text.slice(start, at);
114
+ kind =
115
+ { AND: "AND", OR: "OR", NOT: "NOT", "&&": "AND", "||": "OR" }[raw] ??
116
+ (/^\d+(?:\.\d+)?$/u.test(raw) ? "number" : "term");
117
+ }
118
+ tokens.push({ kind, raw: text.slice(start, at), span: { start, end: at } });
119
+ }
120
+ tokens.push({ kind: "EOF", raw: "", span: { start: at, end: at } });
121
+ return tokens;
122
+ };
123
+ export const parseLucene = (text) => {
124
+ if (text.length > QUERY_LIMITS.bytes || new TextEncoder().encode(text).length > QUERY_LIMITS.bytes)
125
+ queryError("query_limit", { start: 0, end: text.length });
126
+ const tokens = tokensOf(text);
127
+ let at = 0;
128
+ let count = 0;
129
+ let depth = 0;
130
+ const peek = () => tokens[at];
131
+ const take = () => tokens[at++];
132
+ const expect = (kind) => {
133
+ if (peek().kind !== kind)
134
+ queryError("invalid_syntax", peek().span);
135
+ return take();
136
+ };
137
+ const built = (node) => {
138
+ if (++count > QUERY_LIMITS.nodes)
139
+ queryError("query_limit", node.span);
140
+ return node;
141
+ };
142
+ const combine = (clauses, occur) => {
143
+ const first = clauses[0];
144
+ const last = clauses.at(-1);
145
+ if (!first || !last)
146
+ queryError("invalid_syntax", peek().span);
147
+ if (clauses.length === 1)
148
+ return first;
149
+ return {
150
+ node: built({
151
+ kind: "boolean",
152
+ clauses: clauses.map(({ node, modifier }) => ({ node, occur: modifier ?? occur })),
153
+ span: { start: first.node.span.start, end: last.node.span.end },
154
+ }),
155
+ };
156
+ };
157
+ const query = (field) => {
158
+ if (++depth > QUERY_LIMITS.depth)
159
+ queryError("query_limit", peek().span);
160
+ const clauses = [];
161
+ do {
162
+ clauses.push(disjunction(field));
163
+ } while (!["EOF", ")"].includes(peek().kind));
164
+ const result = combine(clauses, "must");
165
+ depth--;
166
+ if (result.modifier === "mustNot")
167
+ return built({ kind: "boolean", clauses: [{ node: result.node, occur: "mustNot" }], span: result.node.span });
168
+ return result.node;
169
+ };
170
+ const disjunction = (field) => {
171
+ const clauses = [conjunction(field)];
172
+ while (peek().kind === "OR") {
173
+ take();
174
+ clauses.push(conjunction(field));
175
+ }
176
+ return combine(clauses, "should");
177
+ };
178
+ const conjunction = (field) => {
179
+ const clauses = [clause(field)];
180
+ while (peek().kind === "AND") {
181
+ take();
182
+ clauses.push(clause(field));
183
+ }
184
+ return combine(clauses, "must");
185
+ };
186
+ const clause = (inherited) => {
187
+ let modifier;
188
+ if (["+", "-", "NOT", "!"].includes(peek().kind))
189
+ modifier = take().kind === "+" ? "must" : "mustNot";
190
+ let field = inherited;
191
+ if (peek().kind === "term" && [":", "=", "<", ">", "<=", ">="].includes(tokens[at + 1]?.kind ?? "")) {
192
+ const token = take();
193
+ field = decodeEscapes(token.raw, token.span);
194
+ const operator = take();
195
+ if (["<", ">", "<=", ">="].includes(operator.kind)) {
196
+ const value = take();
197
+ if (!["term", "number", "quoted"].includes(value.kind))
198
+ queryError("invalid_syntax", value.span);
199
+ const decoded = decodeEscapes(value.kind === "quoted" ? value.raw.slice(1, -1) : value.raw, value.span);
200
+ const lower = operator.kind.startsWith(">");
201
+ const node = built({
202
+ kind: "predicate",
203
+ field,
204
+ operator: "range",
205
+ value: lower ? decoded : "*",
206
+ upper: lower ? "*" : decoded,
207
+ lowerInclusive: !lower || operator.kind.endsWith("="),
208
+ upperInclusive: lower || operator.kind.endsWith("="),
209
+ span: { start: token.span.start, end: value.span.end },
210
+ });
211
+ return { node, ...(modifier ? { modifier } : {}) };
212
+ }
213
+ }
214
+ let node;
215
+ if (peek().kind === "(") {
216
+ const start = take().span.start;
217
+ node = query(field);
218
+ const end = expect(")").span.end;
219
+ node = { ...node, span: { start, end } };
220
+ }
221
+ else if (["[", "{"].includes(peek().kind)) {
222
+ const opening = take();
223
+ const lower = take();
224
+ if (!["rangeValue", "quoted"].includes(lower.kind))
225
+ queryError("invalid_syntax", lower.span);
226
+ const separator = take();
227
+ if (separator.raw !== "TO")
228
+ queryError("invalid_syntax", separator.span);
229
+ const upper = take();
230
+ if (!["rangeValue", "quoted"].includes(upper.kind))
231
+ queryError("invalid_syntax", upper.span);
232
+ const closing = take();
233
+ if (!["]", "}"].includes(closing.kind))
234
+ queryError("invalid_syntax", closing.span);
235
+ const decode = (t) => decodeEscapes(t.kind === "quoted" ? t.raw.slice(1, -1) : t.raw, t.span);
236
+ node = built({
237
+ kind: "predicate",
238
+ field,
239
+ operator: "range",
240
+ value: decode(lower),
241
+ upper: decode(upper),
242
+ lowerInclusive: opening.kind === "[",
243
+ upperInclusive: closing.kind === "]",
244
+ span: { start: opening.span.start, end: closing.span.end },
245
+ });
246
+ }
247
+ else {
248
+ const token = take();
249
+ if (!["term", "number", "quoted", "regex"].includes(token.kind))
250
+ queryError("invalid_syntax", token.span);
251
+ const raw = ["term", "number"].includes(token.kind) ? token.raw : token.raw.slice(1, -1);
252
+ if (field === "fn")
253
+ queryError("unsupported_operator", token.span, "interval functions are not supported");
254
+ const wildcard = ["term", "number"].includes(token.kind) && /(?<!\\)[*?]/u.test(raw);
255
+ node = built({
256
+ kind: "predicate",
257
+ field,
258
+ operator: token.kind === "regex" ? "regex" : token.kind === "quoted" ? "phrase" : wildcard ? "wildcard" : "term",
259
+ value: token.kind === "regex" || wildcard ? raw : decodeEscapes(raw, token.span),
260
+ span: token.span,
261
+ });
262
+ }
263
+ if (["~", "^", "@"].includes(peek().kind))
264
+ queryError("unsupported_operator", peek().span, "fuzzy, proximity, boost and minimum-should-match are not supported");
265
+ return { node, ...(modifier ? { modifier } : {}) };
266
+ };
267
+ const root = query("text");
268
+ expect("EOF");
269
+ return { version: 1, language: "lucene-v1", root };
270
+ };
271
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/search/lucene/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare const PRESET_VERSION = 1;
2
+ export declare const PRESETS: Record<string, {
3
+ explanation: string;
4
+ candidate: (body: string, attachments: readonly string[]) => boolean;
5
+ }>;
6
+ //# sourceMappingURL=presets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../../src/search/lucene/presets.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,IAAI,CAAA;AAC/B,eAAO,MAAM,OAAO,EAAE,MAAM,CAC1B,MAAM,EACN;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAA;CAAE,CAoD9F,CAAA"}
@@ -0,0 +1,53 @@
1
+ export const PRESET_VERSION = 1;
2
+ export const PRESETS = {
3
+ password: {
4
+ explanation: "a password label followed by a value",
5
+ candidate: (s) => /(?:password|пароль)\s*[:=]\s*\S{4,128}/iu.test(s),
6
+ },
7
+ code: {
8
+ explanation: "a verification-code label and 4–8 digits",
9
+ candidate: (s) => /(?:code|код)\s*[:=]\s*\d{4,8}\b/iu.test(s),
10
+ },
11
+ "api-key": {
12
+ explanation: "an API-key label and a value",
13
+ candidate: (s) => /(?:api[_ -]?key|api[_ -]?ключ)\s*[:=]\s*\S{8,128}/iu.test(s),
14
+ },
15
+ secret: {
16
+ explanation: "a password, secret, token or API-key label and a value",
17
+ candidate: (s) => /(?:password|пароль|secret|секрет|token|токен|api[_ -]?key)\s*[:=]\s*\S{4,128}/iu.test(s),
18
+ },
19
+ card: {
20
+ explanation: "13–19 digits with optional spaces or hyphens; no issuer verification",
21
+ candidate: (s) => /\b(?:\d[ -]?){12,18}\d\b/u.test(s),
22
+ },
23
+ bank: {
24
+ explanation: "an IBAN-shaped value; no bank or checksum verification",
25
+ candidate: (s) => /\b[A-Z]{2}\d{2}[A-Z0-9]{11,30}\b/u.test(s),
26
+ },
27
+ passport: {
28
+ explanation: "a labelled passport value or Russian 4+6 digit shape",
29
+ candidate: (s) => /(?:passport|паспорт)\s*[:=]\s*[\p{L}\d -]{5,24}|\b\d{4}[ -]?\d{6}\b/iu.test(s),
30
+ },
31
+ phone: {
32
+ explanation: "a plus-prefixed 8–15 digit international-phone shape",
33
+ candidate: (s) => /\+(?:\d[ ()-]?){7,14}\d\b/u.test(s),
34
+ },
35
+ email: {
36
+ explanation: "an email-address shape",
37
+ candidate: (s) => /\b[\w.+-]{1,64}@[\w-]{1,63}\.[A-Za-z]{2,24}\b/u.test(s),
38
+ },
39
+ "telegram-link": {
40
+ explanation: "a t.me or telegram.me URL",
41
+ candidate: (s) => /https?:\/\/(?:t\.me|telegram\.me)\/[\w/+?-]{1,128}/iu.test(s),
42
+ },
43
+ url: { explanation: "an HTTP(S) URL", candidate: (s) => /https?:\/\/[^\s<>]{1,2048}/iu.test(s) },
44
+ contact: {
45
+ explanation: "a contact attachment or email/phone candidate",
46
+ candidate: (s, a) => a.includes("contact") || (PRESETS.email?.candidate(s, a) ?? false) || (PRESETS.phone?.candidate(s, a) ?? false),
47
+ },
48
+ location: {
49
+ explanation: "a location attachment or geo: URI",
50
+ candidate: (s, a) => a.includes("location") || /\bgeo:-?\d{1,2}(?:\.\d{1,8})?,-?\d{1,3}(?:\.\d{1,8})?\b/u.test(s),
51
+ },
52
+ };
53
+ //# sourceMappingURL=presets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets.js","sourceRoot":"","sources":["../../../src/search/lucene/presets.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAA;AAC/B,MAAM,CAAC,MAAM,OAAO,GAGhB;IACF,QAAQ,EAAE;QACR,WAAW,EAAE,sCAAsC;QACnD,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,0CAA0C,CAAC,IAAI,CAAC,CAAC,CAAC;KACrE;IACD,IAAI,EAAE;QACJ,WAAW,EAAE,0CAA0C;QACvD,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,mCAAmC,CAAC,IAAI,CAAC,CAAC,CAAC;KAC9D;IACD,SAAS,EAAE;QACT,WAAW,EAAE,8BAA8B;QAC3C,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,qDAAqD,CAAC,IAAI,CAAC,CAAC,CAAC;KAChF;IACD,MAAM,EAAE;QACN,WAAW,EAAE,wDAAwD;QACrE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,iFAAiF,CAAC,IAAI,CAAC,CAAC,CAAC;KAC5G;IACD,IAAI,EAAE;QACJ,WAAW,EAAE,sEAAsE;QACnF,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC;KACtD;IACD,IAAI,EAAE;QACJ,WAAW,EAAE,wDAAwD;QACrE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,mCAAmC,CAAC,IAAI,CAAC,CAAC,CAAC;KAC9D;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,sDAAsD;QACnE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,uEAAuE,CAAC,IAAI,CAAC,CAAC,CAAC;KAClG;IACD,KAAK,EAAE;QACL,WAAW,EAAE,sDAAsD;QACnE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC,CAAC;KACvD;IACD,KAAK,EAAE;QACL,WAAW,EAAE,wBAAwB;QACrC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,gDAAgD,CAAC,IAAI,CAAC,CAAC,CAAC;KAC3E;IACD,eAAe,EAAE;QACf,WAAW,EAAE,2BAA2B;QACxC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,sDAAsD,CAAC,IAAI,CAAC,CAAC,CAAC;KACjF;IACD,GAAG,EAAE,EAAE,WAAW,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;IAChG,OAAO,EAAE;QACP,WAAW,EAAE,+CAA+C;QAC5D,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAClB,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC;KAClH;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,mCAAmC;QAChD,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,0DAA0D,CAAC,IAAI,CAAC,CAAC,CAAC;KAClH;CACF,CAAA"}
@@ -0,0 +1,201 @@
1
+ import { type Operator, type Predicate, type QueryAst } from "./types.js";
2
+ export declare const FIELD_VERSION = 1;
3
+ export declare const QUERY_FIELDS: readonly [{
4
+ readonly name: "text";
5
+ readonly example: "invoice";
6
+ readonly index: "message_words";
7
+ readonly aliases: readonly [];
8
+ readonly type: "tokens";
9
+ readonly operators: readonly ["term", "phrase", "wildcard", "regex"];
10
+ readonly normalization: "NFKD/marks/NFC/lowercase v1";
11
+ readonly support: "A1";
12
+ }, {
13
+ readonly name: "body";
14
+ readonly example: "body:/.*invoice.*/";
15
+ readonly index: "messages.text / bounded postfilter";
16
+ readonly aliases: readonly [];
17
+ readonly type: "keyword";
18
+ readonly operators: readonly ["term", "phrase", "wildcard", "regex"];
19
+ readonly normalization: "raw, case-sensitive";
20
+ readonly support: "A1";
21
+ }, {
22
+ readonly name: "from";
23
+ readonly example: 'from:"Alice Synthetic"';
24
+ readonly index: "identities / sender index";
25
+ readonly aliases: readonly [];
26
+ readonly type: "person";
27
+ readonly operators: Operator[];
28
+ readonly normalization: "account-scoped resolution";
29
+ readonly support: "A1";
30
+ }, {
31
+ readonly name: "chat";
32
+ readonly example: 'chat:"Work fixture"';
33
+ readonly index: "chats / message time index";
34
+ readonly aliases: readonly [];
35
+ readonly type: "chat";
36
+ readonly operators: Operator[];
37
+ readonly normalization: "account-scoped resolution";
38
+ readonly support: "A1";
39
+ }, {
40
+ readonly name: "date";
41
+ readonly example: "date:[2026-01-01 TO 2026-02-01}";
42
+ readonly index: "messages.sent_at";
43
+ readonly aliases: readonly [];
44
+ readonly type: "timestamp";
45
+ readonly operators: readonly [...Operator[], "range"];
46
+ readonly normalization: "ISO/calendar timezone";
47
+ readonly support: "A1";
48
+ }, {
49
+ readonly name: "kind";
50
+ readonly example: "kind:private";
51
+ readonly index: "chats.kind / peerKind metadata";
52
+ readonly aliases: readonly [];
53
+ readonly type: "enum";
54
+ readonly operators: Operator[];
55
+ readonly normalization: "lowercase";
56
+ readonly support: "A1";
57
+ readonly values: readonly ["private", "saved", "bot", "service", "group", "channel", "unknown"];
58
+ }, {
59
+ readonly name: "has";
60
+ readonly example: "has:file";
61
+ readonly index: "attachments / messages_fts links";
62
+ readonly aliases: readonly [];
63
+ readonly type: "enum";
64
+ readonly operators: Operator[];
65
+ readonly normalization: "lowercase";
66
+ readonly support: "A1";
67
+ readonly values: readonly ["attachment", "link", "file", "photo", "image", "video", "audio", "voice", "sticker", "contact", "location", "poll"];
68
+ }, {
69
+ readonly name: "topic";
70
+ readonly example: "chat:7 AND topic:42";
71
+ readonly index: "messages.thread_native_id";
72
+ readonly aliases: readonly [];
73
+ readonly type: "id";
74
+ readonly operators: Operator[];
75
+ readonly normalization: "string id, one chat required";
76
+ readonly support: "A1";
77
+ }, {
78
+ readonly name: "in";
79
+ readonly example: "in:bots";
80
+ readonly index: "accounts.provider";
81
+ readonly aliases: readonly [];
82
+ readonly type: "source";
83
+ readonly operators: Operator[];
84
+ readonly normalization: "lowercase provider/account class";
85
+ readonly support: "A1";
86
+ }, {
87
+ readonly name: "preset";
88
+ readonly example: "preset:secret";
89
+ readonly index: "bounded local candidate detector";
90
+ readonly aliases: readonly [];
91
+ readonly type: "enum";
92
+ readonly operators: Operator[];
93
+ readonly normalization: "versioned candidate detector";
94
+ readonly support: "A1";
95
+ readonly values: readonly ["password", "code", "api-key", "secret", "card", "bank", "passport", "phone", "email", "telegram-link", "url", "contact", "location"];
96
+ }, {
97
+ readonly name: "filename";
98
+ readonly example: "filename:*.pdf";
99
+ readonly index: "planned";
100
+ readonly aliases: readonly [];
101
+ readonly type: "keyword";
102
+ readonly operators: readonly [...Operator[], "wildcard", "regex"];
103
+ readonly normalization: "planned";
104
+ readonly support: "planned";
105
+ }, {
106
+ readonly name: "mime";
107
+ readonly example: "mime:application/pdf";
108
+ readonly index: "planned";
109
+ readonly aliases: readonly [];
110
+ readonly type: "keyword";
111
+ readonly operators: readonly [...Operator[], "wildcard"];
112
+ readonly normalization: "planned";
113
+ readonly support: "planned";
114
+ }, {
115
+ readonly name: "size";
116
+ readonly example: "size:[1024 TO 4096]";
117
+ readonly index: "planned";
118
+ readonly aliases: readonly [];
119
+ readonly type: "bytes";
120
+ readonly operators: readonly [...Operator[], "range"];
121
+ readonly normalization: "planned";
122
+ readonly support: "planned";
123
+ }, {
124
+ readonly name: "tag";
125
+ readonly example: "tag:work";
126
+ readonly index: "planned";
127
+ readonly aliases: readonly [];
128
+ readonly type: "local-tag";
129
+ readonly operators: Operator[];
130
+ readonly normalization: "planned";
131
+ readonly support: "planned";
132
+ }];
133
+ export declare const validatePredicate: (node: Predicate) => void;
134
+ export declare const validateAst: (input: unknown) => QueryAst;
135
+ export declare const validateFields: (ast: QueryAst) => QueryAst;
136
+ export declare const QUERY_OPERATORS: readonly [{
137
+ readonly name: "term";
138
+ readonly example: "invoice";
139
+ readonly semantics: "Точное совпадение анализированного текста; без автоматического prefix";
140
+ }, {
141
+ readonly name: "phrase";
142
+ readonly example: '"invoice paid"';
143
+ readonly semantics: "Последовательность анализированных слов";
144
+ }, {
145
+ readonly name: "implicit AND";
146
+ readonly example: "invoice paid";
147
+ readonly semantics: "Оба clauses обязательны; adjacency группируется по upstream grammar";
148
+ }, {
149
+ readonly name: "AND / &&";
150
+ readonly example: "alpha AND beta";
151
+ readonly semantics: "Оба условия обязательны";
152
+ }, {
153
+ readonly name: "OR / ||";
154
+ readonly example: "alpha OR beta";
155
+ readonly semantics: "Любой optional clause, если нет required clause";
156
+ }, {
157
+ readonly name: "NOT / ! / -";
158
+ readonly example: "alpha NOT beta";
159
+ readonly semantics: "Исключить beta; чистое отрицание не выбирает весь архив";
160
+ }, {
161
+ readonly name: "+";
162
+ readonly example: "+alpha OR beta";
163
+ readonly semantics: "alpha обязателен, beta optional";
164
+ }, {
165
+ readonly name: "group";
166
+ readonly example: "(alpha OR beta) gamma";
167
+ readonly semantics: "Скобки фиксируют grouping";
168
+ }, {
169
+ readonly name: "field group";
170
+ readonly example: "from:(alice OR bob)";
171
+ readonly semantics: "Поле наследуется внутри группы";
172
+ }, {
173
+ readonly name: "field equality";
174
+ readonly example: "kind=group";
175
+ readonly semantics: "Стандартный синоним записи kind:group";
176
+ }, {
177
+ readonly name: "range";
178
+ readonly example: "date:[2026-01-01 TO 2026-02-01}";
179
+ readonly semantics: "Inclusive [ ], exclusive { }, смешанные границы и *";
180
+ }, {
181
+ readonly name: "comparison";
182
+ readonly example: "date>=2026-01-01";
183
+ readonly semantics: "Стандартный typed open range";
184
+ }, {
185
+ readonly name: "wildcard";
186
+ readonly example: "text:invo*";
187
+ readonly semantics: "Полный term; * — любое число символов, ? — один";
188
+ }, {
189
+ readonly name: "regex";
190
+ readonly example: "text:/pass(port)?/";
191
+ readonly semantics: "Полный term; bounded subset Lucene RegExp";
192
+ }, {
193
+ readonly name: "fuzzy / proximity";
194
+ readonly example: "invoice~1";
195
+ readonly semantics: "unsupported_operator; используйте legacy discovery либо точные слова";
196
+ }, {
197
+ readonly name: "boost / minimum / intervals";
198
+ readonly example: "invoice^2";
199
+ readonly semantics: "unsupported_operator";
200
+ }];
201
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/search/lucene/registry.ts"],"names":[],"mappings":"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"}