@wirecat/cli-core 0.305.0 → 0.307.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 (331) hide show
  1. package/dist/analysis/consents.js +4 -4
  2. package/dist/analysis/consents.js.map +1 -1
  3. package/dist/attachments/directory.js +1 -1
  4. package/dist/attachments/directory.js.map +1 -1
  5. package/dist/botcheck/service.js +3 -3
  6. package/dist/botcheck/service.js.map +1 -1
  7. package/dist/cli/bot/context.d.ts +2 -2
  8. package/dist/cli/bot/copy.js +4 -4
  9. package/dist/cli/bot/copy.js.map +1 -1
  10. package/dist/cli/bot/messages.d.ts.map +1 -1
  11. package/dist/cli/bot/messages.js +2 -2
  12. package/dist/cli/bot/messages.js.map +1 -1
  13. package/dist/cli/bot/moderation.js +1 -1
  14. package/dist/cli/bot/moderation.js.map +1 -1
  15. package/dist/cli/bot/people.js +4 -4
  16. package/dist/cli/bot/people.js.map +1 -1
  17. package/dist/cli/bot/store.js +2 -2
  18. package/dist/cli/bot/store.js.map +1 -1
  19. package/dist/cli/config-keys.d.ts.map +1 -1
  20. package/dist/cli/config-keys.js +2 -1
  21. package/dist/cli/config-keys.js.map +1 -1
  22. package/dist/cli/meeting-preparation-answer.d.ts +2 -1
  23. package/dist/cli/meeting-preparation-answer.d.ts.map +1 -1
  24. package/dist/cli/meeting-preparation-read.d.ts +2 -1
  25. package/dist/cli/meeting-preparation-read.d.ts.map +1 -1
  26. package/dist/cli/messenger/account-command.js +1 -1
  27. package/dist/cli/messenger/account-command.js.map +1 -1
  28. package/dist/cli/messenger/complete-command.js +2 -2
  29. package/dist/cli/messenger/complete-command.js.map +1 -1
  30. package/dist/cli/messenger/context.js +1 -1
  31. package/dist/cli/messenger/context.js.map +1 -1
  32. package/dist/cli/messenger/serve-members.js +1 -1
  33. package/dist/cli/messenger/serve-members.js.map +1 -1
  34. package/dist/cli/messenger/serve-stems.js +3 -3
  35. package/dist/cli/messenger/serve-stems.js.map +1 -1
  36. package/dist/cli/messenger/stored.d.ts.map +1 -1
  37. package/dist/cli/messenger/stored.js +21 -21
  38. package/dist/cli/messenger/stored.js.map +1 -1
  39. package/dist/cli/store-settings.js +3 -3
  40. package/dist/cli/store-settings.js.map +1 -1
  41. package/dist/entities/index.d.ts +2 -1
  42. package/dist/entities/index.d.ts.map +1 -1
  43. package/dist/entities/meeting-preparation.d.ts +2 -1
  44. package/dist/entities/meeting-preparation.d.ts.map +1 -1
  45. package/dist/entities/meeting-preparation.js +5 -1
  46. package/dist/entities/meeting-preparation.js.map +1 -1
  47. package/dist/errors/reasons.d.ts.map +1 -1
  48. package/dist/errors/reasons.js +1 -0
  49. package/dist/errors/reasons.js.map +1 -1
  50. package/dist/files/atomic-write.d.ts +15 -0
  51. package/dist/files/atomic-write.d.ts.map +1 -0
  52. package/dist/files/atomic-write.js +35 -0
  53. package/dist/files/atomic-write.js.map +1 -0
  54. package/dist/files/index.d.ts +2 -0
  55. package/dist/files/index.d.ts.map +1 -1
  56. package/dist/files/index.js +2 -0
  57. package/dist/files/index.js.map +1 -1
  58. package/dist/files/lock.d.ts +14 -0
  59. package/dist/files/lock.d.ts.map +1 -0
  60. package/dist/files/lock.js +22 -0
  61. package/dist/files/lock.js.map +1 -0
  62. package/dist/files/native-lease-release.d.ts +3 -1
  63. package/dist/files/native-lease-release.d.ts.map +1 -1
  64. package/dist/files/native-lease-release.js +7 -3
  65. package/dist/files/native-lease-release.js.map +1 -1
  66. package/dist/kit/search-recipes.d.ts.map +1 -1
  67. package/dist/kit/search-recipes.js +5 -5
  68. package/dist/kit/search-recipes.js.map +1 -1
  69. package/dist/mcp/meeting-preparation.d.ts +2 -1
  70. package/dist/mcp/meeting-preparation.d.ts.map +1 -1
  71. package/dist/mcp/resources.js +1 -1
  72. package/dist/mcp/resources.js.map +1 -1
  73. package/dist/mcp/tools/chats.js +1 -1
  74. package/dist/mcp/tools/chats.js.map +1 -1
  75. package/dist/meetings/index.d.ts +1 -1
  76. package/dist/meetings/index.d.ts.map +1 -1
  77. package/dist/meetings/index.js.map +1 -1
  78. package/dist/meetings/preparation-notes.d.ts +4 -1
  79. package/dist/meetings/preparation-notes.d.ts.map +1 -1
  80. package/dist/replies/dry-run.d.ts.map +1 -1
  81. package/dist/replies/dry-run.js +5 -5
  82. package/dist/replies/dry-run.js.map +1 -1
  83. package/dist/services/admin-statistics.js +6 -6
  84. package/dist/services/admin-statistics.js.map +1 -1
  85. package/dist/services/agenda.js +1 -1
  86. package/dist/services/agenda.js.map +1 -1
  87. package/dist/services/archive-gaps.js +4 -4
  88. package/dist/services/archive-gaps.js.map +1 -1
  89. package/dist/services/archive.d.ts.map +1 -1
  90. package/dist/services/archive.js +23 -23
  91. package/dist/services/archive.js.map +1 -1
  92. package/dist/services/attachments.d.ts.map +1 -1
  93. package/dist/services/attachments.js +21 -10
  94. package/dist/services/attachments.js.map +1 -1
  95. package/dist/services/chat-documents.js +2 -2
  96. package/dist/services/chat-documents.js.map +1 -1
  97. package/dist/services/chats.d.ts.map +1 -1
  98. package/dist/services/chats.js +24 -19
  99. package/dist/services/chats.js.map +1 -1
  100. package/dist/services/conversations.js +15 -15
  101. package/dist/services/conversations.js.map +1 -1
  102. package/dist/services/counters.d.ts.map +1 -1
  103. package/dist/services/counters.js +4 -4
  104. package/dist/services/counters.js.map +1 -1
  105. package/dist/services/embeddings-maintenance.d.ts.map +1 -1
  106. package/dist/services/embeddings-maintenance.js +13 -13
  107. package/dist/services/embeddings-maintenance.js.map +1 -1
  108. package/dist/services/embeddings-search.d.ts.map +1 -1
  109. package/dist/services/embeddings-search.js +16 -16
  110. package/dist/services/embeddings-search.js.map +1 -1
  111. package/dist/services/evidence-read.js +1 -1
  112. package/dist/services/evidence-read.js.map +1 -1
  113. package/dist/services/folders.js +1 -1
  114. package/dist/services/folders.js.map +1 -1
  115. package/dist/services/inbox.js +4 -4
  116. package/dist/services/inbox.js.map +1 -1
  117. package/dist/services/index.d.ts +1 -1
  118. package/dist/services/index.d.ts.map +1 -1
  119. package/dist/services/index.js.map +1 -1
  120. package/dist/services/mail-search.d.ts.map +1 -1
  121. package/dist/services/mail-search.js +15 -13
  122. package/dist/services/mail-search.js.map +1 -1
  123. package/dist/services/meeting-context.d.ts +4 -2
  124. package/dist/services/meeting-context.d.ts.map +1 -1
  125. package/dist/services/meeting-context.js +1 -1
  126. package/dist/services/meeting-context.js.map +1 -1
  127. package/dist/services/meeting-notes-preparation.d.ts.map +1 -1
  128. package/dist/services/meeting-notes-preparation.js +12 -4
  129. package/dist/services/meeting-notes-preparation.js.map +1 -1
  130. package/dist/services/meeting-preparation-types.d.ts +2 -2
  131. package/dist/services/meeting-preparation-types.d.ts.map +1 -1
  132. package/dist/services/meeting-tasks.d.ts +4 -2
  133. package/dist/services/meeting-tasks.d.ts.map +1 -1
  134. package/dist/services/meeting-tasks.js +1 -1
  135. package/dist/services/meeting-tasks.js.map +1 -1
  136. package/dist/services/mentions.d.ts.map +1 -1
  137. package/dist/services/mentions.js +8 -8
  138. package/dist/services/mentions.js.map +1 -1
  139. package/dist/services/message-resolution.d.ts.map +1 -1
  140. package/dist/services/message-resolution.js +6 -6
  141. package/dist/services/message-resolution.js.map +1 -1
  142. package/dist/services/messages-archive-search.js +4 -4
  143. package/dist/services/messages-archive-search.js.map +1 -1
  144. package/dist/services/messages-combined.js +3 -3
  145. package/dist/services/messages-combined.js.map +1 -1
  146. package/dist/services/messages-discovery.js +2 -2
  147. package/dist/services/messages-discovery.js.map +1 -1
  148. package/dist/services/messages-search.d.ts.map +1 -1
  149. package/dist/services/messages-search.js +13 -13
  150. package/dist/services/messages-search.js.map +1 -1
  151. package/dist/services/messages.js +6 -6
  152. package/dist/services/messages.js.map +1 -1
  153. package/dist/services/metadata.js +9 -9
  154. package/dist/services/metadata.js.map +1 -1
  155. package/dist/services/notes-search.js +4 -4
  156. package/dist/services/notes-search.js.map +1 -1
  157. package/dist/services/people.d.ts.map +1 -1
  158. package/dist/services/people.js +18 -17
  159. package/dist/services/people.js.map +1 -1
  160. package/dist/services/person-context.js +16 -16
  161. package/dist/services/person-context.js.map +1 -1
  162. package/dist/services/person-meeting-context.d.ts +3 -2
  163. package/dist/services/person-meeting-context.d.ts.map +1 -1
  164. package/dist/services/person-meeting-context.js +3 -3
  165. package/dist/services/person-meeting-context.js.map +1 -1
  166. package/dist/services/person-profile.js +5 -5
  167. package/dist/services/person-profile.js.map +1 -1
  168. package/dist/services/person-timeline.js +2 -2
  169. package/dist/services/person-timeline.js.map +1 -1
  170. package/dist/services/pictures.d.ts.map +1 -1
  171. package/dist/services/pictures.js +9 -6
  172. package/dist/services/pictures.js.map +1 -1
  173. package/dist/services/private-people.d.ts.map +1 -1
  174. package/dist/services/private-people.js +7 -7
  175. package/dist/services/private-people.js.map +1 -1
  176. package/dist/services/rankings-selection.js +1 -1
  177. package/dist/services/rankings-selection.js.map +1 -1
  178. package/dist/services/rankings.js +7 -7
  179. package/dist/services/rankings.js.map +1 -1
  180. package/dist/services/retention.d.ts +3 -3
  181. package/dist/services/retention.js +2 -2
  182. package/dist/services/retention.js.map +1 -1
  183. package/dist/services/search-all-meetings.js +2 -2
  184. package/dist/services/search-all-meetings.js.map +1 -1
  185. package/dist/services/search-all.d.ts.map +1 -1
  186. package/dist/services/search-all.js +3 -1
  187. package/dist/services/search-all.js.map +1 -1
  188. package/dist/services/search-catchup.js +1 -1
  189. package/dist/services/search-catchup.js.map +1 -1
  190. package/dist/services/search-kind.js +4 -4
  191. package/dist/services/search-kind.js.map +1 -1
  192. package/dist/services/search-refresh.d.ts.map +1 -1
  193. package/dist/services/search-refresh.js +2 -2
  194. package/dist/services/search-refresh.js.map +1 -1
  195. package/dist/services/searches.js +7 -7
  196. package/dist/services/searches.js.map +1 -1
  197. package/dist/services/server-search.js +4 -4
  198. package/dist/services/server-search.js.map +1 -1
  199. package/dist/services/tags.d.ts.map +1 -1
  200. package/dist/services/tags.js +7 -4
  201. package/dist/services/tags.js.map +1 -1
  202. package/dist/services/task-rules.js +6 -6
  203. package/dist/services/task-rules.js.map +1 -1
  204. package/dist/services/tasks.js +2 -2
  205. package/dist/services/tasks.js.map +1 -1
  206. package/dist/services/thread-context.d.ts.map +1 -1
  207. package/dist/services/thread-context.js +5 -5
  208. package/dist/services/thread-context.js.map +1 -1
  209. package/dist/speech/hearing.d.ts.map +1 -1
  210. package/dist/speech/hearing.js +2 -2
  211. package/dist/speech/hearing.js.map +1 -1
  212. package/dist/store/account-store.d.ts +64 -17
  213. package/dist/store/account-store.d.ts.map +1 -1
  214. package/dist/store/account-store.js +75 -121
  215. package/dist/store/account-store.js.map +1 -1
  216. package/dist/store/accounts.d.ts +35 -0
  217. package/dist/store/accounts.d.ts.map +1 -0
  218. package/dist/store/accounts.js +47 -0
  219. package/dist/store/accounts.js.map +1 -0
  220. package/dist/store/attachments.d.ts +40 -0
  221. package/dist/store/attachments.d.ts.map +1 -0
  222. package/dist/store/attachments.js +50 -0
  223. package/dist/store/attachments.js.map +1 -0
  224. package/dist/store/chats.d.ts +47 -0
  225. package/dist/store/chats.d.ts.map +1 -0
  226. package/dist/store/chats.js +80 -0
  227. package/dist/store/chats.js.map +1 -0
  228. package/dist/store/conversations.d.ts +73 -0
  229. package/dist/store/conversations.d.ts.map +1 -0
  230. package/dist/store/conversations.js +118 -0
  231. package/dist/store/conversations.js.map +1 -0
  232. package/dist/store/counters.d.ts +25 -0
  233. package/dist/store/counters.d.ts.map +1 -0
  234. package/dist/store/counters.js +26 -0
  235. package/dist/store/counters.js.map +1 -0
  236. package/dist/store/index.d.ts +1 -1
  237. package/dist/store/index.d.ts.map +1 -1
  238. package/dist/store/index.js.map +1 -1
  239. package/dist/store/keys.d.ts +16 -0
  240. package/dist/store/keys.d.ts.map +1 -0
  241. package/dist/store/keys.js +25 -0
  242. package/dist/store/keys.js.map +1 -0
  243. package/dist/store/mentions.d.ts +41 -0
  244. package/dist/store/mentions.d.ts.map +1 -0
  245. package/dist/store/mentions.js +39 -0
  246. package/dist/store/mentions.js.map +1 -0
  247. package/dist/store/messages.d.ts +116 -0
  248. package/dist/store/messages.d.ts.map +1 -0
  249. package/dist/store/messages.js +102 -0
  250. package/dist/store/messages.js.map +1 -0
  251. package/dist/store/people.d.ts +53 -0
  252. package/dist/store/people.d.ts.map +1 -0
  253. package/dist/store/people.js +65 -0
  254. package/dist/store/people.js.map +1 -0
  255. package/dist/store/queries.d.ts +22 -0
  256. package/dist/store/queries.d.ts.map +1 -0
  257. package/dist/store/queries.js +22 -0
  258. package/dist/store/queries.js.map +1 -0
  259. package/dist/store/roster.d.ts +38 -0
  260. package/dist/store/roster.d.ts.map +1 -0
  261. package/dist/store/roster.js +54 -0
  262. package/dist/store/roster.js.map +1 -0
  263. package/dist/store/search-index.d.ts +40 -0
  264. package/dist/store/search-index.d.ts.map +1 -0
  265. package/dist/store/search-index.js +19 -0
  266. package/dist/store/search-index.js.map +1 -0
  267. package/dist/store/searches.d.ts +22 -0
  268. package/dist/store/searches.d.ts.map +1 -0
  269. package/dist/store/searches.js +25 -0
  270. package/dist/store/searches.js.map +1 -0
  271. package/dist/store/sqlite/accounts.d.ts +1 -1
  272. package/dist/store/sqlite/admin-statistics.d.ts +1 -1
  273. package/dist/store/sqlite/batches.d.ts +1 -1
  274. package/dist/store/sqlite/bot-updates.d.ts +1 -1
  275. package/dist/store/sqlite/chats.d.ts +1 -1
  276. package/dist/store/sqlite/conversation-eligibility.d.ts +1 -1
  277. package/dist/store/sqlite/conversations.d.ts +1 -1
  278. package/dist/store/sqlite/emails.d.ts +1 -1
  279. package/dist/store/sqlite/emails.d.ts.map +1 -1
  280. package/dist/store/sqlite/emails.js +5 -2
  281. package/dist/store/sqlite/emails.js.map +1 -1
  282. package/dist/store/sqlite/identities.d.ts +1 -1
  283. package/dist/store/sqlite/knowledge.d.ts +1 -1
  284. package/dist/store/sqlite/lucene-fields.d.ts +66 -0
  285. package/dist/store/sqlite/lucene-fields.d.ts.map +1 -0
  286. package/dist/store/sqlite/lucene-fields.js +360 -0
  287. package/dist/store/sqlite/lucene-fields.js.map +1 -0
  288. package/dist/store/sqlite/lucene.d.ts +2 -13
  289. package/dist/store/sqlite/lucene.d.ts.map +1 -1
  290. package/dist/store/sqlite/lucene.js +27 -329
  291. package/dist/store/sqlite/lucene.js.map +1 -1
  292. package/dist/store/sqlite/meeting-preparation-notes.d.ts.map +1 -1
  293. package/dist/store/sqlite/meeting-preparation-notes.js +13 -5
  294. package/dist/store/sqlite/meeting-preparation-notes.js.map +1 -1
  295. package/dist/store/sqlite/meeting-projects.d.ts +1 -1
  296. package/dist/store/sqlite/messages.d.ts +1 -1
  297. package/dist/store/sqlite/person-links.d.ts +1 -1
  298. package/dist/store/sqlite/private-people.d.ts +1 -1
  299. package/dist/store/sqlite/proposed-actions.d.ts +1 -1
  300. package/dist/store/sqlite/ranges.d.ts +1 -1
  301. package/dist/store/sqlite/ranking-evidence.d.ts +1 -1
  302. package/dist/store/sqlite/reads.d.ts +1 -1
  303. package/dist/store/sqlite/search.d.ts +1 -1
  304. package/dist/store/sqlite/tags.d.ts +1 -1
  305. package/dist/store/sqlite/task-rule-stops.d.ts +1 -1
  306. package/dist/store/sqlite/words.d.ts +1 -1
  307. package/dist/store/store.d.ts +62 -828
  308. package/dist/store/store.d.ts.map +1 -1
  309. package/dist/store/store.js +105 -836
  310. package/dist/store/store.js.map +1 -1
  311. package/dist/store/sync.d.ts +36 -0
  312. package/dist/store/sync.d.ts.map +1 -0
  313. package/dist/store/sync.js +59 -0
  314. package/dist/store/sync.js.map +1 -0
  315. package/dist/store/tags.d.ts +13 -0
  316. package/dist/store/tags.d.ts.map +1 -0
  317. package/dist/store/tags.js +23 -0
  318. package/dist/store/tags.js.map +1 -0
  319. package/dist/store/types.d.ts +247 -0
  320. package/dist/store/types.d.ts.map +1 -0
  321. package/dist/store/types.js +2 -0
  322. package/dist/store/types.js.map +1 -0
  323. package/dist/store/vectors.d.ts +109 -0
  324. package/dist/store/vectors.d.ts.map +1 -0
  325. package/dist/store/vectors.js +221 -0
  326. package/dist/store/vectors.js.map +1 -0
  327. package/dist/update/index.d.ts +52 -0
  328. package/dist/update/index.d.ts.map +1 -0
  329. package/dist/update/index.js +68 -0
  330. package/dist/update/index.js.map +1 -0
  331. package/package.json +5 -1
@@ -0,0 +1,360 @@
1
+ import { CliError } from "@wirecat/cli-base";
2
+ import { storedKinds } from "../../domain/attachments.js";
3
+ import { siteOf } from "../../domain/mentions.js";
4
+ import { tagOf } from "../../domain/tags.js";
5
+ import { foldRegex, wildcardPattern } from "../../search/lucene/automaton.js";
6
+ import { PRESETS } from "../../search/lucene/presets.js";
7
+ import { parseBytes } from "../../search/lucene/registry.js";
8
+ import { isStemmed } from "../../search/lucene/resolved.js";
9
+ import { exhausted, QUERY_LIMITS, searchError } from "../../search/lucene/types.js";
10
+ import { inSource } from "../../search/query.js";
11
+ import { normalize } from "../normalize.js";
12
+ import { linkMatch } from "./mention-links.js";
13
+ import { valueMatch } from "./phone-countries.js";
14
+ /** A voice note's transcript is its attachment's text, written by speech recognition (`speech:<model>`). */
15
+ export const SPEECH = "coalesce(att.extractor,'') LIKE 'speech:%'";
16
+ export const quoted = (value) => `"${value.replaceAll('"', '""')}"`;
17
+ export const combine = (parts, operator) => ({
18
+ sql: parts.length ? `(${parts.map(({ sql }) => sql).join(` ${operator} `)})` : operator === "AND" ? "1" : "0",
19
+ params: parts.flatMap(({ params }) => params),
20
+ exact: parts.every(({ exact }) => exact),
21
+ });
22
+ export const prefixOf = (pattern) => {
23
+ if (pattern.includes("|"))
24
+ return "";
25
+ let prefix = "";
26
+ for (const c of pattern) {
27
+ if (!/[\p{L}\p{N}_ -]/u.test(c)) {
28
+ if (["?", "*", "{"].includes(c))
29
+ prefix = [...prefix].slice(0, -1).join("");
30
+ break;
31
+ }
32
+ prefix += c;
33
+ }
34
+ return prefix;
35
+ };
36
+ export const wordMatch = (corpus, match) => ({
37
+ sql: `m.id IN (SELECT rowid FROM ${corpus.words} WHERE ${corpus.words} MATCH ?)`,
38
+ params: [`normalized_text : (${match})`],
39
+ exact: true,
40
+ fts: match,
41
+ });
42
+ // The vocabulary is the whole store's, so a chat or date filter does not shorten it.
43
+ const tooManyWords = ({ field, operator, value, span }, alone) => {
44
+ const term = `${field}:${operator === "regex" ? `/${value}/` : value}`;
45
+ throw new CliError("validation_error", `search: ${term}${alone ? " matches" : " and the patterns before it match"} more than ${QUERY_LIMITS.expansions} indexed words, the term expansions budget — use a longer prefix, or body:/…/ inside one chat`, {
46
+ reason: "query.too-large",
47
+ budget: "term expansions",
48
+ complete: false,
49
+ term,
50
+ limit: QUERY_LIMITS.expansions,
51
+ span,
52
+ });
53
+ };
54
+ const bound = (sql, ...params) => ({ sql, params, exact: true });
55
+ const always = (fragment) => ({ fragment });
56
+ // The items whose mentions match: an email by its text; a message by its text, files and voice notes.
57
+ const mentioned = ({ mail }, where, params) => mail
58
+ ? bound(`m.id IN (SELECT mn.source_id FROM mentions mn WHERE mn.source_type='email' AND ${where})`, ...params)
59
+ : bound(`m.id IN (SELECT mn.source_id FROM mentions mn WHERE mn.source_type='message' AND ${where} ` +
60
+ "UNION SELECT a.attachable_id FROM mentions mn JOIN attachments a ON a.id=mn.source_id " +
61
+ `AND a.attachable_type='message' WHERE mn.source_type='attachment' AND ${where})`, ...params, ...params);
62
+ const stemsOf = ({ execution }, text) => execution.stemmer?.phrases(text);
63
+ const stemmedText = (node, scope) => {
64
+ const { execution, corpus } = scope;
65
+ if (!execution.stemmer && !execution.unstemmed)
66
+ throw new Error("a stemmed leaf reached the compiler without the store's stemmer");
67
+ const text = normalize(node.value);
68
+ const stems = stemsOf(scope, node.value);
69
+ // Words OR stems: two spellings can fold one word to different stems, and every exact hit must stay.
70
+ return always(/[\p{L}\p{N}]/u.test(text)
71
+ ? scope.everywhere(node, text, {
72
+ sql: `m.id IN (SELECT rowid FROM ${corpus.words} WHERE ${corpus.words} MATCH ?)${stems ? ` OR m.id IN (SELECT rowid FROM ${corpus.stems} WHERE ${corpus.stems} MATCH ?)` : ""}`,
73
+ params: [`normalized_text : (${quoted(text)})`, ...(stems ? [`stems : (${stems})`] : [])],
74
+ exact: true,
75
+ fts: quoted(text),
76
+ ...(stems ? { stems } : {}),
77
+ })
78
+ : bound("0"));
79
+ };
80
+ const words = (node, scope) => {
81
+ const { operator, value } = node;
82
+ const { corpus } = scope;
83
+ if (value === "")
84
+ return always(bound("0"));
85
+ if (isStemmed(node))
86
+ return stemmedText(node, scope);
87
+ if (operator === "term" || operator === "phrase") {
88
+ const text = normalize(value);
89
+ const stems = stemsOf(scope, value);
90
+ return always(/[\p{L}\p{N}]/u.test(text)
91
+ ? scope.everywhere(node, text, { ...wordMatch(corpus, quoted(text)), ...(stems ? { stems } : {}) })
92
+ : bound("0"));
93
+ }
94
+ const pattern = operator === "wildcard" ? wildcardPattern(normalize(value)) : foldRegex(value, node.span);
95
+ const automaton = scope.patternOf(pattern, node);
96
+ const cached = scope.expanded.get(pattern);
97
+ if (cached)
98
+ return { node, fragment: cached };
99
+ const prefix = prefixOf(pattern);
100
+ const terms = scope.database
101
+ .prepare(`SELECT term FROM ${corpus.vocab} WHERE col='normalized_text'${prefix ? " AND term>=? AND term<=?" : ""} ORDER BY term LIMIT ?`)
102
+ .all(...(prefix ? [prefix, `${prefix}\u{10ffff}`] : []), QUERY_LIMITS.expansions + 1);
103
+ if (scope.expand(terms.length) > QUERY_LIMITS.expansions)
104
+ tooManyWords(node, terms.length > QUERY_LIMITS.expansions);
105
+ const matches = terms.flatMap(({ term }) => {
106
+ scope.check();
107
+ return automaton.test(String(term), scope.budget) ? [quoted(String(term))] : [];
108
+ });
109
+ const fragment = matches.length ? wordMatch(corpus, matches.join(" OR ")) : bound("0");
110
+ scope.expanded.set(pattern, fragment);
111
+ return always(fragment);
112
+ };
113
+ const body = (node, scope) => {
114
+ const { operator, value } = node;
115
+ if (value === "")
116
+ return always(bound("m.text = ?", ""));
117
+ if (operator === "term" || operator === "phrase")
118
+ return always(bound("m.text = ?", value));
119
+ const automaton = scope.patternOf(operator === "wildcard" ? wildcardPattern(value) : value, node);
120
+ return { fragment: { sql: "1", params: [], exact: false }, test: (text) => automaton.test(text, scope.budget) };
121
+ };
122
+ const preset = ({ value }, { budget }) => ({
123
+ fragment: { sql: "1", params: [], exact: false },
124
+ test: (text, attachments) => {
125
+ budget.work += text.length;
126
+ if (budget.work > QUERY_LIMITS.work)
127
+ exhausted("detector work");
128
+ return PRESETS[value.toLowerCase()]?.candidate(text, attachments) ?? false;
129
+ },
130
+ });
131
+ const attachmentColumn = (column) => (node, scope) => {
132
+ const { operator, value } = node;
133
+ const { database, execution, corpus, budget, boundedAttachments } = scope;
134
+ const wanted = normalize(value);
135
+ const automaton = operator === "wildcard" || operator === "regex"
136
+ ? scope.patternOf(operator === "wildcard" ? wildcardPattern(wanted) : foldRegex(value, node.span), node)
137
+ : undefined;
138
+ const fits = (known) => {
139
+ const name = normalize(known);
140
+ budget.work += name.length;
141
+ if (budget.work > QUERY_LIMITS.work)
142
+ exhausted("detector work");
143
+ if (automaton)
144
+ return automaton.test(name, budget);
145
+ return name === wanted || (column === "mime" && !wanted.includes("/") && name.startsWith(`${wanted}/`));
146
+ };
147
+ let accounts = combine(execution.accounts.map(({ provider, account }) => bound("ac.provider=? AND ac.external_id=?", provider, account)), "OR");
148
+ if (boundedAttachments && execution.chat) {
149
+ const chat = execution.chat;
150
+ accounts = combine([
151
+ accounts,
152
+ bound(`ac.provider=? AND ac.external_id=? AND m.chat_id IN (SELECT id FROM ${corpus.threads} WHERE account_id=ac.id AND external_id=?)`, chat.account.provider, chat.account.account, chat.chatId),
153
+ ], "AND");
154
+ }
155
+ const page = database.prepare(`SELECT att.id AS id, att.attachable_id AS message, att.${column} AS value FROM attachments att JOIN ${corpus.rows} m ON m.id=att.attachable_id AND att.attachable_type='${corpus.item}' JOIN accounts ac ON ac.id=m.account_id WHERE att.id > ? AND att.${column} IS NOT NULL AND m.deleted_at IS NULL AND ${accounts.sql} ORDER BY att.id LIMIT 5000`);
156
+ const messages = new Set();
157
+ for (let rows = page.all(0, ...accounts.params); rows.length > 0;) {
158
+ scope.check();
159
+ for (const row of rows) {
160
+ if (fits(String(row.value)))
161
+ messages.add(Number(row.message));
162
+ if (boundedAttachments && messages.size > QUERY_LIMITS.candidates)
163
+ exhausted("attachment message keys");
164
+ }
165
+ rows = page.all(Number(rows.at(-1)?.id), ...accounts.params);
166
+ }
167
+ return always(bound("m.id IN (SELECT value FROM json_each(?))", JSON.stringify([...messages])));
168
+ };
169
+ const size = (node, { corpus }) => {
170
+ const { operator, value } = node;
171
+ const conditions = operator === "range"
172
+ ? [
173
+ ...(value === "*"
174
+ ? []
175
+ : [bound(`att.size ${node.lower_inclusive ? ">=" : ">"} ?`, parseBytes(value, node.span))]),
176
+ ...(node.upper === undefined || node.upper === "*"
177
+ ? []
178
+ : [bound(`att.size ${node.upper_inclusive ? "<=" : "<"} ?`, parseBytes(node.upper, node.span))]),
179
+ ]
180
+ : [bound("att.size = ?", parseBytes(value, node.span))];
181
+ const range = combine(conditions, "AND");
182
+ return always(bound(`EXISTS (SELECT 1 FROM attachments att WHERE att.attachable_type='${corpus.item}' AND att.attachable_id=m.id AND att.size IS NOT NULL AND ${range.sql})`, ...range.params));
183
+ };
184
+ const attachmentText = (which) => ({ value }, scope) => {
185
+ const text = normalize(value);
186
+ // Never `fts`: the ranking ANDs every required word into message_words, where a file's words are not.
187
+ const set = scope.attachmentWords(quoted(text), which);
188
+ return always(/[\p{L}\p{N}]/u.test(text) ? bound(`m.id IN (${set.sql})`, ...set.params) : bound("0"));
189
+ };
190
+ const date = (node) => {
191
+ const range = node.resolution?.date;
192
+ if (!range)
193
+ searchError("query.invalid-ast", node.span);
194
+ const conditions = [];
195
+ if (range.lower !== undefined)
196
+ conditions.push(bound(`m.sent_at ${range.lower_inclusive ? ">=" : ">"} ?`, range.lower));
197
+ if (range.upper !== undefined)
198
+ conditions.push(bound(`m.sent_at ${range.upper_inclusive ? "<=" : "<"} ?`, range.upper));
199
+ return always(combine(conditions, "AND"));
200
+ };
201
+ const chat = (node, { corpus }) => {
202
+ const found = node.resolution?.chat;
203
+ if (!found)
204
+ searchError("query.invalid-ast", node.span);
205
+ return always(bound(`m.chat_id IN (SELECT cc.id FROM ${corpus.threads} cc JOIN accounts aa ON aa.id=cc.account_id WHERE aa.provider=? AND aa.external_id=? AND cc.external_id=?)`, found.account.provider, found.account.account, found.chatId));
206
+ };
207
+ const from = (node) => {
208
+ const sender = node.resolution?.sender;
209
+ if (node.resolution?.outgoing)
210
+ return always(bound("m.outgoing = 1"));
211
+ if (!sender)
212
+ searchError("query.invalid-ast", node.span);
213
+ return always(bound("m.sender_identity_id IN (SELECT ii.id FROM identities ii WHERE ii.provider=? AND ii.external_id=?)", sender.provider, sender.id));
214
+ };
215
+ const mentions = (node, scope) => {
216
+ const [type, id = ""] = node.value.split(":");
217
+ const pk = Number(id);
218
+ // A person is mentioned by name, or by a phone or an address that is theirs.
219
+ const linked = {
220
+ person: [
221
+ "(mn.target_type = 'person' AND mn.target_id = ?) OR (mn.target_type = 'identity' " +
222
+ "AND mn.target_id IN (SELECT identity_id FROM identity_links WHERE person_id = ?))",
223
+ [pk, pk],
224
+ ],
225
+ organization: [
226
+ "mn.target_type = 'identity' AND mn.target_id IN " +
227
+ "(SELECT identity_id FROM organization_identities WHERE organization_id = ?)",
228
+ [pk],
229
+ ],
230
+ document: ["mn.target_type = 'document' AND mn.target_id = ?", [pk]],
231
+ };
232
+ const target = linked[type ?? ""];
233
+ if (target === undefined)
234
+ searchError("query.invalid-reference", node.span);
235
+ return always(mentioned(scope, `mn.status = 'linked' AND (${target[0]})`, target[1]));
236
+ };
237
+ const link = (field) => ({ value }, scope) => always({
238
+ ...linkMatch(field, value, scope.mail, (where, params) => mentioned(scope, where, params)),
239
+ exact: true,
240
+ });
241
+ const found = ({ field, value }, scope) => {
242
+ const match = field === "domain" ? undefined : valueMatch(scope.database, value);
243
+ return always(match === undefined
244
+ ? mentioned(scope, "mn.domain = ? AND mn.status <> 'dismissed'", [siteOf(value.toLowerCase())])
245
+ : mentioned(scope, `mn.kind = ? AND ${match.sql} AND mn.status <> 'dismissed'`, [field, ...match.params]));
246
+ };
247
+ const tag = (node, { corpus }) => {
248
+ const name = tagOf(node.value);
249
+ if (name === undefined)
250
+ searchError("query.invalid-tag", node.span);
251
+ return always(bound(`m.id IN (SELECT tg.taggable_id FROM taggings tg JOIN tags t ON t.id=tg.tag_id WHERE t.name=? AND tg.taggable_type='${corpus.item}') OR ` +
252
+ `m.chat_id IN (SELECT tg.taggable_id FROM taggings tg JOIN tags t ON t.id=tg.tag_id WHERE t.name=? AND tg.taggable_type='${corpus.thread}') OR ` +
253
+ "m.sender_identity_id IN (SELECT tg.taggable_id FROM taggings tg JOIN tags t ON t.id=tg.tag_id WHERE t.name=? AND tg.taggable_type='identity')", name, name, name));
254
+ };
255
+ const messengerOnly = (compile) => (node, scope) => {
256
+ if (scope.mail)
257
+ throw new CliError("validation_error", `search: ${node.field}: is a messenger field — mail has no ${node.field}`, {
258
+ reason: "query.unsupported-field",
259
+ span: node.span,
260
+ });
261
+ return compile(node, scope);
262
+ };
263
+ const topic = messengerOnly(({ value }) => always(bound("m.thread_external_id = ?", value)));
264
+ const kind = messengerOnly(({ value }) => always(bound("CASE WHEN json_extract(c.metadata,'$.peerKind') IN ('private','saved','bot','service','group','channel','unknown') THEN json_extract(c.metadata,'$.peerKind') WHEN c.kind='dialog' AND json_extract(c.metadata,'$.isBot')=1 THEN 'bot' WHEN c.kind='dialog' THEN 'private' ELSE c.kind END = ?", value.toLowerCase())));
265
+ const has = ({ value }, { corpus, mail }) => {
266
+ const wanted = value.toLowerCase();
267
+ return always(wanted === "text"
268
+ ? bound("length(trim(coalesce(m.text,''))) > 0")
269
+ : wanted === "link"
270
+ ? bound(`(${mail ? "m.text LIKE '%' || ? || '%'" : "m.id IN (SELECT rowid FROM messages_fts WHERE messages_fts MATCH ?)"} OR EXISTS (SELECT 1 FROM attachments att WHERE att.attachable_type='${corpus.item}' AND att.attachable_id=m.id AND att.kind IN ('share','webpage')))`, mail ? "://" : quoted("://"))
271
+ : wanted === "attachment"
272
+ ? bound(`EXISTS (SELECT 1 FROM attachments att WHERE att.attachable_type='${corpus.item}' AND att.attachable_id=m.id)`)
273
+ : bound(`EXISTS (SELECT 1 FROM attachments att WHERE att.attachable_type='${corpus.item}' AND att.attachable_id=m.id AND att.kind IN (${storedKinds(wanted)
274
+ .map(() => "?")
275
+ .join(",")}))`, ...storedKinds(wanted)));
276
+ };
277
+ const inSourceField = ({ value }, { execution }) => {
278
+ const source = value.toLowerCase();
279
+ const chosen = execution.accounts.filter(({ provider }) => inSource(source, provider));
280
+ return always(chosen.length
281
+ ? combine(chosen.map(({ provider, account }) => bound("ac.provider=? AND ac.external_id=?", provider, account)), "OR")
282
+ : bound("0"));
283
+ };
284
+ const recipient = (node, { mail }) => {
285
+ const who = node.resolution?.sender;
286
+ if (!who)
287
+ searchError("query.invalid-ast", node.span);
288
+ return always(mail
289
+ ? bound("m.id IN (SELECT r.email_id FROM email_recipients r JOIN identities ii ON ii.id = r.identity_id WHERE r.role = ? AND ii.provider = ? AND ii.external_id = ?)", node.field, who.provider, who.id)
290
+ : bound("0"));
291
+ };
292
+ // What a page says about itself, and whether a note is written or a file, exist for notes only.
293
+ const notesOnly = () => always(bound("0"));
294
+ const mailbox = ({ value }, { mail }) => always(mail
295
+ ? bound(
296
+ // Not tied to m.account_id: a correlated subquery re-reads every mailbox link for each email (minutes on
297
+ // 880k links), and an email only ever links to its own account's mailboxes anyway.
298
+ `m.id IN (SELECT em.email_id FROM email_mailboxes em WHERE em.mailbox_id IN
299
+ (SELECT b.id FROM mailboxes b WHERE lower(b.external_id) = lower(?) OR lower(b.name) = lower(?)))`, value, value)
300
+ : bound("0"));
301
+ const is = ({ value }, { mail }) => {
302
+ const state = value.toLowerCase();
303
+ return always(!mail ? bound("0") : state === "starred" ? bound("m.flagged = 1") : bound("m.read = ?", state === "read" ? 1 : 0));
304
+ };
305
+ const subject = ({ operator, value }, { corpus, mail }) => {
306
+ const wanted = normalize(value);
307
+ const parts = wanted.match(/[\p{L}\p{N}]+/gu) ?? [];
308
+ if (!mail || !parts.length)
309
+ return always(bound("0"));
310
+ // The word index holds subject and body together: it narrows, the subject itself decides.
311
+ return {
312
+ fragment: { ...wordMatch(corpus, parts.map(quoted).join(" AND ")), exact: false },
313
+ test: (text) => {
314
+ const heading = normalize(text.slice(0, Math.max(0, text.indexOf("\n\n"))));
315
+ return operator === "phrase"
316
+ ? heading.includes(wanted)
317
+ : parts.every((word) => new RegExp(`(^|[^\\p{L}\\p{N}])${word}`, "u").test(heading));
318
+ },
319
+ };
320
+ };
321
+ /** One compiler per field of `QUERY_FIELDS`, by its name: a leaf compiles by a lookup, never a branch. */
322
+ export const FIELD_COMPILERS = {
323
+ text: words,
324
+ exact: words,
325
+ body,
326
+ preset,
327
+ filename: attachmentColumn("name"),
328
+ mime: attachmentColumn("mime"),
329
+ size,
330
+ content: attachmentText("file"),
331
+ transcript: attachmentText("transcript"),
332
+ date,
333
+ chat,
334
+ from,
335
+ mentions,
336
+ url: link("url"),
337
+ link: link("link"),
338
+ phone: found,
339
+ email: found,
340
+ domain: found,
341
+ tag,
342
+ topic,
343
+ kind,
344
+ has,
345
+ in: inSourceField,
346
+ to: recipient,
347
+ cc: recipient,
348
+ bcc: recipient,
349
+ title: notesOnly,
350
+ site: notesOnly,
351
+ lang: notesOnly,
352
+ author: notesOnly,
353
+ keyword: notesOnly,
354
+ source: notesOnly,
355
+ mailbox,
356
+ label: mailbox,
357
+ is,
358
+ subject,
359
+ };
360
+ //# sourceMappingURL=lucene-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lucene-fields.js","sourceRoot":"","sources":["../../../src/store/sqlite/lucene-fields.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,9 @@
1
1
  import type { Page } from "../../domain/models.js";
2
2
  import type { QueryExecution } from "../../search/lucene/resolved.js";
3
3
  import type { SqlValue } from "../driver.js";
4
- import type { ScoredHit } from "../store.js";
5
4
  import type { StoreContext } from "./open.js";
6
- /** The tables one kind of searchable item lives in; the compiler names its row `m` and its thread `c`. */
7
- export interface Corpus {
8
- rows: string;
9
- threads: string;
10
- words: string;
11
- stems: string;
12
- vocab: string;
13
- item: string;
14
- thread: string;
15
- }
16
- export declare const prefixOf: (pattern: string) => string;
5
+ import type { ScoredHit } from "./words.js";
6
+ export { type Corpus, prefixOf } from "./lucene-fields.js";
17
7
  export type QueryGrouping = "chat" | "sender" | "time";
18
8
  export interface QueryGroup {
19
9
  provider?: string;
@@ -34,5 +24,4 @@ interface QuerySelection {
34
24
  }
35
25
  /** The matcher and its consumer run synchronously in one read snapshot; exact keys stay in SQL. */
36
26
  export declare const withQuerySelection: <T>(context: StoreContext, execution: QueryExecution, consume: (selection: QuerySelection, check: () => void) => T) => T;
37
- export {};
38
27
  //# sourceMappingURL=lucene.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lucene.d.ts","sourceRoot":"","sources":["../../../src/store/sqlite/lucene.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAA;AAWlD,OAAO,KAAK,EAAE,cAAc,EAAmC,MAAM,iCAAiC,CAAA;AAItG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAE5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAG5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAqB7C,0GAA0G;AAC1G,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;CACf;AAkCD,eAAO,MAAM,QAAQ,YAAa,MAAM,KAAG,MAW1C,CAAA;AAwBD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAA;AACtD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;CACd;AAcD,eAAO,MAAM,UAAU,YAAa,YAAY,aAAa,cAAc,KAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAC3C,CAAA;AAC1D,iGAAiG;AACjG,eAAO,MAAM,UAAU,YACZ,YAAY,aACV,cAAc,MACrB,aAAa,KAChB,OAAO,CAAC,UAAU,EAAE,CAA8D,CAAA;AACrF,oGAAoG;AACpG,eAAO,MAAM,eAAe,YAAa,YAAY,aAAa,cAAc,KAAG,OAAO,CAAC,MAAM,EAAE,CACzC,CAAA;AA2rB1D,UAAU,cAAc;IACtB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,QAAQ,EAAE,CAAA;CACnB;AAED,mGAAmG;AACnG,eAAO,MAAM,kBAAkB,GAAI,CAAC,WACzB,YAAY,aACV,cAAc,WAChB,CAAC,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,IAAI,KAAK,CAAC,KAC3D,CAyDF,CAAA"}
1
+ {"version":3,"file":"lucene.d.ts","sourceRoot":"","sources":["../../../src/store/sqlite/lucene.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAA;AAElD,OAAO,KAAK,EAAE,cAAc,EAAmC,MAAM,iCAAiC,CAAA;AAGtG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAa5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAG7C,OAAO,KAAK,EAAc,SAAS,EAAE,MAAM,YAAY,CAAA;AAEvD,OAAO,EAAE,KAAK,MAAM,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AA0B1D,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAA;AACtD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;CACd;AAcD,eAAO,MAAM,UAAU,YAAa,YAAY,aAAa,cAAc,KAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAC3C,CAAA;AAC1D,iGAAiG;AACjG,eAAO,MAAM,UAAU,YACZ,YAAY,aACV,cAAc,MACrB,aAAa,KAChB,OAAO,CAAC,UAAU,EAAE,CAA8D,CAAA;AACrF,oGAAoG;AACpG,eAAO,MAAM,eAAe,YAAa,YAAY,aAAa,cAAc,KAAG,OAAO,CAAC,MAAM,EAAE,CACzC,CAAA;AAoa1D,UAAU,cAAc;IACtB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,QAAQ,EAAE,CAAA;CACnB;AAED,mGAAmG;AACnG,eAAO,MAAM,kBAAkB,GAAI,CAAC,WACzB,YAAY,aACV,cAAc,WAChB,CAAC,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,IAAI,KAAK,CAAC,KAC3D,CAyDF,CAAA"}