{"record":{"id":"f2548c42303cbbcc","repo":"garrytan/gstack","slug":"usage-frame-name-name","errorCode":null,"errorMessage":"Usage: frame --name <name>","messagePattern":"Usage: frame --name <name>","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"browse/src/meta-commands.ts","lineNumber":1015,"sourceCode":"      throw new Error('Usage: state save|load <name>');\n    }\n\n    // ─── Frame ───────────────────────────────────────\n    case 'frame': {\n      const target = args[0];\n      if (!target) throw new Error('Usage: frame <selector|@ref|--name name|--url pattern|main>');\n\n      if (target === 'main') {\n        bm.setFrame(null);\n        bm.clearRefs();\n        return 'Switched to main frame';\n      }\n\n      const page = bm.getPage();\n      let frame: Frame | null = null;\n\n      if (target === '--name') {\n        if (!args[1]) throw new Error('Usage: frame --name <name>');\n        frame = page.frame({ name: args[1] });\n      } else if (target === '--url') {\n        if (!args[1]) throw new Error('Usage: frame --url <pattern>');\n        frame = page.frame({ url: new RegExp(escapeRegExp(args[1])) });\n      } else {\n        // CSS selector or @ref for the iframe element\n        const resolved = await bm.resolveRef(target);\n        const locator = 'locator' in resolved ? resolved.locator : page.locator(resolved.selector);\n        const elementHandle = await locator.elementHandle({ timeout: 5000 });\n        frame = await elementHandle?.contentFrame() ?? null;\n        await elementHandle?.dispose();\n      }\n\n      if (!frame) throw new Error(`Frame not found: ${target}`);\n      bm.setFrame(frame);\n      bm.clearRefs();\n      return `Switched to frame: ${frame.url()}`;\n    }","sourceCodeStart":997,"sourceCodeEnd":1033,"githubUrl":"https://github.com/garrytan/gstack/blob/94993f74012782fd94416dd44b8314f6363a13a4/browse/src/meta-commands.ts#L997-L1033","documentation":"When `frame` is called with `--name`, the command expects a second argument (the frame name) and looks it up via `page.frame({ name: args[1] })` (lines 1014-1015). If `--name` is the last token, `args[1]` is undefined and the lookup cannot proceed.","triggerScenarios":"`browse frame --name` with no following token.","commonSituations":"Truncated command, shell that consumed the next token, or copy-paste missing the value.","solutions":["Provide the frame name: `browse frame --name <frameName>`.","If you don't know the name, use `--url <pattern>` or a selector instead."],"exampleFix":"// before\nbrowse frame --name\n// after\nbrowse frame --name widget-frame","handlingStrategy":"validation","validationCode":"if (args[0] === '--name' && !args[1]) {\n  throw new Error('frame --name requires a frame name argument');\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Pair `--name`/`--url` with their value at the call site using a small object builder.","Avoid token-by-token arg arrays; build a structured request then flatten."],"tags":["frame","argument-parsing","usage"],"backgroundTag":null,"analyzedSha":"94993f74012782fd94416dd44b8314f6363a13a4","analyzedAt":"2026-08-12T04:06:23.140Z","schemaVersion":2},"datasetVersion":"2026-08-12T13:17:24.610Z"}