Initial commit
This commit is contained in:
90
hooks/notify.sh
Executable file
90
hooks/notify.sh
Executable file
@@ -0,0 +1,90 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 音声通知スクリプト
|
||||
# 最後のメッセージを取得し、要約してメッセージを読み上げ
|
||||
|
||||
# 標準入力からJSONを読み取る
|
||||
INPUT=$(cat)
|
||||
|
||||
# プラグインのディレクトリを取得
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PLUGIN_DIR="$(dirname "$SCRIPT_DIR")"
|
||||
HOOKS_DIR="$SCRIPT_DIR"
|
||||
NOTIFY_LOG_PATH="$HOOKS_DIR/notify.log"
|
||||
|
||||
# ログディレクトリの作成
|
||||
mkdir -p "$HOOKS_DIR"
|
||||
|
||||
# トランスクリプトを処理(.jsonl形式に対応)
|
||||
TRANSCRIPT_PATH=$(echo "$INPUT" | jq -r '.transcript_path')
|
||||
if [ -f "$TRANSCRIPT_PATH" ]; then
|
||||
# 最後のアシスタントメッセージのみを取得(全文)
|
||||
TEMP_FILE=$(mktemp)
|
||||
|
||||
if command -v tail >/dev/null 2>&1; then
|
||||
tail -r "$TRANSCRIPT_PATH" > "$TEMP_FILE"
|
||||
|
||||
LAST_MESSAGE=""
|
||||
while IFS= read -r line; do
|
||||
# JSON形式の妥当性をチェック
|
||||
if echo "$line" | jq -e . >/dev/null 2>&1; then
|
||||
if echo "$line" | jq -e '.type == "assistant"' >/dev/null 2>&1; then
|
||||
LAST_MESSAGE=$(echo "$line" | jq -r '.message.content[]? | select(.type == "text") | .text' 2>/dev/null)
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done < "$TEMP_FILE"
|
||||
|
||||
rm -f "$TEMP_FILE"
|
||||
fi
|
||||
|
||||
# メッセージが取得できた場合の処理
|
||||
if [ -n "$LAST_MESSAGE" ]; then
|
||||
# 最後のメッセージの1行目を取得(最大100文字)
|
||||
MESSAGE=$(echo "$LAST_MESSAGE" | head -n 1 | head -c 100 | sed 's/[[:space:]]*$//')
|
||||
|
||||
# メッセージが空の場合はデフォルト文例
|
||||
if [ -z "$MESSAGE" ]; then
|
||||
MESSAGE="処理が完了しました。"
|
||||
fi
|
||||
|
||||
# プロジェクト名を取得して追加
|
||||
PROJECT_PATH=$(echo "$INPUT" | jq -r '.cwd // empty')
|
||||
if [ -n "$PROJECT_PATH" ]; then
|
||||
PROJECT_MANAGER="$HOOKS_DIR/project_manager.sh"
|
||||
if [ -f "$PROJECT_MANAGER" ]; then
|
||||
PROJECT_NAME=$(bash "$PROJECT_MANAGER" get "$PROJECT_PATH" 2>/dev/null || echo "")
|
||||
if [ -n "$PROJECT_NAME" ]; then
|
||||
MESSAGE="${PROJECT_NAME}のたくしです。${MESSAGE}"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# 通知実行
|
||||
# terminal-notifier使用(Macネイティブ通知)
|
||||
if command -v terminal-notifier >/dev/null 2>&1; then
|
||||
terminal-notifier -message "$MESSAGE" -title "Assistant" >/dev/null 2>&1 &
|
||||
fi
|
||||
|
||||
# 音声出力(Style-Bert-VITS2)
|
||||
TTS_SCRIPT="$HOOKS_DIR/tts_bert_vits.sh"
|
||||
if [ -f "$TTS_SCRIPT" ]; then
|
||||
nohup bash "$TTS_SCRIPT" "$MESSAGE" >/dev/null 2>&1 &
|
||||
fi
|
||||
|
||||
# ログ保存(タイムスタンプ|発言のみ、改行除去)
|
||||
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
|
||||
CLEAN_MESSAGE=$(echo "$MESSAGE" | tr -d '\n\r' | sed 's/[[:space:]]\+/ /g' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
||||
echo "$TIMESTAMP|$CLEAN_MESSAGE" >> "$NOTIFY_LOG_PATH"
|
||||
|
||||
# ログを10件までに制限
|
||||
if [ -f "$NOTIFY_LOG_PATH" ]; then
|
||||
TEMP_LOG=$(mktemp)
|
||||
tail -n 10 "$NOTIFY_LOG_PATH" > "$TEMP_LOG"
|
||||
mv "$TEMP_LOG" "$NOTIFY_LOG_PATH"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
echo '{"decision": "approve"}'
|
||||
exit 0
|
||||
Reference in New Issue
Block a user