mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-04 19:30:20 +00:00
fix(slack): trim DM reply overhead and restore Codex auto transport (#53957)
* perf(slack): instrument runtime and trim DM overhead * perf(slack): lazy-init draft previews * perf(slack): add turn summary diagnostics * perf(core): trim repeated runtime setup noise * perf(core): preselect default web search providers * perf(agent): restore OpenAI auto transport defaults * refactor(slack): drop temporary perf wiring * fix(slack): address follow-up review notes * fix(security): tighten slack and runtime defaults * style(web-search): fix import ordering * style(agent): remove useless spread fallback * docs(changelog): note slack runtime hardening
This commit is contained in:
@@ -225,8 +225,11 @@ describe("runtime web tools resolution", () => {
|
||||
}
|
||||
});
|
||||
|
||||
it("skips loading web search providers when search config is absent", async () => {
|
||||
const providerSpy = vi.mocked(runtimeWebSearchProviders.resolvePluginWebSearchProviders);
|
||||
it("keeps web search disabled when search config is absent", async () => {
|
||||
const bundledProviderSpy = vi.mocked(
|
||||
bundledWebSearchProviders.resolveBundledPluginWebSearchProviders,
|
||||
);
|
||||
const runtimeProviderSpy = vi.mocked(runtimeWebSearchProviders.resolvePluginWebSearchProviders);
|
||||
|
||||
const { metadata } = await runRuntimeWebTools({
|
||||
config: asConfig({
|
||||
@@ -245,7 +248,9 @@ describe("runtime web tools resolution", () => {
|
||||
},
|
||||
});
|
||||
|
||||
expect(providerSpy).not.toHaveBeenCalled();
|
||||
expect(bundledProviderSpy).not.toHaveBeenCalled();
|
||||
expect(runtimeProviderSpy).not.toHaveBeenCalled();
|
||||
expect(metadata.search.selectedProvider).toBeUndefined();
|
||||
expect(metadata.search.providerSource).toBe("none");
|
||||
expect(metadata.fetch.firecrawl.active).toBe(true);
|
||||
expect(metadata.fetch.firecrawl.apiKeySource).toBe("env");
|
||||
@@ -681,6 +686,53 @@ describe("runtime web tools resolution", () => {
|
||||
expectInactiveFirecrawlSecretRef({ resolveSpy, metadata, context });
|
||||
});
|
||||
|
||||
it("keeps configured provider metadata and inactive warnings when search is disabled", async () => {
|
||||
const { metadata, context } = await runRuntimeWebTools({
|
||||
config: asConfig({
|
||||
tools: {
|
||||
web: {
|
||||
search: {
|
||||
enabled: false,
|
||||
provider: "gemini",
|
||||
},
|
||||
},
|
||||
},
|
||||
plugins: {
|
||||
entries: {
|
||||
google: {
|
||||
enabled: true,
|
||||
config: {
|
||||
webSearch: {
|
||||
apiKey: { source: "env", provider: "default", id: "GEMINI_PROVIDER_REF" },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}),
|
||||
});
|
||||
|
||||
expect(metadata.search.providerConfigured).toBe("gemini");
|
||||
expect(metadata.search.providerSource).toBe("configured");
|
||||
expect(context.warnings).toEqual(
|
||||
expect.arrayContaining([
|
||||
expect.objectContaining({
|
||||
code: "SECRETS_REF_IGNORED_INACTIVE_SURFACE",
|
||||
path: "plugins.entries.google.config.webSearch.apiKey",
|
||||
}),
|
||||
]),
|
||||
);
|
||||
});
|
||||
|
||||
it("does not auto-enable search when tools.web.search is absent", async () => {
|
||||
const { metadata } = await runRuntimeWebTools({
|
||||
config: asConfig({}),
|
||||
});
|
||||
|
||||
expect(metadata.search.providerSource).toBe("none");
|
||||
expect(metadata.search.selectedProvider).toBeUndefined();
|
||||
});
|
||||
|
||||
it("uses env fallback for unresolved Firecrawl SecretRef when active", async () => {
|
||||
const { metadata, resolvedConfig, context } = await runRuntimeWebTools({
|
||||
config: asConfig({
|
||||
|
||||
@@ -298,8 +298,16 @@ export async function resolveRuntimeWebTools(params: {
|
||||
const rawProvider =
|
||||
typeof search?.provider === "string" ? search.provider.trim().toLowerCase() : "";
|
||||
const configuredBundledPluginId = resolveBundledWebSearchPluginId(rawProvider);
|
||||
|
||||
const searchMetadata: RuntimeWebSearchMetadata = {
|
||||
providerSource: "none",
|
||||
diagnostics: [],
|
||||
};
|
||||
|
||||
const searchConfigured = Boolean(search);
|
||||
const searchEnabled = searchConfigured && search?.enabled !== false;
|
||||
const providers = sortWebSearchProvidersForAutoDetect(
|
||||
search
|
||||
searchConfigured
|
||||
? configuredBundledPluginId
|
||||
? resolveBundledPluginWebSearchProviders({
|
||||
config: params.sourceConfig,
|
||||
@@ -320,13 +328,6 @@ export async function resolveRuntimeWebTools(params: {
|
||||
})
|
||||
: [],
|
||||
);
|
||||
|
||||
const searchMetadata: RuntimeWebSearchMetadata = {
|
||||
providerSource: "none",
|
||||
diagnostics: [],
|
||||
};
|
||||
|
||||
const searchEnabled = search?.enabled !== false;
|
||||
const configuredProvider = normalizeProvider(rawProvider, providers);
|
||||
|
||||
if (rawProvider && !configuredProvider) {
|
||||
@@ -349,7 +350,7 @@ export async function resolveRuntimeWebTools(params: {
|
||||
searchMetadata.providerSource = "configured";
|
||||
}
|
||||
|
||||
if (searchEnabled && search) {
|
||||
if (searchEnabled) {
|
||||
const candidates = configuredProvider
|
||||
? providers.filter((provider) => provider.id === configuredProvider)
|
||||
: providers;
|
||||
@@ -515,7 +516,7 @@ export async function resolveRuntimeWebTools(params: {
|
||||
}
|
||||
}
|
||||
|
||||
if (searchEnabled && search && !configuredProvider && searchMetadata.selectedProvider) {
|
||||
if (searchEnabled && !configuredProvider && searchMetadata.selectedProvider) {
|
||||
for (const provider of providers) {
|
||||
if (provider.id === searchMetadata.selectedProvider) {
|
||||
continue;
|
||||
|
||||
Reference in New Issue
Block a user