























@@ -12,9 +12,18 @@ import type { PluginManifestRecord } from "../plugins/manifest-registry.js";
1212import type { PluginMetadataSnapshot } from "../plugins/plugin-metadata-snapshot.types.js";
1313import { clearSecretsRuntimeSnapshot } from "../secrets/runtime.js";
1414import type { AuthProfileStore } from "./auth-profiles/types.js";
15-import { __testing, createOpenClawTools } from "./openclaw-tools.js";
15+import { resolveOptionalMediaToolFactoryPlan } from "./openclaw-tools.media-factory-plan.js";
1616import * as pdfModelConfigModule from "./tools/pdf-tool.model-config.js";
171718+type CreateOpenClawToolsOptions = Parameters<
19+typeof import("./openclaw-tools.js").createOpenClawTools
20+>[0];
21+22+async function createOpenClawToolsForTest(options?: CreateOpenClawToolsOptions) {
23+const { createOpenClawTools } = await import("./openclaw-tools.js");
24+return createOpenClawTools(options);
25+}
26+1827function createAuthStore(providers: string[] = []): AuthProfileStore {
1928return {
2029version: 1,
@@ -180,7 +189,7 @@ describe("optional media tool factory planning", () => {
180189]);
181190182191expect(
183-__testing.resolveOptionalMediaToolFactoryPlan({
192+resolveOptionalMediaToolFactoryPlan({
184193 config,
185194authStore: createAuthStore(["github-copilot"]),
186195}),
@@ -206,7 +215,7 @@ describe("optional media tool factory planning", () => {
206215installSnapshot(config, []);
207216208217expect(
209-__testing.resolveOptionalMediaToolFactoryPlan({
218+resolveOptionalMediaToolFactoryPlan({
210219 config,
211220authStore: createAuthStore(),
212221}),
@@ -234,7 +243,7 @@ describe("optional media tool factory planning", () => {
234243]);
235244236245expect(
237-__testing.resolveOptionalMediaToolFactoryPlan({
246+resolveOptionalMediaToolFactoryPlan({
238247 config,
239248authStore: createAuthStore(["image-owner", "anthropic"]),
240249toolAllowlist: ["image_generate"],
@@ -263,7 +272,7 @@ describe("optional media tool factory planning", () => {
263272]);
264273265274expect(
266-__testing.resolveOptionalMediaToolFactoryPlan({
275+resolveOptionalMediaToolFactoryPlan({
267276 config,
268277authStore: createAuthStore(["image-owner", "anthropic"]),
269278toolDenylist: ["image_generate", "pdf"],
@@ -287,7 +296,7 @@ describe("optional media tool factory planning", () => {
287296]);
288297289298expect(
290-__testing.resolveOptionalMediaToolFactoryPlan({
299+resolveOptionalMediaToolFactoryPlan({
291300 config,
292301authStore: createAuthStore(["anthropic"]),
293302}).pdf,
@@ -320,7 +329,7 @@ describe("optional media tool factory planning", () => {
320329]);
321330322331expect(
323-__testing.resolveOptionalMediaToolFactoryPlan({
332+resolveOptionalMediaToolFactoryPlan({
324333 config,
325334authStore: createAuthStore(["image-owner", "video-owner", "music-owner", "anthropic"]),
326335toolDenylist: ["*_generate", "p*"],
@@ -360,7 +369,7 @@ describe("optional media tool factory planning", () => {
360369vi.stubEnv("VIDEO_OWNER_API_KEY", "video-key");
361370362371expect(
363-__testing.resolveOptionalMediaToolFactoryPlan({
372+resolveOptionalMediaToolFactoryPlan({
364373 config,
365374authStore: createAuthStore(["image-owner", "music-owner", "media-owner"]),
366375}),
@@ -372,12 +381,12 @@ describe("optional media tool factory planning", () => {
372381});
373382});
374383375-it("defers PDF model resolution from the tool-prep hot path", () => {
384+it("defers PDF model resolution from the tool-prep hot path", async () => {
376385const config: OpenClawConfig = {};
377386installSnapshot(config, []);
378387const resolveSpy = vi.spyOn(pdfModelConfigModule, "resolvePdfModelConfigForTool");
379388380-const tools = createOpenClawTools({
389+const tools = await createOpenClawToolsForTest({
381390 config,
382391agentDir: "/tmp/openclaw-agent-main",
383392authProfileStore: createAuthStore(["anthropic"]),
@@ -417,7 +426,7 @@ describe("optional media tool factory planning", () => {
417426]);
418427419428expect(
420-__testing.resolveOptionalMediaToolFactoryPlan({
429+resolveOptionalMediaToolFactoryPlan({
421430 config,
422431authStore: createAuthStore([
423432"external-image",
@@ -434,7 +443,7 @@ describe("optional media tool factory planning", () => {
434443});
435444});
436445437-it("keeps manifest-declared image provider auth aliases on the factory path", () => {
446+it("keeps manifest-declared image provider auth aliases on the factory path", async () => {
438447const config: OpenClawConfig = {};
439448const plugins = [
440449createPlugin({
@@ -463,7 +472,7 @@ describe("optional media tool factory planning", () => {
463472installSnapshot(config, plugins);
464473465474expect(
466-__testing.resolveOptionalMediaToolFactoryPlan({
475+resolveOptionalMediaToolFactoryPlan({
467476 config,
468477authStore: createAuthStore(["openai-codex"]),
469478}),
@@ -472,12 +481,14 @@ describe("optional media tool factory planning", () => {
472481});
473482installSnapshot(config, plugins, undefined, process.cwd());
474483expect(
475-createOpenClawTools({
476- config,
477-workspaceDir: process.cwd(),
478-authProfileStore: createAuthStore(["openai-codex"]),
479-pluginToolAllowlist: ["image_generate"],
480-}).map((tool) => tool.name),
484+(
485+await createOpenClawToolsForTest({
486+ config,
487+workspaceDir: process.cwd(),
488+authProfileStore: createAuthStore(["openai-codex"]),
489+pluginToolAllowlist: ["image_generate"],
490+})
491+).map((tool) => tool.name),
481492).toContain("image_generate");
482493});
483494@@ -528,7 +539,7 @@ describe("optional media tool factory planning", () => {
528539]);
529540530541expect(
531-__testing.resolveOptionalMediaToolFactoryPlan({
542+resolveOptionalMediaToolFactoryPlan({
532543 config,
533544authStore: createAuthStore(),
534545}),
@@ -539,7 +550,7 @@ describe("optional media tool factory planning", () => {
539550});
540551});
541552542-it("does not expose manifest-backed generation providers when plugins are globally disabled", () => {
553+it("does not expose manifest-backed generation providers when plugins are globally disabled", async () => {
543554const config: OpenClawConfig = {
544555plugins: {
545556enabled: false,
@@ -587,7 +598,7 @@ describe("optional media tool factory planning", () => {
587598]);
588599589600expect(
590-__testing.resolveOptionalMediaToolFactoryPlan({
601+resolveOptionalMediaToolFactoryPlan({
591602 config,
592603authStore: createAuthStore(),
593604}),
@@ -598,15 +609,17 @@ describe("optional media tool factory planning", () => {
598609pdf: false,
599610});
600611expect(
601-createOpenClawTools({
602- config,
603-authProfileStore: createAuthStore(),
604-pluginToolAllowlist: ["image_generate", "video_generate", "music_generate"],
605-}).map((tool) => tool.name),
612+(
613+await createOpenClawToolsForTest({
614+ config,
615+authProfileStore: createAuthStore(),
616+pluginToolAllowlist: ["image_generate", "video_generate", "music_generate"],
617+})
618+).map((tool) => tool.name),
606619).not.toEqual(expect.arrayContaining(["image_generate", "video_generate", "music_generate"]));
607620});
608621609-it("does not count unresolved SecretRef config signals as configured", () => {
622+it("does not count unresolved SecretRef config signals as configured", async () => {
610623vi.stubEnv("COMFY_TEST_API_KEY", "");
611624const workspaceDir = process.cwd();
612625const config: OpenClawConfig = {
@@ -660,7 +673,7 @@ describe("optional media tool factory planning", () => {
660673);
661674662675expect(
663-__testing.resolveOptionalMediaToolFactoryPlan({
676+resolveOptionalMediaToolFactoryPlan({
664677 config,
665678 workspaceDir,
666679authStore: createAuthStore(),
@@ -672,12 +685,14 @@ describe("optional media tool factory planning", () => {
672685pdf: false,
673686});
674687expect(
675-createOpenClawTools({
676- config,
677- workspaceDir,
678-authProfileStore: createAuthStore(),
679-pluginToolAllowlist: ["image_generate", "video_generate", "music_generate"],
680-}).map((tool) => tool.name),
688+(
689+await createOpenClawToolsForTest({
690+ config,
691+ workspaceDir,
692+authProfileStore: createAuthStore(),
693+pluginToolAllowlist: ["image_generate", "video_generate", "music_generate"],
694+})
695+).map((tool) => tool.name),
681696).not.toEqual(expect.arrayContaining(["image_generate", "video_generate", "music_generate"]));
682697});
683698@@ -737,7 +752,7 @@ describe("optional media tool factory planning", () => {
737752]);
738753739754expect(
740-__testing.resolveOptionalMediaToolFactoryPlan({
755+resolveOptionalMediaToolFactoryPlan({
741756 config,
742757authStore: createAuthStore(),
743758}),
@@ -748,7 +763,7 @@ describe("optional media tool factory planning", () => {
748763});
749764});
750765751-it("does not register the image tool without cheap vision availability evidence", () => {
766+it("does not register the image tool without cheap vision availability evidence", async () => {
752767const config: OpenClawConfig = {};
753768installSnapshot(config, [
754769createPlugin({
@@ -759,12 +774,14 @@ describe("optional media tool factory planning", () => {
759774]);
760775761776expect(
762-createOpenClawTools({
763- config,
764-agentDir: "/tmp/openclaw-agent",
765-authProfileStore: createAuthStore(),
766-disablePluginTools: true,
767-}).map((tool) => tool.name),
777+(
778+await createOpenClawToolsForTest({
779+ config,
780+agentDir: "/tmp/openclaw-agent",
781+authProfileStore: createAuthStore(),
782+disablePluginTools: true,
783+})
784+).map((tool) => tool.name),
768785).not.toContain("image");
769786});
770787@@ -804,14 +821,16 @@ describe("optional media tool factory planning", () => {
804821},
805822])(
806823"registers generation tools from Comfy $name without a current metadata snapshot",
807-({ config }) => {
824+async ({ config }) => {
808825setBundledPluginsDirOverrideForTest(path.join(process.cwd(), "extensions"));
809826810-const toolNames = createOpenClawTools({
811- config,
812-authProfileStore: createAuthStore(),
813-pluginToolAllowlist: ["image_generate", "video_generate", "music_generate"],
814-}).map((tool) => tool.name);
827+const toolNames = (
828+await createOpenClawToolsForTest({
829+ config,
830+authProfileStore: createAuthStore(),
831+pluginToolAllowlist: ["image_generate", "video_generate", "music_generate"],
832+})
833+).map((tool) => tool.name);
815834816835expect(toolNames).toContain("image_generate");
817836expect(toolNames).toContain("video_generate");
@@ -853,7 +872,7 @@ describe("optional media tool factory planning", () => {
853872]);
854873855874expect(
856-__testing.resolveOptionalMediaToolFactoryPlan({
875+resolveOptionalMediaToolFactoryPlan({
857876 config,
858877authStore: createAuthStore(["openai-codex"]),
859878}),
@@ -878,7 +897,7 @@ describe("optional media tool factory planning", () => {
878897]);
879898880899expect(
881-__testing.resolveOptionalMediaToolFactoryPlan({
900+resolveOptionalMediaToolFactoryPlan({
882901 config,
883902authStore: createAuthStore(["external-image"]),
884903}),
@@ -895,7 +914,7 @@ describe("optional media tool factory planning", () => {
895914installSnapshot(config, []);
896915897916expect(
898-__testing.resolveOptionalMediaToolFactoryPlan({
917+resolveOptionalMediaToolFactoryPlan({
899918 config,
900919authStore: createAuthStore(),
901920}),
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。