agent-messenger 2.10.1 → 2.11.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-plugin/plugin.json +1 -1
- package/.env.template +4 -1
- package/README.md +77 -27
- package/bun.lock +26 -0
- package/dist/package.json +14 -1
- package/dist/src/platforms/channeltalk/commands/auth.d.ts +2 -1
- package/dist/src/platforms/channeltalk/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/channeltalk/commands/auth.js +5 -3
- package/dist/src/platforms/channeltalk/commands/auth.js.map +1 -1
- package/dist/src/platforms/channeltalk/token-extractor.d.ts +2 -1
- package/dist/src/platforms/channeltalk/token-extractor.d.ts.map +1 -1
- package/dist/src/platforms/channeltalk/token-extractor.js +22 -6
- package/dist/src/platforms/channeltalk/token-extractor.js.map +1 -1
- package/dist/src/platforms/channeltalkbot/cli.d.ts.map +1 -1
- package/dist/src/platforms/channeltalkbot/cli.js +11 -1
- package/dist/src/platforms/channeltalkbot/cli.js.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/auth.js +1 -5
- package/dist/src/platforms/channeltalkbot/commands/auth.js.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/bot.d.ts.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/bot.js +1 -6
- package/dist/src/platforms/channeltalkbot/commands/bot.js.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/chat.d.ts.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/chat.js +1 -6
- package/dist/src/platforms/channeltalkbot/commands/chat.js.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/group.d.ts.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/group.js +1 -6
- package/dist/src/platforms/channeltalkbot/commands/group.js.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/manager.d.ts.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/manager.js +1 -6
- package/dist/src/platforms/channeltalkbot/commands/manager.js.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/message.d.ts.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/message.js +1 -6
- package/dist/src/platforms/channeltalkbot/commands/message.js.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/whoami.d.ts.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/whoami.js +1 -6
- package/dist/src/platforms/channeltalkbot/commands/whoami.js.map +1 -1
- package/dist/src/platforms/channeltalkbot/credential-manager.d.ts +5 -0
- package/dist/src/platforms/channeltalkbot/credential-manager.d.ts.map +1 -1
- package/dist/src/platforms/channeltalkbot/credential-manager.js +34 -4
- package/dist/src/platforms/channeltalkbot/credential-manager.js.map +1 -1
- package/dist/src/platforms/discord/commands/auth.d.ts +1 -0
- package/dist/src/platforms/discord/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/discord/commands/auth.js +3 -1
- package/dist/src/platforms/discord/commands/auth.js.map +1 -1
- package/dist/src/platforms/discord/listener.d.ts +2 -0
- package/dist/src/platforms/discord/listener.d.ts.map +1 -1
- package/dist/src/platforms/discord/listener.js +51 -21
- package/dist/src/platforms/discord/listener.js.map +1 -1
- package/dist/src/platforms/discord/token-extractor.d.ts +2 -1
- package/dist/src/platforms/discord/token-extractor.d.ts.map +1 -1
- package/dist/src/platforms/discord/token-extractor.js +21 -6
- package/dist/src/platforms/discord/token-extractor.js.map +1 -1
- package/dist/src/platforms/discordbot/cli.d.ts.map +1 -1
- package/dist/src/platforms/discordbot/cli.js +12 -1
- package/dist/src/platforms/discordbot/cli.js.map +1 -1
- package/dist/src/platforms/discordbot/client.d.ts +3 -0
- package/dist/src/platforms/discordbot/client.d.ts.map +1 -1
- package/dist/src/platforms/discordbot/client.js +3 -0
- package/dist/src/platforms/discordbot/client.js.map +1 -1
- package/dist/src/platforms/discordbot/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/discordbot/commands/auth.js +1 -5
- package/dist/src/platforms/discordbot/commands/auth.js.map +1 -1
- package/dist/src/platforms/discordbot/commands/message.d.ts.map +1 -1
- package/dist/src/platforms/discordbot/commands/message.js +1 -6
- package/dist/src/platforms/discordbot/commands/message.js.map +1 -1
- package/dist/src/platforms/discordbot/commands/server.d.ts.map +1 -1
- package/dist/src/platforms/discordbot/commands/server.js +1 -4
- package/dist/src/platforms/discordbot/commands/server.js.map +1 -1
- package/dist/src/platforms/discordbot/commands/whoami.d.ts.map +1 -1
- package/dist/src/platforms/discordbot/commands/whoami.js +1 -6
- package/dist/src/platforms/discordbot/commands/whoami.js.map +1 -1
- package/dist/src/platforms/discordbot/index.d.ts +3 -1
- package/dist/src/platforms/discordbot/index.d.ts.map +1 -1
- package/dist/src/platforms/discordbot/index.js +2 -1
- package/dist/src/platforms/discordbot/index.js.map +1 -1
- package/dist/src/platforms/discordbot/listener.d.ts +43 -0
- package/dist/src/platforms/discordbot/listener.d.ts.map +1 -0
- package/dist/src/platforms/discordbot/listener.js +292 -0
- package/dist/src/platforms/discordbot/listener.js.map +1 -0
- package/dist/src/platforms/discordbot/types.d.ts +161 -0
- package/dist/src/platforms/discordbot/types.d.ts.map +1 -1
- package/dist/src/platforms/discordbot/types.js +34 -0
- package/dist/src/platforms/discordbot/types.js.map +1 -1
- package/dist/src/platforms/instagram/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/instagram/commands/auth.js +3 -1
- package/dist/src/platforms/instagram/commands/auth.js.map +1 -1
- package/dist/src/platforms/instagram/token-extractor.d.ts +2 -1
- package/dist/src/platforms/instagram/token-extractor.d.ts.map +1 -1
- package/dist/src/platforms/instagram/token-extractor.js +11 -2
- package/dist/src/platforms/instagram/token-extractor.js.map +1 -1
- package/dist/src/platforms/slack/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/slack/commands/auth.js +4 -2
- package/dist/src/platforms/slack/commands/auth.js.map +1 -1
- package/dist/src/platforms/slack/token-extractor.d.ts +4 -1
- package/dist/src/platforms/slack/token-extractor.d.ts.map +1 -1
- package/dist/src/platforms/slack/token-extractor.js +64 -15
- package/dist/src/platforms/slack/token-extractor.js.map +1 -1
- package/dist/src/platforms/slackbot/cli.d.ts.map +1 -1
- package/dist/src/platforms/slackbot/cli.js +15 -3
- package/dist/src/platforms/slackbot/cli.js.map +1 -1
- package/dist/src/platforms/slackbot/client.d.ts +22 -1
- package/dist/src/platforms/slackbot/client.d.ts.map +1 -1
- package/dist/src/platforms/slackbot/client.js +104 -1
- package/dist/src/platforms/slackbot/client.js.map +1 -1
- package/dist/src/platforms/slackbot/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/slackbot/commands/auth.js +1 -5
- package/dist/src/platforms/slackbot/commands/auth.js.map +1 -1
- package/dist/src/platforms/slackbot/commands/file.d.ts +3 -0
- package/dist/src/platforms/slackbot/commands/file.d.ts.map +1 -0
- package/dist/src/platforms/slackbot/commands/file.js +164 -0
- package/dist/src/platforms/slackbot/commands/file.js.map +1 -0
- package/dist/src/platforms/slackbot/commands/index.d.ts +1 -0
- package/dist/src/platforms/slackbot/commands/index.d.ts.map +1 -1
- package/dist/src/platforms/slackbot/commands/index.js +1 -0
- package/dist/src/platforms/slackbot/commands/index.js.map +1 -1
- package/dist/src/platforms/slackbot/commands/message.d.ts.map +1 -1
- package/dist/src/platforms/slackbot/commands/message.js +19 -0
- package/dist/src/platforms/slackbot/commands/message.js.map +1 -1
- package/dist/src/platforms/slackbot/commands/whoami.d.ts.map +1 -1
- package/dist/src/platforms/slackbot/commands/whoami.js +1 -6
- package/dist/src/platforms/slackbot/commands/whoami.js.map +1 -1
- package/dist/src/platforms/slackbot/credential-manager.d.ts +1 -0
- package/dist/src/platforms/slackbot/credential-manager.d.ts.map +1 -1
- package/dist/src/platforms/slackbot/credential-manager.js +30 -2
- package/dist/src/platforms/slackbot/credential-manager.js.map +1 -1
- package/dist/src/platforms/slackbot/index.d.ts +4 -1
- package/dist/src/platforms/slackbot/index.d.ts.map +1 -1
- package/dist/src/platforms/slackbot/index.js +1 -0
- package/dist/src/platforms/slackbot/index.js.map +1 -1
- package/dist/src/platforms/slackbot/listener.d.ts +44 -0
- package/dist/src/platforms/slackbot/listener.d.ts.map +1 -0
- package/dist/src/platforms/slackbot/listener.js +313 -0
- package/dist/src/platforms/slackbot/listener.js.map +1 -0
- package/dist/src/platforms/slackbot/types.d.ts +196 -1
- package/dist/src/platforms/slackbot/types.d.ts.map +1 -1
- package/dist/src/platforms/slackbot/types.js +4 -1
- package/dist/src/platforms/slackbot/types.js.map +1 -1
- package/dist/src/platforms/teams/commands/auth.d.ts +1 -0
- package/dist/src/platforms/teams/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/teams/commands/auth.js +37 -6
- package/dist/src/platforms/teams/commands/auth.js.map +1 -1
- package/dist/src/platforms/teams/ensure-auth.js +31 -9
- package/dist/src/platforms/teams/ensure-auth.js.map +1 -1
- package/dist/src/platforms/teams/token-extractor.d.ts +4 -1
- package/dist/src/platforms/teams/token-extractor.d.ts.map +1 -1
- package/dist/src/platforms/teams/token-extractor.js +80 -31
- package/dist/src/platforms/teams/token-extractor.js.map +1 -1
- package/dist/src/platforms/webex/commands/auth.d.ts +1 -0
- package/dist/src/platforms/webex/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/webex/commands/auth.js +3 -1
- package/dist/src/platforms/webex/commands/auth.js.map +1 -1
- package/dist/src/platforms/webex/token-extractor.d.ts +3 -1
- package/dist/src/platforms/webex/token-extractor.d.ts.map +1 -1
- package/dist/src/platforms/webex/token-extractor.js +16 -2
- package/dist/src/platforms/webex/token-extractor.js.map +1 -1
- package/dist/src/platforms/wechatbot/cli.d.ts.map +1 -1
- package/dist/src/platforms/wechatbot/cli.js +11 -1
- package/dist/src/platforms/wechatbot/cli.js.map +1 -1
- package/dist/src/platforms/wechatbot/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/wechatbot/commands/auth.js +1 -5
- package/dist/src/platforms/wechatbot/commands/auth.js.map +1 -1
- package/dist/src/platforms/wechatbot/commands/message.d.ts.map +1 -1
- package/dist/src/platforms/wechatbot/commands/message.js +1 -6
- package/dist/src/platforms/wechatbot/commands/message.js.map +1 -1
- package/dist/src/platforms/wechatbot/commands/template.d.ts.map +1 -1
- package/dist/src/platforms/wechatbot/commands/template.js +1 -6
- package/dist/src/platforms/wechatbot/commands/template.js.map +1 -1
- package/dist/src/platforms/wechatbot/commands/user.d.ts.map +1 -1
- package/dist/src/platforms/wechatbot/commands/user.js +1 -6
- package/dist/src/platforms/wechatbot/commands/user.js.map +1 -1
- package/dist/src/platforms/wechatbot/commands/whoami.d.ts.map +1 -1
- package/dist/src/platforms/wechatbot/commands/whoami.js +1 -6
- package/dist/src/platforms/wechatbot/commands/whoami.js.map +1 -1
- package/dist/src/platforms/whatsappbot/cli.d.ts.map +1 -1
- package/dist/src/platforms/whatsappbot/cli.js +11 -1
- package/dist/src/platforms/whatsappbot/cli.js.map +1 -1
- package/dist/src/platforms/whatsappbot/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/whatsappbot/commands/auth.js +1 -5
- package/dist/src/platforms/whatsappbot/commands/auth.js.map +1 -1
- package/dist/src/platforms/whatsappbot/commands/message.d.ts.map +1 -1
- package/dist/src/platforms/whatsappbot/commands/message.js +1 -6
- package/dist/src/platforms/whatsappbot/commands/message.js.map +1 -1
- package/dist/src/platforms/whatsappbot/commands/template.d.ts.map +1 -1
- package/dist/src/platforms/whatsappbot/commands/template.js +1 -6
- package/dist/src/platforms/whatsappbot/commands/template.js.map +1 -1
- package/dist/src/platforms/whatsappbot/commands/whoami.d.ts.map +1 -1
- package/dist/src/platforms/whatsappbot/commands/whoami.js +1 -6
- package/dist/src/platforms/whatsappbot/commands/whoami.js.map +1 -1
- package/dist/src/shared/chromium/browsers.d.ts +8 -0
- package/dist/src/shared/chromium/browsers.d.ts.map +1 -1
- package/dist/src/shared/chromium/browsers.js +58 -3
- package/dist/src/shared/chromium/browsers.js.map +1 -1
- package/dist/src/shared/chromium/cli-options.d.ts +5 -0
- package/dist/src/shared/chromium/cli-options.d.ts.map +1 -0
- package/dist/src/shared/chromium/cli-options.js +8 -0
- package/dist/src/shared/chromium/cli-options.js.map +1 -0
- package/dist/src/shared/chromium/decryptor.d.ts +6 -0
- package/dist/src/shared/chromium/decryptor.d.ts.map +1 -1
- package/dist/src/shared/chromium/decryptor.js +26 -6
- package/dist/src/shared/chromium/decryptor.js.map +1 -1
- package/dist/src/shared/chromium/index.d.ts +3 -1
- package/dist/src/shared/chromium/index.d.ts.map +1 -1
- package/dist/src/shared/chromium/index.js +2 -1
- package/dist/src/shared/chromium/index.js.map +1 -1
- package/dist/src/shared/utils/cli-output.d.ts +7 -0
- package/dist/src/shared/utils/cli-output.d.ts.map +1 -0
- package/dist/src/shared/utils/cli-output.js +7 -0
- package/dist/src/shared/utils/cli-output.js.map +1 -0
- package/dist/src/tui/app.d.ts.map +1 -1
- package/dist/src/tui/app.js +73 -20
- package/dist/src/tui/app.js.map +1 -1
- package/docs/content/docs/cli/channeltalk.mdx +4 -0
- package/docs/content/docs/cli/discord.mdx +5 -0
- package/docs/content/docs/cli/instagram.mdx +3 -0
- package/docs/content/docs/cli/slack.mdx +5 -0
- package/docs/content/docs/cli/slackbot.mdx +60 -22
- package/docs/content/docs/cli/teams.mdx +5 -0
- package/docs/content/docs/cli/webex.mdx +3 -0
- package/docs/content/docs/sdk/channeltalkbot.mdx +38 -1
- package/docs/content/docs/sdk/discordbot.mdx +501 -0
- package/docs/content/docs/sdk/meta.json +2 -0
- package/docs/content/docs/sdk/slackbot.mdx +576 -0
- package/e2e/README.md +1 -1
- package/e2e/channeltalk.e2e.test.ts +13 -13
- package/e2e/channeltalkbot.e2e.test.ts +13 -13
- package/e2e/config.ts +9 -4
- package/e2e/discord.e2e.test.ts +24 -24
- package/e2e/discordbot.e2e.test.ts +16 -16
- package/e2e/instagram.e2e.test.ts +10 -10
- package/e2e/kakaotalk.e2e.test.ts +7 -7
- package/e2e/line.e2e.test.ts +8 -8
- package/e2e/slack.e2e.test.ts +34 -34
- package/e2e/slackbot.e2e.test.ts +14 -14
- package/e2e/teams.e2e.test.ts +23 -23
- package/e2e/telegram.e2e.test.ts +8 -8
- package/e2e/webex.e2e.test.ts +14 -14
- package/e2e/whatsapp.e2e.test.ts +8 -8
- package/e2e/whatsappbot.e2e.test.ts +6 -6
- package/examples/discordbot-listen.ts +65 -0
- package/examples/slackbot-listen.ts +65 -0
- package/package.json +14 -1
- package/skills/agent-channeltalk/SKILL.md +5 -1
- package/skills/agent-channeltalk/references/authentication.md +5 -1
- package/skills/agent-channeltalkbot/SKILL.md +17 -3
- package/skills/agent-channeltalkbot/references/authentication.md +7 -5
- package/skills/agent-discord/SKILL.md +5 -1
- package/skills/agent-discord/references/authentication.md +7 -1
- package/skills/agent-discordbot/SKILL.md +13 -2
- package/skills/agent-discordbot/references/common-patterns.md +1 -1
- package/skills/agent-instagram/SKILL.md +7 -1
- package/skills/agent-instagram/references/authentication.md +6 -0
- package/skills/agent-kakaotalk/SKILL.md +1 -1
- package/skills/agent-line/SKILL.md +1 -1
- package/skills/agent-slack/SKILL.md +5 -1
- package/skills/agent-slack/references/authentication.md +7 -1
- package/skills/agent-slackbot/SKILL.md +56 -4
- package/skills/agent-slackbot/references/authentication.md +4 -0
- package/skills/agent-teams/SKILL.md +5 -1
- package/skills/agent-teams/references/authentication.md +7 -1
- package/skills/agent-telegram/SKILL.md +1 -1
- package/skills/agent-webex/SKILL.md +7 -1
- package/skills/agent-webex/references/authentication.md +6 -0
- package/skills/agent-wechatbot/SKILL.md +16 -1
- package/skills/agent-wechatbot/references/authentication.md +219 -0
- package/skills/agent-wechatbot/references/common-patterns.md +358 -0
- package/skills/agent-wechatbot/templates/account-summary.sh +122 -0
- package/skills/agent-wechatbot/templates/post-message.sh +122 -0
- package/skills/agent-wechatbot/templates/send-template.sh +152 -0
- package/skills/agent-whatsapp/SKILL.md +1 -1
- package/skills/agent-whatsappbot/SKILL.md +30 -1
- package/src/platforms/channeltalk/client.test.ts +26 -26
- package/src/platforms/channeltalk/commands/auth.test.ts +31 -19
- package/src/platforms/channeltalk/commands/auth.ts +15 -5
- package/src/platforms/channeltalk/commands/bot.test.ts +2 -2
- package/src/platforms/channeltalk/commands/chat.test.ts +3 -3
- package/src/platforms/channeltalk/commands/group.test.ts +4 -4
- package/src/platforms/channeltalk/commands/manager.test.ts +2 -2
- package/src/platforms/channeltalk/commands/message.test.ts +17 -17
- package/src/platforms/channeltalk/commands/snapshot.test.ts +7 -7
- package/src/platforms/channeltalk/commands/whoami.test.ts +3 -3
- package/src/platforms/channeltalk/credential-manager.test.ts +18 -18
- package/src/platforms/channeltalk/ensure-auth.test.ts +5 -5
- package/src/platforms/channeltalk/index.test.ts +23 -23
- package/src/platforms/channeltalk/token-extractor.test.ts +21 -21
- package/src/platforms/channeltalk/token-extractor.ts +24 -5
- package/src/platforms/channeltalk/types.test.ts +12 -12
- package/src/platforms/channeltalkbot/cli.ts +9 -0
- package/src/platforms/channeltalkbot/client.test.ts +14 -14
- package/src/platforms/channeltalkbot/commands/auth.test.ts +16 -16
- package/src/platforms/channeltalkbot/commands/auth.ts +1 -5
- package/src/platforms/channeltalkbot/commands/bot.test.ts +6 -6
- package/src/platforms/channeltalkbot/commands/bot.ts +1 -6
- package/src/platforms/channeltalkbot/commands/chat.test.ts +9 -9
- package/src/platforms/channeltalkbot/commands/chat.ts +1 -6
- package/src/platforms/channeltalkbot/commands/group.test.ts +6 -6
- package/src/platforms/channeltalkbot/commands/group.ts +1 -6
- package/src/platforms/channeltalkbot/commands/manager.test.ts +3 -3
- package/src/platforms/channeltalkbot/commands/manager.ts +1 -6
- package/src/platforms/channeltalkbot/commands/message.test.ts +10 -10
- package/src/platforms/channeltalkbot/commands/message.ts +1 -6
- package/src/platforms/channeltalkbot/commands/snapshot.test.ts +7 -7
- package/src/platforms/channeltalkbot/commands/whoami.test.ts +6 -4
- package/src/platforms/channeltalkbot/commands/whoami.ts +1 -6
- package/src/platforms/channeltalkbot/credential-manager.test.ts +123 -29
- package/src/platforms/channeltalkbot/credential-manager.ts +37 -4
- package/src/platforms/channeltalkbot/index.test.ts +15 -15
- package/src/platforms/discord/client.test.ts +28 -28
- package/src/platforms/discord/commands/auth.test.ts +7 -7
- package/src/platforms/discord/commands/auth.ts +13 -2
- package/src/platforms/discord/commands/channel.test.ts +7 -7
- package/src/platforms/discord/commands/dm.test.ts +4 -4
- package/src/platforms/discord/commands/file.test.ts +4 -4
- package/src/platforms/discord/commands/friend.test.ts +6 -6
- package/src/platforms/discord/commands/member.test.ts +5 -5
- package/src/platforms/discord/commands/mention.test.ts +5 -5
- package/src/platforms/discord/commands/message.test.ts +9 -9
- package/src/platforms/discord/commands/note.test.ts +6 -6
- package/src/platforms/discord/commands/profile.test.ts +4 -4
- package/src/platforms/discord/commands/reaction.test.ts +5 -5
- package/src/platforms/discord/commands/server.test.ts +7 -7
- package/src/platforms/discord/commands/snapshot.test.ts +6 -6
- package/src/platforms/discord/commands/thread.test.ts +6 -6
- package/src/platforms/discord/commands/user.test.ts +5 -5
- package/src/platforms/discord/commands/whoami.test.ts +6 -6
- package/src/platforms/discord/credential-manager.test.ts +16 -16
- package/src/platforms/discord/ensure-auth.test.ts +8 -8
- package/src/platforms/discord/index.test.ts +17 -17
- package/src/platforms/discord/listener.test.ts +92 -34
- package/src/platforms/discord/listener.ts +43 -19
- package/src/platforms/discord/token-extractor.test.ts +53 -53
- package/src/platforms/discord/token-extractor.ts +30 -6
- package/src/platforms/discord/types.test.ts +26 -26
- package/src/platforms/discordbot/cli.ts +10 -0
- package/src/platforms/discordbot/client.test.ts +31 -31
- package/src/platforms/discordbot/client.ts +4 -0
- package/src/platforms/discordbot/commands/auth.test.ts +18 -18
- package/src/platforms/discordbot/commands/auth.ts +1 -5
- package/src/platforms/discordbot/commands/channel.test.ts +11 -11
- package/src/platforms/discordbot/commands/file.test.ts +7 -7
- package/src/platforms/discordbot/commands/message.test.ts +25 -25
- package/src/platforms/discordbot/commands/message.ts +1 -6
- package/src/platforms/discordbot/commands/reaction.test.ts +6 -6
- package/src/platforms/discordbot/commands/server.test.ts +12 -12
- package/src/platforms/discordbot/commands/server.ts +1 -5
- package/src/platforms/discordbot/commands/snapshot.test.ts +13 -13
- package/src/platforms/discordbot/commands/thread.test.ts +10 -10
- package/src/platforms/discordbot/commands/user.test.ts +9 -9
- package/src/platforms/discordbot/commands/whoami.test.ts +4 -4
- package/src/platforms/discordbot/commands/whoami.ts +1 -6
- package/src/platforms/discordbot/credential-manager.test.ts +28 -28
- package/src/platforms/discordbot/index.test.ts +82 -0
- package/src/platforms/discordbot/index.ts +27 -9
- package/src/platforms/discordbot/listener.test.ts +1002 -0
- package/src/platforms/discordbot/listener.ts +321 -0
- package/src/platforms/discordbot/types.ts +163 -0
- package/src/platforms/instagram/client.test.ts +18 -18
- package/src/platforms/instagram/commands/auth.test.ts +11 -11
- package/src/platforms/instagram/commands/auth.ts +9 -1
- package/src/platforms/instagram/commands/chat.test.ts +6 -6
- package/src/platforms/instagram/commands/message.test.ts +11 -11
- package/src/platforms/instagram/commands/shared.test.ts +12 -12
- package/src/platforms/instagram/commands/whoami.test.ts +3 -3
- package/src/platforms/instagram/credential-manager.test.ts +21 -21
- package/src/platforms/instagram/ensure-auth.test.ts +4 -4
- package/src/platforms/instagram/index.test.ts +9 -9
- package/src/platforms/instagram/listener.test.ts +8 -8
- package/src/platforms/instagram/token-extractor.test.ts +35 -35
- package/src/platforms/instagram/token-extractor.ts +13 -1
- package/src/platforms/kakaotalk/client.test.ts +33 -33
- package/src/platforms/kakaotalk/commands/auth.test.ts +11 -11
- package/src/platforms/kakaotalk/commands/chat.test.ts +6 -6
- package/src/platforms/kakaotalk/commands/message.test.ts +7 -7
- package/src/platforms/kakaotalk/commands/whoami.test.ts +5 -5
- package/src/platforms/kakaotalk/credential-manager.test.ts +15 -15
- package/src/platforms/kakaotalk/index.test.ts +15 -15
- package/src/platforms/kakaotalk/listener.test.ts +17 -17
- package/src/platforms/line/client.test.ts +17 -17
- package/src/platforms/line/commands/auth.test.ts +8 -8
- package/src/platforms/line/commands/chat.test.ts +7 -7
- package/src/platforms/line/commands/friend.test.ts +6 -6
- package/src/platforms/line/commands/message.test.ts +7 -7
- package/src/platforms/line/commands/whoami.test.ts +6 -6
- package/src/platforms/line/credential-manager.test.ts +17 -17
- package/src/platforms/line/index.test.ts +10 -10
- package/src/platforms/line/listener.test.ts +15 -15
- package/src/platforms/line/types.test.ts +14 -14
- package/src/platforms/slack/cli.test.ts +8 -8
- package/src/platforms/slack/client.test.ts +151 -151
- package/src/platforms/slack/commands/activity.test.ts +13 -13
- package/src/platforms/slack/commands/auth.test.ts +34 -34
- package/src/platforms/slack/commands/auth.ts +11 -2
- package/src/platforms/slack/commands/bookmark.test.ts +9 -9
- package/src/platforms/slack/commands/channel.test.ts +17 -17
- package/src/platforms/slack/commands/drafts.test.ts +7 -7
- package/src/platforms/slack/commands/emoji.test.ts +3 -3
- package/src/platforms/slack/commands/file.test.ts +12 -12
- package/src/platforms/slack/commands/message.test.ts +19 -19
- package/src/platforms/slack/commands/pin.test.ts +7 -7
- package/src/platforms/slack/commands/reaction.test.ts +10 -10
- package/src/platforms/slack/commands/reminder.test.ts +9 -9
- package/src/platforms/slack/commands/saved.test.ts +7 -7
- package/src/platforms/slack/commands/sections.test.ts +5 -5
- package/src/platforms/slack/commands/snapshot.test.ts +13 -13
- package/src/platforms/slack/commands/unread.test.ts +6 -6
- package/src/platforms/slack/commands/user.test.ts +10 -10
- package/src/platforms/slack/commands/usergroup.test.ts +15 -15
- package/src/platforms/slack/commands/whoami.test.ts +6 -6
- package/src/platforms/slack/commands/workspace.test.ts +26 -26
- package/src/platforms/slack/credential-manager.test.ts +14 -14
- package/src/platforms/slack/ensure-auth.test.ts +21 -21
- package/src/platforms/slack/index.test.ts +12 -12
- package/src/platforms/slack/listener.test.ts +17 -17
- package/src/platforms/slack/token-extractor-node.test.ts +2 -2
- package/src/platforms/slack/token-extractor.test.ts +133 -37
- package/src/platforms/slack/token-extractor.ts +76 -13
- package/src/platforms/slack/types.test.ts +21 -21
- package/src/platforms/slackbot/cli.ts +13 -1
- package/src/platforms/slackbot/client.test.ts +296 -22
- package/src/platforms/slackbot/client.ts +130 -2
- package/src/platforms/slackbot/commands/auth.test.ts +14 -14
- package/src/platforms/slackbot/commands/auth.ts +1 -5
- package/src/platforms/slackbot/commands/channel.test.ts +7 -7
- package/src/platforms/slackbot/commands/file.test.ts +201 -0
- package/src/platforms/slackbot/commands/file.ts +212 -0
- package/src/platforms/slackbot/commands/index.ts +1 -0
- package/src/platforms/slackbot/commands/message.test.ts +13 -13
- package/src/platforms/slackbot/commands/message.ts +22 -0
- package/src/platforms/slackbot/commands/reaction.test.ts +6 -6
- package/src/platforms/slackbot/commands/user.test.ts +7 -7
- package/src/platforms/slackbot/commands/whoami.test.ts +4 -4
- package/src/platforms/slackbot/commands/whoami.ts +1 -6
- package/src/platforms/slackbot/credential-manager.test.ts +83 -23
- package/src/platforms/slackbot/credential-manager.ts +32 -2
- package/src/platforms/slackbot/index.test.ts +59 -0
- package/src/platforms/slackbot/index.ts +31 -7
- package/src/platforms/slackbot/listener.test.ts +1012 -0
- package/src/platforms/slackbot/listener.ts +362 -0
- package/src/platforms/slackbot/types.test.ts +7 -7
- package/src/platforms/slackbot/types.ts +224 -1
- package/src/platforms/teams/client.test.ts +30 -30
- package/src/platforms/teams/commands/auth.test.ts +9 -9
- package/src/platforms/teams/commands/auth.ts +66 -7
- package/src/platforms/teams/commands/channel.test.ts +7 -7
- package/src/platforms/teams/commands/file.test.ts +4 -4
- package/src/platforms/teams/commands/message.test.ts +5 -5
- package/src/platforms/teams/commands/reaction.test.ts +4 -4
- package/src/platforms/teams/commands/snapshot.test.ts +7 -7
- package/src/platforms/teams/commands/team.test.ts +8 -8
- package/src/platforms/teams/commands/user.test.ts +4 -4
- package/src/platforms/teams/commands/whoami.test.ts +6 -6
- package/src/platforms/teams/credential-manager.test.ts +17 -17
- package/src/platforms/teams/ensure-auth.test.ts +69 -18
- package/src/platforms/teams/ensure-auth.ts +39 -11
- package/src/platforms/teams/index.test.ts +15 -15
- package/src/platforms/teams/token-extractor.test.ts +251 -69
- package/src/platforms/teams/token-extractor.ts +94 -31
- package/src/platforms/teams/types.test.ts +26 -26
- package/src/platforms/telegram/app-config.test.ts +4 -4
- package/src/platforms/telegram/chat-utils.test.ts +12 -12
- package/src/platforms/telegram/client.test.ts +4 -4
- package/src/platforms/telegram/commands/auth.test.ts +16 -16
- package/src/platforms/telegram/commands/chat.test.ts +9 -9
- package/src/platforms/telegram/commands/message.test.ts +6 -6
- package/src/platforms/telegram/commands/shared.test.ts +3 -3
- package/src/platforms/telegram/commands/whoami.test.ts +3 -3
- package/src/platforms/telegram/credential-manager.test.ts +10 -10
- package/src/platforms/telegram/types.test.ts +6 -6
- package/src/platforms/webex/app-config.test.ts +8 -8
- package/src/platforms/webex/cli.test.ts +5 -5
- package/src/platforms/webex/client.test.ts +65 -65
- package/src/platforms/webex/commands/auth.test.ts +18 -18
- package/src/platforms/webex/commands/auth.ts +13 -2
- package/src/platforms/webex/commands/member.test.ts +5 -5
- package/src/platforms/webex/commands/message.test.ts +12 -12
- package/src/platforms/webex/commands/snapshot.test.ts +5 -5
- package/src/platforms/webex/commands/space.test.ts +10 -10
- package/src/platforms/webex/commands/whoami.test.ts +6 -6
- package/src/platforms/webex/credential-manager.test.ts +22 -22
- package/src/platforms/webex/encryption.test.ts +4 -4
- package/src/platforms/webex/ensure-auth.test.ts +5 -5
- package/src/platforms/webex/index.test.ts +5 -5
- package/src/platforms/webex/markdown-to-html.test.ts +33 -33
- package/src/platforms/webex/token-extractor.test.ts +23 -23
- package/src/platforms/webex/token-extractor.ts +25 -3
- package/src/platforms/webex/types.test.ts +27 -27
- package/src/platforms/wechatbot/cli.ts +9 -0
- package/src/platforms/wechatbot/client.test.ts +27 -27
- package/src/platforms/wechatbot/commands/auth.test.ts +15 -15
- package/src/platforms/wechatbot/commands/auth.ts +1 -5
- package/src/platforms/wechatbot/commands/message.test.ts +8 -8
- package/src/platforms/wechatbot/commands/message.ts +1 -6
- package/src/platforms/wechatbot/commands/template.test.ts +9 -9
- package/src/platforms/wechatbot/commands/template.ts +1 -6
- package/src/platforms/wechatbot/commands/user.test.ts +7 -7
- package/src/platforms/wechatbot/commands/user.ts +1 -6
- package/src/platforms/wechatbot/commands/whoami.test.ts +5 -5
- package/src/platforms/wechatbot/commands/whoami.ts +1 -6
- package/src/platforms/wechatbot/credential-manager.test.ts +18 -18
- package/src/platforms/wechatbot/index.test.ts +10 -10
- package/src/platforms/wechatbot/types.test.ts +25 -25
- package/src/platforms/whatsapp/commands/auth.test.ts +13 -13
- package/src/platforms/whatsapp/commands/chat.test.ts +8 -8
- package/src/platforms/whatsapp/commands/message.test.ts +10 -10
- package/src/platforms/whatsapp/commands/whoami.test.ts +3 -3
- package/src/platforms/whatsapp/credential-manager.test.ts +23 -23
- package/src/platforms/whatsapp/ensure-auth.test.ts +4 -4
- package/src/platforms/whatsapp/index.test.ts +8 -8
- package/src/platforms/whatsapp/types.test.ts +42 -42
- package/src/platforms/whatsappbot/cli.ts +9 -0
- package/src/platforms/whatsappbot/client.test.ts +27 -27
- package/src/platforms/whatsappbot/commands/auth.test.ts +14 -14
- package/src/platforms/whatsappbot/commands/auth.ts +1 -5
- package/src/platforms/whatsappbot/commands/message.test.ts +16 -16
- package/src/platforms/whatsappbot/commands/message.ts +1 -6
- package/src/platforms/whatsappbot/commands/template.test.ts +9 -9
- package/src/platforms/whatsappbot/commands/template.ts +1 -6
- package/src/platforms/whatsappbot/commands/whoami.test.ts +5 -5
- package/src/platforms/whatsappbot/commands/whoami.ts +1 -6
- package/src/platforms/whatsappbot/credential-manager.test.ts +18 -18
- package/src/platforms/whatsappbot/index.test.ts +7 -7
- package/src/platforms/whatsappbot/types.test.ts +18 -18
- package/src/shared/chromium/browsers.test.ts +102 -22
- package/src/shared/chromium/browsers.ts +72 -3
- package/src/shared/chromium/cli-options.test.ts +22 -0
- package/src/shared/chromium/cli-options.ts +12 -0
- package/src/shared/chromium/cookie-reader.test.ts +13 -13
- package/src/shared/chromium/decryptor.test.ts +97 -32
- package/src/shared/chromium/decryptor.ts +27 -6
- package/src/shared/chromium/index.ts +3 -0
- package/src/shared/utils/cli-output.test.ts +57 -0
- package/src/shared/utils/cli-output.ts +8 -0
- package/src/shared/utils/concurrency.test.ts +6 -6
- package/src/shared/utils/derived-key-cache.test.ts +11 -11
- package/src/tui/app.ts +129 -20
- package/src/tui/utils.test.ts +31 -31
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { readFileSync, statSync, writeFileSync } from 'node:fs'
|
|
2
|
+
import { basename, join, resolve } from 'node:path'
|
|
3
|
+
|
|
4
|
+
import { Command } from 'commander'
|
|
5
|
+
|
|
6
|
+
import { handleError } from '@/shared/utils/error-handler'
|
|
7
|
+
import { formatOutput } from '@/shared/utils/output'
|
|
8
|
+
|
|
9
|
+
import { type BotOption, getClient } from './shared'
|
|
10
|
+
|
|
11
|
+
async function uploadAction(
|
|
12
|
+
channelInput: string,
|
|
13
|
+
path: string,
|
|
14
|
+
options: BotOption & { filename?: string; thread?: string; title?: string; comment?: string },
|
|
15
|
+
): Promise<void> {
|
|
16
|
+
try {
|
|
17
|
+
const client = await getClient(options)
|
|
18
|
+
const channel = await client.resolveChannel(channelInput)
|
|
19
|
+
|
|
20
|
+
const filePath = resolve(path)
|
|
21
|
+
const fileBuffer = readFileSync(filePath)
|
|
22
|
+
const filename = options.filename || basename(filePath) || 'file'
|
|
23
|
+
|
|
24
|
+
const file = await client.uploadFile(channel, fileBuffer, filename, {
|
|
25
|
+
thread_ts: options.thread,
|
|
26
|
+
title: options.title,
|
|
27
|
+
initial_comment: options.comment,
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
console.log(
|
|
31
|
+
formatOutput(
|
|
32
|
+
{
|
|
33
|
+
id: file.id,
|
|
34
|
+
name: file.name,
|
|
35
|
+
title: file.title,
|
|
36
|
+
mimetype: file.mimetype,
|
|
37
|
+
size: file.size,
|
|
38
|
+
url_private: file.url_private,
|
|
39
|
+
created: file.created,
|
|
40
|
+
user: file.user,
|
|
41
|
+
channels: file.channels,
|
|
42
|
+
},
|
|
43
|
+
options.pretty,
|
|
44
|
+
),
|
|
45
|
+
)
|
|
46
|
+
} catch (error) {
|
|
47
|
+
handleError(error as Error)
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
async function listAction(options: BotOption & { channel?: string; user?: string; limit?: string }): Promise<void> {
|
|
52
|
+
try {
|
|
53
|
+
const client = await getClient(options)
|
|
54
|
+
const channel = options.channel ? await client.resolveChannel(options.channel) : undefined
|
|
55
|
+
const limit = options.limit ? parseInt(options.limit, 10) : undefined
|
|
56
|
+
|
|
57
|
+
const files = await client.listFiles({ channel, user: options.user, limit })
|
|
58
|
+
|
|
59
|
+
console.log(
|
|
60
|
+
formatOutput(
|
|
61
|
+
files.map((file) => ({
|
|
62
|
+
id: file.id,
|
|
63
|
+
name: file.name,
|
|
64
|
+
title: file.title,
|
|
65
|
+
mimetype: file.mimetype,
|
|
66
|
+
size: file.size,
|
|
67
|
+
url_private: file.url_private,
|
|
68
|
+
created: file.created,
|
|
69
|
+
user: file.user,
|
|
70
|
+
channels: file.channels,
|
|
71
|
+
})),
|
|
72
|
+
options.pretty,
|
|
73
|
+
),
|
|
74
|
+
)
|
|
75
|
+
} catch (error) {
|
|
76
|
+
handleError(error as Error)
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
async function infoAction(fileId: string, options: BotOption): Promise<void> {
|
|
81
|
+
try {
|
|
82
|
+
const client = await getClient(options)
|
|
83
|
+
const file = await client.getFileInfo(fileId)
|
|
84
|
+
|
|
85
|
+
console.log(
|
|
86
|
+
formatOutput(
|
|
87
|
+
{
|
|
88
|
+
id: file.id,
|
|
89
|
+
name: file.name,
|
|
90
|
+
title: file.title,
|
|
91
|
+
mimetype: file.mimetype,
|
|
92
|
+
size: file.size,
|
|
93
|
+
url_private: file.url_private,
|
|
94
|
+
created: file.created,
|
|
95
|
+
user: file.user,
|
|
96
|
+
channels: file.channels,
|
|
97
|
+
},
|
|
98
|
+
options.pretty,
|
|
99
|
+
),
|
|
100
|
+
)
|
|
101
|
+
} catch (error) {
|
|
102
|
+
handleError(error as Error)
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
async function downloadAction(fileId: string, outputPath: string | undefined, options: BotOption): Promise<void> {
|
|
107
|
+
try {
|
|
108
|
+
const client = await getClient(options)
|
|
109
|
+
const { buffer, file } = await client.downloadFile(fileId)
|
|
110
|
+
|
|
111
|
+
const safeName = basename(file.name.replace(/\\/g, '/'))
|
|
112
|
+
let destPath = outputPath ? resolve(outputPath) : resolve(safeName)
|
|
113
|
+
let isDirectory = false
|
|
114
|
+
try {
|
|
115
|
+
isDirectory = statSync(destPath).isDirectory()
|
|
116
|
+
} catch (error) {
|
|
117
|
+
const err = error as NodeJS.ErrnoException
|
|
118
|
+
if (err.code !== 'ENOENT') {
|
|
119
|
+
throw error
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if (isDirectory) {
|
|
124
|
+
destPath = join(destPath, safeName)
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
writeFileSync(destPath, buffer)
|
|
128
|
+
|
|
129
|
+
console.log(
|
|
130
|
+
formatOutput(
|
|
131
|
+
{
|
|
132
|
+
id: file.id,
|
|
133
|
+
name: file.name,
|
|
134
|
+
mimetype: file.mimetype,
|
|
135
|
+
size: file.size,
|
|
136
|
+
path: destPath,
|
|
137
|
+
},
|
|
138
|
+
options.pretty,
|
|
139
|
+
),
|
|
140
|
+
)
|
|
141
|
+
} catch (error) {
|
|
142
|
+
handleError(error as Error)
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
async function deleteAction(fileId: string, options: BotOption & { force?: boolean }): Promise<void> {
|
|
147
|
+
try {
|
|
148
|
+
if (!options.force) {
|
|
149
|
+
console.log(formatOutput({ warning: 'Use --force to confirm deletion', file_id: fileId }, options.pretty))
|
|
150
|
+
process.exit(1)
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
const client = await getClient(options)
|
|
154
|
+
await client.deleteFile(fileId)
|
|
155
|
+
|
|
156
|
+
console.log(formatOutput({ deleted: fileId }, options.pretty))
|
|
157
|
+
} catch (error) {
|
|
158
|
+
handleError(error as Error)
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
export const fileCommand = new Command('file')
|
|
163
|
+
.description('File commands')
|
|
164
|
+
.addCommand(
|
|
165
|
+
new Command('upload')
|
|
166
|
+
.description('Upload file to a channel')
|
|
167
|
+
.argument('<channel>', 'Channel ID or name')
|
|
168
|
+
.argument('<path>', 'File path')
|
|
169
|
+
.option('--filename <name>', 'Override filename')
|
|
170
|
+
.option('--thread <ts>', 'Upload as a reply to a thread')
|
|
171
|
+
.option('--title <title>', 'File title')
|
|
172
|
+
.option('--comment <text>', 'Initial comment posted with the file')
|
|
173
|
+
.option('--bot <id>', 'Use specific bot')
|
|
174
|
+
.option('--pretty', 'Pretty print JSON output')
|
|
175
|
+
.action(uploadAction),
|
|
176
|
+
)
|
|
177
|
+
.addCommand(
|
|
178
|
+
new Command('list')
|
|
179
|
+
.description('List files visible to the bot')
|
|
180
|
+
.option('--channel <id>', 'Filter by channel ID or name')
|
|
181
|
+
.option('--user <id>', 'Filter by user ID')
|
|
182
|
+
.option('--limit <n>', 'Number of files to fetch')
|
|
183
|
+
.option('--bot <id>', 'Use specific bot')
|
|
184
|
+
.option('--pretty', 'Pretty print JSON output')
|
|
185
|
+
.action(listAction),
|
|
186
|
+
)
|
|
187
|
+
.addCommand(
|
|
188
|
+
new Command('info')
|
|
189
|
+
.description('Show file details')
|
|
190
|
+
.argument('<file>', 'File ID')
|
|
191
|
+
.option('--bot <id>', 'Use specific bot')
|
|
192
|
+
.option('--pretty', 'Pretty print JSON output')
|
|
193
|
+
.action(infoAction),
|
|
194
|
+
)
|
|
195
|
+
.addCommand(
|
|
196
|
+
new Command('download')
|
|
197
|
+
.description('Download a file by ID')
|
|
198
|
+
.argument('<file>', 'File ID')
|
|
199
|
+
.argument('[output-path]', 'Output file path or directory')
|
|
200
|
+
.option('--bot <id>', 'Use specific bot')
|
|
201
|
+
.option('--pretty', 'Pretty print JSON output')
|
|
202
|
+
.action(downloadAction),
|
|
203
|
+
)
|
|
204
|
+
.addCommand(
|
|
205
|
+
new Command('delete')
|
|
206
|
+
.description("Delete a file (bot's own files only)")
|
|
207
|
+
.argument('<file>', 'File ID')
|
|
208
|
+
.option('--force', 'Skip confirmation')
|
|
209
|
+
.option('--bot <id>', 'Use specific bot')
|
|
210
|
+
.option('--pretty', 'Pretty print JSON output')
|
|
211
|
+
.action(deleteAction),
|
|
212
|
+
)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { beforeEach, describe, expect, mock,
|
|
1
|
+
import { beforeEach, describe, expect, mock, it } from 'bun:test'
|
|
2
2
|
|
|
3
3
|
const mockResolveChannel = mock((_channel: string) => Promise.resolve('C123456'))
|
|
4
4
|
const mockPostMessage = mock(() =>
|
|
@@ -68,7 +68,7 @@ describe('message commands', () => {
|
|
|
68
68
|
})
|
|
69
69
|
|
|
70
70
|
describe('postMessage', () => {
|
|
71
|
-
|
|
71
|
+
it('sends message to channel', async () => {
|
|
72
72
|
// given
|
|
73
73
|
const client = await new SlackBotClient().login({ token: 'xoxb-test-token' })
|
|
74
74
|
|
|
@@ -81,7 +81,7 @@ describe('message commands', () => {
|
|
|
81
81
|
expect(result.type).toBe('message')
|
|
82
82
|
})
|
|
83
83
|
|
|
84
|
-
|
|
84
|
+
it('sends message with thread_ts', async () => {
|
|
85
85
|
// given
|
|
86
86
|
const client = await new SlackBotClient().login({ token: 'xoxb-test-token' })
|
|
87
87
|
|
|
@@ -94,7 +94,7 @@ describe('message commands', () => {
|
|
|
94
94
|
})
|
|
95
95
|
|
|
96
96
|
describe('getConversationHistory', () => {
|
|
97
|
-
|
|
97
|
+
it('returns messages from channel', async () => {
|
|
98
98
|
// given
|
|
99
99
|
const client = await new SlackBotClient().login({ token: 'xoxb-test-token' })
|
|
100
100
|
|
|
@@ -107,7 +107,7 @@ describe('message commands', () => {
|
|
|
107
107
|
expect(messages[1].text).toBe('World')
|
|
108
108
|
})
|
|
109
109
|
|
|
110
|
-
|
|
110
|
+
it('passes limit option', async () => {
|
|
111
111
|
// given
|
|
112
112
|
const client = await new SlackBotClient().login({ token: 'xoxb-test-token' })
|
|
113
113
|
|
|
@@ -120,7 +120,7 @@ describe('message commands', () => {
|
|
|
120
120
|
})
|
|
121
121
|
|
|
122
122
|
describe('getMessage', () => {
|
|
123
|
-
|
|
123
|
+
it('returns single message by ts', async () => {
|
|
124
124
|
// given
|
|
125
125
|
const client = await new SlackBotClient().login({ token: 'xoxb-test-token' })
|
|
126
126
|
|
|
@@ -133,7 +133,7 @@ describe('message commands', () => {
|
|
|
133
133
|
expect(message?.text).toBe('Hello world')
|
|
134
134
|
})
|
|
135
135
|
|
|
136
|
-
|
|
136
|
+
it('returns null when message not found', async () => {
|
|
137
137
|
// given
|
|
138
138
|
mockGetMessage.mockResolvedValueOnce(null)
|
|
139
139
|
const client = await new SlackBotClient().login({ token: 'xoxb-test-token' })
|
|
@@ -147,7 +147,7 @@ describe('message commands', () => {
|
|
|
147
147
|
})
|
|
148
148
|
|
|
149
149
|
describe('updateMessage', () => {
|
|
150
|
-
|
|
150
|
+
it('updates message text', async () => {
|
|
151
151
|
// given
|
|
152
152
|
const client = await new SlackBotClient().login({ token: 'xoxb-test-token' })
|
|
153
153
|
|
|
@@ -159,7 +159,7 @@ describe('message commands', () => {
|
|
|
159
159
|
expect(result.text).toBe('Updated text')
|
|
160
160
|
})
|
|
161
161
|
|
|
162
|
-
|
|
162
|
+
it('passes correct arguments', async () => {
|
|
163
163
|
// given
|
|
164
164
|
const client = await new SlackBotClient().login({ token: 'xoxb-test-token' })
|
|
165
165
|
|
|
@@ -172,7 +172,7 @@ describe('message commands', () => {
|
|
|
172
172
|
})
|
|
173
173
|
|
|
174
174
|
describe('deleteMessage', () => {
|
|
175
|
-
|
|
175
|
+
it('deletes message by ts', async () => {
|
|
176
176
|
// given
|
|
177
177
|
const client = await new SlackBotClient().login({ token: 'xoxb-test-token' })
|
|
178
178
|
|
|
@@ -185,7 +185,7 @@ describe('message commands', () => {
|
|
|
185
185
|
})
|
|
186
186
|
|
|
187
187
|
describe('getThreadReplies', () => {
|
|
188
|
-
|
|
188
|
+
it('returns thread replies', async () => {
|
|
189
189
|
// given
|
|
190
190
|
const client = await new SlackBotClient().login({ token: 'xoxb-test-token' })
|
|
191
191
|
|
|
@@ -198,7 +198,7 @@ describe('message commands', () => {
|
|
|
198
198
|
expect(replies[1].text).toBe('Thread reply 2')
|
|
199
199
|
})
|
|
200
200
|
|
|
201
|
-
|
|
201
|
+
it('passes limit option', async () => {
|
|
202
202
|
// given
|
|
203
203
|
const client = await new SlackBotClient().login({ token: 'xoxb-test-token' })
|
|
204
204
|
|
|
@@ -211,7 +211,7 @@ describe('message commands', () => {
|
|
|
211
211
|
})
|
|
212
212
|
|
|
213
213
|
describe('resolveChannel', () => {
|
|
214
|
-
|
|
214
|
+
it('resolves channel name to ID', async () => {
|
|
215
215
|
// given
|
|
216
216
|
const client = await new SlackBotClient().login({ token: 'xoxb-test-token' })
|
|
217
217
|
|
|
@@ -98,6 +98,18 @@ async function deleteAction(channelInput: string, ts: string, options: BotOption
|
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
+
async function typingAction(channelInput: string, threadTs: string, status: string, options: BotOption): Promise<void> {
|
|
102
|
+
try {
|
|
103
|
+
const client = await getClient(options)
|
|
104
|
+
const channel = await client.resolveChannel(channelInput)
|
|
105
|
+
await client.setAssistantStatus(channel, threadTs, status)
|
|
106
|
+
|
|
107
|
+
console.log(formatOutput({ channel, thread_ts: threadTs, status }, options.pretty))
|
|
108
|
+
} catch (error) {
|
|
109
|
+
handleError(error as Error)
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
101
113
|
async function repliesAction(
|
|
102
114
|
channelInput: string,
|
|
103
115
|
threadTs: string,
|
|
@@ -165,6 +177,16 @@ export const messageCommand = new Command('message')
|
|
|
165
177
|
.option('--pretty', 'Pretty print JSON output')
|
|
166
178
|
.action(deleteAction),
|
|
167
179
|
)
|
|
180
|
+
.addCommand(
|
|
181
|
+
new Command('typing')
|
|
182
|
+
.description('Set typing status in an AI Assistant thread (e.g. "is typing...")')
|
|
183
|
+
.argument('<channel>', 'Channel ID or name')
|
|
184
|
+
.argument('<thread_ts>', 'Thread timestamp')
|
|
185
|
+
.argument('[status]', 'Status text (pass empty string to clear)', 'is typing...')
|
|
186
|
+
.option('--bot <id>', 'Use specific bot')
|
|
187
|
+
.option('--pretty', 'Pretty print JSON output')
|
|
188
|
+
.action(typingAction),
|
|
189
|
+
)
|
|
168
190
|
.addCommand(
|
|
169
191
|
new Command('replies')
|
|
170
192
|
.description('Get thread replies')
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { beforeEach, describe, expect, mock,
|
|
1
|
+
import { beforeEach, describe, expect, mock, it } from 'bun:test'
|
|
2
2
|
|
|
3
3
|
const mockResolveChannel = mock((_channel: string) => Promise.resolve('C123456'))
|
|
4
4
|
const mockAddReaction = mock(() => Promise.resolve())
|
|
@@ -25,7 +25,7 @@ describe('reaction commands', () => {
|
|
|
25
25
|
})
|
|
26
26
|
|
|
27
27
|
describe('addReaction', () => {
|
|
28
|
-
|
|
28
|
+
it('adds emoji reaction to message', async () => {
|
|
29
29
|
// given
|
|
30
30
|
const client = await new SlackBotClient().login({ token: 'xoxb-test-token' })
|
|
31
31
|
|
|
@@ -36,7 +36,7 @@ describe('reaction commands', () => {
|
|
|
36
36
|
expect(mockAddReaction).toHaveBeenCalledWith('C123456', '1234567890.000100', 'thumbsup')
|
|
37
37
|
})
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
it('passes correct arguments', async () => {
|
|
40
40
|
// given
|
|
41
41
|
const client = await new SlackBotClient().login({ token: 'xoxb-test-token' })
|
|
42
42
|
|
|
@@ -50,7 +50,7 @@ describe('reaction commands', () => {
|
|
|
50
50
|
})
|
|
51
51
|
|
|
52
52
|
describe('removeReaction', () => {
|
|
53
|
-
|
|
53
|
+
it('removes emoji reaction from message', async () => {
|
|
54
54
|
// given
|
|
55
55
|
const client = await new SlackBotClient().login({ token: 'xoxb-test-token' })
|
|
56
56
|
|
|
@@ -61,7 +61,7 @@ describe('reaction commands', () => {
|
|
|
61
61
|
expect(mockRemoveReaction).toHaveBeenCalledWith('C123456', '1234567890.000100', 'thumbsup')
|
|
62
62
|
})
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
it('passes correct arguments', async () => {
|
|
65
65
|
// given
|
|
66
66
|
const client = await new SlackBotClient().login({ token: 'xoxb-test-token' })
|
|
67
67
|
|
|
@@ -75,7 +75,7 @@ describe('reaction commands', () => {
|
|
|
75
75
|
})
|
|
76
76
|
|
|
77
77
|
describe('resolveChannel', () => {
|
|
78
|
-
|
|
78
|
+
it('resolves channel name before reaction', async () => {
|
|
79
79
|
// given
|
|
80
80
|
const client = await new SlackBotClient().login({ token: 'xoxb-test-token' })
|
|
81
81
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { beforeEach, describe, expect, mock,
|
|
1
|
+
import { beforeEach, describe, expect, mock, it } from 'bun:test'
|
|
2
2
|
|
|
3
3
|
const mockListUsers = mock(() =>
|
|
4
4
|
Promise.resolve([
|
|
@@ -61,7 +61,7 @@ describe('user commands', () => {
|
|
|
61
61
|
})
|
|
62
62
|
|
|
63
63
|
describe('listUsers', () => {
|
|
64
|
-
|
|
64
|
+
it('returns list of users', async () => {
|
|
65
65
|
// given
|
|
66
66
|
const client = await new SlackBotClient().login({ token: 'xoxb-test-token' })
|
|
67
67
|
|
|
@@ -74,7 +74,7 @@ describe('user commands', () => {
|
|
|
74
74
|
expect(users[1].name).toBe('bob')
|
|
75
75
|
})
|
|
76
76
|
|
|
77
|
-
|
|
77
|
+
it('includes user metadata', async () => {
|
|
78
78
|
// given
|
|
79
79
|
const client = await new SlackBotClient().login({ token: 'xoxb-test-token' })
|
|
80
80
|
|
|
@@ -90,7 +90,7 @@ describe('user commands', () => {
|
|
|
90
90
|
expect(user.is_admin).toBe(false)
|
|
91
91
|
})
|
|
92
92
|
|
|
93
|
-
|
|
93
|
+
it('passes limit option', async () => {
|
|
94
94
|
// given
|
|
95
95
|
const client = await new SlackBotClient().login({ token: 'xoxb-test-token' })
|
|
96
96
|
|
|
@@ -103,7 +103,7 @@ describe('user commands', () => {
|
|
|
103
103
|
})
|
|
104
104
|
|
|
105
105
|
describe('getUserInfo', () => {
|
|
106
|
-
|
|
106
|
+
it('returns user details by ID', async () => {
|
|
107
107
|
// given
|
|
108
108
|
const client = await new SlackBotClient().login({ token: 'xoxb-test-token' })
|
|
109
109
|
|
|
@@ -116,7 +116,7 @@ describe('user commands', () => {
|
|
|
116
116
|
expect(user.real_name).toBe('Alice Smith')
|
|
117
117
|
})
|
|
118
118
|
|
|
119
|
-
|
|
119
|
+
it('includes profile information', async () => {
|
|
120
120
|
// given
|
|
121
121
|
const client = await new SlackBotClient().login({ token: 'xoxb-test-token' })
|
|
122
122
|
|
|
@@ -129,7 +129,7 @@ describe('user commands', () => {
|
|
|
129
129
|
expect(user.profile?.status_text).toBe('Working from home')
|
|
130
130
|
})
|
|
131
131
|
|
|
132
|
-
|
|
132
|
+
it('passes the user ID to getUserInfo', async () => {
|
|
133
133
|
// given
|
|
134
134
|
const client = await new SlackBotClient().login({ token: 'xoxb-test-token' })
|
|
135
135
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { afterEach, beforeEach, describe, expect, mock,
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, mock, it } from 'bun:test'
|
|
2
2
|
import { existsSync, rmSync } from 'node:fs'
|
|
3
3
|
import { mkdir } from 'node:fs/promises'
|
|
4
4
|
import { tmpdir } from 'node:os'
|
|
@@ -45,7 +45,7 @@ describe('whoami command', () => {
|
|
|
45
45
|
process.env = originalEnv
|
|
46
46
|
})
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
it('returns auth info for current bot', async () => {
|
|
49
49
|
const manager = new SlackBotCredentialManager(tempDir)
|
|
50
50
|
await manager.setCredentials({
|
|
51
51
|
token: 'xoxb-test-token',
|
|
@@ -65,7 +65,7 @@ describe('whoami command', () => {
|
|
|
65
65
|
expect(result.error).toBeUndefined()
|
|
66
66
|
})
|
|
67
67
|
|
|
68
|
-
|
|
68
|
+
it('returns auth info for specific --bot', async () => {
|
|
69
69
|
const manager = new SlackBotCredentialManager(tempDir)
|
|
70
70
|
await manager.setCredentials({
|
|
71
71
|
token: 'xoxb-test-token',
|
|
@@ -82,7 +82,7 @@ describe('whoami command', () => {
|
|
|
82
82
|
expect(mockTestAuth).toHaveBeenCalledTimes(1)
|
|
83
83
|
})
|
|
84
84
|
|
|
85
|
-
|
|
85
|
+
it('returns error when client throws', async () => {
|
|
86
86
|
mockTestAuth.mockImplementationOnce(() => Promise.reject(new Error('API Error')))
|
|
87
87
|
|
|
88
88
|
const manager = new SlackBotCredentialManager(tempDir)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Command } from 'commander'
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { cliOutput } from '@/shared/utils/cli-output'
|
|
4
4
|
|
|
5
5
|
import type { BotOption } from './shared'
|
|
6
6
|
import { getClient } from './shared'
|
|
@@ -30,11 +30,6 @@ export async function whoamiAction(options: BotOption): Promise<WhoamiResult> {
|
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
function cliOutput(result: WhoamiResult, pretty?: boolean): void {
|
|
34
|
-
console.log(formatOutput(result, pretty))
|
|
35
|
-
if (result.error) process.exit(1)
|
|
36
|
-
}
|
|
37
|
-
|
|
38
33
|
export const whoamiCommand = new Command('whoami')
|
|
39
34
|
.description('Show current authenticated bot')
|
|
40
35
|
.option('--bot <id>', 'Bot ID to use')
|