agent-messenger 2.6.3 → 2.8.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 (515) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.github/workflows/ci.yml +6 -0
  3. package/.oxfmtrc.json +13 -1
  4. package/.oxlintrc.json +10 -1
  5. package/README.md +1 -1
  6. package/dist/package.json +59 -58
  7. package/dist/src/platforms/channeltalk/client.d.ts.map +1 -1
  8. package/dist/src/platforms/channeltalk/client.js +2 -2
  9. package/dist/src/platforms/channeltalk/client.js.map +1 -1
  10. package/dist/src/platforms/channeltalk/commands/auth.d.ts.map +1 -1
  11. package/dist/src/platforms/channeltalk/commands/auth.js.map +1 -1
  12. package/dist/src/platforms/channeltalk/commands/message.d.ts.map +1 -1
  13. package/dist/src/platforms/channeltalk/commands/message.js.map +1 -1
  14. package/dist/src/platforms/channeltalk/commands/snapshot.d.ts.map +1 -1
  15. package/dist/src/platforms/channeltalk/commands/snapshot.js.map +1 -1
  16. package/dist/src/platforms/channeltalk/ensure-auth.d.ts.map +1 -1
  17. package/dist/src/platforms/channeltalk/ensure-auth.js.map +1 -1
  18. package/dist/src/platforms/channeltalk/token-extractor.d.ts +9 -23
  19. package/dist/src/platforms/channeltalk/token-extractor.d.ts.map +1 -1
  20. package/dist/src/platforms/channeltalk/token-extractor.js +109 -341
  21. package/dist/src/platforms/channeltalk/token-extractor.js.map +1 -1
  22. package/dist/src/platforms/channeltalkbot/client.d.ts +1 -1
  23. package/dist/src/platforms/channeltalkbot/client.d.ts.map +1 -1
  24. package/dist/src/platforms/channeltalkbot/client.js +4 -4
  25. package/dist/src/platforms/channeltalkbot/client.js.map +1 -1
  26. package/dist/src/platforms/channeltalkbot/commands/auth.d.ts.map +1 -1
  27. package/dist/src/platforms/channeltalkbot/commands/auth.js +4 -1
  28. package/dist/src/platforms/channeltalkbot/commands/auth.js.map +1 -1
  29. package/dist/src/platforms/channeltalkbot/commands/shared.d.ts.map +1 -1
  30. package/dist/src/platforms/channeltalkbot/commands/shared.js.map +1 -1
  31. package/dist/src/platforms/discord/commands/auth.js.map +1 -1
  32. package/dist/src/platforms/discord/commands/whoami.d.ts.map +1 -1
  33. package/dist/src/platforms/discord/commands/whoami.js.map +1 -1
  34. package/dist/src/platforms/discord/token-extractor.d.ts +2 -10
  35. package/dist/src/platforms/discord/token-extractor.d.ts.map +1 -1
  36. package/dist/src/platforms/discord/token-extractor.js +38 -172
  37. package/dist/src/platforms/discord/token-extractor.js.map +1 -1
  38. package/dist/src/platforms/discordbot/client.d.ts.map +1 -1
  39. package/dist/src/platforms/discordbot/client.js.map +1 -1
  40. package/dist/src/platforms/instagram/cli.d.ts.map +1 -1
  41. package/dist/src/platforms/instagram/cli.js +1 -4
  42. package/dist/src/platforms/instagram/cli.js.map +1 -1
  43. package/dist/src/platforms/instagram/client.d.ts.map +1 -1
  44. package/dist/src/platforms/instagram/client.js +8 -7
  45. package/dist/src/platforms/instagram/client.js.map +1 -1
  46. package/dist/src/platforms/instagram/commands/auth.d.ts.map +1 -1
  47. package/dist/src/platforms/instagram/commands/auth.js.map +1 -1
  48. package/dist/src/platforms/instagram/commands/chat.d.ts.map +1 -1
  49. package/dist/src/platforms/instagram/commands/chat.js.map +1 -1
  50. package/dist/src/platforms/instagram/commands/message.d.ts.map +1 -1
  51. package/dist/src/platforms/instagram/commands/message.js.map +1 -1
  52. package/dist/src/platforms/instagram/commands/shared.d.ts.map +1 -1
  53. package/dist/src/platforms/instagram/commands/shared.js.map +1 -1
  54. package/dist/src/platforms/instagram/credential-manager.d.ts.map +1 -1
  55. package/dist/src/platforms/instagram/credential-manager.js +1 -1
  56. package/dist/src/platforms/instagram/credential-manager.js.map +1 -1
  57. package/dist/src/platforms/instagram/ensure-auth.d.ts.map +1 -1
  58. package/dist/src/platforms/instagram/ensure-auth.js.map +1 -1
  59. package/dist/src/platforms/instagram/token-extractor.d.ts +7 -19
  60. package/dist/src/platforms/instagram/token-extractor.d.ts.map +1 -1
  61. package/dist/src/platforms/instagram/token-extractor.js +44 -270
  62. package/dist/src/platforms/instagram/token-extractor.js.map +1 -1
  63. package/dist/src/platforms/instagram/types.d.ts.map +1 -1
  64. package/dist/src/platforms/instagram/types.js +4 -2
  65. package/dist/src/platforms/instagram/types.js.map +1 -1
  66. package/dist/src/platforms/kakaotalk/auth/kakao-login.d.ts.map +1 -1
  67. package/dist/src/platforms/kakaotalk/auth/kakao-login.js +18 -4
  68. package/dist/src/platforms/kakaotalk/auth/kakao-login.js.map +1 -1
  69. package/dist/src/platforms/kakaotalk/client.d.ts.map +1 -1
  70. package/dist/src/platforms/kakaotalk/client.js +3 -3
  71. package/dist/src/platforms/kakaotalk/client.js.map +1 -1
  72. package/dist/src/platforms/kakaotalk/commands/auth.d.ts.map +1 -1
  73. package/dist/src/platforms/kakaotalk/commands/auth.js +15 -9
  74. package/dist/src/platforms/kakaotalk/commands/auth.js.map +1 -1
  75. package/dist/src/platforms/kakaotalk/commands/shared.d.ts.map +1 -1
  76. package/dist/src/platforms/kakaotalk/commands/shared.js.map +1 -1
  77. package/dist/src/platforms/kakaotalk/protocol/connection.d.ts.map +1 -1
  78. package/dist/src/platforms/kakaotalk/protocol/connection.js.map +1 -1
  79. package/dist/src/platforms/kakaotalk/protocol/crypto.js +1 -1
  80. package/dist/src/platforms/kakaotalk/protocol/crypto.js.map +1 -1
  81. package/dist/src/platforms/kakaotalk/protocol/session.d.ts.map +1 -1
  82. package/dist/src/platforms/kakaotalk/protocol/session.js +1 -3
  83. package/dist/src/platforms/kakaotalk/protocol/session.js.map +1 -1
  84. package/dist/src/platforms/kakaotalk/token-extractor.js +5 -2
  85. package/dist/src/platforms/kakaotalk/token-extractor.js.map +1 -1
  86. package/dist/src/platforms/kakaotalk/types.d.ts.map +1 -1
  87. package/dist/src/platforms/kakaotalk/types.js +4 -2
  88. package/dist/src/platforms/kakaotalk/types.js.map +1 -1
  89. package/dist/src/platforms/line/cli.d.ts.map +1 -1
  90. package/dist/src/platforms/line/cli.js +1 -4
  91. package/dist/src/platforms/line/cli.js.map +1 -1
  92. package/dist/src/platforms/line/client.d.ts.map +1 -1
  93. package/dist/src/platforms/line/client.js +5 -13
  94. package/dist/src/platforms/line/client.js.map +1 -1
  95. package/dist/src/platforms/line/commands/chat.d.ts.map +1 -1
  96. package/dist/src/platforms/line/commands/chat.js.map +1 -1
  97. package/dist/src/platforms/line/commands/message.d.ts.map +1 -1
  98. package/dist/src/platforms/line/commands/message.js.map +1 -1
  99. package/dist/src/platforms/line/listener.js +1 -1
  100. package/dist/src/platforms/line/listener.js.map +1 -1
  101. package/dist/src/platforms/slack/cli.d.ts.map +1 -1
  102. package/dist/src/platforms/slack/cli.js.map +1 -1
  103. package/dist/src/platforms/slack/client-mappers.d.ts +14 -0
  104. package/dist/src/platforms/slack/client-mappers.d.ts.map +1 -0
  105. package/dist/src/platforms/slack/client-mappers.js +245 -0
  106. package/dist/src/platforms/slack/client-mappers.js.map +1 -0
  107. package/dist/src/platforms/slack/client.d.ts +0 -1
  108. package/dist/src/platforms/slack/client.d.ts.map +1 -1
  109. package/dist/src/platforms/slack/client.js +41 -455
  110. package/dist/src/platforms/slack/client.js.map +1 -1
  111. package/dist/src/platforms/slack/commands/channel.d.ts.map +1 -1
  112. package/dist/src/platforms/slack/commands/channel.js.map +1 -1
  113. package/dist/src/platforms/slack/commands/emoji.d.ts.map +1 -1
  114. package/dist/src/platforms/slack/commands/emoji.js +1 -3
  115. package/dist/src/platforms/slack/commands/emoji.js.map +1 -1
  116. package/dist/src/platforms/slack/commands/message.d.ts.map +1 -1
  117. package/dist/src/platforms/slack/commands/message.js.map +1 -1
  118. package/dist/src/platforms/slack/commands/reminder.d.ts.map +1 -1
  119. package/dist/src/platforms/slack/commands/reminder.js.map +1 -1
  120. package/dist/src/platforms/slack/commands/user.d.ts.map +1 -1
  121. package/dist/src/platforms/slack/commands/user.js.map +1 -1
  122. package/dist/src/platforms/slack/commands/usergroup.d.ts.map +1 -1
  123. package/dist/src/platforms/slack/commands/usergroup.js.map +1 -1
  124. package/dist/src/platforms/slack/commands/whoami.d.ts.map +1 -1
  125. package/dist/src/platforms/slack/commands/whoami.js.map +1 -1
  126. package/dist/src/platforms/slack/token-extractor.d.ts +2 -6
  127. package/dist/src/platforms/slack/token-extractor.d.ts.map +1 -1
  128. package/dist/src/platforms/slack/token-extractor.js +35 -229
  129. package/dist/src/platforms/slack/token-extractor.js.map +1 -1
  130. package/dist/src/platforms/slackbot/cli.d.ts.map +1 -1
  131. package/dist/src/platforms/slackbot/cli.js +1 -1
  132. package/dist/src/platforms/slackbot/cli.js.map +1 -1
  133. package/dist/src/platforms/teams/client.d.ts.map +1 -1
  134. package/dist/src/platforms/teams/client.js +1 -1
  135. package/dist/src/platforms/teams/client.js.map +1 -1
  136. package/dist/src/platforms/teams/commands/auth.d.ts.map +1 -1
  137. package/dist/src/platforms/teams/commands/auth.js +4 -1
  138. package/dist/src/platforms/teams/commands/auth.js.map +1 -1
  139. package/dist/src/platforms/teams/commands/whoami.d.ts.map +1 -1
  140. package/dist/src/platforms/teams/commands/whoami.js.map +1 -1
  141. package/dist/src/platforms/teams/token-extractor.d.ts +6 -18
  142. package/dist/src/platforms/teams/token-extractor.d.ts.map +1 -1
  143. package/dist/src/platforms/teams/token-extractor.js +71 -324
  144. package/dist/src/platforms/teams/token-extractor.js.map +1 -1
  145. package/dist/src/platforms/telegram/cli.d.ts.map +1 -1
  146. package/dist/src/platforms/telegram/cli.js +1 -4
  147. package/dist/src/platforms/telegram/cli.js.map +1 -1
  148. package/dist/src/platforms/telegram/client.d.ts.map +1 -1
  149. package/dist/src/platforms/telegram/client.js.map +1 -1
  150. package/dist/src/platforms/telegram/commands/auth.d.ts.map +1 -1
  151. package/dist/src/platforms/telegram/commands/auth.js +1 -1
  152. package/dist/src/platforms/telegram/commands/auth.js.map +1 -1
  153. package/dist/src/platforms/telegram/commands/chat.d.ts.map +1 -1
  154. package/dist/src/platforms/telegram/commands/chat.js.map +1 -1
  155. package/dist/src/platforms/telegram/commands/message.d.ts.map +1 -1
  156. package/dist/src/platforms/telegram/commands/message.js.map +1 -1
  157. package/dist/src/platforms/telegram/commands/whoami.js +1 -1
  158. package/dist/src/platforms/telegram/commands/whoami.js.map +1 -1
  159. package/dist/src/platforms/telegram/credential-manager.d.ts.map +1 -1
  160. package/dist/src/platforms/telegram/credential-manager.js +6 -2
  161. package/dist/src/platforms/telegram/credential-manager.js.map +1 -1
  162. package/dist/src/platforms/telegram/my-telegram-org.js.map +1 -1
  163. package/dist/src/platforms/webex/cli.d.ts.map +1 -1
  164. package/dist/src/platforms/webex/cli.js +1 -4
  165. package/dist/src/platforms/webex/cli.js.map +1 -1
  166. package/dist/src/platforms/webex/client.d.ts.map +1 -1
  167. package/dist/src/platforms/webex/client.js +19 -15
  168. package/dist/src/platforms/webex/client.js.map +1 -1
  169. package/dist/src/platforms/webex/commands/auth.d.ts.map +1 -1
  170. package/dist/src/platforms/webex/commands/auth.js +1 -3
  171. package/dist/src/platforms/webex/commands/auth.js.map +1 -1
  172. package/dist/src/platforms/webex/commands/member.d.ts.map +1 -1
  173. package/dist/src/platforms/webex/commands/member.js +1 -3
  174. package/dist/src/platforms/webex/commands/member.js.map +1 -1
  175. package/dist/src/platforms/webex/commands/message.d.ts.map +1 -1
  176. package/dist/src/platforms/webex/commands/message.js.map +1 -1
  177. package/dist/src/platforms/webex/commands/snapshot.d.ts.map +1 -1
  178. package/dist/src/platforms/webex/commands/snapshot.js.map +1 -1
  179. package/dist/src/platforms/webex/commands/space.d.ts.map +1 -1
  180. package/dist/src/platforms/webex/commands/space.js.map +1 -1
  181. package/dist/src/platforms/webex/commands/whoami.d.ts.map +1 -1
  182. package/dist/src/platforms/webex/commands/whoami.js.map +1 -1
  183. package/dist/src/platforms/webex/credential-manager.d.ts.map +1 -1
  184. package/dist/src/platforms/webex/credential-manager.js.map +1 -1
  185. package/dist/src/platforms/webex/ensure-auth.d.ts.map +1 -1
  186. package/dist/src/platforms/webex/ensure-auth.js +1 -3
  187. package/dist/src/platforms/webex/ensure-auth.js.map +1 -1
  188. package/dist/src/platforms/webex/index.d.ts +1 -1
  189. package/dist/src/platforms/webex/index.d.ts.map +1 -1
  190. package/dist/src/platforms/webex/index.js.map +1 -1
  191. package/dist/src/platforms/webex/markdown-to-html.d.ts +3 -0
  192. package/dist/src/platforms/webex/markdown-to-html.d.ts.map +1 -0
  193. package/dist/src/platforms/webex/markdown-to-html.js +161 -0
  194. package/dist/src/platforms/webex/markdown-to-html.js.map +1 -0
  195. package/dist/src/platforms/webex/token-extractor.d.ts.map +1 -1
  196. package/dist/src/platforms/webex/token-extractor.js +5 -14
  197. package/dist/src/platforms/webex/token-extractor.js.map +1 -1
  198. package/dist/src/platforms/wechatbot/client.d.ts.map +1 -1
  199. package/dist/src/platforms/wechatbot/client.js.map +1 -1
  200. package/dist/src/platforms/wechatbot/commands/message.d.ts.map +1 -1
  201. package/dist/src/platforms/wechatbot/commands/message.js.map +1 -1
  202. package/dist/src/platforms/whatsapp/cli.d.ts.map +1 -1
  203. package/dist/src/platforms/whatsapp/cli.js +1 -4
  204. package/dist/src/platforms/whatsapp/cli.js.map +1 -1
  205. package/dist/src/platforms/whatsapp/commands/chat.d.ts.map +1 -1
  206. package/dist/src/platforms/whatsapp/commands/chat.js.map +1 -1
  207. package/dist/src/platforms/whatsapp/commands/message.d.ts.map +1 -1
  208. package/dist/src/platforms/whatsapp/commands/message.js.map +1 -1
  209. package/dist/src/platforms/whatsapp/commands/shared.d.ts.map +1 -1
  210. package/dist/src/platforms/whatsapp/commands/shared.js.map +1 -1
  211. package/dist/src/platforms/whatsapp/credential-manager.d.ts.map +1 -1
  212. package/dist/src/platforms/whatsapp/credential-manager.js +1 -1
  213. package/dist/src/platforms/whatsapp/credential-manager.js.map +1 -1
  214. package/dist/src/platforms/whatsapp/ensure-auth.d.ts.map +1 -1
  215. package/dist/src/platforms/whatsapp/ensure-auth.js.map +1 -1
  216. package/dist/src/platforms/whatsappbot/client.d.ts.map +1 -1
  217. package/dist/src/platforms/whatsappbot/client.js +2 -2
  218. package/dist/src/platforms/whatsappbot/client.js.map +1 -1
  219. package/dist/src/platforms/whatsappbot/commands/auth.d.ts.map +1 -1
  220. package/dist/src/platforms/whatsappbot/commands/auth.js +4 -1
  221. package/dist/src/platforms/whatsappbot/commands/auth.js.map +1 -1
  222. package/dist/src/platforms/whatsappbot/commands/message.d.ts.map +1 -1
  223. package/dist/src/platforms/whatsappbot/commands/message.js.map +1 -1
  224. package/dist/src/platforms/whatsappbot/commands/shared.d.ts.map +1 -1
  225. package/dist/src/platforms/whatsappbot/commands/shared.js.map +1 -1
  226. package/dist/src/shared/chromium/browsers.d.ts +7 -0
  227. package/dist/src/shared/chromium/browsers.d.ts.map +1 -0
  228. package/dist/src/shared/chromium/browsers.js +89 -0
  229. package/dist/src/shared/chromium/browsers.js.map +1 -0
  230. package/dist/src/shared/chromium/cookie-reader.d.ts +20 -0
  231. package/dist/src/shared/chromium/cookie-reader.d.ts.map +1 -0
  232. package/dist/src/shared/chromium/cookie-reader.js +99 -0
  233. package/dist/src/shared/chromium/cookie-reader.js.map +1 -0
  234. package/dist/src/shared/chromium/decryptor.d.ts +42 -0
  235. package/dist/src/shared/chromium/decryptor.d.ts.map +1 -0
  236. package/dist/src/shared/chromium/decryptor.js +205 -0
  237. package/dist/src/shared/chromium/decryptor.js.map +1 -0
  238. package/dist/src/shared/chromium/index.d.ts +6 -0
  239. package/dist/src/shared/chromium/index.d.ts.map +1 -0
  240. package/dist/src/shared/chromium/index.js +4 -0
  241. package/dist/src/shared/chromium/index.js.map +1 -0
  242. package/dist/src/shared/chromium/types.d.ts +11 -0
  243. package/dist/src/shared/chromium/types.d.ts.map +1 -0
  244. package/dist/src/shared/chromium/types.js +2 -0
  245. package/dist/src/shared/chromium/types.js.map +1 -0
  246. package/dist/src/shared/utils/derived-key-cache.d.ts +1 -1
  247. package/dist/src/shared/utils/derived-key-cache.d.ts.map +1 -1
  248. package/dist/src/shared/utils/linux-keyring.js +4 -1
  249. package/dist/src/shared/utils/linux-keyring.js.map +1 -1
  250. package/dist/src/tui/adapters/kakaotalk-adapter.d.ts.map +1 -1
  251. package/dist/src/tui/adapters/kakaotalk-adapter.js +6 -1
  252. package/dist/src/tui/adapters/kakaotalk-adapter.js.map +1 -1
  253. package/dist/src/tui/adapters/telegram-adapter.js +1 -1
  254. package/dist/src/tui/adapters/telegram-adapter.js.map +1 -1
  255. package/dist/src/tui/adapters/webex-adapter.js +1 -1
  256. package/dist/src/tui/adapters/webex-adapter.js.map +1 -1
  257. package/dist/src/tui/app.d.ts.map +1 -1
  258. package/dist/src/tui/app.js +112 -23
  259. package/dist/src/tui/app.js.map +1 -1
  260. package/dist/src/tui/utils.d.ts.map +1 -1
  261. package/dist/src/tui/utils.js +11 -13
  262. package/dist/src/tui/utils.js.map +1 -1
  263. package/dist/src/tui/views/channel-picker.d.ts.map +1 -1
  264. package/dist/src/tui/views/channel-picker.js.map +1 -1
  265. package/dist/src/tui/views/workspace-picker.d.ts.map +1 -1
  266. package/dist/src/tui/views/workspace-picker.js.map +1 -1
  267. package/docs/content/docs/cli/channeltalk.mdx +24 -22
  268. package/docs/content/docs/cli/channeltalkbot.mdx +7 -7
  269. package/docs/content/docs/cli/instagram.mdx +4 -4
  270. package/docs/content/docs/cli/kakaotalk.mdx +9 -8
  271. package/docs/content/docs/cli/line.mdx +14 -14
  272. package/docs/content/docs/cli/webex.mdx +19 -19
  273. package/docs/content/docs/cli/wechatbot.mdx +12 -11
  274. package/docs/content/docs/cli/whatsapp.mdx +5 -4
  275. package/docs/content/docs/cli/whatsappbot.mdx +11 -11
  276. package/docs/content/docs/index.mdx +7 -7
  277. package/docs/content/docs/meta.json +1 -9
  278. package/docs/content/docs/sdk/channeltalk.mdx +5 -6
  279. package/docs/content/docs/sdk/channeltalkbot.mdx +6 -12
  280. package/docs/content/docs/sdk/discord.mdx +36 -43
  281. package/docs/content/docs/sdk/instagram.mdx +18 -18
  282. package/docs/content/docs/sdk/kakaotalk.mdx +27 -18
  283. package/docs/content/docs/sdk/line.mdx +8 -13
  284. package/docs/content/docs/sdk/meta.json +14 -1
  285. package/docs/content/docs/sdk/slack.mdx +36 -42
  286. package/docs/content/docs/sdk/teams.mdx +2 -8
  287. package/docs/content/docs/sdk/webex.mdx +2 -12
  288. package/docs/content/docs/sdk/wechatbot.mdx +1 -5
  289. package/docs/content/docs/sdk/whatsapp.mdx +10 -19
  290. package/docs/content/docs/sdk/whatsappbot.mdx +2 -10
  291. package/docs/content/docs/tui.mdx +23 -23
  292. package/docs/src/app/page.tsx +353 -108
  293. package/e2e/channeltalkbot.e2e.test.ts +1 -5
  294. package/e2e/config.ts +6 -2
  295. package/package.json +59 -58
  296. package/scripts/prepublish.ts +1 -3
  297. package/skills/agent-channeltalk/SKILL.md +1 -1
  298. package/skills/agent-channeltalkbot/SKILL.md +1 -1
  299. package/skills/agent-discord/SKILL.md +1 -1
  300. package/skills/agent-discordbot/SKILL.md +1 -1
  301. package/skills/agent-instagram/SKILL.md +1 -1
  302. package/skills/agent-kakaotalk/SKILL.md +1 -1
  303. package/skills/agent-line/SKILL.md +1 -1
  304. package/skills/agent-slack/SKILL.md +1 -1
  305. package/skills/agent-slackbot/SKILL.md +1 -1
  306. package/skills/agent-teams/SKILL.md +1 -1
  307. package/skills/agent-telegram/SKILL.md +1 -1
  308. package/skills/agent-webex/SKILL.md +1 -1
  309. package/skills/agent-wechatbot/SKILL.md +1 -1
  310. package/skills/agent-whatsapp/SKILL.md +1 -1
  311. package/skills/agent-whatsappbot/SKILL.md +1 -1
  312. package/src/platforms/channeltalk/client.test.ts +116 -29
  313. package/src/platforms/channeltalk/client.ts +26 -6
  314. package/src/platforms/channeltalk/commands/auth.test.ts +5 -5
  315. package/src/platforms/channeltalk/commands/auth.ts +19 -5
  316. package/src/platforms/channeltalk/commands/message.test.ts +2 -6
  317. package/src/platforms/channeltalk/commands/message.ts +5 -1
  318. package/src/platforms/channeltalk/commands/snapshot.test.ts +19 -4
  319. package/src/platforms/channeltalk/commands/snapshot.ts +5 -1
  320. package/src/platforms/channeltalk/ensure-auth.test.ts +20 -17
  321. package/src/platforms/channeltalk/ensure-auth.ts +6 -7
  322. package/src/platforms/channeltalk/index.ts +0 -1
  323. package/src/platforms/channeltalk/token-extractor.test.ts +33 -25
  324. package/src/platforms/channeltalk/token-extractor.ts +120 -372
  325. package/src/platforms/channeltalkbot/client.test.ts +1 -3
  326. package/src/platforms/channeltalkbot/client.ts +39 -13
  327. package/src/platforms/channeltalkbot/commands/auth.test.ts +3 -1
  328. package/src/platforms/channeltalkbot/commands/auth.ts +4 -1
  329. package/src/platforms/channeltalkbot/commands/bot.test.ts +13 -5
  330. package/src/platforms/channeltalkbot/commands/message.test.ts +12 -6
  331. package/src/platforms/channeltalkbot/commands/shared.ts +6 -2
  332. package/src/platforms/channeltalkbot/commands/snapshot.test.ts +17 -5
  333. package/src/platforms/channeltalkbot/credential-manager.test.ts +1 -1
  334. package/src/platforms/channeltalkbot/index.test.ts +0 -2
  335. package/src/platforms/channeltalkbot/index.ts +0 -1
  336. package/src/platforms/discord/commands/auth.test.ts +6 -4
  337. package/src/platforms/discord/commands/auth.ts +14 -14
  338. package/src/platforms/discord/commands/whoami.test.ts +2 -4
  339. package/src/platforms/discord/commands/whoami.ts +2 -0
  340. package/src/platforms/discord/ensure-auth.test.ts +5 -3
  341. package/src/platforms/discord/index.ts +0 -1
  342. package/src/platforms/discord/listener.test.ts +7 -1
  343. package/src/platforms/discord/token-extractor.test.ts +18 -12
  344. package/src/platforms/discord/token-extractor.ts +46 -190
  345. package/src/platforms/discordbot/client.ts +1 -4
  346. package/src/platforms/discordbot/commands/auth.test.ts +3 -1
  347. package/src/platforms/discordbot/commands/channel.test.ts +3 -1
  348. package/src/platforms/discordbot/commands/message.test.ts +3 -1
  349. package/src/platforms/discordbot/commands/server.test.ts +3 -1
  350. package/src/platforms/discordbot/commands/snapshot.test.ts +3 -1
  351. package/src/platforms/discordbot/commands/thread.test.ts +3 -1
  352. package/src/platforms/discordbot/commands/user.test.ts +3 -1
  353. package/src/platforms/instagram/cli.ts +1 -4
  354. package/src/platforms/instagram/client.test.ts +3 -8
  355. package/src/platforms/instagram/client.ts +39 -34
  356. package/src/platforms/instagram/commands/auth.test.ts +13 -12
  357. package/src/platforms/instagram/commands/auth.ts +136 -71
  358. package/src/platforms/instagram/commands/chat.test.ts +21 -24
  359. package/src/platforms/instagram/commands/chat.ts +2 -0
  360. package/src/platforms/instagram/commands/message.test.ts +29 -24
  361. package/src/platforms/instagram/commands/message.ts +3 -4
  362. package/src/platforms/instagram/commands/shared.ts +2 -5
  363. package/src/platforms/instagram/commands/whoami.test.ts +4 -6
  364. package/src/platforms/instagram/credential-manager.ts +2 -6
  365. package/src/platforms/instagram/ensure-auth.test.ts +1 -4
  366. package/src/platforms/instagram/ensure-auth.ts +6 -3
  367. package/src/platforms/instagram/listener.test.ts +7 -3
  368. package/src/platforms/instagram/token-extractor.test.ts +4 -16
  369. package/src/platforms/instagram/token-extractor.ts +55 -309
  370. package/src/platforms/instagram/types.test.ts +2 -6
  371. package/src/platforms/instagram/types.ts +4 -2
  372. package/src/platforms/kakaotalk/auth/kakao-login.ts +30 -8
  373. package/src/platforms/kakaotalk/client.test.ts +37 -25
  374. package/src/platforms/kakaotalk/client.ts +23 -12
  375. package/src/platforms/kakaotalk/commands/auth.test.ts +6 -18
  376. package/src/platforms/kakaotalk/commands/auth.ts +101 -47
  377. package/src/platforms/kakaotalk/commands/chat.test.ts +8 -11
  378. package/src/platforms/kakaotalk/commands/message.test.ts +15 -24
  379. package/src/platforms/kakaotalk/commands/shared.ts +1 -0
  380. package/src/platforms/kakaotalk/commands/whoami.test.ts +6 -10
  381. package/src/platforms/kakaotalk/credential-manager.test.ts +1 -4
  382. package/src/platforms/kakaotalk/index.test.ts +1 -0
  383. package/src/platforms/kakaotalk/index.ts +0 -2
  384. package/src/platforms/kakaotalk/listener.test.ts +7 -1
  385. package/src/platforms/kakaotalk/protocol/connection.ts +4 -1
  386. package/src/platforms/kakaotalk/protocol/crypto.ts +1 -1
  387. package/src/platforms/kakaotalk/protocol/session.ts +12 -6
  388. package/src/platforms/kakaotalk/token-extractor.ts +5 -5
  389. package/src/platforms/kakaotalk/types.ts +8 -7
  390. package/src/platforms/line/cli.ts +1 -4
  391. package/src/platforms/line/client.ts +12 -20
  392. package/src/platforms/line/commands/auth.test.ts +2 -1
  393. package/src/platforms/line/commands/chat.test.ts +2 -1
  394. package/src/platforms/line/commands/chat.ts +1 -4
  395. package/src/platforms/line/commands/friend.test.ts +2 -1
  396. package/src/platforms/line/commands/message.test.ts +2 -1
  397. package/src/platforms/line/commands/message.ts +2 -9
  398. package/src/platforms/line/commands/whoami.test.ts +2 -1
  399. package/src/platforms/line/credential-manager.test.ts +1 -2
  400. package/src/platforms/line/index.test.ts +1 -0
  401. package/src/platforms/line/listener.ts +1 -1
  402. package/src/platforms/line/types.test.ts +1 -0
  403. package/src/platforms/slack/cli.ts +3 -1
  404. package/src/platforms/slack/client-mappers.ts +297 -0
  405. package/src/platforms/slack/client.test.ts +532 -17
  406. package/src/platforms/slack/client.ts +69 -458
  407. package/src/platforms/slack/commands/channel.ts +1 -4
  408. package/src/platforms/slack/commands/emoji.test.ts +6 -4
  409. package/src/platforms/slack/commands/emoji.ts +20 -22
  410. package/src/platforms/slack/commands/message.ts +6 -1
  411. package/src/platforms/slack/commands/pin.test.ts +14 -12
  412. package/src/platforms/slack/commands/reminder.ts +7 -6
  413. package/src/platforms/slack/commands/user.ts +6 -1
  414. package/src/platforms/slack/commands/usergroup.test.ts +3 -3
  415. package/src/platforms/slack/commands/usergroup.ts +10 -7
  416. package/src/platforms/slack/commands/whoami.test.ts +1 -1
  417. package/src/platforms/slack/commands/whoami.ts +2 -0
  418. package/src/platforms/slack/index.ts +0 -2
  419. package/src/platforms/slack/listener.test.ts +1 -0
  420. package/src/platforms/slack/token-extractor.test.ts +7 -12
  421. package/src/platforms/slack/token-extractor.ts +47 -255
  422. package/src/platforms/slackbot/cli.ts +8 -1
  423. package/src/platforms/slackbot/commands/auth.test.ts +3 -1
  424. package/src/platforms/teams/client.ts +1 -1
  425. package/src/platforms/teams/commands/auth.test.ts +1 -1
  426. package/src/platforms/teams/commands/auth.ts +4 -1
  427. package/src/platforms/teams/commands/whoami.test.ts +2 -4
  428. package/src/platforms/teams/commands/whoami.ts +2 -0
  429. package/src/platforms/teams/index.ts +0 -1
  430. package/src/platforms/teams/token-extractor.ts +82 -350
  431. package/src/platforms/telegram/app-config.test.ts +1 -0
  432. package/src/platforms/telegram/chat-utils.test.ts +5 -1
  433. package/src/platforms/telegram/cli.ts +2 -4
  434. package/src/platforms/telegram/client.test.ts +16 -3
  435. package/src/platforms/telegram/client.ts +14 -4
  436. package/src/platforms/telegram/commands/auth.test.ts +1 -0
  437. package/src/platforms/telegram/commands/auth.ts +3 -4
  438. package/src/platforms/telegram/commands/chat.test.ts +2 -5
  439. package/src/platforms/telegram/commands/chat.ts +1 -0
  440. package/src/platforms/telegram/commands/message.test.ts +2 -5
  441. package/src/platforms/telegram/commands/message.ts +1 -0
  442. package/src/platforms/telegram/commands/shared.test.ts +1 -0
  443. package/src/platforms/telegram/commands/whoami.test.ts +5 -7
  444. package/src/platforms/telegram/commands/whoami.ts +1 -1
  445. package/src/platforms/telegram/credential-manager.test.ts +1 -0
  446. package/src/platforms/telegram/credential-manager.ts +11 -2
  447. package/src/platforms/telegram/my-telegram-org.ts +6 -2
  448. package/src/platforms/telegram/types.test.ts +1 -0
  449. package/src/platforms/webex/app-config.test.ts +1 -0
  450. package/src/platforms/webex/cli.ts +1 -4
  451. package/src/platforms/webex/client.test.ts +39 -12
  452. package/src/platforms/webex/client.ts +30 -61
  453. package/src/platforms/webex/commands/auth.test.ts +7 -1
  454. package/src/platforms/webex/commands/auth.ts +12 -15
  455. package/src/platforms/webex/commands/member.test.ts +1 -3
  456. package/src/platforms/webex/commands/member.ts +14 -19
  457. package/src/platforms/webex/commands/message.ts +4 -15
  458. package/src/platforms/webex/commands/snapshot.test.ts +28 -3
  459. package/src/platforms/webex/commands/snapshot.ts +3 -3
  460. package/src/platforms/webex/commands/space.test.ts +3 -3
  461. package/src/platforms/webex/commands/space.ts +2 -9
  462. package/src/platforms/webex/commands/whoami.test.ts +12 -5
  463. package/src/platforms/webex/commands/whoami.ts +2 -0
  464. package/src/platforms/webex/credential-manager.ts +11 -2
  465. package/src/platforms/webex/ensure-auth.ts +1 -3
  466. package/src/platforms/webex/index.ts +1 -7
  467. package/src/platforms/webex/markdown-to-html.test.ts +141 -0
  468. package/src/platforms/webex/markdown-to-html.ts +194 -0
  469. package/src/platforms/webex/token-extractor.ts +6 -29
  470. package/src/platforms/wechatbot/cli.ts +0 -0
  471. package/src/platforms/wechatbot/client.test.ts +6 -2
  472. package/src/platforms/wechatbot/client.ts +6 -1
  473. package/src/platforms/wechatbot/commands/auth.test.ts +3 -7
  474. package/src/platforms/wechatbot/commands/message.test.ts +1 -4
  475. package/src/platforms/wechatbot/commands/message.ts +5 -1
  476. package/src/platforms/wechatbot/commands/template.test.ts +1 -4
  477. package/src/platforms/wechatbot/commands/user.test.ts +2 -7
  478. package/src/platforms/whatsapp/cli.ts +1 -4
  479. package/src/platforms/whatsapp/commands/auth.test.ts +19 -22
  480. package/src/platforms/whatsapp/commands/chat.test.ts +21 -24
  481. package/src/platforms/whatsapp/commands/chat.ts +2 -0
  482. package/src/platforms/whatsapp/commands/message.test.ts +22 -24
  483. package/src/platforms/whatsapp/commands/message.ts +3 -5
  484. package/src/platforms/whatsapp/commands/shared.ts +2 -5
  485. package/src/platforms/whatsapp/commands/whoami.test.ts +2 -2
  486. package/src/platforms/whatsapp/credential-manager.ts +2 -6
  487. package/src/platforms/whatsapp/ensure-auth.test.ts +1 -4
  488. package/src/platforms/whatsapp/ensure-auth.ts +14 -6
  489. package/src/platforms/whatsapp/index.ts +0 -2
  490. package/src/platforms/whatsappbot/client.test.ts +13 -7
  491. package/src/platforms/whatsappbot/client.ts +18 -4
  492. package/src/platforms/whatsappbot/commands/auth.ts +4 -1
  493. package/src/platforms/whatsappbot/commands/message.test.ts +12 -2
  494. package/src/platforms/whatsappbot/commands/message.ts +16 -3
  495. package/src/platforms/whatsappbot/commands/shared.ts +3 -1
  496. package/src/platforms/whatsappbot/commands/whoami.test.ts +1 -3
  497. package/src/platforms/whatsappbot/index.ts +0 -2
  498. package/src/shared/chromium/browsers.test.ts +274 -0
  499. package/src/shared/chromium/browsers.ts +86 -0
  500. package/src/shared/chromium/cookie-reader.test.ts +274 -0
  501. package/src/shared/chromium/cookie-reader.ts +111 -0
  502. package/src/shared/chromium/decryptor.test.ts +449 -0
  503. package/src/shared/chromium/decryptor.ts +227 -0
  504. package/src/shared/chromium/index.ts +11 -0
  505. package/src/shared/chromium/types.ts +11 -0
  506. package/src/shared/utils/derived-key-cache.ts +1 -1
  507. package/src/shared/utils/linux-keyring.ts +4 -4
  508. package/src/tui/adapters/kakaotalk-adapter.ts +6 -1
  509. package/src/tui/adapters/telegram-adapter.ts +1 -1
  510. package/src/tui/adapters/webex-adapter.ts +1 -1
  511. package/src/tui/app.ts +149 -59
  512. package/src/tui/utils.test.ts +144 -145
  513. package/src/tui/utils.ts +27 -29
  514. package/src/tui/views/channel-picker.ts +1 -1
  515. package/src/tui/views/workspace-picker.ts +1 -1
@@ -1,7 +1,7 @@
1
1
  'use client'
2
2
 
3
- import Link from 'next/link'
4
3
  import { useTheme } from 'next-themes'
4
+ import Link from 'next/link'
5
5
  import { useEffect, useState } from 'react'
6
6
 
7
7
  // ============================================================
@@ -147,7 +147,9 @@ function ChannelTalkIcon({ className, style }: { className?: string; style?: Rea
147
147
  <svg viewBox="0 0 128 128" fill="currentColor" className={className} style={style}>
148
148
  <title>Channel Talk icon</title>
149
149
  <rect width="128" height="128" rx="28" fill="#3B3FE4" />
150
- <text x="64" y="82" textAnchor="middle" fill="white" fontSize="48" fontWeight="bold" fontFamily="monospace">CT</text>
150
+ <text x="64" y="82" textAnchor="middle" fill="white" fontSize="48" fontWeight="bold" fontFamily="monospace">
151
+ CT
152
+ </text>
151
153
  </svg>
152
154
  )
153
155
  }
@@ -158,7 +160,15 @@ function ChannelTalkIcon({ className, style }: { className?: string; style?: Rea
158
160
 
159
161
  function ShieldIcon({ className }: { className?: string }) {
160
162
  return (
161
- <svg className={className} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round">
163
+ <svg
164
+ className={className}
165
+ viewBox="0 0 24 24"
166
+ fill="none"
167
+ stroke="currentColor"
168
+ strokeWidth="1.5"
169
+ strokeLinecap="round"
170
+ strokeLinejoin="round"
171
+ >
162
172
  <path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" />
163
173
  <path d="M9.5 12.5L11 14l3.5-3.5" />
164
174
  </svg>
@@ -167,7 +177,15 @@ function ShieldIcon({ className }: { className?: string }) {
167
177
 
168
178
  function UserIcon({ className }: { className?: string }) {
169
179
  return (
170
- <svg className={className} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round">
180
+ <svg
181
+ className={className}
182
+ viewBox="0 0 24 24"
183
+ fill="none"
184
+ stroke="currentColor"
185
+ strokeWidth="1.5"
186
+ strokeLinecap="round"
187
+ strokeLinejoin="round"
188
+ >
171
189
  <path d="M20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2" />
172
190
  <circle cx="12" cy="7" r="4" />
173
191
  </svg>
@@ -176,7 +194,15 @@ function UserIcon({ className }: { className?: string }) {
176
194
 
177
195
  function TerminalIcon({ className }: { className?: string }) {
178
196
  return (
179
- <svg className={className} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round">
197
+ <svg
198
+ className={className}
199
+ viewBox="0 0 24 24"
200
+ fill="none"
201
+ stroke="currentColor"
202
+ strokeWidth="1.5"
203
+ strokeLinecap="round"
204
+ strokeLinejoin="round"
205
+ >
180
206
  <polyline points="4 17 10 11 4 5" />
181
207
  <line x1="12" y1="19" x2="20" y2="19" />
182
208
  </svg>
@@ -185,7 +211,15 @@ function TerminalIcon({ className }: { className?: string }) {
185
211
 
186
212
  function CpuIcon({ className }: { className?: string }) {
187
213
  return (
188
- <svg className={className} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round">
214
+ <svg
215
+ className={className}
216
+ viewBox="0 0 24 24"
217
+ fill="none"
218
+ stroke="currentColor"
219
+ strokeWidth="1.5"
220
+ strokeLinecap="round"
221
+ strokeLinejoin="round"
222
+ >
189
223
  <rect x="4" y="4" width="16" height="16" rx="2" />
190
224
  <rect x="9" y="9" width="6" height="6" />
191
225
  <line x1="9" y1="1" x2="9" y2="4" />
@@ -202,7 +236,15 @@ function CpuIcon({ className }: { className?: string }) {
202
236
 
203
237
  function ZapIcon({ className }: { className?: string }) {
204
238
  return (
205
- <svg className={className} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round">
239
+ <svg
240
+ className={className}
241
+ viewBox="0 0 24 24"
242
+ fill="none"
243
+ stroke="currentColor"
244
+ strokeWidth="1.5"
245
+ strokeLinecap="round"
246
+ strokeLinejoin="round"
247
+ >
206
248
  <polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2" />
207
249
  </svg>
208
250
  )
@@ -210,7 +252,15 @@ function ZapIcon({ className }: { className?: string }) {
210
252
 
211
253
  function DatabaseIcon({ className }: { className?: string }) {
212
254
  return (
213
- <svg className={className} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round">
255
+ <svg
256
+ className={className}
257
+ viewBox="0 0 24 24"
258
+ fill="none"
259
+ stroke="currentColor"
260
+ strokeWidth="1.5"
261
+ strokeLinecap="round"
262
+ strokeLinejoin="round"
263
+ >
214
264
  <ellipse cx="12" cy="5" rx="9" ry="3" />
215
265
  <path d="M21 12c0 1.66-4 3-9 3s-9-1.34-9-3" />
216
266
  <path d="M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5" />
@@ -238,11 +288,27 @@ function CopyButton({ text }: { text: string }) {
238
288
  aria-label={copied ? 'Copied' : 'Copy to clipboard'}
239
289
  >
240
290
  {copied ? (
241
- <svg className="size-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
291
+ <svg
292
+ className="size-4"
293
+ viewBox="0 0 24 24"
294
+ fill="none"
295
+ stroke="currentColor"
296
+ strokeWidth="2"
297
+ strokeLinecap="round"
298
+ strokeLinejoin="round"
299
+ >
242
300
  <polyline points="20 6 9 17 4 12" />
243
301
  </svg>
244
302
  ) : (
245
- <svg className="size-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
303
+ <svg
304
+ className="size-4"
305
+ viewBox="0 0 24 24"
306
+ fill="none"
307
+ stroke="currentColor"
308
+ strokeWidth="2"
309
+ strokeLinecap="round"
310
+ strokeLinejoin="round"
311
+ >
246
312
  <rect x="9" y="9" width="13" height="13" rx="2" ry="2" />
247
313
  <path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1" />
248
314
  </svg>
@@ -271,7 +337,15 @@ function ThemeToggle() {
271
337
  aria-label="Toggle theme"
272
338
  >
273
339
  {resolvedTheme === 'dark' ? (
274
- <svg className="size-[18px]" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
340
+ <svg
341
+ className="size-[18px]"
342
+ viewBox="0 0 24 24"
343
+ fill="none"
344
+ stroke="currentColor"
345
+ strokeWidth="2"
346
+ strokeLinecap="round"
347
+ strokeLinejoin="round"
348
+ >
275
349
  <circle cx="12" cy="12" r="5" />
276
350
  <line x1="12" y1="1" x2="12" y2="3" />
277
351
  <line x1="12" y1="21" x2="12" y2="23" />
@@ -283,7 +357,15 @@ function ThemeToggle() {
283
357
  <line x1="18.36" y1="5.64" x2="19.78" y2="4.22" />
284
358
  </svg>
285
359
  ) : (
286
- <svg className="size-[18px]" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
360
+ <svg
361
+ className="size-[18px]"
362
+ viewBox="0 0 24 24"
363
+ fill="none"
364
+ stroke="currentColor"
365
+ strokeWidth="2"
366
+ strokeLinecap="round"
367
+ strokeLinejoin="round"
368
+ >
287
369
  <path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z" />
288
370
  </svg>
289
371
  )}
@@ -295,15 +377,7 @@ function ThemeToggle() {
295
377
  // Terminal Block Component
296
378
  // ============================================================
297
379
 
298
- function TerminalBlock({
299
- title,
300
- copyText,
301
- children,
302
- }: {
303
- title?: string
304
- copyText: string
305
- children: React.ReactNode
306
- }) {
380
+ function TerminalBlock({ title, copyText, children }: { title?: string; copyText: string; children: React.ReactNode }) {
307
381
  return (
308
382
  <div className="overflow-hidden rounded-xl border border-zinc-200 bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-950">
309
383
  <div className="flex items-center justify-between border-b border-zinc-200 bg-zinc-100 px-4 py-3 dark:border-zinc-800 dark:bg-zinc-900">
@@ -354,15 +428,23 @@ function PlatformTerminal() {
354
428
  <span className="size-3 rounded-full bg-zinc-300 dark:bg-zinc-700" />
355
429
  </div>
356
430
  <span className="font-mono text-xs text-zinc-400 dark:text-zinc-500">agent-messenger</span>
357
- <CopyButton text={demo.commands.filter((c) => 'cmd' in c).map((c) => c.cmd).join('\n')} />
431
+ <CopyButton
432
+ text={demo.commands
433
+ .filter((c) => 'cmd' in c)
434
+ .map((c) => c.cmd)
435
+ .join('\n')}
436
+ />
358
437
  </div>
359
438
  <div className="flex gap-0 overflow-x-auto px-2">
360
439
  {TERMINAL_DEMOS.map((d, i) => (
361
440
  <button
362
441
  key={d.platform}
363
442
  type="button"
364
- onClick={() => { setActive(i); setPaused(true) }}
365
- className={`whitespace-nowrap px-3 py-2 font-mono text-xs transition-colors duration-200 ${
443
+ onClick={() => {
444
+ setActive(i)
445
+ setPaused(true)
446
+ }}
447
+ className={`px-3 py-2 font-mono text-xs whitespace-nowrap transition-colors duration-200 ${
366
448
  i === active
367
449
  ? 'border-b-2 border-blue-500 text-zinc-800 dark:text-zinc-200'
368
450
  : 'border-b-2 border-transparent text-zinc-400 hover:text-zinc-600 dark:text-zinc-600 dark:hover:text-zinc-400'
@@ -406,22 +488,26 @@ const FEATURES = [
406
488
  {
407
489
  icon: <ShieldIcon className="size-5" />,
408
490
  title: 'Auto-Extract Auth',
409
- description: 'Reads tokens from Slack, Discord, Teams, KakaoTalk, and Channel Talk desktop apps. Telegram and WhatsApp authenticate with a one-time code — still under a minute.',
491
+ description:
492
+ 'Reads tokens from Slack, Discord, Teams, KakaoTalk, and Channel Talk desktop apps. Telegram and WhatsApp authenticate with a one-time code — still under a minute.',
410
493
  },
411
494
  {
412
495
  icon: <UserIcon className="size-5" />,
413
496
  title: 'Act As Yourself',
414
- description: 'Extracts your user session — not a bot token. Your agent sends messages, reacts, and searches as you. Need bot mode? Bot CLIs are included too.',
497
+ description:
498
+ 'Extracts your user session — not a bot token. Your agent sends messages, reacts, and searches as you. Need bot mode? Bot CLIs are included too.',
415
499
  },
416
500
  {
417
501
  icon: <TerminalIcon className="size-5" />,
418
502
  title: 'One Interface',
419
- description: 'Same command patterns across 7 platforms: message send, message search, channel list, snapshot. Learn once.',
503
+ description:
504
+ 'Same command patterns across 7 platforms: message send, message search, channel list, snapshot. Learn once.',
420
505
  },
421
506
  {
422
507
  icon: <CpuIcon className="size-5" />,
423
508
  title: 'Agent-Native Output',
424
- description: 'JSON by default for LLM tool use. --pretty for human-readable. Structured output your agent can parse and act on.',
509
+ description:
510
+ 'JSON by default for LLM tool use. --pretty for human-readable. Structured output your agent can parse and act on.',
425
511
  },
426
512
  {
427
513
  icon: <ZapIcon className="size-5" />,
@@ -517,14 +603,50 @@ const TERMINAL_DEMOS = [
517
603
 
518
604
  const PLATFORMS = [
519
605
  { name: 'Slack', href: '/docs/cli/slack', Icon: SlackIcon, color: '#4A154B', glowColor: 'rgba(74,21,75,0.4)' },
520
- { name: 'Discord', href: '/docs/cli/discord', Icon: DiscordIcon, color: '#5865F2', glowColor: 'rgba(88,101,242,0.4)' },
606
+ {
607
+ name: 'Discord',
608
+ href: '/docs/cli/discord',
609
+ Icon: DiscordIcon,
610
+ color: '#5865F2',
611
+ glowColor: 'rgba(88,101,242,0.4)',
612
+ },
521
613
  { name: 'Teams', href: '/docs/cli/teams', Icon: TeamsIcon, color: '#6264A7', glowColor: 'rgba(98,100,167,0.4)' },
522
- { name: 'Telegram', href: '/docs/cli/telegram', Icon: TelegramIcon, color: '#2AABEE', glowColor: 'rgba(42,171,238,0.4)' },
523
- { name: 'WhatsApp', href: '/docs/cli/whatsapp', Icon: WhatsAppIcon, color: '#25D366', glowColor: 'rgba(37,211,102,0.4)' },
614
+ {
615
+ name: 'Telegram',
616
+ href: '/docs/cli/telegram',
617
+ Icon: TelegramIcon,
618
+ color: '#2AABEE',
619
+ glowColor: 'rgba(42,171,238,0.4)',
620
+ },
621
+ {
622
+ name: 'WhatsApp',
623
+ href: '/docs/cli/whatsapp',
624
+ Icon: WhatsAppIcon,
625
+ color: '#25D366',
626
+ glowColor: 'rgba(37,211,102,0.4)',
627
+ },
524
628
  { name: 'LINE', href: '/docs/cli/line', Icon: LineIcon, color: '#06C755', glowColor: 'rgba(6,199,85,0.4)' },
525
- { name: 'Instagram', href: '/docs/cli/instagram', Icon: InstagramIcon, color: '#E4405F', glowColor: 'rgba(228,64,95,0.4)' },
526
- { name: 'KakaoTalk', href: '/docs/cli/kakaotalk', Icon: KakaoTalkIcon, color: '#FEE500', glowColor: 'rgba(254,229,0,0.4)' },
527
- { name: 'Channel Talk', href: '/docs/cli/channeltalk', Icon: ChannelTalkIcon, color: '#3B3FE4', glowColor: 'rgba(59,63,228,0.4)' },
629
+ {
630
+ name: 'Instagram',
631
+ href: '/docs/cli/instagram',
632
+ Icon: InstagramIcon,
633
+ color: '#E4405F',
634
+ glowColor: 'rgba(228,64,95,0.4)',
635
+ },
636
+ {
637
+ name: 'KakaoTalk',
638
+ href: '/docs/cli/kakaotalk',
639
+ Icon: KakaoTalkIcon,
640
+ color: '#FEE500',
641
+ glowColor: 'rgba(254,229,0,0.4)',
642
+ },
643
+ {
644
+ name: 'Channel Talk',
645
+ href: '/docs/cli/channeltalk',
646
+ Icon: ChannelTalkIcon,
647
+ color: '#3B3FE4',
648
+ glowColor: 'rgba(59,63,228,0.4)',
649
+ },
528
650
  ]
529
651
 
530
652
  const HOW_IT_WORKS = [
@@ -532,19 +654,22 @@ const HOW_IT_WORKS = [
532
654
  step: 1,
533
655
  title: 'Install',
534
656
  code: 'npm install -g agent-messenger',
535
- description: 'Installs agent-slack, agent-discord, agent-teams, agent-telegram, agent-whatsapp, agent-line, agent-instagram, agent-kakaotalk, agent-channeltalk, plus bot variants.',
657
+ description:
658
+ 'Installs agent-slack, agent-discord, agent-teams, agent-telegram, agent-whatsapp, agent-line, agent-instagram, agent-kakaotalk, agent-channeltalk, plus bot variants.',
536
659
  },
537
660
  {
538
661
  step: 2,
539
662
  title: 'Run',
540
663
  code: 'agent-slack snapshot --pretty',
541
- description: 'Slack, Discord, Teams, KakaoTalk, and Channel Talk tokens are read from your desktop app automatically. Telegram and WhatsApp authenticate with a one-time code.',
664
+ description:
665
+ 'Slack, Discord, Teams, KakaoTalk, and Channel Talk tokens are read from your desktop app automatically. Telegram and WhatsApp authenticate with a one-time code.',
542
666
  },
543
667
  {
544
668
  step: 3,
545
669
  title: 'Teach Your Agent',
546
670
  code: 'npx skills add agent-messenger/agent-messenger',
547
- description: 'Install Agent Skills via Skills CLI, Claude Code, OpenCode, or SkillPad — your agent learns every command and starts messaging on its own.',
671
+ description:
672
+ 'Install Agent Skills via Skills CLI, Claude Code, OpenCode, or SkillPad — your agent learns every command and starts messaging on its own.',
548
673
  },
549
674
  ]
550
675
 
@@ -554,7 +679,7 @@ const USE_CASES = [
554
679
  'Search the Teams #design channel for the latest discussion about the new onboarding flow',
555
680
  'Check my unread Slack messages right now and draft replies for anything urgent',
556
681
  'Look up who reacted to my last message in #general on Discord and what they said after',
557
- 'Summarize today\'s WhatsApp group chat and send the summary to #standup in Slack',
682
+ "Summarize today's WhatsApp group chat and send the summary to #standup in Slack",
558
683
  ]
559
684
 
560
685
  const CAPABILITIES: {
@@ -569,22 +694,150 @@ const CAPABILITIES: {
569
694
  kakaotalk: boolean
570
695
  channeltalk: boolean
571
696
  }[] = [
572
- { feature: 'Zero-config credentials', slack: true, discord: true, teams: true, telegram: false, whatsapp: false, line: false, instagram: false, kakaotalk: true, channeltalk: true },
573
- { feature: 'Send & list messages', slack: true, discord: true, teams: true, telegram: true, whatsapp: true, line: true, instagram: true, kakaotalk: true, channeltalk: true },
574
- { feature: 'Search messages', slack: true, discord: true, teams: false, telegram: false, whatsapp: true, line: false, instagram: true, kakaotalk: false, channeltalk: true },
575
- { feature: 'Threads', slack: true, discord: true, teams: false, telegram: false, whatsapp: false, line: false, instagram: false, kakaotalk: false, channeltalk: false },
576
- { feature: 'Reactions', slack: true, discord: true, teams: true, telegram: false, whatsapp: true, line: false, instagram: false, kakaotalk: false, channeltalk: false },
577
- { feature: 'File upload & download', slack: true, discord: true, teams: true, telegram: false, whatsapp: false, line: false, instagram: false, kakaotalk: false, channeltalk: false },
578
- { feature: 'Workspace snapshot', slack: true, discord: true, teams: true, telegram: false, whatsapp: false, line: false, instagram: false, kakaotalk: false, channeltalk: true },
579
- { feature: 'Multi-account', slack: true, discord: true, teams: true, telegram: true, whatsapp: true, line: true, instagram: true, kakaotalk: false, channeltalk: true },
580
- { feature: 'Bot CLI available', slack: true, discord: true, teams: false, telegram: false, whatsapp: true, line: false, instagram: false, kakaotalk: false, channeltalk: true },
581
- { feature: 'Real-time events (SDK)', slack: true, discord: false, teams: false, telegram: false, whatsapp: false, line: true, instagram: true, kakaotalk: false, channeltalk: false },
697
+ {
698
+ feature: 'Zero-config credentials',
699
+ slack: true,
700
+ discord: true,
701
+ teams: true,
702
+ telegram: false,
703
+ whatsapp: false,
704
+ line: false,
705
+ instagram: false,
706
+ kakaotalk: true,
707
+ channeltalk: true,
708
+ },
709
+ {
710
+ feature: 'Send & list messages',
711
+ slack: true,
712
+ discord: true,
713
+ teams: true,
714
+ telegram: true,
715
+ whatsapp: true,
716
+ line: true,
717
+ instagram: true,
718
+ kakaotalk: true,
719
+ channeltalk: true,
720
+ },
721
+ {
722
+ feature: 'Search messages',
723
+ slack: true,
724
+ discord: true,
725
+ teams: false,
726
+ telegram: false,
727
+ whatsapp: true,
728
+ line: false,
729
+ instagram: true,
730
+ kakaotalk: false,
731
+ channeltalk: true,
732
+ },
733
+ {
734
+ feature: 'Threads',
735
+ slack: true,
736
+ discord: true,
737
+ teams: false,
738
+ telegram: false,
739
+ whatsapp: false,
740
+ line: false,
741
+ instagram: false,
742
+ kakaotalk: false,
743
+ channeltalk: false,
744
+ },
745
+ {
746
+ feature: 'Reactions',
747
+ slack: true,
748
+ discord: true,
749
+ teams: true,
750
+ telegram: false,
751
+ whatsapp: true,
752
+ line: false,
753
+ instagram: false,
754
+ kakaotalk: false,
755
+ channeltalk: false,
756
+ },
757
+ {
758
+ feature: 'File upload & download',
759
+ slack: true,
760
+ discord: true,
761
+ teams: true,
762
+ telegram: false,
763
+ whatsapp: false,
764
+ line: false,
765
+ instagram: false,
766
+ kakaotalk: false,
767
+ channeltalk: false,
768
+ },
769
+ {
770
+ feature: 'Workspace snapshot',
771
+ slack: true,
772
+ discord: true,
773
+ teams: true,
774
+ telegram: false,
775
+ whatsapp: false,
776
+ line: false,
777
+ instagram: false,
778
+ kakaotalk: false,
779
+ channeltalk: true,
780
+ },
781
+ {
782
+ feature: 'Multi-account',
783
+ slack: true,
784
+ discord: true,
785
+ teams: true,
786
+ telegram: true,
787
+ whatsapp: true,
788
+ line: true,
789
+ instagram: true,
790
+ kakaotalk: false,
791
+ channeltalk: true,
792
+ },
793
+ {
794
+ feature: 'Bot CLI available',
795
+ slack: true,
796
+ discord: true,
797
+ teams: false,
798
+ telegram: false,
799
+ whatsapp: true,
800
+ line: false,
801
+ instagram: false,
802
+ kakaotalk: false,
803
+ channeltalk: true,
804
+ },
805
+ {
806
+ feature: 'Real-time events (SDK)',
807
+ slack: true,
808
+ discord: false,
809
+ teams: false,
810
+ telegram: false,
811
+ whatsapp: false,
812
+ line: true,
813
+ instagram: true,
814
+ kakaotalk: false,
815
+ channeltalk: false,
816
+ },
582
817
  ]
583
818
 
584
- const PLATFORM_COLUMNS = ['Slack', 'Discord', 'Teams', 'Telegram', 'WhatsApp', 'LINE', 'Instagram', 'KakaoTalk', 'Ch. Talk'] as const
585
- const PLATFORM_KEYS = ['slack', 'discord', 'teams', 'telegram', 'whatsapp', 'line', 'instagram', 'kakaotalk', 'channeltalk'] as const
586
-
587
-
819
+ const PLATFORM_COLUMNS = [
820
+ 'Slack',
821
+ 'Discord',
822
+ 'Teams',
823
+ 'Telegram',
824
+ 'WhatsApp',
825
+ 'LINE',
826
+ 'Instagram',
827
+ 'KakaoTalk',
828
+ 'Ch. Talk',
829
+ ] as const
830
+ const PLATFORM_KEYS = [
831
+ 'slack',
832
+ 'discord',
833
+ 'teams',
834
+ 'telegram',
835
+ 'whatsapp',
836
+ 'line',
837
+ 'instagram',
838
+ 'kakaotalk',
839
+ 'channeltalk',
840
+ ] as const
588
841
 
589
842
  // ============================================================
590
843
  // Page Component
@@ -593,13 +846,12 @@ const PLATFORM_KEYS = ['slack', 'discord', 'teams', 'telegram', 'whatsapp', 'lin
593
846
  export default function Home() {
594
847
  return (
595
848
  <div className="min-h-screen bg-white text-zinc-900 dark:bg-zinc-950 dark:text-zinc-100">
596
-
597
849
  {/* ================================================================
598
850
  AMBIENT GLOW BACKGROUND
599
851
  ================================================================ */}
600
852
  <div className="pointer-events-none fixed inset-0 overflow-hidden">
601
853
  <div className="absolute -top-[20%] left-1/2 h-[900px] w-[900px] -translate-x-1/2 rounded-full bg-[radial-gradient(circle,rgba(139,92,246,0.15)_0%,rgba(59,130,246,0.08)_40%,transparent_70%)] opacity-[0.03] dark:opacity-[0.08]" />
602
- <div className="absolute -bottom-[10%] -right-[5%] h-[600px] w-[600px] rounded-full bg-[radial-gradient(circle,rgba(59,130,246,0.5)_0%,transparent_60%)] opacity-[0.02] dark:opacity-[0.05]" />
854
+ <div className="absolute -right-[5%] -bottom-[10%] h-[600px] w-[600px] rounded-full bg-[radial-gradient(circle,rgba(59,130,246,0.5)_0%,transparent_60%)] opacity-[0.02] dark:opacity-[0.05]" />
603
855
  </div>
604
856
 
605
857
  {/* ================================================================
@@ -681,7 +933,7 @@ export default function Home() {
681
933
  ================================================================ */}
682
934
  <section className="relative z-10 border-y border-zinc-100/50 px-4 py-16 sm:px-6 dark:border-white/[0.04]">
683
935
  <div className="mx-auto max-w-5xl text-center">
684
- <p className="font-mono text-xs uppercase tracking-widest text-zinc-400 dark:text-zinc-600">
936
+ <p className="font-mono text-xs tracking-widest text-zinc-400 uppercase dark:text-zinc-600">
685
937
  Works with the platforms your team already uses
686
938
  </p>
687
939
  <div className="mt-8 flex flex-wrap items-center justify-center gap-3">
@@ -714,7 +966,9 @@ export default function Home() {
714
966
  <section className="relative z-10 px-4 py-20 sm:px-6 sm:py-24">
715
967
  <div className="mx-auto max-w-5xl">
716
968
  <div className="text-center">
717
- <p className="font-mono text-xs font-medium uppercase tracking-widest text-blue-600 dark:text-blue-400">Why Agent Messenger?</p>
969
+ <p className="font-mono text-xs font-medium tracking-widest text-blue-600 uppercase dark:text-blue-400">
970
+ Why Agent Messenger?
971
+ </p>
718
972
  <h2 className="mt-3 text-3xl font-bold tracking-tight sm:text-4xl">
719
973
  You shouldn&apos;t need a bot token to send a message
720
974
  </h2>
@@ -723,32 +977,36 @@ export default function Home() {
723
977
  <div className="mt-14 grid grid-cols-1 gap-6 md:grid-cols-2">
724
978
  {/* The Problem */}
725
979
  <div className="rounded-2xl border border-zinc-200/40 bg-white/60 p-8 backdrop-blur-xl transition-all duration-300 hover:border-zinc-300/60 hover:shadow-lg dark:border-white/[0.06] dark:bg-white/[0.03] dark:hover:border-white/15 dark:hover:shadow-[0_0_40px_-15px_rgba(139,92,246,0.15)]">
726
- <div className="mb-4 inline-flex items-center gap-2 rounded-full bg-red-50 px-3 py-1 font-mono text-xs font-medium uppercase tracking-wider text-red-600 dark:bg-red-950/50 dark:text-red-400">
980
+ <div className="mb-4 inline-flex items-center gap-2 rounded-full bg-red-50 px-3 py-1 font-mono text-xs font-medium tracking-wider text-red-600 uppercase dark:bg-red-950/50 dark:text-red-400">
727
981
  <span className="size-1.5 rounded-full bg-red-500" />
728
982
  Problem
729
983
  </div>
730
984
  <p className="leading-relaxed text-zinc-600 dark:text-zinc-400">
731
- Every platform gates API access behind OAuth apps that need admin approval — days of waiting just to send a message.
732
- And even then, your agent is a <strong className="text-zinc-900 dark:text-zinc-100">bot</strong>, not you. Different name, different permissions, different context.
985
+ Every platform gates API access behind OAuth apps that need admin approval — days of waiting just to
986
+ send a message. And even then, your agent is a{' '}
987
+ <strong className="text-zinc-900 dark:text-zinc-100">bot</strong>, not you. Different name, different
988
+ permissions, different context.
733
989
  </p>
734
990
  </div>
735
991
 
736
992
  {/* The Solution */}
737
993
  <div className="rounded-2xl border border-zinc-200/40 bg-white/60 p-8 backdrop-blur-xl transition-all duration-300 hover:border-zinc-300/60 hover:shadow-lg dark:border-white/[0.06] dark:bg-white/[0.03] dark:hover:border-white/15 dark:hover:shadow-[0_0_40px_-15px_rgba(139,92,246,0.15)]">
738
- <div className="mb-4 inline-flex items-center gap-2 rounded-full bg-emerald-50 px-3 py-1 font-mono text-xs font-medium uppercase tracking-wider text-emerald-600 dark:bg-emerald-950/50 dark:text-emerald-400">
994
+ <div className="mb-4 inline-flex items-center gap-2 rounded-full bg-emerald-50 px-3 py-1 font-mono text-xs font-medium tracking-wider text-emerald-600 uppercase dark:bg-emerald-950/50 dark:text-emerald-400">
739
995
  <span className="size-1.5 rounded-full bg-emerald-500" />
740
996
  Solution
741
997
  </div>
742
998
  <p className="leading-relaxed text-zinc-600 dark:text-zinc-400">
743
- Agent Messenger reads session tokens from your Slack, Discord, Teams, or KakaoTalk desktop app — zero config.
744
- Telegram, WhatsApp, LINE, and Instagram authenticate with a one-time code or credentials.
745
- Either way, your agent operates <strong className="text-zinc-900 dark:text-zinc-100">as you</strong> — same name, same permissions, same context.
999
+ Agent Messenger reads session tokens from your Slack, Discord, Teams, or KakaoTalk desktop app — zero
1000
+ config. Telegram, WhatsApp, LINE, and Instagram authenticate with a one-time code or credentials. Either
1001
+ way, your agent operates <strong className="text-zinc-900 dark:text-zinc-100">as you</strong> — same
1002
+ name, same permissions, same context.
746
1003
  </p>
747
1004
  </div>
748
1005
  </div>
749
1006
 
750
1007
  <p className="mt-6 text-center text-sm text-zinc-400 dark:text-zinc-600">
751
- Credentials are stored locally in ~/.config/agent-messenger/ with restricted permissions. Nothing is sent to third-party servers.
1008
+ Credentials are stored locally in ~/.config/agent-messenger/ with restricted permissions. Nothing is sent to
1009
+ third-party servers.
752
1010
  </p>
753
1011
  </div>
754
1012
  </section>
@@ -759,10 +1017,10 @@ export default function Home() {
759
1017
  <section className="relative z-10 border-t border-zinc-100/50 px-4 py-20 sm:px-6 sm:py-24 dark:border-white/[0.04]">
760
1018
  <div className="mx-auto max-w-5xl">
761
1019
  <div className="text-center">
762
- <p className="font-mono text-xs font-medium uppercase tracking-widest text-blue-600 dark:text-blue-400">Features</p>
763
- <h2 className="mt-3 text-3xl font-bold tracking-tight sm:text-4xl">
764
- Built for agents, not humans
765
- </h2>
1020
+ <p className="font-mono text-xs font-medium tracking-widest text-blue-600 uppercase dark:text-blue-400">
1021
+ Features
1022
+ </p>
1023
+ <h2 className="mt-3 text-3xl font-bold tracking-tight sm:text-4xl">Built for agents, not humans</h2>
766
1024
  </div>
767
1025
 
768
1026
  <div className="mt-14 grid grid-cols-1 gap-4 sm:grid-cols-2 sm:gap-6 lg:grid-cols-3">
@@ -788,16 +1046,16 @@ export default function Home() {
788
1046
  <section className="relative z-10 border-t border-zinc-100/50 px-4 py-20 sm:px-6 sm:py-24 dark:border-white/[0.04]">
789
1047
  <div className="mx-auto max-w-3xl">
790
1048
  <div className="text-center">
791
- <p className="font-mono text-xs font-medium uppercase tracking-widest text-blue-600 dark:text-blue-400">How It Works</p>
792
- <h2 className="mt-3 text-3xl font-bold tracking-tight sm:text-4xl">
793
- Running in under a minute
794
- </h2>
1049
+ <p className="font-mono text-xs font-medium tracking-widest text-blue-600 uppercase dark:text-blue-400">
1050
+ How It Works
1051
+ </p>
1052
+ <h2 className="mt-3 text-3xl font-bold tracking-tight sm:text-4xl">Running in under a minute</h2>
795
1053
  </div>
796
1054
 
797
1055
  {/* Vertical Timeline */}
798
1056
  <div className="relative mt-14">
799
1057
  {/* Gradient Timeline Line */}
800
- <div className="absolute left-[27px] top-8 bottom-8 w-px bg-gradient-to-b from-violet-300/50 via-blue-300/30 to-transparent dark:from-violet-500/30 dark:via-blue-500/20 dark:to-transparent" />
1058
+ <div className="absolute top-8 bottom-8 left-[27px] w-px bg-gradient-to-b from-violet-300/50 via-blue-300/30 to-transparent dark:from-violet-500/30 dark:via-blue-500/20 dark:to-transparent" />
801
1059
 
802
1060
  <div className="space-y-8">
803
1061
  {HOW_IT_WORKS.map((step) => (
@@ -811,12 +1069,8 @@ export default function Home() {
811
1069
 
812
1070
  {/* Content Card */}
813
1071
  <div className="flex-1 rounded-2xl border border-zinc-200/40 bg-white/60 p-5 backdrop-blur-xl transition-all duration-300 hover:border-zinc-300/60 dark:border-white/[0.06] dark:bg-white/[0.03] dark:hover:border-white/15">
814
- <h3 className="text-base font-semibold text-zinc-900 dark:text-zinc-100">
815
- {step.title}
816
- </h3>
817
- <p className="mt-1 text-sm text-zinc-500 dark:text-zinc-400">
818
- {step.description}
819
- </p>
1072
+ <h3 className="text-base font-semibold text-zinc-900 dark:text-zinc-100">{step.title}</h3>
1073
+ <p className="mt-1 text-sm text-zinc-500 dark:text-zinc-400">{step.description}</p>
820
1074
  <code className="mt-3 inline-block rounded-lg border border-zinc-100 bg-zinc-50 px-3 py-1.5 font-mono text-xs text-blue-600 dark:border-white/[0.04] dark:bg-white/[0.04] dark:text-blue-400">
821
1075
  {step.code}
822
1076
  </code>
@@ -834,10 +1088,10 @@ export default function Home() {
834
1088
  <section className="relative z-10 border-t border-zinc-100/50 px-4 py-20 sm:px-6 sm:py-24 dark:border-white/[0.04]">
835
1089
  <div className="mx-auto max-w-5xl">
836
1090
  <div className="text-center">
837
- <p className="font-mono text-xs font-medium uppercase tracking-widest text-blue-600 dark:text-blue-400">Use Cases</p>
838
- <h2 className="mt-3 text-3xl font-bold tracking-tight sm:text-4xl">
839
- What agents build with this
840
- </h2>
1091
+ <p className="font-mono text-xs font-medium tracking-widest text-blue-600 uppercase dark:text-blue-400">
1092
+ Use Cases
1093
+ </p>
1094
+ <h2 className="mt-3 text-3xl font-bold tracking-tight sm:text-4xl">What agents build with this</h2>
841
1095
  </div>
842
1096
 
843
1097
  <div className="mt-14 grid grid-cols-1 gap-4 md:grid-cols-2">
@@ -846,9 +1100,7 @@ export default function Home() {
846
1100
  key={uc}
847
1101
  className="rounded-r-xl border-l-4 border-blue-500 bg-white/60 px-5 py-4 backdrop-blur-xl transition-all duration-300 dark:bg-white/[0.02]"
848
1102
  >
849
- <p className="text-sm leading-relaxed text-zinc-600 italic dark:text-zinc-400">
850
- &ldquo;{uc}&rdquo;
851
- </p>
1103
+ <p className="text-sm leading-relaxed text-zinc-600 italic dark:text-zinc-400">&ldquo;{uc}&rdquo;</p>
852
1104
  </div>
853
1105
  ))}
854
1106
  </div>
@@ -861,10 +1113,10 @@ export default function Home() {
861
1113
  <section className="relative z-10 border-t border-zinc-100/50 px-4 py-20 sm:px-6 sm:py-24 dark:border-white/[0.04]">
862
1114
  <div className="mx-auto max-w-4xl">
863
1115
  <div className="text-center">
864
- <p className="font-mono text-xs font-medium uppercase tracking-widest text-blue-600 dark:text-blue-400">Philosophy</p>
865
- <h2 className="mt-3 text-3xl font-bold tracking-tight sm:text-4xl">
866
- Why CLI, not MCP?
867
- </h2>
1116
+ <p className="font-mono text-xs font-medium tracking-widest text-blue-600 uppercase dark:text-blue-400">
1117
+ Philosophy
1118
+ </p>
1119
+ <h2 className="mt-3 text-3xl font-bold tracking-tight sm:text-4xl">Why CLI, not MCP?</h2>
868
1120
  </div>
869
1121
 
870
1122
  <div className="mt-14 grid grid-cols-1 gap-6 md:grid-cols-2">
@@ -915,10 +1167,10 @@ export default function Home() {
915
1167
  <section className="relative z-10 border-t border-zinc-100/50 px-4 py-20 sm:px-6 sm:py-24 dark:border-white/[0.04]">
916
1168
  <div className="mx-auto max-w-5xl">
917
1169
  <div className="text-center">
918
- <p className="font-mono text-xs font-medium uppercase tracking-widest text-blue-600 dark:text-blue-400">Compatibility</p>
919
- <h2 className="mt-3 text-3xl font-bold tracking-tight sm:text-4xl">
920
- Platform capabilities
921
- </h2>
1170
+ <p className="font-mono text-xs font-medium tracking-widest text-blue-600 uppercase dark:text-blue-400">
1171
+ Compatibility
1172
+ </p>
1173
+ <h2 className="mt-3 text-3xl font-bold tracking-tight sm:text-4xl">Platform capabilities</h2>
922
1174
  </div>
923
1175
 
924
1176
  <div className="mt-14 overflow-x-auto rounded-2xl border border-zinc-200/40 bg-white/50 backdrop-blur-xl dark:border-white/[0.06] dark:bg-white/[0.02]">
@@ -931,7 +1183,7 @@ export default function Home() {
931
1183
  {PLATFORM_COLUMNS.map((col) => (
932
1184
  <th
933
1185
  key={col}
934
- className="px-4 py-3 text-center font-mono text-xs font-semibold tracking-wide text-zinc-500 uppercase whitespace-nowrap dark:text-zinc-500"
1186
+ className="px-4 py-3 text-center font-mono text-xs font-semibold tracking-wide whitespace-nowrap text-zinc-500 uppercase dark:text-zinc-500"
935
1187
  >
936
1188
  {col}
937
1189
  </th>
@@ -942,13 +1194,9 @@ export default function Home() {
942
1194
  {CAPABILITIES.map((row, i) => (
943
1195
  <tr
944
1196
  key={row.feature}
945
- className={
946
- i % 2 === 0
947
- ? 'bg-white/30 dark:bg-white/[0.01]'
948
- : 'bg-zinc-50/30 dark:bg-transparent'
949
- }
1197
+ className={i % 2 === 0 ? 'bg-white/30 dark:bg-white/[0.01]' : 'bg-zinc-50/30 dark:bg-transparent'}
950
1198
  >
951
- <td className="px-4 py-3 font-medium text-zinc-700 whitespace-nowrap dark:text-zinc-300">
1199
+ <td className="px-4 py-3 font-medium whitespace-nowrap text-zinc-700 dark:text-zinc-300">
952
1200
  {row.feature}
953
1201
  </td>
954
1202
  {PLATFORM_KEYS.map((key) => (
@@ -966,7 +1214,8 @@ export default function Home() {
966
1214
  </table>
967
1215
  </div>
968
1216
  <p className="mt-6 text-center text-sm text-zinc-500 dark:text-zinc-400">
969
- Slack goes deepest — scheduled messages, ephemeral sends, file downloads, real-time events SDK, activity feed, drafts, saved items, reminders, pins, and bookmarks.
1217
+ Slack goes deepest — scheduled messages, ephemeral sends, file downloads, real-time events SDK, activity
1218
+ feed, drafts, saved items, reminders, pins, and bookmarks.
970
1219
  </p>
971
1220
  </div>
972
1221
  </section>
@@ -981,14 +1230,10 @@ export default function Home() {
981
1230
  {/* Subtle CTA glow behind */}
982
1231
  <div className="absolute inset-0 -z-10 bg-[radial-gradient(ellipse_at_center,rgba(139,92,246,0.08)_0%,transparent_60%)] opacity-0 dark:opacity-100" />
983
1232
 
984
- <h2 className="text-3xl font-bold tracking-tight sm:text-4xl">
985
- Install once. Message everywhere.
986
- </h2>
1233
+ <h2 className="text-3xl font-bold tracking-tight sm:text-4xl">Install once. Message everywhere.</h2>
987
1234
 
988
1235
  <div className="mx-auto mt-10 max-w-lg text-left">
989
- <TerminalBlock
990
- copyText="npm install -g agent-messenger"
991
- >
1236
+ <TerminalBlock copyText="npm install -g agent-messenger">
992
1237
  <span className="text-zinc-400 dark:text-zinc-500">$ </span>
993
1238
  <span className="text-zinc-800 dark:text-zinc-100">npm install -g agent-messenger</span>
994
1239
  </TerminalBlock>