@echo off chcp 65001 >nul setlocal enabledelayedexpansion echo. echo ======================================== echo 代码质量保障系统 - 一键部署脚本 echo ======================================== echo. REM 检测 Python 是否安装 python --version >nul 2>&1 if errorlevel 1 ( echo ❌ 错误: 未检测到 Python,请先安装 Python 3.7+ pause exit /b 1 ) echo ✅ Python 已安装 echo. REM 获取脚本所在目录 set "SCRIPT_DIR=%~dp0" cd /d "%SCRIPT_DIR%" REM 显示部署选项 echo 请选择部署模式: echo. echo [1] 全局部署 (推荐) echo - 部署到用户目录 (~/.claude/) echo - 所有项目自动启用 echo - 需要管理员权限 echo. echo [2] 项目部署 echo - 部署到当前项目的 .claude/ 目录 echo - 仅当前项目启用 echo - 不需要管理员权限 echo. echo [3] 卸载 echo - 从系统中移除已部署的组件 echo. echo [Q] 退出 echo. set /p choice="请输入选择 (1/2/3/Q): " if /i "%choice%"=="1" goto global_deploy if /i "%choice%"=="2" goto project_deploy if /i "%choice%"=="3" goto uninstall if /i "%choice%"=="Q" goto end if /i "%choice%"=="q" goto end echo ❌ 无效的选择 pause exit /b 1 :global_deploy echo. echo ======================================== echo 全局部署模式 echo ======================================== echo. REM 检测 Claude Code 配置目录 set "CLAUDE_DIR=%USERPROFILE%\.claude" if not exist "%CLAUDE_DIR%" ( echo ⚠️ Claude Code 配置目录不存在,正在创建... mkdir "%CLAUDE_DIR%" ) REM 部署 Hooks echo 📦 正在部署 Hooks... set "HOOKS_DIR=%CLAUDE_DIR%\hooks" if not exist "%HOOKS_DIR%" mkdir "%HOOKS_DIR%" copy /Y "%SCRIPT_DIR%hooks\*.py" "%HOOKS_DIR%\" >nul if errorlevel 1 ( echo ❌ Hooks 部署失败 pause exit /b 1 ) echo ✅ Hooks 部署成功 REM 部署 Skills echo 📦 正在部署 Skills... set "SKILLS_DIR=%CLAUDE_DIR%\custom-skills\code-quality" if not exist "%SKILLS_DIR%" mkdir "%SKILLS_DIR%" copy /Y "%SCRIPT_DIR%custom-skills\code-quality\*" "%SKILLS_DIR%\" >nul if errorlevel 1 ( echo ❌ Skills 部署失败 pause exit /b 1 ) echo ✅ Skills 部署成功 REM 部署配置 echo 📦 正在部署配置文件... copy /Y "%SCRIPT_DIR%config\code-quality-config.json" "%CLAUDE_DIR%\" >nul echo ✅ 配置文件部署成功 REM 复制声音文件(如果存在) if exist "%SCRIPT_DIR%sounds\*.wav" ( echo 📦 正在部署声音文件... set "SOUNDS_DIR=%CLAUDE_DIR%\sounds" if not exist "%SOUNDS_DIR%" mkdir "%SOUNDS_DIR%" copy /Y "%SCRIPT_DIR%sounds\*.wav" "%SOUNDS_DIR%\" >nul echo ✅ 声音文件部署成功 ) else ( echo ⚠️ 未找到声音文件,将使用系统提示音 ) REM 安装 Python 依赖 echo 📦 正在安装 Python 依赖... pip install -q plyer pygame if errorlevel 1 ( echo ⚠️ 部分依赖安装失败,通知功能可能不可用 ) else ( echo ✅ 依赖安装成功 ) REM 配置 settings.json echo 📦 正在配置 Claude Code 设置... set "SETTINGS_FILE=%CLAUDE_DIR%\settings.json" REM 创建或更新 settings.json if exist "%SETTINGS_FILE%" ( echo 检测到现有配置文件,正在更新... python -c "import json; data=json.load(open('%SETTINGS_FILE%', encoding='utf-8')); data.setdefault('hooks', {}).setdefault('TaskEnd', []).append({'type': 'command', 'command': 'python %USERPROFILE%\.claude\hooks/auto-complete-check.py'}); json.dump(data, open('%SETTINGS_FILE%', 'w', encoding='utf-8'), ensure_ascii=False, indent=2)" 2>nul ) else ( echo 创建新的配置文件... echo {> "%SETTINGS_FILE%" echo "hooks": {>> "%SETTINGS_FILE%" echo "TaskEnd": [>> "%SETTINGS_FILE%" echo {>> "%SETTINGS_FILE%" echo "type": "command",>> "%SETTINGS_FILE%" echo "command": "python %%USERPROFILE%%\\.claude\\hooks/auto-complete-check.py">> "%SETTINGS_FILE%" echo }>> "%SETTINGS_FILE%" echo ]>> "%SETTINGS_FILE%" echo }>> "%SETTINGS_FILE%" echo }>> "%SETTINGS_FILE%" ) echo ✅ 配置文件更新成功 echo. echo ======================================== echo ✅ 全局部署完成! echo ======================================== echo. echo 部署位置: echo - Hooks: %HOOKS_DIR% echo - Skills: %SKILLS_DIR% echo - 配置: %CLAUDE_DIR% echo. echo 使用方法: echo 1. 重启 Claude Code echo 2. 系统将自动检查代码质量 echo 3. 使用 /code-quality 命令手动检查 echo. echo 注意事项: echo - 首次使用建议运行测试: python "%HOOKS_DIR%\notification-sender.py" test echo - 配置文件位置: %CLAUDE_DIR%\code-quality-config.json echo. pause exit /b 0 :project_deploy echo. echo ======================================== echo 项目部署模式 echo ======================================== echo. REM 检查是否在 Git 仓库中 git rev-parse --is-inside-work-tree >nul 2>&1 if errorlevel 1 ( echo ⚠️ 当前目录不是 Git 仓库,某些功能可能不可用 ) REM 部署到项目 .claude 目录 set "PROJECT_CLAUDE_DIR=.claude" echo 📦 正在部署到项目目录... if not exist "%PROJECT_CLAUDE_DIR%" mkdir "%PROJECT_CLAUDE_DIR%" REM 复制 Hooks if not exist "%PROJECT_CLAUDE_DIR%\hooks" mkdir "%PROJECT_CLAUDE_DIR%\hooks" copy /Y "%SCRIPT_DIR%hooks\*.py" "%PROJECT_CLAUDE_DIR%\hooks\" >nul REM 复制 Skills if not exist "%PROJECT_CLAUDE_DIR%\custom-skills\code-quality" mkdir "%PROJECT_CLAUDE_DIR%\custom-skills\code-quality" copy /Y "%SCRIPT_DIR%custom-skills\code-quality\*" "%PROJECT_CLAUDE_DIR%\custom-skills\code-quality\" >nul REM 复制配置 copy /Y "%SCRIPT_DIR%config\code-quality-config.json" "%PROJECT_CLAUDE_DIR%\" >nul REM 复制声音文件 if exist "%SCRIPT_DIR%sounds\*.wav" ( if not exist "%PROJECT_CLAUDE_DIR%\sounds" mkdir "%PROJECT_CLAUDE_DIR%\sounds" copy /Y "%SCRIPT_DIR%sounds\*.wav" "%PROJECT_CLAUDE_DIR%\sounds\" >nul ) echo ✅ 项目部署成功 echo. echo ======================================== echo ✅ 项目部署完成! echo ======================================== echo. echo 部署位置: %CD%\%PROJECT_CLAUDE_DIR% echo. echo 使用方法: echo 1. 在项目中打开 Claude Code echo 2. 系统将自动检查代码质量 echo 3. 使用 /code-quality 命令手动检查 echo. pause exit /b 0 :uninstall echo. echo ======================================== echo 卸载模式 echo ======================================== echo. echo 请选择要卸载的组件: echo. echo [1] 全局部署 echo [2] 项目部署 echo [B] 返回 echo. set /p uninstall_choice="请输入选择 (1/2/B): " if /i "%uninstall_choice%"=="1" ( echo 正在卸载全局部署... set "CLAUDE_DIR=%USERPROFILE%\.claude" REM 删除 Hooks if exist "%CLAUDE_DIR%\hooks\auto-complete-check.py" del "%CLAUDE_DIR%\hooks\auto-complete-check.py" if exist "%CLAUDE_DIR%\hooks\requirements-tracker.py" del "%CLAUDE_DIR%\hooks\requirements-tracker.py" if exist "%CLAUDE_DIR%\hooks\code-analyzer.py" del "%CLAUDE_DIR%\hooks\code-analyzer.py" if exist "%CLAUDE_DIR%\hooks\notification-sender.py" del "%CLAUDE_DIR%\hooks\notification-sender.py" REM 删除 Skills if exist "%CLAUDE_DIR%\custom-skills\code-quality" rmdir /s /q "%CLAUDE_DIR%\custom-skills\code-quality" REM 删除配置 if exist "%CLAUDE_DIR%\code-quality-config.json" del "%CLAUDE_DIR%\code-quality-config.json" REM 更新 settings.json(移除 hook 配置) set "SETTINGS_FILE=%CLAUDE_DIR%\settings.json" if exist "%SETTINGS_FILE%" ( echo 正在更新配置文件... REM 这里需要 Python 来正确处理 JSON python -c "import json; data=json.load(open('%SETTINGS_FILE%', encoding='utf-8')); hooks=data.get('hooks', {}).get('TaskEnd', []); data['hooks']['TaskEnd']=[h for h in hooks if 'auto-complete-check' not in str(h)]; json.dump(data, open('%SETTINGS_FILE%', 'w', encoding='utf-8'), ensure_ascii=False, indent=2)" 2>nul ) echo ✅ 全局部署已卸载 echo 注意: Python 依赖 (plyer, pygame) 未卸载,如需请手动运行: pip uninstall plyer pygame ) else if /i "%uninstall_choice%"=="2" ( echo 正在卸载项目部署... if exist ".claude" ( rmdir /s /q ".claude" echo ✅ 项目部署已卸载 ) else ( echo ⚠️ 未找到项目部署 ) ) else if /i "%uninstall_choice%"=="B" ( goto end ) else ( echo ❌ 无效的选择 ) echo. pause exit /b 0 :end echo 退出部署脚本 exit /b 0