@walwal-harness/cli 4.0.0-alpha.2 → 4.0.0-alpha.3

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": "4.0.0-alpha.2",
3
+ "version": "4.0.0-alpha.3",
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"
@@ -1,14 +1,17 @@
1
1
  #!/bin/bash
2
- # harness-studio-v4.sh — Harness Studio v4: Parallel Agent Teams
2
+ # harness-studio-v4.sh — Harness Studio v4: 3-Column Layout
3
3
  #
4
- # ┌──────────────────────┬─────────────────────────┐
5
- # │ Dashboard │ Team 1 (worker log)
6
- # │ (Queue + Teams + ├─────────────────────────┤
7
- # │ Feature status) Team 2 (worker log)
8
- # ├──────────────────────┤
9
- # │ Control ├─────────────────────────┤
10
- # │ harness> _ │ Team 3 (worker log) │
11
- # └──────────────────────┴─────────────────────────┘
4
+ # ┌──────────────┬──────────────┬──────────────┐
5
+ # │ │ │ Team 1
6
+ # │ │ ├──────────────┤
7
+ # │ Main │ Dashboard Team 2
8
+ # │ (Claude) │ (read-only) ├──────────────┤
9
+ # │ │ │ Team 3 │
10
+ # └──────────────┴──────────────┴──────────────┘
11
+ #
12
+ # Main: 사용자가 직접 Claude Code를 실행하는 대화형 세션
13
+ # Dashboard: feature-queue + team status 자동 갱신 (입력 불가)
14
+ # Team 1~3: claude -p headless worker (입력 불가, 로그만 표시)
12
15
  #
13
16
  # Usage:
14
17
  # bash scripts/harness-studio-v4.sh [project-root]
@@ -20,7 +23,6 @@ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
20
23
  SESSION_NAME="harness-v4"
21
24
 
22
25
  PROJECT_ROOT=""
23
- KILL=false
24
26
 
25
27
  for arg in "$@"; do
26
28
  case "$arg" in
@@ -60,37 +62,39 @@ if [ ! -f "$QUEUE" ]; then
60
62
  fi
61
63
 
62
64
  # ══════════════════════════════════════════
63
- # Build 5-pane layout using explicit pane IDs
65
+ # 3-Column Layout (Main | Dashboard | Teams)
64
66
  # ══════════════════════════════════════════
65
67
 
66
- # 1. Dashboard (top-left)
67
- PANE_DASH=$(tmux new-session -d -s "$SESSION_NAME" -c "$PROJECT_ROOT" -x 200 -y 50 \
68
+ # Column 1: Main (interactive shell — user runs claude here)
69
+ PANE_MAIN=$(tmux new-session -d -s "$SESSION_NAME" -c "$PROJECT_ROOT" -x 220 -y 55 \
70
+ -P -F '#{pane_id}')
71
+
72
+ # Column 2: Dashboard (split right from Main, 66% remaining → 33% each of 3 cols)
73
+ PANE_DASH=$(tmux split-window -h -p 66 -t "$PANE_MAIN" -c "$PROJECT_ROOT" \
68
74
  -P -F '#{pane_id}' \
69
75
  "bash --norc --noprofile -c 'exec bash \"${SCRIPT_DIR}/harness-dashboard-v4.sh\" \"${PROJECT_ROOT}\"'")
70
76
 
71
- # 2. Team 1 (top-right)
77
+ # Column 3: Team 1 (split right from Dashboard, 50% of remaining = 33% total)
72
78
  PANE_T1=$(tmux split-window -h -p 50 -t "$PANE_DASH" -c "$PROJECT_ROOT" \
73
79
  -P -F '#{pane_id}' \
74
80
  "bash --norc --noprofile -c 'exec bash \"${SCRIPT_DIR}/harness-team-worker.sh\" 1 \"${PROJECT_ROOT}\"'")
75
81
 
76
- # 3. Control (bottom-left, 25% of left)
77
- PANE_CTRL=$(tmux split-window -v -p 25 -t "$PANE_DASH" -c "$PROJECT_ROOT" \
78
- -P -F '#{pane_id}' \
79
- "bash --norc --noprofile -c 'exec bash \"${SCRIPT_DIR}/harness-control-v4.sh\" \"${PROJECT_ROOT}\"'")
80
-
81
- # 4. Team 2 (middle-right, split from Team 1)
82
+ # Team 2 (split below Team 1)
82
83
  PANE_T2=$(tmux split-window -v -p 66 -t "$PANE_T1" -c "$PROJECT_ROOT" \
83
84
  -P -F '#{pane_id}' \
84
85
  "bash --norc --noprofile -c 'exec bash \"${SCRIPT_DIR}/harness-team-worker.sh\" 2 \"${PROJECT_ROOT}\"'")
85
86
 
86
- # 5. Team 3 (bottom-right, split from Team 2)
87
+ # Team 3 (split below Team 2)
87
88
  PANE_T3=$(tmux split-window -v -p 50 -t "$PANE_T2" -c "$PROJECT_ROOT" \
88
89
  -P -F '#{pane_id}' \
89
90
  "bash --norc --noprofile -c 'exec bash \"${SCRIPT_DIR}/harness-team-worker.sh\" 3 \"${PROJECT_ROOT}\"'")
90
91
 
92
+ # ── Prepare Main pane (unset nvm noise, clear) ──
93
+ tmux send-keys -t "$PANE_MAIN" "unset npm_config_prefix 2>/dev/null; clear" Enter
94
+
91
95
  # ── Pane titles ──
96
+ tmux select-pane -t "$PANE_MAIN" -T "Main"
92
97
  tmux select-pane -t "$PANE_DASH" -T "Dashboard"
93
- tmux select-pane -t "$PANE_CTRL" -T "Control"
94
98
  tmux select-pane -t "$PANE_T1" -T "Team 1"
95
99
  tmux select-pane -t "$PANE_T2" -T "Team 2"
96
100
  tmux select-pane -t "$PANE_T3" -T "Team 3"
@@ -98,18 +102,18 @@ tmux select-pane -t "$PANE_T3" -T "Team 3"
98
102
  tmux set-option -t "$SESSION_NAME" pane-border-status top 2>/dev/null || true
99
103
  tmux set-option -t "$SESSION_NAME" pane-border-format " #{pane_title} " 2>/dev/null || true
100
104
 
101
- # Focus Control
102
- tmux select-pane -t "$PANE_CTRL"
105
+ # ── Focus Main pane ──
106
+ tmux select-pane -t "$PANE_MAIN"
103
107
 
104
- # Attach
108
+ # ── Attach ──
105
109
  if [ -n "${TMUX:-}" ]; then
106
110
  tmux switch-client -t "$SESSION_NAME"
107
111
  else
108
112
  echo ""
109
113
  echo "Launching Harness Studio v4..."
110
- echo " Dashboard (left) : Feature Queue + Team status"
111
- echo " Control (left↓) : start/pause/assign/requeue"
112
- echo " Team 1-3 (right) : Parallel worker logs"
114
+ echo " Main (left) : Interactive run 'claude' here"
115
+ echo " Dashboard (mid) : Feature Queue + Team status (auto-refresh)"
116
+ echo " Team 1-3 (right) : Parallel workers (headless, log only)"
113
117
  echo ""
114
118
  tmux attach -t "$SESSION_NAME"
115
119
  fi