jackwener/OpenCLI · warning · ArgumentError
xianyu rank must be a positive integer from xianyu inbox
Error message
xianyu rank must be a positive integer from xianyu inbox
What it means
normalizeRank validates the 'rank' parameter, which selects a message by its position from xianyu inbox listings. It throws ArgumentError when the value is non-empty but not a pure digit string (e.g. 'abc', '1.5', '-3').
Source
Thrown at clis/xianyu/im.js:25
export function normalizeLimit(value, defaultValue = DEFAULT_INBOX_LIMIT, maxValue = MAX_INBOX_LIMIT, label = 'limit') {
const raw = String(value ?? '').trim();
if (!raw) return defaultValue;
if (!/^\d+$/.test(raw)) {
throw new ArgumentError(`xianyu ${label} must be an integer between 1 and ${maxValue}`);
}
const n = Number(raw);
if (!Number.isSafeInteger(n) || n < 1 || n > maxValue) {
throw new ArgumentError(`xianyu ${label} must be an integer between 1 and ${maxValue}`);
}
return n;
}
export function normalizeRank(value) {
const raw = String(value ?? '').trim();
if (!raw) return 0;
if (!/^\d+$/.test(raw)) {
throw new ArgumentError('xianyu rank must be a positive integer from xianyu inbox');
}
const n = Number(raw);
if (!Number.isSafeInteger(n) || n < 1) {
throw new ArgumentError('xianyu rank must be a positive integer from xianyu inbox');
}
return n;
}
export function requireText(value, label) {
const text = String(value ?? '').replace(/\s+/g, ' ').trim();
if (!text) {
throw new ArgumentError(`${label} cannot be empty`);
}
return text;
}
export function requireEvaluateObject(payload, label) {
if (!payload || typeof payload !== 'object' || Array.isArray(payload)) {View on GitHub (pinned to 49907e53dc)
Solutions
- Pass a positive integer rank as shown in xianyu inbox output
- Omit or pass empty to default to 0
- Convert ordinals/labels to numbers before calling
- Validate with /^\d+$/ before invoking
Example fix
// before
await xianyuReply({ rank: 'first' }); // throws
// after
await xianyuReply({ rank: '1' }); Defensive patterns
Strategy: validation
Validate before calling
if (rank != null && rank !== '' && !/^\d+$/.test(String(rank))) {
throw new Error('rank must be a positive integer');
} Type guard
function isValidRank(v) {
return v === '' || v == null || (/^\d+$/.test(String(v)) && Number(v) >= 1);
} Try / catch
try {
await xianyuReply({ rank });
} catch (e) {
if (e?.name === 'ArgumentError' && /rank/.test(e.message)) {
throw new Error(`bad rank '${rank}': use the numeric rank from xianyu inbox`);
}
throw e;
} Prevention
- Use numeric ranks exactly as printed in inbox output
- Convert ordinals ('first') to integers upstream
- Validate with /^\d+$/ before invoking
When it happens
Trigger: Calling a xianyu command with rank='first', rank='1.5', rank='-1', or any non-numeric string; empty string returns 0 and is allowed.
Common situations: Passing a label or ordinal word instead of the numeric rank shown in inbox output; locale-formatted numbers ('1st'); parsing errors upstream.
Related errors
- xianyu ${label} must be an integer between 1 and ${maxValue}
- ${label} cannot be empty
- archive search sort must be one of ${SORT_OPTIONS.join(', ')
- archive search mediatype must be one of ${MEDIATYPES.join(',
- archive search limit must be a positive integer
AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29).
Data as JSON: /api/errors/b8fdf12bf57aa8d8.
Report an issue: GitHub.