@walwal-harness/cli 4.0.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +118 -294
- package/assets/templates/config.json +8 -7
- package/assets/templates/progress.json.template +7 -1
- package/bin/init.js +115 -84
- package/commands/harness-solo.md +68 -0
- package/commands/harness-stop.md +53 -0
- package/{skills/team-action/SKILL.md → commands/harness-team.md} +59 -29
- package/package.json +9 -10
- package/scripts/harness-dashboard.sh +219 -154
- package/scripts/harness-monitor.sh +17 -12
- package/scripts/harness-prompt-history.sh +1 -1
- package/scripts/harness-queue-manager.sh +1 -1
- package/scripts/harness-session-start.sh +24 -13
- package/scripts/harness-statusline.sh +31 -8
- package/scripts/harness-tmux.sh +125 -72
- package/scripts/harness-user-prompt-submit.sh +22 -15
- package/skills/dispatcher/SKILL.md +6 -6
- package/skills/evaluator-functional/SKILL.md +2 -2
- package/skills/generator-frontend/SKILL.md +2 -2
- package/scripts/harness-control.sh +0 -183
- package/scripts/harness-dashboard-v4.sh +0 -200
- package/scripts/harness-eval-watcher.sh +0 -228
- package/scripts/harness-studio-setup.sh +0 -139
- package/scripts/harness-studio.sh +0 -66
- package/scripts/harness-tmux-v4.sh +0 -148
- package/skills/team-stop/SKILL.md +0 -30
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# harness-tmux-v4.sh — v4 Agent Teams: 원커맨드 실행
|
|
3
|
-
#
|
|
4
|
-
# ┌──────────────┬──────────────┬──────────────┐
|
|
5
|
-
# │ │ Dashboard │ TEAM 1 │
|
|
6
|
-
# │ Main Claude │ (v4 queue) ├──────────────┤
|
|
7
|
-
# │ (Lead) ├──────────────┤ TEAM 2 │
|
|
8
|
-
# │ │ Prompt ├──────────────┤
|
|
9
|
-
# │ │ History │ TEAM 3 │
|
|
10
|
-
# └──────────────┴──────────────┴──────────────┘
|
|
11
|
-
#
|
|
12
|
-
# Usage:
|
|
13
|
-
# bash scripts/harness-tmux-v4.sh # 레이아웃 + Claude 자동 실행 + team-action 자동 시작
|
|
14
|
-
# bash scripts/harness-tmux-v4.sh --no-auto # 레이아웃만 (Claude 수동 실행)
|
|
15
|
-
# bash scripts/harness-tmux-v4.sh --kill # 세션 종료
|
|
16
|
-
#
|
|
17
|
-
# 이것만 기억하세요:
|
|
18
|
-
# bash scripts/harness-tmux-v4.sh
|
|
19
|
-
|
|
20
|
-
set -euo pipefail
|
|
21
|
-
|
|
22
|
-
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
23
|
-
SESSION_NAME="harness-v4"
|
|
24
|
-
|
|
25
|
-
PROJECT_ROOT=""
|
|
26
|
-
DETACH=false
|
|
27
|
-
AUTO_START=true
|
|
28
|
-
|
|
29
|
-
for arg in "$@"; do
|
|
30
|
-
case "$arg" in
|
|
31
|
-
--detach) DETACH=true ;;
|
|
32
|
-
--no-auto) AUTO_START=false ;;
|
|
33
|
-
--kill)
|
|
34
|
-
tmux kill-session -t "$SESSION_NAME" 2>/dev/null && echo "Killed." || echo "No session."
|
|
35
|
-
exit 0
|
|
36
|
-
;;
|
|
37
|
-
*)
|
|
38
|
-
if [ -d "$arg" ]; then PROJECT_ROOT="$arg"; fi
|
|
39
|
-
;;
|
|
40
|
-
esac
|
|
41
|
-
done
|
|
42
|
-
|
|
43
|
-
if [ -z "$PROJECT_ROOT" ]; then
|
|
44
|
-
dir="$(pwd)"
|
|
45
|
-
while [ "$dir" != "/" ]; do
|
|
46
|
-
if [ -d "$dir/.harness" ]; then PROJECT_ROOT="$dir"; break; fi
|
|
47
|
-
dir="$(dirname "$dir")"
|
|
48
|
-
done
|
|
49
|
-
fi
|
|
50
|
-
|
|
51
|
-
if [ -z "$PROJECT_ROOT" ] || [ ! -d "$PROJECT_ROOT/.harness" ]; then
|
|
52
|
-
echo "Error: .harness/ not found."
|
|
53
|
-
exit 1
|
|
54
|
-
fi
|
|
55
|
-
|
|
56
|
-
echo "Project: $PROJECT_ROOT"
|
|
57
|
-
echo "Session: $SESSION_NAME"
|
|
58
|
-
|
|
59
|
-
tmux kill-session -t "$SESSION_NAME" 2>/dev/null || true
|
|
60
|
-
|
|
61
|
-
# ── Resolve Claude command ──
|
|
62
|
-
HANDOFF="$PROJECT_ROOT/.harness/handoff.json"
|
|
63
|
-
CLAUDE_CMD="claude --dangerously-skip-permissions"
|
|
64
|
-
if [ -f "$HANDOFF" ]; then
|
|
65
|
-
_model=$(jq -r '.model // empty' "$HANDOFF" 2>/dev/null)
|
|
66
|
-
if [ -n "$_model" ] && [ "$_model" != "null" ]; then
|
|
67
|
-
CLAUDE_CMD="$CLAUDE_CMD --model $_model"
|
|
68
|
-
fi
|
|
69
|
-
fi
|
|
70
|
-
|
|
71
|
-
# ══════════════════════════════════════════
|
|
72
|
-
# Build 3-column layout
|
|
73
|
-
# ══════════════════════════════════════════
|
|
74
|
-
|
|
75
|
-
# 1. Create session → Left pane (Main Claude Lead)
|
|
76
|
-
PANE_MAIN=$(tmux new-session -d -s "$SESSION_NAME" -c "$PROJECT_ROOT" -x 220 -y 55 \
|
|
77
|
-
-P -F '#{pane_id}')
|
|
78
|
-
|
|
79
|
-
# 2. Split horizontally: Left 35% | Right 65%
|
|
80
|
-
PANE_MID=$(tmux split-window -h -p 65 -t "$PANE_MAIN" -c "$PROJECT_ROOT" \
|
|
81
|
-
-P -F '#{pane_id}')
|
|
82
|
-
|
|
83
|
-
# 3. Split right section: Middle 45% | Right 55% — Right는 TEAM 1 으로 시작
|
|
84
|
-
PANE_T1=$(tmux split-window -h -p 55 -t "$PANE_MID" -c "$PROJECT_ROOT" \
|
|
85
|
-
-P -F '#{pane_id}' \
|
|
86
|
-
"bash --norc --noprofile -c 'exec bash \"${SCRIPT_DIR}/harness-monitor.sh\" \"${PROJECT_ROOT}\" --team 1'")
|
|
87
|
-
|
|
88
|
-
# 3b. Split TEAM 1 세로로 → TEAM 2 (하단 66%)
|
|
89
|
-
PANE_T2=$(tmux split-window -v -p 66 -t "$PANE_T1" -c "$PROJECT_ROOT" \
|
|
90
|
-
-P -F '#{pane_id}' \
|
|
91
|
-
"bash --norc --noprofile -c 'exec bash \"${SCRIPT_DIR}/harness-monitor.sh\" \"${PROJECT_ROOT}\" --team 2'")
|
|
92
|
-
|
|
93
|
-
# 3c. Split TEAM 2 세로로 → TEAM 3 (하단 50%)
|
|
94
|
-
PANE_T3=$(tmux split-window -v -p 50 -t "$PANE_T2" -c "$PROJECT_ROOT" \
|
|
95
|
-
-P -F '#{pane_id}' \
|
|
96
|
-
"bash --norc --noprofile -c 'exec bash \"${SCRIPT_DIR}/harness-monitor.sh\" \"${PROJECT_ROOT}\" --team 3'")
|
|
97
|
-
|
|
98
|
-
# 4. Split middle pane vertically: Dashboard (top 45%) | Prompt History (bottom 55%)
|
|
99
|
-
PANE_HISTORY=$(tmux split-window -v -p 55 -t "$PANE_MID" -c "$PROJECT_ROOT" \
|
|
100
|
-
-P -F '#{pane_id}' \
|
|
101
|
-
"bash --norc --noprofile -c 'exec bash \"${SCRIPT_DIR}/harness-prompt-history.sh\" \"${PROJECT_ROOT}\"'")
|
|
102
|
-
|
|
103
|
-
# 5. Start dashboard in the middle-top pane
|
|
104
|
-
tmux send-keys -t "$PANE_MID" "bash \"${SCRIPT_DIR}/harness-dashboard-v4.sh\" \"${PROJECT_ROOT}\"" Enter
|
|
105
|
-
|
|
106
|
-
# 6. Main pane — Claude 자동 실행
|
|
107
|
-
tmux send-keys -t "$PANE_MAIN" "unset npm_config_prefix 2>/dev/null" Enter
|
|
108
|
-
tmux send-keys -t "$PANE_MAIN" "clear" Enter
|
|
109
|
-
|
|
110
|
-
if [ "$AUTO_START" = true ]; then
|
|
111
|
-
# Claude 실행 → 시작 후 자동으로 /harness-team-action 전송
|
|
112
|
-
tmux send-keys -t "$PANE_MAIN" "$CLAUDE_CMD" Enter
|
|
113
|
-
# Claude가 초기화될 시간을 준 뒤 team-action 명령 전송
|
|
114
|
-
sleep 3
|
|
115
|
-
tmux send-keys -t "$PANE_MAIN" "/harness-team-action" Enter
|
|
116
|
-
fi
|
|
117
|
-
|
|
118
|
-
# ── Pane titles ──
|
|
119
|
-
tmux select-pane -t "$PANE_MAIN" -T "Lead (Main Claude)"
|
|
120
|
-
tmux select-pane -t "$PANE_MID" -T "Dashboard"
|
|
121
|
-
tmux select-pane -t "$PANE_HISTORY" -T "Prompt History"
|
|
122
|
-
tmux select-pane -t "$PANE_T1" -T "TEAM 1"
|
|
123
|
-
tmux select-pane -t "$PANE_T2" -T "TEAM 2"
|
|
124
|
-
tmux select-pane -t "$PANE_T3" -T "TEAM 3"
|
|
125
|
-
|
|
126
|
-
tmux set-option -t "$SESSION_NAME" pane-border-status top 2>/dev/null || true
|
|
127
|
-
tmux set-option -t "$SESSION_NAME" pane-border-format " #{pane_title} " 2>/dev/null || true
|
|
128
|
-
|
|
129
|
-
# ── Focus on Main pane ──
|
|
130
|
-
tmux select-pane -t "$PANE_MAIN"
|
|
131
|
-
|
|
132
|
-
# ── Attach ──
|
|
133
|
-
if [ "$DETACH" = true ]; then
|
|
134
|
-
echo ""
|
|
135
|
-
echo "Session created. Attach: tmux attach -t $SESSION_NAME"
|
|
136
|
-
else
|
|
137
|
-
if [ -n "${TMUX:-}" ]; then
|
|
138
|
-
tmux switch-client -t "$SESSION_NAME"
|
|
139
|
-
else
|
|
140
|
-
echo ""
|
|
141
|
-
echo "harness-v4 starting..."
|
|
142
|
-
echo ""
|
|
143
|
-
echo " All automatic. Just watch."
|
|
144
|
-
echo " Stop: bash scripts/harness-tmux-v4.sh --kill"
|
|
145
|
-
echo ""
|
|
146
|
-
tmux attach -t "$SESSION_NAME"
|
|
147
|
-
fi
|
|
148
|
-
fi
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: harness-team-stop
|
|
3
|
-
description: "v4 Agent Teams 중지 + Studio 정리. 실행 중인 Teammate 해산, tmux 세션 종료. 트리거: '/harness-team-stop', 'team 중지', 'agent team 멈춰', '팀 멈춰', '팀 중지'"
|
|
4
|
-
disable-model-invocation: false
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# /harness-team-stop — Agent Teams 중지
|
|
8
|
-
|
|
9
|
-
## Step 1: Queue 상태 저장
|
|
10
|
-
|
|
11
|
-
현재 in_progress feature를 ready로 복구합니다 (재시작 시 이어서 가능):
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
bash scripts/harness-queue-manager.sh recover .
|
|
15
|
-
bash scripts/harness-queue-manager.sh status .
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## Step 2: tmux Studio 세션 정리
|
|
19
|
-
|
|
20
|
-
```bash
|
|
21
|
-
tmux kill-session -t harness-studio 2>/dev/null && echo "Studio session killed." || echo "No studio session."
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
## Step 3: 완료 안내
|
|
25
|
-
|
|
26
|
-
```
|
|
27
|
-
Teams 중지 완료.
|
|
28
|
-
- Queue 상태 보존됨 (in_progress → ready로 복구)
|
|
29
|
-
- 재시작: /harness-team-action
|
|
30
|
-
```
|