agent-messenger 1.0.0 → 1.2.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 (512) hide show
  1. package/.claude/commands/release.md +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.github/workflows/ci.yml +1 -1
  4. package/.github/workflows/e2e.yml.disabled +69 -0
  5. package/CONTRIBUTING.md +2 -2
  6. package/README.md +18 -15
  7. package/biome.json +34 -2
  8. package/bun.lock +63 -0
  9. package/dist/package.json +8 -4
  10. package/dist/src/cli.d.ts.map +1 -1
  11. package/dist/src/cli.js +4 -1
  12. package/dist/src/cli.js.map +1 -1
  13. package/dist/src/platforms/discord/cli.js +4 -4
  14. package/dist/src/platforms/discord/cli.js.map +1 -1
  15. package/dist/src/platforms/discord/client.d.ts +26 -5
  16. package/dist/src/platforms/discord/client.d.ts.map +1 -1
  17. package/dist/src/platforms/discord/client.js +115 -17
  18. package/dist/src/platforms/discord/client.js.map +1 -1
  19. package/dist/src/platforms/discord/commands/auth.js +16 -16
  20. package/dist/src/platforms/discord/commands/auth.js.map +1 -1
  21. package/dist/src/platforms/discord/commands/channel.js +4 -4
  22. package/dist/src/platforms/discord/commands/channel.js.map +1 -1
  23. package/dist/src/platforms/discord/commands/dm.d.ts +9 -0
  24. package/dist/src/platforms/discord/commands/dm.d.ts.map +1 -0
  25. package/dist/src/platforms/discord/commands/dm.js +68 -0
  26. package/dist/src/platforms/discord/commands/dm.js.map +1 -0
  27. package/dist/src/platforms/discord/commands/friend.d.ts +3 -0
  28. package/dist/src/platforms/discord/commands/friend.d.ts.map +1 -0
  29. package/dist/src/platforms/discord/commands/friend.js +39 -0
  30. package/dist/src/platforms/discord/commands/friend.js.map +1 -0
  31. package/dist/src/platforms/discord/commands/index.d.ts +1 -1
  32. package/dist/src/platforms/discord/commands/index.d.ts.map +1 -1
  33. package/dist/src/platforms/discord/commands/index.js +1 -1
  34. package/dist/src/platforms/discord/commands/index.js.map +1 -1
  35. package/dist/src/platforms/discord/commands/member.d.ts +3 -0
  36. package/dist/src/platforms/discord/commands/member.d.ts.map +1 -0
  37. package/dist/src/platforms/discord/commands/member.js +47 -0
  38. package/dist/src/platforms/discord/commands/member.js.map +1 -0
  39. package/dist/src/platforms/discord/commands/mention.d.ts +8 -0
  40. package/dist/src/platforms/discord/commands/mention.d.ts.map +1 -0
  41. package/dist/src/platforms/discord/commands/mention.js +47 -0
  42. package/dist/src/platforms/discord/commands/mention.js.map +1 -0
  43. package/dist/src/platforms/discord/commands/message.d.ts +13 -0
  44. package/dist/src/platforms/discord/commands/message.d.ts.map +1 -1
  45. package/dist/src/platforms/discord/commands/message.js +95 -1
  46. package/dist/src/platforms/discord/commands/message.js.map +1 -1
  47. package/dist/src/platforms/discord/commands/note.d.ts +3 -0
  48. package/dist/src/platforms/discord/commands/note.d.ts.map +1 -0
  49. package/dist/src/platforms/discord/commands/note.js +56 -0
  50. package/dist/src/platforms/discord/commands/note.js.map +1 -0
  51. package/dist/src/platforms/discord/commands/profile.d.ts +3 -0
  52. package/dist/src/platforms/discord/commands/profile.d.ts.map +1 -0
  53. package/dist/src/platforms/discord/commands/profile.js +47 -0
  54. package/dist/src/platforms/discord/commands/profile.js.map +1 -0
  55. package/dist/src/platforms/discord/commands/server.d.ts +15 -0
  56. package/dist/src/platforms/discord/commands/server.d.ts.map +1 -0
  57. package/dist/src/platforms/discord/commands/server.js +102 -0
  58. package/dist/src/platforms/discord/commands/server.js.map +1 -0
  59. package/dist/src/platforms/discord/commands/snapshot.js +10 -10
  60. package/dist/src/platforms/discord/commands/snapshot.js.map +1 -1
  61. package/dist/src/platforms/discord/commands/thread.d.ts +10 -0
  62. package/dist/src/platforms/discord/commands/thread.d.ts.map +1 -0
  63. package/dist/src/platforms/discord/commands/thread.js +67 -0
  64. package/dist/src/platforms/discord/commands/thread.js.map +1 -0
  65. package/dist/src/platforms/discord/commands/user.d.ts.map +1 -1
  66. package/dist/src/platforms/discord/commands/user.js +14 -5
  67. package/dist/src/platforms/discord/commands/user.js.map +1 -1
  68. package/dist/src/platforms/discord/credential-manager.d.ts +13 -13
  69. package/dist/src/platforms/discord/credential-manager.d.ts.map +1 -1
  70. package/dist/src/platforms/discord/credential-manager.js +28 -22
  71. package/dist/src/platforms/discord/credential-manager.js.map +1 -1
  72. package/dist/src/platforms/discord/super-properties.d.ts +4 -0
  73. package/dist/src/platforms/discord/super-properties.d.ts.map +1 -0
  74. package/dist/src/platforms/discord/super-properties.js +50 -0
  75. package/dist/src/platforms/discord/super-properties.js.map +1 -0
  76. package/dist/src/platforms/discord/token-extractor.d.ts +6 -1
  77. package/dist/src/platforms/discord/token-extractor.d.ts.map +1 -1
  78. package/dist/src/platforms/discord/token-extractor.js +27 -2
  79. package/dist/src/platforms/discord/token-extractor.js.map +1 -1
  80. package/dist/src/platforms/discord/types.d.ts +389 -22
  81. package/dist/src/platforms/discord/types.d.ts.map +1 -1
  82. package/dist/src/platforms/discord/types.js +46 -4
  83. package/dist/src/platforms/discord/types.js.map +1 -1
  84. package/dist/src/platforms/slack/cli.d.ts.map +1 -1
  85. package/dist/src/platforms/slack/cli.js +7 -2
  86. package/dist/src/platforms/slack/cli.js.map +1 -1
  87. package/dist/src/platforms/slack/client.d.ts +19 -1
  88. package/dist/src/platforms/slack/client.d.ts.map +1 -1
  89. package/dist/src/platforms/slack/client.js +134 -0
  90. package/dist/src/platforms/slack/client.js.map +1 -1
  91. package/dist/src/platforms/slack/commands/activity.d.ts +3 -0
  92. package/dist/src/platforms/slack/commands/activity.d.ts.map +1 -0
  93. package/dist/src/platforms/slack/commands/activity.js +40 -0
  94. package/dist/src/platforms/slack/commands/activity.js.map +1 -0
  95. package/dist/src/platforms/slack/commands/drafts.d.ts +3 -0
  96. package/dist/src/platforms/slack/commands/drafts.d.ts.map +1 -0
  97. package/dist/src/platforms/slack/commands/drafts.js +45 -0
  98. package/dist/src/platforms/slack/commands/drafts.js.map +1 -0
  99. package/dist/src/platforms/slack/commands/index.d.ts +5 -0
  100. package/dist/src/platforms/slack/commands/index.d.ts.map +1 -1
  101. package/dist/src/platforms/slack/commands/index.js +5 -0
  102. package/dist/src/platforms/slack/commands/index.js.map +1 -1
  103. package/dist/src/platforms/slack/commands/saved.d.ts +3 -0
  104. package/dist/src/platforms/slack/commands/saved.d.ts.map +1 -0
  105. package/dist/src/platforms/slack/commands/saved.js +54 -0
  106. package/dist/src/platforms/slack/commands/saved.js.map +1 -0
  107. package/dist/src/platforms/slack/commands/sections.d.ts +3 -0
  108. package/dist/src/platforms/slack/commands/sections.d.ts.map +1 -0
  109. package/dist/src/platforms/slack/commands/sections.js +37 -0
  110. package/dist/src/platforms/slack/commands/sections.js.map +1 -0
  111. package/dist/src/platforms/slack/commands/unread.d.ts +12 -0
  112. package/dist/src/platforms/slack/commands/unread.d.ts.map +1 -0
  113. package/dist/src/platforms/slack/commands/unread.js +89 -0
  114. package/dist/src/platforms/slack/commands/unread.js.map +1 -0
  115. package/dist/src/platforms/slack/credential-manager.d.ts.map +1 -1
  116. package/dist/src/platforms/slack/credential-manager.js +20 -6
  117. package/dist/src/platforms/slack/credential-manager.js.map +1 -1
  118. package/dist/src/platforms/slack/token-extractor.d.ts +8 -1
  119. package/dist/src/platforms/slack/token-extractor.d.ts.map +1 -1
  120. package/dist/src/platforms/slack/token-extractor.js +83 -11
  121. package/dist/src/platforms/slack/token-extractor.js.map +1 -1
  122. package/dist/src/platforms/slack/types.d.ts +52 -0
  123. package/dist/src/platforms/slack/types.d.ts.map +1 -1
  124. package/dist/src/platforms/slack/types.js.map +1 -1
  125. package/dist/src/platforms/teams/cli.d.ts.map +1 -0
  126. package/dist/{cli.js → src/platforms/teams/cli.js} +11 -10
  127. package/dist/src/platforms/teams/cli.js.map +1 -0
  128. package/dist/src/platforms/teams/client.d.ts +32 -0
  129. package/dist/src/platforms/teams/client.d.ts.map +1 -0
  130. package/dist/src/platforms/teams/client.js +202 -0
  131. package/dist/src/platforms/teams/client.js.map +1 -0
  132. package/dist/src/platforms/teams/commands/auth.d.ts +14 -0
  133. package/dist/src/platforms/teams/commands/auth.d.ts.map +1 -0
  134. package/dist/src/platforms/teams/commands/auth.js +176 -0
  135. package/dist/src/platforms/teams/commands/auth.js.map +1 -0
  136. package/dist/src/platforms/teams/commands/channel.d.ts +13 -0
  137. package/dist/src/platforms/teams/commands/channel.d.ts.map +1 -0
  138. package/dist/src/platforms/teams/commands/channel.js +97 -0
  139. package/dist/src/platforms/teams/commands/channel.js.map +1 -0
  140. package/dist/src/platforms/teams/commands/file.d.ts +12 -0
  141. package/dist/src/platforms/teams/commands/file.d.ts.map +1 -0
  142. package/dist/src/platforms/teams/commands/file.js +104 -0
  143. package/dist/src/platforms/teams/commands/file.js.map +1 -0
  144. package/dist/{commands → src/platforms/teams/commands}/index.d.ts +5 -2
  145. package/dist/src/platforms/teams/commands/index.d.ts.map +1 -0
  146. package/dist/{commands → src/platforms/teams/commands}/index.js +5 -2
  147. package/dist/src/platforms/teams/commands/index.js.map +1 -0
  148. package/dist/src/platforms/teams/commands/message.d.ts +17 -0
  149. package/dist/src/platforms/teams/commands/message.d.ts.map +1 -0
  150. package/dist/src/platforms/teams/commands/message.js +133 -0
  151. package/dist/src/platforms/teams/commands/message.js.map +1 -0
  152. package/dist/src/platforms/teams/commands/reaction.d.ts +9 -0
  153. package/dist/src/platforms/teams/commands/reaction.d.ts.map +1 -0
  154. package/dist/src/platforms/teams/commands/reaction.js +68 -0
  155. package/dist/src/platforms/teams/commands/reaction.js.map +1 -0
  156. package/dist/src/platforms/teams/commands/snapshot.d.ts +10 -0
  157. package/dist/src/platforms/teams/commands/snapshot.d.ts.map +1 -0
  158. package/dist/src/platforms/teams/commands/snapshot.js +85 -0
  159. package/dist/src/platforms/teams/commands/snapshot.js.map +1 -0
  160. package/dist/src/platforms/teams/commands/team.d.ts +18 -0
  161. package/dist/src/platforms/teams/commands/team.d.ts.map +1 -0
  162. package/dist/src/platforms/teams/commands/team.js +130 -0
  163. package/dist/src/platforms/teams/commands/team.js.map +1 -0
  164. package/dist/src/platforms/teams/commands/user.d.ts.map +1 -0
  165. package/dist/src/platforms/teams/commands/user.js +88 -0
  166. package/dist/src/platforms/teams/commands/user.js.map +1 -0
  167. package/dist/src/platforms/teams/credential-manager.d.ts +18 -0
  168. package/dist/src/platforms/teams/credential-manager.d.ts.map +1 -0
  169. package/dist/src/platforms/teams/credential-manager.js +81 -0
  170. package/dist/src/platforms/teams/credential-manager.js.map +1 -0
  171. package/dist/src/platforms/teams/index.d.ts +4 -0
  172. package/dist/src/platforms/teams/index.d.ts.map +1 -0
  173. package/dist/src/platforms/teams/index.js +6 -0
  174. package/dist/src/platforms/teams/index.js.map +1 -0
  175. package/dist/src/platforms/teams/token-extractor.d.ts +41 -0
  176. package/dist/src/platforms/teams/token-extractor.d.ts.map +1 -0
  177. package/dist/src/platforms/teams/token-extractor.js +360 -0
  178. package/dist/src/platforms/teams/token-extractor.js.map +1 -0
  179. package/dist/src/platforms/teams/types.d.ts +209 -0
  180. package/dist/src/platforms/teams/types.d.ts.map +1 -0
  181. package/dist/src/platforms/teams/types.js +65 -0
  182. package/dist/src/platforms/teams/types.js.map +1 -0
  183. package/dist/src/shared/utils/derived-key-cache.d.ts +20 -0
  184. package/dist/src/shared/utils/derived-key-cache.d.ts.map +1 -0
  185. package/dist/src/shared/utils/derived-key-cache.js +52 -0
  186. package/dist/src/shared/utils/derived-key-cache.js.map +1 -0
  187. package/docs/README.md +113 -0
  188. package/docs/biome.json +8 -0
  189. package/docs/bun.lock +1426 -0
  190. package/docs/content/docs/agent-skills.mdx +98 -0
  191. package/docs/content/docs/index.mdx +124 -0
  192. package/docs/{discord.md → content/docs/integrations/discord.mdx} +46 -21
  193. package/docs/content/docs/integrations/meta.json +5 -0
  194. package/docs/{slack.md → content/docs/integrations/slack.mdx} +5 -4
  195. package/docs/content/docs/integrations/teams.mdx +322 -0
  196. package/docs/content/docs/meta.json +8 -0
  197. package/docs/content/docs/quick-start.mdx +103 -0
  198. package/docs/eslint.config.mjs +30 -0
  199. package/docs/next.config.ts +10 -0
  200. package/docs/package.json +42 -0
  201. package/docs/postcss.config.mjs +7 -0
  202. package/docs/public/file.svg +1 -0
  203. package/docs/public/globe.svg +1 -0
  204. package/docs/public/next.svg +1 -0
  205. package/docs/public/vercel.svg +1 -0
  206. package/docs/public/window.svg +1 -0
  207. package/docs/source.config.ts +11 -0
  208. package/docs/src/app/api/search/route.ts +4 -0
  209. package/docs/src/app/docs/[[...slug]]/page.tsx +53 -0
  210. package/docs/src/app/docs/layout.tsx +21 -0
  211. package/docs/src/app/globals.css +10 -0
  212. package/docs/src/app/icon.png +0 -0
  213. package/docs/src/app/layout.config.tsx +7 -0
  214. package/docs/src/app/layout.tsx +35 -0
  215. package/docs/src/app/page.tsx +489 -0
  216. package/docs/src/lib/source.ts +15 -0
  217. package/docs/src/mdx-components.tsx +18 -0
  218. package/docs/tsconfig.json +36 -0
  219. package/e2e/README.md +256 -0
  220. package/e2e/config.ts +51 -0
  221. package/e2e/discord.e2e.test.ts +252 -0
  222. package/e2e/helpers.ts +107 -0
  223. package/e2e/slack.e2e.test.ts +309 -0
  224. package/package.json +8 -4
  225. package/scripts/postbuild.ts +15 -0
  226. package/skills/agent-discord/SKILL.md +96 -30
  227. package/skills/agent-discord/references/authentication.md +27 -27
  228. package/skills/agent-discord/references/common-patterns.md +15 -15
  229. package/skills/agent-discord/templates/post-message.sh +6 -6
  230. package/skills/agent-discord/templates/{guild-summary.sh → server-summary.sh} +20 -20
  231. package/skills/agent-slack/SKILL.md +53 -0
  232. package/skills/agent-teams/SKILL.md +292 -0
  233. package/skills/agent-teams/references/authentication.md +375 -0
  234. package/skills/agent-teams/references/common-patterns.md +596 -0
  235. package/skills/agent-teams/templates/monitor-channel.sh +239 -0
  236. package/skills/agent-teams/templates/post-message.sh +224 -0
  237. package/skills/agent-teams/templates/team-summary.sh +210 -0
  238. package/src/cli.ts +4 -0
  239. package/src/platforms/discord/cli.ts +3 -3
  240. package/src/platforms/discord/client.test.ts +15 -15
  241. package/src/platforms/discord/client.ts +163 -17
  242. package/src/platforms/discord/commands/auth.test.ts +53 -37
  243. package/src/platforms/discord/commands/auth.ts +16 -16
  244. package/src/platforms/discord/commands/channel.test.ts +58 -46
  245. package/src/platforms/discord/commands/channel.ts +4 -4
  246. package/src/platforms/discord/commands/dm.test.ts +146 -0
  247. package/src/platforms/discord/commands/dm.ts +85 -0
  248. package/src/platforms/discord/commands/file.test.ts +40 -53
  249. package/src/platforms/discord/commands/friend.test.ts +134 -0
  250. package/src/platforms/discord/commands/friend.ts +45 -0
  251. package/src/platforms/discord/commands/index.ts +1 -1
  252. package/src/platforms/discord/commands/member.test.ts +98 -0
  253. package/src/platforms/discord/commands/member.ts +59 -0
  254. package/src/platforms/discord/commands/mention.test.ts +129 -0
  255. package/src/platforms/discord/commands/mention.ts +59 -0
  256. package/src/platforms/discord/commands/message.test.ts +139 -44
  257. package/src/platforms/discord/commands/message.ts +134 -1
  258. package/src/platforms/discord/commands/note.test.ts +84 -0
  259. package/src/platforms/discord/commands/note.ts +73 -0
  260. package/src/platforms/discord/commands/profile.test.ts +107 -0
  261. package/src/platforms/discord/commands/profile.ts +55 -0
  262. package/src/platforms/discord/commands/reaction.test.ts +54 -42
  263. package/src/platforms/discord/commands/server.test.ts +137 -0
  264. package/src/platforms/discord/commands/{guild.ts → server.ts} +31 -31
  265. package/src/platforms/discord/commands/snapshot.test.ts +1 -1
  266. package/src/platforms/discord/commands/snapshot.ts +10 -10
  267. package/src/platforms/discord/commands/thread.test.ts +121 -0
  268. package/src/platforms/discord/commands/thread.ts +92 -0
  269. package/src/platforms/discord/commands/user.test.ts +8 -8
  270. package/src/platforms/discord/commands/user.ts +16 -5
  271. package/src/platforms/discord/credential-manager.test.ts +137 -136
  272. package/src/platforms/discord/credential-manager.ts +35 -26
  273. package/src/platforms/discord/super-properties.ts +55 -0
  274. package/src/platforms/discord/token-extractor.test.ts +133 -383
  275. package/src/platforms/discord/token-extractor.ts +37 -3
  276. package/src/platforms/discord/types.test.ts +8 -8
  277. package/src/platforms/discord/types.ts +144 -8
  278. package/{tests → src/platforms/slack}/cli.test.ts +3 -3
  279. package/src/platforms/slack/cli.ts +10 -0
  280. package/{tests/slack-client.test.ts → src/platforms/slack/client.test.ts} +1 -1
  281. package/src/platforms/slack/client.ts +172 -1
  282. package/src/platforms/slack/commands/activity.test.ts +147 -0
  283. package/src/platforms/slack/commands/activity.ts +65 -0
  284. package/{tests → src/platforms/slack}/commands/auth.test.ts +25 -13
  285. package/{tests → src/platforms/slack}/commands/channel.test.ts +2 -2
  286. package/src/platforms/slack/commands/drafts.test.ts +136 -0
  287. package/src/platforms/slack/commands/drafts.ts +62 -0
  288. package/{tests → src/platforms/slack}/commands/file.test.ts +2 -2
  289. package/src/platforms/slack/commands/index.ts +5 -0
  290. package/{tests → src/platforms/slack}/commands/message.test.ts +2 -2
  291. package/{tests → src/platforms/slack}/commands/reaction.test.ts +1 -1
  292. package/src/platforms/slack/commands/saved.test.ts +140 -0
  293. package/src/platforms/slack/commands/saved.ts +71 -0
  294. package/src/platforms/slack/commands/sections.test.ts +80 -0
  295. package/src/platforms/slack/commands/sections.ts +50 -0
  296. package/{tests → src/platforms/slack}/commands/snapshot.test.ts +117 -105
  297. package/src/platforms/slack/commands/unread.test.ts +139 -0
  298. package/src/platforms/slack/commands/unread.ts +129 -0
  299. package/{tests → src/platforms/slack}/commands/user.test.ts +3 -3
  300. package/{tests → src/platforms/slack}/commands/workspace.test.ts +44 -95
  301. package/{tests → src/platforms/slack}/credential-manager.test.ts +2 -2
  302. package/src/platforms/slack/credential-manager.ts +22 -7
  303. package/src/platforms/slack/token-extractor-node-test.ts +40 -0
  304. package/src/platforms/slack/token-extractor-node.test.ts +10 -0
  305. package/src/platforms/slack/token-extractor.ts +93 -12
  306. package/{tests → src/platforms/slack}/types.test.ts +1 -1
  307. package/src/platforms/slack/types.ts +58 -0
  308. package/src/platforms/teams/cli.ts +36 -0
  309. package/src/platforms/teams/client.test.ts +500 -0
  310. package/src/platforms/teams/client.ts +365 -0
  311. package/src/platforms/teams/commands/auth.test.ts +99 -0
  312. package/src/platforms/teams/commands/auth.ts +232 -0
  313. package/src/platforms/teams/commands/channel.test.ts +147 -0
  314. package/src/platforms/teams/commands/channel.ts +129 -0
  315. package/src/platforms/teams/commands/file.test.ts +88 -0
  316. package/src/platforms/teams/commands/file.ts +144 -0
  317. package/src/platforms/teams/commands/index.ts +12 -0
  318. package/src/platforms/teams/commands/message.test.ts +110 -0
  319. package/src/platforms/teams/commands/message.ts +188 -0
  320. package/src/platforms/teams/commands/reaction.test.ts +87 -0
  321. package/src/platforms/teams/commands/reaction.ts +104 -0
  322. package/src/platforms/teams/commands/snapshot.test.ts +35 -0
  323. package/src/platforms/teams/commands/snapshot.ts +115 -0
  324. package/src/platforms/teams/commands/team.test.ts +157 -0
  325. package/src/platforms/teams/commands/team.ts +164 -0
  326. package/src/platforms/teams/commands/user.test.ts +83 -0
  327. package/src/platforms/teams/commands/user.ts +112 -0
  328. package/src/platforms/teams/credential-manager.test.ts +178 -0
  329. package/src/platforms/teams/credential-manager.ts +92 -0
  330. package/src/platforms/teams/index.ts +5 -0
  331. package/src/platforms/teams/token-extractor.test.ts +429 -0
  332. package/src/platforms/teams/token-extractor.ts +490 -0
  333. package/src/platforms/teams/types.test.ts +226 -0
  334. package/src/platforms/teams/types.ts +140 -0
  335. package/src/shared/utils/derived-key-cache.test.ts +136 -0
  336. package/src/shared/utils/derived-key-cache.ts +63 -0
  337. package/tsconfig.json +1 -1
  338. package/dist/cli.d.ts.map +0 -1
  339. package/dist/cli.js.map +0 -1
  340. package/dist/commands/auth.d.ts +0 -3
  341. package/dist/commands/auth.d.ts.map +0 -1
  342. package/dist/commands/auth.js +0 -140
  343. package/dist/commands/auth.js.map +0 -1
  344. package/dist/commands/channel.d.ts +0 -3
  345. package/dist/commands/channel.d.ts.map +0 -1
  346. package/dist/commands/channel.js +0 -118
  347. package/dist/commands/channel.js.map +0 -1
  348. package/dist/commands/file.d.ts +0 -3
  349. package/dist/commands/file.d.ts.map +0 -1
  350. package/dist/commands/file.js +0 -113
  351. package/dist/commands/file.js.map +0 -1
  352. package/dist/commands/index.d.ts.map +0 -1
  353. package/dist/commands/index.js.map +0 -1
  354. package/dist/commands/message.d.ts +0 -3
  355. package/dist/commands/message.d.ts.map +0 -1
  356. package/dist/commands/message.js +0 -214
  357. package/dist/commands/message.js.map +0 -1
  358. package/dist/commands/reaction.d.ts +0 -3
  359. package/dist/commands/reaction.d.ts.map +0 -1
  360. package/dist/commands/reaction.js +0 -100
  361. package/dist/commands/reaction.js.map +0 -1
  362. package/dist/commands/snapshot.d.ts +0 -3
  363. package/dist/commands/snapshot.d.ts.map +0 -1
  364. package/dist/commands/snapshot.js +0 -88
  365. package/dist/commands/snapshot.js.map +0 -1
  366. package/dist/commands/user.d.ts.map +0 -1
  367. package/dist/commands/user.js +0 -96
  368. package/dist/commands/user.js.map +0 -1
  369. package/dist/commands/workspace.d.ts +0 -3
  370. package/dist/commands/workspace.d.ts.map +0 -1
  371. package/dist/commands/workspace.js +0 -89
  372. package/dist/commands/workspace.js.map +0 -1
  373. package/dist/lib/credential-manager.d.ts +0 -13
  374. package/dist/lib/credential-manager.d.ts.map +0 -1
  375. package/dist/lib/credential-manager.js +0 -58
  376. package/dist/lib/credential-manager.js.map +0 -1
  377. package/dist/lib/index.d.ts +0 -3
  378. package/dist/lib/index.d.ts.map +0 -1
  379. package/dist/lib/index.js +0 -3
  380. package/dist/lib/index.js.map +0 -1
  381. package/dist/lib/ref-manager.d.ts +0 -26
  382. package/dist/lib/ref-manager.d.ts.map +0 -1
  383. package/dist/lib/ref-manager.js +0 -92
  384. package/dist/lib/ref-manager.js.map +0 -1
  385. package/dist/lib/slack-client.d.ts +0 -37
  386. package/dist/lib/slack-client.d.ts.map +0 -1
  387. package/dist/lib/slack-client.js +0 -379
  388. package/dist/lib/slack-client.js.map +0 -1
  389. package/dist/lib/token-extractor.d.ts +0 -28
  390. package/dist/lib/token-extractor.d.ts.map +0 -1
  391. package/dist/lib/token-extractor.js +0 -401
  392. package/dist/lib/token-extractor.js.map +0 -1
  393. package/dist/src/platforms/discord/client.test.d.ts +0 -2
  394. package/dist/src/platforms/discord/client.test.d.ts.map +0 -1
  395. package/dist/src/platforms/discord/client.test.js +0 -367
  396. package/dist/src/platforms/discord/client.test.js.map +0 -1
  397. package/dist/src/platforms/discord/commands/auth.test.d.ts +0 -2
  398. package/dist/src/platforms/discord/commands/auth.test.d.ts.map +0 -1
  399. package/dist/src/platforms/discord/commands/auth.test.js +0 -65
  400. package/dist/src/platforms/discord/commands/auth.test.js.map +0 -1
  401. package/dist/src/platforms/discord/commands/channel.test.d.ts +0 -2
  402. package/dist/src/platforms/discord/commands/channel.test.d.ts.map +0 -1
  403. package/dist/src/platforms/discord/commands/channel.test.js +0 -136
  404. package/dist/src/platforms/discord/commands/channel.test.js.map +0 -1
  405. package/dist/src/platforms/discord/commands/file.test.d.ts +0 -2
  406. package/dist/src/platforms/discord/commands/file.test.d.ts.map +0 -1
  407. package/dist/src/platforms/discord/commands/file.test.js +0 -83
  408. package/dist/src/platforms/discord/commands/file.test.js.map +0 -1
  409. package/dist/src/platforms/discord/commands/guild.test.d.ts +0 -2
  410. package/dist/src/platforms/discord/commands/guild.test.d.ts.map +0 -1
  411. package/dist/src/platforms/discord/commands/guild.test.js +0 -100
  412. package/dist/src/platforms/discord/commands/guild.test.js.map +0 -1
  413. package/dist/src/platforms/discord/commands/message.test.d.ts +0 -2
  414. package/dist/src/platforms/discord/commands/message.test.d.ts.map +0 -1
  415. package/dist/src/platforms/discord/commands/message.test.js +0 -91
  416. package/dist/src/platforms/discord/commands/message.test.js.map +0 -1
  417. package/dist/src/platforms/discord/commands/reaction.test.d.ts +0 -2
  418. package/dist/src/platforms/discord/commands/reaction.test.d.ts.map +0 -1
  419. package/dist/src/platforms/discord/commands/reaction.test.js +0 -115
  420. package/dist/src/platforms/discord/commands/reaction.test.js.map +0 -1
  421. package/dist/src/platforms/discord/commands/snapshot.test.d.ts +0 -2
  422. package/dist/src/platforms/discord/commands/snapshot.test.d.ts.map +0 -1
  423. package/dist/src/platforms/discord/commands/snapshot.test.js +0 -25
  424. package/dist/src/platforms/discord/commands/snapshot.test.js.map +0 -1
  425. package/dist/src/platforms/discord/commands/user.test.d.ts +0 -2
  426. package/dist/src/platforms/discord/commands/user.test.d.ts.map +0 -1
  427. package/dist/src/platforms/discord/commands/user.test.js +0 -103
  428. package/dist/src/platforms/discord/commands/user.test.js.map +0 -1
  429. package/dist/src/platforms/discord/credential-manager.test.d.ts +0 -2
  430. package/dist/src/platforms/discord/credential-manager.test.d.ts.map +0 -1
  431. package/dist/src/platforms/discord/credential-manager.test.js +0 -136
  432. package/dist/src/platforms/discord/credential-manager.test.js.map +0 -1
  433. package/dist/src/platforms/discord/token-extractor.test.d.ts +0 -2
  434. package/dist/src/platforms/discord/token-extractor.test.d.ts.map +0 -1
  435. package/dist/src/platforms/discord/token-extractor.test.js +0 -789
  436. package/dist/src/platforms/discord/token-extractor.test.js.map +0 -1
  437. package/dist/src/platforms/discord/types.test.d.ts +0 -2
  438. package/dist/src/platforms/discord/types.test.d.ts.map +0 -1
  439. package/dist/src/platforms/discord/types.test.js +0 -211
  440. package/dist/src/platforms/discord/types.test.js.map +0 -1
  441. package/dist/src/shared/utils/concurrency.test.d.ts +0 -2
  442. package/dist/src/shared/utils/concurrency.test.d.ts.map +0 -1
  443. package/dist/src/shared/utils/concurrency.test.js +0 -39
  444. package/dist/src/shared/utils/concurrency.test.js.map +0 -1
  445. package/dist/tests/cli.test.d.ts +0 -2
  446. package/dist/tests/cli.test.d.ts.map +0 -1
  447. package/dist/tests/cli.test.js +0 -83
  448. package/dist/tests/cli.test.js.map +0 -1
  449. package/dist/tests/commands/.test-slack-data/Local Storage/leveldb/CURRENT +0 -1
  450. package/dist/tests/commands/.test-slack-data/Local Storage/leveldb/LOCK +0 -0
  451. package/dist/tests/commands/.test-slack-data/Local Storage/leveldb/LOG +0 -3
  452. package/dist/tests/commands/.test-slack-data/Local Storage/leveldb/LOG.old +0 -1
  453. package/dist/tests/commands/.test-slack-data/Local Storage/leveldb/MANIFEST-000004 +0 -0
  454. package/dist/tests/commands/auth.test.d.ts +0 -2
  455. package/dist/tests/commands/auth.test.d.ts.map +0 -1
  456. package/dist/tests/commands/auth.test.js +0 -304
  457. package/dist/tests/commands/auth.test.js.map +0 -1
  458. package/dist/tests/commands/channel.test.d.ts +0 -2
  459. package/dist/tests/commands/channel.test.d.ts.map +0 -1
  460. package/dist/tests/commands/channel.test.js +0 -166
  461. package/dist/tests/commands/channel.test.js.map +0 -1
  462. package/dist/tests/commands/file.test.d.ts +0 -2
  463. package/dist/tests/commands/file.test.d.ts.map +0 -1
  464. package/dist/tests/commands/file.test.js +0 -175
  465. package/dist/tests/commands/file.test.js.map +0 -1
  466. package/dist/tests/commands/message.test.d.ts +0 -2
  467. package/dist/tests/commands/message.test.d.ts.map +0 -1
  468. package/dist/tests/commands/message.test.js +0 -293
  469. package/dist/tests/commands/message.test.js.map +0 -1
  470. package/dist/tests/commands/reaction.test.d.ts +0 -2
  471. package/dist/tests/commands/reaction.test.d.ts.map +0 -1
  472. package/dist/tests/commands/reaction.test.js +0 -84
  473. package/dist/tests/commands/reaction.test.js.map +0 -1
  474. package/dist/tests/commands/snapshot.test.d.ts +0 -2
  475. package/dist/tests/commands/snapshot.test.d.ts.map +0 -1
  476. package/dist/tests/commands/snapshot.test.js +0 -280
  477. package/dist/tests/commands/snapshot.test.js.map +0 -1
  478. package/dist/tests/commands/user.test.d.ts +0 -2
  479. package/dist/tests/commands/user.test.d.ts.map +0 -1
  480. package/dist/tests/commands/user.test.js +0 -117
  481. package/dist/tests/commands/user.test.js.map +0 -1
  482. package/dist/tests/commands/workspace.test.d.ts +0 -2
  483. package/dist/tests/commands/workspace.test.d.ts.map +0 -1
  484. package/dist/tests/commands/workspace.test.js +0 -453
  485. package/dist/tests/commands/workspace.test.js.map +0 -1
  486. package/dist/tests/credential-manager.test.d.ts +0 -2
  487. package/dist/tests/credential-manager.test.d.ts.map +0 -1
  488. package/dist/tests/credential-manager.test.js +0 -199
  489. package/dist/tests/credential-manager.test.js.map +0 -1
  490. package/dist/tests/slack-client.test.d.ts +0 -2
  491. package/dist/tests/slack-client.test.d.ts.map +0 -1
  492. package/dist/tests/slack-client.test.js +0 -741
  493. package/dist/tests/slack-client.test.js.map +0 -1
  494. package/dist/tests/types.test.d.ts +0 -2
  495. package/dist/tests/types.test.d.ts.map +0 -1
  496. package/dist/tests/types.test.js +0 -215
  497. package/dist/tests/types.test.js.map +0 -1
  498. package/dist/types/index.d.ts +0 -369
  499. package/dist/types/index.d.ts.map +0 -1
  500. package/dist/types/index.js +0 -92
  501. package/dist/types/index.js.map +0 -1
  502. package/dist/utils/error-handler.d.ts +0 -2
  503. package/dist/utils/error-handler.d.ts.map +0 -1
  504. package/dist/utils/error-handler.js +0 -5
  505. package/dist/utils/error-handler.js.map +0 -1
  506. package/dist/utils/output.d.ts +0 -2
  507. package/dist/utils/output.d.ts.map +0 -1
  508. package/dist/utils/output.js +0 -4
  509. package/dist/utils/output.js.map +0 -1
  510. package/src/platforms/discord/commands/guild.test.ts +0 -117
  511. /package/dist/{cli.d.ts → src/platforms/teams/cli.d.ts} +0 -0
  512. /package/dist/{commands → src/platforms/teams/commands}/user.d.ts +0 -0
@@ -0,0 +1,309 @@
1
+ import { describe, test, expect, beforeAll, afterEach } from 'bun:test'
2
+ import {
3
+ runCLI, parseJSON, generateTestId, createTestMessage,
4
+ deleteTestMessage, waitForRateLimit, cleanupMessages
5
+ } from './helpers'
6
+ import {
7
+ SLACK_TEST_CHANNEL, SLACK_TEST_CHANNEL_ID,
8
+ validateSlackEnvironment
9
+ } from './config'
10
+
11
+ // Track messages created during tests for cleanup
12
+ let testMessages: string[] = []
13
+
14
+ describe('Slack E2E Tests', () => {
15
+ beforeAll(async () => {
16
+ // Validate we're in the correct workspace
17
+ await validateSlackEnvironment()
18
+ })
19
+
20
+ afterEach(async () => {
21
+ if (testMessages.length > 0) {
22
+ await cleanupMessages('slack', SLACK_TEST_CHANNEL_ID, testMessages)
23
+ testMessages = []
24
+ }
25
+ await waitForRateLimit()
26
+ })
27
+
28
+ describe('auth', () => {
29
+ test('auth status returns authenticated workspace info', async () => {
30
+ const result = await runCLI('slack', ['auth', 'status'])
31
+ expect(result.exitCode).toBe(0)
32
+
33
+ const data = parseJSON<{ workspace_id: string; workspace_name: string }>(result.stdout)
34
+ expect(data).not.toBeNull()
35
+ expect(data?.workspace_id).toBeTruthy()
36
+ expect(data?.workspace_name).toBeTruthy()
37
+ })
38
+ })
39
+
40
+ describe('workspace', () => {
41
+ test('workspace list returns array', async () => {
42
+ const result = await runCLI('slack', ['workspace', 'list'])
43
+ expect(result.exitCode).toBe(0)
44
+
45
+ const data = parseJSON<Array<{ id: string; name: string }>>(result.stdout)
46
+ expect(Array.isArray(data)).toBe(true)
47
+ })
48
+
49
+ test('workspace current returns current workspace', async () => {
50
+ const result = await runCLI('slack', ['workspace', 'current'])
51
+ expect(result.exitCode).toBe(0)
52
+
53
+ const data = parseJSON<{ workspace_id: string }>(result.stdout)
54
+ expect(data?.workspace_id).toBeTruthy()
55
+ })
56
+ })
57
+
58
+ describe('message', () => {
59
+ test('message send creates message and returns ts', async () => {
60
+ const testId = generateTestId()
61
+ const result = await runCLI('slack', ['message', 'send', SLACK_TEST_CHANNEL_ID, `Test message ${testId}`])
62
+ expect(result.exitCode).toBe(0)
63
+
64
+ const data = parseJSON<{ ts: string }>(result.stdout)
65
+ expect(data?.ts).toBeTruthy()
66
+
67
+ if (data?.ts) testMessages.push(data.ts)
68
+ })
69
+
70
+ test('message list returns messages array', async () => {
71
+ const result = await runCLI('slack', ['message', 'list', SLACK_TEST_CHANNEL_ID, '--limit', '5'])
72
+ expect(result.exitCode).toBe(0)
73
+
74
+ const data = parseJSON<Array<{ ts: string }>>(result.stdout)
75
+ expect(Array.isArray(data)).toBe(true)
76
+ })
77
+
78
+ test('message get retrieves specific message', async () => {
79
+ const testId = generateTestId()
80
+ const { id: ts } = await createTestMessage('slack', SLACK_TEST_CHANNEL_ID, `Get test ${testId}`)
81
+ testMessages.push(ts)
82
+
83
+ await waitForRateLimit()
84
+
85
+ const result = await runCLI('slack', ['message', 'get', SLACK_TEST_CHANNEL_ID, ts])
86
+ expect(result.exitCode).toBe(0)
87
+
88
+ const data = parseJSON<{ text: string }>(result.stdout)
89
+ expect(data?.text).toContain(testId)
90
+ })
91
+
92
+ test('message update modifies message', async () => {
93
+ const testId = generateTestId()
94
+ const { id: ts } = await createTestMessage('slack', SLACK_TEST_CHANNEL_ID, `Original ${testId}`)
95
+ testMessages.push(ts)
96
+
97
+ await waitForRateLimit()
98
+
99
+ const result = await runCLI('slack', ['message', 'update', SLACK_TEST_CHANNEL_ID, ts, `Updated ${testId}`])
100
+ expect(result.exitCode).toBe(0)
101
+
102
+ await waitForRateLimit()
103
+ const getResult = await runCLI('slack', ['message', 'get', SLACK_TEST_CHANNEL_ID, ts])
104
+ const data = parseJSON<{ text: string }>(getResult.stdout)
105
+ expect(data?.text).toContain('Updated')
106
+ })
107
+
108
+ test('message search finds messages', async () => {
109
+ const result = await runCLI('slack', ['message', 'search', 'test', '--limit', '5'])
110
+ expect(result.exitCode).toBe(0)
111
+
112
+ const data = parseJSON<Array<{ ts: string }>>(result.stdout)
113
+ expect(Array.isArray(data)).toBe(true)
114
+ })
115
+
116
+ test('message send with thread creates reply', async () => {
117
+ const testId = generateTestId()
118
+ const { id: parentTs } = await createTestMessage('slack', SLACK_TEST_CHANNEL_ID, `Parent ${testId}`)
119
+ testMessages.push(parentTs)
120
+
121
+ await waitForRateLimit()
122
+
123
+ const result = await runCLI('slack', ['message', 'send', SLACK_TEST_CHANNEL_ID, `Reply ${testId}`, '--thread', parentTs])
124
+ expect(result.exitCode).toBe(0)
125
+
126
+ const data = parseJSON<{ ts: string; thread_ts: string }>(result.stdout)
127
+ expect(data?.thread_ts).toBe(parentTs)
128
+
129
+ if (data?.ts) testMessages.push(data.ts)
130
+ }, 30000)
131
+
132
+ test('message replies gets thread replies', async () => {
133
+ const testId = generateTestId()
134
+ const { id: parentTs } = await createTestMessage('slack', SLACK_TEST_CHANNEL_ID, `Thread parent ${testId}`)
135
+ testMessages.push(parentTs)
136
+
137
+ await waitForRateLimit()
138
+
139
+ await runCLI('slack', ['message', 'send', SLACK_TEST_CHANNEL_ID, `Thread reply ${testId}`, '--thread', parentTs])
140
+
141
+ await waitForRateLimit()
142
+
143
+ const result = await runCLI('slack', ['message', 'replies', SLACK_TEST_CHANNEL_ID, parentTs])
144
+ expect(result.exitCode).toBe(0)
145
+
146
+ const data = parseJSON<Array<{ ts: string }>>(result.stdout)
147
+ expect(Array.isArray(data)).toBe(true)
148
+ expect(data?.length).toBeGreaterThanOrEqual(1)
149
+ })
150
+
151
+ test('message delete removes message', async () => {
152
+ const testId = generateTestId()
153
+ const { id: ts } = await createTestMessage('slack', SLACK_TEST_CHANNEL_ID, `Delete me ${testId}`)
154
+
155
+ await waitForRateLimit()
156
+
157
+ const result = await runCLI('slack', ['message', 'delete', SLACK_TEST_CHANNEL_ID, ts, '--force'])
158
+ expect(result.exitCode).toBe(0)
159
+ })
160
+ })
161
+
162
+ describe('channel', () => {
163
+ test('channel list returns channels array', async () => {
164
+ const result = await runCLI('slack', ['channel', 'list'])
165
+ expect(result.exitCode).toBe(0)
166
+
167
+ const data = parseJSON<Array<{ id: string; name: string }>>(result.stdout)
168
+ expect(Array.isArray(data)).toBe(true)
169
+ expect(data?.length).toBeGreaterThan(0)
170
+ })
171
+
172
+ test('channel list --type public filters channels', async () => {
173
+ const result = await runCLI('slack', ['channel', 'list', '--type', 'public'])
174
+ expect(result.exitCode).toBe(0)
175
+
176
+ const data = parseJSON<Array<{ is_private: boolean }>>(result.stdout)
177
+ expect(Array.isArray(data)).toBe(true)
178
+ })
179
+
180
+ test('channel info returns channel details', async () => {
181
+ const result = await runCLI('slack', ['channel', 'info', SLACK_TEST_CHANNEL_ID])
182
+ expect(result.exitCode).toBe(0)
183
+
184
+ const data = parseJSON<{ id: string; name: string }>(result.stdout)
185
+ expect(data?.id).toBeTruthy()
186
+ expect(data?.name).toBe('e2e-test')
187
+ })
188
+ })
189
+
190
+ describe('user', () => {
191
+ test('user list returns users array', async () => {
192
+ const result = await runCLI('slack', ['user', 'list'])
193
+ expect(result.exitCode).toBe(0)
194
+
195
+ const data = parseJSON<Array<{ id: string }>>(result.stdout)
196
+ expect(Array.isArray(data)).toBe(true)
197
+ })
198
+
199
+ test('user me returns current user', async () => {
200
+ const result = await runCLI('slack', ['user', 'me'])
201
+ expect(result.exitCode).toBe(0)
202
+
203
+ const data = parseJSON<{ id: string; name: string }>(result.stdout)
204
+ expect(data?.id).toBeTruthy()
205
+ expect(data?.name).toBeTruthy()
206
+ })
207
+
208
+ test('user info returns user details', async () => {
209
+ // First get current user ID
210
+ const meResult = await runCLI('slack', ['user', 'me'])
211
+ const me = parseJSON<{ id: string }>(meResult.stdout)
212
+ expect(me?.id).toBeTruthy()
213
+
214
+ await waitForRateLimit()
215
+
216
+ // Get user info
217
+ const result = await runCLI('slack', ['user', 'info', me!.id])
218
+ expect(result.exitCode).toBe(0)
219
+
220
+ const data = parseJSON<{ id: string }>(result.stdout)
221
+ expect(data?.id).toBe(me?.id)
222
+ })
223
+ })
224
+
225
+ describe('reaction', () => {
226
+ test('reaction add/list/remove lifecycle', async () => {
227
+ const testId = generateTestId()
228
+ const { id: ts } = await createTestMessage('slack', SLACK_TEST_CHANNEL_ID, `Reaction test ${testId}`)
229
+ testMessages.push(ts)
230
+
231
+ await waitForRateLimit(2000)
232
+
233
+ const addResult = await runCLI('slack', ['reaction', 'add', SLACK_TEST_CHANNEL_ID, ts, 'thumbsup'])
234
+ expect(addResult.exitCode).toBe(0)
235
+
236
+ await waitForRateLimit(2000)
237
+
238
+ const listResult = await runCLI('slack', ['reaction', 'list', SLACK_TEST_CHANNEL_ID, ts])
239
+ expect(listResult.exitCode).toBe(0)
240
+
241
+ const data = parseJSON<{ reactions: Array<{ name: string }> }>(listResult.stdout)
242
+ expect(Array.isArray(data?.reactions)).toBe(true)
243
+
244
+ await waitForRateLimit(2000)
245
+
246
+ const removeResult = await runCLI('slack', ['reaction', 'remove', SLACK_TEST_CHANNEL_ID, ts, 'thumbsup'])
247
+ expect(removeResult.exitCode).toBe(0)
248
+ }, 15000)
249
+ })
250
+
251
+ describe('file', () => {
252
+ test('file list returns files array', async () => {
253
+ const result = await runCLI('slack', ['file', 'list'])
254
+ expect(result.exitCode).toBe(0)
255
+
256
+ const data = parseJSON<Array<{ id: string }>>(result.stdout)
257
+ expect(Array.isArray(data)).toBe(true)
258
+ })
259
+
260
+ test.skip('file upload uploads file', async () => {
261
+ const testId = generateTestId()
262
+ const testFilePath = `/tmp/slack-e2e-${testId}.txt`
263
+ await Bun.write(testFilePath, `E2E test file content ${testId}`)
264
+
265
+ try {
266
+ const result = await runCLI('slack', ['file', 'upload', SLACK_TEST_CHANNEL_ID, testFilePath])
267
+ expect(result.exitCode).toBe(0)
268
+
269
+ const data = parseJSON<{ id: string }>(result.stdout)
270
+ expect(data?.id).toBeTruthy()
271
+
272
+ if (data?.id) {
273
+ await waitForRateLimit()
274
+ const infoResult = await runCLI('slack', ['file', 'info', data.id])
275
+ expect(infoResult.exitCode).toBe(0)
276
+ }
277
+ } finally {
278
+ await Bun.$`rm -f ${testFilePath}`.quiet()
279
+ }
280
+ })
281
+ })
282
+
283
+ describe('snapshot', () => {
284
+ test('snapshot returns full workspace data', async () => {
285
+ const result = await runCLI('slack', ['snapshot', '--limit', '2'])
286
+ expect(result.exitCode).toBe(0)
287
+
288
+ const data = parseJSON<{ channels: unknown[]; users: unknown[] }>(result.stdout)
289
+ expect(data?.channels).toBeDefined()
290
+ expect(data?.users).toBeDefined()
291
+ })
292
+
293
+ test('snapshot --channels-only returns only channels', async () => {
294
+ const result = await runCLI('slack', ['snapshot', '--channels-only'])
295
+ expect(result.exitCode).toBe(0)
296
+
297
+ const data = parseJSON<{ channels: unknown[] }>(result.stdout)
298
+ expect(data?.channels).toBeDefined()
299
+ })
300
+
301
+ test('snapshot --users-only returns only users', async () => {
302
+ const result = await runCLI('slack', ['snapshot', '--users-only'])
303
+ expect(result.exitCode).toBe(0)
304
+
305
+ const data = parseJSON<{ users: unknown[] }>(result.stdout)
306
+ expect(data?.users).toBeDefined()
307
+ })
308
+ })
309
+ })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-messenger",
3
- "version": "1.0.0",
3
+ "version": "1.2.0",
4
4
  "description": "Multi-platform messaging CLI for AI agents (Slack, Discord, Teams)",
5
5
  "type": "module",
6
6
  "module": "dist/cli.js",
@@ -9,11 +9,14 @@
9
9
  "agent-messenger": "./src/cli.ts",
10
10
  "amsg": "./src/cli.ts",
11
11
  "agent-slack": "./src/platforms/slack/cli.ts",
12
- "agent-discord": "./src/platforms/discord/cli.ts"
12
+ "agent-discord": "./src/platforms/discord/cli.ts",
13
+ "agent-teams": "./src/platforms/teams/cli.ts"
13
14
  },
14
15
  "scripts": {
15
- "build": "tsc && sed -i '' '1s|#!/usr/bin/env bun|#!/usr/bin/env node|' dist/cli.js",
16
- "test": "bun test",
16
+ "build": "tsc",
17
+ "postbuild": "bun scripts/postbuild.ts",
18
+ "test": "bun test src/",
19
+ "test:e2e": "bun test e2e/",
17
20
  "typecheck": "tsc --noEmit",
18
21
  "lint": "biome check .",
19
22
  "format": "biome format --write .",
@@ -32,6 +35,7 @@
32
35
  "@types/better-sqlite3": "^7.6.8",
33
36
  "@types/bun": "latest",
34
37
  "@types/node": "^20.10.6",
38
+ "tsx": "^4.21.0",
35
39
  "typescript": "^5.9.3"
36
40
  }
37
41
  }
@@ -0,0 +1,15 @@
1
+ import { readFileSync, writeFileSync } from 'node:fs'
2
+
3
+ const cliFiles = [
4
+ 'dist/src/cli.js',
5
+ 'dist/src/platforms/slack/cli.js',
6
+ 'dist/src/platforms/discord/cli.js',
7
+ ]
8
+
9
+ for (const file of cliFiles) {
10
+ const content = readFileSync(file, 'utf8')
11
+ const updated = content.replace('#!/usr/bin/env bun', '#!/usr/bin/env node')
12
+ writeFileSync(file, updated)
13
+ }
14
+
15
+ console.log(`Updated shebang in ${cliFiles.length} CLI files`)
@@ -6,7 +6,7 @@ allowed-tools: Bash(agent-discord:*)
6
6
 
7
7
  # Agent Discord
8
8
 
9
- A TypeScript CLI tool that enables AI agents and humans to interact with Discord servers through a simple command interface. Features seamless token extraction from the Discord desktop app and multi-guild support.
9
+ A TypeScript CLI tool that enables AI agents and humans to interact with Discord servers through a simple command interface. Features seamless token extraction from the Discord desktop app and multi-server support.
10
10
 
11
11
  ## Quick Start
12
12
 
@@ -14,7 +14,7 @@ A TypeScript CLI tool that enables AI agents and humans to interact with Discord
14
14
  # Extract credentials from Discord desktop app (zero-config)
15
15
  agent-discord auth extract
16
16
 
17
- # Get guild snapshot
17
+ # Get server snapshot
18
18
  agent-discord snapshot
19
19
 
20
20
  # Send a message
@@ -42,20 +42,20 @@ This command:
42
42
  - Auto-detects your platform (macOS/Linux/Windows)
43
43
  - Extracts user token from Discord desktop app's LevelDB storage
44
44
  - Validates token against Discord API before saving
45
- - Discovers ALL joined guilds (servers)
45
+ - Discovers ALL joined servers
46
46
  - Stores credentials securely in `~/.config/agent-messenger/`
47
47
 
48
- ### Multi-Guild Support
48
+ ### Multi-Server Support
49
49
 
50
50
  ```bash
51
- # List all available guilds
52
- agent-discord guild list
51
+ # List all available servers
52
+ agent-discord server list
53
53
 
54
- # Switch to a different guild
55
- agent-discord guild switch <guild-id>
54
+ # Switch to a different server
55
+ agent-discord server switch <server-id>
56
56
 
57
- # Show current guild
58
- agent-discord guild current
57
+ # Show current server
58
+ agent-discord server current
59
59
 
60
60
  # Check auth status
61
61
  agent-discord auth status
@@ -80,12 +80,15 @@ agent-discord message get 1234567890123456789 9876543210987654321
80
80
 
81
81
  # Delete a message
82
82
  agent-discord message delete <channel-id> <message-id> --force
83
+
84
+ # Acknowledge/mark a message as read
85
+ agent-discord message ack <channel-id> <message-id>
83
86
  ```
84
87
 
85
88
  ### Channel Commands
86
89
 
87
90
  ```bash
88
- # List channels in current guild (text channels only)
91
+ # List channels in current server (text channels only)
89
92
  agent-discord channel list
90
93
 
91
94
  # Get channel info
@@ -96,26 +99,26 @@ agent-discord channel info 1234567890123456789
96
99
  agent-discord channel history <channel-id> --limit 100
97
100
  ```
98
101
 
99
- ### Guild Commands
102
+ ### Server Commands
100
103
 
101
104
  ```bash
102
- # List all guilds
103
- agent-discord guild list
105
+ # List all servers
106
+ agent-discord server list
104
107
 
105
- # Get guild info
106
- agent-discord guild info <guild-id>
108
+ # Get server info
109
+ agent-discord server info <server-id>
107
110
 
108
- # Switch active guild
109
- agent-discord guild switch <guild-id>
111
+ # Switch active server
112
+ agent-discord server switch <server-id>
110
113
 
111
- # Show current guild
112
- agent-discord guild current
114
+ # Show current server
115
+ agent-discord server current
113
116
  ```
114
117
 
115
118
  ### User Commands
116
119
 
117
120
  ```bash
118
- # List guild members
121
+ # List server members
119
122
  agent-discord user list
120
123
 
121
124
  # Get user info
@@ -125,6 +128,69 @@ agent-discord user info <user-id>
125
128
  agent-discord user me
126
129
  ```
127
130
 
131
+ ### DM Commands
132
+
133
+ ```bash
134
+ # List DM channels
135
+ agent-discord dm list
136
+
137
+ # Create a DM channel with a user
138
+ agent-discord dm create <user-id>
139
+ ```
140
+
141
+ ### Mention Commands
142
+
143
+ ```bash
144
+ # List recent mentions
145
+ agent-discord mention list
146
+ agent-discord mention list --limit 50
147
+ agent-discord mention list --guild <server-id>
148
+ ```
149
+
150
+ ### Friend Commands
151
+
152
+ ```bash
153
+ # List all relationships (friends, blocked, pending requests)
154
+ agent-discord friend list
155
+ agent-discord friend list --pretty
156
+ ```
157
+
158
+ ### Note Commands
159
+
160
+ ```bash
161
+ # Get note for a user
162
+ agent-discord note get <user-id>
163
+
164
+ # Set note for a user
165
+ agent-discord note set <user-id> "Note content"
166
+ ```
167
+
168
+ ### Profile Commands
169
+
170
+ ```bash
171
+ # Get detailed user profile
172
+ agent-discord profile get <user-id>
173
+ ```
174
+
175
+ ### Member Commands
176
+
177
+ ```bash
178
+ # Search guild members
179
+ agent-discord member search <guild-id> <query>
180
+ agent-discord member search 1234567890123456789 "john" --limit 20
181
+ ```
182
+
183
+ ### Thread Commands
184
+
185
+ ```bash
186
+ # Create a thread in a channel
187
+ agent-discord thread create <channel-id> <name>
188
+ agent-discord thread create 1234567890123456789 "Discussion" --auto-archive-duration 1440
189
+
190
+ # Archive a thread
191
+ agent-discord thread archive <thread-id>
192
+ ```
193
+
128
194
  ### Reaction Commands
129
195
 
130
196
  ```bash
@@ -155,7 +221,7 @@ agent-discord file info <channel-id> <file-id>
155
221
 
156
222
  ### Snapshot Command
157
223
 
158
- Get comprehensive guild state for AI agents:
224
+ Get comprehensive server state for AI agents:
159
225
 
160
226
  ```bash
161
227
  # Full snapshot
@@ -170,7 +236,7 @@ agent-discord snapshot --limit 10
170
236
  ```
171
237
 
172
238
  Returns JSON with:
173
- - Guild metadata (id, name)
239
+ - Server metadata (id, name)
174
240
  - Channels (id, name, type, topic)
175
241
  - Recent messages (id, content, author, timestamp)
176
242
  - Members (id, username, global_name)
@@ -202,7 +268,7 @@ agent-discord channel list --pretty
202
268
 
203
269
  | Feature | Discord | Slack |
204
270
  |---------|---------|-------|
205
- | Server terminology | Guild | Workspace |
271
+ | Server terminology | Server | Workspace |
206
272
  | Channel identifiers | Snowflake IDs | Channel name or ID |
207
273
  | Message identifiers | Snowflake IDs | Timestamps (ts) |
208
274
  | Threads | Thread ID field | Thread timestamp |
@@ -219,7 +285,7 @@ See `references/common-patterns.md` for typical AI agent workflows.
219
285
  See `templates/` directory for runnable examples:
220
286
  - `post-message.sh` - Send messages with error handling
221
287
  - `monitor-channel.sh` - Monitor channel for new messages
222
- - `guild-summary.sh` - Generate guild summary
288
+ - `server-summary.sh` - Generate server summary
223
289
 
224
290
  ## Error Handling
225
291
 
@@ -233,7 +299,7 @@ All commands return consistent error format:
233
299
 
234
300
  Common errors:
235
301
  - `Not authenticated`: No valid token - run `auth extract`
236
- - `No current guild set`: Run `guild switch <id>` first
302
+ - `No current server set`: Run `server switch <id>` first
237
303
  - `Message not found`: Invalid message ID
238
304
  - `Unknown Channel`: Invalid channel ID
239
305
 
@@ -245,11 +311,11 @@ Format:
245
311
  ```json
246
312
  {
247
313
  "token": "user_token_here",
248
- "current_guild": "1234567890123456789",
249
- "guilds": {
314
+ "current_server": "1234567890123456789",
315
+ "servers": {
250
316
  "1234567890123456789": {
251
- "guild_id": "1234567890123456789",
252
- "guild_name": "My Server"
317
+ "server_id": "1234567890123456789",
318
+ "server_name": "My Server"
253
319
  }
254
320
  }
255
321
  }