@wirecat/max-cli 0.0.0 → 0.42.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 (546) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +531 -0
  3. package/dist/adapter/max-adapter.d.ts +17 -0
  4. package/dist/adapter/max-adapter.d.ts.map +1 -0
  5. package/dist/adapter/max-adapter.js +364 -0
  6. package/dist/adapter/max-adapter.js.map +1 -0
  7. package/dist/app.d.ts +3 -0
  8. package/dist/app.d.ts.map +1 -0
  9. package/dist/app.js +9 -0
  10. package/dist/app.js.map +1 -0
  11. package/dist/bin/max.d.ts +3 -0
  12. package/dist/bin/max.d.ts.map +1 -0
  13. package/dist/bin/max.js +20 -0
  14. package/dist/bin/max.js.map +1 -0
  15. package/dist/bot/adapter.d.ts +25 -0
  16. package/dist/bot/adapter.d.ts.map +1 -0
  17. package/dist/bot/adapter.js +404 -0
  18. package/dist/bot/adapter.js.map +1 -0
  19. package/dist/bot/auth.d.ts +13 -0
  20. package/dist/bot/auth.d.ts.map +1 -0
  21. package/dist/bot/auth.js +9 -0
  22. package/dist/bot/auth.js.map +1 -0
  23. package/dist/bot/client.d.ts +26 -0
  24. package/dist/bot/client.d.ts.map +1 -0
  25. package/dist/bot/client.js +105 -0
  26. package/dist/bot/client.js.map +1 -0
  27. package/dist/bot/generated/manifest.d.ts +3 -0
  28. package/dist/bot/generated/manifest.d.ts.map +1 -0
  29. package/dist/bot/generated/manifest.js +1232 -0
  30. package/dist/bot/generated/manifest.js.map +1 -0
  31. package/dist/bot/generated/schemas.d.ts +271 -0
  32. package/dist/bot/generated/schemas.d.ts.map +1 -0
  33. package/dist/bot/generated/schemas.js +869 -0
  34. package/dist/bot/generated/schemas.js.map +1 -0
  35. package/dist/bot/generated/types.d.ts +1088 -0
  36. package/dist/bot/generated/types.d.ts.map +1 -0
  37. package/dist/bot/generated/types.js +5 -0
  38. package/dist/bot/generated/types.js.map +1 -0
  39. package/dist/bot/input.d.ts +6 -0
  40. package/dist/bot/input.d.ts.map +1 -0
  41. package/dist/bot/input.js +6 -0
  42. package/dist/bot/input.js.map +1 -0
  43. package/dist/bot/joins.d.ts +26 -0
  44. package/dist/bot/joins.d.ts.map +1 -0
  45. package/dist/bot/joins.js +56 -0
  46. package/dist/bot/joins.js.map +1 -0
  47. package/dist/bot/keep.d.ts +25 -0
  48. package/dist/bot/keep.d.ts.map +1 -0
  49. package/dist/bot/keep.js +98 -0
  50. package/dist/bot/keep.js.map +1 -0
  51. package/dist/bot/map.d.ts +14 -0
  52. package/dist/bot/map.d.ts.map +1 -0
  53. package/dist/bot/map.js +101 -0
  54. package/dist/bot/map.js.map +1 -0
  55. package/dist/bot/mcp-tools.d.ts +4 -0
  56. package/dist/bot/mcp-tools.d.ts.map +1 -0
  57. package/dist/bot/mcp-tools.js +78 -0
  58. package/dist/bot/mcp-tools.js.map +1 -0
  59. package/dist/bot/permissions.d.ts +14 -0
  60. package/dist/bot/permissions.d.ts.map +1 -0
  61. package/dist/bot/permissions.js +88 -0
  62. package/dist/bot/permissions.js.map +1 -0
  63. package/dist/bot/registry.d.ts +11 -0
  64. package/dist/bot/registry.d.ts.map +1 -0
  65. package/dist/bot/registry.js +13 -0
  66. package/dist/bot/registry.js.map +1 -0
  67. package/dist/bot/russian-trusted-root.d.ts +8 -0
  68. package/dist/bot/russian-trusted-root.d.ts.map +1 -0
  69. package/dist/bot/russian-trusted-root.js +41 -0
  70. package/dist/bot/russian-trusted-root.js.map +1 -0
  71. package/dist/bot/transport.d.ts +46 -0
  72. package/dist/bot/transport.d.ts.map +1 -0
  73. package/dist/bot/transport.js +252 -0
  74. package/dist/bot/transport.js.map +1 -0
  75. package/dist/bot/uploads.d.ts +42 -0
  76. package/dist/bot/uploads.d.ts.map +1 -0
  77. package/dist/bot/uploads.js +145 -0
  78. package/dist/bot/uploads.js.map +1 -0
  79. package/dist/client.d.ts +650 -0
  80. package/dist/client.d.ts.map +1 -0
  81. package/dist/client.js +2836 -0
  82. package/dist/client.js.map +1 -0
  83. package/dist/commands/account.d.ts +3 -0
  84. package/dist/commands/account.d.ts.map +1 -0
  85. package/dist/commands/account.js +4 -0
  86. package/dist/commands/account.js.map +1 -0
  87. package/dist/commands/bot-comments.d.ts +3 -0
  88. package/dist/commands/bot-comments.d.ts.map +1 -0
  89. package/dist/commands/bot-comments.js +74 -0
  90. package/dist/commands/bot-comments.js.map +1 -0
  91. package/dist/commands/bot-context.d.ts +38 -0
  92. package/dist/commands/bot-context.d.ts.map +1 -0
  93. package/dist/commands/bot-context.js +121 -0
  94. package/dist/commands/bot-context.js.map +1 -0
  95. package/dist/commands/bot-members.d.ts +14 -0
  96. package/dist/commands/bot-members.d.ts.map +1 -0
  97. package/dist/commands/bot-members.js +64 -0
  98. package/dist/commands/bot-members.js.map +1 -0
  99. package/dist/commands/bot-messenger.d.ts +10 -0
  100. package/dist/commands/bot-messenger.d.ts.map +1 -0
  101. package/dist/commands/bot-messenger.js +101 -0
  102. package/dist/commands/bot-messenger.js.map +1 -0
  103. package/dist/commands/bot-reads.d.ts +4 -0
  104. package/dist/commands/bot-reads.d.ts.map +1 -0
  105. package/dist/commands/bot-reads.js +13 -0
  106. package/dist/commands/bot-reads.js.map +1 -0
  107. package/dist/commands/bot-sends.d.ts +13 -0
  108. package/dist/commands/bot-sends.d.ts.map +1 -0
  109. package/dist/commands/bot-sends.js +103 -0
  110. package/dist/commands/bot-sends.js.map +1 -0
  111. package/dist/commands/bot-setup.d.ts +3 -0
  112. package/dist/commands/bot-setup.d.ts.map +1 -0
  113. package/dist/commands/bot-setup.js +20 -0
  114. package/dist/commands/bot-setup.js.map +1 -0
  115. package/dist/commands/bot.d.ts +3 -0
  116. package/dist/commands/bot.d.ts.map +1 -0
  117. package/dist/commands/bot.js +60 -0
  118. package/dist/commands/bot.js.map +1 -0
  119. package/dist/commands/calls.d.ts +3 -0
  120. package/dist/commands/calls.d.ts.map +1 -0
  121. package/dist/commands/calls.js +4 -0
  122. package/dist/commands/calls.js.map +1 -0
  123. package/dist/commands/chats.d.ts +3 -0
  124. package/dist/commands/chats.d.ts.map +1 -0
  125. package/dist/commands/chats.js +46 -0
  126. package/dist/commands/chats.js.map +1 -0
  127. package/dist/commands/commands.d.ts +2 -0
  128. package/dist/commands/commands.d.ts.map +1 -0
  129. package/dist/commands/commands.js +4 -0
  130. package/dist/commands/commands.js.map +1 -0
  131. package/dist/commands/complete.d.ts +2 -0
  132. package/dist/commands/complete.d.ts.map +1 -0
  133. package/dist/commands/complete.js +34 -0
  134. package/dist/commands/complete.js.map +1 -0
  135. package/dist/commands/config.d.ts +3 -0
  136. package/dist/commands/config.d.ts.map +1 -0
  137. package/dist/commands/config.js +170 -0
  138. package/dist/commands/config.js.map +1 -0
  139. package/dist/commands/contacts.d.ts +10 -0
  140. package/dist/commands/contacts.d.ts.map +1 -0
  141. package/dist/commands/contacts.js +80 -0
  142. package/dist/commands/contacts.js.map +1 -0
  143. package/dist/commands/context.d.ts +126 -0
  144. package/dist/commands/context.d.ts.map +1 -0
  145. package/dist/commands/context.js +137 -0
  146. package/dist/commands/context.js.map +1 -0
  147. package/dist/commands/doctor.d.ts +24 -0
  148. package/dist/commands/doctor.d.ts.map +1 -0
  149. package/dist/commands/doctor.js +308 -0
  150. package/dist/commands/doctor.js.map +1 -0
  151. package/dist/commands/mcp.d.ts +36 -0
  152. package/dist/commands/mcp.d.ts.map +1 -0
  153. package/dist/commands/mcp.js +214 -0
  154. package/dist/commands/mcp.js.map +1 -0
  155. package/dist/commands/messages.d.ts +3 -0
  156. package/dist/commands/messages.d.ts.map +1 -0
  157. package/dist/commands/messages.js +105 -0
  158. package/dist/commands/messages.js.map +1 -0
  159. package/dist/commands/models.d.ts +3 -0
  160. package/dist/commands/models.d.ts.map +1 -0
  161. package/dist/commands/models.js +4 -0
  162. package/dist/commands/models.js.map +1 -0
  163. package/dist/commands/paging.d.ts +59 -0
  164. package/dist/commands/paging.d.ts.map +1 -0
  165. package/dist/commands/paging.js +77 -0
  166. package/dist/commands/paging.js.map +1 -0
  167. package/dist/commands/recipients.d.ts +9 -0
  168. package/dist/commands/recipients.d.ts.map +1 -0
  169. package/dist/commands/recipients.js +74 -0
  170. package/dist/commands/recipients.js.map +1 -0
  171. package/dist/commands/runs.d.ts +2 -0
  172. package/dist/commands/runs.d.ts.map +1 -0
  173. package/dist/commands/runs.js +4 -0
  174. package/dist/commands/runs.js.map +1 -0
  175. package/dist/commands/sends.d.ts +3 -0
  176. package/dist/commands/sends.d.ts.map +1 -0
  177. package/dist/commands/sends.js +4 -0
  178. package/dist/commands/sends.js.map +1 -0
  179. package/dist/commands/serve-members.d.ts +14 -0
  180. package/dist/commands/serve-members.d.ts.map +1 -0
  181. package/dist/commands/serve-members.js +54 -0
  182. package/dist/commands/serve-members.js.map +1 -0
  183. package/dist/commands/serve-stems.d.ts +9 -0
  184. package/dist/commands/serve-stems.d.ts.map +1 -0
  185. package/dist/commands/serve-stems.js +26 -0
  186. package/dist/commands/serve-stems.js.map +1 -0
  187. package/dist/commands/serve.d.ts +10 -0
  188. package/dist/commands/serve.d.ts.map +1 -0
  189. package/dist/commands/serve.js +79 -0
  190. package/dist/commands/serve.js.map +1 -0
  191. package/dist/commands/server.d.ts +16 -0
  192. package/dist/commands/server.d.ts.map +1 -0
  193. package/dist/commands/server.js +51 -0
  194. package/dist/commands/server.js.map +1 -0
  195. package/dist/commands/session.d.ts +15 -0
  196. package/dist/commands/session.d.ts.map +1 -0
  197. package/dist/commands/session.js +169 -0
  198. package/dist/commands/session.js.map +1 -0
  199. package/dist/commands/setup.d.ts +3 -0
  200. package/dist/commands/setup.d.ts.map +1 -0
  201. package/dist/commands/setup.js +168 -0
  202. package/dist/commands/setup.js.map +1 -0
  203. package/dist/commands/skill.d.ts +3 -0
  204. package/dist/commands/skill.d.ts.map +1 -0
  205. package/dist/commands/skill.js +7 -0
  206. package/dist/commands/skill.js.map +1 -0
  207. package/dist/commands/stickers.d.ts +3 -0
  208. package/dist/commands/stickers.d.ts.map +1 -0
  209. package/dist/commands/stickers.js +4 -0
  210. package/dist/commands/stickers.js.map +1 -0
  211. package/dist/commands/upgrade.d.ts +2 -0
  212. package/dist/commands/upgrade.d.ts.map +1 -0
  213. package/dist/commands/upgrade.js +14 -0
  214. package/dist/commands/upgrade.js.map +1 -0
  215. package/dist/commands/watch.d.ts +27 -0
  216. package/dist/commands/watch.d.ts.map +1 -0
  217. package/dist/commands/watch.js +105 -0
  218. package/dist/commands/watch.js.map +1 -0
  219. package/dist/config.d.ts +385 -0
  220. package/dist/config.d.ts.map +1 -0
  221. package/dist/config.js +372 -0
  222. package/dist/config.js.map +1 -0
  223. package/dist/deadline.d.ts +2 -0
  224. package/dist/deadline.d.ts.map +1 -0
  225. package/dist/deadline.js +2 -0
  226. package/dist/deadline.js.map +1 -0
  227. package/dist/diagnose.d.ts +143 -0
  228. package/dist/diagnose.d.ts.map +1 -0
  229. package/dist/diagnose.js +183 -0
  230. package/dist/diagnose.js.map +1 -0
  231. package/dist/domain/map.d.ts +65 -0
  232. package/dist/domain/map.d.ts.map +1 -0
  233. package/dist/domain/map.js +431 -0
  234. package/dist/domain/map.js.map +1 -0
  235. package/dist/domain/models.d.ts +238 -0
  236. package/dist/domain/models.d.ts.map +1 -0
  237. package/dist/domain/models.js +17 -0
  238. package/dist/domain/models.js.map +1 -0
  239. package/dist/download.d.ts +38 -0
  240. package/dist/download.d.ts.map +1 -0
  241. package/dist/download.js +199 -0
  242. package/dist/download.js.map +1 -0
  243. package/dist/format-markdown.d.ts +13 -0
  244. package/dist/format-markdown.d.ts.map +1 -0
  245. package/dist/format-markdown.js +241 -0
  246. package/dist/format-markdown.js.map +1 -0
  247. package/dist/generated/client.generated.d.ts +95 -0
  248. package/dist/generated/client.generated.d.ts.map +1 -0
  249. package/dist/generated/client.generated.js +91 -0
  250. package/dist/generated/client.generated.js.map +1 -0
  251. package/dist/generated/opcodes.generated.d.ts +76 -0
  252. package/dist/generated/opcodes.generated.d.ts.map +1 -0
  253. package/dist/generated/opcodes.generated.js +76 -0
  254. package/dist/generated/opcodes.generated.js.map +1 -0
  255. package/dist/generated/operations.generated.d.ts +502 -0
  256. package/dist/generated/operations.generated.d.ts.map +1 -0
  257. package/dist/generated/operations.generated.js +72 -0
  258. package/dist/generated/operations.generated.js.map +1 -0
  259. package/dist/inbox-point.d.ts +3 -0
  260. package/dist/inbox-point.d.ts.map +1 -0
  261. package/dist/inbox-point.js +17 -0
  262. package/dist/inbox-point.js.map +1 -0
  263. package/dist/install/postinstall.d.ts +8 -0
  264. package/dist/install/postinstall.d.ts.map +1 -0
  265. package/dist/install/postinstall.js +62 -0
  266. package/dist/install/postinstall.js.map +1 -0
  267. package/dist/install.d.ts +43 -0
  268. package/dist/install.d.ts.map +1 -0
  269. package/dist/install.js +142 -0
  270. package/dist/install.js.map +1 -0
  271. package/dist/markdown.d.ts +13 -0
  272. package/dist/markdown.d.ts.map +1 -0
  273. package/dist/markdown.js +6 -0
  274. package/dist/markdown.js.map +1 -0
  275. package/dist/mcp/instructions.d.ts +13 -0
  276. package/dist/mcp/instructions.d.ts.map +1 -0
  277. package/dist/mcp/instructions.js +16 -0
  278. package/dist/mcp/instructions.js.map +1 -0
  279. package/dist/mcp/legacy-check.d.ts +12 -0
  280. package/dist/mcp/legacy-check.d.ts.map +1 -0
  281. package/dist/mcp/legacy-check.js +44 -0
  282. package/dist/mcp/legacy-check.js.map +1 -0
  283. package/dist/mcp/photo.d.ts +9 -0
  284. package/dist/mcp/photo.d.ts.map +1 -0
  285. package/dist/mcp/photo.js +38 -0
  286. package/dist/mcp/photo.js.map +1 -0
  287. package/dist/mcp/prompts.d.ts +7 -0
  288. package/dist/mcp/prompts.d.ts.map +1 -0
  289. package/dist/mcp/prompts.js +100 -0
  290. package/dist/mcp/prompts.js.map +1 -0
  291. package/dist/mcp/resources.d.ts +15 -0
  292. package/dist/mcp/resources.d.ts.map +1 -0
  293. package/dist/mcp/resources.js +56 -0
  294. package/dist/mcp/resources.js.map +1 -0
  295. package/dist/mcp/server.d.ts +31 -0
  296. package/dist/mcp/server.d.ts.map +1 -0
  297. package/dist/mcp/server.js +116 -0
  298. package/dist/mcp/server.js.map +1 -0
  299. package/dist/mcp/session.d.ts +30 -0
  300. package/dist/mcp/session.d.ts.map +1 -0
  301. package/dist/mcp/session.js +109 -0
  302. package/dist/mcp/session.js.map +1 -0
  303. package/dist/mcp/shared.d.ts +14 -0
  304. package/dist/mcp/shared.d.ts.map +1 -0
  305. package/dist/mcp/shared.js +46 -0
  306. package/dist/mcp/shared.js.map +1 -0
  307. package/dist/mcp/tools.d.ts +30 -0
  308. package/dist/mcp/tools.d.ts.map +1 -0
  309. package/dist/mcp/tools.js +248 -0
  310. package/dist/mcp/tools.js.map +1 -0
  311. package/dist/messenger.d.ts +15 -0
  312. package/dist/messenger.d.ts.map +1 -0
  313. package/dist/messenger.js +149 -0
  314. package/dist/messenger.js.map +1 -0
  315. package/dist/moderation/check.d.ts +103 -0
  316. package/dist/moderation/check.d.ts.map +1 -0
  317. package/dist/moderation/check.js +273 -0
  318. package/dist/moderation/check.js.map +1 -0
  319. package/dist/moderation/points.d.ts +8 -0
  320. package/dist/moderation/points.d.ts.map +1 -0
  321. package/dist/moderation/points.js +21 -0
  322. package/dist/moderation/points.js.map +1 -0
  323. package/dist/moderation/rules.d.ts +7 -0
  324. package/dist/moderation/rules.d.ts.map +1 -0
  325. package/dist/moderation/rules.js +24 -0
  326. package/dist/moderation/rules.js.map +1 -0
  327. package/dist/online.d.ts +23 -0
  328. package/dist/online.d.ts.map +1 -0
  329. package/dist/online.js +87 -0
  330. package/dist/online.js.map +1 -0
  331. package/dist/output.d.ts +2 -0
  332. package/dist/output.d.ts.map +1 -0
  333. package/dist/output.js +2 -0
  334. package/dist/output.js.map +1 -0
  335. package/dist/permissions.d.ts +20 -0
  336. package/dist/permissions.d.ts.map +1 -0
  337. package/dist/permissions.js +76 -0
  338. package/dist/permissions.js.map +1 -0
  339. package/dist/profile.d.ts +33 -0
  340. package/dist/profile.d.ts.map +1 -0
  341. package/dist/profile.js +60 -0
  342. package/dist/profile.js.map +1 -0
  343. package/dist/program.d.ts +10 -0
  344. package/dist/program.d.ts.map +1 -0
  345. package/dist/program.js +172 -0
  346. package/dist/program.js.map +1 -0
  347. package/dist/protocol/connection.d.ts +83 -0
  348. package/dist/protocol/connection.d.ts.map +1 -0
  349. package/dist/protocol/connection.js +301 -0
  350. package/dist/protocol/connection.js.map +1 -0
  351. package/dist/protocol/frame.d.ts +55 -0
  352. package/dist/protocol/frame.d.ts.map +1 -0
  353. package/dist/protocol/frame.js +149 -0
  354. package/dist/protocol/frame.js.map +1 -0
  355. package/dist/protocol/lz4.d.ts +15 -0
  356. package/dist/protocol/lz4.d.ts.map +1 -0
  357. package/dist/protocol/lz4.js +157 -0
  358. package/dist/protocol/lz4.js.map +1 -0
  359. package/dist/record.d.ts +41 -0
  360. package/dist/record.d.ts.map +1 -0
  361. package/dist/record.js +104 -0
  362. package/dist/record.js.map +1 -0
  363. package/dist/rendering/messages.d.ts +24 -0
  364. package/dist/rendering/messages.d.ts.map +1 -0
  365. package/dist/rendering/messages.js +172 -0
  366. package/dist/rendering/messages.js.map +1 -0
  367. package/dist/report.d.ts +43 -0
  368. package/dist/report.d.ts.map +1 -0
  369. package/dist/report.js +104 -0
  370. package/dist/report.js.map +1 -0
  371. package/dist/resolve.d.ts +6 -0
  372. package/dist/resolve.d.ts.map +1 -0
  373. package/dist/resolve.js +5 -0
  374. package/dist/resolve.js.map +1 -0
  375. package/dist/sends.d.ts +17 -0
  376. package/dist/sends.d.ts.map +1 -0
  377. package/dist/sends.js +97 -0
  378. package/dist/sends.js.map +1 -0
  379. package/dist/server/lines.d.ts +23 -0
  380. package/dist/server/lines.d.ts.map +1 -0
  381. package/dist/server/lines.js +56 -0
  382. package/dist/server/lines.js.map +1 -0
  383. package/dist/server/replies.d.ts +31 -0
  384. package/dist/server/replies.d.ts.map +1 -0
  385. package/dist/server/replies.js +95 -0
  386. package/dist/server/replies.js.map +1 -0
  387. package/dist/server/server-connection.d.ts +55 -0
  388. package/dist/server/server-connection.d.ts.map +1 -0
  389. package/dist/server/server-connection.js +245 -0
  390. package/dist/server/server-connection.js.map +1 -0
  391. package/dist/server/server.d.ts +88 -0
  392. package/dist/server/server.d.ts.map +1 -0
  393. package/dist/server/server.js +634 -0
  394. package/dist/server/server.js.map +1 -0
  395. package/dist/server/start.d.ts +37 -0
  396. package/dist/server/start.d.ts.map +1 -0
  397. package/dist/server/start.js +102 -0
  398. package/dist/server/start.js.map +1 -0
  399. package/dist/server/subscribe.d.ts +9 -0
  400. package/dist/server/subscribe.d.ts.map +1 -0
  401. package/dist/server/subscribe.js +26 -0
  402. package/dist/server/subscribe.js.map +1 -0
  403. package/dist/session/adopt.d.ts +22 -0
  404. package/dist/session/adopt.d.ts.map +1 -0
  405. package/dist/session/adopt.js +34 -0
  406. package/dist/session/adopt.js.map +1 -0
  407. package/dist/session/browser.d.ts +55 -0
  408. package/dist/session/browser.d.ts.map +1 -0
  409. package/dist/session/browser.js +321 -0
  410. package/dist/session/browser.js.map +1 -0
  411. package/dist/session/handshake.d.ts +57 -0
  412. package/dist/session/handshake.d.ts.map +1 -0
  413. package/dist/session/handshake.js +40 -0
  414. package/dist/session/handshake.js.map +1 -0
  415. package/dist/session/login.d.ts +20 -0
  416. package/dist/session/login.d.ts.map +1 -0
  417. package/dist/session/login.js +66 -0
  418. package/dist/session/login.js.map +1 -0
  419. package/dist/session/prompt.d.ts +2 -0
  420. package/dist/session/prompt.d.ts.map +1 -0
  421. package/dist/session/prompt.js +2 -0
  422. package/dist/session/prompt.js.map +1 -0
  423. package/dist/session/qr-terminal.d.ts +9 -0
  424. package/dist/session/qr-terminal.d.ts.map +1 -0
  425. package/dist/session/qr-terminal.js +34 -0
  426. package/dist/session/qr-terminal.js.map +1 -0
  427. package/dist/session/store.d.ts +76 -0
  428. package/dist/session/store.d.ts.map +1 -0
  429. package/dist/session/store.js +134 -0
  430. package/dist/session/store.js.map +1 -0
  431. package/dist/skill.d.ts +7 -0
  432. package/dist/skill.d.ts.map +1 -0
  433. package/dist/skill.js +8 -0
  434. package/dist/skill.js.map +1 -0
  435. package/dist/spec/check.d.ts +16 -0
  436. package/dist/spec/check.d.ts.map +1 -0
  437. package/dist/spec/check.js +44 -0
  438. package/dist/spec/check.js.map +1 -0
  439. package/dist/spec/define.d.ts +108 -0
  440. package/dist/spec/define.d.ts.map +1 -0
  441. package/dist/spec/define.js +47 -0
  442. package/dist/spec/define.js.map +1 -0
  443. package/dist/spec/guards.d.ts +16 -0
  444. package/dist/spec/guards.d.ts.map +1 -0
  445. package/dist/spec/guards.js +30 -0
  446. package/dist/spec/guards.js.map +1 -0
  447. package/dist/spec/identity.d.ts +57 -0
  448. package/dist/spec/identity.d.ts.map +1 -0
  449. package/dist/spec/identity.js +53 -0
  450. package/dist/spec/identity.js.map +1 -0
  451. package/dist/spec/index.d.ts +15 -0
  452. package/dist/spec/index.d.ts.map +1 -0
  453. package/dist/spec/index.js +84 -0
  454. package/dist/spec/index.js.map +1 -0
  455. package/dist/spec/operations/account.d.ts +39 -0
  456. package/dist/spec/operations/account.d.ts.map +1 -0
  457. package/dist/spec/operations/account.js +103 -0
  458. package/dist/spec/operations/account.js.map +1 -0
  459. package/dist/spec/operations/assets.d.ts +17 -0
  460. package/dist/spec/operations/assets.d.ts.map +1 -0
  461. package/dist/spec/operations/assets.js +43 -0
  462. package/dist/spec/operations/assets.js.map +1 -0
  463. package/dist/spec/operations/attachments.d.ts +15 -0
  464. package/dist/spec/operations/attachments.d.ts.map +1 -0
  465. package/dist/spec/operations/attachments.js +40 -0
  466. package/dist/spec/operations/attachments.js.map +1 -0
  467. package/dist/spec/operations/banners.d.ts +7 -0
  468. package/dist/spec/operations/banners.d.ts.map +1 -0
  469. package/dist/spec/operations/banners.js +16 -0
  470. package/dist/spec/operations/banners.js.map +1 -0
  471. package/dist/spec/operations/calls.d.ts +8 -0
  472. package/dist/spec/operations/calls.d.ts.map +1 -0
  473. package/dist/spec/operations/calls.js +25 -0
  474. package/dist/spec/operations/calls.js.map +1 -0
  475. package/dist/spec/operations/chats.d.ts +115 -0
  476. package/dist/spec/operations/chats.d.ts.map +1 -0
  477. package/dist/spec/operations/chats.js +331 -0
  478. package/dist/spec/operations/chats.js.map +1 -0
  479. package/dist/spec/operations/contacts.d.ts +39 -0
  480. package/dist/spec/operations/contacts.d.ts.map +1 -0
  481. package/dist/spec/operations/contacts.js +135 -0
  482. package/dist/spec/operations/contacts.js.map +1 -0
  483. package/dist/spec/operations/folders.d.ts +31 -0
  484. package/dist/spec/operations/folders.d.ts.map +1 -0
  485. package/dist/spec/operations/folders.js +94 -0
  486. package/dist/spec/operations/folders.js.map +1 -0
  487. package/dist/spec/operations/login.d.ts +64 -0
  488. package/dist/spec/operations/login.d.ts.map +1 -0
  489. package/dist/spec/operations/login.js +105 -0
  490. package/dist/spec/operations/login.js.map +1 -0
  491. package/dist/spec/operations/messages.d.ts +142 -0
  492. package/dist/spec/operations/messages.d.ts.map +1 -0
  493. package/dist/spec/operations/messages.js +347 -0
  494. package/dist/spec/operations/messages.js.map +1 -0
  495. package/dist/spec/operations/session.d.ts +120 -0
  496. package/dist/spec/operations/session.d.ts.map +1 -0
  497. package/dist/spec/operations/session.js +202 -0
  498. package/dist/spec/operations/session.js.map +1 -0
  499. package/dist/spec/operations/uploads.d.ts +31 -0
  500. package/dist/spec/operations/uploads.d.ts.map +1 -0
  501. package/dist/spec/operations/uploads.js +59 -0
  502. package/dist/spec/operations/uploads.js.map +1 -0
  503. package/dist/spec/scalars.d.ts +17 -0
  504. package/dist/spec/scalars.d.ts.map +1 -0
  505. package/dist/spec/scalars.js +33 -0
  506. package/dist/spec/scalars.js.map +1 -0
  507. package/dist/transcribe/index.d.ts +70 -0
  508. package/dist/transcribe/index.d.ts.map +1 -0
  509. package/dist/transcribe/index.js +127 -0
  510. package/dist/transcribe/index.js.map +1 -0
  511. package/dist/transcribe/install.d.ts +2 -0
  512. package/dist/transcribe/install.d.ts.map +1 -0
  513. package/dist/transcribe/install.js +2 -0
  514. package/dist/transcribe/install.js.map +1 -0
  515. package/dist/transcribe/models.d.ts +5 -0
  516. package/dist/transcribe/models.d.ts.map +1 -0
  517. package/dist/transcribe/models.js +6 -0
  518. package/dist/transcribe/models.js.map +1 -0
  519. package/dist/transcribe/speech.d.ts +25 -0
  520. package/dist/transcribe/speech.d.ts.map +1 -0
  521. package/dist/transcribe/speech.js +107 -0
  522. package/dist/transcribe/speech.js.map +1 -0
  523. package/dist/update.d.ts +31 -0
  524. package/dist/update.d.ts.map +1 -0
  525. package/dist/update.js +69 -0
  526. package/dist/update.js.map +1 -0
  527. package/dist/upload.d.ts +15 -0
  528. package/dist/upload.d.ts.map +1 -0
  529. package/dist/upload.js +97 -0
  530. package/dist/upload.js.map +1 -0
  531. package/dist/version.d.ts +2 -0
  532. package/dist/version.d.ts.map +1 -0
  533. package/dist/version.js +2 -0
  534. package/dist/version.js.map +1 -0
  535. package/dist/voice.d.ts +9 -0
  536. package/dist/voice.d.ts.map +1 -0
  537. package/dist/voice.js +36 -0
  538. package/dist/voice.js.map +1 -0
  539. package/dist/wire-events.d.ts +23 -0
  540. package/dist/wire-events.d.ts.map +1 -0
  541. package/dist/wire-events.js +47 -0
  542. package/dist/wire-events.js.map +1 -0
  543. package/install/postinstall.mjs +3 -0
  544. package/install/windows.ps1 +160 -0
  545. package/package.json +119 -2
  546. package/skills/max-cli/SKILL.md +518 -0
@@ -0,0 +1,273 @@
1
+ import { CliError } from "@wirecat/cli-core";
2
+ import { moderationPoints } from "./points.js";
3
+ import { defaultRules, ModerationRules, moderationPathFor } from "./rules.js";
4
+ const INVITE = /max\.ru\/join\//i;
5
+ const LINK = /https?:\/\/\S+/i;
6
+ /** Which action wins when a message breaks several rules; the first rule listed breaks a tie. */
7
+ const STRENGTH = { report: 0, delete: 1, remove: 2 };
8
+ /**
9
+ * What the rules say about what is new. Pure: nothing here talks to MAX. One finding per message —
10
+ * the rule with the strongest action — and one removal per person, whatever else they did.
11
+ */
12
+ export const judge = ({ rules, messages, joined, answerers, now }) => {
13
+ const trusted = new Set(rules.trusted);
14
+ const blocked = (id, name) => (id !== null && rules.blocked.includes(id)) ||
15
+ (name !== null && rules.blockedNames.some((part) => name.toLocaleLowerCase().includes(part.toLocaleLowerCase())));
16
+ const young = (member) => rules.newAccount.days > 0 &&
17
+ member.registeredAt !== null &&
18
+ now - Date.parse(member.registeredAt) < rules.newAccount.days * 86_400_000;
19
+ const found = [];
20
+ const add = (finding) => {
21
+ if (finding.action === "remove" && found.some((f) => f.action === "remove" && f.personId === finding.personId)) {
22
+ return;
23
+ }
24
+ found.push(finding);
25
+ };
26
+ for (const member of joined) {
27
+ if (trusted.has(member.id) || answerers.has(member.id))
28
+ continue;
29
+ const person = { kind: "member", personId: member.id, personName: member.name };
30
+ if (blocked(member.id, member.name)) {
31
+ add({ ...person, rule: "blocked", action: rules.blockedPeople === "remove" ? "remove" : "report" });
32
+ }
33
+ else if (young(member)) {
34
+ add({ ...person, rule: "newAccount", action: rules.newAccount.action });
35
+ }
36
+ }
37
+ const flooding = floodOf(messages, rules.flood);
38
+ for (const message of messages) {
39
+ const id = message.senderId;
40
+ if (id === null || message.outgoing === true || answerers.has(id) || trusted.has(id))
41
+ continue;
42
+ if (message.attachments.some((attachment) => attachment.kind === "control"))
43
+ continue;
44
+ const base = { kind: "message", personId: id, personName: message.senderName, messageId: message.id };
45
+ const text = message.text;
46
+ const broken = [];
47
+ if (blocked(id, message.senderName))
48
+ broken.push(["blocked", rules.blockedPeople]);
49
+ if (INVITE.test(text))
50
+ broken.push(["invites", rules.invites]);
51
+ if (LINK.test(text) || message.attachments.some((attachment) => attachment.kind === "share")) {
52
+ broken.push(["links", rules.links]);
53
+ }
54
+ if (message.forwardedFrom !== null)
55
+ broken.push(["forwards", rules.forwards]);
56
+ if (flooding.has(message.id))
57
+ broken.push(["flood", rules.flood.action]);
58
+ const strongest = broken.reduce((best, rule) => (best === undefined || STRENGTH[rule[1]] > STRENGTH[best[1]] ? rule : best), undefined);
59
+ if (strongest)
60
+ add({ ...base, rule: strongest[0], action: strongest[1] });
61
+ }
62
+ return found;
63
+ };
64
+ /** Messages past the limit: more than `messages` from one person within `minutes`. */
65
+ const floodOf = (messages, flood) => {
66
+ const window = flood.minutes * 60_000;
67
+ const over = new Set();
68
+ const bySender = new Map();
69
+ for (const message of messages) {
70
+ if (message.senderId === null)
71
+ continue;
72
+ const times = bySender.get(message.senderId) ?? [];
73
+ const at = Date.parse(message.timestamp);
74
+ times.push(at);
75
+ bySender.set(message.senderId, times);
76
+ if (times.filter((time) => at - time < window).length > flood.messages)
77
+ over.add(message.id);
78
+ }
79
+ return over;
80
+ };
81
+ const CONSENT = {
82
+ delete: "delete",
83
+ remove: "remove",
84
+ };
85
+ /** The personal account: deleting is for everyone, removing leaves messages and cannot ban. */
86
+ export const personal = (client) => ({
87
+ deleteMessage: async (chatId, messageId) => {
88
+ await client.messages.delete(chatId, [messageId], { forEveryone: true });
89
+ },
90
+ removePerson: async (chatId, personId) => {
91
+ await client.chats.members.remove(chatId, [personId]);
92
+ },
93
+ });
94
+ /**
95
+ * Does what the findings ask, as far as consent, the per-run limit and the guard let it. Stops
96
+ * acting at the first hourly-limit refusal: the rest is `skipped`, never tried.
97
+ */
98
+ export const act = async (moderator, findings, options) => {
99
+ const { chatId, rules, allowDangerous, dryRun, maxActions, confirm } = options;
100
+ const rows = [];
101
+ let acted = 0;
102
+ let stopped;
103
+ for (const finding of findings) {
104
+ if (finding.action === "report") {
105
+ rows.push({ ...finding, outcome: "reported" });
106
+ continue;
107
+ }
108
+ const command = commandFor(chatId, finding);
109
+ const level = rules.consent[CONSENT[finding.action]];
110
+ const row = (outcome, reason) => ({
111
+ ...finding,
112
+ outcome,
113
+ ...(reason ? { reason } : {}),
114
+ ...(outcome === "done" ? {} : { command }),
115
+ });
116
+ if (level === "deny") {
117
+ rows.push(row("forbidden", `consent.${CONSENT[finding.action]} is deny`));
118
+ continue;
119
+ }
120
+ if (dryRun) {
121
+ rows.push(row("planned", "--dry-run"));
122
+ continue;
123
+ }
124
+ if (level === "readonly") {
125
+ rows.push(row("reported", `consent.${CONSENT[finding.action]} is readonly`));
126
+ continue;
127
+ }
128
+ if (stopped || acted >= maxActions) {
129
+ rows.push(row("skipped", stopped ?? `over the limit of ${maxActions} actions per check`));
130
+ continue;
131
+ }
132
+ if (level === "ask" && !allowDangerous) {
133
+ if (!confirm) {
134
+ rows.push(row("planned", `consent.${CONSENT[finding.action]} is ask, and nobody is there to ask`));
135
+ continue;
136
+ }
137
+ if (!(await confirm(finding))) {
138
+ rows.push(row("declined", "not confirmed"));
139
+ continue;
140
+ }
141
+ }
142
+ acted += 1;
143
+ try {
144
+ if (finding.action === "delete" && finding.messageId) {
145
+ await moderator.deleteMessage(chatId, finding.messageId);
146
+ }
147
+ else {
148
+ await moderator.removePerson(chatId, finding.personId);
149
+ }
150
+ rows.push(row("done"));
151
+ }
152
+ catch (error) {
153
+ const failure = asCliError(error);
154
+ if (failure.code === "rate_limited")
155
+ stopped = failure.message;
156
+ const refused = ["rate_limited", "permission_error", "confirmation_required"].includes(failure.code);
157
+ rows.push(row(refused ? "refused" : "failed", failure.message));
158
+ }
159
+ }
160
+ return rows;
161
+ };
162
+ const asCliError = (error) => error instanceof CliError
163
+ ? error
164
+ : new CliError("provider_error", error instanceof Error ? error.message : String(error));
165
+ const who = (finding) => finding.personName ?? finding.personId;
166
+ /** One action in words, for a prompt or a confirmation form. */
167
+ export const describe = (finding) => finding.action === "delete"
168
+ ? `delete message ${finding.messageId} from ${who(finding)} for everyone (${finding.rule})`
169
+ : `remove ${who(finding)} from the group (${finding.rule})`;
170
+ /** Whether acting on it waits for the owner's yes. */
171
+ export const needsConfirm = (rules, finding) => (finding.action === "delete" || finding.action === "remove") && rules.consent[finding.action] === "ask";
172
+ const commandFor = (chatId, finding) => {
173
+ switch (finding.action) {
174
+ case "delete":
175
+ return `max messages delete ${chatId} ${finding.messageId} --for-everyone --allow-dangerous`;
176
+ case "remove":
177
+ return `max chats members remove ${chatId} ${finding.personId}`;
178
+ default:
179
+ return "";
180
+ }
181
+ };
182
+ /**
183
+ * What is new in the group since `since`: its messages, who joined (from the service messages —
184
+ * `add` measured, `joinByLink` assumed to name the joiner or be sent by them), who asks to join,
185
+ * and who the admins are.
186
+ */
187
+ export const gather = async (client, chatId, since) => {
188
+ const notes = [];
189
+ const { messages, more } = await client.chats.since(chatId, since);
190
+ const joinedIds = new Set(messages.flatMap((message) => message.attachments.flatMap((attachment) => {
191
+ if (attachment.event === "add")
192
+ return attachment.userIds ?? [];
193
+ if (attachment.event === "joinByLink") {
194
+ return attachment.userIds?.length ? attachment.userIds : message.senderId ? [message.senderId] : [];
195
+ }
196
+ return [];
197
+ })));
198
+ const joined = joinedIds.size === 0
199
+ ? []
200
+ : (await client.chats.members.list(chatId)).members.filter((member) => joinedIds.has(member.id));
201
+ const admins = await client.chats.adminIds(chatId);
202
+ if (admins === undefined)
203
+ notes.push("the group's admins are not known, so only your own messages are exempt");
204
+ return {
205
+ messages,
206
+ joined,
207
+ answerers: new Set(admins ?? []),
208
+ until: messages.at(-1)?.timestamp ?? null,
209
+ more,
210
+ notes,
211
+ };
212
+ };
213
+ export const MAX_ACTIONS = 10;
214
+ export const sessionPoints = moderationPoints;
215
+ /** A group never checked before is looked at this far back. */
216
+ const FIRST_LOOK_MS = 24 * 3_600_000;
217
+ /** Reads and judges; changes nothing. `since` overrides the group's saved point. */
218
+ export const prepare = async (client, { points, profile, chat, since }) => {
219
+ const group = await client.chats.show(chat);
220
+ const saved = new ModerationRules(moderationPathFor(profile)).read(group.id);
221
+ const rules = saved ?? defaultRules(group.title);
222
+ const point = points.read(group.id);
223
+ const from = since ?? (point === undefined ? Date.now() - FIRST_LOOK_MS : Date.parse(point));
224
+ const found = await gather(client, group.id, from);
225
+ return {
226
+ chatId: group.id,
227
+ title: group.title,
228
+ rules,
229
+ found,
230
+ findings: judge({ ...found, rules, now: Date.now() }),
231
+ explicit: since !== undefined,
232
+ notes: [
233
+ ...(saved ? [] : [`${group.title ?? group.id} has no rules yet — the defaults only report`]),
234
+ ...found.notes,
235
+ ],
236
+ };
237
+ };
238
+ /** Acts on what `prepare` found, moves the group's saved point, and says what is left. */
239
+ export const finish = async (moderator, points, prepared, options) => {
240
+ const { chatId, rules, found, findings, explicit } = prepared;
241
+ const rows = await act(moderator, findings, { ...options, chatId, rules });
242
+ const notes = [...prepared.notes];
243
+ const next = nextPoint(rows, found);
244
+ if (!explicit && !options.dryRun && next !== null) {
245
+ points.write(chatId, next);
246
+ }
247
+ if (next !== found.until && rows.some(undone)) {
248
+ notes.push("some actions are not done — the next check starts at the first of them");
249
+ }
250
+ else if (found.more) {
251
+ notes.push("more history than one check reads — the next check goes on from here");
252
+ }
253
+ return { rows, notes };
254
+ };
255
+ const undone = (row) => ["planned", "skipped", "failed"].includes(row.outcome);
256
+ /**
257
+ * Where the next check starts: after the newest message read, or just before the first message whose
258
+ * action is still undone — so it is judged again, and what came after it is still read. A person
259
+ * who joined and is still undone keeps the point where it was, since the join is not a row's message.
260
+ */
261
+ const nextPoint = (rows, found) => {
262
+ const waiting = rows.filter(undone);
263
+ if (waiting.some((row) => row.messageId === undefined))
264
+ return null;
265
+ const times = waiting
266
+ .map((row) => found.messages.find((message) => message.id === row.messageId)?.timestamp)
267
+ .filter((time) => time !== undefined)
268
+ .map(Date.parse);
269
+ if (times.length === 0)
270
+ return found.until;
271
+ return new Date(Math.min(...times) - 1).toISOString();
272
+ };
273
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/moderation/check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { ModerationRules } from "@wirecat/cli-messaging";
2
+ import type { SessionStore } from "../session/store.js";
3
+ export declare const migrateModerationPoints: (store: SessionStore, env?: NodeJS.ProcessEnv) => ModerationRules;
4
+ export declare const moderationPoints: (store: SessionStore, env?: NodeJS.ProcessEnv) => {
5
+ read: (chatId: string) => string | undefined;
6
+ write: (chatId: string, at: string) => void;
7
+ };
8
+ //# sourceMappingURL=points.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"points.d.ts","sourceRoot":"","sources":["../../src/moderation/points.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAqB,MAAM,wBAAwB,CAAA;AAE3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAEvD,eAAO,MAAM,uBAAuB,UAAW,YAAY,QAAO,MAAM,CAAC,UAAU,KAAiB,eAenG,CAAA;AAGD,eAAO,MAAM,gBAAgB,UAAW,YAAY,QAAO,MAAM,CAAC,UAAU;IAC1E,IAAI,WAAW,MAAM,KAAG,MAAM,GAAG,SAAS;IAC1C,KAAK,WAAW,MAAM,MAAM,MAAM,KAAG,IAAI;CACzC,CAAA"}
@@ -0,0 +1,21 @@
1
+ import { CliError } from "@wirecat/cli-core";
2
+ import { ModerationRules, moderationPathFor } from "@wirecat/cli-messaging";
3
+ import { MAX_APP } from "../app.js";
4
+ export const migrateModerationPoints = (store, env = process.env) => {
5
+ const rules = new ModerationRules(moderationPathFor(MAX_APP, store.profile, env));
6
+ const missing = Object.entries(store.readState().checkedUntil ?? {}).filter(([id]) => rules.checkedUntil(id) === undefined);
7
+ for (const [id, at] of missing) {
8
+ if (!Number.isFinite(Date.parse(at))) {
9
+ throw new CliError("configuration_error", `the saved moderation time for chat ${id} is invalid — fix checkedUntil in the session state`);
10
+ }
11
+ }
12
+ for (const [id, at] of missing)
13
+ rules.markChecked(id, at);
14
+ return rules;
15
+ };
16
+ // Legacy MCP and shared CLI must advance the same point while the MCP surface waits for P7.
17
+ export const moderationPoints = (store, env = process.env) => ({
18
+ read: (chatId) => migrateModerationPoints(store, env).checkedUntil(chatId),
19
+ write: (chatId, at) => migrateModerationPoints(store, env).markChecked(chatId, at),
20
+ });
21
+ //# sourceMappingURL=points.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"points.js","sourceRoot":"","sources":["../../src/moderation/points.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGnC,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,KAAmB,EAAE,GAAG,GAAsB,OAAO,CAAC,GAAG,EAAmB,EAAE;IACpH,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;IACjF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,MAAM,CACzE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,SAAS,CAC/C,CAAA;IACD,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,QAAQ,CAChB,qBAAqB,EACrB,sCAAsC,EAAE,qDAAqD,CAC9F,CAAA;QACH,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,OAAO;QAAE,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;IACzD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED,4FAA4F;AAC5F,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAmB,EAAE,GAAG,GAAsB,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC9F,IAAI,EAAE,CAAC,MAAc,EAAsB,EAAE,CAAC,uBAAuB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC;IACtG,KAAK,EAAE,CAAC,MAAc,EAAE,EAAU,EAAQ,EAAE,CAAC,uBAAuB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;CACzG,CAAC,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { defaultRules, type GroupRules, ModerationRules } from "@wirecat/cli-messaging";
2
+ export { defaultRules, type GroupRules, ModerationRules };
3
+ export declare const RULE_ACTIONS: readonly ["report", "delete", "remove"];
4
+ export declare const RULE_KEYS: string[];
5
+ export declare const CONSENT_LEVELS: readonly ["deny", "readonly", "ask", "allow"];
6
+ export declare const moderationPathFor: (profile: string, env?: NodeJS.ProcessEnv) => string;
7
+ //# sourceMappingURL=rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/moderation/rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,eAAe,EAAmC,MAAM,wBAAwB,CAAA;AAIxH,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,eAAe,EAAE,CAAA;AACzD,eAAO,MAAM,YAAY,YAAI,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAA;AACnE,eAAO,MAAM,SAAS,UAerB,CAAA;AACD,eAAO,MAAM,cAAc,+CAAS,CAAA;AACpC,eAAO,MAAM,iBAAiB,YAAa,MAAM,QAAO,MAAM,CAAC,UAAU,KAAiB,MACvD,CAAA"}
@@ -0,0 +1,24 @@
1
+ import { defaultRules, ModerationRules, moderationPathFor as sharedPath } from "@wirecat/cli-messaging";
2
+ import { LEVELS } from "@wirecat/cli-messaging/sends";
3
+ import { MAX_APP } from "../app.js";
4
+ export { defaultRules, ModerationRules };
5
+ export const RULE_ACTIONS = ["report", "delete", "remove"];
6
+ export const RULE_KEYS = [
7
+ "trusted",
8
+ "blocked",
9
+ "blockedNames",
10
+ "links",
11
+ "invites",
12
+ "forwards",
13
+ "blockedPeople",
14
+ "flood.messages",
15
+ "flood.minutes",
16
+ "flood.action",
17
+ "newAccount.days",
18
+ "newAccount.action",
19
+ "consent.delete",
20
+ "consent.remove",
21
+ ];
22
+ export const CONSENT_LEVELS = LEVELS;
23
+ export const moderationPathFor = (profile, env = process.env) => sharedPath(MAX_APP, profile, env);
24
+ //# sourceMappingURL=rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/moderation/rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAmB,eAAe,EAAE,iBAAiB,IAAI,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACxH,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,YAAY,EAAmB,eAAe,EAAE,CAAA;AACzD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAA;AACnE,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,SAAS;IACT,SAAS;IACT,cAAc;IACd,OAAO;IACP,SAAS;IACT,UAAU;IACV,eAAe;IACf,gBAAgB;IAChB,eAAe;IACf,cAAc;IACd,iBAAiB;IACjB,mBAAmB;IACnB,gBAAgB;IAChB,gBAAgB;CACjB,CAAA;AACD,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAA;AACpC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAe,EAAE,GAAG,GAAsB,OAAO,CAAC,GAAG,EAAU,EAAE,CACjG,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAA"}
@@ -0,0 +1,23 @@
1
+ import type { MaxClient } from "./client.js";
2
+ export interface Check {
3
+ name: string;
4
+ ok: boolean;
5
+ detail: string;
6
+ }
7
+ /**
8
+ * `max doctor --online`: **one login and two reads**, then the MCP server started the way a client
9
+ * starts it. Nothing is sent and nothing is marked read. A failed step is an answer, never a retry —
10
+ * each login counts toward MAX's too-many-logins pause (`MAX-38`).
11
+ */
12
+ export declare const checkOnline: (client: MaxClient, handshake: () => Promise<number>) => Promise<Check[]>;
13
+ /**
14
+ * Starts `max mcp` as `node <script>` — never `max`, which on Windows is a `.cmd` file Node does not
15
+ * start without a shell — asks for its tools and closes stdin, which is how a client lets it exit.
16
+ * Listing tools does not log in.
17
+ */
18
+ export declare const mcpHandshake: ({ execPath, scriptPath, env, }: {
19
+ execPath: string;
20
+ scriptPath: string;
21
+ env: NodeJS.ProcessEnv;
22
+ }) => Promise<number>;
23
+ //# sourceMappingURL=online.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"online.d.ts","sourceRoot":"","sources":["../src/online.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAG5C,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,OAAO,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;CACf;AAID;;;;GAIG;AACH,eAAO,MAAM,WAAW,WAAkB,SAAS,aAAa,MAAM,OAAO,CAAC,MAAM,CAAC,KAAG,OAAO,CAAC,KAAK,EAAE,CAoBtG,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,mCAItB;IACD,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,GAAG,EAAE,MAAM,CAAC,UAAU,CAAA;CACvB,KAAG,OAAO,CAAC,MAAM,CA6CjB,CAAA"}
package/dist/online.js ADDED
@@ -0,0 +1,87 @@
1
+ import { spawn } from "node:child_process";
2
+ import { createInterface } from "node:readline";
3
+ import { VERSION } from "./version.js";
4
+ const HANDSHAKE_MS = 20_000;
5
+ /**
6
+ * `max doctor --online`: **one login and two reads**, then the MCP server started the way a client
7
+ * starts it. Nothing is sent and nothing is marked read. A failed step is an answer, never a retry —
8
+ * each login counts toward MAX's too-many-logins pause (`MAX-38`).
9
+ */
10
+ export const checkOnline = async (client, handshake) => {
11
+ const checks = [];
12
+ const step = async (name, body) => {
13
+ try {
14
+ checks.push({ name, ok: true, detail: await body() });
15
+ return true;
16
+ }
17
+ catch (error) {
18
+ checks.push({ name, ok: false, detail: error instanceof Error ? error.message : String(error) });
19
+ return false;
20
+ }
21
+ };
22
+ const loggedIn = await step("login", async () => {
23
+ await client.account.me();
24
+ return "logged in";
25
+ });
26
+ if (loggedIn)
27
+ await step("chats", async () => `${(await client.chats.list({ limit: 1 })).items.length} read`);
28
+ await client.close();
29
+ await step("mcp", async () => `${await handshake()} tools offered`);
30
+ return checks;
31
+ };
32
+ /**
33
+ * Starts `max mcp` as `node <script>` — never `max`, which on Windows is a `.cmd` file Node does not
34
+ * start without a shell — asks for its tools and closes stdin, which is how a client lets it exit.
35
+ * Listing tools does not log in.
36
+ */
37
+ export const mcpHandshake = async ({ execPath, scriptPath, env, }) => {
38
+ const { LATEST_PROTOCOL_VERSION } = await import("@modelcontextprotocol/server");
39
+ const child = spawn(execPath, [scriptPath, "mcp"], { env, stdio: ["pipe", "pipe", "ignore"] });
40
+ const send = (message) => child.stdin.write(`${JSON.stringify({ jsonrpc: "2.0", ...message })}\n`);
41
+ const lines = createInterface({ input: child.stdout });
42
+ try {
43
+ return await new Promise((resolve, reject) => {
44
+ const timer = setTimeout(() => reject(new Error(`no answer in ${HANDSHAKE_MS / 1000} s`)), HANDSHAKE_MS);
45
+ child.once("error", reject);
46
+ child.once("exit", (code) => reject(new Error(`the server exited with code ${code}`)));
47
+ lines.on("line", (line) => {
48
+ let message;
49
+ try {
50
+ message = JSON.parse(line);
51
+ }
52
+ catch {
53
+ return;
54
+ }
55
+ if (message.error)
56
+ reject(new Error(message.error.message ?? "the server answered with an error"));
57
+ else if (message.id === 1) {
58
+ send({ method: "notifications/initialized" });
59
+ send({ id: 2, method: "tools/list" });
60
+ }
61
+ else if (message.id === 2)
62
+ resolve(message.result?.tools?.length ?? 0);
63
+ });
64
+ send({
65
+ id: 1,
66
+ method: "initialize",
67
+ params: {
68
+ protocolVersion: LATEST_PROTOCOL_VERSION,
69
+ capabilities: {},
70
+ clientInfo: { name: "max-doctor", version: VERSION },
71
+ },
72
+ });
73
+ child.once("exit", () => clearTimeout(timer));
74
+ });
75
+ }
76
+ finally {
77
+ lines.close();
78
+ child.stdin.end();
79
+ if (child.pid !== undefined && child.exitCode === null) {
80
+ const exited = new Promise((resolve) => child.once("exit", resolve));
81
+ const killer = setTimeout(() => child.kill(), 3000);
82
+ await exited;
83
+ clearTimeout(killer);
84
+ }
85
+ }
86
+ };
87
+ //# sourceMappingURL=online.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"online.js","sourceRoot":"","sources":["../src/online.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { type OutputOptions, resolveOutput } from "@wirecat/cli-messaging";
2
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA"}
package/dist/output.js ADDED
@@ -0,0 +1,2 @@
1
+ export { resolveOutput } from "@wirecat/cli-messaging";
2
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,aAAa,EAAE,MAAM,wBAAwB,CAAA"}
@@ -0,0 +1,20 @@
1
+ import { type Asker } from "@wirecat/cli-messaging/sends";
2
+ import type { Command } from "commander";
3
+ import type { Environment } from "./commands/context.js";
4
+ import type { Settings } from "./config.js";
5
+ export declare const permissionScope: <T>(work: () => T) => T;
6
+ export declare const withPermissionApproval: <T>(key: string, work: () => T) => T;
7
+ export declare const currentReadPermission: () => string | undefined;
8
+ export declare const approvePermission: (key: string) => void;
9
+ export declare const permissionApprovals: () => string[];
10
+ export declare const assertReadable: (settings: Pick<Settings, "profile" | "permissions" | "permissionSources">, key: string) => void;
11
+ export declare const commandPermission: (command: Command) => string | null;
12
+ /** `commandPermission` for checking a file's keys: a command it cannot map names no key, rather than throwing. */
13
+ export declare const permissionKeyOf: (command: Command) => string | null | undefined;
14
+ export declare const askerFor: (flags: {
15
+ yes?: boolean;
16
+ allowDangerous?: boolean;
17
+ json?: boolean;
18
+ jsonl?: boolean;
19
+ }, environment?: Environment) => Asker;
20
+ //# sourceMappingURL=permissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,KAAK,EAMX,MAAM,8BAA8B,CAAA;AACrC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAExC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAK3C,eAAO,MAAM,eAAe,GAAI,CAAC,QAAQ,MAAM,CAAC,KAAG,CAC8C,CAAA;AAEjG,eAAO,MAAM,sBAAsB,GAAI,CAAC,OAAO,MAAM,QAAQ,MAAM,CAAC,KAAG,CAMtE,CAAA;AAED,eAAO,MAAM,qBAAqB,QAAO,MAAM,GAAG,SAA0C,CAAA;AAE5F,eAAO,MAAM,iBAAiB,QAAS,MAAM,KAAG,IAE/C,CAAA;AAED,eAAO,MAAM,mBAAmB,QAAO,MAAM,EAAiD,CAAA;AAE9F,eAAO,MAAM,cAAc,aACf,IAAI,CAAC,QAAQ,EAAE,SAAS,GAAG,aAAa,GAAG,mBAAmB,CAAC,OACpE,MAAM,KACV,IAcF,CAAA;AAED,eAAO,MAAM,iBAAiB,YAAa,OAAO,KAAG,MAAM,GAAG,IAiB7D,CAAA;AAED,kHAAkH;AAClH,eAAO,MAAM,eAAe,YAAa,OAAO,KAAG,MAAM,GAAG,IAAI,GAAG,SAMlE,CAAA;AAED,eAAO,MAAM,QAAQ,UAEV;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,gBACtE,WAAW,KACvB,KAoBF,CAAA"}
@@ -0,0 +1,76 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ import { CliError } from "@wirecat/cli-core";
3
+ import { metaOf } from "@wirecat/cli-core/commands";
4
+ import { assertStatsPermissionsCurrent, keyForCommand, levelFor, readKeysForCommand, skipFlagFor, } from "@wirecat/cli-messaging/sends";
5
+ import { BOT_KEYS } from "./bot/permissions.js";
6
+ import { readSecret } from "./session/prompt.js";
7
+ const approvals = new AsyncLocalStorage();
8
+ export const permissionScope = (work) => approvals.getStore() ? work() : approvals.run({ forced: new Set(), approved: new Set() }, work);
9
+ export const withPermissionApproval = (key, work) => {
10
+ const previous = approvals.getStore();
11
+ return approvals.run({ forced: new Set([...(previous?.forced ?? []), key]), approved: new Set([key]), readKey: key }, work);
12
+ };
13
+ export const currentReadPermission = () => approvals.getStore()?.readKey;
14
+ export const approvePermission = (key) => {
15
+ approvals.getStore()?.approved.add(key);
16
+ };
17
+ export const permissionApprovals = () => [...(approvals.getStore()?.approved ?? [])];
18
+ export const assertReadable = (settings, key) => {
19
+ assertStatsPermissionsCurrent(key.split("."), settings.permissions);
20
+ for (const source of readKeysForCommand(key.split("."))) {
21
+ const resolved = levelFor(settings.permissions, source);
22
+ if (resolved.level === "deny")
23
+ throw new CliError("permission_error", `profile ${settings.profile} denies ${source}`, { permission: source });
24
+ }
25
+ const resolved = levelFor(settings.permissions, key);
26
+ if (resolved.level === "deny")
27
+ throw new CliError("permission_error", `profile ${settings.profile} denies ${key} (permissions.${resolved.key}, from ${settings.permissionSources[resolved.key ?? ""] ?? "default"})`, { permission: key });
28
+ };
29
+ export const commandPermission = (command) => {
30
+ const words = [];
31
+ for (let at = command; at?.parent; at = at.parent)
32
+ words.unshift(at.name());
33
+ const operation = metaOf(command).operationId;
34
+ if (words[0] === "bot" && words[1] === "api" && operation)
35
+ return BOT_KEYS[operation] ?? `bot.api.${words.slice(2).join(".")}`;
36
+ if (words[0] === "bot" && words[1] === "comments")
37
+ return `bot.messages.${words.slice(2).join(".")}`;
38
+ const shared = keyForCommand(words);
39
+ if (shared !== undefined)
40
+ return shared;
41
+ if (["setup"].includes(words[0] ?? ""))
42
+ return null;
43
+ if (["messages", "chats", "contacts", "account", "calls", "stickers", "polls", "reactions", "bot"].includes(words[0] ?? ""))
44
+ return words.join(".");
45
+ throw new Error(`unmapped permission path: ${words.join(" ")}`);
46
+ };
47
+ /** `commandPermission` for checking a file's keys: a command it cannot map names no key, rather than throwing. */
48
+ export const permissionKeyOf = (command) => {
49
+ try {
50
+ return commandPermission(command);
51
+ }
52
+ catch {
53
+ return undefined;
54
+ }
55
+ };
56
+ export const askerFor = (flags, environment = {}) => async (key, request) => {
57
+ const flag = skipFlagFor(key);
58
+ if (!approvals.getStore()?.forced.has(key) && !(flag === "--yes" ? flags.yes : flags.allowDangerous)) {
59
+ const question = `${key}${request.chatId === null ? "" : ` in chat ${request.chatId}`}${request.count === undefined ? "" : ` (${request.count} items)`}${request.forEveryone ? " for everyone" : ""} — go ahead? [y/N] `;
60
+ const answer = flags.json || flags.jsonl
61
+ ? null
62
+ : environment.answer
63
+ ? await environment.answer(question)
64
+ : (environment.interactive ?? (process.stdin.isTTY && process.stderr.isTTY))
65
+ ? await (environment.ask
66
+ ? environment.ask(question, { secret: false })
67
+ : readSecret(question, { echo: true }))
68
+ : null;
69
+ if (answer === null)
70
+ throw new CliError("confirmation_required", `${key} asks before it acts — add ${flag} to go ahead`);
71
+ if (!/^\s*y(es)?\s*$/i.test(answer))
72
+ throw new CliError("cancelled", `${key}: not done — the answer was no`);
73
+ }
74
+ approvals.getStore()?.approved.add(key);
75
+ };
76
+ //# sourceMappingURL=permissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"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"}