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.
- package/dist/index.d.ts +14 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/package.json +55 -0
- package/dist/src/accounts.d.ts +28 -0
- package/dist/src/accounts.js +50 -0
- package/dist/src/accounts.js.map +1 -0
- package/dist/src/actions.d.ts +43 -0
- package/dist/src/actions.js +342 -0
- package/dist/src/actions.js.map +1 -0
- package/dist/src/agent-tools.d.ts +14 -0
- package/dist/src/agent-tools.js +186 -0
- package/dist/src/agent-tools.js.map +1 -0
- package/dist/src/api-fetch.d.ts +264 -0
- package/dist/src/api-fetch.js +509 -0
- package/dist/src/api-fetch.js.map +1 -0
- package/dist/src/channel.d.ts +9 -0
- package/dist/src/channel.js +882 -0
- package/dist/src/channel.js.map +1 -0
- package/dist/src/config-schema.d.ts +125 -0
- package/dist/src/config-schema.js +44 -0
- package/dist/src/config-schema.js.map +1 -0
- package/dist/src/group-md.d.ts +120 -0
- package/dist/src/group-md.js +317 -0
- package/dist/src/group-md.js.map +1 -0
- package/dist/src/inbound.d.ts +115 -0
- package/dist/src/inbound.js +1454 -0
- package/dist/src/inbound.js.map +1 -0
- package/dist/src/mention-utils.d.ts +133 -0
- package/dist/src/mention-utils.js +339 -0
- package/dist/src/mention-utils.js.map +1 -0
- package/dist/src/runtime.d.ts +3 -0
- package/dist/src/runtime.js +11 -0
- package/dist/src/runtime.js.map +1 -0
- package/dist/src/socket.d.ts +65 -0
- package/dist/src/socket.js +650 -0
- package/dist/src/socket.js.map +1 -0
- package/dist/src/types.d.ts +114 -0
- package/dist/src/types.js +21 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +4 -4
- package/index.ts +0 -36
- package/src/accounts.ts +0 -85
- package/src/actions.test.ts +0 -922
- package/src/actions.ts +0 -479
- package/src/agent-tools.test.ts +0 -404
- package/src/agent-tools.ts +0 -269
- package/src/api-fetch.test.ts +0 -940
- package/src/api-fetch.ts +0 -688
- package/src/bug-repro.test.ts +0 -390
- package/src/channel.test.ts +0 -386
- package/src/channel.ts +0 -939
- package/src/config-schema.ts +0 -77
- package/src/group-md.test.ts +0 -383
- package/src/group-md.ts +0 -393
- package/src/inbound.test.ts +0 -1069
- package/src/inbound.ts +0 -1655
- package/src/mention-utils.test.ts +0 -688
- package/src/mention-utils.ts +0 -442
- package/src/multi-bot-isolation.test.ts +0 -208
- package/src/reconnect-fixes.test.ts +0 -541
- package/src/runtime.ts +0 -14
- package/src/socket.test.ts +0 -222
- package/src/socket.ts +0 -731
- package/src/types.ts +0 -136
package/dist/index.d.ts
ADDED
|
@@ -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[];
|