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.
- package/.claude-plugin/plugin.json +1 -1
- package/dist/package.json +1 -1
- package/dist/src/platforms/kakaotalk/auth/kakao-login.d.ts +2 -0
- package/dist/src/platforms/kakaotalk/auth/kakao-login.d.ts.map +1 -1
- package/dist/src/platforms/kakaotalk/auth/kakao-login.js +2 -2
- package/dist/src/platforms/kakaotalk/auth/kakao-login.js.map +1 -1
- package/dist/src/platforms/kakaotalk/auth/oauth-refresh.d.ts +28 -0
- package/dist/src/platforms/kakaotalk/auth/oauth-refresh.d.ts.map +1 -0
- package/dist/src/platforms/kakaotalk/auth/oauth-refresh.js +100 -0
- package/dist/src/platforms/kakaotalk/auth/oauth-refresh.js.map +1 -0
- package/dist/src/platforms/kakaotalk/client.d.ts +2 -0
- package/dist/src/platforms/kakaotalk/client.d.ts.map +1 -1
- package/dist/src/platforms/kakaotalk/client.js +14 -1
- package/dist/src/platforms/kakaotalk/client.js.map +1 -1
- package/dist/src/platforms/kakaotalk/index.d.ts +3 -1
- package/dist/src/platforms/kakaotalk/index.d.ts.map +1 -1
- package/dist/src/platforms/kakaotalk/index.js +1 -0
- package/dist/src/platforms/kakaotalk/index.js.map +1 -1
- package/dist/src/platforms/kakaotalk/protocol/login-response.d.ts +9 -0
- package/dist/src/platforms/kakaotalk/protocol/login-response.d.ts.map +1 -0
- package/dist/src/platforms/kakaotalk/protocol/login-response.js +32 -0
- package/dist/src/platforms/kakaotalk/protocol/login-response.js.map +1 -0
- package/dist/src/platforms/kakaotalk/protocol/session.d.ts.map +1 -1
- package/dist/src/platforms/kakaotalk/protocol/session.js +29 -20
- package/dist/src/platforms/kakaotalk/protocol/session.js.map +1 -1
- package/dist/src/platforms/kakaotalk/protocol/types.d.ts +1 -0
- package/dist/src/platforms/kakaotalk/protocol/types.d.ts.map +1 -1
- package/dist/src/platforms/kakaotalk/protocol/types.js.map +1 -1
- package/dist/src/platforms/kakaotalk/types.d.ts +1 -0
- package/dist/src/platforms/kakaotalk/types.d.ts.map +1 -1
- package/dist/src/platforms/kakaotalk/types.js.map +1 -1
- package/dist/src/platforms/teams/client.d.ts +4 -4
- package/dist/src/platforms/teams/client.d.ts.map +1 -1
- package/dist/src/platforms/teams/client.js +14 -14
- package/dist/src/platforms/teams/client.js.map +1 -1
- package/dist/src/platforms/teams/commands/chat.d.ts +2 -0
- package/dist/src/platforms/teams/commands/chat.d.ts.map +1 -1
- package/dist/src/platforms/teams/commands/chat.js +7 -2
- package/dist/src/platforms/teams/commands/chat.js.map +1 -1
- package/dist/src/platforms/teams/commands/format.d.ts +3 -0
- package/dist/src/platforms/teams/commands/format.d.ts.map +1 -0
- package/dist/src/platforms/teams/commands/format.js +10 -0
- package/dist/src/platforms/teams/commands/format.js.map +1 -0
- package/dist/src/platforms/teams/commands/message.d.ts +1 -0
- package/dist/src/platforms/teams/commands/message.d.ts.map +1 -1
- package/dist/src/platforms/teams/commands/message.js +4 -1
- package/dist/src/platforms/teams/commands/message.js.map +1 -1
- package/dist/src/platforms/teams/html-sanitizer.d.ts +17 -0
- package/dist/src/platforms/teams/html-sanitizer.d.ts.map +1 -0
- package/dist/src/platforms/teams/html-sanitizer.js +120 -0
- package/dist/src/platforms/teams/html-sanitizer.js.map +1 -0
- package/dist/src/platforms/teams/index.d.ts +1 -1
- package/dist/src/platforms/teams/index.d.ts.map +1 -1
- package/dist/src/platforms/teams/index.js.map +1 -1
- package/dist/src/platforms/teams/types.d.ts +1 -0
- package/dist/src/platforms/teams/types.d.ts.map +1 -1
- package/dist/src/platforms/teams/types.js.map +1 -1
- package/dist/src/platforms/webex/client.d.ts.map +1 -1
- package/dist/src/platforms/webex/client.js +1 -1
- package/dist/src/platforms/webex/client.js.map +1 -1
- package/dist/src/shared/utils/markdown-to-html.d.ts.map +1 -0
- package/dist/src/{platforms/webex → shared/utils}/markdown-to-html.js +0 -0
- package/dist/src/shared/utils/markdown-to-html.js.map +1 -0
- package/docs/content/docs/cli/kakaotalk.mdx +10 -0
- package/docs/content/docs/sdk/kakaotalk.mdx +54 -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-kakaotalk/SKILL.md +27 -1
- package/skills/agent-kakaotalk/references/authentication.md +59 -0
- package/skills/agent-kakaotalk/references/common-patterns.md +8 -0
- 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 +44 -2
- package/skills/agent-teams/references/common-patterns.md +2 -2
- 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/kakaotalk/auth/kakao-login.ts +2 -2
- package/src/platforms/kakaotalk/auth/oauth-refresh.test.ts +225 -0
- package/src/platforms/kakaotalk/auth/oauth-refresh.ts +144 -0
- package/src/platforms/kakaotalk/client.test.ts +55 -0
- package/src/platforms/kakaotalk/client.ts +19 -2
- package/src/platforms/kakaotalk/index.test.ts +11 -0
- package/src/platforms/kakaotalk/index.ts +8 -0
- package/src/platforms/kakaotalk/protocol/NOTICE.md +19 -4
- package/src/platforms/kakaotalk/protocol/login-response.test.ts +64 -0
- package/src/platforms/kakaotalk/protocol/login-response.ts +40 -0
- package/src/platforms/kakaotalk/protocol/session.ts +29 -21
- package/src/platforms/kakaotalk/protocol/types.ts +1 -0
- package/src/platforms/kakaotalk/types.ts +1 -0
- package/src/platforms/teams/client.test.ts +127 -0
- package/src/platforms/teams/client.ts +27 -14
- package/src/platforms/teams/commands/chat.test.ts +70 -1
- package/src/platforms/teams/commands/chat.ts +15 -4
- package/src/platforms/teams/commands/format.ts +12 -0
- package/src/platforms/teams/commands/message.test.ts +56 -0
- package/src/platforms/teams/commands/message.ts +6 -2
- package/src/platforms/teams/html-sanitizer.test.ts +123 -0
- package/src/platforms/teams/html-sanitizer.ts +134 -0
- package/src/platforms/teams/index.ts +1 -0
- package/src/platforms/teams/types.ts +2 -0
- package/src/platforms/webex/client.ts +2 -1
- package/src/{platforms/webex → shared/utils}/markdown-to-html.test.ts +7 -0
- package/src/{platforms/webex → shared/utils}/markdown-to-html.ts +0 -0
- package/dist/src/platforms/webex/markdown-to-html.d.ts.map +0 -1
- package/dist/src/platforms/webex/markdown-to-html.js.map +0 -1
- /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.
|
|
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.
|
|
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-kakaotalk
|
|
3
3
|
description: Interact with KakaoTalk - send messages, read chats, manage conversations
|
|
4
|
-
version: 2.
|
|
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-teams
|
|
3
3
|
description: Interact with Microsoft Teams - send messages, read channels, manage reactions
|
|
4
|
-
version: 2.
|
|
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>`
|
|
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-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.36.0
|
|
5
5
|
allowed-tools: Bash(agent-webexbot:*)
|
|
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'
|