forge-pipeline 0.7.0 → 0.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.
Files changed (3) hide show
  1. package/forge +52 -3
  2. package/lib/prompts.sh +1 -1
  3. package/package.json +1 -1
package/forge CHANGED
@@ -388,16 +388,18 @@ forge_dashboard() {
388
388
  local sessions
389
389
  sessions="$(tmux list-sessions -F '#{session_name}' 2>/dev/null | grep "^forge-" || true)"
390
390
 
391
+ local has_agents=false
392
+
393
+ # ── Tmux agents (background) ──
391
394
  if [ -n "$sessions" ]; then
395
+ has_agents=true
392
396
  while IFS= read -r session; do
393
397
  local agent_name="${session#forge-}"
394
398
  local status_icon="${GREEN}● running${RESET}"
395
399
  local last_line=""
396
400
 
397
- # Check for log file
398
401
  local log_file="$forge_root/.forge/logs/${agent_name}.log"
399
402
  if [ -f "$log_file" ]; then
400
- # Get last non-empty line, strip ANSI codes, truncate
401
403
  last_line="$(tail -5 "$log_file" 2>/dev/null | grep -v '^$' | tail -1 | sed 's/\x1b\[[0-9;]*m//g' | head -c 50 || true)"
402
404
  fi
403
405
 
@@ -405,11 +407,45 @@ forge_dashboard() {
405
407
  done <<< "$sessions"
406
408
  fi
407
409
 
410
+ # ── Foreground agents (detected via recent log activity) ──
411
+ local now_ts
412
+ now_ts=$(date +%s)
413
+ if [ -d "$forge_root/.forge/logs" ]; then
414
+ for log_file in "$forge_root/.forge/logs"/*.log; do
415
+ [ -f "$log_file" ] || continue
416
+ local agent_name
417
+ agent_name="$(basename "$log_file" .log)"
418
+
419
+ # Skip if already shown as tmux session
420
+ if tmux has-session -t "forge-${agent_name}" 2>/dev/null; then
421
+ continue
422
+ fi
423
+
424
+ # Skip if already done
425
+ if [ -f "$forge_root/.forge/status/${agent_name}.done" ]; then
426
+ continue
427
+ fi
428
+
429
+ # Check if log was modified in the last 30 seconds (actively running)
430
+ local file_mtime
431
+ file_mtime=$(stat -f %m "$log_file" 2>/dev/null || stat -c %Y "$log_file" 2>/dev/null || echo 0)
432
+ local age=$((now_ts - file_mtime))
433
+
434
+ if [ "$age" -lt 30 ]; then
435
+ has_agents=true
436
+ local last_line
437
+ last_line="$(tail -5 "$log_file" 2>/dev/null | grep -v '^$' | tail -1 | sed 's/\x1b\[[0-9;]*m//g' | head -c 50 || true)"
438
+ printf " %-28s ${YELLOW}● active${RESET} %s\n" "$agent_name" "$last_line"
439
+ fi
440
+ done
441
+ fi
442
+
408
443
  # ── Completed agents ──
409
444
  local done_files
410
445
  done_files="$(find "$forge_root/.forge/status" -name "*.done" -not -name "spec.done" -not -name "plan.done" -not -name "implement.done" -not -name "integrate.done" -not -name "audit.done" -not -name "fix.done" -not -name "finalize.done" 2>/dev/null || true)"
411
446
 
412
447
  if [ -n "$done_files" ]; then
448
+ has_agents=true
413
449
  while IFS= read -r done_file; do
414
450
  local agent_name
415
451
  agent_name="$(basename "$done_file" .done)"
@@ -423,7 +459,7 @@ forge_dashboard() {
423
459
  done <<< "$done_files"
424
460
  fi
425
461
 
426
- if [ -z "$sessions" ] && [ -z "$done_files" ]; then
462
+ if [ "$has_agents" = false ]; then
427
463
  printf " ${DIM}(no agents yet)${RESET}\n"
428
464
  fi
429
465
 
@@ -435,6 +471,19 @@ forge_dashboard() {
435
471
  total_expected=$(find "$forge_root/.forge/status" -name "*.expected" 2>/dev/null | wc -l | tr -d ' ')
436
472
  local running_count=0
437
473
  [ -n "$sessions" ] && running_count=$(echo "$sessions" | wc -l | tr -d ' ')
474
+ # Count foreground agents (logs modified in last 30s without .done)
475
+ if [ -d "$forge_root/.forge/logs" ]; then
476
+ for lf in "$forge_root/.forge/logs"/*.log; do
477
+ [ -f "$lf" ] || continue
478
+ local an
479
+ an="$(basename "$lf" .log)"
480
+ tmux has-session -t "forge-${an}" 2>/dev/null && continue
481
+ [ -f "$forge_root/.forge/status/${an}.done" ] && continue
482
+ local mt
483
+ mt=$(stat -f %m "$lf" 2>/dev/null || stat -c %Y "$lf" 2>/dev/null || echo 0)
484
+ [ $((now_ts - mt)) -lt 30 ] && running_count=$((running_count + 1))
485
+ done
486
+ fi
438
487
 
439
488
  printf " ${BOLD}Running:${RESET} %d ${BOLD}Done:${RESET} %d" "$running_count" "$total_done"
440
489
  if [ "$total_expected" -gt 0 ]; then
package/lib/prompts.sh CHANGED
@@ -98,7 +98,7 @@ build_allowed_tools() {
98
98
  tools="Read,Write,Bash(find),Bash(cat),Bash(ls)"
99
99
  ;;
100
100
  coordinator)
101
- tools="Read,Write,Bash(find),Bash(cat),Bash(ls)"
101
+ tools="Read,Write"
102
102
  ;;
103
103
  integration)
104
104
  tools="Read,Write,Bash"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "forge-pipeline",
3
- "version": "0.7.0",
3
+ "version": "0.7.2",
4
4
  "description": "Autonomous multi-agent coding pipeline",
5
5
  "bin": {
6
6
  "forge": "./bin/forge.js"