# Generate section indexes based on the format below:## # <folder Name># - [<title>](<../../../scripts/file-path>)## <folder-name>: the configured folder name or title.# <title>: the title("# <title>") of markdown.# <file-path>: the file name.## the contents are sorted based on the second line marker# <!-- generate.py marker: 20250123 -->importosimportrefromdatetimeimportdatetimeINDEX_TARGETS=[{"path":"docs/glossary","mode":"children",},{"path":"docs/engineer/ai-exploration","mode":"folder","title":"AI Exploration",},]defgenerate_readme_for_folder(folder_path,title=None):readme_path=os.path.join(folder_path,"README.md")ifos.path.exists(readme_path):returnprint(f"Creating README.md in {folder_path}")md_files=[]forfile_nameinos.listdir(folder_path):file_path=os.path.join(folder_path,file_name)iffile_name.endswith(".md")andfile_name!="README.md":marker_date=extract_marker_date(file_path)md_files.append((marker_date,file_name))# Newest first; filenames make ordering deterministic when dates match.md_files.sort(key=lambdaitem:(-item[0],item[1].casefold()))section_title=titleoros.path.basename(folder_path)content=f"# {section_title}\n\n"content+=f"<!-- generate.py marker: {datetime.now().strftime('%Y%m%d')} -->\n\n"content+="contents file is generated by generate.py script.\n\n"for_,file_nameinmd_files:file_path=os.path.join(folder_path,file_name)page_title=extract_title(file_path)content+=f"- [{page_title}](../../../scripts/{file_name})\n"withopen(readme_path,"w",encoding="utf-8")asreadme_file:readme_file.write(content)defgenerate_readme_for_folders(base_path):forfolder_nameinsorted(os.listdir(base_path)):folder_path=os.path.join(base_path,folder_name)ifos.path.isdir(folder_path):generate_readme_for_folder(folder_path)defextract_title(file_path):"""Extract the first title (# ...) from a Markdown file."""try:withopen(file_path,"r",encoding="utf-8")asfile:forlineinfile:line=line.strip()ifline.startswith("# "):# Look for the first Markdown titlereturnline[2:].strip()# Remove the '# ' and return the titleexceptExceptionase:print(f"Error reading file {file_path}: {e}")return"Untitled"# Default title if no title is founddefextract_marker_date(file_path):"""Extract the marker date from the file (e.g., <!-- generate.py marker: YYYYMMDD -->)."""try:withopen(file_path,"r",encoding="utf-8")asfile:forlineinfile:line=line.strip()# Match the marker tag using regexmatch=re.search(r"<!-- generate\.py marker: (\d{8}) -->",line)ifmatch:returnint(match.group(1))# Return the date as an integer for sortingexceptExceptionase:print(f"Error reading file {file_path}: {e}")return0# Default to 0 if no marker is foundfortargetinINDEX_TARGETS:mode=target["mode"]ifmode=="children":generate_readme_for_folders(target["path"])elifmode=="folder":generate_readme_for_folder(target["path"],title=target.get("title"))else:raiseValueError(f"Unknown index target mode: {mode}")