@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@walwal-harness/cli",
3
- "version": "3.7.3",
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
- AGENT_PANE="harness-studio.2"
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
- if ! tmux list-panes -t harness-studio 2>/dev/null | grep -q .; then
67
- echo -e " ${RED}tmux session not found.${RESET}"
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
- echo -e " ${CYAN}Starting ${next_agent} in Agent Session...${RESET}"
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
- tmux send-keys -t "$AGENT_PANE" "/harness-${next_agent}" Enter
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
- if ! tmux list-panes -t harness-studio 2>/dev/null | grep -q .; then
87
- echo -e " ${RED}tmux session not found.${RESET}"
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 "$AGENT_PANE" "/harness-${current_agent}" Enter
131
+ tmux send-keys -t "$pane" "${claude_cmd} -p '하네스 엔지니어링 시작'" Enter
103
132
  }
104
133
 
105
134
  cmd_stop() {
106
- if ! tmux list-panes -t harness-studio 2>/dev/null | grep -q .; then
107
- echo -e " ${RED}tmux session not found.${RESET}"
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 "$AGENT_PANE" C-c
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"
@@ -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. Launch Claude in Agent Session (needs interactive shell, so use send-keys)
102
- # Prefix with unset to avoid nvm warnings
103
- tmux send-keys -t "$PANE_AGENT" "unset npm_config_prefix 2>/dev/null; $CLAUDE_CMD" Enter
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"