agent-messenger 2.24.0 → 2.25.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 (67) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.github/workflows/ci.yml +4 -0
  3. package/bun.lock +0 -71
  4. package/dist/package.json +4 -4
  5. package/dist/src/platforms/kakaotalk/token-extractor.d.ts.map +1 -1
  6. package/dist/src/platforms/kakaotalk/token-extractor.js +11 -38
  7. package/dist/src/platforms/kakaotalk/token-extractor.js.map +1 -1
  8. package/dist/src/platforms/slack/commands/auth.d.ts.map +1 -1
  9. package/dist/src/platforms/slack/commands/auth.js +32 -5
  10. package/dist/src/platforms/slack/commands/auth.js.map +1 -1
  11. package/dist/src/platforms/slack/ensure-auth.d.ts +1 -0
  12. package/dist/src/platforms/slack/ensure-auth.d.ts.map +1 -1
  13. package/dist/src/platforms/slack/ensure-auth.js +47 -0
  14. package/dist/src/platforms/slack/ensure-auth.js.map +1 -1
  15. package/dist/src/platforms/slack/token-extractor.d.ts.map +1 -1
  16. package/dist/src/platforms/slack/token-extractor.js +5 -11
  17. package/dist/src/platforms/slack/token-extractor.js.map +1 -1
  18. package/dist/src/platforms/webex/client.d.ts +1 -0
  19. package/dist/src/platforms/webex/client.d.ts.map +1 -1
  20. package/dist/src/platforms/webex/client.js +17 -1
  21. package/dist/src/platforms/webex/client.js.map +1 -1
  22. package/dist/src/platforms/webex/commands/message.d.ts +4 -0
  23. package/dist/src/platforms/webex/commands/message.d.ts.map +1 -1
  24. package/dist/src/platforms/webex/commands/message.js +16 -1
  25. package/dist/src/platforms/webex/commands/message.js.map +1 -1
  26. package/dist/src/shared/chromium/cookie-reader.d.ts.map +1 -1
  27. package/dist/src/shared/chromium/cookie-reader.js +4 -19
  28. package/dist/src/shared/chromium/cookie-reader.js.map +1 -1
  29. package/dist/src/shared/sqlite.d.ts +10 -0
  30. package/dist/src/shared/sqlite.d.ts.map +1 -0
  31. package/dist/src/shared/sqlite.js +46 -0
  32. package/dist/src/shared/sqlite.js.map +1 -0
  33. package/docs/content/docs/cli/webex.mdx +7 -0
  34. package/docs/content/docs/sdk/webex.mdx +7 -0
  35. package/package.json +4 -4
  36. package/skills/agent-channeltalk/SKILL.md +1 -1
  37. package/skills/agent-channeltalkbot/SKILL.md +1 -1
  38. package/skills/agent-discord/SKILL.md +1 -1
  39. package/skills/agent-discordbot/SKILL.md +1 -1
  40. package/skills/agent-instagram/SKILL.md +1 -1
  41. package/skills/agent-kakaotalk/SKILL.md +1 -1
  42. package/skills/agent-line/SKILL.md +1 -1
  43. package/skills/agent-slack/SKILL.md +1 -1
  44. package/skills/agent-slackbot/SKILL.md +1 -1
  45. package/skills/agent-teams/SKILL.md +1 -1
  46. package/skills/agent-telegram/SKILL.md +1 -1
  47. package/skills/agent-telegrambot/SKILL.md +1 -1
  48. package/skills/agent-webex/SKILL.md +6 -1
  49. package/skills/agent-webexbot/SKILL.md +1 -1
  50. package/skills/agent-wechatbot/SKILL.md +1 -1
  51. package/skills/agent-whatsapp/SKILL.md +1 -1
  52. package/skills/agent-whatsappbot/SKILL.md +1 -1
  53. package/src/platforms/channeltalk/token-extractor.test.ts +2 -2
  54. package/src/platforms/kakaotalk/token-extractor.ts +13 -36
  55. package/src/platforms/slack/commands/auth.ts +33 -5
  56. package/src/platforms/slack/ensure-auth.test.ts +130 -19
  57. package/src/platforms/slack/ensure-auth.ts +51 -0
  58. package/src/platforms/slack/token-extractor-node-test.ts +5 -3
  59. package/src/platforms/slack/token-extractor.ts +4 -11
  60. package/src/platforms/webex/client.test.ts +74 -0
  61. package/src/platforms/webex/client.ts +20 -1
  62. package/src/platforms/webex/commands/message.test.ts +29 -1
  63. package/src/platforms/webex/commands/message.ts +18 -0
  64. package/src/shared/chromium/cookie-reader-node-test.ts +70 -0
  65. package/src/shared/chromium/cookie-reader-node.test.ts +10 -0
  66. package/src/shared/chromium/cookie-reader.ts +4 -21
  67. package/src/shared/sqlite.ts +61 -0
@@ -1 +1 @@
1
- {"version":3,"file":"message.js","sourceRoot":"","sources":["../../../../../src/platforms/webex/commands/message.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"message.js","sourceRoot":"","sources":["../../../../../src/platforms/webex/commands/message.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cookie-reader.d.ts","sourceRoot":"","sources":["../../../../src/shared/chromium/cookie-reader.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B;;;OAGG;IACG,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAoBhF;;;OAGG;IACG,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAoBvF,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,YAAY;IAuCpB,OAAO,CAAC,WAAW;CAOpB"}
1
+ {"version":3,"file":"cookie-reader.d.ts","sourceRoot":"","sources":["../../../../src/shared/chromium/cookie-reader.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B;;;OAGG;IACG,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAoBhF;;;OAGG;IACG,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAoBvF,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,YAAY;IAuBpB,OAAO,CAAC,WAAW;CAOpB"}
@@ -1,8 +1,7 @@
1
1
  import { copyFileSync, existsSync, rmSync } from 'node:fs';
2
- import { createRequire } from 'node:module';
3
2
  import { tmpdir } from 'node:os';
4
3
  import { join } from 'node:path';
5
- const require = createRequire(import.meta.url);
4
+ import { openReadonlyDatabase } from '../../shared/sqlite.js';
6
5
  /**
7
6
  * Reads Chromium SQLite cookie databases with Bun/Node dual-runtime support.
8
7
  * Copies the database to a temp file to avoid lock contention when the app is running.
@@ -60,28 +59,14 @@ export class ChromiumCookieReader {
60
59
  return join(tmpdir(), `chromium-cookies-${Date.now()}-${Math.random().toString(36).slice(2)}.db`);
61
60
  }
62
61
  executeQuery(tempPath, sql, params, mode) {
63
- if (typeof globalThis.Bun !== 'undefined') {
64
- const { Database } = require('bun:sqlite');
65
- const db = new Database(tempPath, { readonly: true });
66
- try {
67
- const stmt = db.query(sql);
68
- if (mode === 'all') {
69
- return (params ? stmt.all(...params) : stmt.all());
70
- }
71
- return (params ? stmt.get(...params) : stmt.get());
72
- }
73
- finally {
74
- db.close();
75
- }
76
- }
77
- const Database = require('better-sqlite3');
78
- const db = new Database(tempPath, { readonly: true });
62
+ const db = openReadonlyDatabase(tempPath);
79
63
  try {
80
64
  const stmt = db.prepare(sql);
81
65
  if (mode === 'all') {
82
66
  return (params ? stmt.all(...params) : stmt.all());
83
67
  }
84
- return (params ? stmt.get(...params) : stmt.get());
68
+ const row = params ? stmt.get(...params) : stmt.get();
69
+ return (row ?? null);
85
70
  }
86
71
  finally {
87
72
  db.close();
@@ -1 +1 @@
1
- {"version":3,"file":"cookie-reader.js","sourceRoot":"","sources":["../../../../src/shared/chromium/cookie-reader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cookie-reader.js","sourceRoot":"","sources":["../../../../src/shared/chromium/cookie-reader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface ReadonlyStatement {
2
+ get(...params: unknown[]): unknown;
3
+ all(...params: unknown[]): unknown[];
4
+ }
5
+ export interface ReadonlyDatabase {
6
+ prepare(sql: string): ReadonlyStatement;
7
+ close(): void;
8
+ }
9
+ export declare function openReadonlyDatabase(path: string): ReadonlyDatabase;
10
+ //# sourceMappingURL=sqlite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../src/shared/sqlite.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;IAClC,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAA;CACrC;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAAA;IACvC,KAAK,IAAI,IAAI,CAAA;CACd;AAaD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAmCnE"}
@@ -0,0 +1,46 @@
1
+ import { createRequire } from 'node:module';
2
+ const require = createRequire(import.meta.url);
3
+ // Uses the runtime's built-in driver (bun:sqlite on Bun, node:sqlite on Node >= 22.13)
4
+ // to avoid a native addon dependency.
5
+ //
6
+ // Runtime quirks callers must respect (both drivers behave this way):
7
+ // - BLOB columns are returned as Uint8Array, not Buffer. Wrap with Buffer.from()
8
+ // before any Buffer-specific call (e.g. .toString('utf8'), node:crypto helpers).
9
+ // - node:sqlite throws ERR_OUT_OF_RANGE when reading an INTEGER above
10
+ // Number.MAX_SAFE_INTEGER, so never SELECT raw microsecond timestamps such as
11
+ // Chromium's *_utc columns; use them only in WHERE / ORDER BY clauses.
12
+ export function openReadonlyDatabase(path) {
13
+ if (typeof globalThis.Bun !== 'undefined') {
14
+ const { Database } = require('bun:sqlite');
15
+ return new Database(path, { readonly: true });
16
+ }
17
+ let DatabaseSync;
18
+ // node:sqlite emits a one-time ExperimentalWarning to stderr on load
19
+ // (Node < 24.15) that clutters the CLI's output. Suppress just that warning
20
+ // while loading the module, then restore the original handler.
21
+ const originalEmitWarning = process.emitWarning;
22
+ const filteredEmitWarning = (...args) => {
23
+ const [warning, second] = args;
24
+ const name = warning instanceof Error
25
+ ? warning.name
26
+ : typeof second === 'string'
27
+ ? second
28
+ : second?.type;
29
+ const message = warning instanceof Error ? warning.message : String(warning);
30
+ if (name === 'ExperimentalWarning' && message.includes('SQLite'))
31
+ return;
32
+ originalEmitWarning.apply(process, args);
33
+ };
34
+ process.emitWarning = filteredEmitWarning;
35
+ try {
36
+ DatabaseSync = require('node:sqlite').DatabaseSync;
37
+ }
38
+ catch {
39
+ throw new Error('SQLite support requires Node.js >= 22.13.0 (the built-in node:sqlite module) or Bun. Please upgrade Node.js.');
40
+ }
41
+ finally {
42
+ process.emitWarning = originalEmitWarning;
43
+ }
44
+ return new DatabaseSync(path, { readOnly: true });
45
+ }
46
+ //# sourceMappingURL=sqlite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../../src/shared/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE3C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAc9C,uFAAuF;AACvF,sCAAsC;AACtC,EAAE;AACF,sEAAsE;AACtE,iFAAiF;AACjF,mFAAmF;AACnF,sEAAsE;AACtE,gFAAgF;AAChF,yEAAyE;AACzE,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,IAAI,OAAO,UAAU,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;QAC1C,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;QAC1C,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAqB,CAAA;IACnE,CAAC;IAED,IAAI,YAAyC,CAAA;IAC7C,qEAAqE;IACrE,4EAA4E;IAC5E,+DAA+D;IAC/D,MAAM,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAA;IAC/C,MAAM,mBAAmB,GAAG,CAAC,GAAG,IAAe,EAAQ,EAAE;QACvD,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,IAAI,CAAA;QAC9B,MAAM,IAAI,GACR,OAAO,YAAY,KAAK;YACtB,CAAC,CAAC,OAAO,CAAC,IAAI;YACd,CAAC,CAAC,OAAO,MAAM,KAAK,QAAQ;gBAC1B,CAAC,CAAC,MAAM;gBACR,CAAC,CAAE,MAAwC,EAAE,IAAI,CAAA;QACvD,MAAM,OAAO,GAAG,OAAO,YAAY,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAC5E,IAAI,IAAI,KAAK,qBAAqB,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OACjE;QAAC,mBAAyD,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAClF,CAAC,CAAA;IACD,OAAO,CAAC,WAAW,GAAG,mBAAiD,CAAA;IACvE,IAAI,CAAC;QACH,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,YAAY,CAAA;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,8GAA8G,CAC/G,CAAA;IACH,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,WAAW,GAAG,mBAAmB,CAAA;IAC3C,CAAC;IAED,OAAO,IAAI,YAAY,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;AACnD,CAAC"}
@@ -193,8 +193,15 @@ agent-webex message edit msg123 abc123 "Updated text" --markdown
193
193
  # Delete a message
194
194
  agent-webex message delete <message-id>
195
195
  agent-webex message delete <message-id> --force
196
+
197
+ # Send a typing indicator ("…is typing")
198
+ agent-webex message typing <space-id>
199
+ # Clear the typing indicator
200
+ agent-webex message typing <space-id> --stop
196
201
  ```
197
202
 
203
+ Typing indicators require an extracted (browser) or password token — bot and OAuth tokens are not supported. The indicator is ephemeral and auto-expires after a few seconds.
204
+
198
205
  ### Member Commands
199
206
 
200
207
  ```bash
@@ -84,8 +84,15 @@ await client.editMessage(messageId, roomId, '**Updated**', { markdown: true })
84
84
 
85
85
  // Delete a message
86
86
  await client.deleteMessage(messageId)
87
+
88
+ // Send a typing indicator ("…is typing")
89
+ await client.setTyping(roomId)
90
+ // Clear the typing indicator
91
+ await client.setTyping(roomId, false)
87
92
  ```
88
93
 
94
+ Typing indicators are sent over Webex's internal conversation service, which the public REST API does not expose. They require an extracted (browser) or password token — bot and OAuth tokens have no device URL and throw a `WebexError`. The indicator is ephemeral and auto-expires after a few seconds, so re-send periodically to sustain it.
95
+
89
96
  ### People
90
97
 
91
98
  ```typescript
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-messenger",
3
- "version": "2.24.0",
3
+ "version": "2.25.0",
4
4
  "description": "Multi-platform messaging CLI for AI agents (Slack, Discord, Teams, Webex, Telegram, Telegram Bot, WhatsApp, LINE, Instagram, KakaoTalk, Channel Talk)",
5
5
  "repository": {
6
6
  "type": "git",
@@ -171,7 +171,6 @@
171
171
  "@hapi/boom": "^10.0.1",
172
172
  "@slack/web-api": "^6.9.0",
173
173
  "@whiskeysockets/baileys": "^7.0.0-rc.9",
174
- "better-sqlite3": "^12.0.0",
175
174
  "blessed": "^0.1.81",
176
175
  "bson": "^6.10.4",
177
176
  "classic-level": "^3.0.0",
@@ -192,7 +191,6 @@
192
191
  "zod": "^4.3.6"
193
192
  },
194
193
  "devDependencies": {
195
- "@types/better-sqlite3": "^7.6.8",
196
194
  "@types/blessed": "^0.1.27",
197
195
  "@types/bun": "latest",
198
196
  "@types/hapi__boom": "^9.0.1",
@@ -211,9 +209,11 @@
211
209
  "koffi": "^2.15.2",
212
210
  "prebuilt-tdlib": "0.1008062.2"
213
211
  },
212
+ "engines": {
213
+ "node": ">=22.13.0"
214
+ },
214
215
  "trustedDependencies": [
215
216
  "@whiskeysockets/baileys",
216
- "better-sqlite3",
217
217
  "classic-level",
218
218
  "protobufjs"
219
219
  ]
@@ -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.24.0
4
+ version: 2.25.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.24.0
4
+ version: 2.25.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.24.0
4
+ version: 2.25.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.24.0
4
+ version: 2.25.0
5
5
  allowed-tools: Bash(agent-discordbot:*)
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.24.0
4
+ version: 2.25.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.24.0
4
+ version: 2.25.0
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.24.0
4
+ version: 2.25.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.24.0
4
+ version: 2.25.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.24.0
4
+ version: 2.25.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.24.0
4
+ version: 2.25.0
5
5
  allowed-tools: Bash(agent-teams:*)
6
6
  metadata:
7
7
  openclaw:
@@ -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.24.0
4
+ version: 2.25.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.24.0
4
+ version: 2.25.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.24.0
4
+ version: 2.25.0
5
5
  allowed-tools: Bash(agent-webex:*)
6
6
  metadata:
7
7
  openclaw:
@@ -304,6 +304,10 @@ agent-webex message delete <message-id> --force
304
304
  # Edit a message
305
305
  agent-webex message edit <message-id> <space-id> <text>
306
306
  agent-webex message edit <message-id> <space-id> "Updated text" --markdown
307
+
308
+ # Send a typing indicator (requires extracted/browser or password token)
309
+ agent-webex message typing <space-id>
310
+ agent-webex message typing <space-id> --stop
307
311
  ```
308
312
 
309
313
  ### Member Commands
@@ -467,6 +471,7 @@ See the [Webex SDK documentation](https://agent-messenger.dev/docs/sdk/webex) fo
467
471
  - No reactions / emoji support
468
472
  - No thread support
469
473
  - No message search
474
+ - Typing indicators require an extracted (browser) or password token; bot/OAuth tokens are not supported for typing
470
475
  - No voice/video or meeting support
471
476
  - No space management (create/delete spaces, roles)
472
477
 
@@ -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.24.0
4
+ version: 2.25.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.24.0
4
+ version: 2.25.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.24.0
4
+ version: 2.25.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.24.0
4
+ version: 2.25.0
5
5
  allowed-tools: Bash(agent-whatsappbot:*)
6
6
  metadata:
7
7
  openclaw:
@@ -457,8 +457,8 @@ async function createCookieDatabase(
457
457
 
458
458
  const { createRequire } = await import('node:module')
459
459
  const req = createRequire(import.meta.url)
460
- const Database = req('better-sqlite3')
461
- const db = new Database(dbPath)
460
+ const { DatabaseSync } = req('node:sqlite')
461
+ const db = new DatabaseSync(dbPath)
462
462
  db.exec('CREATE TABLE cookies (name TEXT, value TEXT, encrypted_value BLOB, host_key TEXT)')
463
463
  const statement = db.prepare('INSERT INTO cookies (name, value, encrypted_value, host_key) VALUES (?, ?, ?, ?)')
464
464
  for (const row of rows) {
@@ -1,12 +1,11 @@
1
1
  import { execSync } from 'node:child_process'
2
2
  import { copyFileSync, existsSync, readFileSync, rmSync } from 'node:fs'
3
- import { createRequire } from 'node:module'
4
3
  import { homedir, tmpdir } from 'node:os'
5
4
  import { join } from 'node:path'
6
5
 
7
- import type { ExtractedKakaoToken } from './types'
6
+ import { openReadonlyDatabase } from '@/shared/sqlite'
8
7
 
9
- const require = createRequire(import.meta.url)
8
+ import type { ExtractedKakaoToken } from './types'
10
9
 
11
10
  export class KakaoTokenExtractor {
12
11
  private platform: NodeJS.Platform
@@ -106,23 +105,12 @@ export class KakaoTokenExtractor {
106
105
  time_stamp: number
107
106
  }
108
107
 
108
+ const db = openReadonlyDatabase(dbPath)
109
109
  let rows: CacheRow[]
110
- if (typeof globalThis.Bun !== 'undefined') {
111
- const { Database } = require('bun:sqlite')
112
- const db = new Database(dbPath, { readonly: true })
113
- try {
114
- rows = db.query(sql).all() as CacheRow[]
115
- } finally {
116
- db.close()
117
- }
118
- } else {
119
- const Database = require('better-sqlite3')
120
- const db = new Database(dbPath, { readonly: true })
121
- try {
122
- rows = db.prepare(sql).all() as CacheRow[]
123
- } finally {
124
- db.close()
125
- }
110
+ try {
111
+ rows = db.prepare(sql).all() as CacheRow[]
112
+ } finally {
113
+ db.close()
126
114
  }
127
115
 
128
116
  this.debug(`Found ${rows.length} cached request(s) to kakao.com`)
@@ -166,24 +154,13 @@ export class KakaoTokenExtractor {
166
154
  `
167
155
 
168
156
  type CacheRow = { request_object: Uint8Array | Buffer | null; request_key: string }
169
- let authRows: CacheRow[]
170
157
 
171
- if (typeof globalThis.Bun !== 'undefined') {
172
- const { Database } = require('bun:sqlite')
173
- const db = new Database(dbPath, { readonly: true })
174
- try {
175
- authRows = db.query(sql).all() as CacheRow[]
176
- } finally {
177
- db.close()
178
- }
179
- } else {
180
- const Database = require('better-sqlite3')
181
- const db = new Database(dbPath, { readonly: true })
182
- try {
183
- authRows = db.prepare(sql).all() as CacheRow[]
184
- } finally {
185
- db.close()
186
- }
158
+ const db = openReadonlyDatabase(dbPath)
159
+ let authRows: CacheRow[]
160
+ try {
161
+ authRows = db.prepare(sql).all() as CacheRow[]
162
+ } finally {
163
+ db.close()
187
164
  }
188
165
 
189
166
  for (const row of authRows) {
@@ -8,7 +8,8 @@ import { debug } from '@/shared/utils/stderr'
8
8
 
9
9
  import { SlackClient, SlackError } from '../client'
10
10
  import { CredentialManager } from '../credential-manager'
11
- import { refreshCookie, tryWebTokenRefresh } from '../ensure-auth'
11
+ import { refreshCookie, refreshKnownWorkspaceDomains, tryWebTokenRefresh } from '../ensure-auth'
12
+ import type { RefreshResult } from '../ensure-auth'
12
13
  import { loginWithQr } from '../qr-http-login'
13
14
  import { type ExtractedWorkspace, TokenExtractor } from '../token-extractor'
14
15
 
@@ -80,6 +81,8 @@ async function extractAction(options: {
80
81
 
81
82
  const validWorkspaces = []
82
83
  const failureReasons: string[] = []
84
+ const resolvedTeamIds = new Set<string>()
85
+ const refreshCache = new Map<string, RefreshResult | null>()
83
86
  for (const ws of workspaces) {
84
87
  if (options.debug) {
85
88
  debug(`[debug] Testing credentials for ${ws.workspace_id}...`)
@@ -88,10 +91,14 @@ async function extractAction(options: {
88
91
  try {
89
92
  const client = await new SlackClient().login({ token: ws.token, cookie: ws.cookie })
90
93
  const authInfo = await client.testAuth()
94
+ if (!authInfo.team_id) throw new SlackError('testAuth returned empty team_id', 'invalid_auth')
91
95
  ws.workspace_id = authInfo.team_id
92
96
  ws.workspace_name = authInfo.team || ws.workspace_name
93
- validWorkspaces.push(ws)
94
- await credManager.setWorkspace(ws)
97
+ if (!resolvedTeamIds.has(ws.workspace_id)) {
98
+ resolvedTeamIds.add(ws.workspace_id)
99
+ validWorkspaces.push(ws)
100
+ await credManager.setWorkspace(ws)
101
+ }
95
102
 
96
103
  if (options.debug) {
97
104
  debug(`[debug] ✓ Valid: ${authInfo.team} (${authInfo.user})`)
@@ -112,11 +119,12 @@ async function extractAction(options: {
112
119
  : `${ws.workspace_id} (trying all known domains)`
113
120
  debug(`[debug] Attempting web token refresh for ${target}...`)
114
121
  }
115
- const refreshed = await tryWebTokenRefresh(ws, workspaceDomains)
116
- if (refreshed) {
122
+ const refreshed = await tryWebTokenRefresh(ws, workspaceDomains, { resolvedTeamIds, refreshCache })
123
+ if (refreshed && !resolvedTeamIds.has(refreshed.workspace_id)) {
117
124
  ws.token = refreshed.token
118
125
  ws.workspace_id = refreshed.workspace_id
119
126
  ws.workspace_name = refreshed.workspace_name
127
+ resolvedTeamIds.add(ws.workspace_id)
120
128
  validWorkspaces.push(ws)
121
129
  await credManager.setWorkspace(ws)
122
130
 
@@ -129,6 +137,26 @@ async function extractAction(options: {
129
137
  }
130
138
  }
131
139
 
140
+ for (const cookie of new Set(workspaces.map((ws) => ws.cookie).filter(Boolean))) {
141
+ const enumerated = await refreshKnownWorkspaceDomains(cookie, workspaceDomains, {
142
+ resolvedTeamIds,
143
+ refreshCache,
144
+ })
145
+ for (const result of enumerated) {
146
+ const ws: ExtractedWorkspace = {
147
+ workspace_id: result.workspace_id,
148
+ workspace_name: result.workspace_name,
149
+ token: result.token,
150
+ cookie,
151
+ }
152
+ validWorkspaces.push(ws)
153
+ await credManager.setWorkspace(ws)
154
+ if (options.debug) {
155
+ debug(`[debug] ✓ Recovered via domain enumeration: ${result.workspace_id}/${result.workspace_name}`)
156
+ }
157
+ }
158
+ }
159
+
132
160
  if (validWorkspaces.length === 0) {
133
161
  const errorMessage = getExtractionErrorMessage(failureReasons)
134
162
  console.log(