@leemour/max-cli 0.15.0 → 0.17.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 (249) hide show
  1. package/README.md +56 -37
  2. package/dist/bot/client.d.ts +6 -0
  3. package/dist/bot/client.d.ts.map +1 -1
  4. package/dist/bot/client.js +17 -3
  5. package/dist/bot/client.js.map +1 -1
  6. package/dist/bot/input.d.ts.map +1 -1
  7. package/dist/bot/input.js +7 -4
  8. package/dist/bot/input.js.map +1 -1
  9. package/dist/bot/joins.d.ts +26 -0
  10. package/dist/bot/joins.d.ts.map +1 -0
  11. package/dist/bot/joins.js +56 -0
  12. package/dist/bot/joins.js.map +1 -0
  13. package/dist/bot/keep.d.ts +2 -2
  14. package/dist/bot/keep.d.ts.map +1 -1
  15. package/dist/bot/keep.js +3 -2
  16. package/dist/bot/keep.js.map +1 -1
  17. package/dist/bot/map.d.ts +5 -2
  18. package/dist/bot/map.d.ts.map +1 -1
  19. package/dist/bot/map.js +7 -1
  20. package/dist/bot/map.js.map +1 -1
  21. package/dist/bot/transport.d.ts +4 -0
  22. package/dist/bot/transport.d.ts.map +1 -1
  23. package/dist/bot/transport.js +43 -3
  24. package/dist/bot/transport.js.map +1 -1
  25. package/dist/bot-mcp/instructions.d.ts +9 -0
  26. package/dist/bot-mcp/instructions.d.ts.map +1 -0
  27. package/dist/bot-mcp/instructions.js +22 -0
  28. package/dist/bot-mcp/instructions.js.map +1 -0
  29. package/dist/bot-mcp/server.d.ts +21 -0
  30. package/dist/bot-mcp/server.d.ts.map +1 -0
  31. package/dist/bot-mcp/server.js +213 -0
  32. package/dist/bot-mcp/server.js.map +1 -0
  33. package/dist/bot-mcp/tools.d.ts +27 -0
  34. package/dist/bot-mcp/tools.d.ts.map +1 -0
  35. package/dist/bot-mcp/tools.js +280 -0
  36. package/dist/bot-mcp/tools.js.map +1 -0
  37. package/dist/client.d.ts +43 -10
  38. package/dist/client.d.ts.map +1 -1
  39. package/dist/client.js +207 -31
  40. package/dist/client.js.map +1 -1
  41. package/dist/commands/account.d.ts.map +1 -1
  42. package/dist/commands/account.js +7 -5
  43. package/dist/commands/account.js.map +1 -1
  44. package/dist/commands/backup.js +1 -1
  45. package/dist/commands/backup.js.map +1 -1
  46. package/dist/commands/bot-check.d.ts +11 -0
  47. package/dist/commands/bot-check.d.ts.map +1 -0
  48. package/dist/commands/bot-check.js +206 -0
  49. package/dist/commands/bot-check.js.map +1 -0
  50. package/dist/commands/bot-comments.d.ts.map +1 -1
  51. package/dist/commands/bot-comments.js +2 -1
  52. package/dist/commands/bot-comments.js.map +1 -1
  53. package/dist/commands/bot-context.d.ts +7 -0
  54. package/dist/commands/bot-context.d.ts.map +1 -1
  55. package/dist/commands/bot-context.js +32 -2
  56. package/dist/commands/bot-context.js.map +1 -1
  57. package/dist/commands/bot-mcp.d.ts +3 -0
  58. package/dist/commands/bot-mcp.d.ts.map +1 -0
  59. package/dist/commands/bot-mcp.js +69 -0
  60. package/dist/commands/bot-mcp.js.map +1 -0
  61. package/dist/commands/bot-members.d.ts.map +1 -1
  62. package/dist/commands/bot-members.js +7 -4
  63. package/dist/commands/bot-members.js.map +1 -1
  64. package/dist/commands/bot-people.d.ts +10 -0
  65. package/dist/commands/bot-people.d.ts.map +1 -0
  66. package/dist/commands/bot-people.js +156 -0
  67. package/dist/commands/bot-people.js.map +1 -0
  68. package/dist/commands/bot-reads.d.ts.map +1 -1
  69. package/dist/commands/bot-reads.js +25 -14
  70. package/dist/commands/bot-reads.js.map +1 -1
  71. package/dist/commands/bot-sends.d.ts.map +1 -1
  72. package/dist/commands/bot-sends.js +6 -5
  73. package/dist/commands/bot-sends.js.map +1 -1
  74. package/dist/commands/bot-setup.d.ts.map +1 -1
  75. package/dist/commands/bot-setup.js +5 -4
  76. package/dist/commands/bot-setup.js.map +1 -1
  77. package/dist/commands/bot-updates.d.ts.map +1 -1
  78. package/dist/commands/bot-updates.js +16 -2
  79. package/dist/commands/bot-updates.js.map +1 -1
  80. package/dist/commands/bot.d.ts.map +1 -1
  81. package/dist/commands/bot.js +13 -4
  82. package/dist/commands/bot.js.map +1 -1
  83. package/dist/commands/chats.d.ts.map +1 -1
  84. package/dist/commands/chats.js +15 -30
  85. package/dist/commands/chats.js.map +1 -1
  86. package/dist/commands/check.d.ts.map +1 -1
  87. package/dist/commands/check.js +7 -6
  88. package/dist/commands/check.js.map +1 -1
  89. package/dist/commands/complete.d.ts.map +1 -1
  90. package/dist/commands/complete.js +27 -3
  91. package/dist/commands/complete.js.map +1 -1
  92. package/dist/commands/config.d.ts.map +1 -1
  93. package/dist/commands/config.js +29 -27
  94. package/dist/commands/config.js.map +1 -1
  95. package/dist/commands/contacts.d.ts.map +1 -1
  96. package/dist/commands/contacts.js +21 -0
  97. package/dist/commands/contacts.js.map +1 -1
  98. package/dist/commands/doctor.d.ts.map +1 -1
  99. package/dist/commands/doctor.js +75 -21
  100. package/dist/commands/doctor.js.map +1 -1
  101. package/dist/commands/export.js +1 -1
  102. package/dist/commands/export.js.map +1 -1
  103. package/dist/commands/folders.d.ts.map +1 -1
  104. package/dist/commands/folders.js +3 -2
  105. package/dist/commands/folders.js.map +1 -1
  106. package/dist/commands/inbox.d.ts.map +1 -1
  107. package/dist/commands/inbox.js +1 -1
  108. package/dist/commands/inbox.js.map +1 -1
  109. package/dist/commands/messages.d.ts.map +1 -1
  110. package/dist/commands/messages.js +9 -11
  111. package/dist/commands/messages.js.map +1 -1
  112. package/dist/commands/models.d.ts.map +1 -1
  113. package/dist/commands/models.js +2 -1
  114. package/dist/commands/models.js.map +1 -1
  115. package/dist/commands/paging.d.ts +17 -1
  116. package/dist/commands/paging.d.ts.map +1 -1
  117. package/dist/commands/paging.js +22 -2
  118. package/dist/commands/paging.js.map +1 -1
  119. package/dist/commands/polls.d.ts +3 -0
  120. package/dist/commands/polls.d.ts.map +1 -0
  121. package/dist/commands/polls.js +103 -0
  122. package/dist/commands/polls.js.map +1 -0
  123. package/dist/commands/recipients.d.ts.map +1 -1
  124. package/dist/commands/recipients.js +3 -2
  125. package/dist/commands/recipients.js.map +1 -1
  126. package/dist/commands/review.d.ts.map +1 -1
  127. package/dist/commands/review.js +1 -1
  128. package/dist/commands/review.js.map +1 -1
  129. package/dist/commands/runs.d.ts.map +1 -1
  130. package/dist/commands/runs.js +4 -3
  131. package/dist/commands/runs.js.map +1 -1
  132. package/dist/commands/sends.d.ts.map +1 -1
  133. package/dist/commands/sends.js +3 -2
  134. package/dist/commands/sends.js.map +1 -1
  135. package/dist/config.d.ts +78 -7
  136. package/dist/config.d.ts.map +1 -1
  137. package/dist/config.js +143 -72
  138. package/dist/config.js.map +1 -1
  139. package/dist/diagnose.d.ts +47 -1
  140. package/dist/diagnose.d.ts.map +1 -1
  141. package/dist/diagnose.js +56 -5
  142. package/dist/diagnose.js.map +1 -1
  143. package/dist/domain/map.d.ts +9 -1
  144. package/dist/domain/map.d.ts.map +1 -1
  145. package/dist/domain/map.js +57 -0
  146. package/dist/domain/map.js.map +1 -1
  147. package/dist/domain/models.d.ts +29 -0
  148. package/dist/domain/models.d.ts.map +1 -1
  149. package/dist/domain/models.js.map +1 -1
  150. package/dist/export.d.ts.map +1 -1
  151. package/dist/export.js +2 -1
  152. package/dist/export.js.map +1 -1
  153. package/dist/generated/client.generated.d.ts +1 -0
  154. package/dist/generated/client.generated.d.ts.map +1 -1
  155. package/dist/generated/client.generated.js +1 -0
  156. package/dist/generated/client.generated.js.map +1 -1
  157. package/dist/generated/opcodes.generated.d.ts +1 -0
  158. package/dist/generated/opcodes.generated.d.ts.map +1 -1
  159. package/dist/generated/opcodes.generated.js +1 -0
  160. package/dist/generated/opcodes.generated.js.map +1 -1
  161. package/dist/generated/operations.generated.d.ts +25 -10
  162. package/dist/generated/operations.generated.d.ts.map +1 -1
  163. package/dist/generated/operations.generated.js +2 -1
  164. package/dist/generated/operations.generated.js.map +1 -1
  165. package/dist/mcp/confirm.d.ts +6 -2
  166. package/dist/mcp/confirm.d.ts.map +1 -1
  167. package/dist/mcp/confirm.js +2 -2
  168. package/dist/mcp/confirm.js.map +1 -1
  169. package/dist/mcp/tools.d.ts.map +1 -1
  170. package/dist/mcp/tools.js +83 -17
  171. package/dist/mcp/tools.js.map +1 -1
  172. package/dist/moderation/check.d.ts +15 -9
  173. package/dist/moderation/check.d.ts.map +1 -1
  174. package/dist/moderation/check.js +14 -45
  175. package/dist/moderation/check.js.map +1 -1
  176. package/dist/moderation/rules.d.ts +57 -7
  177. package/dist/moderation/rules.d.ts.map +1 -1
  178. package/dist/moderation/rules.js +13 -11
  179. package/dist/moderation/rules.js.map +1 -1
  180. package/dist/program.d.ts.map +1 -1
  181. package/dist/program.js +11 -3
  182. package/dist/program.js.map +1 -1
  183. package/dist/rendering/messages.d.ts +6 -1
  184. package/dist/rendering/messages.d.ts.map +1 -1
  185. package/dist/rendering/messages.js +24 -3
  186. package/dist/rendering/messages.js.map +1 -1
  187. package/dist/runs/events.d.ts +5 -2
  188. package/dist/runs/events.d.ts.map +1 -1
  189. package/dist/runs/events.js +4 -1
  190. package/dist/runs/events.js.map +1 -1
  191. package/dist/runs/recording.d.ts +11 -0
  192. package/dist/runs/recording.d.ts.map +1 -1
  193. package/dist/runs/recording.js +28 -12
  194. package/dist/runs/recording.js.map +1 -1
  195. package/dist/sends/guard.d.ts +2 -2
  196. package/dist/sends/guard.d.ts.map +1 -1
  197. package/dist/sends/guard.js +2 -1
  198. package/dist/sends/guard.js.map +1 -1
  199. package/dist/sends/journal.d.ts +2 -2
  200. package/dist/sends/journal.d.ts.map +1 -1
  201. package/dist/sends/journal.js.map +1 -1
  202. package/dist/sends/permissions.d.ts.map +1 -1
  203. package/dist/sends/permissions.js +3 -0
  204. package/dist/sends/permissions.js.map +1 -1
  205. package/dist/server/server-connection.d.ts +8 -1
  206. package/dist/server/server-connection.d.ts.map +1 -1
  207. package/dist/server/server-connection.js +27 -1
  208. package/dist/server/server-connection.js.map +1 -1
  209. package/dist/server/server.d.ts.map +1 -1
  210. package/dist/server/server.js +7 -1
  211. package/dist/server/server.js.map +1 -1
  212. package/dist/server/start.d.ts +1 -1
  213. package/dist/server/start.d.ts.map +1 -1
  214. package/dist/server/start.js +5 -3
  215. package/dist/server/start.js.map +1 -1
  216. package/dist/session/store.d.ts +2 -0
  217. package/dist/session/store.d.ts.map +1 -1
  218. package/dist/session/store.js +5 -1
  219. package/dist/session/store.js.map +1 -1
  220. package/dist/spec/index.d.ts.map +1 -1
  221. package/dist/spec/index.js +2 -1
  222. package/dist/spec/index.js.map +1 -1
  223. package/dist/spec/operations/account.d.ts +3 -0
  224. package/dist/spec/operations/account.d.ts.map +1 -1
  225. package/dist/spec/operations/account.js +5 -1
  226. package/dist/spec/operations/account.js.map +1 -1
  227. package/dist/spec/operations/chats.d.ts +4 -3
  228. package/dist/spec/operations/chats.d.ts.map +1 -1
  229. package/dist/spec/operations/chats.js +12 -7
  230. package/dist/spec/operations/chats.js.map +1 -1
  231. package/dist/spec/operations/contacts.d.ts +8 -3
  232. package/dist/spec/operations/contacts.d.ts.map +1 -1
  233. package/dist/spec/operations/contacts.js +26 -5
  234. package/dist/spec/operations/contacts.js.map +1 -1
  235. package/dist/spec/operations/folders.d.ts.map +1 -1
  236. package/dist/spec/operations/folders.js +1 -0
  237. package/dist/spec/operations/folders.js.map +1 -1
  238. package/dist/spec/operations/messages.d.ts +14 -4
  239. package/dist/spec/operations/messages.d.ts.map +1 -1
  240. package/dist/spec/operations/messages.js +30 -3
  241. package/dist/spec/operations/messages.js.map +1 -1
  242. package/dist/spec/operations/uploads.d.ts +1 -1
  243. package/dist/spec/operations/uploads.d.ts.map +1 -1
  244. package/dist/spec/operations/uploads.js +2 -1
  245. package/dist/spec/operations/uploads.js.map +1 -1
  246. package/dist/version.d.ts +1 -1
  247. package/dist/version.js +1 -1
  248. package/package.json +5 -2
  249. package/skills/max-cli/SKILL.md +19 -9
package/README.md CHANGED
@@ -6,8 +6,9 @@
6
6
 
7
7
  Ваши боты [MAX](https://max.ru) и ваш личный аккаунт — в терминале и в ИИ-агентах. `max` —
8
8
  программа для терминала и MCP-сервер: пишите от имени бота через официальный Bot API, а в свои
9
- чаты — сами или руками Claude, Codex, Cursor и других агентов. Для групп, которые вы ведёте, —
10
- вопросы без ответа, новенькие и уборка спама по вашим правилам.
9
+ чаты — сами или руками Claude, Codex, Cursor и других агентов. В группах, которые вы ведёте, —
10
+ следите за непрочитанным и сразу реагируйте на проблемы: спам, чужие ссылки, флуд, вопросы без
11
+ ответа — по вашим правилам.
11
12
 
12
13
  ```sh
13
14
  max sales bot messages send "Команда продаж" "Сборка готова" # от имени бота
@@ -38,6 +39,14 @@ max bot list --check # все боты на
38
39
  - **Файлы, участники, комментарии, кнопки, меню команд, вебхуки.** `messages send --file`,
39
40
  `members`, `admins`, `comments`, `callbacks answer`, `commands`, `webhooks` — у каждой записи тот
40
41
  же список получателей и журнал.
42
+ - **Модерация от имени бота.** `bot chats check` сверяет новое в группе с правилами
43
+ (`bot chats rules`) и удаляет спам и людей — с запретом вернуться по ссылке. Вступления видит
44
+ `bot updates watch`, который печатает всё, что происходит в чатах бота.
45
+ - **Копия переписки на этом компьютере.** `bot people show <кто>` — где человек писал и его личный
46
+ чат с ботом; `bot messages search --from <кто>` и `bot messages between <кто> <кто>` — без
47
+ запросов к MAX.
48
+ - **Бот для агента.** `max sales bot mcp` — MCP-сервер бота: по умолчанию только чтение, запись —
49
+ по флагам `--allow-send`, `--allow-delete`, `--allow-moderate`.
41
50
  - **Любая операция API.** Все операции Bot API доступны как `max bot api <операция>` — с флагами
42
51
  для параметров и JSON-телом, которое сверяется со схемой до отправки.
43
52
  - **Бот не напишет лишнего.** У каждого бота свой список чатов, куда ему можно писать, и журнал
@@ -104,7 +113,8 @@ max messages send "Иван Петров" "Опаздываю на 15 минут
104
113
  Вы: Да.
105
114
  ```
106
115
 
107
- Агент ничего не отправляет без вашего «да», а чтение не ставит отметку «прочитано». Как настроить
116
+ Отправлять агент может, только если вы это разрешили, — а с `--confirm-send` каждое сообщение
117
+ ждёт вашего «да». Чтение не ставит отметку «прочитано». Как настроить
108
118
  агента под каждую задачу — готовые запросы, расписание и ограничения:
109
119
  [docs/recipes.md](docs/recipes.md).
110
120
 
@@ -155,13 +165,14 @@ max chats check "Поход" --allow-dangerous # проверить гр
155
165
  - **Искать.** Сообщения — по тексту всего прочитанного, без подключения к MAX. Чаты и контакты —
156
166
  по части названия или имени.
157
167
  - **Писать.** Текст и разметка, ответы, фото, видео, файлы и голосовые, правка, пересылка, закрепление, реакции,
158
- отложенная отправка, удаление — у себя или у всех.
168
+ опросы, отложенная отправка, удаление — у себя или у всех.
159
169
  - **Вести группы и каналы.** Создать группу, вступить по ссылке, выйти, участники и админы,
160
- название и настройки, заявки на вступление, ссылка-приглашение, папки. Для админа — вопросы без
170
+ название и настройки, ссылка-приглашение, папки. Для админа — вопросы без
161
171
  ответа, кто вступил и вышел, все участники с возрастом аккаунта, правила и проверка группы по ним
162
172
  ([docs/groups.md](docs/groups.md)).
163
- - **Контакты и аккаунт.** Найти человека по номеру, добавить, удалить, импортировать из файла;
164
- изменить профиль; посмотреть и завершить другие сеансы.
173
+ - **Контакты и аккаунт.** Найти человека по номеру, добавить, удалить, переименовать для себя,
174
+ заблокировать, импортировать из файла; изменить профиль и фото; посмотреть и завершить другие
175
+ сеансы.
165
176
  - **Входить удобным способом.** QR-код прямо в терминале, QR-код или SMS через web.max.ru в
166
177
  браузере, или готовый токен.
167
178
 
@@ -194,7 +205,7 @@ max chats check "Поход" --allow-dangerous # проверить гр
194
205
  скрипт сразу понимает, что случилось: нет входа, чат не найден или MAX не ответил вовремя.
195
206
  - **Разбор проблем без вашей переписки.** `--trace` показывает каждый запрос к MAX, чтобы понять,
196
207
  почему команда не сработала. В этой записи нет текстов, имён, телефонов и токена, поэтому её
197
- можно приложить к сообщению об ошибке. Без флага ничего не записывается.
208
+ можно приложить к сообщению об ошибке. Удачный запуск без флага не записывается, неудачный — всегда, тоже без текстов.
198
209
 
199
210
  ## Под заказ
200
211
 
@@ -228,8 +239,10 @@ max chats check "Поход" --allow-dangerous # проверить гр
228
239
  | отправка видео | ✅ | ✅ | — |
229
240
  | отправка кружков | — | ✅ | — |
230
241
  | отправка голосовых | ✅ | ⚠️ в 2.4.1 не проходит ([#102](https://github.com/MaxApiTeam/PyMax/issues/102), [#103](https://github.com/MaxApiTeam/PyMax/issues/103)) | — |
231
- | опросы | — | ✅ | — |
232
- | пароль и двухфакторный вход, фото профиля | — | ✅ | — |
242
+ | опросы: показать, проголосовать, создать, закрыть | ✅ | ✅ | — |
243
+ | фото профиля | ✅ | ✅ | — |
244
+ | вход с облачным паролем | ✅ по QR-коду | ✅ | — |
245
+ | установить или снять облачный пароль | — | ✅ | — |
233
246
 
234
247
  Для бота есть `max bot` — через официальный Bot API, отдельно от личного аккаунта
235
248
  ([docs/bot.md](docs/bot.md)). Таблица выше — про личный аккаунт.
@@ -252,8 +265,7 @@ max chats check "Поход" --allow-dangerous # проверить гр
252
265
 
253
266
  ## Установка
254
267
 
255
- Пакет — **`@leemour/max-cli`**, команда, которую он ставит, — **`max`**. Имя без области занято
256
- чужим пакетом с 2018 года.
268
+ Пакет — **`@leemour/max-cli`**, команда, которую он ставит, — **`max`**.
257
269
 
258
270
  Запустить, ничего не устанавливая:
259
271
 
@@ -297,38 +309,49 @@ export MAX_PROFILE=personal # или на всю сессию оболочки
297
309
 
298
310
  ## Использование
299
311
 
312
+ **Бот пишет в группу, закрепляет объявление и следит за порядком:**
313
+
300
314
  ```sh
301
- max chats list --limit 5
302
- max contacts list # люди, с кем есть личный чат
303
- max messages list 0 --limit 50 # по id чата
304
- max messages list "Иван Петров" # или по части названия
305
- max messages send 0 "текст"
315
+ max sales bot messages send "Команда продаж" "**Сборка готова**" --format markdown --file report.pdf
316
+ max sales bot chats pin "Команда продаж" <mid> # id сообщения — из ответа на send
317
+ max sales bot updates watch # всё, что происходит в чатах бота, по мере прихода
318
+ max sales bot chats rules set "Команда продаж" links delete
319
+ max sales bot chats check "Команда продаж" --dry-run # что нарушает правила — без действий
320
+ max sales bot people show "Иван" # где человек писал и его личный чат с ботом
306
321
  ```
307
322
 
308
- Списки листаются одинаково везде, а история — по времени, потому что она к нему и привязана:
323
+ **Разговор от своего имени:**
309
324
 
310
325
  ```sh
311
- max contacts list --limit 5 --page 2 # шестой по десятый
312
- max contacts list --all --order name # всё, по алфавиту
313
- max messages list 0 --before 2026-09-20T01:00:00Z
326
+ max inbox # непрочитанное во всех чатах, ничего не отмечая
327
+ max messages list "Иван Петров" --limit 20
328
+ max messages send "Иван Петров" "Созвонимся в 15:00?" --reply-to <id>
329
+ max reactions add "Иван Петров" <id> 👍
330
+ max messages send 0 "Позвонить маме" --at 2h # напоминание себе в «Избранное» через два часа
331
+ max review --since 1d # вся переписка за сутки: кто кому что обещал
314
332
  ```
315
333
 
316
- Что делала команда:
334
+ **Группа, которую вы ведёте:**
317
335
 
318
336
  ```sh
319
- max chats list --trace # показать по строке на запрос, ничего не сохраняя
320
- max chats list --record # сохранить, ничего не показывая
321
- max runs list # что делалось, новое сверху
322
- max runs show <id>
337
+ max chats create "Поход" "Аня" "Борис" # создать и позвать людей
338
+ max chats admins add "Поход" "Аня" --can pin,members
339
+ max chats link reset "Поход" # старая ссылка-приглашение перестаёт работать
340
+ max polls create "Поход" "Когда едем?" "Суббота" "Воскресенье"
341
+ max review --chat "Поход" --unanswered # вопросы, на которые сутки никто не ответил
342
+ max chats check "Поход" --dry-run # спам, чужие ссылки, флуд — по вашим правилам
323
343
  ```
324
344
 
325
- Локальная копия — чтобы было чем ответить без сети:
345
+ **Найти и сохранить:**
326
346
 
327
347
  ```sh
328
- max chats list --offline
329
- max cache clear
348
+ max messages search "договор" # по всему прочитанному, без сети
349
+ max backup messages "Проект Альфа" --last 500 --run
350
+ max export messages "Проект Альфа" --format md --output alfa.md
330
351
  ```
331
352
 
353
+ Каждая команда отвечает JSON с `--json` и пишет в журнал, что отправила, — без текстов.
354
+
332
355
  Полностью: [docs/usage.md](docs/usage.md). Каждая команда и каждая опция:
333
356
  [docs/commands.md](docs/commands.md) — эта страница собирается из самой программы, поэтому описать
334
357
  версию, которой не существует, она не может.
@@ -374,13 +397,14 @@ max chats list --json
374
397
 
375
398
  С `--json` команда печатает только данные в JSON, без таблиц, цвета и подсказок. Так же она
376
399
  работает, когда её вывод читает другая программа, — например, в конвейере `max … | jq`. Любой
377
- список приходит в одной и той же форме:
400
+ список — чаты, сообщения, участники, всё у бота — приходит в одной форме:
378
401
 
379
402
  ```json
380
403
  { "items": [ … ], "page": 1, "limit": 20, "hasMore": true }
381
404
  ```
382
405
 
383
- Ошибка приходит отдельно от данных, поэтому её нельзя принять за пустой результат:
406
+ Ошибка приходит отдельно от данных — одной строкой в stderr, а stdout остаётся пустым, поэтому её
407
+ нельзя принять за пустой результат:
384
408
 
385
409
  ```json
386
410
  {"error":{"code":"authentication_error","message":"no session for profile \"default\" — run `max session start`"}}
@@ -445,12 +469,7 @@ pnpm generate # переписать сгенериро
445
469
 
446
470
  ## Дорожная карта
447
471
 
448
- Ближайшее:
449
-
450
- - опросы: показывать при чтении и голосовать;
451
- - локальная копия по желанию — можно работать совсем без неё.
452
-
453
- Весь список — [docs/ROADMAP.md](docs/ROADMAP.md).
472
+ [docs/ROADMAP.md](docs/ROADMAP.md).
454
473
 
455
474
  ## Лицензия
456
475
 
@@ -1,5 +1,6 @@
1
1
  import type { ManifestOperation } from "@leemour/cli-core/codegen";
2
2
  import type { Chat, Message } from "@leemour/cli-messaging";
3
+ import type { PersonFacts } from "@leemour/cli-messaging/store";
3
4
  import type { BotInfo as BotInfoType } from "./generated/types.js";
4
5
  import { type CallInput, type TransportOptions } from "./transport.js";
5
6
  /** Every operation of the committed schema, as the manifest describes it. */
@@ -15,6 +16,11 @@ export declare class BotApiClient {
15
16
  messages(chatId: string, count: number, selfId?: string): Promise<Message[]>;
16
17
  /** A message from any answer — a send's result, an update — decoded the same way as a read. */
17
18
  decodeMessage(raw: unknown, selfId?: string): Message;
19
+ /**
20
+ * Who wrote the messages decoded since the last call, with the username and bot flag a `Message`
21
+ * has no field for — for the local copy.
22
+ */
23
+ takeSenders(): PersonFacts[];
18
24
  call(operation: ManifestOperation, input: CallInput): Promise<unknown>;
19
25
  }
20
26
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/bot/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClE,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAI3D,OAAO,KAAK,EAAE,OAAO,IAAI,WAAW,EAAyB,MAAM,sBAAsB,CAAA;AAEzF,OAAO,EAAgB,KAAK,SAAS,EAAa,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAE/F,6EAA6E;AAC7E,eAAO,MAAM,aAAa,EAAE,SAAS,iBAAiB,EAAe,CAAA;AAUrE,wEAAwE;AACxE,qBAAa,YAAY;;IAGvB,YAAY,OAAO,EAAE,gBAAgB,EAEpC;IAEK,EAAE,IAAI,OAAO,CAAC,WAAW,CAAC,CAU/B;IAEK,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGxC;IAEK,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGlE;IAED,mFAAmF;IAC7E,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAKjF;IAED,+FAA+F;IAC/F,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAEpD;IAED,IAAI,CAAC,SAAS,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAErE;CAyCF"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/bot/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClE,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAI/D,OAAO,KAAK,EAAE,OAAO,IAAI,WAAW,EAAyB,MAAM,sBAAsB,CAAA;AAEzF,OAAO,EAAgB,KAAK,SAAS,EAAa,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAE/F,6EAA6E;AAC7E,eAAO,MAAM,aAAa,EAAE,SAAS,iBAAiB,EAAe,CAAA;AAUrE,wEAAwE;AACxE,qBAAa,YAAY;;IAIvB,YAAY,OAAO,EAAE,gBAAgB,EAEpC;IAEK,EAAE,IAAI,OAAO,CAAC,WAAW,CAAC,CAU/B;IAEK,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGxC;IAEK,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGlE;IAED,mFAAmF;IAC7E,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAKjF;IAED,+FAA+F;IAC/F,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAEpD;IAED;;;OAGG;IACH,WAAW,IAAI,WAAW,EAAE,CAI3B;IAED,IAAI,CAAC,SAAS,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAErE;CA6CF"}
@@ -2,7 +2,7 @@ import { CliError } from "@leemour/cli-core";
2
2
  import * as v from "valibot";
3
3
  import { operations } from "./generated/manifest.js";
4
4
  import { BotInfo, Chat as ChatSchema, Message as MessageSchema } from "./generated/schemas.js";
5
- import { toChat, toMessage } from "./map.js";
5
+ import { toChat, toMessage, toPerson } from "./map.js";
6
6
  import { BotTransport, plainJson } from "./transport.js";
7
7
  /** Every operation of the committed schema, as the manifest describes it. */
8
8
  export const botOperations = operations;
@@ -16,6 +16,7 @@ const required = (id) => {
16
16
  /** The one door to the Bot API: generated operations stay behind it. */
17
17
  export class BotApiClient {
18
18
  #transport;
19
+ #senders = new Map();
19
20
  constructor(options) {
20
21
  this.#transport = new BotTransport(options);
21
22
  }
@@ -49,6 +50,15 @@ export class BotApiClient {
49
50
  decodeMessage(raw, selfId) {
50
51
  return this.#message(raw, selfId);
51
52
  }
53
+ /**
54
+ * Who wrote the messages decoded since the last call, with the username and bot flag a `Message`
55
+ * has no field for — for the local copy.
56
+ */
57
+ takeSenders() {
58
+ const senders = [...this.#senders.values()];
59
+ this.#senders.clear();
60
+ return senders;
61
+ }
52
62
  call(operation, input) {
53
63
  return this.#transport.call(operation, input);
54
64
  }
@@ -68,8 +78,12 @@ export class BotApiClient {
68
78
  */
69
79
  #message(raw, selfId) {
70
80
  const parsed = v.safeParse(MessageSchema, raw);
71
- if (parsed.success)
72
- return toMessage(parsed.output, selfId);
81
+ if (parsed.success) {
82
+ const message = parsed.output;
83
+ if (message.sender)
84
+ this.#senders.set(message.sender.user_id, toPerson(message.sender));
85
+ return toMessage(message, selfId);
86
+ }
73
87
  const loose = plainJson(raw);
74
88
  return {
75
89
  id: String(loose.body?.mid ?? "unknown"),
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/bot/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/bot/client.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/bot/input.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAK/F,eAAO,MAAM,MAAM,SAAU,MAAM,KAAG,MAIpB,CAAA;AAElB,eAAO,MAAM,SAAS,SAAU,MAAM,KAAG,MAC0C,CAAA;AAWnF,eAAO,MAAM,cAAc,SAAU,MAAM,QAAQ,UAAU,OAAO,MAAM,KAAG,MAAM,GAAG,SA2BrF,CAAA;AAED,eAAO,MAAM,QAAQ,YAAa;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,KAAG,MAAM,GAAG,SAOjF,CAAA;AAED,eAAO,MAAM,SAAS,cAAe,iBAAiB,QAAQ,MAAM,GAAG,SAAS,KAAG,MAAM,GAAG,SAkC3F,CAAA"}
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/bot/input.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAQ/F,eAAO,MAAM,MAAM,SAAU,MAAM,KAAG,MAKpB,CAAA;AAElB,eAAO,MAAM,SAAS,SAAU,MAAM,KAAG,MAC0C,CAAA;AAWnF,eAAO,MAAM,cAAc,SAAU,MAAM,QAAQ,UAAU,OAAO,MAAM,KAAG,MAAM,GAAG,SA2BrF,CAAA;AAED,eAAO,MAAM,QAAQ,YAAa;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,KAAG,MAAM,GAAG,SAOjF,CAAA;AAED,eAAO,MAAM,SAAS,cAAe,iBAAiB,QAAQ,MAAM,GAAG,SAAS,KAAG,MAAM,GAAG,SAkC3F,CAAA"}
package/dist/bot/input.js CHANGED
@@ -4,10 +4,13 @@ import { identifier } from "@leemour/cli-core/codegen";
4
4
  import { LosslessNumber, parse } from "lossless-json";
5
5
  import * as v from "valibot";
6
6
  import { schemas } from "./generated/schemas.js";
7
- export const flagOf = (name) => name
8
- .replace(/_/g, "-")
9
- .replace(/([a-z0-9])([A-Z])/g, "$1-$2")
10
- .toLowerCase();
7
+ /** `--timeout` is the program's own deadline: a parameter spelled like it would never reach MAX (`BUG-61`). */
8
+ const RENAMED = { timeout: "poll-timeout" };
9
+ export const flagOf = (name) => RENAMED[name] ??
10
+ name
11
+ .replace(/_/g, "-")
12
+ .replace(/([a-z0-9])([A-Z])/g, "$1-$2")
13
+ .toLowerCase();
11
14
  export const optionKey = (name) => flagOf(name).replace(/-([a-z0-9])/g, (_, letter) => letter.toUpperCase());
12
15
  const DIGITS = /^-?\d+$/;
13
16
  /** A flag's text as the JSON value it stands for, so a generated schema can judge it. */
@@ -1 +1 @@
1
- {"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/bot/input.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/bot/input.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export interface JoinEntry {
2
+ chatId: string;
3
+ userId: string;
4
+ name: string | null;
5
+ event: "add" | "remove";
6
+ /** ms since 1970, as the update's `timestamp`. */
7
+ at: number;
8
+ }
9
+ /**
10
+ * **Who joined and left, as `bot updates watch` saw it** (`NEED-338` «C»). MAX hands each update to
11
+ * one reader only, so `bot chats check` cannot read joins itself; `watch` keeps them here instead.
12
+ * State, not cache: a lost entry is a join the check never judges.
13
+ */
14
+ export declare class JoinLog {
15
+ readonly path: string;
16
+ constructor(path: string);
17
+ /** Beside the marker of `updates watch`, which writes it. */
18
+ static for(profile: string, env?: NodeJS.ProcessEnv): JoinLog;
19
+ read(): JoinEntry[];
20
+ /** Whether the log has anything at all — none means `watch` never ran for this bot here. */
21
+ kept(): boolean;
22
+ add(entries: JoinEntry[], now?: number): void;
23
+ }
24
+ /** `user_added` and `user_removed` from a batch of raw updates; everything else is not a join. */
25
+ export declare const joinsOf: (updates: unknown[]) => JoinEntry[];
26
+ //# sourceMappingURL=joins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"joins.d.ts","sourceRoot":"","sources":["../../src/bot/joins.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,KAAK,EAAE,KAAK,GAAG,QAAQ,CAAA;IACvB,kDAAkD;IAClD,EAAE,EAAE,MAAM,CAAA;CACX;AAKD;;;;GAIG;AACH,qBAAa,OAAO;IACN,QAAQ,CAAC,IAAI,EAAE,MAAM;IAAjC,YAAqB,IAAI,EAAE,MAAM,EAAI;IAErC,6DAA6D;IAC7D,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAEzE;IAED,IAAI,IAAI,SAAS,EAAE,CAIlB;IAED,4FAA4F;IAC5F,IAAI,IAAI,OAAO,CAEd;IAED,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,GAAG,SAAa,GAAG,IAAI,CAIhD;CACF;AAKD,kGAAkG;AAClG,eAAO,MAAM,OAAO,YAAa,OAAO,EAAE,KAAG,SAAS,EAgBlD,CAAA"}
@@ -0,0 +1,56 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { writeSecurely } from "@leemour/cli-core";
4
+ import { botsDirectory } from "./registry.js";
5
+ /** Past this, a join is too old for any check; the log does not grow for ever. */
6
+ const KEEP_MS = 30 * 86_400_000;
7
+ /**
8
+ * **Who joined and left, as `bot updates watch` saw it** (`NEED-338` «C»). MAX hands each update to
9
+ * one reader only, so `bot chats check` cannot read joins itself; `watch` keeps them here instead.
10
+ * State, not cache: a lost entry is a join the check never judges.
11
+ */
12
+ export class JoinLog {
13
+ path;
14
+ constructor(path) {
15
+ this.path = path;
16
+ }
17
+ /** Beside the marker of `updates watch`, which writes it. */
18
+ static for(profile, env = process.env) {
19
+ return new JoinLog(join(botsDirectory(env), "joins", `${profile}.json`));
20
+ }
21
+ read() {
22
+ if (!existsSync(this.path))
23
+ return [];
24
+ const parsed = JSON.parse(readFileSync(this.path, "utf8"));
25
+ return Array.isArray(parsed.joins) ? parsed.joins : [];
26
+ }
27
+ /** Whether the log has anything at all — none means `watch` never ran for this bot here. */
28
+ kept() {
29
+ return existsSync(this.path);
30
+ }
31
+ add(entries, now = Date.now()) {
32
+ if (entries.length === 0 && this.kept())
33
+ return;
34
+ const joins = [...this.read(), ...entries].filter((entry) => now - entry.at < KEEP_MS);
35
+ writeSecurely(this.path, `${JSON.stringify({ joins })}\n`, 0o600);
36
+ }
37
+ }
38
+ const nameOf = (user) => [user.first_name, user.last_name].filter((part) => typeof part === "string" && part !== "").join(" ") || null;
39
+ /** `user_added` and `user_removed` from a batch of raw updates; everything else is not a join. */
40
+ export const joinsOf = (updates) => updates.flatMap((raw) => {
41
+ const update = (raw ?? {});
42
+ const event = update.update_type === "user_added" ? "add" : update.update_type === "user_removed" ? "remove" : undefined;
43
+ const user = (update.user ?? {});
44
+ if (!event || update.chat_id === undefined || user.user_id === undefined)
45
+ return [];
46
+ return [
47
+ {
48
+ chatId: String(update.chat_id),
49
+ userId: String(user.user_id),
50
+ name: nameOf(user),
51
+ event,
52
+ at: typeof update.timestamp === "number" ? update.timestamp : Date.now(),
53
+ },
54
+ ];
55
+ });
56
+ //# sourceMappingURL=joins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"joins.js","sourceRoot":"","sources":["../../src/bot/joins.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  import type { Chat, Message } from "@leemour/cli-messaging";
2
- import { type AccountKey, type IngestedVia, type MessageStore } from "@leemour/cli-messaging/store";
2
+ import { type AccountKey, type IngestedVia, type MessageStore, type PersonFacts } from "@leemour/cli-messaging/store";
3
3
  import type { ChatRegistry } from "./registry.js";
4
4
  /** How a bot's messages are told apart from a personal account's in the shared store and its locators. */
5
5
  export declare const PROVIDER = "max-bot";
6
6
  export declare const accountOf: (botId: string) => AccountKey;
7
- export declare const keep: (botId: string, messages: readonly Message[], via: IngestedVia, warn: (message: string) => void) => Promise<boolean>;
7
+ export declare const keep: (botId: string, messages: readonly Message[], via: IngestedVia, warn: (message: string) => void, senders?: readonly PersonFacts[]) => Promise<boolean>;
8
8
  /**
9
9
  * Only a chat MAX has just described in full: the store replaces a title it is not given
10
10
  * (`RISK-53`), and the partial facts stay in the registry, which merges them.
@@ -1 +1 @@
1
- {"version":3,"file":"keep.d.ts","sourceRoot":"","sources":["../../src/bot/keep.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,YAAY,EAAa,MAAM,8BAA8B,CAAA;AAC9G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD,0GAA0G;AAC1G,eAAO,MAAM,QAAQ,YAAY,CAAA;AAIjC,eAAO,MAAM,SAAS,UAAW,MAAM,KAAG,UAAsD,CAAA;AAkChG,eAAO,MAAM,IAAI,UACR,MAAM,YACH,SAAS,OAAO,EAAE,OACvB,WAAW,QACV,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,KAC9B,OAAO,CAAC,OAAO,CASjB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,QAAQ,UAAiB,MAAM,GAAG,SAAS,QAAQ,IAAI,QAAQ,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,kBAEpG,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,MAAM,UACV,MAAM,YACH,SAAS;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAAE,QACpD,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,KAC9B,OAAO,CAAC,OAAO,CAMjB,CAAA;AAED,qGAAqG;AACrG,eAAO,MAAM,QAAQ,aAAoB,YAAY,QAAQ,OAAO,QAAQ,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,kBAKpG,CAAA;AAED,yGAAyG;AACzG,eAAO,MAAM,SAAS,GAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,KAAK,CAAC,KAAG,OAAO,CAAC,CAAC,CAY9E,CAAA"}
1
+ {"version":3,"file":"keep.d.ts","sourceRoot":"","sources":["../../src/bot/keep.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EACL,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,YAAY,EAEjB,KAAK,WAAW,EACjB,MAAM,8BAA8B,CAAA;AACrC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD,0GAA0G;AAC1G,eAAO,MAAM,QAAQ,YAAY,CAAA;AAIjC,eAAO,MAAM,SAAS,UAAW,MAAM,KAAG,UAAsD,CAAA;AAkChG,eAAO,MAAM,IAAI,UACR,MAAM,YACH,SAAS,OAAO,EAAE,OACvB,WAAW,QACV,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,YACtB,SAAS,WAAW,EAAE,KAC9B,OAAO,CAAC,OAAO,CAUjB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,QAAQ,UAAiB,MAAM,GAAG,SAAS,QAAQ,IAAI,QAAQ,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,kBAEpG,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,MAAM,UACV,MAAM,YACH,SAAS;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAAE,QACpD,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,KAC9B,OAAO,CAAC,OAAO,CAMjB,CAAA;AAED,qGAAqG;AACrG,eAAO,MAAM,QAAQ,aAAoB,YAAY,QAAQ,OAAO,QAAQ,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,kBAKpG,CAAA;AAED,yGAAyG;AACzG,eAAO,MAAM,SAAS,GAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,KAAK,CAAC,KAAG,OAAO,CAAC,CAAC,CAY9E,CAAA"}
package/dist/bot/keep.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { CliError } from "@leemour/cli-core";
2
- import { openStore } from "@leemour/cli-messaging/store";
2
+ import { openStore, } from "@leemour/cli-messaging/store";
3
3
  /** How a bot's messages are told apart from a personal account's in the shared store and its locators. */
4
4
  export const PROVIDER = "max-bot";
5
5
  const CHAT_ID = /^-?\d+$/;
@@ -36,7 +36,7 @@ const quietly = async (write, warn) => {
36
36
  store?.close();
37
37
  }
38
38
  };
39
- export const keep = async (botId, messages, via, warn) => {
39
+ export const keep = async (botId, messages, via, warn, senders = []) => {
40
40
  const byChat = new Map();
41
41
  for (const message of messages.filter(storable)) {
42
42
  byChat.set(message.chatId, [...(byChat.get(message.chatId) ?? []), message]);
@@ -46,6 +46,7 @@ export const keep = async (botId, messages, via, warn) => {
46
46
  return quietly((store) => {
47
47
  for (const [chatId, chatMessages] of byChat)
48
48
  store.saveMessages(accountOf(botId), chatId, chatMessages, { via });
49
+ store.savePeople(PROVIDER, [...senders]);
49
50
  }, warn);
50
51
  };
51
52
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"keep.js","sourceRoot":"","sources":["../../src/bot/keep.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"keep.js","sourceRoot":"","sources":["../../src/bot/keep.ts"],"names":[],"mappings":"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"}
package/dist/bot/map.d.ts CHANGED
@@ -1,5 +1,8 @@
1
- import type { Chat, Message } from "@leemour/cli-messaging";
2
- import type { Chat as BotChat, Message as BotMessage } from "./generated/types.js";
1
+ import type { Chat, ChatKind, Message } from "@leemour/cli-messaging";
2
+ import type { PersonFacts } from "@leemour/cli-messaging/store";
3
+ import type { Chat as BotChat, Message as BotMessage, User } from "./generated/types.js";
4
+ export declare const KINDS: Record<string, ChatKind>;
5
+ export declare const toPerson: (user: User) => PersonFacts;
3
6
  /**
4
7
  * A direct chat is addressed by the other person's user id in the Bot API; `user:<id>` keeps it
5
8
  * apart from a group's chat id, which is a different number space.
@@ -1 +1 @@
1
- {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/bot/map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,IAAI,EAAY,OAAO,EAAiB,MAAM,wBAAwB,CAAA;AAChG,OAAO,KAAK,EAEV,IAAI,IAAI,OAAO,EACf,OAAO,IAAI,UAAU,EAGtB,MAAM,sBAAsB,CAAA;AA4C7B;;;GAGG;AACH,eAAO,MAAM,OAAO,cAAe,UAAU,CAAC,WAAW,CAAC,KAAG,MACuB,CAAA;AAEpF,qGAAqG;AACrG,eAAO,MAAM,SAAS,YAAa,UAAU,WAAW,MAAM,KAAG,OAmBhE,CAAA;AAED,eAAO,MAAM,MAAM,SAAU,OAAO,KAAG,IAQrC,CAAA"}
1
+ {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/bot/map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAiB,MAAM,wBAAwB,CAAA;AAChG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC/D,OAAO,KAAK,EAEV,IAAI,IAAI,OAAO,EACf,OAAO,IAAI,UAAU,EAErB,IAAI,EACL,MAAM,sBAAsB,CAAA;AAG7B,eAAO,MAAM,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAA2D,CAAA;AAQtG,eAAO,MAAM,QAAQ,SAAU,IAAI,KAAG,WAKpC,CAAA;AAmCF;;;GAGG;AACH,eAAO,MAAM,OAAO,cAAe,UAAU,CAAC,WAAW,CAAC,KAAG,MACuB,CAAA;AAEpF,qGAAqG;AACrG,eAAO,MAAM,SAAS,YAAa,UAAU,WAAW,MAAM,KAAG,OAmBhE,CAAA;AAED,eAAO,MAAM,MAAM,SAAU,OAAO,KAAG,IAQrC,CAAA"}
package/dist/bot/map.js CHANGED
@@ -1,7 +1,13 @@
1
1
  const PROVIDER_KINDS = { image: "photo", audio: "voice" };
2
- const KINDS = { dialog: "dialog", chat: "group", channel: "channel" };
2
+ export const KINDS = { dialog: "dialog", chat: "group", channel: "channel" };
3
3
  const iso = (milliseconds) => milliseconds === undefined || milliseconds === null ? null : new Date(Number(milliseconds)).toISOString();
4
4
  const nameOf = (user) => user ? [user.first_name, user.last_name].filter(Boolean).join(" ") || null : null;
5
+ export const toPerson = (user) => ({
6
+ id: user.user_id,
7
+ name: nameOf(user),
8
+ username: user.username ?? null,
9
+ isBot: user.is_bot,
10
+ });
5
11
  const attachmentOf = (attachment) => {
6
12
  if (attachment.type === "inline_keyboard")
7
13
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/bot/map.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/bot/map.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { type RetryConfig, type SleepLike } from "@leemour/cli-core";
2
2
  import type { ManifestOperation } from "@leemour/cli-core/codegen";
3
3
  import { type FetchLike } from "@leemour/cli-core/http";
4
+ import { type DiagnosticEvent } from "../runs/events.js";
4
5
  export declare const BOT_API_URL = "https://platform-api2.max.ru";
5
6
  /**
6
7
  * Adds the Минцифры root to this process's trusted roots, and nowhere else (`NEED-293`). Node
@@ -22,6 +23,9 @@ export interface TransportOptions {
22
23
  sleep?: SleepLike;
23
24
  random?: () => number;
24
25
  signal?: AbortSignal;
26
+ /** `--trace` and the run log; one request and one response per HTTP attempt. */
27
+ events?: (event: DiagnosticEvent) => void;
28
+ now?: () => number;
25
29
  }
26
30
  /**
27
31
  * The official Bot API over HTTP. Speaks for one token, writes nothing to stdout or stderr, and
@@ -1 +1 @@
1
- {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/bot/transport.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,WAAW,EAEhB,KAAK,SAAS,EAEf,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClE,OAAO,EAAE,KAAK,SAAS,EAAgC,MAAM,wBAAwB,CAAA;AAKrF,eAAO,MAAM,WAAW,iCAAiC,CAAA;AAQzD;;;GAGG;AACH,eAAO,MAAM,QAAQ,QAAO,SAU3B,CAAA;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACvC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC,CAAC,CAAA;IAC5D,0FAA0F;IAC1F,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,MAAM,CAAA;IACrB,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAeD;;;GAGG;AACH,qBAAa,YAAY;;IAUvB,YAAY,OAAO,EAAE,gBAAgB,EASpC;IAED,wFAAwF;IAClF,IAAI,CAAC,SAAS,EAAE,iBAAiB,EAAE,KAAK,GAAE,SAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAyBhF;CAwHF;AAED;;;GAGG;AACH,eAAO,MAAM,SAAS,UAAW,OAAO,KAAG,OAKxC,CAAA"}
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/bot/transport.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,WAAW,EAEhB,KAAK,SAAS,EAEf,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClE,OAAO,EAAE,KAAK,SAAS,EAAgC,MAAM,wBAAwB,CAAA;AAErF,OAAO,EAAE,KAAK,eAAe,EAAkC,MAAM,mBAAmB,CAAA;AAIxF,eAAO,MAAM,WAAW,iCAAiC,CAAA;AAQzD;;;GAGG;AACH,eAAO,MAAM,QAAQ,QAAO,SAU3B,CAAA;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACvC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC,CAAC,CAAA;IAC5D,0FAA0F;IAC1F,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,MAAM,CAAA;IACrB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,gFAAgF;IAChF,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAA;IACzC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAuBD;;;GAGG;AACH,qBAAa,YAAY;;IAYvB,YAAY,OAAO,EAAE,gBAAgB,EAWpC;IAED,wFAAwF;IAClF,IAAI,CAAC,SAAS,EAAE,iBAAiB,EAAE,KAAK,GAAE,SAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAgChF;CA8HF;AAED;;;GAGG;AACH,eAAO,MAAM,SAAS,UAAW,OAAO,KAAG,OAKxC,CAAA"}