agent-messenger 1.0.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 (394) hide show
  1. package/.claude/commands/release.md +92 -0
  2. package/.claude-plugin/README.md +144 -0
  3. package/.claude-plugin/marketplace.json +37 -0
  4. package/.claude-plugin/plugin.json +17 -0
  5. package/.github/workflows/ci.yml +30 -0
  6. package/CLAUDE.md +106 -0
  7. package/CONTRIBUTING.md +131 -0
  8. package/README.md +140 -0
  9. package/biome.json +34 -0
  10. package/bun.lock +252 -0
  11. package/dist/cli.d.ts +5 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +21 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/commands/auth.d.ts +3 -0
  16. package/dist/commands/auth.d.ts.map +1 -0
  17. package/dist/commands/auth.js +140 -0
  18. package/dist/commands/auth.js.map +1 -0
  19. package/dist/commands/channel.d.ts +3 -0
  20. package/dist/commands/channel.d.ts.map +1 -0
  21. package/dist/commands/channel.js +118 -0
  22. package/dist/commands/channel.js.map +1 -0
  23. package/dist/commands/file.d.ts +3 -0
  24. package/dist/commands/file.d.ts.map +1 -0
  25. package/dist/commands/file.js +113 -0
  26. package/dist/commands/file.js.map +1 -0
  27. package/dist/commands/index.d.ts +9 -0
  28. package/dist/commands/index.d.ts.map +1 -0
  29. package/dist/commands/index.js +9 -0
  30. package/dist/commands/index.js.map +1 -0
  31. package/dist/commands/message.d.ts +3 -0
  32. package/dist/commands/message.d.ts.map +1 -0
  33. package/dist/commands/message.js +214 -0
  34. package/dist/commands/message.js.map +1 -0
  35. package/dist/commands/reaction.d.ts +3 -0
  36. package/dist/commands/reaction.d.ts.map +1 -0
  37. package/dist/commands/reaction.js +100 -0
  38. package/dist/commands/reaction.js.map +1 -0
  39. package/dist/commands/snapshot.d.ts +3 -0
  40. package/dist/commands/snapshot.d.ts.map +1 -0
  41. package/dist/commands/snapshot.js +88 -0
  42. package/dist/commands/snapshot.js.map +1 -0
  43. package/dist/commands/user.d.ts +3 -0
  44. package/dist/commands/user.d.ts.map +1 -0
  45. package/dist/commands/user.js +96 -0
  46. package/dist/commands/user.js.map +1 -0
  47. package/dist/commands/workspace.d.ts +3 -0
  48. package/dist/commands/workspace.d.ts.map +1 -0
  49. package/dist/commands/workspace.js +89 -0
  50. package/dist/commands/workspace.js.map +1 -0
  51. package/dist/lib/credential-manager.d.ts +13 -0
  52. package/dist/lib/credential-manager.d.ts.map +1 -0
  53. package/dist/lib/credential-manager.js +58 -0
  54. package/dist/lib/credential-manager.js.map +1 -0
  55. package/dist/lib/index.d.ts +3 -0
  56. package/dist/lib/index.d.ts.map +1 -0
  57. package/dist/lib/index.js +3 -0
  58. package/dist/lib/index.js.map +1 -0
  59. package/dist/lib/ref-manager.d.ts +26 -0
  60. package/dist/lib/ref-manager.d.ts.map +1 -0
  61. package/dist/lib/ref-manager.js +92 -0
  62. package/dist/lib/ref-manager.js.map +1 -0
  63. package/dist/lib/slack-client.d.ts +37 -0
  64. package/dist/lib/slack-client.d.ts.map +1 -0
  65. package/dist/lib/slack-client.js +379 -0
  66. package/dist/lib/slack-client.js.map +1 -0
  67. package/dist/lib/token-extractor.d.ts +28 -0
  68. package/dist/lib/token-extractor.d.ts.map +1 -0
  69. package/dist/lib/token-extractor.js +401 -0
  70. package/dist/lib/token-extractor.js.map +1 -0
  71. package/dist/package.json +37 -0
  72. package/dist/src/cli.d.ts +5 -0
  73. package/dist/src/cli.d.ts.map +1 -0
  74. package/dist/src/cli.js +22 -0
  75. package/dist/src/cli.js.map +1 -0
  76. package/dist/src/platforms/discord/cli.d.ts +5 -0
  77. package/dist/src/platforms/discord/cli.d.ts.map +1 -0
  78. package/dist/src/platforms/discord/cli.js +22 -0
  79. package/dist/src/platforms/discord/cli.js.map +1 -0
  80. package/dist/src/platforms/discord/client.d.ts +34 -0
  81. package/dist/src/platforms/discord/client.d.ts.map +1 -0
  82. package/dist/src/platforms/discord/client.js +187 -0
  83. package/dist/src/platforms/discord/client.js.map +1 -0
  84. package/dist/src/platforms/discord/client.test.d.ts +2 -0
  85. package/dist/src/platforms/discord/client.test.d.ts.map +1 -0
  86. package/dist/src/platforms/discord/client.test.js +367 -0
  87. package/dist/src/platforms/discord/client.test.js.map +1 -0
  88. package/dist/src/platforms/discord/commands/auth.d.ts +13 -0
  89. package/dist/src/platforms/discord/commands/auth.d.ts.map +1 -0
  90. package/dist/src/platforms/discord/commands/auth.js +155 -0
  91. package/dist/src/platforms/discord/commands/auth.js.map +1 -0
  92. package/dist/src/platforms/discord/commands/auth.test.d.ts +2 -0
  93. package/dist/src/platforms/discord/commands/auth.test.d.ts.map +1 -0
  94. package/dist/src/platforms/discord/commands/auth.test.js +65 -0
  95. package/dist/src/platforms/discord/commands/auth.test.js.map +1 -0
  96. package/dist/src/platforms/discord/commands/channel.d.ts +13 -0
  97. package/dist/src/platforms/discord/commands/channel.d.ts.map +1 -0
  98. package/dist/src/platforms/discord/commands/channel.js +99 -0
  99. package/dist/src/platforms/discord/commands/channel.js.map +1 -0
  100. package/dist/src/platforms/discord/commands/channel.test.d.ts +2 -0
  101. package/dist/src/platforms/discord/commands/channel.test.d.ts.map +1 -0
  102. package/dist/src/platforms/discord/commands/channel.test.js +136 -0
  103. package/dist/src/platforms/discord/commands/channel.test.js.map +1 -0
  104. package/dist/src/platforms/discord/commands/file.d.ts +13 -0
  105. package/dist/src/platforms/discord/commands/file.d.ts.map +1 -0
  106. package/dist/src/platforms/discord/commands/file.js +99 -0
  107. package/dist/src/platforms/discord/commands/file.js.map +1 -0
  108. package/dist/src/platforms/discord/commands/file.test.d.ts +2 -0
  109. package/dist/src/platforms/discord/commands/file.test.d.ts.map +1 -0
  110. package/dist/src/platforms/discord/commands/file.test.js +83 -0
  111. package/dist/src/platforms/discord/commands/file.test.js.map +1 -0
  112. package/dist/src/platforms/discord/commands/guild.d.ts +15 -0
  113. package/dist/src/platforms/discord/commands/guild.d.ts.map +1 -0
  114. package/dist/src/platforms/discord/commands/guild.js +102 -0
  115. package/dist/src/platforms/discord/commands/guild.js.map +1 -0
  116. package/dist/src/platforms/discord/commands/guild.test.d.ts +2 -0
  117. package/dist/src/platforms/discord/commands/guild.test.d.ts.map +1 -0
  118. package/dist/src/platforms/discord/commands/guild.test.js +100 -0
  119. package/dist/src/platforms/discord/commands/guild.test.js.map +1 -0
  120. package/dist/src/platforms/discord/commands/index.d.ts +9 -0
  121. package/dist/src/platforms/discord/commands/index.d.ts.map +1 -0
  122. package/dist/src/platforms/discord/commands/index.js +9 -0
  123. package/dist/src/platforms/discord/commands/index.js.map +1 -0
  124. package/dist/src/platforms/discord/commands/message.d.ts +17 -0
  125. package/dist/src/platforms/discord/commands/message.d.ts.map +1 -0
  126. package/dist/src/platforms/discord/commands/message.js +131 -0
  127. package/dist/src/platforms/discord/commands/message.js.map +1 -0
  128. package/dist/src/platforms/discord/commands/message.test.d.ts +2 -0
  129. package/dist/src/platforms/discord/commands/message.test.d.ts.map +1 -0
  130. package/dist/src/platforms/discord/commands/message.test.js +91 -0
  131. package/dist/src/platforms/discord/commands/message.test.js.map +1 -0
  132. package/dist/src/platforms/discord/commands/reaction.d.ts +12 -0
  133. package/dist/src/platforms/discord/commands/reaction.d.ts.map +1 -0
  134. package/dist/src/platforms/discord/commands/reaction.js +99 -0
  135. package/dist/src/platforms/discord/commands/reaction.js.map +1 -0
  136. package/dist/src/platforms/discord/commands/reaction.test.d.ts +2 -0
  137. package/dist/src/platforms/discord/commands/reaction.test.d.ts.map +1 -0
  138. package/dist/src/platforms/discord/commands/reaction.test.js +115 -0
  139. package/dist/src/platforms/discord/commands/reaction.test.js.map +1 -0
  140. package/dist/src/platforms/discord/commands/snapshot.d.ts +9 -0
  141. package/dist/src/platforms/discord/commands/snapshot.d.ts.map +1 -0
  142. package/dist/src/platforms/discord/commands/snapshot.js +80 -0
  143. package/dist/src/platforms/discord/commands/snapshot.js.map +1 -0
  144. package/dist/src/platforms/discord/commands/snapshot.test.d.ts +2 -0
  145. package/dist/src/platforms/discord/commands/snapshot.test.d.ts.map +1 -0
  146. package/dist/src/platforms/discord/commands/snapshot.test.js +25 -0
  147. package/dist/src/platforms/discord/commands/snapshot.test.js.map +1 -0
  148. package/dist/src/platforms/discord/commands/user.d.ts +3 -0
  149. package/dist/src/platforms/discord/commands/user.d.ts.map +1 -0
  150. package/dist/src/platforms/discord/commands/user.js +94 -0
  151. package/dist/src/platforms/discord/commands/user.js.map +1 -0
  152. package/dist/src/platforms/discord/commands/user.test.d.ts +2 -0
  153. package/dist/src/platforms/discord/commands/user.test.d.ts.map +1 -0
  154. package/dist/src/platforms/discord/commands/user.test.js +103 -0
  155. package/dist/src/platforms/discord/commands/user.test.js.map +1 -0
  156. package/dist/src/platforms/discord/credential-manager.d.ts +33 -0
  157. package/dist/src/platforms/discord/credential-manager.d.ts.map +1 -0
  158. package/dist/src/platforms/discord/credential-manager.js +73 -0
  159. package/dist/src/platforms/discord/credential-manager.js.map +1 -0
  160. package/dist/src/platforms/discord/credential-manager.test.d.ts +2 -0
  161. package/dist/src/platforms/discord/credential-manager.test.d.ts.map +1 -0
  162. package/dist/src/platforms/discord/credential-manager.test.js +136 -0
  163. package/dist/src/platforms/discord/credential-manager.test.js.map +1 -0
  164. package/dist/src/platforms/discord/token-extractor.d.ts +55 -0
  165. package/dist/src/platforms/discord/token-extractor.d.ts.map +1 -0
  166. package/dist/src/platforms/discord/token-extractor.js +462 -0
  167. package/dist/src/platforms/discord/token-extractor.js.map +1 -0
  168. package/dist/src/platforms/discord/token-extractor.test.d.ts +2 -0
  169. package/dist/src/platforms/discord/token-extractor.test.d.ts.map +1 -0
  170. package/dist/src/platforms/discord/token-extractor.test.js +789 -0
  171. package/dist/src/platforms/discord/token-extractor.test.js.map +1 -0
  172. package/dist/src/platforms/discord/types.d.ts +251 -0
  173. package/dist/src/platforms/discord/types.d.ts.map +1 -0
  174. package/dist/src/platforms/discord/types.js +74 -0
  175. package/dist/src/platforms/discord/types.js.map +1 -0
  176. package/dist/src/platforms/discord/types.test.d.ts +2 -0
  177. package/dist/src/platforms/discord/types.test.d.ts.map +1 -0
  178. package/dist/src/platforms/discord/types.test.js +211 -0
  179. package/dist/src/platforms/discord/types.test.js.map +1 -0
  180. package/dist/src/platforms/slack/cli.d.ts +5 -0
  181. package/dist/src/platforms/slack/cli.d.ts.map +1 -0
  182. package/dist/src/platforms/slack/cli.js +22 -0
  183. package/dist/src/platforms/slack/cli.js.map +1 -0
  184. package/dist/src/platforms/slack/client.d.ts +47 -0
  185. package/dist/src/platforms/slack/client.d.ts.map +1 -0
  186. package/dist/src/platforms/slack/client.js +412 -0
  187. package/dist/src/platforms/slack/client.js.map +1 -0
  188. package/dist/src/platforms/slack/commands/auth.d.ts +3 -0
  189. package/dist/src/platforms/slack/commands/auth.d.ts.map +1 -0
  190. package/dist/src/platforms/slack/commands/auth.js +156 -0
  191. package/dist/src/platforms/slack/commands/auth.js.map +1 -0
  192. package/dist/src/platforms/slack/commands/channel.d.ts +3 -0
  193. package/dist/src/platforms/slack/commands/channel.d.ts.map +1 -0
  194. package/dist/src/platforms/slack/commands/channel.js +118 -0
  195. package/dist/src/platforms/slack/commands/channel.js.map +1 -0
  196. package/dist/src/platforms/slack/commands/file.d.ts +3 -0
  197. package/dist/src/platforms/slack/commands/file.d.ts.map +1 -0
  198. package/dist/src/platforms/slack/commands/file.js +113 -0
  199. package/dist/src/platforms/slack/commands/file.js.map +1 -0
  200. package/dist/src/platforms/slack/commands/index.d.ts +9 -0
  201. package/dist/src/platforms/slack/commands/index.d.ts.map +1 -0
  202. package/dist/src/platforms/slack/commands/index.js +9 -0
  203. package/dist/src/platforms/slack/commands/index.js.map +1 -0
  204. package/dist/src/platforms/slack/commands/message.d.ts +3 -0
  205. package/dist/src/platforms/slack/commands/message.d.ts.map +1 -0
  206. package/dist/src/platforms/slack/commands/message.js +263 -0
  207. package/dist/src/platforms/slack/commands/message.js.map +1 -0
  208. package/dist/src/platforms/slack/commands/reaction.d.ts +3 -0
  209. package/dist/src/platforms/slack/commands/reaction.d.ts.map +1 -0
  210. package/dist/src/platforms/slack/commands/reaction.js +100 -0
  211. package/dist/src/platforms/slack/commands/reaction.js.map +1 -0
  212. package/dist/src/platforms/slack/commands/snapshot.d.ts +3 -0
  213. package/dist/src/platforms/slack/commands/snapshot.d.ts.map +1 -0
  214. package/dist/src/platforms/slack/commands/snapshot.js +87 -0
  215. package/dist/src/platforms/slack/commands/snapshot.js.map +1 -0
  216. package/dist/src/platforms/slack/commands/user.d.ts +3 -0
  217. package/dist/src/platforms/slack/commands/user.d.ts.map +1 -0
  218. package/dist/src/platforms/slack/commands/user.js +96 -0
  219. package/dist/src/platforms/slack/commands/user.js.map +1 -0
  220. package/dist/src/platforms/slack/commands/workspace.d.ts +3 -0
  221. package/dist/src/platforms/slack/commands/workspace.d.ts.map +1 -0
  222. package/dist/src/platforms/slack/commands/workspace.js +89 -0
  223. package/dist/src/platforms/slack/commands/workspace.js.map +1 -0
  224. package/dist/src/platforms/slack/credential-manager.d.ts +13 -0
  225. package/dist/src/platforms/slack/credential-manager.d.ts.map +1 -0
  226. package/dist/src/platforms/slack/credential-manager.js +58 -0
  227. package/dist/src/platforms/slack/credential-manager.js.map +1 -0
  228. package/dist/src/platforms/slack/index.d.ts +3 -0
  229. package/dist/src/platforms/slack/index.d.ts.map +1 -0
  230. package/dist/src/platforms/slack/index.js +3 -0
  231. package/dist/src/platforms/slack/index.js.map +1 -0
  232. package/dist/src/platforms/slack/token-extractor.d.ts +28 -0
  233. package/dist/src/platforms/slack/token-extractor.d.ts.map +1 -0
  234. package/dist/src/platforms/slack/token-extractor.js +401 -0
  235. package/dist/src/platforms/slack/token-extractor.js.map +1 -0
  236. package/dist/src/platforms/slack/types.d.ts +369 -0
  237. package/dist/src/platforms/slack/types.d.ts.map +1 -0
  238. package/dist/src/platforms/slack/types.js +92 -0
  239. package/dist/src/platforms/slack/types.js.map +1 -0
  240. package/dist/src/shared/utils/concurrency.d.ts +2 -0
  241. package/dist/src/shared/utils/concurrency.d.ts.map +1 -0
  242. package/dist/src/shared/utils/concurrency.js +14 -0
  243. package/dist/src/shared/utils/concurrency.js.map +1 -0
  244. package/dist/src/shared/utils/concurrency.test.d.ts +2 -0
  245. package/dist/src/shared/utils/concurrency.test.d.ts.map +1 -0
  246. package/dist/src/shared/utils/concurrency.test.js +39 -0
  247. package/dist/src/shared/utils/concurrency.test.js.map +1 -0
  248. package/dist/src/shared/utils/error-handler.d.ts +2 -0
  249. package/dist/src/shared/utils/error-handler.d.ts.map +1 -0
  250. package/dist/src/shared/utils/error-handler.js +5 -0
  251. package/dist/src/shared/utils/error-handler.js.map +1 -0
  252. package/dist/src/shared/utils/output.d.ts +2 -0
  253. package/dist/src/shared/utils/output.d.ts.map +1 -0
  254. package/dist/src/shared/utils/output.js +4 -0
  255. package/dist/src/shared/utils/output.js.map +1 -0
  256. package/dist/tests/cli.test.d.ts +2 -0
  257. package/dist/tests/cli.test.d.ts.map +1 -0
  258. package/dist/tests/cli.test.js +83 -0
  259. package/dist/tests/cli.test.js.map +1 -0
  260. package/dist/tests/commands/.test-slack-data/Local Storage/leveldb/CURRENT +1 -0
  261. package/dist/tests/commands/.test-slack-data/Local Storage/leveldb/LOCK +0 -0
  262. package/dist/tests/commands/.test-slack-data/Local Storage/leveldb/LOG +3 -0
  263. package/dist/tests/commands/.test-slack-data/Local Storage/leveldb/LOG.old +1 -0
  264. package/dist/tests/commands/.test-slack-data/Local Storage/leveldb/MANIFEST-000004 +0 -0
  265. package/dist/tests/commands/auth.test.d.ts +2 -0
  266. package/dist/tests/commands/auth.test.d.ts.map +1 -0
  267. package/dist/tests/commands/auth.test.js +304 -0
  268. package/dist/tests/commands/auth.test.js.map +1 -0
  269. package/dist/tests/commands/channel.test.d.ts +2 -0
  270. package/dist/tests/commands/channel.test.d.ts.map +1 -0
  271. package/dist/tests/commands/channel.test.js +166 -0
  272. package/dist/tests/commands/channel.test.js.map +1 -0
  273. package/dist/tests/commands/file.test.d.ts +2 -0
  274. package/dist/tests/commands/file.test.d.ts.map +1 -0
  275. package/dist/tests/commands/file.test.js +175 -0
  276. package/dist/tests/commands/file.test.js.map +1 -0
  277. package/dist/tests/commands/message.test.d.ts +2 -0
  278. package/dist/tests/commands/message.test.d.ts.map +1 -0
  279. package/dist/tests/commands/message.test.js +293 -0
  280. package/dist/tests/commands/message.test.js.map +1 -0
  281. package/dist/tests/commands/reaction.test.d.ts +2 -0
  282. package/dist/tests/commands/reaction.test.d.ts.map +1 -0
  283. package/dist/tests/commands/reaction.test.js +84 -0
  284. package/dist/tests/commands/reaction.test.js.map +1 -0
  285. package/dist/tests/commands/snapshot.test.d.ts +2 -0
  286. package/dist/tests/commands/snapshot.test.d.ts.map +1 -0
  287. package/dist/tests/commands/snapshot.test.js +280 -0
  288. package/dist/tests/commands/snapshot.test.js.map +1 -0
  289. package/dist/tests/commands/user.test.d.ts +2 -0
  290. package/dist/tests/commands/user.test.d.ts.map +1 -0
  291. package/dist/tests/commands/user.test.js +117 -0
  292. package/dist/tests/commands/user.test.js.map +1 -0
  293. package/dist/tests/commands/workspace.test.d.ts +2 -0
  294. package/dist/tests/commands/workspace.test.d.ts.map +1 -0
  295. package/dist/tests/commands/workspace.test.js +453 -0
  296. package/dist/tests/commands/workspace.test.js.map +1 -0
  297. package/dist/tests/credential-manager.test.d.ts +2 -0
  298. package/dist/tests/credential-manager.test.d.ts.map +1 -0
  299. package/dist/tests/credential-manager.test.js +199 -0
  300. package/dist/tests/credential-manager.test.js.map +1 -0
  301. package/dist/tests/slack-client.test.d.ts +2 -0
  302. package/dist/tests/slack-client.test.d.ts.map +1 -0
  303. package/dist/tests/slack-client.test.js +741 -0
  304. package/dist/tests/slack-client.test.js.map +1 -0
  305. package/dist/tests/types.test.d.ts +2 -0
  306. package/dist/tests/types.test.d.ts.map +1 -0
  307. package/dist/tests/types.test.js +215 -0
  308. package/dist/tests/types.test.js.map +1 -0
  309. package/dist/types/index.d.ts +369 -0
  310. package/dist/types/index.d.ts.map +1 -0
  311. package/dist/types/index.js +92 -0
  312. package/dist/types/index.js.map +1 -0
  313. package/dist/utils/error-handler.d.ts +2 -0
  314. package/dist/utils/error-handler.d.ts.map +1 -0
  315. package/dist/utils/error-handler.js +5 -0
  316. package/dist/utils/error-handler.js.map +1 -0
  317. package/dist/utils/output.d.ts +2 -0
  318. package/dist/utils/output.d.ts.map +1 -0
  319. package/dist/utils/output.js +4 -0
  320. package/dist/utils/output.js.map +1 -0
  321. package/docs/discord.md +182 -0
  322. package/docs/slack.md +160 -0
  323. package/package.json +37 -0
  324. package/skills/agent-discord/SKILL.md +273 -0
  325. package/skills/agent-discord/references/authentication.md +294 -0
  326. package/skills/agent-discord/references/common-patterns.md +455 -0
  327. package/skills/agent-discord/templates/guild-summary.sh +167 -0
  328. package/skills/agent-discord/templates/monitor-channel.sh +180 -0
  329. package/skills/agent-discord/templates/post-message.sh +173 -0
  330. package/skills/agent-slack/SKILL.md +268 -0
  331. package/skills/agent-slack/references/authentication.md +332 -0
  332. package/skills/agent-slack/references/common-patterns.md +527 -0
  333. package/skills/agent-slack/templates/monitor-channel.sh +186 -0
  334. package/skills/agent-slack/templates/post-message.sh +130 -0
  335. package/skills/agent-slack/templates/workspace-summary.sh +149 -0
  336. package/src/cli.ts +29 -0
  337. package/src/platforms/discord/cli.ts +36 -0
  338. package/src/platforms/discord/client.test.ts +456 -0
  339. package/src/platforms/discord/client.ts +281 -0
  340. package/src/platforms/discord/commands/auth.test.ts +72 -0
  341. package/src/platforms/discord/commands/auth.ts +206 -0
  342. package/src/platforms/discord/commands/channel.test.ts +153 -0
  343. package/src/platforms/discord/commands/channel.ts +127 -0
  344. package/src/platforms/discord/commands/file.test.ts +98 -0
  345. package/src/platforms/discord/commands/file.ts +134 -0
  346. package/src/platforms/discord/commands/guild.test.ts +117 -0
  347. package/src/platforms/discord/commands/guild.ts +129 -0
  348. package/src/platforms/discord/commands/index.ts +8 -0
  349. package/src/platforms/discord/commands/message.test.ts +107 -0
  350. package/src/platforms/discord/commands/message.ts +182 -0
  351. package/src/platforms/discord/commands/reaction.test.ts +123 -0
  352. package/src/platforms/discord/commands/reaction.ts +156 -0
  353. package/src/platforms/discord/commands/snapshot.test.ts +29 -0
  354. package/src/platforms/discord/commands/snapshot.ts +104 -0
  355. package/src/platforms/discord/commands/user.test.ts +115 -0
  356. package/src/platforms/discord/commands/user.ts +124 -0
  357. package/src/platforms/discord/credential-manager.test.ts +173 -0
  358. package/src/platforms/discord/credential-manager.ts +95 -0
  359. package/src/platforms/discord/token-extractor.test.ts +918 -0
  360. package/src/platforms/discord/token-extractor.ts +549 -0
  361. package/src/platforms/discord/types.test.ts +245 -0
  362. package/src/platforms/discord/types.ts +158 -0
  363. package/src/platforms/slack/cli.ts +36 -0
  364. package/src/platforms/slack/client.ts +466 -0
  365. package/src/platforms/slack/commands/auth.ts +211 -0
  366. package/src/platforms/slack/commands/channel.ts +158 -0
  367. package/src/platforms/slack/commands/file.ts +153 -0
  368. package/src/platforms/slack/commands/index.ts +8 -0
  369. package/src/platforms/slack/commands/message.ts +369 -0
  370. package/src/platforms/slack/commands/reaction.ts +166 -0
  371. package/src/platforms/slack/commands/snapshot.ts +114 -0
  372. package/src/platforms/slack/commands/user.ts +110 -0
  373. package/src/platforms/slack/commands/workspace.ts +111 -0
  374. package/src/platforms/slack/credential-manager.ts +74 -0
  375. package/src/platforms/slack/index.ts +2 -0
  376. package/src/platforms/slack/token-extractor.ts +496 -0
  377. package/src/platforms/slack/types.ts +193 -0
  378. package/src/shared/utils/concurrency.test.ts +53 -0
  379. package/src/shared/utils/concurrency.ts +20 -0
  380. package/src/shared/utils/error-handler.ts +4 -0
  381. package/src/shared/utils/output.ts +3 -0
  382. package/tests/cli.test.ts +94 -0
  383. package/tests/commands/auth.test.ts +383 -0
  384. package/tests/commands/channel.test.ts +185 -0
  385. package/tests/commands/file.test.ts +204 -0
  386. package/tests/commands/message.test.ts +344 -0
  387. package/tests/commands/reaction.test.ts +101 -0
  388. package/tests/commands/snapshot.test.ts +308 -0
  389. package/tests/commands/user.test.ts +138 -0
  390. package/tests/commands/workspace.test.ts +528 -0
  391. package/tests/credential-manager.test.ts +241 -0
  392. package/tests/slack-client.test.ts +916 -0
  393. package/tests/types.test.ts +241 -0
  394. package/tsconfig.json +36 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../../tests/cli.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ 2026/01/30-15:18:18.048363 16eb07000 Recovering log #3
2
+ 2026/01/30-15:18:18.049249 16eb07000 Delete type=0 #3
3
+ 2026/01/30-15:18:18.049332 16eb07000 Delete type=3 #2
@@ -0,0 +1 @@
1
+ 2026/01/30-15:18:18.047148 16d933000 Delete type=3 #1
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=auth.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.test.d.ts","sourceRoot":"","sources":["../../../tests/commands/auth.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,304 @@
1
+ import { afterAll, beforeEach, describe, expect, mock, test } from 'bun:test';
2
+ import { mkdirSync, rmSync } from 'node:fs';
3
+ import { homedir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ import { CredentialManager } from '../../src/platforms/slack/credential-manager';
6
+ import { TokenExtractor } from '../../src/platforms/slack/token-extractor';
7
+ const testConfigDir = join(import.meta.dir, '.test-auth-config');
8
+ const testSlackDir = join(import.meta.dir, '.test-slack-data');
9
+ describe('TokenExtractor', () => {
10
+ let extractor;
11
+ beforeEach(() => {
12
+ rmSync(testSlackDir, { recursive: true, force: true });
13
+ mkdirSync(testSlackDir, { recursive: true });
14
+ });
15
+ afterAll(() => {
16
+ rmSync(testSlackDir, { recursive: true, force: true });
17
+ });
18
+ describe('getSlackDir', () => {
19
+ test('returns correct path for darwin', () => {
20
+ // Given: Platform is darwin
21
+ extractor = new TokenExtractor('darwin');
22
+ // When: getSlackDir is called
23
+ const dir = extractor.getSlackDir();
24
+ // Then: Should return macOS path (direct or sandboxed depending on what exists)
25
+ const directPath = join(homedir(), 'Library', 'Application Support', 'Slack');
26
+ const sandboxedPath = join(homedir(), 'Library', 'Containers', 'com.tinyspeck.slackmacgap', 'Data', 'Library', 'Application Support', 'Slack');
27
+ expect([directPath, sandboxedPath]).toContain(dir);
28
+ });
29
+ test('returns correct path for linux', () => {
30
+ // Given: Platform is linux
31
+ extractor = new TokenExtractor('linux');
32
+ // When: getSlackDir is called
33
+ const dir = extractor.getSlackDir();
34
+ // Then: Should return Linux path
35
+ expect(dir).toBe(join(homedir(), '.config', 'Slack'));
36
+ });
37
+ test('returns correct path for win32', () => {
38
+ // Given: Platform is win32
39
+ extractor = new TokenExtractor('win32');
40
+ // When: getSlackDir is called
41
+ const dir = extractor.getSlackDir();
42
+ // Then: Should return Windows path
43
+ expect(dir).toContain('Slack');
44
+ });
45
+ test('throws error for unsupported platform', () => {
46
+ // Given: Platform is unsupported
47
+ // When/Then: Constructor should throw
48
+ expect(() => new TokenExtractor('freebsd')).toThrow('Unsupported platform');
49
+ });
50
+ });
51
+ describe('extract', () => {
52
+ test('throws error when Slack directory does not exist', async () => {
53
+ // Given: Slack directory does not exist
54
+ extractor = new TokenExtractor('darwin', '/nonexistent/path');
55
+ // When/Then: extract should throw
56
+ await expect(extractor.extract()).rejects.toThrow('Slack directory not found');
57
+ });
58
+ test('returns empty array when no tokens found', async () => {
59
+ // Given: Slack directory exists but has no tokens
60
+ mkdirSync(join(testSlackDir, 'storage'), { recursive: true });
61
+ extractor = new TokenExtractor('darwin', testSlackDir);
62
+ // When: extract is called
63
+ const result = await extractor.extract();
64
+ // Then: Should return empty array
65
+ expect(result).toEqual([]);
66
+ });
67
+ });
68
+ describe('extractTokensFromLevelDB', () => {
69
+ test('extracts xoxc tokens from LevelDB', async () => {
70
+ // Given: LevelDB with xoxc token data
71
+ // This test requires mocking LevelDB - we'll test the integration
72
+ extractor = new TokenExtractor('darwin', testSlackDir);
73
+ // When: extractTokensFromLevelDB is called
74
+ // Then: Should extract tokens (mocked in integration test)
75
+ expect(extractor).toBeDefined();
76
+ });
77
+ });
78
+ describe('extractCookieFromSQLite', () => {
79
+ test('extracts xoxd cookie from SQLite', async () => {
80
+ // Given: SQLite Cookies database with d cookie
81
+ // This test requires mocking SQLite - we'll test the integration
82
+ extractor = new TokenExtractor('darwin', testSlackDir);
83
+ // When: extractCookieFromSQLite is called
84
+ // Then: Should extract cookie (mocked in integration test)
85
+ expect(extractor).toBeDefined();
86
+ });
87
+ });
88
+ });
89
+ describe('Auth Commands Integration', () => {
90
+ let credManager;
91
+ beforeEach(() => {
92
+ rmSync(testConfigDir, { recursive: true, force: true });
93
+ credManager = new CredentialManager(testConfigDir);
94
+ });
95
+ afterAll(() => {
96
+ rmSync(testConfigDir, { recursive: true, force: true });
97
+ });
98
+ describe('auth extract', () => {
99
+ test('stores extracted workspaces in credential manager', async () => {
100
+ // Given: Extracted workspaces
101
+ const workspaces = [
102
+ {
103
+ workspace_id: 'T123',
104
+ workspace_name: 'acme-corp',
105
+ token: 'xoxc-123-456',
106
+ cookie: 'xoxd-abc',
107
+ },
108
+ {
109
+ workspace_id: 'T456',
110
+ workspace_name: 'side-project',
111
+ token: 'xoxc-789-012',
112
+ cookie: 'xoxd-def',
113
+ },
114
+ ];
115
+ // When: Workspaces are stored
116
+ for (const ws of workspaces) {
117
+ await credManager.setWorkspace(ws);
118
+ }
119
+ await credManager.setCurrentWorkspace('T123');
120
+ // Then: All workspaces should be retrievable
121
+ const config = await credManager.load();
122
+ expect(Object.keys(config.workspaces)).toHaveLength(2);
123
+ expect(config.current_workspace).toBe('T123');
124
+ expect(config.workspaces.T123.token).toBe('xoxc-123-456');
125
+ expect(config.workspaces.T456.token).toBe('xoxc-789-012');
126
+ });
127
+ test('sets first workspace as current if none exists', async () => {
128
+ // Given: No current workspace
129
+ const workspace = {
130
+ workspace_id: 'T789',
131
+ workspace_name: 'new-workspace',
132
+ token: 'xoxc-new',
133
+ cookie: 'xoxd-new',
134
+ };
135
+ // When: First workspace is stored
136
+ await credManager.setWorkspace(workspace);
137
+ const config = await credManager.load();
138
+ // Then: If no current, should set first as current
139
+ if (!config.current_workspace) {
140
+ await credManager.setCurrentWorkspace('T789');
141
+ }
142
+ const updated = await credManager.load();
143
+ expect(updated.current_workspace).toBe('T789');
144
+ });
145
+ });
146
+ describe('auth logout', () => {
147
+ test('removes workspace by id', async () => {
148
+ // Given: A workspace exists
149
+ await credManager.setWorkspace({
150
+ workspace_id: 'T-logout',
151
+ workspace_name: 'to-logout',
152
+ token: 'xoxc-logout',
153
+ cookie: 'xoxd-logout',
154
+ });
155
+ // When: Workspace is removed
156
+ await credManager.removeWorkspace('T-logout');
157
+ // Then: Workspace should not exist
158
+ const ws = await credManager.getWorkspace('T-logout');
159
+ expect(ws).toBeNull();
160
+ });
161
+ test('removes current workspace and clears current', async () => {
162
+ // Given: Current workspace is set
163
+ await credManager.setWorkspace({
164
+ workspace_id: 'T-current',
165
+ workspace_name: 'current',
166
+ token: 'xoxc-current',
167
+ cookie: 'xoxd-current',
168
+ });
169
+ await credManager.setCurrentWorkspace('T-current');
170
+ // When: Current workspace is removed
171
+ await credManager.removeWorkspace('T-current');
172
+ // Then: Current should be null
173
+ const config = await credManager.load();
174
+ expect(config.current_workspace).toBeNull();
175
+ });
176
+ test('throws error when workspace not found', async () => {
177
+ // Given: Workspace does not exist
178
+ // When: Trying to get non-existent workspace
179
+ const ws = await credManager.getWorkspace('nonexistent');
180
+ // Then: Should return null (command should handle this)
181
+ expect(ws).toBeNull();
182
+ });
183
+ });
184
+ describe('auth status', () => {
185
+ test('returns current workspace info', async () => {
186
+ // Given: A current workspace is set
187
+ await credManager.setWorkspace({
188
+ workspace_id: 'T-status',
189
+ workspace_name: 'status-test',
190
+ token: 'xoxc-status',
191
+ cookie: 'xoxd-status',
192
+ });
193
+ await credManager.setCurrentWorkspace('T-status');
194
+ // When: Getting current workspace
195
+ const ws = await credManager.getWorkspace();
196
+ // Then: Should return workspace info
197
+ expect(ws).not.toBeNull();
198
+ expect(ws?.workspace_id).toBe('T-status');
199
+ expect(ws?.workspace_name).toBe('status-test');
200
+ });
201
+ test('returns null when no workspace configured', async () => {
202
+ // Given: No workspace configured
203
+ // When: Getting current workspace
204
+ const ws = await credManager.getWorkspace();
205
+ // Then: Should return null
206
+ expect(ws).toBeNull();
207
+ });
208
+ test('validates token with Slack API', async () => {
209
+ // Given: A workspace with valid credentials
210
+ // This would require mocking SlackClient.testAuth()
211
+ // We test the integration pattern here
212
+ const mockTestAuth = mock(() => Promise.resolve({
213
+ user_id: 'U123',
214
+ team_id: 'T123',
215
+ user: 'testuser',
216
+ team: 'Test Team',
217
+ }));
218
+ // When: testAuth is called
219
+ const result = await mockTestAuth();
220
+ // Then: Should return auth info
221
+ expect(result.user_id).toBe('U123');
222
+ expect(result.team_id).toBe('T123');
223
+ expect(result.user).toBe('testuser');
224
+ expect(result.team).toBe('Test Team');
225
+ });
226
+ });
227
+ });
228
+ describe('Platform Detection', () => {
229
+ test('auto-detects current platform', () => {
230
+ // Given: Running on current platform
231
+ const platform = process.platform;
232
+ // When: TokenExtractor is created without explicit platform
233
+ const _extractor = new TokenExtractor();
234
+ // Then: Should use current platform
235
+ expect(['darwin', 'linux', 'win32']).toContain(platform);
236
+ });
237
+ });
238
+ describe('Output Formatting', () => {
239
+ test('formats extract output correctly', () => {
240
+ // Given: Extracted workspaces
241
+ const output = {
242
+ workspaces: ['T123/acme-corp', 'T456/side-project'],
243
+ current: 'T123',
244
+ };
245
+ // When: Formatted as JSON
246
+ const json = JSON.stringify(output);
247
+ const pretty = JSON.stringify(output, null, 2);
248
+ // Then: Should be valid JSON
249
+ expect(JSON.parse(json)).toEqual(output);
250
+ expect(pretty).toContain('\n');
251
+ });
252
+ test('formats status output correctly', () => {
253
+ // Given: Status info
254
+ const output = {
255
+ workspace_id: 'T123',
256
+ workspace_name: 'acme-corp',
257
+ user: 'testuser',
258
+ team: 'Acme Corp',
259
+ valid: true,
260
+ };
261
+ // When: Formatted as JSON
262
+ const json = JSON.stringify(output);
263
+ // Then: Should be valid JSON
264
+ expect(JSON.parse(json)).toEqual(output);
265
+ });
266
+ test('formats logout output correctly', () => {
267
+ // Given: Logout result
268
+ const output = {
269
+ removed: 'T123',
270
+ success: true,
271
+ };
272
+ // When: Formatted as JSON
273
+ const json = JSON.stringify(output);
274
+ // Then: Should be valid JSON
275
+ expect(JSON.parse(json)).toEqual(output);
276
+ });
277
+ });
278
+ describe('Error Handling', () => {
279
+ test('handles missing Slack installation gracefully', async () => {
280
+ // Given: Slack is not installed
281
+ const extractor = new TokenExtractor('darwin', '/nonexistent/slack');
282
+ // When/Then: Should throw descriptive error
283
+ await expect(extractor.extract()).rejects.toThrow('Slack directory not found');
284
+ });
285
+ test('handles corrupted LevelDB gracefully', async () => {
286
+ // Given: Corrupted LevelDB
287
+ // This would require creating a corrupted LevelDB file
288
+ // We test that the extractor handles errors gracefully
289
+ const extractor = new TokenExtractor('darwin', testSlackDir);
290
+ // When: Trying to extract from non-existent storage
291
+ // Then: Should handle gracefully (return empty or throw)
292
+ await expect(extractor.extract()).rejects.toThrow();
293
+ });
294
+ test('handles missing Cookies database gracefully', async () => {
295
+ // Given: No Cookies database
296
+ mkdirSync(join(testSlackDir, 'storage'), { recursive: true });
297
+ const extractor = new TokenExtractor('darwin', testSlackDir);
298
+ // When: Trying to extract
299
+ const result = await extractor.extract();
300
+ // Then: Should return empty array (no tokens found)
301
+ expect(result).toEqual([]);
302
+ });
303
+ });
304
+ //# sourceMappingURL=auth.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.test.js","sourceRoot":"","sources":["../../../tests/commands/auth.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=channel.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel.test.d.ts","sourceRoot":"","sources":["../../../tests/commands/channel.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,166 @@
1
+ import { beforeEach, describe, expect, mock, test } from 'bun:test';
2
+ describe('Channel Commands', () => {
3
+ let mockClient;
4
+ beforeEach(() => {
5
+ // Mock SlackClient
6
+ mockClient = {
7
+ listChannels: mock(async () => [
8
+ {
9
+ id: 'C001',
10
+ name: 'general',
11
+ is_private: false,
12
+ is_archived: false,
13
+ created: 1234567890,
14
+ creator: 'U001',
15
+ topic: {
16
+ value: 'General discussion',
17
+ creator: 'U001',
18
+ last_set: 1234567890,
19
+ },
20
+ purpose: {
21
+ value: 'General channel',
22
+ creator: 'U001',
23
+ last_set: 1234567890,
24
+ },
25
+ },
26
+ {
27
+ id: 'C002',
28
+ name: 'private-team',
29
+ is_private: true,
30
+ is_archived: false,
31
+ created: 1234567891,
32
+ creator: 'U002',
33
+ },
34
+ {
35
+ id: 'C003',
36
+ name: 'archived-channel',
37
+ is_private: false,
38
+ is_archived: true,
39
+ created: 1234567892,
40
+ creator: 'U003',
41
+ },
42
+ ]),
43
+ getChannel: mock(async (id) => {
44
+ const channels = {
45
+ C001: {
46
+ id: 'C001',
47
+ name: 'general',
48
+ is_private: false,
49
+ is_archived: false,
50
+ created: 1234567890,
51
+ creator: 'U001',
52
+ topic: {
53
+ value: 'General discussion',
54
+ creator: 'U001',
55
+ last_set: 1234567890,
56
+ },
57
+ purpose: {
58
+ value: 'General channel',
59
+ creator: 'U001',
60
+ last_set: 1234567890,
61
+ },
62
+ },
63
+ C002: {
64
+ id: 'C002',
65
+ name: 'private-team',
66
+ is_private: true,
67
+ is_archived: false,
68
+ created: 1234567891,
69
+ creator: 'U002',
70
+ },
71
+ };
72
+ if (!channels[id]) {
73
+ throw new Error(`Channel not found: ${id}`);
74
+ }
75
+ return channels[id];
76
+ }),
77
+ };
78
+ });
79
+ describe('channel list', () => {
80
+ test('lists all channels', async () => {
81
+ // Given: SlackClient returns channels
82
+ // When: Listing channels
83
+ const channels = await mockClient.listChannels();
84
+ // Then: Should return channels
85
+ expect(channels).toHaveLength(3);
86
+ expect(channels[0].name).toBe('general');
87
+ expect(channels[1].name).toBe('private-team');
88
+ expect(channels[2].name).toBe('archived-channel');
89
+ });
90
+ test('excludes archived channels by default', async () => {
91
+ // Given: SlackClient returns channels including archived
92
+ const channels = await mockClient.listChannels();
93
+ // When: Filtering out archived (default behavior)
94
+ const activeChannels = channels.filter((c) => !c.is_archived);
95
+ // Then: Should exclude archived channels
96
+ expect(activeChannels).toHaveLength(2);
97
+ expect(activeChannels.every((c) => !c.is_archived)).toBe(true);
98
+ });
99
+ test('includes archived channels when requested', async () => {
100
+ // Given: SlackClient returns channels including archived
101
+ const channels = await mockClient.listChannels();
102
+ // When: Including archived (--include-archived)
103
+ // Then: Should include all channels
104
+ expect(channels).toHaveLength(3);
105
+ expect(channels.some((c) => c.is_archived)).toBe(true);
106
+ });
107
+ test('filters channels by type=public', async () => {
108
+ // Given: SlackClient returns mixed channels
109
+ // When: Filtering by public type
110
+ const channels = await mockClient.listChannels();
111
+ const publicChannels = channels.filter((c) => !c.is_private);
112
+ // Then: Should return only public channels
113
+ expect(publicChannels).toHaveLength(2);
114
+ expect(publicChannels.every((c) => !c.is_private)).toBe(true);
115
+ });
116
+ test('filters channels by type=private', async () => {
117
+ // Given: SlackClient returns mixed channels
118
+ // When: Filtering by private type
119
+ const channels = await mockClient.listChannels();
120
+ const privateChannels = channels.filter((c) => c.is_private);
121
+ // Then: Should return only private channels
122
+ expect(privateChannels).toHaveLength(1);
123
+ expect(privateChannels[0].name).toBe('private-team');
124
+ });
125
+ });
126
+ describe('channel info', () => {
127
+ test('gets channel by ID', async () => {
128
+ // Given: Channel ID C001
129
+ // When: Getting channel info
130
+ const channel = await mockClient.getChannel('C001');
131
+ // Then: Should return channel details
132
+ expect(channel.id).toBe('C001');
133
+ expect(channel.name).toBe('general');
134
+ expect(channel.is_private).toBe(false);
135
+ });
136
+ test('throws error for non-existent channel', async () => {
137
+ // Given: Non-existent channel ID
138
+ // When: Getting channel info
139
+ // Then: Should throw error
140
+ try {
141
+ await mockClient.getChannel('C999');
142
+ expect.unreachable();
143
+ }
144
+ catch (error) {
145
+ expect(error.message).toContain('Channel not found');
146
+ }
147
+ });
148
+ test('returns channel with topic and purpose', async () => {
149
+ // Given: Channel with topic and purpose
150
+ // When: Getting channel info
151
+ const channel = await mockClient.getChannel('C001');
152
+ // Then: Should include topic and purpose
153
+ expect(channel.topic?.value).toBe('General discussion');
154
+ expect(channel.purpose?.value).toBe('General channel');
155
+ });
156
+ });
157
+ describe('channel history (alias for message list)', () => {
158
+ test('history command should be alias for message list', () => {
159
+ // Given: channel history command
160
+ // When: Checking command structure
161
+ // Then: Should be alias for message list
162
+ expect(true).toBe(true);
163
+ });
164
+ });
165
+ });
166
+ //# sourceMappingURL=channel.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel.test.js","sourceRoot":"","sources":["../../../tests/commands/channel.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=file.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.test.d.ts","sourceRoot":"","sources":["../../../tests/commands/file.test.ts"],"names":[],"mappings":""}