agent-messenger 2.34.0 → 2.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/dist/package.json +1 -1
  3. package/dist/src/platforms/kakaotalk/auth/kakao-login.d.ts +2 -0
  4. package/dist/src/platforms/kakaotalk/auth/kakao-login.d.ts.map +1 -1
  5. package/dist/src/platforms/kakaotalk/auth/kakao-login.js +2 -2
  6. package/dist/src/platforms/kakaotalk/auth/kakao-login.js.map +1 -1
  7. package/dist/src/platforms/kakaotalk/auth/oauth-refresh.d.ts +28 -0
  8. package/dist/src/platforms/kakaotalk/auth/oauth-refresh.d.ts.map +1 -0
  9. package/dist/src/platforms/kakaotalk/auth/oauth-refresh.js +100 -0
  10. package/dist/src/platforms/kakaotalk/auth/oauth-refresh.js.map +1 -0
  11. package/dist/src/platforms/kakaotalk/client.d.ts +2 -0
  12. package/dist/src/platforms/kakaotalk/client.d.ts.map +1 -1
  13. package/dist/src/platforms/kakaotalk/client.js +14 -1
  14. package/dist/src/platforms/kakaotalk/client.js.map +1 -1
  15. package/dist/src/platforms/kakaotalk/index.d.ts +3 -1
  16. package/dist/src/platforms/kakaotalk/index.d.ts.map +1 -1
  17. package/dist/src/platforms/kakaotalk/index.js +1 -0
  18. package/dist/src/platforms/kakaotalk/index.js.map +1 -1
  19. package/dist/src/platforms/kakaotalk/protocol/login-response.d.ts +9 -0
  20. package/dist/src/platforms/kakaotalk/protocol/login-response.d.ts.map +1 -0
  21. package/dist/src/platforms/kakaotalk/protocol/login-response.js +32 -0
  22. package/dist/src/platforms/kakaotalk/protocol/login-response.js.map +1 -0
  23. package/dist/src/platforms/kakaotalk/protocol/session.d.ts.map +1 -1
  24. package/dist/src/platforms/kakaotalk/protocol/session.js +29 -20
  25. package/dist/src/platforms/kakaotalk/protocol/session.js.map +1 -1
  26. package/dist/src/platforms/kakaotalk/protocol/types.d.ts +1 -0
  27. package/dist/src/platforms/kakaotalk/protocol/types.d.ts.map +1 -1
  28. package/dist/src/platforms/kakaotalk/protocol/types.js.map +1 -1
  29. package/dist/src/platforms/kakaotalk/types.d.ts +1 -0
  30. package/dist/src/platforms/kakaotalk/types.d.ts.map +1 -1
  31. package/dist/src/platforms/kakaotalk/types.js.map +1 -1
  32. package/dist/src/platforms/teams/client.d.ts +4 -4
  33. package/dist/src/platforms/teams/client.d.ts.map +1 -1
  34. package/dist/src/platforms/teams/client.js +14 -14
  35. package/dist/src/platforms/teams/client.js.map +1 -1
  36. package/dist/src/platforms/teams/commands/chat.d.ts +2 -0
  37. package/dist/src/platforms/teams/commands/chat.d.ts.map +1 -1
  38. package/dist/src/platforms/teams/commands/chat.js +7 -2
  39. package/dist/src/platforms/teams/commands/chat.js.map +1 -1
  40. package/dist/src/platforms/teams/commands/format.d.ts +3 -0
  41. package/dist/src/platforms/teams/commands/format.d.ts.map +1 -0
  42. package/dist/src/platforms/teams/commands/format.js +10 -0
  43. package/dist/src/platforms/teams/commands/format.js.map +1 -0
  44. package/dist/src/platforms/teams/commands/message.d.ts +1 -0
  45. package/dist/src/platforms/teams/commands/message.d.ts.map +1 -1
  46. package/dist/src/platforms/teams/commands/message.js +4 -1
  47. package/dist/src/platforms/teams/commands/message.js.map +1 -1
  48. package/dist/src/platforms/teams/html-sanitizer.d.ts +17 -0
  49. package/dist/src/platforms/teams/html-sanitizer.d.ts.map +1 -0
  50. package/dist/src/platforms/teams/html-sanitizer.js +120 -0
  51. package/dist/src/platforms/teams/html-sanitizer.js.map +1 -0
  52. package/dist/src/platforms/teams/index.d.ts +1 -1
  53. package/dist/src/platforms/teams/index.d.ts.map +1 -1
  54. package/dist/src/platforms/teams/index.js.map +1 -1
  55. package/dist/src/platforms/teams/types.d.ts +1 -0
  56. package/dist/src/platforms/teams/types.d.ts.map +1 -1
  57. package/dist/src/platforms/teams/types.js.map +1 -1
  58. package/dist/src/platforms/webex/client.d.ts.map +1 -1
  59. package/dist/src/platforms/webex/client.js +1 -1
  60. package/dist/src/platforms/webex/client.js.map +1 -1
  61. package/dist/src/shared/utils/markdown-to-html.d.ts.map +1 -0
  62. package/dist/src/{platforms/webex → shared/utils}/markdown-to-html.js +0 -0
  63. package/dist/src/shared/utils/markdown-to-html.js.map +1 -0
  64. package/docs/content/docs/cli/kakaotalk.mdx +10 -0
  65. package/docs/content/docs/sdk/kakaotalk.mdx +54 -0
  66. package/package.json +1 -1
  67. package/skills/agent-channeltalk/SKILL.md +1 -1
  68. package/skills/agent-channeltalkbot/SKILL.md +1 -1
  69. package/skills/agent-discord/SKILL.md +1 -1
  70. package/skills/agent-discordbot/SKILL.md +1 -1
  71. package/skills/agent-imessage/SKILL.md +1 -1
  72. package/skills/agent-instagram/SKILL.md +1 -1
  73. package/skills/agent-kakaotalk/SKILL.md +27 -1
  74. package/skills/agent-kakaotalk/references/authentication.md +59 -0
  75. package/skills/agent-kakaotalk/references/common-patterns.md +8 -0
  76. package/skills/agent-line/SKILL.md +1 -1
  77. package/skills/agent-slack/SKILL.md +1 -1
  78. package/skills/agent-slackbot/SKILL.md +1 -1
  79. package/skills/agent-teams/SKILL.md +44 -2
  80. package/skills/agent-teams/references/common-patterns.md +2 -2
  81. package/skills/agent-telegram/SKILL.md +1 -1
  82. package/skills/agent-telegrambot/SKILL.md +1 -1
  83. package/skills/agent-webex/SKILL.md +1 -1
  84. package/skills/agent-webexbot/SKILL.md +1 -1
  85. package/skills/agent-wechatbot/SKILL.md +1 -1
  86. package/skills/agent-whatsapp/SKILL.md +1 -1
  87. package/skills/agent-whatsappbot/SKILL.md +1 -1
  88. package/src/platforms/kakaotalk/auth/kakao-login.ts +2 -2
  89. package/src/platforms/kakaotalk/auth/oauth-refresh.test.ts +225 -0
  90. package/src/platforms/kakaotalk/auth/oauth-refresh.ts +144 -0
  91. package/src/platforms/kakaotalk/client.test.ts +55 -0
  92. package/src/platforms/kakaotalk/client.ts +19 -2
  93. package/src/platforms/kakaotalk/index.test.ts +11 -0
  94. package/src/platforms/kakaotalk/index.ts +8 -0
  95. package/src/platforms/kakaotalk/protocol/NOTICE.md +19 -4
  96. package/src/platforms/kakaotalk/protocol/login-response.test.ts +64 -0
  97. package/src/platforms/kakaotalk/protocol/login-response.ts +40 -0
  98. package/src/platforms/kakaotalk/protocol/session.ts +29 -21
  99. package/src/platforms/kakaotalk/protocol/types.ts +1 -0
  100. package/src/platforms/kakaotalk/types.ts +1 -0
  101. package/src/platforms/teams/client.test.ts +127 -0
  102. package/src/platforms/teams/client.ts +27 -14
  103. package/src/platforms/teams/commands/chat.test.ts +70 -1
  104. package/src/platforms/teams/commands/chat.ts +15 -4
  105. package/src/platforms/teams/commands/format.ts +12 -0
  106. package/src/platforms/teams/commands/message.test.ts +56 -0
  107. package/src/platforms/teams/commands/message.ts +6 -2
  108. package/src/platforms/teams/html-sanitizer.test.ts +123 -0
  109. package/src/platforms/teams/html-sanitizer.ts +134 -0
  110. package/src/platforms/teams/index.ts +1 -0
  111. package/src/platforms/teams/types.ts +2 -0
  112. package/src/platforms/webex/client.ts +2 -1
  113. package/src/{platforms/webex → shared/utils}/markdown-to-html.test.ts +7 -0
  114. package/src/{platforms/webex → shared/utils}/markdown-to-html.ts +0 -0
  115. package/dist/src/platforms/webex/markdown-to-html.d.ts.map +0 -1
  116. package/dist/src/platforms/webex/markdown-to-html.js.map +0 -1
  117. /package/dist/src/{platforms/webex → shared/utils}/markdown-to-html.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-to-html.js","sourceRoot":"","sources":["../../../../src/shared/utils/markdown-to-html.ts"],"names":[],"mappings":"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"}
@@ -94,6 +94,16 @@ agent-kakaotalk auth logout
94
94
  agent-kakaotalk auth logout --account <account-id>
95
95
  ```
96
96
 
97
+ `auth status` checks stored credential state only. Kakao validates the access token when a command opens a LOCO session. If the token has expired or been revoked, commands retain the existing error output shape with a specific message:
98
+
99
+ ```json
100
+ {
101
+ "error": "KakaoTalk LOGINLIST invalid access token (status -950)"
102
+ }
103
+ ```
104
+
105
+ Run `agent-kakaotalk auth login` before retrying. Other explicit server rejections identify the returned status in the error message. Connection closes and timeouts remain transport failures and keep their existing messages.
106
+
97
107
  ## Multi-Account
98
108
 
99
109
  KakaoTalk supports multiple accounts. Each login stores credentials separately, keyed by user ID.
@@ -32,6 +32,28 @@ import { KakaoTalkClient } from 'agent-messenger/kakaotalk'
32
32
  const client = await new KakaoTalkClient().login()
33
33
  ```
34
34
 
35
+ ### Login errors
36
+
37
+ The first operation opens the LOCO session lazily. If Kakao rejects `LOGINLIST`, `KakaoTalkError` preserves a typed code and safe numeric server status:
38
+
39
+ ```typescript
40
+ import { KakaoTalkError } from 'agent-messenger/kakaotalk'
41
+
42
+ try {
43
+ await client.getChats()
44
+ } catch (error) {
45
+ if (error instanceof KakaoTalkError && error.code === 'invalid_access_token') {
46
+ console.error(error.serverStatus) // -950
47
+ }
48
+ }
49
+ ```
50
+
51
+ - `invalid_access_token`: Kakao returned status `-950`; re-authenticate before retrying.
52
+ - `login_rejected`: Kakao returned another explicit authentication rejection.
53
+ - `login_failed`: booking, check-in, socket close, timeout, or another transport/protocol failure.
54
+
55
+ Rejected authentication closes the provisional session and never continues to `LCHATLIST` or sync-state work.
56
+
35
57
  ### Chat Rooms
36
58
 
37
59
  ```typescript
@@ -172,6 +194,38 @@ client.close()
172
194
 
173
195
  Once closed, any subsequent method call throws a `KakaoTalkError` with code `client_closed`. Create a new client if you need to reconnect.
174
196
 
197
+ ## OAuth Token Refresh
198
+
199
+ `refreshKakaoOAuthToken()` explicitly exchanges a stored Android sub-device refresh token for a new token set. It is stateless and caller-invoked: it does not update credential files, retry `LOGINLIST`, or run automatically after an authentication failure.
200
+
201
+ ```typescript
202
+ import { refreshKakaoOAuthToken } from 'agent-messenger/kakaotalk'
203
+
204
+ if (!account.refresh_token) throw new Error('No KakaoTalk refresh token')
205
+
206
+ const refreshed = await refreshKakaoOAuthToken(
207
+ {
208
+ accessToken: account.oauth_token,
209
+ refreshToken: account.refresh_token,
210
+ deviceUuid: account.device_uuid,
211
+ },
212
+ { timeoutMs: 15_000 },
213
+ )
214
+
215
+ const nextAccount = {
216
+ ...account,
217
+ oauth_token: refreshed.accessToken,
218
+ refresh_token: refreshed.refreshToken,
219
+ updated_at: new Date().toISOString(),
220
+ }
221
+
222
+ await persistAccountAtomically(nextAccount) // Application-defined durable storage
223
+ ```
224
+
225
+ The result always includes both tokens. Kakao may rotate the refresh token, so persist the entire returned token set atomically before the process exits or another client uses the credential. Never refresh a copied production credential and discard the result.
226
+
227
+ Failures throw `KakaoOAuthRefreshError` with a safe `code` and optional `serverStatus` or `httpStatus`; token values and raw response bodies are not retained. This uses an undocumented Android endpoint and may change without notice.
228
+
175
229
  ## KakaoTalkListener
176
230
 
177
231
  Real-time event listener that receives push events from KakaoTalk via the LOCO protocol. Subscribes to the underlying client's LOCO session.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-messenger",
3
- "version": "2.34.0",
3
+ "version": "2.36.0",
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.34.0
4
+ version: 2.36.0
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.34.0
4
+ version: 2.36.0
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.34.0
4
+ version: 2.36.0
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.34.0
4
+ version: 2.36.0
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.34.0
4
+ version: 2.36.0
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.34.0
4
+ version: 2.36.0
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.34.0
4
+ version: 2.36.0
5
5
  allowed-tools: Bash(agent-kakaotalk:*)
6
6
  metadata:
7
7
  openclaw:
@@ -599,6 +599,32 @@ if (!account) throw new Error('Not authenticated')
599
599
  const client = await new KakaoTalkClient().login({ oauthToken: account.oauth_token, userId: account.user_id, deviceUuid: account.device_uuid })
600
600
  ```
601
601
 
602
+ For caller-managed token renewal, use the explicit SDK primitive:
603
+
604
+ ```typescript
605
+ import { refreshKakaoOAuthToken } from 'agent-messenger/kakaotalk'
606
+
607
+ if (!account.refresh_token) throw new Error('No KakaoTalk refresh token')
608
+
609
+ const refreshed = await refreshKakaoOAuthToken({
610
+ accessToken: account.oauth_token,
611
+ refreshToken: account.refresh_token,
612
+ deviceUuid: account.device_uuid,
613
+ })
614
+
615
+ const nextAccount = {
616
+ ...account,
617
+ oauth_token: refreshed.accessToken,
618
+ refresh_token: refreshed.refreshToken,
619
+ updated_at: new Date().toISOString(),
620
+ }
621
+
622
+ // Persist nextAccount atomically before another client uses this credential.
623
+ // The refresh primitive intentionally does not write credential files or retry login.
624
+ ```
625
+
626
+ Kakao can rotate the refresh token. Never refresh a copied production credential and discard the returned token set. See [references/authentication.md](references/authentication.md) for error codes and the controlled canary procedure.
627
+
602
628
  ### Example
603
629
 
604
630
  ```typescript
@@ -77,6 +77,22 @@ Re-run with `--device-type pc --force` or `--device-type tablet --force`.
77
77
 
78
78
  Check email/password and try again.
79
79
 
80
+ ### Runtime authentication failures
81
+
82
+ Stored credentials are validated by Kakao only when a command opens a LOCO session. `auth status` confirms that a credential is present; it does not prove that the access token is still accepted by the server.
83
+
84
+ An expired or revoked access token keeps the existing CLI error shape and reports the server status in the message:
85
+
86
+ ```json
87
+ {
88
+ "error": "KakaoTalk LOGINLIST invalid access token (status -950)"
89
+ }
90
+ ```
91
+
92
+ Run `agent-kakaotalk auth login` to replace the credential before retrying the command. Other non-zero Kakao authentication responses preserve the returned status in the error message.
93
+
94
+ A socket close, timeout, or other interrupted `LOGINLIST` remains a transport failure and must not be treated as an invalid token. Rejected authentication closes the provisional connection and does not continue to `LCHATLIST` or sync-state work.
95
+
80
96
  ### Device Slots
81
97
 
82
98
  KakaoTalk allows these simultaneous sessions:
@@ -246,6 +262,49 @@ KakaoTalk OAuth tokens can expire or be invalidated when:
246
262
  - The token naturally expires
247
263
  - KakaoTalk's server revokes the session
248
264
 
265
+ ### Explicit SDK Refresh
266
+
267
+ The SDK exports `refreshKakaoOAuthToken()` for callers that need to exchange a stored Android sub-device refresh token for a new token set:
268
+
269
+ ```typescript
270
+ import { refreshKakaoOAuthToken } from 'agent-messenger/kakaotalk'
271
+
272
+ const refreshed = await refreshKakaoOAuthToken({
273
+ accessToken: account.oauth_token,
274
+ refreshToken: account.refresh_token,
275
+ deviceUuid: account.device_uuid,
276
+ })
277
+ ```
278
+
279
+ This is an explicit, stateless operation. It does not retry `LOGINLIST`, update the credentials file, or run automatically when a command receives `invalid_access_token`.
280
+
281
+ The result always contains an access token and refresh token. Kakao may rotate the refresh token; if the response omits it, the SDK preserves the input refresh token in the returned value. The caller must persist both returned tokens atomically before the process exits or another client uses the same credential.
282
+
283
+ Do not refresh a copied production credential and discard the result. A successful refresh can invalidate the previously stored refresh token on the server.
284
+
285
+ #### Controlled Live Canary
286
+
287
+ Use a dedicated test account and device when possible. If a production credential is the only available canary, use this sequence:
288
+
289
+ 1. Stop every collector, CLI process, and service that can use the credential. Confirm there is only one refresh caller.
290
+ 2. Prepare an atomic persistence path before making the request. Credential files must keep `0600` permissions.
291
+ 3. Call `refreshKakaoOAuthToken()` exactly once. Record only success, token-rotation booleans, and expiry metadata — never tokens, authorization headers, account IDs, or the raw response.
292
+ 4. If a token set is returned, immediately persist both returned tokens with a temporary file, `fsync`, and atomic rename. Do not let the process exit or another client start first.
293
+ 5. Start a fresh process, reload the persisted credential, and verify that `LOGINLIST` and a minimal chat-list request succeed.
294
+ 6. Scan application logs and temporary files for the old and new token values, confirm the credential still has `0600` permissions, then restart the stopped caller.
295
+
296
+ If the refresh request fails before returning a token set, leave the stored credential unchanged and stop the canary. Do not loop blindly: an ambiguous network failure may have occurred after server-side rotation, in which case re-authentication can be required.
297
+
298
+ Failures throw `KakaoOAuthRefreshError` with safe metadata only:
299
+
300
+ - `refresh_credentials_missing` — an access token, refresh token, or device UUID was not provided.
301
+ - `refresh_rejected` — Kakao returned an explicit non-zero status; inspect `serverStatus`.
302
+ - `refresh_http_error` — the endpoint returned an HTTP failure without a Kakao status; inspect `httpStatus`.
303
+ - `refresh_timeout` / `refresh_request_failed` — the request did not complete.
304
+ - `refresh_malformed_response` — a successful response did not contain a usable access token.
305
+
306
+ Token values, authorization headers, and raw response bodies are not included in these errors. The endpoint is an undocumented Android API and can change without notice.
307
+
249
308
  ### Re-authentication
250
309
 
251
310
  If commands start failing with auth errors:
@@ -497,6 +497,14 @@ The `deviceType` determines the LOCO protocol identity: `'tablet'` sends `os: 'a
497
497
 
498
498
  Reconnect only triggers on actual session death. Operation-level errors (invalid chat ID, server rejection, etc.) are thrown immediately without retry, so side effects like `sendMessage` or `sendAttachment` are never duplicated.
499
499
 
500
+ Initial `LOGINLIST` failures are classified separately from reconnectable session death:
501
+
502
+ - `invalid_access_token` with `serverStatus === -950`: the stored Kakao access token has expired or been revoked. Re-authenticate before retrying.
503
+ - `login_rejected`: Kakao explicitly rejected authentication for another server status. Inspect `serverStatus` and the device-slot/account state.
504
+ - `login_failed`: booking, check-in, socket close, timeout, or another transport/protocol interruption. This is not proof that the token is invalid.
505
+
506
+ Rejected authentication closes the provisional session before it can be adopted. Callers must not continue to `LCHATLIST` or other LOCO operations after either authentication error.
507
+
500
508
  ## See Also
501
509
 
502
510
  - [Authentication Guide](authentication.md) - Setting up credentials
@@ -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.34.0
4
+ version: 2.36.0
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.34.0
4
+ version: 2.36.0
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.34.0
4
+ version: 2.36.0
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.34.0
4
+ version: 2.36.0
5
5
  allowed-tools: Bash(agent-teams:*)
6
6
  metadata:
7
7
  openclaw:
@@ -205,6 +205,11 @@ Output includes the authenticated user's identity information.
205
205
  agent-teams message send <team-id> <channel-id> <content>
206
206
  agent-teams message send <team-id> 19:abc123@thread.tacv2 "Hello world"
207
207
 
208
+ # Send a rich-text message written in markdown
209
+ agent-teams message send <team-id> <channel-id> "## Deploy done
210
+ - service A
211
+ - service B" --format markdown
212
+
208
213
  # List messages
209
214
  agent-teams message list <team-id> <channel-id>
210
215
  agent-teams message list <team-id> 19:abc123@thread.tacv2 --limit 50
@@ -249,15 +254,52 @@ agent-teams chat history <chat-id> --limit 100
249
254
 
250
255
  # Send a message to a chat
251
256
  agent-teams chat send <chat-id> "Hello"
257
+ agent-teams chat send <chat-id> "**Important**: see the [board](https://example.com)" --format markdown
252
258
 
253
259
  # Edit one of your own chat messages
254
260
  agent-teams chat edit <chat-id> <message-id> "Updated text"
261
+ agent-teams chat edit <chat-id> <message-id> "Fixed \`bug\`" --format markdown
255
262
  ```
256
263
 
257
264
  Chat IDs look like `19:guid1_guid2@unq.gbl.spaces` (1:1) or `19:guid@thread.tacv2` (group). Get them from `chat list`. The `48:notes` chat (`type: self`) is your personal "to me" notes thread.
258
265
 
259
266
  `chat edit` only works on your own messages, and only for chats — Teams channel messages are not editable through this API.
260
267
 
268
+ ### Message Formatting
269
+
270
+ `message send`, `chat send`, and `chat edit` accept `--format <text|markdown|html>` (default `text`).
271
+
272
+ In `text` mode the content is HTML-escaped, so `<`, `>`, and `&` are sent literally.
273
+
274
+ In `markdown` mode the content is converted to HTML before sending. Supported syntax:
275
+
276
+ | Syntax | Renders as |
277
+ | --- | --- |
278
+ | `# Heading` through `#### Heading` | headings |
279
+ | `##### Heading`, `###### Heading` | **not supported** — indistinguishable from body text |
280
+ | `**bold**`, `_italic_`, `***bold italic***` | emphasis |
281
+ | `` `inline code` `` | inline code |
282
+ | triple-backtick fence | fenced code block, without syntax highlighting |
283
+ | `- item` | bulleted list |
284
+ | `1. item` | numbered list |
285
+ | `> quote` | blockquote |
286
+ | `[label](https://example.com)` | link |
287
+ | `---` | horizontal rule |
288
+
289
+ Heading levels 5 and 6 are unusable: the Teams client renders `<h5>` and `<h6>` at body size, so they are indistinguishable from surrounding text. Only go as deep as `####`. Fenced code blocks render as monospaced blocks but are never syntax-highlighted — a language tag (` ```ts `) is accepted and then ignored. Both behaviors were verified against a live account.
290
+
291
+ Links are restricted to `http:`, `https:`, `mailto:`, root-relative (`/`), and anchor (`#`) URLs; anything else renders as plain text.
292
+
293
+ In `html` mode the content is filtered through a tag whitelist rather than sent verbatim. Use it when you need Teams-specific markup that markdown cannot express — most commonly @mentions:
294
+
295
+ ```bash
296
+ agent-teams message send <team-id> <channel-id> "Hey <at id=\"29:abc\">John</at>, build is ready" --format html
297
+ ```
298
+
299
+ Allowed tags: `at`, `a`, `b`, `i`, `u`, `s`, `strong`, `em`, `code`, `pre`, `br`, `p`, `ul`, `ol`, `li`, `blockquote`, `h1`–`h6`, `hr`. `<at>` only keeps its `id` attribute; `<a>` only keeps `href`, and only when it matches the same URL whitelist as markdown mode; every other tag keeps no attributes at all. Anything not on the list — `<script>`, `<img>`, `on*` event attributes, malformed or unrecognized tags — is escaped or stripped rather than passed through.
300
+
301
+ The whitelist limits the blast radius, but it does not make the mode safe for arbitrary input: only pass content you construct yourself. Untrusted input belongs in `text` mode.
302
+
261
303
  ### Team Commands
262
304
 
263
305
  ```bash
@@ -385,7 +427,7 @@ agent-teams channel list --pretty
385
427
  | Channel identifiers | UUID format (19:xxx@thread.tacv2) | Snowflake IDs | Channel name or ID |
386
428
  | Token storage | Cookies SQLite | LevelDB | LevelDB |
387
429
  | Token expiry | **60-90 minutes** | Rarely expires | Rarely expires |
388
- | Mentions | `<at id="user-id">Name</at>` | `<@user_id>` | `<@USER_ID>` |
430
+ | Mentions | `<at id="user-id">Name</at>` (needs `--format html`) | `<@user_id>` | `<@USER_ID>` |
389
431
 
390
432
  **Important**: Teams uses UUID-style channel IDs (like `19:abc123@thread.tacv2`). You cannot use channel names directly - use `channel list` to find IDs first.
391
433
 
@@ -279,12 +279,12 @@ if [ -z "$USER_ID" ] || [ "$USER_ID" = "null" ]; then
279
279
  fi
280
280
 
281
281
  # Send message with mention (Teams format)
282
- agent-teams message send "$TEAM_ID" "$CHANNEL_ID" "Hey <at id=\"$USER_ID\">$USER_NAME</at>, the build is ready for review!"
282
+ agent-teams message send "$TEAM_ID" "$CHANNEL_ID" "Hey <at id=\"$USER_ID\">$USER_NAME</at>, the build is ready for review!" --format html
283
283
  ```
284
284
 
285
285
  **When to use**: Notifications, task assignments, code review requests.
286
286
 
287
- **Note**: Teams mentions use format `<at id="USER_ID">Display Name</at>`.
287
+ **Note**: Teams mentions use format `<at id="USER_ID">Display Name</at>` and require `--format html` — in the default `text` mode the tags are escaped and render literally.
288
288
 
289
289
  ## Pattern 8: Reaction-Based Workflow
290
290
 
@@ -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.34.0
4
+ version: 2.36.0
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.34.0
4
+ version: 2.36.0
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.34.0
4
+ version: 2.36.0
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.34.0
4
+ version: 2.36.0
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.34.0
4
+ version: 2.36.0
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.34.0
4
+ version: 2.36.0
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.34.0
4
+ version: 2.36.0
5
5
  allowed-tools: Bash(agent-whatsappbot:*)
6
6
  metadata:
7
7
  openclaw:
@@ -7,8 +7,8 @@ import type { KakaoDeviceType, KakaoLoginResult } from '../types'
7
7
  const ANDROID_APP_VERSION = '25.9.2'
8
8
  const ANDROID_OS_VERSION = '13'
9
9
  const ANDROID_API_LEVEL = '33'
10
- const ANDROID_AGENT = `android/${ANDROID_APP_VERSION}/ko`
11
- const ANDROID_USER_AGENT = `KT/${ANDROID_APP_VERSION} An/${ANDROID_OS_VERSION} ko`
10
+ export const ANDROID_AGENT = `android/${ANDROID_APP_VERSION}/ko`
11
+ export const ANDROID_USER_AGENT = `KT/${ANDROID_APP_VERSION} An/${ANDROID_OS_VERSION} ko`
12
12
  const ANDROID_LOGIN_URL = 'https://katalk.kakao.com/android/account/login.json'
13
13
  const ANDROID_PASSCODE_URL = 'https://katalk.kakao.com/android/account/passcodeLogin/generate'
14
14
  const ANDROID_REGISTER_URL = 'https://katalk.kakao.com/android/account/passcodeLogin/registerDevice'