#!/bin/bash # パイプの途中でエラーが発生した場合も終了ステータスに反映させる set -o pipefail # スクリプトの場所 (scripts/) からプロジェクトルート (notebook/) を動的に取得 BASE_DIR=$(cd "$(dirname "$0")/.." && pwd) REFACTOR_DIR="$BASE_DIR/refactoring" SKILL_FILE="$BASE_DIR/.gemini/skills/strudel_refactor.md" GEMINI_REF="$BASE_DIR/gemini.md" STRUDEL_REF="$BASE_DIR/.gemini/reference.md" # 出力先フォルダの作成 if [ ! -f "$SKILL_FILE" ]; then echo "Error: Skill file not found at $SKILL_FILE" exit 1 fi mkdir -p "$REFACTOR_DIR" # ファイルが見つからない場合にワイルドカードをそのまま展開しない設定 shopt -s nullglob # 引数がある場合はそれを使用し、ない場合は strudel/ フォルダの全mdファイルを対象にする if [ $# -gt 0 ]; then files=("$@") else files=("$BASE_DIR/strudel"/*.md) fi echo "Strudel Code Analysis & Refactoring Skill started..." for file in "${files[@]}"; do # 除外設定 [ -f "$file" ] || continue filename=$(basename "$file") # 特定のファイルやディレクトリを除外 [[ "$filename" =~ ^(Strudel Making Sound|Strudel Study)\.md$ ]] && continue [[ "$file" =~ /($REFACTOR_DIR|explained|script)/ ]] && continue echo "Processing $filename..." # 知識ベースとスキルファイルを組み合わせて実行 tmp_file="$REFACTOR_DIR/tmp_$filename" ( [ -f "$GEMINI_REF" ] && cat "$GEMINI_REF"; \ [ -f "$STRUDEL_REF" ] && cat "$STRUDEL_REF"; \ echo ""; cat "$SKILL_FILE"; \ echo ""; cat "$file" ) | gemini > "$tmp_file" if [ $? -eq 0 ]; then # 最初の数行から FILENAME: タグを検索(より柔軟な抽出) suggested_name=$(grep -m 1 "^FILENAME:" "$tmp_file" | sed 's/^FILENAME: *//g' | tr -d '\r') if [ -n "$suggested_name" ]; then # FILENAME行を除去して保存 (最初の1行目にあると仮定しつつ、sedで安全に削除) sed '/^FILENAME:/d' "$tmp_file" > "$REFACTOR_DIR/$suggested_name" rm "$tmp_file" echo "Successfully refactored and renamed to: $suggested_name" else mv "$tmp_file" "$REFACTOR_DIR/$filename" echo "Successfully refactored: $filename (Rename tag not found)" fi else rm -f "$tmp_file" echo "Error processing $filename" fi done