#!/bin/bash # system-dev-template installer # 已有專案接入腳本——只建立缺少的東西,已有的一律不動 set -e REPO_URL="https://raw.githubusercontent.com/uncle6me-web/system-dev-template/main/template" CREATED=() SKIPPED=() echo "" echo "🔧 system-dev-template installer" echo "=================================" echo "只建立缺少的目錄和檔案,已有的不動。" echo "" # ── 目錄 ────────────────────────────────────────── create_dir() { if [ ! -d "$1" ]; then mkdir -p "$1" CREATED+=("$1/") else SKIPPED+=("$1/ (已存在)") fi } create_dir "docs/1-vision" create_dir "docs/2-architecture/decisions" create_dir "docs/3-specs" create_dir "docs/4-guides" create_dir "docs/5-records/incidents" create_dir "docs/5-records/test-reports" create_dir "docs/6-user" create_dir ".claude/wiki" create_dir ".claude/commands" create_dir ".claude/hooks" # ── 檔案(從 repo 下載,只在不存在時)────────────── download_if_missing() { local dest="$1" local src="$2" if [ ! -f "$dest" ]; then curl -sSL "$src" -o "$dest" CREATED+=("$dest") else SKIPPED+=("$dest (已存在,跳過)") fi } # wiki 核心檔案 download_if_missing ".claude/wiki/INDEX.md" "$REPO_URL/.claude/wiki/INDEX.md" download_if_missing ".claude/wiki/status.md" "$REPO_URL/.claude/wiki/status.md" download_if_missing ".claude/wiki/mistakes.md" "$REPO_URL/.claude/wiki/mistakes.md" download_if_missing ".claude/wiki/decisions-summary.md" "$REPO_URL/.claude/wiki/decisions-summary.md" # slash commands download_if_missing ".claude/commands/wiki-init.md" "$REPO_URL/.claude/commands/wiki-init.md" download_if_missing ".claude/commands/wiki-capture.md" "$REPO_URL/.claude/commands/wiki-capture.md" download_if_missing ".claude/commands/wiki-update.md" "$REPO_URL/.claude/commands/wiki-update.md" download_if_missing ".claude/commands/wiki-recall.md" "$REPO_URL/.claude/commands/wiki-recall.md" download_if_missing ".claude/commands/sdd-check.md" "$REPO_URL/.claude/commands/sdd-check.md" # hooks(軟規範 → 硬攔截。下載後補執行權限) download_if_missing ".claude/hooks/session-start-recall.sh" "$REPO_URL/.claude/hooks/session-start-recall.sh" download_if_missing ".claude/hooks/sdd-guard.sh" "$REPO_URL/.claude/hooks/sdd-guard.sh" download_if_missing ".claude/hooks/pre-write-guard.sh" "$REPO_URL/.claude/hooks/pre-write-guard.sh" chmod +x .claude/hooks/*.sh 2>/dev/null || true # docs/README.md(分類地圖) download_if_missing "docs/README.md" "$REPO_URL/docs/README.md" # CLAUDE.md:只在完全不存在時建立 if [ ! -f "CLAUDE.md" ]; then download_if_missing "CLAUDE.md" "$REPO_URL/CLAUDE.md" else SKIPPED+=("CLAUDE.md (已存在,請手動加入 wiki 讀取順序區塊)") fi # .claude/settings.json:只在完全不存在時建立(比照 CLAUDE.md,不覆蓋既有設定) if [ ! -f ".claude/settings.json" ]; then download_if_missing ".claude/settings.json" "$REPO_URL/.claude/settings.json" else SKIPPED+=(".claude/settings.json (已存在,請手動加入 hooks 區塊)") fi # ── 輸出結果 ────────────────────────────────────── echo "" echo "✅ 建立了:" for item in "${CREATED[@]}"; do echo " + $item" done if [ ${#SKIPPED[@]} -gt 0 ]; then echo "" echo "⚠️ 跳過(已存在):" for item in "${SKIPPED[@]}"; do echo " - $item" done fi echo "" echo "─────────────────────────────────" # 如果 CLAUDE.md 已存在,提醒手動加入 wiki 區塊 if [ -f "CLAUDE.md" ]; then if ! grep -q "wiki/status.md" CLAUDE.md; then echo "" echo "📌 CLAUDE.md 已存在但缺少 wiki 讀取順序。" echo " 請手動加入以下區塊:" echo "" echo ' ## Wiki 讀取順序' echo ' | 檔案 | 時機 | 用途 |' echo ' |------|------|------|' echo ' | `.claude/wiki/status.md` | session 開始第一件事 | 當前進度 |' echo ' | `.claude/wiki/mistakes.md` | 做新功能前 | 已知誤解 |' echo ' | `.claude/wiki/decisions-summary.md` | 設計判斷時 | 架構決策 |' fi fi # 如果 settings.json 已存在,提醒手動加入 hooks 區塊 if [ -f ".claude/settings.json" ]; then if ! grep -q "session-start-recall.sh" .claude/settings.json; then echo "" echo "📌 .claude/settings.json 已存在但缺少 hooks。" echo " 請手動把以下 hooks 合併進去(已有設定請保留):" echo "" echo ' "SessionStart": [{ "matcher": "startup|resume|clear",' echo ' "hooks": [{ "type": "command", "command": ".claude/hooks/session-start-recall.sh" }] }],' echo ' "PreToolUse": [{ "matcher": "Write|Edit",' echo ' "hooks": [{ "type": "command", "command": ".claude/hooks/sdd-guard.sh" },' echo ' { "type": "command", "command": ".claude/hooks/pre-write-guard.sh" }] }]' fi fi echo "" echo "🚀 下一步:在 Claude Code 對話裡執行:" echo " /wiki-init" echo "" echo " CC 會掃描現有文件、建立 wiki、整理 docs 結構。" echo ""