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.
- package/.claude/commands/release.md +92 -0
- package/.claude-plugin/README.md +144 -0
- package/.claude-plugin/marketplace.json +37 -0
- package/.claude-plugin/plugin.json +17 -0
- package/.github/workflows/ci.yml +30 -0
- package/CLAUDE.md +106 -0
- package/CONTRIBUTING.md +131 -0
- package/README.md +140 -0
- package/biome.json +34 -0
- package/bun.lock +252 -0
- package/dist/cli.d.ts +5 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +21 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/auth.d.ts +3 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +140 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/channel.d.ts +3 -0
- package/dist/commands/channel.d.ts.map +1 -0
- package/dist/commands/channel.js +118 -0
- package/dist/commands/channel.js.map +1 -0
- package/dist/commands/file.d.ts +3 -0
- package/dist/commands/file.d.ts.map +1 -0
- package/dist/commands/file.js +113 -0
- package/dist/commands/file.js.map +1 -0
- package/dist/commands/index.d.ts +9 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +9 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/message.d.ts +3 -0
- package/dist/commands/message.d.ts.map +1 -0
- package/dist/commands/message.js +214 -0
- package/dist/commands/message.js.map +1 -0
- package/dist/commands/reaction.d.ts +3 -0
- package/dist/commands/reaction.d.ts.map +1 -0
- package/dist/commands/reaction.js +100 -0
- package/dist/commands/reaction.js.map +1 -0
- package/dist/commands/snapshot.d.ts +3 -0
- package/dist/commands/snapshot.d.ts.map +1 -0
- package/dist/commands/snapshot.js +88 -0
- package/dist/commands/snapshot.js.map +1 -0
- package/dist/commands/user.d.ts +3 -0
- package/dist/commands/user.d.ts.map +1 -0
- package/dist/commands/user.js +96 -0
- package/dist/commands/user.js.map +1 -0
- package/dist/commands/workspace.d.ts +3 -0
- package/dist/commands/workspace.d.ts.map +1 -0
- package/dist/commands/workspace.js +89 -0
- package/dist/commands/workspace.js.map +1 -0
- package/dist/lib/credential-manager.d.ts +13 -0
- package/dist/lib/credential-manager.d.ts.map +1 -0
- package/dist/lib/credential-manager.js +58 -0
- package/dist/lib/credential-manager.js.map +1 -0
- package/dist/lib/index.d.ts +3 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +3 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/ref-manager.d.ts +26 -0
- package/dist/lib/ref-manager.d.ts.map +1 -0
- package/dist/lib/ref-manager.js +92 -0
- package/dist/lib/ref-manager.js.map +1 -0
- package/dist/lib/slack-client.d.ts +37 -0
- package/dist/lib/slack-client.d.ts.map +1 -0
- package/dist/lib/slack-client.js +379 -0
- package/dist/lib/slack-client.js.map +1 -0
- package/dist/lib/token-extractor.d.ts +28 -0
- package/dist/lib/token-extractor.d.ts.map +1 -0
- package/dist/lib/token-extractor.js +401 -0
- package/dist/lib/token-extractor.js.map +1 -0
- package/dist/package.json +37 -0
- package/dist/src/cli.d.ts +5 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +22 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/platforms/discord/cli.d.ts +5 -0
- package/dist/src/platforms/discord/cli.d.ts.map +1 -0
- package/dist/src/platforms/discord/cli.js +22 -0
- package/dist/src/platforms/discord/cli.js.map +1 -0
- package/dist/src/platforms/discord/client.d.ts +34 -0
- package/dist/src/platforms/discord/client.d.ts.map +1 -0
- package/dist/src/platforms/discord/client.js +187 -0
- package/dist/src/platforms/discord/client.js.map +1 -0
- package/dist/src/platforms/discord/client.test.d.ts +2 -0
- package/dist/src/platforms/discord/client.test.d.ts.map +1 -0
- package/dist/src/platforms/discord/client.test.js +367 -0
- package/dist/src/platforms/discord/client.test.js.map +1 -0
- package/dist/src/platforms/discord/commands/auth.d.ts +13 -0
- package/dist/src/platforms/discord/commands/auth.d.ts.map +1 -0
- package/dist/src/platforms/discord/commands/auth.js +155 -0
- package/dist/src/platforms/discord/commands/auth.js.map +1 -0
- package/dist/src/platforms/discord/commands/auth.test.d.ts +2 -0
- package/dist/src/platforms/discord/commands/auth.test.d.ts.map +1 -0
- package/dist/src/platforms/discord/commands/auth.test.js +65 -0
- package/dist/src/platforms/discord/commands/auth.test.js.map +1 -0
- package/dist/src/platforms/discord/commands/channel.d.ts +13 -0
- package/dist/src/platforms/discord/commands/channel.d.ts.map +1 -0
- package/dist/src/platforms/discord/commands/channel.js +99 -0
- package/dist/src/platforms/discord/commands/channel.js.map +1 -0
- package/dist/src/platforms/discord/commands/channel.test.d.ts +2 -0
- package/dist/src/platforms/discord/commands/channel.test.d.ts.map +1 -0
- package/dist/src/platforms/discord/commands/channel.test.js +136 -0
- package/dist/src/platforms/discord/commands/channel.test.js.map +1 -0
- package/dist/src/platforms/discord/commands/file.d.ts +13 -0
- package/dist/src/platforms/discord/commands/file.d.ts.map +1 -0
- package/dist/src/platforms/discord/commands/file.js +99 -0
- package/dist/src/platforms/discord/commands/file.js.map +1 -0
- package/dist/src/platforms/discord/commands/file.test.d.ts +2 -0
- package/dist/src/platforms/discord/commands/file.test.d.ts.map +1 -0
- package/dist/src/platforms/discord/commands/file.test.js +83 -0
- package/dist/src/platforms/discord/commands/file.test.js.map +1 -0
- package/dist/src/platforms/discord/commands/guild.d.ts +15 -0
- package/dist/src/platforms/discord/commands/guild.d.ts.map +1 -0
- package/dist/src/platforms/discord/commands/guild.js +102 -0
- package/dist/src/platforms/discord/commands/guild.js.map +1 -0
- package/dist/src/platforms/discord/commands/guild.test.d.ts +2 -0
- package/dist/src/platforms/discord/commands/guild.test.d.ts.map +1 -0
- package/dist/src/platforms/discord/commands/guild.test.js +100 -0
- package/dist/src/platforms/discord/commands/guild.test.js.map +1 -0
- package/dist/src/platforms/discord/commands/index.d.ts +9 -0
- package/dist/src/platforms/discord/commands/index.d.ts.map +1 -0
- package/dist/src/platforms/discord/commands/index.js +9 -0
- package/dist/src/platforms/discord/commands/index.js.map +1 -0
- package/dist/src/platforms/discord/commands/message.d.ts +17 -0
- package/dist/src/platforms/discord/commands/message.d.ts.map +1 -0
- package/dist/src/platforms/discord/commands/message.js +131 -0
- package/dist/src/platforms/discord/commands/message.js.map +1 -0
- package/dist/src/platforms/discord/commands/message.test.d.ts +2 -0
- package/dist/src/platforms/discord/commands/message.test.d.ts.map +1 -0
- package/dist/src/platforms/discord/commands/message.test.js +91 -0
- package/dist/src/platforms/discord/commands/message.test.js.map +1 -0
- package/dist/src/platforms/discord/commands/reaction.d.ts +12 -0
- package/dist/src/platforms/discord/commands/reaction.d.ts.map +1 -0
- package/dist/src/platforms/discord/commands/reaction.js +99 -0
- package/dist/src/platforms/discord/commands/reaction.js.map +1 -0
- package/dist/src/platforms/discord/commands/reaction.test.d.ts +2 -0
- package/dist/src/platforms/discord/commands/reaction.test.d.ts.map +1 -0
- package/dist/src/platforms/discord/commands/reaction.test.js +115 -0
- package/dist/src/platforms/discord/commands/reaction.test.js.map +1 -0
- package/dist/src/platforms/discord/commands/snapshot.d.ts +9 -0
- package/dist/src/platforms/discord/commands/snapshot.d.ts.map +1 -0
- package/dist/src/platforms/discord/commands/snapshot.js +80 -0
- package/dist/src/platforms/discord/commands/snapshot.js.map +1 -0
- package/dist/src/platforms/discord/commands/snapshot.test.d.ts +2 -0
- package/dist/src/platforms/discord/commands/snapshot.test.d.ts.map +1 -0
- package/dist/src/platforms/discord/commands/snapshot.test.js +25 -0
- package/dist/src/platforms/discord/commands/snapshot.test.js.map +1 -0
- package/dist/src/platforms/discord/commands/user.d.ts +3 -0
- package/dist/src/platforms/discord/commands/user.d.ts.map +1 -0
- package/dist/src/platforms/discord/commands/user.js +94 -0
- package/dist/src/platforms/discord/commands/user.js.map +1 -0
- package/dist/src/platforms/discord/commands/user.test.d.ts +2 -0
- package/dist/src/platforms/discord/commands/user.test.d.ts.map +1 -0
- package/dist/src/platforms/discord/commands/user.test.js +103 -0
- package/dist/src/platforms/discord/commands/user.test.js.map +1 -0
- package/dist/src/platforms/discord/credential-manager.d.ts +33 -0
- package/dist/src/platforms/discord/credential-manager.d.ts.map +1 -0
- package/dist/src/platforms/discord/credential-manager.js +73 -0
- package/dist/src/platforms/discord/credential-manager.js.map +1 -0
- package/dist/src/platforms/discord/credential-manager.test.d.ts +2 -0
- package/dist/src/platforms/discord/credential-manager.test.d.ts.map +1 -0
- package/dist/src/platforms/discord/credential-manager.test.js +136 -0
- package/dist/src/platforms/discord/credential-manager.test.js.map +1 -0
- package/dist/src/platforms/discord/token-extractor.d.ts +55 -0
- package/dist/src/platforms/discord/token-extractor.d.ts.map +1 -0
- package/dist/src/platforms/discord/token-extractor.js +462 -0
- package/dist/src/platforms/discord/token-extractor.js.map +1 -0
- package/dist/src/platforms/discord/token-extractor.test.d.ts +2 -0
- package/dist/src/platforms/discord/token-extractor.test.d.ts.map +1 -0
- package/dist/src/platforms/discord/token-extractor.test.js +789 -0
- package/dist/src/platforms/discord/token-extractor.test.js.map +1 -0
- package/dist/src/platforms/discord/types.d.ts +251 -0
- package/dist/src/platforms/discord/types.d.ts.map +1 -0
- package/dist/src/platforms/discord/types.js +74 -0
- package/dist/src/platforms/discord/types.js.map +1 -0
- package/dist/src/platforms/discord/types.test.d.ts +2 -0
- package/dist/src/platforms/discord/types.test.d.ts.map +1 -0
- package/dist/src/platforms/discord/types.test.js +211 -0
- package/dist/src/platforms/discord/types.test.js.map +1 -0
- package/dist/src/platforms/slack/cli.d.ts +5 -0
- package/dist/src/platforms/slack/cli.d.ts.map +1 -0
- package/dist/src/platforms/slack/cli.js +22 -0
- package/dist/src/platforms/slack/cli.js.map +1 -0
- package/dist/src/platforms/slack/client.d.ts +47 -0
- package/dist/src/platforms/slack/client.d.ts.map +1 -0
- package/dist/src/platforms/slack/client.js +412 -0
- package/dist/src/platforms/slack/client.js.map +1 -0
- package/dist/src/platforms/slack/commands/auth.d.ts +3 -0
- package/dist/src/platforms/slack/commands/auth.d.ts.map +1 -0
- package/dist/src/platforms/slack/commands/auth.js +156 -0
- package/dist/src/platforms/slack/commands/auth.js.map +1 -0
- package/dist/src/platforms/slack/commands/channel.d.ts +3 -0
- package/dist/src/platforms/slack/commands/channel.d.ts.map +1 -0
- package/dist/src/platforms/slack/commands/channel.js +118 -0
- package/dist/src/platforms/slack/commands/channel.js.map +1 -0
- package/dist/src/platforms/slack/commands/file.d.ts +3 -0
- package/dist/src/platforms/slack/commands/file.d.ts.map +1 -0
- package/dist/src/platforms/slack/commands/file.js +113 -0
- package/dist/src/platforms/slack/commands/file.js.map +1 -0
- package/dist/src/platforms/slack/commands/index.d.ts +9 -0
- package/dist/src/platforms/slack/commands/index.d.ts.map +1 -0
- package/dist/src/platforms/slack/commands/index.js +9 -0
- package/dist/src/platforms/slack/commands/index.js.map +1 -0
- package/dist/src/platforms/slack/commands/message.d.ts +3 -0
- package/dist/src/platforms/slack/commands/message.d.ts.map +1 -0
- package/dist/src/platforms/slack/commands/message.js +263 -0
- package/dist/src/platforms/slack/commands/message.js.map +1 -0
- package/dist/src/platforms/slack/commands/reaction.d.ts +3 -0
- package/dist/src/platforms/slack/commands/reaction.d.ts.map +1 -0
- package/dist/src/platforms/slack/commands/reaction.js +100 -0
- package/dist/src/platforms/slack/commands/reaction.js.map +1 -0
- package/dist/src/platforms/slack/commands/snapshot.d.ts +3 -0
- package/dist/src/platforms/slack/commands/snapshot.d.ts.map +1 -0
- package/dist/src/platforms/slack/commands/snapshot.js +87 -0
- package/dist/src/platforms/slack/commands/snapshot.js.map +1 -0
- package/dist/src/platforms/slack/commands/user.d.ts +3 -0
- package/dist/src/platforms/slack/commands/user.d.ts.map +1 -0
- package/dist/src/platforms/slack/commands/user.js +96 -0
- package/dist/src/platforms/slack/commands/user.js.map +1 -0
- package/dist/src/platforms/slack/commands/workspace.d.ts +3 -0
- package/dist/src/platforms/slack/commands/workspace.d.ts.map +1 -0
- package/dist/src/platforms/slack/commands/workspace.js +89 -0
- package/dist/src/platforms/slack/commands/workspace.js.map +1 -0
- package/dist/src/platforms/slack/credential-manager.d.ts +13 -0
- package/dist/src/platforms/slack/credential-manager.d.ts.map +1 -0
- package/dist/src/platforms/slack/credential-manager.js +58 -0
- package/dist/src/platforms/slack/credential-manager.js.map +1 -0
- package/dist/src/platforms/slack/index.d.ts +3 -0
- package/dist/src/platforms/slack/index.d.ts.map +1 -0
- package/dist/src/platforms/slack/index.js +3 -0
- package/dist/src/platforms/slack/index.js.map +1 -0
- package/dist/src/platforms/slack/token-extractor.d.ts +28 -0
- package/dist/src/platforms/slack/token-extractor.d.ts.map +1 -0
- package/dist/src/platforms/slack/token-extractor.js +401 -0
- package/dist/src/platforms/slack/token-extractor.js.map +1 -0
- package/dist/src/platforms/slack/types.d.ts +369 -0
- package/dist/src/platforms/slack/types.d.ts.map +1 -0
- package/dist/src/platforms/slack/types.js +92 -0
- package/dist/src/platforms/slack/types.js.map +1 -0
- package/dist/src/shared/utils/concurrency.d.ts +2 -0
- package/dist/src/shared/utils/concurrency.d.ts.map +1 -0
- package/dist/src/shared/utils/concurrency.js +14 -0
- package/dist/src/shared/utils/concurrency.js.map +1 -0
- package/dist/src/shared/utils/concurrency.test.d.ts +2 -0
- package/dist/src/shared/utils/concurrency.test.d.ts.map +1 -0
- package/dist/src/shared/utils/concurrency.test.js +39 -0
- package/dist/src/shared/utils/concurrency.test.js.map +1 -0
- package/dist/src/shared/utils/error-handler.d.ts +2 -0
- package/dist/src/shared/utils/error-handler.d.ts.map +1 -0
- package/dist/src/shared/utils/error-handler.js +5 -0
- package/dist/src/shared/utils/error-handler.js.map +1 -0
- package/dist/src/shared/utils/output.d.ts +2 -0
- package/dist/src/shared/utils/output.d.ts.map +1 -0
- package/dist/src/shared/utils/output.js +4 -0
- package/dist/src/shared/utils/output.js.map +1 -0
- package/dist/tests/cli.test.d.ts +2 -0
- package/dist/tests/cli.test.d.ts.map +1 -0
- package/dist/tests/cli.test.js +83 -0
- package/dist/tests/cli.test.js.map +1 -0
- package/dist/tests/commands/.test-slack-data/Local Storage/leveldb/CURRENT +1 -0
- package/dist/tests/commands/.test-slack-data/Local Storage/leveldb/LOCK +0 -0
- package/dist/tests/commands/.test-slack-data/Local Storage/leveldb/LOG +3 -0
- package/dist/tests/commands/.test-slack-data/Local Storage/leveldb/LOG.old +1 -0
- package/dist/tests/commands/.test-slack-data/Local Storage/leveldb/MANIFEST-000004 +0 -0
- package/dist/tests/commands/auth.test.d.ts +2 -0
- package/dist/tests/commands/auth.test.d.ts.map +1 -0
- package/dist/tests/commands/auth.test.js +304 -0
- package/dist/tests/commands/auth.test.js.map +1 -0
- package/dist/tests/commands/channel.test.d.ts +2 -0
- package/dist/tests/commands/channel.test.d.ts.map +1 -0
- package/dist/tests/commands/channel.test.js +166 -0
- package/dist/tests/commands/channel.test.js.map +1 -0
- package/dist/tests/commands/file.test.d.ts +2 -0
- package/dist/tests/commands/file.test.d.ts.map +1 -0
- package/dist/tests/commands/file.test.js +175 -0
- package/dist/tests/commands/file.test.js.map +1 -0
- package/dist/tests/commands/message.test.d.ts +2 -0
- package/dist/tests/commands/message.test.d.ts.map +1 -0
- package/dist/tests/commands/message.test.js +293 -0
- package/dist/tests/commands/message.test.js.map +1 -0
- package/dist/tests/commands/reaction.test.d.ts +2 -0
- package/dist/tests/commands/reaction.test.d.ts.map +1 -0
- package/dist/tests/commands/reaction.test.js +84 -0
- package/dist/tests/commands/reaction.test.js.map +1 -0
- package/dist/tests/commands/snapshot.test.d.ts +2 -0
- package/dist/tests/commands/snapshot.test.d.ts.map +1 -0
- package/dist/tests/commands/snapshot.test.js +280 -0
- package/dist/tests/commands/snapshot.test.js.map +1 -0
- package/dist/tests/commands/user.test.d.ts +2 -0
- package/dist/tests/commands/user.test.d.ts.map +1 -0
- package/dist/tests/commands/user.test.js +117 -0
- package/dist/tests/commands/user.test.js.map +1 -0
- package/dist/tests/commands/workspace.test.d.ts +2 -0
- package/dist/tests/commands/workspace.test.d.ts.map +1 -0
- package/dist/tests/commands/workspace.test.js +453 -0
- package/dist/tests/commands/workspace.test.js.map +1 -0
- package/dist/tests/credential-manager.test.d.ts +2 -0
- package/dist/tests/credential-manager.test.d.ts.map +1 -0
- package/dist/tests/credential-manager.test.js +199 -0
- package/dist/tests/credential-manager.test.js.map +1 -0
- package/dist/tests/slack-client.test.d.ts +2 -0
- package/dist/tests/slack-client.test.d.ts.map +1 -0
- package/dist/tests/slack-client.test.js +741 -0
- package/dist/tests/slack-client.test.js.map +1 -0
- package/dist/tests/types.test.d.ts +2 -0
- package/dist/tests/types.test.d.ts.map +1 -0
- package/dist/tests/types.test.js +215 -0
- package/dist/tests/types.test.js.map +1 -0
- package/dist/types/index.d.ts +369 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +92 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/error-handler.d.ts +2 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +5 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/output.d.ts +2 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +4 -0
- package/dist/utils/output.js.map +1 -0
- package/docs/discord.md +182 -0
- package/docs/slack.md +160 -0
- package/package.json +37 -0
- package/skills/agent-discord/SKILL.md +273 -0
- package/skills/agent-discord/references/authentication.md +294 -0
- package/skills/agent-discord/references/common-patterns.md +455 -0
- package/skills/agent-discord/templates/guild-summary.sh +167 -0
- package/skills/agent-discord/templates/monitor-channel.sh +180 -0
- package/skills/agent-discord/templates/post-message.sh +173 -0
- package/skills/agent-slack/SKILL.md +268 -0
- package/skills/agent-slack/references/authentication.md +332 -0
- package/skills/agent-slack/references/common-patterns.md +527 -0
- package/skills/agent-slack/templates/monitor-channel.sh +186 -0
- package/skills/agent-slack/templates/post-message.sh +130 -0
- package/skills/agent-slack/templates/workspace-summary.sh +149 -0
- package/src/cli.ts +29 -0
- package/src/platforms/discord/cli.ts +36 -0
- package/src/platforms/discord/client.test.ts +456 -0
- package/src/platforms/discord/client.ts +281 -0
- package/src/platforms/discord/commands/auth.test.ts +72 -0
- package/src/platforms/discord/commands/auth.ts +206 -0
- package/src/platforms/discord/commands/channel.test.ts +153 -0
- package/src/platforms/discord/commands/channel.ts +127 -0
- package/src/platforms/discord/commands/file.test.ts +98 -0
- package/src/platforms/discord/commands/file.ts +134 -0
- package/src/platforms/discord/commands/guild.test.ts +117 -0
- package/src/platforms/discord/commands/guild.ts +129 -0
- package/src/platforms/discord/commands/index.ts +8 -0
- package/src/platforms/discord/commands/message.test.ts +107 -0
- package/src/platforms/discord/commands/message.ts +182 -0
- package/src/platforms/discord/commands/reaction.test.ts +123 -0
- package/src/platforms/discord/commands/reaction.ts +156 -0
- package/src/platforms/discord/commands/snapshot.test.ts +29 -0
- package/src/platforms/discord/commands/snapshot.ts +104 -0
- package/src/platforms/discord/commands/user.test.ts +115 -0
- package/src/platforms/discord/commands/user.ts +124 -0
- package/src/platforms/discord/credential-manager.test.ts +173 -0
- package/src/platforms/discord/credential-manager.ts +95 -0
- package/src/platforms/discord/token-extractor.test.ts +918 -0
- package/src/platforms/discord/token-extractor.ts +549 -0
- package/src/platforms/discord/types.test.ts +245 -0
- package/src/platforms/discord/types.ts +158 -0
- package/src/platforms/slack/cli.ts +36 -0
- package/src/platforms/slack/client.ts +466 -0
- package/src/platforms/slack/commands/auth.ts +211 -0
- package/src/platforms/slack/commands/channel.ts +158 -0
- package/src/platforms/slack/commands/file.ts +153 -0
- package/src/platforms/slack/commands/index.ts +8 -0
- package/src/platforms/slack/commands/message.ts +369 -0
- package/src/platforms/slack/commands/reaction.ts +166 -0
- package/src/platforms/slack/commands/snapshot.ts +114 -0
- package/src/platforms/slack/commands/user.ts +110 -0
- package/src/platforms/slack/commands/workspace.ts +111 -0
- package/src/platforms/slack/credential-manager.ts +74 -0
- package/src/platforms/slack/index.ts +2 -0
- package/src/platforms/slack/token-extractor.ts +496 -0
- package/src/platforms/slack/types.ts +193 -0
- package/src/shared/utils/concurrency.test.ts +53 -0
- package/src/shared/utils/concurrency.ts +20 -0
- package/src/shared/utils/error-handler.ts +4 -0
- package/src/shared/utils/output.ts +3 -0
- package/tests/cli.test.ts +94 -0
- package/tests/commands/auth.test.ts +383 -0
- package/tests/commands/channel.test.ts +185 -0
- package/tests/commands/file.test.ts +204 -0
- package/tests/commands/message.test.ts +344 -0
- package/tests/commands/reaction.test.ts +101 -0
- package/tests/commands/snapshot.test.ts +308 -0
- package/tests/commands/user.test.ts +138 -0
- package/tests/commands/workspace.test.ts +528 -0
- package/tests/credential-manager.test.ts +241 -0
- package/tests/slack-client.test.ts +916 -0
- package/tests/types.test.ts +241 -0
- 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)
|