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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { afterEach, beforeEach, describe, expect,
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it } from 'bun:test'
|
|
2
2
|
|
|
3
3
|
import { ChannelBotClient } from './client'
|
|
4
4
|
import { ChannelBotError } from './types'
|
|
@@ -46,7 +46,7 @@ describe('ChannelBotClient', () => {
|
|
|
46
46
|
)
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
it('successful GET request returns unwrapped JSON', async () => {
|
|
50
50
|
mockResponse({ channel: { id: 'ch-1', name: 'My Channel' } })
|
|
51
51
|
|
|
52
52
|
const client = await new ChannelBotClient().login({ accessKey: 'key-1', accessSecret: 'secret-1' })
|
|
@@ -56,7 +56,7 @@ describe('ChannelBotClient', () => {
|
|
|
56
56
|
expect(fetchCalls[0].url).toBe('https://api.channel.io/open/v5/channel')
|
|
57
57
|
})
|
|
58
58
|
|
|
59
|
-
|
|
59
|
+
it('auth headers are set on every request', async () => {
|
|
60
60
|
mockResponse({ channel: { id: 'ch-1', name: 'My Channel' } })
|
|
61
61
|
mockResponse({ user: { id: 'u-1', channelId: 'ch-1' } })
|
|
62
62
|
|
|
@@ -73,7 +73,7 @@ describe('ChannelBotClient', () => {
|
|
|
73
73
|
}
|
|
74
74
|
})
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
it('429 response triggers retry with Retry-After wait', async () => {
|
|
77
77
|
mockResponse({ message: 'Rate limited' }, 429, { 'Retry-After': '0.05' })
|
|
78
78
|
mockResponse({ channel: { id: 'ch-1', name: 'My Channel' } })
|
|
79
79
|
|
|
@@ -87,7 +87,7 @@ describe('ChannelBotClient', () => {
|
|
|
87
87
|
expect(elapsed).toBeGreaterThanOrEqual(40)
|
|
88
88
|
})
|
|
89
89
|
|
|
90
|
-
|
|
90
|
+
it('500 response triggers retry with exponential backoff', async () => {
|
|
91
91
|
mockResponse({ message: 'Server error' }, 500)
|
|
92
92
|
mockResponse({ message: 'Server error' }, 500)
|
|
93
93
|
mockResponse({ channel: { id: 'ch-1', name: 'My Channel' } })
|
|
@@ -102,7 +102,7 @@ describe('ChannelBotClient', () => {
|
|
|
102
102
|
expect(elapsed).toBeGreaterThanOrEqual(280)
|
|
103
103
|
})
|
|
104
104
|
|
|
105
|
-
|
|
105
|
+
it('4xx non-429 throws immediately without retry', async () => {
|
|
106
106
|
mockResponse({ message: 'Forbidden' }, 403)
|
|
107
107
|
|
|
108
108
|
const client = await new ChannelBotClient().login({ accessKey: 'key-1', accessSecret: 'secret-1' })
|
|
@@ -110,7 +110,7 @@ describe('ChannelBotClient', () => {
|
|
|
110
110
|
expect(fetchCalls).toHaveLength(1)
|
|
111
111
|
})
|
|
112
112
|
|
|
113
|
-
|
|
113
|
+
it('network error retries then throws ChannelBotError with code network_error', async () => {
|
|
114
114
|
;(globalThis as Record<string, unknown>).fetch = async (
|
|
115
115
|
url: string | URL | Request,
|
|
116
116
|
options?: RequestInit,
|
|
@@ -131,7 +131,7 @@ describe('ChannelBotClient', () => {
|
|
|
131
131
|
}
|
|
132
132
|
})
|
|
133
133
|
|
|
134
|
-
|
|
134
|
+
it('204 response returns undefined', async () => {
|
|
135
135
|
mockResponse(null, 204)
|
|
136
136
|
|
|
137
137
|
const client = await new ChannelBotClient().login({ accessKey: 'key-1', accessSecret: 'secret-1' })
|
|
@@ -140,11 +140,11 @@ describe('ChannelBotClient', () => {
|
|
|
140
140
|
expect(result).toBeUndefined()
|
|
141
141
|
})
|
|
142
142
|
|
|
143
|
-
|
|
143
|
+
it('wrapTextInBlocks returns a single text block with value', () => {
|
|
144
144
|
expect(ChannelBotClient.wrapTextInBlocks('Hello world')).toEqual([{ type: 'text', value: 'Hello world' }])
|
|
145
145
|
})
|
|
146
146
|
|
|
147
|
-
|
|
147
|
+
it('sendUserChatMessage includes botName in query string', async () => {
|
|
148
148
|
mockResponse({ message: { id: 'm-1' } })
|
|
149
149
|
|
|
150
150
|
const client = await new ChannelBotClient().login({ accessKey: 'key-1', accessSecret: 'secret-1' })
|
|
@@ -153,7 +153,7 @@ describe('ChannelBotClient', () => {
|
|
|
153
153
|
expect(fetchCalls[0].url).toBe('https://api.channel.io/open/v5/user-chats/chat-1/messages?botName=SupportBot')
|
|
154
154
|
})
|
|
155
155
|
|
|
156
|
-
|
|
156
|
+
it('sendGroupMessage includes botName in query string', async () => {
|
|
157
157
|
mockResponse({ message: { id: 'm-1' } })
|
|
158
158
|
|
|
159
159
|
const client = await new ChannelBotClient().login({ accessKey: 'key-1', accessSecret: 'secret-1' })
|
|
@@ -162,7 +162,7 @@ describe('ChannelBotClient', () => {
|
|
|
162
162
|
expect(fetchCalls[0].url).toBe('https://api.channel.io/open/v5/groups/grp-1/messages?botName=OpsBot')
|
|
163
163
|
})
|
|
164
164
|
|
|
165
|
-
|
|
165
|
+
it('resolveGroup("@team-name") calls groups by name endpoint', async () => {
|
|
166
166
|
mockResponse({ group: { id: 'grp-1', channelId: 'ch-1', name: 'team-name' } })
|
|
167
167
|
|
|
168
168
|
const client = await new ChannelBotClient().login({ accessKey: 'key-1', accessSecret: 'secret-1' })
|
|
@@ -171,7 +171,7 @@ describe('ChannelBotClient', () => {
|
|
|
171
171
|
expect(fetchCalls[0].url).toBe('https://api.channel.io/open/v5/groups/@team-name')
|
|
172
172
|
})
|
|
173
173
|
|
|
174
|
-
|
|
174
|
+
it('resolveGroup("grp123") calls groups by id endpoint', async () => {
|
|
175
175
|
mockResponse({ group: { id: 'grp123', channelId: 'ch-1', name: 'team-name' } })
|
|
176
176
|
|
|
177
177
|
const client = await new ChannelBotClient().login({ accessKey: 'key-1', accessSecret: 'secret-1' })
|
|
@@ -180,7 +180,7 @@ describe('ChannelBotClient', () => {
|
|
|
180
180
|
expect(fetchCalls[0].url).toBe('https://api.channel.io/open/v5/groups/grp123')
|
|
181
181
|
})
|
|
182
182
|
|
|
183
|
-
|
|
183
|
+
it('pagination params are included in query string', async () => {
|
|
184
184
|
mockResponse({ messages: [] })
|
|
185
185
|
|
|
186
186
|
const client = await new ChannelBotClient().login({ accessKey: 'key-1', accessSecret: 'secret-1' })
|
|
@@ -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'
|
|
@@ -39,7 +39,7 @@ describe('auth commands', () => {
|
|
|
39
39
|
})
|
|
40
40
|
|
|
41
41
|
describe('setAction', () => {
|
|
42
|
-
|
|
42
|
+
it('validates and stores credentials with workspace info from API', async () => {
|
|
43
43
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
44
44
|
|
|
45
45
|
const result = await setAction('key123', 'secret123', { _credManager: manager })
|
|
@@ -53,7 +53,7 @@ describe('auth commands', () => {
|
|
|
53
53
|
expect(creds?.workspace_id).toBe('ch123')
|
|
54
54
|
})
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
it('uses --workspace option as workspace name', async () => {
|
|
57
57
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
58
58
|
|
|
59
59
|
const result = await setAction('key123', 'secret123', {
|
|
@@ -68,7 +68,7 @@ describe('auth commands', () => {
|
|
|
68
68
|
expect(creds?.workspace_name).toBe('My Custom Name')
|
|
69
69
|
})
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
it('handles client errors gracefully', async () => {
|
|
72
72
|
mockGetChannel.mockImplementationOnce(() => Promise.reject(new Error('Invalid credentials')))
|
|
73
73
|
|
|
74
74
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
@@ -81,7 +81,7 @@ describe('auth commands', () => {
|
|
|
81
81
|
})
|
|
82
82
|
|
|
83
83
|
describe('statusAction', () => {
|
|
84
|
-
|
|
84
|
+
it('returns no credentials when none set', async () => {
|
|
85
85
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
86
86
|
|
|
87
87
|
const result = await statusAction({ _credManager: manager })
|
|
@@ -90,7 +90,7 @@ describe('auth commands', () => {
|
|
|
90
90
|
expect(result.error).toBeDefined()
|
|
91
91
|
})
|
|
92
92
|
|
|
93
|
-
|
|
93
|
+
it('returns valid status for current workspace', async () => {
|
|
94
94
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
95
95
|
await manager.setCredentials({
|
|
96
96
|
workspace_id: 'ch123',
|
|
@@ -105,7 +105,7 @@ describe('auth commands', () => {
|
|
|
105
105
|
expect(result.workspace_id).toBe('ch123')
|
|
106
106
|
})
|
|
107
107
|
|
|
108
|
-
|
|
108
|
+
it('returns invalid when API call fails', async () => {
|
|
109
109
|
mockGetChannel.mockImplementationOnce(() => Promise.reject(new Error('Unauthorized')))
|
|
110
110
|
|
|
111
111
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
@@ -123,7 +123,7 @@ describe('auth commands', () => {
|
|
|
123
123
|
})
|
|
124
124
|
|
|
125
125
|
describe('clearAction', () => {
|
|
126
|
-
|
|
126
|
+
it('removes all stored credentials', async () => {
|
|
127
127
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
128
128
|
await manager.setCredentials({
|
|
129
129
|
workspace_id: 'ch123',
|
|
@@ -140,7 +140,7 @@ describe('auth commands', () => {
|
|
|
140
140
|
})
|
|
141
141
|
|
|
142
142
|
describe('listAction', () => {
|
|
143
|
-
|
|
143
|
+
it('returns all stored workspaces', async () => {
|
|
144
144
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
145
145
|
await manager.setCredentials({
|
|
146
146
|
workspace_id: 'ch1',
|
|
@@ -162,7 +162,7 @@ describe('auth commands', () => {
|
|
|
162
162
|
expect(result.workspaces?.find((w) => w.workspace_id === 'ch1')?.is_current).toBe(false)
|
|
163
163
|
})
|
|
164
164
|
|
|
165
|
-
|
|
165
|
+
it('returns empty list when no workspaces stored', async () => {
|
|
166
166
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
167
167
|
|
|
168
168
|
const result = await listAction({ _credManager: manager })
|
|
@@ -172,7 +172,7 @@ describe('auth commands', () => {
|
|
|
172
172
|
})
|
|
173
173
|
|
|
174
174
|
describe('useAction', () => {
|
|
175
|
-
|
|
175
|
+
it('switches current workspace', async () => {
|
|
176
176
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
177
177
|
await manager.setCredentials({
|
|
178
178
|
workspace_id: 'ch1',
|
|
@@ -193,7 +193,7 @@ describe('auth commands', () => {
|
|
|
193
193
|
expect(result.workspace_id).toBe('ch1')
|
|
194
194
|
})
|
|
195
195
|
|
|
196
|
-
|
|
196
|
+
it('returns error for unknown workspace', async () => {
|
|
197
197
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
198
198
|
|
|
199
199
|
const result = await useAction('nonexistent', { _credManager: manager })
|
|
@@ -203,7 +203,7 @@ describe('auth commands', () => {
|
|
|
203
203
|
})
|
|
204
204
|
|
|
205
205
|
describe('removeAction', () => {
|
|
206
|
-
|
|
206
|
+
it('removes a stored workspace', async () => {
|
|
207
207
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
208
208
|
await manager.setCredentials({
|
|
209
209
|
workspace_id: 'ch1',
|
|
@@ -218,7 +218,7 @@ describe('auth commands', () => {
|
|
|
218
218
|
expect(await manager.getCredentials('ch1')).toBeNull()
|
|
219
219
|
})
|
|
220
220
|
|
|
221
|
-
|
|
221
|
+
it('returns error for unknown workspace', async () => {
|
|
222
222
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
223
223
|
|
|
224
224
|
const result = await removeAction('nonexistent', { _credManager: manager })
|
|
@@ -228,7 +228,7 @@ describe('auth commands', () => {
|
|
|
228
228
|
})
|
|
229
229
|
|
|
230
230
|
describe('botAction', () => {
|
|
231
|
-
|
|
231
|
+
it('sets default bot name', async () => {
|
|
232
232
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
233
233
|
|
|
234
234
|
const result = await botAction('my-bot', { _credManager: manager })
|
|
@@ -238,7 +238,7 @@ describe('auth commands', () => {
|
|
|
238
238
|
expect(await manager.getDefaultBot()).toBe('my-bot')
|
|
239
239
|
})
|
|
240
240
|
|
|
241
|
-
|
|
241
|
+
it('updates existing default bot', async () => {
|
|
242
242
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
243
243
|
await manager.setDefaultBot('old-bot')
|
|
244
244
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Command } from 'commander'
|
|
2
2
|
|
|
3
|
+
import { cliOutput } from '@/shared/utils/cli-output'
|
|
3
4
|
import { formatOutput } from '@/shared/utils/output'
|
|
4
5
|
|
|
5
6
|
import { ChannelBotClient } from '../client'
|
|
@@ -158,11 +159,6 @@ export async function botAction(name: string, options: ActionOptions): Promise<A
|
|
|
158
159
|
}
|
|
159
160
|
}
|
|
160
161
|
|
|
161
|
-
function cliOutput(result: ActionResult, pretty?: boolean, exitOnError = true): void {
|
|
162
|
-
console.log(formatOutput(result, pretty))
|
|
163
|
-
if (result.error && exitOnError) process.exit(1)
|
|
164
|
-
}
|
|
165
|
-
|
|
166
162
|
export const authCommand = new Command('auth')
|
|
167
163
|
.description('Authentication commands')
|
|
168
164
|
.addCommand(
|
|
@@ -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'
|
|
@@ -67,7 +67,7 @@ describe('bot commands', () => {
|
|
|
67
67
|
})
|
|
68
68
|
|
|
69
69
|
describe('listAction', () => {
|
|
70
|
-
|
|
70
|
+
it('returns all bots', async () => {
|
|
71
71
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
72
72
|
const result = await listAction({ _credManager: manager })
|
|
73
73
|
|
|
@@ -78,7 +78,7 @@ describe('bot commands', () => {
|
|
|
78
78
|
})
|
|
79
79
|
|
|
80
80
|
describe('createAction', () => {
|
|
81
|
-
|
|
81
|
+
it('creates bot with name', async () => {
|
|
82
82
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
83
83
|
const result = await createAction('New Bot', { _credManager: manager })
|
|
84
84
|
|
|
@@ -88,7 +88,7 @@ describe('bot commands', () => {
|
|
|
88
88
|
expect(capturedCreateArgs[0]).toBe('New Bot')
|
|
89
89
|
})
|
|
90
90
|
|
|
91
|
-
|
|
91
|
+
it('creates bot with optional color and avatar', async () => {
|
|
92
92
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
93
93
|
await createAction('New Bot', {
|
|
94
94
|
color: '#00FF00',
|
|
@@ -101,7 +101,7 @@ describe('bot commands', () => {
|
|
|
101
101
|
})
|
|
102
102
|
|
|
103
103
|
describe('deleteAction', () => {
|
|
104
|
-
|
|
104
|
+
it('deletes bot with --force flag', async () => {
|
|
105
105
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
106
106
|
const result = await deleteAction('bot1', { force: true, _credManager: manager })
|
|
107
107
|
|
|
@@ -111,7 +111,7 @@ describe('bot commands', () => {
|
|
|
111
111
|
expect(capturedDeleteArg).toBe('bot1')
|
|
112
112
|
})
|
|
113
113
|
|
|
114
|
-
|
|
114
|
+
it('returns error without --force flag', async () => {
|
|
115
115
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
116
116
|
const result = await deleteAction('bot1', { _credManager: manager })
|
|
117
117
|
|
|
@@ -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 { WorkspaceOption } from './shared'
|
|
6
6
|
import { getClient } from './shared'
|
|
@@ -89,11 +89,6 @@ export async function deleteAction(botId: string, options: BotOptions): Promise<
|
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
-
function cliOutput(result: BotResult, pretty?: boolean): void {
|
|
93
|
-
console.log(formatOutput(result, pretty))
|
|
94
|
-
if (result.error) process.exit(1)
|
|
95
|
-
}
|
|
96
|
-
|
|
97
92
|
export const botCommand = new Command('bot')
|
|
98
93
|
.description('Bot management commands')
|
|
99
94
|
.addCommand(
|
|
@@ -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'
|
|
@@ -92,7 +92,7 @@ describe('chat commands', () => {
|
|
|
92
92
|
})
|
|
93
93
|
|
|
94
94
|
describe('listAction', () => {
|
|
95
|
-
|
|
95
|
+
it('lists opened chats by default', async () => {
|
|
96
96
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
97
97
|
const result = await listAction({ _credManager: manager })
|
|
98
98
|
|
|
@@ -102,14 +102,14 @@ describe('chat commands', () => {
|
|
|
102
102
|
expect(capturedListArgs[0]).toMatchObject({ state: 'opened' })
|
|
103
103
|
})
|
|
104
104
|
|
|
105
|
-
|
|
105
|
+
it('passes state filter to API', async () => {
|
|
106
106
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
107
107
|
await listAction({ state: 'closed', _credManager: manager })
|
|
108
108
|
|
|
109
109
|
expect(capturedListArgs[0]).toMatchObject({ state: 'closed' })
|
|
110
110
|
})
|
|
111
111
|
|
|
112
|
-
|
|
112
|
+
it('passes pagination params', async () => {
|
|
113
113
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
114
114
|
await listAction({ limit: '10', sort: 'asc', since: 'cursor123', _credManager: manager })
|
|
115
115
|
|
|
@@ -118,7 +118,7 @@ describe('chat commands', () => {
|
|
|
118
118
|
})
|
|
119
119
|
|
|
120
120
|
describe('getAction', () => {
|
|
121
|
-
|
|
121
|
+
it('returns specific chat', async () => {
|
|
122
122
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
123
123
|
const result = await getAction('chat1', { _credManager: manager })
|
|
124
124
|
|
|
@@ -129,7 +129,7 @@ describe('chat commands', () => {
|
|
|
129
129
|
})
|
|
130
130
|
|
|
131
131
|
describe('closeAction', () => {
|
|
132
|
-
|
|
132
|
+
it('closes chat with bot name', async () => {
|
|
133
133
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
134
134
|
const result = await closeAction('chat1', { bot: 'my-bot', _credManager: manager })
|
|
135
135
|
|
|
@@ -138,7 +138,7 @@ describe('chat commands', () => {
|
|
|
138
138
|
expect(capturedCloseArgs[1]).toBe('my-bot')
|
|
139
139
|
})
|
|
140
140
|
|
|
141
|
-
|
|
141
|
+
it('returns error when no bot name provided', async () => {
|
|
142
142
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
143
143
|
const result = await closeAction('chat1', { _credManager: manager })
|
|
144
144
|
|
|
@@ -148,7 +148,7 @@ describe('chat commands', () => {
|
|
|
148
148
|
})
|
|
149
149
|
|
|
150
150
|
describe('deleteAction', () => {
|
|
151
|
-
|
|
151
|
+
it('deletes chat with --force flag', async () => {
|
|
152
152
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
153
153
|
const result = await deleteAction('chat1', { force: true, _credManager: manager })
|
|
154
154
|
|
|
@@ -157,7 +157,7 @@ describe('chat commands', () => {
|
|
|
157
157
|
expect(result.deleted).toBe('chat1')
|
|
158
158
|
})
|
|
159
159
|
|
|
160
|
-
|
|
160
|
+
it('returns error without --force flag', async () => {
|
|
161
161
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
162
162
|
const result = await deleteAction('chat1', { _credManager: manager })
|
|
163
163
|
|
|
@@ -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 { WorkspaceOption } from './shared'
|
|
6
6
|
import { getClient, getDefaultBotName } from './shared'
|
|
@@ -120,11 +120,6 @@ export async function deleteAction(chatId: string, options: ChatOptions): Promis
|
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
122
|
|
|
123
|
-
function cliOutput(result: ChatResult, pretty?: boolean): void {
|
|
124
|
-
console.log(formatOutput(result, pretty))
|
|
125
|
-
if (result.error) process.exit(1)
|
|
126
|
-
}
|
|
127
|
-
|
|
128
123
|
export const chatCommand = new Command('chat')
|
|
129
124
|
.description('UserChat management commands')
|
|
130
125
|
.addCommand(
|
|
@@ -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'
|
|
@@ -86,7 +86,7 @@ describe('group commands', () => {
|
|
|
86
86
|
})
|
|
87
87
|
|
|
88
88
|
describe('listAction', () => {
|
|
89
|
-
|
|
89
|
+
it('lists all groups', async () => {
|
|
90
90
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
91
91
|
const result = await listAction({ _credManager: manager })
|
|
92
92
|
|
|
@@ -97,7 +97,7 @@ describe('group commands', () => {
|
|
|
97
97
|
})
|
|
98
98
|
|
|
99
99
|
describe('getAction', () => {
|
|
100
|
-
|
|
100
|
+
it('resolves group by ID', async () => {
|
|
101
101
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
102
102
|
const result = await getAction('grp1', { _credManager: manager })
|
|
103
103
|
|
|
@@ -106,7 +106,7 @@ describe('group commands', () => {
|
|
|
106
106
|
expect(capturedResolveArg).toBe('grp1')
|
|
107
107
|
})
|
|
108
108
|
|
|
109
|
-
|
|
109
|
+
it('resolves group by @name', async () => {
|
|
110
110
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
111
111
|
const result = await getAction('@team-alpha', { _credManager: manager })
|
|
112
112
|
|
|
@@ -116,7 +116,7 @@ describe('group commands', () => {
|
|
|
116
116
|
})
|
|
117
117
|
|
|
118
118
|
describe('messagesAction', () => {
|
|
119
|
-
|
|
119
|
+
it('gets messages from group', async () => {
|
|
120
120
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
121
121
|
const result = await messagesAction('grp1', { _credManager: manager })
|
|
122
122
|
|
|
@@ -125,7 +125,7 @@ describe('group commands', () => {
|
|
|
125
125
|
expect(result.messages?.[0].id).toBe('msg1')
|
|
126
126
|
})
|
|
127
127
|
|
|
128
|
-
|
|
128
|
+
it('resolves group by @name before fetching messages', async () => {
|
|
129
129
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
130
130
|
await messagesAction('@team-alpha', { _credManager: manager })
|
|
131
131
|
|
|
@@ -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 { WorkspaceOption } from './shared'
|
|
6
6
|
import { getClient } from './shared'
|
|
@@ -93,11 +93,6 @@ export async function messagesAction(group: string, options: GroupOptions): Prom
|
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
function cliOutput(result: GroupResult, pretty?: boolean): void {
|
|
97
|
-
console.log(formatOutput(result, pretty))
|
|
98
|
-
if (result.error) process.exit(1)
|
|
99
|
-
}
|
|
100
|
-
|
|
101
96
|
export const groupCommand = new Command('group')
|
|
102
97
|
.description('Group management commands')
|
|
103
98
|
.addCommand(
|
|
@@ -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'
|
|
@@ -48,7 +48,7 @@ describe('manager commands', () => {
|
|
|
48
48
|
})
|
|
49
49
|
|
|
50
50
|
describe('listAction', () => {
|
|
51
|
-
|
|
51
|
+
it('returns all managers with id, name, description', async () => {
|
|
52
52
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
53
53
|
const result = await listAction({ _credManager: manager })
|
|
54
54
|
|
|
@@ -60,7 +60,7 @@ describe('manager commands', () => {
|
|
|
60
60
|
})
|
|
61
61
|
|
|
62
62
|
describe('getAction', () => {
|
|
63
|
-
|
|
63
|
+
it('returns specific manager', async () => {
|
|
64
64
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
65
65
|
const result = await getAction('mgr1', { _credManager: manager })
|
|
66
66
|
|
|
@@ -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 { WorkspaceOption } from './shared'
|
|
6
6
|
import { getClient } from './shared'
|
|
@@ -68,11 +68,6 @@ export async function getAction(managerId: string, options: ManagerOptions): Pro
|
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
function cliOutput(result: ManagerResult, pretty?: boolean): void {
|
|
72
|
-
console.log(formatOutput(result, pretty))
|
|
73
|
-
if (result.error) process.exit(1)
|
|
74
|
-
}
|
|
75
|
-
|
|
76
71
|
export const managerCommand = new Command('manager')
|
|
77
72
|
.description('Manager commands')
|
|
78
73
|
.addCommand(
|
|
@@ -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'
|
|
@@ -113,7 +113,7 @@ describe('message commands', () => {
|
|
|
113
113
|
})
|
|
114
114
|
|
|
115
115
|
describe('sendAction', () => {
|
|
116
|
-
|
|
116
|
+
it('sends to userchat and wraps text in blocks', async () => {
|
|
117
117
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
118
118
|
const result = await sendAction('chat1', 'Hello world', { type: 'userchat', _credManager: manager })
|
|
119
119
|
|
|
@@ -122,7 +122,7 @@ describe('message commands', () => {
|
|
|
122
122
|
expect(capturedSendUserChatArgs[1]).toEqual([{ type: 'text', value: 'Hello world' }])
|
|
123
123
|
})
|
|
124
124
|
|
|
125
|
-
|
|
125
|
+
it('sends to group when type=group', async () => {
|
|
126
126
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
127
127
|
const result = await sendAction('grp1', 'Hello group', { type: 'group', _credManager: manager })
|
|
128
128
|
|
|
@@ -131,14 +131,14 @@ describe('message commands', () => {
|
|
|
131
131
|
expect(mockSendGroupMessage).toHaveBeenCalledTimes(1)
|
|
132
132
|
})
|
|
133
133
|
|
|
134
|
-
|
|
134
|
+
it('includes botName in request when --bot provided', async () => {
|
|
135
135
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
136
136
|
await sendAction('chat1', 'Hello', { type: 'userchat', bot: 'my-bot', _credManager: manager })
|
|
137
137
|
|
|
138
138
|
expect(capturedSendUserChatArgs[2]).toBe('my-bot')
|
|
139
139
|
})
|
|
140
140
|
|
|
141
|
-
|
|
141
|
+
it('auto-detects group target from @ prefix', async () => {
|
|
142
142
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
143
143
|
await sendAction('@team', 'Hello', { _credManager: manager })
|
|
144
144
|
|
|
@@ -147,7 +147,7 @@ describe('message commands', () => {
|
|
|
147
147
|
})
|
|
148
148
|
|
|
149
149
|
describe('listAction', () => {
|
|
150
|
-
|
|
150
|
+
it('lists userchat messages', async () => {
|
|
151
151
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
152
152
|
const result = await listAction('chat1', { type: 'userchat', _credManager: manager })
|
|
153
153
|
|
|
@@ -156,7 +156,7 @@ describe('message commands', () => {
|
|
|
156
156
|
expect(result.messages?.[0].id).toBe('msg1')
|
|
157
157
|
})
|
|
158
158
|
|
|
159
|
-
|
|
159
|
+
it('lists group messages when type=group', async () => {
|
|
160
160
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
161
161
|
const result = await listAction('grp1', { type: 'group', _credManager: manager })
|
|
162
162
|
|
|
@@ -165,7 +165,7 @@ describe('message commands', () => {
|
|
|
165
165
|
expect(result.messages?.[0].id).toBe('msg2')
|
|
166
166
|
})
|
|
167
167
|
|
|
168
|
-
|
|
168
|
+
it('passes pagination params', async () => {
|
|
169
169
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
170
170
|
await listAction('chat1', {
|
|
171
171
|
type: 'userchat',
|
|
@@ -181,7 +181,7 @@ describe('message commands', () => {
|
|
|
181
181
|
})
|
|
182
182
|
|
|
183
183
|
describe('getAction', () => {
|
|
184
|
-
|
|
184
|
+
it('returns specific message by ID', async () => {
|
|
185
185
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
186
186
|
const result = await getAction('chat1', 'msg1', { type: 'userchat', _credManager: manager })
|
|
187
187
|
|
|
@@ -189,7 +189,7 @@ describe('message commands', () => {
|
|
|
189
189
|
expect(result.id).toBe('msg1')
|
|
190
190
|
})
|
|
191
191
|
|
|
192
|
-
|
|
192
|
+
it('returns error when message not found', async () => {
|
|
193
193
|
const manager = new ChannelBotCredentialManager(tempDir)
|
|
194
194
|
const result = await getAction('chat1', 'nonexistent', { type: 'userchat', _credManager: manager })
|
|
195
195
|
|
|
@@ -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 { wrapTextInBlocks } from '../message-utils'
|
|
6
6
|
import type { WorkspaceOption } from './shared'
|
|
@@ -140,11 +140,6 @@ function detectTargetType(target: string): 'userchat' | 'group' {
|
|
|
140
140
|
return 'userchat'
|
|
141
141
|
}
|
|
142
142
|
|
|
143
|
-
function cliOutput(result: MessageResult, pretty?: boolean): void {
|
|
144
|
-
console.log(formatOutput(result, pretty))
|
|
145
|
-
if (result.error) process.exit(1)
|
|
146
|
-
}
|
|
147
|
-
|
|
148
143
|
export const messageCommand = new Command('message')
|
|
149
144
|
.description('Message commands')
|
|
150
145
|
.addCommand(
|