vibe coding an orbital mechanics simulation to try out claude code
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

116 lines
3.1 KiB

#!/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