{"record":{"id":"8a44ff80f6312456","repo":"can1357/oh-my-pi","slug":"provider-request-limits-must-be-positive-numbers","errorCode":null,"errorMessage":"Provider request limits must be positive numbers: ${invalidProviders.join(\", \")}","messagePattern":"Provider request limits must be positive numbers: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/coding-agent/src/config/settings.ts","lineNumber":263,"sourceCode":"\t\tif (typeof rawLimit !== \"number\" || !Number.isFinite(rawLimit) || rawLimit <= 0) continue;\n\t\tnormalized[provider] = Math.max(1, Math.floor(rawLimit));\n\t}\n\treturn normalized;\n}\n\nexport function validateProviderMaxInFlightRequests(value: unknown): Record<string, number> {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) return {};\n\tconst invalidProviders: string[] = [];\n\tconst normalized: Record<string, number> = {};\n\tfor (const [provider, rawLimit] of Object.entries(value)) {\n\t\tif (typeof rawLimit !== \"number\" || !Number.isFinite(rawLimit) || rawLimit <= 0) {\n\t\t\tinvalidProviders.push(provider);\n\t\t\tcontinue;\n\t\t}\n\t\tnormalized[provider] = Math.max(1, Math.floor(rawLimit));\n\t}\n\tif (invalidProviders.length > 0) {\n\t\tthrow new Error(`Provider request limits must be positive numbers: ${invalidProviders.join(\", \")}`);\n\t}\n\treturn normalized;\n}\n\nconst PATH_SCOPED_ARRAY_SETTINGS = new Set<SettingPath>([\"enabledModels\", \"disabledProviders\"]);\ntype PathScopedStringArrayEntry = {\n\tpath?: unknown;\n\tpaths?: unknown;\n\tpathPrefix?: unknown;\n\tpathPrefixes?: unknown;\n\tvalues?: unknown;\n\titems?: unknown;\n\tmodels?: unknown;\n\tproviders?: unknown;\n};\n\nfunction expandTilde(p: string): string {\n\treturn p === \"~\" ? os.homedir() : p.startsWith(\"~/\") ? path.join(os.homedir(), p.slice(2)) : p;","sourceCodeStart":245,"sourceCodeEnd":281,"githubUrl":"https://github.com/can1357/oh-my-pi/blob/969062200754ea02cfac922e5ebb8c608c079e15/packages/coding-agent/src/config/settings.ts#L245-L281","documentation":"Thrown by validateProviderMaxInFlightRequests when one or more entries in the provider request-limits setting are not positive finite numbers. Valid limits are floored to an integer with a minimum of 1; entries that cannot be so normalized (non-numeric, NaN, <= 0, non-finite) are collected and reported together with the provider names.","triggerScenarios":"Setting the provider request limits setting (via parseAndSetValue / setting hooks / normalized merge paths) with values like \"abc\", 0, -5, or null for a named provider.","commonSituations":"Typo in a limits map in settings.yaml (string instead of number), copy-pasted config with 0 intended as 'no limit', locale-formatted numbers.","solutions":["Change the listed providers' limits to positive integers (1 or more)","Remove entries for providers you do not want limited","Quote-free numeric values in YAML: verify no stray quotes make them strings like \"0\""],"exampleFix":"// before (settings.yaml)\nproviderMaxInFlightRequests:\n  openai: 0\n  anthropic: \"three\"\n// after\nproviderMaxInFlightRequests:\n  openai: 4\n  anthropic: 2","handlingStrategy":"validation","validationCode":"function validLimits(map) {\n  return Object.entries(map ?? {}).every(([, v]) => Number.isFinite(v) && v > 0);\n}","typeGuard":"function isPositiveFinite(v) { return typeof v === 'number' && Number.isFinite(v) && v > 0; }","tryCatchPattern":"try { settings.set('providerMaxInFlightRequests', map); } catch (e) { if (String(e).startsWith('Provider request limits must be positive')) { logger.error('Fix limits map', { map }); } else throw e; }","preventionTips":["Write limits as bare positive integers in YAML (no quotes)","Remember the minimum is 1 — there is no 0 = unlimited","Validate settings files with a linter before saving"],"tags":["config","validation","settings"],"backgroundTag":"invalid-config-value","analyzedSha":"969062200754ea02cfac922e5ebb8c608c079e15","analyzedAt":"2026-08-31T10:29:35.737Z","schemaVersion":2},"datasetVersion":"2026-08-31T14:17:45.589Z"}