@wirecat/max-cli 0.49.0 → 0.51.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 (361) hide show
  1. package/README.md +9 -9
  2. package/dist/adapter/max-adapter.d.ts +3 -3
  3. package/dist/adapter/max-adapter.d.ts.map +1 -1
  4. package/dist/adapter/max-adapter.js +2 -2
  5. package/dist/adapter/max-adapter.js.map +1 -1
  6. package/dist/app.d.ts +1 -1
  7. package/dist/app.d.ts.map +1 -1
  8. package/dist/app.js +2 -0
  9. package/dist/app.js.map +1 -1
  10. package/dist/bin/max.js +2 -2
  11. package/dist/bin/max.js.map +1 -1
  12. package/dist/bot/adapter.d.ts +2 -2
  13. package/dist/bot/adapter.d.ts.map +1 -1
  14. package/dist/bot/adapter.js +1 -1
  15. package/dist/bot/adapter.js.map +1 -1
  16. package/dist/bot/auth.d.ts +2 -2
  17. package/dist/bot/auth.d.ts.map +1 -1
  18. package/dist/bot/auth.js +2 -2
  19. package/dist/bot/auth.js.map +1 -1
  20. package/dist/bot/client.d.ts +2 -2
  21. package/dist/bot/client.d.ts.map +1 -1
  22. package/dist/bot/input.d.ts +1 -1
  23. package/dist/bot/input.d.ts.map +1 -1
  24. package/dist/bot/input.js +1 -1
  25. package/dist/bot/input.js.map +1 -1
  26. package/dist/bot/keep.d.ts +2 -2
  27. package/dist/bot/keep.d.ts.map +1 -1
  28. package/dist/bot/keep.js +1 -1
  29. package/dist/bot/keep.js.map +1 -1
  30. package/dist/bot/map.d.ts +2 -2
  31. package/dist/bot/map.d.ts.map +1 -1
  32. package/dist/bot/mcp-tools.d.ts +1 -1
  33. package/dist/bot/mcp-tools.d.ts.map +1 -1
  34. package/dist/bot/mcp-tools.js +1 -1
  35. package/dist/bot/mcp-tools.js.map +1 -1
  36. package/dist/bot/permissions.d.ts +1 -1
  37. package/dist/bot/permissions.d.ts.map +1 -1
  38. package/dist/bot/registry.d.ts +3 -3
  39. package/dist/bot/registry.d.ts.map +1 -1
  40. package/dist/bot/registry.js +2 -2
  41. package/dist/bot/registry.js.map +1 -1
  42. package/dist/bot/transport.d.ts +1 -1
  43. package/dist/bot/transport.d.ts.map +1 -1
  44. package/dist/bot/transport.js +12 -7
  45. package/dist/bot/transport.js.map +1 -1
  46. package/dist/bot/uploads.d.ts +1 -1
  47. package/dist/bot/uploads.d.ts.map +1 -1
  48. package/dist/bot/uploads.js +1 -1
  49. package/dist/bot/uploads.js.map +1 -1
  50. package/dist/client/account.d.ts +39 -0
  51. package/dist/client/account.d.ts.map +1 -0
  52. package/dist/client/account.js +92 -0
  53. package/dist/client/account.js.map +1 -0
  54. package/dist/client/chat-members.d.ts +27 -0
  55. package/dist/client/chat-members.d.ts.map +1 -0
  56. package/dist/client/chat-members.js +73 -0
  57. package/dist/client/chat-members.js.map +1 -0
  58. package/dist/client/chat-reads.d.ts +57 -0
  59. package/dist/client/chat-reads.d.ts.map +1 -0
  60. package/dist/client/chat-reads.js +160 -0
  61. package/dist/client/chat-reads.js.map +1 -0
  62. package/dist/client/chat-writes.d.ts +111 -0
  63. package/dist/client/chat-writes.d.ts.map +1 -0
  64. package/dist/client/chat-writes.js +240 -0
  65. package/dist/client/chat-writes.js.map +1 -0
  66. package/dist/client/contacts.d.ts +39 -0
  67. package/dist/client/contacts.d.ts.map +1 -0
  68. package/dist/client/contacts.js +93 -0
  69. package/dist/client/contacts.js.map +1 -0
  70. package/dist/client/delivery.d.ts +35 -0
  71. package/dist/client/delivery.d.ts.map +1 -0
  72. package/dist/client/delivery.js +62 -0
  73. package/dist/client/delivery.js.map +1 -0
  74. package/dist/client/folders.d.ts +20 -0
  75. package/dist/client/folders.d.ts.map +1 -0
  76. package/dist/client/folders.js +57 -0
  77. package/dist/client/folders.js.map +1 -0
  78. package/dist/client/history.d.ts +41 -0
  79. package/dist/client/history.d.ts.map +1 -0
  80. package/dist/client/history.js +111 -0
  81. package/dist/client/history.js.map +1 -0
  82. package/dist/client/live.d.ts +38 -0
  83. package/dist/client/live.d.ts.map +1 -0
  84. package/dist/client/live.js +182 -0
  85. package/dist/client/live.js.map +1 -0
  86. package/dist/client/login.d.ts +11 -0
  87. package/dist/client/login.d.ts.map +1 -0
  88. package/dist/client/login.js +8 -0
  89. package/dist/client/login.js.map +1 -0
  90. package/dist/client/message-reads.d.ts +53 -0
  91. package/dist/client/message-reads.d.ts.map +1 -0
  92. package/dist/client/message-reads.js +164 -0
  93. package/dist/client/message-reads.js.map +1 -0
  94. package/dist/client/message-writes.d.ts +84 -0
  95. package/dist/client/message-writes.d.ts.map +1 -0
  96. package/dist/client/message-writes.js +254 -0
  97. package/dist/client/message-writes.js.map +1 -0
  98. package/dist/client/people.d.ts +31 -0
  99. package/dist/client/people.d.ts.map +1 -0
  100. package/dist/client/people.js +130 -0
  101. package/dist/client/people.js.map +1 -0
  102. package/dist/client/polls.d.ts +53 -0
  103. package/dist/client/polls.d.ts.map +1 -0
  104. package/dist/client/polls.js +141 -0
  105. package/dist/client/polls.js.map +1 -0
  106. package/dist/client/read-policy.d.ts +2 -0
  107. package/dist/client/read-policy.d.ts.map +1 -0
  108. package/dist/client/read-policy.js +34 -0
  109. package/dist/client/read-policy.js.map +1 -0
  110. package/dist/client/request.d.ts +21 -0
  111. package/dist/client/request.d.ts.map +1 -0
  112. package/dist/client/request.js +69 -0
  113. package/dist/client/request.js.map +1 -0
  114. package/dist/client/session.d.ts +50 -0
  115. package/dist/client/session.d.ts.map +1 -0
  116. package/dist/client/session.js +293 -0
  117. package/dist/client/session.js.map +1 -0
  118. package/dist/client/stickers.d.ts +12 -0
  119. package/dist/client/stickers.d.ts.map +1 -0
  120. package/dist/client/stickers.js +29 -0
  121. package/dist/client/stickers.js.map +1 -0
  122. package/dist/client/types.d.ts +54 -0
  123. package/dist/client/types.d.ts.map +1 -0
  124. package/dist/client/types.js +2 -0
  125. package/dist/client/types.js.map +1 -0
  126. package/dist/client/upload-transport.d.ts +15 -0
  127. package/dist/client/upload-transport.d.ts.map +1 -0
  128. package/dist/client/upload-transport.js +48 -0
  129. package/dist/client/upload-transport.js.map +1 -0
  130. package/dist/client/uploads.d.ts +15 -0
  131. package/dist/client/uploads.d.ts.map +1 -0
  132. package/dist/client/uploads.js +19 -0
  133. package/dist/client/uploads.js.map +1 -0
  134. package/dist/client/values.d.ts +120 -0
  135. package/dist/client/values.d.ts.map +1 -0
  136. package/dist/client/values.js +186 -0
  137. package/dist/client/values.js.map +1 -0
  138. package/dist/client/writes.d.ts +40 -0
  139. package/dist/client/writes.d.ts.map +1 -0
  140. package/dist/client/writes.js +186 -0
  141. package/dist/client/writes.js.map +1 -0
  142. package/dist/client.d.ts +29 -644
  143. package/dist/client.d.ts.map +1 -1
  144. package/dist/client.js +267 -2828
  145. package/dist/client.js.map +1 -1
  146. package/dist/commands/account.js +1 -1
  147. package/dist/commands/account.js.map +1 -1
  148. package/dist/commands/bot-comments.d.ts.map +1 -1
  149. package/dist/commands/bot-comments.js +9 -5
  150. package/dist/commands/bot-comments.js.map +1 -1
  151. package/dist/commands/bot-context.d.ts +2 -2
  152. package/dist/commands/bot-context.d.ts.map +1 -1
  153. package/dist/commands/bot-context.js +2 -2
  154. package/dist/commands/bot-context.js.map +1 -1
  155. package/dist/commands/bot-members.d.ts +1 -1
  156. package/dist/commands/bot-members.d.ts.map +1 -1
  157. package/dist/commands/bot-members.js +14 -5
  158. package/dist/commands/bot-members.js.map +1 -1
  159. package/dist/commands/bot-messenger.d.ts +1 -1
  160. package/dist/commands/bot-messenger.d.ts.map +1 -1
  161. package/dist/commands/bot-messenger.js +2 -2
  162. package/dist/commands/bot-messenger.js.map +1 -1
  163. package/dist/commands/bot-reads.js +1 -1
  164. package/dist/commands/bot-reads.js.map +1 -1
  165. package/dist/commands/bot-sends.js +3 -3
  166. package/dist/commands/bot-sends.js.map +1 -1
  167. package/dist/commands/bot-setup.d.ts.map +1 -1
  168. package/dist/commands/bot-setup.js +2 -1
  169. package/dist/commands/bot-setup.js.map +1 -1
  170. package/dist/commands/bot.js +1 -1
  171. package/dist/commands/bot.js.map +1 -1
  172. package/dist/commands/calls.js +1 -1
  173. package/dist/commands/calls.js.map +1 -1
  174. package/dist/commands/chats.js +1 -1
  175. package/dist/commands/chats.js.map +1 -1
  176. package/dist/commands/commands.js +1 -1
  177. package/dist/commands/commands.js.map +1 -1
  178. package/dist/commands/complete.js +1 -1
  179. package/dist/commands/complete.js.map +1 -1
  180. package/dist/commands/config.d.ts.map +1 -1
  181. package/dist/commands/config.js +29 -27
  182. package/dist/commands/config.js.map +1 -1
  183. package/dist/commands/contacts.js +1 -1
  184. package/dist/commands/contacts.js.map +1 -1
  185. package/dist/commands/context.d.ts +2 -2
  186. package/dist/commands/context.d.ts.map +1 -1
  187. package/dist/commands/context.js +2 -2
  188. package/dist/commands/context.js.map +1 -1
  189. package/dist/commands/doctor.js +2 -2
  190. package/dist/commands/doctor.js.map +1 -1
  191. package/dist/commands/mcp.d.ts.map +1 -1
  192. package/dist/commands/mcp.js +9 -8
  193. package/dist/commands/mcp.js.map +1 -1
  194. package/dist/commands/messages.d.ts.map +1 -1
  195. package/dist/commands/messages.js +11 -2
  196. package/dist/commands/messages.js.map +1 -1
  197. package/dist/commands/models.js +1 -1
  198. package/dist/commands/models.js.map +1 -1
  199. package/dist/commands/paging.d.ts +6 -35
  200. package/dist/commands/paging.d.ts.map +1 -1
  201. package/dist/commands/paging.js +4 -46
  202. package/dist/commands/paging.js.map +1 -1
  203. package/dist/commands/recipients.d.ts.map +1 -1
  204. package/dist/commands/recipients.js +9 -7
  205. package/dist/commands/recipients.js.map +1 -1
  206. package/dist/commands/runs.js +1 -1
  207. package/dist/commands/runs.js.map +1 -1
  208. package/dist/commands/sends.js +1 -1
  209. package/dist/commands/sends.js.map +1 -1
  210. package/dist/commands/serve-members.js +3 -3
  211. package/dist/commands/serve-members.js.map +1 -1
  212. package/dist/commands/serve-stems.js +2 -2
  213. package/dist/commands/serve-stems.js.map +1 -1
  214. package/dist/commands/serve.d.ts.map +1 -1
  215. package/dist/commands/serve.js +12 -4
  216. package/dist/commands/serve.js.map +1 -1
  217. package/dist/commands/server.d.ts +1 -1
  218. package/dist/commands/server.d.ts.map +1 -1
  219. package/dist/commands/server.js +1 -1
  220. package/dist/commands/server.js.map +1 -1
  221. package/dist/commands/session.d.ts +1 -1
  222. package/dist/commands/setup.js +1 -1
  223. package/dist/commands/setup.js.map +1 -1
  224. package/dist/commands/skill.js +1 -1
  225. package/dist/commands/skill.js.map +1 -1
  226. package/dist/commands/stickers.js +1 -1
  227. package/dist/commands/stickers.js.map +1 -1
  228. package/dist/commands/upgrade.js +1 -1
  229. package/dist/commands/upgrade.js.map +1 -1
  230. package/dist/config.d.ts +845 -145
  231. package/dist/config.d.ts.map +1 -1
  232. package/dist/config.js +34 -34
  233. package/dist/config.js.map +1 -1
  234. package/dist/deadline.d.ts +1 -1
  235. package/dist/deadline.d.ts.map +1 -1
  236. package/dist/deadline.js +1 -1
  237. package/dist/deadline.js.map +1 -1
  238. package/dist/diagnose.d.ts +1 -1
  239. package/dist/diagnose.d.ts.map +1 -1
  240. package/dist/diagnose.js +2 -2
  241. package/dist/diagnose.js.map +1 -1
  242. package/dist/domain/models.d.ts +2 -2
  243. package/dist/domain/models.d.ts.map +1 -1
  244. package/dist/download.js +1 -1
  245. package/dist/download.js.map +1 -1
  246. package/dist/envelope.d.ts +29 -0
  247. package/dist/envelope.d.ts.map +1 -0
  248. package/dist/envelope.js +31 -0
  249. package/dist/envelope.js.map +1 -0
  250. package/dist/format-markdown.d.ts +1 -1
  251. package/dist/format-markdown.d.ts.map +1 -1
  252. package/dist/format-markdown.js +1 -1
  253. package/dist/format-markdown.js.map +1 -1
  254. package/dist/mcp/instructions.d.ts +1 -1
  255. package/dist/mcp/instructions.d.ts.map +1 -1
  256. package/dist/mcp/legacy-check.d.ts +1 -1
  257. package/dist/mcp/legacy-check.d.ts.map +1 -1
  258. package/dist/mcp/legacy-check.js +5 -3
  259. package/dist/mcp/legacy-check.js.map +1 -1
  260. package/dist/mcp/photo.d.ts +1 -1
  261. package/dist/mcp/photo.d.ts.map +1 -1
  262. package/dist/mcp/photo.js +3 -2
  263. package/dist/mcp/photo.js.map +1 -1
  264. package/dist/mcp/prompts.d.ts.map +1 -1
  265. package/dist/mcp/prompts.js +11 -9
  266. package/dist/mcp/prompts.js.map +1 -1
  267. package/dist/mcp/resources.js +2 -2
  268. package/dist/mcp/resources.js.map +1 -1
  269. package/dist/mcp/server.d.ts +1 -1
  270. package/dist/mcp/server.d.ts.map +1 -1
  271. package/dist/mcp/server.js +2 -2
  272. package/dist/mcp/server.js.map +1 -1
  273. package/dist/mcp/shared.d.ts +1 -1
  274. package/dist/mcp/shared.d.ts.map +1 -1
  275. package/dist/mcp/shared.js +3 -3
  276. package/dist/mcp/shared.js.map +1 -1
  277. package/dist/mcp/tools.d.ts +2 -2
  278. package/dist/mcp/tools.d.ts.map +1 -1
  279. package/dist/mcp/tools.js +39 -29
  280. package/dist/mcp/tools.js.map +1 -1
  281. package/dist/messenger.d.ts +3 -3
  282. package/dist/messenger.d.ts.map +1 -1
  283. package/dist/messenger.js +15 -5
  284. package/dist/messenger.js.map +1 -1
  285. package/dist/moderation/points.d.ts +1 -1
  286. package/dist/moderation/points.d.ts.map +1 -1
  287. package/dist/moderation/points.js +1 -1
  288. package/dist/moderation/points.js.map +1 -1
  289. package/dist/moderation/rules.d.ts +1 -1
  290. package/dist/moderation/rules.d.ts.map +1 -1
  291. package/dist/moderation/rules.js +2 -2
  292. package/dist/moderation/rules.js.map +1 -1
  293. package/dist/output.d.ts +1 -1
  294. package/dist/output.d.ts.map +1 -1
  295. package/dist/output.js +1 -1
  296. package/dist/output.js.map +1 -1
  297. package/dist/permissions.d.ts +1 -1
  298. package/dist/permissions.d.ts.map +1 -1
  299. package/dist/permissions.js +2 -2
  300. package/dist/permissions.js.map +1 -1
  301. package/dist/program.d.ts +1 -1
  302. package/dist/program.d.ts.map +1 -1
  303. package/dist/program.js +3 -2
  304. package/dist/program.js.map +1 -1
  305. package/dist/protocol/connection.d.ts.map +1 -1
  306. package/dist/protocol/connection.js +44 -12
  307. package/dist/protocol/connection.js.map +1 -1
  308. package/dist/record.d.ts +1 -1
  309. package/dist/record.d.ts.map +1 -1
  310. package/dist/record.js +1 -1
  311. package/dist/record.js.map +1 -1
  312. package/dist/report.d.ts +2 -2
  313. package/dist/report.d.ts.map +1 -1
  314. package/dist/report.js +1 -1
  315. package/dist/report.js.map +1 -1
  316. package/dist/resolve.d.ts +2 -2
  317. package/dist/resolve.d.ts.map +1 -1
  318. package/dist/resolve.js +2 -2
  319. package/dist/resolve.js.map +1 -1
  320. package/dist/sends.d.ts +2 -2
  321. package/dist/sends.d.ts.map +1 -1
  322. package/dist/sends.js +2 -2
  323. package/dist/sends.js.map +1 -1
  324. package/dist/server/replies.d.ts +2 -2
  325. package/dist/server/replies.d.ts.map +1 -1
  326. package/dist/server/replies.js +3 -3
  327. package/dist/server/replies.js.map +1 -1
  328. package/dist/server/server-connection.js +1 -1
  329. package/dist/server/server-connection.js.map +1 -1
  330. package/dist/server/server.d.ts +4 -2
  331. package/dist/server/server.d.ts.map +1 -1
  332. package/dist/server/server.js +39 -21
  333. package/dist/server/server.js.map +1 -1
  334. package/dist/server/subscribe.d.ts.map +1 -1
  335. package/dist/server/subscribe.js +24 -4
  336. package/dist/server/subscribe.js.map +1 -1
  337. package/dist/server/subscribers.d.ts +18 -0
  338. package/dist/server/subscribers.d.ts.map +1 -0
  339. package/dist/server/subscribers.js +146 -0
  340. package/dist/server/subscribers.js.map +1 -0
  341. package/dist/session/prompt.d.ts +1 -1
  342. package/dist/session/prompt.d.ts.map +1 -1
  343. package/dist/session/prompt.js +1 -1
  344. package/dist/session/prompt.js.map +1 -1
  345. package/dist/spec/define.d.ts +1 -1
  346. package/dist/spec/define.d.ts.map +1 -1
  347. package/dist/transcribe/install.d.ts +1 -1
  348. package/dist/transcribe/install.d.ts.map +1 -1
  349. package/dist/transcribe/install.js +1 -1
  350. package/dist/transcribe/install.js.map +1 -1
  351. package/dist/transcribe/models.d.ts +2 -2
  352. package/dist/transcribe/models.d.ts.map +1 -1
  353. package/dist/transcribe/models.js +2 -2
  354. package/dist/transcribe/models.js.map +1 -1
  355. package/dist/upload.d.ts.map +1 -1
  356. package/dist/upload.js +9 -2
  357. package/dist/upload.js.map +1 -1
  358. package/dist/version.d.ts +1 -1
  359. package/dist/version.js +1 -1
  360. package/package.json +4 -4
  361. package/skills/max-cli/SKILL.md +75 -54
@@ -24,9 +24,8 @@ description: >-
24
24
 
25
25
  `max commands schema messages list --json` показывает схемы и эффекты одной команды.
26
26
  Используйте `--json --no-input` для работы без вопросов; секреты передавайте явно через pipe.
27
- `--fields id,text` выбирает поля каждого элемента списка, сохраняя страницу, полноту и
28
- идентификаторы операций. Для id достаточно `--fields id`; `items.id` также поддерживается,
29
- а синтаксис `items[].id` не нужен. `--max-output-bytes` и `--max-input-bytes` задают byte budgets;
27
+ `--json=id,text` оставляет эти поля каждого элемента списка вместе со страницей и полнотой. Для id
28
+ достаточно `--json=id`. `--max-output-bytes` и `--max-input-bytes` задают byte budgets;
30
29
  одноразовые действия имеют срок 30 секунд, меняемый через `--timeout`.
31
30
  Перед чувствительной записью `--dry-run` проверяет форму запроса и права до действия;
32
31
  общий preview не подключается к мессенджеру, не резервирует запись и оставляет цели непроверенными.
@@ -103,11 +102,12 @@ remove|admins|update|link reset|requests accept|requests decline` видят д
103
102
 
104
103
  - **В pipe или с `--json` stdout — только данные**, одно значение JSON. Всё остальное, включая
105
104
  предупреждения, уходит в stderr. Ошибка, завершающая команду, — тоже в stderr, stdout при ней пуст.
106
- - **Частичные чтения и загрузки могут завершиться кодом `0`**: проверьте `complete`, `batch.failed` и `issue`; JSONL частичной загрузки добавляет `batch_summary`. Успешная часть сохраняется, повторяйте только незавершённое после указанной паузы.
107
- - **Любой список — объект**, а не массив: `{ "items": [...], "page": 1, "limit": 20, "hasMore": true }`,
108
- у бота тоже. У списка без страниц `page` — 1, `limit` — сколько пришло, `hasMore` — `false`.
105
+ - **Частичные чтения и загрузки могут завершиться кодом `0`**: проверьте `missing`, `next`, а у загрузок — `complete`, `batch.failed` и `issue`; JSONL частичной загрузки добавляет `batch_summary`. Успешная часть сохраняется, повторяйте только незавершённое после указанной паузы.
106
+ - **Любой список — объект**, а не массив: `{ "items": [...], "page": { "limit": 20, "has_more": true }, "meta": {…} }`,
107
+ у бота тоже; одна вещь — `{ "item": {…} }`. Ключи — snake_case. Следующую страницу называет шаг `page.next`
108
+ в `next` (его `cursor` или `page`); чего в ответе нет — `missing`. У списка без страниц `page.has_more` — `false`.
109
109
  `bot chats members list` кладёт рядом `marker` для следующей страницы.
110
- - **`--jsonl`** — по объекту на строку, удобно для `jq`. Есть ли ещё, пишется только в stderr.
110
+ - **`--jsonl`** — по объекту на строку, удобно для `jq`. Есть ли ещё, пишется только в stderr. Отчёты `stats` `--jsonl` не принимают.
111
111
  - **Ветвиться по коду возврата, а не по тексту**: `0` — успех, `2` — неверный ввод, `4` — нет
112
112
  входа, `5` — профилю это действие не разрешено (`permissions`; ошибка называет запрещённый ресурс или действие — не обходить), `6` — не найдено, `7` — чата нет в списке разрешённых,
113
113
  `8` — лимит: отправок за час, или MAX отказал во входе из-за частых попыток (тогда **не повторять**:
@@ -120,7 +120,7 @@ remove|admins|update|link reset|requests accept|requests decline` видят д
120
120
  1. **Id — всегда строки.** Id сообщений 18-значные, больше `Number.MAX_SAFE_INTEGER`. Никогда не
121
121
  превращать их в число: `jq` и JavaScript молча округлят, и id станет чужим.
122
122
  2. **Первое слово — профиль, если это не команда.** `max work chats list` — профиль `work`.
123
- Флага `--profile` нет; то же делает переменная `MAX_PROFILE` или настройка `defaultProfile`.
123
+ Флага `--profile` нет; то же делает переменная `MAX_PROFILE` или настройка `default_profile`.
124
124
  **Профиль не подразумевается, даже единственный:** без имени команда завершается с кодом `2`
125
125
  и перечисляет профили (`error.profiles`) — спросите владельца, какой нужен, не берите первый.
126
126
  Без профиля работают `--help`, `commands`, `skill show`, `account list`, `config show`. Имя профиля — латиница, цифры,
@@ -133,7 +133,7 @@ remove|admins|update|link reset|requests accept|requests decline` видят д
133
133
  `[{ id, name, username }]`. `contacts block`, `unblock`, `rename` и `account update --photo`
134
134
  меняют аккаунт владельца — только по его просьбе.
135
135
  4. **Код `14` — неизвестный исход записи, а не разрешение повторять её.** Проверьте
136
- `max personal sends list --json` по `operationId` и историю целевого чата. `operationId` связывает
136
+ `max personal sends list --json` по `operation_id` и историю целевого чата. `operation_id` связывает
137
137
  запись с журналом, но не является ключом идемпотентности. Повтор сообщения возможен только
138
138
  при подтверждённой дедупликации провайдера и с теми же чатом, темой, содержимым и `--send-id`;
139
139
  никакой автоматической повторной записи только по коду ошибки.
@@ -146,9 +146,9 @@ remove|admins|update|link reset|requests accept|requests decline` видят д
146
146
  скачивания модели, со строгими ограничениями и подходящими прямыми ответами. Проверь
147
147
  отсутствующие слова, родительские ссылки и сами сообщения; первый результат и его оценка
148
148
  не доказывают ответ. Явный синтаксис остаётся строгим.
149
- **Без `--discover`, `max personal search messages` с одним чатом (`--chat` или `chat:`) спрашивает и сервер MAX**
149
+ **Без `--discover`, `max personal search messages` с одним чатом (`chat:` в запросе) спрашивает и сервер MAX**
150
150
  (`--backend archive` — только архив). Хороший поиск требует скачанных чатов: если ничего не нашлось, а
151
- `coverage.next` задан, выполните его (`max personal messages sync --all --background`) или спросите владельца, прежде чем
151
+ в `next` есть шаг `messages.sync`, выполните его (`max personal messages sync --all --background`) или спросите владельца, прежде чем
152
152
  говорить, что сообщения нет. Слова и фразы находят формы слов; `exact:` или `--exact` — только точную форму.
153
153
  Default — строгий профиль Lucene:
154
154
  фразы, AND/OR/NOT, field groups и date ranges. `alpha OR beta gamma` = `(alpha OR beta) AND gamma`.
@@ -160,7 +160,8 @@ remove|admins|update|link reset|requests accept|requests decline` видят д
160
160
  Подсчёт — `max personal stats messages show`. Руководства: [поиск](https://github.com/WireCatLabs/max-cli/blob/main/docs/search.md),
161
161
  [поиск по темам](https://github.com/WireCatLabs/max-cli/blob/main/docs/topic-search.md) (разговоры по смыслу),
162
162
  [язык запросов](https://github.com/WireCatLabs/max-cli/blob/main/docs/query-language.md).
163
- 5a. **Substring-поиску имён нужны три символа:** --search у chats/contacts list. Строгие message
163
+ 5a. **Substring-поиску названий нужны три символа:** `title:` у chats list. Запрос `chats list` отвечает только из
164
+ локальной копии — с `--offline`; `contacts list name:`/`notes:` отказывают, пока в копии нет контактов. Строгие message
164
165
  terms могут быть короче; не заменяйте strict zero hits fuzzy discovery автоматически.
165
166
 
166
167
  5b. **`max personal store export` выгружает только скачанное и прочитанное** и в MAX не ходит. Какие куски
@@ -178,11 +179,11 @@ remove|admins|update|link reset|requests accept|requests decline` видят д
178
179
  6. **`messages show` и `messages context` требуют чат и id сообщения** — или одну ссылку `msg:…` из
179
180
  `search messages`. Искомое сообщение в JSON помечено `"anchor": true`. Если сообщения нет, это
180
181
  `not_found`, а не соседнее сообщение.
181
- 7. **Время сообщения зашито в его id**: `id >> 16` — миллисекунды. Поэтому `--before-id` и
182
- `--after-id` работают для любого id, даже не прочитанного раньше. Само сообщение не входит ни в
183
- тот, ни в другой ответ. Две из `--before-id`, `--before-time`, `--after-id`, `--after-time` вместе —
184
- отказ с кодом `2`. `--since-time`, `--before-time` и `--after-time` понимают и `30m`, `2h`, `1d` —
185
- столько назад: `max personal review --since-time 1d`.
182
+ 7. **Время сообщения зашито в его id**: `id >> 16` — миллисекунды. Поэтому `id<…` и `id>…` в запросе
183
+ `messages list` работают для любого id, даже не прочитанного раньше. Само сообщение не входит ни в
184
+ тот, ни в другой ответ. Две начальные точки (`id<`, `id>`, `date<`, `date>`) вместе — отказ с кодом `2`.
185
+ `date` понимает и `30m`, `2h`, `1d` — столько назад: `max personal review 'date>1d'`; точное время — в
186
+ кавычках с секундами и смещением: `'date>"2026-09-23T09:00:00Z"'`. Запрос с `>` берите в одинарные кавычки.
186
187
  8. **`MAX_CONFIG_DIR`, `MAX_STATE_DIR` меняют и запись в ключнице.** Устаревший `MAX_CACHE_DIR`
187
188
  тоже влияет на неё. С этими переменными профиль ищет другой токен и может ответить
188
189
  «нет сессии», хотя владелец вошёл. Файл общей копии задаёт `MESSAGING_STORE`. `max config show`
@@ -195,12 +196,12 @@ remove|admins|update|link reset|requests accept|requests decline` видят д
195
196
  -1000`. Один перевод строки в самом конце отбрасывается, остальные сохраняются.
196
197
  11. **Номер страницы на живом списке может повторить или пропустить строку.** Сверху самое свежее,
197
198
  поэтому сообщение, пришедшее между первой страницей и второй, сдвигает кого-то через границу.
198
- Для переписки этого нет: `--before-id` привязан ко времени и точен.
199
+ Для переписки этого нет: `id<…` привязан ко времени и точен.
199
200
  12. **`max personal inbox --new` сдвигает место, где владелец остановился.** После него следующий
200
201
  `--new` владельца не покажет того, что уже увидел агент. Без сдвига: просто `max personal inbox`
201
- (непрочитанное) или `max personal inbox --since-time <время>`.
202
- 13. **`--at-time` ставит сообщение в очередь MAX, а не отправляет.** Ответ — `{sendId, operationId,
203
- message, scheduledFor}`; ушедшее сообщение получит другой id. Очередь: `max messages scheduled <чат>`.
202
+ (непрочитанное) или `max personal inbox 'date>2h'`.
203
+ 13. **`--at-time` ставит сообщение в очередь MAX, а не отправляет.** Ответ — `{item: {operation_id, send_id,
204
+ message, scheduled_for}}`; ушедшее сообщение получит другой id. Очередь: `max messages scheduled <чат>`.
204
205
  Через MCP — параметр `at_time` у `max_write` (`command: "messages send"`) и инструмент `max_read` (`command: "messages scheduled"`).
205
206
  Отменить можно только в приложении MAX.
206
207
 
@@ -223,7 +224,7 @@ Id ниже выдуманные — подставить настоящие и
223
224
  - **Найти договорённость или документ:** найдите нужные чаты и ищите в локальной копии.
224
225
  Проверьте покрытие поиска и `store status`; `messages list` показывает только окно сообщений.
225
226
  Уточняйте найденное через `messages context` или `messages show`, приводите ссылки на сообщения.
226
- Проверьте связанные чаты на поздние изменения. Пустой результат, пустой чат и `hasMore: false`
227
+ Проверьте связанные чаты на поздние изменения. Пустой результат, пустой чат и `has_more: false`
227
228
  не доказывают полноту истории MAX. Если это влияет на ответ, объясните пробел.
228
229
  Скачивайте только разрешённый чат и ограниченный период или объём; сначала согласуйте
229
230
  с владельцем чат и предел сообщений или период. Без сети недостающую историю скачать нельзя.
@@ -239,48 +240,49 @@ Id ниже выдуманные — подставить настоящие и
239
240
  черновик; не меняйте настройки и не переключайте профили.
240
241
 
241
242
  ```sh
242
- max personal chats list --search "проект" --json # найти чат, взять его id
243
- max personal chats list --unread --json # где есть непрочитанное
243
+ max personal chats list title:проект --offline --json # найти чат, взять его id
244
+ max personal chats list 'unread_count>0' --offline --json # где есть непрочитанное
244
245
  max personal inbox --json # непрочитанное во всех чатах
245
246
  max personal inbox --new --json # что пришло с прошлой проверки, один раз
246
- max personal review --since-time 2026-09-23T09:00 --json # всё, свои тоже, для обзора «кто кому должен»
247
- max personal review --chat -1000 --unanswered 4h --json # вопросы в группе, на которые 4 часа не ответили ни владелец, ни админы
248
- max personal tasks list --state open --json # что ждёт ответа владельца; задачи открывает и закрывает review
247
+ max personal review 'date>"2026-09-23T09:00:00Z"' --json # всё, свои тоже, для обзора «кто кому должен»
248
+ max personal review 'chat:"-1000"' --unanswered 4h --json # вопросы в группе, на которые 4 часа не ответили ни владелец, ни админы
249
+ max personal tasks list state:open --json # что ждёт ответа владельца; задачи открывает и закрывает review
249
250
  max personal tasks close <задача> --as dismissed --reason no-reply-needed --json # только когда владелец так решил
250
251
  max personal watch --jsonl # новые сообщения по мере прихода; `max personal serve` запустится сам
251
252
  max personal watch --events --jsonl # плюс правки, удаления, реакции, прочтения, изменения чатов; поле "event"
252
253
  max personal server status --json # работает ли фоновый сервер, какой версии, подключён ли
253
254
  max personal chats show -1000 --json # один чат и кто в нём
254
- max personal chats events -1000 --since-time 2026-09-20T00:00 --json # кто вступил, вышел, кого добавили и удалили
255
- max personal chats members list -1000 --all --json # все участники от MAX: registeredAt, lastSeenAt
255
+ max personal chats events -1000 'time>=2026-09-20' --json # кто вступил, вышел, кого добавили и удалили
256
+ max personal chats members list -1000 --all --json # все участники от MAX: registered_at, last_seen_at
256
257
  max personal chats requests list -1000 --json # заявки в канал с одобрением; время неизвестно
257
258
  max personal chats requests accept -1000 20000002 # только по просьбе владельца; decline — отказать
258
259
  max personal chats rules show -1000 --json # правила модерации группы; set <ключ> <значение> меняет одно
259
260
  max personal chats moderate -1000 --dry-run --json # что нового нарушает правила; без --dry-run — только по слову владельца
260
261
  max personal contacts show @ivan --json # один человек и общие чаты
261
262
  max personal messages list -1000 --limit 20 --json # последние сообщения, от старых к новым
262
- max personal messages list -1000 --after-id 100000000000000001 --json # что было после этого сообщения
263
+ max personal messages list -1000 'id>100000000000000001' --json # что было после этого сообщения
263
264
  max personal messages context -1000 100000000000000001 --before-n 3 --after-n 3 --json
264
265
  max personal messages transcribe -1000 100000000000000001 --json # текст голосового, на этой машине
265
266
  ```
266
267
 
267
268
  **Обзор «кто кому должен» — `max personal review`**, одним вызовом: все сообщения обеих сторон во всех
268
- изменившихся чатах. `--since-time` — граница, на которой кончился прошлый обзор; её называет владелец или
269
+ изменившихся чатах. `date>…` в запросе — граница, на которой кончился прошлый обзор; её называет владелец или
269
270
  прошлый обзор. Разложить на «я должен», «жду от других», «нужно уточнить» — работа агента; у пункта
270
- чат, дата и id сообщений. Своё «сделаю» ищите в `"outgoing": true`. При `"complete": false` сказать,
271
- чего не хватает, и не предлагать новую границу; иначе закончить `--since-time` = `until`. Напоминания —
271
+ чат, дата и id сообщений. Своё «сделаю» ищите в `"outgoing": true`. Если есть `missing`, сказать,
272
+ чего не хватает. Следующий обзор начинать с запроса шага `review.next` из `next`: при неполном обзоре он
273
+ повторяет ту же границу. Напоминания —
272
274
  черновики, отправка — только по слову владельца.
273
275
 
274
276
  Голосовое — вложение `"kind": "voice"` в `messages list|show|context`, `search messages`, `inbox` и `review`.
275
277
  Его текст даёт `max personal messages transcribe`; до минуты на пять минут речи, повторно — сразу из общей
276
278
  локальной копии сообщений. Уже расшифрованное голосовое несёт поле `transcript` в
277
279
  `messages list` и `inbox`; `--transcribe` там расшифровывает остальные показанные, а не
278
- расшифрованные перечисляет в `unheard`. При отсутствии модели пакетное чтение сохраняет
279
- сообщения и сообщает `unheard`/`transcribeProblem`; одиночная `messages transcribe` откажет
280
+ расшифрованные называет записью `transcript` в `missing`. При отсутствии модели пакетное чтение сохраняет
281
+ сообщения и сообщает причину там же; одиночная `messages transcribe` откажет
280
282
  и назовёт `max personal models audio download <id>`: **сказать об этом владельцу и не скачивать самому** — это сотни
281
283
  мегабайт, и выбор модели за ним.
282
284
 
283
- Каталог аудиомоделей общий с Telegram; путь есть в `max personal models audio list --json` (`directory`).
285
+ Каталог аудиомоделей общий с Telegram; путь каждой модели есть в `max personal models audio list --json` (`path`).
284
286
  Существующие файлы используются повторно; `WIRECAT_STATE_DIR` задаёт другое место.
285
287
 
286
288
  Вложение в JSON: `{ "kind": "photo", "url": "https://…", "width": 901, "height": 594 }`. Чтобы
@@ -298,13 +300,13 @@ max personal messages transcribe -1000 100000000000000001 --json # текст
298
300
  где человек писал и его личный чат с ботом; `bot messages between <кто> <кто>` — их переписка в
299
301
  чатах, где писал каждый (`--limit` — на чат). Всё это без сети, кроме `contacts show --refresh`.
300
302
  Чужие локальные копии ботов — `--all-bots` или `--bots <профили>` у `search messages`, `contacts show` и
301
- `messages between`, и только если владелец разрешил `readOtherBots`; иначе отказ с кодом `5` — скажите
303
+ `messages between`, и только если владелец разрешил `read_other_bots`; иначе отказ с кодом `5` — скажите
302
304
  владельцу команду из ошибки. `bot watch --jsonl` забирает события у всех других
303
305
  читателей бота — запускайте только по просьбе владельца. Отказ с кодом `7`
304
306
  значит «чата нет в списке получателей бота»: скажите владельцу, какую команду выполнить, и не
305
307
  пишите в обход. Остальные коды бота: `4` — нет токена бота или MAX его не принял, `5` — профиль только
306
308
  для чтения или действие не разрешено `allow`, `6` — чат не найден (название, которого бот не видел, или
307
- человек без `user:`), `8` — исчерпан `sendsPerHour`, `14` — неизвестно, выполнена ли запись. С `--json`
309
+ человек без `user:`), `8` — исчерпан `sends_per_hour`, `14` — неизвестно, выполнена ли запись. С `--json`
308
310
  stdout — только данные, в той же форме, что у личного аккаунта; id больше 2^53 приходит строкой.
309
311
  Все методы официальной схемы Bot API доступны, включая операции вне удобных команд:
310
312
  `max <имя> bot api <операция>`; её флаги —
@@ -333,7 +335,7 @@ MAX-боту; личный протокол явно отказывает неп
333
335
  из раздела установки. Убедись, что установленная команда доступна по имени.
334
336
 
335
337
  Для количества совпадений в архиве используй `max personal stats messages show [запрос] --by chat|sender|day|hour --json`: одна
336
- запись считается один раз. Проверяй completeness: неполный архив даёт нижнюю границу. `--source max` явно включает
338
+ запись считается один раз. Проверяй `missing`: неполный архив даёт нижнюю границу. Отчёт — один `{item}`, `--jsonl` он не принимает. `--source max` явно включает
337
339
  другие сохранённые профили; обычный вызов остаётся в текущей учётной записи.
338
340
 
339
341
  MCP `max_read` с `command: "stats chats show"` читает активность из архива без запроса вступлений и выходов.
@@ -383,7 +385,7 @@ PDF с текстовым слоем — unpdf. Фото и сканы чита
383
385
  вложениях укажите `--attachment`, начиная с 1.
384
386
 
385
387
  По умолчанию выполняйте OCR сами средствами чтения файлов и зрения агента. После загрузки и локального
386
- извлечения обработайте строки `needs-agent`: найдите `localPath` через `attachments list --needs-text`,
388
+ извлечения обработайте строки `needs-agent`: найдите `local_path` через `attachments list is:needs_text`,
387
389
  прочитайте фото или скан, затем сохраните буквальную расшифровку через `attachments text set`.
388
390
  Сохраняйте locator сообщения и номер вложения; проверьте результат запросом `content:`.
389
391
  Не заменяйте этот путь автоматическим вызовом отдельного API. Массовую обработку через API выбирает
@@ -400,7 +402,7 @@ PDF с текстовым слоем — unpdf. Фото и сканы чита
400
402
  ```sh
401
403
  max personal attachments extract --chat "Книжный клуб" --download --output-dir ./files
402
404
  max personal search messages 'content:договор'
403
- max personal attachments list --chat "Книжный клуб" --needs-text
405
+ max personal attachments list 'chat:"Книжный клуб" is:needs_text'
404
406
  max personal attachments text set "Книжный клуб" 204 --text-file ./scan.txt
405
407
  ```
406
408
 
@@ -424,7 +426,7 @@ output_dir в MCP также их защищает. Обычные скрыты
424
426
  Локальная речь: полная mono/stereo Ogg Opus запись без 10-минутного предела; длинные записи требуют больше памяти.
425
427
  Подготовка после явно разрешённой загрузки: `messages sync <чат> --catch-up` с
426
428
  `--catch-up-chunks`, `--catch-up-messages`, `--catch-up-time`; `--no-catch-up` отменяет
427
- настройку `searchCatchUp`. Модели не скачиваются, удалённый провайдер не вызывается.
429
+ настройку `search_catch_up`. Модели не скачиваются, удалённый провайдер не вызывается.
428
430
  Разрывы: сначала локальный `store gaps plan <чат>`, затем только по слову владельца
429
431
  `store gaps repair <чат> --fingerprint <хеш>`; ограничивайте `--max-gaps`, `--limit`,
430
432
  `--repair-time`, `--page-size`, `--pause`. `--background` использует обычные задания.
@@ -456,12 +458,12 @@ max personal contacts notes show 101 NOTE_ID --json
456
458
  max personal contacts notes edit 101 NOTE_ID --revision 1 --file /path/to/own-note.md
457
459
  max personal contacts notes remove 101 NOTE_ID
458
460
  max personal contacts show 101 --with-notes --json
459
- max personal contacts list --search-notes 'follow up' --json
461
+ max personal contacts list 'notes:"follow up"' --json
460
462
  max personal metadata get --chat CHAT_ID --json
461
463
  max personal metadata refresh --chat CHAT_ID --limit 1 --json
462
464
  max personal tags auto --chat CHAT_ID --dry-run --json
463
465
  max personal tags auto --chat CHAT_ID --refresh-metadata --limit 1 --json
464
- max personal tags list --source auto --json
466
+ max personal tags list sources:auto --json
465
467
  max personal tags remove news --chat CHAT_ID --source auto
466
468
  ```
467
469
 
@@ -473,16 +475,35 @@ max personal tags remove news --chat CHAT_ID --source auto
473
475
  Без `--source` удаление метки убирает оба источника; следующий явный запуск `tags auto` может
474
476
  создать автоматическую метку снова. Связывание людей не объединяет их личные заметки.
475
477
 
478
+ Телефоны, почта, ссылки и документы Google из сохранённых сообщений хранятся как упоминания: их находят
479
+ правила при каждой записи в базу. `mentions list` принимает запрос: `kind:phone|email|url|document`,
480
+ `status:found|linked|dismissed`, `domain:` (сайт ссылки или адреса; `docs.google.com` значит `google.com`)
481
+ и `value:`; слово без поля — значение в любой записи, `89001234567` найдёт `+79001234567`. Сообщения,
482
+ сохранённые до появления упоминаний, читает один `mentions rebuild`. У каждой строки есть `locator`
483
+ сообщения; текст упоминаний — только владельцу, не в логи и не в файлы. Поиск сообщений понимает `phone:`, `email:`,
484
+ `url:` и `domain:` (почта в кавычках: `email:"ana@example.com"`). `mentions confirm <id> [person:<uid>|organization:<id>]`
485
+ записывает, чьё значение, `mentions reject <id>` отклоняет его насовсем; автор записи — агент или владелец
486
+ (`--as-owner`).
487
+
488
+ ```sh
489
+ max personal mentions list kind:phone --json
490
+ max personal mentions list domain:google.com kind:url --json
491
+ max personal mentions show 12 --json
492
+ max personal mentions rebuild
493
+ max personal mentions confirm 12 person:<uid>
494
+ max personal mentions reject 12
495
+ ```
496
+
476
497
  Рейтинги архива: `max personal stats messages top` / `max personal stats contacts top` — метрика `--measure` или
477
498
  `--score helpful|active|engaging`; оценки используют всю допустимую выборку до limit.
478
- Читай coverage/quality и исключения: неизвестные счётчики не равны нулю, свежесть наблюдений показана по полям; старые значения остаются unknown. Используй drilldown.selection для `stats messages evidence` / `stats contacts evidence`,
479
- продолжай через nextCursor; при изменении данных начни без cursor.
499
+ Читай coverage/quality и исключения: неизвестные счётчики не равны нулю, свежесть наблюдений показана по полям; старые значения остаются unknown. Используй `selection` строки и шаг `stats.evidence` из `next` для `stats messages evidence` / `stats contacts evidence`,
500
+ продолжай по `cursor` шага `page.next`; при изменении данных начни без cursor.
480
501
  Руководство: [рейтинги](https://github.com/WireCatLabs/max-cli/blob/main/docs/rankings.md).
481
502
 
482
503
  Для вопросов без наблюдаемого ответа используй `stats messages unanswered`; время ответа явно
483
504
  выбранных людей — `stats contacts responses --answerer <person>`. Помощь новичкам с известной датой
484
505
  вступления — `stats chats newcomers <chat>`, посты каналов с просмотрами и малым обсуждением —
485
- `stats messages discussion`. Проверяй качество архива и reply-графа, копируй точные drilldown-аргументы
506
+ `stats messages discussion`. Проверяй качество архива и reply-графа, копируй точную `selection` строки
486
507
  с `--component report`. Неизвестные история и дата вступления не равны нулю. Отчёты читают только
487
508
  сохранённые данные; не выводи из выбранных id, кто был админом в прошлом.
488
509
 
@@ -494,22 +515,22 @@ max personal tags remove news --chat CHAT_ID --source auto
494
515
 
495
516
 
496
517
  Удалённому агенту доступны байты сохранённого файла: найдите attachments show через max_tools_search
497
- и вызовите max_read. Скрытые файлы, папки CLI и хранилище не передаются, включая ссылки. Соберите порции по nextOffsetBytes, передавайте if_sha256 и проверьте хеш.
498
- Если клиент не может открыть PDF, запросите каждую страницу через page:1..pdf.pageCount;
518
+ и вызовите max_read. Скрытые файлы, папки CLI и хранилище не передаются, включая ссылки. Соберите порции по next_offset_bytes, передавайте if_sha256 и проверьте хеш.
519
+ Если клиент не может открыть PDF, запросите каждую страницу через page:1..pdf.page_count;
499
520
  нужны необязательные unpdf/@napi-rs/canvas. Страница возвращается изображением; если видны только
500
521
  метаданные, запросите format:base64 и покажите PNG средствами агента. Просмотрите реальные пиксели
501
- всех страниц, не считайте получение base64 чтением. pdf.sourceSha256 — хеш исходного PDF,
522
+ всех страниц, не считайте получение base64 чтением. pdf.source_sha256 — хеш исходного PDF,
502
523
  верхний sha256 — хеш PNG. Нет внешнего OCR API или автоматической записи: сохраните свой буквальный
503
524
  текст через attachments text set и проверьте content:. Если показать страницы нельзя, сообщите об этом;
504
525
  не подставляйте прежний текст индекса. Качество зависит от разрешения, языка и структуры документа.
505
526
 
506
527
  Удержание: `max personal stats chats retention <chat> --checkpoints 1d,7d,30d --within 7d --json`.
507
- Используй только известные joinedAt; partial absence и пропущенные снимки — unknown, будущие окна — pending.
528
+ Используй только известные joined_at; partial absence и пропущенные снимки — unknown, будущие окна — pending.
508
529
  Показывай observable знаменатель, неизвестные и фактическую дату снимка; не называй это непрерывным участием.
509
- Cohort drilldown идёт через `stats messages evidence --component report` с точной selection.
530
+ Сообщения когорты — через `stats messages evidence --component report` с точной `selection` строки.
510
531
 
511
532
  Счётчики: `max personal stats messages counters show --chat <chat> --counters views,reactions --json`.
512
- Проверяй observedAt/source/freshness каждого поля (24h по умолчанию). Refresh — remote read + local write:
533
+ Проверяй observed_at/source/freshness каждого поля (24h по умолчанию). Refresh — remote read + local write:
513
534
  `stats messages counters refresh --chat <chat> --max-messages 20 --sync-time 30s --dry-run --json`.
514
535
  Предпросмотр не подключается. Реальный refresh требует разрешённой записи и явного chat или pinned selection;
515
536
  никогда не освежай весь аккаунт неявно. MAX поддерживает views/reactions; comments unsupported.
@@ -526,5 +547,5 @@ Cohort drilldown идёт через `stats messages evidence --component report
526
547
 
527
548
  Статистический `--answerer` также принимает сохранённое имя, своё имя и @username напрямую,
528
549
  без подключения. При неоднозначности используйте возвращённые кандидаты нужного аккаунта,
529
- не угадывайте. `identityKnown: false` вместе с `status: unknown` означает, что явно выбранный
550
+ не угадывайте. `identity_known: false` вместе с `status: unknown` означает, что явно выбранный
530
551
  ID не наблюдался; ноль ответов не доказывает нулевую активность.