04e2cc3071
install.sh REPO_URL and README install commands were hardcoded to richblack/system-dev-template while this repo lives at uncle6me-web/system-dev-template. The mismatch made the installer pull executable config (.claude/commands/*.md) from a different repo name than the one users name, which the classifier blocks. Point all sources at uncle6me-web so the install source matches the repo name. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
114 lines
3.6 KiB
Bash
114 lines
3.6 KiB
Bash
#!/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"
|
|
|
|
# ── 檔案(從 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/sdd-check.md" "$REPO_URL/.claude/commands/sdd-check.md"
|
|
|
|
# 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
|
|
|
|
# ── 輸出結果 ──────────────────────────────────────
|
|
|
|
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
|
|
|
|
echo ""
|
|
echo "🚀 下一步:在 Claude Code 對話裡執行:"
|
|
echo " /wiki-init"
|
|
echo ""
|
|
echo " CC 會掃描現有文件、建立 wiki、整理 docs 結構。"
|
|
echo ""
|