@openclaw-china/shared 2026.3.19 → 2026.3.21
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/package.json +1 -1
- package/src/cli/china-setup.test.ts +78 -0
- package/src/cli/china-setup.ts +20 -0
package/package.json
CHANGED
|
@@ -209,6 +209,7 @@ describe("china setup wechat-mp", () => {
|
|
|
209
209
|
.mockResolvedValueOnce("wechat-mp")
|
|
210
210
|
.mockResolvedValueOnce("safe")
|
|
211
211
|
.mockResolvedValueOnce("passive");
|
|
212
|
+
confirmMock.mockResolvedValueOnce(true); // renderMarkdown enabled (default)
|
|
212
213
|
textMock
|
|
213
214
|
.mockResolvedValueOnce("/wechat-mp")
|
|
214
215
|
.mockResolvedValueOnce("wx-test-appid")
|
|
@@ -232,6 +233,83 @@ describe("china setup wechat-mp", () => {
|
|
|
232
233
|
expect(wechatMpConfig?.messageMode).toBe("safe");
|
|
233
234
|
expect(wechatMpConfig?.replyMode).toBe("passive");
|
|
234
235
|
expect(wechatMpConfig?.welcomeText).toBe("欢迎关注");
|
|
236
|
+
expect(wechatMpConfig?.renderMarkdown).toBe(true);
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
it("stores activeDeliveryMode when replyMode is active", async () => {
|
|
240
|
+
selectMock
|
|
241
|
+
.mockResolvedValueOnce("wechat-mp")
|
|
242
|
+
.mockResolvedValueOnce("safe")
|
|
243
|
+
.mockResolvedValueOnce("active")
|
|
244
|
+
.mockResolvedValueOnce("split");
|
|
245
|
+
textMock
|
|
246
|
+
.mockResolvedValueOnce("/wechat-mp-active")
|
|
247
|
+
.mockResolvedValueOnce("wx-active-appid")
|
|
248
|
+
.mockResolvedValueOnce("wx-active-secret")
|
|
249
|
+
.mockResolvedValueOnce("active-token")
|
|
250
|
+
.mockResolvedValueOnce("active-aes-key")
|
|
251
|
+
.mockResolvedValueOnce("welcome");
|
|
252
|
+
|
|
253
|
+
const { writeConfigFile } = await runSetup({}, ["wechat-mp"]);
|
|
254
|
+
|
|
255
|
+
expect(writeConfigFile).toHaveBeenCalledTimes(1);
|
|
256
|
+
const savedConfig = writeConfigFile.mock.calls[0]?.[0] as ConfigRoot;
|
|
257
|
+
const wechatMpConfig = savedConfig.channels?.["wechat-mp"];
|
|
258
|
+
|
|
259
|
+
expect(wechatMpConfig?.enabled).toBe(true);
|
|
260
|
+
expect(wechatMpConfig?.replyMode).toBe("active");
|
|
261
|
+
expect(wechatMpConfig?.activeDeliveryMode).toBe("split");
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
it("stores renderMarkdown when explicitly disabled", async () => {
|
|
265
|
+
selectMock
|
|
266
|
+
.mockResolvedValueOnce("wechat-mp")
|
|
267
|
+
.mockResolvedValueOnce("safe")
|
|
268
|
+
.mockResolvedValueOnce("active")
|
|
269
|
+
.mockResolvedValueOnce("merged");
|
|
270
|
+
confirmMock.mockResolvedValueOnce(false); // Disable renderMarkdown
|
|
271
|
+
textMock
|
|
272
|
+
.mockResolvedValueOnce("/wechat-mp-no-md")
|
|
273
|
+
.mockResolvedValueOnce("wx-no-md-appid")
|
|
274
|
+
.mockResolvedValueOnce("wx-no-md-secret")
|
|
275
|
+
.mockResolvedValueOnce("no-md-token")
|
|
276
|
+
.mockResolvedValueOnce("no-md-aes-key")
|
|
277
|
+
.mockResolvedValueOnce("welcome");
|
|
278
|
+
|
|
279
|
+
const { writeConfigFile } = await runSetup({}, ["wechat-mp"]);
|
|
280
|
+
|
|
281
|
+
expect(writeConfigFile).toHaveBeenCalledTimes(1);
|
|
282
|
+
const savedConfig = writeConfigFile.mock.calls[0]?.[0] as ConfigRoot;
|
|
283
|
+
const wechatMpConfig = savedConfig.channels?.["wechat-mp"];
|
|
284
|
+
|
|
285
|
+
expect(wechatMpConfig?.enabled).toBe(true);
|
|
286
|
+
expect(wechatMpConfig?.activeDeliveryMode).toBe("merged");
|
|
287
|
+
expect(wechatMpConfig?.renderMarkdown).toBe(false);
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
it("defaults renderMarkdown to true when not explicitly disabled", async () => {
|
|
291
|
+
selectMock
|
|
292
|
+
.mockResolvedValueOnce("wechat-mp")
|
|
293
|
+
.mockResolvedValueOnce("safe")
|
|
294
|
+
.mockResolvedValueOnce("passive");
|
|
295
|
+
confirmMock.mockResolvedValueOnce(true); // Keep renderMarkdown enabled (default)
|
|
296
|
+
textMock
|
|
297
|
+
.mockResolvedValueOnce("/wechat-mp-default-md")
|
|
298
|
+
.mockResolvedValueOnce("wx-default-appid")
|
|
299
|
+
.mockResolvedValueOnce("wx-default-secret")
|
|
300
|
+
.mockResolvedValueOnce("default-token")
|
|
301
|
+
.mockResolvedValueOnce("default-aes-key")
|
|
302
|
+
.mockResolvedValueOnce("welcome");
|
|
303
|
+
|
|
304
|
+
const { writeConfigFile } = await runSetup({}, ["wechat-mp"]);
|
|
305
|
+
|
|
306
|
+
expect(writeConfigFile).toHaveBeenCalledTimes(1);
|
|
307
|
+
const savedConfig = writeConfigFile.mock.calls[0]?.[0] as ConfigRoot;
|
|
308
|
+
const wechatMpConfig = savedConfig.channels?.["wechat-mp"];
|
|
309
|
+
|
|
310
|
+
expect(wechatMpConfig?.enabled).toBe(true);
|
|
311
|
+
// setup writes the value explicitly, even when it's the default true
|
|
312
|
+
expect(wechatMpConfig?.renderMarkdown).toBe(true);
|
|
235
313
|
});
|
|
236
314
|
});
|
|
237
315
|
|
package/src/cli/china-setup.ts
CHANGED
|
@@ -757,6 +757,24 @@ async function configureWechatMp(prompter: SetupPrompter, cfg: ConfigRoot): Prom
|
|
|
757
757
|
],
|
|
758
758
|
(toTrimmedString(existing.replyMode) as "passive" | "active" | undefined) ?? "passive"
|
|
759
759
|
);
|
|
760
|
+
|
|
761
|
+
let activeDeliveryMode: "merged" | "split" | undefined;
|
|
762
|
+
if (replyMode === "active") {
|
|
763
|
+
activeDeliveryMode = await prompter.askSelect<"merged" | "split">(
|
|
764
|
+
"主动发送模式(activeDeliveryMode)",
|
|
765
|
+
[
|
|
766
|
+
{ value: "split", label: "split(逐块发送,推荐)" },
|
|
767
|
+
{ value: "merged", label: "merged(合并后单次发送)" },
|
|
768
|
+
],
|
|
769
|
+
(toTrimmedString(existing.activeDeliveryMode) as "merged" | "split" | undefined) ?? "split"
|
|
770
|
+
);
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
const renderMarkdown = await prompter.askConfirm(
|
|
774
|
+
"启用 Markdown 渲染(推荐开启)",
|
|
775
|
+
toBoolean(existing.renderMarkdown, true)
|
|
776
|
+
);
|
|
777
|
+
|
|
760
778
|
const welcomeText = await prompter.askText({
|
|
761
779
|
label: "欢迎语(可选)",
|
|
762
780
|
defaultValue: toTrimmedString(existing.welcomeText),
|
|
@@ -771,6 +789,8 @@ async function configureWechatMp(prompter: SetupPrompter, cfg: ConfigRoot): Prom
|
|
|
771
789
|
encodingAESKey: messageMode === "plain" ? undefined : encodingAESKey,
|
|
772
790
|
messageMode,
|
|
773
791
|
replyMode,
|
|
792
|
+
activeDeliveryMode,
|
|
793
|
+
renderMarkdown,
|
|
774
794
|
welcomeText: welcomeText || undefined,
|
|
775
795
|
});
|
|
776
796
|
}
|