@wirecat/cli-core 0.306.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 (306) 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/messenger/account-command.js +1 -1
  23. package/dist/cli/messenger/account-command.js.map +1 -1
  24. package/dist/cli/messenger/complete-command.js +2 -2
  25. package/dist/cli/messenger/complete-command.js.map +1 -1
  26. package/dist/cli/messenger/context.js +1 -1
  27. package/dist/cli/messenger/context.js.map +1 -1
  28. package/dist/cli/messenger/serve-members.js +1 -1
  29. package/dist/cli/messenger/serve-members.js.map +1 -1
  30. package/dist/cli/messenger/serve-stems.js +3 -3
  31. package/dist/cli/messenger/serve-stems.js.map +1 -1
  32. package/dist/cli/messenger/stored.d.ts.map +1 -1
  33. package/dist/cli/messenger/stored.js +21 -21
  34. package/dist/cli/messenger/stored.js.map +1 -1
  35. package/dist/cli/store-settings.js +3 -3
  36. package/dist/cli/store-settings.js.map +1 -1
  37. package/dist/errors/reasons.d.ts.map +1 -1
  38. package/dist/errors/reasons.js +1 -0
  39. package/dist/errors/reasons.js.map +1 -1
  40. package/dist/files/atomic-write.d.ts +15 -0
  41. package/dist/files/atomic-write.d.ts.map +1 -0
  42. package/dist/files/atomic-write.js +35 -0
  43. package/dist/files/atomic-write.js.map +1 -0
  44. package/dist/files/index.d.ts +2 -0
  45. package/dist/files/index.d.ts.map +1 -1
  46. package/dist/files/index.js +2 -0
  47. package/dist/files/index.js.map +1 -1
  48. package/dist/files/lock.d.ts +14 -0
  49. package/dist/files/lock.d.ts.map +1 -0
  50. package/dist/files/lock.js +22 -0
  51. package/dist/files/lock.js.map +1 -0
  52. package/dist/files/native-lease-release.d.ts +3 -1
  53. package/dist/files/native-lease-release.d.ts.map +1 -1
  54. package/dist/files/native-lease-release.js +7 -3
  55. package/dist/files/native-lease-release.js.map +1 -1
  56. package/dist/kit/search-recipes.d.ts.map +1 -1
  57. package/dist/kit/search-recipes.js +5 -5
  58. package/dist/kit/search-recipes.js.map +1 -1
  59. package/dist/mcp/resources.js +1 -1
  60. package/dist/mcp/resources.js.map +1 -1
  61. package/dist/mcp/tools/chats.js +1 -1
  62. package/dist/mcp/tools/chats.js.map +1 -1
  63. package/dist/replies/dry-run.d.ts.map +1 -1
  64. package/dist/replies/dry-run.js +5 -5
  65. package/dist/replies/dry-run.js.map +1 -1
  66. package/dist/services/admin-statistics.js +6 -6
  67. package/dist/services/admin-statistics.js.map +1 -1
  68. package/dist/services/agenda.js +1 -1
  69. package/dist/services/agenda.js.map +1 -1
  70. package/dist/services/archive-gaps.js +4 -4
  71. package/dist/services/archive-gaps.js.map +1 -1
  72. package/dist/services/archive.d.ts.map +1 -1
  73. package/dist/services/archive.js +23 -23
  74. package/dist/services/archive.js.map +1 -1
  75. package/dist/services/attachments.d.ts.map +1 -1
  76. package/dist/services/attachments.js +21 -10
  77. package/dist/services/attachments.js.map +1 -1
  78. package/dist/services/chat-documents.js +2 -2
  79. package/dist/services/chat-documents.js.map +1 -1
  80. package/dist/services/chats.d.ts.map +1 -1
  81. package/dist/services/chats.js +24 -19
  82. package/dist/services/chats.js.map +1 -1
  83. package/dist/services/conversations.js +15 -15
  84. package/dist/services/conversations.js.map +1 -1
  85. package/dist/services/counters.d.ts.map +1 -1
  86. package/dist/services/counters.js +4 -4
  87. package/dist/services/counters.js.map +1 -1
  88. package/dist/services/embeddings-maintenance.d.ts.map +1 -1
  89. package/dist/services/embeddings-maintenance.js +13 -13
  90. package/dist/services/embeddings-maintenance.js.map +1 -1
  91. package/dist/services/embeddings-search.d.ts.map +1 -1
  92. package/dist/services/embeddings-search.js +16 -16
  93. package/dist/services/embeddings-search.js.map +1 -1
  94. package/dist/services/evidence-read.js +1 -1
  95. package/dist/services/evidence-read.js.map +1 -1
  96. package/dist/services/folders.js +1 -1
  97. package/dist/services/folders.js.map +1 -1
  98. package/dist/services/inbox.js +4 -4
  99. package/dist/services/inbox.js.map +1 -1
  100. package/dist/services/index.d.ts +1 -1
  101. package/dist/services/index.d.ts.map +1 -1
  102. package/dist/services/index.js.map +1 -1
  103. package/dist/services/mail-search.d.ts.map +1 -1
  104. package/dist/services/mail-search.js +15 -13
  105. package/dist/services/mail-search.js.map +1 -1
  106. package/dist/services/meeting-context.d.ts +4 -2
  107. package/dist/services/meeting-context.d.ts.map +1 -1
  108. package/dist/services/meeting-context.js +1 -1
  109. package/dist/services/meeting-context.js.map +1 -1
  110. package/dist/services/meeting-tasks.d.ts +4 -2
  111. package/dist/services/meeting-tasks.d.ts.map +1 -1
  112. package/dist/services/meeting-tasks.js +1 -1
  113. package/dist/services/meeting-tasks.js.map +1 -1
  114. package/dist/services/mentions.d.ts.map +1 -1
  115. package/dist/services/mentions.js +8 -8
  116. package/dist/services/mentions.js.map +1 -1
  117. package/dist/services/message-resolution.d.ts.map +1 -1
  118. package/dist/services/message-resolution.js +6 -6
  119. package/dist/services/message-resolution.js.map +1 -1
  120. package/dist/services/messages-archive-search.js +4 -4
  121. package/dist/services/messages-archive-search.js.map +1 -1
  122. package/dist/services/messages-combined.js +3 -3
  123. package/dist/services/messages-combined.js.map +1 -1
  124. package/dist/services/messages-discovery.js +2 -2
  125. package/dist/services/messages-discovery.js.map +1 -1
  126. package/dist/services/messages-search.d.ts.map +1 -1
  127. package/dist/services/messages-search.js +13 -13
  128. package/dist/services/messages-search.js.map +1 -1
  129. package/dist/services/messages.js +6 -6
  130. package/dist/services/messages.js.map +1 -1
  131. package/dist/services/metadata.js +9 -9
  132. package/dist/services/metadata.js.map +1 -1
  133. package/dist/services/notes-search.js +4 -4
  134. package/dist/services/notes-search.js.map +1 -1
  135. package/dist/services/people.d.ts.map +1 -1
  136. package/dist/services/people.js +18 -17
  137. package/dist/services/people.js.map +1 -1
  138. package/dist/services/person-context.js +16 -16
  139. package/dist/services/person-context.js.map +1 -1
  140. package/dist/services/person-meeting-context.d.ts +3 -2
  141. package/dist/services/person-meeting-context.d.ts.map +1 -1
  142. package/dist/services/person-meeting-context.js +3 -3
  143. package/dist/services/person-meeting-context.js.map +1 -1
  144. package/dist/services/person-profile.js +5 -5
  145. package/dist/services/person-profile.js.map +1 -1
  146. package/dist/services/person-timeline.js +2 -2
  147. package/dist/services/person-timeline.js.map +1 -1
  148. package/dist/services/pictures.d.ts.map +1 -1
  149. package/dist/services/pictures.js +9 -6
  150. package/dist/services/pictures.js.map +1 -1
  151. package/dist/services/private-people.d.ts.map +1 -1
  152. package/dist/services/private-people.js +7 -7
  153. package/dist/services/private-people.js.map +1 -1
  154. package/dist/services/rankings-selection.js +1 -1
  155. package/dist/services/rankings-selection.js.map +1 -1
  156. package/dist/services/rankings.js +7 -7
  157. package/dist/services/rankings.js.map +1 -1
  158. package/dist/services/retention.d.ts +3 -3
  159. package/dist/services/retention.js +2 -2
  160. package/dist/services/retention.js.map +1 -1
  161. package/dist/services/search-all-meetings.js +2 -2
  162. package/dist/services/search-all-meetings.js.map +1 -1
  163. package/dist/services/search-all.d.ts.map +1 -1
  164. package/dist/services/search-all.js +3 -1
  165. package/dist/services/search-all.js.map +1 -1
  166. package/dist/services/search-catchup.js +1 -1
  167. package/dist/services/search-catchup.js.map +1 -1
  168. package/dist/services/search-kind.js +4 -4
  169. package/dist/services/search-kind.js.map +1 -1
  170. package/dist/services/search-refresh.d.ts.map +1 -1
  171. package/dist/services/search-refresh.js +2 -2
  172. package/dist/services/search-refresh.js.map +1 -1
  173. package/dist/services/searches.js +7 -7
  174. package/dist/services/searches.js.map +1 -1
  175. package/dist/services/server-search.js +4 -4
  176. package/dist/services/server-search.js.map +1 -1
  177. package/dist/services/tags.d.ts.map +1 -1
  178. package/dist/services/tags.js +7 -4
  179. package/dist/services/tags.js.map +1 -1
  180. package/dist/services/task-rules.js +6 -6
  181. package/dist/services/task-rules.js.map +1 -1
  182. package/dist/services/tasks.js +2 -2
  183. package/dist/services/tasks.js.map +1 -1
  184. package/dist/services/thread-context.d.ts.map +1 -1
  185. package/dist/services/thread-context.js +5 -5
  186. package/dist/services/thread-context.js.map +1 -1
  187. package/dist/speech/hearing.d.ts.map +1 -1
  188. package/dist/speech/hearing.js +2 -2
  189. package/dist/speech/hearing.js.map +1 -1
  190. package/dist/store/account-store.d.ts +64 -17
  191. package/dist/store/account-store.d.ts.map +1 -1
  192. package/dist/store/account-store.js +75 -121
  193. package/dist/store/account-store.js.map +1 -1
  194. package/dist/store/accounts.d.ts +35 -0
  195. package/dist/store/accounts.d.ts.map +1 -0
  196. package/dist/store/accounts.js +47 -0
  197. package/dist/store/accounts.js.map +1 -0
  198. package/dist/store/attachments.d.ts +40 -0
  199. package/dist/store/attachments.d.ts.map +1 -0
  200. package/dist/store/attachments.js +50 -0
  201. package/dist/store/attachments.js.map +1 -0
  202. package/dist/store/chats.d.ts +47 -0
  203. package/dist/store/chats.d.ts.map +1 -0
  204. package/dist/store/chats.js +80 -0
  205. package/dist/store/chats.js.map +1 -0
  206. package/dist/store/conversations.d.ts +73 -0
  207. package/dist/store/conversations.d.ts.map +1 -0
  208. package/dist/store/conversations.js +118 -0
  209. package/dist/store/conversations.js.map +1 -0
  210. package/dist/store/counters.d.ts +25 -0
  211. package/dist/store/counters.d.ts.map +1 -0
  212. package/dist/store/counters.js +26 -0
  213. package/dist/store/counters.js.map +1 -0
  214. package/dist/store/index.d.ts +1 -1
  215. package/dist/store/index.d.ts.map +1 -1
  216. package/dist/store/index.js.map +1 -1
  217. package/dist/store/keys.d.ts +16 -0
  218. package/dist/store/keys.d.ts.map +1 -0
  219. package/dist/store/keys.js +25 -0
  220. package/dist/store/keys.js.map +1 -0
  221. package/dist/store/mentions.d.ts +41 -0
  222. package/dist/store/mentions.d.ts.map +1 -0
  223. package/dist/store/mentions.js +39 -0
  224. package/dist/store/mentions.js.map +1 -0
  225. package/dist/store/messages.d.ts +116 -0
  226. package/dist/store/messages.d.ts.map +1 -0
  227. package/dist/store/messages.js +102 -0
  228. package/dist/store/messages.js.map +1 -0
  229. package/dist/store/people.d.ts +53 -0
  230. package/dist/store/people.d.ts.map +1 -0
  231. package/dist/store/people.js +65 -0
  232. package/dist/store/people.js.map +1 -0
  233. package/dist/store/queries.d.ts +22 -0
  234. package/dist/store/queries.d.ts.map +1 -0
  235. package/dist/store/queries.js +22 -0
  236. package/dist/store/queries.js.map +1 -0
  237. package/dist/store/roster.d.ts +38 -0
  238. package/dist/store/roster.d.ts.map +1 -0
  239. package/dist/store/roster.js +54 -0
  240. package/dist/store/roster.js.map +1 -0
  241. package/dist/store/search-index.d.ts +40 -0
  242. package/dist/store/search-index.d.ts.map +1 -0
  243. package/dist/store/search-index.js +19 -0
  244. package/dist/store/search-index.js.map +1 -0
  245. package/dist/store/searches.d.ts +22 -0
  246. package/dist/store/searches.d.ts.map +1 -0
  247. package/dist/store/searches.js +25 -0
  248. package/dist/store/searches.js.map +1 -0
  249. package/dist/store/sqlite/accounts.d.ts +1 -1
  250. package/dist/store/sqlite/admin-statistics.d.ts +1 -1
  251. package/dist/store/sqlite/batches.d.ts +1 -1
  252. package/dist/store/sqlite/bot-updates.d.ts +1 -1
  253. package/dist/store/sqlite/chats.d.ts +1 -1
  254. package/dist/store/sqlite/conversation-eligibility.d.ts +1 -1
  255. package/dist/store/sqlite/conversations.d.ts +1 -1
  256. package/dist/store/sqlite/emails.d.ts +1 -1
  257. package/dist/store/sqlite/emails.d.ts.map +1 -1
  258. package/dist/store/sqlite/emails.js +5 -2
  259. package/dist/store/sqlite/emails.js.map +1 -1
  260. package/dist/store/sqlite/identities.d.ts +1 -1
  261. package/dist/store/sqlite/knowledge.d.ts +1 -1
  262. package/dist/store/sqlite/lucene-fields.d.ts +66 -0
  263. package/dist/store/sqlite/lucene-fields.d.ts.map +1 -0
  264. package/dist/store/sqlite/lucene-fields.js +360 -0
  265. package/dist/store/sqlite/lucene-fields.js.map +1 -0
  266. package/dist/store/sqlite/lucene.d.ts +2 -13
  267. package/dist/store/sqlite/lucene.d.ts.map +1 -1
  268. package/dist/store/sqlite/lucene.js +27 -329
  269. package/dist/store/sqlite/lucene.js.map +1 -1
  270. package/dist/store/sqlite/meeting-projects.d.ts +1 -1
  271. package/dist/store/sqlite/messages.d.ts +1 -1
  272. package/dist/store/sqlite/person-links.d.ts +1 -1
  273. package/dist/store/sqlite/private-people.d.ts +1 -1
  274. package/dist/store/sqlite/proposed-actions.d.ts +1 -1
  275. package/dist/store/sqlite/ranges.d.ts +1 -1
  276. package/dist/store/sqlite/ranking-evidence.d.ts +1 -1
  277. package/dist/store/sqlite/reads.d.ts +1 -1
  278. package/dist/store/sqlite/search.d.ts +1 -1
  279. package/dist/store/sqlite/tags.d.ts +1 -1
  280. package/dist/store/sqlite/task-rule-stops.d.ts +1 -1
  281. package/dist/store/sqlite/words.d.ts +1 -1
  282. package/dist/store/store.d.ts +62 -828
  283. package/dist/store/store.d.ts.map +1 -1
  284. package/dist/store/store.js +105 -836
  285. package/dist/store/store.js.map +1 -1
  286. package/dist/store/sync.d.ts +36 -0
  287. package/dist/store/sync.d.ts.map +1 -0
  288. package/dist/store/sync.js +59 -0
  289. package/dist/store/sync.js.map +1 -0
  290. package/dist/store/tags.d.ts +13 -0
  291. package/dist/store/tags.d.ts.map +1 -0
  292. package/dist/store/tags.js +23 -0
  293. package/dist/store/tags.js.map +1 -0
  294. package/dist/store/types.d.ts +247 -0
  295. package/dist/store/types.d.ts.map +1 -0
  296. package/dist/store/types.js +2 -0
  297. package/dist/store/types.js.map +1 -0
  298. package/dist/store/vectors.d.ts +109 -0
  299. package/dist/store/vectors.d.ts.map +1 -0
  300. package/dist/store/vectors.js +221 -0
  301. package/dist/store/vectors.js.map +1 -0
  302. package/dist/update/index.d.ts +52 -0
  303. package/dist/update/index.d.ts.map +1 -0
  304. package/dist/update/index.js +68 -0
  305. package/dist/update/index.js.map +1 -0
  306. package/package.json +5 -1
@@ -0,0 +1,102 @@
1
+ import { keysOver } from "./keys.js";
2
+ import { applyCounterObservations } from "./sqlite/counters.js";
3
+ import { documentLinkMessages } from "./sqlite/document-links.js";
4
+ import * as messageWrites from "./sqlite/messages.js";
5
+ import * as personLinks from "./sqlite/person-links.js";
6
+ import * as reads from "./sqlite/reads.js";
7
+ import * as search from "./sqlite/search.js";
8
+ import { write } from "./sqlite/transaction.js";
9
+ import * as transcripts from "./sqlite/transcripts.js";
10
+ export const accountMessagesOver = (context) => {
11
+ const { database } = context;
12
+ const { accountPk, findAccountPk, findChatPk, chatKeyOf, chatPkFor, upsertMessage } = keysOver(context);
13
+ return {
14
+ saveMessages: async (key, chatId, messages, { via, seenAt }) => write(database, () => {
15
+ const accountKey = accountPk(key);
16
+ const chatKey = chatPkFor(accountKey, chatId);
17
+ for (const message of messages) {
18
+ if (message.scheduledFor === undefined)
19
+ upsertMessage(key, accountKey, chatKey, message, via, seenAt);
20
+ }
21
+ }),
22
+ messages: async (key, chatId, window) => {
23
+ const chatKey = chatKeyOf(key, chatId);
24
+ return chatKey === undefined ? { items: [], hasMore: false } : reads.messagePage(context, chatKey, window);
25
+ },
26
+ countMessages: async (key, chatId, { since } = {}) => {
27
+ const chatKey = chatKeyOf(key, chatId);
28
+ return chatKey === undefined ? 0 : reads.countMessages(context, chatKey, since);
29
+ },
30
+ changes: async (key, chatId, at) => {
31
+ const chatKey = chatKeyOf(key, chatId);
32
+ return chatKey === undefined
33
+ ? { messages: [], deleted: [] }
34
+ : reads.changesSince(context, chatKey, Date.parse(at));
35
+ },
36
+ messagesWindow: async (key, chatId, window) => {
37
+ const chatKey = chatKeyOf(key, chatId);
38
+ return chatKey === undefined ? [] : reads.messagesWindow(context, chatKey, window);
39
+ },
40
+ around: async (key, chatId, messageId, window) => reads.around(context, chatKeyOf(key, chatId), messageId, window),
41
+ message: async (key, messageId, { chatId } = {}) => {
42
+ const accountKey = findAccountPk(key);
43
+ return accountKey === undefined ? undefined : reads.message(context, accountKey, messageId, chatId);
44
+ },
45
+ markDeleted: async (key, messageIds, { chatId, among } = {}) => {
46
+ const accountKey = findAccountPk(key);
47
+ if (accountKey === undefined || messageIds.length === 0)
48
+ return 0;
49
+ let changed = 0;
50
+ write(database, () => {
51
+ changed = messageWrites.markDeleted(context, accountKey, messageIds, chatId, among);
52
+ });
53
+ return changed;
54
+ },
55
+ saveReactions: async (key, chatId, messageId, reactions, options = {}) => {
56
+ const accountKey = findAccountPk(key);
57
+ const chatKey = accountKey === undefined ? undefined : findChatPk(accountKey, chatId);
58
+ if (chatKey === undefined)
59
+ return false;
60
+ let saved = false;
61
+ write(database, () => {
62
+ saved = messageWrites.saveReactions(context, chatKey, messageId, reactions);
63
+ const row = database
64
+ .prepare("SELECT id AS pk FROM messages WHERE chat_id=? AND external_id=? AND deleted_at IS NULL")
65
+ .get(chatKey, messageId);
66
+ if (row && options.observation)
67
+ applyCounterObservations(context, Number(row.pk), { reactions: options.observation });
68
+ });
69
+ return saved;
70
+ },
71
+ senderStats: async (key, senderId) => {
72
+ const accountKey = findAccountPk(key);
73
+ return accountKey === undefined ? [] : reads.senderStats(context, accountKey, key.provider, senderId);
74
+ },
75
+ transcript: async (key, chatId, messageId) => {
76
+ const chatKey = chatKeyOf(key, chatId);
77
+ return chatKey === undefined ? undefined : transcripts.transcript(context, chatKey, messageId);
78
+ },
79
+ keepTranscript: async (key, chatId, messageId, text, source) => {
80
+ if (text.trim() === "")
81
+ return;
82
+ write(database, () => transcripts.keepTranscript(context, chatPkFor(accountPk(key), chatId), messageId, text, source));
83
+ },
84
+ documentLinkMessages: async (key, chatId) => {
85
+ const chatKey = chatKeyOf(key, chatId);
86
+ return chatKey === undefined ? [] : documentLinkMessages(context, chatKey);
87
+ },
88
+ mentioning: async (key, person, limit) => {
89
+ const accountKey = findAccountPk(key);
90
+ return accountKey === undefined
91
+ ? { items: [], hasMore: false }
92
+ : personLinks.mentioning(context, accountKey, person, limit);
93
+ },
94
+ };
95
+ };
96
+ export const messagesStoreOver = (context, keyed) => ({
97
+ ...keyed,
98
+ search: async (query, { limit, account }) => search.find(context, { text: query, limit, ...(account ? { account } : {}) }),
99
+ find: async (filter) => search.find(context, filter),
100
+ directReplies: async (parents, limit) => search.directReplies(context, parents, limit),
101
+ });
102
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/store/messages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import type { Contact, Id, Page, PersonAlias, Provider } from "../domain/models.js";
2
+ import type { PeopleLookup } from "../resolve.js";
3
+ import type { ContactFilter } from "./sqlite/identities.js";
4
+ import type { StoreContext } from "./sqlite/open.js";
5
+ import type { PrivateContact, PrivateContactNote } from "./sqlite/private-people.js";
6
+ import type { AccountKey, IdentityRef, LinkOptions, PersonFacts, PersonRecord } from "./types.js";
7
+ export interface AccountPeople {
8
+ savePeople(key: AccountKey, people: PersonFacts[]): Promise<void>;
9
+ /**
10
+ * The people this account has a one-to-one chat with — as far as the saved member lists go —
11
+ * newest conversation first or by name.
12
+ */
13
+ contacts(key: AccountKey, options: {
14
+ order: "recent" | "name";
15
+ limit: number;
16
+ offset?: number;
17
+ } & ContactFilter): Promise<Page<Contact>>;
18
+ countContacts(key: AccountKey, options?: ContactFilter): Promise<number>;
19
+ /** Works out again when each contact was last written to, from their one-to-one chats. */
20
+ refreshRecency(key: AccountKey): Promise<void>;
21
+ /** Every name and username this account's store recorded for one person, the current ones included. */
22
+ personNames(key: AccountKey, personId: Id): Promise<PersonAlias[]>;
23
+ privateContact(key: AccountKey, personId: Id): Promise<PrivateContact>;
24
+ setContactAlias(key: AccountKey, personId: Id, alias: string | null): Promise<{
25
+ personId: Id;
26
+ alias: string | null;
27
+ }>;
28
+ addContactNote(key: AccountKey, personId: Id, text: string): Promise<PrivateContactNote>;
29
+ contactNote(key: AccountKey, personId: Id, id: string): Promise<PrivateContactNote>;
30
+ editContactNote(key: AccountKey, personId: Id, id: string, text: string, revision: number): Promise<PrivateContactNote>;
31
+ removeContactNote(key: AccountKey, personId: Id, id: string): Promise<{
32
+ id: string;
33
+ personId: Id;
34
+ removed: boolean;
35
+ }>;
36
+ }
37
+ export interface PeopleStore extends AccountPeople {
38
+ /** Everyone this provider's accounts have seen; with `account`, only who that account has seen. */
39
+ people(provider: Provider, options?: {
40
+ account?: Id;
41
+ accounts?: Id[];
42
+ }): Promise<PeopleLookup>;
43
+ personOf(identity: IdentityRef): Promise<PersonRecord | undefined>;
44
+ /** The person a `person:<uid>` reference names. */
45
+ personSeenInAccounts(uid: string, accountIds: readonly number[]): Promise<boolean>;
46
+ personByUid(uid: string): Promise<PersonRecord | undefined>;
47
+ /** Records the decision in `identity_link_events`; `unlinkIdentity` undoes it. */
48
+ linkIdentities(person: IdentityRef, other: IdentityRef, options: LinkOptions): Promise<PersonRecord>;
49
+ unlinkIdentity(identity: IdentityRef, options: LinkOptions): Promise<PersonRecord>;
50
+ }
51
+ export declare const accountPeopleOver: (context: StoreContext) => AccountPeople;
52
+ export declare const peopleStoreOver: (context: StoreContext, keyed: AccountPeople) => PeopleStore;
53
+ //# sourceMappingURL=people.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"people.d.ts","sourceRoot":"","sources":["../../src/store/people.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACnF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAE3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAGpD,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAGpF,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEjG,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACjE;;;OAGG;IACH,QAAQ,CACN,GAAG,EAAE,UAAU,EACf,OAAO,EAAE;QAAE,KAAK,EAAE,QAAQ,GAAG,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,aAAa,GACpF,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;IACzB,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACxE,0FAA0F;IAC1F,cAAc,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9C,uGAAuG;IACvG,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;IAClE,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;IACtE,eAAe,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAA;IACrH,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACxF,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACnF,eAAe,CACb,GAAG,EAAE,UAAU,EACf,QAAQ,EAAE,EAAE,EACZ,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAC9B,iBAAiB,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,EAAE,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;CACtH;AAED,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD,mGAAmG;IACnG,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,EAAE,CAAC;QAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IAC9F,QAAQ,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAAA;IAClE,mDAAmD;IACnD,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAClF,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAAA;IAC3D,kFAAkF;IAClF,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IACpG,cAAc,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;CACnF;AAED,eAAO,MAAM,iBAAiB,YAAa,YAAY,KAAG,aA4CzD,CAAA;AAED,eAAO,MAAM,eAAe,YAAa,YAAY,SAAS,aAAa,KAAG,WAe7E,CAAA"}
@@ -0,0 +1,65 @@
1
+ import { keysOver } from "./keys.js";
2
+ import * as identities from "./sqlite/identities.js";
3
+ import * as personLinks from "./sqlite/person-links.js";
4
+ import { personSeenInAccounts } from "./sqlite/person-scope.js";
5
+ import * as privatePeople from "./sqlite/private-people.js";
6
+ import { write } from "./sqlite/transaction.js";
7
+ export const accountPeopleOver = (context) => {
8
+ const { database } = context;
9
+ const { accountPk, findAccountPk, identityPk } = keysOver(context);
10
+ return {
11
+ savePeople: async (key, people) => write(database, () => {
12
+ const accountKey = accountPk(key);
13
+ for (const person of people)
14
+ identityPk(accountKey, key.provider, person.id, person.name, person);
15
+ }),
16
+ contacts: async (key, options) => {
17
+ const accountKey = findAccountPk(key);
18
+ if (accountKey === undefined)
19
+ return { items: [], hasMore: false };
20
+ return identities.contacts(context, accountKey, key, options);
21
+ },
22
+ countContacts: async (key, filter = {}) => {
23
+ const accountKey = findAccountPk(key);
24
+ return accountKey === undefined ? 0 : identities.countContacts(context, accountKey, key, filter);
25
+ },
26
+ refreshRecency: async (key) => {
27
+ const accountKey = findAccountPk(key);
28
+ if (accountKey !== undefined)
29
+ identities.refreshRecency(context, accountKey);
30
+ },
31
+ personNames: async (key, personId) => {
32
+ const accountKey = findAccountPk(key);
33
+ return accountKey === undefined ? [] : identities.namesOf(context, accountKey, key.provider, personId);
34
+ },
35
+ privateContact: async (key, person) => privatePeople.privateContact(context, key, person),
36
+ setContactAlias: async (key, person, alias) => {
37
+ return write(database, () => privatePeople.setAlias(context, key, person, alias));
38
+ },
39
+ addContactNote: async (key, person, text) => {
40
+ return write(database, () => privatePeople.addNote(context, key, person, text));
41
+ },
42
+ contactNote: async (key, person, id) => privatePeople.note(context, key, person, id),
43
+ editContactNote: async (key, person, id, text, revision) => {
44
+ return write(database, () => privatePeople.editNote(context, key, person, id, text, revision));
45
+ },
46
+ removeContactNote: async (key, person, id) => privatePeople.removeNote(context, key, person, id),
47
+ };
48
+ };
49
+ export const peopleStoreOver = (context, keyed) => {
50
+ const { database } = context;
51
+ return {
52
+ ...keyed,
53
+ people: async (provider, options = {}) => identities.people(context, provider, options),
54
+ personOf: async (identity) => personLinks.personOf(context, identity),
55
+ personSeenInAccounts: async (uid, accountIds) => personSeenInAccounts(context, uid, accountIds),
56
+ personByUid: async (uid) => personLinks.personByUid(context, uid),
57
+ linkIdentities: async (person, other, options) => {
58
+ return write(database, () => personLinks.linkIdentities(context, person, other, options));
59
+ },
60
+ unlinkIdentity: async (identity, options) => {
61
+ return write(database, () => personLinks.unlinkIdentity(context, identity, options));
62
+ },
63
+ };
64
+ };
65
+ //# sourceMappingURL=people.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"people.js","sourceRoot":"","sources":["../../src/store/people.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { Page } from "../domain/models.js";
2
+ import type { QueryExecution } from "../search/lucene/resolved.js";
3
+ import type { Stemmer, Stemmers } from "../search/stem.js";
4
+ import { type AdminStoreRequest, type AdminStoreResult } from "./sqlite/admin-statistics.js";
5
+ import { type ConversationEligibility } from "./sqlite/conversation-eligibility.js";
6
+ import type { QueryGroup, QueryGrouping } from "./sqlite/lucene.js";
7
+ import type { StoreContext } from "./sqlite/open.js";
8
+ import { type RankedEvidence, type RankingEvidenceRequest } from "./sqlite/ranking-evidence.js";
9
+ import { type RankedStoreFound, type RankingRequest } from "./sqlite/rankings.js";
10
+ import type { ScoredHit } from "./sqlite/words.js";
11
+ /** A resolved Lucene query run over the store: hits, counts, rankings and the statistics behind them. */
12
+ export interface QueriesStore {
13
+ matchQuery(execution: QueryExecution): Promise<Page<ScoredHit>>;
14
+ /** The same matches as `matchQuery`, each counted once, grouped by chat, sender or quarter hour. */
15
+ countQuery(execution: QueryExecution, by: QueryGrouping): Promise<QueryGroup[]>;
16
+ conversationEligibility(execution: QueryExecution): Promise<ConversationEligibility>;
17
+ rankQuery(execution: QueryExecution, request: RankingRequest): Promise<RankedStoreFound>;
18
+ rankingEvidence(execution: QueryExecution, request: RankingEvidenceRequest): Promise<RankedEvidence>;
19
+ adminStatisticsQuery(execution: QueryExecution, request: AdminStoreRequest): Promise<AdminStoreResult>;
20
+ }
21
+ export declare const queriesStoreOver: (context: StoreContext, stemmerFor: (stemmers: Stemmers) => Stemmer) => QueriesStore;
22
+ //# sourceMappingURL=queries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/store/queries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAClE,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAwB,MAAM,8BAA8B,CAAA;AAClH,OAAO,EAAE,KAAK,uBAAuB,EAA2B,MAAM,sCAAsC,CAAA;AAE5G,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,sBAAsB,EAAmB,MAAM,8BAA8B,CAAA;AAChH,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAa,MAAM,sBAAsB,CAAA;AAC5F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAElD,yGAAyG;AACzG,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,SAAS,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAA;IAC/D,oGAAoG;IACpG,UAAU,CAAC,SAAS,EAAE,cAAc,EAAE,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;IAC/E,uBAAuB,CAAC,SAAS,EAAE,cAAc,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAA;IACpF,SAAS,CAAC,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACxF,eAAe,CAAC,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;IACpG,oBAAoB,CAAC,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;CACvG;AAED,eAAO,MAAM,gBAAgB,YAAa,YAAY,cAAc,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,KAAG,YAarG,CAAA"}
@@ -0,0 +1,22 @@
1
+ import { adminStatisticsQuery } from "./sqlite/admin-statistics.js";
2
+ import { conversationEligibility } from "./sqlite/conversation-eligibility.js";
3
+ import { drainEmailIndex } from "./sqlite/email-index.js";
4
+ import * as lucene from "./sqlite/lucene.js";
5
+ import { rankingEvidence } from "./sqlite/ranking-evidence.js";
6
+ import { rankQuery } from "./sqlite/rankings.js";
7
+ export const queriesStoreOver = (context, stemmerFor) => {
8
+ const mailIndexed = (execution) => {
9
+ if (execution.corpus === "mail")
10
+ drainEmailIndex(context.database, stemmerFor);
11
+ return execution;
12
+ };
13
+ return {
14
+ matchQuery: async (execution) => lucene.matchQuery(context, mailIndexed(execution)),
15
+ countQuery: async (execution, by) => lucene.countQuery(context, mailIndexed(execution), by),
16
+ conversationEligibility: async (execution) => conversationEligibility(context, execution),
17
+ rankQuery: async (execution, request) => rankQuery(context, execution, request),
18
+ rankingEvidence: async (execution, request) => rankingEvidence(context, execution, request),
19
+ adminStatisticsQuery: async (execution, request) => adminStatisticsQuery(context, execution, request),
20
+ };
21
+ };
22
+ //# sourceMappingURL=queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/store/queries.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiD,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAClH,OAAO,EAAgC,uBAAuB,EAAE,MAAM,sCAAsC,CAAA;AAC5G,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAEzD,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAA;AAE5C,OAAO,EAAoD,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAChH,OAAO,EAA8C,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAc5F,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAqB,EAAE,UAA2C,EAAgB,EAAE;IACnH,MAAM,WAAW,GAAG,CAAC,SAAyB,EAAE,EAAE;QAChD,IAAI,SAAS,CAAC,MAAM,KAAK,MAAM;YAAE,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;QAC9E,OAAO,SAAS,CAAA;IAClB,CAAC,CAAA;IACD,OAAO;QACL,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;QACnF,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;QAC3F,uBAAuB,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,uBAAuB,CAAC,OAAO,EAAE,SAAS,CAAC;QACzF,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC;QAC/E,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC;QAC3F,oBAAoB,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,oBAAoB,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC;KACtG,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,38 @@
1
+ import type { Id, Member } from "../domain/models.js";
2
+ import type { RetentionOptions } from "../domain/retention.js";
3
+ import type { StoreContext } from "./sqlite/open.js";
4
+ import { type RetentionResult } from "./sqlite/retention.js";
5
+ import type { MemberCount, MemberStay, ProfileRevision, RosterChange, RosterRead, TrackedChat } from "./sqlite/roster.js";
6
+ import type { AccountKey } from "./types.js";
7
+ export interface RosterStore {
8
+ /** Replaces who is in a chat with this list, whole: a person left out has left. */
9
+ saveMembers(key: AccountKey, chatId: Id, memberIds: Id[]): Promise<void>;
10
+ /** Who is in a chat, by name, as the last list said; empty when no list was ever saved. */
11
+ members(key: AccountKey, chatId: Id): Promise<Member[]>;
12
+ /**
13
+ * One read of a group's member list: stays opened and kept, a stay closed only when the read was whole,
14
+ * profiles revised when they differ, today's count. The chat's present members become the list read whole.
15
+ */
16
+ saveRoster(key: AccountKey, chatId: Id, read: RosterRead): Promise<RosterChange>;
17
+ /** Stays open at `since` (ISO) or begun after it, oldest first; every stay without it. */
18
+ memberStays(key: AccountKey, chatId: Id, options?: {
19
+ since?: string;
20
+ }): Promise<MemberStay[]>;
21
+ /** One row a day, oldest first; from `since` (`YYYY-MM-DD`) when given. */
22
+ memberCounts(key: AccountKey, chatId: Id, options?: {
23
+ since?: string;
24
+ }): Promise<MemberCount[]>;
25
+ /** Every profile the chat's members were seen with, oldest first. */
26
+ profileRevisions(key: AccountKey, chatId: Id, options?: {
27
+ since?: string;
28
+ }): Promise<ProfileRevision[]>;
29
+ /** Starts or stops `serve`'s daily fetch of the chat's members; history already kept stays. */
30
+ trackMembers(key: AccountKey, chatId: Id, tracked: boolean): Promise<void>;
31
+ trackedChats(key: AccountKey): Promise<TrackedChat[]>;
32
+ retention(key: AccountKey, chatId: Id, options: RetentionOptions, evidence?: {
33
+ cohort: string;
34
+ cursor?: string;
35
+ }): Promise<RetentionResult>;
36
+ }
37
+ export declare const rosterStoreOver: (context: StoreContext) => RosterStore;
38
+ //# sourceMappingURL=roster.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roster.d.ts","sourceRoot":"","sources":["../../src/store/roster.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAG9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,KAAK,eAAe,EAAkB,MAAM,uBAAuB,CAAA;AAC5E,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,eAAe,EACf,YAAY,EACZ,UAAU,EACV,WAAW,EACZ,MAAM,oBAAoB,CAAA;AAG3B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,MAAM,WAAW,WAAW;IAC1B,mFAAmF;IACnF,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACxE,2FAA2F;IAC3F,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACvD;;;OAGG;IACH,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IAChF,0FAA0F;IAC1F,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;IAC7F,2EAA2E;IAC3E,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;IAC/F,qEAAqE;IACrE,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAA;IACvG,+FAA+F;IAC/F,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1E,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;IACrD,SAAS,CACP,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,EAAE,EACV,OAAO,EAAE,gBAAgB,EACzB,QAAQ,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC7C,OAAO,CAAC,eAAe,CAAC,CAAA;CAC5B;AAED,eAAO,MAAM,eAAe,YAAa,YAAY,KAAG,WAwDvD,CAAA"}
@@ -0,0 +1,54 @@
1
+ import { CliError } from "@wirecat/cli-base";
2
+ import { keysOver } from "./keys.js";
3
+ import * as chatQueries from "./sqlite/chats.js";
4
+ import { retentionQuery } from "./sqlite/retention.js";
5
+ import * as roster from "./sqlite/roster.js";
6
+ import { read, write } from "./sqlite/transaction.js";
7
+ export const rosterStoreOver = (context) => {
8
+ const { database } = context;
9
+ const { accountPk, findAccountPk, chatKeyOf, chatPkFor, writeMembers } = keysOver(context);
10
+ return {
11
+ saveMembers: async (key, chatId, memberIds) => write(database, () => writeMembers(key, accountPk(key), chatId, memberIds)),
12
+ members: async (key, chatId) => {
13
+ const chatKey = chatKeyOf(key, chatId);
14
+ return chatKey === undefined ? [] : chatQueries.members(context, chatKey);
15
+ },
16
+ saveRoster: async (key, chatId, read) => {
17
+ let change = { joined: [], gone: [], changed: [] };
18
+ write(database, () => {
19
+ const accountKey = accountPk(key);
20
+ change = roster.saveRoster(context, accountKey, key.provider, chatPkFor(accountKey, chatId), read);
21
+ });
22
+ return change;
23
+ },
24
+ memberStays: async (key, chatId, { since } = {}) => {
25
+ const chatKey = chatKeyOf(key, chatId);
26
+ return chatKey === undefined
27
+ ? []
28
+ : roster.memberStaysOf(context, chatKey, since === undefined ? undefined : Date.parse(since));
29
+ },
30
+ memberCounts: async (key, chatId, { since } = {}) => {
31
+ const chatKey = chatKeyOf(key, chatId);
32
+ return chatKey === undefined ? [] : roster.memberCountsOf(context, chatKey, since);
33
+ },
34
+ profileRevisions: async (key, chatId, { since } = {}) => {
35
+ const chatKey = chatKeyOf(key, chatId);
36
+ return chatKey === undefined
37
+ ? []
38
+ : roster.profileRevisionsOf(context, chatKey, since === undefined ? undefined : Date.parse(since));
39
+ },
40
+ trackMembers: async (key, chatId, tracked) => write(database, () => roster.setTracked(context, chatPkFor(accountPk(key), chatId), tracked)),
41
+ trackedChats: async (key) => {
42
+ const accountKey = findAccountPk(key);
43
+ return accountKey === undefined ? [] : roster.trackedChats(context, accountKey);
44
+ },
45
+ retention: async (key, chatId, options, evidence) => {
46
+ const accountKey = findAccountPk(key);
47
+ const chatKey = chatKeyOf(key, chatId);
48
+ if (accountKey === undefined || chatKey === undefined)
49
+ throw new CliError("validation_error", "retention needs a stored chat and membership observations");
50
+ return read(database, () => retentionQuery(context, accountKey, chatKey, chatId, options, evidence));
51
+ },
52
+ };
53
+ };
54
+ //# sourceMappingURL=roster.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roster.js","sourceRoot":"","sources":["../../src/store/roster.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { Stemmers } from "../search/stem.js";
2
+ import type { StoreContext } from "./sqlite/open.js";
3
+ import type { SearchIndexFill, SearchIndexState } from "./sqlite/search-index.js";
4
+ import type { StemsFill, StemsState } from "./sqlite/stems.js";
5
+ export interface SearchIndexStore {
6
+ /** Of `terms`, those the index knows as a word or the beginning of one. */
7
+ knownTerms(terms: string[]): Promise<Set<string>>;
8
+ /** Known words sharing these trigrams, within the lengths, most shared first. */
9
+ termCandidates(trigrams: string[], lengths: {
10
+ shortest: number;
11
+ longest: number;
12
+ }): Promise<{
13
+ term: string;
14
+ docs: number;
15
+ }[]>;
16
+ /** How far the word index is built; `undefined` on a file before it existed. */
17
+ searchIndexState(): Promise<SearchIndexState | undefined>;
18
+ /**
19
+ * Builds the word index towards "ready" in short batches — the normalized text, the messages up to
20
+ * the watermark, the typo vocabulary — until done or `until` says stop. Each batch is its own write.
21
+ */
22
+ fillSearchIndex(options?: {
23
+ until?: () => boolean;
24
+ }): Promise<SearchIndexFill>;
25
+ /** How far the stems are built, and by which stemmer choices; `undefined` on a file before they existed. */
26
+ stemsState(): Promise<StemsState | undefined>;
27
+ /** Builds the stems towards "ready" in short batches until done or `until` says stop; never rebuilds. */
28
+ fillStems(options?: {
29
+ until?: () => boolean;
30
+ }): Promise<StemsFill>;
31
+ /**
32
+ * The stemmer choices saved in the store for every profile, tg and MAX; `undefined` while the defaults
33
+ * apply, `null` when a newer tool saved one this build does not know.
34
+ */
35
+ stemmers(): Promise<Stemmers | null | undefined>;
36
+ /** Saves them; stems built by other choices wait for `store reindex` or `store migrate`. */
37
+ saveStemmers(stemmers: Stemmers): Promise<void>;
38
+ }
39
+ export declare const searchIndexStoreOver: (context: StoreContext) => SearchIndexStore;
40
+ //# sourceMappingURL=search-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-index.d.ts","sourceRoot":"","sources":["../../src/store/search-index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAEjF,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAM9D,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IACjD,iFAAiF;IACjF,cAAc,CACZ,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAC7C,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAA;IAC5C,gFAAgF;IAChF,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAA;IACzD;;;OAGG;IACH,eAAe,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IAC9E,4GAA4G;IAC5G,UAAU,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAA;IAC7C,yGAAyG;IACzG,SAAS,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IAClE;;;OAGG;IACH,QAAQ,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,GAAG,SAAS,CAAC,CAAA;IAChD,4FAA4F;IAC5F,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAChD;AAED,eAAO,MAAM,oBAAoB,YAAa,YAAY,KAAG,gBAa5D,CAAA"}
@@ -0,0 +1,19 @@
1
+ import * as searchIndex from "./sqlite/search-index.js";
2
+ import * as stems from "./sqlite/stems.js";
3
+ import { fillStems } from "./sqlite/stems-fill.js";
4
+ import { write } from "./sqlite/transaction.js";
5
+ import * as words from "./sqlite/words.js";
6
+ export const searchIndexStoreOver = (context) => {
7
+ const { database } = context;
8
+ return {
9
+ knownTerms: async (terms) => words.knownTerms(context, terms),
10
+ termCandidates: async (trigrams, lengths) => words.termCandidates(context, trigrams, lengths),
11
+ searchIndexState: async () => searchIndex.searchIndexState(database),
12
+ fillSearchIndex: async ({ until } = {}) => searchIndex.fillSearchIndex(database, { now: context.now, ...(until ? { until } : {}) }),
13
+ stemsState: async () => stems.stemsState(database),
14
+ fillStems: async ({ until } = {}) => fillStems(database, { now: context.now, ...(until ? { until } : {}) }),
15
+ stemmers: async () => stems.savedStemmers(database),
16
+ saveStemmers: async (stemmers) => write(database, () => stems.saveStoreStemmers(database, stemmers, context.now())),
17
+ };
18
+ };
19
+ //# sourceMappingURL=search-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-index.js","sourceRoot":"","sources":["../../src/store/search-index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAA;AAEvD,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAA;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAC/C,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAA;AA8B1C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,OAAqB,EAAoB,EAAE;IAC9E,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;IAC5B,OAAO;QACL,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC;QAC7D,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC;QAC7F,gBAAgB,EAAE,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QACpE,eAAe,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,CACxC,WAAW,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1F,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC;QAClD,SAAS,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3G,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC;QACnD,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;KACpH,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,22 @@
1
+ import type { StoreContext } from "./sqlite/open.js";
2
+ import type { SearchRecord, StoredSearch } from "./sqlite/searches.js";
3
+ export interface SearchesStore {
4
+ /** One run of a search or stats; the same unnamed run again counts on its row. `saved` is the saved search it ran. */
5
+ recordSearch(run: SearchRecord, options?: {
6
+ saved?: string;
7
+ }): Promise<void>;
8
+ /** A saved search by name; a name already taken is refused unless `replace`. */
9
+ saveSearch(name: string, search: SearchRecord, options?: {
10
+ replace?: boolean;
11
+ }): Promise<StoredSearch>;
12
+ /** A saved search by name, or any row by id. */
13
+ storedSearch(reference: string): Promise<StoredSearch | undefined>;
14
+ savedSearches(): Promise<StoredSearch[]>;
15
+ /** Runs, newest first, one more than `limit` when there are more. */
16
+ searchHistory(limit: number, offset?: number): Promise<StoredSearch[]>;
17
+ deleteSearch(reference: string): Promise<StoredSearch>;
18
+ /** Drops the unnamed runs; answers how many. */
19
+ clearSearchHistory(): Promise<number>;
20
+ }
21
+ export declare const searchesStoreOver: (context: StoreContext) => SearchesStore;
22
+ //# sourceMappingURL=searches.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searches.d.ts","sourceRoot":"","sources":["../../src/store/searches.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAItE,MAAM,WAAW,aAAa;IAC5B,sHAAsH;IACtH,YAAY,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5E,gFAAgF;IAChF,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IACtG,gDAAgD;IAChD,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAAA;IAClE,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IACxC,qEAAqE;IACrE,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IACtE,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IACtD,gDAAgD;IAChD,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;CACtC;AAED,eAAO,MAAM,iBAAiB,YAAa,YAAY,KAAG,aA2BzD,CAAA"}
@@ -0,0 +1,25 @@
1
+ import * as searchRecords from "./sqlite/searches.js";
2
+ import { write } from "./sqlite/transaction.js";
3
+ export const searchesStoreOver = (context) => {
4
+ const { database } = context;
5
+ return {
6
+ recordSearch: async (run, { saved } = {}) => write(database, () => searchRecords.recordRun(context, run, saved)),
7
+ saveSearch: async (name, search, { replace = false } = {}) => {
8
+ return write(database, () => searchRecords.saveSearch(context, name, search, replace));
9
+ },
10
+ storedSearch: async (reference) => searchRecords.findSearch(context, reference),
11
+ savedSearches: async () => searchRecords.savedSearches(context),
12
+ searchHistory: async (limit, offset) => searchRecords.searchHistory(context, limit, offset),
13
+ deleteSearch: async (reference) => {
14
+ return write(database, () => searchRecords.deleteSearch(context, reference));
15
+ },
16
+ clearSearchHistory: async () => {
17
+ let cleared = 0;
18
+ write(database, () => {
19
+ cleared = searchRecords.clearHistory(context);
20
+ });
21
+ return cleared;
22
+ },
23
+ };
24
+ };
25
+ //# sourceMappingURL=searches.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searches.js","sourceRoot":"","sources":["../../src/store/searches.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,aAAa,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAiB/C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAqB,EAAiB,EAAE;IACxE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;IAC5B,OAAO;QACL,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAEhH,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE;YAC3D,OAAO,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;QACxF,CAAC;QAED,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC;QAE/E,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC;QAE/D,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC;QAE3F,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;YAChC,OAAO,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAA;QAC9E,CAAC;QAED,kBAAkB,EAAE,KAAK,IAAI,EAAE;YAC7B,IAAI,OAAO,GAAG,CAAC,CAAA;YACf,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE;gBACnB,OAAO,GAAG,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;YAC/C,CAAC,CAAC,CAAA;YACF,OAAO,OAAO,CAAA;QAChB,CAAC;KACF,CAAA;AACH,CAAC,CAAA"}
@@ -1,4 +1,4 @@
1
- import type { AccountKey, StoredAccount } from "../store.js";
1
+ import type { AccountKey, StoredAccount } from "../types.js";
2
2
  import type { StoreContext } from "./open.js";
3
3
  /** An account's row, made on first sight; a name only replaces what was known when there is one. */
4
4
  export declare const accountPk: ({ orm, now }: StoreContext, { provider, account, scope }: AccountKey, name?: string | null) => number;
@@ -1,7 +1,7 @@
1
1
  import { type AdminOptions, type AdminRow, calculateAdminStatistics } from "../../domain/admin-statistics.js";
2
2
  import { type CounterState } from "../../domain/counters.js";
3
3
  import type { QueryExecution } from "../../search/lucene/resolved.js";
4
- import type { StoredHit } from "../store.js";
4
+ import type { StoredHit } from "../types.js";
5
5
  import type { StoreContext } from "./open.js";
6
6
  export interface AdminStoreRequest {
7
7
  options: AdminOptions;
@@ -1,5 +1,5 @@
1
1
  import type { Id } from "../../domain/models.js";
2
- import type { AgentAnswer, LinkBatch } from "../store.js";
2
+ import type { AgentAnswer, LinkBatch } from "../types.js";
3
3
  import type { StoreContext } from "./open.js";
4
4
  /** How many messages before the first one to answer the agent sees: 97% of reply parents sit within 50. */
5
5
  export declare const BATCH_CONTEXT = 50;
@@ -1,4 +1,4 @@
1
- import type { AccountKey } from "../store.js";
1
+ import type { AccountKey } from "../types.js";
2
2
  import type { StoreContext } from "./open.js";
3
3
  export interface BotUpdate {
4
4
  id: number;
@@ -1,6 +1,6 @@
1
1
  import type { ChannelTagMatch } from "../../domain/channel-tags.js";
2
2
  import type { Chat, Id, Member, Page } from "../../domain/models.js";
3
- import type { AccountKey, StoredChatFilter } from "../store.js";
3
+ import type { AccountKey, StoredChatFilter } from "../types.js";
4
4
  import type { StoreContext } from "./open.js";
5
5
  /** The chat's own id, when the store key is a chat of this account. */
6
6
  export declare const chatOf: ({ orm }: StoreContext, accountKey: number, chatKey: number) => Id | undefined;
@@ -1,5 +1,5 @@
1
1
  import type { QueryExecution } from "../../search/lucene/resolved.js";
2
- import type { AccountKey } from "../store.js";
2
+ import type { AccountKey } from "../types.js";
3
3
  import type { StoreContext } from "./open.js";
4
4
  export interface ConversationEligibility {
5
5
  conversations: string[];
@@ -1,6 +1,6 @@
1
1
  import type { LinkInput } from "../../conversations/link.js";
2
2
  import type { Id, Message, Page } from "../../domain/models.js";
3
- import type { ConversationBuild, ConversationSummary, StoredLink } from "../store.js";
3
+ import type { ConversationBuild, ConversationSummary, StoredLink } from "../types.js";
4
4
  import type { StoreContext } from "./open.js";
5
5
  import { type Where } from "./query-filter.js";
6
6
  /** A chat's live messages for the rules, oldest first, a page at a time; `next` continues it. */