Generate file tree structure string for the repository
(self, repo_path: Path, max_depth: int = 5)
| 566 | return files |
| 567 | |
| 568 | def generate_file_tree(self, repo_path: Path, max_depth: int = 5) -> str: |
| 569 | """Generate file tree structure string for the repository""" |
| 570 | tree_lines = [] |
| 571 | |
| 572 | def add_to_tree(current_path: Path, prefix: str = "", depth: int = 0): |
| 573 | if depth > max_depth: |
| 574 | return |
| 575 | |
| 576 | try: |
| 577 | items = sorted( |
| 578 | current_path.iterdir(), key=lambda x: (x.is_file(), x.name.lower()) |
| 579 | ) |
| 580 | # Filter out irrelevant directories and files |
| 581 | items = [ |
| 582 | item |
| 583 | for item in items |
| 584 | if not item.name.startswith(".") |
| 585 | and item.name not in self.skip_directories |
| 586 | ] |
| 587 | |
| 588 | for i, item in enumerate(items): |
| 589 | is_last = i == len(items) - 1 |
| 590 | current_prefix = "└── " if is_last else "├── " |
| 591 | tree_lines.append(f"{prefix}{current_prefix}{item.name}") |
| 592 | |
| 593 | if item.is_dir(): |
| 594 | extension_prefix = " " if is_last else "│ " |
| 595 | add_to_tree(item, prefix + extension_prefix, depth + 1) |
| 596 | elif item.suffix.lower() in self.supported_extensions: |
| 597 | # Add file size information |
| 598 | try: |
| 599 | size = item.stat().st_size |
| 600 | if size > 1024: |
| 601 | size_str = f" ({size // 1024}KB)" |
| 602 | else: |
| 603 | size_str = f" ({size}B)" |
| 604 | tree_lines[-1] += size_str |
| 605 | except (OSError, PermissionError): |
| 606 | pass |
| 607 | |
| 608 | except PermissionError: |
| 609 | tree_lines.append(f"{prefix}├── [Permission Denied]") |
| 610 | except Exception as e: |
| 611 | tree_lines.append(f"{prefix}├── [Error: {str(e)}]") |
| 612 | |
| 613 | tree_lines.append(f"{repo_path.name}/") |
| 614 | add_to_tree(repo_path) |
| 615 | return "\n".join(tree_lines) |
| 616 | |
| 617 | async def pre_filter_files(self, repo_path: Path, file_tree: str) -> List[str]: |
| 618 | """Use LLM to pre-filter relevant files based on target structure""" |