@wecom/wecom-openclaw-plugin 2026.4.2 → 2026.4.3-beta.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/README.md +395 -10
- package/dist/index.d.ts +2 -4
- package/dist/index.js +58 -0
- package/dist/src/accounts.d.ts +57 -0
- package/dist/src/accounts.js +222 -0
- package/dist/src/agent/api-client.d.ts +94 -0
- package/dist/src/agent/api-client.js +292 -0
- package/dist/src/agent/handler.d.ts +63 -0
- package/dist/src/agent/handler.js +551 -0
- package/dist/src/agent/index.d.ts +5 -0
- package/dist/src/agent/index.js +5 -0
- package/dist/src/agent/webhook.d.ts +24 -0
- package/dist/src/agent/webhook.js +228 -0
- package/dist/src/agent/xml.d.ts +21 -0
- package/dist/src/agent/xml.js +41 -0
- package/dist/src/channel.js +579 -0
- package/dist/src/chat-queue.d.ts +31 -0
- package/dist/src/chat-queue.js +45 -0
- package/dist/{esm/types/src → src}/const.d.ts +46 -0
- package/dist/{esm/src → src}/const.js +77 -30
- package/dist/{esm/src → src}/dm-policy.js +6 -9
- package/dist/src/dynamic-agent.d.ts +37 -0
- package/dist/src/dynamic-agent.js +60 -0
- package/dist/src/dynamic-routing.d.ts +65 -0
- package/dist/src/dynamic-routing.js +58 -0
- package/dist/{esm/src → src}/group-policy.js +8 -22
- package/dist/src/http.d.ts +26 -0
- package/dist/src/http.js +93 -0
- package/dist/{esm/types/src → src}/interface.d.ts +0 -2
- package/dist/src/interface.js +4 -0
- package/dist/src/mcp/index.js +6 -0
- package/dist/{esm/src → src}/mcp/interceptors/biz-error.js +2 -6
- package/dist/{esm/src → src}/mcp/interceptors/index.js +6 -10
- package/dist/{esm/src → src}/mcp/interceptors/msg-media.js +6 -10
- package/dist/{esm/src → src}/mcp/interceptors/smartpage-create.js +2 -6
- package/dist/{esm/src → src}/mcp/interceptors/smartpage-export.js +2 -6
- package/dist/src/mcp/interceptors/types.js +7 -0
- package/dist/{esm/src → src}/mcp/schema.js +1 -4
- package/dist/{esm/src → src}/mcp/tool.js +4 -8
- package/dist/{esm/src → src}/mcp/transport.js +15 -16
- package/dist/{esm/src → src}/media-handler.js +6 -10
- package/dist/{esm/src → src}/media-uploader.js +64 -10
- package/dist/{esm/src → src}/message-parser.js +1 -4
- package/dist/{esm/types/src → src}/message-sender.d.ts +18 -0
- package/dist/{esm/src → src}/message-sender.js +45 -11
- package/dist/{esm/src → src}/monitor.js +145 -292
- package/dist/{esm/src → src}/onboarding.js +22 -26
- package/dist/{esm/types/src → src}/openclaw-compat.d.ts +49 -0
- package/dist/{esm/src → src}/openclaw-compat.js +133 -27
- package/dist/{esm/src → src}/reqid-store.js +4 -7
- package/dist/{esm/src → src}/runtime.js +2 -5
- package/dist/src/shared/command-auth.d.ts +23 -0
- package/dist/src/shared/command-auth.js +73 -0
- package/dist/src/shared/xml-parser.d.ts +46 -0
- package/dist/src/shared/xml-parser.js +210 -0
- package/dist/{esm/src → src}/state-dir-resolve.js +3 -7
- package/dist/{esm/src → src}/state-manager.js +84 -16
- package/dist/src/target.d.ts +35 -0
- package/dist/src/target.js +67 -0
- package/dist/src/template-card-manager.d.ts +55 -0
- package/dist/src/template-card-manager.js +205 -0
- package/dist/{esm/src → src}/template-card-parser.js +17 -8
- package/dist/{esm/src → src}/timeout.js +2 -5
- package/dist/src/types/account.d.ts +29 -0
- package/dist/src/types/account.js +4 -0
- package/dist/src/types/config.d.ts +91 -0
- package/dist/src/types/config.js +7 -0
- package/dist/src/types/constants.d.ts +42 -0
- package/dist/src/types/constants.js +42 -0
- package/dist/src/types/index.d.ts +7 -0
- package/dist/src/types/index.js +5 -0
- package/dist/src/types/message.d.ts +238 -0
- package/dist/src/types/message.js +5 -0
- package/dist/{esm/types/src → src}/utils.d.ts +41 -0
- package/dist/{esm/src → src}/utils.js +24 -10
- package/dist/src/version.d.ts +2 -0
- package/dist/src/version.js +24 -0
- package/dist/src/webhook/command-auth.d.ts +47 -0
- package/dist/src/webhook/command-auth.js +96 -0
- package/dist/src/webhook/gateway.d.ts +36 -0
- package/dist/src/webhook/gateway.js +235 -0
- package/dist/src/webhook/handler.d.ts +18 -0
- package/dist/src/webhook/handler.js +420 -0
- package/dist/src/webhook/helpers.d.ts +156 -0
- package/dist/src/webhook/helpers.js +833 -0
- package/dist/src/webhook/http.d.ts +26 -0
- package/dist/src/webhook/http.js +94 -0
- package/dist/src/webhook/index.d.ts +11 -0
- package/dist/src/webhook/index.js +14 -0
- package/dist/src/webhook/media.d.ts +29 -0
- package/dist/src/webhook/media.js +88 -0
- package/dist/src/webhook/monitor.d.ts +59 -0
- package/dist/src/webhook/monitor.js +1161 -0
- package/dist/src/webhook/state.d.ts +220 -0
- package/dist/src/webhook/state.js +491 -0
- package/dist/src/webhook/target.d.ts +41 -0
- package/dist/src/webhook/target.js +132 -0
- package/dist/src/webhook/types.d.ts +347 -0
- package/dist/src/webhook/types.js +33 -0
- package/dist/src/webhook/video-frame.d.ts +13 -0
- package/dist/src/webhook/video-frame.js +30 -0
- package/package.json +15 -7
- package/dist/cjs/index.js +0 -45
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/src/channel.js +0 -339
- package/dist/cjs/src/channel.js.map +0 -1
- package/dist/cjs/src/const.js +0 -137
- package/dist/cjs/src/const.js.map +0 -1
- package/dist/cjs/src/dm-policy.js +0 -89
- package/dist/cjs/src/dm-policy.js.map +0 -1
- package/dist/cjs/src/group-policy.js +0 -133
- package/dist/cjs/src/group-policy.js.map +0 -1
- package/dist/cjs/src/mcp/interceptors/biz-error.js +0 -70
- package/dist/cjs/src/mcp/interceptors/biz-error.js.map +0 -1
- package/dist/cjs/src/mcp/interceptors/index.js +0 -73
- package/dist/cjs/src/mcp/interceptors/index.js.map +0 -1
- package/dist/cjs/src/mcp/interceptors/msg-media.js +0 -159
- package/dist/cjs/src/mcp/interceptors/msg-media.js.map +0 -1
- package/dist/cjs/src/mcp/interceptors/smartpage-create.js +0 -157
- package/dist/cjs/src/mcp/interceptors/smartpage-create.js.map +0 -1
- package/dist/cjs/src/mcp/interceptors/smartpage-export.js +0 -93
- package/dist/cjs/src/mcp/interceptors/smartpage-export.js.map +0 -1
- package/dist/cjs/src/mcp/schema.js +0 -104
- package/dist/cjs/src/mcp/schema.js.map +0 -1
- package/dist/cjs/src/mcp/tool.js +0 -208
- package/dist/cjs/src/mcp/tool.js.map +0 -1
- package/dist/cjs/src/mcp/transport.js +0 -417
- package/dist/cjs/src/mcp/transport.js.map +0 -1
- package/dist/cjs/src/media-handler.js +0 -129
- package/dist/cjs/src/media-handler.js.map +0 -1
- package/dist/cjs/src/media-uploader.js +0 -284
- package/dist/cjs/src/media-uploader.js.map +0 -1
- package/dist/cjs/src/message-parser.js +0 -134
- package/dist/cjs/src/message-parser.js.map +0 -1
- package/dist/cjs/src/message-sender.js +0 -89
- package/dist/cjs/src/message-sender.js.map +0 -1
- package/dist/cjs/src/monitor.js +0 -991
- package/dist/cjs/src/monitor.js.map +0 -1
- package/dist/cjs/src/onboarding.js +0 -182
- package/dist/cjs/src/onboarding.js.map +0 -1
- package/dist/cjs/src/openclaw-compat.js +0 -400
- package/dist/cjs/src/openclaw-compat.js.map +0 -1
- package/dist/cjs/src/reqid-store.js +0 -88
- package/dist/cjs/src/reqid-store.js.map +0 -1
- package/dist/cjs/src/runtime.js +0 -16
- package/dist/cjs/src/runtime.js.map +0 -1
- package/dist/cjs/src/state-dir-resolve.js +0 -35
- package/dist/cjs/src/state-dir-resolve.js.map +0 -1
- package/dist/cjs/src/state-manager.js +0 -158
- package/dist/cjs/src/state-manager.js.map +0 -1
- package/dist/cjs/src/template-card-parser.js +0 -641
- package/dist/cjs/src/template-card-parser.js.map +0 -1
- package/dist/cjs/src/timeout.js +0 -42
- package/dist/cjs/src/timeout.js.map +0 -1
- package/dist/cjs/src/utils.js +0 -60
- package/dist/cjs/src/utils.js.map +0 -1
- package/dist/cjs/src/version.js +0 -26
- package/dist/cjs/src/version.js.map +0 -1
- package/dist/esm/index.js +0 -41
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/src/channel.js +0 -337
- package/dist/esm/src/channel.js.map +0 -1
- package/dist/esm/src/const.js.map +0 -1
- package/dist/esm/src/dm-policy.js.map +0 -1
- package/dist/esm/src/group-policy.js.map +0 -1
- package/dist/esm/src/mcp/interceptors/biz-error.js.map +0 -1
- package/dist/esm/src/mcp/interceptors/index.js.map +0 -1
- package/dist/esm/src/mcp/interceptors/msg-media.js.map +0 -1
- package/dist/esm/src/mcp/interceptors/smartpage-create.js.map +0 -1
- package/dist/esm/src/mcp/interceptors/smartpage-export.js.map +0 -1
- package/dist/esm/src/mcp/schema.js.map +0 -1
- package/dist/esm/src/mcp/tool.js.map +0 -1
- package/dist/esm/src/mcp/transport.js.map +0 -1
- package/dist/esm/src/media-handler.js.map +0 -1
- package/dist/esm/src/media-uploader.js.map +0 -1
- package/dist/esm/src/message-parser.js.map +0 -1
- package/dist/esm/src/message-sender.js.map +0 -1
- package/dist/esm/src/monitor.js.map +0 -1
- package/dist/esm/src/onboarding.js.map +0 -1
- package/dist/esm/src/openclaw-compat.js.map +0 -1
- package/dist/esm/src/reqid-store.js.map +0 -1
- package/dist/esm/src/runtime.js.map +0 -1
- package/dist/esm/src/state-dir-resolve.js.map +0 -1
- package/dist/esm/src/state-manager.js.map +0 -1
- package/dist/esm/src/template-card-parser.js.map +0 -1
- package/dist/esm/src/timeout.js.map +0 -1
- package/dist/esm/src/utils.js.map +0 -1
- package/dist/esm/src/version.js +0 -23
- package/dist/esm/src/version.js.map +0 -1
- package/dist/esm/types/index.d.ts +0 -9
- package/dist/esm/types/src/version.d.ts +0 -2
- /package/dist/{esm/types/src → src}/channel.d.ts +0 -0
- /package/dist/{esm/types/src → src}/dm-policy.d.ts +0 -0
- /package/dist/{esm/types/src → src}/group-policy.d.ts +0 -0
- /package/dist/{esm/types/src → src}/mcp/index.d.ts +0 -0
- /package/dist/{esm/types/src → src}/mcp/interceptors/biz-error.d.ts +0 -0
- /package/dist/{esm/types/src → src}/mcp/interceptors/index.d.ts +0 -0
- /package/dist/{esm/types/src → src}/mcp/interceptors/msg-media.d.ts +0 -0
- /package/dist/{esm/types/src → src}/mcp/interceptors/smartpage-create.d.ts +0 -0
- /package/dist/{esm/types/src → src}/mcp/interceptors/smartpage-export.d.ts +0 -0
- /package/dist/{esm/types/src → src}/mcp/interceptors/types.d.ts +0 -0
- /package/dist/{esm/types/src → src}/mcp/schema.d.ts +0 -0
- /package/dist/{esm/types/src → src}/mcp/tool.d.ts +0 -0
- /package/dist/{esm/types/src → src}/mcp/transport.d.ts +0 -0
- /package/dist/{esm/types/src → src}/media-handler.d.ts +0 -0
- /package/dist/{esm/types/src → src}/media-uploader.d.ts +0 -0
- /package/dist/{esm/types/src → src}/message-parser.d.ts +0 -0
- /package/dist/{esm/types/src → src}/monitor.d.ts +0 -0
- /package/dist/{esm/types/src → src}/onboarding.d.ts +0 -0
- /package/dist/{esm/types/src → src}/reqid-store.d.ts +0 -0
- /package/dist/{esm/types/src → src}/runtime.d.ts +0 -0
- /package/dist/{esm/types/src → src}/state-dir-resolve.d.ts +0 -0
- /package/dist/{esm/types/src → src}/state-manager.d.ts +0 -0
- /package/dist/{esm/types/src → src}/template-card-parser.d.ts +0 -0
- /package/dist/{esm/types/src → src}/timeout.d.ts +0 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Webhook 辅助函数
|
|
3
|
+
*
|
|
4
|
+
* 从 @mocrane/wecom monitor.ts 迁移的辅助工具函数集合。
|
|
5
|
+
* 包含:文本截断、兜底提示构建、本机路径提取、MIME 推断等。
|
|
6
|
+
*/
|
|
7
|
+
import type { OpenClawConfig } from "openclaw/plugin-sdk";
|
|
8
|
+
import type { StreamState, WecomWebhookTarget, WebhookInboundMessage, WebhookInboundQuote } from "./types.js";
|
|
9
|
+
/** DM 文本最大字节数上限 */
|
|
10
|
+
export declare const STREAM_MAX_DM_BYTES = 200000;
|
|
11
|
+
/** MIME 扩展名映射表 */
|
|
12
|
+
export declare const MIME_BY_EXT: Record<string, string>;
|
|
13
|
+
/**
|
|
14
|
+
* UTF-8 字节截断(保留尾部,截断头部)
|
|
15
|
+
*
|
|
16
|
+
* 对齐原版 truncateUtf8Bytes:保留最后 maxBytes 字节。
|
|
17
|
+
*/
|
|
18
|
+
export declare function truncateUtf8Bytes(text: string, maxBytes: number): string;
|
|
19
|
+
/**
|
|
20
|
+
* 追加 DM 兜底内容(对齐原版 appendDmContent)
|
|
21
|
+
*
|
|
22
|
+
* 每次 deliver 时都追加到 dmContent(不受 STREAM_MAX_BYTES 限制,有 DM 上限保护)
|
|
23
|
+
*/
|
|
24
|
+
export declare function appendDmContent(state: StreamState, text: string): void;
|
|
25
|
+
/**
|
|
26
|
+
* 构建兜底提示文本(对齐原版 buildFallbackPrompt)
|
|
27
|
+
*/
|
|
28
|
+
export declare function buildFallbackPrompt(params: {
|
|
29
|
+
kind: "media" | "timeout" | "error";
|
|
30
|
+
agentConfigured: boolean;
|
|
31
|
+
userId?: string;
|
|
32
|
+
filename?: string;
|
|
33
|
+
chatType?: "group" | "direct";
|
|
34
|
+
}): string;
|
|
35
|
+
/**
|
|
36
|
+
* 从文本中提取本机文件路径(对齐原版 extractLocalFilePathsFromText)
|
|
37
|
+
*/
|
|
38
|
+
export declare function extractLocalFilePathsFromText(text: string): string[];
|
|
39
|
+
/**
|
|
40
|
+
* 从文本中提取本机图片路径(对齐原版 extractLocalImagePathsFromText)
|
|
41
|
+
*
|
|
42
|
+
* 仅提取 text 中存在且也出现在 mustAlsoAppearIn 中的路径(安全:防止泄漏)
|
|
43
|
+
*/
|
|
44
|
+
export declare function extractLocalImagePathsFromText(params: {
|
|
45
|
+
text: string;
|
|
46
|
+
mustAlsoAppearIn: string;
|
|
47
|
+
}): string[];
|
|
48
|
+
/**
|
|
49
|
+
* 判断文本是否包含"发送本机文件"的意图(对齐原版 looksLikeSendLocalFileIntent)
|
|
50
|
+
*/
|
|
51
|
+
export declare function looksLikeSendLocalFileIntent(rawBody: string): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* 计算 taskKey(对齐原版 computeTaskKey)
|
|
54
|
+
*/
|
|
55
|
+
export declare function computeTaskKey(target: WecomWebhookTarget, msg: WebhookInboundMessage): string | undefined;
|
|
56
|
+
/**
|
|
57
|
+
* 检查 Agent 凭证是否已配置(对齐原版 resolveAgentAccountOrUndefined 的简化版)
|
|
58
|
+
*
|
|
59
|
+
* 在 webhook 模式下,Agent 凭证直接来自 target.account,不需要复杂的解析
|
|
60
|
+
*/
|
|
61
|
+
export declare function isAgentConfigured(target: WecomWebhookTarget): boolean;
|
|
62
|
+
/**
|
|
63
|
+
* 从路径猜测 content-type
|
|
64
|
+
*/
|
|
65
|
+
export declare function guessContentTypeFromPath(filePath: string): string | undefined;
|
|
66
|
+
/**
|
|
67
|
+
* 从 StreamState 构建最终流式回复(对齐原版 buildStreamReplyFromState)
|
|
68
|
+
*
|
|
69
|
+
* 包含 images/msg_item,对 content 做 truncateUtf8Bytes。
|
|
70
|
+
*/
|
|
71
|
+
export declare function buildStreamReplyFromState(state: StreamState, maxBytes: number): Record<string, unknown>;
|
|
72
|
+
/**
|
|
73
|
+
* 计算 MD5
|
|
74
|
+
*/
|
|
75
|
+
export declare function computeMd5(data: Buffer | string): string;
|
|
76
|
+
/**
|
|
77
|
+
* 解析媒体最大字节数(对齐原版 resolveWecomMediaMaxBytes)
|
|
78
|
+
*/
|
|
79
|
+
export declare function resolveWecomMediaMaxBytes(cfg: OpenClawConfig): number;
|
|
80
|
+
/** 入站消息解析结果(对齐原版 InboundResult) */
|
|
81
|
+
export type InboundResult = {
|
|
82
|
+
body: string;
|
|
83
|
+
media?: {
|
|
84
|
+
buffer: Buffer;
|
|
85
|
+
contentType: string;
|
|
86
|
+
filename: string;
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* 处理接收消息(对齐原版 processInboundMessage)
|
|
91
|
+
*
|
|
92
|
+
* 解析企业微信传入的消息体:
|
|
93
|
+
* 1. 识别媒体消息(Image/File/Video/Mixed)
|
|
94
|
+
* 2. 如果存在媒体文件,调用 media.ts 进行解密和下载
|
|
95
|
+
* 3. 通过 inferInboundMediaMeta 精确推断 MIME 和文件名
|
|
96
|
+
* 4. 构造统一的 InboundResult 供后续 Agent 处理
|
|
97
|
+
*
|
|
98
|
+
* @param target Webhook 目标配置
|
|
99
|
+
* @param msg 企业微信原始消息对象
|
|
100
|
+
*/
|
|
101
|
+
export declare function processInboundMessage(target: WecomWebhookTarget, msg: WebhookInboundMessage): Promise<InboundResult>;
|
|
102
|
+
/**
|
|
103
|
+
* 构建 Agent 调度所需的 config(对齐原版 cfgForDispatch 逻辑)
|
|
104
|
+
*
|
|
105
|
+
* 关键修改:
|
|
106
|
+
* - tools.deny += "message"(防止 Agent 绕过 Bot 交付)
|
|
107
|
+
* - blockStreamingChunk / blockStreamingCoalesce 使用更小的阈值
|
|
108
|
+
*/
|
|
109
|
+
export declare function buildCfgForDispatch(config: OpenClawConfig): OpenClawConfig;
|
|
110
|
+
/**
|
|
111
|
+
* 解析企微 Bot 回调中的发送者 userid(对齐原版 resolveWecomSenderUserId)
|
|
112
|
+
*
|
|
113
|
+
* 优先级:from.userid → fromuserid → from_userid → fromUserId
|
|
114
|
+
*/
|
|
115
|
+
export declare function resolveWecomSenderUserId(msg: WebhookInboundMessage): string | undefined;
|
|
116
|
+
/**
|
|
117
|
+
* 构造入站消息文本内容(对齐原版 buildInboundBody)
|
|
118
|
+
*
|
|
119
|
+
* 根据消息类型提取文本表示:
|
|
120
|
+
* - text → text.content
|
|
121
|
+
* - voice → voice.content 或 "[voice]"
|
|
122
|
+
* - image → "[image] {url}"
|
|
123
|
+
* - file → "[file] {url}"
|
|
124
|
+
* - video → "[video] {url}"
|
|
125
|
+
* - mixed → 逐项提取拼接
|
|
126
|
+
* - event → "[event] {eventtype}"
|
|
127
|
+
* - stream → "[stream_refresh] {id}"
|
|
128
|
+
*
|
|
129
|
+
* 如果消息包含 quote(引用),追加引用内容。
|
|
130
|
+
*/
|
|
131
|
+
export declare function buildInboundBody(msg: WebhookInboundMessage): string;
|
|
132
|
+
/**
|
|
133
|
+
* 格式化引用消息文本(对齐原版 formatQuote)
|
|
134
|
+
*/
|
|
135
|
+
export declare function formatQuote(quote: WebhookInboundQuote): string;
|
|
136
|
+
/** 检查消息是否有媒体内容 */
|
|
137
|
+
export declare function hasMedia(message: WebhookInboundMessage): boolean;
|
|
138
|
+
/**
|
|
139
|
+
* 构造占位符响应(对齐原版 buildStreamPlaceholderReply)
|
|
140
|
+
*
|
|
141
|
+
* 用于 active_new / queued_new 场景:finish=false,显示占位符文本。
|
|
142
|
+
* 原版规范:第一次回复内容为 "1" 作为最小占位符。
|
|
143
|
+
*/
|
|
144
|
+
export declare function buildStreamPlaceholderReply(streamId: string, placeholderContent?: string): Record<string, unknown>;
|
|
145
|
+
/**
|
|
146
|
+
* 构造文本占位符响应(对齐原版 buildStreamTextPlaceholderReply)
|
|
147
|
+
*
|
|
148
|
+
* 用于 merged 场景:finish=false,显示自定义提示(如"已合并排队处理中...")。
|
|
149
|
+
*/
|
|
150
|
+
export declare function buildStreamTextPlaceholderReply(streamId: string, content: string): Record<string, unknown>;
|
|
151
|
+
/**
|
|
152
|
+
* 构造流式响应(从 StreamState 构建)
|
|
153
|
+
*
|
|
154
|
+
* 用于 stream_refresh 和 msgid 去重场景:返回当前累积内容 + finish 标记。
|
|
155
|
+
*/
|
|
156
|
+
export declare function buildStreamResponse(stream: StreamState): Record<string, unknown>;
|