{"record":{"id":"db8204ba9413111c","repo":"kovidgoyal/kitty","slug":"panel-args-parse-error","errorCode":null,"errorMessage":"{panel args parse error}","messagePattern":"\\{panel args parse error\\}","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"kitty/launch.py","lineNumber":464,"sourceCode":"    env: dict[str, str] = {}\n    if opts.copy_env and active_child:\n        env.update(active_child.foreground_environ)\n    if base_env is not None:\n        env.update(base_env)\n    for x in opts.env:\n        for k, v in parse_env(x, env):\n            env[k] = v\n    return env\n\n\ndef layer_shell_config_from_panel_opts(panel_opts: Iterable[str]) -> LayerShellConfig:\n    from kittens.panel.main import layer_shell_config, parse_panel_args\n\n    args = [('' if x.startswith('--') else '--') + x for x in panel_opts]\n    try:\n        opts, _ = parse_panel_args(args)\n    except SystemExit as e:\n        raise ValueError(str(e))\n    return layer_shell_config(opts)\n\n\ndef parse_os_window_position(position: str | None) -> tuple[int | None, int | None]:\n    if not position:\n        return None, None\n    x, _, y = position.lower().partition('x')\n    return int(x), int(y)\n\n\ndef tab_for_window(boss: Boss, opts: LaunchCLIOptions, target_tab: Tab | None, next_to: Window | None, add_to_session: str) -> Tab:\n\n    def create_tab(tm: TabManager | None = None) -> Tab:\n        if tm is None:\n            if opts.type == 'os-panel':\n                oswid = boss.add_os_panel(layer_shell_config_from_panel_opts(opts.os_panel), opts.os_window_class, opts.os_window_name)\n            else:\n                x, y = (None, None) if is_wayland() else parse_os_window_position(opts.os_window_position)","sourceCodeStart":446,"sourceCodeEnd":482,"githubUrl":"https://github.com/kovidgoyal/kitty/blob/6d5d0c440603ad9bdf6dcd599f73f6dde21acb44/kitty/launch.py#L446-L482","documentation":"layer_shell_config_from_panel_opts normalizes panel options (auto-prefixing '--') and runs the panel kitten's parser; its SystemExit is converted to ValueError so callers like create_tab/response_from_kitty can handle bad panel options programmatically.","triggerScenarios":"Passing panel_opts containing unknown or malformed panel-kitten flags when creating a layer-shell panel window (e.g. on Wayland panel integration).","commonSituations":"Typos in panel options; flags supported only by newer panel kittens; building opts dynamically and passing bare values without '--'.","solutions":["Run the panel kitten with --help and use exact flag names.","Let the helper auto-prefix '--' rather than mixing formats yourself.","Upgrade/downgrade to the kitty version whose panel kitten matches your flags."],"exampleFix":"# before\nlayer_shell_config_from_panel_opts(['layerr', 'top'])\n# after\nlayer_shell_config_from_panel_opts(['layer', 'top'])","handlingStrategy":"try-catch","validationCode":"# pre-validate panel opts against the panel kitten parser\nopts, _ = parse_panel_args([('--' if not a.startswith('--') else '') + a for a in panel_opts])","typeGuard":null,"tryCatchPattern":"try:\n    cfg = layer_shell_config_from_panel_opts(panel_opts)\nexcept ValueError as e:\n    logging.error('bad panel opts: %s', e); return None","preventionTips":["Source flag names from the panel kitten's --help at runtime or from constants.","Pin kitty version in deployments using panel features."],"tags":["kitty","panel","wayland","option-validation"],"backgroundTag":"cli-option-validation-failed","analyzedSha":"6d5d0c440603ad9bdf6dcd599f73f6dde21acb44","analyzedAt":"2026-08-27T14:20:20.142Z","schemaVersion":2},"datasetVersion":"2026-08-27T19:17:21.184Z"}