#!/usr/bin/env bash # 检查 task_plan.md 中所有阶段是否完成 # 始终以退出码 0 结束 — 使用标准输出报告状态 # 由 Stop 钩子调用以报告任务完成状态 PLAN_FILE="${1:-task_plan.md}" if [ ! -f "$PLAN_FILE" ]; then echo "[planning-with-files] 未找到 task_plan.md — 没有进行中的规划会话。" exit 0 fi # 计算阶段总数 TOTAL=$(grep -c "### 阶段" "$PLAN_FILE" || true) # 先检查 **状态:** 格式 COMPLETE=$(grep -cF "**状态:** complete" "$PLAN_FILE" || true) IN_PROGRESS=$(grep -cF "**状态:** in_progress" "$PLAN_FILE" || true) PENDING=$(grep -cF "**状态:** pending" "$PLAN_FILE" || true) # 备用:如果未找到 **状态:** 则检查 [complete] 行内格式 if [ "$COMPLETE" -eq 0 ] && [ "$IN_PROGRESS" -eq 0 ] && [ "$PENDING" -eq 0 ]; then COMPLETE=$(grep -c "\[complete\]" "$PLAN_FILE" || true) IN_PROGRESS=$(grep -c "\[in_progress\]" "$PLAN_FILE" || true) PENDING=$(grep -c "\[pending\]" "$PLAN_FILE" || true) fi # 默认为 0(如果为空) : "${TOTAL:=0}" : "${COMPLETE:=0}" : "${IN_PROGRESS:=0}" : "${PENDING:=0}" # 报告状态(始终以退出码 0 结束 — 未完成的任务是正常状态) if [ "$COMPLETE" -eq "$TOTAL" ] && [ "$TOTAL" -gt 0 ]; then echo "[planning-with-files] 所有阶段已完成($COMPLETE/$TOTAL)。如果用户有额外工作,请在开始前于 task_plan.md 中新增阶段。" else echo "[planning-with-files] 任务进行中($COMPLETE/$TOTAL 个阶段已完成)。停止前请更新 progress.md。" if [ "$IN_PROGRESS" -gt 0 ]; then echo "[planning-with-files] $IN_PROGRESS 个阶段仍在进行中。" fi if [ "$PENDING" -gt 0 ]; then echo "[planning-with-files] $PENDING 个阶段待处理。" fi fi exit 0