@beeper/desktop-mcp 0.1.5 → 4.2.1

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 (227) hide show
  1. package/README.md +10 -14
  2. package/docs-search-tool.d.mts +44 -0
  3. package/docs-search-tool.d.mts.map +1 -0
  4. package/docs-search-tool.d.ts +44 -0
  5. package/docs-search-tool.d.ts.map +1 -0
  6. package/docs-search-tool.js +43 -0
  7. package/docs-search-tool.js.map +1 -0
  8. package/docs-search-tool.mjs +39 -0
  9. package/docs-search-tool.mjs.map +1 -0
  10. package/handlers/get-accounts.d.mts +3 -0
  11. package/handlers/get-accounts.d.mts.map +1 -0
  12. package/handlers/get-accounts.d.ts +3 -0
  13. package/handlers/get-accounts.d.ts.map +1 -0
  14. package/handlers/get-accounts.js +32 -0
  15. package/handlers/get-accounts.js.map +1 -0
  16. package/handlers/get-accounts.mjs +28 -0
  17. package/handlers/get-accounts.mjs.map +1 -0
  18. package/handlers/get-chat.d.mts +3 -0
  19. package/handlers/get-chat.d.mts.map +1 -0
  20. package/handlers/get-chat.d.ts +3 -0
  21. package/handlers/get-chat.d.ts.map +1 -0
  22. package/handlers/get-chat.js +20 -0
  23. package/handlers/get-chat.js.map +1 -0
  24. package/handlers/get-chat.mjs +16 -0
  25. package/handlers/get-chat.mjs.map +1 -0
  26. package/handlers/index.d.mts +3 -0
  27. package/handlers/index.d.mts.map +1 -0
  28. package/handlers/index.d.ts +3 -0
  29. package/handlers/index.d.ts.map +1 -0
  30. package/handlers/index.js +30 -0
  31. package/handlers/index.js.map +1 -0
  32. package/handlers/index.mjs +27 -0
  33. package/handlers/index.mjs.map +1 -0
  34. package/handlers/list-chats.d.mts +3 -0
  35. package/handlers/list-chats.d.mts.map +1 -0
  36. package/handlers/list-chats.d.ts +3 -0
  37. package/handlers/list-chats.d.ts.map +1 -0
  38. package/handlers/list-chats.js +46 -0
  39. package/handlers/list-chats.js.map +1 -0
  40. package/handlers/list-chats.mjs +42 -0
  41. package/handlers/list-chats.mjs.map +1 -0
  42. package/handlers/list-messages.d.mts +3 -0
  43. package/handlers/list-messages.d.mts.map +1 -0
  44. package/handlers/list-messages.d.ts +3 -0
  45. package/handlers/list-messages.d.ts.map +1 -0
  46. package/handlers/list-messages.js +34 -0
  47. package/handlers/list-messages.js.map +1 -0
  48. package/handlers/list-messages.mjs +30 -0
  49. package/handlers/list-messages.mjs.map +1 -0
  50. package/handlers/open-app.d.mts +3 -0
  51. package/handlers/open-app.d.mts.map +1 -0
  52. package/handlers/open-app.d.ts +3 -0
  53. package/handlers/open-app.d.ts.map +1 -0
  54. package/handlers/open-app.js +26 -0
  55. package/handlers/open-app.js.map +1 -0
  56. package/handlers/open-app.mjs +22 -0
  57. package/handlers/open-app.mjs.map +1 -0
  58. package/handlers/search-chats.d.mts +3 -0
  59. package/handlers/search-chats.d.mts.map +1 -0
  60. package/handlers/search-chats.d.ts +3 -0
  61. package/handlers/search-chats.d.ts.map +1 -0
  62. package/handlers/search-chats.js +38 -0
  63. package/handlers/search-chats.js.map +1 -0
  64. package/handlers/search-chats.mjs +34 -0
  65. package/handlers/search-chats.mjs.map +1 -0
  66. package/handlers/search-messages.d.mts +3 -0
  67. package/handlers/search-messages.d.mts.map +1 -0
  68. package/handlers/search-messages.d.ts +3 -0
  69. package/handlers/search-messages.d.ts.map +1 -0
  70. package/handlers/search-messages.js +11 -0
  71. package/handlers/search-messages.js.map +1 -0
  72. package/handlers/search-messages.mjs +7 -0
  73. package/handlers/search-messages.mjs.map +1 -0
  74. package/handlers/search.d.mts +3 -0
  75. package/handlers/search.d.mts.map +1 -0
  76. package/handlers/search.d.ts +3 -0
  77. package/handlers/search.d.ts.map +1 -0
  78. package/handlers/search.js +29 -0
  79. package/handlers/search.js.map +1 -0
  80. package/handlers/search.mjs +25 -0
  81. package/handlers/search.mjs.map +1 -0
  82. package/handlers/send-message.d.mts +3 -0
  83. package/handlers/send-message.d.mts.map +1 -0
  84. package/handlers/send-message.d.ts +3 -0
  85. package/handlers/send-message.d.ts.map +1 -0
  86. package/handlers/send-message.js +20 -0
  87. package/handlers/send-message.js.map +1 -0
  88. package/handlers/send-message.mjs +16 -0
  89. package/handlers/send-message.mjs.map +1 -0
  90. package/handlers/utils.d.mts +29 -0
  91. package/handlers/utils.d.mts.map +1 -0
  92. package/handlers/utils.d.ts +29 -0
  93. package/handlers/utils.d.ts.map +1 -0
  94. package/handlers/utils.js +296 -0
  95. package/handlers/utils.js.map +1 -0
  96. package/handlers/utils.mjs +282 -0
  97. package/handlers/utils.mjs.map +1 -0
  98. package/http.d.mts +6 -0
  99. package/http.d.mts.map +1 -1
  100. package/http.d.ts +6 -0
  101. package/http.d.ts.map +1 -1
  102. package/http.js +7 -4
  103. package/http.js.map +1 -1
  104. package/http.mjs +3 -3
  105. package/http.mjs.map +1 -1
  106. package/options.d.mts +1 -0
  107. package/options.d.mts.map +1 -1
  108. package/options.d.ts +1 -0
  109. package/options.d.ts.map +1 -1
  110. package/options.js +13 -6
  111. package/options.js.map +1 -1
  112. package/options.mjs +13 -6
  113. package/options.mjs.map +1 -1
  114. package/package.json +23 -2
  115. package/server.d.mts.map +1 -1
  116. package/server.d.ts.map +1 -1
  117. package/server.js +8 -4
  118. package/server.js.map +1 -1
  119. package/server.mjs +8 -4
  120. package/server.mjs.map +1 -1
  121. package/src/docs-search-tool.ts +48 -0
  122. package/src/handlers/get-accounts.ts +28 -0
  123. package/src/handlers/get-chat.ts +18 -0
  124. package/src/handlers/index.ts +29 -0
  125. package/src/handlers/list-chats.ts +47 -0
  126. package/src/handlers/list-messages.ts +33 -0
  127. package/src/handlers/open-app.ts +20 -0
  128. package/src/handlers/search-chats.ts +39 -0
  129. package/src/handlers/search-messages.ts +8 -0
  130. package/src/handlers/search.ts +24 -0
  131. package/src/handlers/send-message.ts +17 -0
  132. package/src/handlers/utils.ts +381 -0
  133. package/src/http.ts +3 -3
  134. package/src/options.ts +17 -7
  135. package/src/server.ts +8 -5
  136. package/src/tools/accounts/get-accounts.ts +3 -3
  137. package/src/tools/chats/archive-chat.ts +6 -6
  138. package/src/tools/chats/get-chat.ts +6 -7
  139. package/src/tools/chats/reminders/clear-chat-reminder.ts +10 -8
  140. package/src/tools/chats/reminders/set-chat-reminder.ts +6 -5
  141. package/src/tools/chats/search-chats.ts +5 -5
  142. package/src/tools/index.ts +8 -5
  143. package/src/tools/messages/list-messages.ts +51 -0
  144. package/src/tools/messages/search-messages.ts +6 -7
  145. package/src/tools/messages/send-message.ts +5 -5
  146. package/src/tools/{app/open-in-app.ts → top-level/focus-app.ts} +6 -6
  147. package/src/tools/{app → top-level}/search.ts +3 -3
  148. package/tools/accounts/get-accounts.js +3 -3
  149. package/tools/accounts/get-accounts.js.map +1 -1
  150. package/tools/accounts/get-accounts.mjs +3 -3
  151. package/tools/accounts/get-accounts.mjs.map +1 -1
  152. package/tools/chats/archive-chat.d.mts.map +1 -1
  153. package/tools/chats/archive-chat.d.ts.map +1 -1
  154. package/tools/chats/archive-chat.js +6 -5
  155. package/tools/chats/archive-chat.js.map +1 -1
  156. package/tools/chats/archive-chat.mjs +6 -5
  157. package/tools/chats/archive-chat.mjs.map +1 -1
  158. package/tools/chats/get-chat.d.mts.map +1 -1
  159. package/tools/chats/get-chat.d.ts.map +1 -1
  160. package/tools/chats/get-chat.js +6 -6
  161. package/tools/chats/get-chat.js.map +1 -1
  162. package/tools/chats/get-chat.mjs +6 -6
  163. package/tools/chats/get-chat.mjs.map +1 -1
  164. package/tools/chats/reminders/clear-chat-reminder.d.mts.map +1 -1
  165. package/tools/chats/reminders/clear-chat-reminder.d.ts.map +1 -1
  166. package/tools/chats/reminders/clear-chat-reminder.js +10 -7
  167. package/tools/chats/reminders/clear-chat-reminder.js.map +1 -1
  168. package/tools/chats/reminders/clear-chat-reminder.mjs +10 -7
  169. package/tools/chats/reminders/clear-chat-reminder.mjs.map +1 -1
  170. package/tools/chats/reminders/set-chat-reminder.d.mts.map +1 -1
  171. package/tools/chats/reminders/set-chat-reminder.d.ts.map +1 -1
  172. package/tools/chats/reminders/set-chat-reminder.js +6 -5
  173. package/tools/chats/reminders/set-chat-reminder.js.map +1 -1
  174. package/tools/chats/reminders/set-chat-reminder.mjs +6 -5
  175. package/tools/chats/reminders/set-chat-reminder.mjs.map +1 -1
  176. package/tools/chats/search-chats.js +5 -5
  177. package/tools/chats/search-chats.js.map +1 -1
  178. package/tools/chats/search-chats.mjs +5 -5
  179. package/tools/chats/search-chats.mjs.map +1 -1
  180. package/tools/index.d.mts.map +1 -1
  181. package/tools/index.d.ts.map +1 -1
  182. package/tools/index.js +8 -5
  183. package/tools/index.js.map +1 -1
  184. package/tools/index.mjs +8 -5
  185. package/tools/index.mjs.map +1 -1
  186. package/tools/messages/list-messages.d.mts +45 -0
  187. package/tools/messages/list-messages.d.mts.map +1 -0
  188. package/tools/messages/list-messages.d.ts +45 -0
  189. package/tools/messages/list-messages.d.ts.map +1 -0
  190. package/tools/messages/list-messages.js +47 -0
  191. package/tools/messages/list-messages.js.map +1 -0
  192. package/tools/messages/list-messages.mjs +43 -0
  193. package/tools/messages/list-messages.mjs.map +1 -0
  194. package/tools/messages/search-messages.d.mts.map +1 -1
  195. package/tools/messages/search-messages.d.ts.map +1 -1
  196. package/tools/messages/search-messages.js +6 -6
  197. package/tools/messages/search-messages.js.map +1 -1
  198. package/tools/messages/search-messages.mjs +6 -6
  199. package/tools/messages/search-messages.mjs.map +1 -1
  200. package/tools/messages/send-message.js +5 -5
  201. package/tools/messages/send-message.js.map +1 -1
  202. package/tools/messages/send-message.mjs +5 -5
  203. package/tools/messages/send-message.mjs.map +1 -1
  204. package/tools/{app/open-in-app.d.ts → top-level/focus-app.d.mts} +1 -1
  205. package/tools/top-level/focus-app.d.mts.map +1 -0
  206. package/tools/{app/open-in-app.d.mts → top-level/focus-app.d.ts} +1 -1
  207. package/tools/top-level/focus-app.d.ts.map +1 -0
  208. package/tools/{app/open-in-app.js → top-level/focus-app.js} +7 -7
  209. package/tools/top-level/focus-app.js.map +1 -0
  210. package/tools/{app/open-in-app.mjs → top-level/focus-app.mjs} +7 -7
  211. package/tools/top-level/focus-app.mjs.map +1 -0
  212. package/tools/top-level/search.d.mts.map +1 -0
  213. package/tools/top-level/search.d.ts.map +1 -0
  214. package/tools/{app → top-level}/search.js +3 -3
  215. package/tools/top-level/search.js.map +1 -0
  216. package/tools/{app → top-level}/search.mjs +3 -3
  217. package/tools/top-level/search.mjs.map +1 -0
  218. package/tools/app/open-in-app.d.mts.map +0 -1
  219. package/tools/app/open-in-app.d.ts.map +0 -1
  220. package/tools/app/open-in-app.js.map +0 -1
  221. package/tools/app/open-in-app.mjs.map +0 -1
  222. package/tools/app/search.d.mts.map +0 -1
  223. package/tools/app/search.d.ts.map +0 -1
  224. package/tools/app/search.js.map +0 -1
  225. package/tools/app/search.mjs.map +0 -1
  226. /package/tools/{app → top-level}/search.d.mts +0 -0
  227. /package/tools/{app → top-level}/search.d.ts +0 -0
@@ -0,0 +1,296 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mapMessagesToText = exports.formatChatToMarkdown = exports.formatAttachmentToMarkdown = exports.formatReactionsToMarkdown = exports.formatParticipantsToMarkdown = exports.createOpenLink = exports.getParticipantName = exports.formatBytes = exports.formatRelativeDate = void 0;
4
+ exports.groupReactions = groupReactions;
5
+ exports.asMarkdownContentResult = asMarkdownContentResult;
6
+ const date_fns_1 = require("date-fns");
7
+ const MILLIS_IN_WEEK = 86400000 * 7;
8
+ const formatRelativeDate = (date) => {
9
+ const timeDifference = (0, date_fns_1.differenceInMilliseconds)((0, date_fns_1.endOfDay)(new Date()), date);
10
+ if ((0, date_fns_1.isToday)(date))
11
+ return 'Today';
12
+ if ((0, date_fns_1.isYesterday)(date))
13
+ return 'Yesterday';
14
+ return new Intl.DateTimeFormat('default', timeDifference < MILLIS_IN_WEEK ?
15
+ {
16
+ weekday: 'long',
17
+ }
18
+ : (0, date_fns_1.isSameYear)(date, new Date()) ?
19
+ {
20
+ weekday: 'short',
21
+ month: 'short',
22
+ day: 'numeric',
23
+ }
24
+ : {
25
+ year: 'numeric',
26
+ month: 'short',
27
+ day: 'numeric',
28
+ }).format(date);
29
+ };
30
+ exports.formatRelativeDate = formatRelativeDate;
31
+ const formatBytes = (bytes, decimals = 0) => {
32
+ if (bytes === 0)
33
+ return '0 B';
34
+ const k = 1024;
35
+ const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
36
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
37
+ return `${Math.floor(parseFloat((bytes / k ** i).toFixed(decimals)))}${sizes[i]}`;
38
+ };
39
+ exports.formatBytes = formatBytes;
40
+ const skinToneRegex = /\uD83C[\uDFFB-\uDFFF]/g;
41
+ const removeSkinTone = (emojiString) => emojiString.replace(skinToneRegex, '');
42
+ function groupReactions(reactions) {
43
+ const map = {};
44
+ reactions.forEach((reaction) => {
45
+ if (!reaction.reactionKey)
46
+ return;
47
+ const key = removeSkinTone(reaction.reactionKey);
48
+ map[key] || (map[key] = []);
49
+ map[key].push(reaction);
50
+ });
51
+ return map;
52
+ }
53
+ const getParticipantName = (participant, preferFirstName) => participant.fullName && preferFirstName ?
54
+ participant.fullName.split(' ')[0]
55
+ : participant.fullName ||
56
+ participant.username ||
57
+ participant.email ||
58
+ participant.phoneNumber ||
59
+ participant.id;
60
+ exports.getParticipantName = getParticipantName;
61
+ const createOpenLink = (baseURL, localChatIDOrChatID, messageKey) => `${baseURL}/open/${encodeURIComponent(localChatIDOrChatID)}${messageKey ? `/${messageKey}` : ''}`;
62
+ exports.createOpenLink = createOpenLink;
63
+ const formatParticipantsToMarkdown = (participants, limit = 3) => {
64
+ if (!participants || participants.length === 0)
65
+ return '';
66
+ const names = participants
67
+ .slice(0, limit)
68
+ .map((p) => p.fullName || p.username || p.id)
69
+ .filter(Boolean);
70
+ if (participants.length > limit) {
71
+ const othersCount = participants.length - limit;
72
+ names.push(`& ${othersCount} other${othersCount === 1 ? '' : 's'}`);
73
+ }
74
+ return names.join(', ');
75
+ };
76
+ exports.formatParticipantsToMarkdown = formatParticipantsToMarkdown;
77
+ const formatReactionsToMarkdown = (reactions, participants) => {
78
+ if (!reactions || reactions.length === 0)
79
+ return '';
80
+ const reactionMap = groupReactions(reactions);
81
+ const reactionParts = [];
82
+ for (const [reactionKey, reactionList] of Object.entries(reactionMap)) {
83
+ const count = reactionList.length;
84
+ const reactorNames = reactionList
85
+ .slice(0, 5)
86
+ .map((r) => {
87
+ if (!r.participantID)
88
+ return null;
89
+ const participant = participants?.get(r.participantID);
90
+ return participant ? (0, exports.getParticipantName)(participant) : r.participantID;
91
+ })
92
+ .filter(Boolean);
93
+ let reactorInfo = '';
94
+ if (reactorNames.length > 0) {
95
+ if (count > 5) {
96
+ const othersCount = count - 5;
97
+ reactorInfo = ` (${reactorNames.join(', ')} & ${othersCount} other${othersCount === 1 ? '' : 's'})`;
98
+ }
99
+ else {
100
+ reactorInfo = ` (${reactorNames.join(', ')})`;
101
+ }
102
+ }
103
+ reactionParts.push(`${reactionKey} ${count}${reactorInfo}`);
104
+ }
105
+ return reactionParts.length > 0 ? ` [${reactionParts.join(' ')}]` : '';
106
+ };
107
+ exports.formatReactionsToMarkdown = formatReactionsToMarkdown;
108
+ const formatAttachmentToMarkdown = (attachment) => {
109
+ if (!attachment)
110
+ return '';
111
+ const typeEmoji = {
112
+ img: 'šŸ–¼',
113
+ video: 'šŸŽ„',
114
+ audio: 'šŸŽµ',
115
+ unknown: 'šŸ“Ž',
116
+ }[attachment.type] || 'šŸ“Ž';
117
+ const fileName = attachment.fileName || 'file';
118
+ const url = attachment.srcURL || '';
119
+ const hasBothDimensions = typeof attachment.size?.width === 'number' && typeof attachment.size?.height === 'number';
120
+ const metaInfo = [];
121
+ if (attachment.fileSize) {
122
+ metaInfo.push((0, exports.formatBytes)(attachment.fileSize));
123
+ }
124
+ if (hasBothDimensions) {
125
+ metaInfo.push(`${attachment.size.width}x${attachment.size.height}`);
126
+ }
127
+ const metaString = metaInfo.length > 0 ? ` (${metaInfo.join(', ')})` : '';
128
+ return `\n${typeEmoji} [${fileName}](${url})${metaString}`;
129
+ };
130
+ exports.formatAttachmentToMarkdown = formatAttachmentToMarkdown;
131
+ const formatChatToMarkdown = (chat, baseURL) => {
132
+ const openURL = baseURL ? (0, exports.createOpenLink)(baseURL, chat.localChatID ?? chat.id) : undefined;
133
+ const title = openURL ? `[${chat.title}](${openURL})` : chat.title;
134
+ const participantList = chat.participants?.items ? (0, exports.formatParticipantsToMarkdown)(chat.participants.items, 3) : '';
135
+ const participantInfo = participantList ? ` with ${participantList}` : '';
136
+ const lines = [];
137
+ lines.push(`\n## ${title} (chatID: ${chat.localChatID})`);
138
+ let chatLine = `Chat on ${chat.network}${participantInfo}.`;
139
+ if (typeof chat.unreadCount === 'number' && chat.unreadCount > 0) {
140
+ chatLine += ` It has ${chat.unreadCount} unread message${chat.unreadCount === 1 ? '' : 's'}.`;
141
+ }
142
+ lines.push(chatLine);
143
+ lines.push(`**Type**: ${chat.type}`);
144
+ if (chat.lastActivity)
145
+ lines.push(`**Last Activity**: ${chat.lastActivity}`);
146
+ const status = [];
147
+ if (chat.isArchived)
148
+ status.push('archived');
149
+ if (chat.isMuted)
150
+ status.push('muted');
151
+ if (chat.isPinned)
152
+ status.push('pinned');
153
+ if (status.length > 0)
154
+ lines.push(`This chat is ${status.join(', ')}.`);
155
+ return lines.join('\n');
156
+ };
157
+ exports.formatChatToMarkdown = formatChatToMarkdown;
158
+ const parseLocalDateKey = (key) => {
159
+ const parsed = (0, date_fns_1.parse)(key, 'yyyy-MM-dd', new Date());
160
+ if (isNaN(parsed.getTime())) {
161
+ throw new Error(`Invalid date key: ${key}`);
162
+ }
163
+ return parsed;
164
+ };
165
+ const mapMessagesToText = (output, input, ctx) => {
166
+ const { items, hasMore } = output;
167
+ const chats = output?.body?.chats ?? {};
168
+ const messageCount = items.length;
169
+ const chatCount = Object.keys(chats).length;
170
+ // Determine if search filters would cause gaps in timeline
171
+ // Gaps occur when filtering by: query text, sender, or media types
172
+ // Gaps do NOT occur when only filtering by: chatIDs, accountIDs, chatType, or date ranges
173
+ const hasGapCausingFilters = input && (input.query || input.sender || (input.mediaTypes && input.mediaTypes.length > 0));
174
+ const paginationInfo = [];
175
+ if (messageCount === 0) {
176
+ if (!chats || chatCount === 0) {
177
+ paginationInfo.push('No matching chats found');
178
+ }
179
+ else {
180
+ paginationInfo.push(`No messages found in ${chatCount} chat${chatCount === 1 ? '' : 's'}`);
181
+ }
182
+ }
183
+ else if (hasMore) {
184
+ paginationInfo.push(`Found ${messageCount}+ messages across ${chatCount} chat${chatCount === 1 ? '' : 's'} (showing ${messageCount})`);
185
+ if (output.oldestCursor) {
186
+ paginationInfo.push(`Next page (older): cursor='${output.oldestCursor}', direction='before'`);
187
+ }
188
+ if (output.newestCursor) {
189
+ paginationInfo.push(`Previous page (newer): cursor='${output.newestCursor}', direction='after'`);
190
+ }
191
+ }
192
+ else {
193
+ paginationInfo.push(`Found ${messageCount} message${messageCount === 1 ? '' : 's'} across ${chatCount} chat${chatCount === 1 ? '' : 's'} (complete)`);
194
+ }
195
+ if (hasGapCausingFilters && messageCount > 0) {
196
+ paginationInfo.push('āš ļø Filtered results: only showing messages matching your search criteria.');
197
+ }
198
+ const messagesByChat = new Map();
199
+ for (const message of items) {
200
+ const chatMessages = messagesByChat.get(message.chatID) || [];
201
+ chatMessages.push(message);
202
+ messagesByChat.set(message.chatID, chatMessages);
203
+ }
204
+ const chatSummaries = [];
205
+ for (const [chatID, messages] of messagesByChat) {
206
+ const chat = chats[chatID];
207
+ if (chat) {
208
+ chatSummaries.push(`# ${chat.title} [${messages.length} message${messages.length === 1 ? '' : 's'}]`);
209
+ }
210
+ }
211
+ const headerLines = [...paginationInfo, '', ...chatSummaries];
212
+ const summary = headerLines.join('\n');
213
+ const chatSections = [];
214
+ for (const [chatID, messages] of messagesByChat) {
215
+ const chat = chats[chatID];
216
+ if (!chat)
217
+ continue;
218
+ const participantList = chat.participants?.items ? (0, exports.formatParticipantsToMarkdown)(chat.participants.items, 3) : '';
219
+ const participantInfo = participantList ? ` with ${participantList}` : '';
220
+ const openURL = ctx?.apiBaseURL ? (0, exports.createOpenLink)(ctx.apiBaseURL, chat.localChatID ?? chat.id) : undefined;
221
+ const title = openURL ? `[${chat.title}](${openURL})` : chat.title;
222
+ chatSections.push(`# ${title} (chatID: ${chat.localChatID})`);
223
+ chatSections.push(`Chat on ${chat.network}${participantInfo}.`);
224
+ chatSections.push('');
225
+ const messagesByDate = new Map();
226
+ for (const message of messages) {
227
+ const dateKey = (0, date_fns_1.format)(new Date(message.timestamp), 'yyyy-MM-dd');
228
+ const dateMessages = messagesByDate.get(dateKey) || [];
229
+ dateMessages.push(message);
230
+ messagesByDate.set(dateKey, dateMessages);
231
+ }
232
+ const sortedDates = Array.from(messagesByDate.keys()).sort();
233
+ const participantMap = chat?.participants?.items ?
234
+ new Map(chat.participants.items.map((p) => [p.id, p]))
235
+ : undefined;
236
+ for (let i = 0; i < sortedDates.length; i++) {
237
+ const dateKey = sortedDates[i];
238
+ const dateObj = parseLocalDateKey(dateKey);
239
+ const relativeTime = (0, exports.formatRelativeDate)(dateObj);
240
+ chatSections.push(`## ${relativeTime} (${dateKey})`);
241
+ chatSections.push('');
242
+ const dateMessages = messagesByDate.get(dateKey) || [];
243
+ dateMessages.sort((a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime());
244
+ for (const message of dateMessages) {
245
+ const time = new Date(message.timestamp);
246
+ const timeStr = (0, date_fns_1.format)(time, 'HH:mm');
247
+ const baseSenderName = message.senderName || message.senderID;
248
+ const senderName = message.isSender ? `${baseSenderName} (You)` : baseSenderName;
249
+ const maxTextLength = ctx?.maxTextLength ?? 1000;
250
+ let text = message.text || '';
251
+ if (text && text.length > maxTextLength) {
252
+ const remainingChars = text.length - maxTextLength;
253
+ text = text.substring(0, maxTextLength) + `... [+${remainingChars} chars]`;
254
+ }
255
+ const attachment = message.attachments?.[0]; // Assume single attachment
256
+ const attachmentChatID = chat.localChatID ?? chat.id;
257
+ const attachmentLink = attachment && attachmentChatID ?
258
+ `\nšŸ“Ž [${attachment.fileName || 'attachment'}](beeper-mcp://attachments/${attachmentChatID}/${message.id}/0)`
259
+ : '';
260
+ const reactionsStr = (0, exports.formatReactionsToMarkdown)(message.reactions, participantMap);
261
+ const sortKeyLink = chat.localChatID ?
262
+ `([open at sort key](${(0, exports.createOpenLink)(ctx?.apiBaseURL || '', chat.localChatID, String(message.sortKey))}))`
263
+ : `(sortKey: ${message.sortKey})`;
264
+ const messageStr = `**${senderName}** (${timeStr}): ${text}${attachmentLink}${reactionsStr} ${sortKeyLink}`;
265
+ chatSections.push(messageStr);
266
+ chatSections.push('');
267
+ }
268
+ // Add date gap indicator when dates are not consecutive
269
+ if (i < sortedDates.length - 1) {
270
+ const nextDateKey = sortedDates[i + 1];
271
+ const currentDate = parseLocalDateKey(dateKey);
272
+ const nextDate = parseLocalDateKey(nextDateKey);
273
+ const dayDiff = (0, date_fns_1.differenceInDays)(nextDate, currentDate);
274
+ // Only show gap if dates are not consecutive
275
+ if (dayDiff > 1) {
276
+ const gapDays = dayDiff - 1;
277
+ chatSections.push(`*[... ${gapDays} day${gapDays === 1 ? '' : 's'} gap ...]*`);
278
+ chatSections.push('');
279
+ }
280
+ }
281
+ }
282
+ }
283
+ return [summary, '', ...chatSections].join('\n');
284
+ };
285
+ exports.mapMessagesToText = mapMessagesToText;
286
+ function asMarkdownContentResult(text) {
287
+ return {
288
+ content: [
289
+ {
290
+ type: 'text',
291
+ text: Array.isArray(text) ? text.join('\n') : text,
292
+ },
293
+ ],
294
+ };
295
+ }
296
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/handlers/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,282 @@
1
+ import { differenceInMilliseconds, differenceInDays, endOfDay, format, isToday, isYesterday, isSameYear, parse, } from 'date-fns';
2
+ const MILLIS_IN_WEEK = 86400000 * 7;
3
+ export const formatRelativeDate = (date) => {
4
+ const timeDifference = differenceInMilliseconds(endOfDay(new Date()), date);
5
+ if (isToday(date))
6
+ return 'Today';
7
+ if (isYesterday(date))
8
+ return 'Yesterday';
9
+ return new Intl.DateTimeFormat('default', timeDifference < MILLIS_IN_WEEK ?
10
+ {
11
+ weekday: 'long',
12
+ }
13
+ : isSameYear(date, new Date()) ?
14
+ {
15
+ weekday: 'short',
16
+ month: 'short',
17
+ day: 'numeric',
18
+ }
19
+ : {
20
+ year: 'numeric',
21
+ month: 'short',
22
+ day: 'numeric',
23
+ }).format(date);
24
+ };
25
+ export const formatBytes = (bytes, decimals = 0) => {
26
+ if (bytes === 0)
27
+ return '0 B';
28
+ const k = 1024;
29
+ const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
30
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
31
+ return `${Math.floor(parseFloat((bytes / k ** i).toFixed(decimals)))}${sizes[i]}`;
32
+ };
33
+ const skinToneRegex = /\uD83C[\uDFFB-\uDFFF]/g;
34
+ const removeSkinTone = (emojiString) => emojiString.replace(skinToneRegex, '');
35
+ export function groupReactions(reactions) {
36
+ const map = {};
37
+ reactions.forEach((reaction) => {
38
+ if (!reaction.reactionKey)
39
+ return;
40
+ const key = removeSkinTone(reaction.reactionKey);
41
+ map[key] || (map[key] = []);
42
+ map[key].push(reaction);
43
+ });
44
+ return map;
45
+ }
46
+ export const getParticipantName = (participant, preferFirstName) => participant.fullName && preferFirstName ?
47
+ participant.fullName.split(' ')[0]
48
+ : participant.fullName ||
49
+ participant.username ||
50
+ participant.email ||
51
+ participant.phoneNumber ||
52
+ participant.id;
53
+ export const createOpenLink = (baseURL, localChatIDOrChatID, messageKey) => `${baseURL}/open/${encodeURIComponent(localChatIDOrChatID)}${messageKey ? `/${messageKey}` : ''}`;
54
+ export const formatParticipantsToMarkdown = (participants, limit = 3) => {
55
+ if (!participants || participants.length === 0)
56
+ return '';
57
+ const names = participants
58
+ .slice(0, limit)
59
+ .map((p) => p.fullName || p.username || p.id)
60
+ .filter(Boolean);
61
+ if (participants.length > limit) {
62
+ const othersCount = participants.length - limit;
63
+ names.push(`& ${othersCount} other${othersCount === 1 ? '' : 's'}`);
64
+ }
65
+ return names.join(', ');
66
+ };
67
+ export const formatReactionsToMarkdown = (reactions, participants) => {
68
+ if (!reactions || reactions.length === 0)
69
+ return '';
70
+ const reactionMap = groupReactions(reactions);
71
+ const reactionParts = [];
72
+ for (const [reactionKey, reactionList] of Object.entries(reactionMap)) {
73
+ const count = reactionList.length;
74
+ const reactorNames = reactionList
75
+ .slice(0, 5)
76
+ .map((r) => {
77
+ if (!r.participantID)
78
+ return null;
79
+ const participant = participants?.get(r.participantID);
80
+ return participant ? getParticipantName(participant) : r.participantID;
81
+ })
82
+ .filter(Boolean);
83
+ let reactorInfo = '';
84
+ if (reactorNames.length > 0) {
85
+ if (count > 5) {
86
+ const othersCount = count - 5;
87
+ reactorInfo = ` (${reactorNames.join(', ')} & ${othersCount} other${othersCount === 1 ? '' : 's'})`;
88
+ }
89
+ else {
90
+ reactorInfo = ` (${reactorNames.join(', ')})`;
91
+ }
92
+ }
93
+ reactionParts.push(`${reactionKey} ${count}${reactorInfo}`);
94
+ }
95
+ return reactionParts.length > 0 ? ` [${reactionParts.join(' ')}]` : '';
96
+ };
97
+ export const formatAttachmentToMarkdown = (attachment) => {
98
+ if (!attachment)
99
+ return '';
100
+ const typeEmoji = {
101
+ img: 'šŸ–¼',
102
+ video: 'šŸŽ„',
103
+ audio: 'šŸŽµ',
104
+ unknown: 'šŸ“Ž',
105
+ }[attachment.type] || 'šŸ“Ž';
106
+ const fileName = attachment.fileName || 'file';
107
+ const url = attachment.srcURL || '';
108
+ const hasBothDimensions = typeof attachment.size?.width === 'number' && typeof attachment.size?.height === 'number';
109
+ const metaInfo = [];
110
+ if (attachment.fileSize) {
111
+ metaInfo.push(formatBytes(attachment.fileSize));
112
+ }
113
+ if (hasBothDimensions) {
114
+ metaInfo.push(`${attachment.size.width}x${attachment.size.height}`);
115
+ }
116
+ const metaString = metaInfo.length > 0 ? ` (${metaInfo.join(', ')})` : '';
117
+ return `\n${typeEmoji} [${fileName}](${url})${metaString}`;
118
+ };
119
+ export const formatChatToMarkdown = (chat, baseURL) => {
120
+ const openURL = baseURL ? createOpenLink(baseURL, chat.localChatID ?? chat.id) : undefined;
121
+ const title = openURL ? `[${chat.title}](${openURL})` : chat.title;
122
+ const participantList = chat.participants?.items ? formatParticipantsToMarkdown(chat.participants.items, 3) : '';
123
+ const participantInfo = participantList ? ` with ${participantList}` : '';
124
+ const lines = [];
125
+ lines.push(`\n## ${title} (chatID: ${chat.localChatID})`);
126
+ let chatLine = `Chat on ${chat.network}${participantInfo}.`;
127
+ if (typeof chat.unreadCount === 'number' && chat.unreadCount > 0) {
128
+ chatLine += ` It has ${chat.unreadCount} unread message${chat.unreadCount === 1 ? '' : 's'}.`;
129
+ }
130
+ lines.push(chatLine);
131
+ lines.push(`**Type**: ${chat.type}`);
132
+ if (chat.lastActivity)
133
+ lines.push(`**Last Activity**: ${chat.lastActivity}`);
134
+ const status = [];
135
+ if (chat.isArchived)
136
+ status.push('archived');
137
+ if (chat.isMuted)
138
+ status.push('muted');
139
+ if (chat.isPinned)
140
+ status.push('pinned');
141
+ if (status.length > 0)
142
+ lines.push(`This chat is ${status.join(', ')}.`);
143
+ return lines.join('\n');
144
+ };
145
+ const parseLocalDateKey = (key) => {
146
+ const parsed = parse(key, 'yyyy-MM-dd', new Date());
147
+ if (isNaN(parsed.getTime())) {
148
+ throw new Error(`Invalid date key: ${key}`);
149
+ }
150
+ return parsed;
151
+ };
152
+ export const mapMessagesToText = (output, input, ctx) => {
153
+ const { items, hasMore } = output;
154
+ const chats = output?.body?.chats ?? {};
155
+ const messageCount = items.length;
156
+ const chatCount = Object.keys(chats).length;
157
+ // Determine if search filters would cause gaps in timeline
158
+ // Gaps occur when filtering by: query text, sender, or media types
159
+ // Gaps do NOT occur when only filtering by: chatIDs, accountIDs, chatType, or date ranges
160
+ const hasGapCausingFilters = input && (input.query || input.sender || (input.mediaTypes && input.mediaTypes.length > 0));
161
+ const paginationInfo = [];
162
+ if (messageCount === 0) {
163
+ if (!chats || chatCount === 0) {
164
+ paginationInfo.push('No matching chats found');
165
+ }
166
+ else {
167
+ paginationInfo.push(`No messages found in ${chatCount} chat${chatCount === 1 ? '' : 's'}`);
168
+ }
169
+ }
170
+ else if (hasMore) {
171
+ paginationInfo.push(`Found ${messageCount}+ messages across ${chatCount} chat${chatCount === 1 ? '' : 's'} (showing ${messageCount})`);
172
+ if (output.oldestCursor) {
173
+ paginationInfo.push(`Next page (older): cursor='${output.oldestCursor}', direction='before'`);
174
+ }
175
+ if (output.newestCursor) {
176
+ paginationInfo.push(`Previous page (newer): cursor='${output.newestCursor}', direction='after'`);
177
+ }
178
+ }
179
+ else {
180
+ paginationInfo.push(`Found ${messageCount} message${messageCount === 1 ? '' : 's'} across ${chatCount} chat${chatCount === 1 ? '' : 's'} (complete)`);
181
+ }
182
+ if (hasGapCausingFilters && messageCount > 0) {
183
+ paginationInfo.push('āš ļø Filtered results: only showing messages matching your search criteria.');
184
+ }
185
+ const messagesByChat = new Map();
186
+ for (const message of items) {
187
+ const chatMessages = messagesByChat.get(message.chatID) || [];
188
+ chatMessages.push(message);
189
+ messagesByChat.set(message.chatID, chatMessages);
190
+ }
191
+ const chatSummaries = [];
192
+ for (const [chatID, messages] of messagesByChat) {
193
+ const chat = chats[chatID];
194
+ if (chat) {
195
+ chatSummaries.push(`# ${chat.title} [${messages.length} message${messages.length === 1 ? '' : 's'}]`);
196
+ }
197
+ }
198
+ const headerLines = [...paginationInfo, '', ...chatSummaries];
199
+ const summary = headerLines.join('\n');
200
+ const chatSections = [];
201
+ for (const [chatID, messages] of messagesByChat) {
202
+ const chat = chats[chatID];
203
+ if (!chat)
204
+ continue;
205
+ const participantList = chat.participants?.items ? formatParticipantsToMarkdown(chat.participants.items, 3) : '';
206
+ const participantInfo = participantList ? ` with ${participantList}` : '';
207
+ const openURL = ctx?.apiBaseURL ? createOpenLink(ctx.apiBaseURL, chat.localChatID ?? chat.id) : undefined;
208
+ const title = openURL ? `[${chat.title}](${openURL})` : chat.title;
209
+ chatSections.push(`# ${title} (chatID: ${chat.localChatID})`);
210
+ chatSections.push(`Chat on ${chat.network}${participantInfo}.`);
211
+ chatSections.push('');
212
+ const messagesByDate = new Map();
213
+ for (const message of messages) {
214
+ const dateKey = format(new Date(message.timestamp), 'yyyy-MM-dd');
215
+ const dateMessages = messagesByDate.get(dateKey) || [];
216
+ dateMessages.push(message);
217
+ messagesByDate.set(dateKey, dateMessages);
218
+ }
219
+ const sortedDates = Array.from(messagesByDate.keys()).sort();
220
+ const participantMap = chat?.participants?.items ?
221
+ new Map(chat.participants.items.map((p) => [p.id, p]))
222
+ : undefined;
223
+ for (let i = 0; i < sortedDates.length; i++) {
224
+ const dateKey = sortedDates[i];
225
+ const dateObj = parseLocalDateKey(dateKey);
226
+ const relativeTime = formatRelativeDate(dateObj);
227
+ chatSections.push(`## ${relativeTime} (${dateKey})`);
228
+ chatSections.push('');
229
+ const dateMessages = messagesByDate.get(dateKey) || [];
230
+ dateMessages.sort((a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime());
231
+ for (const message of dateMessages) {
232
+ const time = new Date(message.timestamp);
233
+ const timeStr = format(time, 'HH:mm');
234
+ const baseSenderName = message.senderName || message.senderID;
235
+ const senderName = message.isSender ? `${baseSenderName} (You)` : baseSenderName;
236
+ const maxTextLength = ctx?.maxTextLength ?? 1000;
237
+ let text = message.text || '';
238
+ if (text && text.length > maxTextLength) {
239
+ const remainingChars = text.length - maxTextLength;
240
+ text = text.substring(0, maxTextLength) + `... [+${remainingChars} chars]`;
241
+ }
242
+ const attachment = message.attachments?.[0]; // Assume single attachment
243
+ const attachmentChatID = chat.localChatID ?? chat.id;
244
+ const attachmentLink = attachment && attachmentChatID ?
245
+ `\nšŸ“Ž [${attachment.fileName || 'attachment'}](beeper-mcp://attachments/${attachmentChatID}/${message.id}/0)`
246
+ : '';
247
+ const reactionsStr = formatReactionsToMarkdown(message.reactions, participantMap);
248
+ const sortKeyLink = chat.localChatID ?
249
+ `([open at sort key](${createOpenLink(ctx?.apiBaseURL || '', chat.localChatID, String(message.sortKey))}))`
250
+ : `(sortKey: ${message.sortKey})`;
251
+ const messageStr = `**${senderName}** (${timeStr}): ${text}${attachmentLink}${reactionsStr} ${sortKeyLink}`;
252
+ chatSections.push(messageStr);
253
+ chatSections.push('');
254
+ }
255
+ // Add date gap indicator when dates are not consecutive
256
+ if (i < sortedDates.length - 1) {
257
+ const nextDateKey = sortedDates[i + 1];
258
+ const currentDate = parseLocalDateKey(dateKey);
259
+ const nextDate = parseLocalDateKey(nextDateKey);
260
+ const dayDiff = differenceInDays(nextDate, currentDate);
261
+ // Only show gap if dates are not consecutive
262
+ if (dayDiff > 1) {
263
+ const gapDays = dayDiff - 1;
264
+ chatSections.push(`*[... ${gapDays} day${gapDays === 1 ? '' : 's'} gap ...]*`);
265
+ chatSections.push('');
266
+ }
267
+ }
268
+ }
269
+ }
270
+ return [summary, '', ...chatSections].join('\n');
271
+ };
272
+ export function asMarkdownContentResult(text) {
273
+ return {
274
+ content: [
275
+ {
276
+ type: 'text',
277
+ text: Array.isArray(text) ? text.join('\n') : text,
278
+ },
279
+ ],
280
+ };
281
+ }
282
+ //# sourceMappingURL=utils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.mjs","sourceRoot":"","sources":["../src/handlers/utils.ts"],"names":[],"mappings":"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"}
package/http.d.mts CHANGED
@@ -1,6 +1,12 @@
1
1
  import express from 'express';
2
2
  import { McpOptions } from "./options.mjs";
3
3
  import { ClientOptions } from "./server.mjs";
4
+ export declare const post: (options: {
5
+ clientOptions: ClientOptions;
6
+ mcpOptions: McpOptions;
7
+ }) => (req: express.Request, res: express.Response) => Promise<void>;
8
+ export declare const get: (req: express.Request, res: express.Response) => Promise<void>;
9
+ export declare const del: (req: express.Request, res: express.Response) => Promise<void>;
4
10
  export declare const streamableHTTPApp: ({ clientOptions, mcpOptions, }: {
5
11
  clientOptions?: ClientOptions;
6
12
  mcpOptions?: McpOptions;
package/http.d.mts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.mts","sourceRoot":"","sources":["src/http.ts"],"names":[],"mappings":"OAMO,OAAO,MAAM,SAAS;OAEtB,EAAE,UAAU,EAAqB;OACjC,EAAE,aAAa,EAA+B;AA4GrD,eAAO,MAAM,iBAAiB,GAAI,gCAG/B;IACD,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,KAAG,OAAO,CAAC,OAWX,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAU,SAAS,UAAU,EAAE,MAAM,MAAM,GAAG,MAAM,GAAG,SAAS,kBAYtG,CAAC"}
1
+ {"version":3,"file":"http.d.mts","sourceRoot":"","sources":["src/http.ts"],"names":[],"mappings":"OAMO,OAAO,MAAM,SAAS;OAEtB,EAAE,UAAU,EAAqB;OACjC,EAAE,aAAa,EAA+B;AAgErD,eAAO,MAAM,IAAI,GACd,SAAS;IAAE,aAAa,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,MAC3D,KAAK,OAAO,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC,QAAQ,kBAUjD,CAAC;AAEJ,eAAO,MAAM,GAAG,GAAU,KAAK,OAAO,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC,QAAQ,kBAQpE,CAAC;AAEF,eAAO,MAAM,GAAG,GAAU,KAAK,OAAO,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC,QAAQ,kBAQpE,CAAC;AAYF,eAAO,MAAM,iBAAiB,GAAI,gCAG/B;IACD,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,KAAG,OAAO,CAAC,OAWX,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAU,SAAS,UAAU,EAAE,MAAM,MAAM,GAAG,MAAM,GAAG,SAAS,kBAYtG,CAAC"}