46 lines
1.4 KiB
Bash
46 lines
1.4 KiB
Bash
#!/usr/bin/env bash
|
||
# Extract one task's full text from an implementation plan into a file the
|
||
# implementer reads in one call, so the task text never has to be pasted
|
||
# through the controller's context.
|
||
#
|
||
# Usage: task-brief PLAN_FILE TASK_NUMBER [OUTFILE]
|
||
# Default OUTFILE: <repo-root>/.superpowers/sdd/<plan-basename>/task-<N>-brief.md
|
||
# (per plan and per worktree; concurrent runs of the SAME plan in the same
|
||
# working tree share it).
|
||
#
|
||
# 中文 fork 适配:上游只识别英文任务标题 "## Task N",而 superpowers-zh
|
||
# 的 writing-plans 产出的是 "### 任务 N:..."。下方 awk 同时匹配
|
||
# "Task" 与 "任务",两种计划都能抽取。
|
||
set -euo pipefail
|
||
|
||
if [ $# -lt 2 ] || [ $# -gt 3 ]; then
|
||
echo "usage: task-brief PLAN_FILE TASK_NUMBER [OUTFILE]" >&2
|
||
exit 2
|
||
fi
|
||
|
||
plan=$1
|
||
n=$2
|
||
[ -f "$plan" ] || { echo "no such plan file: $plan" >&2; exit 2; }
|
||
|
||
if [ $# -eq 3 ]; then
|
||
out=$3
|
||
else
|
||
dir=$("$(cd "$(dirname "$0")" && pwd)/sdd-workspace" "$plan")
|
||
out="$dir/task-${n}-brief.md"
|
||
fi
|
||
|
||
awk -v n="$n" '
|
||
/^```/ { infence = !infence }
|
||
!infence && /^#+[ \t]+(Task|任务)[ \t]*[0-9]+/ {
|
||
intask = ($0 ~ ("^#+[ \t]+(Task|任务)[ \t]*" n "([^0-9]|$)"))
|
||
}
|
||
intask { print }
|
||
' "$plan" > "$out"
|
||
|
||
if [ ! -s "$out" ]; then
|
||
echo "task ${n} not found in ${plan} (no heading matching 'Task ${n}' / '任务 ${n}')" >&2
|
||
exit 3
|
||
fi
|
||
|
||
echo "wrote ${out}: $(wc -l < "$out" | tr -d ' ') lines"
|