#!/usr/bin/env bash # SessionStart hook: 启动时输出项目关键上下文和集成提醒 # 不阻止会话启动,仅输出提示信息 set -euo pipefail PROJECT_DIR="${AGENT_PROJECT_DIR:-$(pwd)}" cd "$PROJECT_DIR" echo "" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo " Gym Manage — 项目上下文" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" # 当前分支 BRANCH=$(git branch --show-current 2>/dev/null || echo "未知") echo " 分支: $BRANCH" # 变更文件统计 STAGED=$(git diff --cached --name-only 2>/dev/null | wc -l | tr -d ' ') UNSTAGED=$(git diff --name-only 2>/dev/null | wc -l | tr -d ' ') echo " 变更: ${STAGED} 个暂存, ${UNSTAGED} 个未暂存" # 检测关键文件变更 CHANGED_FILES=$(git diff --name-only HEAD 2>/dev/null; git diff --cached --name-only 2>/dev/null; git ls-files --others --exclude-standard 2>/dev/null | sort -u) HAS_API_CHANGE="" HAS_WEB_API_CHANGE="" HAS_UNIAPP_CHANGE="" while IFS= read -r f; do [ -z "$f" ] && continue case "$f" in gym-manage-api/*.java) HAS_API_CHANGE="yes" ;; gym-manage-web/src/api/*.api.ts) HAS_WEB_API_CHANGE="yes" ;; gym-manage-uniapp/api/*.js|gym-manage-coach-uniapp/api/*.js) HAS_UNIAPP_CHANGE="yes" ;; esac done <<< "$CHANGED_FILES" # 集成提醒 if [ -n "$HAS_API_CHANGE" ] || [ -n "$HAS_WEB_API_CHANGE" ] || [ -n "$HAS_UNIAPP_CHANGE" ]; then echo "" echo " ⚠️ 检测到接口相关文件变更,请确保全链路完整性:" echo "" echo " ┌─ Layer 1: Java Controller(gym-manage-api)─────────────┐" echo " │ @RestController / @RequestMapping / Service 层 │" echo " ├─ Layer 2: Web 请求层 ──────────────────────────────────┤" echo " │ gym-manage-web/src/api/*.api.ts(请求路径/参数/类型) │" echo " ├─ Layer 3: UniApp 请求层 ───────────────────────────────┤" echo " │ gym-manage-uniapp/api/*.js + coach-uniapp/api/*.js │" echo " ├─ Layer 4: 页面/组件 ───────────────────────────────────┤" echo " │ gym-manage-web/src/views/* + uniapp pages/* │" echo " └─ Layer 5: 测试验证 ────────────────────────────────────┘" echo " mvn test(后端)+ pnpm test(Web)+ flaky-scan(§22)" echo "" echo " 详细清单: AGENT.md(架构/命令/端口)+ AGENTS.md §13/§17" echo "" fi echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo ""