@wirecat/max-cli 0.0.0-stage → 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 +530 -2
  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 +125 -4
  546. package/skills/max-cli/SKILL.md +518 -0
@@ -0,0 +1,79 @@
1
+ import { writeFileSync } from "node:fs";
2
+ import { CliError } from "@wirecat/cli-core";
3
+ import { holdLock, lockPath, releaseLock } from "@wirecat/cli-messaging/background";
4
+ import { Command, Option } from "commander";
5
+ import { MAX_APP } from "../app.js";
6
+ import { parseDuration } from "../config.js";
7
+ import { asFirstWord } from "../profile.js";
8
+ import { MaxServer, refusedLogin } from "../server/server.js";
9
+ import { refusedPath } from "../server/start.js";
10
+ import { VERSION } from "../version.js";
11
+ import { forCommand } from "./context.js";
12
+ import { serveMembers } from "./serve-members.js";
13
+ import { serveStems } from "./serve-stems.js";
14
+ /**
15
+ * `max serve` — stays up, holding one logged-in connection, until Ctrl-C (`MAX-16`).
16
+ *
17
+ * Typed by hand it runs in the foreground until stopped. **Any command that needs MAX starts one
18
+ * in the background when none is running** (`serve` setting, `--no-serve` to decline), and that
19
+ * one is given `--idle`, so it does not outlive the work that started it.
20
+ */
21
+ export const serveCommand = () => new Command("serve")
22
+ .description("stay connected to MAX and stream new messages to `max watch`, until Ctrl-C")
23
+ .option("--idle <duration>", "stop after this long with nobody using it — 15m, 1h is 60m")
24
+ .addOption(new Option("--started-by-command").hideHelp())
25
+ .action(async function () {
26
+ const { idle, startedByCommand = false } = this.opts();
27
+ const { renderer, settings, store, run, format, streams, track } = forCommand(this);
28
+ const idleMs = idle === undefined ? undefined : parseDuration(idle, "--idle");
29
+ await run("serve", async (events) => {
30
+ const note = (line) => format === "pretty"
31
+ ? renderer.note(line)
32
+ : streams.diagnostic(JSON.stringify({ time: new Date().toISOString(), note: line }));
33
+ const server = new MaxServer({
34
+ store,
35
+ members: (client) => serveMembers({ client, store, note }),
36
+ // Unwatched — a log file, systemd — each line says when, or "connecting again in 60s" means nothing.
37
+ note,
38
+ ...(events ? { events } : {}),
39
+ ...(settings.timeoutMs ? { timeoutMs: settings.timeoutMs } : {}),
40
+ ...(idleMs === undefined ? {} : { idleMs }),
41
+ startedByCommand,
42
+ });
43
+ track({
44
+ close: async () => {
45
+ const settled = server.done.catch(() => { });
46
+ await server.stop(new CliError("cancelled", "serve stopped by command cancellation"));
47
+ await settled;
48
+ },
49
+ });
50
+ const stop = () => void server.stop();
51
+ process.once("SIGINT", stop);
52
+ process.once("SIGTERM", stop);
53
+ // Not how max finds its server — the socket is — but what the shared store commands look for.
54
+ const lock = lockPath(MAX_APP, store.profile, process.env);
55
+ const startedAt = new Date().toISOString();
56
+ const stems = serveStems({ note });
57
+ try {
58
+ await server.start();
59
+ stems.start();
60
+ holdLock(lock, { pid: process.pid, startedAt, listeningAt: new Date().toISOString(), version: VERSION });
61
+ renderer.note(`connected — \`max ${asFirstWord(settings.profile)}watch\` in another terminal shows new messages`);
62
+ await server.done;
63
+ }
64
+ catch (error) {
65
+ await server.stop();
66
+ if (refusedLogin(error)) {
67
+ writeFileSync(refusedPath(store), `${new Date().toISOString()}\n`, { mode: 0o600 });
68
+ }
69
+ throw error;
70
+ }
71
+ finally {
72
+ await stems.stop().catch(() => note("filling search stems could not close its store"));
73
+ releaseLock(lock);
74
+ process.off("SIGINT", stop);
75
+ process.off("SIGTERM", stop);
76
+ }
77
+ });
78
+ });
79
+ //# sourceMappingURL=serve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type ServerOptions } from "@wirecat/cli-messaging/cli";
2
+ import type { Command } from "commander";
3
+ import { SessionStore } from "../session/store.js";
4
+ /**
5
+ * The exit codes of a login MAX refused (`refusedLogin`). A unit that restarted on them would log in
6
+ * again every 30 s, each one counted against the account.
7
+ */
8
+ export declare const NO_RESTART_ON: number[];
9
+ /**
10
+ * max's server is found and stopped through its socket, not a lock file: whoever binds the socket is
11
+ * the profile's one server, and it says itself whether a command started it.
12
+ */
13
+ export declare const maxServerOptions: (storeFor?: (profile: string, env: NodeJS.ProcessEnv) => SessionStore) => ServerOptions;
14
+ /** `max server` — the shared group; `max serve` stays the foreground form a unit runs (`CLI-38`). */
15
+ export declare const serverCommand: () => Command;
16
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAwC,MAAM,4BAA4B,CAAA;AACrG,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAIxC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAElD;;;GAGG;AACH,eAAO,MAAM,aAAa,UAAyF,CAAA;AAEnH;;;GAGG;AACH,eAAO,MAAM,gBAAgB,cACjB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,KAAK,YAAY,KAElE,aAkCD,CAAA;AAEF,qGAAqG;AACrG,eAAO,MAAM,aAAa,QAAO,OAAgE,CAAA"}
@@ -0,0 +1,51 @@
1
+ import { CliError, exitCodeFor } from "@wirecat/cli-core";
2
+ import { serverCommand as sharedServerCommand } from "@wirecat/cli-messaging/cli";
3
+ import { maxMessenger } from "../messenger.js";
4
+ import { serverStatus, stopServer } from "../server/server-connection.js";
5
+ import { logPath, startInBackground } from "../server/start.js";
6
+ import { SessionStore } from "../session/store.js";
7
+ /**
8
+ * The exit codes of a login MAX refused (`refusedLogin`). A unit that restarted on them would log in
9
+ * again every 30 s, each one counted against the account.
10
+ */
11
+ export const NO_RESTART_ON = ["authentication_error", "rate_limited", "provider_error"].map(exitCodeFor);
12
+ /**
13
+ * max's server is found and stopped through its socket, not a lock file: whoever binds the socket is
14
+ * the profile's one server, and it says itself whether a command started it.
15
+ */
16
+ export const maxServerOptions = (storeFor = (profile, env) => new SessionStore({ profile, env })) => ({
17
+ process: ({ profile, env }) => {
18
+ const store = storeFor(profile, env);
19
+ return {
20
+ probe: async () => {
21
+ const status = await serverStatus(store.socketPath());
22
+ if (typeof status?.pid !== "number")
23
+ return undefined;
24
+ return {
25
+ pid: status.pid,
26
+ startedAt: typeof status.startedAt === "string" ? status.startedAt : new Date().toISOString(),
27
+ connected: status.connected === true,
28
+ ...(typeof status.version === "string" ? { version: status.version } : {}),
29
+ byCommand: status.byHand !== true,
30
+ };
31
+ },
32
+ launch: (args, extra) => {
33
+ const pid = startInBackground(store, { serveArgs: args, env: extra });
34
+ if (pid === undefined) {
35
+ throw new CliError("validation_error", "no session to start with, or a server is already being started — try again");
36
+ }
37
+ return pid;
38
+ },
39
+ stop: async () => {
40
+ await stopServer(store.socketPath(), { force: true });
41
+ },
42
+ };
43
+ },
44
+ logPath: ({ profile, env }) => logPath(storeFor(profile, env)),
45
+ serveArgv: ["--no-record", "serve"],
46
+ idle: true,
47
+ unit: { purpose: "hold this profile's one connection to MAX", noRestartOn: NO_RESTART_ON },
48
+ });
49
+ /** `max server` — the shared group; `max serve` stays the foreground form a unit runs (`CLI-38`). */
50
+ export const serverCommand = () => sharedServerCommand(maxMessenger, maxServerOptions());
51
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { Command } from "commander";
2
+ import { type MaxClientOptions } from "../client.js";
3
+ import { type CommandContext } from "./context.js";
4
+ export declare const TERMS_NOTICE: string;
5
+ export declare const sessionCommand: () => Command;
6
+ declare const METHODS: readonly ["token", "qr", "qr-chrome", "sms"];
7
+ export type Method = (typeof METHODS)[number];
8
+ export declare const startSession: (context: CommandContext, method: Method, events: MaxClientOptions["events"]) => Promise<{
9
+ profile: import("@wirecat/cli-messaging").Profile;
10
+ stored: boolean;
11
+ method: "qr" | "qr-chrome" | "sms" | "token";
12
+ firstLogin: boolean;
13
+ }>;
14
+ export {};
15
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"AAEA,OAAO,EAAY,OAAO,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,EAAkB,KAAK,gBAAgB,EAAqB,MAAM,cAAc,CAAA;AAOvF,OAAO,EAAE,KAAK,cAAc,EAAc,MAAM,cAAc,CAAA;AAG9D,eAAO,MAAM,YAAY,QAGb,CAAA;AAEZ,eAAO,MAAM,cAAc,QAAO,OA8EjC,CAAA;AAkBD,QAAA,MAAM,OAAO,YAAI,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,CAAU,CAAA;AAC5D,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,CAAC,CAAA;AAE7C,eAAO,MAAM,YAAY,YAAmB,cAAc,UAAU,MAAM,UAAU,gBAAgB,CAAC,QAAQ,CAAC;;;;;EA6B7G,CAAA"}
@@ -0,0 +1,169 @@
1
+ import { CliError, indent } from "@wirecat/cli-core";
2
+ import { annotate } from "@wirecat/cli-core/commands";
3
+ import { Argument, Command } from "commander";
4
+ import { refuseWhilePaused } from "../client.js";
5
+ import { maskedProfile } from "../domain/map.js";
6
+ import { commandWords, refuseCommandName, rootOf } from "../profile.js";
7
+ import { stopServer } from "../server/server-connection.js";
8
+ import { adoptToken } from "../session/adopt.js";
9
+ import { serveQrPage } from "../session/browser.js";
10
+ import { terminalQr } from "../session/qr-terminal.js";
11
+ import { forCommand } from "./context.js";
12
+ // NEED-149: gentle on purpose — it asks for ordinary use alongside, and does not cite blocked accounts.
13
+ export const TERMS_NOTICE = [
14
+ "max is not the official MAX app, and the MAX terms do not allow automated programs (legal.max.ru/ps, 4.3.7).",
15
+ "Keep using MAX as usual in the browser or on your phone alongside it. More: docs/security.md",
16
+ ].join("\n");
17
+ export const sessionCommand = () => {
18
+ const command = new Command("session").description("the stored MAX session for this profile");
19
+ /**
20
+ * Four ways to a token, and one way to keep it: whatever produced the token, it reaches the
21
+ * keyring only once MAX has accepted it (`adoptToken`).
22
+ *
23
+ * - `token` — pasted, or piped: `pass show max | max session start`. The default, and the escape
24
+ * hatch when a login meets a captcha or an unusual second factor.
25
+ * - `qr` — our own connection asks MAX for the code; it is drawn here, or opened in the default
26
+ * browser when the terminal is too narrow for it.
27
+ * - `qr-chrome`, `sms` — web.max.ru itself does the login, in a Chromium-family browser with a
28
+ * throwaway profile, and we read the token it stores. MAX sees its own web client. SMS has no
29
+ * other door: asked over our socket, MAX demands a captcha only the page can solve (2026-09-24).
30
+ *
31
+ * **A token is never an argument.** argv is read by `ps` and kept by shell history.
32
+ */
33
+ command
34
+ .command("start")
35
+ .description("log this profile in to MAX")
36
+ .addHelpText("after", "\nFirst time: run `max setup --agent codex` for guided login and agent setup.\n" +
37
+ "Examples:\n max session start qr Scan a QR with MAX on your phone\n" +
38
+ " max session start qr-chrome Log in through web.max.ru in Chromium\n" +
39
+ " max session start sms Enter your phone number in that browser\n" +
40
+ " max work session start Import a token at a hidden prompt\n" +
41
+ "\nAn interrupted first setup can be resumed with `max setup`.\n" +
42
+ "For an expired session, explicitly log in again with `max session start qr`.\n" +
43
+ "Agents: read `max skill show` before login. QR/browser login needs a local terminal.\n" +
44
+ "Never put tokens or passwords in command arguments.\n")
45
+ .addArgument(new Argument("[method]", "token (pasted or piped), qr, qr-chrome or sms").choices(METHODS).default("token"))
46
+ .action(async function (method) {
47
+ const context = forCommand(this);
48
+ const { renderer, run } = context;
49
+ refuseCommandName(context.settings.profile, commandWords(rootOf(this)));
50
+ await run("session start", async (events) => {
51
+ const { firstLogin, ...answer } = await startSession(context, method, events);
52
+ renderer.result(answer);
53
+ renderer.success(`logged in as ${answer.profile.name ?? answer.profile.id}`);
54
+ if (firstLogin)
55
+ renderer.note(TERMS_NOTICE);
56
+ if (await context.shareServer())
57
+ renderer.note("`max serve` is up on the new session");
58
+ });
59
+ });
60
+ /**
61
+ * Ends the session on MAX's side (LOGOUT, opcode 20), then forgets it here, as `tg session end` does
62
+ * (`NEED-821` A). A token copied from a browser tab is that tab's session, so the tab is logged out too.
63
+ */
64
+ annotate(command.command("end"), { mutates: true })
65
+ .description("log this profile out on MAX's side and forget the session here")
66
+ .action(async function () {
67
+ const { renderer, store, run, createClient } = forCommand(this);
68
+ await run("session end", async (events) => {
69
+ if (store.readToken() === undefined) {
70
+ renderer.result({ profile: store.profile, forgotten: false, revokedOnServer: false });
71
+ renderer.note(`there was no session for "${store.profile}"`);
72
+ return;
73
+ }
74
+ // A server still logged in with the forgotten session would keep using it.
75
+ const server = await stopServer(store.socketPath());
76
+ if (server === "refused") {
77
+ renderer.note("a `max serve` you started by hand is still running with that session — Ctrl-C it");
78
+ }
79
+ const revokedOnServer = await logOut(createClient({ events }));
80
+ const had = store.forget();
81
+ renderer.result({ profile: store.profile, forgotten: had, revokedOnServer });
82
+ renderer.success(`logged "${store.profile}" out of MAX and forgot the session here`);
83
+ });
84
+ });
85
+ return command;
86
+ };
87
+ /** A token MAX no longer accepts is as logged out as it gets; anything else keeps the session, to try again. */
88
+ const logOut = async (client) => {
89
+ try {
90
+ await client.logout();
91
+ return true;
92
+ }
93
+ catch (error) {
94
+ if (error instanceof CliError && error.code === "authentication_error")
95
+ return true;
96
+ throw new CliError(error instanceof CliError ? error.code : "provider_error", `MAX did not log the session out (${error instanceof Error ? error.message : String(error)}); nothing was forgotten — try again`);
97
+ }
98
+ finally {
99
+ await client.close();
100
+ }
101
+ };
102
+ const METHODS = ["token", "qr", "qr-chrome", "sms"];
103
+ export const startSession = async (context, method, events) => {
104
+ const { renderer, store, createClient, interactive } = context;
105
+ if (store.hasLoggedIn())
106
+ refuseWhilePaused(store.readState());
107
+ if (method !== "token" && !interactive)
108
+ throw new CliError("validation_error", `\`session start ${method}\` needs a person at a terminal — use \`session start token\``);
109
+ if (method !== "token" && process.env.MAX_TOKEN)
110
+ throw new CliError("validation_error", "MAX_TOKEN is set, and it would outrank the new session — unset it first");
111
+ const pasted = method === "token"
112
+ ? process.env.MAX_TOKEN?.trim() || (await context.ask("MAX token: ", { secret: true }))
113
+ : undefined;
114
+ if (method === "token" && !pasted)
115
+ throw new CliError("validation_error", "no token given");
116
+ context.signal.throwIfAborted();
117
+ if ((await context.stopServer()) === "stopped")
118
+ renderer.note("stopped `max serve`; it starts again on the new session");
119
+ const token = method === "token" ? String(pasted) : await obtain(method, context, events);
120
+ context.signal.throwIfAborted();
121
+ const client = createClient({ events }, { own: true });
122
+ const firstLogin = store.readState().viewerId === undefined;
123
+ try {
124
+ await adoptToken(client, store, token);
125
+ const profile = await client.account.me();
126
+ return { profile: maskedProfile(profile), stored: true, method, firstLogin };
127
+ }
128
+ finally {
129
+ await client.close();
130
+ }
131
+ };
132
+ /** Long enough to find the phone and type a number and a code; the profile dies with the wait. */
133
+ const BROWSER_WAIT_MS = 5 * 60_000;
134
+ const QR_INDENT = 2;
135
+ const obtain = async (method, { createClient, renderer, browser, track, ask, streams, columns }, events) => {
136
+ if (method !== "qr") {
137
+ renderer.note(method === "qr-chrome"
138
+ ? "web.max.ru is opening in a separate browser window — scan its QR code with the MAX app on your phone"
139
+ : "web.max.ru is opening in a separate browser window — choose to log in by phone number there");
140
+ return await browser.chromiumToken({ track, waitMs: BROWSER_WAIT_MS });
141
+ }
142
+ const client = createClient({ events }, { own: true });
143
+ let page;
144
+ try {
145
+ return await client.login.byQr({
146
+ show: async (link) => {
147
+ const drawn = terminalQr(link);
148
+ // Straight to the diagnostic stream, not through the renderer: --quiet must not hide the code.
149
+ if (columns !== undefined && drawn.width + QR_INDENT <= columns) {
150
+ streams.diagnostic(`\n${indent(drawn.text, QR_INDENT)}`);
151
+ renderer.note("scan this code with the MAX app on your phone");
152
+ return;
153
+ }
154
+ page = await serveQrPage(link);
155
+ track(page);
156
+ await browser.open(page.url);
157
+ renderer.note("the terminal is too narrow for the QR code, so it is open in your browser — scan it there");
158
+ },
159
+ askPassword: (hint, again) => ask(`${again ? "wrong password, try again" : "MAX password"}${hint ? ` (hint: ${hint})` : ""}: `, {
160
+ secret: true,
161
+ }),
162
+ });
163
+ }
164
+ finally {
165
+ await page?.close();
166
+ await client.close();
167
+ }
168
+ };
169
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const setupCommand: () => Command;
3
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAA;AA0D3C,eAAO,MAAM,YAAY,QAAO,OAoI1B,CAAA"}
@@ -0,0 +1,168 @@
1
+ import { accessSync, constants, mkdirSync } from "node:fs";
2
+ import { CliError, indent, renderPretty, resolvePaths } from "@wirecat/cli-core";
3
+ import { annotate } from "@wirecat/cli-core/commands";
4
+ import { installSkill } from "@wirecat/cli-core/skill";
5
+ import { runtime } from "@wirecat/cli-messaging/cli";
6
+ import { Command, Option } from "commander";
7
+ import { maskedProfile } from "../domain/map.js";
8
+ import { asFirstWord, commandWords, refuseCommandName, rootOf } from "../profile.js";
9
+ import { SKILL, SKILL_APP } from "../skill.js";
10
+ import { installer } from "../update.js";
11
+ import { environmentOf, forCommand } from "./context.js";
12
+ import { startSession, TERMS_NOTICE } from "./session.js";
13
+ const AGENTS = ["none", "codex", "cursor", "claude", "gemini", "all"];
14
+ const STEPS = 4;
15
+ const DETAIL = 6;
16
+ const chatCount = (count) => `${count} ${count === 1 ? "chat" : "chats"}`;
17
+ /**
18
+ * A person sees each step as a heading with its details indented under it. `--quiet` hides both, as it
19
+ * hides notes; a machine mode keeps the plain notes it always had, since stderr there is a log.
20
+ */
21
+ const screenFor = (context, quiet) => {
22
+ const person = context.format === "pretty";
23
+ const say = (text) => {
24
+ if (!quiet)
25
+ context.streams.diagnostic(text);
26
+ };
27
+ return {
28
+ title: (text) => (person ? say(text) : context.renderer.note(text)),
29
+ step: (index, title) => person ? say(`\n[${index}/${STEPS}] ${title}`) : context.renderer.note(`${index}/${STEPS} — ${title}`),
30
+ detail: (text) => (person ? say(indent(text, DETAIL)) : context.renderer.note(text)),
31
+ indent: person ? DETAIL : 0,
32
+ };
33
+ };
34
+ /** The login's messages, questions and QR code, shifted to sit under their step. */
35
+ const underStep = (context, screen) => ({
36
+ ...context,
37
+ renderer: { ...context.renderer, note: screen.detail },
38
+ ask: (prompt, options) => context.ask(`${" ".repeat(screen.indent)}${prompt}`, options),
39
+ streams: { ...context.streams, diagnostic: (text) => context.streams.diagnostic(indent(text, screen.indent)) },
40
+ ...(context.columns === undefined ? {} : { columns: context.columns - screen.indent }),
41
+ });
42
+ const agentFor = async (context, given, pad) => {
43
+ if (given)
44
+ return given;
45
+ if (context.format !== "pretty" || !context.interactive)
46
+ return "none";
47
+ const answer = (await context.ask(`${" ".repeat(pad)}Agent [codex/cursor/claude/gemini/all/none] (none): `, {
48
+ signal: context.signal,
49
+ }))
50
+ .trim()
51
+ .toLowerCase() || "none";
52
+ if (!AGENTS.includes(answer))
53
+ throw new CliError("validation_error", `unknown agent — choose ${AGENTS.join(", ")} with --agent`);
54
+ return answer;
55
+ };
56
+ export const setupCommand = () => annotate(new Command("setup"), { mutates: true })
57
+ .description("set up your personal MAX account and connect your agent")
58
+ .configureHelp({ showGlobalOptions: true })
59
+ .addHelpText("after", "\nExamples:\n" +
60
+ " max setup Guided QR login in your local terminal\n" +
61
+ " max setup --agent codex Install the skill for Codex\n" +
62
+ " max work setup --agent claude Set up a separate work profile\n" +
63
+ " max setup --method qr-chrome Log in through web.max.ru in Chromium\n" +
64
+ " max setup --method sms Enter your phone number in that browser\n" +
65
+ " max setup --method token Import a token at a hidden prompt or from stdin\n" +
66
+ "\nAllow about 5 minutes. Scan the QR with MAX on your phone.\n" +
67
+ "Keep tokens and passwords in the local terminal, never in command arguments.\n" +
68
+ "Agents: read `max skill show` before login. QR/browser login needs a local terminal.\n" +
69
+ "Existing sessions are checked without another login. Machine mode skips agent installation\n" +
70
+ "unless --agent is given. Bot accounts use `max <profile> bot auth set` separately.\n" +
71
+ "\nSetup checks five chats. Choose a chat and how much history to fetch before:\n" +
72
+ " max store fetch <chat> --last 100\n" +
73
+ "Setup starts no background service and downloads no message history.\n" +
74
+ "\nWindows: use max.cmd or npm.cmd if PowerShell blocks scripts. Without PATH:\n" +
75
+ " npm.cmd exec --yes --package=@wirecat/max-cli -- max setup\n")
76
+ .addOption(new Option("--agent <agent>", "install the skill for this agent; asks at a terminal, otherwise none").choices(AGENTS))
77
+ .addOption(new Option("--method <method>", "how to log in when there is no session")
78
+ .choices(["token", "qr", "qr-chrome", "sms"])
79
+ .default("qr"))
80
+ .action(async function () {
81
+ const context = forCommand(this);
82
+ const { settings, renderer, store } = context;
83
+ const options = this.opts();
84
+ refuseCommandName(settings.profile, commandWords(rootOf(this)));
85
+ if (this.optsWithGlobals().offline)
86
+ throw new CliError("validation_error", "max setup verifies MAX — remove --offline");
87
+ if (store.isBot())
88
+ throw new CliError("validation_error", `this is a bot profile — use max ${asFirstWord(settings.profile)}bot auth set; setup is for your personal account`);
89
+ const reused = store.readToken() !== undefined;
90
+ if (!reused && !store.hasLoggedIn() && options.method !== "token" && !context.interactive)
91
+ throw new CliError("validation_error", "max setup needs a local terminal for QR/browser login — run it locally; token import uses --method token");
92
+ const prefix = `max ${asFirstWord(settings.profile)}`;
93
+ const runner = installer(environmentOf(this).update) === "npx"
94
+ ? `npm${process.platform === "win32" ? ".cmd" : ""} exec --yes --package=@wirecat/max-cli -- ${prefix}`
95
+ : prefix;
96
+ const paths = resolvePaths({ appName: "max-cli", prefix: "MAX" });
97
+ const screen = screenFor(context, this.optsWithGlobals().quiet === true);
98
+ const answer = await context.run("setup", async (events) => {
99
+ screen.title(`MAX setup — profile ${settings.profile}. Allow about 5 minutes; downloading chat history is a separate step.`);
100
+ screen.step(1, "This computer");
101
+ for (const path of [paths.config, paths.state, paths.cache]) {
102
+ mkdirSync(path, { recursive: true });
103
+ accessSync(path, constants.W_OK);
104
+ }
105
+ screen.detail("✓ local directories ready");
106
+ if (process.platform === "win32")
107
+ screen.detail("Windows: use max.cmd or npm.cmd if PowerShell blocks scripts. Open a new terminal after installing Node.js.");
108
+ if (reused || store.hasLoggedIn()) {
109
+ screen.step(2, "Log in");
110
+ screen.detail("✓ existing session, no new login");
111
+ }
112
+ else {
113
+ screen.step(2, "Log in: scan the QR code with MAX on your phone");
114
+ const login = await startSession(underStep(context, screen), options.method, events);
115
+ if (login.firstLogin)
116
+ screen.detail(TERMS_NOTICE);
117
+ }
118
+ screen.step(3, "Account");
119
+ const client = context.createClient({ events }, { own: true });
120
+ let account;
121
+ let chats;
122
+ try {
123
+ account = await client.account.me();
124
+ chats = await client.chats.list({ limit: 5 });
125
+ }
126
+ finally {
127
+ await client.close();
128
+ }
129
+ screen.detail(`✓ verified, ${chatCount(chats.items.length)} read`);
130
+ screen.step(4, "Agent");
131
+ const agent = await agentFor(context, options.agent, screen.indent);
132
+ screen.detail(agent === "none" ? "✓ no agent skill installed" : `✓ ${agent}`);
133
+ const targets = agent === "all" ? ["claude", "agents"] : [agent === "claude" ? "claude" : "agents"];
134
+ context.signal.throwIfAborted();
135
+ const written = agent === "none" ? [] : installSkill(SKILL_APP, SKILL, { targets, env: process.env });
136
+ const next = {
137
+ instructions: `${runner}skill show`,
138
+ chats: `${runner}chats list --limit 5`,
139
+ history: `${runner}store fetch <chat> --last 100`,
140
+ ...(agent === "none" ? { skill: `${runner}skill install` } : {}),
141
+ };
142
+ return {
143
+ profile: settings.profile,
144
+ runtime: runtime(),
145
+ paths,
146
+ session: { reused },
147
+ account: maskedProfile(account),
148
+ chats: { checked: chats.items.length, hasMore: chats.hasMore },
149
+ agent: { name: agent, written },
150
+ next,
151
+ };
152
+ });
153
+ if (context.format !== "pretty")
154
+ renderer.result(answer);
155
+ else {
156
+ const rows = {
157
+ "Try now": answer.next.chats,
158
+ History: `${answer.next.history} (choose the chat and the amount first)`,
159
+ "Agent skill": answer.agent.name === "none"
160
+ ? `skipped — install later: ${answer.next.skill}`
161
+ : `installed for ${answer.agent.name}; start a new agent session if it is not found`,
162
+ "For an agent": answer.next.instructions,
163
+ };
164
+ context.streams.data(`\n✓ MAX is ready — profile ${settings.profile}, ${chatCount(answer.chats.checked)} checked\n\n` +
165
+ indent(renderPretty(rows, { color: context.color }), 2));
166
+ }
167
+ });
168
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ export declare const skillCommand: () => Command;
3
+ //# sourceMappingURL=skill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAIxC,eAAO,MAAM,YAAY,QAAO,OAM7B,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { skillCommand as sharedSkillCommand } from "@wirecat/cli-messaging/cli";
2
+ import { MAX_APP } from "../app.js";
3
+ import { SKILL } from "../skill.js";
4
+ export const skillCommand = () => sharedSkillCommand(MAX_APP, SKILL).addHelpText("after", "\nAgents: run `max skill show` before login; it needs no MAX session.\n" +
5
+ "Guided first run: `max setup --agent codex`.\n" +
6
+ "Install instructions separately: `max skill install --for all`.\n");
7
+ //# sourceMappingURL=skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,IAAI,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAE/E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAEnC,MAAM,CAAC,MAAM,YAAY,GAAG,GAAY,EAAE,CACxC,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,WAAW,CAC5C,OAAO,EACP,yEAAyE;IACvE,gDAAgD;IAChD,mEAAmE,CACtE,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ export declare const stickersCommand: () => Command;
3
+ //# sourceMappingURL=stickers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stickers.d.ts","sourceRoot":"","sources":["../../src/commands/stickers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,eAAO,MAAM,eAAe,QAAO,OAA8C,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { stickersCommand as sharedStickersCommand } from "@wirecat/cli-messaging/cli";
2
+ import { maxMessenger } from "../messenger.js";
3
+ export const stickersCommand = () => sharedStickersCommand(maxMessenger);
4
+ //# sourceMappingURL=stickers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stickers.js","sourceRoot":"","sources":["../../src/commands/stickers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,IAAI,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAErF,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,MAAM,CAAC,MAAM,eAAe,GAAG,GAAY,EAAE,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const upgradeCommand: () => import("commander").Command;
2
+ //# sourceMappingURL=upgrade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,cAAc,mCASvB,CAAA"}