langchain-ai/langgraph · error · IsADirectoryError
Ui '{ui_name}' must be a file: {resolved}
Error message
Ui '{ui_name}' must be a file: {resolved} What it means
Error "Ui '{ui_name}' must be a file: {resolved}" thrown in langchain-ai/langgraph.
Source
Thrown at libs/cli/langgraph_cli/uv_lock.py:847
)
def _update_uv_lock_ui_paths(
config_path: pathlib.Path, config: Config, plan: UvLockPlan
) -> None:
ui = config.get("ui")
if not isinstance(ui, dict):
return
for ui_name, path_str in ui.items():
if not isinstance(path_str, str):
continue
resolved = (config_path.parent / path_str).resolve()
if not resolved.exists():
raise FileNotFoundError(f"Could not find ui '{ui_name}': {resolved}")
if not resolved.is_file():
raise IsADirectoryError(f"Ui '{ui_name}' must be a file: {resolved}")
container_path = _resolve_uv_lock_container_path(resolved, plan)
if container_path is None:
copied_dirs = ", ".join(
package.root.relative_to(plan.project_root).as_posix() or "."
for package in plan.install_order
)
raise click.UsageError(
f"Ui '{ui_name}' resolves to {resolved}, which is not inside the "
f"target package '{plan.target.name}' or any of its workspace "
f"dependencies. Only these directories are copied into the "
f"container: {copied_dirs}. If this file lives in another "
f"workspace package, add it as a dependency of "
f"'{plan.target.name}' with `{{ workspace = true }}` in "
"[tool.uv.sources]."
)
ui[ui_name] = container_path.as_posix()View on GitHub (pinned to 38031739e5)
When it happens
Trigger: Thrown at libs/cli/langgraph_cli/uv_lock.py:847 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of langchain-ai/langgraph@38031739e5 (2026-08-26).
Data as JSON: /api/errors/f814e3e6623d28b9.
Report an issue: GitHub.