{"record":{"id":"f814e3e6623d28b9","repo":"langchain-ai/langgraph","slug":"ui-ui-name-must-be-a-file-resolved","errorCode":null,"errorMessage":"Ui '{ui_name}' must be a file: {resolved}","messagePattern":"Ui '(.+?)' must be a file: (.+?)","errorType":"exception","errorClass":"IsADirectoryError","httpStatus":null,"severity":"error","filePath":"libs/cli/langgraph_cli/uv_lock.py","lineNumber":847,"sourceCode":"    )\n\n\ndef _update_uv_lock_ui_paths(\n    config_path: pathlib.Path, config: Config, plan: UvLockPlan\n) -> None:\n    ui = config.get(\"ui\")\n    if not isinstance(ui, dict):\n        return\n\n    for ui_name, path_str in ui.items():\n        if not isinstance(path_str, str):\n            continue\n\n        resolved = (config_path.parent / path_str).resolve()\n        if not resolved.exists():\n            raise FileNotFoundError(f\"Could not find ui '{ui_name}': {resolved}\")\n        if not resolved.is_file():\n            raise IsADirectoryError(f\"Ui '{ui_name}' must be a file: {resolved}\")\n\n        container_path = _resolve_uv_lock_container_path(resolved, plan)\n        if container_path is None:\n            copied_dirs = \", \".join(\n                package.root.relative_to(plan.project_root).as_posix() or \".\"\n                for package in plan.install_order\n            )\n            raise click.UsageError(\n                f\"Ui '{ui_name}' resolves to {resolved}, which is not inside the \"\n                f\"target package '{plan.target.name}' or any of its workspace \"\n                f\"dependencies. Only these directories are copied into the \"\n                f\"container: {copied_dirs}. If this file lives in another \"\n                f\"workspace package, add it as a dependency of \"\n                f\"'{plan.target.name}' with `{{ workspace = true }}` in \"\n                \"[tool.uv.sources].\"\n            )\n\n        ui[ui_name] = container_path.as_posix()","sourceCodeStart":829,"sourceCodeEnd":865,"githubUrl":"https://github.com/langchain-ai/langgraph/blob/38031739e551638e373fb553453256c23feeb41f/libs/cli/langgraph_cli/uv_lock.py#L829-L865","documentation":"Error \"Ui '{ui_name}' must be a file: {resolved}\" thrown in langchain-ai/langgraph.","triggerScenarios":"Thrown at libs/cli/langgraph_cli/uv_lock.py:847 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":"38031739e551638e373fb553453256c23feeb41f","analyzedAt":"2026-08-26T18:02:49.312Z","schemaVersion":2},"datasetVersion":"2026-08-26T21:11:00.512Z"}