agent-messenger 2.7.0 → 2.9.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/.github/workflows/ci.yml +6 -0
- package/.oxfmtrc.json +13 -1
- package/.oxlintrc.json +10 -1
- package/README.md +1 -12
- package/dist/package.json +59 -58
- package/dist/src/platforms/channeltalk/client.d.ts.map +1 -1
- package/dist/src/platforms/channeltalk/client.js +2 -2
- package/dist/src/platforms/channeltalk/client.js.map +1 -1
- package/dist/src/platforms/channeltalk/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/channeltalk/commands/auth.js.map +1 -1
- package/dist/src/platforms/channeltalk/commands/message.d.ts.map +1 -1
- package/dist/src/platforms/channeltalk/commands/message.js.map +1 -1
- package/dist/src/platforms/channeltalk/commands/snapshot.d.ts +4 -2
- package/dist/src/platforms/channeltalk/commands/snapshot.d.ts.map +1 -1
- package/dist/src/platforms/channeltalk/commands/snapshot.js +86 -31
- package/dist/src/platforms/channeltalk/commands/snapshot.js.map +1 -1
- package/dist/src/platforms/channeltalk/ensure-auth.d.ts.map +1 -1
- package/dist/src/platforms/channeltalk/ensure-auth.js.map +1 -1
- package/dist/src/platforms/channeltalk/token-extractor.d.ts +9 -23
- package/dist/src/platforms/channeltalk/token-extractor.d.ts.map +1 -1
- package/dist/src/platforms/channeltalk/token-extractor.js +109 -341
- package/dist/src/platforms/channeltalk/token-extractor.js.map +1 -1
- package/dist/src/platforms/channeltalkbot/client.d.ts +1 -1
- package/dist/src/platforms/channeltalkbot/client.d.ts.map +1 -1
- package/dist/src/platforms/channeltalkbot/client.js +4 -4
- package/dist/src/platforms/channeltalkbot/client.js.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/auth.js +4 -1
- package/dist/src/platforms/channeltalkbot/commands/auth.js.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/shared.d.ts.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/shared.js.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/snapshot.d.ts +3 -1
- package/dist/src/platforms/channeltalkbot/commands/snapshot.d.ts.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/snapshot.js +110 -60
- package/dist/src/platforms/channeltalkbot/commands/snapshot.js.map +1 -1
- package/dist/src/platforms/discord/commands/auth.js.map +1 -1
- package/dist/src/platforms/discord/commands/snapshot.d.ts +1 -0
- package/dist/src/platforms/discord/commands/snapshot.d.ts.map +1 -1
- package/dist/src/platforms/discord/commands/snapshot.js +48 -34
- package/dist/src/platforms/discord/commands/snapshot.js.map +1 -1
- package/dist/src/platforms/discord/commands/whoami.d.ts.map +1 -1
- package/dist/src/platforms/discord/commands/whoami.js.map +1 -1
- package/dist/src/platforms/discord/token-extractor.d.ts +2 -10
- package/dist/src/platforms/discord/token-extractor.d.ts.map +1 -1
- package/dist/src/platforms/discord/token-extractor.js +38 -172
- package/dist/src/platforms/discord/token-extractor.js.map +1 -1
- package/dist/src/platforms/discordbot/client.d.ts.map +1 -1
- package/dist/src/platforms/discordbot/client.js.map +1 -1
- package/dist/src/platforms/discordbot/commands/snapshot.d.ts +2 -0
- package/dist/src/platforms/discordbot/commands/snapshot.d.ts.map +1 -1
- package/dist/src/platforms/discordbot/commands/snapshot.js +46 -34
- package/dist/src/platforms/discordbot/commands/snapshot.js.map +1 -1
- package/dist/src/platforms/instagram/cli.d.ts.map +1 -1
- package/dist/src/platforms/instagram/cli.js +1 -4
- package/dist/src/platforms/instagram/cli.js.map +1 -1
- package/dist/src/platforms/instagram/client.d.ts.map +1 -1
- package/dist/src/platforms/instagram/client.js +8 -7
- package/dist/src/platforms/instagram/client.js.map +1 -1
- package/dist/src/platforms/instagram/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/instagram/commands/auth.js.map +1 -1
- package/dist/src/platforms/instagram/commands/chat.d.ts.map +1 -1
- package/dist/src/platforms/instagram/commands/chat.js.map +1 -1
- package/dist/src/platforms/instagram/commands/message.d.ts.map +1 -1
- package/dist/src/platforms/instagram/commands/message.js.map +1 -1
- package/dist/src/platforms/instagram/commands/shared.d.ts.map +1 -1
- package/dist/src/platforms/instagram/commands/shared.js.map +1 -1
- package/dist/src/platforms/instagram/credential-manager.d.ts.map +1 -1
- package/dist/src/platforms/instagram/credential-manager.js +1 -1
- package/dist/src/platforms/instagram/credential-manager.js.map +1 -1
- package/dist/src/platforms/instagram/ensure-auth.d.ts.map +1 -1
- package/dist/src/platforms/instagram/ensure-auth.js.map +1 -1
- package/dist/src/platforms/instagram/token-extractor.d.ts +7 -19
- package/dist/src/platforms/instagram/token-extractor.d.ts.map +1 -1
- package/dist/src/platforms/instagram/token-extractor.js +44 -270
- package/dist/src/platforms/instagram/token-extractor.js.map +1 -1
- package/dist/src/platforms/instagram/types.d.ts.map +1 -1
- package/dist/src/platforms/instagram/types.js +4 -2
- package/dist/src/platforms/instagram/types.js.map +1 -1
- package/dist/src/platforms/kakaotalk/auth/kakao-login.d.ts.map +1 -1
- package/dist/src/platforms/kakaotalk/auth/kakao-login.js +18 -4
- package/dist/src/platforms/kakaotalk/auth/kakao-login.js.map +1 -1
- package/dist/src/platforms/kakaotalk/client.d.ts.map +1 -1
- package/dist/src/platforms/kakaotalk/client.js +3 -3
- package/dist/src/platforms/kakaotalk/client.js.map +1 -1
- package/dist/src/platforms/kakaotalk/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/kakaotalk/commands/auth.js +15 -9
- package/dist/src/platforms/kakaotalk/commands/auth.js.map +1 -1
- package/dist/src/platforms/kakaotalk/commands/shared.d.ts.map +1 -1
- package/dist/src/platforms/kakaotalk/commands/shared.js.map +1 -1
- package/dist/src/platforms/kakaotalk/protocol/connection.d.ts.map +1 -1
- package/dist/src/platforms/kakaotalk/protocol/connection.js.map +1 -1
- package/dist/src/platforms/kakaotalk/protocol/crypto.js +1 -1
- package/dist/src/platforms/kakaotalk/protocol/crypto.js.map +1 -1
- package/dist/src/platforms/kakaotalk/protocol/session.d.ts.map +1 -1
- package/dist/src/platforms/kakaotalk/protocol/session.js +1 -3
- package/dist/src/platforms/kakaotalk/protocol/session.js.map +1 -1
- package/dist/src/platforms/kakaotalk/token-extractor.js +5 -2
- package/dist/src/platforms/kakaotalk/token-extractor.js.map +1 -1
- package/dist/src/platforms/kakaotalk/types.d.ts.map +1 -1
- package/dist/src/platforms/kakaotalk/types.js +4 -2
- package/dist/src/platforms/kakaotalk/types.js.map +1 -1
- package/dist/src/platforms/line/cli.d.ts.map +1 -1
- package/dist/src/platforms/line/cli.js +1 -4
- package/dist/src/platforms/line/cli.js.map +1 -1
- package/dist/src/platforms/line/client.d.ts.map +1 -1
- package/dist/src/platforms/line/client.js +5 -13
- package/dist/src/platforms/line/client.js.map +1 -1
- package/dist/src/platforms/line/commands/chat.d.ts.map +1 -1
- package/dist/src/platforms/line/commands/chat.js.map +1 -1
- package/dist/src/platforms/line/commands/message.d.ts.map +1 -1
- package/dist/src/platforms/line/commands/message.js.map +1 -1
- package/dist/src/platforms/line/listener.js +1 -1
- package/dist/src/platforms/line/listener.js.map +1 -1
- package/dist/src/platforms/slack/cli.d.ts.map +1 -1
- package/dist/src/platforms/slack/cli.js.map +1 -1
- package/dist/src/platforms/slack/client-mappers.d.ts +14 -0
- package/dist/src/platforms/slack/client-mappers.d.ts.map +1 -0
- package/dist/src/platforms/slack/client-mappers.js +245 -0
- package/dist/src/platforms/slack/client-mappers.js.map +1 -0
- package/dist/src/platforms/slack/client.d.ts +0 -1
- package/dist/src/platforms/slack/client.d.ts.map +1 -1
- package/dist/src/platforms/slack/client.js +41 -455
- package/dist/src/platforms/slack/client.js.map +1 -1
- package/dist/src/platforms/slack/commands/channel.d.ts.map +1 -1
- package/dist/src/platforms/slack/commands/channel.js.map +1 -1
- package/dist/src/platforms/slack/commands/emoji.d.ts.map +1 -1
- package/dist/src/platforms/slack/commands/emoji.js +1 -3
- package/dist/src/platforms/slack/commands/emoji.js.map +1 -1
- package/dist/src/platforms/slack/commands/message.d.ts.map +1 -1
- package/dist/src/platforms/slack/commands/message.js.map +1 -1
- package/dist/src/platforms/slack/commands/reminder.d.ts.map +1 -1
- package/dist/src/platforms/slack/commands/reminder.js.map +1 -1
- package/dist/src/platforms/slack/commands/snapshot.d.ts.map +1 -1
- package/dist/src/platforms/slack/commands/snapshot.js +75 -55
- package/dist/src/platforms/slack/commands/snapshot.js.map +1 -1
- package/dist/src/platforms/slack/commands/user.d.ts.map +1 -1
- package/dist/src/platforms/slack/commands/user.js.map +1 -1
- package/dist/src/platforms/slack/commands/usergroup.d.ts.map +1 -1
- package/dist/src/platforms/slack/commands/usergroup.js.map +1 -1
- package/dist/src/platforms/slack/commands/whoami.d.ts.map +1 -1
- package/dist/src/platforms/slack/commands/whoami.js.map +1 -1
- package/dist/src/platforms/slack/token-extractor.d.ts +2 -6
- package/dist/src/platforms/slack/token-extractor.d.ts.map +1 -1
- package/dist/src/platforms/slack/token-extractor.js +35 -229
- 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 +1 -1
- package/dist/src/platforms/slackbot/cli.js.map +1 -1
- package/dist/src/platforms/teams/client.d.ts.map +1 -1
- package/dist/src/platforms/teams/client.js +1 -1
- package/dist/src/platforms/teams/client.js.map +1 -1
- package/dist/src/platforms/teams/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/teams/commands/auth.js +4 -1
- package/dist/src/platforms/teams/commands/auth.js.map +1 -1
- package/dist/src/platforms/teams/commands/snapshot.d.ts +1 -0
- package/dist/src/platforms/teams/commands/snapshot.d.ts.map +1 -1
- package/dist/src/platforms/teams/commands/snapshot.js +44 -31
- package/dist/src/platforms/teams/commands/snapshot.js.map +1 -1
- package/dist/src/platforms/teams/commands/whoami.d.ts.map +1 -1
- package/dist/src/platforms/teams/commands/whoami.js.map +1 -1
- package/dist/src/platforms/teams/token-extractor.d.ts +6 -18
- package/dist/src/platforms/teams/token-extractor.d.ts.map +1 -1
- package/dist/src/platforms/teams/token-extractor.js +71 -324
- package/dist/src/platforms/teams/token-extractor.js.map +1 -1
- package/dist/src/platforms/telegram/cli.d.ts.map +1 -1
- package/dist/src/platforms/telegram/cli.js +1 -4
- package/dist/src/platforms/telegram/cli.js.map +1 -1
- package/dist/src/platforms/telegram/client.d.ts.map +1 -1
- package/dist/src/platforms/telegram/client.js.map +1 -1
- package/dist/src/platforms/telegram/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/telegram/commands/auth.js +1 -1
- package/dist/src/platforms/telegram/commands/auth.js.map +1 -1
- package/dist/src/platforms/telegram/commands/chat.d.ts.map +1 -1
- package/dist/src/platforms/telegram/commands/chat.js.map +1 -1
- package/dist/src/platforms/telegram/commands/message.d.ts.map +1 -1
- package/dist/src/platforms/telegram/commands/message.js.map +1 -1
- package/dist/src/platforms/telegram/commands/whoami.js +1 -1
- package/dist/src/platforms/telegram/commands/whoami.js.map +1 -1
- package/dist/src/platforms/telegram/credential-manager.d.ts.map +1 -1
- package/dist/src/platforms/telegram/credential-manager.js +6 -2
- package/dist/src/platforms/telegram/credential-manager.js.map +1 -1
- package/dist/src/platforms/telegram/my-telegram-org.js.map +1 -1
- package/dist/src/platforms/webex/cli.d.ts.map +1 -1
- package/dist/src/platforms/webex/cli.js +1 -4
- package/dist/src/platforms/webex/cli.js.map +1 -1
- package/dist/src/platforms/webex/client.d.ts.map +1 -1
- package/dist/src/platforms/webex/client.js +3 -7
- package/dist/src/platforms/webex/client.js.map +1 -1
- package/dist/src/platforms/webex/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/webex/commands/auth.js +1 -3
- package/dist/src/platforms/webex/commands/auth.js.map +1 -1
- package/dist/src/platforms/webex/commands/member.d.ts.map +1 -1
- package/dist/src/platforms/webex/commands/member.js +1 -3
- package/dist/src/platforms/webex/commands/member.js.map +1 -1
- package/dist/src/platforms/webex/commands/message.d.ts.map +1 -1
- package/dist/src/platforms/webex/commands/message.js.map +1 -1
- package/dist/src/platforms/webex/commands/snapshot.d.ts +1 -0
- package/dist/src/platforms/webex/commands/snapshot.d.ts.map +1 -1
- package/dist/src/platforms/webex/commands/snapshot.js +14 -7
- package/dist/src/platforms/webex/commands/snapshot.js.map +1 -1
- package/dist/src/platforms/webex/commands/space.d.ts.map +1 -1
- package/dist/src/platforms/webex/commands/space.js.map +1 -1
- package/dist/src/platforms/webex/commands/whoami.d.ts.map +1 -1
- package/dist/src/platforms/webex/commands/whoami.js.map +1 -1
- package/dist/src/platforms/webex/credential-manager.d.ts.map +1 -1
- package/dist/src/platforms/webex/credential-manager.js.map +1 -1
- package/dist/src/platforms/webex/ensure-auth.d.ts.map +1 -1
- package/dist/src/platforms/webex/ensure-auth.js +1 -3
- package/dist/src/platforms/webex/ensure-auth.js.map +1 -1
- package/dist/src/platforms/webex/index.d.ts +1 -1
- package/dist/src/platforms/webex/index.d.ts.map +1 -1
- package/dist/src/platforms/webex/index.js.map +1 -1
- package/dist/src/platforms/webex/markdown-to-html.js.map +1 -1
- package/dist/src/platforms/webex/token-extractor.d.ts.map +1 -1
- package/dist/src/platforms/webex/token-extractor.js +5 -14
- package/dist/src/platforms/webex/token-extractor.js.map +1 -1
- package/dist/src/platforms/wechatbot/client.d.ts.map +1 -1
- package/dist/src/platforms/wechatbot/client.js.map +1 -1
- package/dist/src/platforms/wechatbot/commands/message.d.ts.map +1 -1
- package/dist/src/platforms/wechatbot/commands/message.js.map +1 -1
- package/dist/src/platforms/whatsapp/cli.d.ts.map +1 -1
- package/dist/src/platforms/whatsapp/cli.js +1 -4
- package/dist/src/platforms/whatsapp/cli.js.map +1 -1
- package/dist/src/platforms/whatsapp/commands/chat.d.ts.map +1 -1
- package/dist/src/platforms/whatsapp/commands/chat.js.map +1 -1
- package/dist/src/platforms/whatsapp/commands/message.d.ts.map +1 -1
- package/dist/src/platforms/whatsapp/commands/message.js.map +1 -1
- package/dist/src/platforms/whatsapp/commands/shared.d.ts.map +1 -1
- package/dist/src/platforms/whatsapp/commands/shared.js.map +1 -1
- package/dist/src/platforms/whatsapp/credential-manager.d.ts.map +1 -1
- package/dist/src/platforms/whatsapp/credential-manager.js +1 -1
- package/dist/src/platforms/whatsapp/credential-manager.js.map +1 -1
- package/dist/src/platforms/whatsapp/ensure-auth.d.ts.map +1 -1
- package/dist/src/platforms/whatsapp/ensure-auth.js.map +1 -1
- package/dist/src/platforms/whatsappbot/client.d.ts.map +1 -1
- package/dist/src/platforms/whatsappbot/client.js +2 -2
- package/dist/src/platforms/whatsappbot/client.js.map +1 -1
- package/dist/src/platforms/whatsappbot/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/whatsappbot/commands/auth.js +4 -1
- 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.map +1 -1
- package/dist/src/platforms/whatsappbot/commands/shared.d.ts.map +1 -1
- package/dist/src/platforms/whatsappbot/commands/shared.js.map +1 -1
- package/dist/src/shared/chromium/browsers.d.ts +7 -0
- package/dist/src/shared/chromium/browsers.d.ts.map +1 -0
- package/dist/src/shared/chromium/browsers.js +89 -0
- package/dist/src/shared/chromium/browsers.js.map +1 -0
- package/dist/src/shared/chromium/cookie-reader.d.ts +20 -0
- package/dist/src/shared/chromium/cookie-reader.d.ts.map +1 -0
- package/dist/src/shared/chromium/cookie-reader.js +99 -0
- package/dist/src/shared/chromium/cookie-reader.js.map +1 -0
- package/dist/src/shared/chromium/decryptor.d.ts +42 -0
- package/dist/src/shared/chromium/decryptor.d.ts.map +1 -0
- package/dist/src/shared/chromium/decryptor.js +205 -0
- package/dist/src/shared/chromium/decryptor.js.map +1 -0
- package/dist/src/shared/chromium/index.d.ts +6 -0
- package/dist/src/shared/chromium/index.d.ts.map +1 -0
- package/dist/src/shared/chromium/index.js +4 -0
- package/dist/src/shared/chromium/index.js.map +1 -0
- package/dist/src/shared/chromium/types.d.ts +11 -0
- package/dist/src/shared/chromium/types.d.ts.map +1 -0
- package/dist/src/shared/chromium/types.js +2 -0
- package/dist/src/shared/chromium/types.js.map +1 -0
- package/dist/src/shared/utils/derived-key-cache.d.ts +1 -1
- package/dist/src/shared/utils/derived-key-cache.d.ts.map +1 -1
- package/dist/src/shared/utils/linux-keyring.js +4 -1
- package/dist/src/shared/utils/linux-keyring.js.map +1 -1
- package/dist/src/tui/adapters/kakaotalk-adapter.d.ts.map +1 -1
- package/dist/src/tui/adapters/kakaotalk-adapter.js +6 -1
- package/dist/src/tui/adapters/kakaotalk-adapter.js.map +1 -1
- package/dist/src/tui/adapters/telegram-adapter.js +1 -1
- package/dist/src/tui/adapters/telegram-adapter.js.map +1 -1
- package/dist/src/tui/adapters/webex-adapter.js +1 -1
- package/dist/src/tui/adapters/webex-adapter.js.map +1 -1
- package/dist/src/tui/app.d.ts.map +1 -1
- package/dist/src/tui/app.js +112 -23
- package/dist/src/tui/app.js.map +1 -1
- package/dist/src/tui/utils.d.ts.map +1 -1
- package/dist/src/tui/utils.js +11 -13
- package/dist/src/tui/utils.js.map +1 -1
- package/dist/src/tui/views/channel-picker.d.ts.map +1 -1
- package/dist/src/tui/views/channel-picker.js.map +1 -1
- package/dist/src/tui/views/workspace-picker.d.ts.map +1 -1
- package/dist/src/tui/views/workspace-picker.js.map +1 -1
- package/docs/content/docs/agent-skills.mdx +0 -10
- package/docs/content/docs/cli/channeltalk.mdx +42 -30
- package/docs/content/docs/cli/channeltalkbot.mdx +23 -13
- package/docs/content/docs/cli/discord.mdx +23 -7
- package/docs/content/docs/cli/discordbot.mdx +23 -7
- package/docs/content/docs/cli/instagram.mdx +4 -4
- package/docs/content/docs/cli/kakaotalk.mdx +9 -8
- package/docs/content/docs/cli/line.mdx +14 -14
- package/docs/content/docs/cli/slack.mdx +24 -7
- package/docs/content/docs/cli/teams.mdx +24 -8
- package/docs/content/docs/cli/webex.mdx +34 -21
- package/docs/content/docs/cli/wechatbot.mdx +12 -11
- package/docs/content/docs/cli/whatsapp.mdx +5 -4
- package/docs/content/docs/cli/whatsappbot.mdx +11 -11
- package/docs/content/docs/index.mdx +7 -7
- package/docs/content/docs/meta.json +1 -9
- package/docs/content/docs/sdk/channeltalk.mdx +5 -6
- package/docs/content/docs/sdk/channeltalkbot.mdx +6 -12
- package/docs/content/docs/sdk/discord.mdx +36 -43
- package/docs/content/docs/sdk/instagram.mdx +18 -18
- package/docs/content/docs/sdk/kakaotalk.mdx +27 -18
- package/docs/content/docs/sdk/line.mdx +8 -13
- package/docs/content/docs/sdk/meta.json +14 -1
- package/docs/content/docs/sdk/slack.mdx +36 -42
- package/docs/content/docs/sdk/teams.mdx +2 -8
- package/docs/content/docs/sdk/webex.mdx +2 -12
- package/docs/content/docs/sdk/wechatbot.mdx +1 -5
- package/docs/content/docs/sdk/whatsapp.mdx +10 -19
- package/docs/content/docs/sdk/whatsappbot.mdx +2 -10
- package/docs/content/docs/tui.mdx +23 -23
- package/docs/src/app/page.tsx +353 -108
- package/e2e/channeltalkbot.e2e.test.ts +1 -5
- package/e2e/config.ts +6 -2
- package/package.json +59 -58
- package/scripts/prepublish.ts +1 -3
- package/skills/agent-channeltalk/SKILL.md +19 -9
- package/skills/agent-channeltalk/references/common-patterns.md +10 -9
- package/skills/agent-channeltalkbot/SKILL.md +19 -9
- package/skills/agent-channeltalkbot/references/common-patterns.md +10 -9
- package/skills/agent-discord/SKILL.md +18 -9
- package/skills/agent-discord/references/common-patterns.md +8 -7
- package/skills/agent-discordbot/SKILL.md +18 -9
- package/skills/agent-instagram/SKILL.md +1 -1
- package/skills/agent-kakaotalk/SKILL.md +1 -1
- package/skills/agent-line/SKILL.md +1 -1
- package/skills/agent-slack/SKILL.md +19 -10
- package/skills/agent-slack/references/common-patterns.md +4 -7
- package/skills/agent-slackbot/SKILL.md +1 -1
- package/skills/agent-teams/SKILL.md +18 -9
- package/skills/agent-teams/references/common-patterns.md +9 -7
- package/skills/agent-telegram/SKILL.md +1 -1
- package/skills/agent-webex/SKILL.md +13 -4
- package/skills/agent-webex/references/common-patterns.md +8 -2
- package/skills/agent-wechatbot/SKILL.md +1 -1
- package/skills/agent-whatsapp/SKILL.md +1 -1
- package/skills/agent-whatsappbot/SKILL.md +1 -1
- package/src/platforms/channeltalk/client.test.ts +116 -29
- package/src/platforms/channeltalk/client.ts +26 -6
- package/src/platforms/channeltalk/commands/auth.test.ts +5 -5
- package/src/platforms/channeltalk/commands/auth.ts +19 -5
- package/src/platforms/channeltalk/commands/message.test.ts +2 -6
- package/src/platforms/channeltalk/commands/message.ts +5 -1
- package/src/platforms/channeltalk/commands/snapshot.test.ts +77 -30
- package/src/platforms/channeltalk/commands/snapshot.ts +112 -34
- package/src/platforms/channeltalk/ensure-auth.test.ts +20 -17
- package/src/platforms/channeltalk/ensure-auth.ts +6 -7
- package/src/platforms/channeltalk/index.ts +0 -1
- package/src/platforms/channeltalk/token-extractor.test.ts +33 -25
- package/src/platforms/channeltalk/token-extractor.ts +120 -372
- package/src/platforms/channeltalkbot/client.test.ts +1 -3
- package/src/platforms/channeltalkbot/client.ts +39 -13
- package/src/platforms/channeltalkbot/commands/auth.test.ts +3 -1
- package/src/platforms/channeltalkbot/commands/auth.ts +4 -1
- package/src/platforms/channeltalkbot/commands/bot.test.ts +13 -5
- package/src/platforms/channeltalkbot/commands/message.test.ts +12 -6
- package/src/platforms/channeltalkbot/commands/shared.ts +6 -2
- package/src/platforms/channeltalkbot/commands/snapshot.test.ts +43 -13
- package/src/platforms/channeltalkbot/commands/snapshot.ts +131 -64
- package/src/platforms/channeltalkbot/credential-manager.test.ts +1 -1
- package/src/platforms/channeltalkbot/index.test.ts +0 -2
- package/src/platforms/channeltalkbot/index.ts +0 -1
- package/src/platforms/discord/commands/auth.test.ts +6 -4
- package/src/platforms/discord/commands/auth.ts +14 -14
- package/src/platforms/discord/commands/snapshot.test.ts +1 -1
- package/src/platforms/discord/commands/snapshot.ts +58 -42
- package/src/platforms/discord/commands/whoami.test.ts +2 -4
- package/src/platforms/discord/commands/whoami.ts +2 -0
- package/src/platforms/discord/ensure-auth.test.ts +5 -3
- package/src/platforms/discord/index.ts +0 -1
- package/src/platforms/discord/listener.test.ts +7 -1
- package/src/platforms/discord/token-extractor.test.ts +18 -12
- package/src/platforms/discord/token-extractor.ts +46 -190
- package/src/platforms/discordbot/client.ts +1 -4
- package/src/platforms/discordbot/commands/auth.test.ts +3 -1
- package/src/platforms/discordbot/commands/channel.test.ts +3 -1
- package/src/platforms/discordbot/commands/message.test.ts +3 -1
- package/src/platforms/discordbot/commands/server.test.ts +3 -1
- package/src/platforms/discordbot/commands/snapshot.test.ts +43 -19
- package/src/platforms/discordbot/commands/snapshot.ts +54 -37
- package/src/platforms/discordbot/commands/thread.test.ts +3 -1
- package/src/platforms/discordbot/commands/user.test.ts +3 -1
- package/src/platforms/instagram/cli.ts +1 -4
- package/src/platforms/instagram/client.test.ts +3 -8
- package/src/platforms/instagram/client.ts +39 -34
- package/src/platforms/instagram/commands/auth.test.ts +13 -12
- package/src/platforms/instagram/commands/auth.ts +136 -71
- package/src/platforms/instagram/commands/chat.test.ts +21 -24
- package/src/platforms/instagram/commands/chat.ts +2 -0
- package/src/platforms/instagram/commands/message.test.ts +29 -24
- package/src/platforms/instagram/commands/message.ts +3 -4
- package/src/platforms/instagram/commands/shared.ts +2 -5
- package/src/platforms/instagram/commands/whoami.test.ts +4 -6
- package/src/platforms/instagram/credential-manager.ts +2 -6
- package/src/platforms/instagram/ensure-auth.test.ts +1 -4
- package/src/platforms/instagram/ensure-auth.ts +6 -3
- package/src/platforms/instagram/listener.test.ts +7 -3
- package/src/platforms/instagram/token-extractor.test.ts +4 -16
- package/src/platforms/instagram/token-extractor.ts +55 -309
- package/src/platforms/instagram/types.test.ts +2 -6
- package/src/platforms/instagram/types.ts +4 -2
- package/src/platforms/kakaotalk/auth/kakao-login.ts +30 -8
- package/src/platforms/kakaotalk/client.test.ts +37 -25
- package/src/platforms/kakaotalk/client.ts +23 -12
- package/src/platforms/kakaotalk/commands/auth.test.ts +6 -18
- package/src/platforms/kakaotalk/commands/auth.ts +101 -47
- package/src/platforms/kakaotalk/commands/chat.test.ts +8 -11
- package/src/platforms/kakaotalk/commands/message.test.ts +15 -24
- package/src/platforms/kakaotalk/commands/shared.ts +1 -0
- package/src/platforms/kakaotalk/commands/whoami.test.ts +6 -10
- package/src/platforms/kakaotalk/credential-manager.test.ts +1 -4
- package/src/platforms/kakaotalk/index.test.ts +1 -0
- package/src/platforms/kakaotalk/index.ts +0 -2
- package/src/platforms/kakaotalk/listener.test.ts +7 -1
- package/src/platforms/kakaotalk/protocol/connection.ts +4 -1
- package/src/platforms/kakaotalk/protocol/crypto.ts +1 -1
- package/src/platforms/kakaotalk/protocol/session.ts +12 -6
- package/src/platforms/kakaotalk/token-extractor.ts +5 -5
- package/src/platforms/kakaotalk/types.ts +8 -7
- package/src/platforms/line/cli.ts +1 -4
- package/src/platforms/line/client.ts +12 -20
- package/src/platforms/line/commands/auth.test.ts +2 -1
- package/src/platforms/line/commands/chat.test.ts +2 -1
- package/src/platforms/line/commands/chat.ts +1 -4
- package/src/platforms/line/commands/friend.test.ts +2 -1
- package/src/platforms/line/commands/message.test.ts +2 -1
- package/src/platforms/line/commands/message.ts +2 -9
- package/src/platforms/line/commands/whoami.test.ts +2 -1
- package/src/platforms/line/credential-manager.test.ts +1 -2
- package/src/platforms/line/index.test.ts +1 -0
- package/src/platforms/line/listener.ts +1 -1
- package/src/platforms/line/types.test.ts +1 -0
- package/src/platforms/slack/cli.ts +3 -1
- package/src/platforms/slack/client-mappers.ts +297 -0
- package/src/platforms/slack/client.test.ts +532 -17
- package/src/platforms/slack/client.ts +69 -458
- package/src/platforms/slack/commands/channel.ts +1 -4
- package/src/platforms/slack/commands/emoji.test.ts +6 -4
- package/src/platforms/slack/commands/emoji.ts +20 -22
- package/src/platforms/slack/commands/message.ts +6 -1
- package/src/platforms/slack/commands/pin.test.ts +14 -12
- package/src/platforms/slack/commands/reminder.ts +7 -6
- package/src/platforms/slack/commands/snapshot.test.ts +63 -8
- package/src/platforms/slack/commands/snapshot.ts +98 -66
- package/src/platforms/slack/commands/user.ts +6 -1
- package/src/platforms/slack/commands/usergroup.test.ts +3 -3
- package/src/platforms/slack/commands/usergroup.ts +10 -7
- package/src/platforms/slack/commands/whoami.test.ts +1 -1
- package/src/platforms/slack/commands/whoami.ts +2 -0
- package/src/platforms/slack/index.ts +0 -2
- package/src/platforms/slack/listener.test.ts +1 -0
- package/src/platforms/slack/token-extractor.test.ts +7 -12
- package/src/platforms/slack/token-extractor.ts +47 -255
- package/src/platforms/slackbot/cli.ts +8 -1
- package/src/platforms/slackbot/commands/auth.test.ts +3 -1
- package/src/platforms/teams/client.ts +1 -1
- package/src/platforms/teams/commands/auth.test.ts +1 -1
- package/src/platforms/teams/commands/auth.ts +4 -1
- package/src/platforms/teams/commands/snapshot.test.ts +1 -1
- package/src/platforms/teams/commands/snapshot.ts +53 -38
- package/src/platforms/teams/commands/whoami.test.ts +2 -4
- package/src/platforms/teams/commands/whoami.ts +2 -0
- package/src/platforms/teams/index.ts +0 -1
- package/src/platforms/teams/token-extractor.ts +82 -350
- package/src/platforms/telegram/app-config.test.ts +1 -0
- package/src/platforms/telegram/chat-utils.test.ts +5 -1
- package/src/platforms/telegram/cli.ts +2 -4
- package/src/platforms/telegram/client.test.ts +16 -3
- package/src/platforms/telegram/client.ts +14 -4
- package/src/platforms/telegram/commands/auth.test.ts +1 -0
- package/src/platforms/telegram/commands/auth.ts +3 -4
- package/src/platforms/telegram/commands/chat.test.ts +2 -5
- package/src/platforms/telegram/commands/chat.ts +1 -0
- package/src/platforms/telegram/commands/message.test.ts +2 -5
- package/src/platforms/telegram/commands/message.ts +1 -0
- package/src/platforms/telegram/commands/shared.test.ts +1 -0
- package/src/platforms/telegram/commands/whoami.test.ts +5 -7
- package/src/platforms/telegram/commands/whoami.ts +1 -1
- package/src/platforms/telegram/credential-manager.test.ts +1 -0
- package/src/platforms/telegram/credential-manager.ts +11 -2
- package/src/platforms/telegram/my-telegram-org.ts +6 -2
- package/src/platforms/telegram/types.test.ts +1 -0
- package/src/platforms/webex/app-config.test.ts +1 -0
- package/src/platforms/webex/cli.ts +1 -4
- package/src/platforms/webex/client.test.ts +4 -12
- package/src/platforms/webex/client.ts +14 -52
- package/src/platforms/webex/commands/auth.test.ts +7 -1
- package/src/platforms/webex/commands/auth.ts +12 -15
- package/src/platforms/webex/commands/member.test.ts +1 -3
- package/src/platforms/webex/commands/member.ts +14 -19
- package/src/platforms/webex/commands/message.ts +4 -15
- package/src/platforms/webex/commands/snapshot.test.ts +42 -4
- package/src/platforms/webex/commands/snapshot.ts +19 -11
- package/src/platforms/webex/commands/space.test.ts +3 -3
- package/src/platforms/webex/commands/space.ts +2 -9
- package/src/platforms/webex/commands/whoami.test.ts +12 -5
- package/src/platforms/webex/commands/whoami.ts +2 -0
- package/src/platforms/webex/credential-manager.ts +11 -2
- package/src/platforms/webex/ensure-auth.ts +1 -3
- package/src/platforms/webex/index.ts +1 -7
- package/src/platforms/webex/markdown-to-html.test.ts +6 -18
- package/src/platforms/webex/markdown-to-html.ts +8 -8
- package/src/platforms/webex/token-extractor.ts +6 -29
- package/src/platforms/wechatbot/client.test.ts +6 -2
- package/src/platforms/wechatbot/client.ts +6 -1
- package/src/platforms/wechatbot/commands/auth.test.ts +3 -7
- package/src/platforms/wechatbot/commands/message.test.ts +1 -4
- package/src/platforms/wechatbot/commands/message.ts +5 -1
- package/src/platforms/wechatbot/commands/template.test.ts +1 -4
- package/src/platforms/wechatbot/commands/user.test.ts +2 -7
- package/src/platforms/whatsapp/cli.ts +1 -4
- package/src/platforms/whatsapp/commands/auth.test.ts +19 -22
- package/src/platforms/whatsapp/commands/chat.test.ts +21 -24
- package/src/platforms/whatsapp/commands/chat.ts +2 -0
- package/src/platforms/whatsapp/commands/message.test.ts +22 -24
- package/src/platforms/whatsapp/commands/message.ts +3 -5
- package/src/platforms/whatsapp/commands/shared.ts +2 -5
- package/src/platforms/whatsapp/commands/whoami.test.ts +2 -2
- package/src/platforms/whatsapp/credential-manager.ts +2 -6
- package/src/platforms/whatsapp/ensure-auth.test.ts +1 -4
- package/src/platforms/whatsapp/ensure-auth.ts +14 -6
- package/src/platforms/whatsapp/index.ts +0 -2
- package/src/platforms/whatsappbot/client.test.ts +13 -7
- package/src/platforms/whatsappbot/client.ts +18 -4
- package/src/platforms/whatsappbot/commands/auth.ts +4 -1
- package/src/platforms/whatsappbot/commands/message.test.ts +12 -2
- package/src/platforms/whatsappbot/commands/message.ts +16 -3
- package/src/platforms/whatsappbot/commands/shared.ts +3 -1
- package/src/platforms/whatsappbot/commands/whoami.test.ts +1 -3
- package/src/platforms/whatsappbot/index.ts +0 -2
- package/src/shared/chromium/browsers.test.ts +274 -0
- package/src/shared/chromium/browsers.ts +86 -0
- package/src/shared/chromium/cookie-reader.test.ts +274 -0
- package/src/shared/chromium/cookie-reader.ts +111 -0
- package/src/shared/chromium/decryptor.test.ts +449 -0
- package/src/shared/chromium/decryptor.ts +227 -0
- package/src/shared/chromium/index.ts +11 -0
- package/src/shared/chromium/types.ts +11 -0
- package/src/shared/utils/derived-key-cache.ts +1 -1
- package/src/shared/utils/linux-keyring.ts +4 -4
- package/src/tui/adapters/kakaotalk-adapter.ts +6 -1
- package/src/tui/adapters/telegram-adapter.ts +1 -1
- package/src/tui/adapters/webex-adapter.ts +1 -1
- package/src/tui/app.ts +149 -59
- package/src/tui/utils.test.ts +144 -145
- package/src/tui/utils.ts +27 -29
- package/src/tui/views/channel-picker.ts +1 -1
- package/src/tui/views/workspace-picker.ts +1 -1
|
@@ -173,10 +173,7 @@ async function usersAction(channel: string, options: { includeBots?: boolean; pr
|
|
|
173
173
|
}
|
|
174
174
|
}
|
|
175
175
|
|
|
176
|
-
async function createAction(
|
|
177
|
-
name: string,
|
|
178
|
-
options: { private?: boolean; pretty?: boolean },
|
|
179
|
-
): Promise<void> {
|
|
176
|
+
async function createAction(name: string, options: { private?: boolean; pretty?: boolean }): Promise<void> {
|
|
180
177
|
try {
|
|
181
178
|
const credManager = new CredentialManager()
|
|
182
179
|
const workspace = await credManager.getWorkspace()
|
|
@@ -7,10 +7,12 @@ describe('Emoji Commands', () => {
|
|
|
7
7
|
|
|
8
8
|
beforeEach(() => {
|
|
9
9
|
mockClient = {
|
|
10
|
-
listEmoji: mock(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
listEmoji: mock(
|
|
11
|
+
async (): Promise<Record<string, string>> => ({
|
|
12
|
+
party_blob: 'https://example.com/party_blob.gif',
|
|
13
|
+
cool_sunglasses: 'https://example.com/cool_sunglasses.png',
|
|
14
|
+
}),
|
|
15
|
+
),
|
|
14
16
|
}
|
|
15
17
|
})
|
|
16
18
|
|
|
@@ -6,28 +6,26 @@ import { formatOutput } from '@/shared/utils/output'
|
|
|
6
6
|
import { SlackClient } from '../client'
|
|
7
7
|
import { CredentialManager } from '../credential-manager'
|
|
8
8
|
|
|
9
|
-
export const emojiCommand = new Command('emoji')
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const credManager = new CredentialManager()
|
|
18
|
-
const ws = await credManager.getWorkspace()
|
|
9
|
+
export const emojiCommand = new Command('emoji').description('Emoji commands').addCommand(
|
|
10
|
+
new Command('list')
|
|
11
|
+
.description('List all custom emoji in workspace')
|
|
12
|
+
.option('--pretty', 'Pretty print JSON output')
|
|
13
|
+
.action(async (options) => {
|
|
14
|
+
try {
|
|
15
|
+
const credManager = new CredentialManager()
|
|
16
|
+
const ws = await credManager.getWorkspace()
|
|
19
17
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
if (!ws) {
|
|
19
|
+
console.log(formatOutput({ error: 'No current workspace set. Run "auth extract" first.' }, options.pretty))
|
|
20
|
+
process.exit(1)
|
|
21
|
+
}
|
|
24
22
|
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
const client = await new SlackClient().login({ token: ws.token, cookie: ws.cookie })
|
|
24
|
+
const emoji = await client.listEmoji()
|
|
27
25
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
26
|
+
console.log(formatOutput(emoji, options.pretty))
|
|
27
|
+
} catch (error) {
|
|
28
|
+
handleError(error as Error)
|
|
29
|
+
}
|
|
30
|
+
}),
|
|
31
|
+
)
|
|
@@ -270,7 +270,12 @@ async function scheduleAction(
|
|
|
270
270
|
|
|
271
271
|
const postAtTimestamp = Number(postAt)
|
|
272
272
|
if (!Number.isInteger(postAtTimestamp) || postAtTimestamp <= 0) {
|
|
273
|
-
console.log(
|
|
273
|
+
console.log(
|
|
274
|
+
formatOutput(
|
|
275
|
+
{ error: 'Invalid post-at value. Use a Unix timestamp in seconds (e.g. 1700000000).' },
|
|
276
|
+
options.pretty,
|
|
277
|
+
),
|
|
278
|
+
)
|
|
274
279
|
process.exit(1)
|
|
275
280
|
}
|
|
276
281
|
|
|
@@ -10,19 +10,21 @@ describe('Pin Commands', () => {
|
|
|
10
10
|
mockClient = {
|
|
11
11
|
pinMessage: mock(async () => {}),
|
|
12
12
|
unpinMessage: mock(async () => {}),
|
|
13
|
-
listPins: mock(
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
13
|
+
listPins: mock(
|
|
14
|
+
async (): Promise<SlackPin[]> => [
|
|
15
|
+
{
|
|
16
|
+
channel: 'C001',
|
|
17
|
+
message: {
|
|
18
|
+
ts: '1234567890.123456',
|
|
19
|
+
text: 'Pinned message',
|
|
20
|
+
user: 'U001',
|
|
21
|
+
type: 'message',
|
|
22
|
+
},
|
|
23
|
+
date_created: 1234567890,
|
|
24
|
+
created_by: 'U001',
|
|
21
25
|
},
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
},
|
|
25
|
-
]),
|
|
26
|
+
],
|
|
27
|
+
),
|
|
26
28
|
}
|
|
27
29
|
})
|
|
28
30
|
|
|
@@ -6,11 +6,7 @@ import { formatOutput } from '@/shared/utils/output'
|
|
|
6
6
|
import { SlackClient } from '../client'
|
|
7
7
|
import { CredentialManager } from '../credential-manager'
|
|
8
8
|
|
|
9
|
-
async function addAction(
|
|
10
|
-
text: string,
|
|
11
|
-
time: string,
|
|
12
|
-
options: { user?: string; pretty?: boolean },
|
|
13
|
-
): Promise<void> {
|
|
9
|
+
async function addAction(text: string, time: string, options: { user?: string; pretty?: boolean }): Promise<void> {
|
|
14
10
|
try {
|
|
15
11
|
const credManager = new CredentialManager()
|
|
16
12
|
const ws = await credManager.getWorkspace()
|
|
@@ -22,7 +18,12 @@ async function addAction(
|
|
|
22
18
|
|
|
23
19
|
const timeValue = Number(time)
|
|
24
20
|
if (!Number.isInteger(timeValue) || timeValue <= 0) {
|
|
25
|
-
console.log(
|
|
21
|
+
console.log(
|
|
22
|
+
formatOutput(
|
|
23
|
+
{ error: 'Invalid time value. Use a Unix timestamp in seconds (e.g. 1700000000).' },
|
|
24
|
+
options.pretty,
|
|
25
|
+
),
|
|
26
|
+
)
|
|
26
27
|
process.exit(1)
|
|
27
28
|
}
|
|
28
29
|
|
|
@@ -34,6 +34,12 @@ test('snapshot command has --limit option', () => {
|
|
|
34
34
|
expect(hasLimit).toBe(true)
|
|
35
35
|
})
|
|
36
36
|
|
|
37
|
+
test('snapshot command has --full option', () => {
|
|
38
|
+
const options = snapshotCommand.options
|
|
39
|
+
const hasFull = options.some((opt: any) => opt.long === '--full')
|
|
40
|
+
expect(hasFull).toBe(true)
|
|
41
|
+
})
|
|
42
|
+
|
|
37
43
|
// Test snapshot logic using spyOn (no global mock pollution)
|
|
38
44
|
let credManagerSpy: ReturnType<typeof spyOn>
|
|
39
45
|
let clientTestAuthSpy: ReturnType<typeof spyOn>
|
|
@@ -147,11 +153,66 @@ afterEach(() => {
|
|
|
147
153
|
clientGetMessagesSpy?.mockRestore()
|
|
148
154
|
})
|
|
149
155
|
|
|
156
|
+
test('brief snapshot (default) returns workspace, channels as {id, name}, and hint', async () => {
|
|
157
|
+
const client = await new SlackClient().login({ token: 'xoxc-test', cookie: 'test-cookie' })
|
|
158
|
+
|
|
159
|
+
const auth = await client.testAuth()
|
|
160
|
+
const channels = await client.listChannels()
|
|
161
|
+
const active = channels.filter((ch) => !ch.is_archived)
|
|
162
|
+
|
|
163
|
+
const snapshot = {
|
|
164
|
+
workspace: {
|
|
165
|
+
id: auth.team_id,
|
|
166
|
+
name: auth.team,
|
|
167
|
+
},
|
|
168
|
+
channels: active.map((ch) => ({ id: ch.id, name: ch.name })),
|
|
169
|
+
hint: "Use 'message list <channel>' for messages, 'channel info <channel>' for channel details, 'user list' for users, 'usergroup list' for groups.",
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
expect(snapshot.workspace).toBeDefined()
|
|
173
|
+
expect(snapshot.workspace.id).toBe('T123')
|
|
174
|
+
expect(snapshot.workspace.name).toBe('Test Workspace')
|
|
175
|
+
|
|
176
|
+
expect(snapshot.channels).toBeDefined()
|
|
177
|
+
expect(snapshot.channels.length).toBe(2)
|
|
178
|
+
expect(snapshot.channels[0]).toEqual({ id: 'C123', name: 'general' })
|
|
179
|
+
expect(snapshot.channels[1]).toEqual({ id: 'C456', name: 'random' })
|
|
180
|
+
|
|
181
|
+
expect((snapshot as any).recent_messages).toBeUndefined()
|
|
182
|
+
expect((snapshot as any).users).toBeUndefined()
|
|
183
|
+
expect((snapshot as any).usergroups).toBeUndefined()
|
|
184
|
+
|
|
185
|
+
expect(snapshot.hint).toContain('message list')
|
|
186
|
+
})
|
|
187
|
+
|
|
188
|
+
test('brief snapshot excludes archived channels', async () => {
|
|
189
|
+
const channelsWithArchived: SlackChannel[] = [
|
|
190
|
+
...mockChannels,
|
|
191
|
+
{
|
|
192
|
+
id: 'C789',
|
|
193
|
+
name: 'old-channel',
|
|
194
|
+
is_private: false,
|
|
195
|
+
is_archived: true,
|
|
196
|
+
created: 1234567800,
|
|
197
|
+
creator: 'U123',
|
|
198
|
+
topic: { value: 'Archived', creator: 'U123', last_set: 1234567800 },
|
|
199
|
+
purpose: { value: 'Old channel', creator: 'U123', last_set: 1234567800 },
|
|
200
|
+
},
|
|
201
|
+
]
|
|
202
|
+
|
|
203
|
+
clientListChannelsSpy.mockResolvedValue(channelsWithArchived)
|
|
204
|
+
|
|
205
|
+
const client = await new SlackClient().login({ token: 'xoxc-test', cookie: 'test-cookie' })
|
|
206
|
+
const channels = await client.listChannels()
|
|
207
|
+
const active = channels.filter((ch) => !ch.is_archived)
|
|
208
|
+
|
|
209
|
+
expect(active.length).toBe(2)
|
|
210
|
+
expect(active.every((ch) => !ch.is_archived)).toBe(true)
|
|
211
|
+
})
|
|
212
|
+
|
|
150
213
|
test('full snapshot returns workspace, channels, messages, and users', async () => {
|
|
151
|
-
const credManager = new CredentialManager()
|
|
152
214
|
const client = await new SlackClient().login({ token: 'xoxc-test', cookie: 'test-cookie' })
|
|
153
215
|
|
|
154
|
-
const _workspace = await credManager.getWorkspace()
|
|
155
216
|
const auth = await client.testAuth()
|
|
156
217
|
const channels = await client.listChannels()
|
|
157
218
|
const users = await client.listUsers()
|
|
@@ -218,10 +279,8 @@ test('full snapshot returns workspace, channels, messages, and users', async ()
|
|
|
218
279
|
})
|
|
219
280
|
|
|
220
281
|
test('snapshot with --channels-only excludes messages and users', async () => {
|
|
221
|
-
const credManager = new CredentialManager()
|
|
222
282
|
const client = await new SlackClient().login({ token: 'xoxc-test', cookie: 'test-cookie' })
|
|
223
283
|
|
|
224
|
-
const _workspace = await credManager.getWorkspace()
|
|
225
284
|
const auth = await client.testAuth()
|
|
226
285
|
const channels = await client.listChannels()
|
|
227
286
|
|
|
@@ -249,10 +308,8 @@ test('snapshot with --channels-only excludes messages and users', async () => {
|
|
|
249
308
|
})
|
|
250
309
|
|
|
251
310
|
test('snapshot with --users-only excludes channels and messages', async () => {
|
|
252
|
-
const credManager = new CredentialManager()
|
|
253
311
|
const client = await new SlackClient().login({ token: 'xoxc-test', cookie: 'test-cookie' })
|
|
254
312
|
|
|
255
|
-
const _workspace = await credManager.getWorkspace()
|
|
256
313
|
const auth = await client.testAuth()
|
|
257
314
|
const users = await client.listUsers()
|
|
258
315
|
|
|
@@ -279,10 +336,8 @@ test('snapshot with --users-only excludes channels and messages', async () => {
|
|
|
279
336
|
})
|
|
280
337
|
|
|
281
338
|
test('snapshot respects --limit option for messages', async () => {
|
|
282
|
-
const credManager = new CredentialManager()
|
|
283
339
|
const client = await new SlackClient().login({ token: 'xoxc-test', cookie: 'test-cookie' })
|
|
284
340
|
|
|
285
|
-
const _workspace = await credManager.getWorkspace()
|
|
286
341
|
const auth = await client.testAuth()
|
|
287
342
|
const channels = await client.listChannels()
|
|
288
343
|
|
|
@@ -11,6 +11,7 @@ import type { SlackChannel } from '../types'
|
|
|
11
11
|
async function snapshotAction(options: {
|
|
12
12
|
channelsOnly?: boolean
|
|
13
13
|
usersOnly?: boolean
|
|
14
|
+
full?: boolean
|
|
14
15
|
limit?: number
|
|
15
16
|
pretty?: boolean
|
|
16
17
|
}): Promise<void> {
|
|
@@ -26,7 +27,6 @@ async function snapshotAction(options: {
|
|
|
26
27
|
const client = await new SlackClient().login({ token: workspace.token, cookie: workspace.cookie })
|
|
27
28
|
|
|
28
29
|
const auth = await client.testAuth()
|
|
29
|
-
const messageLimit = options.limit || 20
|
|
30
30
|
|
|
31
31
|
const snapshot: Record<string, any> = {
|
|
32
32
|
workspace: {
|
|
@@ -35,88 +35,120 @@ async function snapshotAction(options: {
|
|
|
35
35
|
},
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
name: ch.name,
|
|
44
|
-
is_private: ch.is_private,
|
|
45
|
-
is_archived: ch.is_archived,
|
|
46
|
-
created: ch.created,
|
|
47
|
-
topic: ch.topic?.value,
|
|
48
|
-
purpose: ch.purpose?.value,
|
|
49
|
-
}))
|
|
50
|
-
|
|
51
|
-
if (!options.channelsOnly) {
|
|
52
|
-
const activeChannels = channels.filter((ch) => !ch.is_archived)
|
|
53
|
-
|
|
54
|
-
const channelMessages = await parallelMap(
|
|
55
|
-
activeChannels,
|
|
56
|
-
async (channel: SlackChannel) => {
|
|
57
|
-
const messages = await client.getMessages(channel.id, messageLimit)
|
|
58
|
-
return messages.map((msg) => ({
|
|
59
|
-
...msg,
|
|
60
|
-
channel_id: channel.id,
|
|
61
|
-
channel_name: channel.name,
|
|
62
|
-
}))
|
|
63
|
-
},
|
|
64
|
-
5,
|
|
65
|
-
)
|
|
66
|
-
|
|
67
|
-
snapshot.recent_messages = channelMessages.flat().map((msg) => ({
|
|
68
|
-
channel_id: msg.channel_id,
|
|
69
|
-
channel_name: msg.channel_name,
|
|
70
|
-
ts: msg.ts,
|
|
71
|
-
text: msg.text,
|
|
72
|
-
user: msg.user,
|
|
73
|
-
username: msg.username,
|
|
74
|
-
thread_ts: msg.thread_ts,
|
|
75
|
-
}))
|
|
76
|
-
}
|
|
38
|
+
const isFull = options.full || options.channelsOnly || options.usersOnly
|
|
39
|
+
if (isFull) {
|
|
40
|
+
await buildFullSnapshot(client, snapshot, options)
|
|
41
|
+
} else {
|
|
42
|
+
await buildBriefSnapshot(client, snapshot, options)
|
|
77
43
|
}
|
|
78
44
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
name: u.name,
|
|
85
|
-
real_name: u.real_name,
|
|
86
|
-
is_admin: u.is_admin,
|
|
87
|
-
is_bot: u.is_bot,
|
|
88
|
-
profile: u.profile,
|
|
89
|
-
}))
|
|
90
|
-
}
|
|
45
|
+
console.log(formatOutput(snapshot, options.pretty))
|
|
46
|
+
} catch (error) {
|
|
47
|
+
handleError(error as Error)
|
|
48
|
+
}
|
|
49
|
+
}
|
|
91
50
|
|
|
92
|
-
|
|
93
|
-
|
|
51
|
+
async function buildBriefSnapshot(
|
|
52
|
+
client: SlackClient,
|
|
53
|
+
snapshot: Record<string, any>,
|
|
54
|
+
options: { channelsOnly?: boolean; usersOnly?: boolean },
|
|
55
|
+
): Promise<void> {
|
|
56
|
+
if (!options.usersOnly) {
|
|
57
|
+
const channels = await client.listChannels()
|
|
58
|
+
const active = channels.filter((ch) => !ch.is_archived)
|
|
59
|
+
snapshot.channels = active.map((ch) => ({ id: ch.id, name: ch.name }))
|
|
60
|
+
}
|
|
94
61
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
62
|
+
snapshot.hint =
|
|
63
|
+
"Use 'message list <channel>' for messages, 'channel info <channel>' for channel details, 'user list' for users, 'usergroup list' for groups."
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
async function buildFullSnapshot(
|
|
67
|
+
client: SlackClient,
|
|
68
|
+
snapshot: Record<string, any>,
|
|
69
|
+
options: { channelsOnly?: boolean; usersOnly?: boolean; limit?: number },
|
|
70
|
+
): Promise<void> {
|
|
71
|
+
const messageLimit = options.limit || 20
|
|
72
|
+
|
|
73
|
+
if (!options.usersOnly) {
|
|
74
|
+
const channels = await client.listChannels()
|
|
75
|
+
|
|
76
|
+
snapshot.channels = channels.map((ch) => ({
|
|
77
|
+
id: ch.id,
|
|
78
|
+
name: ch.name,
|
|
79
|
+
is_private: ch.is_private,
|
|
80
|
+
is_archived: ch.is_archived,
|
|
81
|
+
created: ch.created,
|
|
82
|
+
topic: ch.topic?.value,
|
|
83
|
+
purpose: ch.purpose?.value,
|
|
84
|
+
}))
|
|
85
|
+
|
|
86
|
+
if (!options.channelsOnly) {
|
|
87
|
+
const activeChannels = channels.filter((ch) => !ch.is_archived)
|
|
88
|
+
|
|
89
|
+
const channelMessages = await parallelMap(
|
|
90
|
+
activeChannels,
|
|
91
|
+
async (channel: SlackChannel) => {
|
|
92
|
+
const messages = await client.getMessages(channel.id, messageLimit)
|
|
93
|
+
return messages.map((msg) => ({
|
|
94
|
+
...msg,
|
|
95
|
+
channel_id: channel.id,
|
|
96
|
+
channel_name: channel.name,
|
|
97
|
+
}))
|
|
98
|
+
},
|
|
99
|
+
5,
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
snapshot.recent_messages = channelMessages.flat().map((msg) => ({
|
|
103
|
+
channel_id: msg.channel_id,
|
|
104
|
+
channel_name: msg.channel_name,
|
|
105
|
+
ts: msg.ts,
|
|
106
|
+
text: msg.text,
|
|
107
|
+
user: msg.user,
|
|
108
|
+
username: msg.username,
|
|
109
|
+
thread_ts: msg.thread_ts,
|
|
102
110
|
}))
|
|
103
111
|
}
|
|
112
|
+
}
|
|
104
113
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
114
|
+
if (!options.channelsOnly) {
|
|
115
|
+
const users = await client.listUsers()
|
|
116
|
+
|
|
117
|
+
snapshot.users = users.map((u) => ({
|
|
118
|
+
id: u.id,
|
|
119
|
+
name: u.name,
|
|
120
|
+
real_name: u.real_name,
|
|
121
|
+
is_admin: u.is_admin,
|
|
122
|
+
is_bot: u.is_bot,
|
|
123
|
+
profile: u.profile,
|
|
124
|
+
}))
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if (!options.channelsOnly && !options.usersOnly) {
|
|
128
|
+
const usergroups = await client.listUsergroups({ includeUsers: true, includeCount: true })
|
|
129
|
+
|
|
130
|
+
snapshot.usergroups = usergroups.map((ug) => ({
|
|
131
|
+
id: ug.id,
|
|
132
|
+
name: ug.name,
|
|
133
|
+
handle: ug.handle,
|
|
134
|
+
description: ug.description,
|
|
135
|
+
user_count: ug.user_count,
|
|
136
|
+
users: ug.users,
|
|
137
|
+
}))
|
|
108
138
|
}
|
|
109
139
|
}
|
|
110
140
|
|
|
111
141
|
export const snapshotCommand = new Command('snapshot')
|
|
112
|
-
.description('Get
|
|
142
|
+
.description('Get workspace overview for AI agents (brief by default, use --full for comprehensive data)')
|
|
143
|
+
.option('--full', 'Include messages, users, and user groups (verbose)')
|
|
113
144
|
.option('--channels-only', 'Include only channels (exclude messages and users)')
|
|
114
145
|
.option('--users-only', 'Include only users (exclude channels and messages)')
|
|
115
|
-
.option('--limit <n>', 'Number of recent messages per channel (default: 20)', '20')
|
|
146
|
+
.option('--limit <n>', 'Number of recent messages per channel with --full (default: 20)', '20')
|
|
116
147
|
.action(async (options) => {
|
|
117
148
|
await snapshotAction({
|
|
118
149
|
channelsOnly: options.channelsOnly,
|
|
119
150
|
usersOnly: options.usersOnly,
|
|
151
|
+
full: options.full,
|
|
120
152
|
limit: parseInt(options.limit, 10),
|
|
121
153
|
pretty: options.pretty,
|
|
122
154
|
})
|
|
@@ -174,7 +174,12 @@ export const userCommand = new Command('user')
|
|
|
174
174
|
? (() => {
|
|
175
175
|
const ts = Number(options.expiration)
|
|
176
176
|
if (!Number.isInteger(ts) || ts <= 0) {
|
|
177
|
-
console.log(
|
|
177
|
+
console.log(
|
|
178
|
+
formatOutput(
|
|
179
|
+
{ error: 'Invalid --expiration value. Use a Unix timestamp in seconds.' },
|
|
180
|
+
options.pretty,
|
|
181
|
+
),
|
|
182
|
+
)
|
|
178
183
|
process.exit(1)
|
|
179
184
|
}
|
|
180
185
|
return ts
|
|
@@ -86,9 +86,9 @@ describe('Usergroup Commands', () => {
|
|
|
86
86
|
mockClient.updateUsergroup = mock(async () => {
|
|
87
87
|
throw new Error('no_such_subteam')
|
|
88
88
|
})
|
|
89
|
-
await expect(
|
|
90
|
-
|
|
91
|
-
)
|
|
89
|
+
await expect((mockClient as SlackClient).updateUsergroup('S999', { name: 'Nope' })).rejects.toThrow(
|
|
90
|
+
'no_such_subteam',
|
|
91
|
+
)
|
|
92
92
|
})
|
|
93
93
|
})
|
|
94
94
|
|
|
@@ -18,7 +18,11 @@ async function getClient(pretty?: boolean): Promise<SlackClient | null> {
|
|
|
18
18
|
return await new SlackClient().login({ token: ws.token, cookie: ws.cookie })
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
async function listAction(options: {
|
|
21
|
+
async function listAction(options: {
|
|
22
|
+
includeDisabled?: boolean
|
|
23
|
+
includeUsers?: boolean
|
|
24
|
+
pretty?: boolean
|
|
25
|
+
}): Promise<void> {
|
|
22
26
|
try {
|
|
23
27
|
const client = await getClient(options.pretty)
|
|
24
28
|
if (!client) return process.exit(1)
|
|
@@ -136,7 +140,10 @@ async function disableAction(usergroupId: string, options: { pretty?: boolean })
|
|
|
136
140
|
}
|
|
137
141
|
}
|
|
138
142
|
|
|
139
|
-
async function membersAction(
|
|
143
|
+
async function membersAction(
|
|
144
|
+
usergroupId: string,
|
|
145
|
+
options: { includeDisabled?: boolean; pretty?: boolean },
|
|
146
|
+
): Promise<void> {
|
|
140
147
|
try {
|
|
141
148
|
const client = await getClient(options.pretty)
|
|
142
149
|
if (!client) return process.exit(1)
|
|
@@ -151,11 +158,7 @@ async function membersAction(usergroupId: string, options: { includeDisabled?: b
|
|
|
151
158
|
}
|
|
152
159
|
}
|
|
153
160
|
|
|
154
|
-
async function membersUpdateAction(
|
|
155
|
-
usergroupId: string,
|
|
156
|
-
users: string,
|
|
157
|
-
options: { pretty?: boolean },
|
|
158
|
-
): Promise<void> {
|
|
161
|
+
async function membersUpdateAction(usergroupId: string, users: string, options: { pretty?: boolean }): Promise<void> {
|
|
159
162
|
try {
|
|
160
163
|
const client = await getClient(options.pretty)
|
|
161
164
|
if (!client) return process.exit(1)
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { afterEach, beforeEach, expect, spyOn, test } from 'bun:test'
|
|
2
2
|
|
|
3
3
|
import { SlackClient } from '@/platforms/slack/client'
|
|
4
|
-
import { CredentialManager } from '@/platforms/slack/credential-manager'
|
|
5
4
|
import { whoamiAction, whoamiCommand } from '@/platforms/slack/commands/whoami'
|
|
5
|
+
import { CredentialManager } from '@/platforms/slack/credential-manager'
|
|
6
6
|
|
|
7
7
|
let credManagerSpy: ReturnType<typeof spyOn>
|
|
8
8
|
let clientTestAuthSpy: ReturnType<typeof spyOn>
|
|
@@ -813,10 +813,7 @@ describe('TokenExtractor browser fallback', () => {
|
|
|
813
813
|
mkdirSync(leveldbDir, { recursive: true })
|
|
814
814
|
writeFileSync(join(leveldbDir, '000001.log'), `"${token}"T12345678"name":"desktop-workspace"`)
|
|
815
815
|
|
|
816
|
-
const extractFromBrowsersSpy = spyOn(
|
|
817
|
-
TokenExtractor.prototype as any,
|
|
818
|
-
'extractFromBrowsers',
|
|
819
|
-
).mockResolvedValue([])
|
|
816
|
+
const extractFromBrowsersSpy = spyOn(TokenExtractor.prototype as any, 'extractFromBrowsers').mockResolvedValue([])
|
|
820
817
|
|
|
821
818
|
// when
|
|
822
819
|
const extractor = new TokenExtractor('darwin', slackDir)
|
|
@@ -843,10 +840,9 @@ describe('TokenExtractor browser fallback', () => {
|
|
|
843
840
|
cookie: '',
|
|
844
841
|
}
|
|
845
842
|
|
|
846
|
-
const extractFromBrowsersSpy = spyOn(
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
).mockResolvedValue([browserWorkspace])
|
|
843
|
+
const extractFromBrowsersSpy = spyOn(TokenExtractor.prototype as any, 'extractFromBrowsers').mockResolvedValue([
|
|
844
|
+
browserWorkspace,
|
|
845
|
+
])
|
|
850
846
|
|
|
851
847
|
// when
|
|
852
848
|
const extractor = new TokenExtractor('darwin', slackDir)
|
|
@@ -871,10 +867,9 @@ describe('TokenExtractor browser fallback', () => {
|
|
|
871
867
|
cookie: 'xoxd-browser-cookie',
|
|
872
868
|
}
|
|
873
869
|
|
|
874
|
-
const extractFromBrowsersSpy = spyOn(
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
).mockResolvedValue([browserWorkspace])
|
|
870
|
+
const extractFromBrowsersSpy = spyOn(TokenExtractor.prototype as any, 'extractFromBrowsers').mockResolvedValue([
|
|
871
|
+
browserWorkspace,
|
|
872
|
+
])
|
|
878
873
|
|
|
879
874
|
// when
|
|
880
875
|
const extractor = new TokenExtractor('darwin', slackDir)
|