agent-messenger 2.28.0 → 2.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +18 -1
- package/dist/package.json +1 -1
- package/dist/src/platforms/discord/client.d.ts +6 -2
- package/dist/src/platforms/discord/client.d.ts.map +1 -1
- package/dist/src/platforms/discord/client.js +10 -3
- package/dist/src/platforms/discord/client.js.map +1 -1
- package/dist/src/platforms/instagram/client.d.ts +24 -2
- package/dist/src/platforms/instagram/client.d.ts.map +1 -1
- package/dist/src/platforms/instagram/client.js +343 -53
- package/dist/src/platforms/instagram/client.js.map +1 -1
- package/dist/src/platforms/instagram/commands/auth.d.ts +1 -0
- package/dist/src/platforms/instagram/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/instagram/commands/auth.js +123 -11
- package/dist/src/platforms/instagram/commands/auth.js.map +1 -1
- package/dist/src/platforms/instagram/credential-manager.d.ts +4 -1
- package/dist/src/platforms/instagram/credential-manager.d.ts.map +1 -1
- package/dist/src/platforms/instagram/credential-manager.js +17 -1
- package/dist/src/platforms/instagram/credential-manager.js.map +1 -1
- package/dist/src/platforms/instagram/types.d.ts +10 -8
- package/dist/src/platforms/instagram/types.d.ts.map +1 -1
- package/dist/src/platforms/instagram/types.js.map +1 -1
- package/dist/src/platforms/teams/app-config.d.ts +36 -0
- package/dist/src/platforms/teams/app-config.d.ts.map +1 -0
- package/dist/src/platforms/teams/app-config.js +69 -0
- package/dist/src/platforms/teams/app-config.js.map +1 -0
- package/dist/src/platforms/teams/client.d.ts +19 -2
- package/dist/src/platforms/teams/client.d.ts.map +1 -1
- package/dist/src/platforms/teams/client.js +295 -7
- package/dist/src/platforms/teams/client.js.map +1 -1
- package/dist/src/platforms/teams/commands/auth.d.ts +10 -0
- package/dist/src/platforms/teams/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/teams/commands/auth.js +137 -3
- package/dist/src/platforms/teams/commands/auth.js.map +1 -1
- package/dist/src/platforms/teams/commands/file.d.ts +3 -0
- package/dist/src/platforms/teams/commands/file.d.ts.map +1 -1
- package/dist/src/platforms/teams/commands/file.js +59 -2
- package/dist/src/platforms/teams/commands/file.js.map +1 -1
- package/dist/src/platforms/teams/commands/message.d.ts +11 -0
- package/dist/src/platforms/teams/commands/message.d.ts.map +1 -1
- package/dist/src/platforms/teams/commands/message.js +121 -2
- package/dist/src/platforms/teams/commands/message.js.map +1 -1
- package/dist/src/platforms/teams/credential-manager.d.ts +23 -1
- package/dist/src/platforms/teams/credential-manager.d.ts.map +1 -1
- package/dist/src/platforms/teams/credential-manager.js +46 -2
- package/dist/src/platforms/teams/credential-manager.js.map +1 -1
- package/dist/src/platforms/teams/device-code.d.ts +48 -0
- package/dist/src/platforms/teams/device-code.d.ts.map +1 -0
- package/dist/src/platforms/teams/device-code.js +199 -0
- package/dist/src/platforms/teams/device-code.js.map +1 -0
- package/dist/src/platforms/teams/device-login.d.ts +37 -0
- package/dist/src/platforms/teams/device-login.d.ts.map +1 -0
- package/dist/src/platforms/teams/device-login.js +129 -0
- package/dist/src/platforms/teams/device-login.js.map +1 -0
- package/dist/src/platforms/teams/ensure-auth.d.ts.map +1 -1
- package/dist/src/platforms/teams/ensure-auth.js +12 -0
- package/dist/src/platforms/teams/ensure-auth.js.map +1 -1
- package/dist/src/platforms/teams/index.d.ts +7 -3
- package/dist/src/platforms/teams/index.d.ts.map +1 -1
- package/dist/src/platforms/teams/index.js +5 -2
- package/dist/src/platforms/teams/index.js.map +1 -1
- package/dist/src/platforms/teams/listener.d.ts +35 -0
- package/dist/src/platforms/teams/listener.d.ts.map +1 -0
- package/dist/src/platforms/teams/listener.js +236 -0
- package/dist/src/platforms/teams/listener.js.map +1 -0
- package/dist/src/platforms/teams/realm-discovery.d.ts +3 -0
- package/dist/src/platforms/teams/realm-discovery.d.ts.map +1 -0
- package/dist/src/platforms/teams/realm-discovery.js +33 -0
- package/dist/src/platforms/teams/realm-discovery.js.map +1 -0
- package/dist/src/platforms/teams/token-extractor.d.ts +3 -0
- package/dist/src/platforms/teams/token-extractor.d.ts.map +1 -1
- package/dist/src/platforms/teams/token-extractor.js +60 -0
- package/dist/src/platforms/teams/token-extractor.js.map +1 -1
- package/dist/src/platforms/teams/token-provider.d.ts +25 -0
- package/dist/src/platforms/teams/token-provider.d.ts.map +1 -0
- package/dist/src/platforms/teams/token-provider.js +190 -0
- package/dist/src/platforms/teams/token-provider.js.map +1 -0
- package/dist/src/platforms/teams/trouter.d.ts +31 -0
- package/dist/src/platforms/teams/trouter.d.ts.map +1 -0
- package/dist/src/platforms/teams/trouter.js +181 -0
- package/dist/src/platforms/teams/trouter.js.map +1 -0
- package/dist/src/platforms/teams/types.d.ts +94 -0
- package/dist/src/platforms/teams/types.d.ts.map +1 -1
- package/dist/src/platforms/teams/types.js +30 -0
- package/dist/src/platforms/teams/types.js.map +1 -1
- package/dist/src/platforms/webex/types.d.ts +1 -1
- package/dist/src/tui/adapters/instagram-adapter.d.ts.map +1 -1
- package/dist/src/tui/adapters/instagram-adapter.js +16 -0
- package/dist/src/tui/adapters/instagram-adapter.js.map +1 -1
- package/dist/src/tui/adapters/teams-adapter.d.ts +3 -0
- package/dist/src/tui/adapters/teams-adapter.d.ts.map +1 -1
- package/dist/src/tui/adapters/teams-adapter.js +21 -0
- package/dist/src/tui/adapters/teams-adapter.js.map +1 -1
- package/dist/src/tui/app.js +3 -3
- package/docs/content/docs/cli/instagram.mdx +1 -0
- package/docs/content/docs/cli/teams.mdx +22 -0
- package/package.json +1 -1
- package/skills/agent-channeltalk/SKILL.md +1 -1
- package/skills/agent-channeltalkbot/SKILL.md +1 -1
- package/skills/agent-discord/SKILL.md +1 -1
- package/skills/agent-discordbot/SKILL.md +1 -1
- package/skills/agent-imessage/SKILL.md +1 -1
- package/skills/agent-instagram/SKILL.md +1 -1
- package/skills/agent-instagram/references/authentication.md +11 -0
- package/skills/agent-kakaotalk/SKILL.md +1 -1
- package/skills/agent-line/SKILL.md +1 -1
- package/skills/agent-slack/SKILL.md +1 -1
- package/skills/agent-slackbot/SKILL.md +1 -1
- package/skills/agent-teams/SKILL.md +59 -6
- package/skills/agent-teams/references/authentication.md +31 -1
- package/skills/agent-telegram/SKILL.md +1 -1
- package/skills/agent-telegrambot/SKILL.md +1 -1
- package/skills/agent-webex/SKILL.md +1 -1
- package/skills/agent-webexbot/SKILL.md +1 -1
- package/skills/agent-wechatbot/SKILL.md +1 -1
- package/skills/agent-whatsapp/SKILL.md +1 -1
- package/skills/agent-whatsappbot/SKILL.md +1 -1
- package/src/platforms/discord/client.test.ts +86 -0
- package/src/platforms/discord/client.ts +10 -3
- package/src/platforms/instagram/client.test.ts +478 -33
- package/src/platforms/instagram/client.ts +449 -68
- package/src/platforms/instagram/commands/auth.test.ts +177 -1
- package/src/platforms/instagram/commands/auth.ts +182 -11
- package/src/platforms/instagram/credential-manager.test.ts +30 -0
- package/src/platforms/instagram/credential-manager.ts +23 -1
- package/src/platforms/instagram/types.ts +11 -8
- package/src/platforms/teams/app-config.ts +92 -0
- package/src/platforms/teams/client.test.ts +335 -1
- package/src/platforms/teams/client.ts +342 -7
- package/src/platforms/teams/commands/auth.test.ts +93 -1
- package/src/platforms/teams/commands/auth.ts +182 -3
- package/src/platforms/teams/commands/file.test.ts +92 -1
- package/src/platforms/teams/commands/file.ts +76 -1
- package/src/platforms/teams/commands/message.test.ts +95 -1
- package/src/platforms/teams/commands/message.ts +145 -3
- package/src/platforms/teams/credential-manager.test.ts +20 -0
- package/src/platforms/teams/credential-manager.ts +68 -3
- package/src/platforms/teams/device-code.test.ts +311 -0
- package/src/platforms/teams/device-code.ts +277 -0
- package/src/platforms/teams/device-login.test.ts +288 -0
- package/src/platforms/teams/device-login.ts +206 -0
- package/src/platforms/teams/ensure-auth.ts +11 -0
- package/src/platforms/teams/index.test.ts +10 -0
- package/src/platforms/teams/index.ts +16 -1
- package/src/platforms/teams/listener.ts +295 -0
- package/src/platforms/teams/realm-discovery.test.ts +73 -0
- package/src/platforms/teams/realm-discovery.ts +42 -0
- package/src/platforms/teams/token-extractor.ts +69 -0
- package/src/platforms/teams/token-provider.test.ts +227 -0
- package/src/platforms/teams/token-provider.ts +284 -0
- package/src/platforms/teams/trouter.test.ts +114 -0
- package/src/platforms/teams/trouter.ts +228 -0
- package/src/platforms/teams/types.test.ts +17 -0
- package/src/platforms/teams/types.ts +86 -0
- package/src/tui/adapters/instagram-adapter.ts +13 -0
- package/src/tui/adapters/teams-adapter.ts +23 -0
- package/src/tui/app.ts +3 -3
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: agent-webexbot
|
|
3
3
|
description: Interact with Cisco Webex using bot tokens - send messages, reply in threads, upload and download files, look up people, read spaces, manage memberships, stream real-time events
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.29.0
|
|
5
5
|
allowed-tools: Bash(agent-webexbot:*)
|
|
6
6
|
metadata:
|
|
7
7
|
openclaw:
|
|
@@ -164,6 +164,38 @@ describe('DiscordClient', () => {
|
|
|
164
164
|
expect(fetchCalls[0].options?.method).toBe('POST')
|
|
165
165
|
expect(fetchCalls[0].options?.body).toBe(JSON.stringify({ content: 'Hello world' }))
|
|
166
166
|
})
|
|
167
|
+
|
|
168
|
+
it('includes message_reference when reply_to is provided', async () => {
|
|
169
|
+
mockResponse({
|
|
170
|
+
id: 'msg1',
|
|
171
|
+
channel_id: 'ch1',
|
|
172
|
+
author: { id: '123', username: 'bot' },
|
|
173
|
+
content: 'Reply text',
|
|
174
|
+
timestamp: '2024-01-01T00:00:00.000Z',
|
|
175
|
+
})
|
|
176
|
+
|
|
177
|
+
const client = await new DiscordClient().login({ token: 'test-token' })
|
|
178
|
+
await client.sendMessage('ch1', 'Reply text', { reply_to: 'parent123' })
|
|
179
|
+
|
|
180
|
+
expect(fetchCalls[0].options?.body).toBe(
|
|
181
|
+
JSON.stringify({ content: 'Reply text', message_reference: { message_id: 'parent123' } }),
|
|
182
|
+
)
|
|
183
|
+
})
|
|
184
|
+
|
|
185
|
+
it('omits message_reference when reply_to is not provided', async () => {
|
|
186
|
+
mockResponse({
|
|
187
|
+
id: 'msg1',
|
|
188
|
+
channel_id: 'ch1',
|
|
189
|
+
author: { id: '123', username: 'bot' },
|
|
190
|
+
content: 'Hello world',
|
|
191
|
+
timestamp: '2024-01-01T00:00:00.000Z',
|
|
192
|
+
})
|
|
193
|
+
|
|
194
|
+
const client = await new DiscordClient().login({ token: 'test-token' })
|
|
195
|
+
await client.sendMessage('ch1', 'Hello world')
|
|
196
|
+
|
|
197
|
+
expect(fetchCalls[0].options?.body).toBe(JSON.stringify({ content: 'Hello world' }))
|
|
198
|
+
})
|
|
167
199
|
})
|
|
168
200
|
|
|
169
201
|
describe('getMessages', () => {
|
|
@@ -308,6 +340,60 @@ describe('DiscordClient', () => {
|
|
|
308
340
|
expect(fetchCalls[0].url).toBe('https://discord.com/api/v10/channels/ch1/messages')
|
|
309
341
|
expect(fetchCalls[0].options?.method).toBe('POST')
|
|
310
342
|
})
|
|
343
|
+
|
|
344
|
+
it('includes payload_json with message_reference when reply_to is provided', async () => {
|
|
345
|
+
const tempFile = '/tmp/test-upload-reply.txt'
|
|
346
|
+
await Bun.write(tempFile, 'test content')
|
|
347
|
+
|
|
348
|
+
mockResponse({
|
|
349
|
+
id: 'msg1',
|
|
350
|
+
channel_id: 'ch1',
|
|
351
|
+
author: { id: '123', username: 'bot' },
|
|
352
|
+
content: '',
|
|
353
|
+
timestamp: '2024-01-01T00:00:00.000Z',
|
|
354
|
+
attachments: [
|
|
355
|
+
{
|
|
356
|
+
id: 'att1',
|
|
357
|
+
filename: 'test-upload-reply.txt',
|
|
358
|
+
size: 12,
|
|
359
|
+
url: 'https://cdn.discord.com/attachments/ch1/att1/test-upload-reply.txt',
|
|
360
|
+
},
|
|
361
|
+
],
|
|
362
|
+
})
|
|
363
|
+
|
|
364
|
+
const client = await new DiscordClient().login({ token: 'test-token' })
|
|
365
|
+
await client.uploadFile('ch1', tempFile, { reply_to: 'parent123' })
|
|
366
|
+
|
|
367
|
+
const formData = fetchCalls[0].options?.body as FormData
|
|
368
|
+
expect(formData.get('payload_json')).toBe(JSON.stringify({ message_reference: { message_id: 'parent123' } }))
|
|
369
|
+
})
|
|
370
|
+
|
|
371
|
+
it('omits payload_json when reply_to is not provided', async () => {
|
|
372
|
+
const tempFile = '/tmp/test-upload-no-reply.txt'
|
|
373
|
+
await Bun.write(tempFile, 'test content')
|
|
374
|
+
|
|
375
|
+
mockResponse({
|
|
376
|
+
id: 'msg1',
|
|
377
|
+
channel_id: 'ch1',
|
|
378
|
+
author: { id: '123', username: 'bot' },
|
|
379
|
+
content: '',
|
|
380
|
+
timestamp: '2024-01-01T00:00:00.000Z',
|
|
381
|
+
attachments: [
|
|
382
|
+
{
|
|
383
|
+
id: 'att1',
|
|
384
|
+
filename: 'test-upload-no-reply.txt',
|
|
385
|
+
size: 12,
|
|
386
|
+
url: 'https://cdn.discord.com/attachments/ch1/att1/test-upload-no-reply.txt',
|
|
387
|
+
},
|
|
388
|
+
],
|
|
389
|
+
})
|
|
390
|
+
|
|
391
|
+
const client = await new DiscordClient().login({ token: 'test-token' })
|
|
392
|
+
await client.uploadFile('ch1', tempFile)
|
|
393
|
+
|
|
394
|
+
const formData = fetchCalls[0].options?.body as FormData
|
|
395
|
+
expect(formData.get('payload_json')).toBeNull()
|
|
396
|
+
})
|
|
311
397
|
})
|
|
312
398
|
|
|
313
399
|
describe('listFiles', () => {
|
|
@@ -226,8 +226,12 @@ export class DiscordClient {
|
|
|
226
226
|
return this.request<DiscordChannel>('GET', `/channels/${channelId}`)
|
|
227
227
|
}
|
|
228
228
|
|
|
229
|
-
async sendMessage(channelId: string, content: string): Promise<DiscordMessage> {
|
|
230
|
-
|
|
229
|
+
async sendMessage(channelId: string, content: string, options?: { reply_to?: string }): Promise<DiscordMessage> {
|
|
230
|
+
const body: Record<string, unknown> = { content }
|
|
231
|
+
if (options?.reply_to) {
|
|
232
|
+
body.message_reference = { message_id: options.reply_to }
|
|
233
|
+
}
|
|
234
|
+
return this.request<DiscordMessage>('POST', `/channels/${channelId}/messages`, body)
|
|
231
235
|
}
|
|
232
236
|
|
|
233
237
|
async getMessages(channelId: string, limit: number = 50): Promise<DiscordMessage[]> {
|
|
@@ -270,11 +274,14 @@ export class DiscordClient {
|
|
|
270
274
|
return this.request<DiscordUser>('GET', `/users/${userId}`)
|
|
271
275
|
}
|
|
272
276
|
|
|
273
|
-
async uploadFile(channelId: string, filePath: string): Promise<DiscordFile> {
|
|
277
|
+
async uploadFile(channelId: string, filePath: string, options?: { reply_to?: string }): Promise<DiscordFile> {
|
|
274
278
|
const fileBuffer = await readFile(filePath)
|
|
275
279
|
const filename = filePath.split('/').pop() || 'file'
|
|
276
280
|
|
|
277
281
|
const formData = new FormData()
|
|
282
|
+
if (options?.reply_to) {
|
|
283
|
+
formData.append('payload_json', JSON.stringify({ message_reference: { message_id: options.reply_to } }))
|
|
284
|
+
}
|
|
278
285
|
formData.append('files[0]', new Blob([fileBuffer]), filename)
|
|
279
286
|
|
|
280
287
|
interface MessageWithAttachments extends DiscordMessage {
|