@leemour/cli-messaging 0.97.0 → 0.99.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 (244) hide show
  1. package/README.md +8 -7
  2. package/dist/cli/bot/admins.d.ts +10 -0
  3. package/dist/cli/bot/admins.d.ts.map +1 -0
  4. package/dist/cli/bot/admins.js +114 -0
  5. package/dist/cli/bot/admins.js.map +1 -0
  6. package/dist/cli/bot/command.d.ts.map +1 -1
  7. package/dist/cli/bot/command.js +17 -15
  8. package/dist/cli/bot/command.js.map +1 -1
  9. package/dist/cli/bot/context.d.ts +2 -0
  10. package/dist/cli/bot/context.d.ts.map +1 -1
  11. package/dist/cli/bot/context.js +7 -0
  12. package/dist/cli/bot/context.js.map +1 -1
  13. package/dist/cli/bot/messages.d.ts.map +1 -1
  14. package/dist/cli/bot/messages.js +20 -10
  15. package/dist/cli/bot/messages.js.map +1 -1
  16. package/dist/cli/bot/port.d.ts +128 -2
  17. package/dist/cli/bot/port.d.ts.map +1 -1
  18. package/dist/cli/bot/port.js.map +1 -1
  19. package/dist/cli/bot/registry.d.ts +2 -0
  20. package/dist/cli/bot/registry.d.ts.map +1 -1
  21. package/dist/cli/bot/registry.js +2 -0
  22. package/dist/cli/bot/registry.js.map +1 -1
  23. package/dist/cli/bot/setup.d.ts +9 -0
  24. package/dist/cli/bot/setup.d.ts.map +1 -0
  25. package/dist/cli/bot/setup.js +155 -0
  26. package/dist/cli/bot/setup.js.map +1 -0
  27. package/dist/cli/bot/updates.d.ts +23 -0
  28. package/dist/cli/bot/updates.d.ts.map +1 -0
  29. package/dist/cli/bot/updates.js +61 -0
  30. package/dist/cli/bot/updates.js.map +1 -0
  31. package/dist/cli/bot/watch.d.ts +9 -0
  32. package/dist/cli/bot/watch.d.ts.map +1 -0
  33. package/dist/cli/bot/watch.js +197 -0
  34. package/dist/cli/bot/watch.js.map +1 -0
  35. package/dist/cli/config-command.js +1 -1
  36. package/dist/cli/config-command.js.map +1 -1
  37. package/dist/cli/deadline.d.ts.map +1 -1
  38. package/dist/cli/deadline.js +11 -2
  39. package/dist/cli/deadline.js.map +1 -1
  40. package/dist/cli/index.d.ts +5 -2
  41. package/dist/cli/index.d.ts.map +1 -1
  42. package/dist/cli/index.js +2 -0
  43. package/dist/cli/index.js.map +1 -1
  44. package/dist/cli/messenger/admin-moderation-command.js +2 -2
  45. package/dist/cli/messenger/admin-moderation-command.js.map +1 -1
  46. package/dist/cli/messenger/context.d.ts +18 -2
  47. package/dist/cli/messenger/context.d.ts.map +1 -1
  48. package/dist/cli/messenger/context.js +30 -8
  49. package/dist/cli/messenger/context.js.map +1 -1
  50. package/dist/cli/messenger/download-command.d.ts.map +1 -1
  51. package/dist/cli/messenger/download-command.js +97 -30
  52. package/dist/cli/messenger/download-command.js.map +1 -1
  53. package/dist/cli/messenger/guard-commands.js +3 -3
  54. package/dist/cli/messenger/guard-commands.js.map +1 -1
  55. package/dist/cli/messenger/messages-command.d.ts.map +1 -1
  56. package/dist/cli/messenger/messages-command.js +45 -11
  57. package/dist/cli/messenger/messages-command.js.map +1 -1
  58. package/dist/cli/messenger/models-command.d.ts +1 -1
  59. package/dist/cli/messenger/models-command.d.ts.map +1 -1
  60. package/dist/cli/messenger/models-command.js +64 -3
  61. package/dist/cli/messenger/models-command.js.map +1 -1
  62. package/dist/cli/messenger/observed.d.ts.map +1 -1
  63. package/dist/cli/messenger/observed.js +27 -10
  64. package/dist/cli/messenger/observed.js.map +1 -1
  65. package/dist/cli/messenger/port.d.ts +26 -9
  66. package/dist/cli/messenger/port.d.ts.map +1 -1
  67. package/dist/cli/messenger/port.js.map +1 -1
  68. package/dist/cli/messenger/stored.d.ts +3 -2
  69. package/dist/cli/messenger/stored.d.ts.map +1 -1
  70. package/dist/cli/messenger/stored.js +75 -33
  71. package/dist/cli/messenger/stored.js.map +1 -1
  72. package/dist/cli/messenger/watch-command.d.ts +2 -1
  73. package/dist/cli/messenger/watch-command.d.ts.map +1 -1
  74. package/dist/cli/messenger/watch-command.js +11 -2
  75. package/dist/cli/messenger/watch-command.js.map +1 -1
  76. package/dist/embeddings/embed.d.ts +22 -0
  77. package/dist/embeddings/embed.d.ts.map +1 -0
  78. package/dist/embeddings/embed.js +69 -0
  79. package/dist/embeddings/embed.js.map +1 -0
  80. package/dist/embeddings/models.d.ts +33 -0
  81. package/dist/embeddings/models.d.ts.map +1 -0
  82. package/dist/embeddings/models.js +85 -0
  83. package/dist/embeddings/models.js.map +1 -0
  84. package/dist/index.d.ts +0 -1
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js.map +1 -1
  87. package/dist/kit/contract.d.ts +39 -0
  88. package/dist/kit/contract.d.ts.map +1 -0
  89. package/dist/kit/contract.js +449 -0
  90. package/dist/kit/contract.js.map +1 -0
  91. package/dist/kit/fake.d.ts +16 -0
  92. package/dist/kit/fake.d.ts.map +1 -0
  93. package/dist/kit/fake.js +457 -0
  94. package/dist/kit/fake.js.map +1 -0
  95. package/dist/kit/index.d.ts +4 -0
  96. package/dist/kit/index.d.ts.map +1 -0
  97. package/dist/kit/index.js +4 -0
  98. package/dist/kit/index.js.map +1 -0
  99. package/dist/kit/seed.d.ts +38 -0
  100. package/dist/kit/seed.d.ts.map +1 -0
  101. package/dist/kit/seed.js +83 -0
  102. package/dist/kit/seed.js.map +1 -0
  103. package/dist/mcp/resources.d.ts +6 -1
  104. package/dist/mcp/resources.d.ts.map +1 -1
  105. package/dist/mcp/resources.js +15 -5
  106. package/dist/mcp/resources.js.map +1 -1
  107. package/dist/mcp/server.d.ts.map +1 -1
  108. package/dist/mcp/server.js +3 -0
  109. package/dist/mcp/server.js.map +1 -1
  110. package/dist/mcp/tool.d.ts +12 -2
  111. package/dist/mcp/tool.d.ts.map +1 -1
  112. package/dist/mcp/tool.js +15 -8
  113. package/dist/mcp/tool.js.map +1 -1
  114. package/dist/mcp/tools/chats.js +3 -3
  115. package/dist/mcp/tools/chats.js.map +1 -1
  116. package/dist/mcp/tools/contacts.js +3 -3
  117. package/dist/mcp/tools/contacts.js.map +1 -1
  118. package/dist/mcp/tools/inbox.d.ts.map +1 -1
  119. package/dist/mcp/tools/inbox.js +3 -4
  120. package/dist/mcp/tools/inbox.js.map +1 -1
  121. package/dist/mcp/tools/messages.d.ts.map +1 -1
  122. package/dist/mcp/tools/messages.js +19 -12
  123. package/dist/mcp/tools/messages.js.map +1 -1
  124. package/dist/mcp/tools/review.d.ts.map +1 -1
  125. package/dist/mcp/tools/review.js +3 -4
  126. package/dist/mcp/tools/review.js.map +1 -1
  127. package/dist/moderation/check.d.ts +3 -1
  128. package/dist/moderation/check.d.ts.map +1 -1
  129. package/dist/moderation/check.js +3 -2
  130. package/dist/moderation/check.js.map +1 -1
  131. package/dist/parity/audit.d.ts +11 -9
  132. package/dist/parity/audit.d.ts.map +1 -1
  133. package/dist/parity/audit.js +63 -46
  134. package/dist/parity/audit.js.map +1 -1
  135. package/dist/parity/bin.js +17 -8
  136. package/dist/parity/bin.js.map +1 -1
  137. package/dist/parity/catalogue.d.ts.map +1 -1
  138. package/dist/parity/catalogue.js +7 -1
  139. package/dist/parity/catalogue.js.map +1 -1
  140. package/dist/parity/manifest.d.ts +19 -12
  141. package/dist/parity/manifest.d.ts.map +1 -1
  142. package/dist/parity/manifest.js +60 -37
  143. package/dist/parity/manifest.js.map +1 -1
  144. package/dist/parity/pages.d.ts +3 -3
  145. package/dist/parity/pages.d.ts.map +1 -1
  146. package/dist/parity/pages.js +4 -5
  147. package/dist/parity/pages.js.map +1 -1
  148. package/dist/parity/seed.d.ts +11 -0
  149. package/dist/parity/seed.d.ts.map +1 -0
  150. package/dist/parity/seed.js +99 -0
  151. package/dist/parity/seed.js.map +1 -0
  152. package/dist/parity/wording.d.ts +4 -3
  153. package/dist/parity/wording.d.ts.map +1 -1
  154. package/dist/parity/wording.js +21 -10
  155. package/dist/parity/wording.js.map +1 -1
  156. package/dist/search/correct.d.ts +25 -0
  157. package/dist/search/correct.d.ts.map +1 -0
  158. package/dist/search/correct.js +65 -0
  159. package/dist/search/correct.js.map +1 -0
  160. package/dist/search/query.d.ts +7 -2
  161. package/dist/search/query.d.ts.map +1 -1
  162. package/dist/search/query.js +12 -8
  163. package/dist/search/query.js.map +1 -1
  164. package/dist/search/search.d.ts +27 -0
  165. package/dist/search/search.d.ts.map +1 -0
  166. package/dist/search/search.js +65 -0
  167. package/dist/search/search.js.map +1 -0
  168. package/dist/sends/guarded.d.ts +12 -0
  169. package/dist/sends/guarded.d.ts.map +1 -1
  170. package/dist/sends/guarded.js +24 -2
  171. package/dist/sends/guarded.js.map +1 -1
  172. package/dist/services/archive.d.ts +8 -3
  173. package/dist/services/archive.d.ts.map +1 -1
  174. package/dist/services/archive.js +24 -3
  175. package/dist/services/archive.js.map +1 -1
  176. package/dist/services/chats.d.ts.map +1 -1
  177. package/dist/services/chats.js +13 -9
  178. package/dist/services/chats.js.map +1 -1
  179. package/dist/services/deps.d.ts +13 -0
  180. package/dist/services/deps.d.ts.map +1 -1
  181. package/dist/services/deps.js +12 -0
  182. package/dist/services/deps.js.map +1 -1
  183. package/dist/services/inbox.d.ts +14 -4
  184. package/dist/services/inbox.d.ts.map +1 -1
  185. package/dist/services/inbox.js +55 -14
  186. package/dist/services/inbox.js.map +1 -1
  187. package/dist/services/index.d.ts +2 -2
  188. package/dist/services/index.d.ts.map +1 -1
  189. package/dist/services/index.js +1 -1
  190. package/dist/services/index.js.map +1 -1
  191. package/dist/services/messages.d.ts +51 -6
  192. package/dist/services/messages.d.ts.map +1 -1
  193. package/dist/services/messages.js +202 -19
  194. package/dist/services/messages.js.map +1 -1
  195. package/dist/services/moderation.d.ts.map +1 -1
  196. package/dist/services/moderation.js +7 -1
  197. package/dist/services/moderation.js.map +1 -1
  198. package/dist/services/people.d.ts.map +1 -1
  199. package/dist/services/people.js +8 -5
  200. package/dist/services/people.js.map +1 -1
  201. package/dist/speech/hearing.d.ts +1 -1
  202. package/dist/speech/hearing.d.ts.map +1 -1
  203. package/dist/speech/hearing.js +2 -2
  204. package/dist/speech/hearing.js.map +1 -1
  205. package/dist/speech/install.d.ts +8 -1
  206. package/dist/speech/install.d.ts.map +1 -1
  207. package/dist/speech/install.js +11 -4
  208. package/dist/speech/install.js.map +1 -1
  209. package/dist/store/index.d.ts +1 -1
  210. package/dist/store/index.d.ts.map +1 -1
  211. package/dist/store/index.js.map +1 -1
  212. package/dist/store/sqlite/accounts.d.ts +1 -0
  213. package/dist/store/sqlite/accounts.d.ts.map +1 -1
  214. package/dist/store/sqlite/accounts.js +6 -1
  215. package/dist/store/sqlite/accounts.js.map +1 -1
  216. package/dist/store/sqlite/completeness.d.ts +17 -0
  217. package/dist/store/sqlite/completeness.d.ts.map +1 -0
  218. package/dist/store/sqlite/completeness.js +30 -0
  219. package/dist/store/sqlite/completeness.js.map +1 -0
  220. package/dist/store/sqlite/messages.d.ts +2 -2
  221. package/dist/store/sqlite/messages.d.ts.map +1 -1
  222. package/dist/store/sqlite/messages.js +10 -14
  223. package/dist/store/sqlite/messages.js.map +1 -1
  224. package/dist/store/sqlite/search-index.d.ts.map +1 -1
  225. package/dist/store/sqlite/search-index.js +45 -9
  226. package/dist/store/sqlite/search-index.js.map +1 -1
  227. package/dist/store/sqlite/search.d.ts +2 -0
  228. package/dist/store/sqlite/search.d.ts.map +1 -1
  229. package/dist/store/sqlite/search.js +27 -17
  230. package/dist/store/sqlite/search.js.map +1 -1
  231. package/dist/store/sqlite/words.d.ts +83 -0
  232. package/dist/store/sqlite/words.d.ts.map +1 -0
  233. package/dist/store/sqlite/words.js +255 -0
  234. package/dist/store/sqlite/words.js.map +1 -0
  235. package/dist/store/store.d.ts +40 -0
  236. package/dist/store/store.d.ts.map +1 -1
  237. package/dist/store/store.js +19 -2
  238. package/dist/store/store.js.map +1 -1
  239. package/package.json +10 -4
  240. package/parity.json +1136 -389
  241. package/dist/domain/capabilities.d.ts +0 -22
  242. package/dist/domain/capabilities.d.ts.map +0 -1
  243. package/dist/domain/capabilities.js +0 -2
  244. package/dist/domain/capabilities.js.map +0 -1
@@ -0,0 +1,83 @@
1
+ import type { Id, Page, Provider } from "../../domain/models.js";
2
+ import type { Term } from "../../search/query.js";
3
+ import type { AccountKey, StoredHit } from "../store.js";
4
+ import type { StoreContext } from "./open.js";
5
+ /**
6
+ * A chat or a sender with at most this many messages is filtered inside the word index; a larger one by
7
+ * a join (phase 2 plan S6). Measured on 1M (`bench/search/store-chain.ts`): the token is 3.5 times
8
+ * faster for "any word" in an 85k chat, and 5% slower in a 500k one.
9
+ */
10
+ export declare const SCOPE_TOKEN_LIMIT = 100000;
11
+ export interface WordQuery {
12
+ /** AND of groups, each an OR of terms. */
13
+ required: Term[][];
14
+ excluded: Term[];
15
+ }
16
+ export interface SearchScope {
17
+ accounts: AccountKey[];
18
+ chat?: {
19
+ account: AccountKey;
20
+ chatId: Id;
21
+ };
22
+ sender?: {
23
+ provider: Provider;
24
+ id: Id;
25
+ };
26
+ /** Any of these senders — always a join, whatever their size. */
27
+ senders?: {
28
+ provider: Provider;
29
+ id: Id;
30
+ }[];
31
+ /** `from:me`: what the account itself sent. */
32
+ outgoing?: boolean;
33
+ /** Epoch ms, inclusive. */
34
+ after?: number;
35
+ /** Epoch ms, exclusive. */
36
+ before?: number;
37
+ /** Attachment kinds, `attachment` for any, `link` for a link in the text — all required. */
38
+ has?: string[];
39
+ }
40
+ export interface WordOptions {
41
+ /** Every group required, or any term enough. */
42
+ mode: "every" | "any";
43
+ /** Words of three letters or more match as the beginning of a word. */
44
+ beginnings: boolean;
45
+ limit: number;
46
+ /** Newest first instead of by score. */
47
+ newest?: boolean;
48
+ }
49
+ /** A hit with its relevance — bm25 turned round so higher is better; `null` from steps that do not rank. */
50
+ export type ScoredHit = StoredHit & {
51
+ score: number | null;
52
+ };
53
+ /**
54
+ * Steps 1, 2 and 4 of the search (plan S4): the word index, ranked by bm25, ties newest first. A small
55
+ * chat or sender is a token inside the index, a large one a join; with neither, the index ranks first
56
+ * and the join keeps this account's rows (plan S6). The index is always searched before the rows.
57
+ */
58
+ export declare const matchWords: (context: StoreContext, query: WordQuery, scope: SearchScope, { mode, beginnings, limit, newest }: WordOptions) => Page<ScoredHit>;
59
+ /** A search of filters alone — `from:alice after:2026-01-01` — newest first (plan S5). */
60
+ export declare const matchFilters: (context: StoreContext, scope: SearchScope, { limit }: {
61
+ limit: number;
62
+ }) => Page<ScoredHit>;
63
+ /** Step 5 (plan S4): the substring index over the raw text, newest first. Pieces under three letters are dropped. */
64
+ export declare const matchSubstring: (context: StoreContext, query: WordQuery, scope: SearchScope, { limit }: {
65
+ limit: number;
66
+ }) => Page<ScoredHit>;
67
+ /**
68
+ * The words the index knows, of those given: a whole word, or the beginning of one — otherwise
69
+ * `квартир` would be "corrected" to `квартира` and lose `квартиру` (plan S4).
70
+ */
71
+ export declare const knownTerms: ({ database }: StoreContext, terms: string[]) => Set<string>;
72
+ /**
73
+ * Words sharing trigrams with `term`, between the lengths given, most shared first — and only those
74
+ * the index still has, so a word whose messages were all deleted never comes back (plan S7).
75
+ */
76
+ export declare const termCandidates: ({ database }: StoreContext, pieces: string[], { shortest, longest }: {
77
+ shortest: number;
78
+ longest: number;
79
+ }) => {
80
+ term: string;
81
+ docs: number;
82
+ }[];
83
+ //# sourceMappingURL=words.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"words.d.ts","sourceRoot":"","sources":["../../../src/store/sqlite/words.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAGjD,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAGxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAG7C;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,SAAU,CAAA;AAMxC,MAAM,WAAW,SAAS;IACxB,0CAA0C;IAC1C,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAA;IAClB,QAAQ,EAAE,IAAI,EAAE,CAAA;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,UAAU,EAAE,CAAA;IACtB,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,UAAU,CAAC;QAAC,MAAM,EAAE,EAAE,CAAA;KAAE,CAAA;IAC1C,MAAM,CAAC,EAAE;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,EAAE,EAAE,EAAE,CAAA;KAAE,CAAA;IACvC,iEAAiE;IACjE,OAAO,CAAC,EAAE;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,EAAE,EAAE,EAAE,CAAA;KAAE,EAAE,CAAA;IAC1C,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,2BAA2B;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,4FAA4F;IAC5F,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,gDAAgD;IAChD,IAAI,EAAE,OAAO,GAAG,KAAK,CAAA;IACrB,uEAAuE;IACvE,UAAU,EAAE,OAAO,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,wCAAwC;IACxC,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,4GAA4G;AAC5G,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG;IAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAA;AAgH5D;;;;GAIG;AACH,eAAO,MAAM,UAAU,YACZ,YAAY,SACd,SAAS,SACT,WAAW,uCAC2B,WAAW,KACvD,IAAI,CAAC,SAAS,CA8DhB,CAAA;AAED,0FAA0F;AAC1F,eAAO,MAAM,YAAY,YACd,YAAY,SACd,WAAW,aACP;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,KAC3B,IAAI,CAAC,SAAS,CAehB,CAAA;AAED,qHAAqH;AACrH,eAAO,MAAM,cAAc,YAChB,YAAY,SACd,SAAS,SACT,WAAW,aACP;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,KAC3B,IAAI,CAAC,SAAS,CA8BhB,CAAA;AAID;;;GAGG;AACH,eAAO,MAAM,UAAU,iBAAkB,YAAY,SAAS,MAAM,EAAE,KAAG,GAAG,CAAC,MAAM,CAQlF,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,iBACX,YAAY,UAClB,MAAM,EAAE,yBACO;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,KAC3D;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAchC,CAAA"}
@@ -0,0 +1,255 @@
1
+ import { CliError } from "@leemour/cli-core";
2
+ import { normalize } from "../normalize.js";
3
+ import { findAccountPk } from "./accounts.js";
4
+ import { findChatPk } from "./chats.js";
5
+ import { hitsByPk } from "./search.js";
6
+ /**
7
+ * A chat or a sender with at most this many messages is filtered inside the word index; a larger one by
8
+ * a join (phase 2 plan S6). Measured on 1M (`bench/search/store-chain.ts`): the token is 3.5 times
9
+ * faster for "any word" in an 85k chat, and 5% slower in a 500k one.
10
+ */
11
+ export const SCOPE_TOKEN_LIMIT = 100_000;
12
+ /** The scope column out of bm25: otherwise a chat under the limit would rank its hits by the token too. */
13
+ const UNSCOPED_RANK = "bm25(1.0, 0.0)";
14
+ /** Ranked inside the index first, this many times the page, before the join drops other accounts' rows. */
15
+ const RANKED_FIRST = 5;
16
+ const quoted = (text) => `"${text.replaceAll('"', '""')}"`;
17
+ const meaningful = (text) => /[\p{L}\p{N}]/u.test(text);
18
+ const textOf = (term) => normalize(term.kind === "phrase" ? term.words.join(" ") : term.text);
19
+ const wordTerm = (term, beginnings) => {
20
+ const text = textOf(term);
21
+ if (!meaningful(text))
22
+ return undefined;
23
+ return beginnings && term.kind === "word" && [...text].length >= 3 ? `${quoted(text)}*` : quoted(text);
24
+ };
25
+ /** Null when nothing in the scope can match: an unknown account, chat or sender. */
26
+ const resolve = (context, scope) => {
27
+ if (scope.accounts.length === 0)
28
+ throw new CliError("validation_error", "a search names at least one account");
29
+ const accountPks = scope.accounts.flatMap((key) => findAccountPk(context, key) ?? []);
30
+ if (accountPks.length === 0)
31
+ return null;
32
+ const resolved = { accountPks };
33
+ const { database } = context;
34
+ if (scope.chat) {
35
+ const account = findAccountPk(context, scope.chat.account);
36
+ const chatPk = account === undefined ? undefined : findChatPk(context, account, scope.chat.chatId);
37
+ if (chatPk === undefined)
38
+ return null;
39
+ resolved.chatPk = chatPk;
40
+ resolved.chatMessages = Number(database.prepare("SELECT message_count FROM chats WHERE pk = ?").get(chatPk)?.message_count);
41
+ }
42
+ if (scope.senders) {
43
+ const lookup = database.prepare("SELECT pk FROM identities WHERE provider = ? AND native_id = ?");
44
+ resolved.senderPks = scope.senders.flatMap(({ provider, id }) => {
45
+ const pk = lookup.get(provider, id)?.pk;
46
+ return pk === undefined ? [] : [Number(pk)];
47
+ });
48
+ if (resolved.senderPks.length === 0)
49
+ return null;
50
+ }
51
+ if (scope.sender) {
52
+ const senderPk = database
53
+ .prepare("SELECT pk FROM identities WHERE provider = ? AND native_id = ?")
54
+ .get(scope.sender.provider, scope.sender.id)?.pk;
55
+ if (senderPk === undefined)
56
+ return null;
57
+ resolved.senderPk = Number(senderPk);
58
+ // Counted only as far as the limit: past it the answer is "large", whatever the number.
59
+ resolved.senderMessages = Number(database
60
+ .prepare("SELECT count(*) AS n FROM (SELECT 1 FROM messages WHERE sender_identity_pk = ? LIMIT ?)")
61
+ .get(resolved.senderPk, SCOPE_TOKEN_LIMIT + 1)?.n);
62
+ }
63
+ return resolved;
64
+ };
65
+ /** The conditions on the message row, shared by every step. */
66
+ const rowConditions = (resolved, scope, joined) => {
67
+ const where = ["m.deleted_at IS NULL", `m.account_pk IN (${resolved.accountPks.join(", ")})`];
68
+ const params = [];
69
+ if (joined.chat) {
70
+ where.push("m.chat_pk = ?");
71
+ params.push(resolved.chatPk);
72
+ }
73
+ if (joined.sender) {
74
+ where.push("m.sender_identity_pk = ?");
75
+ params.push(resolved.senderPk);
76
+ }
77
+ if (resolved.senderPks)
78
+ where.push(`m.sender_identity_pk IN (${resolved.senderPks.join(", ")})`);
79
+ if (scope.outgoing)
80
+ where.push("m.outgoing = 1");
81
+ if (scope.after !== undefined) {
82
+ where.push("m.sent_at >= ?");
83
+ params.push(scope.after);
84
+ }
85
+ if (scope.before !== undefined) {
86
+ where.push("m.sent_at < ?");
87
+ params.push(scope.before);
88
+ }
89
+ for (const kind of scope.has ?? []) {
90
+ if (kind === "link")
91
+ where.push(`m.pk IN (SELECT rowid FROM messages_fts WHERE messages_fts MATCH '"://"')`);
92
+ else if (kind === "attachment")
93
+ where.push("EXISTS (SELECT 1 FROM attachments a WHERE a.message_pk = m.pk)");
94
+ else {
95
+ where.push("EXISTS (SELECT 1 FROM attachments a WHERE a.message_pk = m.pk AND a.kind = ?)");
96
+ params.push(kind);
97
+ }
98
+ }
99
+ // A chat marked not searchable is searched only when the search names it (plan S9).
100
+ if (!scope.chat)
101
+ where.push("c.is_searchable = 1");
102
+ return { where: where.join(" AND "), params };
103
+ };
104
+ const page = (context, rows, limit) => {
105
+ const kept = rows.slice(0, limit);
106
+ const scores = new Map(kept.map((row) => [row.pk, row.score]));
107
+ const hits = hitsByPk(context, kept.map((row) => row.pk));
108
+ return {
109
+ items: hits.map((hit, index) => {
110
+ const score = scores.get(kept[index].pk) ?? null;
111
+ return { ...hit, score: score === null ? null : -score };
112
+ }),
113
+ hasMore: rows.length > limit,
114
+ };
115
+ };
116
+ /**
117
+ * Steps 1, 2 and 4 of the search (plan S4): the word index, ranked by bm25, ties newest first. A small
118
+ * chat or sender is a token inside the index, a large one a join; with neither, the index ranks first
119
+ * and the join keeps this account's rows (plan S6). The index is always searched before the rows.
120
+ */
121
+ export const matchWords = (context, query, scope, { mode, beginnings, limit, newest = false }) => {
122
+ const empty = { items: [], hasMore: false };
123
+ const groups = query.required
124
+ .map((group) => group.flatMap((term) => wordTerm(term, beginnings) ?? []))
125
+ .filter((group) => group.length > 0);
126
+ if (groups.length === 0)
127
+ return empty;
128
+ const resolved = resolve(context, scope);
129
+ if (!resolved)
130
+ return empty;
131
+ const tokenChat = resolved.chatPk !== undefined && (resolved.chatMessages ?? 0) <= SCOPE_TOKEN_LIMIT;
132
+ const tokenSender = resolved.senderPk !== undefined && (resolved.senderMessages ?? 0) <= SCOPE_TOKEN_LIMIT;
133
+ const required = mode === "every" ? groups.map((group) => `(${group.join(" OR ")})`).join(" AND ") : groups.flat().join(" OR ");
134
+ const tokens = [...(tokenChat ? [`c${resolved.chatPk}`] : []), ...(tokenSender ? [`s${resolved.senderPk}`] : [])];
135
+ let match = `(normalized_text : (${required}))`;
136
+ if (tokens.length > 0)
137
+ match = `(${match} AND (scope : (${tokens.map(quoted).join(" AND ")})))`;
138
+ for (const term of query.excluded) {
139
+ const excluded = wordTerm(term, false);
140
+ if (excluded)
141
+ match = `(${match} NOT (normalized_text : ${excluded}))`;
142
+ }
143
+ const joined = {
144
+ chat: resolved.chatPk !== undefined && !tokenChat,
145
+ sender: resolved.senderPk !== undefined && !tokenSender,
146
+ };
147
+ const { where, params } = rowConditions(resolved, scope, joined);
148
+ const order = newest ? "m.sent_at DESC, m.pk DESC" : "f.rank, m.sent_at DESC, m.pk DESC";
149
+ const full = () => context.database
150
+ .prepare(`SELECT m.pk AS pk, f.rank AS score
151
+ FROM message_words f CROSS JOIN messages m CROSS JOIN chats c
152
+ WHERE message_words MATCH ? AND f.rank MATCH '${UNSCOPED_RANK}' AND m.pk = f.rowid AND c.pk = m.chat_pk
153
+ AND ${where}
154
+ ORDER BY ${order} LIMIT ?`)
155
+ .all(match, ...params, limit + 1)
156
+ .map((row) => ({ pk: Number(row.pk), score: Number(row.score) }));
157
+ if (newest || resolved.chatPk !== undefined || resolved.senderPk !== undefined || resolved.senderPks) {
158
+ return page(context, full(), limit);
159
+ }
160
+ const ranked = context.database
161
+ .prepare("SELECT rowid AS pk, rank AS score FROM message_words WHERE message_words MATCH ? ORDER BY rank LIMIT ?")
162
+ .all(match, RANKED_FIRST * (limit + 1));
163
+ if (ranked.length === 0)
164
+ return empty;
165
+ const kept = new Map(context.database
166
+ .prepare(`SELECT m.pk AS pk, m.sent_at AS sent FROM messages m CROSS JOIN chats c
167
+ WHERE m.pk IN (${ranked.map((row) => Number(row.pk)).join(", ")}) AND c.pk = m.chat_pk AND ${where}`)
168
+ .all(...params)
169
+ .map((row) => [Number(row.pk), Number(row.sent)]));
170
+ const survivors = ranked
171
+ .filter((row) => kept.has(Number(row.pk)))
172
+ .map((row) => ({ pk: Number(row.pk), score: Number(row.score), sent: kept.get(Number(row.pk)) ?? 0 }))
173
+ .sort((a, b) => a.score - b.score || b.sent - a.sent || b.pk - a.pk);
174
+ // Fewer than a page survived only because the top of the index was other accounts' rows.
175
+ if (survivors.length > limit || ranked.length < RANKED_FIRST * (limit + 1))
176
+ return page(context, survivors, limit);
177
+ return page(context, full(), limit);
178
+ };
179
+ /** A search of filters alone — `from:alice after:2026-01-01` — newest first (plan S5). */
180
+ export const matchFilters = (context, scope, { limit }) => {
181
+ const resolved = resolve(context, scope);
182
+ if (!resolved)
183
+ return { items: [], hasMore: false };
184
+ const { where, params } = rowConditions(resolved, scope, {
185
+ chat: resolved.chatPk !== undefined,
186
+ sender: resolved.senderPk !== undefined,
187
+ });
188
+ const rows = context.database
189
+ .prepare(`SELECT m.pk AS pk FROM messages m CROSS JOIN chats c
190
+ WHERE c.pk = m.chat_pk AND ${where} ORDER BY m.sent_at DESC, m.pk DESC LIMIT ?`)
191
+ .all(...params, limit + 1)
192
+ .map((row) => ({ pk: Number(row.pk), score: null }));
193
+ return page(context, rows, limit);
194
+ };
195
+ /** Step 5 (plan S4): the substring index over the raw text, newest first. Pieces under three letters are dropped. */
196
+ export const matchSubstring = (context, query, scope, { limit }) => {
197
+ const empty = { items: [], hasMore: false };
198
+ const pieces = (term) => (term.kind === "phrase" ? [term.words.join(" ")] : (term.text.match(/[\p{L}\p{N}]+/gu) ?? [])).filter((piece) => [...piece].length >= 3);
199
+ const groups = query.required
200
+ .map((group) => group.flatMap((term) => pieces(term).map(quoted).join(" AND ") || []).filter(Boolean))
201
+ .filter((group) => group.length > 0);
202
+ if (groups.length === 0)
203
+ return empty;
204
+ const resolved = resolve(context, scope);
205
+ if (!resolved)
206
+ return empty;
207
+ let match = groups.map((group) => `(${group.map((one) => `(${one})`).join(" OR ")})`).join(" AND ");
208
+ for (const term of query.excluded) {
209
+ const excluded = pieces(term).map(quoted).join(" AND ");
210
+ if (excluded)
211
+ match = `(${match}) NOT (${excluded})`;
212
+ }
213
+ const { where, params } = rowConditions(resolved, scope, {
214
+ chat: resolved.chatPk !== undefined,
215
+ sender: resolved.senderPk !== undefined,
216
+ });
217
+ const rows = context.database
218
+ .prepare(`SELECT m.pk AS pk FROM messages_fts f CROSS JOIN messages m CROSS JOIN chats c
219
+ WHERE messages_fts MATCH ? AND m.pk = f.rowid AND c.pk = m.chat_pk AND ${where}
220
+ ORDER BY m.sent_at DESC, m.pk DESC LIMIT ?`)
221
+ .all(match, ...params, limit + 1)
222
+ .map((row) => ({ pk: Number(row.pk), score: null }));
223
+ return page(context, rows, limit);
224
+ };
225
+ const VOCABULARY = "SELECT term, doc FROM message_words_vocab WHERE col = 'normalized_text'";
226
+ /**
227
+ * The words the index knows, of those given: a whole word, or the beginning of one — otherwise
228
+ * `квартир` would be "corrected" to `квартира` and lose `квартиру` (plan S4).
229
+ */
230
+ export const knownTerms = ({ database }, terms) => {
231
+ const lookup = database.prepare(`${VOCABULARY} AND term >= ? AND term <= ? LIMIT 1`);
232
+ return new Set(terms.filter((term) => {
233
+ const word = normalize(term);
234
+ return lookup.get(word, `${word}\u{10FFFF}`) !== undefined;
235
+ }));
236
+ };
237
+ /**
238
+ * Words sharing trigrams with `term`, between the lengths given, most shared first — and only those
239
+ * the index still has, so a word whose messages were all deleted never comes back (plan S7).
240
+ */
241
+ export const termCandidates = ({ database }, pieces, { shortest, longest }) => {
242
+ if (pieces.length === 0)
243
+ return [];
244
+ const candidates = database
245
+ .prepare(`SELECT term, count(*) AS shared FROM search_term_trigrams
246
+ WHERE trigram IN (${pieces.map(() => "?").join(", ")}) AND length BETWEEN ? AND ?
247
+ GROUP BY term ORDER BY shared DESC, term LIMIT 200`)
248
+ .all(...pieces, shortest, longest);
249
+ const docs = database.prepare(`${VOCABULARY} AND term = ?`);
250
+ return candidates.flatMap((row) => {
251
+ const held = docs.get(String(row.term));
252
+ return held ? [{ term: String(row.term), docs: Number(held.doc) }] : [];
253
+ });
254
+ };
255
+ //# sourceMappingURL=words.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"words.js","sourceRoot":"","sources":["../../../src/store/sqlite/words.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,16 @@
1
1
  import type { Link, LinkInput } from "../conversations/link.js";
2
2
  import type { Chat, Contact, Id, Member, Message, MessageHit, Page, Provider, Reactions, WindowedMessage } from "../domain/models.js";
3
3
  import type { PeopleLookup } from "../resolve.js";
4
+ import type { ChatCompleteness } from "./sqlite/completeness.js";
4
5
  import type { SearchIndexFill, SearchIndexState } from "./sqlite/search-index.js";
6
+ import type { ScoredHit, SearchScope, WordOptions, WordQuery } from "./sqlite/words.js";
5
7
  /** Which account of which messenger a call is about. */
6
8
  export interface AccountKey {
7
9
  provider: Provider;
8
10
  account: Id;
9
11
  }
12
+ /** Whether a stored chat may hold a message deleted without naming its chat. */
13
+ export type DeletionScope = (chat: Pick<Chat, "id" | "kind" | "providerMetadata">) => boolean;
10
14
  /** How a message reached the store — `history`, `send`, `backfill`, `update`. Diagnostic. */
11
15
  export type IngestedVia = string;
12
16
  export interface StoredHit extends MessageHit {
@@ -219,9 +223,14 @@ export interface MessageStore {
219
223
  * the message back, and reads and search stop returning it. Its text goes — from the row, the
220
224
  * search copy, the edit history and the transcript. Only the messenger returning it again, when
221
225
  * asked after the deletion, lifts the tombstone (`saveMessages`' `seenAt`).
226
+ *
227
+ * Without `chatId`, a message is tombstoned only when exactly one live message with its id is left
228
+ * in the chats `among` accepts. Without `among`, nothing is: only the messenger knows which of its
229
+ * chats a deletion without one may belong to (`Messenger.deletedWithoutChat`).
222
230
  */
223
231
  markDeleted(key: AccountKey, messageIds: Id[], options?: {
224
232
  chatId?: Id;
233
+ among?: DeletionScope;
225
234
  }): Promise<number>;
226
235
  /** Newest first. At least three characters: a trigram index answers a shorter query with nothing. */
227
236
  search(query: string, options: {
@@ -230,6 +239,33 @@ export interface MessageStore {
230
239
  }): Promise<Page<StoredHit>>;
231
240
  /** Newest first — by text, by who wrote it, or both. */
232
241
  find(filter: MessageFilter): Promise<Page<StoredHit>>;
242
+ /**
243
+ * The word index, ranked by bm25, ties newest first (phase 2 plan S4 steps 1, 2 and 4). Chats marked
244
+ * not searchable are left out unless the scope names the chat.
245
+ */
246
+ matchWords(query: WordQuery, scope: SearchScope, options: WordOptions): Promise<Page<ScoredHit>>;
247
+ /** The substring index, newest first (step 5); pieces under three letters are dropped. */
248
+ matchSubstring(query: WordQuery, scope: SearchScope, options: {
249
+ limit: number;
250
+ }): Promise<Page<ScoredHit>>;
251
+ /** The kinds of attachment held, for `has:` to name the ones it can find. */
252
+ attachmentKinds(): Promise<string[]>;
253
+ /** Messages matching the scope alone, newest first: a search with filters and no word. */
254
+ matchFilters(scope: SearchScope, options: {
255
+ limit: number;
256
+ }): Promise<Page<ScoredHit>>;
257
+ /** Per chat: whether its history is held up to date, without gaps, back to its start. */
258
+ chatCompleteness(key: AccountKey, chatIds: Id[]): Promise<ChatCompleteness[]>;
259
+ /** Of `terms`, those the index knows as a word or the beginning of one. */
260
+ knownTerms(terms: string[]): Promise<Set<string>>;
261
+ /** Known words sharing these trigrams, within the lengths, most shared first. */
262
+ termCandidates(trigrams: string[], lengths: {
263
+ shortest: number;
264
+ longest: number;
265
+ }): Promise<{
266
+ term: string;
267
+ docs: number;
268
+ }[]>;
233
269
  /** How far the word index is built; `undefined` on a file before it existed. */
234
270
  searchIndexState(): Promise<SearchIndexState | undefined>;
235
271
  /**
@@ -256,6 +292,8 @@ export interface MessageStore {
256
292
  }): Promise<number>;
257
293
  /** Works out again when each contact was last written to, from their one-to-one chats. */
258
294
  refreshRecency(key: AccountKey): Promise<void>;
295
+ /** Every account of every messenger the file holds, by messenger then id. */
296
+ accounts(): Promise<AccountKey[]>;
259
297
  /** Everyone this provider's accounts have seen; with `account`, only who that account has seen. */
260
298
  people(provider: Provider, options?: {
261
299
  account?: Id;
@@ -374,4 +412,6 @@ export interface StoreOptions {
374
412
  /** About 40 ms of the first open (129k rows/s measured at 1M, 2026-09-30); Tab opens the store too. */
375
413
  export declare const BACKFILL_ON_OPEN = 5000;
376
414
  export declare const openStore: ({ path, env, now }?: StoreOptions) => Promise<MessageStore>;
415
+ export { type ChatCompleteness, historyStartKey } from "./sqlite/completeness.js";
416
+ export type { ScoredHit, SearchScope, WordOptions, WordQuery } from "./sqlite/words.js";
377
417
  //# sourceMappingURL=store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ import * as accounts from "./sqlite/accounts.js";
8
8
  import { backfillNormalized, pendingNormalization } from "./sqlite/backfill.js";
9
9
  import * as batches from "./sqlite/batches.js";
10
10
  import * as chatQueries from "./sqlite/chats.js";
11
+ import * as completeness from "./sqlite/completeness.js";
11
12
  import * as conversationQueries from "./sqlite/conversations.js";
12
13
  import * as identities from "./sqlite/identities.js";
13
14
  import * as messageWrites from "./sqlite/messages.js";
@@ -19,6 +20,7 @@ import * as searchIndex from "./sqlite/search-index.js";
19
20
  import * as sync from "./sqlite/sync.js";
20
21
  import * as transcripts from "./sqlite/transcripts.js";
21
22
  import { toMs } from "./sqlite/values.js";
23
+ import * as words from "./sqlite/words.js";
22
24
  /** About 40 ms of the first open (129k rows/s measured at 1M, 2026-09-30); Tab opens the store too. */
23
25
  export const BACKFILL_ON_OPEN = 5_000;
24
26
  export const openStore = async ({ path, env, now = Date.now } = {}) => {
@@ -255,13 +257,13 @@ const storeOver = (context) => {
255
257
  const accountKey = findAccountPk(key);
256
258
  return accountKey === undefined ? undefined : reads.message(context, accountKey, messageId, chatId);
257
259
  },
258
- markDeleted: async (key, messageIds, { chatId } = {}) => {
260
+ markDeleted: async (key, messageIds, { chatId, among } = {}) => {
259
261
  const accountKey = findAccountPk(key);
260
262
  if (accountKey === undefined || messageIds.length === 0)
261
263
  return 0;
262
264
  let changed = 0;
263
265
  inTransaction(() => {
264
- changed = messageWrites.markDeleted(context, key, accountKey, messageIds, chatId);
266
+ changed = messageWrites.markDeleted(context, accountKey, messageIds, chatId, among);
265
267
  });
266
268
  return changed;
267
269
  },
@@ -289,6 +291,20 @@ const storeOver = (context) => {
289
291
  },
290
292
  search: async (query, { limit, account }) => search.find(context, { text: query, limit, ...(account ? { account } : {}) }),
291
293
  find: async (filter) => search.find(context, filter),
294
+ matchWords: async (query, scope, options) => words.matchWords(context, query, scope, options),
295
+ matchSubstring: async (query, scope, options) => words.matchSubstring(context, query, scope, options),
296
+ attachmentKinds: async () => database
297
+ .prepare("SELECT DISTINCT kind FROM attachments ORDER BY kind")
298
+ .all()
299
+ .map((row) => String(row.kind)),
300
+ matchFilters: async (scope, options) => words.matchFilters(context, scope, options),
301
+ accounts: async () => accounts.heldAccounts(context),
302
+ chatCompleteness: async (key, chatIds) => {
303
+ const accountKey = accounts.findAccountPk(context, key);
304
+ return accountKey === undefined ? [] : completeness.chatCompleteness(context, accountKey, chatIds);
305
+ },
306
+ knownTerms: async (terms) => words.knownTerms(context, terms),
307
+ termCandidates: async (trigrams, lengths) => words.termCandidates(context, trigrams, lengths),
292
308
  searchIndexState: async () => searchIndex.searchIndexState(database),
293
309
  fillSearchIndex: async ({ until } = {}) => searchIndex.fillSearchIndex(database, { now: context.now, ...(until ? { until } : {}) }),
294
310
  contacts: async (key, options) => {
@@ -336,4 +352,5 @@ const storeOver = (context) => {
336
352
  close: async () => database.close(),
337
353
  };
338
354
  };
355
+ export { historyStartKey } from "./sqlite/completeness.js";
339
356
  //# sourceMappingURL=store.js.map