Files
hakorune/tools/codex-tmux-driver/manage-ai-sessions.sh

153 lines
4.5 KiB
Bash
Raw Normal View History

#!/bin/bash
# 複数AI セッション管理スクリプト
# デフォルト設定
CLAUDE_BIN=${CLAUDE_BIN:-"/home/tomoaki/.volta/bin/codex"}
CODEX_BIN=${REAL_CODEX_BIN:-"/path/to/real/codex"}
HOOK_PORT=${HOOK_SERVER_PORT:-8770}
# カラー設定
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color
function show_usage() {
echo "🤖 AI セッション管理ツール"
echo ""
echo "使い方: $0 <command> [options]"
echo ""
echo "コマンド:"
echo " start-all - Claude1, Claude2, Codexを全て起動"
echo " start-claude - Claude Code 2つを起動"
echo " start-codex - 本物のCodexを起動"
echo " status - 全セッション状態を表示"
echo " send <session> <message> - 特定セッションにメッセージ送信"
echo " broadcast <message> - 全セッションにメッセージ送信"
echo " kill-all - 全セッション終了"
echo " attach <session> - セッションに接続"
echo ""
echo "セッション名:"
echo " claude1-8770 - Claude Code インスタンス1"
echo " claude2-8770 - Claude Code インスタンス2"
echo " codex-8770 - 本物のCodex"
}
function start_claude_sessions() {
echo -e "${BLUE}🚀 Claude Code セッションを起動中...${NC}"
./start-ai-tmux.sh claude1-8770 "$CLAUDE_BIN"
sleep 1
./start-ai-tmux.sh claude2-8770 "$CLAUDE_BIN"
echo -e "${GREEN}✅ Claude Code 2つ起動完了${NC}"
}
function start_codex_session() {
echo -e "${BLUE}🚀 本物のCodexを起動中...${NC}"
# Codexには制限解除のための引数が必要
./start-ai-tmux.sh codex-8770 "$CODEX_BIN" --ask-for-approval never --sandbox danger-full-access
echo -e "${GREEN}✅ Codex起動完了${NC}"
}
function show_status() {
echo -e "${BLUE}📊 AIセッション状態:${NC}"
echo ""
for session in claude1-8770 claude2-8770 codex-8770; do
if tmux has-session -t "$session" 2>/dev/null; then
echo -e " ${GREEN}${NC} $session - 稼働中"
else
echo -e " ${RED}${NC} $session - 停止"
fi
done
echo ""
echo -e "${YELLOW}Hook Server状態:${NC}"
if lsof -i:$HOOK_PORT >/dev/null 2>&1; then
echo -e " ${GREEN}${NC} Hook server (port $HOOK_PORT) - 稼働中"
else
echo -e " ${RED}${NC} Hook server (port $HOOK_PORT) - 停止"
echo -e " ${YELLOW}💡${NC} 起動するには: HOOK_SERVER_PORT=$HOOK_PORT node hook-server.js"
fi
}
function send_to_session() {
local session="$1"
local message="$2"
if tmux has-session -t "$session" 2>/dev/null; then
tmux send-keys -t "$session" "$message" Enter
echo -e "${GREEN}${NC} メッセージを $session に送信しました"
else
echo -e "${RED}${NC} セッション $session は存在しません"
fi
}
function broadcast_message() {
local message="$1"
echo -e "${BLUE}📢 全セッションにブロードキャスト中...${NC}"
for session in claude1-8770 claude2-8770 codex-8770; do
send_to_session "$session" "$message"
done
}
function kill_all_sessions() {
echo -e "${RED}🛑 全セッションを終了中...${NC}"
for session in claude1-8770 claude2-8770 codex-8770; do
if tmux has-session -t "$session" 2>/dev/null; then
tmux kill-session -t "$session"
echo -e " ${YELLOW}⚠️${NC} $session を終了しました"
fi
done
echo -e "${GREEN}✅ 完了${NC}"
}
# メインコマンド処理
case "$1" in
start-all)
start_claude_sessions
start_codex_session
show_status
;;
start-claude)
start_claude_sessions
show_status
;;
start-codex)
start_codex_session
show_status
;;
status)
show_status
;;
send)
if [ $# -lt 3 ]; then
echo -e "${RED}❌ 使い方: $0 send <session> <message>${NC}"
exit 1
fi
send_to_session "$2" "$3"
;;
broadcast)
if [ $# -lt 2 ]; then
echo -e "${RED}❌ 使い方: $0 broadcast <message>${NC}"
exit 1
fi
broadcast_message "$2"
;;
kill-all)
kill_all_sessions
;;
attach)
if [ $# -lt 2 ]; then
echo -e "${RED}❌ 使い方: $0 attach <session>${NC}"
exit 1
fi
tmux attach -t "$2"
;;
*)
show_usage
;;
esac