openclaw-channel-dmwork 0.5.17-dev.84f17dc → 0.5.17-dev.8574935

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 (65) hide show
  1. package/dist/index.d.ts +14 -0
  2. package/dist/index.js +28 -0
  3. package/dist/index.js.map +1 -0
  4. package/dist/package.json +55 -0
  5. package/dist/src/accounts.d.ts +28 -0
  6. package/dist/src/accounts.js +50 -0
  7. package/dist/src/accounts.js.map +1 -0
  8. package/dist/src/actions.d.ts +43 -0
  9. package/dist/src/actions.js +342 -0
  10. package/dist/src/actions.js.map +1 -0
  11. package/dist/src/agent-tools.d.ts +14 -0
  12. package/dist/src/agent-tools.js +186 -0
  13. package/dist/src/agent-tools.js.map +1 -0
  14. package/dist/src/api-fetch.d.ts +264 -0
  15. package/dist/src/api-fetch.js +509 -0
  16. package/dist/src/api-fetch.js.map +1 -0
  17. package/dist/src/channel.d.ts +9 -0
  18. package/dist/src/channel.js +882 -0
  19. package/dist/src/channel.js.map +1 -0
  20. package/dist/src/config-schema.d.ts +125 -0
  21. package/dist/src/config-schema.js +44 -0
  22. package/dist/src/config-schema.js.map +1 -0
  23. package/dist/src/group-md.d.ts +120 -0
  24. package/dist/src/group-md.js +317 -0
  25. package/dist/src/group-md.js.map +1 -0
  26. package/dist/src/inbound.d.ts +115 -0
  27. package/dist/src/inbound.js +1454 -0
  28. package/dist/src/inbound.js.map +1 -0
  29. package/dist/src/mention-utils.d.ts +133 -0
  30. package/dist/src/mention-utils.js +339 -0
  31. package/dist/src/mention-utils.js.map +1 -0
  32. package/dist/src/runtime.d.ts +3 -0
  33. package/dist/src/runtime.js +11 -0
  34. package/dist/src/runtime.js.map +1 -0
  35. package/dist/src/socket.d.ts +65 -0
  36. package/dist/src/socket.js +650 -0
  37. package/dist/src/socket.js.map +1 -0
  38. package/dist/src/types.d.ts +114 -0
  39. package/dist/src/types.js +21 -0
  40. package/dist/src/types.js.map +1 -0
  41. package/package.json +4 -4
  42. package/index.ts +0 -36
  43. package/src/accounts.ts +0 -85
  44. package/src/actions.test.ts +0 -922
  45. package/src/actions.ts +0 -479
  46. package/src/agent-tools.test.ts +0 -404
  47. package/src/agent-tools.ts +0 -269
  48. package/src/api-fetch.test.ts +0 -940
  49. package/src/api-fetch.ts +0 -688
  50. package/src/bug-repro.test.ts +0 -390
  51. package/src/channel.test.ts +0 -386
  52. package/src/channel.ts +0 -939
  53. package/src/config-schema.ts +0 -77
  54. package/src/group-md.test.ts +0 -383
  55. package/src/group-md.ts +0 -393
  56. package/src/inbound.test.ts +0 -1069
  57. package/src/inbound.ts +0 -1655
  58. package/src/mention-utils.test.ts +0 -688
  59. package/src/mention-utils.ts +0 -442
  60. package/src/multi-bot-isolation.test.ts +0 -208
  61. package/src/reconnect-fixes.test.ts +0 -541
  62. package/src/runtime.ts +0 -14
  63. package/src/socket.test.ts +0 -222
  64. package/src/socket.ts +0 -731
  65. package/src/types.ts +0 -136
@@ -0,0 +1,14 @@
1
+ /**
2
+ * openclaw-channel-dmwork
3
+ *
4
+ * OpenClaw channel plugin for DMWork messaging platform.
5
+ * Connects via WuKongIM WebSocket for real-time messaging.
6
+ */
7
+ import type { OpenClawPluginApi } from "openclaw/plugin-sdk";
8
+ declare const plugin: {
9
+ id: string;
10
+ name: string;
11
+ description: string;
12
+ register: (api: OpenClawPluginApi) => void;
13
+ };
14
+ export default plugin;
package/dist/index.js ADDED
@@ -0,0 +1,28 @@
1
+ /**
2
+ * openclaw-channel-dmwork
3
+ *
4
+ * OpenClaw channel plugin for DMWork messaging platform.
5
+ * Connects via WuKongIM WebSocket for real-time messaging.
6
+ */
7
+ import { dmworkPlugin } from "./src/channel.js";
8
+ import { setDmworkRuntime } from "./src/runtime.js";
9
+ import { getGroupMdForPrompt } from "./src/group-md.js";
10
+ const plugin = {
11
+ id: "openclaw-channel-dmwork",
12
+ name: "DMWork",
13
+ description: "OpenClaw DMWork channel plugin via WuKongIM WebSocket",
14
+ register(api) {
15
+ setDmworkRuntime(api.runtime);
16
+ api.registerChannel({ plugin: dmworkPlugin });
17
+ console.log('[dmwork] registering before_prompt_build hook');
18
+ api.on('before_prompt_build', (_event, ctx) => {
19
+ const content = getGroupMdForPrompt(ctx);
20
+ if (!content)
21
+ return;
22
+ const result = { prependContext: `[GROUP CONTEXT]\n${content}\n[/GROUP CONTEXT]` };
23
+ return result;
24
+ });
25
+ },
26
+ };
27
+ export default plugin;
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,MAAM,GAKR;IACF,EAAE,EAAE,yBAAyB;IAC7B,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,uDAAuD;IACpE,QAAQ,CAAC,GAAG;QACV,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9B,GAAG,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;QAE9C,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC7D,GAAG,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YAC5C,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,CAAC,OAAO;gBAAE,OAAO;YACrB,MAAM,MAAM,GAAG,EAAE,cAAc,EAAE,oBAAoB,OAAO,oBAAoB,EAAE,CAAC;YACnF,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "openclaw-channel-dmwork",
3
+ "version": "0.5.17",
4
+ "description": "DMWork channel plugin for OpenClaw via WuKongIM WebSocket",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "type": "module",
8
+ "files": [
9
+ "dist",
10
+ "openclaw.plugin.json"
11
+ ],
12
+ "scripts": {
13
+ "build": "tsc",
14
+ "type-check": "tsc --noEmit",
15
+ "test": "vitest run",
16
+ "test:watch": "vitest"
17
+ },
18
+ "dependencies": {
19
+ "axios": "^1.7.0",
20
+ "cos-nodejs-sdk-v5": "^2.15.4",
21
+ "crypto-js": "^4.2.0",
22
+ "curve25519-js": "^0.0.4",
23
+ "md5-typescript": "^1.0.5",
24
+ "ws": "^8.16.0"
25
+ },
26
+ "peerDependencies": {
27
+ "openclaw": ">=2026.2.0"
28
+ },
29
+ "devDependencies": {
30
+ "@types/crypto-js": "^4.2.0",
31
+ "@types/ws": "^8.5.10",
32
+ "openclaw": "2026.3.2",
33
+ "typescript": "^5.9.3",
34
+ "vitest": "^3.0.0"
35
+ },
36
+ "openclaw": {
37
+ "id": "openclaw-channel-dmwork",
38
+ "type": "channel",
39
+ "extensions": [
40
+ "index.ts"
41
+ ]
42
+ },
43
+ "bundledDependencies": [
44
+ "cos-nodejs-sdk-v5",
45
+ "crypto-js",
46
+ "curve25519-js",
47
+ "md5-typescript"
48
+ ],
49
+ "bundleDependencies": [
50
+ "cos-nodejs-sdk-v5",
51
+ "crypto-js",
52
+ "curve25519-js",
53
+ "md5-typescript"
54
+ ]
55
+ }
@@ -0,0 +1,28 @@
1
+ import type { OpenClawConfig } from "openclaw/plugin-sdk";
2
+ import type { DmworkConfig } from "./config-schema.js";
3
+ export type DmworkAccountConfig = DmworkConfig & {
4
+ accounts?: Record<string, DmworkConfig | undefined>;
5
+ };
6
+ export type ResolvedDmworkAccount = {
7
+ accountId: string;
8
+ name?: string;
9
+ enabled: boolean;
10
+ configured: boolean;
11
+ config: {
12
+ botToken?: string;
13
+ apiUrl: string;
14
+ wsUrl?: string;
15
+ cdnUrl?: string;
16
+ pollIntervalMs: number;
17
+ heartbeatIntervalMs: number;
18
+ requireMention?: boolean;
19
+ historyLimit?: number;
20
+ historyPromptTemplate?: string;
21
+ };
22
+ };
23
+ export declare function listDmworkAccountIds(cfg: OpenClawConfig): string[];
24
+ export declare function resolveDefaultDmworkAccountId(_cfg: OpenClawConfig): string;
25
+ export declare function resolveDmworkAccount(params: {
26
+ cfg: OpenClawConfig;
27
+ accountId?: string | null;
28
+ }): ResolvedDmworkAccount;
@@ -0,0 +1,50 @@
1
+ import { DEFAULT_ACCOUNT_ID } from "openclaw/plugin-sdk";
2
+ const DEFAULT_API_URL = "http://localhost:8090";
3
+ const DEFAULT_POLL_INTERVAL_MS = 2000;
4
+ const DEFAULT_HEARTBEAT_INTERVAL_MS = 30000;
5
+ export function listDmworkAccountIds(cfg) {
6
+ const channel = (cfg.channels?.dmwork ?? {});
7
+ const accountIds = Object.keys(channel.accounts ?? {});
8
+ if (accountIds.length > 0) {
9
+ return accountIds;
10
+ }
11
+ return [DEFAULT_ACCOUNT_ID];
12
+ }
13
+ export function resolveDefaultDmworkAccountId(_cfg) {
14
+ return DEFAULT_ACCOUNT_ID;
15
+ }
16
+ export function resolveDmworkAccount(params) {
17
+ const accountId = params.accountId ?? DEFAULT_ACCOUNT_ID;
18
+ const channel = (params.cfg.channels?.dmwork ?? {});
19
+ const accountConfig = channel.accounts?.[accountId] ?? channel;
20
+ const botToken = accountConfig.botToken ?? channel.botToken;
21
+ const apiUrl = accountConfig.apiUrl ?? channel.apiUrl ?? DEFAULT_API_URL;
22
+ const wsUrl = accountConfig.wsUrl ?? channel.wsUrl;
23
+ const cdnUrl = accountConfig.cdnUrl ?? channel.cdnUrl;
24
+ const pollIntervalMs = accountConfig.pollIntervalMs ??
25
+ channel.pollIntervalMs ??
26
+ DEFAULT_POLL_INTERVAL_MS;
27
+ const heartbeatIntervalMs = accountConfig.heartbeatIntervalMs ??
28
+ channel.heartbeatIntervalMs ??
29
+ DEFAULT_HEARTBEAT_INTERVAL_MS;
30
+ const enabled = accountConfig.enabled ?? channel.enabled ?? true;
31
+ const configured = Boolean(botToken?.trim());
32
+ return {
33
+ accountId,
34
+ name: accountConfig.name ?? channel.name,
35
+ enabled,
36
+ configured,
37
+ config: {
38
+ botToken,
39
+ apiUrl,
40
+ wsUrl,
41
+ cdnUrl,
42
+ pollIntervalMs,
43
+ heartbeatIntervalMs,
44
+ requireMention: accountConfig.requireMention ?? channel.requireMention,
45
+ historyLimit: accountConfig.historyLimit ?? channel.historyLimit ?? 20,
46
+ historyPromptTemplate: accountConfig.historyPromptTemplate ?? channel.historyPromptTemplate,
47
+ },
48
+ };
49
+ }
50
+ //# sourceMappingURL=accounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../src/accounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AA0BzD,MAAM,eAAe,GAAG,uBAAuB,CAAC;AAChD,MAAM,wBAAwB,GAAG,IAAI,CAAC;AACtC,MAAM,6BAA6B,GAAG,KAAK,CAAC;AAE5C,MAAM,UAAU,oBAAoB,CAAC,GAAmB;IACtD,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,CAAwB,CAAC;IACpE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IACvD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,IAAoB;IAChE,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAGpC;IACC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,kBAAkB,CAAC;IACzD,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,CAAwB,CAAC;IAC3E,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC;IAE/D,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IAC5D,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,IAAI,eAAe,CAAC;IACzE,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;IACnD,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IACtD,MAAM,cAAc,GAClB,aAAa,CAAC,cAAc;QAC5B,OAAO,CAAC,cAAc;QACtB,wBAAwB,CAAC;IAC3B,MAAM,mBAAmB,GACvB,aAAa,CAAC,mBAAmB;QACjC,OAAO,CAAC,mBAAmB;QAC3B,6BAA6B,CAAC;IAEhC,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC;IACjE,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,OAAO;QACL,SAAS;QACT,IAAI,EAAE,aAAa,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI;QACxC,OAAO;QACP,UAAU;QACV,MAAM,EAAE;YACN,QAAQ;YACR,MAAM;YACN,KAAK;YACL,MAAM;YACN,cAAc;YACd,mBAAmB;YACnB,cAAc,EAAE,aAAa,CAAC,cAAc,IAAI,OAAO,CAAC,cAAc;YACtE,YAAY,EAAE,aAAa,CAAC,YAAY,IAAI,OAAO,CAAC,YAAY,IAAI,EAAE;YACtE,qBAAqB,EAAE,aAAa,CAAC,qBAAqB,IAAI,OAAO,CAAC,qBAAqB;SAC5F;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Message tool action handlers for the DMWork channel plugin.
3
+ *
4
+ * Implements: send, read, member-info, channel-list, channel-info
5
+ * Each handler is stateless — maps and config are passed in via params.
6
+ */
7
+ import { ChannelType } from "./types.js";
8
+ export interface MessageActionResult {
9
+ ok: boolean;
10
+ data?: unknown;
11
+ error?: string;
12
+ }
13
+ type LogSink = {
14
+ info?: (msg: string) => void;
15
+ error?: (msg: string) => void;
16
+ warn?: (msg: string) => void;
17
+ debug?: (msg: string) => void;
18
+ };
19
+ /**
20
+ * Parse a target string into channelId + channelType.
21
+ *
22
+ * Explicit prefixes (`group:` / `user:`) always win.
23
+ * For bare IDs, we check `knownGroupIds` to determine the channel type.
24
+ */
25
+ export declare function parseTarget(target: string, currentChannelId?: string, knownGroupIds?: Set<string>): {
26
+ channelId: string;
27
+ channelType: ChannelType;
28
+ };
29
+ export declare function handleDmworkMessageAction(params: {
30
+ action: string;
31
+ args: Record<string, unknown>;
32
+ apiUrl: string;
33
+ botToken: string;
34
+ memberMap?: Map<string, string>;
35
+ uidToNameMap?: Map<string, string>;
36
+ groupMdCache?: Map<string, {
37
+ content: string;
38
+ version: number;
39
+ }>;
40
+ currentChannelId?: string;
41
+ log?: LogSink;
42
+ }): Promise<MessageActionResult>;
43
+ export {};
@@ -0,0 +1,342 @@
1
+ /**
2
+ * Message tool action handlers for the DMWork channel plugin.
3
+ *
4
+ * Implements: send, read, member-info, channel-list, channel-info
5
+ * Each handler is stateless — maps and config are passed in via params.
6
+ */
7
+ import { ChannelType } from "./types.js";
8
+ import { sendMessage, getChannelMessages, getGroupMembers, fetchBotGroups, getGroupInfo, getGroupMd, updateGroupMd, } from "./api-fetch.js";
9
+ import { uploadAndSendMedia } from "./inbound.js";
10
+ import { buildEntitiesFromFallback, parseStructuredMentions, convertStructuredMentions } from "./mention-utils.js";
11
+ import { getKnownGroupIds } from "./group-md.js";
12
+ /**
13
+ * Parse a target string into channelId + channelType.
14
+ *
15
+ * Explicit prefixes (`group:` / `user:`) always win.
16
+ * For bare IDs, we check `knownGroupIds` to determine the channel type.
17
+ */
18
+ export function parseTarget(target, currentChannelId, knownGroupIds) {
19
+ // Explicit prefixes always win
20
+ if (target.startsWith("group:"))
21
+ return { channelId: target.slice(6), channelType: ChannelType.Group };
22
+ if (target.startsWith("user:"))
23
+ return { channelId: target.slice(5), channelType: ChannelType.DM };
24
+ // Strip dmwork: prefix if present
25
+ let bareId = target;
26
+ if (bareId.startsWith("dmwork:"))
27
+ bareId = bareId.slice(7);
28
+ // Bare ID: check knownGroupIds
29
+ const isGroup = knownGroupIds?.has(bareId) ?? false;
30
+ return { channelId: bareId, channelType: isGroup ? ChannelType.Group : ChannelType.DM };
31
+ }
32
+ /** Strip common prefixes to get the raw group_no */
33
+ function stripChannelPrefix(raw) {
34
+ if (raw.startsWith("group:"))
35
+ return raw.slice(6);
36
+ if (raw.startsWith("g-"))
37
+ return raw.slice(2);
38
+ if (raw.startsWith("dmwork:"))
39
+ return raw.slice(7);
40
+ return raw;
41
+ }
42
+ /**
43
+ * Resolve the group ID from args, falling back to currentChannelId.
44
+ * Accepts: args.groupId, args.target (with group: prefix), or bare currentChannelId.
45
+ */
46
+ function resolveGroupId(args, currentChannelId) {
47
+ // Explicit groupId, target, or to param
48
+ const groupId = (args.groupId ?? args.target ?? args.to);
49
+ if (groupId?.trim()) {
50
+ const raw = groupId.trim();
51
+ return stripChannelPrefix(raw);
52
+ }
53
+ // Fallback to currentChannelId from session context
54
+ if (currentChannelId?.trim()) {
55
+ return stripChannelPrefix(currentChannelId.trim());
56
+ }
57
+ return undefined;
58
+ }
59
+ export async function handleDmworkMessageAction(params) {
60
+ const { action, args, apiUrl, botToken, memberMap, uidToNameMap, groupMdCache, currentChannelId, log } = params;
61
+ if (!botToken) {
62
+ return { ok: false, error: "DMWork botToken is not configured" };
63
+ }
64
+ switch (action) {
65
+ case "send":
66
+ return handleSend({ args, apiUrl, botToken, memberMap, uidToNameMap, currentChannelId, log });
67
+ case "read":
68
+ return handleRead({ args, apiUrl, botToken, uidToNameMap, currentChannelId, log });
69
+ case "member-info":
70
+ return handleMemberInfo({ args, apiUrl, botToken, log });
71
+ case "channel-list":
72
+ return handleChannelList({ apiUrl, botToken, log });
73
+ case "channel-info":
74
+ return handleChannelInfo({ args, apiUrl, botToken, log });
75
+ case "group-md-read":
76
+ return handleGroupMdRead({ args, apiUrl, botToken, groupMdCache, currentChannelId, log });
77
+ case "group-md-update":
78
+ return handleGroupMdUpdate({ args, apiUrl, botToken, groupMdCache, currentChannelId, log });
79
+ default:
80
+ return { ok: false, error: `Unknown action: ${action}` };
81
+ }
82
+ }
83
+ // ---------------------------------------------------------------------------
84
+ // send
85
+ // ---------------------------------------------------------------------------
86
+ async function handleSend(params) {
87
+ const { args, apiUrl, botToken, memberMap, uidToNameMap, currentChannelId, log } = params;
88
+ const target = args.target;
89
+ if (!target) {
90
+ return { ok: false, error: "Missing required parameter: target" };
91
+ }
92
+ const message = args.message?.trim();
93
+ const mediaUrl = args.media ??
94
+ args.mediaUrl ??
95
+ args.filePath;
96
+ if (!message && !mediaUrl) {
97
+ return {
98
+ ok: false,
99
+ error: "At least one of message or media/mediaUrl/filePath is required",
100
+ };
101
+ }
102
+ const { channelId, channelType } = parseTarget(target, currentChannelId, getKnownGroupIds());
103
+ // Send text message
104
+ if (message) {
105
+ let mentionUids = [];
106
+ let mentionEntities = [];
107
+ let finalMessage = message;
108
+ if (channelType === ChannelType.Group) {
109
+ // v2 path: convert @[uid:name] → @name + entities
110
+ if (uidToNameMap) {
111
+ const structuredMentions = parseStructuredMentions(finalMessage);
112
+ if (structuredMentions.length > 0) {
113
+ const validUids = new Set(uidToNameMap.keys());
114
+ const converted = convertStructuredMentions(finalMessage, structuredMentions, validUids);
115
+ finalMessage = converted.content;
116
+ mentionEntities = [...converted.entities];
117
+ mentionUids = [...converted.uids];
118
+ }
119
+ }
120
+ // v1 fallback: resolve remaining @name via memberMap
121
+ if (memberMap) {
122
+ const { entities, uids } = buildEntitiesFromFallback(finalMessage, memberMap);
123
+ const existingOffsets = new Set(mentionEntities.map(e => e.offset));
124
+ for (const entity of entities) {
125
+ if (!existingOffsets.has(entity.offset)) {
126
+ mentionEntities.push(entity);
127
+ }
128
+ }
129
+ for (const uid of uids) {
130
+ if (!mentionUids.includes(uid)) {
131
+ mentionUids.push(uid);
132
+ }
133
+ }
134
+ }
135
+ // Sort entities by offset and rebuild uids from sorted entities
136
+ if (mentionEntities.length > 0) {
137
+ mentionEntities.sort((a, b) => a.offset - b.offset);
138
+ mentionUids = mentionEntities.map(e => e.uid);
139
+ }
140
+ }
141
+ // Detect @all/@所有人 in final content
142
+ const hasAtAll = /(?:^|(?<=\s))@(?:all|所有人)(?=\s|[^\w]|$)/i.test(finalMessage);
143
+ await sendMessage({
144
+ apiUrl,
145
+ botToken,
146
+ channelId,
147
+ channelType,
148
+ content: finalMessage,
149
+ ...(mentionUids.length > 0 ? { mentionUids } : {}),
150
+ ...(mentionEntities.length > 0 ? { mentionEntities } : {}),
151
+ mentionAll: hasAtAll || undefined,
152
+ });
153
+ }
154
+ // Send media
155
+ if (mediaUrl) {
156
+ await uploadAndSendMedia({
157
+ mediaUrl,
158
+ apiUrl,
159
+ botToken,
160
+ channelId,
161
+ channelType,
162
+ log: log,
163
+ });
164
+ }
165
+ return { ok: true, data: { sent: true, target, channelId, channelType } };
166
+ }
167
+ // ---------------------------------------------------------------------------
168
+ // read
169
+ // ---------------------------------------------------------------------------
170
+ async function handleRead(params) {
171
+ const { args, apiUrl, botToken, uidToNameMap, currentChannelId, log } = params;
172
+ const target = args.target;
173
+ if (!target) {
174
+ return { ok: false, error: "Missing required parameter: target" };
175
+ }
176
+ const rawLimit = Number(args.limit) || 20;
177
+ const limit = Math.min(Math.max(rawLimit, 1), 100);
178
+ // after/before map to start_message_seq/end_message_seq (message sequence numbers)
179
+ const after = args.after != null ? Number(args.after) : undefined;
180
+ const before = args.before != null ? Number(args.before) : undefined;
181
+ const { channelId, channelType } = parseTarget(target, currentChannelId, getKnownGroupIds());
182
+ const messages = await getChannelMessages({
183
+ apiUrl,
184
+ botToken,
185
+ channelId,
186
+ channelType,
187
+ limit,
188
+ ...(after != null && !isNaN(after) ? { startMessageSeq: after } : {}),
189
+ ...(before != null && !isNaN(before) ? { endMessageSeq: before } : {}),
190
+ log: log
191
+ ? {
192
+ info: (...a) => log.info?.(String(a[0])),
193
+ error: (...a) => log.error?.(String(a[0])),
194
+ }
195
+ : undefined,
196
+ });
197
+ // Resolve from_uid to display names when available
198
+ const resolved = messages.map((m) => ({
199
+ from: uidToNameMap?.get(m.from_uid) ?? m.from_uid,
200
+ from_uid: m.from_uid,
201
+ content: m.content,
202
+ timestamp: m.timestamp,
203
+ }));
204
+ return { ok: true, data: { messages: resolved, count: resolved.length } };
205
+ }
206
+ // ---------------------------------------------------------------------------
207
+ // member-info
208
+ // ---------------------------------------------------------------------------
209
+ async function handleMemberInfo(params) {
210
+ const { args, apiUrl, botToken, log } = params;
211
+ const target = args.target;
212
+ if (!target) {
213
+ return { ok: false, error: "Missing required parameter: target" };
214
+ }
215
+ const { channelId } = parseTarget(target);
216
+ const members = await getGroupMembers({
217
+ apiUrl,
218
+ botToken,
219
+ groupNo: channelId,
220
+ log: log
221
+ ? {
222
+ info: (...a) => log.info?.(String(a[0])),
223
+ error: (...a) => log.error?.(String(a[0])),
224
+ }
225
+ : undefined,
226
+ });
227
+ return { ok: true, data: { members, count: members.length } };
228
+ }
229
+ // ---------------------------------------------------------------------------
230
+ // channel-list
231
+ // ---------------------------------------------------------------------------
232
+ async function handleChannelList(params) {
233
+ const { apiUrl, botToken, log } = params;
234
+ const groups = await fetchBotGroups({
235
+ apiUrl,
236
+ botToken,
237
+ log: log
238
+ ? {
239
+ info: (...a) => log.info?.(String(a[0])),
240
+ error: (...a) => log.error?.(String(a[0])),
241
+ }
242
+ : undefined,
243
+ });
244
+ return { ok: true, data: { groups, count: groups.length } };
245
+ }
246
+ // ---------------------------------------------------------------------------
247
+ // channel-info
248
+ // ---------------------------------------------------------------------------
249
+ async function handleChannelInfo(params) {
250
+ const { args, apiUrl, botToken, log } = params;
251
+ const target = args.target;
252
+ if (!target) {
253
+ return { ok: false, error: "Missing required parameter: target" };
254
+ }
255
+ const { channelId } = parseTarget(target);
256
+ const info = await getGroupInfo({
257
+ apiUrl,
258
+ botToken,
259
+ groupNo: channelId,
260
+ log: log
261
+ ? {
262
+ info: (...a) => log.info?.(String(a[0])),
263
+ error: (...a) => log.error?.(String(a[0])),
264
+ }
265
+ : undefined,
266
+ });
267
+ return { ok: true, data: info };
268
+ }
269
+ // ---------------------------------------------------------------------------
270
+ // group-md-read
271
+ // ---------------------------------------------------------------------------
272
+ async function handleGroupMdRead(params) {
273
+ const { args, apiUrl, botToken, groupMdCache, currentChannelId, log } = params;
274
+ const channelId = resolveGroupId(args, currentChannelId);
275
+ if (!channelId) {
276
+ return { ok: false, error: "Missing required parameter: groupId (or target the current group chat)" };
277
+ }
278
+ // Try cache first
279
+ const cached = groupMdCache?.get(channelId);
280
+ if (cached) {
281
+ return { ok: true, data: { content: cached.content, version: cached.version, source: "cache" } };
282
+ }
283
+ // Cache miss — fetch from API
284
+ try {
285
+ const md = await getGroupMd({
286
+ apiUrl,
287
+ botToken,
288
+ groupNo: channelId,
289
+ log: log
290
+ ? {
291
+ info: (...a) => log.info?.(String(a[0])),
292
+ error: (...a) => log.error?.(String(a[0])),
293
+ }
294
+ : undefined,
295
+ });
296
+ // Update cache on successful fetch
297
+ if (groupMdCache && md.content) {
298
+ groupMdCache.set(channelId, { content: md.content, version: md.version });
299
+ }
300
+ return { ok: true, data: { content: md.content, version: md.version, updated_at: md.updated_at, updated_by: md.updated_by } };
301
+ }
302
+ catch (err) {
303
+ return { ok: false, error: `Failed to read GROUP.md: ${err instanceof Error ? err.message : String(err)}` };
304
+ }
305
+ }
306
+ // ---------------------------------------------------------------------------
307
+ // group-md-update
308
+ // ---------------------------------------------------------------------------
309
+ async function handleGroupMdUpdate(params) {
310
+ const { args, apiUrl, botToken, groupMdCache, currentChannelId, log } = params;
311
+ const channelId = resolveGroupId(args, currentChannelId);
312
+ if (!channelId) {
313
+ return { ok: false, error: "Missing required parameter: groupId (or target the current group chat)" };
314
+ }
315
+ const content = (args.content ?? args.message ?? args.topic ?? args.desc);
316
+ if (content == null) {
317
+ return { ok: false, error: "Missing required parameter: content (or message)" };
318
+ }
319
+ try {
320
+ const result = await updateGroupMd({
321
+ apiUrl,
322
+ botToken,
323
+ groupNo: channelId,
324
+ content,
325
+ log: log
326
+ ? {
327
+ info: (...a) => log.info?.(String(a[0])),
328
+ error: (...a) => log.error?.(String(a[0])),
329
+ }
330
+ : undefined,
331
+ });
332
+ // Update local cache on success
333
+ if (groupMdCache) {
334
+ groupMdCache.set(channelId, { content, version: result.version });
335
+ }
336
+ return { ok: true, data: { version: result.version } };
337
+ }
338
+ catch (err) {
339
+ return { ok: false, error: `Failed to update GROUP.md: ${err instanceof Error ? err.message : String(err)}` };
340
+ }
341
+ }
342
+ //# sourceMappingURL=actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/actions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * DMWork Management agent tool.
3
+ *
4
+ * Registered via `agentTools` on the channel plugin, this tool gives the LLM
5
+ * direct access to DMWork group management operations without going through
6
+ * the `message` tool action routing (which only supports a fixed whitelist of
7
+ * action names in OpenClaw core).
8
+ *
9
+ * Operations: list-groups, group-info, group-members, group-md-read, group-md-update
10
+ */
11
+ import type { OpenClawConfig } from "openclaw/plugin-sdk";
12
+ export declare function createDmworkManagementTools(params: {
13
+ cfg?: OpenClawConfig;
14
+ }): any[];