Spaces:
Sleeping
Sleeping
feat: implement core system status, configuration management, and workspace-to-brain attachment functionality
37b748e | """Cross-platform path resolution for Brain - Local First.""" | |
| from pathlib import Path | |
| # ββ Constants ββββββββββββββββββββββββββββββββββββββββββββββ | |
| BRAINS_DIR_NAME = ".brains" | |
| WORKSPACE_DIR_NAME = ".brain" | |
| CONFIG_FILE_NAME = "config" # Inside .brain/ | |
| # ββ Resolvers ββββββββββββββββββββββββββββββββββββββββββββββ | |
| def get_project_root() -> Path: | |
| """Find the project root by looking for .brain/ or .ever-brain marker.""" | |
| curr = Path.cwd().resolve() | |
| home = Path.home().resolve() | |
| for parent in [curr] + list(curr.parents): | |
| # Stop at filesystem root | |
| if parent.parent == parent: | |
| break | |
| # 1. Check for designated workspace folder (.brain/) | |
| if (parent / WORKSPACE_DIR_NAME).exists() and (parent / WORKSPACE_DIR_NAME).is_dir(): | |
| return parent | |
| # 2. Check for global marker file (.ever-brain) | |
| if (parent / ".ever-brain").exists() and (parent / ".ever-brain").is_file(): | |
| return parent | |
| # 3. Stop at Git boundary (don't search outside the repo) | |
| if (parent / ".git").exists(): | |
| return parent | |
| # 4. Stop at User Home | |
| if parent == home: | |
| break | |
| return curr | |
| def get_global_brains_dir() -> Path: | |
| """Return ~/.ever-brain/brains/. Creates if missing.""" | |
| p = Path.home() / ".ever-brain" / "brains" | |
| p.mkdir(parents=True, exist_ok=True) | |
| return p | |
| def get_brains_dir() -> Path: | |
| """Return ./.brains/ if it exists, otherwise ~/.ever-brain/brains/.""" | |
| # Check if a project-specific .brains folder exists in the hierarchy | |
| curr = Path.cwd() | |
| for parent in [curr] + list(curr.parents): | |
| local_brains = parent / BRAINS_DIR_NAME | |
| if local_brains.exists() and local_brains.is_dir(): | |
| return local_brains | |
| # Fallback to global | |
| return get_global_brains_dir() | |
| def get_brain_path(name: str) -> Path: | |
| """Return ./.brains/<name>/.""" | |
| return get_brains_dir() / name | |
| def get_workspace_dir(cwd: Path | None = None) -> Path: | |
| """Return <root>/.brain/ or a global path if in global mode.""" | |
| root = get_project_root() | |
| # Check if this is a global project | |
| marker = root / ".ever-brain" | |
| if marker.exists() and marker.is_file(): | |
| # It's a global project. Store metadata in ~/.ever-brain/workspaces/ | |
| # Use root name as a safe identifier | |
| p = Path.home() / ".ever-brain" / "workspaces" / root.name | |
| p.mkdir(parents=True, exist_ok=True) | |
| return p | |
| p = root / WORKSPACE_DIR_NAME | |
| p.mkdir(parents=True, exist_ok=True) | |
| return p | |
| def get_global_projects_dir() -> Path: | |
| """Return ~/.ever-brain/projects/. Creates if missing.""" | |
| p = Path.home() / ".ever-brain" / "projects" | |
| p.mkdir(parents=True, exist_ok=True) | |
| return p | |
| def get_personas_dir() -> Path: | |
| """Return ~/.ever-brain/personas/. Creates if missing.""" | |
| p = Path.home() / ".ever-brain" / "personas" | |
| p.mkdir(parents=True, exist_ok=True) | |
| return p | |
| def get_persona_path(name: str) -> Path: | |
| """Return ~/.ever-brain/personas/<name>.md.""" | |
| if not name.endswith(".md"): | |
| name += ".md" | |
| return get_personas_dir() / name | |
| def get_config_path() -> Path: | |
| """Return <root>/.brain/config.""" | |
| return get_workspace_dir() / CONFIG_FILE_NAME | |