@leemour/cli-messaging 0.76.0 → 0.77.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 (76) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/app.d.ts +2 -0
  3. package/dist/cli/app.d.ts.map +1 -1
  4. package/dist/cli/app.js.map +1 -1
  5. package/dist/cli/messenger/archive-commands.js +1 -0
  6. package/dist/cli/messenger/archive-commands.js.map +1 -1
  7. package/dist/cli/messenger/guard-commands.js +2 -2
  8. package/dist/cli/messenger/guard-commands.js.map +1 -1
  9. package/dist/cli/messenger/inbox.d.ts.map +1 -1
  10. package/dist/cli/messenger/inbox.js +3 -1
  11. package/dist/cli/messenger/inbox.js.map +1 -1
  12. package/dist/cli/messenger/mcp-command.d.ts +3 -1
  13. package/dist/cli/messenger/mcp-command.d.ts.map +1 -1
  14. package/dist/cli/messenger/mcp-command.js +29 -19
  15. package/dist/cli/messenger/mcp-command.js.map +1 -1
  16. package/dist/cli/messenger/messages-command.d.ts.map +1 -1
  17. package/dist/cli/messenger/messages-command.js +6 -2
  18. package/dist/cli/messenger/messages-command.js.map +1 -1
  19. package/dist/cli/messenger/messages-scheduled-command.d.ts.map +1 -1
  20. package/dist/cli/messenger/messages-scheduled-command.js +1 -0
  21. package/dist/cli/messenger/messages-scheduled-command.js.map +1 -1
  22. package/dist/cli/messenger/review.d.ts.map +1 -1
  23. package/dist/cli/messenger/review.js +1 -0
  24. package/dist/cli/messenger/review.js.map +1 -1
  25. package/dist/cli/messenger/watch-command.d.ts.map +1 -1
  26. package/dist/cli/messenger/watch-command.js +1 -0
  27. package/dist/cli/messenger/watch-command.js.map +1 -1
  28. package/dist/cli/paging.d.ts +3 -1
  29. package/dist/cli/paging.d.ts.map +1 -1
  30. package/dist/cli/paging.js +9 -2
  31. package/dist/cli/paging.js.map +1 -1
  32. package/dist/cli/runs/command.js +2 -2
  33. package/dist/cli/runs/command.js.map +1 -1
  34. package/dist/mcp/instructions.d.ts +3 -6
  35. package/dist/mcp/instructions.d.ts.map +1 -1
  36. package/dist/mcp/instructions.js +10 -12
  37. package/dist/mcp/instructions.js.map +1 -1
  38. package/dist/mcp/server.d.ts +6 -4
  39. package/dist/mcp/server.d.ts.map +1 -1
  40. package/dist/mcp/server.js +41 -26
  41. package/dist/mcp/server.js.map +1 -1
  42. package/dist/mcp/tool.d.ts +9 -3
  43. package/dist/mcp/tool.d.ts.map +1 -1
  44. package/dist/mcp/tool.js +5 -2
  45. package/dist/mcp/tool.js.map +1 -1
  46. package/dist/mcp/tools/chats-read.d.ts.map +1 -1
  47. package/dist/mcp/tools/chats-read.js +1 -0
  48. package/dist/mcp/tools/chats-read.js.map +1 -1
  49. package/dist/render/messages.d.ts +1 -1
  50. package/dist/render/messages.d.ts.map +1 -1
  51. package/dist/render/messages.js +10 -8
  52. package/dist/render/messages.js.map +1 -1
  53. package/dist/store/sqlite/drizzle/bun.js +1 -1
  54. package/dist/store/sqlite/drizzle/core.d.ts +2 -2
  55. package/dist/store/sqlite/drizzle/core.d.ts.map +1 -1
  56. package/dist/store/sqlite/drizzle/core.js +12 -1
  57. package/dist/store/sqlite/drizzle/core.js.map +4 -4
  58. package/dist/store/sqlite/drizzle/node.js +1 -1
  59. package/dist/store/sqlite/drizzle/{shared-CH747VCJ.js → shared-JAIU3GYB.js} +4 -1
  60. package/dist/store/sqlite/messages.d.ts +1 -0
  61. package/dist/store/sqlite/messages.d.ts.map +1 -1
  62. package/dist/store/sqlite/messages.js +40 -2
  63. package/dist/store/sqlite/messages.js.map +1 -1
  64. package/dist/store/sqlite/reads.d.ts +751 -0
  65. package/dist/store/sqlite/reads.d.ts.map +1 -0
  66. package/dist/store/sqlite/reads.js +177 -0
  67. package/dist/store/sqlite/reads.js.map +1 -0
  68. package/dist/store/sqlite/search.d.ts +496 -0
  69. package/dist/store/sqlite/search.d.ts.map +1 -0
  70. package/dist/store/sqlite/search.js +131 -0
  71. package/dist/store/sqlite/search.js.map +1 -0
  72. package/dist/store/store.d.ts.map +1 -1
  73. package/dist/store/store.js +20 -271
  74. package/dist/store/store.js.map +1 -1
  75. package/package.json +1 -1
  76. /package/dist/store/sqlite/drizzle/{shared-CH747VCJ.js.map → shared-JAIU3GYB.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reads.d.ts","sourceRoot":"","sources":["../../../src/store/sqlite/reads.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,177 @@
1
+ import { CliError } from "@leemour/cli-core";
2
+ import { and, asc, desc, eq, gt, gte, inArray, isNull, lte, sql } from "./drizzle/core.js";
3
+ import { attachments, chats, identities, messages } from "./schema.js";
4
+ import { parsed, present, toIso, toMs } from "./values.js";
5
+ /**
6
+ * One flat row for every read, aliased where tables share a column name, so the same mapper serves
7
+ * a plain select and a subquery (`find` per chat).
8
+ */
9
+ export const MESSAGE_FIELDS = {
10
+ pk: messages.pk,
11
+ nativeId: messages.nativeId,
12
+ chatNativeId: sql `${chats.nativeId}`.as("chat_native_id"),
13
+ senderNativeId: sql `${identities.nativeId}`.as("sender_native_id"),
14
+ senderChatNativeId: messages.senderChatNativeId,
15
+ senderName: messages.senderName,
16
+ sentAt: messages.sentAt,
17
+ editedAt: messages.editedAt,
18
+ text: messages.text,
19
+ outgoing: messages.outgoing,
20
+ replyTo: messages.replyTo,
21
+ replyToNativeId: messages.replyToNativeId,
22
+ forward: messages.forward,
23
+ threadNativeId: messages.threadNativeId,
24
+ reactions: messages.reactions,
25
+ providerMetadata: messages.providerMetadata,
26
+ };
27
+ export const selectMessages = ({ orm }) => orm
28
+ .select(MESSAGE_FIELDS)
29
+ .from(messages)
30
+ .innerJoin(chats, eq(chats.pk, messages.chatPk))
31
+ .leftJoin(identities, eq(identities.pk, messages.senderIdentityPk));
32
+ export const newestFirst = [desc(messages.sentAt), desc(messages.pk)];
33
+ export const before = (sentAt, pk) => sql `(${messages.sentAt}, ${messages.pk}) < (${sentAt}, ${pk})`;
34
+ const after = (sentAt, pk) => sql `(${messages.sentAt}, ${messages.pk}) > (${sentAt}, ${pk})`;
35
+ const live = (chatKey, ...conditions) => and(eq(messages.chatPk, chatKey), isNull(messages.deletedAt), ...conditions);
36
+ export const toMessages = ({ orm }, rows) => {
37
+ const byMessage = new Map();
38
+ if (rows.length > 0) {
39
+ const found = orm
40
+ .select()
41
+ .from(attachments)
42
+ .where(inArray(attachments.messagePk, rows.map((row) => row.pk)))
43
+ .orderBy(attachments.messagePk, attachments.position)
44
+ .all();
45
+ for (const row of found)
46
+ byMessage.set(row.messagePk, [...(byMessage.get(row.messagePk) ?? []), toAttachment(row)]);
47
+ }
48
+ return rows.map((row) => toMessage(row, byMessage.get(row.pk) ?? []));
49
+ };
50
+ export const countMessages = ({ orm }, chatKey, since) => Number(orm
51
+ .select({ n: sql `count(*)` })
52
+ .from(messages)
53
+ .where(live(chatKey, since === undefined ? undefined : gte(messages.sentAt, toMs(since))))
54
+ .get()?.n);
55
+ export const messagesWindow = (context, chatKey, { at, before: earlier, after: later }) => {
56
+ const moment = toMs(at);
57
+ const older = selectMessages(context)
58
+ .where(live(chatKey, lte(messages.sentAt, moment)))
59
+ .orderBy(...newestFirst)
60
+ .limit(earlier)
61
+ .all();
62
+ const newer = selectMessages(context)
63
+ .where(live(chatKey, gt(messages.sentAt, moment)))
64
+ .orderBy(asc(messages.sentAt), asc(messages.pk))
65
+ .limit(later)
66
+ .all();
67
+ return toMessages(context, [...older.reverse(), ...newer]);
68
+ };
69
+ export const messagePage = (context, chatKey, { limit, before: anchorId, since }) => {
70
+ const anchor = anchorId === undefined
71
+ ? undefined
72
+ : context.orm
73
+ .select({ sentAt: messages.sentAt, pk: messages.pk })
74
+ .from(messages)
75
+ .where(and(eq(messages.chatPk, chatKey), eq(messages.nativeId, anchorId)))
76
+ .get();
77
+ if (anchorId !== undefined && !anchor) {
78
+ throw new CliError("not_found", `message ${anchorId} is not in the local copy of this chat`);
79
+ }
80
+ const rows = selectMessages(context)
81
+ .where(live(chatKey, anchor ? before(anchor.sentAt, anchor.pk) : undefined, since === undefined ? undefined : gte(messages.sentAt, toMs(since))))
82
+ .orderBy(...newestFirst)
83
+ .limit(limit + 1)
84
+ .all();
85
+ return { items: toMessages(context, rows.slice(0, limit)).reverse(), hasMore: rows.length > limit };
86
+ };
87
+ export const around = (context, chatKey, messageId, { before: earlier, after: later }) => {
88
+ const anchor = chatKey === undefined
89
+ ? undefined
90
+ : selectMessages(context)
91
+ .where(live(chatKey, eq(messages.nativeId, messageId)))
92
+ .get();
93
+ if (chatKey === undefined || !anchor) {
94
+ throw new CliError("not_found", `message ${messageId} is not in the local copy of this chat`);
95
+ }
96
+ const side = (older, count) => count === 0
97
+ ? []
98
+ : selectMessages(context)
99
+ .where(live(chatKey, older ? before(anchor.sentAt, anchor.pk) : after(anchor.sentAt, anchor.pk)))
100
+ .orderBy(...(older ? newestFirst : [asc(messages.sentAt), asc(messages.pk)]))
101
+ .limit(count)
102
+ .all();
103
+ const rows = [...side(true, earlier).reverse(), anchor, ...side(false, later)];
104
+ return toMessages(context, rows).map((message, index) => rows[index]?.pk === anchor.pk ? { ...message, anchor: true } : message);
105
+ };
106
+ export const message = (context, accountKey, messageId, chatId) => {
107
+ const rows = selectMessages(context)
108
+ .where(and(eq(messages.accountPk, accountKey), eq(messages.nativeId, messageId), isNull(messages.deletedAt), chatId === undefined ? undefined : eq(chats.nativeId, chatId)))
109
+ .limit(2)
110
+ .all();
111
+ if (rows.length > 1) {
112
+ throw new CliError("validation_error", `message ${messageId} is in more than one chat — name the chat`);
113
+ }
114
+ return toMessages(context, rows)[0];
115
+ };
116
+ export const chatStats = ({ orm }, accountKey, chatId) => {
117
+ const newest = sql `max(${messages.sentAt})`;
118
+ return orm
119
+ .select({
120
+ chatId: chats.nativeId,
121
+ title: chats.title,
122
+ messages: sql `count(${messages.pk})`,
123
+ oldest: sql `min(${messages.sentAt})`,
124
+ newest,
125
+ stored: sql `max(${messages.ingestedAt})`,
126
+ })
127
+ .from(chats)
128
+ .innerJoin(messages, and(eq(messages.chatPk, chats.pk), isNull(messages.deletedAt)))
129
+ .where(and(eq(chats.accountPk, accountKey), chatId === undefined ? undefined : eq(chats.nativeId, chatId)))
130
+ .groupBy(chats.pk)
131
+ .orderBy(desc(newest))
132
+ .all()
133
+ .map((row) => ({
134
+ chatId: row.chatId,
135
+ title: row.title,
136
+ messages: Number(row.messages),
137
+ oldestAt: toIso(row.oldest),
138
+ newestAt: toIso(row.newest),
139
+ lastStoredAt: toIso(row.stored),
140
+ }));
141
+ };
142
+ const toAttachment = (row) => ({
143
+ kind: row.kind,
144
+ ...present({
145
+ url: row.url,
146
+ width: row.width,
147
+ height: row.height,
148
+ title: row.title,
149
+ name: row.name,
150
+ size: row.size,
151
+ mime: row.mime,
152
+ duration: row.duration,
153
+ providerRef: parsed(row.providerRef),
154
+ }),
155
+ });
156
+ const toMessage = (row, attachments) => {
157
+ const senderChat = row.senderChatNativeId;
158
+ return {
159
+ id: row.nativeId,
160
+ chatId: row.chatNativeId,
161
+ senderId: senderChat ?? row.senderNativeId ?? null,
162
+ senderName: row.senderName,
163
+ ...(senderChat ? { senderIsChat: true } : {}),
164
+ timestamp: toIso(row.sentAt),
165
+ editedAt: toIso(row.editedAt),
166
+ text: row.text,
167
+ outgoing: row.outgoing === null ? null : row.outgoing === 1,
168
+ attachments,
169
+ replyTo: parsed(row.replyTo) ?? null,
170
+ ...present({ replyToId: row.replyToNativeId }),
171
+ forwardedFrom: parsed(row.forward) ?? null,
172
+ ...present({ threadId: row.threadNativeId }),
173
+ reactions: parsed(row.reactions) ?? null,
174
+ ...present({ providerMetadata: parsed(row.providerMetadata) }),
175
+ };
176
+ };
177
+ //# sourceMappingURL=reads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reads.js","sourceRoot":"","sources":["../../../src/store/sqlite/reads.ts"],"names":[],"mappings":"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"}