garrytan/gstack · error · Error

Usage: frame --name <name>

Error message

Usage: frame --name <name>

What it means

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.

Source

Thrown at browse/src/meta-commands.ts:1015

      throw new Error('Usage: state save|load <name>');
    }

    // ─── Frame ───────────────────────────────────────
    case 'frame': {
      const target = args[0];
      if (!target) throw new Error('Usage: frame <selector|@ref|--name name|--url pattern|main>');

      if (target === 'main') {
        bm.setFrame(null);
        bm.clearRefs();
        return 'Switched to main frame';
      }

      const page = bm.getPage();
      let frame: Frame | null = null;

      if (target === '--name') {
        if (!args[1]) throw new Error('Usage: frame --name <name>');
        frame = page.frame({ name: args[1] });
      } else if (target === '--url') {
        if (!args[1]) throw new Error('Usage: frame --url <pattern>');
        frame = page.frame({ url: new RegExp(escapeRegExp(args[1])) });
      } else {
        // CSS selector or @ref for the iframe element
        const resolved = await bm.resolveRef(target);
        const locator = 'locator' in resolved ? resolved.locator : page.locator(resolved.selector);
        const elementHandle = await locator.elementHandle({ timeout: 5000 });
        frame = await elementHandle?.contentFrame() ?? null;
        await elementHandle?.dispose();
      }

      if (!frame) throw new Error(`Frame not found: ${target}`);
      bm.setFrame(frame);
      bm.clearRefs();
      return `Switched to frame: ${frame.url()}`;
    }

View on GitHub (pinned to 94993f7401)

Solutions

  1. Provide the frame name: `browse frame --name <frameName>`.
  2. If you don't know the name, use `--url <pattern>` or a selector instead.

Example fix

// before
browse frame --name
// after
browse frame --name widget-frame
Defensive patterns

Strategy: validation

Validate before calling

if (args[0] === '--name' && !args[1]) {
  throw new Error('frame --name requires a frame name argument');
}

Prevention

When it happens

Trigger: `browse frame --name` with no following token.

Common situations: Truncated command, shell that consumed the next token, or copy-paste missing the value.

Related errors


AI-assisted analysis of garrytan/gstack@94993f7401 (2026-08-12). Data as JSON: /api/errors/f2548c42303cbbcc. Report an issue: GitHub.