Files
antigravity-skills-reference/skills/loki-mode/scripts/export-to-vibe-kanban.sh

179 lines
5.0 KiB
Bash
Executable File

#!/bin/bash
# Export Loki Mode tasks to Vibe Kanban format
# Usage: ./scripts/export-to-vibe-kanban.sh [export_dir]
set -uo pipefail
LOKI_DIR=".loki"
EXPORT_DIR="${1:-${VIBE_KANBAN_DIR:-$HOME/.vibe-kanban/loki-tasks}}"
# Colors
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
log_info() { echo -e "${GREEN}[INFO]${NC} $*"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
# Check if .loki directory exists
if [ ! -d "$LOKI_DIR" ]; then
log_warn "No .loki directory found. Run Loki Mode first."
exit 1
fi
mkdir -p "$EXPORT_DIR"
# Get current phase from orchestrator
CURRENT_PHASE="UNKNOWN"
if [ -f "$LOKI_DIR/state/orchestrator.json" ]; then
CURRENT_PHASE=$(python3 -c "import json; print(json.load(open('$LOKI_DIR/state/orchestrator.json')).get('currentPhase', 'UNKNOWN'))" 2>/dev/null || echo "UNKNOWN")
fi
# Map Loki phases to Vibe Kanban columns
phase_to_column() {
case "$1" in
BOOTSTRAP|DISCOVERY|ARCHITECTURE) echo "planning" ;;
INFRASTRUCTURE|DEVELOPMENT) echo "in-progress" ;;
QA) echo "review" ;;
DEPLOYMENT) echo "deploying" ;;
BUSINESS_OPS|GROWTH|COMPLETED) echo "done" ;;
*) echo "backlog" ;;
esac
}
# Export tasks from all queues
export_queue() {
local queue_file="$1"
local status="$2"
if [ ! -f "$queue_file" ]; then
return
fi
python3 << EOF
import json
import os
from datetime import datetime
try:
with open("$queue_file") as f:
content = f.read().strip()
if not content or content == "[]":
tasks = []
else:
tasks = json.loads(content)
except (json.JSONDecodeError, FileNotFoundError):
tasks = []
export_dir = os.path.expanduser("$EXPORT_DIR")
exported = 0
for task in tasks:
task_id = task.get('id', 'unknown')
# Determine status based on queue and claimed state
if "$status" == "pending":
vibe_status = "todo"
elif "$status" == "in-progress":
vibe_status = "doing"
elif "$status" == "completed":
vibe_status = "done"
elif "$status" == "failed":
vibe_status = "blocked"
else:
vibe_status = "todo"
# Build description from payload
payload = task.get('payload', {})
if isinstance(payload, dict):
desc_parts = []
if 'action' in payload:
desc_parts.append(f"Action: {payload['action']}")
if 'description' in payload:
desc_parts.append(payload['description'])
if 'command' in payload:
desc_parts.append(f"Command: {payload['command']}")
description = "\n".join(desc_parts) if desc_parts else json.dumps(payload, indent=2)
else:
description = str(payload)
# Get agent type for tagging
agent_type = task.get('type', 'unknown')
swarm = agent_type.split('-')[0] if '-' in agent_type else 'general'
# Priority mapping (Loki uses 1-10, higher is more important)
priority = task.get('priority', 5)
if priority >= 8:
priority_tag = "priority-high"
elif priority >= 5:
priority_tag = "priority-medium"
else:
priority_tag = "priority-low"
vibe_task = {
"id": f"loki-{task_id}",
"title": f"[{agent_type}] {payload.get('action', 'Task')}",
"description": description,
"status": vibe_status,
"agent": "claude-code",
"tags": [
agent_type,
f"swarm-{swarm}",
priority_tag,
f"phase-$CURRENT_PHASE".lower()
],
"metadata": {
"lokiTaskId": task_id,
"lokiType": agent_type,
"lokiPriority": priority,
"lokiPhase": "$CURRENT_PHASE",
"lokiRetries": task.get('retries', 0),
"createdAt": task.get('createdAt', datetime.utcnow().isoformat() + 'Z'),
"claimedBy": task.get('claimedBy'),
"lastError": task.get('lastError')
}
}
# Write task file
task_file = os.path.join(export_dir, f"{task_id}.json")
with open(task_file, 'w') as out:
json.dump(vibe_task, out, indent=2)
exported += 1
print(f"EXPORTED:{exported}")
EOF
}
log_info "Exporting Loki Mode tasks to Vibe Kanban..."
log_info "Export directory: $EXPORT_DIR"
log_info "Current phase: $CURRENT_PHASE"
TOTAL=0
# Export from each queue
for queue in pending in-progress completed failed dead-letter; do
queue_file="$LOKI_DIR/queue/${queue}.json"
if [ -f "$queue_file" ]; then
result=$(export_queue "$queue_file" "$queue")
count=$(echo "$result" | grep "EXPORTED:" | cut -d: -f2)
if [ -n "$count" ] && [ "$count" -gt 0 ]; then
log_info " $queue: $count tasks"
TOTAL=$((TOTAL + count))
fi
fi
done
# Create summary file
cat > "$EXPORT_DIR/_loki_summary.json" << EOF
{
"exportedAt": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
"currentPhase": "$CURRENT_PHASE",
"totalTasks": $TOTAL,
"lokiVersion": "$(cat VERSION 2>/dev/null || echo 'unknown')",
"column": "$(phase_to_column "$CURRENT_PHASE")"
}
EOF
log_info "Exported $TOTAL tasks total"
log_info "Summary written to $EXPORT_DIR/_loki_summary.json"