FoundationAgents/MetaGPT · error · ValueError
dist_dir must be an absolute path.
Error message
dist_dir must be an absolute path.
What it means
Engineer2._deploy_to_public requires an absolute dist_dir (the built web project output). If a relative path is given, it attempts to fix it via editor._try_fix_path; when the fixed path still does not exist on disk, this ValueError is raised. It signals the build output directory could not be located.
Source
Thrown at metagpt/roles/di/engineer2.py:153
await reporter.async_report({"type": "code", "filename": Path(path).name, "src_path": path}, "meta")
rsp = await self.llm.aask(context, system_msgs=[WRITE_CODE_SYSTEM_PROMPT])
code = CodeParser.parse_code(text=rsp)
await awrite(path, code)
await reporter.async_report(path, "path")
# TODO: Consider adding line no to be ready for editing.
return f"The file {path} has been successfully created, with content:\n{code}"
async def _deploy_to_public(self, dist_dir):
"""fix the dist_dir path to absolute path before deploying
Args:
dist_dir (str): The dist directory of the web project after run build. This must be an absolute path.
"""
# Try to fix the path with the editor's working directory.
if not Path(dist_dir).is_absolute():
default_dir = self.editor._try_fix_path(dist_dir)
if not default_dir.exists():
raise ValueError("dist_dir must be an absolute path.")
dist_dir = default_dir
return await self.deployer.deploy_to_public(dist_dir)
async def _eval_terminal_run(self, cmd):
"""change command pull/push/commit to end."""
if any([cmd_key_word in cmd for cmd_key_word in ["pull", "push", "commit"]]):
# The Engineer2 attempts to submit the repository after fixing the bug, thereby reaching the end of the fixing process.
logger.info("Engineer2 use cmd:{cmd}\nCurrent test case is finished.")
# Set self.rc.todo to None to stop the engineer.
self._set_state(-1)
else:
command_output = await self.terminal.run_command(cmd)
return command_output
async def _end(self):
if not self.planner.plan.is_plan_finished():
self.planner.plan.finish_all_tasks()
return await super()._end()View on GitHub (pinned to 11cdf466d0)
Solutions
- Run the web build (npm run build) first and confirm the dist folder exists on disk
- Pass an absolute path to _deploy_to_public / the deploy action
- Check editor._try_fix_path's base working directory matches where the build output lives
Example fix
// before
await self._deploy_to_public("dist") # relative, may not resolve -> ValueError
// after
await self._deploy_to_public(str(project_root / "dist")) # absolute path Defensive patterns
Strategy: validation
Validate before calling
from pathlib import Path
dist = Path(dist_dir)
if not dist.is_absolute():
dist = (project_root / dist).resolve()
if not dist.exists():
raise FileNotFoundError(f"build output not found at {dist}; run the web build first") Try / catch
try:
await self._deploy_to_public(dist_dir)
except ValueError as e:
if "absolute path" in str(e):
raise RuntimeError(f"build output missing for {dist_dir}; run npm run build first") from e
raise Prevention
- Run and verify the web build step before the deploy action
- Always pass absolute paths to deploy steps
- Assert the dist directory exists in a pre-deploy check
When it happens
Trigger: The deploy action receives a relative dist_dir (e.g. "dist" or "build") from the LLM-driven workflow, and the editor's working directory does not contain that folder — either the build never ran or it output elsewhere.
Common situations: The web build step failed or was skipped so dist/ was never created; the agent passed a path relative to a different cwd; project scaffold put build output in a nested folder.
Related errors
- File {path} not found.
- File {data_path} not found.
- Detected source code "{filename}" from an unknown origin.
- {recover_path} not exists or not endswith `team`
- File {path} not found
AI-assisted analysis of FoundationAgents/MetaGPT@11cdf466d0 (2026-08-14).
Data as JSON: /api/errors/6d423c1fc6d4b007.
Report an issue: GitHub.