fix(exa): reject non-decimal search counts

This commit is contained in:
Peter Steinberger
2026-05-29 06:49:23 -04:00
parent ed59629ccd
commit d095d1663b
2 changed files with 8 additions and 3 deletions

View File

@@ -1,3 +1,4 @@
import { parseStrictPositiveInteger } from "openclaw/plugin-sdk/number-runtime";
import {
buildSearchCacheKey,
DEFAULT_SEARCH_COUNT,
@@ -171,11 +172,11 @@ function isErrorPayload(value: unknown): value is { error: string; message: stri
}
function resolveExaSearchCount(value: unknown, fallback: number): number {
const parsed = typeof value === "number" ? value : Number(value);
if (!Number.isFinite(parsed)) {
const parsed = parseStrictPositiveInteger(value);
if (parsed === undefined) {
return fallback;
}
return Math.max(1, Math.min(EXA_MAX_SEARCH_COUNT, Math.floor(parsed)));
return Math.min(EXA_MAX_SEARCH_COUNT, parsed);
}
function parseExaContents(

View File

@@ -184,6 +184,10 @@ describe("exa web search provider", () => {
]);
expect(testing.resolveExaSearchCount(80, 10)).toBe(80);
expect(testing.resolveExaSearchCount(120, 10)).toBe(100);
expect(testing.resolveExaSearchCount("+05", 10)).toBe(5);
expect(testing.resolveExaSearchCount("0x10", 10)).toBe(10);
expect(testing.resolveExaSearchCount("1e2", 10)).toBe(10);
expect(testing.resolveExaSearchCount(1.5, 10)).toBe(10);
});
it("returns validation errors for conflicting time filters", async () => {