diff --git a/aggregate.py b/aggregate.py index 7351d1c..5cf6879 100644 --- a/aggregate.py +++ b/aggregate.py @@ -128,8 +128,7 @@ def build_summary_section(base_dir: Path, files: list[str]) -> str: def build_markdown(base_dir: Path, files: list[str], screenshot_base_dir: Path, screenshots: list[str], history: list[str], summary_only: bool = False) -> str: parts = [] - if history: - parts.append("## Discussion History\n\n" + build_discussion_section(history)) + # STATIC PREFIX: Files and Screenshots must go first to maximize Cache Hits if files: if summary_only: parts.append("## Files (Summary)\n\n" + build_summary_section(base_dir, files)) @@ -137,6 +136,9 @@ def build_markdown(base_dir: Path, files: list[str], screenshot_base_dir: Path, parts.append("## Files\n\n" + build_files_section(base_dir, files)) if screenshots: parts.append("## Screenshots\n\n" + build_screenshots_section(screenshot_base_dir, screenshots)) + # DYNAMIC SUFFIX: History changes every turn, must go last + if history: + parts.append("## Discussion History\n\n" + build_discussion_section(history)) return "\n\n---\n\n".join(parts) def run(config: dict) -> tuple[str, Path]: @@ -153,8 +155,9 @@ def run(config: dict) -> tuple[str, Path]: output_dir.mkdir(parents=True, exist_ok=True) increment = find_next_increment(output_dir, namespace) output_file = output_dir / f"{namespace}_{increment:03d}.md" + # Provide full files to trigger Gemini's 32k cache threshold and give the AI immediate context markdown = build_markdown(base_dir, files, screenshot_base_dir, screenshots, history, - summary_only=True) + summary_only=False) output_file.write_text(markdown, encoding="utf-8") file_items = build_file_items(base_dir, files) return markdown, output_file, file_items