#!/bin/bash # sanguo_moziplus_v3 v0.5 初始化脚本 set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_DIR="$(dirname "$SCRIPT_DIR")" # 颜色定义 GREEN='\033[0;32m' BLUE='\033[0;34m' YELLOW='\033[1;33m' RED='\033[0;31m' NC='\033[0m' # No Color echo -e "${GREEN}=== sanguo_moziplus_v3 v0.5 初始化 ===${NC}" # 1. 检查环境 echo -e "\n${BLUE}1. 检查环境...${NC}" if ! command -v claude &> /dev/null; then echo -e "${RED}❌ Claude Code 未安装${NC}" echo "请先安装 Claude Code: https://claude.ai/code" exit 1 fi echo -e "${GREEN}✅ Claude Code 已安装${NC}" if ! command -v git &> /dev/null; then echo -e "${RED}❌ Git 未安装${NC}" exit 1 fi echo -e "${GREEN}✅ Git 已安装${NC}" # Node.js 是可选的(用于运行 JS 工作流) if command -v node &> /dev/null; then echo -e "${GREEN}✅ Node.js 已安装: $(node --version)${NC}" else echo -e "${YELLOW}⚠️ Node.js 未安装 (可选,用于运行 JavaScript 工作流)${NC}" fi # 2. 创建必要目录 echo -e "\n${BLUE}2. 创建目录...${NC}" mkdir -p "$PROJECT_DIR/.claude/workflows/helpers" mkdir -p "$PROJECT_DIR/scripts" echo -e "${GREEN}✅ 目录创建完成${NC}" # 3. 检查配置文件 echo -e "\n${BLUE}3. 检查配置文件...${NC}" if [ ! -f "$PROJECT_DIR/.claude/gitea-config.json" ]; then echo -e "${YELLOW}⚠️ gitea-config.json 不存在${NC}" echo "创建默认配置..." cat > "$PROJECT_DIR/.claude/gitea-config.json" << 'EOF' { "gitea": { "baseUrl": "http://192.168.2.154:3000", "owner": "sanguo", "repo": "sanguo_moziplus_v3", "defaultBranch": "main" }, "rules": { "branchNaming": { "feature": "feature/{task-name}", "fix": "fix/{issue-number}-{description}", "hotfix": "hotfix/{description}" }, "commitNaming": { "feature": "feat: {description}", "fix": "fix: {description}", "refactor": "refactor: {description}", "docs": "docs: {description}", "test": "test: {description}" }, "prTemplate": { "title": "{task-type}: {description}", "description": "## 任务\n\n{task-description}\n\n## 技术方案\n\n{approach}\n\n## 实现内容\n\n{changes}\n\n## 测试\n\n{tests}" } }, "review": { "checklist": [ "代码质量", "安全性", "性能", "测试覆盖", "文档完整性" ], "approval": "至少 2 个 Reviewer 通过" }, "agents": { "main": { "role": "编排者", "responsibilities": [ "分析任务", "安排 Sub Agents", "验收整合", "合并 PR" ] }, "execute": { "role": "执行者", "responsibilities": [ "实现功能", "编写测试", "创建 PR" ], "skills": ["backend-dev", "frontend-dev"] }, "review": { "role": "审查者", "responsibilities": [ "代码审查", "添加 Review 评论", "提供修改建议" ], "skills": ["CODE-REVIEW", "security-reviewer"] }, "test": { "role": "测试者", "responsibilities": [ "编写测试", "执行测试", "验证修复" ], "skills": ["test-engineer", "e2e-tester"] } } } EOF echo -e "${GREEN}✅ 已创建默认配置${NC}" echo -e "${YELLOW}⚠️ 请编辑 .claude/gitea-config.json 配置你的 Gitea 信息${NC}" else echo -e "${GREEN}✅ gitea-config.json 已存在${NC}" fi # 4. 检查 Claude Code 配置 echo -e "\n${BLUE}4. 检查 Claude Code 配置...${NC}" if [ ! -f "$HOME/.claude/settings.json" ]; then echo -e "${YELLOW}⚠️ ~/.claude/settings.json 不存在${NC}" echo "请配置 GLM-5.2 端点:" echo "" cat << 'EOF' { "env": { "CLAUDE_CODE_AUTO_COMPACT_WINDOW": "1000000", "ANTHROPIC_BASE_URL": "https://api.z.ai/api/anthropic", "ANTHROPIC_API_KEY": "你的智谱API_Key", "ANTHROPIC_DEFAULT_SONNET_MODEL": "glm-5.2[1m]", "ANTHROPIC_DEFAULT_OPUS_MODEL": "glm-5.2[1m]" } } EOF echo "" echo "创建配置文件:" echo " mkdir -p ~/.claude" echo " vim ~/.claude/settings.json" else echo -e "${GREEN}✅ ~/.claude/settings.json 已存在${NC}" fi # 5. 读取并显示 Gitea 配置 echo -e "\n${BLUE}5. Gitea 配置...${NC}" if [ -f "$PROJECT_DIR/.claude/gitea-config.json" ]; then if command -v node &> /dev/null; then GITEA_CONFIG=$(node -e " const fs = require('fs'); const config = JSON.parse(fs.readFileSync('$PROJECT_DIR/.claude/gitea-config.json', 'utf-8')); console.log(' Base URL: ' + config.gitea.baseUrl); console.log(' Owner: ' + config.gitea.owner); console.log(' Repository: ' + config.gitea.repo); console.log(' 主分支: ' + config.gitea.defaultBranch); " 2>/dev/null || echo " 无法解析配置文件") echo -e "$GITEA_CONFIG" else echo -e "${YELLOW}⚠️ 需要 Node.js 来解析配置${NC}" fi fi # 6. 测试 Git 连接 echo -e "\n${BLUE}6. 测试 Git 连接...${NC}" cd "$PROJECT_DIR" if git remote -v &> /dev/null; then echo "Git 远程仓库:" git remote -v else echo -e "${YELLOW}⚠️ 没有配置 Git 远程仓库${NC}" echo "添加远程仓库:" echo " git remote add origin " fi # 7. 检查 Superpowers Skills echo -e "\n${BLUE}7. 检查 Superpowers Skills...${NC}" SKILLS_DIR="$HOME/.claude/skills" if [ -d "$SKILLS_DIR" ]; then SKILL_COUNT=$(ls -1 "$SKILLS_DIR" 2>/dev/null | wc -l) echo -e "${GREEN}✅ Superpowers Skills 已安装: $SKILL_COUNT 个技能${NC}" else echo -e "${YELLOW}⚠️ Superpowers Skills 未安装${NC}" echo "请从 Superpowers Marketplace 安装所需技能" fi # 8. 验证工作流文件 echo -e "\n${BLUE}8. 验证工作流文件...${NC}" WORKFLOW_FILES=( ".claude/workflows/gitea-orchestration.js" ".claude/workflows/helpers/gitea-rules-generator.js" ) for file in "${WORKFLOW_FILES[@]}"; do if [ -f "$PROJECT_DIR/$file" ]; then echo -e "${GREEN}✅ $file${NC}" else echo -e "${RED}❌ $file 不存在${NC}" fi done # 完成 echo -e "\n${GREEN}=== 初始化完成 ===${NC}" echo "" echo -e "${BLUE}下一步操作:${NC}" echo "1. 编辑配置 (如需要):" echo " vim .claude/gitea-config.json" echo "" echo "2. 启动 Claude Code:" echo " cd $PROJECT_DIR" echo " claude" echo "" echo "3. 测试工作流:" echo " 在 Claude Code 中运行:" echo " Workflow({ scriptPath: '.claude/workflows/gitea-orchestration.js', args: '测试任务' })" echo "" echo -e "${BLUE}相关文档:${NC}" echo "- 部署指南: docs/deployment-v0.5.md" echo "- 设计文档: docs/design/06-design-v0.5-dynamic-orchestration.md"