{"record":{"id":"77e5c77435bdb408","repo":"jackwener/OpenCLI","slug":"timeout-must-be-a-positive-integer-seconds-77e5c7","errorCode":null,"errorMessage":"--timeout must be a positive integer (seconds)","messagePattern":"--timeout must be a positive integer \\(seconds\\)","errorType":"validation","errorClass":"ArgumentError","httpStatus":null,"severity":"error","filePath":"clis/gemini/ask.js","lineNumber":102,"sourceCode":"    domain: GEMINI_DOMAIN,\n    strategy: Strategy.COOKIE,\n    browser: true,\n    siteSession: 'persistent',\n    navigateBefore: false,\n    defaultFormat: 'plain',\n    args: [\n        { name: 'prompt', required: true, positional: true, help: 'Prompt to send' },\n        { name: 'model', type: 'string', required: false, help: 'Gemini model to use (e.g. \"2.5-flash\"). Use \"opencli gemini models\" to list available values.' },\n        { name: 'timeout', type: 'int', required: false, help: 'Max seconds to wait (default: 60)', default: 60 },\n        { name: 'new', required: false, help: 'Start a new chat first (true/false, default: false)', default: 'false' },\n        { name: 'thinking', required: false, help: 'Thinking level: standard or extended (omitted = leave unchanged)', default: null },\n    ],\n    columns: ['response'],\n    func: async (page, kwargs) => {\n        const prompt = kwargs.prompt;\n        const timeout = kwargs.timeout;\n        if (!Number.isInteger(timeout) || timeout < 1) {\n            throw new ArgumentError('--timeout must be a positive integer (seconds)');\n        }\n\n        // ── New chat (must happen before model/thinking selection) ──────\n        const startFresh = normalizeBooleanFlag(kwargs.new);\n        if (startFresh)\n            await startNewGeminiChat(page);\n\n        // ── Early validation: model format & thinking value ────────────\n        const hasModel = kwargs.model !== undefined && kwargs.model !== null;\n        const hasThinking = kwargs.thinking != null;\n\n        let modelValue = null;\n        if (hasModel) {\n            modelValue = String(kwargs.model).trim();\n            validateAskModelValue(modelValue);\n        }\n\n        if (hasThinking) {","sourceCodeStart":84,"sourceCodeEnd":120,"githubUrl":"https://github.com/jackwener/OpenCLI/blob/49907e53dc3ade5c223ff0c4c2c2785687cec4e6/clis/gemini/ask.js#L84-L120","documentation":"The gemini ask command in clis/gemini/ask.js requires `--timeout` to be an integer number of seconds >= 1. If kwargs.timeout is not an integer (float, string, 0, negative, or missing-but-nonstandard) this ArgumentError is thrown before any browser automation starts.","triggerScenarios":"`opencli gemini ask --timeout 0`, `--timeout -5`, `--timeout 2.5`, or `--timeout \"30\"` (string rather than number, if the CLI doesn't coerce).","commonSituations":"Passing fractional seconds expecting millisecond or sub-second precision; zero meant 'no timeout'; quoting the value in a shell wrapper; unit confusion (ms vs seconds).","solutions":["Pass a whole number of seconds >= 1: `--timeout 60`","Convert milliseconds to seconds if you have an ms value (30000 -> 30)","Remove quotes from the value in shell scripts so it parses as a number","Omit --timeout entirely if the command supports a default"],"exampleFix":"// before\nopencli gemini ask --timeout 30000 ...\n// after\nopencli gemini ask --timeout 30 ...","handlingStrategy":"validation","validationCode":"const t = Number(args.timeout);\nif (!Number.isInteger(t) || t < 1) {\n  throw new Error('--timeout must be a positive integer (seconds)');\n}","typeGuard":"function isValidTimeout(v) {\n  return Number.isInteger(v) && v >= 1;\n}","tryCatchPattern":"try {\n  await geminiAsk(args);\n} catch (err) {\n  if (err.name === 'ArgumentError' && err.message.includes('--timeout')) {\n    return geminiAsk({ ...args, timeout: Math.max(1, Math.round(Number(args.timeout) / 1000) || 30) });\n  }\n  throw err;\n}","preventionTips":["Always pass whole seconds >= 1","Convert ms values to seconds before invoking","Avoid quoting numeric flags in shell wrappers","Use Math.round + >=1 clamp on any computed timeout"],"tags":["argument-validation","cli","timeout"],"backgroundTag":"invalid-argument-value","analyzedSha":"49907e53dc3ade5c223ff0c4c2c2785687cec4e6","analyzedAt":"2026-08-29T08:14:47.543Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}