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,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 企业微信 setupWizard — 声明式 CLI setup wizard 配置。
|
|
3
|
+
*
|
|
4
|
+
* 框架通过 plugin.setupWizard 字段识别并驱动 channel 的引导配置流程。
|
|
5
|
+
*/
|
|
6
|
+
import type { ChannelSetupAdapter } from "ylib-openclaw/plugin-sdk";
|
|
7
|
+
export declare const wecomSetupAdapter: ChannelSetupAdapter;
|
|
8
|
+
export declare const wecomSetupWizard: any;
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 企业微信 setupWizard — 声明式 CLI setup wizard 配置。
|
|
4
|
+
*
|
|
5
|
+
* 框架通过 plugin.setupWizard 字段识别并驱动 channel 的引导配置流程。
|
|
6
|
+
*/
|
|
7
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
8
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
9
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
10
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
11
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
12
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
13
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
17
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
18
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
19
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
20
|
+
function step(op) {
|
|
21
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
22
|
+
while (_) try {
|
|
23
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
24
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
25
|
+
switch (op[0]) {
|
|
26
|
+
case 0: case 1: t = op; break;
|
|
27
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
28
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
29
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
30
|
+
default:
|
|
31
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
32
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
33
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
34
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
35
|
+
if (t[2]) _.ops.pop();
|
|
36
|
+
_.trys.pop(); continue;
|
|
37
|
+
}
|
|
38
|
+
op = body.call(thisArg, _);
|
|
39
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
40
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
exports.__esModule = true;
|
|
44
|
+
exports.wecomSetupWizard = exports.wecomSetupAdapter = void 0;
|
|
45
|
+
var openclaw_compat_js_1 = require("./openclaw-compat.js");
|
|
46
|
+
var accounts_js_1 = require("./accounts.js");
|
|
47
|
+
var const_js_1 = require("./const.js");
|
|
48
|
+
// ============================================================================
|
|
49
|
+
// ChannelSetupAdapter — 框架用于应用配置输入的适配器
|
|
50
|
+
// ============================================================================
|
|
51
|
+
exports.wecomSetupAdapter = {
|
|
52
|
+
applyAccountConfig: function (_a) {
|
|
53
|
+
var cfg = _a.cfg, input = _a.input;
|
|
54
|
+
var patch = {};
|
|
55
|
+
if (input.token !== undefined) {
|
|
56
|
+
patch.botId = String(input.token).trim();
|
|
57
|
+
}
|
|
58
|
+
if (input.privateKey !== undefined) {
|
|
59
|
+
patch.secret = String(input.privateKey).trim();
|
|
60
|
+
}
|
|
61
|
+
// 如果是首次配置,默认启用
|
|
62
|
+
var account = accounts_js_1.resolveWeComAccountMulti({ cfg: cfg });
|
|
63
|
+
if (!account.botId && !account.secret) {
|
|
64
|
+
patch.enabled = true;
|
|
65
|
+
}
|
|
66
|
+
return accounts_js_1.setWeComAccountMulti(cfg, patch);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
// ============================================================================
|
|
70
|
+
// DM Policy 配置
|
|
71
|
+
// ============================================================================
|
|
72
|
+
/**
|
|
73
|
+
* 设置企业微信 dmPolicy
|
|
74
|
+
*/
|
|
75
|
+
function setWeComDmPolicy(cfg, dmPolicy) {
|
|
76
|
+
var _a;
|
|
77
|
+
var account = accounts_js_1.resolveWeComAccountMulti({ cfg: cfg });
|
|
78
|
+
var existingAllowFrom = (_a = account.config.allowFrom) !== null && _a !== void 0 ? _a : [];
|
|
79
|
+
var allowFrom = dmPolicy === "open"
|
|
80
|
+
? openclaw_compat_js_1.addWildcardAllowFrom(existingAllowFrom.map(function (x) { return String(x); }))
|
|
81
|
+
: existingAllowFrom.map(function (x) { return String(x); });
|
|
82
|
+
return accounts_js_1.setWeComAccountMulti(cfg, {
|
|
83
|
+
dmPolicy: dmPolicy,
|
|
84
|
+
allowFrom: allowFrom
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
var dmPolicy = {
|
|
88
|
+
label: "企业微信",
|
|
89
|
+
channel: const_js_1.CHANNEL_ID,
|
|
90
|
+
policyKey: "channels." + const_js_1.CHANNEL_ID + ".dmPolicy",
|
|
91
|
+
allowFromKey: "channels." + const_js_1.CHANNEL_ID + ".allowFrom",
|
|
92
|
+
getCurrent: function (cfg) {
|
|
93
|
+
var _a;
|
|
94
|
+
var account = accounts_js_1.resolveWeComAccountMulti({ cfg: cfg });
|
|
95
|
+
return (_a = account.config.dmPolicy) !== null && _a !== void 0 ? _a : "open";
|
|
96
|
+
},
|
|
97
|
+
setPolicy: function (cfg, policy) {
|
|
98
|
+
return setWeComDmPolicy(cfg, policy);
|
|
99
|
+
},
|
|
100
|
+
promptAllowFrom: function (_a) {
|
|
101
|
+
var cfg = _a.cfg, prompter = _a.prompter;
|
|
102
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
103
|
+
var account, existingAllowFrom, entry, allowFrom;
|
|
104
|
+
var _b;
|
|
105
|
+
return __generator(this, function (_c) {
|
|
106
|
+
switch (_c.label) {
|
|
107
|
+
case 0:
|
|
108
|
+
account = accounts_js_1.resolveWeComAccountMulti({ cfg: cfg });
|
|
109
|
+
existingAllowFrom = (_b = account.config.allowFrom) !== null && _b !== void 0 ? _b : [];
|
|
110
|
+
return [4 /*yield*/, prompter.text({
|
|
111
|
+
message: "企业微信允许来源(用户ID或群组ID,逗号分隔)",
|
|
112
|
+
placeholder: "user123, group456",
|
|
113
|
+
initialValue: existingAllowFrom[0] ? String(existingAllowFrom[0]) : undefined
|
|
114
|
+
})];
|
|
115
|
+
case 1:
|
|
116
|
+
entry = _c.sent();
|
|
117
|
+
allowFrom = String(entry !== null && entry !== void 0 ? entry : "")
|
|
118
|
+
.split(/[\n,;]+/g)
|
|
119
|
+
.map(function (s) { return s.trim(); })
|
|
120
|
+
.filter(Boolean);
|
|
121
|
+
return [2 /*return*/, accounts_js_1.setWeComAccountMulti(cfg, { allowFrom: allowFrom })];
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
// ============================================================================
|
|
128
|
+
// ChannelSetupWizard — 声明式 setup wizard 配置
|
|
129
|
+
// ============================================================================
|
|
130
|
+
exports.wecomSetupWizard = {
|
|
131
|
+
channel: const_js_1.CHANNEL_ID,
|
|
132
|
+
// ── 状态 ──────────────────────────────────────────────────────────────
|
|
133
|
+
status: {
|
|
134
|
+
configuredLabel: "已配置 ✓",
|
|
135
|
+
unconfiguredLabel: "需要 Bot ID 和 Secret",
|
|
136
|
+
configuredHint: "已配置",
|
|
137
|
+
unconfiguredHint: "需要设置",
|
|
138
|
+
resolveConfigured: function (_a) {
|
|
139
|
+
var _b, _c;
|
|
140
|
+
var cfg = _a.cfg;
|
|
141
|
+
var account = accounts_js_1.resolveWeComAccountMulti({ cfg: cfg });
|
|
142
|
+
return Boolean(((_b = account.botId) === null || _b === void 0 ? void 0 : _b.trim()) && ((_c = account.secret) === null || _c === void 0 ? void 0 : _c.trim()));
|
|
143
|
+
},
|
|
144
|
+
resolveStatusLines: function (_a) {
|
|
145
|
+
var cfg = _a.cfg, configured = _a.configured;
|
|
146
|
+
return ["\u4F01\u4E1A\u5FAE\u4FE1: " + (configured ? "已配置" : "需要 Bot ID 和 Secret")];
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
// ── 引导说明 ──────────────────────────────────────────────────────────
|
|
150
|
+
introNote: {
|
|
151
|
+
title: "企业微信设置",
|
|
152
|
+
lines: [
|
|
153
|
+
"企业微信机器人需要以下配置信息:",
|
|
154
|
+
"1. Bot ID: 企业微信机器人 ID",
|
|
155
|
+
"2. Secret: 企业微信机器人密钥",
|
|
156
|
+
],
|
|
157
|
+
shouldShow: function (_a) {
|
|
158
|
+
var _b, _c;
|
|
159
|
+
var cfg = _a.cfg;
|
|
160
|
+
var account = accounts_js_1.resolveWeComAccountMulti({ cfg: cfg });
|
|
161
|
+
return !((_b = account.botId) === null || _b === void 0 ? void 0 : _b.trim()) || !((_c = account.secret) === null || _c === void 0 ? void 0 : _c.trim());
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
// ── 凭据输入 ──────────────────────────────────────────────────────────
|
|
165
|
+
credentials: [
|
|
166
|
+
{
|
|
167
|
+
inputKey: "token",
|
|
168
|
+
providerHint: "企业微信",
|
|
169
|
+
credentialLabel: "Bot ID",
|
|
170
|
+
envPrompt: "使用环境变量中的 Bot ID?",
|
|
171
|
+
keepPrompt: "Bot ID 已配置,保留当前值?",
|
|
172
|
+
inputPrompt: "企业微信机器人 Bot ID",
|
|
173
|
+
inspect: function (_a) {
|
|
174
|
+
var _b;
|
|
175
|
+
var cfg = _a.cfg;
|
|
176
|
+
var account = accounts_js_1.resolveWeComAccountMulti({ cfg: cfg });
|
|
177
|
+
var hasValue = Boolean((_b = account.botId) === null || _b === void 0 ? void 0 : _b.trim());
|
|
178
|
+
return {
|
|
179
|
+
accountConfigured: hasValue,
|
|
180
|
+
hasConfiguredValue: hasValue,
|
|
181
|
+
resolvedValue: account.botId || undefined
|
|
182
|
+
};
|
|
183
|
+
},
|
|
184
|
+
applySet: function (_a) {
|
|
185
|
+
var cfg = _a.cfg, resolvedValue = _a.resolvedValue;
|
|
186
|
+
return accounts_js_1.setWeComAccountMulti(cfg, { botId: resolvedValue });
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
inputKey: "privateKey",
|
|
191
|
+
providerHint: "企业微信",
|
|
192
|
+
credentialLabel: "Secret",
|
|
193
|
+
envPrompt: "使用环境变量中的 Secret?",
|
|
194
|
+
keepPrompt: "Secret 已配置,保留当前值?",
|
|
195
|
+
inputPrompt: "企业微信机器人 Secret",
|
|
196
|
+
inspect: function (_a) {
|
|
197
|
+
var _b;
|
|
198
|
+
var cfg = _a.cfg;
|
|
199
|
+
var account = accounts_js_1.resolveWeComAccountMulti({ cfg: cfg });
|
|
200
|
+
var hasValue = Boolean((_b = account.secret) === null || _b === void 0 ? void 0 : _b.trim());
|
|
201
|
+
return {
|
|
202
|
+
accountConfigured: hasValue,
|
|
203
|
+
hasConfiguredValue: hasValue,
|
|
204
|
+
resolvedValue: account.secret || undefined
|
|
205
|
+
};
|
|
206
|
+
},
|
|
207
|
+
applySet: function (_a) {
|
|
208
|
+
var cfg = _a.cfg, resolvedValue = _a.resolvedValue;
|
|
209
|
+
return accounts_js_1.setWeComAccountMulti(cfg, { secret: resolvedValue });
|
|
210
|
+
}
|
|
211
|
+
},
|
|
212
|
+
],
|
|
213
|
+
// ── 完成后的最终处理 ──────────────────────────────────────────────────
|
|
214
|
+
finalize: function (_a) {
|
|
215
|
+
var cfg = _a.cfg;
|
|
216
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
217
|
+
var account;
|
|
218
|
+
var _b, _c;
|
|
219
|
+
return __generator(this, function (_d) {
|
|
220
|
+
account = accounts_js_1.resolveWeComAccountMulti({ cfg: cfg });
|
|
221
|
+
if (((_b = account.botId) === null || _b === void 0 ? void 0 : _b.trim()) && ((_c = account.secret) === null || _c === void 0 ? void 0 : _c.trim()) && !account.enabled) {
|
|
222
|
+
return [2 /*return*/, { cfg: accounts_js_1.setWeComAccountMulti(cfg, { enabled: true }) }];
|
|
223
|
+
}
|
|
224
|
+
return [2 /*return*/, undefined];
|
|
225
|
+
});
|
|
226
|
+
});
|
|
227
|
+
},
|
|
228
|
+
// ── 完成提示 ──────────────────────────────────────────────────────────
|
|
229
|
+
completionNote: {
|
|
230
|
+
title: "企业微信配置完成",
|
|
231
|
+
lines: [
|
|
232
|
+
"企业微信机器人已配置完成。",
|
|
233
|
+
"运行 `openclaw start` 启动服务。",
|
|
234
|
+
],
|
|
235
|
+
shouldShow: function (_a) {
|
|
236
|
+
var _b, _c;
|
|
237
|
+
var cfg = _a.cfg;
|
|
238
|
+
var account = accounts_js_1.resolveWeComAccountMulti({ cfg: cfg });
|
|
239
|
+
return Boolean(((_b = account.botId) === null || _b === void 0 ? void 0 : _b.trim()) && ((_c = account.secret) === null || _c === void 0 ? void 0 : _c.trim()));
|
|
240
|
+
}
|
|
241
|
+
},
|
|
242
|
+
// ── DM 策略 ──────────────────────────────────────────────────────────
|
|
243
|
+
dmPolicy: dmPolicy,
|
|
244
|
+
// ── 禁用 ─────────────────────────────────────────────────────────────
|
|
245
|
+
disable: function (cfg) {
|
|
246
|
+
return accounts_js_1.setWeComAccountMulti(cfg, { enabled: false });
|
|
247
|
+
}
|
|
248
|
+
};
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* openclaw plugin-sdk 高版本方法兼容层
|
|
3
|
+
*
|
|
4
|
+
* 部分方法(如 loadOutboundMediaFromUrl、detectMime、getDefaultMediaLocalRoots)
|
|
5
|
+
* 仅在较新版本的 openclaw plugin-sdk 中才导出。
|
|
6
|
+
*
|
|
7
|
+
* 本模块在加载时一次性探测 SDK 导出,存在则直接 re-export SDK 版本,
|
|
8
|
+
* 不存在则导出 fallback 实现。其他模块统一从本文件导入,无需关心底层兼容细节。
|
|
9
|
+
*/
|
|
10
|
+
/// <reference types="node" />
|
|
11
|
+
import { resolveStateDir } from "./state-dir-resolve.js";
|
|
12
|
+
export { resolveStateDir };
|
|
13
|
+
export declare const DEFAULT_ACCOUNT_ID = "default";
|
|
14
|
+
/** 与 openclaw plugin-sdk 中 WebMediaResult 兼容的类型 */
|
|
15
|
+
export declare type WebMediaResult = {
|
|
16
|
+
buffer: Buffer;
|
|
17
|
+
contentType?: string;
|
|
18
|
+
kind?: string;
|
|
19
|
+
fileName?: string;
|
|
20
|
+
};
|
|
21
|
+
export declare type OutboundMediaLoadOptions = {
|
|
22
|
+
maxBytes?: number;
|
|
23
|
+
mediaLocalRoots?: readonly string[];
|
|
24
|
+
gatewayToken?: string;
|
|
25
|
+
trustedGatewayBaseUrl?: string;
|
|
26
|
+
};
|
|
27
|
+
export declare type DetectMimeOptions = {
|
|
28
|
+
buffer?: Buffer;
|
|
29
|
+
headerMime?: string | null;
|
|
30
|
+
filePath?: string;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* 检测 MIME 类型(兼容入口)
|
|
34
|
+
*
|
|
35
|
+
* 支持两种调用签名以兼容不同使用场景:
|
|
36
|
+
* - detectMime(buffer) → 旧式调用
|
|
37
|
+
* - detectMime({ buffer, headerMime, filePath }) → 完整参数
|
|
38
|
+
*
|
|
39
|
+
* 优先使用 SDK 版本,不可用时使用 fallback。
|
|
40
|
+
*/
|
|
41
|
+
export declare function detectMime(bufferOrOpts: Buffer | DetectMimeOptions): Promise<string | undefined>;
|
|
42
|
+
/**
|
|
43
|
+
* 从 URL 或本地路径加载媒体文件(兼容入口)
|
|
44
|
+
*
|
|
45
|
+
* 优先使用 SDK 版本,不可用时使用 fallback。
|
|
46
|
+
* SDK 版本抛出的业务异常(如 LocalMediaAccessError)会直接透传。
|
|
47
|
+
*/
|
|
48
|
+
export declare function loadOutboundMediaFromUrl(mediaUrl: string, options?: OutboundMediaLoadOptions): Promise<WebMediaResult>;
|
|
49
|
+
/**
|
|
50
|
+
* 向 allowFrom 列表添加通配符 "*"(兼容入口)
|
|
51
|
+
*
|
|
52
|
+
* 当 dmPolicy 为 "open" 时,需要确保 allowFrom 中包含 "*" 以允许所有来源。
|
|
53
|
+
* 优先使用 SDK 版本(plugin-sdk/setup 或 plugin-sdk/core),不可用时使用 fallback。
|
|
54
|
+
*
|
|
55
|
+
* 注意:此函数为同步函数,与 SDK 原始签名一致。
|
|
56
|
+
* SDK 引用在模块加载时异步探测并缓存,调用时同步读取缓存。
|
|
57
|
+
*/
|
|
58
|
+
export declare function addWildcardAllowFrom(allowFrom: string[]): string[];
|
|
59
|
+
/**
|
|
60
|
+
* 获取默认媒体本地路径白名单(兼容入口)
|
|
61
|
+
*
|
|
62
|
+
* 优先使用 SDK 版本,不可用时手动构建白名单(与 weclaw/src/media/local-roots.ts 逻辑一致)。
|
|
63
|
+
*/
|
|
64
|
+
export declare function getDefaultMediaLocalRoots(): Promise<readonly string[]>;
|
|
65
|
+
export declare function emptyPluginConfigSchema(): Record<string, unknown>;
|
|
66
|
+
/**
|
|
67
|
+
* 解析可选的分隔条目
|
|
68
|
+
* @param value 输入字符串,支持逗号、分号、换行符分隔
|
|
69
|
+
* @returns 解析后的字符串数组,如果输入为空则返回 undefined
|
|
70
|
+
*/
|
|
71
|
+
export declare function parseOptionalDelimitedEntries(value?: string): string[] | undefined;
|
|
72
|
+
/**
|
|
73
|
+
* 构建账户范围的 DM 安全策略
|
|
74
|
+
*/
|
|
75
|
+
export declare function buildAccountScopedDmSecurityPolicy(params: {
|
|
76
|
+
cfg: Record<string, unknown>;
|
|
77
|
+
channelKey: string;
|
|
78
|
+
accountId?: string | null;
|
|
79
|
+
fallbackAccountId?: string | null;
|
|
80
|
+
policy?: string | null;
|
|
81
|
+
allowFrom?: Array<string | number> | null;
|
|
82
|
+
defaultPolicy?: string;
|
|
83
|
+
allowFromPathSuffix?: string;
|
|
84
|
+
policyPathSuffix?: string;
|
|
85
|
+
approveChannelId?: string;
|
|
86
|
+
approveHint?: string;
|
|
87
|
+
normalizeEntry?: (raw: string) => string;
|
|
88
|
+
}): {
|
|
89
|
+
policy: string;
|
|
90
|
+
allowFrom: Array<string | number>;
|
|
91
|
+
policyPath?: string;
|
|
92
|
+
allowFromPath: string;
|
|
93
|
+
approveHint: string;
|
|
94
|
+
normalizeEntry?: (raw: string) => string;
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* 格式化配对审批提示信息(参考 moltbot 实现)
|
|
98
|
+
* @param channelId 频道ID
|
|
99
|
+
* @returns 配对审批提示字符串
|
|
100
|
+
*/
|
|
101
|
+
export declare function formatPairingApproveHint(channelId: string): string;
|
|
102
|
+
/**
|
|
103
|
+
* 与 openclaw plugin-sdk/channel-policy 中 ChannelSecurityDmPolicy 兼容的类型。
|
|
104
|
+
* 低版本 SDK 未导出该方法时,使用此 fallback。
|
|
105
|
+
*/
|
|
106
|
+
export declare type ChannelSecurityDmPolicyCompat = {
|
|
107
|
+
policy: string;
|
|
108
|
+
allowFrom?: Array<string | number> | null;
|
|
109
|
+
policyPath?: string;
|
|
110
|
+
allowFromPath: string;
|
|
111
|
+
approveHint: string;
|
|
112
|
+
normalizeEntry?: (raw: string) => string;
|
|
113
|
+
};
|
|
114
|
+
declare global {
|
|
115
|
+
namespace openclaw.plugin.sdk {
|
|
116
|
+
interface ChannelSecurityDmPolicy {
|
|
117
|
+
policy: string;
|
|
118
|
+
allowFrom?: Array<string | number> | null;
|
|
119
|
+
policyPath?: string;
|
|
120
|
+
allowFromPath: string;
|
|
121
|
+
approveHint: string;
|
|
122
|
+
normalizeEntry?: (raw: string) => string;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
export declare type BuildAccountScopedDmSecurityPolicyParams = {
|
|
127
|
+
cfg: {
|
|
128
|
+
channels?: Record<string, unknown>;
|
|
129
|
+
};
|
|
130
|
+
channelKey: string;
|
|
131
|
+
accountId?: string | null;
|
|
132
|
+
fallbackAccountId?: string | null;
|
|
133
|
+
policy?: string | null;
|
|
134
|
+
allowFrom?: Array<string | number> | null;
|
|
135
|
+
defaultPolicy?: string;
|
|
136
|
+
allowFromPathSuffix?: string;
|
|
137
|
+
policyPathSuffix?: string;
|
|
138
|
+
approveChannelId?: string;
|
|
139
|
+
approveHint?: string;
|
|
140
|
+
normalizeEntry?: (raw: string) => string;
|
|
141
|
+
};
|
|
142
|
+
/**
|
|
143
|
+
* 构建多账号作用域的 DM 安全策略(兼容入口)
|
|
144
|
+
*
|
|
145
|
+
* 优先使用 SDK 版本(openclaw/plugin-sdk/channel-policy),
|
|
146
|
+
* 不可用时使用 fallback 实现。
|
|
147
|
+
*/
|
|
148
|
+
export declare function buildAccountScopedDmSecurityPolicyCompat(params: BuildAccountScopedDmSecurityPolicyParams): Promise<ChannelSecurityDmPolicyCompat>;
|