fix: parse queue caps strictly

This commit is contained in:
Peter Steinberger
2026-05-28 13:34:47 -04:00
parent 2122dccb91
commit d47eee4407
2 changed files with 12 additions and 9 deletions
@@ -44,4 +44,14 @@ describe("maybeHandleQueueDirective", () => {
"Options: modes steer, followup, collect, interrupt; debounce:<ms|s|m>, cap:<n>, drop:old|new|summarize.",
);
});
it.each(["cap:1e3", "cap:0x10", "cap:4.9"])("rejects non-decimal-integer caps: %s", (cap) => {
const invalid = maybeHandleQueueDirective({
directives: parseInlineDirectives(`/queue collect ${cap}`),
cfg: {} as OpenClawConfig,
channel: "quietchat",
});
expect(invalid?.text).toContain("Invalid cap");
});
});
+2 -9
View File
@@ -1,4 +1,5 @@
import { parseDurationMs } from "../../../cli/parse-duration.js";
import { parseStrictPositiveInteger } from "../../../infra/parse-finite-number.js";
import { normalizeOptionalLowercaseString } from "../../../shared/string-coerce.js";
import { skipDirectiveArgPrefix, takeDirectiveToken } from "../directive-parsing.js";
import { normalizeQueueDropPolicy, normalizeQueueMode } from "./normalize.js";
@@ -23,15 +24,7 @@ function parseQueueCap(raw?: string): number | undefined {
if (!raw) {
return undefined;
}
const num = Number(raw);
if (!Number.isFinite(num)) {
return undefined;
}
const cap = Math.floor(num);
if (cap < 1) {
return undefined;
}
return cap;
return parseStrictPositiveInteger(raw);
}
function parseQueueDirectiveArgs(raw: string): {