@walwal-harness/cli 5.7.1 → 5.7.2
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": "5.7.
|
|
3
|
+
"version": "5.7.2",
|
|
4
4
|
"description": "Production harness for AI agent engineering — Solo/Team mode, Planner, Generator(BE/FE), Evaluator chain (Code-Quality → Functional → Visual), optional Brainstormer. Supports React, Next.js, and Flutter FE stacks.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"walwal-harness": "bin/init.js"
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
-
# harness-gotcha-memory.sh — Gotcha
|
|
2
|
+
# harness-gotcha-memory.sh — Gotcha · Memory · Conventions pane (index view)
|
|
3
3
|
# 활성 에이전트의 gotcha를 최상단으로, 나머지는 요약(최근 3항목+총개수)으로 표시
|
|
4
|
+
# + Shared Memory 요약 + Conventions 요약 (shared + 활성 에이전트별)
|
|
4
5
|
# Usage: bash scripts/harness-gotcha-memory.sh [project-root]
|
|
5
6
|
|
|
6
7
|
set -uo pipefail
|
|
@@ -16,6 +17,7 @@ fi
|
|
|
16
17
|
|
|
17
18
|
MEMORY_FILE="$PROJECT_ROOT/.harness/memory.md"
|
|
18
19
|
GOTCHAS_DIR="$PROJECT_ROOT/.harness/gotchas"
|
|
20
|
+
CONVENTIONS_DIR="$PROJECT_ROOT/.harness/conventions"
|
|
19
21
|
PROGRESS="$PROJECT_ROOT/.harness/progress.json"
|
|
20
22
|
|
|
21
23
|
BOLD="\033[1m"
|
|
@@ -45,6 +47,12 @@ compute_signature() {
|
|
|
45
47
|
stat -f '%N %m %z' "$f" 2>/dev/null
|
|
46
48
|
done
|
|
47
49
|
fi
|
|
50
|
+
if [ -d "$CONVENTIONS_DIR" ]; then
|
|
51
|
+
for f in "$CONVENTIONS_DIR"/*.md; do
|
|
52
|
+
[ -e "$f" ] || continue
|
|
53
|
+
stat -f '%N %m %z' "$f" 2>/dev/null
|
|
54
|
+
done
|
|
55
|
+
fi
|
|
48
56
|
} | md5 -q 2>/dev/null || echo "$RANDOM"
|
|
49
57
|
}
|
|
50
58
|
|
|
@@ -115,6 +123,55 @@ render_gotcha_entry() {
|
|
|
115
123
|
fi
|
|
116
124
|
}
|
|
117
125
|
|
|
126
|
+
render_conventions_summary() {
|
|
127
|
+
if [ ! -d "$CONVENTIONS_DIR" ]; then
|
|
128
|
+
echo -e "${DIM}(conventions/ 없음)${RESET}"
|
|
129
|
+
return
|
|
130
|
+
fi
|
|
131
|
+
|
|
132
|
+
local active="$1"
|
|
133
|
+
local any=false
|
|
134
|
+
|
|
135
|
+
# Shared 먼저, 그다음 활성 에이전트, 그다음 나머지
|
|
136
|
+
local ordered_files=()
|
|
137
|
+
[ -f "$CONVENTIONS_DIR/shared.md" ] && ordered_files+=("$CONVENTIONS_DIR/shared.md")
|
|
138
|
+
if [ -n "$active" ] && [ -f "$CONVENTIONS_DIR/${active}.md" ]; then
|
|
139
|
+
ordered_files+=("$CONVENTIONS_DIR/${active}.md")
|
|
140
|
+
fi
|
|
141
|
+
for cand in "$CONVENTIONS_DIR"/*.md; do
|
|
142
|
+
[ -e "$cand" ] || continue
|
|
143
|
+
local base; base=$(basename "$cand" .md)
|
|
144
|
+
[ "$base" = "README" ] && continue
|
|
145
|
+
[ "$cand" = "$CONVENTIONS_DIR/shared.md" ] && continue
|
|
146
|
+
[ -n "$active" ] && [ "$cand" = "$CONVENTIONS_DIR/${active}.md" ] && continue
|
|
147
|
+
ordered_files+=("$cand")
|
|
148
|
+
done
|
|
149
|
+
|
|
150
|
+
for f in "${ordered_files[@]}"; do
|
|
151
|
+
[ -e "$f" ] || continue
|
|
152
|
+
local name count
|
|
153
|
+
name=$(basename "$f" .md)
|
|
154
|
+
count=$(count_items "$f")
|
|
155
|
+
if [ "$name" = "shared" ]; then
|
|
156
|
+
echo -e "${BOLD}${CYAN}▸ ${name}${RESET} ${DIM}(${count} items · shared)${RESET}"
|
|
157
|
+
elif [ -n "$active" ] && [ "$name" = "$active" ]; then
|
|
158
|
+
echo -e "${BOLD}${BG_YELLOW} ▸ ${name} ${RESET} ${DIM}(${count} items · ACTIVE)${RESET}"
|
|
159
|
+
else
|
|
160
|
+
echo -e "${BOLD}${GREEN}▸ ${name}${RESET} ${DIM}(${count} items)${RESET}"
|
|
161
|
+
fi
|
|
162
|
+
if [ "$count" -eq 0 ]; then
|
|
163
|
+
echo -e " ${DIM}(항목 없음)${RESET}"
|
|
164
|
+
else
|
|
165
|
+
recent_titles "$f" "$RECENT_N" | while IFS= read -r t; do
|
|
166
|
+
echo -e " ${DIM}·${RESET} $t"
|
|
167
|
+
done
|
|
168
|
+
fi
|
|
169
|
+
any=true
|
|
170
|
+
done
|
|
171
|
+
|
|
172
|
+
[ "$any" = "false" ] && echo -e "${DIM}(항목 없음)${RESET}"
|
|
173
|
+
}
|
|
174
|
+
|
|
118
175
|
render_memory_summary() {
|
|
119
176
|
if [ ! -f "$MEMORY_FILE" ]; then
|
|
120
177
|
echo -e "${DIM}(memory.md 없음)${RESET}"
|
|
@@ -145,7 +202,7 @@ render() {
|
|
|
145
202
|
active_file=""
|
|
146
203
|
[ -n "$active" ] && active_file=$(file_for_agent "$active")
|
|
147
204
|
|
|
148
|
-
echo -e "${BOLD}${MAGENTA}
|
|
205
|
+
echo -e "${BOLD}${MAGENTA}RULES INDEX${RESET} ${DIM}Gotcha · Memory · Conventions · $(date +%H:%M:%S) · recent=${RECENT_N} · refresh ${REFRESH_SEC}s${RESET}"
|
|
149
206
|
if [ -n "$active" ]; then
|
|
150
207
|
echo -e "${DIM}active agent:${RESET} ${BOLD}${YELLOW}${active}${RESET}"
|
|
151
208
|
else
|
|
@@ -171,6 +228,11 @@ render() {
|
|
|
171
228
|
done
|
|
172
229
|
fi
|
|
173
230
|
|
|
231
|
+
echo ""
|
|
232
|
+
echo -e "${DIM}${hr}${RESET}"
|
|
233
|
+
echo -e "${BOLD}${CYAN}▣ CONVENTIONS${RESET} ${DIM}(.harness/conventions)${RESET}"
|
|
234
|
+
render_conventions_summary "$active"
|
|
235
|
+
|
|
174
236
|
echo ""
|
|
175
237
|
echo -e "${DIM}${hr}${RESET}"
|
|
176
238
|
render_memory_summary
|
package/scripts/harness-tmux.sh
CHANGED
|
@@ -199,7 +199,7 @@ launch_tmux_team() {
|
|
|
199
199
|
|
|
200
200
|
tmux select-pane -t "$PANE_DASH" -T "Dashboard"
|
|
201
201
|
tmux select-pane -t "$PANE_ARCHIVE" -T "Archive Prompt"
|
|
202
|
-
tmux select-pane -t "$PANE_GOTCHA" -T "Gotcha
|
|
202
|
+
tmux select-pane -t "$PANE_GOTCHA" -T "Gotcha · Memory · Conventions"
|
|
203
203
|
tmux select-pane -t "$PANE_T1" -T "TEAM 1"
|
|
204
204
|
tmux select-pane -t "$PANE_T2" -T "TEAM 2"
|
|
205
205
|
tmux select-pane -t "$PANE_T3" -T "TEAM 3"
|