@leemour/cli-messaging 0.149.0 → 0.150.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 (170) hide show
  1. package/README.md +19 -0
  2. package/THIRD_PARTY_NOTICES +8 -0
  3. package/dist/botcheck/check.d.ts +64 -0
  4. package/dist/botcheck/check.d.ts.map +1 -0
  5. package/dist/botcheck/check.js +84 -0
  6. package/dist/botcheck/check.js.map +1 -0
  7. package/dist/botcheck/reasons.d.ts +15 -0
  8. package/dist/botcheck/reasons.d.ts.map +1 -0
  9. package/dist/botcheck/reasons.js +29 -0
  10. package/dist/botcheck/reasons.js.map +1 -0
  11. package/dist/botcheck/registries.d.ts +38 -0
  12. package/dist/botcheck/registries.d.ts.map +1 -0
  13. package/dist/botcheck/registries.js +98 -0
  14. package/dist/botcheck/registries.js.map +1 -0
  15. package/dist/botcheck/service.d.ts +16 -0
  16. package/dist/botcheck/service.d.ts.map +1 -0
  17. package/dist/botcheck/service.js +94 -0
  18. package/dist/botcheck/service.js.map +1 -0
  19. package/dist/charts/chat.d.ts +10 -0
  20. package/dist/charts/chat.d.ts.map +1 -0
  21. package/dist/charts/chat.js +72 -0
  22. package/dist/charts/chat.js.map +1 -0
  23. package/dist/charts/echarts-option.d.ts +4 -0
  24. package/dist/charts/echarts-option.d.ts.map +1 -0
  25. package/dist/charts/echarts-option.js +51 -0
  26. package/dist/charts/echarts-option.js.map +1 -0
  27. package/dist/charts/echarts.d.ts +3 -0
  28. package/dist/charts/echarts.d.ts.map +1 -0
  29. package/dist/charts/echarts.js +26 -0
  30. package/dist/charts/echarts.js.map +1 -0
  31. package/dist/charts/index.d.ts +4 -0
  32. package/dist/charts/index.d.ts.map +1 -0
  33. package/dist/charts/index.js +4 -0
  34. package/dist/charts/index.js.map +1 -0
  35. package/dist/charts/model.d.ts +34 -0
  36. package/dist/charts/model.d.ts.map +1 -0
  37. package/dist/charts/model.js +3 -0
  38. package/dist/charts/model.js.map +1 -0
  39. package/dist/charts/render.d.ts +3 -0
  40. package/dist/charts/render.d.ts.map +1 -0
  41. package/dist/charts/render.js +2 -0
  42. package/dist/charts/render.js.map +1 -0
  43. package/dist/cli/index.d.ts +6 -1
  44. package/dist/cli/index.d.ts.map +1 -1
  45. package/dist/cli/index.js +5 -0
  46. package/dist/cli/index.js.map +1 -1
  47. package/dist/cli/messenger/chats-command.d.ts.map +1 -1
  48. package/dist/cli/messenger/chats-command.js +2 -0
  49. package/dist/cli/messenger/chats-command.js.map +1 -1
  50. package/dist/cli/messenger/chats-members-command.d.ts.map +1 -1
  51. package/dist/cli/messenger/chats-members-command.js +67 -3
  52. package/dist/cli/messenger/chats-members-command.js.map +1 -1
  53. package/dist/cli/messenger/chats-tracking-command.d.ts +5 -0
  54. package/dist/cli/messenger/chats-tracking-command.d.ts.map +1 -0
  55. package/dist/cli/messenger/chats-tracking-command.js +53 -0
  56. package/dist/cli/messenger/chats-tracking-command.js.map +1 -0
  57. package/dist/cli/messenger/contacts-command.d.ts +0 -1
  58. package/dist/cli/messenger/contacts-command.d.ts.map +1 -1
  59. package/dist/cli/messenger/contacts-command.js +68 -2
  60. package/dist/cli/messenger/contacts-command.js.map +1 -1
  61. package/dist/cli/messenger/port.d.ts +22 -2
  62. package/dist/cli/messenger/port.d.ts.map +1 -1
  63. package/dist/cli/messenger/port.js.map +1 -1
  64. package/dist/cli/messenger/review.d.ts +2 -1
  65. package/dist/cli/messenger/review.d.ts.map +1 -1
  66. package/dist/cli/messenger/review.js +4 -1
  67. package/dist/cli/messenger/review.js.map +1 -1
  68. package/dist/cli/messenger/serve-command.d.ts.map +1 -1
  69. package/dist/cli/messenger/serve-command.js +47 -3
  70. package/dist/cli/messenger/serve-command.js.map +1 -1
  71. package/dist/cli/messenger/serve-members.d.ts +26 -0
  72. package/dist/cli/messenger/serve-members.d.ts.map +1 -0
  73. package/dist/cli/messenger/serve-members.js +47 -0
  74. package/dist/cli/messenger/serve-members.js.map +1 -0
  75. package/dist/cli/messenger/stats-command.d.ts +5 -0
  76. package/dist/cli/messenger/stats-command.d.ts.map +1 -0
  77. package/dist/cli/messenger/stats-command.js +59 -0
  78. package/dist/cli/messenger/stats-command.js.map +1 -0
  79. package/dist/cli/registry-keys.d.ts +8 -0
  80. package/dist/cli/registry-keys.d.ts.map +1 -0
  81. package/dist/cli/registry-keys.js +19 -0
  82. package/dist/cli/registry-keys.js.map +1 -0
  83. package/dist/domain/models.d.ts +65 -0
  84. package/dist/domain/models.d.ts.map +1 -1
  85. package/dist/mcp/tools/chats.d.ts.map +1 -1
  86. package/dist/mcp/tools/chats.js +47 -4
  87. package/dist/mcp/tools/chats.js.map +1 -1
  88. package/dist/mcp/tools/contacts.d.ts.map +1 -1
  89. package/dist/mcp/tools/contacts.js +58 -5
  90. package/dist/mcp/tools/contacts.js.map +1 -1
  91. package/dist/mcp/tools/stats.d.ts +4 -0
  92. package/dist/mcp/tools/stats.d.ts.map +1 -0
  93. package/dist/mcp/tools/stats.js +34 -0
  94. package/dist/mcp/tools/stats.js.map +1 -0
  95. package/dist/mcp/tools.d.ts.map +1 -1
  96. package/dist/mcp/tools.js +2 -0
  97. package/dist/mcp/tools.js.map +1 -1
  98. package/dist/sends/permissions.js +1 -1
  99. package/dist/sends/permissions.js.map +1 -1
  100. package/dist/services/chat-stats.d.ts +3 -1
  101. package/dist/services/chat-stats.d.ts.map +1 -1
  102. package/dist/services/chat-stats.js.map +1 -1
  103. package/dist/services/chats.d.ts +47 -0
  104. package/dist/services/chats.d.ts.map +1 -1
  105. package/dist/services/chats.js +102 -18
  106. package/dist/services/chats.js.map +1 -1
  107. package/dist/services/deps.d.ts +10 -0
  108. package/dist/services/deps.d.ts.map +1 -1
  109. package/dist/services/deps.js +20 -0
  110. package/dist/services/deps.js.map +1 -1
  111. package/dist/services/inbox.d.ts +6 -20
  112. package/dist/services/inbox.d.ts.map +1 -1
  113. package/dist/services/inbox.js +16 -40
  114. package/dist/services/inbox.js.map +1 -1
  115. package/dist/services/index.d.ts +5 -1
  116. package/dist/services/index.d.ts.map +1 -1
  117. package/dist/services/index.js +4 -1
  118. package/dist/services/index.js.map +1 -1
  119. package/dist/services/member-history.d.ts +23 -0
  120. package/dist/services/member-history.d.ts.map +1 -0
  121. package/dist/services/member-history.js +37 -0
  122. package/dist/services/member-history.js.map +1 -0
  123. package/dist/services/members-audit.d.ts +5 -1
  124. package/dist/services/members-audit.d.ts.map +1 -1
  125. package/dist/services/members-audit.js +1 -16
  126. package/dist/services/members-audit.js.map +1 -1
  127. package/dist/services/people.d.ts +17 -3
  128. package/dist/services/people.d.ts.map +1 -1
  129. package/dist/services/people.js +35 -1
  130. package/dist/services/people.js.map +1 -1
  131. package/dist/services/person-context.d.ts +42 -0
  132. package/dist/services/person-context.d.ts.map +1 -1
  133. package/dist/services/person-context.js +48 -0
  134. package/dist/services/person-context.js.map +1 -1
  135. package/dist/services/person-profile.d.ts +10 -0
  136. package/dist/services/person-profile.d.ts.map +1 -0
  137. package/dist/services/person-profile.js +64 -0
  138. package/dist/services/person-profile.js.map +1 -0
  139. package/dist/services/questions.d.ts +19 -0
  140. package/dist/services/questions.d.ts.map +1 -0
  141. package/dist/services/questions.js +39 -0
  142. package/dist/services/questions.js.map +1 -0
  143. package/dist/services/task-rules.d.ts +27 -0
  144. package/dist/services/task-rules.d.ts.map +1 -0
  145. package/dist/services/task-rules.js +79 -0
  146. package/dist/services/task-rules.js.map +1 -0
  147. package/dist/store/sqlite/manifest.d.ts.map +1 -1
  148. package/dist/store/sqlite/manifest.js +1 -0
  149. package/dist/store/sqlite/manifest.js.map +1 -1
  150. package/dist/store/sqlite/migrations.generated.d.ts.map +1 -1
  151. package/dist/store/sqlite/migrations.generated.js +8 -0
  152. package/dist/store/sqlite/migrations.generated.js.map +1 -1
  153. package/dist/store/sqlite/reads.d.ts +3 -1
  154. package/dist/store/sqlite/reads.d.ts.map +1 -1
  155. package/dist/store/sqlite/reads.js +28 -0
  156. package/dist/store/sqlite/reads.js.map +1 -1
  157. package/dist/store/sqlite/schema.d.ts +219 -0
  158. package/dist/store/sqlite/schema.d.ts.map +1 -1
  159. package/dist/store/sqlite/schema.js +22 -0
  160. package/dist/store/sqlite/schema.js.map +1 -1
  161. package/dist/store/sqlite/tasks.d.ts +8 -0
  162. package/dist/store/sqlite/tasks.d.ts.map +1 -0
  163. package/dist/store/sqlite/tasks.js +101 -0
  164. package/dist/store/sqlite/tasks.js.map +1 -0
  165. package/dist/store/store.d.ts +16 -1
  166. package/dist/store/store.d.ts.map +1 -1
  167. package/dist/store/store.js +6 -0
  168. package/dist/store/store.js.map +1 -1
  169. package/package.json +8 -2
  170. package/parity.json +441 -373
@@ -66,4 +66,46 @@ export interface ContextOptions {
66
66
  export declare const personContext: (store: MessageStore, asked: AccountKey, reference: string, { messages, bytes, since }?: ContextOptions) => Promise<PersonContext>;
67
67
  /** `max:Ana` names a person in another messenger of this store; a reference with no prefix, this one. */
68
68
  export declare const identityIn: (store: MessageStore, asked: AccountKey, reference: string) => Promise<IdentityRef>;
69
+ export declare const CHAT_MESSAGES = 20;
70
+ /** `0` what an agent summarises — when and what; `1` adds ids, the locator and who and what it answers; `2` all of it. */
71
+ export type Detail = 0 | 1 | 2;
72
+ export type LeanMessage = {
73
+ at: string;
74
+ text: string;
75
+ transcript?: string;
76
+ } & Record<string, unknown>;
77
+ export interface PersonChatMessages {
78
+ chat: {
79
+ id: Id;
80
+ title: string | null;
81
+ kind: ChatKind;
82
+ };
83
+ /** Their newest `limit` in this chat, oldest first. */
84
+ messages: LeanMessage[];
85
+ /** The store holds the whole chat, so no older message of theirs is missing. */
86
+ complete: boolean;
87
+ /** They wrote more here than `limit`. */
88
+ more: boolean;
89
+ }
90
+ export interface PersonMessages {
91
+ person: {
92
+ uid: string;
93
+ provider: Provider;
94
+ id: Id;
95
+ name: string | null;
96
+ };
97
+ chats: PersonChatMessages[];
98
+ limits: {
99
+ messages: number;
100
+ };
101
+ }
102
+ /**
103
+ * One person's newest messages in each chat named, from the store, oldest first in each — what an
104
+ * agent reads to summarise them. Short by default: metadata only at a higher `detail`.
105
+ */
106
+ export declare const personMessages: (store: MessageStore, asked: AccountKey, reference: string, { chats, limit, detail }: {
107
+ chats: Id[];
108
+ limit?: number;
109
+ detail?: Detail;
110
+ }) => Promise<PersonMessages>;
69
111
  //# sourceMappingURL=person-context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"person-context.d.ts","sourceRoot":"","sources":["../../src/services/person-context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAW,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAE1E,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAkB,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAE5G,eAAO,MAAM,gBAAgB,KAAK,CAAA;AAClC,eAAO,MAAM,aAAa,QAAY,CAAA;AAEtC,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,QAAQ,CAAA;IAClB,OAAO,EAAE,EAAE,CAAA;IACX,MAAM,EAAE,EAAE,CAAA;IACV,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,EAAE,EAAE,EAAE,CAAA;IACN,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAA;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAA;IACxB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,QAAQ,CAAA;IAClB,OAAO,EAAE,EAAE,CAAA;IACX,MAAM,EAAE,EAAE,CAAA;IACV,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,IAAI,EAAE,QAAQ,CAAA;IACd,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7B;AAED,0GAA0G;AAC1G,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,SAAS,CAAA;AAErD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,YAAY,GAAG;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,EAAE,EAAE,EAAE,CAAA;KAAE,CAAA;IACrD,MAAM,EAAE,UAAU,EAAE,CAAA;IACpB,IAAI,EAAE;QAAE,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;QAAC,gBAAgB,EAAE,cAAc,GAAG,IAAI,CAAA;KAAE,CAAA;IACjH,MAAM,EAAE;QAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QAAC,MAAM,EAAE,cAAc,EAAE,CAAA;KAAE,CAAA;IAC9D,QAAQ,EAAE,cAAc,EAAE,CAAA;IAC1B,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3C,kCAAkC;IAClC,OAAO,EAAE,OAAO,CAAA;IAChB,oGAAoG;IACpG,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,CAAC,GAAG;QAAE,MAAM,EAAE,aAAa,CAAA;KAAE,CAAC,EAAE,CAAA;CACpF;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,yBAAyB;IACzB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AA8BD;;;GAGG;AACH,eAAO,MAAM,aAAa,UACjB,YAAY,SACZ,UAAU,aACN,MAAM,+BAC8C,cAAc,KAC5E,OAAO,CAAC,aAAa,CAkFvB,CAAA;AAmBD,yGAAyG;AACzG,eAAO,MAAM,UAAU,UAAiB,YAAY,SAAS,UAAU,aAAa,MAAM,KAAG,OAAO,CAAC,WAAW,CAM/G,CAAA"}
1
+ {"version":3,"file":"person-context.d.ts","sourceRoot":"","sources":["../../src/services/person-context.ts"],"names":[],"mappings":"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"}
@@ -127,4 +127,52 @@ export const identityIn = async (store, asked, reference) => {
127
127
  const people = await store.people(provider, provider === asked.provider ? { account: asked.account } : {});
128
128
  return { provider, id: pickPerson(typed, people).id };
129
129
  };
130
+ export const CHAT_MESSAGES = 20;
131
+ const heardText = (message) => "transcript" in message && typeof message.transcript === "string" ? message.transcript : undefined;
132
+ const lean = (key, message, detail) => {
133
+ const transcript = heardText(message);
134
+ const short = { at: message.timestamp, text: message.text, ...(transcript ? { transcript } : {}) };
135
+ const locator = formatLocator({ ...key, chat: message.chatId, message: message.id });
136
+ if (detail === 0)
137
+ return short;
138
+ if (detail === 2)
139
+ return { ...message, ...short, locator };
140
+ return {
141
+ ...short,
142
+ id: message.id,
143
+ locator,
144
+ senderId: message.senderId,
145
+ replyTo: message.replyTo?.id ?? message.replyToId ?? null,
146
+ };
147
+ };
148
+ /**
149
+ * One person's newest messages in each chat named, from the store, oldest first in each — what an
150
+ * agent reads to summarise them. Short by default: metadata only at a higher `detail`.
151
+ */
152
+ export const personMessages = async (store, asked, reference, { chats, limit = CHAT_MESSAGES, detail = 0 }) => {
153
+ const found = pickPerson(reference, await store.people(asked.provider, { account: asked.account }));
154
+ const record = await store.personOf({ provider: asked.provider, id: found.id });
155
+ if (!record)
156
+ throw new CliError("not_found", `no person ${found.id} in the store`);
157
+ const stored = (await store.chats(asked, {})).items;
158
+ const held = new Map((await store.chatCompleteness(asked, chats)).map((one) => [one.chatId, one.state]));
159
+ const answer = [];
160
+ for (const chatId of chats) {
161
+ const chat = stored.find((one) => one.id === chatId);
162
+ const page = await store.find({ account: asked, senders: [found.id], chatId, limit });
163
+ answer.push({
164
+ chat: { id: chatId, title: chat?.title ?? null, kind: chat?.kind ?? "unknown" },
165
+ messages: page.items
166
+ .toSorted((a, b) => Date.parse(a.timestamp) - Date.parse(b.timestamp))
167
+ .map((message) => lean(asked, message, detail)),
168
+ complete: held.get(chatId) === "complete",
169
+ more: page.hasMore,
170
+ });
171
+ }
172
+ return {
173
+ person: { uid: record.uid, provider: asked.provider, id: found.id, name: found.name ?? record.name },
174
+ chats: answer,
175
+ limits: { messages: limit },
176
+ };
177
+ };
130
178
  //# sourceMappingURL=person-context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"person-context.js","sourceRoot":"","sources":["../../src/services/person-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAG1C,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAA;AAClC,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,GAAG,IAAI,CAAA;AAiDtC,MAAM,SAAS,GAAG,CAAC,GAAe,EAAE,OAAgB,EAAE,SAAwB,EAAkB,EAAE,CAAC,CAAC;IAClG,OAAO,EAAE,aAAa,CAAC,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;IAC7E,QAAQ,EAAE,GAAG,CAAC,QAAQ;IACtB,OAAO,EAAE,GAAG,CAAC,OAAO;IACpB,MAAM,EAAE,OAAO,CAAC,MAAM;IACtB,SAAS;IACT,EAAE,EAAE,OAAO,CAAC,EAAE;IACd,SAAS,EAAE,OAAO,CAAC,SAAS;IAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;IAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;IAC9B,QAAQ,EAAE,OAAO,CAAC,QAAQ;IAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;CACnB,CAAC,CAAA;AAEF,MAAM,WAAW,GAAG,CAAC,CAAiB,EAAE,CAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;AAE/G;;;;GAIG;AACH,MAAM,OAAO,GAAG,CAAC,MAAoB,EAAE,KAAiB,EAAmD,EAAE,CAC3G,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CACrC,CAAC,QAAQ,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;KACzE,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KACxD,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CACnF,CAAA;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAChC,KAAmB,EACnB,KAAiB,EACjB,SAAiB,EACjB,EAAE,QAAQ,GAAG,gBAAgB,EAAE,KAAK,GAAG,aAAa,EAAE,KAAK,EAAE,GAAmB,EAAE,EAC1D,EAAE;IAC1B,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,EAAE,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;IACnG,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAA;IAC/E,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,QAAQ,CAAC,WAAW,EAAE,aAAa,KAAK,CAAC,EAAE,eAAe,CAAC,CAAA;IAClF,MAAM,MAAM,GAAG,CAAC,OAAuB,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,CAAA;IAEzG,MAAM,MAAM,GAAiB,EAAE,CAAA;IAC/B,MAAM,OAAO,GAA6B,EAAE,CAAA;IAC5C,MAAM,MAAM,GAAqB,EAAE,CAAA;IACnC,MAAM,MAAM,GAAqB,EAAE,CAAA;IACnC,MAAM,QAAQ,GAAqB,EAAE,CAAA;IACrC,IAAI,GAAG,GAAG,KAAK,CAAA;IACf,KAAK,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;QACvD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAA;QACrD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;QACjH,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,MAAM,KAAK,CAAC,gBAAgB,CAC7C,GAAG,EACH,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAC7B,EAAE,CAAC;YACF,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU;gBAAE,SAAQ;YACvC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,CAAA;YACxD,OAAO,CAAC,IAAI,CAAC;gBACX,GAAG,GAAG;gBACN,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI;gBAC1B,MAAM,EAAE,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;aAC7D,CAAC,CAAA;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAA;QAC3D,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE;gBAChD,KAAK,EAAE,QAAQ;gBACf,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;aACzE,CAAC,CAAA;YACF,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAClF,GAAG,KAAK,IAAI,CAAC,OAAO,CAAA;QACtB,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC3F,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;QACrG,GAAG,KAAK,OAAO,CAAC,OAAO,CAAA;QACvB,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAA;QACrG,QAAQ,CAAC,IAAI,CACX,GAAG,KAAK,CAAC,KAAK;aACX,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,EAAE,CAAC;aAC7C,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC;aACxD,MAAM,CAAC,MAAM,CAAC,CAClB,CAAA;QACD,GAAG,KAAK,KAAK,CAAC,OAAO,CAAA;IACvB,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACxB,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACxB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IAC1B,MAAM,QAAQ,GAAG,IAAI,GAAG,CACtB,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAChG,CAAA;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAChG,MAAM,KAAK,GAAG;QACZ,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;QACjC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;QACjC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;KACtC,CAAA;IACD,GAAG,KAAK,MAAM,CAAC,MAAM,GAAG,QAAQ,IAAI,MAAM,CAAC,MAAM,GAAG,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAA;IAC1F,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAEtC,OAAO;QACL,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE;QAC7D,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;QACpG,IAAI,EAAE;YACJ,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI;YAC7D,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI,IAAI;YACnE,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI;SACpC;QACD,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;QACpD,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,MAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;QAC3B,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG;QACxB,QAAQ,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC;QAC9B,OAAO;KACR,CAAA;AACH,CAAC,CAAA;AAED,uGAAuG;AACvG,MAAM,WAAW,GAAG,CAAC,KAAiE,EAAE,KAAa,EAAE,EAAE;IACvG,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,IAAI,GAAG,GAAG,KAAK,CAAA;IACf,MAAM,IAAI,GAAG,CAAC,KAAuB,EAAE,EAAE,CACvC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACpB,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAA;QAC5D,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC;YAC/B,GAAG,GAAG,IAAI,CAAA;YACV,OAAO,KAAK,CAAA;QACd,CAAC;QACD,IAAI,IAAI,IAAI,CAAA;QACZ,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;IACJ,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAA;AACxG,CAAC,CAAA;AAED,yGAAyG;AACzG,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,KAAmB,EAAE,KAAiB,EAAE,SAAiB,EAAwB,EAAE;IAClH,MAAM,QAAQ,GAAG,0BAA0B,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAA;IAClE,MAAM,QAAQ,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAA;IAChD,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,CAAA;IACxC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAC1G,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,EAAE,CAAA;AACvD,CAAC,CAAA"}
1
+ {"version":3,"file":"person-context.js","sourceRoot":"","sources":["../../src/services/person-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { PersonProfile } from "../domain/models.js";
2
+ import { type ServiceDeps } from "./deps.js";
3
+ /**
4
+ * The person as the messenger describes them, and their stored activity in every chat shared with
5
+ * them. Online, one profile read; `--offline`, or a messenger that cannot describe a person, what
6
+ * the store has seen of them. Counts always come from the store, so they are a floor unless the
7
+ * chat is stored whole.
8
+ */
9
+ export declare const personProfile: (deps: ServiceDeps, person: string) => Promise<PersonProfile>;
10
+ //# sourceMappingURL=person-profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"person-profile.d.ts","sourceRoot":"","sources":["../../src/services/person-profile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAM,aAAa,EAAoC,MAAM,qBAAqB,CAAA;AAG9F,OAAO,EAAE,KAAK,WAAW,EAAe,MAAM,WAAW,CAAA;AAEzD;;;;;GAKG;AACH,eAAO,MAAM,aAAa,SAAgB,WAAW,UAAU,MAAM,KAAG,OAAO,CAAC,aAAa,CAO5F,CAAA"}
@@ -0,0 +1,64 @@
1
+ import { pickPerson } from "../resolve.js";
2
+ import { storeIfOpen } from "./deps.js";
3
+ /**
4
+ * The person as the messenger describes them, and their stored activity in every chat shared with
5
+ * them. Online, one profile read; `--offline`, or a messenger that cannot describe a person, what
6
+ * the store has seen of them. Counts always come from the store, so they are a floor unless the
7
+ * chat is stored whole.
8
+ */
9
+ export const personProfile = async (deps, person) => {
10
+ const online = deps.offline ? undefined : await deps.connection();
11
+ const held = await storeIfOpen(deps);
12
+ const facts = online?.profile
13
+ ? await online.profile(person)
14
+ : await storedFacts(held ?? { store: await deps.store(), account: await deps.account() }, person);
15
+ return { ...facts, chats: held ? await activityIn(held.store, held.account, facts) : quiet(facts) };
16
+ };
17
+ const storedFacts = async ({ store, account }, person) => {
18
+ const found = pickPerson(person, await store.people(account.provider, { account: account.account }));
19
+ const chats = await store.chatsWith(account, found.id);
20
+ return {
21
+ id: found.id,
22
+ name: found.name,
23
+ usernames: found.username ? [found.username] : [],
24
+ bio: found.description,
25
+ flags: {},
26
+ chats: chats.map(({ id, title, kind, lastMessageAt }) => ({ id, title, kind, lastMessageAt })),
27
+ };
28
+ };
29
+ /** The chats the messenger lists, then any other chat the store holds their messages in. */
30
+ const activityIn = async (store, account, facts) => {
31
+ const stats = new Map((await store.senderStats(account, facts.id)).map((one) => [one.chatId, one]));
32
+ const listed = new Set(facts.chats.map(({ id }) => id));
33
+ const chats = [
34
+ ...facts.chats,
35
+ ...[...stats.values()]
36
+ .filter(({ chatId }) => !listed.has(chatId))
37
+ .map(({ chatId, title, kind, lastAt }) => ({ id: chatId, title, kind, lastMessageAt: lastAt })),
38
+ ];
39
+ const whole = new Set((await store.chatCompleteness(account, chats.map(({ id }) => id)))
40
+ .filter(({ state }) => state === "complete")
41
+ .map(({ chatId }) => chatId));
42
+ return chats.map(({ id, title, kind }) => {
43
+ const one = stats.get(id);
44
+ return {
45
+ id,
46
+ title,
47
+ kind,
48
+ theirMessages: one?.messages ?? 0,
49
+ firstAt: one?.firstAt ?? null,
50
+ lastAt: one?.lastAt ?? null,
51
+ complete: whole.has(id),
52
+ };
53
+ });
54
+ };
55
+ const quiet = (facts) => facts.chats.map(({ id, title, kind }) => ({
56
+ id,
57
+ title,
58
+ kind,
59
+ theirMessages: 0,
60
+ firstAt: null,
61
+ lastAt: null,
62
+ complete: false,
63
+ }));
64
+ //# sourceMappingURL=person-profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"person-profile.js","sourceRoot":"","sources":["../../src/services/person-profile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { Id, Message } from "../domain/models.js";
2
+ /**
3
+ * Questions from others still waiting, as max-cli counts them. A question is a message with `?` in
4
+ * it, or a reply to the owner or an admin. It is answered when one of them replied to it, or was the
5
+ * next to speak after the person who asked — "the next to speak" rather than "spoke later", because
6
+ * in a busy group an admin answering somebody else says nothing about this question.
7
+ */
8
+ export declare const unanswered: (messages: Message[], { answerers, before }: {
9
+ answerers: ReadonlySet<Id>;
10
+ before: number;
11
+ }) => Message[];
12
+ /** Every question from others, as `unanswered` reads them, with the message that answered it, if one did. */
13
+ export declare const questions: (messages: Message[], { answerers }: {
14
+ answerers: ReadonlySet<Id>;
15
+ }) => {
16
+ question: Message;
17
+ answer?: Message;
18
+ }[];
19
+ //# sourceMappingURL=questions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"questions.d.ts","sourceRoot":"","sources":["../../src/services/questions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAKtD;;;;;GAKG;AACH,eAAO,MAAM,UAAU,aACX,OAAO,EAAE,yBACI;IAAE,SAAS,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,KACpE,OAAO,EAG0B,CAAA;AAEpC,6GAA6G;AAC7G,eAAO,MAAM,SAAS,aACV,OAAO,EAAE,iBACJ;IAAE,SAAS,EAAE,WAAW,CAAC,EAAE,CAAC,CAAA;CAAE,KAC5C;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,EA2BzC,CAAA"}
@@ -0,0 +1,39 @@
1
+ /** A shared link's query string is not a question. */
2
+ const LINKS = /https?:\/\/\S+/g;
3
+ /**
4
+ * Questions from others still waiting, as max-cli counts them. A question is a message with `?` in
5
+ * it, or a reply to the owner or an admin. It is answered when one of them replied to it, or was the
6
+ * next to speak after the person who asked — "the next to speak" rather than "spoke later", because
7
+ * in a busy group an admin answering somebody else says nothing about this question.
8
+ */
9
+ export const unanswered = (messages, { answerers, before }) => questions(messages, { answerers })
10
+ .filter(({ question, answer }) => answer === undefined && Date.parse(question.timestamp) < before)
11
+ .map(({ question }) => question);
12
+ /** Every question from others, as `unanswered` reads them, with the message that answered it, if one did. */
13
+ export const questions = (messages, { answerers }) => {
14
+ const answers = (message) => message.outgoing === true || (message.senderId !== null && answerers.has(message.senderId));
15
+ const byId = new Map(messages.map((message) => [message.id, message]));
16
+ // Telegram names only the id a reply answers; the message itself is found in the window, or not at all.
17
+ const repliesToAnswerer = (message) => {
18
+ const to = message.replyTo?.id ?? message.replyToId;
19
+ const quoted = to === undefined ? undefined : byId.get(to);
20
+ if (quoted)
21
+ return answers(quoted);
22
+ return (message.replyTo !== null && (message.replyTo.outgoing === true || answerers.has(message.replyTo.senderId ?? "")));
23
+ };
24
+ return messages.flatMap((message, index) => {
25
+ if (answers(message))
26
+ return [];
27
+ const transcript = "transcript" in message && typeof message.transcript === "string" ? message.transcript : "";
28
+ if (![message.text, transcript].join("\n").replace(LINKS, "").includes("?") && !repliesToAnswerer(message))
29
+ return [];
30
+ const later = messages.slice(index + 1);
31
+ const reply = later.find((one) => (one.replyTo?.id ?? one.replyToId) === message.id && answers(one));
32
+ const next = later.find((other) => other.senderId !== message.senderId);
33
+ const answer = [reply, next && answers(next) ? next : undefined]
34
+ .filter((one) => one !== undefined)
35
+ .sort((a, b) => Date.parse(a.timestamp) - Date.parse(b.timestamp))[0];
36
+ return [{ question: message, ...(answer ? { answer } : {}) }];
37
+ });
38
+ };
39
+ //# sourceMappingURL=questions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"questions.js","sourceRoot":"","sources":["../../src/services/questions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { type TaskStore } from "@leemour/cli-tasks";
2
+ import type { Message, ReviewChat } from "../domain/models.js";
3
+ import type { AccountKey, MessageStore } from "../store/store.js";
4
+ export interface RuleResult {
5
+ added: number;
6
+ closed: number;
7
+ }
8
+ export declare const taskAccount: ({ provider, account }: AccountKey) => string;
9
+ /**
10
+ * Opens a task for each question nobody answered and each message that mentions the owner, and closes
11
+ * one when the owner answered it — over every message a review read, before `--unanswered` narrows it.
12
+ * Run twice over the same window it changes nothing: the service returns the task a source already has.
13
+ * Only the owner's answers count: the store knows no admins, and a review without `--unanswered` asks
14
+ * for none. A mention is one the messenger marks by id; an `@handle` is not seen.
15
+ */
16
+ export declare const applyTaskRules: (review: {
17
+ chats: Pick<ReviewChat, "id" | "messages">[];
18
+ }, { store, account, now }: {
19
+ store: TaskStore;
20
+ account: AccountKey;
21
+ now?: () => Date;
22
+ }) => Promise<RuleResult>;
23
+ /** How far back `serve` looks when a message arrives: enough to see whether it answers a recent question. */
24
+ export declare const ARRIVAL_WINDOW = 50;
25
+ /** `serve`'s rule pass: the new message with the chat's stored messages before it, as a review would read them. */
26
+ export declare const applyTaskRulesOnArrival: (store: MessageStore, account: AccountKey, message: Message) => Promise<RuleResult>;
27
+ //# sourceMappingURL=task-rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-rules.d.ts","sourceRoot":"","sources":["../../src/services/task-rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAErF,OAAO,KAAK,EAAM,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGjE,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,eAAO,MAAM,WAAW,0BAA2B,UAAU,KAAG,MAAkC,CAAA;AAElG;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,WACjB;IAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,UAAU,CAAC,EAAE,CAAA;CAAE,2BAC/B;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,UAAU,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,KACnF,OAAO,CAAC,UAAU,CAsCpB,CAAA;AAED,6GAA6G;AAC7G,eAAO,MAAM,cAAc,KAAK,CAAA;AAEhC,mHAAmH;AACnH,eAAO,MAAM,uBAAuB,UAC3B,YAAY,WACV,UAAU,WACV,OAAO,KACf,OAAO,CAAC,UAAU,CAMpB,CAAA"}
@@ -0,0 +1,79 @@
1
+ import { createTaskService } from "@leemour/cli-tasks";
2
+ import { formatLocator } from "../domain/locator.js";
3
+ import { questions } from "./questions.js";
4
+ export const taskAccount = ({ provider, account }) => `${provider}:${account}`;
5
+ /**
6
+ * Opens a task for each question nobody answered and each message that mentions the owner, and closes
7
+ * one when the owner answered it — over every message a review read, before `--unanswered` narrows it.
8
+ * Run twice over the same window it changes nothing: the service returns the task a source already has.
9
+ * Only the owner's answers count: the store knows no admins, and a review without `--unanswered` asks
10
+ * for none. A mention is one the messenger marks by id; an `@handle` is not seen.
11
+ */
12
+ export const applyTaskRules = async (review, { store, account, now }) => {
13
+ const tasks = createTaskService({ store, ...(now ? { now } : {}) });
14
+ const owner = taskAccount(account);
15
+ const result = { added: 0, closed: 0 };
16
+ const sourceOf = (message) => formatLocator({ provider: account.provider, account: account.account, chat: message.chatId, message: message.id });
17
+ const open = async (message, group, kind) => {
18
+ const { created } = await tasks.add({
19
+ source: sourceOf(message),
20
+ sourceKind: "message",
21
+ account: owner,
22
+ group,
23
+ kind,
24
+ origin: "rule",
25
+ });
26
+ if (created)
27
+ result.added += 1;
28
+ };
29
+ const close = async (message, kind) => {
30
+ for (const task of await store.findBySource(owner, sourceOf(message))) {
31
+ if (task.kind !== kind || task.state !== "open")
32
+ continue;
33
+ await tasks.close(task.id, { as: "done", by: "rule" });
34
+ result.closed += 1;
35
+ }
36
+ };
37
+ for (const chat of review.chats) {
38
+ for (const { question, answer } of questions(chat.messages, { answerers: new Set() })) {
39
+ if (answer)
40
+ await close(question, "question");
41
+ else
42
+ await open(question, chat.id, "question");
43
+ }
44
+ for (const [index, message] of chat.messages.entries()) {
45
+ if (message.outgoing || !message.mentions?.includes(account.account))
46
+ continue;
47
+ if (ownerAnswered(chat.messages, index))
48
+ await close(message, "mention");
49
+ else
50
+ await open(message, chat.id, "mention");
51
+ }
52
+ }
53
+ return result;
54
+ };
55
+ /** How far back `serve` looks when a message arrives: enough to see whether it answers a recent question. */
56
+ export const ARRIVAL_WINDOW = 50;
57
+ /** `serve`'s rule pass: the new message with the chat's stored messages before it, as a review would read them. */
58
+ export const applyTaskRulesOnArrival = async (store, account, message) => {
59
+ const page = await store.messages(account, message.chatId, { limit: ARRIVAL_WINDOW });
60
+ const messages = [...page.items.filter((one) => one.id !== message.id), message].sort((a, b) => Date.parse(a.timestamp) - Date.parse(b.timestamp));
61
+ return applyTaskRules({ chats: [{ id: message.chatId, messages }] }, { store: store.tasks, account });
62
+ };
63
+ /** The owner replied to the message, or to anything its sender said, later in the chat. */
64
+ const ownerAnswered = (messages, index) => {
65
+ const message = messages[index];
66
+ if (!message)
67
+ return false;
68
+ const senders = new Map(messages.map((one) => [one.id, one.senderId]));
69
+ return messages.slice(index + 1).some((one) => {
70
+ if (one.outgoing !== true)
71
+ return false;
72
+ const to = one.replyTo?.id ?? one.replyToId;
73
+ if (to === message.id)
74
+ return true;
75
+ const repliedSender = one.replyTo?.senderId ?? (to === undefined ? undefined : senders.get(to));
76
+ return repliedSender != null && repliedSender === message.senderId;
77
+ });
78
+ };
79
+ //# sourceMappingURL=task-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-rules.js","sourceRoot":"","sources":["../../src/services/task-rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAiC,MAAM,oBAAoB,CAAA;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAGpD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAO1C,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAc,EAAU,EAAE,CAAC,GAAG,QAAQ,IAAI,OAAO,EAAE,CAAA;AAElG;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EACjC,MAAwD,EACxD,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAA+D,EAC/D,EAAE;IACvB,MAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IACnE,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;IAClC,MAAM,MAAM,GAAe,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAA;IAClD,MAAM,QAAQ,GAAG,CAAC,OAAgB,EAAE,EAAE,CACpC,aAAa,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAA;IAEpH,MAAM,IAAI,GAAG,KAAK,EAAE,OAAgB,EAAE,KAAS,EAAE,IAAc,EAAE,EAAE;QACjE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC;YAClC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC;YACzB,UAAU,EAAE,SAAS;YACrB,OAAO,EAAE,KAAK;YACd,KAAK;YACL,IAAI;YACJ,MAAM,EAAE,MAAM;SACf,CAAC,CAAA;QACF,IAAI,OAAO;YAAE,MAAM,CAAC,KAAK,IAAI,CAAC,CAAA;IAChC,CAAC,CAAA;IACD,MAAM,KAAK,GAAG,KAAK,EAAE,OAAgB,EAAE,IAAc,EAAE,EAAE;QACvD,KAAK,MAAM,IAAI,IAAI,MAAM,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YACtE,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;gBAAE,SAAQ;YACzD,MAAM,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;YACtD,MAAM,CAAC,MAAM,IAAI,CAAC,CAAA;QACpB,CAAC;IACH,CAAC,CAAA;IAED,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,KAAK,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;YACtF,IAAI,MAAM;gBAAE,MAAM,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;;gBACxC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;QAChD,CAAC;QACD,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YACvD,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;gBAAE,SAAQ;YAC9E,IAAI,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;gBAAE,MAAM,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;;gBACnE,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,6GAA6G;AAC7G,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAA;AAEhC,mHAAmH;AACnH,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,EAC1C,KAAmB,EACnB,OAAmB,EACnB,OAAgB,EACK,EAAE;IACvB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAA;IACrF,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CACnF,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAC5D,CAAA;IACD,OAAO,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;AACvG,CAAC,CAAA;AAED,2FAA2F;AAC3F,MAAM,aAAa,GAAG,CAAC,QAAmB,EAAE,KAAa,EAAW,EAAE;IACpE,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC/B,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAA;IAC1B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IACtE,OAAO,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;QAC5C,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI;YAAE,OAAO,KAAK,CAAA;QACvC,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,EAAE,IAAI,GAAG,CAAC,SAAS,CAAA;QAC3C,IAAI,EAAE,KAAK,OAAO,CAAC,EAAE;YAAE,OAAO,IAAI,CAAA;QAClC,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,EAAE,QAAQ,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;QAC/F,OAAO,aAAa,IAAI,IAAI,IAAI,aAAa,KAAK,OAAO,CAAC,QAAQ,CAAA;IACpE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/store/sqlite/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAGjD;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE;AAC1D,yFAAyF;GACvF;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,oBAAoB,EAAE,IAAI,CAAA;CAAE,CAAA;AAEhD,eAAO,MAAM,QAAQ,EAAE,aAAa,EAsBnC,CAAA;AAED,eAAO,MAAM,mBAAmB,cACpB,aAAa,EAAE,cACd;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,EAAE,KAClD,SAAS,EAgBX,CAAA"}
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/store/sqlite/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAGjD;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE;AAC1D,yFAAyF;GACvF;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,oBAAoB,EAAE,IAAI,CAAA;CAAE,CAAA;AAEhD,eAAO,MAAM,QAAQ,EAAE,aAAa,EAuBnC,CAAA;AAED,eAAO,MAAM,mBAAmB,cACpB,aAAa,EAAE,cACd;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,EAAE,KAClD,SAAS,EAgBX,CAAA"}
@@ -21,6 +21,7 @@ export const MANIFEST = [
21
21
  { name: "20261004215824_version-18-member-history", version: 18, minCompatible: 6 },
22
22
  { name: "20261005142356_version-19-attachment-texts", version: 19, minCompatible: 6 },
23
23
  { name: "20261005142357_version-19-attachment-words", version: 19, minCompatible: 6 },
24
+ { name: "20261005215529_version-20-tasks", version: 20, minCompatible: 6 },
24
25
  ];
25
26
  export const generatedMigrations = (manifest = MANIFEST, generated = GENERATED) => {
26
27
  const migrations = [];
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/store/sqlite/manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/store/sqlite/manifest.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"migrations.generated.d.ts","sourceRoot":"","sources":["../../../src/store/sqlite/migrations.generated.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,SAAS,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,EA+L7D,CAAA"}
1
+ {"version":3,"file":"migrations.generated.d.ts","sourceRoot":"","sources":["../../../src/store/sqlite/migrations.generated.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,SAAS,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,EAuM7D,CAAA"}
@@ -189,6 +189,14 @@ export const GENERATED = [
189
189
  "CREATE TRIGGER attachment_texts_message_ad AFTER DELETE ON messages BEGIN\n DELETE FROM attachment_texts WHERE attachment_pk IN (SELECT pk FROM attachments WHERE message_pk = old.pk);\nEND;",
190
190
  "CREATE TRIGGER attachment_texts_attachment_ad AFTER DELETE ON attachments BEGIN\n DELETE FROM attachment_texts WHERE attachment_pk = old.pk;\nEND;"
191
191
  ]
192
+ },
193
+ {
194
+ "name": "20261005215529_version-20-tasks",
195
+ "statements": [
196
+ "CREATE TABLE `tasks` (\n\t`id` text PRIMARY KEY,\n\t`source` text NOT NULL,\n\t`source_kind` text NOT NULL,\n\t`account` text NOT NULL,\n\t`group_key` text NOT NULL,\n\t`kind` text NOT NULL,\n\t`state` text NOT NULL,\n\t`reason` text,\n\t`origin` text NOT NULL,\n\t`created_at` integer NOT NULL,\n\t`due_at` integer,\n\t`closed_at` integer,\n\t`closed_by` text\n);",
197
+ "CREATE INDEX `tasks_by_source` ON `tasks` (`account`,`source`);",
198
+ "CREATE INDEX `tasks_by_state` ON `tasks` (`account`,`state`,`group_key`);"
199
+ ]
192
200
  }
193
201
  ];
194
202
  //# sourceMappingURL=migrations.generated.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"migrations.generated.js","sourceRoot":"","sources":["../../../src/store/sqlite/migrations.generated.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migrations.generated.js","sourceRoot":"","sources":["../../../src/store/sqlite/migrations.generated.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { Id, Message, Page, WindowedMessage } from "../../domain/models.js";
2
- import type { ChatStats } from "../store.js";
2
+ import type { ChatStats, SenderChatStats } from "../store.js";
3
3
  import { type SQL } from "./drizzle/core.js";
4
4
  import type { StoreContext } from "./open.js";
5
5
  /**
@@ -808,4 +808,6 @@ export declare const around: (context: StoreContext, chatKey: number | undefined
808
808
  }) => WindowedMessage[];
809
809
  export declare const message: (context: StoreContext, accountKey: number, messageId: Id, chatId: Id | undefined) => Message | undefined;
810
810
  export declare const chatStats: ({ orm }: StoreContext, accountKey: number, chatId: Id | undefined) => ChatStats[];
811
+ /** One sender's stored messages per chat — count, first and last — in one grouped read. */
812
+ export declare const senderStats: ({ orm }: StoreContext, accountKey: number, provider: string, senderId: Id) => SenderChatStats[];
811
813
  //# sourceMappingURL=reads.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reads.d.ts","sourceRoot":"","sources":["../../../src/store/sqlite/reads.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reads.d.ts","sourceRoot":"","sources":["../../../src/store/sqlite/reads.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAwB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACtG,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7D,OAAO,EAAyD,KAAK,GAAG,EAAO,MAAM,mBAAmB,CAAA;AACxG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAI7C;;;GAGG;AACH,eAAO,MAAM,cAAc;IACzB,EAAE;;;;;;;;;;;;;;;;IACF,QAAQ;;;;;;;;;;;;;;;;IACR,YAAY;IACZ,cAAc;IACd,kBAAkB;;;;;;;;;;;;;;;;IAClB,UAAU;;;;;;;;;;;;;;;;IACV,MAAM;;;;;;;;;;;;;;;;IACN,QAAQ;;;;;;;;;;;;;;;;IACR,IAAI;;;;;;;;;;;;;;;;IACJ,QAAQ;;;;;;;;;;;;;;;;IACR,OAAO;;;;;;;;;;;;;;;;IACP,eAAe;;;;;;;;;;;;;;;;IACf,OAAO;;;;;;;;;;;;;;;;IACP,cAAc;;;;;;;;;;;;;;;;IACd,SAAS;;;;;;;;;;;;;;;;IACT,gBAAgB;;;;;;;;;;;;;;;;IAChB,QAAQ;;;;;;;;;;;;;;;;CACT,CAAA;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB;AAED,eAAO,MAAM,cAAc,YAAa,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAKmB,CAAA;AAEvE,eAAO,MAAM,WAAW,gBAA6C,CAAA;AAErE,eAAO,MAAM,MAAM,WAAY,MAAM,MAAM,MAAM,iBAAmE,CAAA;AAOpH,eAAO,MAAM,UAAU,YAAa,YAAY,QAAQ,UAAU,EAAE,KAAG,OAAO,EAiB7E,CAAA;AAED,eAAO,MAAM,aAAa,YAAa,YAAY,WAAW,MAAM,SAAS,MAAM,GAAG,SAAS,KAAG,MAO/F,CAAA;AAEH;;;;;GAKG;AACH,eAAO,MAAM,YAAY,YACd,YAAY,WACZ,MAAM,MACX,MAAM,KACT;IAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAAC,OAAO,EAAE,EAAE,EAAE,CAAA;CAgBtC,CAAA;AAED,eAAO,MAAM,cAAc,YAChB,YAAY,WACZ,MAAM,yCACwB;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,KACnF,OAAO,EAaT,CAAA;AAED,eAAO,MAAM,WAAW,YACb,YAAY,WACZ,MAAM,sCACqB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,KACjF,IAAI,CAAC,OAAO,CAwBd,CAAA;AAED,eAAO,MAAM,MAAM,YACR,YAAY,WACZ,MAAM,GAAG,SAAS,aAChB,EAAE,qCACsB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,KACnE,eAAe,EAsBjB,CAAA;AAED,eAAO,MAAM,OAAO,YACT,YAAY,cACT,MAAM,aACP,EAAE,UACL,EAAE,GAAG,SAAS,KACrB,OAAO,GAAG,SAgBZ,CAAA;AAED,eAAO,MAAM,SAAS,YAAa,YAAY,cAAc,MAAM,UAAU,EAAE,GAAG,SAAS,KAAG,SAAS,EAyBtG,CAAA;AAED,2FAA2F;AAC3F,eAAO,MAAM,WAAW,YACb,YAAY,cACT,MAAM,YACR,MAAM,YACN,EAAE,KACX,eAAe,EAiCjB,CAAA"}
@@ -163,6 +163,34 @@ export const chatStats = ({ orm }, accountKey, chatId) => {
163
163
  lastStoredAt: toIso(row.stored),
164
164
  }));
165
165
  };
166
+ /** One sender's stored messages per chat — count, first and last — in one grouped read. */
167
+ export const senderStats = ({ orm }, accountKey, provider, senderId) => {
168
+ const newest = sql `max(${messages.sentAt})`;
169
+ return orm
170
+ .select({
171
+ chatId: chats.nativeId,
172
+ title: chats.title,
173
+ kind: chats.kind,
174
+ messages: sql `count(${messages.pk})`,
175
+ oldest: sql `min(${messages.sentAt})`,
176
+ newest,
177
+ })
178
+ .from(messages)
179
+ .innerJoin(chats, eq(chats.pk, messages.chatPk))
180
+ .innerJoin(identities, eq(identities.pk, messages.senderIdentityPk))
181
+ .where(and(eq(chats.accountPk, accountKey), isNull(messages.deletedAt), eq(identities.provider, provider), eq(identities.nativeId, senderId)))
182
+ .groupBy(chats.pk)
183
+ .orderBy(desc(newest))
184
+ .all()
185
+ .map((row) => ({
186
+ chatId: row.chatId,
187
+ title: row.title,
188
+ kind: row.kind,
189
+ messages: Number(row.messages),
190
+ firstAt: toIso(row.oldest),
191
+ lastAt: toIso(row.newest),
192
+ }));
193
+ };
166
194
  const toAttachment = (row) => ({
167
195
  kind: row.kind,
168
196
  ...present({