Browse Source
- Output summaries to tmp/summaries/ instead of alongside source files - Add per-module timestamp caching (skip up-to-date modules) - Add combine_summaries() to merge all into all_summaries.md - Extract LLM provider and model to config variables - Reorganize script: config, discovery, utilities, worker, main loopmain
3 changed files with 72 additions and 28 deletions
@ -1,72 +1,116 @@ |
|||||||
#!/bin/bash |
#!/bin/bash |
||||||
# Generate interface summaries for all modules in src/ |
# Generate interface summaries for all modules in src/ |
||||||
# Creates temporary markdown files alongside source files for quick reference |
# Outputs to tmp/summaries/ (per-module cache) and supports combining into one file |
||||||
|
|
||||||
set -e |
set -e |
||||||
|
|
||||||
SRC_DIR="/home/agent/dev/claudes_game/src" |
SRC_DIR="/home/agent/dev/claudes_game/src" |
||||||
TEMP_EXT=".summary.md" |
TEMP_EXT=".summary.md" |
||||||
|
SUMMARY_DIR="tmp/summaries" |
||||||
PROMPT_FILE="scripts/prompt.md" |
PROMPT_FILE="scripts/prompt.md" |
||||||
|
LLM_PROVIDER="llama.cpp" |
||||||
|
LLM_MODEL="Qwen3.6-35B" |
||||||
|
|
||||||
# Function to generate prompt for a specific module |
# 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() { |
generate_prompt() { |
||||||
local module_name="$1" |
local module_name="$1" |
||||||
sed "s|\${module_name}|$module_name|g" "$PROMPT_FILE" | sed "s|\${SRC_DIR}|$SRC_DIR|g" |
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 |
||||||
} |
} |
||||||
|
|
||||||
# Function to process a single module |
# Process a single module header/cpp pair |
||||||
process_module() { |
process_module() { |
||||||
local module_name="$1" |
local module_name="$1" |
||||||
local header_file="${SRC_DIR}/${module_name}.h" |
local header_file="${SRC_DIR}/${module_name}.h" |
||||||
local output_file="${SRC_DIR}/${module_name}${TEMP_EXT}" |
local output_file="${SUMMARY_DIR}/${module_name}${TEMP_EXT}" |
||||||
|
|
||||||
if [ ! -f "$header_file" ]; then |
if [ ! -f "$header_file" ]; then |
||||||
echo "Warning: No header file found for ${module_name}, skipping" |
echo "Warning: No header file found for ${module_name}, skipping" |
||||||
return |
return |
||||||
fi |
fi |
||||||
|
|
||||||
|
if ! needs_update "$header_file" "$output_file"; then |
||||||
|
echo "----------" |
||||||
|
echo "Skipping ${module_name} (up to date)" |
||||||
|
return |
||||||
|
fi |
||||||
|
|
||||||
echo "----------" |
echo "----------" |
||||||
echo "Processing ${module_name}..." |
echo "Processing ${module_name}..." |
||||||
|
|
||||||
# Build command as array |
local CMD=() |
||||||
CMD=() |
CMD+=("pi" "--print" "--no-session" "--provider" "$LLM_PROVIDER" "--model" "$LLM_MODEL") |
||||||
CMD+=("pi" "--print" "--no-session" "--provider" "llama.cpp" "--model" "Qwen3.6-35B") |
|
||||||
CMD+=("$(generate_prompt "$module_name")") |
CMD+=("$(generate_prompt "$module_name")") |
||||||
|
|
||||||
#echo "CMD would execute: ${CMD[*]}" |
|
||||||
"${CMD[@]}" |
"${CMD[@]}" |
||||||
echo "Generated: ${output_file}" |
echo "Generated: ${output_file}" |
||||||
} |
} |
||||||
|
|
||||||
# List of modules to process (based on src/ directory) |
# Combine all per-module summaries into a single file |
||||||
# Modules to exclude from processing |
combine_summaries() { |
||||||
EXCLUDED=("renderer" "ui_renderer" "config_validator") |
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" |
||||||
|
|
||||||
# Filter function |
for module in "${MODULES[@]}"; do |
||||||
is_excluded() { |
local summary_file="${SUMMARY_DIR}/${module}${TEMP_EXT}" |
||||||
local mod="$1" |
if [ -f "$summary_file" ]; then |
||||||
for exc in "${EXCLUDED[@]}"; do |
echo "" >> "$output_file" |
||||||
[[ "$mod" == "$exc" ]] && return 0 |
echo "---" >> "$output_file" |
||||||
|
echo "" >> "$output_file" |
||||||
|
cat "$summary_file" >> "$output_file" |
||||||
|
fi |
||||||
done |
done |
||||||
return 1 |
|
||||||
} |
|
||||||
|
|
||||||
# Build filtered list |
echo "Combined ${#MODULES[@]} summaries into ${output_file}" |
||||||
MODULES=() |
} |
||||||
for h in src/*.h; do |
|
||||||
mod=$(basename "$h" .h) |
|
||||||
is_excluded "$mod" || MODULES+=("$mod") |
|
||||||
done |
|
||||||
|
|
||||||
|
# Main execution |
||||||
echo "=== Interface Summary Generator ===" |
echo "=== Interface Summary Generator ===" |
||||||
echo "Processing ${#MODULES[@]} modules..." |
echo "Processing ${#MODULES[@]} modules..." |
||||||
echo "" |
echo "" |
||||||
|
|
||||||
|
mkdir -p "$SUMMARY_DIR" |
||||||
|
|
||||||
for module in "${MODULES[@]}"; do |
for module in "${MODULES[@]}"; do |
||||||
process_module "$module" |
process_module "$module" |
||||||
done |
done |
||||||
|
|
||||||
echo "" |
echo "" |
||||||
echo "=== Complete ===" |
echo "=== Complete ===" |
||||||
echo "Generated ${TEMP_EXT} files alongside source files in ${SRC_DIR}" |
echo "Generated ${TEMP_EXT} files in ${SUMMARY_DIR}" |
||||||
echo "These files are temporary and should be added to .gitignore" |
echo "These files are temporary and should be added to .gitignore" |
||||||
|
|
||||||
|
combine_summaries |
||||||
|
|||||||
Loading…
Reference in new issue