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.
Files changed (180) hide show
  1. package/README.md +596 -0
  2. package/dist/index.d.ts +10 -0
  3. package/dist/index.js +99 -0
  4. package/dist/src/accounts.d.ts +57 -0
  5. package/dist/src/accounts.js +247 -0
  6. package/dist/src/agent/api-client.d.ts +95 -0
  7. package/dist/src/agent/api-client.js +425 -0
  8. package/dist/src/agent/handler.d.ts +64 -0
  9. package/dist/src/agent/handler.js +731 -0
  10. package/dist/src/agent/index.d.ts +5 -0
  11. package/dist/src/agent/index.js +21 -0
  12. package/dist/src/agent/webhook.d.ts +25 -0
  13. package/dist/src/agent/webhook.js +294 -0
  14. package/dist/src/agent/xml.d.ts +21 -0
  15. package/dist/src/agent/xml.js +43 -0
  16. package/dist/src/channel.d.ts +5 -0
  17. package/dist/src/channel.js +815 -0
  18. package/dist/src/chat-queue.d.ts +31 -0
  19. package/dist/src/chat-queue.js +53 -0
  20. package/dist/src/config-schema.d.ts +587 -0
  21. package/dist/src/config-schema.js +146 -0
  22. package/dist/src/const.d.ts +128 -0
  23. package/dist/src/const.js +168 -0
  24. package/dist/src/dm-policy.d.ts +29 -0
  25. package/dist/src/dm-policy.js +146 -0
  26. package/dist/src/dynamic-agent.d.ts +37 -0
  27. package/dist/src/dynamic-agent.js +67 -0
  28. package/dist/src/dynamic-routing.d.ts +65 -0
  29. package/dist/src/dynamic-routing.js +62 -0
  30. package/dist/src/endpoint-dispatch.d.ts +54 -0
  31. package/dist/src/endpoint-dispatch.js +967 -0
  32. package/dist/src/endpoint-event-adapter.d.ts +15 -0
  33. package/dist/src/endpoint-event-adapter.js +427 -0
  34. package/dist/src/group-policy.d.ts +30 -0
  35. package/dist/src/group-policy.js +126 -0
  36. package/dist/src/http.d.ts +27 -0
  37. package/dist/src/http.js +168 -0
  38. package/dist/src/im-runtime-telemetry.d.ts +25 -0
  39. package/dist/src/im-runtime-telemetry.js +68 -0
  40. package/dist/src/interface.d.ts +192 -0
  41. package/dist/src/interface.js +5 -0
  42. package/dist/src/markdown-chunk.d.ts +1 -0
  43. package/dist/src/markdown-chunk.js +396 -0
  44. package/dist/src/mcp/index.d.ts +6 -0
  45. package/dist/src/mcp/index.js +28 -0
  46. package/dist/src/mcp/interceptors/biz-error.d.ts +11 -0
  47. package/dist/src/mcp/interceptors/biz-error.js +73 -0
  48. package/dist/src/mcp/interceptors/doc-auth-error.d.ts +10 -0
  49. package/dist/src/mcp/interceptors/doc-auth-error.js +235 -0
  50. package/dist/src/mcp/interceptors/index.d.ts +35 -0
  51. package/dist/src/mcp/interceptors/index.js +143 -0
  52. package/dist/src/mcp/interceptors/msg-media.d.ts +11 -0
  53. package/dist/src/mcp/interceptors/msg-media.js +201 -0
  54. package/dist/src/mcp/interceptors/smartpage-create.d.ts +30 -0
  55. package/dist/src/mcp/interceptors/smartpage-create.js +252 -0
  56. package/dist/src/mcp/interceptors/smartpage-export.d.ts +17 -0
  57. package/dist/src/mcp/interceptors/smartpage-export.js +135 -0
  58. package/dist/src/mcp/interceptors/smartsheet-upload.d.ts +22 -0
  59. package/dist/src/mcp/interceptors/smartsheet-upload.js +388 -0
  60. package/dist/src/mcp/interceptors/types.d.ts +64 -0
  61. package/dist/src/mcp/interceptors/types.js +8 -0
  62. package/dist/src/mcp/schema.d.ts +11 -0
  63. package/dist/src/mcp/schema.js +115 -0
  64. package/dist/src/mcp/tool.d.ts +63 -0
  65. package/dist/src/mcp/tool.js +318 -0
  66. package/dist/src/mcp/transport.d.ts +94 -0
  67. package/dist/src/mcp/transport.js +702 -0
  68. package/dist/src/media-handler.d.ts +55 -0
  69. package/dist/src/media-handler.js +306 -0
  70. package/dist/src/media-uploader.d.ts +142 -0
  71. package/dist/src/media-uploader.js +446 -0
  72. package/dist/src/message-parser.d.ts +104 -0
  73. package/dist/src/message-parser.js +232 -0
  74. package/dist/src/message-sender.d.ts +54 -0
  75. package/dist/src/message-sender.js +210 -0
  76. package/dist/src/monitor.d.ts +69 -0
  77. package/dist/src/monitor.js +1846 -0
  78. package/dist/src/onboarding.d.ts +8 -0
  79. package/dist/src/onboarding.js +248 -0
  80. package/dist/src/openclaw-compat.d.ts +148 -0
  81. package/dist/src/openclaw-compat.js +839 -0
  82. package/dist/src/proactive-markdown-send.d.ts +14 -0
  83. package/dist/src/proactive-markdown-send.js +205 -0
  84. package/dist/src/reqid-store.d.ts +23 -0
  85. package/dist/src/reqid-store.js +136 -0
  86. package/dist/src/runtime.d.ts +2 -0
  87. package/dist/src/runtime.js +7 -0
  88. package/dist/src/shared/command-auth.d.ts +23 -0
  89. package/dist/src/shared/command-auth.js +112 -0
  90. package/dist/src/shared/xml-parser.d.ts +46 -0
  91. package/dist/src/shared/xml-parser.js +228 -0
  92. package/dist/src/state-dir-resolve.d.ts +2 -0
  93. package/dist/src/state-dir-resolve.js +33 -0
  94. package/dist/src/state-manager.d.ts +115 -0
  95. package/dist/src/state-manager.js +413 -0
  96. package/dist/src/target.d.ts +35 -0
  97. package/dist/src/target.js +71 -0
  98. package/dist/src/template-card-manager.d.ts +55 -0
  99. package/dist/src/template-card-manager.js +316 -0
  100. package/dist/src/template-card-parser.d.ts +37 -0
  101. package/dist/src/template-card-parser.js +672 -0
  102. package/dist/src/timeout.d.ts +20 -0
  103. package/dist/src/timeout.js +57 -0
  104. package/dist/src/types/account.d.ts +29 -0
  105. package/dist/src/types/account.js +5 -0
  106. package/dist/src/types/config.d.ts +98 -0
  107. package/dist/src/types/config.js +8 -0
  108. package/dist/src/types/constants.d.ts +42 -0
  109. package/dist/src/types/constants.js +45 -0
  110. package/dist/src/types/index.d.ts +7 -0
  111. package/dist/src/types/index.js +17 -0
  112. package/dist/src/types/message.d.ts +238 -0
  113. package/dist/src/types/message.js +6 -0
  114. package/dist/src/utils.d.ts +148 -0
  115. package/dist/src/utils.js +92 -0
  116. package/dist/src/version.d.ts +2 -0
  117. package/dist/src/version.js +28 -0
  118. package/dist/src/webhook/command-auth.d.ts +47 -0
  119. package/dist/src/webhook/command-auth.js +137 -0
  120. package/dist/src/webhook/gateway.d.ts +36 -0
  121. package/dist/src/webhook/gateway.js +297 -0
  122. package/dist/src/webhook/handler.d.ts +19 -0
  123. package/dist/src/webhook/handler.js +481 -0
  124. package/dist/src/webhook/helpers.d.ts +157 -0
  125. package/dist/src/webhook/helpers.js +936 -0
  126. package/dist/src/webhook/http.d.ts +27 -0
  127. package/dist/src/webhook/http.js +168 -0
  128. package/dist/src/webhook/index.d.ts +11 -0
  129. package/dist/src/webhook/index.js +43 -0
  130. package/dist/src/webhook/media.d.ts +30 -0
  131. package/dist/src/webhook/media.js +152 -0
  132. package/dist/src/webhook/monitor.d.ts +59 -0
  133. package/dist/src/webhook/monitor.js +1672 -0
  134. package/dist/src/webhook/state.d.ts +220 -0
  135. package/dist/src/webhook/state.js +568 -0
  136. package/dist/src/webhook/target.d.ts +41 -0
  137. package/dist/src/webhook/target.js +165 -0
  138. package/dist/src/webhook/types.d.ts +348 -0
  139. package/dist/src/webhook/types.js +36 -0
  140. package/dist/src/webhook/video-frame.d.ts +13 -0
  141. package/dist/src/webhook/video-frame.js +108 -0
  142. package/openclaw.plugin.json +19 -0
  143. package/package.json +96 -0
  144. package/schema.json +534 -0
  145. package/scripts/generate-schema.mjs +33 -0
  146. package/skills/wecom-contact/SKILL.md +162 -0
  147. package/skills/wecom-doc/SKILL.md +162 -0
  148. package/skills/wecom-doc/references/create-doc.md +56 -0
  149. package/skills/wecom-doc/references/edit-doc-content.md +68 -0
  150. package/skills/wecom-doc/references/get-doc-content.md +88 -0
  151. package/skills/wecom-doc/references/smartpage-create.md +125 -0
  152. package/skills/wecom-doc/references/smartpage-export.md +160 -0
  153. package/skills/wecom-meeting/SKILL.md +441 -0
  154. package/skills/wecom-meeting/references/example-full.md +30 -0
  155. package/skills/wecom-meeting/references/example-reminder.md +46 -0
  156. package/skills/wecom-meeting/references/example-security.md +22 -0
  157. package/skills/wecom-meeting/references/response-get-meeting-info.md +148 -0
  158. package/skills/wecom-msg/SKILL.md +157 -0
  159. package/skills/wecom-msg/references/api-get-messages.md +93 -0
  160. package/skills/wecom-msg/references/api-get-msg-chat-list.md +58 -0
  161. package/skills/wecom-msg/references/api-get-msg-media.md +44 -0
  162. package/skills/wecom-msg/references/api-send-message.md +39 -0
  163. package/skills/wecom-preflight/SKILL.md +141 -0
  164. package/skills/wecom-schedule/SKILL.md +161 -0
  165. package/skills/wecom-schedule/references/api-check-availability.md +56 -0
  166. package/skills/wecom-schedule/references/api-create-schedule.md +38 -0
  167. package/skills/wecom-schedule/references/api-get-schedule-detail.md +81 -0
  168. package/skills/wecom-schedule/references/api-update-schedule.md +32 -0
  169. package/skills/wecom-schedule/references/ref-reminders.md +24 -0
  170. package/skills/wecom-send-media/SKILL.md +68 -0
  171. package/skills/wecom-send-template-card/SKILL.md +157 -0
  172. package/skills/wecom-send-template-card/references/api-template-card-types.md +358 -0
  173. package/skills/wecom-smartsheet/SKILL.md +164 -0
  174. package/skills/wecom-smartsheet/references/smartsheet-cell-value-formats.md +163 -0
  175. package/skills/wecom-smartsheet/references/smartsheet-field-types.md +44 -0
  176. package/skills/wecom-smartsheet/references/smartsheet-get-records.md +96 -0
  177. package/skills/wecom-smartsheet/references/webhook-examples.md +185 -0
  178. package/skills/wecom-smartsheet/references/webhook-fallback.md +184 -0
  179. package/skills/wecom-todo/SKILL.md +392 -0
  180. package/skills/wecom-todo/examples/workflows.md +163 -0
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ /**
3
+ * **动态 Agent 路由模块**
4
+ *
5
+ * 为每个用户/群组自动生成独立的 Agent ID,实现会话隔离。
6
+ * 参考: openclaw-plugin-wecom/dynamic-agent.js
7
+ */
8
+ exports.__esModule = true;
9
+ exports.shouldUseDynamicAgent = exports.generateAgentId = exports.getDynamicAgentConfig = void 0;
10
+ /**
11
+ * **getDynamicAgentConfig (读取动态 Agent 配置)**
12
+ *
13
+ * 从全局配置中读取动态 Agent 配置,提供默认值。
14
+ */
15
+ function getDynamicAgentConfig(config) {
16
+ var _a, _b, _c, _d, _e, _f, _g;
17
+ var dynamicAgents = (_c = (_b = (_a = config) === null || _a === void 0 ? void 0 : _a.channels) === null || _b === void 0 ? void 0 : _b.wecom) === null || _c === void 0 ? void 0 : _c.dynamicAgents;
18
+ return {
19
+ enabled: (_d = dynamicAgents === null || dynamicAgents === void 0 ? void 0 : dynamicAgents.enabled) !== null && _d !== void 0 ? _d : false,
20
+ dmCreateAgent: (_e = dynamicAgents === null || dynamicAgents === void 0 ? void 0 : dynamicAgents.dmCreateAgent) !== null && _e !== void 0 ? _e : true,
21
+ groupEnabled: (_f = dynamicAgents === null || dynamicAgents === void 0 ? void 0 : dynamicAgents.groupEnabled) !== null && _f !== void 0 ? _f : true,
22
+ adminUsers: (_g = dynamicAgents === null || dynamicAgents === void 0 ? void 0 : dynamicAgents.adminUsers) !== null && _g !== void 0 ? _g : []
23
+ };
24
+ }
25
+ exports.getDynamicAgentConfig = getDynamicAgentConfig;
26
+ function sanitizeDynamicIdPart(value) {
27
+ return String(value)
28
+ .trim()
29
+ .toLowerCase()
30
+ .replace(/[^a-z0-9_-]/g, "_");
31
+ }
32
+ /**
33
+ * **generateAgentId (生成动态 Agent ID)**
34
+ *
35
+ * 根据账号 + 聊天类型 + 对端 ID 生成确定性的 Agent ID,避免多账号串会话。
36
+ * 格式: wecom-{accountId}-{type}-{sanitizedPeerId}
37
+ */
38
+ function generateAgentId(chatType, peerId, accountId) {
39
+ var sanitizedPeer = sanitizeDynamicIdPart(peerId) || "unknown";
40
+ var sanitizedAccountId = sanitizeDynamicIdPart(accountId !== null && accountId !== void 0 ? accountId : "default") || "default";
41
+ return "wecom-" + sanitizedAccountId + "-" + chatType + "-" + sanitizedPeer;
42
+ }
43
+ exports.generateAgentId = generateAgentId;
44
+ /**
45
+ * **shouldUseDynamicAgent (检查是否使用动态 Agent)**
46
+ *
47
+ * 根据配置和发送者信息判断是否应使用动态 Agent。
48
+ * 管理员(adminUsers)始终绕过动态路由,使用主 Agent。
49
+ */
50
+ function shouldUseDynamicAgent(params) {
51
+ var chatType = params.chatType, senderId = params.senderId, config = params.config;
52
+ var dynamicConfig = getDynamicAgentConfig(config);
53
+ if (!dynamicConfig.enabled) {
54
+ return false;
55
+ }
56
+ // 管理员绕过动态路由
57
+ var sender = String(senderId).trim().toLowerCase();
58
+ var isAdmin = dynamicConfig.adminUsers.some(function (admin) { return admin.trim().toLowerCase() === sender; });
59
+ if (isAdmin) {
60
+ return false;
61
+ }
62
+ if (chatType === "group") {
63
+ return dynamicConfig.groupEnabled;
64
+ }
65
+ return dynamicConfig.dmCreateAgent;
66
+ }
67
+ exports.shouldUseDynamicAgent = shouldUseDynamicAgent;
@@ -0,0 +1,65 @@
1
+ /**
2
+ * 动态路由统一处理模块
3
+ * 提供统一的路由注入接口。
4
+ */
5
+ import type { OpenClawConfig } from "ylib-openclaw/plugin-sdk";
6
+ import type { PluginRuntime } from "ylib-openclaw/plugin-sdk";
7
+ /**
8
+ * 路由对象(从 core.channel.routing.resolveAgentRoute 返回)
9
+ */
10
+ export interface AgentRoute {
11
+ agentId: string;
12
+ sessionKey: string;
13
+ matchedBy: string;
14
+ accountId: string;
15
+ mainSessionKey?: string;
16
+ }
17
+ /**
18
+ * 动态路由处理参数
19
+ */
20
+ export interface DynamicRoutingParams {
21
+ /** 原始路由对象 */
22
+ route: AgentRoute;
23
+ /** 全局配置 */
24
+ config: OpenClawConfig;
25
+ /** 插件运行时 */
26
+ core: PluginRuntime;
27
+ /** 账号 ID */
28
+ accountId: string;
29
+ /** 会话类型 */
30
+ chatType: "group" | "dm";
31
+ /** 对话 ID(群聊为 chatId,私聊为 userId) */
32
+ chatId: string;
33
+ /** 发送者用户 ID */
34
+ senderId: string;
35
+ /** 日志输出函数(可选) */
36
+ log?: (msg: string) => void;
37
+ /** 错误日志输出函数(可选) */
38
+ error?: (msg: string) => void;
39
+ }
40
+ /**
41
+ * 动态路由处理结果
42
+ */
43
+ export interface DynamicRoutingResult {
44
+ /** 是否使用动态 Agent */
45
+ useDynamicAgent: boolean;
46
+ /** 最终的 agentId(可能被动态注入修改) */
47
+ finalAgentId: string;
48
+ /** 最终的 sessionKey(可能被动态注入修改) */
49
+ finalSessionKey: string;
50
+ /** 是否修改了路由(注入了动态 Agent) */
51
+ routeModified: boolean;
52
+ }
53
+ /**
54
+ * 统一处理动态路由注入逻辑
55
+ *
56
+ * 功能:
57
+ * 1. 判断是否需要使用动态 Agent
58
+ * 2. 根据 matchedBy 判断配置类型
59
+ * 3. 返回最终的路由信息(不修改传入的 route 对象)
60
+ * 4. 输出详细的调试日志
61
+ *
62
+ * @param params 动态路由处理参数
63
+ * @returns 处理结果
64
+ */
65
+ export declare function processDynamicRouting(params: DynamicRoutingParams): DynamicRoutingResult;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ /**
3
+ * 动态路由统一处理模块
4
+ * 提供统一的路由注入接口。
5
+ */
6
+ exports.__esModule = true;
7
+ exports.processDynamicRouting = void 0;
8
+ var dynamic_agent_js_1 = require("./dynamic-agent.js");
9
+ /**
10
+ * 统一处理动态路由注入逻辑
11
+ *
12
+ * 功能:
13
+ * 1. 判断是否需要使用动态 Agent
14
+ * 2. 根据 matchedBy 判断配置类型
15
+ * 3. 返回最终的路由信息(不修改传入的 route 对象)
16
+ * 4. 输出详细的调试日志
17
+ *
18
+ * @param params 动态路由处理参数
19
+ * @returns 处理结果
20
+ */
21
+ function processDynamicRouting(params) {
22
+ var route = params.route, config = params.config, accountId = params.accountId, chatType = params.chatType, chatId = params.chatId, senderId = params.senderId, log = params.log;
23
+ log === null || log === void 0 ? void 0 : log("[dynamic-routing] \uD83D\uDD0D \u8C03\u8BD5 - matchedBy=" + route.matchedBy + ", agentId=" + route.agentId);
24
+ if (route.matchedBy !== "default") {
25
+ log === null || log === void 0 ? void 0 : log("[dynamic-routing] \u2139\uFE0F \u68C0\u6D4B\u5230\u5339\u914D\u7684 bindings (matchedBy=" + route.matchedBy + ")\uFF0C\u8DF3\u8FC7\u52A8\u6001\u8DEF\u7531");
26
+ return {
27
+ useDynamicAgent: false,
28
+ finalAgentId: route.agentId,
29
+ finalSessionKey: route.sessionKey,
30
+ routeModified: false
31
+ };
32
+ }
33
+ // 判断是否使用动态 Agent
34
+ var useDynamicAgent = dynamic_agent_js_1.shouldUseDynamicAgent({
35
+ chatType: chatType,
36
+ senderId: senderId,
37
+ config: config
38
+ });
39
+ log === null || log === void 0 ? void 0 : log("[dynamic-routing] \u662F\u5426\u4F7F\u7528\u52A8\u6001\u8DEF\u7531: useDynamicAgent=" + useDynamicAgent);
40
+ // 使用动态 Agent
41
+ if (useDynamicAgent) {
42
+ log === null || log === void 0 ? void 0 : log("[dynamic-routing] \u539F\u59CB\u8DEF\u7531\u4FE1\u606F: agentId=" + route.agentId + ", matchedBy=" + route.matchedBy + ", sessionKey=" + route.sessionKey);
43
+ var targetAgentId = dynamic_agent_js_1.generateAgentId(chatType, chatId, accountId);
44
+ var targetSessionKey = "agent:" + targetAgentId + ":wecom:" + accountId + ":" + chatType + ":" + chatId;
45
+ log === null || log === void 0 ? void 0 : log("[dynamic-routing] \uD83D\uDD04 \u8DEF\u7531\u6CE8\u5165: agentId=" + targetAgentId + ", sessionKey=" + targetSessionKey);
46
+ return {
47
+ useDynamicAgent: true,
48
+ finalAgentId: targetAgentId,
49
+ finalSessionKey: targetSessionKey,
50
+ routeModified: true
51
+ };
52
+ }
53
+ log === null || log === void 0 ? void 0 : log('[dynamic-routing] 🔄不使用动态路由');
54
+ // 不使用动态 Agent,返回原始路由
55
+ return {
56
+ useDynamicAgent: false,
57
+ finalAgentId: route.agentId,
58
+ finalSessionKey: route.sessionKey,
59
+ routeModified: false
60
+ };
61
+ }
62
+ exports.processDynamicRouting = processDynamicRouting;
@@ -0,0 +1,54 @@
1
+ import type { WeComConfig } from "./utils.js";
2
+ export declare type WecomEndpointConfig = {
3
+ gatewayBaseUrl: string;
4
+ gatewayToken?: string;
5
+ uploadHost?: string;
6
+ modelName?: string;
7
+ agentId?: string;
8
+ showFinalAnswerOnly?: boolean;
9
+ separateSessionByConversation: boolean;
10
+ groupSessionScope: "group" | "group_sender";
11
+ scopeType: "workspace" | "my_workspace" | "project";
12
+ workspaceId: string;
13
+ projectId: string;
14
+ };
15
+ declare type DispatchResult = {
16
+ outboundText: string;
17
+ mediaUrls: string[];
18
+ resourceCount: number;
19
+ textLength: number;
20
+ };
21
+ declare type DispatchParams = {
22
+ endpointConfig: WecomEndpointConfig;
23
+ routeAgentId?: string;
24
+ accountId: string;
25
+ platformId: string;
26
+ chatId: string;
27
+ chatType: "direct" | "group";
28
+ senderId: string;
29
+ senderName?: string;
30
+ chatName?: string;
31
+ userContent: string;
32
+ mediaPath?: string;
33
+ mediaType?: string;
34
+ mediaFileName?: string;
35
+ onConfirmationAction?: (text: string) => Promise<void>;
36
+ onChunk?: (chunk: string, accumulated: string) => Promise<void>;
37
+ runtimeLog?: (...args: any[]) => void;
38
+ runtimeError?: (...args: any[]) => void;
39
+ };
40
+ export declare function resolveWecomEndpointConfig(config: WeComConfig, fallbackScope?: {
41
+ scopeType: "workspace" | "my_workspace" | "project";
42
+ workspaceId: string;
43
+ projectId: string;
44
+ } | null): WecomEndpointConfig | null;
45
+ export declare function resolveWecomScopeByBindings(params: {
46
+ cfg: unknown;
47
+ accountId: string;
48
+ }): {
49
+ scopeType: "workspace" | "my_workspace" | "project";
50
+ workspaceId: string;
51
+ projectId: string;
52
+ } | null;
53
+ export declare function dispatchWecomViaEndpoint(params: DispatchParams): Promise<DispatchResult>;
54
+ export {};