agent-messenger 2.10.1 → 2.11.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 (536) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.env.template +4 -1
  3. package/README.md +77 -27
  4. package/bun.lock +26 -0
  5. package/dist/package.json +14 -1
  6. package/dist/src/platforms/channeltalk/commands/auth.d.ts +2 -1
  7. package/dist/src/platforms/channeltalk/commands/auth.d.ts.map +1 -1
  8. package/dist/src/platforms/channeltalk/commands/auth.js +5 -3
  9. package/dist/src/platforms/channeltalk/commands/auth.js.map +1 -1
  10. package/dist/src/platforms/channeltalk/token-extractor.d.ts +2 -1
  11. package/dist/src/platforms/channeltalk/token-extractor.d.ts.map +1 -1
  12. package/dist/src/platforms/channeltalk/token-extractor.js +22 -6
  13. package/dist/src/platforms/channeltalk/token-extractor.js.map +1 -1
  14. package/dist/src/platforms/channeltalkbot/cli.d.ts.map +1 -1
  15. package/dist/src/platforms/channeltalkbot/cli.js +11 -1
  16. package/dist/src/platforms/channeltalkbot/cli.js.map +1 -1
  17. package/dist/src/platforms/channeltalkbot/commands/auth.d.ts.map +1 -1
  18. package/dist/src/platforms/channeltalkbot/commands/auth.js +1 -5
  19. package/dist/src/platforms/channeltalkbot/commands/auth.js.map +1 -1
  20. package/dist/src/platforms/channeltalkbot/commands/bot.d.ts.map +1 -1
  21. package/dist/src/platforms/channeltalkbot/commands/bot.js +1 -6
  22. package/dist/src/platforms/channeltalkbot/commands/bot.js.map +1 -1
  23. package/dist/src/platforms/channeltalkbot/commands/chat.d.ts.map +1 -1
  24. package/dist/src/platforms/channeltalkbot/commands/chat.js +1 -6
  25. package/dist/src/platforms/channeltalkbot/commands/chat.js.map +1 -1
  26. package/dist/src/platforms/channeltalkbot/commands/group.d.ts.map +1 -1
  27. package/dist/src/platforms/channeltalkbot/commands/group.js +1 -6
  28. package/dist/src/platforms/channeltalkbot/commands/group.js.map +1 -1
  29. package/dist/src/platforms/channeltalkbot/commands/manager.d.ts.map +1 -1
  30. package/dist/src/platforms/channeltalkbot/commands/manager.js +1 -6
  31. package/dist/src/platforms/channeltalkbot/commands/manager.js.map +1 -1
  32. package/dist/src/platforms/channeltalkbot/commands/message.d.ts.map +1 -1
  33. package/dist/src/platforms/channeltalkbot/commands/message.js +1 -6
  34. package/dist/src/platforms/channeltalkbot/commands/message.js.map +1 -1
  35. package/dist/src/platforms/channeltalkbot/commands/whoami.d.ts.map +1 -1
  36. package/dist/src/platforms/channeltalkbot/commands/whoami.js +1 -6
  37. package/dist/src/platforms/channeltalkbot/commands/whoami.js.map +1 -1
  38. package/dist/src/platforms/channeltalkbot/credential-manager.d.ts +5 -0
  39. package/dist/src/platforms/channeltalkbot/credential-manager.d.ts.map +1 -1
  40. package/dist/src/platforms/channeltalkbot/credential-manager.js +34 -4
  41. package/dist/src/platforms/channeltalkbot/credential-manager.js.map +1 -1
  42. package/dist/src/platforms/discord/commands/auth.d.ts +1 -0
  43. package/dist/src/platforms/discord/commands/auth.d.ts.map +1 -1
  44. package/dist/src/platforms/discord/commands/auth.js +3 -1
  45. package/dist/src/platforms/discord/commands/auth.js.map +1 -1
  46. package/dist/src/platforms/discord/listener.d.ts +2 -0
  47. package/dist/src/platforms/discord/listener.d.ts.map +1 -1
  48. package/dist/src/platforms/discord/listener.js +51 -21
  49. package/dist/src/platforms/discord/listener.js.map +1 -1
  50. package/dist/src/platforms/discord/token-extractor.d.ts +2 -1
  51. package/dist/src/platforms/discord/token-extractor.d.ts.map +1 -1
  52. package/dist/src/platforms/discord/token-extractor.js +21 -6
  53. package/dist/src/platforms/discord/token-extractor.js.map +1 -1
  54. package/dist/src/platforms/discordbot/cli.d.ts.map +1 -1
  55. package/dist/src/platforms/discordbot/cli.js +12 -1
  56. package/dist/src/platforms/discordbot/cli.js.map +1 -1
  57. package/dist/src/platforms/discordbot/client.d.ts +3 -0
  58. package/dist/src/platforms/discordbot/client.d.ts.map +1 -1
  59. package/dist/src/platforms/discordbot/client.js +3 -0
  60. package/dist/src/platforms/discordbot/client.js.map +1 -1
  61. package/dist/src/platforms/discordbot/commands/auth.d.ts.map +1 -1
  62. package/dist/src/platforms/discordbot/commands/auth.js +1 -5
  63. package/dist/src/platforms/discordbot/commands/auth.js.map +1 -1
  64. package/dist/src/platforms/discordbot/commands/message.d.ts.map +1 -1
  65. package/dist/src/platforms/discordbot/commands/message.js +1 -6
  66. package/dist/src/platforms/discordbot/commands/message.js.map +1 -1
  67. package/dist/src/platforms/discordbot/commands/server.d.ts.map +1 -1
  68. package/dist/src/platforms/discordbot/commands/server.js +1 -4
  69. package/dist/src/platforms/discordbot/commands/server.js.map +1 -1
  70. package/dist/src/platforms/discordbot/commands/whoami.d.ts.map +1 -1
  71. package/dist/src/platforms/discordbot/commands/whoami.js +1 -6
  72. package/dist/src/platforms/discordbot/commands/whoami.js.map +1 -1
  73. package/dist/src/platforms/discordbot/index.d.ts +3 -1
  74. package/dist/src/platforms/discordbot/index.d.ts.map +1 -1
  75. package/dist/src/platforms/discordbot/index.js +2 -1
  76. package/dist/src/platforms/discordbot/index.js.map +1 -1
  77. package/dist/src/platforms/discordbot/listener.d.ts +43 -0
  78. package/dist/src/platforms/discordbot/listener.d.ts.map +1 -0
  79. package/dist/src/platforms/discordbot/listener.js +292 -0
  80. package/dist/src/platforms/discordbot/listener.js.map +1 -0
  81. package/dist/src/platforms/discordbot/types.d.ts +161 -0
  82. package/dist/src/platforms/discordbot/types.d.ts.map +1 -1
  83. package/dist/src/platforms/discordbot/types.js +34 -0
  84. package/dist/src/platforms/discordbot/types.js.map +1 -1
  85. package/dist/src/platforms/instagram/commands/auth.d.ts.map +1 -1
  86. package/dist/src/platforms/instagram/commands/auth.js +3 -1
  87. package/dist/src/platforms/instagram/commands/auth.js.map +1 -1
  88. package/dist/src/platforms/instagram/token-extractor.d.ts +2 -1
  89. package/dist/src/platforms/instagram/token-extractor.d.ts.map +1 -1
  90. package/dist/src/platforms/instagram/token-extractor.js +11 -2
  91. package/dist/src/platforms/instagram/token-extractor.js.map +1 -1
  92. package/dist/src/platforms/slack/commands/auth.d.ts.map +1 -1
  93. package/dist/src/platforms/slack/commands/auth.js +4 -2
  94. package/dist/src/platforms/slack/commands/auth.js.map +1 -1
  95. package/dist/src/platforms/slack/token-extractor.d.ts +4 -1
  96. package/dist/src/platforms/slack/token-extractor.d.ts.map +1 -1
  97. package/dist/src/platforms/slack/token-extractor.js +64 -15
  98. package/dist/src/platforms/slack/token-extractor.js.map +1 -1
  99. package/dist/src/platforms/slackbot/cli.d.ts.map +1 -1
  100. package/dist/src/platforms/slackbot/cli.js +15 -3
  101. package/dist/src/platforms/slackbot/cli.js.map +1 -1
  102. package/dist/src/platforms/slackbot/client.d.ts +22 -1
  103. package/dist/src/platforms/slackbot/client.d.ts.map +1 -1
  104. package/dist/src/platforms/slackbot/client.js +104 -1
  105. package/dist/src/platforms/slackbot/client.js.map +1 -1
  106. package/dist/src/platforms/slackbot/commands/auth.d.ts.map +1 -1
  107. package/dist/src/platforms/slackbot/commands/auth.js +1 -5
  108. package/dist/src/platforms/slackbot/commands/auth.js.map +1 -1
  109. package/dist/src/platforms/slackbot/commands/file.d.ts +3 -0
  110. package/dist/src/platforms/slackbot/commands/file.d.ts.map +1 -0
  111. package/dist/src/platforms/slackbot/commands/file.js +164 -0
  112. package/dist/src/platforms/slackbot/commands/file.js.map +1 -0
  113. package/dist/src/platforms/slackbot/commands/index.d.ts +1 -0
  114. package/dist/src/platforms/slackbot/commands/index.d.ts.map +1 -1
  115. package/dist/src/platforms/slackbot/commands/index.js +1 -0
  116. package/dist/src/platforms/slackbot/commands/index.js.map +1 -1
  117. package/dist/src/platforms/slackbot/commands/message.d.ts.map +1 -1
  118. package/dist/src/platforms/slackbot/commands/message.js +19 -0
  119. package/dist/src/platforms/slackbot/commands/message.js.map +1 -1
  120. package/dist/src/platforms/slackbot/commands/whoami.d.ts.map +1 -1
  121. package/dist/src/platforms/slackbot/commands/whoami.js +1 -6
  122. package/dist/src/platforms/slackbot/commands/whoami.js.map +1 -1
  123. package/dist/src/platforms/slackbot/credential-manager.d.ts +1 -0
  124. package/dist/src/platforms/slackbot/credential-manager.d.ts.map +1 -1
  125. package/dist/src/platforms/slackbot/credential-manager.js +30 -2
  126. package/dist/src/platforms/slackbot/credential-manager.js.map +1 -1
  127. package/dist/src/platforms/slackbot/index.d.ts +4 -1
  128. package/dist/src/platforms/slackbot/index.d.ts.map +1 -1
  129. package/dist/src/platforms/slackbot/index.js +1 -0
  130. package/dist/src/platforms/slackbot/index.js.map +1 -1
  131. package/dist/src/platforms/slackbot/listener.d.ts +44 -0
  132. package/dist/src/platforms/slackbot/listener.d.ts.map +1 -0
  133. package/dist/src/platforms/slackbot/listener.js +313 -0
  134. package/dist/src/platforms/slackbot/listener.js.map +1 -0
  135. package/dist/src/platforms/slackbot/types.d.ts +196 -1
  136. package/dist/src/platforms/slackbot/types.d.ts.map +1 -1
  137. package/dist/src/platforms/slackbot/types.js +4 -1
  138. package/dist/src/platforms/slackbot/types.js.map +1 -1
  139. package/dist/src/platforms/teams/commands/auth.d.ts +1 -0
  140. package/dist/src/platforms/teams/commands/auth.d.ts.map +1 -1
  141. package/dist/src/platforms/teams/commands/auth.js +37 -6
  142. package/dist/src/platforms/teams/commands/auth.js.map +1 -1
  143. package/dist/src/platforms/teams/ensure-auth.js +31 -9
  144. package/dist/src/platforms/teams/ensure-auth.js.map +1 -1
  145. package/dist/src/platforms/teams/token-extractor.d.ts +4 -1
  146. package/dist/src/platforms/teams/token-extractor.d.ts.map +1 -1
  147. package/dist/src/platforms/teams/token-extractor.js +80 -31
  148. package/dist/src/platforms/teams/token-extractor.js.map +1 -1
  149. package/dist/src/platforms/webex/commands/auth.d.ts +1 -0
  150. package/dist/src/platforms/webex/commands/auth.d.ts.map +1 -1
  151. package/dist/src/platforms/webex/commands/auth.js +3 -1
  152. package/dist/src/platforms/webex/commands/auth.js.map +1 -1
  153. package/dist/src/platforms/webex/token-extractor.d.ts +3 -1
  154. package/dist/src/platforms/webex/token-extractor.d.ts.map +1 -1
  155. package/dist/src/platforms/webex/token-extractor.js +16 -2
  156. package/dist/src/platforms/webex/token-extractor.js.map +1 -1
  157. package/dist/src/platforms/wechatbot/cli.d.ts.map +1 -1
  158. package/dist/src/platforms/wechatbot/cli.js +11 -1
  159. package/dist/src/platforms/wechatbot/cli.js.map +1 -1
  160. package/dist/src/platforms/wechatbot/commands/auth.d.ts.map +1 -1
  161. package/dist/src/platforms/wechatbot/commands/auth.js +1 -5
  162. package/dist/src/platforms/wechatbot/commands/auth.js.map +1 -1
  163. package/dist/src/platforms/wechatbot/commands/message.d.ts.map +1 -1
  164. package/dist/src/platforms/wechatbot/commands/message.js +1 -6
  165. package/dist/src/platforms/wechatbot/commands/message.js.map +1 -1
  166. package/dist/src/platforms/wechatbot/commands/template.d.ts.map +1 -1
  167. package/dist/src/platforms/wechatbot/commands/template.js +1 -6
  168. package/dist/src/platforms/wechatbot/commands/template.js.map +1 -1
  169. package/dist/src/platforms/wechatbot/commands/user.d.ts.map +1 -1
  170. package/dist/src/platforms/wechatbot/commands/user.js +1 -6
  171. package/dist/src/platforms/wechatbot/commands/user.js.map +1 -1
  172. package/dist/src/platforms/wechatbot/commands/whoami.d.ts.map +1 -1
  173. package/dist/src/platforms/wechatbot/commands/whoami.js +1 -6
  174. package/dist/src/platforms/wechatbot/commands/whoami.js.map +1 -1
  175. package/dist/src/platforms/whatsappbot/cli.d.ts.map +1 -1
  176. package/dist/src/platforms/whatsappbot/cli.js +11 -1
  177. package/dist/src/platforms/whatsappbot/cli.js.map +1 -1
  178. package/dist/src/platforms/whatsappbot/commands/auth.d.ts.map +1 -1
  179. package/dist/src/platforms/whatsappbot/commands/auth.js +1 -5
  180. package/dist/src/platforms/whatsappbot/commands/auth.js.map +1 -1
  181. package/dist/src/platforms/whatsappbot/commands/message.d.ts.map +1 -1
  182. package/dist/src/platforms/whatsappbot/commands/message.js +1 -6
  183. package/dist/src/platforms/whatsappbot/commands/message.js.map +1 -1
  184. package/dist/src/platforms/whatsappbot/commands/template.d.ts.map +1 -1
  185. package/dist/src/platforms/whatsappbot/commands/template.js +1 -6
  186. package/dist/src/platforms/whatsappbot/commands/template.js.map +1 -1
  187. package/dist/src/platforms/whatsappbot/commands/whoami.d.ts.map +1 -1
  188. package/dist/src/platforms/whatsappbot/commands/whoami.js +1 -6
  189. package/dist/src/platforms/whatsappbot/commands/whoami.js.map +1 -1
  190. package/dist/src/shared/chromium/browsers.d.ts +8 -0
  191. package/dist/src/shared/chromium/browsers.d.ts.map +1 -1
  192. package/dist/src/shared/chromium/browsers.js +58 -3
  193. package/dist/src/shared/chromium/browsers.js.map +1 -1
  194. package/dist/src/shared/chromium/cli-options.d.ts +5 -0
  195. package/dist/src/shared/chromium/cli-options.d.ts.map +1 -0
  196. package/dist/src/shared/chromium/cli-options.js +8 -0
  197. package/dist/src/shared/chromium/cli-options.js.map +1 -0
  198. package/dist/src/shared/chromium/decryptor.d.ts +6 -0
  199. package/dist/src/shared/chromium/decryptor.d.ts.map +1 -1
  200. package/dist/src/shared/chromium/decryptor.js +26 -6
  201. package/dist/src/shared/chromium/decryptor.js.map +1 -1
  202. package/dist/src/shared/chromium/index.d.ts +3 -1
  203. package/dist/src/shared/chromium/index.d.ts.map +1 -1
  204. package/dist/src/shared/chromium/index.js +2 -1
  205. package/dist/src/shared/chromium/index.js.map +1 -1
  206. package/dist/src/shared/utils/cli-output.d.ts +7 -0
  207. package/dist/src/shared/utils/cli-output.d.ts.map +1 -0
  208. package/dist/src/shared/utils/cli-output.js +7 -0
  209. package/dist/src/shared/utils/cli-output.js.map +1 -0
  210. package/dist/src/tui/app.d.ts.map +1 -1
  211. package/dist/src/tui/app.js +73 -20
  212. package/dist/src/tui/app.js.map +1 -1
  213. package/docs/content/docs/cli/channeltalk.mdx +4 -0
  214. package/docs/content/docs/cli/discord.mdx +5 -0
  215. package/docs/content/docs/cli/instagram.mdx +3 -0
  216. package/docs/content/docs/cli/slack.mdx +5 -0
  217. package/docs/content/docs/cli/slackbot.mdx +60 -22
  218. package/docs/content/docs/cli/teams.mdx +5 -0
  219. package/docs/content/docs/cli/webex.mdx +3 -0
  220. package/docs/content/docs/sdk/channeltalkbot.mdx +38 -1
  221. package/docs/content/docs/sdk/discordbot.mdx +501 -0
  222. package/docs/content/docs/sdk/meta.json +2 -0
  223. package/docs/content/docs/sdk/slackbot.mdx +576 -0
  224. package/e2e/README.md +1 -1
  225. package/e2e/channeltalk.e2e.test.ts +13 -13
  226. package/e2e/channeltalkbot.e2e.test.ts +13 -13
  227. package/e2e/config.ts +9 -4
  228. package/e2e/discord.e2e.test.ts +24 -24
  229. package/e2e/discordbot.e2e.test.ts +16 -16
  230. package/e2e/instagram.e2e.test.ts +10 -10
  231. package/e2e/kakaotalk.e2e.test.ts +7 -7
  232. package/e2e/line.e2e.test.ts +8 -8
  233. package/e2e/slack.e2e.test.ts +34 -34
  234. package/e2e/slackbot.e2e.test.ts +14 -14
  235. package/e2e/teams.e2e.test.ts +23 -23
  236. package/e2e/telegram.e2e.test.ts +8 -8
  237. package/e2e/webex.e2e.test.ts +14 -14
  238. package/e2e/whatsapp.e2e.test.ts +8 -8
  239. package/e2e/whatsappbot.e2e.test.ts +6 -6
  240. package/examples/discordbot-listen.ts +65 -0
  241. package/examples/slackbot-listen.ts +65 -0
  242. package/package.json +14 -1
  243. package/skills/agent-channeltalk/SKILL.md +5 -1
  244. package/skills/agent-channeltalk/references/authentication.md +5 -1
  245. package/skills/agent-channeltalkbot/SKILL.md +17 -3
  246. package/skills/agent-channeltalkbot/references/authentication.md +7 -5
  247. package/skills/agent-discord/SKILL.md +5 -1
  248. package/skills/agent-discord/references/authentication.md +7 -1
  249. package/skills/agent-discordbot/SKILL.md +13 -2
  250. package/skills/agent-discordbot/references/common-patterns.md +1 -1
  251. package/skills/agent-instagram/SKILL.md +7 -1
  252. package/skills/agent-instagram/references/authentication.md +6 -0
  253. package/skills/agent-kakaotalk/SKILL.md +1 -1
  254. package/skills/agent-line/SKILL.md +1 -1
  255. package/skills/agent-slack/SKILL.md +5 -1
  256. package/skills/agent-slack/references/authentication.md +7 -1
  257. package/skills/agent-slackbot/SKILL.md +56 -4
  258. package/skills/agent-slackbot/references/authentication.md +4 -0
  259. package/skills/agent-teams/SKILL.md +5 -1
  260. package/skills/agent-teams/references/authentication.md +7 -1
  261. package/skills/agent-telegram/SKILL.md +1 -1
  262. package/skills/agent-webex/SKILL.md +7 -1
  263. package/skills/agent-webex/references/authentication.md +6 -0
  264. package/skills/agent-wechatbot/SKILL.md +16 -1
  265. package/skills/agent-wechatbot/references/authentication.md +219 -0
  266. package/skills/agent-wechatbot/references/common-patterns.md +358 -0
  267. package/skills/agent-wechatbot/templates/account-summary.sh +122 -0
  268. package/skills/agent-wechatbot/templates/post-message.sh +122 -0
  269. package/skills/agent-wechatbot/templates/send-template.sh +152 -0
  270. package/skills/agent-whatsapp/SKILL.md +1 -1
  271. package/skills/agent-whatsappbot/SKILL.md +30 -1
  272. package/src/platforms/channeltalk/client.test.ts +26 -26
  273. package/src/platforms/channeltalk/commands/auth.test.ts +31 -19
  274. package/src/platforms/channeltalk/commands/auth.ts +15 -5
  275. package/src/platforms/channeltalk/commands/bot.test.ts +2 -2
  276. package/src/platforms/channeltalk/commands/chat.test.ts +3 -3
  277. package/src/platforms/channeltalk/commands/group.test.ts +4 -4
  278. package/src/platforms/channeltalk/commands/manager.test.ts +2 -2
  279. package/src/platforms/channeltalk/commands/message.test.ts +17 -17
  280. package/src/platforms/channeltalk/commands/snapshot.test.ts +7 -7
  281. package/src/platforms/channeltalk/commands/whoami.test.ts +3 -3
  282. package/src/platforms/channeltalk/credential-manager.test.ts +18 -18
  283. package/src/platforms/channeltalk/ensure-auth.test.ts +5 -5
  284. package/src/platforms/channeltalk/index.test.ts +23 -23
  285. package/src/platforms/channeltalk/token-extractor.test.ts +21 -21
  286. package/src/platforms/channeltalk/token-extractor.ts +24 -5
  287. package/src/platforms/channeltalk/types.test.ts +12 -12
  288. package/src/platforms/channeltalkbot/cli.ts +9 -0
  289. package/src/platforms/channeltalkbot/client.test.ts +14 -14
  290. package/src/platforms/channeltalkbot/commands/auth.test.ts +16 -16
  291. package/src/platforms/channeltalkbot/commands/auth.ts +1 -5
  292. package/src/platforms/channeltalkbot/commands/bot.test.ts +6 -6
  293. package/src/platforms/channeltalkbot/commands/bot.ts +1 -6
  294. package/src/platforms/channeltalkbot/commands/chat.test.ts +9 -9
  295. package/src/platforms/channeltalkbot/commands/chat.ts +1 -6
  296. package/src/platforms/channeltalkbot/commands/group.test.ts +6 -6
  297. package/src/platforms/channeltalkbot/commands/group.ts +1 -6
  298. package/src/platforms/channeltalkbot/commands/manager.test.ts +3 -3
  299. package/src/platforms/channeltalkbot/commands/manager.ts +1 -6
  300. package/src/platforms/channeltalkbot/commands/message.test.ts +10 -10
  301. package/src/platforms/channeltalkbot/commands/message.ts +1 -6
  302. package/src/platforms/channeltalkbot/commands/snapshot.test.ts +7 -7
  303. package/src/platforms/channeltalkbot/commands/whoami.test.ts +6 -4
  304. package/src/platforms/channeltalkbot/commands/whoami.ts +1 -6
  305. package/src/platforms/channeltalkbot/credential-manager.test.ts +123 -29
  306. package/src/platforms/channeltalkbot/credential-manager.ts +37 -4
  307. package/src/platforms/channeltalkbot/index.test.ts +15 -15
  308. package/src/platforms/discord/client.test.ts +28 -28
  309. package/src/platforms/discord/commands/auth.test.ts +7 -7
  310. package/src/platforms/discord/commands/auth.ts +13 -2
  311. package/src/platforms/discord/commands/channel.test.ts +7 -7
  312. package/src/platforms/discord/commands/dm.test.ts +4 -4
  313. package/src/platforms/discord/commands/file.test.ts +4 -4
  314. package/src/platforms/discord/commands/friend.test.ts +6 -6
  315. package/src/platforms/discord/commands/member.test.ts +5 -5
  316. package/src/platforms/discord/commands/mention.test.ts +5 -5
  317. package/src/platforms/discord/commands/message.test.ts +9 -9
  318. package/src/platforms/discord/commands/note.test.ts +6 -6
  319. package/src/platforms/discord/commands/profile.test.ts +4 -4
  320. package/src/platforms/discord/commands/reaction.test.ts +5 -5
  321. package/src/platforms/discord/commands/server.test.ts +7 -7
  322. package/src/platforms/discord/commands/snapshot.test.ts +6 -6
  323. package/src/platforms/discord/commands/thread.test.ts +6 -6
  324. package/src/platforms/discord/commands/user.test.ts +5 -5
  325. package/src/platforms/discord/commands/whoami.test.ts +6 -6
  326. package/src/platforms/discord/credential-manager.test.ts +16 -16
  327. package/src/platforms/discord/ensure-auth.test.ts +8 -8
  328. package/src/platforms/discord/index.test.ts +17 -17
  329. package/src/platforms/discord/listener.test.ts +92 -34
  330. package/src/platforms/discord/listener.ts +43 -19
  331. package/src/platforms/discord/token-extractor.test.ts +53 -53
  332. package/src/platforms/discord/token-extractor.ts +30 -6
  333. package/src/platforms/discord/types.test.ts +26 -26
  334. package/src/platforms/discordbot/cli.ts +10 -0
  335. package/src/platforms/discordbot/client.test.ts +31 -31
  336. package/src/platforms/discordbot/client.ts +4 -0
  337. package/src/platforms/discordbot/commands/auth.test.ts +18 -18
  338. package/src/platforms/discordbot/commands/auth.ts +1 -5
  339. package/src/platforms/discordbot/commands/channel.test.ts +11 -11
  340. package/src/platforms/discordbot/commands/file.test.ts +7 -7
  341. package/src/platforms/discordbot/commands/message.test.ts +25 -25
  342. package/src/platforms/discordbot/commands/message.ts +1 -6
  343. package/src/platforms/discordbot/commands/reaction.test.ts +6 -6
  344. package/src/platforms/discordbot/commands/server.test.ts +12 -12
  345. package/src/platforms/discordbot/commands/server.ts +1 -5
  346. package/src/platforms/discordbot/commands/snapshot.test.ts +13 -13
  347. package/src/platforms/discordbot/commands/thread.test.ts +10 -10
  348. package/src/platforms/discordbot/commands/user.test.ts +9 -9
  349. package/src/platforms/discordbot/commands/whoami.test.ts +4 -4
  350. package/src/platforms/discordbot/commands/whoami.ts +1 -6
  351. package/src/platforms/discordbot/credential-manager.test.ts +28 -28
  352. package/src/platforms/discordbot/index.test.ts +82 -0
  353. package/src/platforms/discordbot/index.ts +27 -9
  354. package/src/platforms/discordbot/listener.test.ts +1002 -0
  355. package/src/platforms/discordbot/listener.ts +321 -0
  356. package/src/platforms/discordbot/types.ts +163 -0
  357. package/src/platforms/instagram/client.test.ts +18 -18
  358. package/src/platforms/instagram/commands/auth.test.ts +11 -11
  359. package/src/platforms/instagram/commands/auth.ts +9 -1
  360. package/src/platforms/instagram/commands/chat.test.ts +6 -6
  361. package/src/platforms/instagram/commands/message.test.ts +11 -11
  362. package/src/platforms/instagram/commands/shared.test.ts +12 -12
  363. package/src/platforms/instagram/commands/whoami.test.ts +3 -3
  364. package/src/platforms/instagram/credential-manager.test.ts +21 -21
  365. package/src/platforms/instagram/ensure-auth.test.ts +4 -4
  366. package/src/platforms/instagram/index.test.ts +9 -9
  367. package/src/platforms/instagram/listener.test.ts +8 -8
  368. package/src/platforms/instagram/token-extractor.test.ts +35 -35
  369. package/src/platforms/instagram/token-extractor.ts +13 -1
  370. package/src/platforms/kakaotalk/client.test.ts +33 -33
  371. package/src/platforms/kakaotalk/commands/auth.test.ts +11 -11
  372. package/src/platforms/kakaotalk/commands/chat.test.ts +6 -6
  373. package/src/platforms/kakaotalk/commands/message.test.ts +7 -7
  374. package/src/platforms/kakaotalk/commands/whoami.test.ts +5 -5
  375. package/src/platforms/kakaotalk/credential-manager.test.ts +15 -15
  376. package/src/platforms/kakaotalk/index.test.ts +15 -15
  377. package/src/platforms/kakaotalk/listener.test.ts +17 -17
  378. package/src/platforms/line/client.test.ts +17 -17
  379. package/src/platforms/line/commands/auth.test.ts +8 -8
  380. package/src/platforms/line/commands/chat.test.ts +7 -7
  381. package/src/platforms/line/commands/friend.test.ts +6 -6
  382. package/src/platforms/line/commands/message.test.ts +7 -7
  383. package/src/platforms/line/commands/whoami.test.ts +6 -6
  384. package/src/platforms/line/credential-manager.test.ts +17 -17
  385. package/src/platforms/line/index.test.ts +10 -10
  386. package/src/platforms/line/listener.test.ts +15 -15
  387. package/src/platforms/line/types.test.ts +14 -14
  388. package/src/platforms/slack/cli.test.ts +8 -8
  389. package/src/platforms/slack/client.test.ts +151 -151
  390. package/src/platforms/slack/commands/activity.test.ts +13 -13
  391. package/src/platforms/slack/commands/auth.test.ts +34 -34
  392. package/src/platforms/slack/commands/auth.ts +11 -2
  393. package/src/platforms/slack/commands/bookmark.test.ts +9 -9
  394. package/src/platforms/slack/commands/channel.test.ts +17 -17
  395. package/src/platforms/slack/commands/drafts.test.ts +7 -7
  396. package/src/platforms/slack/commands/emoji.test.ts +3 -3
  397. package/src/platforms/slack/commands/file.test.ts +12 -12
  398. package/src/platforms/slack/commands/message.test.ts +19 -19
  399. package/src/platforms/slack/commands/pin.test.ts +7 -7
  400. package/src/platforms/slack/commands/reaction.test.ts +10 -10
  401. package/src/platforms/slack/commands/reminder.test.ts +9 -9
  402. package/src/platforms/slack/commands/saved.test.ts +7 -7
  403. package/src/platforms/slack/commands/sections.test.ts +5 -5
  404. package/src/platforms/slack/commands/snapshot.test.ts +13 -13
  405. package/src/platforms/slack/commands/unread.test.ts +6 -6
  406. package/src/platforms/slack/commands/user.test.ts +10 -10
  407. package/src/platforms/slack/commands/usergroup.test.ts +15 -15
  408. package/src/platforms/slack/commands/whoami.test.ts +6 -6
  409. package/src/platforms/slack/commands/workspace.test.ts +26 -26
  410. package/src/platforms/slack/credential-manager.test.ts +14 -14
  411. package/src/platforms/slack/ensure-auth.test.ts +21 -21
  412. package/src/platforms/slack/index.test.ts +12 -12
  413. package/src/platforms/slack/listener.test.ts +17 -17
  414. package/src/platforms/slack/token-extractor-node.test.ts +2 -2
  415. package/src/platforms/slack/token-extractor.test.ts +133 -37
  416. package/src/platforms/slack/token-extractor.ts +76 -13
  417. package/src/platforms/slack/types.test.ts +21 -21
  418. package/src/platforms/slackbot/cli.ts +13 -1
  419. package/src/platforms/slackbot/client.test.ts +296 -22
  420. package/src/platforms/slackbot/client.ts +130 -2
  421. package/src/platforms/slackbot/commands/auth.test.ts +14 -14
  422. package/src/platforms/slackbot/commands/auth.ts +1 -5
  423. package/src/platforms/slackbot/commands/channel.test.ts +7 -7
  424. package/src/platforms/slackbot/commands/file.test.ts +201 -0
  425. package/src/platforms/slackbot/commands/file.ts +212 -0
  426. package/src/platforms/slackbot/commands/index.ts +1 -0
  427. package/src/platforms/slackbot/commands/message.test.ts +13 -13
  428. package/src/platforms/slackbot/commands/message.ts +22 -0
  429. package/src/platforms/slackbot/commands/reaction.test.ts +6 -6
  430. package/src/platforms/slackbot/commands/user.test.ts +7 -7
  431. package/src/platforms/slackbot/commands/whoami.test.ts +4 -4
  432. package/src/platforms/slackbot/commands/whoami.ts +1 -6
  433. package/src/platforms/slackbot/credential-manager.test.ts +83 -23
  434. package/src/platforms/slackbot/credential-manager.ts +32 -2
  435. package/src/platforms/slackbot/index.test.ts +59 -0
  436. package/src/platforms/slackbot/index.ts +31 -7
  437. package/src/platforms/slackbot/listener.test.ts +1012 -0
  438. package/src/platforms/slackbot/listener.ts +362 -0
  439. package/src/platforms/slackbot/types.test.ts +7 -7
  440. package/src/platforms/slackbot/types.ts +224 -1
  441. package/src/platforms/teams/client.test.ts +30 -30
  442. package/src/platforms/teams/commands/auth.test.ts +9 -9
  443. package/src/platforms/teams/commands/auth.ts +66 -7
  444. package/src/platforms/teams/commands/channel.test.ts +7 -7
  445. package/src/platforms/teams/commands/file.test.ts +4 -4
  446. package/src/platforms/teams/commands/message.test.ts +5 -5
  447. package/src/platforms/teams/commands/reaction.test.ts +4 -4
  448. package/src/platforms/teams/commands/snapshot.test.ts +7 -7
  449. package/src/platforms/teams/commands/team.test.ts +8 -8
  450. package/src/platforms/teams/commands/user.test.ts +4 -4
  451. package/src/platforms/teams/commands/whoami.test.ts +6 -6
  452. package/src/platforms/teams/credential-manager.test.ts +17 -17
  453. package/src/platforms/teams/ensure-auth.test.ts +69 -18
  454. package/src/platforms/teams/ensure-auth.ts +39 -11
  455. package/src/platforms/teams/index.test.ts +15 -15
  456. package/src/platforms/teams/token-extractor.test.ts +251 -69
  457. package/src/platforms/teams/token-extractor.ts +94 -31
  458. package/src/platforms/teams/types.test.ts +26 -26
  459. package/src/platforms/telegram/app-config.test.ts +4 -4
  460. package/src/platforms/telegram/chat-utils.test.ts +12 -12
  461. package/src/platforms/telegram/client.test.ts +4 -4
  462. package/src/platforms/telegram/commands/auth.test.ts +16 -16
  463. package/src/platforms/telegram/commands/chat.test.ts +9 -9
  464. package/src/platforms/telegram/commands/message.test.ts +6 -6
  465. package/src/platforms/telegram/commands/shared.test.ts +3 -3
  466. package/src/platforms/telegram/commands/whoami.test.ts +3 -3
  467. package/src/platforms/telegram/credential-manager.test.ts +10 -10
  468. package/src/platforms/telegram/types.test.ts +6 -6
  469. package/src/platforms/webex/app-config.test.ts +8 -8
  470. package/src/platforms/webex/cli.test.ts +5 -5
  471. package/src/platforms/webex/client.test.ts +65 -65
  472. package/src/platforms/webex/commands/auth.test.ts +18 -18
  473. package/src/platforms/webex/commands/auth.ts +13 -2
  474. package/src/platforms/webex/commands/member.test.ts +5 -5
  475. package/src/platforms/webex/commands/message.test.ts +12 -12
  476. package/src/platforms/webex/commands/snapshot.test.ts +5 -5
  477. package/src/platforms/webex/commands/space.test.ts +10 -10
  478. package/src/platforms/webex/commands/whoami.test.ts +6 -6
  479. package/src/platforms/webex/credential-manager.test.ts +22 -22
  480. package/src/platforms/webex/encryption.test.ts +4 -4
  481. package/src/platforms/webex/ensure-auth.test.ts +5 -5
  482. package/src/platforms/webex/index.test.ts +5 -5
  483. package/src/platforms/webex/markdown-to-html.test.ts +33 -33
  484. package/src/platforms/webex/token-extractor.test.ts +23 -23
  485. package/src/platforms/webex/token-extractor.ts +25 -3
  486. package/src/platforms/webex/types.test.ts +27 -27
  487. package/src/platforms/wechatbot/cli.ts +9 -0
  488. package/src/platforms/wechatbot/client.test.ts +27 -27
  489. package/src/platforms/wechatbot/commands/auth.test.ts +15 -15
  490. package/src/platforms/wechatbot/commands/auth.ts +1 -5
  491. package/src/platforms/wechatbot/commands/message.test.ts +8 -8
  492. package/src/platforms/wechatbot/commands/message.ts +1 -6
  493. package/src/platforms/wechatbot/commands/template.test.ts +9 -9
  494. package/src/platforms/wechatbot/commands/template.ts +1 -6
  495. package/src/platforms/wechatbot/commands/user.test.ts +7 -7
  496. package/src/platforms/wechatbot/commands/user.ts +1 -6
  497. package/src/platforms/wechatbot/commands/whoami.test.ts +5 -5
  498. package/src/platforms/wechatbot/commands/whoami.ts +1 -6
  499. package/src/platforms/wechatbot/credential-manager.test.ts +18 -18
  500. package/src/platforms/wechatbot/index.test.ts +10 -10
  501. package/src/platforms/wechatbot/types.test.ts +25 -25
  502. package/src/platforms/whatsapp/commands/auth.test.ts +13 -13
  503. package/src/platforms/whatsapp/commands/chat.test.ts +8 -8
  504. package/src/platforms/whatsapp/commands/message.test.ts +10 -10
  505. package/src/platforms/whatsapp/commands/whoami.test.ts +3 -3
  506. package/src/platforms/whatsapp/credential-manager.test.ts +23 -23
  507. package/src/platforms/whatsapp/ensure-auth.test.ts +4 -4
  508. package/src/platforms/whatsapp/index.test.ts +8 -8
  509. package/src/platforms/whatsapp/types.test.ts +42 -42
  510. package/src/platforms/whatsappbot/cli.ts +9 -0
  511. package/src/platforms/whatsappbot/client.test.ts +27 -27
  512. package/src/platforms/whatsappbot/commands/auth.test.ts +14 -14
  513. package/src/platforms/whatsappbot/commands/auth.ts +1 -5
  514. package/src/platforms/whatsappbot/commands/message.test.ts +16 -16
  515. package/src/platforms/whatsappbot/commands/message.ts +1 -6
  516. package/src/platforms/whatsappbot/commands/template.test.ts +9 -9
  517. package/src/platforms/whatsappbot/commands/template.ts +1 -6
  518. package/src/platforms/whatsappbot/commands/whoami.test.ts +5 -5
  519. package/src/platforms/whatsappbot/commands/whoami.ts +1 -6
  520. package/src/platforms/whatsappbot/credential-manager.test.ts +18 -18
  521. package/src/platforms/whatsappbot/index.test.ts +7 -7
  522. package/src/platforms/whatsappbot/types.test.ts +18 -18
  523. package/src/shared/chromium/browsers.test.ts +102 -22
  524. package/src/shared/chromium/browsers.ts +72 -3
  525. package/src/shared/chromium/cli-options.test.ts +22 -0
  526. package/src/shared/chromium/cli-options.ts +12 -0
  527. package/src/shared/chromium/cookie-reader.test.ts +13 -13
  528. package/src/shared/chromium/decryptor.test.ts +97 -32
  529. package/src/shared/chromium/decryptor.ts +27 -6
  530. package/src/shared/chromium/index.ts +3 -0
  531. package/src/shared/utils/cli-output.test.ts +57 -0
  532. package/src/shared/utils/cli-output.ts +8 -0
  533. package/src/shared/utils/concurrency.test.ts +6 -6
  534. package/src/shared/utils/derived-key-cache.test.ts +11 -11
  535. package/src/tui/app.ts +129 -20
  536. package/src/tui/utils.test.ts +31 -31
@@ -1,4 +1,4 @@
1
- import { afterEach, beforeEach, describe, expect, test } from 'bun:test'
1
+ import { afterEach, beforeEach, describe, expect, it } from 'bun:test'
2
2
 
3
3
  import { getNonInteractiveLoginMessage, promptNextLoginInput } from './auth'
4
4
 
@@ -19,37 +19,37 @@ describe('promptNextLoginInput non-interactive', () => {
19
19
  Object.defineProperty(process.stdout, 'isTTY', { value: originalStdoutTTY, writable: true, configurable: true })
20
20
  })
21
21
 
22
- test('returns null for provide_phone_number', async () => {
22
+ it('returns null for provide_phone_number', async () => {
23
23
  const result = await promptNextLoginInput({ next_action: 'provide_phone_number' }, {})
24
24
  expect(result).toBeNull()
25
25
  })
26
26
 
27
- test('returns null for provide_code', async () => {
27
+ it('returns null for provide_code', async () => {
28
28
  const result = await promptNextLoginInput({ next_action: 'provide_code' }, {})
29
29
  expect(result).toBeNull()
30
30
  })
31
31
 
32
- test('returns null for provide_password', async () => {
32
+ it('returns null for provide_password', async () => {
33
33
  const result = await promptNextLoginInput({ next_action: 'provide_password' }, {})
34
34
  expect(result).toBeNull()
35
35
  })
36
36
 
37
- test('returns null for provide_email', async () => {
37
+ it('returns null for provide_email', async () => {
38
38
  const result = await promptNextLoginInput({ next_action: 'provide_email' }, {})
39
39
  expect(result).toBeNull()
40
40
  })
41
41
 
42
- test('returns null for provide_email_code', async () => {
42
+ it('returns null for provide_email_code', async () => {
43
43
  const result = await promptNextLoginInput({ next_action: 'provide_email_code' }, {})
44
44
  expect(result).toBeNull()
45
45
  })
46
46
 
47
- test('returns null for provide_registration', async () => {
47
+ it('returns null for provide_registration', async () => {
48
48
  const result = await promptNextLoginInput({ next_action: 'provide_registration' }, {})
49
49
  expect(result).toBeNull()
50
50
  })
51
51
 
52
- test('returns options unchanged for unknown next_action', async () => {
52
+ it('returns options unchanged for unknown next_action', async () => {
53
53
  const options = { phone: '+14155551234' }
54
54
  const result = await promptNextLoginInput({ next_action: undefined }, options)
55
55
 
@@ -59,56 +59,56 @@ describe('promptNextLoginInput non-interactive', () => {
59
59
  })
60
60
 
61
61
  describe('getNonInteractiveLoginMessage', () => {
62
- test('maps provide_phone_number to provide_phone with --phone hint', () => {
62
+ it('maps provide_phone_number to provide_phone with --phone hint', () => {
63
63
  const msg = getNonInteractiveLoginMessage('provide_phone_number')
64
64
  expect(msg).not.toBeNull()
65
65
  expect(msg!.next_action).toBe('provide_phone')
66
66
  expect(msg!.message).toContain('--phone')
67
67
  })
68
68
 
69
- test('maps provide_code with --code hint', () => {
69
+ it('maps provide_code with --code hint', () => {
70
70
  const msg = getNonInteractiveLoginMessage('provide_code')
71
71
  expect(msg).not.toBeNull()
72
72
  expect(msg!.next_action).toBe('provide_code')
73
73
  expect(msg!.message).toContain('--code')
74
74
  })
75
75
 
76
- test('maps provide_password with --password hint', () => {
76
+ it('maps provide_password with --password hint', () => {
77
77
  const msg = getNonInteractiveLoginMessage('provide_password')
78
78
  expect(msg).not.toBeNull()
79
79
  expect(msg!.next_action).toBe('provide_password')
80
80
  expect(msg!.message).toContain('--password')
81
81
  })
82
82
 
83
- test('maps provide_email with --email hint', () => {
83
+ it('maps provide_email with --email hint', () => {
84
84
  const msg = getNonInteractiveLoginMessage('provide_email')
85
85
  expect(msg).not.toBeNull()
86
86
  expect(msg!.next_action).toBe('provide_email')
87
87
  expect(msg!.message).toContain('--email')
88
88
  })
89
89
 
90
- test('maps provide_email_code with --email-code hint', () => {
90
+ it('maps provide_email_code with --email-code hint', () => {
91
91
  const msg = getNonInteractiveLoginMessage('provide_email_code')
92
92
  expect(msg).not.toBeNull()
93
93
  expect(msg!.next_action).toBe('provide_email_code')
94
94
  expect(msg!.message).toContain('--email-code')
95
95
  })
96
96
 
97
- test('maps provide_registration with --first-name hint', () => {
97
+ it('maps provide_registration with --first-name hint', () => {
98
98
  const msg = getNonInteractiveLoginMessage('provide_registration')
99
99
  expect(msg).not.toBeNull()
100
100
  expect(msg!.next_action).toBe('provide_registration')
101
101
  expect(msg!.message).toContain('--first-name')
102
102
  })
103
103
 
104
- test('maps provide_provisioning_code with --provisioning-code hint', () => {
104
+ it('maps provide_provisioning_code with --provisioning-code hint', () => {
105
105
  const msg = getNonInteractiveLoginMessage('provide_provisioning_code')
106
106
  expect(msg).not.toBeNull()
107
107
  expect(msg!.next_action).toBe('provide_provisioning_code')
108
108
  expect(msg!.message).toContain('--provisioning-code')
109
109
  })
110
110
 
111
- test('returns null for unknown action', () => {
111
+ it('returns null for unknown action', () => {
112
112
  expect(getNonInteractiveLoginMessage('unknown_action')).toBeNull()
113
113
  })
114
114
  })
@@ -1,4 +1,4 @@
1
- import { afterEach, beforeEach, describe, expect, mock, spyOn, test } from 'bun:test'
1
+ import { afterEach, beforeEach, describe, expect, mock, spyOn, it } from 'bun:test'
2
2
 
3
3
  const mockListChats = mock(() =>
4
4
  Promise.resolve([
@@ -55,19 +55,19 @@ describe('chat commands', () => {
55
55
  })
56
56
 
57
57
  describe('list subcommand', () => {
58
- test('calls listChats with default limit', async () => {
58
+ it('calls listChats with default limit', async () => {
59
59
  await chatCommand.parseAsync(['list'], { from: 'user' })
60
60
 
61
61
  expect(mockListChats).toHaveBeenCalledWith(20)
62
62
  })
63
63
 
64
- test('calls listChats with custom limit', async () => {
64
+ it('calls listChats with custom limit', async () => {
65
65
  await chatCommand.parseAsync(['list', '--limit', '5'], { from: 'user' })
66
66
 
67
67
  expect(mockListChats).toHaveBeenCalledWith(5)
68
68
  })
69
69
 
70
- test('outputs JSON array to console', async () => {
70
+ it('outputs JSON array to console', async () => {
71
71
  await chatCommand.parseAsync(['list'], { from: 'user' })
72
72
 
73
73
  expect(consoleSpy).toHaveBeenCalled()
@@ -79,19 +79,19 @@ describe('chat commands', () => {
79
79
  })
80
80
 
81
81
  describe('search subcommand', () => {
82
- test('calls searchChats with query and default limit', async () => {
82
+ it('calls searchChats with query and default limit', async () => {
83
83
  await chatCommand.parseAsync(['search', 'General'], { from: 'user' })
84
84
 
85
85
  expect(mockSearchChats).toHaveBeenCalledWith('General', 20)
86
86
  })
87
87
 
88
- test('calls searchChats with query and custom limit', async () => {
88
+ it('calls searchChats with query and custom limit', async () => {
89
89
  await chatCommand.parseAsync(['search', 'General', '--limit', '3'], { from: 'user' })
90
90
 
91
91
  expect(mockSearchChats).toHaveBeenCalledWith('General', 3)
92
92
  })
93
93
 
94
- test('outputs JSON array to console', async () => {
94
+ it('outputs JSON array to console', async () => {
95
95
  await chatCommand.parseAsync(['search', 'General'], { from: 'user' })
96
96
 
97
97
  expect(consoleSpy).toHaveBeenCalled()
@@ -103,13 +103,13 @@ describe('chat commands', () => {
103
103
  })
104
104
 
105
105
  describe('get subcommand', () => {
106
- test('calls getChat with chat reference', async () => {
106
+ it('calls getChat with chat reference', async () => {
107
107
  await chatCommand.parseAsync(['get', 'chat-1'], { from: 'user' })
108
108
 
109
109
  expect(mockGetChat).toHaveBeenCalledWith('chat-1')
110
110
  })
111
111
 
112
- test('outputs JSON object to console', async () => {
112
+ it('outputs JSON object to console', async () => {
113
113
  await chatCommand.parseAsync(['get', 'chat-1'], { from: 'user' })
114
114
 
115
115
  expect(consoleSpy).toHaveBeenCalled()
@@ -1,4 +1,4 @@
1
- import { afterEach, beforeEach, describe, expect, mock, spyOn, test } from 'bun:test'
1
+ import { afterEach, beforeEach, describe, expect, mock, spyOn, it } from 'bun:test'
2
2
 
3
3
  const mockListMessages = mock(() =>
4
4
  Promise.resolve([
@@ -46,19 +46,19 @@ describe('message commands', () => {
46
46
  })
47
47
 
48
48
  describe('list subcommand', () => {
49
- test('calls listMessages with chat reference and default limit', async () => {
49
+ it('calls listMessages with chat reference and default limit', async () => {
50
50
  await messageCommand.parseAsync(['list', 'chat-123'], { from: 'user' })
51
51
 
52
52
  expect(mockListMessages).toHaveBeenCalledWith('chat-123', 20)
53
53
  })
54
54
 
55
- test('calls listMessages with custom limit', async () => {
55
+ it('calls listMessages with custom limit', async () => {
56
56
  await messageCommand.parseAsync(['list', 'chat-123', '--limit', '10'], { from: 'user' })
57
57
 
58
58
  expect(mockListMessages).toHaveBeenCalledWith('chat-123', 10)
59
59
  })
60
60
 
61
- test('outputs JSON to console', async () => {
61
+ it('outputs JSON to console', async () => {
62
62
  await messageCommand.parseAsync(['list', 'chat-123'], { from: 'user' })
63
63
 
64
64
  expect(consoleSpy).toHaveBeenCalled()
@@ -70,13 +70,13 @@ describe('message commands', () => {
70
70
  })
71
71
 
72
72
  describe('send subcommand', () => {
73
- test('calls sendMessage with chat reference and text', async () => {
73
+ it('calls sendMessage with chat reference and text', async () => {
74
74
  await messageCommand.parseAsync(['send', 'chat-123', 'Hello there'], { from: 'user' })
75
75
 
76
76
  expect(mockSendMessage).toHaveBeenCalledWith('chat-123', 'Hello there')
77
77
  })
78
78
 
79
- test('outputs JSON to console', async () => {
79
+ it('outputs JSON to console', async () => {
80
80
  await messageCommand.parseAsync(['send', 'chat-123', 'Hello there'], { from: 'user' })
81
81
 
82
82
  expect(consoleSpy).toHaveBeenCalled()
@@ -1,14 +1,14 @@
1
- import { describe, expect, test } from 'bun:test'
1
+ import { describe, expect, it } from 'bun:test'
2
2
 
3
3
  import { TelegramError } from '../types'
4
4
  import { parseLimitOption } from './shared'
5
5
 
6
6
  describe('telegram shared command helpers', () => {
7
- test('parseLimitOption accepts normal integer strings', () => {
7
+ it('parseLimitOption accepts normal integer strings', () => {
8
8
  expect(parseLimitOption('10', 20)).toBe(10)
9
9
  })
10
10
 
11
- test('parseLimitOption rejects malformed numeric prefixes', () => {
11
+ it('parseLimitOption rejects malformed numeric prefixes', () => {
12
12
  expect(() => parseLimitOption('10abc', 20)).toThrow(TelegramError)
13
13
  expect(() => parseLimitOption('1.5', 20)).toThrow(TelegramError)
14
14
  expect(() => parseLimitOption('2e3', 20)).toThrow(TelegramError)
@@ -1,4 +1,4 @@
1
- import { afterEach, beforeEach, describe, expect, spyOn, test } from 'bun:test'
1
+ import { afterEach, beforeEach, describe, expect, spyOn, it } from 'bun:test'
2
2
 
3
3
  import { TelegramTdlibClient } from '../client'
4
4
  import { TelegramCredentialManager } from '../credential-manager'
@@ -41,7 +41,7 @@ describe('whoami command', () => {
41
41
  consoleLogSpy?.mockRestore()
42
42
  })
43
43
 
44
- test('outputs account info with user when authenticated', async () => {
44
+ it('outputs account info with user when authenticated', async () => {
45
45
  await whoamiAction({})
46
46
 
47
47
  expect(consoleLogSpy).toHaveBeenCalledTimes(1)
@@ -54,7 +54,7 @@ describe('whoami command', () => {
54
54
  expect(output.user.username).toBe('testuser')
55
55
  })
56
56
 
57
- test('omits user field when not present', async () => {
57
+ it('omits user field when not present', async () => {
58
58
  getAuthStatusSpy.mockResolvedValue({
59
59
  account_id: 'plus-12025551234',
60
60
  phone_number: '+12025551234',
@@ -1,4 +1,4 @@
1
- import { afterAll, describe, expect, test } from 'bun:test'
1
+ import { afterAll, describe, expect, it } from 'bun:test'
2
2
  import { existsSync, rmSync } from 'node:fs'
3
3
  import { join } from 'node:path'
4
4
 
@@ -22,7 +22,7 @@ afterAll(() => {
22
22
  })
23
23
 
24
24
  describe('TelegramCredentialManager', () => {
25
- test('stores and retrieves accounts', async () => {
25
+ it('stores and retrieves accounts', async () => {
26
26
  const manager = setup()
27
27
 
28
28
  await manager.setAccount({
@@ -39,7 +39,7 @@ describe('TelegramCredentialManager', () => {
39
39
  expect(account?.phone_number).toBe('+821012345678')
40
40
  })
41
41
 
42
- test('switches current account', async () => {
42
+ it('switches current account', async () => {
43
43
  const manager = setup()
44
44
 
45
45
  await manager.setAccount({
@@ -64,7 +64,7 @@ describe('TelegramCredentialManager', () => {
64
64
  expect(current?.account_id).toBe('second')
65
65
  })
66
66
 
67
- test('creates account directories', async () => {
67
+ it('creates account directories', async () => {
68
68
  const manager = setup()
69
69
  const paths = await manager.ensureAccountPaths('+82 10 1234 5678')
70
70
 
@@ -74,7 +74,7 @@ describe('TelegramCredentialManager', () => {
74
74
  expect(paths.account_dir.endsWith('plus-82-10-1234-5678')).toBe(true)
75
75
  })
76
76
 
77
- test('saves and loads provisioning state', async () => {
77
+ it('saves and loads provisioning state', async () => {
78
78
  const manager = setup()
79
79
  const state = {
80
80
  phone: '+14155551234',
@@ -90,7 +90,7 @@ describe('TelegramCredentialManager', () => {
90
90
  expect(loaded!.random_hash).toBe('abc123')
91
91
  })
92
92
 
93
- test('returns null for expired provisioning state', async () => {
93
+ it('returns null for expired provisioning state', async () => {
94
94
  const manager = setup()
95
95
  const expiredDate = new Date(Date.now() - 11 * 60 * 1000).toISOString()
96
96
 
@@ -104,7 +104,7 @@ describe('TelegramCredentialManager', () => {
104
104
  expect(loaded).toBeNull()
105
105
  })
106
106
 
107
- test('clears provisioning state', async () => {
107
+ it('clears provisioning state', async () => {
108
108
  const manager = setup()
109
109
 
110
110
  await manager.saveProvisioningState({
@@ -118,13 +118,13 @@ describe('TelegramCredentialManager', () => {
118
118
  expect(loaded).toBeNull()
119
119
  })
120
120
 
121
- test('returns null when no provisioning state exists', async () => {
121
+ it('returns null when no provisioning state exists', async () => {
122
122
  const manager = setup()
123
123
  const loaded = await manager.loadProvisioningState()
124
124
  expect(loaded).toBeNull()
125
125
  })
126
126
 
127
- test('returns null for corrupted created_at in provisioning state', async () => {
127
+ it('returns null for corrupted created_at in provisioning state', async () => {
128
128
  const manager = setup()
129
129
 
130
130
  await manager.saveProvisioningState({
@@ -137,7 +137,7 @@ describe('TelegramCredentialManager', () => {
137
137
  expect(loaded).toBeNull()
138
138
  })
139
139
 
140
- test('clearCredentials also clears provisioning state', async () => {
140
+ it('clearCredentials also clears provisioning state', async () => {
141
141
  const manager = setup()
142
142
 
143
143
  await manager.saveProvisioningState({
@@ -1,14 +1,14 @@
1
- import { describe, expect, test } from 'bun:test'
1
+ import { describe, expect, it } from 'bun:test'
2
2
 
3
3
  import { findFuzzyChats, normalizeChatSearchText } from './chat-utils'
4
4
  import { createAccountId, simplifyChat, simplifyMessage, summarizeAuthorizationState } from './types'
5
5
 
6
6
  describe('telegram type helpers', () => {
7
- test('createAccountId normalizes phone numbers', () => {
7
+ it('createAccountId normalizes phone numbers', () => {
8
8
  expect(createAccountId('+82 10 1234 5678')).toBe('plus-82-10-1234-5678')
9
9
  })
10
10
 
11
- test('summarizeAuthorizationState returns next action for wait code', () => {
11
+ it('summarizeAuthorizationState returns next action for wait code', () => {
12
12
  const summary = summarizeAuthorizationState({
13
13
  '@type': 'authorizationStateWaitCode',
14
14
  code_info: {
@@ -23,7 +23,7 @@ describe('telegram type helpers', () => {
23
23
  expect(summary.code_info?.type).toBe('authenticationCodeTypeSms')
24
24
  })
25
25
 
26
- test('simplifyMessage extracts message text', () => {
26
+ it('simplifyMessage extracts message text', () => {
27
27
  const message = simplifyMessage({
28
28
  id: 42,
29
29
  chat_id: 1001,
@@ -43,7 +43,7 @@ describe('telegram type helpers', () => {
43
43
  expect(message.sender.type).toBe('user')
44
44
  })
45
45
 
46
- test('simplifyChat normalizes chat type', () => {
46
+ it('simplifyChat normalizes chat type', () => {
47
47
  const chat = simplifyChat({
48
48
  id: 1001,
49
49
  title: 'General',
@@ -66,7 +66,7 @@ describe('telegram type helpers', () => {
66
66
  expect(chat.last_message?.text).toBe('latest')
67
67
  })
68
68
 
69
- test('normalize and fuzzy search logic can match titles despite spacing differences', () => {
69
+ it('normalizes and fuzzy-matches titles despite spacing differences', () => {
70
70
  expect(normalizeChatSearchText('Project Room')).toBe('projectroom')
71
71
  expect(
72
72
  findFuzzyChats([{ id: 1, title: 'ProjectRoom', type: 'private', unread_count: 0 }], 'Project Room', 10),
@@ -1,4 +1,4 @@
1
- import { afterEach, beforeEach, describe, expect, test } from 'bun:test'
1
+ import { afterEach, beforeEach, describe, expect, it } from 'bun:test'
2
2
 
3
3
  import { getWebexAppCredentials } from './app-config'
4
4
 
@@ -30,7 +30,7 @@ describe('webex app config', () => {
30
30
  }
31
31
  })
32
32
 
33
- test('returns env credentials when primary env vars are set', () => {
33
+ it('returns env credentials when primary env vars are set', () => {
34
34
  process.env.AGENT_WEBEX_CLIENT_ID = 'my-client-id'
35
35
  process.env.AGENT_WEBEX_CLIENT_SECRET = 'my-client-secret'
36
36
 
@@ -41,7 +41,7 @@ describe('webex app config', () => {
41
41
  })
42
42
  })
43
43
 
44
- test('returns env credentials when legacy env vars are set', () => {
44
+ it('returns env credentials when legacy env vars are set', () => {
45
45
  process.env.AGENT_MESSENGER_WEBEX_CLIENT_ID = 'legacy-client-id'
46
46
  process.env.AGENT_MESSENGER_WEBEX_CLIENT_SECRET = 'legacy-client-secret'
47
47
 
@@ -52,28 +52,28 @@ describe('webex app config', () => {
52
52
  })
53
53
  })
54
54
 
55
- test('returns builtin credentials when nothing is configured', () => {
55
+ it('returns builtin credentials when nothing is configured', () => {
56
56
  const result = getWebexAppCredentials()
57
57
  expect(result.source).toBe('builtin')
58
58
  expect(result.clientId).toBeTruthy()
59
59
  expect(result.clientSecret).toBeTruthy()
60
60
  })
61
61
 
62
- test('returns builtin when only clientId is set', () => {
62
+ it('returns builtin when only clientId is set', () => {
63
63
  process.env.AGENT_WEBEX_CLIENT_ID = 'my-client-id'
64
64
 
65
65
  const result = getWebexAppCredentials()
66
66
  expect(result.source).toBe('builtin')
67
67
  })
68
68
 
69
- test('returns builtin when only clientSecret is set', () => {
69
+ it('returns builtin when only clientSecret is set', () => {
70
70
  process.env.AGENT_WEBEX_CLIENT_SECRET = 'my-client-secret'
71
71
 
72
72
  const result = getWebexAppCredentials()
73
73
  expect(result.source).toBe('builtin')
74
74
  })
75
75
 
76
- test('trims whitespace from clientId and clientSecret', () => {
76
+ it('trims whitespace from clientId and clientSecret', () => {
77
77
  process.env.AGENT_WEBEX_CLIENT_ID = ' my-client-id '
78
78
  process.env.AGENT_WEBEX_CLIENT_SECRET = ' my-client-secret '
79
79
 
@@ -84,7 +84,7 @@ describe('webex app config', () => {
84
84
  })
85
85
  })
86
86
 
87
- test('primary env takes precedence over legacy env', () => {
87
+ it('primary env takes precedence over legacy env', () => {
88
88
  process.env.AGENT_WEBEX_CLIENT_ID = 'primary-id'
89
89
  process.env.AGENT_WEBEX_CLIENT_SECRET = 'primary-secret'
90
90
  process.env.AGENT_MESSENGER_WEBEX_CLIENT_ID = 'legacy-id'
@@ -1,11 +1,11 @@
1
- import { describe, expect, test } from 'bun:test'
1
+ import { describe, expect, it } from 'bun:test'
2
2
 
3
3
  import { spawn } from 'bun'
4
4
 
5
5
  import pkg from '../../../package.json' with { type: 'json' }
6
6
 
7
7
  describe('Webex CLI program structure', () => {
8
- test('--help shows all commands', async () => {
8
+ it('--help shows all commands', async () => {
9
9
  const proc = spawn(['bun', 'run', './src/platforms/webex/cli.ts', '--help'], {
10
10
  cwd: process.cwd(),
11
11
  stdio: ['pipe', 'pipe', 'pipe'],
@@ -20,7 +20,7 @@ describe('Webex CLI program structure', () => {
20
20
  expect(output).toContain('space')
21
21
  })
22
22
 
23
- test('--version shows package version', async () => {
23
+ it('--version shows package version', async () => {
24
24
  const proc = spawn(['bun', 'run', './src/platforms/webex/cli.ts', '--version'], {
25
25
  cwd: process.cwd(),
26
26
  stdio: ['pipe', 'pipe', 'pipe'],
@@ -30,7 +30,7 @@ describe('Webex CLI program structure', () => {
30
30
  expect(output.trim()).toBe(pkg.version)
31
31
  })
32
32
 
33
- test('auth login --help shows Device Grant options', async () => {
33
+ it('auth login --help shows Device Grant options', async () => {
34
34
  const proc = spawn(['bun', 'run', './src/platforms/webex/cli.ts', 'auth', 'login', '--help'], {
35
35
  cwd: process.cwd(),
36
36
  stdio: ['pipe', 'pipe', 'pipe'],
@@ -44,7 +44,7 @@ describe('Webex CLI program structure', () => {
44
44
  expect(output).toContain('--pretty')
45
45
  })
46
46
 
47
- test('message dm --help shows email argument', async () => {
47
+ it('message dm --help shows email argument', async () => {
48
48
  const proc = spawn(['bun', 'run', './src/platforms/webex/cli.ts', 'message', 'dm', '--help'], {
49
49
  cwd: process.cwd(),
50
50
  stdio: ['pipe', 'pipe', 'pipe'],