@walwal-harness/cli 5.0.4 → 5.0.6
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/bin/init.js +26 -3
- package/package.json +1 -1
- package/scripts/harness-tmux.sh +8 -17
package/bin/init.js
CHANGED
|
@@ -524,16 +524,39 @@ function installAgentTeamsEnv() {
|
|
|
524
524
|
try { settings = JSON.parse(fs.readFileSync(settingsPath, 'utf8')); } catch (e) {}
|
|
525
525
|
}
|
|
526
526
|
|
|
527
|
-
|
|
527
|
+
let changed = false;
|
|
528
528
|
|
|
529
|
+
// Enable Agent Teams env var
|
|
530
|
+
if (!settings.env) settings.env = {};
|
|
529
531
|
if (settings.env['CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS'] !== '1') {
|
|
530
532
|
settings.env['CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS'] = '1';
|
|
531
|
-
|
|
532
|
-
fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n');
|
|
533
|
+
changed = true;
|
|
533
534
|
log('Agent Teams enabled (CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1)');
|
|
534
535
|
} else {
|
|
535
536
|
log('Agent Teams already enabled');
|
|
536
537
|
}
|
|
538
|
+
|
|
539
|
+
// Add git worktree permission for Team Mode isolation
|
|
540
|
+
if (!settings.permissions) settings.permissions = {};
|
|
541
|
+
if (!settings.permissions.allow) settings.permissions.allow = [];
|
|
542
|
+
const worktreePerms = [
|
|
543
|
+
'Bash(git worktree *)',
|
|
544
|
+
'Bash(git checkout *)',
|
|
545
|
+
'Bash(git merge *)',
|
|
546
|
+
'Bash(git branch *)'
|
|
547
|
+
];
|
|
548
|
+
for (const perm of worktreePerms) {
|
|
549
|
+
if (!settings.permissions.allow.includes(perm)) {
|
|
550
|
+
settings.permissions.allow.push(perm);
|
|
551
|
+
changed = true;
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
if (changed) {
|
|
556
|
+
ensureDir(path.dirname(settingsPath));
|
|
557
|
+
fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n');
|
|
558
|
+
log('Git worktree permissions added for Team Mode isolation');
|
|
559
|
+
}
|
|
537
560
|
}
|
|
538
561
|
|
|
539
562
|
function setupAgentsMd() {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@walwal-harness/cli",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.6",
|
|
4
4
|
"description": "Production harness for AI agent engineering — Solo/Team mode, Planner, Generator(BE/FE), Evaluator(Func/Visual), optional Brainstormer. Supports React, Next.js, and Flutter FE stacks.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"walwal-harness": "bin/init.js"
|
package/scripts/harness-tmux.sh
CHANGED
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
#
|
|
4
4
|
# Team Mode (--team):
|
|
5
5
|
# ┌──────────────┬──────────────┬──────────────┐
|
|
6
|
-
# │
|
|
7
|
-
# │
|
|
8
|
-
# │
|
|
9
|
-
#
|
|
10
|
-
# │
|
|
11
|
-
# │
|
|
12
|
-
# │
|
|
6
|
+
# │ │ │ TEAM 1 │
|
|
7
|
+
# │ Prompt │ Dashboard │ Gen | Eval │
|
|
8
|
+
# │ History │ (queue + ├──────────────┤
|
|
9
|
+
# │ │ status + │ TEAM 2 │
|
|
10
|
+
# │ │ archive) │ Gen | Eval │
|
|
11
|
+
# │ │ ├──────────────┤
|
|
12
|
+
# │ │ │ TEAM 3 │
|
|
13
13
|
# └──────────────┴──────────────┴──────────────┘
|
|
14
14
|
#
|
|
15
15
|
# Rendering strategy:
|
|
@@ -124,12 +124,6 @@ launch_iterm2_team() {
|
|
|
124
124
|
end tell
|
|
125
125
|
end tell
|
|
126
126
|
end tell
|
|
127
|
-
|
|
128
|
-
-- Split down → Controller (bottom-left)
|
|
129
|
-
set ctrlPane to (split horizontally with default profile)
|
|
130
|
-
tell ctrlPane
|
|
131
|
-
write text "cd '${PROJECT_ROOT}' && clear"
|
|
132
|
-
end tell
|
|
133
127
|
end tell
|
|
134
128
|
end tell
|
|
135
129
|
end tell
|
|
@@ -185,19 +179,16 @@ launch_tmux_team() {
|
|
|
185
179
|
"bash --norc --noprofile -c 'exec bash \"${SCRIPT_DIR}/harness-monitor.sh\" \"${PROJECT_ROOT}\" --team 2'")
|
|
186
180
|
PANE_T3=$(tmux split-window -v -p 50 -t "$PANE_T2" -c "$PROJECT_ROOT" -P -F '#{pane_id}' \
|
|
187
181
|
"bash --norc --noprofile -c 'exec bash \"${SCRIPT_DIR}/harness-monitor.sh\" \"${PROJECT_ROOT}\" --team 3'")
|
|
188
|
-
PANE_CTRL=$(tmux split-window -v -p 55 -t "$PANE_LEFT" -c "$PROJECT_ROOT" -P -F '#{pane_id}')
|
|
189
182
|
|
|
190
183
|
tmux send-keys -t "$PANE_LEFT" "bash \"${SCRIPT_DIR}/harness-prompt-history.sh\" \"${PROJECT_ROOT}\"" Enter
|
|
191
184
|
tmux send-keys -t "$PANE_MID" "bash \"${SCRIPT_DIR}/harness-dashboard.sh\" \"${PROJECT_ROOT}\"" Enter
|
|
192
|
-
tmux send-keys -t "$PANE_CTRL" "clear" Enter
|
|
193
185
|
|
|
194
186
|
tmux select-pane -t "$PANE_LEFT" -T "Prompt History"
|
|
195
|
-
tmux select-pane -t "$PANE_CTRL" -T "Controller"
|
|
196
187
|
tmux select-pane -t "$PANE_MID" -T "Dashboard"
|
|
197
188
|
tmux select-pane -t "$PANE_T1" -T "TEAM 1"
|
|
198
189
|
tmux select-pane -t "$PANE_T2" -T "TEAM 2"
|
|
199
190
|
tmux select-pane -t "$PANE_T3" -T "TEAM 3"
|
|
200
|
-
tmux select-pane -t "$
|
|
191
|
+
tmux select-pane -t "$PANE_LEFT"
|
|
201
192
|
|
|
202
193
|
tmux set-option -t "$SESSION_NAME" pane-border-status top 2>/dev/null || true
|
|
203
194
|
tmux set-option -t "$SESSION_NAME" pane-border-format " #{pane_title} " 2>/dev/null || true
|