























@@ -393,6 +393,140 @@ describe("optional media tool factory planning", () => {
393393});
394394});
395395396+it("does not expose manifest-backed generation providers when plugins are globally disabled", () => {
397+const config: OpenClawConfig = {
398+plugins: {
399+enabled: false,
400+entries: {
401+comfy: {
402+config: {
403+mode: "local",
404+workflow: { "1": { inputs: {} } },
405+promptNodeId: "1",
406+},
407+},
408+},
409+},
410+};
411+const configSignals = [
412+{
413+rootPath: "plugins.entries.comfy.config",
414+mode: {
415+path: "mode",
416+default: "local",
417+allowed: ["local"],
418+},
419+requiredAny: ["workflow", "workflowPath"],
420+required: ["promptNodeId"],
421+},
422+];
423+installSnapshot(config, [
424+createPlugin({
425+id: "comfy",
426+contracts: {
427+imageGenerationProviders: ["comfy"],
428+videoGenerationProviders: ["comfy"],
429+musicGenerationProviders: ["comfy"],
430+},
431+imageGenerationProviderMetadata: {
432+comfy: { configSignals },
433+},
434+videoGenerationProviderMetadata: {
435+comfy: { configSignals },
436+},
437+musicGenerationProviderMetadata: {
438+comfy: { configSignals },
439+},
440+}),
441+]);
442+443+expect(
444+__testing.resolveOptionalMediaToolFactoryPlan({
445+ config,
446+authStore: createAuthStore(),
447+}),
448+).toEqual({
449+imageGenerate: false,
450+videoGenerate: false,
451+musicGenerate: false,
452+pdf: false,
453+});
454+expect(
455+createOpenClawTools({
456+ config,
457+authProfileStore: createAuthStore(),
458+pluginToolAllowlist: ["image_generate", "video_generate", "music_generate"],
459+}).map((tool) => tool.name),
460+).not.toEqual(expect.arrayContaining(["image_generate", "video_generate", "music_generate"]));
461+});
462+463+it("does not count unresolved SecretRef config signals as configured", () => {
464+vi.stubEnv("COMFY_TEST_API_KEY", "");
465+const config: OpenClawConfig = {
466+plugins: {
467+entries: {
468+comfy: {
469+config: {
470+mode: "cloud",
471+apiKey: { source: "env", provider: "default", id: "COMFY_TEST_API_KEY" },
472+workflow: { "1": { inputs: {} } },
473+promptNodeId: "1",
474+},
475+},
476+},
477+},
478+};
479+const configSignals = [
480+{
481+rootPath: "plugins.entries.comfy.config",
482+mode: {
483+path: "mode",
484+allowed: ["cloud"],
485+},
486+requiredAny: ["workflow", "workflowPath"],
487+required: ["promptNodeId", "apiKey"],
488+},
489+];
490+installSnapshot(config, [
491+createPlugin({
492+id: "comfy",
493+contracts: {
494+imageGenerationProviders: ["comfy"],
495+videoGenerationProviders: ["comfy"],
496+musicGenerationProviders: ["comfy"],
497+},
498+imageGenerationProviderMetadata: {
499+comfy: { configSignals },
500+},
501+videoGenerationProviderMetadata: {
502+comfy: { configSignals },
503+},
504+musicGenerationProviderMetadata: {
505+comfy: { configSignals },
506+},
507+}),
508+]);
509+510+expect(
511+__testing.resolveOptionalMediaToolFactoryPlan({
512+ config,
513+authStore: createAuthStore(),
514+}),
515+).toEqual({
516+imageGenerate: false,
517+videoGenerate: false,
518+musicGenerate: false,
519+pdf: false,
520+});
521+expect(
522+createOpenClawTools({
523+ config,
524+authProfileStore: createAuthStore(),
525+pluginToolAllowlist: ["image_generate", "video_generate", "music_generate"],
526+}).map((tool) => tool.name),
527+).not.toEqual(expect.arrayContaining(["image_generate", "video_generate", "music_generate"]));
528+});
529+396530it.each([
397531{
398532name: "legacy local provider config",
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。