#!/bin/bash # Generate interface summaries for all modules in src/ # Outputs to tmp/summaries/ (per-module cache) and supports combining into one file set -e SRC_DIR="/home/agent/dev/claudes_game/src" TEMP_EXT=".summary.md" SUMMARY_DIR="tmp/" PROMPT_FILE="scripts/prompt.md" LLM_PROVIDER="llama.cpp" LLM_MODEL="Qwen3.6-35B" # Discover modules from src/ directory MODULES=() for h in src/*.h; do mod=$(basename "$h" .h) MODULES+=("$mod") done # Generate prompt for a specific module generate_prompt() { local module_name="$1" sed "s|\${module_name}|$module_name|g" "$PROMPT_FILE" \ | sed "s|\${SRC_DIR}|$SRC_DIR|g" \ | sed "s|\${SUMMARY_DIR}|$SUMMARY_DIR|g" } # Check if summary needs regeneration based on file timestamps needs_update() { local source_file="$1" local summary_file="$2" # Regenerate if summary doesn't exist [ ! -f "$summary_file" ] && return 0 # Regenerate if .h file is newer [ "$source_file" -nt "$summary_file" ] && return 0 # Regenerate if .cpp file is newer (if it exists) local cpp_file="${SRC_DIR}/$(basename "$source_file" .h).cpp" if [ -f "$cpp_file" ] && [ "$cpp_file" -nt "$summary_file" ]; then return 0 fi return 1 } # Process a single module header/cpp pair process_module() { local module_name="$1" local header_file="${SRC_DIR}/${module_name}.h" local output_file="${SUMMARY_DIR}/${module_name}${TEMP_EXT}" if [ ! -f "$header_file" ]; then echo "Warning: No header file found for ${module_name}, skipping" return fi if ! needs_update "$header_file" "$output_file"; then echo "----------" echo "Skipping ${module_name} (up to date)" return fi echo "----------" echo "Processing ${module_name}..." local CMD=() CMD+=("pi" "--print" "--no-session" "--provider" "$LLM_PROVIDER" "--model" "$LLM_MODEL") CMD+=("$(generate_prompt "$module_name")") "${CMD[@]}" echo "Generated: ${output_file}" } # Combine all per-module summaries into a single file combine_summaries() { local output_file="${SUMMARY_DIR}/all_summaries.md" echo "Combining summaries into ${output_file}..." echo "# Combined Interface Summaries" > "$output_file" echo "" >> "$output_file" echo "Generated: $(date '+%Y-%m-%d %H:%M:%S')" >> "$output_file" echo "" >> "$output_file" for module in "${MODULES[@]}"; do local summary_file="${SUMMARY_DIR}/${module}${TEMP_EXT}" if [ -f "$summary_file" ]; then echo "" >> "$output_file" echo "---" >> "$output_file" echo "" >> "$output_file" cat "$summary_file" >> "$output_file" fi done echo "Combined ${#MODULES[@]} summaries into ${output_file}" } # Main execution echo "=== Interface Summary Generator ===" echo "Processing ${#MODULES[@]} modules..." echo "" mkdir -p "$SUMMARY_DIR" for module in "${MODULES[@]}"; do process_module "$module" done echo "" echo "=== Complete ===" echo "Generated ${TEMP_EXT} files in ${SUMMARY_DIR}" echo "These files are temporary and should be added to .gitignore" combine_summaries