chess/.claude/statusline-command.sh
Christoph Wagner 5ad0700b41 refactor: Consolidate repository structure - flatten from workspace pattern
Restructured project from nested workspace pattern to flat single-repo layout.
This eliminates redundant nesting and consolidates all project files under version control.

## Migration Summary

**Before:**
```
alex/ (workspace, not versioned)
├── chess-game/ (git repo)
│   ├── js/, css/, tests/
│   └── index.html
└── docs/ (planning, not versioned)
```

**After:**
```
alex/ (git repo, everything versioned)
├── js/, css/, tests/
├── index.html
├── docs/ (project documentation)
├── planning/ (historical planning docs)
├── .gitea/ (CI/CD)
└── CLAUDE.md (configuration)
```

## Changes Made

### Structure Consolidation
- Moved all chess-game/ contents to root level
- Removed redundant chess-game/ subdirectory
- Flattened directory structure (eliminated one nesting level)

### Documentation Organization
- Moved chess-game/docs/ → docs/ (project documentation)
- Moved alex/docs/ → planning/ (historical planning documents)
- Added CLAUDE.md (workspace configuration)
- Added IMPLEMENTATION_PROMPT.md (original project prompt)

### Version Control Improvements
- All project files now under version control
- Planning documents preserved in planning/ folder
- Merged .gitignore files (workspace + project)
- Added .claude/ agent configurations

### File Updates
- Updated .gitignore to include both workspace and project excludes
- Moved README.md to root level
- All import paths remain functional (relative paths unchanged)

## Benefits

 **Simpler Structure** - One level of nesting removed
 **Complete Versioning** - All documentation now in git
 **Standard Layout** - Matches open-source project conventions
 **Easier Navigation** - Direct access to all project files
 **CI/CD Compatible** - All workflows still functional

## Technical Validation

-  Node.js environment verified
-  Dependencies installed successfully
-  Dev server starts and responds
-  All core files present and accessible
-  Git repository functional

## Files Preserved

**Implementation Files:**
- js/ (3,517 lines of code)
- css/ (4 stylesheets)
- tests/ (87 test cases)
- index.html
- package.json

**CI/CD Pipeline:**
- .gitea/workflows/ci.yml
- .gitea/workflows/release.yml

**Documentation:**
- docs/ (12+ documentation files)
- planning/ (historical planning materials)
- README.md

**Configuration:**
- jest.config.js, babel.config.cjs, playwright.config.js
- .gitignore (merged)
- CLAUDE.md

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 10:05:26 +01:00

177 lines
6.1 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Read JSON input from stdin
INPUT=$(cat)
MODEL=$(echo "$INPUT" | jq -r '.model.display_name // "Claude"')
CWD=$(echo "$INPUT" | jq -r '.workspace.current_dir // .cwd')
DIR=$(basename "$CWD")
# Replace claude-code-flow with branded name
if [ "$DIR" = "claude-code-flow" ]; then
DIR="🌊 Claude Flow"
fi
# Get git branch
BRANCH=$(cd "$CWD" 2>/dev/null && git branch --show-current 2>/dev/null)
# Start building statusline
printf "\033[1m$MODEL\033[0m in \033[36m$DIR\033[0m"
[ -n "$BRANCH" ] && printf " on \033[33m⎇ $BRANCH\033[0m"
# Claude-Flow integration
FLOW_DIR="$CWD/.claude-flow"
if [ -d "$FLOW_DIR" ]; then
printf " │"
# 1. Swarm Configuration & Topology
if [ -f "$FLOW_DIR/swarm-config.json" ]; then
STRATEGY=$(jq -r '.defaultStrategy // empty' "$FLOW_DIR/swarm-config.json" 2>/dev/null)
if [ -n "$STRATEGY" ]; then
# Map strategy to topology icon
case "$STRATEGY" in
"balanced") TOPO_ICON="⚡mesh" ;;
"conservative") TOPO_ICON="⚡hier" ;;
"aggressive") TOPO_ICON="⚡ring" ;;
*) TOPO_ICON="$STRATEGY" ;;
esac
printf " \033[35m$TOPO_ICON\033[0m"
# Count agent profiles as "configured agents"
AGENT_COUNT=$(jq -r '.agentProfiles | length' "$FLOW_DIR/swarm-config.json" 2>/dev/null)
if [ -n "$AGENT_COUNT" ] && [ "$AGENT_COUNT" != "null" ] && [ "$AGENT_COUNT" -gt 0 ]; then
printf " \033[35m🤖 $AGENT_COUNT\033[0m"
fi
fi
fi
# 2. Real-time System Metrics
if [ -f "$FLOW_DIR/metrics/system-metrics.json" ]; then
# Get latest metrics (last entry in array)
LATEST=$(jq -r '.[-1]' "$FLOW_DIR/metrics/system-metrics.json" 2>/dev/null)
if [ -n "$LATEST" ] && [ "$LATEST" != "null" ]; then
# Memory usage
MEM_PERCENT=$(echo "$LATEST" | jq -r '.memoryUsagePercent // 0' | awk '{printf "%.0f", $1}')
if [ -n "$MEM_PERCENT" ] && [ "$MEM_PERCENT" != "null" ]; then
# Color-coded memory (green <60%, yellow 60-80%, red >80%)
if [ "$MEM_PERCENT" -lt 60 ]; then
MEM_COLOR="\033[32m" # Green
elif [ "$MEM_PERCENT" -lt 80 ]; then
MEM_COLOR="\033[33m" # Yellow
else
MEM_COLOR="\033[31m" # Red
fi
printf " ${MEM_COLOR}💾 ${MEM_PERCENT}%\033[0m"
fi
# CPU load
CPU_LOAD=$(echo "$LATEST" | jq -r '.cpuLoad // 0' | awk '{printf "%.0f", $1 * 100}')
if [ -n "$CPU_LOAD" ] && [ "$CPU_LOAD" != "null" ]; then
# Color-coded CPU (green <50%, yellow 50-75%, red >75%)
if [ "$CPU_LOAD" -lt 50 ]; then
CPU_COLOR="\033[32m" # Green
elif [ "$CPU_LOAD" -lt 75 ]; then
CPU_COLOR="\033[33m" # Yellow
else
CPU_COLOR="\033[31m" # Red
fi
printf " ${CPU_COLOR}${CPU_LOAD}%\033[0m"
fi
fi
fi
# 3. Session State
if [ -f "$FLOW_DIR/session-state.json" ]; then
SESSION_ID=$(jq -r '.sessionId // empty' "$FLOW_DIR/session-state.json" 2>/dev/null)
ACTIVE=$(jq -r '.active // false' "$FLOW_DIR/session-state.json" 2>/dev/null)
if [ "$ACTIVE" = "true" ] && [ -n "$SESSION_ID" ]; then
# Show abbreviated session ID
SHORT_ID=$(echo "$SESSION_ID" | cut -d'-' -f1)
printf " \033[34m🔄 $SHORT_ID\033[0m"
fi
fi
# 4. Performance Metrics from task-metrics.json
if [ -f "$FLOW_DIR/metrics/task-metrics.json" ]; then
# Parse task metrics for success rate, avg time, and streak
METRICS=$(jq -r '
# Calculate metrics
(map(select(.success == true)) | length) as $successful |
(length) as $total |
(if $total > 0 then ($successful / $total * 100) else 0 end) as $success_rate |
(map(.duration // 0) | add / length) as $avg_duration |
# Calculate streak (consecutive successes from end)
(reverse |
reduce .[] as $task (0;
if $task.success == true then . + 1 else 0 end
)
) as $streak |
{
success_rate: $success_rate,
avg_duration: $avg_duration,
streak: $streak,
total: $total
} | @json
' "$FLOW_DIR/metrics/task-metrics.json" 2>/dev/null)
if [ -n "$METRICS" ] && [ "$METRICS" != "null" ]; then
# Success Rate
SUCCESS_RATE=$(echo "$METRICS" | jq -r '.success_rate // 0' | awk '{printf "%.0f", $1}')
TOTAL_TASKS=$(echo "$METRICS" | jq -r '.total // 0')
if [ -n "$SUCCESS_RATE" ] && [ "$TOTAL_TASKS" -gt 0 ]; then
# Color-code: Green (>80%), Yellow (60-80%), Red (<60%)
if [ "$SUCCESS_RATE" -gt 80 ]; then
SUCCESS_COLOR="\033[32m" # Green
elif [ "$SUCCESS_RATE" -ge 60 ]; then
SUCCESS_COLOR="\033[33m" # Yellow
else
SUCCESS_COLOR="\033[31m" # Red
fi
printf " ${SUCCESS_COLOR}🎯 ${SUCCESS_RATE}%\033[0m"
fi
# Average Time
AVG_TIME=$(echo "$METRICS" | jq -r '.avg_duration // 0')
if [ -n "$AVG_TIME" ] && [ "$TOTAL_TASKS" -gt 0 ]; then
# Format smartly: seconds, minutes, or hours
if [ $(echo "$AVG_TIME < 60" | bc -l 2>/dev/null || echo 0) -eq 1 ]; then
TIME_STR=$(echo "$AVG_TIME" | awk '{printf "%.1fs", $1}')
elif [ $(echo "$AVG_TIME < 3600" | bc -l 2>/dev/null || echo 0) -eq 1 ]; then
TIME_STR=$(echo "$AVG_TIME" | awk '{printf "%.1fm", $1/60}')
else
TIME_STR=$(echo "$AVG_TIME" | awk '{printf "%.1fh", $1/3600}')
fi
printf " \033[36m⏱ $TIME_STR\033[0m"
fi
# Streak (only show if > 0)
STREAK=$(echo "$METRICS" | jq -r '.streak // 0')
if [ -n "$STREAK" ] && [ "$STREAK" -gt 0 ]; then
printf " \033[91m🔥 $STREAK\033[0m"
fi
fi
fi
# 5. Active Tasks (check for task files)
if [ -d "$FLOW_DIR/tasks" ]; then
TASK_COUNT=$(find "$FLOW_DIR/tasks" -name "*.json" -type f 2>/dev/null | wc -l)
if [ "$TASK_COUNT" -gt 0 ]; then
printf " \033[36m📋 $TASK_COUNT\033[0m"
fi
fi
# 6. Check for hooks activity
if [ -f "$FLOW_DIR/hooks-state.json" ]; then
HOOKS_ACTIVE=$(jq -r '.enabled // false' "$FLOW_DIR/hooks-state.json" 2>/dev/null)
if [ "$HOOKS_ACTIVE" = "true" ]; then
printf " \033[35m🔗\033[0m"
fi
fi
fi
echo