agent-messenger 1.13.1 → 1.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. package/.claude-plugin/README.md +23 -2
  2. package/.claude-plugin/plugin.json +6 -3
  3. package/.env.template +10 -0
  4. package/CONTRIBUTING.md +25 -0
  5. package/README.md +15 -12
  6. package/dist/package.json +3 -1
  7. package/dist/src/cli.d.ts.map +1 -1
  8. package/dist/src/cli.js +6 -0
  9. package/dist/src/cli.js.map +1 -1
  10. package/dist/src/platforms/channeltalk/cli.d.ts +5 -0
  11. package/dist/src/platforms/channeltalk/cli.d.ts.map +1 -0
  12. package/dist/src/platforms/channeltalk/cli.js +36 -0
  13. package/dist/src/platforms/channeltalk/cli.js.map +1 -0
  14. package/dist/src/platforms/channeltalk/client.d.ts +66 -0
  15. package/dist/src/platforms/channeltalk/client.d.ts.map +1 -0
  16. package/dist/src/platforms/channeltalk/client.js +200 -0
  17. package/dist/src/platforms/channeltalk/client.js.map +1 -0
  18. package/dist/src/platforms/channeltalk/commands/auth.d.ts +55 -0
  19. package/dist/src/platforms/channeltalk/commands/auth.d.ts.map +1 -0
  20. package/dist/src/platforms/channeltalk/commands/auth.js +212 -0
  21. package/dist/src/platforms/channeltalk/commands/auth.js.map +1 -0
  22. package/dist/src/platforms/channeltalk/commands/bot.d.ts +22 -0
  23. package/dist/src/platforms/channeltalk/commands/bot.d.ts.map +1 -0
  24. package/dist/src/platforms/channeltalk/commands/bot.js +47 -0
  25. package/dist/src/platforms/channeltalk/commands/bot.js.map +1 -0
  26. package/dist/src/platforms/channeltalk/commands/chat.d.ts +33 -0
  27. package/dist/src/platforms/channeltalk/commands/chat.d.ts.map +1 -0
  28. package/dist/src/platforms/channeltalk/commands/chat.js +79 -0
  29. package/dist/src/platforms/channeltalk/commands/chat.js.map +1 -0
  30. package/dist/src/platforms/channeltalk/commands/group.d.ts +48 -0
  31. package/dist/src/platforms/channeltalk/commands/group.d.ts.map +1 -0
  32. package/dist/src/platforms/channeltalk/commands/group.js +116 -0
  33. package/dist/src/platforms/channeltalk/commands/group.js.map +1 -0
  34. package/dist/src/platforms/channeltalk/commands/index.d.ts +8 -0
  35. package/dist/src/platforms/channeltalk/commands/index.d.ts.map +1 -0
  36. package/dist/src/platforms/channeltalk/commands/index.js +8 -0
  37. package/dist/src/platforms/channeltalk/commands/index.js.map +1 -0
  38. package/dist/src/platforms/channeltalk/commands/manager.d.ts +26 -0
  39. package/dist/src/platforms/channeltalk/commands/manager.d.ts.map +1 -0
  40. package/dist/src/platforms/channeltalk/commands/manager.js +51 -0
  41. package/dist/src/platforms/channeltalk/commands/manager.js.map +1 -0
  42. package/dist/src/platforms/channeltalk/commands/message.d.ts +61 -0
  43. package/dist/src/platforms/channeltalk/commands/message.d.ts.map +1 -0
  44. package/dist/src/platforms/channeltalk/commands/message.js +193 -0
  45. package/dist/src/platforms/channeltalk/commands/message.js.map +1 -0
  46. package/dist/src/platforms/channeltalk/commands/shared.d.ts +10 -0
  47. package/dist/src/platforms/channeltalk/commands/shared.d.ts.map +1 -0
  48. package/dist/src/platforms/channeltalk/commands/shared.js +19 -0
  49. package/dist/src/platforms/channeltalk/commands/shared.js.map +1 -0
  50. package/dist/src/platforms/channeltalk/commands/snapshot.d.ts +53 -0
  51. package/dist/src/platforms/channeltalk/commands/snapshot.d.ts.map +1 -0
  52. package/dist/src/platforms/channeltalk/commands/snapshot.js +121 -0
  53. package/dist/src/platforms/channeltalk/commands/snapshot.js.map +1 -0
  54. package/dist/src/platforms/channeltalk/credential-manager.d.ts +17 -0
  55. package/dist/src/platforms/channeltalk/credential-manager.d.ts.map +1 -0
  56. package/dist/src/platforms/channeltalk/credential-manager.js +131 -0
  57. package/dist/src/platforms/channeltalk/credential-manager.js.map +1 -0
  58. package/dist/src/platforms/channeltalk/ensure-auth.d.ts +17 -0
  59. package/dist/src/platforms/channeltalk/ensure-auth.d.ts.map +1 -0
  60. package/dist/src/platforms/channeltalk/ensure-auth.js +73 -0
  61. package/dist/src/platforms/channeltalk/ensure-auth.js.map +1 -0
  62. package/dist/src/platforms/channeltalk/index.d.ts +5 -0
  63. package/dist/src/platforms/channeltalk/index.d.ts.map +1 -0
  64. package/dist/src/platforms/channeltalk/index.js +5 -0
  65. package/dist/src/platforms/channeltalk/index.js.map +1 -0
  66. package/dist/src/platforms/channeltalk/token-extractor.d.ts +8 -0
  67. package/dist/src/platforms/channeltalk/token-extractor.d.ts.map +1 -0
  68. package/dist/src/platforms/channeltalk/token-extractor.js +71 -0
  69. package/dist/src/platforms/channeltalk/token-extractor.js.map +1 -0
  70. package/dist/src/platforms/channeltalk/types.d.ts +1328 -0
  71. package/dist/src/platforms/channeltalk/types.d.ts.map +1 -0
  72. package/dist/src/platforms/channeltalk/types.js +160 -0
  73. package/dist/src/platforms/channeltalk/types.js.map +1 -0
  74. package/dist/src/platforms/channeltalkbot/cli.d.ts +5 -0
  75. package/dist/src/platforms/channeltalkbot/cli.d.ts.map +1 -0
  76. package/dist/src/platforms/channeltalkbot/cli.js +22 -0
  77. package/dist/src/platforms/channeltalkbot/cli.js.map +1 -0
  78. package/dist/src/platforms/channeltalkbot/client.d.ts +71 -0
  79. package/dist/src/platforms/channeltalkbot/client.d.ts.map +1 -0
  80. package/dist/src/platforms/channeltalkbot/client.js +200 -0
  81. package/dist/src/platforms/channeltalkbot/client.js.map +1 -0
  82. package/dist/src/platforms/channeltalkbot/commands/auth.d.ts +30 -0
  83. package/dist/src/platforms/channeltalkbot/commands/auth.d.ts.map +1 -0
  84. package/dist/src/platforms/channeltalkbot/commands/auth.js +183 -0
  85. package/dist/src/platforms/channeltalkbot/commands/auth.js.map +1 -0
  86. package/dist/src/platforms/channeltalkbot/commands/bot.d.ts +32 -0
  87. package/dist/src/platforms/channeltalkbot/commands/bot.d.ts.map +1 -0
  88. package/dist/src/platforms/channeltalkbot/commands/bot.js +92 -0
  89. package/dist/src/platforms/channeltalkbot/commands/bot.js.map +1 -0
  90. package/dist/src/platforms/channeltalkbot/commands/chat.d.ts +39 -0
  91. package/dist/src/platforms/channeltalkbot/commands/chat.d.ts.map +1 -0
  92. package/dist/src/platforms/channeltalkbot/commands/chat.js +123 -0
  93. package/dist/src/platforms/channeltalkbot/commands/chat.js.map +1 -0
  94. package/dist/src/platforms/channeltalkbot/commands/group.d.ts +32 -0
  95. package/dist/src/platforms/channeltalkbot/commands/group.d.ts.map +1 -0
  96. package/dist/src/platforms/channeltalkbot/commands/group.js +100 -0
  97. package/dist/src/platforms/channeltalkbot/commands/group.js.map +1 -0
  98. package/dist/src/platforms/channeltalkbot/commands/index.d.ts +8 -0
  99. package/dist/src/platforms/channeltalkbot/commands/index.d.ts.map +1 -0
  100. package/dist/src/platforms/channeltalkbot/commands/index.js +8 -0
  101. package/dist/src/platforms/channeltalkbot/commands/index.js.map +1 -0
  102. package/dist/src/platforms/channeltalkbot/commands/manager.d.ts +26 -0
  103. package/dist/src/platforms/channeltalkbot/commands/manager.d.ts.map +1 -0
  104. package/dist/src/platforms/channeltalkbot/commands/manager.js +67 -0
  105. package/dist/src/platforms/channeltalkbot/commands/manager.js.map +1 -0
  106. package/dist/src/platforms/channeltalkbot/commands/message.d.ts +38 -0
  107. package/dist/src/platforms/channeltalkbot/commands/message.d.ts.map +1 -0
  108. package/dist/src/platforms/channeltalkbot/commands/message.js +145 -0
  109. package/dist/src/platforms/channeltalkbot/commands/message.js.map +1 -0
  110. package/dist/src/platforms/channeltalkbot/commands/shared.d.ts +12 -0
  111. package/dist/src/platforms/channeltalkbot/commands/shared.d.ts.map +1 -0
  112. package/dist/src/platforms/channeltalkbot/commands/shared.js +31 -0
  113. package/dist/src/platforms/channeltalkbot/commands/shared.js.map +1 -0
  114. package/dist/src/platforms/channeltalkbot/commands/snapshot.d.ts +54 -0
  115. package/dist/src/platforms/channeltalkbot/commands/snapshot.d.ts.map +1 -0
  116. package/dist/src/platforms/channeltalkbot/commands/snapshot.js +139 -0
  117. package/dist/src/platforms/channeltalkbot/commands/snapshot.js.map +1 -0
  118. package/dist/src/platforms/channeltalkbot/credential-manager.d.ts +19 -0
  119. package/dist/src/platforms/channeltalkbot/credential-manager.d.ts.map +1 -0
  120. package/dist/src/platforms/channeltalkbot/credential-manager.js +149 -0
  121. package/dist/src/platforms/channeltalkbot/credential-manager.js.map +1 -0
  122. package/dist/src/platforms/channeltalkbot/index.d.ts +4 -0
  123. package/dist/src/platforms/channeltalkbot/index.d.ts.map +1 -0
  124. package/dist/src/platforms/channeltalkbot/index.js +4 -0
  125. package/dist/src/platforms/channeltalkbot/index.js.map +1 -0
  126. package/dist/src/platforms/channeltalkbot/message-utils.d.ts +3 -0
  127. package/dist/src/platforms/channeltalkbot/message-utils.d.ts.map +1 -0
  128. package/dist/src/platforms/channeltalkbot/message-utils.js +4 -0
  129. package/dist/src/platforms/channeltalkbot/message-utils.js.map +1 -0
  130. package/dist/src/platforms/channeltalkbot/types.d.ts +337 -0
  131. package/dist/src/platforms/channeltalkbot/types.d.ts.map +1 -0
  132. package/dist/src/platforms/channeltalkbot/types.js +88 -0
  133. package/dist/src/platforms/channeltalkbot/types.js.map +1 -0
  134. package/dist/src/platforms/discord/types.d.ts +36 -36
  135. package/dist/src/platforms/discordbot/types.d.ts +12 -12
  136. package/dist/src/platforms/slack/client.d.ts +4 -0
  137. package/dist/src/platforms/slack/client.d.ts.map +1 -1
  138. package/dist/src/platforms/slack/client.js +10 -0
  139. package/dist/src/platforms/slack/client.js.map +1 -1
  140. package/dist/src/platforms/slack/commands/channel.d.ts.map +1 -1
  141. package/dist/src/platforms/slack/commands/channel.js +21 -0
  142. package/dist/src/platforms/slack/commands/channel.js.map +1 -1
  143. package/dist/src/platforms/slack/ensure-auth.d.ts.map +1 -1
  144. package/dist/src/platforms/slack/ensure-auth.js +1 -0
  145. package/dist/src/platforms/slack/ensure-auth.js.map +1 -1
  146. package/dist/src/platforms/slack/token-extractor.d.ts.map +1 -1
  147. package/dist/src/platforms/slack/token-extractor.js +9 -1
  148. package/dist/src/platforms/slack/token-extractor.js.map +1 -1
  149. package/dist/src/platforms/slack/types.d.ts +34 -34
  150. package/dist/src/platforms/slackbot/types.d.ts +31 -31
  151. package/dist/src/platforms/teams/types.d.ts +4 -4
  152. package/docs/content/docs/agent-skills.mdx +1 -1
  153. package/docs/content/docs/index.mdx +9 -7
  154. package/docs/content/docs/integrations/channeltalk.mdx +260 -0
  155. package/docs/content/docs/integrations/channeltalkbot.mdx +261 -0
  156. package/docs/content/docs/integrations/meta.json +1 -1
  157. package/docs/content/docs/quick-start.mdx +8 -1
  158. package/e2e/channeltalk.e2e.test.ts +200 -0
  159. package/e2e/channeltalkbot.e2e.test.ts +202 -0
  160. package/e2e/config.ts +84 -0
  161. package/e2e/helpers.ts +2 -0
  162. package/package.json +3 -1
  163. package/scripts/postbuild.ts +2 -0
  164. package/skills/agent-channeltalk/SKILL.md +428 -0
  165. package/skills/agent-channeltalk/references/authentication.md +297 -0
  166. package/skills/agent-channeltalk/references/common-patterns.md +341 -0
  167. package/skills/agent-channeltalk/templates/monitor-chat.sh +96 -0
  168. package/skills/agent-channeltalk/templates/post-message.sh +127 -0
  169. package/skills/agent-channeltalk/templates/workspace-summary.sh +122 -0
  170. package/skills/agent-channeltalkbot/SKILL.md +421 -0
  171. package/skills/agent-channeltalkbot/references/authentication.md +185 -0
  172. package/skills/agent-channeltalkbot/references/common-patterns.md +264 -0
  173. package/skills/agent-channeltalkbot/templates/monitor-chat.sh +94 -0
  174. package/skills/agent-channeltalkbot/templates/post-message.sh +112 -0
  175. package/skills/agent-channeltalkbot/templates/workspace-summary.sh +119 -0
  176. package/skills/agent-discord/SKILL.md +1 -1
  177. package/skills/agent-discordbot/SKILL.md +1 -1
  178. package/skills/agent-slack/SKILL.md +8 -1
  179. package/skills/agent-slackbot/SKILL.md +1 -1
  180. package/skills/agent-teams/SKILL.md +1 -1
  181. package/src/cli.ts +8 -0
  182. package/src/platforms/channeltalk/cli.ts +51 -0
  183. package/src/platforms/channeltalk/client.test.ts +385 -0
  184. package/src/platforms/channeltalk/client.ts +355 -0
  185. package/src/platforms/channeltalk/commands/auth.test.ts +360 -0
  186. package/src/platforms/channeltalk/commands/auth.ts +296 -0
  187. package/src/platforms/channeltalk/commands/bot.test.ts +51 -0
  188. package/src/platforms/channeltalk/commands/bot.ts +74 -0
  189. package/src/platforms/channeltalk/commands/chat.test.ts +94 -0
  190. package/src/platforms/channeltalk/commands/chat.ts +121 -0
  191. package/src/platforms/channeltalk/commands/group.test.ts +157 -0
  192. package/src/platforms/channeltalk/commands/group.ts +174 -0
  193. package/src/platforms/channeltalk/commands/index.ts +7 -0
  194. package/src/platforms/channeltalk/commands/manager.test.ts +63 -0
  195. package/src/platforms/channeltalk/commands/manager.ts +82 -0
  196. package/src/platforms/channeltalk/commands/message.test.ts +546 -0
  197. package/src/platforms/channeltalk/commands/message.ts +309 -0
  198. package/src/platforms/channeltalk/commands/shared.ts +29 -0
  199. package/src/platforms/channeltalk/commands/snapshot.test.ts +193 -0
  200. package/src/platforms/channeltalk/commands/snapshot.ts +188 -0
  201. package/src/platforms/channeltalk/credential-manager.test.ts +207 -0
  202. package/src/platforms/channeltalk/credential-manager.ts +158 -0
  203. package/src/platforms/channeltalk/ensure-auth.test.ts +155 -0
  204. package/src/platforms/channeltalk/ensure-auth.ts +96 -0
  205. package/src/platforms/channeltalk/index.ts +34 -0
  206. package/src/platforms/channeltalk/token-extractor.test.ts +131 -0
  207. package/src/platforms/channeltalk/token-extractor.ts +91 -0
  208. package/src/platforms/channeltalk/types.test.ts +142 -0
  209. package/src/platforms/channeltalk/types.ts +345 -0
  210. package/src/platforms/channeltalkbot/cli.ts +36 -0
  211. package/src/platforms/channeltalkbot/client.test.ts +197 -0
  212. package/src/platforms/channeltalkbot/client.ts +300 -0
  213. package/src/platforms/channeltalkbot/commands/auth.test.ts +253 -0
  214. package/src/platforms/channeltalkbot/commands/auth.ts +229 -0
  215. package/src/platforms/channeltalkbot/commands/bot.test.ts +114 -0
  216. package/src/platforms/channeltalkbot/commands/bot.ts +132 -0
  217. package/src/platforms/channeltalkbot/commands/chat.test.ts +168 -0
  218. package/src/platforms/channeltalkbot/commands/chat.ts +174 -0
  219. package/src/platforms/channeltalkbot/commands/group.test.ts +136 -0
  220. package/src/platforms/channeltalkbot/commands/group.ts +136 -0
  221. package/src/platforms/channeltalkbot/commands/index.ts +7 -0
  222. package/src/platforms/channeltalkbot/commands/manager.test.ts +72 -0
  223. package/src/platforms/channeltalkbot/commands/manager.ts +98 -0
  224. package/src/platforms/channeltalkbot/commands/message.test.ts +194 -0
  225. package/src/platforms/channeltalkbot/commands/message.ts +189 -0
  226. package/src/platforms/channeltalkbot/commands/shared.ts +45 -0
  227. package/src/platforms/channeltalkbot/commands/snapshot.test.ts +113 -0
  228. package/src/platforms/channeltalkbot/commands/snapshot.ts +200 -0
  229. package/src/platforms/channeltalkbot/credential-manager.test.ts +308 -0
  230. package/src/platforms/channeltalkbot/credential-manager.ts +176 -0
  231. package/src/platforms/channeltalkbot/index.ts +27 -0
  232. package/src/platforms/channeltalkbot/message-utils.test.ts +20 -0
  233. package/src/platforms/channeltalkbot/message-utils.ts +5 -0
  234. package/src/platforms/channeltalkbot/types.test.ts +384 -0
  235. package/src/platforms/channeltalkbot/types.ts +185 -0
  236. package/src/platforms/slack/client.ts +12 -0
  237. package/src/platforms/slack/commands/channel.test.ts +47 -1
  238. package/src/platforms/slack/commands/channel.ts +26 -0
  239. package/src/platforms/slack/ensure-auth.test.ts +30 -0
  240. package/src/platforms/slack/ensure-auth.ts +1 -0
  241. package/src/platforms/slack/token-extractor.test.ts +25 -0
  242. package/src/platforms/slack/token-extractor.ts +10 -1
@@ -1,6 +1,6 @@
1
1
  # Agent Messenger - Claude Code Plugin
2
2
 
3
- Messaging platform interaction skills for AI agents and Claude Code. Supports Slack, Discord, and Microsoft Teams.
3
+ Messaging platform interaction skills for AI agents and Claude Code. Supports Slack, Discord, Microsoft Teams, and Channel Talk (beta).
4
4
 
5
5
  ## Installation
6
6
 
@@ -61,6 +61,22 @@ Enables AI agents to interact with messaging platforms through CLI interfaces:
61
61
  - **Multi-bot management** with easy switching
62
62
  - Designed for **server-side and CI/CD** use cases
63
63
 
64
+ ### Channel Talk (`agent-channeltalk`) — Beta
65
+ - **Send messages** to groups, user chats, and direct chats
66
+ - **Read chats** and message history
67
+ - **List groups**, managers, and bots
68
+ - **Workspace snapshots** for quick overview
69
+ - **Multi-workspace support** with easy switching
70
+ - **Zero-config** — auto-extracts cookies from desktop app
71
+
72
+ ### Channel Talk Bot (`agent-channeltalkbot`) — Beta
73
+ - **Send messages** using API credentials (Access Key + Secret)
74
+ - **Read chats** and message history
75
+ - **Close and delete** user chats
76
+ - **Create and manage** bots
77
+ - **Group @name references** for easy targeting
78
+ - Designed for **server-side and CI/CD** use cases
79
+
64
80
  ## Key Features
65
81
 
66
82
  ### Zero-Config Authentication
@@ -76,6 +92,9 @@ agent-discord auth extract
76
92
 
77
93
  # Teams
78
94
  agent-teams auth extract
95
+
96
+ # Channel Talk (auto-extracted from desktop app)
97
+ agent-channeltalk auth extract
79
98
  ```
80
99
 
81
100
  ### AI-Friendly References (Slack)
@@ -92,7 +111,7 @@ All commands output JSON by default for easy AI consumption. Use `--pretty` for
92
111
 
93
112
  ## Requirements
94
113
 
95
- - Desktop app installed and logged in for the platform(s) you want to use (Slack, Discord, and/or Teams)
114
+ - Desktop app installed and logged in for the platform(s) you want to use (Slack, Discord, Teams, and/or Channel Talk)
96
115
  - Node.js 18+ or Bun runtime
97
116
 
98
117
  ## Quick Start
@@ -175,3 +194,5 @@ agent-discord file upload <channel-id> ./report.pdf
175
194
  - [Discord Skill Documentation](https://github.com/devxoul/agent-messenger/blob/main/skills/agent-discord/SKILL.md)
176
195
  - [Discord Bot Skill Documentation](https://github.com/devxoul/agent-messenger/blob/main/skills/agent-discordbot/SKILL.md)
177
196
  - [Teams Skill Documentation](https://github.com/devxoul/agent-messenger/blob/main/skills/agent-teams/SKILL.md)
197
+ - [Channel Talk Skill Documentation](https://github.com/devxoul/agent-messenger/blob/main/skills/agent-channeltalk/SKILL.md)
198
+ - [Channel Talk Bot Skill Documentation](https://github.com/devxoul/agent-messenger/blob/main/skills/agent-channeltalkbot/SKILL.md)
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "agent-messenger",
3
- "version": "1.13.1",
4
- "description": "Messaging platform interaction skills for AI agents. Interact with Slack, Discord, and Microsoft Teams - send messages, read channels, manage reactions, upload files, and more through simple CLI interfaces.",
3
+ "version": "1.15.0",
4
+ "description": "Messaging platform interaction skills for AI agents. Interact with Slack, Discord, Microsoft Teams, and Channel Talk - send messages, read channels, manage reactions, upload files, and more through simple CLI interfaces.",
5
5
  "author": {
6
6
  "name": "devxoul",
7
7
  "url": "https://github.com/devxoul"
@@ -11,6 +11,7 @@
11
11
  "slack",
12
12
  "discord",
13
13
  "teams",
14
+ "channel-talk",
14
15
  "messaging",
15
16
  "workspace",
16
17
  "guild",
@@ -22,10 +23,12 @@
22
23
  "homepage": "https://github.com/devxoul/agent-messenger",
23
24
  "repository": "https://github.com/devxoul/agent-messenger",
24
25
  "skills": [
26
+ "./skills/agent-channeltalk",
25
27
  "./skills/agent-slack",
26
28
  "./skills/agent-slackbot",
27
29
  "./skills/agent-discord",
28
30
  "./skills/agent-discordbot",
29
- "./skills/agent-teams"
31
+ "./skills/agent-teams",
32
+ "./skills/agent-channeltalkbot"
30
33
  ]
31
34
  }
package/.env.template CHANGED
@@ -22,3 +22,13 @@ E2E_DISCORDBOT_SERVER_NAME=Agent Messenger
22
22
  E2E_TEAMS_TEAM_ID=
23
23
  E2E_TEAMS_TEAM_NAME=Agent Messenger
24
24
  E2E_TEAMS_CHANNEL_ID=
25
+
26
+ # ChannelBot (API key + secret — use a dedicated test workspace, NOT a production workspace)
27
+ # Group named "E2E" is auto-discovered from the workspace's group list.
28
+ E2E_CHANNELBOT_WORKSPACE_ID=
29
+ E2E_CHANNELBOT_WORKSPACE_NAME=
30
+
31
+ # Channel (user token from desktop app — use a dedicated test workspace, NOT a production workspace)
32
+ # Group named "E2E" is auto-discovered from the workspace's group list.
33
+ E2E_CHANNEL_WORKSPACE_ID=
34
+ E2E_CHANNEL_WORKSPACE_NAME=
package/CONTRIBUTING.md CHANGED
@@ -136,6 +136,31 @@ src/
136
136
  team.ts
137
137
  message.ts
138
138
  ...
139
+ channeltalk/ # Channel Talk platform (beta)
140
+ cli.ts # Channel Talk CLI entry
141
+ client.ts # Channel Talk API client
142
+ credential-manager.ts # Credential storage
143
+ cookie-extractor.ts # Auto cookie extraction
144
+ ensure-auth.ts # Auto-auth on first command
145
+ types.ts # TypeScript types
146
+ commands/ # Command handlers
147
+ auth.ts
148
+ chat.ts
149
+ group.ts
150
+ message.ts
151
+ ...
152
+ channeltalkbot/ # Channel Talk Bot platform (beta)
153
+ cli.ts # Channel Talk Bot CLI entry
154
+ client.ts # Channel Talk Bot API client
155
+ credential-manager.ts # Credential storage
156
+ types.ts # TypeScript types
157
+ commands/ # Command handlers
158
+ auth.ts
159
+ chat.ts
160
+ group.ts
161
+ message.ts
162
+ bot.ts
163
+ ...
139
164
  shared/
140
165
  utils/ # Shared utilities
141
166
  ```
package/README.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # Agent Messenger
2
2
 
3
- [![npm version](https://img.shields.io/npm/v/agent-messenger)](https://www.npmjs.com/package/agent-messenger) [![SkillPad - agent-slack](https://img.shields.io/badge/SkillPad-agent--slack-1a1a1a)](https://skillpad.dev/install/devxoul/agent-messenger/agent-slack) [![SkillPad - agent-slackbot](https://img.shields.io/badge/SkillPad-agent--slackbot-1a1a1a)](https://skillpad.dev/install/devxoul/agent-messenger/agent-slackbot) [![SkillPad - agent-discord](https://img.shields.io/badge/SkillPad-agent--discord-1a1a1a)](https://skillpad.dev/install/devxoul/agent-messenger/agent-discord) [![SkillPad - agent-discordbot](https://img.shields.io/badge/SkillPad-agent--discordbot-1a1a1a)](https://skillpad.dev/install/devxoul/agent-messenger/agent-discordbot) [![SkillPad - agent-teams](https://img.shields.io/badge/SkillPad-agent--teams-1a1a1a)](https://skillpad.dev/install/devxoul/agent-messenger/agent-teams) [![SkillPad - agent-channelbot](https://img.shields.io/badge/SkillPad-agent--channelbot-1a1a1a)](https://skillpad.dev/install/devxoul/agent-messenger/agent-channelbot)
3
+ [![npm version](https://img.shields.io/npm/v/agent-messenger)](https://www.npmjs.com/package/agent-messenger) [![SkillPad - agent-slack](https://img.shields.io/badge/SkillPad-agent--slack-1a1a1a)](https://skillpad.dev/install/devxoul/agent-messenger/agent-slack) [![SkillPad - agent-slackbot](https://img.shields.io/badge/SkillPad-agent--slackbot-1a1a1a)](https://skillpad.dev/install/devxoul/agent-messenger/agent-slackbot) [![SkillPad - agent-discord](https://img.shields.io/badge/SkillPad-agent--discord-1a1a1a)](https://skillpad.dev/install/devxoul/agent-messenger/agent-discord) [![SkillPad - agent-discordbot](https://img.shields.io/badge/SkillPad-agent--discordbot-1a1a1a)](https://skillpad.dev/install/devxoul/agent-messenger/agent-discordbot) [![SkillPad - agent-teams](https://img.shields.io/badge/SkillPad-agent--teams-1a1a1a)](https://skillpad.dev/install/devxoul/agent-messenger/agent-teams) [![SkillPad - agent-channeltalk](https://img.shields.io/badge/SkillPad-agent--channeltalk-1a1a1a)](https://skillpad.dev/install/devxoul/agent-messenger/agent-channeltalk) [![SkillPad - agent-channeltalkbot](https://img.shields.io/badge/SkillPad-agent--channeltalkbot-1a1a1a)](https://skillpad.dev/install/devxoul/agent-messenger/agent-channeltalkbot)
4
4
 
5
5
  ![Agent Messenger](./docs/public/cover.png)
6
6
 
7
- **Give your AI agent the power to read and send messages across Slack, Discord, Teams and more**
7
+ **Give your AI agent the power to read and send messages across Slack, Discord, Teams, Channel Talk (beta) and more**
8
8
 
9
9
  A unified, agent-friendly CLI for messaging platforms. Zero-config credential extraction from your desktop apps—no OAuth flows, no API keys, no admin approval needed. Works out of the box.
10
10
 
@@ -37,7 +37,7 @@ Messaging platforms only offer Bot tokens for API access—your AI agent can nev
37
37
  - **Act as yourself, not a bot** — Extracted user tokens let your agent operate on your behalf
38
38
  - **No API keys needed** — Automatically extracts credentials from your installed desktop apps
39
39
  - **Zero setup** — Credentials are auto-extracted on first command. No manual auth step required
40
- - **One interface, multiple platforms** — Learn once, use everywhere (Slack, Discord, Teams)
40
+ - **One interface, multiple platforms** — Learn once, use everywhere (Slack, Discord, Teams, Channel Talk)
41
41
  - **AI-agent friendly** — JSON output by default, perfect for LLM tool use
42
42
  - **Agent memory** — Remembers workspace IDs, channel names, and preferences across sessions
43
43
  - **Human friendly too** — Add `--pretty` for readable output
@@ -58,24 +58,26 @@ This installs:
58
58
  - `agent-discord` — Discord CLI
59
59
  - `agent-discordbot` — Discord Bot CLI (bot token, for server-side/CI/CD)
60
60
  - `agent-teams` — Microsoft Teams CLI
61
- - `agent-channelbot` — Channel Talk Bot CLI (API credentials, for server-side/CI/CD)
61
+ - `agent-channeltalk` — Channel Talk CLI (beta, zero-config, extracted cookies)
62
+ - `agent-channeltalkbot` — Channel Talk Bot CLI (beta, API credentials, for server-side/CI/CD)
62
63
 
63
64
  ## Agent Skills
64
65
 
65
- Agent Messenger includes [Agent Skills](https://agentskills.io/) that teach your AI agent how to use these CLIs effectively. Six skills are available:
66
+ Agent Messenger includes [Agent Skills](https://agentskills.io/) that teach your AI agent how to use these CLIs effectively. Seven skills are available:
66
67
 
67
68
  - **`agent-slack`** — Slack (user token, zero-config)
68
69
  - **`agent-slackbot`** — Slack Bot (bot token, for server-side/CI/CD)
69
70
  - **`agent-discord`** — Discord
70
71
  - **`agent-discordbot`** — Discord Bot (bot token, for server-side/CI/CD)
71
72
  - **`agent-teams`** — Microsoft Teams
72
- - **`agent-channelbot`** — Channel Talk Bot (API credentials, for server-side/CI/CD)
73
+ - **`agent-channeltalk`** — Channel Talk (beta, zero-config, extracted cookies)
74
+ - **`agent-channeltalkbot`** — Channel Talk Bot (beta, API credentials, for server-side/CI/CD)
73
75
 
74
76
  ### SkillPad
75
77
 
76
78
  SkillPad is a GUI app for Agent Skills. See [skillpad.dev](https://skillpad.dev/) for more details.
77
79
 
78
- [![Available on SkillPad](https://badge.skillpad.dev/agent-slack/dark.svg)](https://skillpad.dev/install/devxoul/agent-messenger/agent-slack) [![Available on SkillPad](https://badge.skillpad.dev/agent-slackbot/dark.svg)](https://skillpad.dev/install/devxoul/agent-messenger/agent-slackbot) [![Available on SkillPad](https://badge.skillpad.dev/agent-discord/dark.svg)](https://skillpad.dev/install/devxoul/agent-messenger/agent-discord) [![Available on SkillPad](https://badge.skillpad.dev/agent-discordbot/dark.svg)](https://skillpad.dev/install/devxoul/agent-messenger/agent-discordbot) [![Available on SkillPad](https://badge.skillpad.dev/agent-teams/dark.svg)](https://skillpad.dev/install/devxoul/agent-messenger/agent-teams) [![Available on SkillPad](https://badge.skillpad.dev/agent-channelbot/dark.svg)](https://skillpad.dev/install/devxoul/agent-messenger/agent-channelbot)
80
+ [![Available on SkillPad](https://badge.skillpad.dev/agent-slack/dark.svg)](https://skillpad.dev/install/devxoul/agent-messenger/agent-slack) [![Available on SkillPad](https://badge.skillpad.dev/agent-slackbot/dark.svg)](https://skillpad.dev/install/devxoul/agent-messenger/agent-slackbot) [![Available on SkillPad](https://badge.skillpad.dev/agent-discord/dark.svg)](https://skillpad.dev/install/devxoul/agent-messenger/agent-discord) [![Available on SkillPad](https://badge.skillpad.dev/agent-discordbot/dark.svg)](https://skillpad.dev/install/devxoul/agent-messenger/agent-discordbot) [![Available on SkillPad](https://badge.skillpad.dev/agent-teams/dark.svg)](https://skillpad.dev/install/devxoul/agent-messenger/agent-teams) [![Available on SkillPad](https://badge.skillpad.dev/agent-channeltalk/dark.svg)](https://skillpad.dev/install/devxoul/agent-messenger/agent-channeltalk) [![Available on SkillPad](https://badge.skillpad.dev/agent-channeltalkbot/dark.svg)](https://skillpad.dev/install/devxoul/agent-messenger/agent-channeltalkbot)
79
81
 
80
82
  ### Skills CLI
81
83
 
@@ -125,11 +127,11 @@ That's it. Credentials are extracted automatically from your Slack desktop app o
125
127
 
126
128
  ## Supported Platforms
127
129
 
128
- | Feature | Slack | Discord | Teams | Channel Talk |
130
+ | Feature | Slack | Discord | Teams | Channel Talk (beta) |
129
131
  | -------------------------- | :---: | :-----: | :---: | :----------: |
130
- | Auto credential extraction | ✅ | ✅ | ✅ | |
132
+ | Auto credential extraction | ✅ | ✅ | ✅ | |
131
133
  | Send & list messages | ✅ | ✅ | ✅ | ✅ |
132
- | Search messages | ✅ | ✅ | — | |
134
+ | Search messages | ✅ | ✅ | — | |
133
135
  | Threads | ✅ | ✅ | — | — |
134
136
  | Channels & Users | ✅ | ✅ | ✅ | ✅ |
135
137
  | Reactions | ✅ | ✅ | ✅ | — |
@@ -153,7 +155,8 @@ That's it. Credentials are extracted automatically from your Slack desktop app o
153
155
  - **[Discord Guide](https://agent-messenger.dev/docs/integrations/discord)** — Full command reference for Discord
154
156
  - **[Discord Bot Guide](https://agent-messenger.dev/docs/integrations/discordbot)** — Bot token integration for server-side and CI/CD
155
157
  - **[Teams Guide](https://agent-messenger.dev/docs/integrations/teams)** — Full command reference for Microsoft Teams
156
- - **[Channel Talk Bot Guide](https://agent-messenger.dev/docs/integrations/channelbot)** — Bot API integration for Channel Talk customer support
158
+ - **[Channel Talk Guide](https://agent-messenger.dev/docs/integrations/channeltalk)** — Full command reference for Channel Talk (beta, zero-config)
159
+ - **[Channel Talk Bot Guide](https://agent-messenger.dev/docs/integrations/channeltalkbot)** — Bot API integration for Channel Talk (beta)
157
160
 
158
161
  ## Use Cases
159
162
 
@@ -201,7 +204,7 @@ Wire messaging into your CI, scripts, or agent workflows.
201
204
 
202
205
  ### ...and More
203
206
 
204
- These are just starting points. Your agent has full read/write access to Slack, Discord, and Teams — anything you'd do manually in a chat app, it can handle for you. If you build something cool with Agent Messenger, [let me know](https://x.com/devxoul)!
207
+ These are just starting points. Your agent has full read/write access to Slack, Discord, Teams, and Channel Talk — anything you'd do manually in a chat app, it can handle for you. If you build something cool with Agent Messenger, [let me know](https://x.com/devxoul)!
205
208
 
206
209
  ## Philosophy
207
210
 
package/dist/package.json CHANGED
@@ -1,17 +1,19 @@
1
1
  {
2
2
  "name": "agent-messenger",
3
- "version": "1.13.1",
3
+ "version": "1.15.0",
4
4
  "description": "Multi-platform messaging CLI for AI agents (Slack, Discord, Teams)",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/devxoul/agent-messenger"
8
8
  },
9
9
  "bin": {
10
+ "agent-channeltalk": "./src/platforms/channeltalk/cli.ts",
10
11
  "agent-discord": "./src/platforms/discord/cli.ts",
11
12
  "agent-discordbot": "./src/platforms/discordbot/cli.ts",
12
13
  "agent-messenger": "./src/cli.ts",
13
14
  "agent-slack": "./src/platforms/slack/cli.ts",
14
15
  "agent-slackbot": "./src/platforms/slackbot/cli.ts",
16
+ "agent-channeltalkbot": "./src/platforms/channeltalkbot/cli.ts",
15
17
  "agent-teams": "./src/platforms/teams/cli.ts",
16
18
  "amsg": "./src/cli.ts"
17
19
  },
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAQnC,QAAA,MAAM,OAAO,SAAgB,CAAA;AA2B7B,eAAe,OAAO,CAAA"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAQnC,QAAA,MAAM,OAAO,SAAgB,CAAA;AAmC7B,eAAe,OAAO,CAAA"}
package/dist/src/cli.js CHANGED
@@ -24,6 +24,12 @@ program.command('slackbot', 'Interact with Slack using bot tokens', {
24
24
  program.command('discordbot', 'Interact with Discord using bot tokens', {
25
25
  executableFile: join(__dirname, 'platforms', 'discordbot', `cli${ext}`),
26
26
  });
27
+ program.command('channeltalkbot', 'Interact with Channel Talk using API credentials', {
28
+ executableFile: join(__dirname, 'platforms', 'channeltalkbot', `cli${ext}`),
29
+ });
30
+ program.command('channeltalk', 'Interact with Channel Talk', {
31
+ executableFile: join(__dirname, 'platforms', 'channeltalk', `cli${ext}`),
32
+ });
27
33
  program.parse(process.argv);
28
34
  export default program;
29
35
  //# sourceMappingURL=cli.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAEvD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACjD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;AACrC,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAA;AAEtD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,4CAA4C,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AAE9G,0CAA0C;AAC1C,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,gCAAgC,EAAE;IACzD,cAAc,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CACnE,CAAC,CAAA;AAEF,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,8BAA8B,EAAE;IACzD,cAAc,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC;CACrE,CAAC,CAAA;AAEF,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,+BAA+B,EAAE;IACxD,cAAc,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CACnE,CAAC,CAAA;AAEF,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,sCAAsC,EAAE;IAClE,cAAc,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,EAAE,CAAC;CACtE,CAAC,CAAA;AAEF,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,wCAAwC,EAAE;IACtE,cAAc,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC;CACxE,CAAC,CAAA;AAEF,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AAE3B,eAAe,OAAO,CAAA"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAEvD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACjD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;AACrC,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAA;AAEtD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,4CAA4C,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AAE9G,0CAA0C;AAC1C,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,gCAAgC,EAAE;IACzD,cAAc,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CACnE,CAAC,CAAA;AAEF,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,8BAA8B,EAAE;IACzD,cAAc,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC;CACrE,CAAC,CAAA;AAEF,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,+BAA+B,EAAE;IACxD,cAAc,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CACnE,CAAC,CAAA;AAEF,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,sCAAsC,EAAE;IAClE,cAAc,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,EAAE,CAAC;CACtE,CAAC,CAAA;AAEF,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,wCAAwC,EAAE;IACtE,cAAc,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC;CACxE,CAAC,CAAA;AAEF,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,kDAAkD,EAAE;IACpF,cAAc,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,GAAG,EAAE,CAAC;CAC5E,CAAC,CAAA;AAEF,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,4BAA4B,EAAE;IAC3D,cAAc,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,GAAG,EAAE,CAAC;CACzE,CAAC,CAAA;AAEF,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AAE3B,eAAe,OAAO,CAAA"}
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env bun
2
+ import type { Command as CommandType } from 'commander';
3
+ declare const program: CommandType;
4
+ export default program;
5
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../../src/platforms/channeltalk/cli.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAA;AAwBvD,QAAA,MAAM,OAAO,aAAgB,CAAA;AAwB7B,eAAe,OAAO,CAAA"}
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import pkg from '../../../package.json' with { type: 'json' };
4
+ import { createAuthCommand, createBotCommand, createChatCommand, createGroupCommand, createManagerCommand, createMessageCommand, createSnapshotCommand, } from './commands/index.js';
5
+ import { ensureChannelAuth } from './ensure-auth.js';
6
+ function isAuthCommand(command) {
7
+ let cmd = command;
8
+ while (cmd) {
9
+ if (cmd.name() === 'auth')
10
+ return true;
11
+ cmd = cmd.parent;
12
+ }
13
+ return false;
14
+ }
15
+ const program = new Command();
16
+ program
17
+ .name('agent-channeltalk')
18
+ .description('CLI tool for Channel Talk using extracted desktop app credentials')
19
+ .version(pkg.version)
20
+ .option('--pretty', 'Pretty-print JSON output')
21
+ .option('--workspace <id>', 'Workspace ID to use');
22
+ program.hook('preAction', async (_thisCommand, actionCommand) => {
23
+ if (isAuthCommand(actionCommand))
24
+ return;
25
+ await ensureChannelAuth();
26
+ });
27
+ program.addCommand(createAuthCommand());
28
+ program.addCommand(createMessageCommand());
29
+ program.addCommand(createChatCommand());
30
+ program.addCommand(createGroupCommand());
31
+ program.addCommand(createManagerCommand());
32
+ program.addCommand(createBotCommand());
33
+ program.addCommand(createSnapshotCommand());
34
+ program.parseAsync(process.argv);
35
+ export default program;
36
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../../src/platforms/channeltalk/cli.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,GAAG,MAAM,uBAAuB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAC7D,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAEjD,SAAS,aAAa,CAAC,OAAoB;IACzC,IAAI,GAAG,GAAuB,OAAO,CAAA;IACrC,OAAO,GAAG,EAAE,CAAC;QACX,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,MAAM;YAAE,OAAO,IAAI,CAAA;QACtC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAA;IAClB,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,mBAAmB,CAAC;KACzB,WAAW,CAAC,mEAAmE,CAAC;KAChF,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;KACpB,MAAM,CAAC,UAAU,EAAE,0BAA0B,CAAC;KAC9C,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,CAAA;AAEpD,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,EAAE;IAC9D,IAAI,aAAa,CAAC,aAAa,CAAC;QAAE,OAAM;IACxC,MAAM,iBAAiB,EAAE,CAAA;AAC3B,CAAC,CAAC,CAAA;AAEF,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAA;AACvC,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAA;AAC1C,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAA;AACvC,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAA;AACxC,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAA;AAC1C,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAA;AACtC,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAA;AAE3C,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AAEhC,eAAe,OAAO,CAAA"}
@@ -0,0 +1,66 @@
1
+ import type { Channel, ChannelAccount, ChannelBot, ChannelDirectChat, ChannelGroup, ChannelManager, ChannelMessage, ChannelSearchResponse, ChannelUserChat, MessageBlock } from './types.js';
2
+ export declare class ChannelClient {
3
+ private accountCookie;
4
+ private sessionCookie;
5
+ private rateLimitRemaining;
6
+ private rateLimitResetAt;
7
+ constructor(accountCookie: string, sessionCookie?: string);
8
+ static wrapTextInBlocks(text: string): MessageBlock[];
9
+ static extractText(message: ChannelMessage): string;
10
+ getAccount(): Promise<ChannelAccount>;
11
+ listChannels(params?: {
12
+ limit?: number;
13
+ }): Promise<Channel[]>;
14
+ getChannel(channelId: string): Promise<Channel>;
15
+ listManagers(channelId: string, params?: {
16
+ limit?: number;
17
+ }): Promise<ChannelManager[]>;
18
+ getManagerRole(channelId: string): Promise<{
19
+ permissions: unknown[];
20
+ }>;
21
+ listGroups(channelId: string, params?: {
22
+ limit?: number;
23
+ }): Promise<ChannelGroup[]>;
24
+ getGroup(channelId: string, groupId: string): Promise<ChannelGroup>;
25
+ getGroupMessages(channelId: string, groupId: string, params?: {
26
+ sortOrder?: string;
27
+ limit?: number;
28
+ since?: string;
29
+ }): Promise<ChannelMessage[]>;
30
+ sendGroupMessage(channelId: string, groupId: string, blocks: MessageBlock[], requestId?: string): Promise<ChannelMessage>;
31
+ listDirectChats(channelId: string, params?: {
32
+ limit?: number;
33
+ }): Promise<ChannelDirectChat[]>;
34
+ getDirectChatMessages(channelId: string, chatId: string, params?: {
35
+ sortOrder?: string;
36
+ limit?: number;
37
+ }): Promise<ChannelMessage[]>;
38
+ sendDirectChatMessage(channelId: string, chatId: string, blocks: MessageBlock[], requestId?: string): Promise<ChannelMessage>;
39
+ listUserChats(channelId: string, params?: {
40
+ state?: string;
41
+ limit?: number;
42
+ }): Promise<ChannelUserChat[]>;
43
+ getUserChat(channelId: string, chatId: string): Promise<ChannelUserChat>;
44
+ getUserChatMessages(channelId: string, chatId: string, params?: {
45
+ sortOrder?: string;
46
+ limit?: number;
47
+ }): Promise<ChannelMessage[]>;
48
+ sendUserChatMessage(channelId: string, chatId: string, blocks: MessageBlock[], requestId?: string): Promise<ChannelMessage>;
49
+ listBots(channelId: string, params?: {
50
+ limit?: number;
51
+ }): Promise<ChannelBot[]>;
52
+ searchTeamChatMessages(channelId: string, query: string, params?: {
53
+ limit?: number;
54
+ }): Promise<ChannelSearchResponse>;
55
+ searchUserChatMessages(channelId: string, query: string, params?: {
56
+ limit?: number;
57
+ }): Promise<ChannelSearchResponse>;
58
+ private getHeaders;
59
+ private waitForRateLimit;
60
+ private updateRateLimit;
61
+ private request;
62
+ private createHttpError;
63
+ private buildPath;
64
+ private sleep;
65
+ }
66
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/platforms/channeltalk/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,200 @@
1
+ import { ChannelError } from './types.js';
2
+ const BASE_URL = 'https://desk-api.channel.io';
3
+ const MAX_RETRIES = 3;
4
+ const BASE_BACKOFF_MS = 100;
5
+ export class ChannelClient {
6
+ accountCookie;
7
+ sessionCookie;
8
+ rateLimitRemaining = null;
9
+ rateLimitResetAt = 0;
10
+ constructor(accountCookie, sessionCookie) {
11
+ if (!accountCookie) {
12
+ throw new ChannelError('Account cookie is required', 'missing_account_cookie');
13
+ }
14
+ this.accountCookie = accountCookie;
15
+ this.sessionCookie = sessionCookie;
16
+ }
17
+ static wrapTextInBlocks(text) {
18
+ return [{ type: 'text', value: text }];
19
+ }
20
+ static extractText(message) {
21
+ const parts = [];
22
+ for (const block of message.blocks ?? []) {
23
+ if (block.value) {
24
+ parts.push(block.value);
25
+ }
26
+ }
27
+ if (message.plainText) {
28
+ parts.push(message.plainText);
29
+ }
30
+ return parts.join('\n');
31
+ }
32
+ async getAccount() {
33
+ return this.request('GET', '/desk/account', undefined, 'account');
34
+ }
35
+ async listChannels(params) {
36
+ return this.request('GET', this.buildPath('/desk/channels', params), undefined, 'channels');
37
+ }
38
+ async getChannel(channelId) {
39
+ return this.request('GET', `/desk/channels/${channelId}`, undefined, 'channel');
40
+ }
41
+ async listManagers(channelId, params) {
42
+ return this.request('GET', this.buildPath(`/desk/channels/${channelId}/managers`, params), undefined, 'managers');
43
+ }
44
+ async getManagerRole(channelId) {
45
+ return this.request('GET', `/desk/channels/${channelId}/managers/me/role`, undefined, 'role');
46
+ }
47
+ async listGroups(channelId, params) {
48
+ return this.request('GET', this.buildPath(`/desk/channels/${channelId}/groups`, params), undefined, 'groups');
49
+ }
50
+ async getGroup(channelId, groupId) {
51
+ return this.request('GET', `/desk/channels/${channelId}/groups/${groupId}`, undefined, 'group');
52
+ }
53
+ async getGroupMessages(channelId, groupId, params) {
54
+ return this.request('GET', this.buildPath(`/desk/channels/${channelId}/groups/${groupId}/messages`, params), undefined, 'messages');
55
+ }
56
+ async sendGroupMessage(channelId, groupId, blocks, requestId) {
57
+ return this.request('POST', `/desk/channels/${channelId}/groups/${groupId}/messages`, { blocks, requestId: requestId ?? crypto.randomUUID() }, 'message');
58
+ }
59
+ async listDirectChats(channelId, params) {
60
+ return this.request('GET', this.buildPath(`/desk/channels/${channelId}/direct-chats`, params), undefined, 'directChats');
61
+ }
62
+ async getDirectChatMessages(channelId, chatId, params) {
63
+ return this.request('GET', this.buildPath(`/desk/channels/${channelId}/direct-chats/${chatId}/messages`, params), undefined, 'messages');
64
+ }
65
+ async sendDirectChatMessage(channelId, chatId, blocks, requestId) {
66
+ return this.request('POST', `/desk/channels/${channelId}/direct-chats/${chatId}/messages`, { blocks, requestId: requestId ?? crypto.randomUUID() }, 'message');
67
+ }
68
+ async listUserChats(channelId, params) {
69
+ return this.request('GET', this.buildPath(`/desk/channels/${channelId}/user-chats/assigned/me`, params), undefined, 'userChats');
70
+ }
71
+ async getUserChat(channelId, chatId) {
72
+ return this.request('GET', `/desk/channels/${channelId}/user-chats/${chatId}`, undefined, 'userChat');
73
+ }
74
+ async getUserChatMessages(channelId, chatId, params) {
75
+ return this.request('GET', this.buildPath(`/desk/channels/${channelId}/user-chats/${chatId}/messages`, params), undefined, 'messages');
76
+ }
77
+ async sendUserChatMessage(channelId, chatId, blocks, requestId) {
78
+ return this.request('POST', `/desk/channels/${channelId}/user-chats/${chatId}/messages`, { blocks, requestId: requestId ?? crypto.randomUUID() }, 'message');
79
+ }
80
+ async listBots(channelId, params) {
81
+ return this.request('GET', this.buildPath(`/desk/channels/${channelId}/bots`, params), undefined, 'bots');
82
+ }
83
+ async searchTeamChatMessages(channelId, query, params) {
84
+ return this.request('GET', this.buildPath(`/desk/channels/${channelId}/team-chat/message/search`, { query, ...params }));
85
+ }
86
+ async searchUserChatMessages(channelId, query, params) {
87
+ return this.request('GET', this.buildPath(`/desk/channels/${channelId}/user-chat/message/search`, { query, ...params }));
88
+ }
89
+ getHeaders() {
90
+ return {
91
+ Cookie: this.sessionCookie
92
+ ? `x-account=${this.accountCookie}; ch-session-1=${this.sessionCookie}`
93
+ : `x-account=${this.accountCookie}`,
94
+ 'Content-Type': 'application/json',
95
+ };
96
+ }
97
+ async waitForRateLimit() {
98
+ const now = Date.now();
99
+ if (this.rateLimitRemaining === 0 && this.rateLimitResetAt > now) {
100
+ await this.sleep(this.rateLimitResetAt - now);
101
+ }
102
+ }
103
+ updateRateLimit(response) {
104
+ const remainingHeader = response.headers.get('x-ratelimit-remaining');
105
+ const resetHeader = response.headers.get('x-ratelimit-reset');
106
+ if (remainingHeader !== null) {
107
+ const remaining = Number.parseInt(remainingHeader, 10);
108
+ if (!Number.isNaN(remaining)) {
109
+ this.rateLimitRemaining = remaining;
110
+ }
111
+ }
112
+ if (resetHeader !== null) {
113
+ const reset = Number.parseFloat(resetHeader);
114
+ if (!Number.isNaN(reset)) {
115
+ this.rateLimitResetAt = reset > 1_000_000_000_000 ? reset : reset * 1000;
116
+ }
117
+ }
118
+ }
119
+ async request(method, path, body, unwrapKey) {
120
+ const url = `${BASE_URL}${path}`;
121
+ let lastError;
122
+ for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
123
+ await this.waitForRateLimit();
124
+ const options = {
125
+ method,
126
+ headers: this.getHeaders(),
127
+ };
128
+ if (body !== undefined) {
129
+ options.body = JSON.stringify(body);
130
+ }
131
+ let response;
132
+ try {
133
+ response = await fetch(url, options);
134
+ }
135
+ catch (error) {
136
+ lastError = error instanceof Error ? error : new Error(String(error));
137
+ if (attempt < MAX_RETRIES && method === 'GET') {
138
+ await this.sleep(BASE_BACKOFF_MS * 2 ** attempt);
139
+ continue;
140
+ }
141
+ throw new ChannelError(`Network error: ${lastError.message}`, 'network_error');
142
+ }
143
+ this.updateRateLimit(response);
144
+ if (response.status === 429) {
145
+ if (attempt < MAX_RETRIES) {
146
+ const retryAfter = Number.parseFloat(response.headers.get('Retry-After') || '1');
147
+ const retryAfterMs = (Number.isNaN(retryAfter) ? 1 : retryAfter) * 1000;
148
+ await this.sleep(retryAfterMs);
149
+ continue;
150
+ }
151
+ throw new ChannelError('Rate limited', 'rate_limited');
152
+ }
153
+ if (response.status >= 500 && response.status <= 599) {
154
+ if (attempt < MAX_RETRIES && method === 'GET') {
155
+ await this.sleep(BASE_BACKOFF_MS * 2 ** attempt);
156
+ continue;
157
+ }
158
+ throw await this.createHttpError(response);
159
+ }
160
+ if (!response.ok) {
161
+ throw await this.createHttpError(response);
162
+ }
163
+ if (response.status === 204) {
164
+ return undefined;
165
+ }
166
+ const data = await response.json();
167
+ if (unwrapKey && data != null && typeof data === 'object' && unwrapKey in data) {
168
+ return data[unwrapKey];
169
+ }
170
+ return data;
171
+ }
172
+ throw lastError || new ChannelError('Request failed after retries', 'max_retries');
173
+ }
174
+ async createHttpError(response) {
175
+ const errorBody = await response.json().catch(() => ({}));
176
+ const message = errorBody.errors?.[0]?.message || `HTTP ${response.status}`;
177
+ const code = errorBody.type || `http_${response.status}`;
178
+ return new ChannelError(message, code);
179
+ }
180
+ buildPath(path, params) {
181
+ if (!params) {
182
+ return path;
183
+ }
184
+ const searchParams = new URLSearchParams();
185
+ for (const [key, value] of Object.entries(params)) {
186
+ if (value !== undefined) {
187
+ searchParams.set(key, String(value));
188
+ }
189
+ }
190
+ const query = searchParams.toString();
191
+ if (!query) {
192
+ return path;
193
+ }
194
+ return `${path}?${query}`;
195
+ }
196
+ sleep(ms) {
197
+ return new Promise((resolve) => setTimeout(resolve, ms));
198
+ }
199
+ }
200
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/platforms/channeltalk/client.ts"],"names":[],"mappings":"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"}