



























@@ -614,4 +614,82 @@ describe("bundled plugin metadata", () => {
614614},
615615});
616616});
617+618+it("does not probe broad runtime public surfaces for channel config metadata", () => {
619+const tempRoot = createGeneratedPluginTempRoot("openclaw-bundled-plugin-dist-config-runtime-");
620+const distRoot = path.join(tempRoot, "dist");
621+const markerPath = path.join(tempRoot, "runtime-api-loaded");
622+623+writeJson(path.join(distRoot, "extensions", "alpha", "package.json"), {
624+name: "@openclaw/alpha",
625+version: "0.0.1",
626+openclaw: {
627+extensions: ["./index.ts"],
628+channel: {
629+id: "alpha",
630+label: "Alpha Root Label",
631+blurb: "Alpha Root Description",
632+},
633+},
634+});
635+writeJson(path.join(distRoot, "extensions", "alpha", "openclaw.plugin.json"), {
636+id: "alpha",
637+configSchema: {
638+type: "object",
639+properties: {},
640+},
641+channels: ["alpha"],
642+channelConfigs: {
643+alpha: {
644+schema: { type: "object", properties: { manifest: { type: "boolean" } } },
645+},
646+},
647+});
648+fs.writeFileSync(
649+path.join(distRoot, "extensions", "alpha", "index.js"),
650+"export {};\n",
651+"utf8",
652+);
653+fs.writeFileSync(
654+path.join(distRoot, "extensions", "alpha", "runtime-api.js"),
655+[
656+"import fs from 'node:fs';",
657+`fs.writeFileSync(${JSON.stringify(markerPath)}, "loaded", "utf8");`,
658+"export const AlphaChannelConfigSchema = {",
659+" schema: { type: 'object', properties: { runtimeApi: { type: 'string' } } },",
660+"};",
661+"",
662+].join("\n"),
663+"utf8",
664+);
665+fs.writeFileSync(
666+path.join(distRoot, "extensions", "alpha", "api.js"),
667+[
668+"import fs from 'node:fs';",
669+`fs.writeFileSync(${JSON.stringify(markerPath)}, "loaded", "utf8");`,
670+"export const AlphaChannelConfigSchema = {",
671+" schema: { type: 'object', properties: { api: { type: 'string' } } },",
672+"};",
673+"",
674+].join("\n"),
675+"utf8",
676+);
677+678+clearBundledPluginMetadataCache();
679+const entries = listBundledPluginMetadata({ rootDir: distRoot });
680+const channelConfigs = entries[0]?.manifest.channelConfigs as
681+| Record<string, unknown>
682+| undefined;
683+expect(channelConfigs?.alpha).toMatchObject({
684+schema: {
685+type: "object",
686+properties: {
687+manifest: { type: "boolean" },
688+},
689+},
690+label: "Alpha Root Label",
691+description: "Alpha Root Description",
692+});
693+expect(fs.existsSync(markerPath)).toBe(false);
694+});
617695});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。