agent-messenger 2.29.0 → 2.29.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/README.md +12 -1
  3. package/dist/package.json +1 -1
  4. package/dist/src/platforms/teams/client.d.ts +1 -0
  5. package/dist/src/platforms/teams/client.d.ts.map +1 -1
  6. package/dist/src/platforms/teams/client.js +16 -0
  7. package/dist/src/platforms/teams/client.js.map +1 -1
  8. package/dist/src/platforms/teams/index.d.ts +1 -1
  9. package/dist/src/platforms/teams/index.d.ts.map +1 -1
  10. package/dist/src/platforms/teams/index.js.map +1 -1
  11. package/dist/src/platforms/teams/listener.d.ts +5 -0
  12. package/dist/src/platforms/teams/listener.d.ts.map +1 -1
  13. package/dist/src/platforms/teams/listener.js +54 -4
  14. package/dist/src/platforms/teams/listener.js.map +1 -1
  15. package/dist/src/platforms/teams/trouter.d.ts +7 -0
  16. package/dist/src/platforms/teams/trouter.d.ts.map +1 -1
  17. package/dist/src/platforms/teams/trouter.js +85 -0
  18. package/dist/src/platforms/teams/trouter.js.map +1 -1
  19. package/dist/src/platforms/teams/types.d.ts +9 -0
  20. package/dist/src/platforms/teams/types.d.ts.map +1 -1
  21. package/dist/src/platforms/teams/types.js.map +1 -1
  22. package/docs/content/docs/cli/teams.mdx +15 -1
  23. package/docs/content/docs/sdk/teams.mdx +30 -0
  24. package/package.json +1 -1
  25. package/skills/agent-channeltalk/SKILL.md +1 -1
  26. package/skills/agent-channeltalkbot/SKILL.md +1 -1
  27. package/skills/agent-discord/SKILL.md +1 -1
  28. package/skills/agent-discordbot/SKILL.md +1 -1
  29. package/skills/agent-imessage/SKILL.md +1 -1
  30. package/skills/agent-instagram/SKILL.md +1 -1
  31. package/skills/agent-kakaotalk/SKILL.md +1 -1
  32. package/skills/agent-line/SKILL.md +1 -1
  33. package/skills/agent-slack/SKILL.md +1 -1
  34. package/skills/agent-slackbot/SKILL.md +1 -1
  35. package/skills/agent-teams/SKILL.md +25 -2
  36. package/skills/agent-telegram/SKILL.md +1 -1
  37. package/skills/agent-telegrambot/SKILL.md +1 -1
  38. package/skills/agent-webex/SKILL.md +1 -1
  39. package/skills/agent-webexbot/SKILL.md +1 -1
  40. package/skills/agent-wechatbot/SKILL.md +1 -1
  41. package/skills/agent-whatsapp/SKILL.md +1 -1
  42. package/skills/agent-whatsappbot/SKILL.md +1 -1
  43. package/src/platforms/teams/client.ts +28 -0
  44. package/src/platforms/teams/index.ts +1 -0
  45. package/src/platforms/teams/listener.test.ts +243 -0
  46. package/src/platforms/teams/listener.ts +59 -3
  47. package/src/platforms/teams/trouter.test.ts +60 -0
  48. package/src/platforms/teams/trouter.ts +95 -0
  49. package/src/platforms/teams/types.ts +10 -0
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/platforms/teams/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/platforms/teams/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/platforms/teams/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/platforms/teams/types.ts"],"names":[],"mappings":"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"}
@@ -265,13 +265,27 @@ import { TeamsClient, TeamsListener } from 'agent-messenger/teams'
265
265
  const client = await new TeamsClient().login()
266
266
  const listener = new TeamsListener(client)
267
267
 
268
- listener.on('message', (message) => {
268
+ listener.on('message', async (message) => {
269
269
  console.log(`New message in ${message.chatId}: ${message.content}`)
270
+
271
+ // Channel messages carry team/channel context and parsed @mentions.
272
+ if (message.conversationType === 'channel') {
273
+ for (const mention of message.mentions) {
274
+ console.log(`Mentioned: ${mention.displayName} (${mention.mri})`)
275
+ }
276
+ await client.sendMessage(message.teamId!, message.channelId!, 'On it 👍')
277
+ }
270
278
  })
271
279
 
272
280
  await listener.start()
273
281
  ```
274
282
 
283
+ Each `message` is a `TeamsRealtimeMessage`. Alongside the unchanged
284
+ `chatId`/`content`/`author`, it carries `conversationType` (`'chat'` or
285
+ `'channel'`), `teamId`/`channelId` (set for channel messages, for use with
286
+ `sendMessage`), and `mentions` (always present, empty when there are no
287
+ `@mentions`; each is `{ id, mri?, displayName }`).
288
+
275
289
  The listener reuses your extracted credentials, so the Teams desktop app must be
276
290
  logged in. It reconnects automatically and re-authenticates on token expiry.
277
291
 
@@ -206,9 +206,39 @@ import type {
206
206
  TeamsAccount,
207
207
  TeamsConfig,
208
208
  TeamsConfigLegacy,
209
+ TeamsRealtimeMessage,
210
+ TeamsMention,
211
+ TeamsListenerEventMap,
212
+ TeamsTrouterGenericEvent,
209
213
  } from 'agent-messenger/teams'
210
214
  ```
211
215
 
216
+ The real-time listener emits `TeamsRealtimeMessage`:
217
+
218
+ ```typescript
219
+ interface TeamsRealtimeMessage {
220
+ id: string
221
+ chatId: string
222
+ conversationType: 'chat' | 'channel'
223
+ teamId?: string // set for channel messages
224
+ channelId?: string // set for channel messages
225
+ content: string // HTML-stripped text
226
+ mentions: TeamsMention[] // always present; empty when no @mentions
227
+ author: { id: string; displayName: string }
228
+ messageType: string
229
+ timestamp: string
230
+ }
231
+
232
+ interface TeamsMention {
233
+ id: string // positional mention index
234
+ mri?: string // Skype MRI of the mentioned user/tag
235
+ displayName: string
236
+ }
237
+ ```
238
+
239
+ These are type-only exports (no Zod schema — the listener constructs the event
240
+ internally rather than parsing untrusted input).
241
+
212
242
  ### Zod Schemas
213
243
 
214
244
  Runtime-validated schemas are also exported for parsing API responses:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-messenger",
3
- "version": "2.29.0",
3
+ "version": "2.29.1",
4
4
  "description": "Multi-platform messaging CLI for AI agents (Slack, Discord, Teams, Webex, Telegram, Telegram Bot, WhatsApp, LINE, iMessage, Instagram, KakaoTalk, Channel Talk)",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: agent-channeltalk
3
3
  description: Interact with Channel Talk using extracted desktop app or browser credentials - read chats, send messages, search messages, manage groups
4
- version: 2.29.0
4
+ version: 2.29.1
5
5
  allowed-tools: Bash(agent-channeltalk:*)
6
6
  metadata:
7
7
  openclaw:
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: agent-channeltalkbot
3
3
  description: Interact with Channel Talk workspaces using API credentials - send messages, read chats, manage groups and bots
4
- version: 2.29.0
4
+ version: 2.29.1
5
5
  allowed-tools: Bash(agent-channeltalkbot:*)
6
6
  metadata:
7
7
  openclaw:
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: agent-discord
3
3
  description: Interact with Discord servers - send messages, read channels, manage reactions
4
- version: 2.29.0
4
+ version: 2.29.1
5
5
  allowed-tools: Bash(agent-discord:*)
6
6
  metadata:
7
7
  openclaw:
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: agent-discordbot
3
3
  description: Interact with Discord servers using bot tokens - send messages, read channels, manage reactions
4
- version: 2.29.0
4
+ version: 2.29.1
5
5
  allowed-tools: Bash(agent-discordbot:*)
6
6
  metadata:
7
7
  openclaw:
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: agent-imessage
3
3
  description: Interact with iMessage on a Mac via the imsg tool - send messages, read chats, watch for new messages
4
- version: 2.29.0
4
+ version: 2.29.1
5
5
  allowed-tools: Bash(agent-imessage:*)
6
6
  metadata:
7
7
  openclaw:
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: agent-instagram
3
3
  description: Interact with Instagram DMs - send messages, read conversations, manage accounts
4
- version: 2.29.0
4
+ version: 2.29.1
5
5
  allowed-tools: Bash(agent-instagram:*)
6
6
  metadata:
7
7
  openclaw:
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: agent-kakaotalk
3
3
  description: Interact with KakaoTalk - send messages, read chats, manage conversations
4
- version: 2.29.0
4
+ version: 2.29.1
5
5
  allowed-tools: Bash(agent-kakaotalk:*)
6
6
  metadata:
7
7
  openclaw:
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: agent-line
3
3
  description: Interact with LINE - send messages, read chats, manage conversations
4
- version: 2.29.0
4
+ version: 2.29.1
5
5
  allowed-tools: Bash(agent-line:*)
6
6
  metadata:
7
7
  openclaw:
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: agent-slack
3
3
  description: Interact with Slack workspaces - send messages, read channels, manage reactions
4
- version: 2.29.0
4
+ version: 2.29.1
5
5
  allowed-tools: Bash(agent-slack:*)
6
6
  metadata:
7
7
  openclaw:
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: agent-slackbot
3
3
  description: Interact with Slack workspaces using bot tokens - send messages, read channels, manage reactions
4
- version: 2.29.0
4
+ version: 2.29.1
5
5
  allowed-tools: Bash(agent-slackbot:*)
6
6
  metadata:
7
7
  openclaw:
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: agent-teams
3
3
  description: Interact with Microsoft Teams - send messages, read channels, manage reactions
4
- version: 2.29.0
4
+ version: 2.29.1
5
5
  allowed-tools: Bash(agent-teams:*)
6
6
  metadata:
7
7
  openclaw:
@@ -473,13 +473,36 @@ import { TeamsClient, TeamsListener } from 'agent-messenger/teams'
473
473
  const client = await new TeamsClient().login()
474
474
  const listener = new TeamsListener(client)
475
475
 
476
- listener.on('message', (message) => {
476
+ listener.on('message', async (message) => {
477
477
  console.log(`New message in ${message.chatId}: ${message.content}`)
478
+
479
+ // Channel messages carry team/channel context and parsed @mentions.
480
+ if (message.conversationType === 'channel') {
481
+ for (const mention of message.mentions) {
482
+ console.log(`Mentioned: ${mention.displayName} (${mention.mri})`)
483
+ }
484
+ await client.sendMessage(message.teamId!, message.channelId!, 'On it 👍')
485
+ }
478
486
  })
479
487
 
480
488
  await listener.start()
481
489
  ```
482
490
 
491
+ Each `message` is a `TeamsRealtimeMessage`:
492
+
493
+ | Field | Type | Notes |
494
+ | --- | --- | --- |
495
+ | `id` | `string` | Message id |
496
+ | `chatId` | `string` | Conversation id (unchanged) |
497
+ | `conversationType` | `'chat' \| 'channel'` | `'channel'` for team-channel messages |
498
+ | `teamId` | `string?` | Set for channel messages (use with `sendMessage`) |
499
+ | `channelId` | `string?` | Set for channel messages (use with `sendMessage`) |
500
+ | `content` | `string` | HTML-stripped text (unchanged) |
501
+ | `mentions` | `TeamsMention[]` | Always present; empty when no `@mentions`. Each is `{ id, mri?, displayName }` |
502
+ | `author` | `{ id, displayName }` | Sender (unchanged) |
503
+ | `messageType` | `string` | e.g. `Text`, `RichText/Html` |
504
+ | `timestamp` | `string` | ISO timestamp |
505
+
483
506
  ### Full API Reference
484
507
 
485
508
  See the [Teams SDK documentation](https://agent-messenger.dev/docs/sdk/teams) for complete method signatures, types, schemas, and examples.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: agent-telegram
3
3
  description: Interact with Telegram through TDLib - authenticate, inspect chats, and send messages
4
- version: 2.29.0
4
+ version: 2.29.1
5
5
  allowed-tools: Bash(agent-telegram:*)
6
6
  ---
7
7
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: agent-telegrambot
3
3
  description: Interact with Telegram using bot tokens - send messages, read chats, manage reactions
4
- version: 2.29.0
4
+ version: 2.29.1
5
5
  allowed-tools: Bash(agent-telegrambot:*)
6
6
  metadata:
7
7
  openclaw:
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: agent-webex
3
3
  description: Interact with Cisco Webex - send messages, read spaces, manage memberships
4
- version: 2.29.0
4
+ version: 2.29.1
5
5
  allowed-tools: Bash(agent-webex:*)
6
6
  metadata:
7
7
  openclaw:
@@ -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.29.0
4
+ version: 2.29.1
5
5
  allowed-tools: Bash(agent-webexbot:*)
6
6
  metadata:
7
7
  openclaw:
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: agent-wechatbot
3
3
  description: Interact with WeChat Official Account using API credentials - send messages, manage templates, list followers
4
- version: 2.29.0
4
+ version: 2.29.1
5
5
  allowed-tools: Bash(agent-wechatbot:*)
6
6
  metadata:
7
7
  openclaw:
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: agent-whatsapp
3
3
  description: Interact with WhatsApp - send messages, read chats, manage conversations
4
- version: 2.29.0
4
+ version: 2.29.1
5
5
  allowed-tools: Bash(agent-whatsapp:*)
6
6
  metadata:
7
7
  openclaw:
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: agent-whatsappbot
3
3
  description: Interact with WhatsApp using Cloud API credentials - send messages, manage templates
4
- version: 2.29.0
4
+ version: 2.29.1
5
5
  allowed-tools: Bash(agent-whatsappbot:*)
6
6
  metadata:
7
7
  openclaw:
@@ -589,6 +589,34 @@ export class TeamsClient {
589
589
  return Array.from(teamsMap.values())
590
590
  }
591
591
 
592
+ // Realtime messages only carry a conversation id; a channel's parent teamId
593
+ // (== groupId) lives on the conversation, so the listener resolves it through
594
+ // this channelId -> teamId map.
595
+ async buildChannelTeamMap(): Promise<Map<string, string>> {
596
+ interface Conversation {
597
+ id: string
598
+ threadProperties?: {
599
+ groupId?: string
600
+ productThreadType?: string
601
+ threadType?: string
602
+ }
603
+ }
604
+ interface ConversationsResponse {
605
+ conversations: Conversation[]
606
+ }
607
+ const data = await this.request<ConversationsResponse>('GET', '/users/ME/conversations')
608
+
609
+ const channelToTeam = new Map<string, string>()
610
+ for (const conv of data.conversations ?? []) {
611
+ const tp = conv.threadProperties
612
+ if (!tp?.groupId) continue
613
+ if (!tp.productThreadType?.includes('Teams') && tp.threadType !== 'space') continue
614
+ channelToTeam.set(conv.id, tp.groupId)
615
+ }
616
+
617
+ return channelToTeam
618
+ }
619
+
592
620
  async listChats(): Promise<TeamsChat[]> {
593
621
  interface ConversationMessage {
594
622
  content?: string
@@ -20,6 +20,7 @@ export type {
20
20
  TeamsCredentials,
21
21
  TeamsFile,
22
22
  TeamsListenerEventMap,
23
+ TeamsMention,
23
24
  TeamsMessage,
24
25
  TeamsRealtimeMessage,
25
26
  TeamsReaction,
@@ -0,0 +1,243 @@
1
+ import { afterEach, describe, expect, mock, it } from 'bun:test'
2
+
3
+ import { TeamsListener } from '@/platforms/teams/listener'
4
+ import type { TeamsRealtimeMessage } from '@/platforms/teams/types'
5
+
6
+ type WsHandler = (...args: any[]) => void
7
+
8
+ let mockWsInstance: MockWs
9
+
10
+ class MockWs {
11
+ static OPEN = 1
12
+ static CLOSED = 3
13
+ readyState = MockWs.OPEN
14
+
15
+ private handlers = new Map<string, WsHandler[]>()
16
+ sent: string[] = []
17
+
18
+ constructor(_url: string, _options?: any) {
19
+ // oxlint-disable-next-line typescript-eslint/no-this-alias
20
+ mockWsInstance = this
21
+ }
22
+
23
+ on(event: string, handler: WsHandler) {
24
+ const list = this.handlers.get(event) ?? []
25
+ list.push(handler)
26
+ this.handlers.set(event, list)
27
+ }
28
+
29
+ send(data: string) {
30
+ this.sent.push(data)
31
+ }
32
+
33
+ close() {
34
+ this.readyState = MockWs.CLOSED
35
+ }
36
+
37
+ emit(event: string, ...args: any[]) {
38
+ for (const handler of this.handlers.get(event) ?? []) {
39
+ handler(...args)
40
+ }
41
+ }
42
+
43
+ simulateFrame(frame: string) {
44
+ this.emit('message', Buffer.from(frame))
45
+ }
46
+ }
47
+
48
+ mock.module('ws', () => ({ default: MockWs, __esModule: true }))
49
+
50
+ const actualTrouter = await import('@/platforms/teams/trouter')
51
+ mock.module('@/platforms/teams/trouter', () => ({
52
+ ...actualTrouter,
53
+ fetchTrouterInfo: mock(() => Promise.resolve({ socketio: 'wss://fake/', surl: 'https://fake/', connectparams: {} })),
54
+ fetchTrouterSessionId: mock(() => Promise.resolve('SESSION')),
55
+ registerEndpoint: mock(() => Promise.resolve()),
56
+ }))
57
+
58
+ function messageFrame(resource: Record<string, unknown>): string {
59
+ const body = JSON.stringify({ resourceType: 'NewMessage', resource })
60
+ return `3:::${JSON.stringify({ id: 1, url: '/v4/f/HASH/messaging', body })}`
61
+ }
62
+
63
+ function conversationLink(conversationId: string): string {
64
+ return `https://notifications.skype.net/v1/users/ME/conversations/${conversationId}`
65
+ }
66
+
67
+ function createMockClient(channelTeamMap: Map<string, string> = new Map()) {
68
+ return {
69
+ getToken: mock(() => 'skype-token'),
70
+ getIdToken: mock(() => Promise.resolve('id-token')),
71
+ getAccountType: mock(() => 'work'),
72
+ buildChannelTeamMap: mock(() => Promise.resolve(channelTeamMap)),
73
+ } as any
74
+ }
75
+
76
+ async function startAndCapture(
77
+ client: ReturnType<typeof createMockClient>,
78
+ ): Promise<{ listener: TeamsListener; messages: TeamsRealtimeMessage[] }> {
79
+ const listener = new TeamsListener(client)
80
+ const messages: TeamsRealtimeMessage[] = []
81
+ listener.on('message', (message) => messages.push(message))
82
+ await listener.start()
83
+ return { listener, messages }
84
+ }
85
+
86
+ async function flushMicrotasks(): Promise<void> {
87
+ for (let i = 0; i < 5; i++) await Promise.resolve()
88
+ }
89
+
90
+ describe('TeamsListener.emitMessage', () => {
91
+ let listener: TeamsListener
92
+
93
+ afterEach(() => {
94
+ listener?.stop()
95
+ })
96
+
97
+ it('classifies a 1:1 chat and carries no team/channel context', async () => {
98
+ const client = createMockClient()
99
+ const started = await startAndCapture(client)
100
+ listener = started.listener
101
+
102
+ mockWsInstance.simulateFrame(
103
+ messageFrame({
104
+ id: 'm1',
105
+ messagetype: 'RichText/Html',
106
+ content: 'hello there',
107
+ from: 'https://x/contacts/8:orgid:alice',
108
+ imdisplayname: 'Alice',
109
+ conversationLink: conversationLink('19:uni01_abc@unq.gbl.spaces'),
110
+ }),
111
+ )
112
+ await flushMicrotasks()
113
+
114
+ expect(started.messages).toHaveLength(1)
115
+ const message = started.messages[0]
116
+ expect(message.chatId).toBe('19:uni01_abc@unq.gbl.spaces')
117
+ expect(message.conversationType).toBe('chat')
118
+ expect(message.teamId).toBeUndefined()
119
+ expect(message.channelId).toBeUndefined()
120
+ expect(message.content).toBe('hello there')
121
+ expect(message.mentions).toEqual([])
122
+ expect(message.author).toEqual({ id: '8:orgid:alice', displayName: 'Alice' })
123
+ })
124
+
125
+ it('classifies a group chat thread with no groupId as a chat', async () => {
126
+ const client = createMockClient()
127
+ const started = await startAndCapture(client)
128
+ listener = started.listener
129
+
130
+ mockWsInstance.simulateFrame(
131
+ messageFrame({
132
+ id: 'm2',
133
+ messagetype: 'RichText/Html',
134
+ content: 'group hi',
135
+ from: 'https://x/contacts/8:orgid:bob',
136
+ imdisplayname: 'Bob',
137
+ conversationLink: conversationLink('19:group_xyz@thread.tacv2'),
138
+ }),
139
+ )
140
+ await flushMicrotasks()
141
+
142
+ expect(started.messages).toHaveLength(1)
143
+ const message = started.messages[0]
144
+ expect(message.chatId).toBe('19:group_xyz@thread.tacv2')
145
+ expect(message.conversationType).toBe('chat')
146
+ expect(message.teamId).toBeUndefined()
147
+ expect(message.channelId).toBeUndefined()
148
+ })
149
+
150
+ it('does not refresh the channel map for every group-chat message', async () => {
151
+ const client = createMockClient()
152
+ const started = await startAndCapture(client)
153
+ listener = started.listener
154
+
155
+ for (const id of ['g1', 'g2', 'g3']) {
156
+ mockWsInstance.simulateFrame(
157
+ messageFrame({
158
+ id,
159
+ messagetype: 'RichText/Html',
160
+ content: 'group hi',
161
+ from: 'https://x/contacts/8:orgid:bob',
162
+ imdisplayname: 'Bob',
163
+ conversationLink: conversationLink('19:group_xyz@thread.tacv2'),
164
+ }),
165
+ )
166
+ await flushMicrotasks()
167
+ }
168
+
169
+ expect(started.messages).toHaveLength(3)
170
+ // One build at start() + one refresh on the first miss; the negative cache
171
+ // prevents a fetch on the 2nd and 3rd messages.
172
+ expect(client.buildChannelTeamMap).toHaveBeenCalledTimes(2)
173
+ })
174
+
175
+ it('classifies a team channel message and resolves teamId plus mentions', async () => {
176
+ const channelId = '19:channel_abc@thread.tacv2'
177
+ const client = createMockClient(new Map([[channelId, 'team-group-id']]))
178
+ const started = await startAndCapture(client)
179
+ listener = started.listener
180
+
181
+ mockWsInstance.simulateFrame(
182
+ messageFrame({
183
+ id: 'm3',
184
+ messagetype: 'RichText/Html',
185
+ content: '<span itemtype="http://schema.skype.com/Mention" itemscope itemid="0">Alice</span> please review',
186
+ from: 'https://x/contacts/8:orgid:bob',
187
+ imdisplayname: 'Bob',
188
+ conversationLink: conversationLink(channelId),
189
+ properties: {
190
+ mentions: [{ itemid: '0', mri: '8:orgid:alice', mentionType: 'person', displayName: 'Alice' }],
191
+ },
192
+ }),
193
+ )
194
+ await flushMicrotasks()
195
+
196
+ expect(started.messages).toHaveLength(1)
197
+ const message = started.messages[0]
198
+ expect(message.conversationType).toBe('channel')
199
+ expect(message.teamId).toBe('team-group-id')
200
+ expect(message.channelId).toBe(channelId)
201
+ expect(message.content).toBe('Alice please review')
202
+ expect(message.mentions).toEqual([{ id: '0', mri: '8:orgid:alice', displayName: 'Alice' }])
203
+ })
204
+
205
+ it('does not re-emit a message with a duplicate id', async () => {
206
+ const client = createMockClient()
207
+ const started = await startAndCapture(client)
208
+ listener = started.listener
209
+
210
+ const frame = messageFrame({
211
+ id: 'dup',
212
+ messagetype: 'Text',
213
+ content: 'once',
214
+ from: 'https://x/contacts/8:orgid:alice',
215
+ imdisplayname: 'Alice',
216
+ conversationLink: conversationLink('19:uni01_abc@unq.gbl.spaces'),
217
+ })
218
+ mockWsInstance.simulateFrame(frame)
219
+ await flushMicrotasks()
220
+ mockWsInstance.simulateFrame(frame)
221
+ await flushMicrotasks()
222
+
223
+ expect(started.messages).toHaveLength(1)
224
+ })
225
+
226
+ it('ignores non-text message types', async () => {
227
+ const client = createMockClient()
228
+ const started = await startAndCapture(client)
229
+ listener = started.listener
230
+
231
+ mockWsInstance.simulateFrame(
232
+ messageFrame({
233
+ id: 'sys',
234
+ messagetype: 'ThreadActivity/AddMember',
235
+ content: '',
236
+ conversationLink: conversationLink('19:uni01_abc@unq.gbl.spaces'),
237
+ }),
238
+ )
239
+ await flushMicrotasks()
240
+
241
+ expect(started.messages).toHaveLength(0)
242
+ })
243
+ })