@walwal-harness/cli 4.0.0-beta.10 → 4.0.0-beta.12

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-beta.10",
3
+ "version": "4.0.0-beta.12",
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"
@@ -92,52 +92,48 @@ if [ -n "${TMUX:-}" ]; then
92
92
  fi
93
93
 
94
94
  # ══════════════════════════════════════════
95
- # Case B: tmux 밖에 있음 → 새 세션 생성
95
+ # Case B: tmux 밖에 있음 → 새 세션 생성 + Terminal.app에서 자동 attach
96
96
  # ══════════════════════════════════════════
97
97
 
98
- # 이미 세션이 있으면 attach만
98
+ # 이미 세션이 있으면 Terminal.app에서 attach만
99
99
  if tmux has-session -t "$SESSION_NAME" 2>/dev/null; then
100
- echo "[studio] Session '$SESSION_NAME' already exists. Attaching..."
101
- echo "[studio] ATTACH_TMUX=$SESSION_NAME"
100
+ echo "[studio] Session '$SESSION_NAME' already exists. Opening Terminal..."
101
+ osascript -e "tell application \"Terminal\" to do script \"tmux attach -t $SESSION_NAME\"" 2>/dev/null \
102
+ || echo "[studio] ATTACH_TMUX=$SESSION_NAME"
103
+ echo "[studio] OPENED_TERMINAL=true"
102
104
  exit 0
103
105
  fi
104
106
 
105
107
  echo "[studio] Creating new tmux session with 3-column layout..."
106
108
 
107
- # 1. 새 세션 → Left pane (Claude 실행)
108
- PANE_MAIN=$(tmux new-session -d -s "$SESSION_NAME" -c "$PROJECT_ROOT" -x 220 -y 55 \
109
- -P -F '#{pane_id}')
110
-
111
- # 2. Left 35% | Right 65%
112
- PANE_MID=$(tmux split-window -h -p 65 -t "$PANE_MAIN" -c "$PROJECT_ROOT" \
109
+ # 1. 새 세션 → Left pane (Dashboard 전용 — Claude 현재 세션에서 계속)
110
+ PANE_DASH=$(tmux new-session -d -s "$SESSION_NAME" -c "$PROJECT_ROOT" -x 220 -y 55 \
113
111
  -P -F '#{pane_id}' \
114
112
  "bash --norc --noprofile -c 'exec bash \"${SCRIPT_DIR}/harness-dashboard-v4.sh\" \"${PROJECT_ROOT}\"'")
115
113
 
116
- # 3. Middle 45% | Right 55%
117
- PANE_RIGHT=$(tmux split-window -h -p 55 -t "$PANE_MID" -c "$PROJECT_ROOT" \
114
+ # 2. Split: Dashboard | Monitor
115
+ PANE_RIGHT=$(tmux split-window -h -p 50 -t "$PANE_DASH" -c "$PROJECT_ROOT" \
118
116
  -P -F '#{pane_id}' \
119
117
  "bash --norc --noprofile -c 'exec bash \"${SCRIPT_DIR}/harness-monitor.sh\" \"${PROJECT_ROOT}\"'")
120
118
 
121
- # 4. Dashboard top 45% | History bottom 55%
122
- PANE_HISTORY=$(tmux split-window -v -p 55 -t "$PANE_MID" -c "$PROJECT_ROOT" \
119
+ # 3. Split Dashboard vertically: Dashboard top | History bottom
120
+ PANE_HISTORY=$(tmux split-window -v -p 55 -t "$PANE_DASH" -c "$PROJECT_ROOT" \
123
121
  -P -F '#{pane_id}' \
124
122
  "bash --norc --noprofile -c 'exec bash \"${SCRIPT_DIR}/harness-prompt-history.sh\" \"${PROJECT_ROOT}\"'")
125
123
 
126
- # 5. Left pane에서 Claude 자동 실행
127
- tmux send-keys -t "$PANE_MAIN" "unset npm_config_prefix 2>/dev/null" Enter
128
- tmux send-keys -t "$PANE_MAIN" "clear && $CLAUDE_CMD" Enter
129
-
130
124
  # Pane titles
131
- tmux select-pane -t "$PANE_MAIN" -T "Lead (Claude)"
132
- tmux select-pane -t "$PANE_MID" -T "Dashboard"
125
+ tmux select-pane -t "$PANE_DASH" -T "Dashboard"
133
126
  tmux select-pane -t "$PANE_HISTORY" -T "Command History"
134
127
  tmux select-pane -t "$PANE_RIGHT" -T "Team Monitor"
135
128
 
136
129
  tmux set-option -t "$SESSION_NAME" pane-border-status top 2>/dev/null || true
137
130
  tmux set-option -t "$SESSION_NAME" pane-border-format " #{pane_title} " 2>/dev/null || true
138
131
 
139
- # Focus on Claude pane
140
- tmux select-pane -t "$PANE_MAIN"
132
+ # Terminal.app에서 자동으로 tmux attach
133
+ osascript -e "tell application \"Terminal\"
134
+ activate
135
+ do script \"tmux attach -t $SESSION_NAME\"
136
+ end tell" 2>/dev/null
141
137
 
142
138
  echo "[studio] Session '$SESSION_NAME' created."
143
- echo "[studio] ATTACH_TMUX=$SESSION_NAME"
139
+ echo "[studio] OPENED_TERMINAL=true"
@@ -16,19 +16,8 @@ bash scripts/harness-studio-setup.sh .
16
16
 
17
17
  스크립트 출력을 확인합니다:
18
18
 
19
- - **`Layout ready`** → 현재 터미널에 split 완료. 바로 Step 1로.
20
- - **`ATTACH_TMUX=harness-studio`** → 새 tmux 세션이 생성됨 (tmux 밖에서 실행한 경우).
21
- 사용자에게 아래 안내를 출력하고 **STOP**합니다:
22
-
23
- ```
24
- Studio 레이아웃이 준비되었습니다!
25
- 다른 터미널에서 아래 명령을 실행하세요:
26
-
27
- tmux attach -t harness-studio
28
-
29
- 새 창에서 Claude가 자동 실행됩니다. 거기서 "팀 가동"을 입력하면 Teams가 시작됩니다.
30
- ```
31
-
19
+ - **`Layout ready`** → tmux 안에서 split 완료. 바로 Step 1로.
20
+ - **`OPENED_TERMINAL=true`** → 새 Terminal.app 창에 Studio가 자동으로 열림. 바로 Step 1로.
32
21
  - **`already set up`** → 이미 구축됨. 바로 Step 1로.
33
22
 
34
23
  ## Step 1: Queue 초기화
@@ -1,19 +1,30 @@
1
1
  ---
2
2
  name: harness-team-stop
3
- description: "v4 Agent Teams 중지. 실행 중인 Teammate 모두 해산한다. 트리거: '/harness-team-stop', 'team 중지', 'agent team 멈춰', '팀 멈춰', '팀 중지'"
3
+ description: "v4 Agent Teams 중지 + Studio 정리. 실행 중인 Teammate 해산, tmux 세션 종료. 트리거: '/harness-team-stop', 'team 중지', 'agent team 멈춰', '팀 멈춰', '팀 중지'"
4
4
  disable-model-invocation: false
5
5
  ---
6
6
 
7
7
  # /harness-team-stop — Agent Teams 중지
8
8
 
9
- ## 실행
9
+ ## Step 1: Queue 상태 저장
10
10
 
11
- 모든 Teammate에게 현재 작업을 마무리하고 종료하라고 메시지를 보내세요.
11
+ 현재 in_progress feature를 ready로 복구합니다 (재시작 이어서 가능):
12
12
 
13
- Queue 상태는 보존되므로, `/harness-team-action`으로 다시 시작할 수 있습니다.
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
+ ```
14
23
 
15
- ## 재시작
24
+ ## Step 3: 완료 안내
16
25
 
17
26
  ```
18
- /harness-team-action
27
+ Teams 중지 완료.
28
+ - Queue 상태 보존됨 (in_progress → ready로 복구)
29
+ - 재시작: /harness-team-action
19
30
  ```