"""File discovery for checklist markdown files.
Discovers markdown files in the configured checklist directory.
"""
from __future__ import annotations
from typing import TYPE_CHECKING
from sso_mcp_server import get_logger
if TYPE_CHECKING:
from pathlib import Path
_logger = get_logger("file_discovery")
def discover_checklists(checklist_dir: Path) -> list[Path]:
"""Discover all markdown checklist files in a directory.
Finds all .md files in the given directory (not recursive).
Hidden files (starting with .) are ignored.
Args:
checklist_dir: Directory to search for checklist files.
Returns:
List of Path objects for discovered markdown files.
Returns empty list if directory doesn't exist or is empty.
"""
if not checklist_dir.exists():
_logger.debug("directory_not_found", path=str(checklist_dir))
return []
if not checklist_dir.is_dir():
_logger.warning("not_a_directory", path=str(checklist_dir))
return []
# Find all .md files (case-insensitive)
md_files = []
for pattern in ["*.md", "*.MD", "*.Md", "*.mD"]:
md_files.extend(checklist_dir.glob(pattern))
# Remove duplicates (in case of case-insensitive filesystems)
seen = set()
unique_files = []
for f in md_files:
if f.resolve() not in seen:
seen.add(f.resolve())
unique_files.append(f)
# Filter out hidden files
visible_files = [f for f in unique_files if not f.name.startswith(".")]
# Return absolute paths
result = [f.resolve() for f in visible_files]
_logger.debug("files_discovered", count=len(result), directory=str(checklist_dir))
return result