mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 17:00:50 +00:00
Secrets: avoid broad web search discovery for single plugin config
Add an Exa web-search contract artifact and use single bundled plugin-scoped webSearch config as a provider hint. This keeps runtime secret resolution on metadata-only surfaces instead of importing full provider tool implementations.
This commit is contained in:
@@ -871,6 +871,36 @@ describe("runtime web tools resolution", () => {
|
||||
expect(resolvePluginWebSearchProvidersMock).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("uses single plugin-scoped web search config as a bundled provider hint", async () => {
|
||||
const { metadata } = await runRuntimeWebTools({
|
||||
config: asConfig({
|
||||
plugins: {
|
||||
entries: {
|
||||
google: {
|
||||
enabled: true,
|
||||
config: {
|
||||
webSearch: {
|
||||
apiKey: { source: "env", provider: "default", id: "GOOGLE_PROVIDER_REF" },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}),
|
||||
env: {
|
||||
GOOGLE_PROVIDER_REF: "google-provider-key",
|
||||
},
|
||||
});
|
||||
|
||||
expect(metadata.search.selectedProvider).toBe("gemini");
|
||||
expect(resolveBundledExplicitWebSearchProvidersFromPublicArtifactsMock).toHaveBeenCalledWith({
|
||||
onlyPluginIds: ["google"],
|
||||
});
|
||||
expect(resolveManifestContractOwnerPluginIdMock).not.toHaveBeenCalled();
|
||||
expect(resolveBundledWebSearchProvidersFromPublicArtifactsMock).not.toHaveBeenCalled();
|
||||
expect(resolvePluginWebSearchProvidersMock).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("limits legacy top-level web search apiKey auto-detect to compatibility owners", async () => {
|
||||
const { metadata } = await runRuntimeWebTools({
|
||||
config: asConfig({
|
||||
|
||||
@@ -542,18 +542,18 @@ export async function resolveRuntimeWebTools(params: {
|
||||
}
|
||||
const rawProvider = normalizeLowercaseStringOrEmpty(search?.provider);
|
||||
let configuredBundledWebSearchPluginIdHint: string | undefined;
|
||||
if (rawProvider && hasPluginWebSearchConfig) {
|
||||
configuredBundledWebSearchPluginIdHint = inferExactBundledPluginScopedWebToolConfigOwner({
|
||||
config: params.sourceConfig,
|
||||
key: "webSearch",
|
||||
pluginId: rawProvider,
|
||||
});
|
||||
if (!configuredBundledWebSearchPluginIdHint && !(await getHasCustomWebSearchRisk())) {
|
||||
configuredBundledWebSearchPluginIdHint = inferSingleBundledPluginScopedWebToolConfigOwner(
|
||||
params.sourceConfig,
|
||||
"webSearch",
|
||||
);
|
||||
if (hasPluginWebSearchConfig && !(await getHasCustomWebSearchRisk())) {
|
||||
if (rawProvider) {
|
||||
configuredBundledWebSearchPluginIdHint = inferExactBundledPluginScopedWebToolConfigOwner({
|
||||
config: params.sourceConfig,
|
||||
key: "webSearch",
|
||||
pluginId: rawProvider,
|
||||
});
|
||||
}
|
||||
configuredBundledWebSearchPluginIdHint ??= inferSingleBundledPluginScopedWebToolConfigOwner(
|
||||
params.sourceConfig,
|
||||
"webSearch",
|
||||
);
|
||||
}
|
||||
const searchMetadata: RuntimeWebSearchMetadata = {
|
||||
providerSource: "none",
|
||||
|
||||
Reference in New Issue
Block a user