{"record":{"id":"38039c064691227a","repo":"jackwener/OpenCLI","slug":"thinking-must-be-standard-or-extended-got","errorCode":null,"errorMessage":"--thinking must be 'standard' or 'extended', got '${thinkingRaw}'","messagePattern":"--thinking must be 'standard' or 'extended', got '(.+?)'","errorType":"validation","errorClass":"ArgumentError","httpStatus":null,"severity":"error","filePath":"clis/gemini/ask.js","lineNumber":124,"sourceCode":"        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) {\n            const thinkingRaw = String(kwargs.thinking ?? '').trim();\n            const thinkingValue = thinkingRaw.toLowerCase();\n            if (thinkingValue !== 'standard' && thinkingValue !== 'extended') {\n                throw new ArgumentError(\n                    `--thinking must be 'standard' or 'extended', got '${thinkingRaw}'`,\n                    'Run `opencli gemini models` to see available thinking levels.',\n                );\n            }\n        }\n\n        // ── Model and thinking discovery (shared by both model and\n        //    thinking selection) ──────────────────────────────────────\n        let discoveredModels = null;\n        if (hasModel || hasThinking) {\n            await ensureGeminiPage(page);\n\n            // Open the picker menu (click the model-picker button).\n            const pickerRaw = await page.evaluate(`\n              (() => {\n                ${pickModelPickerScript()}\n                const picker = findModelPicker();\n                if (!picker) return { ok: false, reason: 'Gemini model picker button was not found' };","sourceCodeStart":106,"sourceCodeEnd":142,"githubUrl":"https://github.com/jackwener/OpenCLI/blob/49907e53dc3ade5c223ff0c4c2c2785687cec4e6/clis/gemini/ask.js#L106-L142","documentation":"When a `--thinking` flag is present, clis/gemini/ask.js validates its value: after trimming and lowercasing it must equal `standard` or `extended`. Any other string throws this ArgumentError, with a hint to run `opencli gemini models` for available thinking levels.","triggerScenarios":"`opencli gemini ask --thinking high`, `--thinking on`, `--thinking \"Extended \"` (fails only if trim/lower somehow bypassed — it doesn't), or numeric values like `--thinking 2`.","commonSituations":"Using thinking-budget vocabularies from other Gemini SDKs (`low`/`high`, token counts); typos like `extented`; scripts passing raw user input as the thinking level.","solutions":["Use exactly `--thinking standard` or `--thinking extended` (case-insensitive)","Run `opencli gemini models` to confirm the thinking levels offered for your chosen model","Sanitize/whitelist the value in wrapper scripts before forwarding it"],"exampleFix":"// before\nopencli gemini ask --model 2.5-pro --thinking high ...\n// after\nopencli gemini ask --model 2.5-pro --thinking extended ...","handlingStrategy":"validation","validationCode":"const allowed = ['standard', 'extended'];\nif (args.thinking !== undefined && !allowed.includes(String(args.thinking).trim().toLowerCase())) {\n  throw new Error(`--thinking must be 'standard' or 'extended', got '${args.thinking}'`);\n}","typeGuard":"function isValidThinking(v) {\n  const s = String(v ?? '').trim().toLowerCase();\n  return s === 'standard' || s === 'extended';\n}","tryCatchPattern":"try {\n  await geminiAsk(args);\n} catch (err) {\n  if (err.name === 'ArgumentError' && err.message.includes(\"--thinking\")) {\n    console.error('Valid values: standard | extended (see `opencli gemini models`)');\n    process.exit(2);\n  }\n  throw err;\n}","preventionTips":["Only pass 'standard' or 'extended' — not other SDKs' low/high vocabulary","Normalize case/trim in wrapper scripts before forwarding","Check `opencli gemini models` for the levels your model supports","Whitelist-validate user-supplied thinking values before invoking"],"tags":["argument-validation","cli","gemini"],"backgroundTag":"invalid-argument-value","analyzedSha":"49907e53dc3ade5c223ff0c4c2c2785687cec4e6","analyzedAt":"2026-08-29T08:14:47.543Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}