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,180 @@
1
+ #!/bin/bash
2
+ #
3
+ # monitor-channel.sh - Monitor a Discord channel for new messages
4
+ #
5
+ # Usage:
6
+ # ./monitor-channel.sh <channel-id> [interval]
7
+ #
8
+ # Arguments:
9
+ # channel-id - Channel ID to monitor (use 'channel list' to find IDs)
10
+ # interval - Polling interval in seconds (default: 10)
11
+ #
12
+ # Example:
13
+ # ./monitor-channel.sh 1234567890123456789
14
+ # ./monitor-channel.sh 1234567890123456789 5
15
+
16
+ set -euo pipefail
17
+
18
+ # Check arguments
19
+ if [ $# -lt 1 ]; then
20
+ echo "Usage: $0 <channel-id> [interval]"
21
+ echo ""
22
+ echo "Examples:"
23
+ echo " $0 1234567890123456789 # Monitor channel, poll every 10s"
24
+ echo " $0 1234567890123456789 5 # Monitor channel, poll every 5s"
25
+ echo ""
26
+ echo "To find channel IDs, run: agent-discord channel list"
27
+ exit 1
28
+ fi
29
+
30
+ CHANNEL_ID="$1"
31
+ INTERVAL="${2:-10}" # Default 10 seconds
32
+
33
+ # Colors for output
34
+ RED='\033[0;31m'
35
+ GREEN='\033[0;32m'
36
+ YELLOW='\033[1;33m'
37
+ BLUE='\033[0;34m'
38
+ NC='\033[0m' # No Color
39
+
40
+ # State tracking
41
+ LAST_ID=""
42
+ FIRST_RUN=true
43
+
44
+ # Function to format ISO timestamp to readable format
45
+ format_time() {
46
+ local ts=$1
47
+ # Handle ISO 8601 format
48
+ if command -v gdate &> /dev/null; then
49
+ gdate -d "$ts" "+%Y-%m-%d %H:%M:%S" 2>/dev/null || echo "$ts"
50
+ else
51
+ date -d "$ts" "+%Y-%m-%d %H:%M:%S" 2>/dev/null || echo "$ts"
52
+ fi
53
+ }
54
+
55
+ # Function to truncate text
56
+ truncate_text() {
57
+ local text=$1
58
+ local max_length=100
59
+
60
+ if [ ${#text} -gt $max_length ]; then
61
+ echo "${text:0:$max_length}..."
62
+ else
63
+ echo "$text"
64
+ fi
65
+ }
66
+
67
+ # Function to check for new messages
68
+ check_messages() {
69
+ # Get latest message
70
+ MESSAGES=$(agent-discord message list "$CHANNEL_ID" --limit 1 2>&1)
71
+
72
+ # Check if successful
73
+ if echo "$MESSAGES" | jq -e '.error' > /dev/null 2>&1; then
74
+ ERROR_MSG=$(echo "$MESSAGES" | jq -r '.error // "Unknown error"')
75
+ echo -e "${RED}Error: $ERROR_MSG${NC}"
76
+ return 1
77
+ fi
78
+
79
+ # Extract latest message
80
+ LATEST_ID=$(echo "$MESSAGES" | jq -r '.[0].id // ""')
81
+
82
+ # No messages in channel
83
+ if [ -z "$LATEST_ID" ]; then
84
+ if [ "$FIRST_RUN" = true ]; then
85
+ echo -e "${YELLOW}No messages in channel yet${NC}"
86
+ fi
87
+ return 0
88
+ fi
89
+
90
+ # Check if new message
91
+ if [ "$LATEST_ID" != "$LAST_ID" ]; then
92
+ # Skip notification on first run (just initialize)
93
+ if [ "$FIRST_RUN" = false ] && [ -n "$LAST_ID" ]; then
94
+ # Extract message details
95
+ CONTENT=$(echo "$MESSAGES" | jq -r '.[0].content // ""')
96
+ AUTHOR=$(echo "$MESSAGES" | jq -r '.[0].author // "Unknown"')
97
+ TIMESTAMP=$(echo "$MESSAGES" | jq -r '.[0].timestamp // ""')
98
+
99
+ # Format timestamp
100
+ TIME=$(format_time "$TIMESTAMP")
101
+
102
+ # Display new message
103
+ echo ""
104
+ echo -e "${GREEN}----------------------------------------------${NC}"
105
+ echo -e "${BLUE}New message in channel${NC}"
106
+ echo -e "${GREEN}----------------------------------------------${NC}"
107
+ echo -e "Time: $TIME"
108
+ echo -e "From: $AUTHOR"
109
+ echo -e "Message: $(truncate_text "$CONTENT")"
110
+ echo -e "${GREEN}----------------------------------------------${NC}"
111
+
112
+ # Example: Auto-respond to keywords
113
+ # Uncomment to enable
114
+ # if echo "$CONTENT" | grep -qi "bot"; then
115
+ # echo -e "${YELLOW}Detected keyword, responding...${NC}"
116
+ # agent-discord message send "$CHANNEL_ID" "You called?"
117
+ # fi
118
+ fi
119
+
120
+ LAST_ID="$LATEST_ID"
121
+ fi
122
+
123
+ FIRST_RUN=false
124
+ return 0
125
+ }
126
+
127
+ # Check if agent-discord is installed
128
+ if ! command -v agent-discord &> /dev/null; then
129
+ echo -e "${RED}Error: agent-discord not found${NC}"
130
+ echo ""
131
+ echo "Install it with:"
132
+ echo " bun install -g agent-discord"
133
+ exit 1
134
+ fi
135
+
136
+ # Check authentication
137
+ echo "Checking authentication..."
138
+ AUTH_STATUS=$(agent-discord auth status 2>&1)
139
+
140
+ if echo "$AUTH_STATUS" | jq -e '.error' > /dev/null 2>&1; then
141
+ echo -e "${RED}Not authenticated!${NC}"
142
+ echo ""
143
+ echo "Run this to authenticate:"
144
+ echo " agent-discord auth extract"
145
+ exit 1
146
+ fi
147
+
148
+ USER_NAME=$(echo "$AUTH_STATUS" | jq -r '.user // "Unknown"')
149
+ echo -e "${GREEN}Authenticated as: $USER_NAME${NC}"
150
+ echo ""
151
+
152
+ # Verify channel exists
153
+ echo "Verifying channel..."
154
+ CHANNEL_INFO=$(agent-discord channel info "$CHANNEL_ID" 2>&1)
155
+
156
+ if echo "$CHANNEL_INFO" | jq -e '.error' > /dev/null 2>&1; then
157
+ echo -e "${RED}Channel '$CHANNEL_ID' not found${NC}"
158
+ echo ""
159
+ echo "List available channels with:"
160
+ echo " agent-discord channel list"
161
+ exit 1
162
+ fi
163
+
164
+ CHANNEL_NAME=$(echo "$CHANNEL_INFO" | jq -r '.name // "Unknown"')
165
+ echo -e "${GREEN}Monitoring: #$CHANNEL_NAME ($CHANNEL_ID)${NC}"
166
+ echo ""
167
+
168
+ # Start monitoring
169
+ echo -e "${YELLOW}Monitoring for new messages (polling every ${INTERVAL}s)...${NC}"
170
+ echo -e "${YELLOW}Press Ctrl+C to stop${NC}"
171
+ echo ""
172
+
173
+ # Trap Ctrl+C for clean exit
174
+ trap 'echo -e "\n${YELLOW}Monitoring stopped${NC}"; exit 0' INT
175
+
176
+ # Main monitoring loop
177
+ while true; do
178
+ check_messages
179
+ sleep "$INTERVAL"
180
+ done
@@ -0,0 +1,173 @@
1
+ #!/bin/bash
2
+ #
3
+ # post-message.sh - Send a message to Discord with error handling
4
+ #
5
+ # Usage:
6
+ # ./post-message.sh <channel-id> <message>
7
+ # ./post-message.sh --channel-name <name> <message>
8
+ #
9
+ # Example:
10
+ # ./post-message.sh 1234567890123456789 "Hello from script!"
11
+ # ./post-message.sh --channel-name general "Deployment completed"
12
+
13
+ set -euo pipefail
14
+
15
+ # Colors for output
16
+ RED='\033[0;31m'
17
+ GREEN='\033[0;32m'
18
+ YELLOW='\033[1;33m'
19
+ NC='\033[0m' # No Color
20
+
21
+ # Parse arguments
22
+ CHANNEL_ID=""
23
+ CHANNEL_NAME=""
24
+ MESSAGE=""
25
+
26
+ if [ $# -lt 2 ]; then
27
+ echo "Usage: $0 <channel-id> <message>"
28
+ echo " $0 --channel-name <name> <message>"
29
+ echo ""
30
+ echo "Examples:"
31
+ echo " $0 1234567890123456789 'Hello world!'"
32
+ echo " $0 --channel-name general 'Build completed'"
33
+ exit 1
34
+ fi
35
+
36
+ if [ "$1" = "--channel-name" ]; then
37
+ CHANNEL_NAME="$2"
38
+ MESSAGE="$3"
39
+ else
40
+ CHANNEL_ID="$1"
41
+ MESSAGE="$2"
42
+ fi
43
+
44
+ # Function to send message with retry logic
45
+ send_message() {
46
+ local channel_id=$1
47
+ local message=$2
48
+ local max_attempts=3
49
+ local attempt=1
50
+
51
+ while [ $attempt -le $max_attempts ]; do
52
+ echo -e "${YELLOW}Attempt $attempt/$max_attempts...${NC}"
53
+
54
+ # Send message and capture result
55
+ RESULT=$(agent-discord message send "$channel_id" "$message" 2>&1)
56
+
57
+ # Check if successful (has an 'id' field)
58
+ if echo "$RESULT" | jq -e '.id' > /dev/null 2>&1; then
59
+ echo -e "${GREEN}Message sent successfully!${NC}"
60
+
61
+ # Extract message details
62
+ MSG_ID=$(echo "$RESULT" | jq -r '.id')
63
+
64
+ echo ""
65
+ echo "Message details:"
66
+ echo " Channel: $channel_id"
67
+ echo " Message ID: $MSG_ID"
68
+
69
+ return 0
70
+ fi
71
+
72
+ # Extract error information
73
+ if echo "$RESULT" | jq -e '.error' > /dev/null 2>&1; then
74
+ ERROR_MSG=$(echo "$RESULT" | jq -r '.error // "Unknown error"')
75
+ echo -e "${RED}Failed: $ERROR_MSG${NC}"
76
+
77
+ # Don't retry on certain errors
78
+ if echo "$ERROR_MSG" | grep -q "Not authenticated"; then
79
+ echo ""
80
+ echo "Not authenticated. Run:"
81
+ echo " agent-discord auth extract"
82
+ return 1
83
+ fi
84
+
85
+ if echo "$ERROR_MSG" | grep -q "Unknown Channel"; then
86
+ echo ""
87
+ echo "Channel '$channel_id' not found. Check channel ID."
88
+ echo "List channels with: agent-discord channel list"
89
+ return 1
90
+ fi
91
+ else
92
+ echo -e "${RED}Unexpected error: $RESULT${NC}"
93
+ fi
94
+
95
+ # Exponential backoff before retry
96
+ if [ $attempt -lt $max_attempts ]; then
97
+ SLEEP_TIME=$((attempt * 2))
98
+ echo "Retrying in ${SLEEP_TIME}s..."
99
+ sleep $SLEEP_TIME
100
+ fi
101
+
102
+ attempt=$((attempt + 1))
103
+ done
104
+
105
+ echo -e "${RED}Failed after $max_attempts attempts${NC}"
106
+ return 1
107
+ }
108
+
109
+ # Check if agent-discord is installed
110
+ if ! command -v agent-discord &> /dev/null; then
111
+ echo -e "${RED}Error: agent-discord not found${NC}"
112
+ echo ""
113
+ echo "Install it with:"
114
+ echo " bun install -g agent-discord"
115
+ exit 1
116
+ fi
117
+
118
+ # Check authentication
119
+ echo "Checking authentication..."
120
+ AUTH_STATUS=$(agent-discord auth status 2>&1)
121
+
122
+ if echo "$AUTH_STATUS" | jq -e '.error' > /dev/null 2>&1; then
123
+ echo -e "${RED}Not authenticated!${NC}"
124
+ echo ""
125
+ echo "Run this to authenticate:"
126
+ echo " agent-discord auth extract"
127
+ exit 1
128
+ fi
129
+
130
+ USER_NAME=$(echo "$AUTH_STATUS" | jq -r '.user // "Unknown"')
131
+ GUILD_ID=$(echo "$AUTH_STATUS" | jq -r '.current_guild // ""')
132
+ echo -e "${GREEN}Authenticated as: $USER_NAME${NC}"
133
+
134
+ if [ -z "$GUILD_ID" ]; then
135
+ echo -e "${RED}No guild selected!${NC}"
136
+ echo ""
137
+ echo "Run this to select a guild:"
138
+ echo " agent-discord guild list"
139
+ echo " agent-discord guild switch <guild-id>"
140
+ exit 1
141
+ fi
142
+
143
+ # If channel name provided, look up channel ID
144
+ if [ -n "$CHANNEL_NAME" ]; then
145
+ echo "Looking up channel #$CHANNEL_NAME..."
146
+ CHANNELS=$(agent-discord channel list 2>&1)
147
+
148
+ if echo "$CHANNELS" | jq -e '.error' > /dev/null 2>&1; then
149
+ echo -e "${RED}Failed to list channels${NC}"
150
+ exit 1
151
+ fi
152
+
153
+ CHANNEL_ID=$(echo "$CHANNELS" | jq -r --arg name "$CHANNEL_NAME" '.[] | select(.name==$name) | .id')
154
+
155
+ if [ -z "$CHANNEL_ID" ]; then
156
+ echo -e "${RED}Channel #$CHANNEL_NAME not found${NC}"
157
+ echo ""
158
+ echo "Available channels:"
159
+ echo "$CHANNELS" | jq -r '.[] | " #\(.name) (\(.id))"'
160
+ exit 1
161
+ fi
162
+
163
+ echo -e "${GREEN}Found channel: $CHANNEL_ID${NC}"
164
+ fi
165
+
166
+ echo ""
167
+
168
+ # Send the message
169
+ echo "Sending message to channel $CHANNEL_ID..."
170
+ echo "Message: $MESSAGE"
171
+ echo ""
172
+
173
+ send_message "$CHANNEL_ID" "$MESSAGE"
@@ -0,0 +1,268 @@
1
+ ---
2
+ name: agent-slack
3
+ description: Interact with Slack workspaces - send messages, read channels, manage reactions
4
+ allowed-tools: Bash(agent-slack:*)
5
+ ---
6
+
7
+ # Agent Slack
8
+
9
+ A TypeScript CLI tool that enables AI agents and humans to interact with Slack workspaces through a simple command interface. Features seamless token extraction from the Slack desktop app and multi-workspace support.
10
+
11
+ ## Quick Start
12
+
13
+ ```bash
14
+ # Extract credentials from Slack desktop app (zero-config)
15
+ agent-slack auth extract
16
+
17
+ # Get workspace snapshot
18
+ agent-slack snapshot
19
+
20
+ # Send a message
21
+ agent-slack message send general "Hello from AI agent!"
22
+
23
+ # List channels
24
+ agent-slack channel list
25
+ ```
26
+
27
+ ## Authentication
28
+
29
+ ### Seamless Token Extraction
30
+
31
+ agent-slack automatically extracts your Slack credentials from the desktop app:
32
+
33
+ ```bash
34
+ # Just run this - no manual token copying needed
35
+ agent-slack auth extract
36
+
37
+ # Use --debug for troubleshooting
38
+ agent-slack auth extract --debug
39
+ ```
40
+
41
+ This command:
42
+ - Auto-detects your platform (macOS/Linux/Windows)
43
+ - Supports both direct download and App Store versions of Slack on macOS
44
+ - Extracts xoxc token and xoxd cookie (with v10 decryption for sandboxed apps)
45
+ - Validates tokens against Slack API before saving
46
+ - Discovers ALL logged-in workspaces
47
+ - Stores credentials securely in `~/.config/agent-messenger/`
48
+
49
+ ### Multi-Workspace Support
50
+
51
+ ```bash
52
+ # List all authenticated workspaces
53
+ agent-slack workspace list
54
+
55
+ # Switch to a different workspace
56
+ agent-slack workspace switch <workspace-id>
57
+
58
+ # Show current workspace
59
+ agent-slack workspace current
60
+
61
+ # Check auth status
62
+ agent-slack auth status
63
+ ```
64
+
65
+ ## Commands
66
+
67
+ ### Message Commands
68
+
69
+ ```bash
70
+ # Send a message
71
+ agent-slack message send <channel> <text>
72
+ agent-slack message send general "Hello world"
73
+
74
+ # Send a threaded reply
75
+ agent-slack message send general "Reply" --thread <ts>
76
+
77
+ # List messages
78
+ agent-slack message list <channel>
79
+ agent-slack message list general --limit 50
80
+
81
+ # Search messages across workspace
82
+ agent-slack message search <query>
83
+ agent-slack message search "project update"
84
+ agent-slack message search "from:@user deadline" --limit 50
85
+ agent-slack message search "in:#general meeting" --sort timestamp
86
+
87
+ # Get a single message by timestamp
88
+ agent-slack message get <channel> <ts>
89
+ agent-slack message get general 1234567890.123456
90
+
91
+ # Get thread replies (includes parent message)
92
+ agent-slack message replies <channel> <thread_ts>
93
+ agent-slack message replies general 1234567890.123456
94
+ agent-slack message replies general 1234567890.123456 --limit 50
95
+ agent-slack message replies general 1234567890.123456 --oldest 1234567890.000000
96
+ agent-slack message replies general 1234567890.123456 --cursor <next_cursor>
97
+
98
+ # Update a message
99
+ agent-slack message update <channel> <ts> <new-text>
100
+
101
+ # Delete a message
102
+ agent-slack message delete <channel> <ts> --force
103
+ ```
104
+
105
+ ### Channel Commands
106
+
107
+ ```bash
108
+ # List channels (excludes archived by default)
109
+ agent-slack channel list
110
+ agent-slack channel list --type public
111
+ agent-slack channel list --type private
112
+ agent-slack channel list --include-archived
113
+
114
+ # Get channel info
115
+ agent-slack channel info <channel>
116
+ agent-slack channel info general
117
+
118
+ # Get channel history (alias for message list)
119
+ agent-slack channel history <channel> --limit 100
120
+ ```
121
+
122
+ ### User Commands
123
+
124
+ ```bash
125
+ # List users
126
+ agent-slack user list
127
+ agent-slack user list --include-bots
128
+
129
+ # Get user info
130
+ agent-slack user info <user>
131
+
132
+ # Get current user
133
+ agent-slack user me
134
+ ```
135
+
136
+ ### Reaction Commands
137
+
138
+ ```bash
139
+ # Add reaction
140
+ agent-slack reaction add <channel> <ts> <emoji>
141
+ agent-slack reaction add general 1234567890.123456 thumbsup
142
+
143
+ # Remove reaction
144
+ agent-slack reaction remove <channel> <ts> <emoji>
145
+
146
+ # List reactions on a message
147
+ agent-slack reaction list <channel> <ts>
148
+ ```
149
+
150
+ ### File Commands
151
+
152
+ ```bash
153
+ # Upload file
154
+ agent-slack file upload <channel> <path>
155
+ agent-slack file upload general ./report.pdf
156
+
157
+ # List files
158
+ agent-slack file list
159
+ agent-slack file list --channel general
160
+
161
+ # Get file info
162
+ agent-slack file info <file-id>
163
+ ```
164
+
165
+ ### Snapshot Command
166
+
167
+ Get comprehensive workspace state for AI agents:
168
+
169
+ ```bash
170
+ # Full snapshot
171
+ agent-slack snapshot
172
+
173
+ # Filtered snapshots
174
+ agent-slack snapshot --channels-only
175
+ agent-slack snapshot --users-only
176
+
177
+ # Limit messages per channel
178
+ agent-slack snapshot --limit 10
179
+ ```
180
+
181
+ Returns JSON with:
182
+ - Workspace metadata
183
+ - Channels (id, name, topic, purpose)
184
+ - Recent messages (ts, text, user, channel)
185
+ - Users (id, name, profile)
186
+
187
+ ## Output Format
188
+
189
+ ### JSON (Default)
190
+
191
+ All commands output JSON by default for AI consumption:
192
+
193
+ ```json
194
+ {
195
+ "ts": "1234567890.123456",
196
+ "text": "Hello world",
197
+ "channel": "C123456"
198
+ }
199
+ ```
200
+
201
+ ### Pretty (Human-Readable)
202
+
203
+ Use `--pretty` flag for formatted output:
204
+
205
+ ```bash
206
+ agent-slack channel list --pretty
207
+ ```
208
+
209
+ ## Common Patterns
210
+
211
+ See `references/common-patterns.md` for typical AI agent workflows.
212
+
213
+ ## Templates
214
+
215
+ See `templates/` directory for runnable examples:
216
+ - `post-message.sh` - Send messages with error handling
217
+ - `monitor-channel.sh` - Monitor channel for new messages
218
+ - `workspace-summary.sh` - Generate workspace summary
219
+
220
+ ## Error Handling
221
+
222
+ All commands return consistent error format:
223
+
224
+ ```json
225
+ {
226
+ "error": "No workspace authenticated. Run: agent-slack auth extract"
227
+ }
228
+ ```
229
+
230
+ Common errors:
231
+ - `NO_WORKSPACE`: No authenticated workspace
232
+ - `SLACK_API_ERROR`: Slack API returned an error
233
+ - `RATE_LIMIT`: Hit Slack rate limit (auto-retries with backoff)
234
+
235
+ ## Configuration
236
+
237
+ Credentials stored in: `~/.config/agent-messenger/slack-credentials.json`
238
+
239
+ Format:
240
+ ```json
241
+ {
242
+ "current_workspace": "T123456",
243
+ "workspaces": {
244
+ "T123456": {
245
+ "workspace_id": "T123456",
246
+ "workspace_name": "My Workspace",
247
+ "token": "xoxc-...",
248
+ "cookie": "xoxd-..."
249
+ }
250
+ }
251
+ }
252
+ ```
253
+
254
+ **Security**: File permissions set to 0600 (owner read/write only)
255
+
256
+ ## Limitations
257
+
258
+ - No real-time events / Socket Mode
259
+ - No channel management (create/archive)
260
+ - No workspace admin operations
261
+ - No scheduled messages
262
+ - No user presence features
263
+ - Plain text messages only (no blocks/formatting in v1)
264
+
265
+ ## References
266
+
267
+ - [Authentication Guide](references/authentication.md)
268
+ - [Common Patterns](references/common-patterns.md)