| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- from __future__ import annotations
- from pathlib import Path
- # Package location: supply_agent/paths.py → project root is parent of supply_agent/
- _PACKAGE_DIR = Path(__file__).resolve().parent
- _DEFAULT_PROJECT_ROOT = _PACKAGE_DIR.parent
- def find_project_root(start: Path | None = None) -> Path:
- """
- Find the project root directory.
- Walks upward looking for pyproject.toml or a skills/ directory.
- Falls back to the package's parent directory.
- """
- current = (start or Path.cwd()).resolve()
- for directory in [current, *current.parents]:
- if (directory / "pyproject.toml").exists():
- return directory
- if (directory / "skills").is_dir():
- return directory
- return _DEFAULT_PROJECT_ROOT
- def resolve_path(path: Path | str, *, project_root: Path | None = None) -> Path:
- """
- Resolve a path relative to CWD or project root.
- Priority:
- 1. Absolute paths — used as-is
- 2. Relative path exists under CWD — use CWD-relative
- 3. Otherwise — resolve against project root
- """
- resolved = Path(path)
- if resolved.is_absolute():
- return resolved
- root = project_root or find_project_root()
- cwd_candidate = (Path.cwd() / resolved).resolve()
- if cwd_candidate.exists():
- return cwd_candidate
- return (root / resolved).resolve()
|