-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsetup.sh
More file actions
executable file
·199 lines (177 loc) · 7.3 KB
/
Copy pathsetup.sh
File metadata and controls
executable file
·199 lines (177 loc) · 7.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
#!/bin/bash
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/lib/common.sh"
set -e
if [[ -d "/workspace/.devcontainer" ]]; then
WORKSPACE_ROOT="/workspace"
else
WORKSPACE_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
fi
echo "🚀 OpenCode ECC DevContainer 基盤セットアップ開始..."
# 1. 環境変数検証(セキュリティチェック)
echo "🔐 環境変数セキュリティチェック実行中..."
"$SCRIPT_DIR/env-validator.sh"
# 2. 基盤セットアップチェック
SETUP_COMPLETE_FILE="$WORKSPACE_ROOT/.devcontainer/.setup-complete"
if [[ ! -f "$SETUP_COMPLETE_FILE" ]]; then
if is_ci_mode; then
echo "ℹ️ CIモードのため対話セットアップをスキップします"
touch "$SETUP_COMPLETE_FILE"
else
echo ""
echo "🎯 初回セットアップが未完了です"
echo "💡 Tailscale中心の基盤セットアップを実行することを推奨します"
echo ""
echo -e "\033[0;36m基盤セットアップを実行しますか? (Y/n): \033[0m"
read -r RUN_INTERACTIVE
if [[ ! "$RUN_INTERACTIVE" =~ ^[Nn]$ ]]; then
echo "🚀 基盤セットアップを開始します..."
SKIP_EXISTING_KEY_UPDATE_PROMPT=1 "$SCRIPT_DIR/interactive-setup.sh"
else
echo "⚠️ 基盤セットアップをスキップしました"
echo " 後で手動実行する場合: .devcontainer/interactive-setup.sh"
fi
fi
else
echo "✅ 基盤セットアップは既に完了済みです"
fi
# 環境変数の読み込み
if [ -f "$WORKSPACE_ROOT/.env" ]; then
echo "📂 .env ファイルを読み込み中..."
load_env_file "$WORKSPACE_ROOT/.env"
fi
# OpenCode/OpenChamber/ECC の確認・インストール
echo "🛠️ OpenCode CLI セットアップ..."
declare -a INSTALL_PIDS=()
declare -a INSTALL_NAMES=()
if ! command -v opencode &> /dev/null; then
echo " OpenCode CLI をインストール中..."
npm install -g opencode-ai &
INSTALL_PIDS+=("$!")
INSTALL_NAMES+=("OpenCode CLI")
else
echo " ✅ OpenCode CLI 既にインストール済み: $(opencode --version)"
fi
echo "🌐 OpenChamber セットアップ..."
if ! command -v openchamber &> /dev/null; then
echo " OpenChamber をインストール中..."
npm install -g @openchamber/web &
INSTALL_PIDS+=("$!")
INSTALL_NAMES+=("OpenChamber")
else
echo " ✅ OpenChamber 既にインストール済み"
fi
echo "🎯 ECC (Everything Claude Code) セットアップ..."
if ! command -v ecc &> /dev/null; then
echo " ECC をインストール中..."
npm install -g ecc-universal &
INSTALL_PIDS+=("$!")
INSTALL_NAMES+=("ECC")
fi
if [ ${#INSTALL_PIDS[@]} -gt 0 ]; then
echo " ⏳ 依存ツールのインストール完了待機中..."
for i in "${!INSTALL_PIDS[@]}"; do
if ! wait "${INSTALL_PIDS[$i]}"; then
echo " ❌ ${INSTALL_NAMES[$i]} のインストールに失敗しました"
exit 1
fi
done
fi
# bind mount 環境では /home/vscode/.local や ~/.opencode が root 所有になるため先に補正
echo "🔒 ホーム配下ディレクトリ権限を初期化中..."
sudo mkdir -p /home/vscode/.local /home/vscode/.local/bin /home/vscode/.opencode 2>/dev/null || true
sudo chown -R vscode:vscode /home/vscode/.local /home/vscode/.opencode 2>/dev/null || \
chown -R vscode:vscode /home/vscode/.local /home/vscode/.opencode 2>/dev/null || true
# Pythonツール管理用 uv の準備
if ! command -v uv &> /dev/null; then
echo "🐍 uv をインストール中..."
if curl -LsSf https://astral.sh/uv/install.sh | sh; then
export PATH="/home/vscode/.local/bin:$PATH"
echo " ✅ uv インストール完了"
else
echo " ⚠️ uv インストールに失敗しました(後で手動インストールしてください)"
fi
else
echo " ✅ uv 既にインストール済み: $(uv --version 2>/dev/null || echo 'version unknown')"
fi
MARKITDOWN_EXTRAS_MARKER="/home/vscode/.local/share/uv/tools/markitdown/.ecc-all-extras"
if command -v uv &> /dev/null; then
if ! command -v markitdown &> /dev/null || [[ ! -f "$MARKITDOWN_EXTRAS_MARKER" ]]; then
echo "📄 markitdown[all] をインストール中..."
if uv tool install --upgrade "markitdown[all]"; then
mkdir -p "$(dirname "$MARKITDOWN_EXTRAS_MARKER")"
touch "$MARKITDOWN_EXTRAS_MARKER"
echo " ✅ markitdown[all] インストール完了"
else
echo " ⚠️ markitdown[all] インストールに失敗しました"
fi
fi
fi
MARKITDOWN_MCP_MARKER="/home/vscode/.local/share/uv/tools/markitdown-mcp/.ecc-installed"
if command -v uv &> /dev/null; then
if ! command -v markitdown-mcp &> /dev/null || [[ ! -f "$MARKITDOWN_MCP_MARKER" ]]; then
echo "🧩 markitdown-mcp をインストール中..."
if uv tool install --upgrade markitdown-mcp; then
mkdir -p "$(dirname "$MARKITDOWN_MCP_MARKER")"
touch "$MARKITDOWN_MCP_MARKER"
echo " ✅ markitdown-mcp インストール完了"
else
echo " ⚠️ markitdown-mcp インストールに失敗しました"
fi
fi
fi
# ECC の設定適用
echo " ECC設定を適用中..."
# .opencode ディレクトリ権限修正(EACCES エラー対策)
echo " 🔒 .opencode ディレクトリ権限設定中..."
sudo mkdir -p ~/.opencode ~/.opencode/.agents ~/.opencode/.agents/skills 2>/dev/null || \
mkdir -p ~/.opencode ~/.opencode/.agents ~/.opencode/.agents/skills
sudo chown -R vscode:vscode ~/.opencode 2>/dev/null || chown -R vscode:vscode ~/.opencode 2>/dev/null || true
chmod -R 755 ~/.opencode 2>/dev/null || true
# ajv 依存関係エラー修正(既知の問題)
echo " 🔧 ajv 依存関係修正中..."
ECC_DIR="$(npm root -g 2>/dev/null)/ecc-universal"
if [[ -d "$ECC_DIR" ]]; then
cd "$ECC_DIR"
echo " ECCディレクトリ: $(pwd)"
npm install ajv 2>/dev/null || echo " ajv インストール試行"
cd - > /dev/null
fi
# ECC設定適用(ajv修正後)
ecc install --target opencode --profile ${ECC_PROFILE:-developer} || {
echo " ⚠️ ECC初回インストール失敗 - 依存関係修正後再試行"
# グローバル ajv インストール(フォールバック)
npm install -g ajv 2>/dev/null || true
# 再試行
ecc install --target opencode --profile ${ECC_PROFILE:-developer} || echo " ℹ️ ECCは後で手動設定できます"
}
# OpenCode設定ファイルの作成
echo "📝 OpenCode設定ファイル作成..."
cat > ~/.opencode/opencode.json << 'EOF'
{
"$schema": "https://opencode.ai/config.json",
"model": "anthropic/claude-sonnet-4-5",
"small_model": "anthropic/claude-haiku-4-5",
"default_agent": "build",
"mcp": {
"markitdown": {
"type": "local",
"command": [
"/home/vscode/.local/bin/markitdown-mcp"
],
"enabled": true,
"timeout": 30000
}
},
"plugin": [
"./plugins"
]
}
EOF
echo "✅ セットアップ完了!"
echo ""
echo "📱 次のステップ:"
echo "1. 必要なら .devcontainer/interactive-setup.sh でTailscale設定"
echo "2. http://localhost:3000 でOpenChamberにアクセス"
echo "3. OpenCode API: http://localhost:4095"