ylib-wecom-openclaw-plugin 2026.4.29
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 +596 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +99 -0
- package/dist/src/accounts.d.ts +57 -0
- package/dist/src/accounts.js +247 -0
- package/dist/src/agent/api-client.d.ts +95 -0
- package/dist/src/agent/api-client.js +425 -0
- package/dist/src/agent/handler.d.ts +64 -0
- package/dist/src/agent/handler.js +731 -0
- package/dist/src/agent/index.d.ts +5 -0
- package/dist/src/agent/index.js +21 -0
- package/dist/src/agent/webhook.d.ts +25 -0
- package/dist/src/agent/webhook.js +294 -0
- package/dist/src/agent/xml.d.ts +21 -0
- package/dist/src/agent/xml.js +43 -0
- package/dist/src/channel.d.ts +5 -0
- package/dist/src/channel.js +815 -0
- package/dist/src/chat-queue.d.ts +31 -0
- package/dist/src/chat-queue.js +53 -0
- package/dist/src/config-schema.d.ts +587 -0
- package/dist/src/config-schema.js +146 -0
- package/dist/src/const.d.ts +128 -0
- package/dist/src/const.js +168 -0
- package/dist/src/dm-policy.d.ts +29 -0
- package/dist/src/dm-policy.js +146 -0
- package/dist/src/dynamic-agent.d.ts +37 -0
- package/dist/src/dynamic-agent.js +67 -0
- package/dist/src/dynamic-routing.d.ts +65 -0
- package/dist/src/dynamic-routing.js +62 -0
- package/dist/src/endpoint-dispatch.d.ts +54 -0
- package/dist/src/endpoint-dispatch.js +967 -0
- package/dist/src/endpoint-event-adapter.d.ts +15 -0
- package/dist/src/endpoint-event-adapter.js +427 -0
- package/dist/src/group-policy.d.ts +30 -0
- package/dist/src/group-policy.js +126 -0
- package/dist/src/http.d.ts +27 -0
- package/dist/src/http.js +168 -0
- package/dist/src/im-runtime-telemetry.d.ts +25 -0
- package/dist/src/im-runtime-telemetry.js +68 -0
- package/dist/src/interface.d.ts +192 -0
- package/dist/src/interface.js +5 -0
- package/dist/src/markdown-chunk.d.ts +1 -0
- package/dist/src/markdown-chunk.js +396 -0
- package/dist/src/mcp/index.d.ts +6 -0
- package/dist/src/mcp/index.js +28 -0
- package/dist/src/mcp/interceptors/biz-error.d.ts +11 -0
- package/dist/src/mcp/interceptors/biz-error.js +73 -0
- package/dist/src/mcp/interceptors/doc-auth-error.d.ts +10 -0
- package/dist/src/mcp/interceptors/doc-auth-error.js +235 -0
- package/dist/src/mcp/interceptors/index.d.ts +35 -0
- package/dist/src/mcp/interceptors/index.js +143 -0
- package/dist/src/mcp/interceptors/msg-media.d.ts +11 -0
- package/dist/src/mcp/interceptors/msg-media.js +201 -0
- package/dist/src/mcp/interceptors/smartpage-create.d.ts +30 -0
- package/dist/src/mcp/interceptors/smartpage-create.js +252 -0
- package/dist/src/mcp/interceptors/smartpage-export.d.ts +17 -0
- package/dist/src/mcp/interceptors/smartpage-export.js +135 -0
- package/dist/src/mcp/interceptors/smartsheet-upload.d.ts +22 -0
- package/dist/src/mcp/interceptors/smartsheet-upload.js +388 -0
- package/dist/src/mcp/interceptors/types.d.ts +64 -0
- package/dist/src/mcp/interceptors/types.js +8 -0
- package/dist/src/mcp/schema.d.ts +11 -0
- package/dist/src/mcp/schema.js +115 -0
- package/dist/src/mcp/tool.d.ts +63 -0
- package/dist/src/mcp/tool.js +318 -0
- package/dist/src/mcp/transport.d.ts +94 -0
- package/dist/src/mcp/transport.js +702 -0
- package/dist/src/media-handler.d.ts +55 -0
- package/dist/src/media-handler.js +306 -0
- package/dist/src/media-uploader.d.ts +142 -0
- package/dist/src/media-uploader.js +446 -0
- package/dist/src/message-parser.d.ts +104 -0
- package/dist/src/message-parser.js +232 -0
- package/dist/src/message-sender.d.ts +54 -0
- package/dist/src/message-sender.js +210 -0
- package/dist/src/monitor.d.ts +69 -0
- package/dist/src/monitor.js +1846 -0
- package/dist/src/onboarding.d.ts +8 -0
- package/dist/src/onboarding.js +248 -0
- package/dist/src/openclaw-compat.d.ts +148 -0
- package/dist/src/openclaw-compat.js +839 -0
- package/dist/src/proactive-markdown-send.d.ts +14 -0
- package/dist/src/proactive-markdown-send.js +205 -0
- package/dist/src/reqid-store.d.ts +23 -0
- package/dist/src/reqid-store.js +136 -0
- package/dist/src/runtime.d.ts +2 -0
- package/dist/src/runtime.js +7 -0
- package/dist/src/shared/command-auth.d.ts +23 -0
- package/dist/src/shared/command-auth.js +112 -0
- package/dist/src/shared/xml-parser.d.ts +46 -0
- package/dist/src/shared/xml-parser.js +228 -0
- package/dist/src/state-dir-resolve.d.ts +2 -0
- package/dist/src/state-dir-resolve.js +33 -0
- package/dist/src/state-manager.d.ts +115 -0
- package/dist/src/state-manager.js +413 -0
- package/dist/src/target.d.ts +35 -0
- package/dist/src/target.js +71 -0
- package/dist/src/template-card-manager.d.ts +55 -0
- package/dist/src/template-card-manager.js +316 -0
- package/dist/src/template-card-parser.d.ts +37 -0
- package/dist/src/template-card-parser.js +672 -0
- package/dist/src/timeout.d.ts +20 -0
- package/dist/src/timeout.js +57 -0
- package/dist/src/types/account.d.ts +29 -0
- package/dist/src/types/account.js +5 -0
- package/dist/src/types/config.d.ts +98 -0
- package/dist/src/types/config.js +8 -0
- package/dist/src/types/constants.d.ts +42 -0
- package/dist/src/types/constants.js +45 -0
- package/dist/src/types/index.d.ts +7 -0
- package/dist/src/types/index.js +17 -0
- package/dist/src/types/message.d.ts +238 -0
- package/dist/src/types/message.js +6 -0
- package/dist/src/utils.d.ts +148 -0
- package/dist/src/utils.js +92 -0
- package/dist/src/version.d.ts +2 -0
- package/dist/src/version.js +28 -0
- package/dist/src/webhook/command-auth.d.ts +47 -0
- package/dist/src/webhook/command-auth.js +137 -0
- package/dist/src/webhook/gateway.d.ts +36 -0
- package/dist/src/webhook/gateway.js +297 -0
- package/dist/src/webhook/handler.d.ts +19 -0
- package/dist/src/webhook/handler.js +481 -0
- package/dist/src/webhook/helpers.d.ts +157 -0
- package/dist/src/webhook/helpers.js +936 -0
- package/dist/src/webhook/http.d.ts +27 -0
- package/dist/src/webhook/http.js +168 -0
- package/dist/src/webhook/index.d.ts +11 -0
- package/dist/src/webhook/index.js +43 -0
- package/dist/src/webhook/media.d.ts +30 -0
- package/dist/src/webhook/media.js +152 -0
- package/dist/src/webhook/monitor.d.ts +59 -0
- package/dist/src/webhook/monitor.js +1672 -0
- package/dist/src/webhook/state.d.ts +220 -0
- package/dist/src/webhook/state.js +568 -0
- package/dist/src/webhook/target.d.ts +41 -0
- package/dist/src/webhook/target.js +165 -0
- package/dist/src/webhook/types.d.ts +348 -0
- package/dist/src/webhook/types.js +36 -0
- package/dist/src/webhook/video-frame.d.ts +13 -0
- package/dist/src/webhook/video-frame.js +108 -0
- package/openclaw.plugin.json +19 -0
- package/package.json +96 -0
- package/schema.json +534 -0
- package/scripts/generate-schema.mjs +33 -0
- package/skills/wecom-contact/SKILL.md +162 -0
- package/skills/wecom-doc/SKILL.md +162 -0
- package/skills/wecom-doc/references/create-doc.md +56 -0
- package/skills/wecom-doc/references/edit-doc-content.md +68 -0
- package/skills/wecom-doc/references/get-doc-content.md +88 -0
- package/skills/wecom-doc/references/smartpage-create.md +125 -0
- package/skills/wecom-doc/references/smartpage-export.md +160 -0
- package/skills/wecom-meeting/SKILL.md +441 -0
- package/skills/wecom-meeting/references/example-full.md +30 -0
- package/skills/wecom-meeting/references/example-reminder.md +46 -0
- package/skills/wecom-meeting/references/example-security.md +22 -0
- package/skills/wecom-meeting/references/response-get-meeting-info.md +148 -0
- package/skills/wecom-msg/SKILL.md +157 -0
- package/skills/wecom-msg/references/api-get-messages.md +93 -0
- package/skills/wecom-msg/references/api-get-msg-chat-list.md +58 -0
- package/skills/wecom-msg/references/api-get-msg-media.md +44 -0
- package/skills/wecom-msg/references/api-send-message.md +39 -0
- package/skills/wecom-preflight/SKILL.md +141 -0
- package/skills/wecom-schedule/SKILL.md +161 -0
- package/skills/wecom-schedule/references/api-check-availability.md +56 -0
- package/skills/wecom-schedule/references/api-create-schedule.md +38 -0
- package/skills/wecom-schedule/references/api-get-schedule-detail.md +81 -0
- package/skills/wecom-schedule/references/api-update-schedule.md +32 -0
- package/skills/wecom-schedule/references/ref-reminders.md +24 -0
- package/skills/wecom-send-media/SKILL.md +68 -0
- package/skills/wecom-send-template-card/SKILL.md +157 -0
- package/skills/wecom-send-template-card/references/api-template-card-types.md +358 -0
- package/skills/wecom-smartsheet/SKILL.md +164 -0
- package/skills/wecom-smartsheet/references/smartsheet-cell-value-formats.md +163 -0
- package/skills/wecom-smartsheet/references/smartsheet-field-types.md +44 -0
- package/skills/wecom-smartsheet/references/smartsheet-get-records.md +96 -0
- package/skills/wecom-smartsheet/references/webhook-examples.md +185 -0
- package/skills/wecom-smartsheet/references/webhook-fallback.md +184 -0
- package/skills/wecom-todo/SKILL.md +392 -0
- package/skills/wecom-todo/examples/workflows.md +163 -0
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* WeCom XML 解析器
|
|
4
|
+
* 用于 Agent 模式解析 XML 格式消息
|
|
5
|
+
*/
|
|
6
|
+
exports.__esModule = true;
|
|
7
|
+
exports.extractMsgId = exports.extractMediaId = exports.extractContent = exports.extractAgentId = exports.extractChatId = exports.extractToUser = exports.extractFileName = exports.extractFromUser = exports.extractMsgType = exports.parseXml = void 0;
|
|
8
|
+
var fast_xml_parser_1 = require("fast-xml-parser");
|
|
9
|
+
var xmlParser = new fast_xml_parser_1.XMLParser({
|
|
10
|
+
ignoreAttributes: false,
|
|
11
|
+
trimValues: true,
|
|
12
|
+
processEntities: false,
|
|
13
|
+
parseTagValue: false,
|
|
14
|
+
parseAttributeValue: false
|
|
15
|
+
});
|
|
16
|
+
/**
|
|
17
|
+
* 解析 XML 字符串为消息对象
|
|
18
|
+
*/
|
|
19
|
+
function parseXml(xml) {
|
|
20
|
+
var _a;
|
|
21
|
+
var obj = xmlParser.parse(xml);
|
|
22
|
+
var root = (_a = obj === null || obj === void 0 ? void 0 : obj.xml) !== null && _a !== void 0 ? _a : obj;
|
|
23
|
+
return root !== null && root !== void 0 ? root : {};
|
|
24
|
+
}
|
|
25
|
+
exports.parseXml = parseXml;
|
|
26
|
+
/**
|
|
27
|
+
* 从 XML 中提取消息类型
|
|
28
|
+
*/
|
|
29
|
+
function extractMsgType(msg) {
|
|
30
|
+
var _a;
|
|
31
|
+
return String((_a = msg.MsgType) !== null && _a !== void 0 ? _a : "").toLowerCase();
|
|
32
|
+
}
|
|
33
|
+
exports.extractMsgType = extractMsgType;
|
|
34
|
+
/**
|
|
35
|
+
* 从 XML 中提取发送者 ID
|
|
36
|
+
*/
|
|
37
|
+
function extractFromUser(msg) {
|
|
38
|
+
var _a;
|
|
39
|
+
return String((_a = msg.FromUserName) !== null && _a !== void 0 ? _a : "");
|
|
40
|
+
}
|
|
41
|
+
exports.extractFromUser = extractFromUser;
|
|
42
|
+
/**
|
|
43
|
+
* 从 XML 中提取文件名(主要用于 file 消息)
|
|
44
|
+
*/
|
|
45
|
+
function extractFileName(msg) {
|
|
46
|
+
var _a, _b, _c;
|
|
47
|
+
var raw = (_c = (_b = (_a = msg.FileName) !== null && _a !== void 0 ? _a : msg.Filename) !== null && _b !== void 0 ? _b : msg.fileName) !== null && _c !== void 0 ? _c : msg.filename;
|
|
48
|
+
if (raw == null)
|
|
49
|
+
return undefined;
|
|
50
|
+
if (typeof raw === "string")
|
|
51
|
+
return raw.trim() || undefined;
|
|
52
|
+
if (typeof raw === "number" || typeof raw === "boolean" || typeof raw === "bigint")
|
|
53
|
+
return String(raw);
|
|
54
|
+
if (Array.isArray(raw)) {
|
|
55
|
+
var merged = raw.map(function (v) { return (v == null ? "" : String(v)); }).join("\n").trim();
|
|
56
|
+
return merged || undefined;
|
|
57
|
+
}
|
|
58
|
+
if (typeof raw === "object") {
|
|
59
|
+
var obj = raw;
|
|
60
|
+
var text = (typeof obj["#text"] === "string" ? obj["#text"] :
|
|
61
|
+
typeof obj["_text"] === "string" ? obj["_text"] :
|
|
62
|
+
typeof obj["text"] === "string" ? obj["text"] : undefined);
|
|
63
|
+
if (text && text.trim())
|
|
64
|
+
return text.trim();
|
|
65
|
+
}
|
|
66
|
+
var s = String(raw);
|
|
67
|
+
return s.trim() || undefined;
|
|
68
|
+
}
|
|
69
|
+
exports.extractFileName = extractFileName;
|
|
70
|
+
/**
|
|
71
|
+
* 从 XML 中提取接收者 ID (CorpID)
|
|
72
|
+
*/
|
|
73
|
+
function extractToUser(msg) {
|
|
74
|
+
var _a;
|
|
75
|
+
return String((_a = msg.ToUserName) !== null && _a !== void 0 ? _a : "");
|
|
76
|
+
}
|
|
77
|
+
exports.extractToUser = extractToUser;
|
|
78
|
+
/**
|
|
79
|
+
* 从 XML 中提取群聊 ID
|
|
80
|
+
*/
|
|
81
|
+
function extractChatId(msg) {
|
|
82
|
+
return msg.ChatId ? String(msg.ChatId) : undefined;
|
|
83
|
+
}
|
|
84
|
+
exports.extractChatId = extractChatId;
|
|
85
|
+
/**
|
|
86
|
+
* 从 XML 中提取 AgentID(兼容 AgentID/agentid 等大小写)
|
|
87
|
+
*/
|
|
88
|
+
function extractAgentId(msg) {
|
|
89
|
+
var _a, _b, _c;
|
|
90
|
+
var raw = (_c = (_b = (_a = msg.AgentID) !== null && _a !== void 0 ? _a : msg.AgentId) !== null && _b !== void 0 ? _b : msg.agentid) !== null && _c !== void 0 ? _c : msg.agentId;
|
|
91
|
+
if (raw == null)
|
|
92
|
+
return undefined;
|
|
93
|
+
if (typeof raw === "string")
|
|
94
|
+
return raw.trim() || undefined;
|
|
95
|
+
if (typeof raw === "number")
|
|
96
|
+
return raw;
|
|
97
|
+
var asString = String(raw).trim();
|
|
98
|
+
return asString || undefined;
|
|
99
|
+
}
|
|
100
|
+
exports.extractAgentId = extractAgentId;
|
|
101
|
+
/**
|
|
102
|
+
* 从 XML 中提取消息内容
|
|
103
|
+
*/
|
|
104
|
+
function extractContent(msg) {
|
|
105
|
+
var msgType = extractMsgType(msg);
|
|
106
|
+
var asText = function (value) {
|
|
107
|
+
if (value == null)
|
|
108
|
+
return "";
|
|
109
|
+
if (typeof value === "string")
|
|
110
|
+
return value;
|
|
111
|
+
if (typeof value === "number" || typeof value === "boolean" || typeof value === "bigint")
|
|
112
|
+
return String(value);
|
|
113
|
+
if (Array.isArray(value))
|
|
114
|
+
return value.map(asText).filter(Boolean).join("\n");
|
|
115
|
+
if (typeof value === "object") {
|
|
116
|
+
var obj = value;
|
|
117
|
+
// fast-xml-parser 在某些情况下(例如带属性)会把文本放在 "#text"
|
|
118
|
+
if (typeof obj["#text"] === "string")
|
|
119
|
+
return obj["#text"];
|
|
120
|
+
if (typeof obj["_text"] === "string")
|
|
121
|
+
return obj["_text"];
|
|
122
|
+
if (typeof obj["text"] === "string")
|
|
123
|
+
return obj["text"];
|
|
124
|
+
try {
|
|
125
|
+
return JSON.stringify(obj);
|
|
126
|
+
}
|
|
127
|
+
catch (_a) {
|
|
128
|
+
return String(value);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return String(value);
|
|
132
|
+
};
|
|
133
|
+
switch (msgType) {
|
|
134
|
+
case "text":
|
|
135
|
+
return asText(msg.Content);
|
|
136
|
+
case "voice":
|
|
137
|
+
// 语音识别结果
|
|
138
|
+
return asText(msg.Recognition) || "[语音消息]";
|
|
139
|
+
case "image":
|
|
140
|
+
return "[\u56FE\u7247] " + asText(msg.PicUrl);
|
|
141
|
+
case "file":
|
|
142
|
+
return "[文件消息]";
|
|
143
|
+
case "video":
|
|
144
|
+
return "[视频消息]";
|
|
145
|
+
case "location":
|
|
146
|
+
return "[\u4F4D\u7F6E] " + asText(msg.Label) + " (" + asText(msg.Location_X) + ", " + asText(msg.Location_Y) + ")";
|
|
147
|
+
case "link":
|
|
148
|
+
return "[\u94FE\u63A5] " + asText(msg.Title) + "\n" + asText(msg.Description) + "\n" + asText(msg.Url);
|
|
149
|
+
case "event":
|
|
150
|
+
return "[\u4E8B\u4EF6] " + asText(msg.Event) + " - " + asText(msg.EventKey);
|
|
151
|
+
default:
|
|
152
|
+
return "[" + (msgType || "未知消息类型") + "]";
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
exports.extractContent = extractContent;
|
|
156
|
+
/**
|
|
157
|
+
* 从 XML 中提取媒体 ID (Image, Voice, Video)
|
|
158
|
+
* 根据官方文档,MediaId 在 Agent 回调中直接位于根节点
|
|
159
|
+
*/
|
|
160
|
+
function extractMediaId(msg) {
|
|
161
|
+
var _a, _b, _c;
|
|
162
|
+
var raw = (_c = (_b = (_a = msg.MediaId) !== null && _a !== void 0 ? _a : msg.MediaID) !== null && _b !== void 0 ? _b : msg.mediaid) !== null && _c !== void 0 ? _c : msg.mediaId;
|
|
163
|
+
if (raw == null)
|
|
164
|
+
return undefined;
|
|
165
|
+
if (typeof raw === "string")
|
|
166
|
+
return raw.trim() || undefined;
|
|
167
|
+
if (typeof raw === "number" || typeof raw === "boolean" || typeof raw === "bigint")
|
|
168
|
+
return String(raw);
|
|
169
|
+
if (Array.isArray(raw)) {
|
|
170
|
+
var merged = raw.map(function (v) { return (v == null ? "" : String(v)); }).join("\n").trim();
|
|
171
|
+
return merged || undefined;
|
|
172
|
+
}
|
|
173
|
+
if (typeof raw === "object") {
|
|
174
|
+
var obj = raw;
|
|
175
|
+
var text = (typeof obj["#text"] === "string" ? obj["#text"] :
|
|
176
|
+
typeof obj["_text"] === "string" ? obj["_text"] :
|
|
177
|
+
typeof obj["text"] === "string" ? obj["text"] : undefined);
|
|
178
|
+
if (text && text.trim())
|
|
179
|
+
return text.trim();
|
|
180
|
+
try {
|
|
181
|
+
var s_1 = JSON.stringify(obj);
|
|
182
|
+
return s_1.trim() || undefined;
|
|
183
|
+
}
|
|
184
|
+
catch (_d) {
|
|
185
|
+
var s_2 = String(raw);
|
|
186
|
+
return s_2.trim() || undefined;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
var s = String(raw);
|
|
190
|
+
return s.trim() || undefined;
|
|
191
|
+
}
|
|
192
|
+
exports.extractMediaId = extractMediaId;
|
|
193
|
+
/**
|
|
194
|
+
* 从 XML 中提取 MsgId(用于去重)
|
|
195
|
+
*/
|
|
196
|
+
function extractMsgId(msg) {
|
|
197
|
+
var _a, _b, _c;
|
|
198
|
+
var raw = (_c = (_b = (_a = msg.MsgId) !== null && _a !== void 0 ? _a : msg.MsgID) !== null && _b !== void 0 ? _b : msg.msgid) !== null && _c !== void 0 ? _c : msg.msgId;
|
|
199
|
+
if (raw == null)
|
|
200
|
+
return undefined;
|
|
201
|
+
if (typeof raw === "string")
|
|
202
|
+
return raw.trim() || undefined;
|
|
203
|
+
if (typeof raw === "number" || typeof raw === "boolean" || typeof raw === "bigint")
|
|
204
|
+
return String(raw);
|
|
205
|
+
if (Array.isArray(raw)) {
|
|
206
|
+
var merged = raw.map(function (v) { return (v == null ? "" : String(v)); }).join("\n").trim();
|
|
207
|
+
return merged || undefined;
|
|
208
|
+
}
|
|
209
|
+
if (typeof raw === "object") {
|
|
210
|
+
var obj = raw;
|
|
211
|
+
var text = (typeof obj["#text"] === "string" ? obj["#text"] :
|
|
212
|
+
typeof obj["_text"] === "string" ? obj["_text"] :
|
|
213
|
+
typeof obj["text"] === "string" ? obj["text"] : undefined);
|
|
214
|
+
if (text && text.trim())
|
|
215
|
+
return text.trim();
|
|
216
|
+
try {
|
|
217
|
+
var s_3 = JSON.stringify(obj);
|
|
218
|
+
return s_3.trim() || undefined;
|
|
219
|
+
}
|
|
220
|
+
catch (_d) {
|
|
221
|
+
var s_4 = String(raw);
|
|
222
|
+
return s_4.trim() || undefined;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
var s = String(raw);
|
|
226
|
+
return s.trim() || undefined;
|
|
227
|
+
}
|
|
228
|
+
exports.extractMsgId = extractMsgId;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
exports.__esModule = true;
|
|
22
|
+
exports.resolveStateDir = void 0;
|
|
23
|
+
var path = __importStar(require("node:path"));
|
|
24
|
+
var os = __importStar(require("node:os"));
|
|
25
|
+
/** 解析 openclaw 状态目录 */
|
|
26
|
+
function resolveStateDir() {
|
|
27
|
+
var _a, _b;
|
|
28
|
+
var stateOverride = ((_a = process.env.OPENCLAW_STATE_DIR) === null || _a === void 0 ? void 0 : _a.trim()) || ((_b = process.env.CLAWDBOT_STATE_DIR) === null || _b === void 0 ? void 0 : _b.trim());
|
|
29
|
+
if (stateOverride)
|
|
30
|
+
return stateOverride;
|
|
31
|
+
return path.join(os.homedir(), ".openclaw");
|
|
32
|
+
}
|
|
33
|
+
exports.resolveStateDir = resolveStateDir;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 企业微信全局状态管理模块
|
|
3
|
+
*
|
|
4
|
+
* 负责管理 WSClient 实例、消息状态(带 TTL 清理)、ReqId 存储
|
|
5
|
+
* 解决全局 Map 的内存泄漏问题
|
|
6
|
+
*/
|
|
7
|
+
import type { WSClient } from "@wecom/aibot-node-sdk";
|
|
8
|
+
import type { MessageState } from "./interface.js";
|
|
9
|
+
export interface WeComConnectionSnapshot {
|
|
10
|
+
accountId: string;
|
|
11
|
+
connected: boolean;
|
|
12
|
+
authenticated: boolean;
|
|
13
|
+
running: boolean;
|
|
14
|
+
restartPending: boolean;
|
|
15
|
+
lastEvent: string | null;
|
|
16
|
+
lastEventAt: number | null;
|
|
17
|
+
lastStartAt: number | null;
|
|
18
|
+
lastStopAt: number | null;
|
|
19
|
+
lastError: string | null;
|
|
20
|
+
reconnectAttempts: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* 获取指定账户的 WSClient 实例
|
|
24
|
+
*/
|
|
25
|
+
export declare function getWeComWebSocket(accountId: string): WSClient | null;
|
|
26
|
+
/**
|
|
27
|
+
* 设置指定账户的 WSClient 实例
|
|
28
|
+
*/
|
|
29
|
+
export declare function setWeComWebSocket(accountId: string, client: WSClient): void;
|
|
30
|
+
/**
|
|
31
|
+
* 删除指定账户的 WSClient 实例
|
|
32
|
+
*/
|
|
33
|
+
export declare function deleteWeComWebSocket(accountId: string): void;
|
|
34
|
+
export declare function updateWeComConnectionSnapshot(accountId: string, patch: Partial<WeComConnectionSnapshot>): WeComConnectionSnapshot;
|
|
35
|
+
export declare function getWeComConnectionSnapshot(accountId: string): WeComConnectionSnapshot | null;
|
|
36
|
+
export declare function deleteWeComConnectionSnapshot(accountId: string): void;
|
|
37
|
+
/**
|
|
38
|
+
* 启动消息状态定期清理(自动 TTL 清理 + 容量限制)
|
|
39
|
+
*/
|
|
40
|
+
export declare function startMessageStateCleanup(): void;
|
|
41
|
+
/**
|
|
42
|
+
* 停止消息状态定期清理
|
|
43
|
+
*/
|
|
44
|
+
export declare function stopMessageStateCleanup(): void;
|
|
45
|
+
/**
|
|
46
|
+
* 设置消息状态
|
|
47
|
+
*/
|
|
48
|
+
export declare function setMessageState(messageId: string, state: MessageState): void;
|
|
49
|
+
/**
|
|
50
|
+
* 获取消息状态
|
|
51
|
+
*/
|
|
52
|
+
export declare function getMessageState(messageId: string): MessageState | undefined;
|
|
53
|
+
/**
|
|
54
|
+
* 删除消息状态
|
|
55
|
+
*/
|
|
56
|
+
export declare function deleteMessageState(messageId: string): void;
|
|
57
|
+
/**
|
|
58
|
+
* 清空所有消息状态
|
|
59
|
+
*/
|
|
60
|
+
export declare function clearAllMessageStates(): void;
|
|
61
|
+
/**
|
|
62
|
+
* 设置 chatId 对应的 reqId(写入内存 + 防抖写磁盘)
|
|
63
|
+
*/
|
|
64
|
+
export declare function setReqIdForChat(chatId: string, reqId: string, accountId?: string): void;
|
|
65
|
+
/**
|
|
66
|
+
* 获取 chatId 对应的 reqId(异步:优先内存,miss 时查磁盘并回填内存)
|
|
67
|
+
*/
|
|
68
|
+
export declare function getReqIdForChatAsync(chatId: string, accountId?: string): Promise<string | undefined>;
|
|
69
|
+
/**
|
|
70
|
+
* 获取 chatId 对应的 reqId(同步:仅内存,保留向后兼容)
|
|
71
|
+
*/
|
|
72
|
+
export declare function getReqIdForChat(chatId: string, accountId?: string): string | undefined;
|
|
73
|
+
/**
|
|
74
|
+
* 删除 chatId 对应的 reqId
|
|
75
|
+
*/
|
|
76
|
+
export declare function deleteReqIdForChat(chatId: string, accountId?: string): void;
|
|
77
|
+
/**
|
|
78
|
+
* 启动时预热 reqId 缓存(从磁盘加载到内存)
|
|
79
|
+
*
|
|
80
|
+
* 注意:由于移除了磁盘存储,此函数现在只返回 0(无预热条目)
|
|
81
|
+
*/
|
|
82
|
+
export declare function warmupReqIdStore(accountId?: string, log?: (...args: unknown[]) => void): Promise<number>;
|
|
83
|
+
/**
|
|
84
|
+
* 立即将 reqId 数据刷写到磁盘(用于优雅退出)
|
|
85
|
+
*
|
|
86
|
+
* 注意:由于移除了磁盘存储,此函数现在是无操作
|
|
87
|
+
*/
|
|
88
|
+
export declare function flushReqIdStore(accountId?: string): Promise<void>;
|
|
89
|
+
/** 会话 chat 信息 */
|
|
90
|
+
export interface SessionChatInfo {
|
|
91
|
+
/** 原始大小写的 chatId(群 ID 或用户 ID) */
|
|
92
|
+
chatId: string;
|
|
93
|
+
/** 聊天类型:single(单聊)或 group(群聊) */
|
|
94
|
+
chatType: "single" | "group";
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* 记录 sessionKey 对应的原始会话信息(由 monitor.ts 在消息入站时调用)
|
|
98
|
+
*/
|
|
99
|
+
export declare function setSessionChatInfo(sessionKey: string, info: SessionChatInfo): void;
|
|
100
|
+
/**
|
|
101
|
+
* 获取 sessionKey 对应的原始会话信息(由 registerTool 闭包调用)
|
|
102
|
+
*/
|
|
103
|
+
export declare function getSessionChatInfo(sessionKey: string | undefined): SessionChatInfo | undefined;
|
|
104
|
+
/**
|
|
105
|
+
* 删除 sessionKey 对应的会话信息(会话结束时可选调用)
|
|
106
|
+
*/
|
|
107
|
+
export declare function deleteSessionChatInfo(sessionKey: string): void;
|
|
108
|
+
/**
|
|
109
|
+
* 清理指定账户的所有资源
|
|
110
|
+
*/
|
|
111
|
+
export declare function cleanupAccount(accountId: string): Promise<void>;
|
|
112
|
+
/**
|
|
113
|
+
* 清理所有资源(用于进程退出)
|
|
114
|
+
*/
|
|
115
|
+
export declare function cleanupAll(): Promise<void>;
|