agent-messenger 1.3.5 → 1.3.6

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-messenger",
3
- "version": "1.3.5",
3
+ "version": "1.3.6",
4
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.",
5
5
  "author": {
6
6
  "name": "devxoul",
package/.env.template CHANGED
@@ -1,3 +1,19 @@
1
+ # Slack (user token from desktop app)
2
+ E2E_SLACK_TOKEN=
3
+ E2E_SLACK_COOKIE=
4
+ E2E_SLACK_WORKSPACE_ID=T0AC55BSF6E
5
+ E2E_SLACK_WORKSPACE_NAME=Agent Messenger
6
+
7
+ # SlackBot (bot token)
8
+ E2E_SLACKBOT_TOKEN=
1
9
  E2E_SLACKBOT_WORKSPACE_ID=T0AC55BSF6E
2
10
  E2E_SLACKBOT_WORKSPACE_NAME=Agent Messenger
3
- E2E_SLACKBOT_TOKEN=
11
+
12
+ # Discord (user token from desktop app)
13
+ E2E_DISCORD_TOKEN=
14
+ E2E_DISCORD_SERVER_ID=1467039439770357844
15
+
16
+ # Teams
17
+ E2E_TEAMS_TEAM_ID=
18
+ E2E_TEAMS_TEAM_NAME=Agent Messenger
19
+ E2E_TEAMS_CHANNEL_ID=
@@ -0,0 +1,3 @@
1
+ [test]
2
+ root = "./e2e"
3
+ preload = ["./e2e/setup.ts"]
package/bunfig.toml ADDED
@@ -0,0 +1,2 @@
1
+ [test]
2
+ root = "./src"
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-messenger",
3
- "version": "1.3.5",
3
+ "version": "1.3.6",
4
4
  "description": "Multi-platform messaging CLI for AI agents (Slack, Discord, Teams)",
5
5
  "repository": {
6
6
  "type": "git",
@@ -21,7 +21,7 @@
21
21
  "build": "tsc && tsc-alias --resolve-full-paths",
22
22
  "postbuild": "bun scripts/postbuild.ts",
23
23
  "test": "bun test src/",
24
- "test:e2e": "bun test e2e/",
24
+ "test:e2e": "bun --config=bunfig.e2e.toml test",
25
25
  "typecheck": "tsc --noEmit",
26
26
  "lint": "biome check .",
27
27
  "lint:fix": "biome check --write --unsafe .",
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMnC,QAAA,MAAM,OAAO,SAAgB,CAAA;AAmB7B,eAAe,OAAO,CAAA"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAOnC,QAAA,MAAM,OAAO,SAAgB,CAAA;AAmB7B,eAAe,OAAO,CAAA"}
package/dist/src/cli.js CHANGED
@@ -5,17 +5,18 @@ import { Command } from 'commander';
5
5
  import pkg from '../package.json' with { type: 'json' };
6
6
  const __filename = fileURLToPath(import.meta.url);
7
7
  const __dirname = dirname(__filename);
8
+ const ext = __filename.endsWith('.ts') ? '.ts' : '.js';
8
9
  const program = new Command();
9
10
  program.name('agent-messenger').description('Multi-platform messaging CLI for AI agents').version(pkg.version);
10
11
  // Use absolute paths for CWD-independence
11
12
  program.command('slack', 'Interact with Slack workspaces', {
12
- executableFile: join(__dirname, 'platforms', 'slack', 'cli.ts'),
13
+ executableFile: join(__dirname, 'platforms', 'slack', `cli${ext}`),
13
14
  });
14
15
  program.command('discord', 'Interact with Discord guilds', {
15
- executableFile: join(__dirname, 'platforms', 'discord', 'cli.ts'),
16
+ executableFile: join(__dirname, 'platforms', 'discord', `cli${ext}`),
16
17
  });
17
18
  program.command('teams', 'Interact with Microsoft Teams', {
18
- executableFile: join(__dirname, 'platforms', 'teams', 'cli.ts'),
19
+ executableFile: join(__dirname, 'platforms', 'teams', `cli${ext}`),
19
20
  });
20
21
  program.parse(process.argv);
21
22
  export default program;
@@ -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;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,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;AAErC,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,QAAQ,CAAC;CAChE,CAAC,CAAA;AAEF,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,8BAA8B,EAAE;IACzD,cAAc,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC;CAClE,CAAC,CAAA;AAEF,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,+BAA+B,EAAE;IACxD,cAAc,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC;CAChE,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;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,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,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AAE3B,eAAe,OAAO,CAAA"}
@@ -455,8 +455,8 @@ export class SlackClient {
455
455
  }
456
456
  async getActivityFeed(options) {
457
457
  return this.withRetry(async () => {
458
- const response = await this.client.activity.feed({
459
- types: options?.types,
458
+ const response = await this.client.apiCall('activity.feed', {
459
+ types: options?.types || 'thread_reply,message_reaction,at_user,at_channel,keyword',
460
460
  mode: options?.mode || 'chrono_reads_and_unreads',
461
461
  limit: options?.limit || 20,
462
462
  });
@@ -477,7 +477,7 @@ export class SlackClient {
477
477
  return this.withRetry(async () => {
478
478
  const response = await this.client.apiCall('saved.list', {
479
479
  cursor,
480
- limit: 100,
480
+ limit: 50,
481
481
  });
482
482
  this.checkResponse(response);
483
483
  const items = (response.items || []).map((item) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/platforms/slack/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/platforms/slack/client.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env bun
1
+ #!/usr/bin/env node
2
2
  import { Command } from 'commander';
3
3
  import pkg from '../../../package.json' with { type: 'json' };
4
4
  import { authCommand, channelCommand, messageCommand, reactionCommand, userCommand } from './commands/index.js';
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env bun
1
+ #!/usr/bin/env node
2
2
  import { Command } from 'commander';
3
3
  import pkg from '../../../package.json' with { type: 'json' };
4
4
  import { authCommand, channelCommand, fileCommand, messageCommand, reactionCommand, snapshotCommand, teamCommand, userCommand, } from './commands/index.js';
package/e2e/README.md CHANGED
@@ -24,8 +24,10 @@ Before running E2E tests, you need:
24
24
  |------|-------------|
25
25
  | `config.ts` | Hardcoded test workspace/server IDs and validation |
26
26
  | `helpers.ts` | CLI runner, JSON parser, message cleanup utilities |
27
- | `slack.e2e.test.ts` | Slack command tests (23 tests) |
28
- | `discord.e2e.test.ts` | Discord command tests (20 tests) |
27
+ | `slack.e2e.test.ts` | Slack command tests |
28
+ | `slackbot.e2e.test.ts` | SlackBot command tests |
29
+ | `discord.e2e.test.ts` | Discord command tests |
30
+ | `teams.e2e.test.ts` | Teams command tests |
29
31
 
30
32
  ## Running E2E Tests Locally
31
33
 
@@ -39,6 +41,9 @@ agent-slack auth extract
39
41
 
40
42
  # Extract Discord credentials
41
43
  agent-discord auth extract
44
+
45
+ # Extract Teams credentials
46
+ agent-teams auth extract
42
47
  ```
43
48
 
44
49
  ### Step 2: Switch to Test Workspace
@@ -71,9 +76,15 @@ bun test e2e/
71
76
  # Run only Slack tests
72
77
  bun test e2e/slack.e2e.test.ts
73
78
 
79
+ # Run only SlackBot tests
80
+ bun test e2e/slackbot.e2e.test.ts
81
+
74
82
  # Run only Discord tests
75
83
  bun test e2e/discord.e2e.test.ts
76
84
 
85
+ # Run only Teams tests
86
+ E2E_TEAMS_TEAM_ID=<id> E2E_TEAMS_CHANNEL_ID=<id> bun test e2e/teams.e2e.test.ts
87
+
77
88
  # Run specific test by name
78
89
  bun test e2e/slack.e2e.test.ts --test-name-pattern "message send"
79
90
  ```
@@ -100,6 +111,15 @@ Set these secrets in your GitHub repository settings:
100
111
  | `E2E_DISCORD_TOKEN` | Discord auth token | `agent-discord auth extract` → check output |
101
112
  | `E2E_DISCORD_SERVER_ID` | Test server ID | `agent-discord server current` |
102
113
 
114
+ #### Teams Secrets
115
+
116
+ | Secret | Description | How to Get |
117
+ |--------|-------------|------------|
118
+ | `E2E_TEAMS_TOKEN` | Teams auth token (skypetoken_asm) | `agent-teams auth extract` → check output |
119
+ | `E2E_TEAMS_TEAM_ID` | Test team ID | `agent-teams team list` |
120
+ | `E2E_TEAMS_CHANNEL_ID` | Test channel ID | `agent-teams channel list` |
121
+ | `E2E_TEAMS_TEAM_NAME` | Test team name (optional) | `agent-teams team current` |
122
+
103
123
  ### Getting Credentials for CI
104
124
 
105
125
  Run locally to extract credentials, then copy them to GitHub Secrets:
@@ -133,34 +153,64 @@ When triggering manually, you can select which platform to test:
133
153
 
134
154
  ## Test Coverage
135
155
 
136
- ### Slack Tests (23 tests)
156
+ ### Slack Tests
137
157
 
138
158
  | Command Group | Tests |
139
159
  |---------------|-------|
140
160
  | `auth` | status |
141
161
  | `workspace` | list, current |
142
162
  | `message` | send, list, get, update, delete, thread reply, replies, search |
143
- | `channel` | list, list --type, info |
163
+ | `channel` | list, list --type, info, history |
144
164
  | `user` | list, me, info |
145
165
  | `reaction` | add, list, remove |
146
- | `file` | upload, list, list --channel, info |
147
- | `snapshot` | default, --channels-only, --users-only, --limit |
166
+ | `file` | upload, list |
167
+ | `unread` | counts, mark |
168
+ | `activity` | list |
169
+ | `saved` | list |
170
+ | `drafts` | list |
171
+ | `sections` | list |
172
+ | `snapshot` | default, --channels-only, --users-only |
173
+
174
+ ### SlackBot Tests
175
+
176
+ | Command Group | Tests |
177
+ |---------------|-------|
178
+ | `auth` | status |
179
+ | `message` | send, list, get, update, delete, thread reply, replies |
180
+ | `channel` | list, info |
181
+ | `user` | list, info |
182
+ | `reaction` | add, remove |
148
183
 
149
- ### Discord Tests (20 tests)
184
+ ### Discord Tests
150
185
 
151
186
  | Command Group | Tests |
152
187
  |---------------|-------|
153
188
  | `auth` | status |
154
189
  | `server` | list, current, info |
155
- | `message` | send, list, get*, delete |
190
+ | `message` | send, list, get\*, delete, ack, search |
156
191
  | `channel` | list, info, history |
157
- | `user` | list, me, info* |
158
- | `reaction` | add*, list*, remove* |
159
- | `file` | upload, list |
160
- | `snapshot` | default, --channels-only, --users-only |
192
+ | `user` | list\*, me, info |
193
+ | `reaction` | add\*, list\*, remove\* |
194
+ | `file` | upload, list, info |
195
+ | `snapshot` | default\*, --channels-only, --users-only\* |
161
196
 
162
197
  \* Some Discord tests are skipped because they require Bot Token permissions not available to user tokens.
163
198
 
199
+ ### Teams Tests
200
+
201
+ | Command Group | Tests |
202
+ |---------------|-------|
203
+ | `auth` | status |
204
+ | `team` | list, current, info |
205
+ | `message` | send, list, get, delete |
206
+ | `channel` | list, info, history |
207
+ | `user` | list, me, info |
208
+ | `reaction` | add, list, remove |
209
+ | `file` | upload, list, info |
210
+ | `snapshot` | default, --channels-only, --users-only |
211
+
212
+ > ⚠️ Teams tests require `E2E_TEAMS_TEAM_ID` and `E2E_TEAMS_CHANNEL_ID` environment variables. Teams tokens expire in 60-90 minutes.
213
+
164
214
  ## Troubleshooting
165
215
 
166
216
  ### "Wrong workspace" / "Wrong server" Error
package/e2e/config.ts CHANGED
@@ -75,3 +75,41 @@ export async function validateDiscordEnvironment() {
75
75
  }
76
76
  }
77
77
  }
78
+
79
+ // Teams Test Environment
80
+ export const TEAMS_TEST_TEAM_ID = process.env.E2E_TEAMS_TEAM_ID || ''
81
+ export const TEAMS_TEST_TEAM_NAME = process.env.E2E_TEAMS_TEAM_NAME || 'Agent Messenger'
82
+ export const TEAMS_TEST_CHANNEL_ID = process.env.E2E_TEAMS_CHANNEL_ID || ''
83
+ export const TEAMS_TEST_CHANNEL = 'e2e-test'
84
+
85
+ export async function validateTeamsEnvironment() {
86
+ const { runCLI, parseJSON } = await import('./helpers')
87
+
88
+ if (!TEAMS_TEST_TEAM_ID || !TEAMS_TEST_CHANNEL_ID) {
89
+ throw new Error(
90
+ 'Teams E2E environment not configured. Set E2E_TEAMS_TEAM_ID and E2E_TEAMS_CHANNEL_ID environment variables.',
91
+ )
92
+ }
93
+
94
+ const result = await runCLI('teams', ['auth', 'status'])
95
+ if (result.exitCode !== 0) {
96
+ throw new Error('Teams authentication failed. Please run: agent-teams auth extract')
97
+ }
98
+
99
+ const data = parseJSON<{ authenticated: boolean; expired?: boolean }>(result.stdout)
100
+ if (data?.expired) {
101
+ throw new Error('Teams token expired. Please run: agent-teams auth extract')
102
+ }
103
+
104
+ const currentResult = await runCLI('teams', ['team', 'current'])
105
+ const team = parseJSON<{ team_id: string }>(currentResult.stdout)
106
+ if (team?.team_id !== TEAMS_TEST_TEAM_ID) {
107
+ const switchResult = await runCLI('teams', ['team', 'switch', TEAMS_TEST_TEAM_ID])
108
+ if (switchResult.exitCode !== 0) {
109
+ throw new Error(
110
+ `Failed to switch to test team. Expected: ${TEAMS_TEST_TEAM_NAME} (${TEAMS_TEST_TEAM_ID}). ` +
111
+ `Make sure you have access to the test team.`,
112
+ )
113
+ }
114
+ }
115
+ }
@@ -104,6 +104,29 @@ describe('Discord E2E Tests', () => {
104
104
  const result = await runCLI('discord', ['message', 'delete', DISCORD_TEST_CHANNEL_ID, id, '--force'])
105
105
  expect(result.exitCode).toBe(0)
106
106
  })
107
+
108
+ test('message ack acknowledges message', async () => {
109
+ const testId = generateTestId()
110
+ const { id } = await createTestMessage('discord', DISCORD_TEST_CHANNEL_ID, `Ack test ${testId}`)
111
+ testMessages.push(id)
112
+
113
+ await waitForRateLimit()
114
+
115
+ const result = await runCLI('discord', ['message', 'ack', DISCORD_TEST_CHANNEL_ID, id])
116
+ expect(result.exitCode).toBe(0)
117
+
118
+ const data = parseJSON<{ acknowledged: string }>(result.stdout)
119
+ expect(data?.acknowledged).toBe(id)
120
+ })
121
+
122
+ test('message search finds messages', async () => {
123
+ const result = await runCLI('discord', ['message', 'search', 'test', '--limit', '5'])
124
+ expect(result.exitCode).toBe(0)
125
+
126
+ const data = parseJSON<{ results: unknown[]; total_results: number }>(result.stdout)
127
+ expect(data?.results).toBeDefined()
128
+ expect(typeof data?.total_results).toBe('number')
129
+ })
107
130
  })
108
131
 
109
132
  describe('channel', () => {
@@ -203,7 +226,7 @@ describe('Discord E2E Tests', () => {
203
226
  expect(Array.isArray(data)).toBe(true)
204
227
  })
205
228
 
206
- test('file upload uploads file', async () => {
229
+ test('file upload uploads file and file info retrieves it', async () => {
207
230
  const testId = generateTestId()
208
231
  const testFilePath = `/tmp/discord-e2e-${testId}.txt`
209
232
  await Bun.write(testFilePath, `Discord E2E test file ${testId}`)
@@ -212,15 +235,39 @@ describe('Discord E2E Tests', () => {
212
235
  const result = await runCLI('discord', ['file', 'upload', DISCORD_TEST_CHANNEL_ID, testFilePath])
213
236
  expect(result.exitCode).toBe(0)
214
237
 
215
- const data = parseJSON<{ id: string }>(result.stdout)
238
+ const data = parseJSON<{ id: string; attachments?: Array<{ id: string }> }>(result.stdout)
216
239
  expect(data?.id).toBeTruthy()
217
240
 
218
241
  // Track message for cleanup (file uploads create messages)
219
242
  if (data?.id) testMessages.push(data.id)
243
+
244
+ // Test file info using the attachment from the uploaded message
245
+ if (data?.attachments?.[0]?.id) {
246
+ await waitForRateLimit()
247
+ const infoResult = await runCLI('discord', ['file', 'info', DISCORD_TEST_CHANNEL_ID, data.attachments[0].id])
248
+ expect(infoResult.exitCode).toBe(0)
249
+ }
220
250
  } finally {
221
251
  await Bun.$`rm -f ${testFilePath}`.quiet()
222
252
  }
223
253
  })
254
+
255
+ test('file info retrieves file details', async () => {
256
+ // List files first to get a file ID
257
+ const listResult = await runCLI('discord', ['file', 'list', DISCORD_TEST_CHANNEL_ID])
258
+ expect(listResult.exitCode).toBe(0)
259
+
260
+ const files = parseJSON<Array<{ id: string }>>(listResult.stdout)
261
+ if (files && files.length > 0) {
262
+ await waitForRateLimit()
263
+
264
+ const result = await runCLI('discord', ['file', 'info', DISCORD_TEST_CHANNEL_ID, files[0].id])
265
+ expect(result.exitCode).toBe(0)
266
+
267
+ const data = parseJSON<{ id: string }>(result.stdout)
268
+ expect(data?.id).toBeTruthy()
269
+ }
270
+ })
224
271
  })
225
272
 
226
273
  describe('snapshot', () => {
package/e2e/helpers.ts CHANGED
@@ -11,6 +11,7 @@ export async function runCLI(platform: string, args: string[]): Promise<CLIResul
11
11
  slack: 'agent-slack',
12
12
  discord: 'agent-discord',
13
13
  slackbot: 'agent-slackbot',
14
+ teams: 'agent-teams',
14
15
  }
15
16
  const command = commandMap[platform] || platform
16
17
 
package/e2e/setup.ts ADDED
@@ -0,0 +1,10 @@
1
+ import { beforeAll, afterAll } from 'bun:test'
2
+ import { $ } from 'bun'
3
+
4
+ beforeAll(async () => {
5
+ await $`bun link`.quiet()
6
+ })
7
+
8
+ afterAll(async () => {
9
+ await $`bun unlink`.quiet()
10
+ })
@@ -280,6 +280,83 @@ describe('Slack E2E Tests', () => {
280
280
  })
281
281
  })
282
282
 
283
+ describe('channel history', () => {
284
+ test('channel history returns messages', async () => {
285
+ const result = await runCLI('slack', ['channel', 'history', SLACK_TEST_CHANNEL_ID, '--limit', '5'])
286
+ expect(result.exitCode).toBe(0)
287
+
288
+ const data = parseJSON<Array<{ ts: string }>>(result.stdout)
289
+ expect(Array.isArray(data)).toBe(true)
290
+ })
291
+ })
292
+
293
+ describe('unread', () => {
294
+ test('unread counts returns unread summary', async () => {
295
+ const result = await runCLI('slack', ['unread', 'counts'])
296
+ expect(result.exitCode).toBe(0)
297
+
298
+ const data = parseJSON<{ total_unread: number; channels: unknown[] }>(result.stdout)
299
+ expect(data?.total_unread).toBeDefined()
300
+ expect(Array.isArray(data?.channels)).toBe(true)
301
+ })
302
+
303
+ test('unread mark marks channel as read', async () => {
304
+ const testId = generateTestId()
305
+ const { id: ts } = await createTestMessage('slack', SLACK_TEST_CHANNEL_ID, `Unread mark test ${testId}`)
306
+ testMessages.push(ts)
307
+
308
+ await waitForRateLimit()
309
+
310
+ const result = await runCLI('slack', ['unread', 'mark', SLACK_TEST_CHANNEL_ID, ts])
311
+ expect(result.exitCode).toBe(0)
312
+
313
+ const data = parseJSON<{ marked_read: boolean }>(result.stdout)
314
+ expect(data?.marked_read).toBe(true)
315
+ })
316
+ })
317
+
318
+ describe('activity', () => {
319
+ test('activity list returns activity items', async () => {
320
+ const result = await runCLI('slack', ['activity', 'list', '--limit', '5'])
321
+ expect(result.exitCode).toBe(0)
322
+
323
+ const data = parseJSON<{ items: unknown[]; count: number }>(result.stdout)
324
+ expect(data?.items).toBeDefined()
325
+ expect(typeof data?.count).toBe('number')
326
+ })
327
+ })
328
+
329
+ describe('saved', () => {
330
+ test('saved list returns saved items', async () => {
331
+ const result = await runCLI('slack', ['saved', 'list'])
332
+ expect(result.exitCode).toBe(0)
333
+
334
+ const data = parseJSON<{ items: unknown[] }>(result.stdout)
335
+ expect(data?.items).toBeDefined()
336
+ expect(Array.isArray(data?.items)).toBe(true)
337
+ })
338
+ })
339
+
340
+ describe('drafts', () => {
341
+ test('drafts list returns drafts', async () => {
342
+ const result = await runCLI('slack', ['drafts', 'list'])
343
+ expect(result.exitCode).toBe(0)
344
+
345
+ const data = parseJSON<unknown[]>(result.stdout)
346
+ expect(Array.isArray(data)).toBe(true)
347
+ })
348
+ })
349
+
350
+ describe('sections', () => {
351
+ test('sections list returns channel sections', async () => {
352
+ const result = await runCLI('slack', ['sections', 'list'])
353
+ expect(result.exitCode).toBe(0)
354
+
355
+ const data = parseJSON<unknown[]>(result.stdout)
356
+ expect(Array.isArray(data)).toBe(true)
357
+ })
358
+ })
359
+
283
360
  describe('snapshot', () => {
284
361
  test('snapshot returns full workspace data', async () => {
285
362
  const result = await runCLI('slack', ['snapshot', '--limit', '2'])
@@ -0,0 +1,287 @@
1
+ import { describe, test, expect, beforeAll, afterEach } from 'bun:test'
2
+ import { runCLI, parseJSON, generateTestId, waitForRateLimit } from './helpers'
3
+ import {
4
+ TEAMS_TEST_CHANNEL_ID,
5
+ TEAMS_TEST_TEAM_ID,
6
+ validateTeamsEnvironment,
7
+ } from './config'
8
+
9
+ let testMessages: string[] = []
10
+
11
+ async function createTeamsMessage(text: string): Promise<string> {
12
+ const result = await runCLI('teams', ['message', 'send', TEAMS_TEST_TEAM_ID, TEAMS_TEST_CHANNEL_ID, text])
13
+ if (result.exitCode !== 0) {
14
+ throw new Error(`Failed to create Teams test message: ${result.stderr}`)
15
+ }
16
+ const data = parseJSON<{ id: string }>(result.stdout)
17
+ if (!data?.id) throw new Error('No message ID returned')
18
+ return data.id
19
+ }
20
+
21
+ async function cleanupTeamsMessages(ids: string[]) {
22
+ for (const id of ids) {
23
+ try {
24
+ await runCLI('teams', ['message', 'delete', TEAMS_TEST_TEAM_ID, TEAMS_TEST_CHANNEL_ID, id, '--force'])
25
+ await waitForRateLimit(500)
26
+ } catch {
27
+ // best-effort cleanup
28
+ }
29
+ }
30
+ }
31
+
32
+ describe('Teams E2E Tests', () => {
33
+ beforeAll(async () => {
34
+ await validateTeamsEnvironment()
35
+ })
36
+
37
+ afterEach(async () => {
38
+ if (testMessages.length > 0) {
39
+ await cleanupTeamsMessages(testMessages)
40
+ testMessages = []
41
+ }
42
+ await waitForRateLimit()
43
+ })
44
+
45
+ describe('auth', () => {
46
+ test('auth status returns authenticated team info', async () => {
47
+ const result = await runCLI('teams', ['auth', 'status'])
48
+ expect(result.exitCode).toBe(0)
49
+
50
+ const data = parseJSON<{ authenticated: boolean; current_team: string; token_expired: boolean }>(result.stdout)
51
+ expect(data).not.toBeNull()
52
+ expect(data?.authenticated).toBe(true)
53
+ expect(data?.current_team).toBeTruthy()
54
+ expect(typeof data?.token_expired).toBe('boolean')
55
+ })
56
+ })
57
+
58
+ describe('team', () => {
59
+ test('team list returns array', async () => {
60
+ const result = await runCLI('teams', ['team', 'list'])
61
+ expect(result.exitCode).toBe(0)
62
+
63
+ const data = parseJSON<Array<{ id: string; name: string }>>(result.stdout)
64
+ expect(Array.isArray(data)).toBe(true)
65
+ })
66
+
67
+ test('team current returns current team', async () => {
68
+ const result = await runCLI('teams', ['team', 'current'])
69
+ expect(result.exitCode).toBe(0)
70
+
71
+ const data = parseJSON<{ team_id: string }>(result.stdout)
72
+ expect(data?.team_id).toBe(TEAMS_TEST_TEAM_ID)
73
+ })
74
+
75
+ test('team info returns team details', async () => {
76
+ const result = await runCLI('teams', ['team', 'info', TEAMS_TEST_TEAM_ID])
77
+ expect(result.exitCode).toBe(0)
78
+
79
+ const data = parseJSON<{ id: string; name: string }>(result.stdout)
80
+ expect(data?.id).toBe(TEAMS_TEST_TEAM_ID)
81
+ expect(data?.name).toBeTruthy()
82
+ })
83
+ })
84
+
85
+ describe('message', () => {
86
+ test('message send creates message', async () => {
87
+ const testId = generateTestId()
88
+ const result = await runCLI('teams', ['message', 'send', TEAMS_TEST_TEAM_ID, TEAMS_TEST_CHANNEL_ID, `Test message ${testId}`])
89
+ expect(result.exitCode).toBe(0)
90
+
91
+ const data = parseJSON<{ id: string }>(result.stdout)
92
+ expect(data?.id).toBeTruthy()
93
+
94
+ if (data?.id) testMessages.push(data.id)
95
+ })
96
+
97
+ test('message list returns messages array', async () => {
98
+ const result = await runCLI('teams', ['message', 'list', TEAMS_TEST_TEAM_ID, TEAMS_TEST_CHANNEL_ID, '--limit', '5'])
99
+ expect(result.exitCode).toBe(0)
100
+
101
+ const data = parseJSON<Array<{ id: string }>>(result.stdout)
102
+ expect(Array.isArray(data)).toBe(true)
103
+ })
104
+
105
+ test('message get retrieves specific message', async () => {
106
+ const testId = generateTestId()
107
+ const id = await createTeamsMessage(`Get test ${testId}`)
108
+ testMessages.push(id)
109
+
110
+ await waitForRateLimit()
111
+
112
+ const result = await runCLI('teams', ['message', 'get', TEAMS_TEST_TEAM_ID, TEAMS_TEST_CHANNEL_ID, id])
113
+ expect(result.exitCode).toBe(0)
114
+
115
+ const data = parseJSON<{ content: string }>(result.stdout)
116
+ expect(data?.content).toContain(testId)
117
+ })
118
+
119
+ test('message delete removes message', async () => {
120
+ const testId = generateTestId()
121
+ const id = await createTeamsMessage(`Delete me ${testId}`)
122
+
123
+ await waitForRateLimit()
124
+
125
+ const result = await runCLI('teams', ['message', 'delete', TEAMS_TEST_TEAM_ID, TEAMS_TEST_CHANNEL_ID, id, '--force'])
126
+ expect(result.exitCode).toBe(0)
127
+ })
128
+
129
+ test('message command does not register update subcommand', async () => {
130
+ const result = await runCLI('teams', ['message', '--help'])
131
+ expect(result.exitCode).toBe(0)
132
+ expect(result.stdout).not.toContain('update')
133
+ })
134
+ })
135
+
136
+ describe('channel', () => {
137
+ test('channel list returns channels array', async () => {
138
+ const result = await runCLI('teams', ['channel', 'list', TEAMS_TEST_TEAM_ID])
139
+ expect(result.exitCode).toBe(0)
140
+
141
+ const data = parseJSON<Array<{ id: string; name: string }>>(result.stdout)
142
+ expect(Array.isArray(data)).toBe(true)
143
+ })
144
+
145
+ test('channel info returns channel details', async () => {
146
+ const result = await runCLI('teams', ['channel', 'info', TEAMS_TEST_TEAM_ID, TEAMS_TEST_CHANNEL_ID])
147
+ expect(result.exitCode).toBe(0)
148
+
149
+ const data = parseJSON<{ id: string }>(result.stdout)
150
+ expect(data?.id).toBe(TEAMS_TEST_CHANNEL_ID)
151
+ })
152
+
153
+ test('channel history returns messages', async () => {
154
+ const result = await runCLI('teams', ['channel', 'history', TEAMS_TEST_TEAM_ID, TEAMS_TEST_CHANNEL_ID, '--limit', '5'])
155
+ expect(result.exitCode).toBe(0)
156
+
157
+ const data = parseJSON<Array<{ id: string }>>(result.stdout)
158
+ expect(Array.isArray(data)).toBe(true)
159
+ })
160
+ })
161
+
162
+ describe('user', () => {
163
+ test('user list returns users array', async () => {
164
+ const result = await runCLI('teams', ['user', 'list', TEAMS_TEST_TEAM_ID])
165
+ expect(result.exitCode).toBe(0)
166
+
167
+ const data = parseJSON<Array<{ id: string }>>(result.stdout)
168
+ expect(Array.isArray(data)).toBe(true)
169
+ })
170
+
171
+ test('user me returns current user', async () => {
172
+ const result = await runCLI('teams', ['user', 'me'])
173
+ expect(result.exitCode).toBe(0)
174
+
175
+ const data = parseJSON<{ id: string; displayName: string }>(result.stdout)
176
+ expect(data?.id).toBeTruthy()
177
+ expect(data?.displayName).toBeTruthy()
178
+ })
179
+
180
+ test('user info returns user details', async () => {
181
+ const meResult = await runCLI('teams', ['user', 'me'])
182
+ expect(meResult.exitCode).toBe(0)
183
+
184
+ const me = parseJSON<{ id: string }>(meResult.stdout)
185
+ expect(me?.id).toBeTruthy()
186
+
187
+ await waitForRateLimit()
188
+
189
+ const result = await runCLI('teams', ['user', 'info', me!.id])
190
+ expect(result.exitCode).toBe(0)
191
+
192
+ const data = parseJSON<{ id: string }>(result.stdout)
193
+ expect(data?.id).toBe(me?.id)
194
+ })
195
+ })
196
+
197
+ describe('reaction', () => {
198
+ test('reaction add/remove lifecycle', async () => {
199
+ const testId = generateTestId()
200
+ const id = await createTeamsMessage(`Reaction test ${testId}`)
201
+ testMessages.push(id)
202
+
203
+ await waitForRateLimit(2000)
204
+
205
+ const addResult = await runCLI('teams', ['reaction', 'add', TEAMS_TEST_TEAM_ID, TEAMS_TEST_CHANNEL_ID, id, 'like'])
206
+ expect(addResult.exitCode).toBe(0)
207
+
208
+ const addData = parseJSON<{ success: boolean }>(addResult.stdout)
209
+ expect(addData?.success).toBe(true)
210
+
211
+ await waitForRateLimit(2000)
212
+
213
+ const removeResult = await runCLI('teams', ['reaction', 'remove', TEAMS_TEST_TEAM_ID, TEAMS_TEST_CHANNEL_ID, id, 'like'])
214
+ expect(removeResult.exitCode).toBe(0)
215
+
216
+ const removeData = parseJSON<{ success: boolean }>(removeResult.stdout)
217
+ expect(removeData?.success).toBe(true)
218
+ }, 15000)
219
+
220
+ test('reaction command does not register list subcommand', async () => {
221
+ const result = await runCLI('teams', ['reaction', '--help'])
222
+ expect(result.exitCode).toBe(0)
223
+ expect(result.stdout).not.toContain('list')
224
+ })
225
+ })
226
+
227
+ describe('file', () => {
228
+ test('file list returns files array', async () => {
229
+ const result = await runCLI('teams', ['file', 'list', TEAMS_TEST_TEAM_ID, TEAMS_TEST_CHANNEL_ID])
230
+ expect(result.exitCode).toBe(0)
231
+
232
+ const data = parseJSON<Array<{ id: string }>>(result.stdout)
233
+ expect(Array.isArray(data)).toBe(true)
234
+ })
235
+
236
+ test('file upload uploads file and file info returns details', async () => {
237
+ const testId = generateTestId()
238
+ const testFilePath = `/tmp/teams-e2e-${testId}.txt`
239
+ await Bun.write(testFilePath, `Teams E2E test file ${testId}`)
240
+
241
+ try {
242
+ const uploadResult = await runCLI('teams', ['file', 'upload', TEAMS_TEST_TEAM_ID, TEAMS_TEST_CHANNEL_ID, testFilePath])
243
+ expect(uploadResult.exitCode).toBe(0)
244
+
245
+ const uploadData = parseJSON<{ id: string }>(uploadResult.stdout)
246
+ expect(uploadData?.id).toBeTruthy()
247
+
248
+ await waitForRateLimit(2000)
249
+
250
+ const infoResult = await runCLI('teams', ['file', 'info', TEAMS_TEST_TEAM_ID, TEAMS_TEST_CHANNEL_ID, uploadData!.id])
251
+ expect(infoResult.exitCode).toBe(0)
252
+
253
+ const infoData = parseJSON<{ id: string }>(infoResult.stdout)
254
+ expect(infoData?.id).toBe(uploadData?.id)
255
+ } finally {
256
+ await Bun.$`rm -f ${testFilePath}`.quiet()
257
+ }
258
+ })
259
+ })
260
+
261
+ describe('snapshot', () => {
262
+ test('snapshot returns full team data', async () => {
263
+ const result = await runCLI('teams', ['snapshot', '--team-id', TEAMS_TEST_TEAM_ID, '--limit', '2'])
264
+ expect(result.exitCode).toBe(0)
265
+
266
+ const data = parseJSON<{ channels: unknown[]; members: unknown[] }>(result.stdout)
267
+ expect(data?.channels).toBeDefined()
268
+ expect(data?.members).toBeDefined()
269
+ })
270
+
271
+ test('snapshot --channels-only returns only channels', async () => {
272
+ const result = await runCLI('teams', ['snapshot', '--team-id', TEAMS_TEST_TEAM_ID, '--channels-only'])
273
+ expect(result.exitCode).toBe(0)
274
+
275
+ const data = parseJSON<{ channels: unknown[] }>(result.stdout)
276
+ expect(data?.channels).toBeDefined()
277
+ })
278
+
279
+ test('snapshot --users-only returns only users', async () => {
280
+ const result = await runCLI('teams', ['snapshot', '--team-id', TEAMS_TEST_TEAM_ID, '--users-only'])
281
+ expect(result.exitCode).toBe(0)
282
+
283
+ const data = parseJSON<{ members: unknown[] }>(result.stdout)
284
+ expect(data?.members).toBeDefined()
285
+ })
286
+ })
287
+ })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-messenger",
3
- "version": "1.3.5",
3
+ "version": "1.3.6",
4
4
  "description": "Multi-platform messaging CLI for AI agents (Slack, Discord, Teams)",
5
5
  "repository": {
6
6
  "type": "git",
@@ -21,7 +21,7 @@
21
21
  "build": "tsc && tsc-alias --resolve-full-paths",
22
22
  "postbuild": "bun scripts/postbuild.ts",
23
23
  "test": "bun test src/",
24
- "test:e2e": "bun test e2e/",
24
+ "test:e2e": "bun --config=bunfig.e2e.toml test",
25
25
  "typecheck": "tsc --noEmit",
26
26
  "lint": "biome check .",
27
27
  "lint:fix": "biome check --write --unsafe .",
@@ -4,6 +4,8 @@ const cliFiles = [
4
4
  'dist/src/cli.js',
5
5
  'dist/src/platforms/slack/cli.js',
6
6
  'dist/src/platforms/discord/cli.js',
7
+ 'dist/src/platforms/teams/cli.js',
8
+ 'dist/src/platforms/slackbot/cli.js',
7
9
  ]
8
10
 
9
11
  for (const file of cliFiles) {
@@ -337,15 +337,21 @@ Format:
337
337
 
338
338
  ### `agent-discord: command not found`
339
339
 
340
- The `agent-messenger` package is not installed. Run it directly using a package runner. Ask the user which one to use:
340
+ **`agent-discord` is NOT the npm package name.** The npm package is `agent-messenger`.
341
+
342
+ If the package is installed globally, use `agent-discord` directly:
343
+
344
+ ```bash
345
+ agent-discord message list general
346
+ ```
347
+
348
+ If the package is NOT installed, use `bunx agent-messenger discord`:
341
349
 
342
350
  ```bash
343
- npx -p agent-messenger agent-discord ...
344
- bunx -p agent-messenger agent-discord ...
345
- pnpm dlx --package agent-messenger agent-discord ...
351
+ bunx agent-messenger discord message list general
346
352
  ```
347
353
 
348
- If you already know the user's preferred package runner, use it directly instead of asking.
354
+ **NEVER run `bunx agent-discord`** it will fail or install a wrong package since `agent-discord` is not the npm package name.
349
355
 
350
356
  ## References
351
357
 
@@ -319,15 +319,21 @@ Format:
319
319
 
320
320
  ### `agent-slack: command not found`
321
321
 
322
- The `agent-messenger` package is not installed. Run it directly using a package runner. Ask the user which one to use:
322
+ **`agent-slack` is NOT the npm package name.** The npm package is `agent-messenger`.
323
+
324
+ If the package is installed globally, use `agent-slack` directly:
325
+
326
+ ```bash
327
+ agent-slack message list general
328
+ ```
329
+
330
+ If the package is NOT installed, use `bunx agent-messenger slack` (note: `slack` subcommand, not `agent-slack`):
323
331
 
324
332
  ```bash
325
- npx -p agent-messenger agent-slack ...
326
- bunx -p agent-messenger agent-slack ...
327
- pnpm dlx --package agent-messenger agent-slack ...
333
+ bunx agent-messenger slack message list general
328
334
  ```
329
335
 
330
- If you already know the user's preferred package runner, use it directly instead of asking.
336
+ **NEVER run `bunx agent-slack`** a separate, unrelated npm package named `agent-slack` exists on npm. It will silently install the **wrong package** with different (fewer) commands.
331
337
 
332
338
  ## References
333
339
 
@@ -283,15 +283,21 @@ Format:
283
283
 
284
284
  ### `agent-slackbot: command not found`
285
285
 
286
- The `agent-messenger` package is not installed. Run it directly using a package runner. Ask the user which one to use:
286
+ **`agent-slackbot` is NOT the npm package name.** The npm package is `agent-messenger`.
287
+
288
+ If the package is installed globally, use `agent-slackbot` directly:
289
+
290
+ ```bash
291
+ agent-slackbot message send general "Hello"
292
+ ```
293
+
294
+ If the package is NOT installed, use `bunx agent-messenger slackbot`:
287
295
 
288
296
  ```bash
289
- npx -p agent-messenger agent-slackbot ...
290
- bunx -p agent-messenger agent-slackbot ...
291
- pnpm dlx --package agent-messenger agent-slackbot ...
297
+ bunx agent-messenger slackbot message send general "Hello"
292
298
  ```
293
299
 
294
- If you already know the user's preferred package runner, use it directly instead of asking.
300
+ **NEVER run `bunx agent-slackbot`** it will fail or install a wrong package since `agent-slackbot` is not the npm package name.
295
301
 
296
302
  ## References
297
303
 
@@ -290,15 +290,21 @@ Format:
290
290
 
291
291
  ### `agent-teams: command not found`
292
292
 
293
- The `agent-messenger` package is not installed. Run it directly using a package runner. Ask the user which one to use:
293
+ **`agent-teams` is NOT the npm package name.** The npm package is `agent-messenger`.
294
+
295
+ If the package is installed globally, use `agent-teams` directly:
296
+
297
+ ```bash
298
+ agent-teams message list general
299
+ ```
300
+
301
+ If the package is NOT installed, use `bunx agent-messenger teams`:
294
302
 
295
303
  ```bash
296
- npx -p agent-messenger agent-teams ...
297
- bunx -p agent-messenger agent-teams ...
298
- pnpm dlx --package agent-messenger agent-teams ...
304
+ bunx agent-messenger teams message list general
299
305
  ```
300
306
 
301
- If you already know the user's preferred package runner, use it directly instead of asking.
307
+ **NEVER run `bunx agent-teams`** it will fail or install a wrong package since `agent-teams` is not the npm package name.
302
308
 
303
309
  ## References
304
310
 
package/src/cli.ts CHANGED
@@ -7,6 +7,7 @@ import pkg from '../package.json' with { type: 'json' }
7
7
 
8
8
  const __filename = fileURLToPath(import.meta.url)
9
9
  const __dirname = dirname(__filename)
10
+ const ext = __filename.endsWith('.ts') ? '.ts' : '.js'
10
11
 
11
12
  const program = new Command()
12
13
 
@@ -14,15 +15,15 @@ program.name('agent-messenger').description('Multi-platform messaging CLI for AI
14
15
 
15
16
  // Use absolute paths for CWD-independence
16
17
  program.command('slack', 'Interact with Slack workspaces', {
17
- executableFile: join(__dirname, 'platforms', 'slack', 'cli.ts'),
18
+ executableFile: join(__dirname, 'platforms', 'slack', `cli${ext}`),
18
19
  })
19
20
 
20
21
  program.command('discord', 'Interact with Discord guilds', {
21
- executableFile: join(__dirname, 'platforms', 'discord', 'cli.ts'),
22
+ executableFile: join(__dirname, 'platforms', 'discord', `cli${ext}`),
22
23
  })
23
24
 
24
25
  program.command('teams', 'Interact with Microsoft Teams', {
25
- executableFile: join(__dirname, 'platforms', 'teams', 'cli.ts'),
26
+ executableFile: join(__dirname, 'platforms', 'teams', `cli${ext}`),
26
27
  })
27
28
 
28
29
  program.parse(process.argv)
@@ -526,14 +526,14 @@ export class SlackClient {
526
526
 
527
527
  async getActivityFeed(options?: { types?: string; mode?: string; limit?: number }): Promise<SlackActivityItem[]> {
528
528
  return this.withRetry(async () => {
529
- const response = await (this.client as any).activity.feed({
530
- types: options?.types,
529
+ const response = await this.client.apiCall('activity.feed', {
530
+ types: options?.types || 'thread_reply,message_reaction,at_user,at_channel,keyword',
531
531
  mode: options?.mode || 'chrono_reads_and_unreads',
532
532
  limit: options?.limit || 20,
533
533
  })
534
534
  this.checkResponse(response)
535
535
 
536
- const items = (response.items || []).map((item: any) => ({
536
+ const items = ((response as any).items || []).map((item: any) => ({
537
537
  id: item.id || '',
538
538
  type: item.type || '',
539
539
  channel: item.channel || '',
@@ -555,7 +555,7 @@ export class SlackClient {
555
555
  return this.withRetry(async () => {
556
556
  const response = await (this.client as any).apiCall('saved.list', {
557
557
  cursor,
558
- limit: 100,
558
+ limit: 50,
559
559
  })
560
560
  this.checkResponse(response)
561
561