@walwal-harness/cli 3.7.3 → 3.7.4
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/package.json +1 -1
- package/scripts/harness-control.sh +43 -12
- package/scripts/harness-tmux.sh +4 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@walwal-harness/cli",
|
|
3
|
-
"version": "3.7.
|
|
3
|
+
"version": "3.7.4",
|
|
4
4
|
"description": "Production harness for AI agent engineering — Planner, Generator(BE/FE), Evaluator(Func/Visual), optional Brainstormer (requirements refinement). Supports React and Flutter FE stacks.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"walwal-harness": "bin/init.js"
|
|
@@ -38,8 +38,23 @@ RED="\033[31m"
|
|
|
38
38
|
CYAN="\033[36m"
|
|
39
39
|
RESET="\033[0m"
|
|
40
40
|
|
|
41
|
-
# ── Agent Session pane target ──
|
|
42
|
-
|
|
41
|
+
# ── Agent Session pane target (find by title) ──
|
|
42
|
+
find_agent_pane() {
|
|
43
|
+
tmux list-panes -t harness-studio -F '#{pane_id} #{pane_title}' 2>/dev/null \
|
|
44
|
+
| grep "Agent Session" | awk '{print $1}' | head -1
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
CONFIG="$PROJECT_ROOT/.harness/config.json"
|
|
48
|
+
|
|
49
|
+
# Build claude command from config
|
|
50
|
+
build_claude_cmd() {
|
|
51
|
+
local agent="$1"
|
|
52
|
+
local model="opus"
|
|
53
|
+
if [ -f "$CONFIG" ]; then
|
|
54
|
+
model=$(jq -r ".agents[\"${agent}\"].model // \"opus\"" "$CONFIG" 2>/dev/null)
|
|
55
|
+
fi
|
|
56
|
+
echo "claude --dangerously-skip-permissions --model ${model}"
|
|
57
|
+
}
|
|
43
58
|
|
|
44
59
|
cmd_log() {
|
|
45
60
|
local msg="$1"
|
|
@@ -63,8 +78,10 @@ cmd_clear_fail() {
|
|
|
63
78
|
}
|
|
64
79
|
|
|
65
80
|
cmd_next() {
|
|
66
|
-
|
|
67
|
-
|
|
81
|
+
local pane
|
|
82
|
+
pane=$(find_agent_pane)
|
|
83
|
+
if [ -z "$pane" ]; then
|
|
84
|
+
echo -e " ${RED}Agent Session pane not found.${RESET}"
|
|
68
85
|
return
|
|
69
86
|
fi
|
|
70
87
|
|
|
@@ -75,16 +92,25 @@ cmd_next() {
|
|
|
75
92
|
return
|
|
76
93
|
fi
|
|
77
94
|
|
|
78
|
-
|
|
95
|
+
local claude_cmd
|
|
96
|
+
claude_cmd=$(build_claude_cmd "$next_agent")
|
|
97
|
+
|
|
98
|
+
echo -e " ${CYAN}Starting ${next_agent}...${RESET}"
|
|
99
|
+
echo -e " ${DIM}${claude_cmd}${RESET}"
|
|
100
|
+
|
|
79
101
|
local ts
|
|
80
102
|
ts=$(date +"%Y-%m-%d")
|
|
81
103
|
echo "${ts} | manual | start-agent | ${next_agent}" >> "$PROGRESS_LOG"
|
|
82
|
-
|
|
104
|
+
|
|
105
|
+
# Launch claude in Agent Session pane with the agent's prompt
|
|
106
|
+
tmux send-keys -t "$pane" "${claude_cmd} -p '하네스 엔지니어링 시작'" Enter
|
|
83
107
|
}
|
|
84
108
|
|
|
85
109
|
cmd_retry() {
|
|
86
|
-
|
|
87
|
-
|
|
110
|
+
local pane
|
|
111
|
+
pane=$(find_agent_pane)
|
|
112
|
+
if [ -z "$pane" ]; then
|
|
113
|
+
echo -e " ${RED}Agent Session pane not found.${RESET}"
|
|
88
114
|
return
|
|
89
115
|
fi
|
|
90
116
|
|
|
@@ -95,21 +121,26 @@ cmd_retry() {
|
|
|
95
121
|
return
|
|
96
122
|
fi
|
|
97
123
|
|
|
124
|
+
local claude_cmd
|
|
125
|
+
claude_cmd=$(build_claude_cmd "$current_agent")
|
|
126
|
+
|
|
98
127
|
echo -e " ${CYAN}Retrying ${current_agent}...${RESET}"
|
|
99
128
|
local ts
|
|
100
129
|
ts=$(date +"%Y-%m-%d")
|
|
101
130
|
echo "${ts} | manual | retry | ${current_agent}" >> "$PROGRESS_LOG"
|
|
102
|
-
tmux send-keys -t "$
|
|
131
|
+
tmux send-keys -t "$pane" "${claude_cmd} -p '하네스 엔지니어링 시작'" Enter
|
|
103
132
|
}
|
|
104
133
|
|
|
105
134
|
cmd_stop() {
|
|
106
|
-
|
|
107
|
-
|
|
135
|
+
local pane
|
|
136
|
+
pane=$(find_agent_pane)
|
|
137
|
+
if [ -z "$pane" ]; then
|
|
138
|
+
echo -e " ${RED}Agent Session pane not found.${RESET}"
|
|
108
139
|
return
|
|
109
140
|
fi
|
|
110
141
|
|
|
111
142
|
echo -e " ${YELLOW}Sending Ctrl+C to Agent Session...${RESET}"
|
|
112
|
-
tmux send-keys -t "$
|
|
143
|
+
tmux send-keys -t "$pane" C-c
|
|
113
144
|
local ts
|
|
114
145
|
ts=$(date +"%Y-%m-%d")
|
|
115
146
|
echo "${ts} | manual | stop | user-initiated" >> "$PROGRESS_LOG"
|
package/scripts/harness-tmux.sh
CHANGED
|
@@ -98,9 +98,10 @@ PANE_EVAL=$(tmux split-window -v -p 45 -t "$PANE_AGENT" -c "$PROJECT_ROOT" \
|
|
|
98
98
|
-P -F '#{pane_id}' \
|
|
99
99
|
"bash --norc --noprofile -c 'exec bash \"${SCRIPT_DIR}/harness-eval-watcher.sh\" \"${PROJECT_ROOT}\" ${USE_AI}'")
|
|
100
100
|
|
|
101
|
-
# 6.
|
|
102
|
-
#
|
|
103
|
-
tmux send-keys -t "$PANE_AGENT" "unset npm_config_prefix 2>/dev/null
|
|
101
|
+
# 6. Agent Session — leave as empty shell, ready for Control to launch claude
|
|
102
|
+
# Pre-unset nvm conflict variable
|
|
103
|
+
tmux send-keys -t "$PANE_AGENT" "unset npm_config_prefix 2>/dev/null" Enter
|
|
104
|
+
tmux send-keys -t "$PANE_AGENT" "clear" Enter
|
|
104
105
|
|
|
105
106
|
# ── Pane titles ──
|
|
106
107
|
tmux select-pane -t "$PANE_DASHBOARD" -T "Dashboard"
|