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, mock, spyOn, test } from 'bun:test'
1
+ import { afterEach, beforeEach, describe, expect, mock, spyOn, it } from 'bun:test'
2
2
 
3
3
  const originalConsoleLog = console.log
4
4
 
@@ -67,7 +67,7 @@ describe('auth commands', () => {
67
67
  })
68
68
 
69
69
  describe('list', () => {
70
- test('outputs empty array when no accounts', async () => {
70
+ it('outputs empty array when no accounts', async () => {
71
71
  mockListAccounts.mockImplementation(() => Promise.resolve([]))
72
72
 
73
73
  await authCommand.parseAsync(['list'], { from: 'user' })
@@ -76,7 +76,7 @@ describe('auth commands', () => {
76
76
  expect(output).toEqual([])
77
77
  })
78
78
 
79
- test('outputs accounts list with is_current flag', async () => {
79
+ it('outputs accounts list with is_current flag', async () => {
80
80
  mockListAccounts.mockImplementation(() =>
81
81
  Promise.resolve([
82
82
  {
@@ -116,7 +116,7 @@ describe('auth commands', () => {
116
116
  })
117
117
 
118
118
  describe('use', () => {
119
- test('switches to specified account', async () => {
119
+ it('switches to specified account', async () => {
120
120
  mockGetAccount.mockImplementation(() =>
121
121
  Promise.resolve({
122
122
  account_id: 'user-1',
@@ -138,7 +138,7 @@ describe('auth commands', () => {
138
138
  expect(output.account_id).toBe('user-1')
139
139
  })
140
140
 
141
- test('outputs error and exits when account not found', async () => {
141
+ it('outputs error and exits when account not found', async () => {
142
142
  mockGetAccount.mockImplementation(() => Promise.resolve(null))
143
143
 
144
144
  await expect(authCommand.parseAsync(['use', 'nonexistent'], { from: 'user' })).rejects.toThrow('process.exit')
@@ -150,7 +150,7 @@ describe('auth commands', () => {
150
150
  })
151
151
 
152
152
  describe('status', () => {
153
- test('outputs error and exits when no account configured', async () => {
153
+ it('outputs error and exits when no account configured', async () => {
154
154
  mockGetAccount.mockImplementation(() => Promise.resolve(null))
155
155
 
156
156
  await expect(authCommand.parseAsync(['status'], { from: 'user' })).rejects.toThrow('process.exit')
@@ -160,7 +160,7 @@ describe('auth commands', () => {
160
160
  expect(output.error).toBeDefined()
161
161
  })
162
162
 
163
- test('outputs account info when account exists', async () => {
163
+ it('outputs account info when account exists', async () => {
164
164
  mockGetAccount.mockImplementation(() =>
165
165
  Promise.resolve({
166
166
  account_id: 'user-1',
@@ -184,7 +184,7 @@ describe('auth commands', () => {
184
184
  expect(output.has_device_uuid).toBe(true)
185
185
  })
186
186
 
187
- test('outputs status for specific --account', async () => {
187
+ it('outputs status for specific --account', async () => {
188
188
  mockGetAccount.mockImplementation((id?: string) => {
189
189
  if (id === 'user-2') {
190
190
  return Promise.resolve({
@@ -210,7 +210,7 @@ describe('auth commands', () => {
210
210
  })
211
211
 
212
212
  describe('logout', () => {
213
- test('removes current account and outputs success', async () => {
213
+ it('removes current account and outputs success', async () => {
214
214
  mockLoad.mockImplementation(() =>
215
215
  Promise.resolve({
216
216
  current_account: 'user-1',
@@ -237,7 +237,7 @@ describe('auth commands', () => {
237
237
  expect(output.removed).toBe('user-1')
238
238
  })
239
239
 
240
- test('removes specific account with --account flag', async () => {
240
+ it('removes specific account with --account flag', async () => {
241
241
  mockLoad.mockImplementation(() =>
242
242
  Promise.resolve({
243
243
  current_account: 'user-1',
@@ -274,7 +274,7 @@ describe('auth commands', () => {
274
274
  expect(output.removed).toBe('user-2')
275
275
  })
276
276
 
277
- test('outputs error and exits when no account configured', async () => {
277
+ it('outputs error and exits when no account configured', async () => {
278
278
  mockLoad.mockImplementation(() => Promise.resolve({ current_account: null, accounts: {} }))
279
279
 
280
280
  await expect(authCommand.parseAsync(['logout'], { from: 'user' })).rejects.toThrow('process.exit')
@@ -1,4 +1,4 @@
1
- import { afterEach, beforeEach, describe, expect, mock, test } from 'bun:test'
1
+ import { afterEach, beforeEach, describe, expect, mock, it } from 'bun:test'
2
2
 
3
3
  const originalConsoleLog = console.log
4
4
 
@@ -49,7 +49,7 @@ describe('chat commands', () => {
49
49
  })
50
50
 
51
51
  describe('list', () => {
52
- test('lists chat rooms', async () => {
52
+ it('lists chat rooms', async () => {
53
53
  await chatCommand.parseAsync(['list'], { from: 'user' })
54
54
 
55
55
  expect(mockGetChats).toHaveBeenCalled()
@@ -59,21 +59,21 @@ describe('chat commands', () => {
59
59
  expect(output[0].name).toBe('General')
60
60
  })
61
61
 
62
- test('passes --search option to getChats', async () => {
62
+ it('passes --search option to getChats', async () => {
63
63
  await chatCommand.parseAsync(['list', '--search', 'General'], { from: 'user' })
64
64
 
65
65
  const call = mockGetChats.mock.calls[0][0] as { all?: boolean; search?: string }
66
66
  expect(call.search).toBe('General')
67
67
  })
68
68
 
69
- test('passes --all flag to getChats', async () => {
69
+ it('passes --all flag to getChats', async () => {
70
70
  await chatCommand.parseAsync(['list', '--all'], { from: 'user' })
71
71
 
72
72
  const call = mockGetChats.mock.calls[0][0] as { all?: boolean; search?: string }
73
73
  expect(call.all).toBe(true)
74
74
  })
75
75
 
76
- test('passes account option to withKakaoClient', async () => {
76
+ it('passes account option to withKakaoClient', async () => {
77
77
  await chatCommand.parseAsync(['list', '--account', 'my-account'], { from: 'user' })
78
78
 
79
79
  expect(mockWithKakaoClient).toHaveBeenCalledWith(
@@ -82,7 +82,7 @@ describe('chat commands', () => {
82
82
  )
83
83
  })
84
84
 
85
- test('outputs empty array when no chats', async () => {
85
+ it('outputs empty array when no chats', async () => {
86
86
  mockGetChats.mockImplementation(() => Promise.resolve([]))
87
87
 
88
88
  await chatCommand.parseAsync(['list'], { from: 'user' })
@@ -1,4 +1,4 @@
1
- import { afterEach, beforeEach, describe, expect, mock, test } from 'bun:test'
1
+ import { afterEach, beforeEach, describe, expect, mock, it } from 'bun:test'
2
2
 
3
3
  const originalConsoleLog = console.log
4
4
 
@@ -48,7 +48,7 @@ describe('message commands', () => {
48
48
  })
49
49
 
50
50
  describe('list', () => {
51
- test('fetches messages for a chat room with default count', async () => {
51
+ it('fetches messages for a chat room with default count', async () => {
52
52
  await messageCommand.parseAsync(['list', 'chat-123', '--count', '20'], { from: 'user' })
53
53
 
54
54
  expect(mockGetMessages).toHaveBeenCalledWith('chat-123', { count: 20, from: undefined })
@@ -58,19 +58,19 @@ describe('message commands', () => {
58
58
  expect(output[0].message).toBe('Hello')
59
59
  })
60
60
 
61
- test('respects --count option', async () => {
61
+ it('respects --count option', async () => {
62
62
  await messageCommand.parseAsync(['list', 'chat-123', '--count', '5'], { from: 'user' })
63
63
 
64
64
  expect(mockGetMessages).toHaveBeenCalledWith('chat-123', { count: 5, from: undefined })
65
65
  })
66
66
 
67
- test('respects --from option', async () => {
67
+ it('respects --from option', async () => {
68
68
  await messageCommand.parseAsync(['list', 'chat-123', '--count', '20', '--from', '999'], { from: 'user' })
69
69
 
70
70
  expect(mockGetMessages).toHaveBeenCalledWith('chat-123', { count: 20, from: '999' })
71
71
  })
72
72
 
73
- test('passes account option to withKakaoClient', async () => {
73
+ it('passes account option to withKakaoClient', async () => {
74
74
  await messageCommand.parseAsync(['list', 'chat-123', '--count', '20', '--account', 'my-account'], {
75
75
  from: 'user',
76
76
  })
@@ -83,7 +83,7 @@ describe('message commands', () => {
83
83
  })
84
84
 
85
85
  describe('send', () => {
86
- test('sends a message to a chat room', async () => {
86
+ it('sends a message to a chat room', async () => {
87
87
  await messageCommand.parseAsync(['send', 'chat-123', 'Hello world'], { from: 'user' })
88
88
 
89
89
  expect(mockSendMessage).toHaveBeenCalledWith('chat-123', 'Hello world')
@@ -92,7 +92,7 @@ describe('message commands', () => {
92
92
  expect(output.message).toBe('Hi there')
93
93
  })
94
94
 
95
- test('passes account option to withKakaoClient', async () => {
95
+ it('passes account option to withKakaoClient', async () => {
96
96
  await messageCommand.parseAsync(['send', 'chat-123', 'Hi', '--account', 'my-account'], { from: 'user' })
97
97
 
98
98
  expect(mockWithKakaoClient).toHaveBeenCalledWith(
@@ -1,4 +1,4 @@
1
- import { afterEach, beforeEach, describe, expect, mock, test } from 'bun:test'
1
+ import { afterEach, beforeEach, describe, expect, mock, it } from 'bun:test'
2
2
 
3
3
  const originalConsoleLog = console.log
4
4
 
@@ -68,7 +68,7 @@ describe('whoami command', () => {
68
68
  console.log = originalConsoleLog
69
69
  })
70
70
 
71
- test('outputs profile information', async () => {
71
+ it('outputs profile information', async () => {
72
72
  await whoamiCommand.parseAsync([], { from: 'user' })
73
73
 
74
74
  expect(mockGetProfile).toHaveBeenCalled()
@@ -78,7 +78,7 @@ describe('whoami command', () => {
78
78
  expect(output.profile_image_url).toBe('https://example.com/avatar.jpg')
79
79
  })
80
80
 
81
- test('outputs enriched profile fields', async () => {
81
+ it('outputs enriched profile fields', async () => {
82
82
  await whoamiCommand.parseAsync([], { from: 'user' })
83
83
 
84
84
  const output = JSON.parse(consoleLogSpy.mock.calls[0][0])
@@ -92,7 +92,7 @@ describe('whoami command', () => {
92
92
  expect(output.email_verified).toBe(true)
93
93
  })
94
94
 
95
- test('passes account option to withKakaoClient', async () => {
95
+ it('passes account option to withKakaoClient', async () => {
96
96
  await whoamiCommand.parseAsync(['--account', 'my-account'], { from: 'user' })
97
97
 
98
98
  expect(mockWithKakaoClient).toHaveBeenCalledWith(
@@ -101,7 +101,7 @@ describe('whoami command', () => {
101
101
  )
102
102
  })
103
103
 
104
- test('outputs profile with pretty flag', async () => {
104
+ it('outputs profile with pretty flag', async () => {
105
105
  await whoamiCommand.parseAsync(['--pretty'], { from: 'user' })
106
106
 
107
107
  expect(mockGetProfile).toHaveBeenCalled()
@@ -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 { rmSync } from 'node:fs'
3
3
  import { join } from 'node:path'
4
4
 
@@ -35,7 +35,7 @@ afterAll(() => {
35
35
 
36
36
  describe('KakaoCredentialManager', () => {
37
37
  describe('load', () => {
38
- test('returns default config when file does not exist', async () => {
38
+ it('returns default config when file does not exist', async () => {
39
39
  const manager = setup()
40
40
  const config = await manager.load()
41
41
 
@@ -44,7 +44,7 @@ describe('KakaoCredentialManager', () => {
44
44
  })
45
45
 
46
46
  describe('save/load round-trip', () => {
47
- test('creates file and can be re-read via load', async () => {
47
+ it('creates file and can be re-read via load', async () => {
48
48
  const manager = setup()
49
49
  const account = makeAccount()
50
50
  const config = {
@@ -62,21 +62,21 @@ describe('KakaoCredentialManager', () => {
62
62
  })
63
63
 
64
64
  describe('getAccount', () => {
65
- test('returns null when no accounts exist', async () => {
65
+ it('returns null when no accounts exist', async () => {
66
66
  const manager = setup()
67
67
  const account = await manager.getAccount()
68
68
 
69
69
  expect(account).toBeNull()
70
70
  })
71
71
 
72
- test('returns null for nonexistent account ID', async () => {
72
+ it('returns null for nonexistent account ID', async () => {
73
73
  const manager = setup()
74
74
  const account = await manager.getAccount('nonexistent')
75
75
 
76
76
  expect(account).toBeNull()
77
77
  })
78
78
 
79
- test('returns account by explicit ID', async () => {
79
+ it('returns account by explicit ID', async () => {
80
80
  const manager = setup()
81
81
  const account = makeAccount()
82
82
 
@@ -86,7 +86,7 @@ describe('KakaoCredentialManager', () => {
86
86
  expect(retrieved).toEqual(account)
87
87
  })
88
88
 
89
- test('returns current account when no ID given', async () => {
89
+ it('returns current account when no ID given', async () => {
90
90
  const manager = setup()
91
91
  const account = makeAccount()
92
92
 
@@ -98,7 +98,7 @@ describe('KakaoCredentialManager', () => {
98
98
  })
99
99
 
100
100
  describe('setAccount', () => {
101
- test('stores account and auto-sets current_account if null', async () => {
101
+ it('stores account and auto-sets current_account if null', async () => {
102
102
  const manager = setup()
103
103
  const account = makeAccount()
104
104
 
@@ -109,7 +109,7 @@ describe('KakaoCredentialManager', () => {
109
109
  expect(config.accounts['test-account']).toEqual(account)
110
110
  })
111
111
 
112
- test('does NOT override existing current_account', async () => {
112
+ it('does NOT override existing current_account', async () => {
113
113
  const manager = setup()
114
114
  const first = makeAccount({ account_id: 'first-account' })
115
115
  const second = makeAccount({ account_id: 'second-account' })
@@ -123,14 +123,14 @@ describe('KakaoCredentialManager', () => {
123
123
  })
124
124
 
125
125
  describe('listAccounts', () => {
126
- test('returns empty array for empty config', async () => {
126
+ it('returns empty array for empty config', async () => {
127
127
  const manager = setup()
128
128
  const accounts = await manager.listAccounts()
129
129
 
130
130
  expect(accounts).toEqual([])
131
131
  })
132
132
 
133
- test('returns all accounts with correct is_current flag', async () => {
133
+ it('returns all accounts with correct is_current flag', async () => {
134
134
  const manager = setup()
135
135
  const first = makeAccount({ account_id: 'first-account' })
136
136
  const second = makeAccount({ account_id: 'second-account' })
@@ -149,7 +149,7 @@ describe('KakaoCredentialManager', () => {
149
149
  })
150
150
 
151
151
  describe('setCurrentAccount', () => {
152
- test('switches active account', async () => {
152
+ it('switches active account', async () => {
153
153
  const manager = setup()
154
154
  const first = makeAccount({ account_id: 'first-account' })
155
155
  const second = makeAccount({ account_id: 'second-account' })
@@ -164,7 +164,7 @@ describe('KakaoCredentialManager', () => {
164
164
  })
165
165
 
166
166
  describe('removeAccount', () => {
167
- test('removes and rotates current to next available', async () => {
167
+ it('removes and rotates current to next available', async () => {
168
168
  const manager = setup()
169
169
  const first = makeAccount({ account_id: 'first-account' })
170
170
  const second = makeAccount({ account_id: 'second-account' })
@@ -181,7 +181,7 @@ describe('KakaoCredentialManager', () => {
181
181
  expect(current?.account_id).toBe('second-account')
182
182
  })
183
183
 
184
- test('handles removing non-current account', async () => {
184
+ it('handles removing non-current account', async () => {
185
185
  const manager = setup()
186
186
  const first = makeAccount({ account_id: 'first-account' })
187
187
  const second = makeAccount({ account_id: 'second-account' })
@@ -201,7 +201,7 @@ describe('KakaoCredentialManager', () => {
201
201
  })
202
202
 
203
203
  describe('savePendingLogin/loadPendingLogin/clearPendingLogin', () => {
204
- test('full lifecycle: save, load, clear', async () => {
204
+ it('handles full save, load, and clear lifecycle', async () => {
205
205
  const manager = setup()
206
206
  const state = {
207
207
  device_uuid: 'uuid-abc',
@@ -1,4 +1,4 @@
1
- import { expect, test } from 'bun:test'
1
+ import { expect, it } from 'bun:test'
2
2
 
3
3
  import {
4
4
  CredentialManager,
@@ -17,58 +17,58 @@ import {
17
17
  KakaoTalkPushReadEventSchema,
18
18
  } from '@/platforms/kakaotalk/index'
19
19
 
20
- test('KakaoTalkClient is exported from barrel', () => {
20
+ it('KakaoTalkClient is exported from barrel', () => {
21
21
  expect(typeof KakaoTalkClient).toBe('function')
22
22
  })
23
23
 
24
- test('KakaoTalkError is exported from barrel', () => {
24
+ it('KakaoTalkError is exported from barrel', () => {
25
25
  expect(typeof KakaoTalkError).toBe('function')
26
26
  })
27
27
 
28
- test('CredentialManager is exported from barrel', () => {
28
+ it('CredentialManager is exported from barrel', () => {
29
29
  expect(typeof CredentialManager).toBe('function')
30
30
  })
31
31
 
32
- test('KakaoCredentialManager is exported from barrel', () => {
32
+ it('KakaoCredentialManager is exported from barrel', () => {
33
33
  expect(typeof KakaoCredentialManager).toBe('function')
34
34
  })
35
35
 
36
- test('KakaoTalkListener is exported from barrel', () => {
36
+ it('KakaoTalkListener is exported from barrel', () => {
37
37
  expect(typeof KakaoTalkListener).toBe('function')
38
38
  })
39
39
 
40
- test('KakaoChatSchema is exported from barrel', () => {
40
+ it('KakaoChatSchema is exported from barrel', () => {
41
41
  expect(typeof KakaoChatSchema.parse).toBe('function')
42
42
  })
43
43
 
44
- test('KakaoMessageSchema is exported from barrel', () => {
44
+ it('KakaoMessageSchema is exported from barrel', () => {
45
45
  expect(typeof KakaoMessageSchema.parse).toBe('function')
46
46
  })
47
47
 
48
- test('KakaoSendResultSchema is exported from barrel', () => {
48
+ it('KakaoSendResultSchema is exported from barrel', () => {
49
49
  expect(typeof KakaoSendResultSchema.parse).toBe('function')
50
50
  })
51
51
 
52
- test('KakaoAccountCredentialsSchema is exported from barrel', () => {
52
+ it('KakaoAccountCredentialsSchema is exported from barrel', () => {
53
53
  expect(typeof KakaoAccountCredentialsSchema.parse).toBe('function')
54
54
  })
55
55
 
56
- test('KakaoConfigSchema is exported from barrel', () => {
56
+ it('KakaoConfigSchema is exported from barrel', () => {
57
57
  expect(typeof KakaoConfigSchema.parse).toBe('function')
58
58
  })
59
59
 
60
- test('KakaoTalkPushMessageEventSchema is exported from barrel', () => {
60
+ it('KakaoTalkPushMessageEventSchema is exported from barrel', () => {
61
61
  expect(typeof KakaoTalkPushMessageEventSchema.parse).toBe('function')
62
62
  })
63
63
 
64
- test('KakaoTalkPushMemberEventSchema is exported from barrel', () => {
64
+ it('KakaoTalkPushMemberEventSchema is exported from barrel', () => {
65
65
  expect(typeof KakaoTalkPushMemberEventSchema.parse).toBe('function')
66
66
  })
67
67
 
68
- test('KakaoTalkPushReadEventSchema is exported from barrel', () => {
68
+ it('KakaoTalkPushReadEventSchema is exported from barrel', () => {
69
69
  expect(typeof KakaoTalkPushReadEventSchema.parse).toBe('function')
70
70
  })
71
71
 
72
- test('KakaoProfileSchema is exported from barrel', () => {
72
+ it('KakaoProfileSchema is exported from barrel', () => {
73
73
  expect(typeof KakaoProfileSchema.parse).toBe('function')
74
74
  })
@@ -1,4 +1,4 @@
1
- import { afterEach, describe, expect, mock, test } from 'bun:test'
1
+ import { afterEach, describe, expect, mock, it } from 'bun:test'
2
2
 
3
3
  import { KakaoTalkListener } from '@/platforms/kakaotalk/listener'
4
4
  import type { LocoPacket } from '@/platforms/kakaotalk/protocol/types'
@@ -67,7 +67,7 @@ describe('KakaoTalkListener', () => {
67
67
  })
68
68
 
69
69
  describe('start', () => {
70
- test('calls login on LocoSession', async () => {
70
+ it('calls login on LocoSession', async () => {
71
71
  const client = createMockClient()
72
72
  listener = new KakaoTalkListener(client)
73
73
 
@@ -77,7 +77,7 @@ describe('KakaoTalkListener', () => {
77
77
  expect(mockLogin).toHaveBeenCalledWith('token', 'user1', 'device1', undefined, 'tablet')
78
78
  })
79
79
 
80
- test('is idempotent', async () => {
80
+ it('is idempotent', async () => {
81
81
  const client = createMockClient()
82
82
  listener = new KakaoTalkListener(client)
83
83
 
@@ -89,7 +89,7 @@ describe('KakaoTalkListener', () => {
89
89
  })
90
90
 
91
91
  describe('connected event', () => {
92
- test('emits connected with userId after successful login', async () => {
92
+ it('emits connected with userId after successful login', async () => {
93
93
  const client = createMockClient()
94
94
  listener = new KakaoTalkListener(client)
95
95
 
@@ -104,7 +104,7 @@ describe('KakaoTalkListener', () => {
104
104
  })
105
105
 
106
106
  describe('message events', () => {
107
- test('emits message on MSG push with parsed fields', async () => {
107
+ it('emits message on MSG push with parsed fields', async () => {
108
108
  const client = createMockClient()
109
109
  listener = new KakaoTalkListener(client)
110
110
 
@@ -135,7 +135,7 @@ describe('KakaoTalkListener', () => {
135
135
  })
136
136
 
137
137
  describe('member events', () => {
138
- test('emits member_joined on NEWMEM push', async () => {
138
+ it('emits member_joined on NEWMEM push', async () => {
139
139
  const client = createMockClient()
140
140
  listener = new KakaoTalkListener(client)
141
141
 
@@ -154,7 +154,7 @@ describe('KakaoTalkListener', () => {
154
154
  expect(joined[0].member.user_id).toBe(42)
155
155
  })
156
156
 
157
- test('emits member_left on DELMEM push', async () => {
157
+ it('emits member_left on DELMEM push', async () => {
158
158
  const client = createMockClient()
159
159
  listener = new KakaoTalkListener(client)
160
160
 
@@ -175,7 +175,7 @@ describe('KakaoTalkListener', () => {
175
175
  })
176
176
 
177
177
  describe('read events', () => {
178
- test('emits read on DECUNREAD push with watermark', async () => {
178
+ it('emits read on DECUNREAD push with watermark', async () => {
179
179
  const client = createMockClient()
180
180
  listener = new KakaoTalkListener(client)
181
181
 
@@ -198,7 +198,7 @@ describe('KakaoTalkListener', () => {
198
198
  })
199
199
 
200
200
  describe('kakaotalk_event catch-all', () => {
201
- test('emits kakaotalk_event for every push event', async () => {
201
+ it('emits kakaotalk_event for every push event', async () => {
202
202
  const client = createMockClient()
203
203
  listener = new KakaoTalkListener(client)
204
204
 
@@ -224,7 +224,7 @@ describe('KakaoTalkListener', () => {
224
224
  })
225
225
 
226
226
  describe('stop', () => {
227
- test('closes session and prevents reconnection', async () => {
227
+ it('closes session and prevents reconnection', async () => {
228
228
  const client = createMockClient()
229
229
  listener = new KakaoTalkListener(client)
230
230
 
@@ -239,7 +239,7 @@ describe('KakaoTalkListener', () => {
239
239
  })
240
240
 
241
241
  describe('reconnection', () => {
242
- test('reconnects on session close when still running', async () => {
242
+ it('reconnects on session close when still running', async () => {
243
243
  const client = createMockClient()
244
244
  listener = new KakaoTalkListener(client)
245
245
 
@@ -255,7 +255,7 @@ describe('KakaoTalkListener', () => {
255
255
  expect(mockLogin.mock.calls.length).toBeGreaterThanOrEqual(2)
256
256
  })
257
257
 
258
- test('emits error and reconnects on login failure', async () => {
258
+ it('emits error and reconnects on login failure', async () => {
259
259
  let callCount = 0
260
260
  mockLogin.mockImplementation(() => {
261
261
  callCount++
@@ -280,7 +280,7 @@ describe('KakaoTalkListener', () => {
280
280
  })
281
281
 
282
282
  describe('CHANGESVR', () => {
283
- test('resets reconnect attempts to 0 on CHANGESVR push', async () => {
283
+ it('resets reconnect attempts to 0 on CHANGESVR push', async () => {
284
284
  const client = createMockClient()
285
285
  listener = new KakaoTalkListener(client)
286
286
 
@@ -294,7 +294,7 @@ describe('KakaoTalkListener', () => {
294
294
  })
295
295
 
296
296
  describe('KICKOUT', () => {
297
- test('emits error and stops without reconnecting', async () => {
297
+ it('emits error and stops without reconnecting', async () => {
298
298
  const client = createMockClient()
299
299
  listener = new KakaoTalkListener(client)
300
300
 
@@ -314,7 +314,7 @@ describe('KakaoTalkListener', () => {
314
314
  })
315
315
 
316
316
  describe('on/off/once', () => {
317
- test('off removes listener', async () => {
317
+ it('off removes listener', async () => {
318
318
  const client = createMockClient()
319
319
  listener = new KakaoTalkListener(client)
320
320
 
@@ -338,7 +338,7 @@ describe('KakaoTalkListener', () => {
338
338
  expect(messages[0].message).toBe('first')
339
339
  })
340
340
 
341
- test('once fires only once', async () => {
341
+ it('once fires only once', async () => {
342
342
  const client = createMockClient()
343
343
  listener = new KakaoTalkListener(client)
344
344
 
@@ -361,7 +361,7 @@ describe('KakaoTalkListener', () => {
361
361
  })
362
362
 
363
363
  describe('start after stop', () => {
364
- test('resets reconnect attempts on fresh start', async () => {
364
+ it('resets reconnect attempts on fresh start', async () => {
365
365
  const client = createMockClient()
366
366
  listener = new KakaoTalkListener(client)
367
367