{"record":{"id":"8aaa2d1e6f5d7850","repo":"garrytan/gstack","slug":"no-active-page-use-browse-goto-url-first","errorCode":null,"errorMessage":"No active page. Use \"browse goto <url>\" first.","messagePattern":"No active page\\. Use \"browse goto <url>\" first\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"browse/src/browser-manager.ts","lineNumber":944,"sourceCode":"\n  async getTabListWithTitles(): Promise<Array<{ id: number; url: string; title: string; active: boolean }>> {\n    const tabs: Array<{ id: number; url: string; title: string; active: boolean }> = [];\n    for (const [id, page] of this.pages) {\n      tabs.push({\n        id,\n        url: page.url(),\n        title: await page.title().catch(() => ''),\n        active: id === this.activeTabId,\n      });\n    }\n    return tabs;\n  }\n\n  // ─── Session Access ────────────────────────────────────────\n  /** Get the TabSession for the active tab. */\n  getActiveSession(): TabSession {\n    const session = this.tabSessions.get(this.activeTabId);\n    if (!session) throw new Error('No active page. Use \"browse goto <url>\" first.');\n    return session;\n  }\n\n  /** Get a TabSession by tab ID. Used by /batch for parallel tab execution. */\n  getSession(tabId: number): TabSession {\n    const session = this.tabSessions.get(tabId);\n    if (!session) throw new Error(`Tab ${tabId} not found`);\n    return session;\n  }\n\n  /** Get the underlying Page for a tab id. Returns null if the tab doesn't exist.\n   *  Used by the CDP bridge (cdp-bridge.ts) to mint per-tab CDPSessions. */\n  getPageForTab(tabId: number): Page | null {\n    return this.pages.get(tabId) ?? null;\n  }\n\n  // ─── Two-tier mutex (Codex T7) ─────────────────────────────\n  // Per-tab and global locks for the CDP bridge. tab-scoped methods take the","sourceCodeStart":926,"sourceCodeEnd":962,"githubUrl":"https://github.com/garrytan/gstack/blob/94993f74012782fd94416dd44b8314f6363a13a4/browse/src/browser-manager.ts#L926-L962","documentation":"Error \"No active page. Use \"browse goto <url>\" first.\" thrown in garrytan/gstack.","triggerScenarios":"Thrown at browse/src/browser-manager.ts:944 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"94993f74012782fd94416dd44b8314f6363a13a4","analyzedAt":"2026-08-12T04:06:23.140Z","schemaVersion":2},"datasetVersion":"2026-08-12T13:17:24.610Z"}