@@ -28,6 +28,7 @@ import { resolveDefaultAgentWorkspaceDir } from "../../agents/workspace.js";
|
28 | 28 | import { getChannelPlugin } from "../../channels/plugins/index.js"; |
29 | 29 | import type { SessionEntry } from "../../config/sessions.js"; |
30 | 30 | import type { OpenClawConfig } from "../../config/types.openclaw.js"; |
| 31 | +import { parseStrictPositiveInteger } from "../../shared/number-coercion.js"; |
31 | 32 | import { |
32 | 33 | normalizeLowercaseStringOrEmpty, |
33 | 34 | normalizeOptionalString, |
@@ -345,17 +346,15 @@ function parseListArgs(tokens: string[]): Extract<ParsedModelsCommand, { action:
|
345 | 346 | continue; |
346 | 347 | } |
347 | 348 | if (lower.startsWith("page=")) { |
348 | | -const value = parsePositiveIntegerToken(lower.slice("page=".length)); |
| 349 | +const value = parseStrictPositiveInteger(lower.slice("page=".length)); |
349 | 350 | if (value !== undefined) { |
350 | 351 | page = value; |
351 | 352 | } |
352 | 353 | continue; |
353 | 354 | } |
354 | | -if (/^[0-9]+$/.test(lower)) { |
355 | | -const value = Number.parseInt(lower, 10); |
356 | | -if (Number.isFinite(value) && value > 0) { |
357 | | -page = value; |
358 | | -} |
| 355 | +const pageToken = parseStrictPositiveInteger(lower); |
| 356 | +if (pageToken !== undefined) { |
| 357 | +page = pageToken; |
359 | 358 | } |
360 | 359 | } |
361 | 360 | |
@@ -364,7 +363,7 @@ function parseListArgs(tokens: string[]): Extract<ParsedModelsCommand, { action:
|
364 | 363 | const lower = normalizeLowercaseStringOrEmpty(token); |
365 | 364 | if (lower.startsWith("limit=") || lower.startsWith("size=")) { |
366 | 365 | const rawValue = lower.slice(lower.indexOf("=") + 1); |
367 | | -const value = parsePositiveIntegerToken(rawValue); |
| 366 | +const value = parseStrictPositiveInteger(rawValue); |
368 | 367 | if (value !== undefined) { |
369 | 368 | pageSize = Math.min(PAGE_SIZE_MAX, value); |
370 | 369 | } |
@@ -380,15 +379,6 @@ function parseListArgs(tokens: string[]): Extract<ParsedModelsCommand, { action:
|
380 | 379 | }; |
381 | 380 | } |
382 | 381 | |
383 | | -function parsePositiveIntegerToken(raw: string): number | undefined { |
384 | | -const trimmed = raw.trim(); |
385 | | -if (!/^\d+$/.test(trimmed)) { |
386 | | -return undefined; |
387 | | -} |
388 | | -const parsed = Number(trimmed); |
389 | | -return Number.isSafeInteger(parsed) && parsed > 0 ? parsed : undefined; |
390 | | -} |
391 | | - |
392 | 382 | function parseModelsArgs(raw: string): ParsedModelsCommand { |
393 | 383 | const trimmed = raw.trim(); |
394 | 384 | if (!trimmed) { |
|