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.
- package/.claude-plugin/plugin.json +1 -1
- package/.env.template +17 -1
- package/bunfig.e2e.toml +3 -0
- package/bunfig.toml +2 -0
- package/dist/package.json +2 -2
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +4 -3
- package/dist/src/cli.js.map +1 -1
- package/dist/src/platforms/slack/client.js +3 -3
- package/dist/src/platforms/slack/client.js.map +1 -1
- package/dist/src/platforms/slackbot/cli.js +1 -1
- package/dist/src/platforms/teams/cli.js +1 -1
- package/e2e/README.md +62 -12
- package/e2e/config.ts +38 -0
- package/e2e/discord.e2e.test.ts +49 -2
- package/e2e/helpers.ts +1 -0
- package/e2e/setup.ts +10 -0
- package/e2e/slack.e2e.test.ts +77 -0
- package/e2e/teams.e2e.test.ts +287 -0
- package/package.json +2 -2
- package/scripts/postbuild.ts +2 -0
- package/skills/agent-discord/SKILL.md +11 -5
- package/skills/agent-slack/SKILL.md +11 -5
- package/skills/agent-slackbot/SKILL.md +11 -5
- package/skills/agent-teams/SKILL.md +11 -5
- package/src/cli.ts +4 -3
- package/src/platforms/slack/client.ts +4 -4
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-messenger",
|
|
3
|
-
"version": "1.3.
|
|
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
|
-
|
|
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=
|
package/bunfig.e2e.toml
ADDED
package/bunfig.toml
ADDED
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-messenger",
|
|
3
|
-
"version": "1.3.
|
|
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
|
|
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 .",
|
package/dist/src/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,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',
|
|
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',
|
|
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',
|
|
19
|
+
executableFile: join(__dirname, 'platforms', 'teams', `cli${ext}`),
|
|
19
20
|
});
|
|
20
21
|
program.parse(process.argv);
|
|
21
22
|
export default program;
|
package/dist/src/cli.js.map
CHANGED
|
@@ -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;
|
|
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:
|
|
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
|
|
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
|
|
28
|
-
| `
|
|
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
|
|
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
|
|
147
|
-
| `
|
|
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
|
|
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
|
|
190
|
+
| `message` | send, list, get\*, delete, ack, search |
|
|
156
191
|
| `channel` | list, info, history |
|
|
157
|
-
| `user` | list
|
|
158
|
-
| `reaction` | add
|
|
159
|
-
| `file` | upload, list |
|
|
160
|
-
| `snapshot` | default
|
|
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
|
+
}
|
package/e2e/discord.e2e.test.ts
CHANGED
|
@@ -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
package/e2e/setup.ts
ADDED
package/e2e/slack.e2e.test.ts
CHANGED
|
@@ -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.
|
|
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
|
|
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 .",
|
package/scripts/postbuild.ts
CHANGED
|
@@ -337,15 +337,21 @@ Format:
|
|
|
337
337
|
|
|
338
338
|
### `agent-discord: command not found`
|
|
339
339
|
|
|
340
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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',
|
|
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',
|
|
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',
|
|
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
|
|
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:
|
|
558
|
+
limit: 50,
|
|
559
559
|
})
|
|
560
560
|
this.checkResponse(response)
|
|
561
561
|
|