Browse Source

Move summaries to tmp/summaries with cache and combine support

- 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 loop
main
cinnaboot 3 months ago
parent
commit
dec5cc4fee
  1. 2
      .gitignore
  2. 96
      scripts/generate_interface_summaries.sh
  3. 2
      scripts/prompt.md

2
.gitignore vendored

@ -6,7 +6,7 @@ orbit_test
tests/informational/test_time_step_stability tests/informational/test_time_step_stability
# LLM summaries # LLM summaries
src/*.summary.md tmp/summaries/
# Session notes and conversation logs # Session notes and conversation logs
docs/session_logs docs/session_logs

96
scripts/generate_interface_summaries.sh

@ -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

2
scripts/prompt.md

@ -35,4 +35,4 @@ static const <type> <CONSTANT_NAME> = <value>; // or inline (if needed)
Keep summaries concise but do not oversimplify complex algorithms - include enough detail Keep summaries concise but do not oversimplify complex algorithms - include enough detail
to understand the logic and approach. Focus on public interfaces, not internal implementation details. to understand the logic and approach. Focus on public interfaces, not internal implementation details.
IMPORTANT: write output to one file alongside the module location: ${SRC_DIR}/${module_name}.summary.md IMPORTANT: write output to one file: ${SUMMARY_DIR}/${module_name}.summary.md

Loading…
Cancel
Save