{"record":{"id":"556cc2e7cc55de03","repo":"jackwener/OpenCLI","slug":"no-sidebar-conversation-matched-raw-try-the","errorCode":null,"errorMessage":"No sidebar conversation matched \"${raw}\". Try the exact id from `opencli gemini history` instead.","messagePattern":"No sidebar conversation matched \"(.+?)\"\\. Try the exact id from `opencli gemini history` instead\\.","errorType":"exception","errorClass":"EmptyResultError","httpStatus":null,"severity":"error","filePath":"clis/gemini/detail.js","lineNumber":43,"sourceCode":"    }\n\n    // Unambiguously id-shaped inputs (URL, /app/<id> path, or 16-hex bare id)\n    // skip the sidebar lookup. Generic alphanumeric strings always go through\n    // title-matching first so a chat called \"Empire study\" doesn't get treated\n    // as the literal conversation id \"Empire study\".\n    const directId = extractGeminiId(raw);\n    const looksLikeId =\n        raw.startsWith('http') ||\n        raw.startsWith('/app/') ||\n        /^[a-f0-9]{16,}$/i.test(raw);\n    if (directId && looksLikeId) {\n        return `${GEMINI_APP_URL}/${directId}`;\n    }\n\n    const conversations = await getGeminiConversationList(page);\n    const match = resolveGeminiConversationForQuery(conversations, raw, 'contains');\n    if (!match || !match.Url) {\n        throw new EmptyResultError(\n            'gemini detail',\n            `No sidebar conversation matched \"${raw}\". Try the exact id from \\`opencli gemini history\\` instead.`,\n        );\n    }\n    return match.Url;\n}\n\nexport const detailCommand = cli({\n    site: 'gemini',\n    name: 'detail',\n    access: 'read',\n    description: 'Open a Gemini web conversation by id, URL, or sidebar title and read its turns',\n    domain: GEMINI_DOMAIN,\n    strategy: Strategy.COOKIE,\n    browser: true,\n    siteSession: 'persistent',\n    navigateBefore: false,\n    args: [","sourceCodeStart":25,"sourceCodeEnd":61,"githubUrl":"https://github.com/jackwener/OpenCLI/blob/49907e53dc3ade5c223ff0c4c2c2785687cec4e6/clis/gemini/detail.js#L25-L61","documentation":"After skipping direct id-shaped handling, resolveTargetUrl looks up the sidebar conversation list and matches by title (contains mode). If no matching conversation with a Url is found, it throws EmptyResultError with a message suggesting the exact id from `opencli gemini history`. The library throws this rather than navigating to a guessed URL, so a wrong title fails fast with an actionable hint.","triggerScenarios":"Calling `opencli gemini detail` with --id set to a sidebar title that does not exist (typo, deleted/renamed chat, or chat not visible in Recents); passing a non-16-hex generic string that matches no conversation; the Gemini account/sidebar has no conversation with that substring.","commonSituations":"The conversation was renamed or deleted since the title was captured; querying on a different Google account than where the chat lives; the chat is old and outside the visible Recents list; partial-title typos.","solutions":["Run `opencli gemini history` and use the exact Id or Url of the target conversation as --id","Verify the title spelling or use a shorter distinctive substring of the title","Confirm you are signed into the same Google account that owns the conversation","If the chat is old, open Gemini in the browser to confirm it still exists before retrying"],"exampleFix":"// before\nopencli gemini detail --id \"Empire studie\"\n// after\nopencli gemini history            # find exact Id/Url\nopencli gemini detail --id abc123def4567890","handlingStrategy":"fallback","validationCode":"const hist = await run(['gemini','history','--limit','200']);\nconst found = hist.find(c => c.Title.includes(titleFragment));\nif (!found) throw new Error(`No conversation matching \"${titleFragment}\" in history`);","typeGuard":"function isConversationMatch(m){ return Boolean(m && typeof m.Url === 'string' && m.Url.length > 0); }","tryCatchPattern":"try {\n  return await run(['gemini','detail','--id', title]);\n} catch (e) {\n  if (String(e.message).includes('No sidebar conversation matched')) {\n    const hist = await run(['gemini','history']);\n    const exact = hist.find(c => c.Id === title || c.Url === title);\n    if (exact) return await run(['gemini','detail','--id', exact.Url]);\n  }\n  throw e;\n}","preventionTips":["Prefer the exact Id or Url from `gemini history` over free-text titles","Watch for renamed/deleted conversations; refresh history before lookup","Confirm you are on the same Google account that owns the chat"],"tags":["empty-result","sidebar-lookup","cli","not-found"],"backgroundTag":"conversation-not-found","analyzedSha":"49907e53dc3ade5c223ff0c4c2c2785687cec4e6","analyzedAt":"2026-08-29T08:14:47.543Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}