【AI協調開発研究】 - AI二重化モデルの学術論文draft完成(workshop_paper_draft.md) - 「隠れた危機」分析とbirthの原則哲学化 - TyEnv「唯一の真実」協調会話を保存・研究資料に統合 - papers管理構造の整備(wip/under-review/published分離) 【Phase 10.9-β HostCall進捗】 - JitConfigBox: relax_numeric フラグ追加(i64→f64コアーション制御) - HostcallRegistryBox: 署名検証・白黒リスト・コアーション対応 - JitHostcallRegistryBox: Nyash側レジストリ操作API - Lower統合: env直読 → jit::config::current() 参照に統一 - 数値緩和設定: NYASH_JIT_HOSTCALL_RELAX_NUMERIC/Config.set_flag 【検証サンプル拡充】 - math.sin/cos/abs/min/max 関数スタイル(examples/jit_math_function_style_*.nyash) - 境界ケース: 署名不一致・コアーション許可・mutating拒否サンプル - E2E実証: String.length→allow, Array.push→fallback, math関数の署名一致観測 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
129 lines
3.2 KiB
Bash
129 lines
3.2 KiB
Bash
#!/bin/bash
|
|
# 複数Codexインスタンスの一括管理
|
|
# 使い方: ./manage-instances.sh start
|
|
# ./manage-instances.sh status
|
|
# ./manage-instances.sh stop
|
|
|
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
PIDFILE="/tmp/codex-instances.pid"
|
|
|
|
# インスタンス定義
|
|
declare -A INSTANCES=(
|
|
["A"]="8769"
|
|
["B"]="8770"
|
|
["C"]="8771"
|
|
)
|
|
|
|
function start_instances() {
|
|
echo "🚀 Starting all Codex instances..."
|
|
|
|
for name in "${!INSTANCES[@]}"; do
|
|
port="${INSTANCES[$name]}"
|
|
echo ""
|
|
echo "Starting instance $name on port $port..."
|
|
|
|
# hook-server起動
|
|
HOOK_SERVER_PORT=$port HOOK_SERVER_AUTO_EXIT=true \
|
|
nohup node "$SCRIPT_DIR/hook-server.js" \
|
|
> "/tmp/hook-$name.log" 2>&1 &
|
|
|
|
pid=$!
|
|
echo "$name:$port:$pid" >> "$PIDFILE"
|
|
echo " Hook server PID: $pid"
|
|
|
|
# 環境変数の出力
|
|
echo " For instance $name, use:"
|
|
echo " export CODEX_HOOK_SERVER=ws://localhost:$port"
|
|
echo " export CODEX_LOG_FILE=/tmp/codex-$name.log"
|
|
echo " codex exec"
|
|
done
|
|
|
|
echo ""
|
|
echo "✅ All instances started!"
|
|
}
|
|
|
|
function status_instances() {
|
|
echo "📊 Codex instances status:"
|
|
echo ""
|
|
|
|
if [ ! -f "$PIDFILE" ]; then
|
|
echo "No instances found."
|
|
return
|
|
fi
|
|
|
|
while IFS=: read -r name port pid; do
|
|
if kill -0 "$pid" 2>/dev/null; then
|
|
echo "✅ Instance $name (port $port): Running [PID: $pid]"
|
|
|
|
# 接続数の確認
|
|
connections=$(lsof -i :$port 2>/dev/null | grep ESTABLISHED | wc -l)
|
|
echo " Connections: $connections"
|
|
else
|
|
echo "❌ Instance $name (port $port): Stopped"
|
|
fi
|
|
done < "$PIDFILE"
|
|
}
|
|
|
|
function stop_instances() {
|
|
echo "🛑 Stopping all Codex instances..."
|
|
|
|
if [ ! -f "$PIDFILE" ]; then
|
|
echo "No instances to stop."
|
|
return
|
|
fi
|
|
|
|
while IFS=: read -r name port pid; do
|
|
if kill -0 "$pid" 2>/dev/null; then
|
|
echo "Stopping instance $name [PID: $pid]..."
|
|
kill "$pid"
|
|
fi
|
|
done < "$PIDFILE"
|
|
|
|
rm -f "$PIDFILE"
|
|
echo "✅ All instances stopped!"
|
|
}
|
|
|
|
function logs_instances() {
|
|
echo "📜 Showing recent logs..."
|
|
echo ""
|
|
|
|
for name in "${!INSTANCES[@]}"; do
|
|
echo "=== Instance $name ==="
|
|
echo "Hook log (/tmp/hook-$name.log):"
|
|
tail -5 "/tmp/hook-$name.log" 2>/dev/null || echo " (no log)"
|
|
echo ""
|
|
echo "Codex log (/tmp/codex-$name.log):"
|
|
tail -5 "/tmp/codex-$name.log" 2>/dev/null || echo " (no log)"
|
|
echo ""
|
|
done
|
|
}
|
|
|
|
# コマンド処理
|
|
case "$1" in
|
|
start)
|
|
start_instances
|
|
;;
|
|
stop)
|
|
stop_instances
|
|
;;
|
|
status)
|
|
status_instances
|
|
;;
|
|
logs)
|
|
logs_instances
|
|
;;
|
|
restart)
|
|
stop_instances
|
|
sleep 2
|
|
start_instances
|
|
;;
|
|
*)
|
|
echo "Usage: $0 {start|stop|status|logs|restart}"
|
|
echo ""
|
|
echo "Configured instances:"
|
|
for name in "${!INSTANCES[@]}"; do
|
|
echo " $name: port ${INSTANCES[$name]}"
|
|
done
|
|
exit 1
|
|
;;
|
|
esac |