test: trim provider contract slow paths

This commit is contained in:
Peter Steinberger
2026-04-10 20:00:48 +01:00
parent e3a845bde5
commit 8640b89158
3 changed files with 10 additions and 132 deletions

View File

@@ -41,10 +41,6 @@ describe("google video generation provider", () => {
mode: "api-key",
});
generateVideosMock.mockResolvedValue({
done: false,
name: "operations/123",
});
getVideosOperationMock.mockResolvedValue({
done: true,
name: "operations/123",
response: {

View File

@@ -113,6 +113,14 @@ export function hasAvailableCodexAuth(params: {
config?: OpenClawConfig;
agentDir?: string;
}): boolean {
if (
Object.values(params.config?.auth?.profiles ?? {}).some(
(profile) => isRecord(profile) && profile.provider === "openai-codex",
)
) {
return true;
}
if (params.agentDir) {
try {
if (
@@ -124,10 +132,7 @@ export function hasAvailableCodexAuth(params: {
// Fall back to config-based detection below.
}
}
return Object.values(params.config?.auth?.profiles ?? {}).some(
(profile) => isRecord(profile) && profile.provider === "openai-codex",
);
return false;
}
export function resolveCodexNativeSearchActivation(params: {

View File

@@ -1,12 +1,5 @@
import { describe, expect, it } from "vitest";
import {
imageGenerationProviderContractRegistry,
mediaUnderstandingProviderContractRegistry,
musicGenerationProviderContractRegistry,
pluginRegistrationContractRegistry,
speechProviderContractRegistry,
videoGenerationProviderContractRegistry,
} from "../../../src/plugins/contracts/registry.js";
import { pluginRegistrationContractRegistry } from "../../../src/plugins/contracts/registry.js";
import { loadPluginManifestRegistry } from "../../../src/plugins/manifest-registry.js";
type PluginRegistrationContractParams = {
@@ -47,79 +40,6 @@ function findRegistration(pluginId: string) {
return entry;
}
function findSpeechProviderIds(pluginId: string) {
return speechProviderContractRegistry
.filter((entry) => entry.pluginId === pluginId)
.map((entry) => entry.provider.id)
.toSorted((left, right) => left.localeCompare(right));
}
function findSpeechProvider(pluginId: string) {
const entry = speechProviderContractRegistry.find((candidate) => candidate.pluginId === pluginId);
if (!entry) {
throw new Error(`speech provider contract missing for ${pluginId}`);
}
return entry.provider;
}
function findMediaUnderstandingProviderIds(pluginId: string) {
return mediaUnderstandingProviderContractRegistry
.filter((entry) => entry.pluginId === pluginId)
.map((entry) => entry.provider.id)
.toSorted((left, right) => left.localeCompare(right));
}
function findMediaUnderstandingProvider(pluginId: string) {
const entry = mediaUnderstandingProviderContractRegistry.find(
(candidate) => candidate.pluginId === pluginId,
);
if (!entry) {
throw new Error(`media-understanding provider contract missing for ${pluginId}`);
}
return entry.provider;
}
function findImageGenerationProviderIds(pluginId: string) {
return imageGenerationProviderContractRegistry
.filter((entry) => entry.pluginId === pluginId)
.map((entry) => entry.provider.id)
.toSorted((left, right) => left.localeCompare(right));
}
function findImageGenerationProvider(pluginId: string) {
const entry = imageGenerationProviderContractRegistry.find(
(candidate) => candidate.pluginId === pluginId,
);
if (!entry) {
throw new Error(`image-generation provider contract missing for ${pluginId}`);
}
return entry.provider;
}
function findVideoGenerationProviderIds(pluginId: string) {
return videoGenerationProviderContractRegistry
.filter((entry) => entry.pluginId === pluginId)
.map((entry) => entry.provider.id)
.toSorted((left, right) => left.localeCompare(right));
}
function findVideoGenerationProvider(pluginId: string) {
const entry = videoGenerationProviderContractRegistry.find(
(candidate) => candidate.pluginId === pluginId,
);
if (!entry) {
throw new Error(`video-generation provider contract missing for ${pluginId}`);
}
return entry.provider;
}
function findMusicGenerationProviderIds(pluginId: string) {
return musicGenerationProviderContractRegistry
.filter((entry) => entry.pluginId === pluginId)
.map((entry) => entry.provider.id)
.toSorted((left, right) => left.localeCompare(right));
}
export function describePluginRegistrationContract(params: PluginRegistrationContractParams) {
describe(`${params.pluginId} plugin registration contract`, () => {
if (params.cliBackendIds) {
@@ -155,7 +75,6 @@ export function describePluginRegistrationContract(params: PluginRegistrationCon
expect(findRegistration(params.pluginId).speechProviderIds).toEqual(
params.speechProviderIds,
);
expect(findSpeechProviderIds(params.pluginId)).toEqual(params.speechProviderIds);
});
}
@@ -180,9 +99,6 @@ export function describePluginRegistrationContract(params: PluginRegistrationCon
expect(findRegistration(params.pluginId).mediaUnderstandingProviderIds).toEqual(
params.mediaUnderstandingProviderIds,
);
expect(findMediaUnderstandingProviderIds(params.pluginId)).toEqual(
params.mediaUnderstandingProviderIds,
);
});
}
@@ -191,9 +107,6 @@ export function describePluginRegistrationContract(params: PluginRegistrationCon
expect(findRegistration(params.pluginId).imageGenerationProviderIds).toEqual(
params.imageGenerationProviderIds,
);
expect(findImageGenerationProviderIds(params.pluginId)).toEqual(
params.imageGenerationProviderIds,
);
});
}
@@ -202,9 +115,6 @@ export function describePluginRegistrationContract(params: PluginRegistrationCon
expect(findRegistration(params.pluginId).videoGenerationProviderIds).toEqual(
params.videoGenerationProviderIds,
);
expect(findVideoGenerationProviderIds(params.pluginId)).toEqual(
params.videoGenerationProviderIds,
);
});
}
@@ -213,9 +123,6 @@ export function describePluginRegistrationContract(params: PluginRegistrationCon
expect(findRegistration(params.pluginId).musicGenerationProviderIds).toEqual(
params.musicGenerationProviderIds,
);
expect(findMusicGenerationProviderIds(params.pluginId)).toEqual(
params.musicGenerationProviderIds,
);
});
}
@@ -225,36 +132,6 @@ export function describePluginRegistrationContract(params: PluginRegistrationCon
});
}
if (params.requireSpeechVoices) {
it("keeps bundled speech voice-list support explicit", () => {
expect(findSpeechProvider(params.pluginId).listVoices).toEqual(expect.any(Function));
});
}
if (params.requireDescribeImages) {
it("keeps bundled multi-image support explicit", () => {
expect(findMediaUnderstandingProvider(params.pluginId).describeImages).toEqual(
expect.any(Function),
);
});
}
if (params.requireGenerateImage) {
it("keeps bundled image-generation support explicit", () => {
expect(findImageGenerationProvider(params.pluginId).generateImage).toEqual(
expect.any(Function),
);
});
}
if (params.requireGenerateVideo) {
it("keeps bundled video-generation support explicit", () => {
expect(findVideoGenerationProvider(params.pluginId).generateVideo).toEqual(
expect.any(Function),
);
});
}
const manifestAuthChoice = params.manifestAuthChoice;
if (manifestAuthChoice) {
it("keeps onboarding auth grouping explicit", () => {