213 lines
11 KiB
Bash
213 lines
11 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
# ═══════════════════════════════════════════════════════════════════════════
|
||
|
|
# ALFRED WORKSPACE CONSOLIDATOR
|
||
|
|
#
|
||
|
|
# Gathers ALL session data, memories, journals, plans, playbooks,
|
||
|
|
# and archives from across every program into one unified directory.
|
||
|
|
#
|
||
|
|
# Sources consolidated:
|
||
|
|
# 1. Copilot Chat memories (13 .md files)
|
||
|
|
# 2. Cursor plans (24 .plan.md files)
|
||
|
|
# 3. GoCodeMe chat sessions, playbooks, analytics
|
||
|
|
# 4. Alfred Agent sessions (27+), transcripts, hook logs
|
||
|
|
# 5. VS Code history (2910 dirs)
|
||
|
|
# 6. Strategy docs (LAUNCH, PLAN, ROADMAP, TRIAGE, etc.)
|
||
|
|
# 7. Backup archive (95 files — todos, agents, legal, etc.)
|
||
|
|
# 8. VS Code workspace storage (14 workspaces)
|
||
|
|
#
|
||
|
|
# Output: ~/alfred-workspace-unified/
|
||
|
|
#
|
||
|
|
# Built by Commander Danny William Perez and Alfred.
|
||
|
|
# ═══════════════════════════════════════════════════════════════════════════
|
||
|
|
set -e
|
||
|
|
|
||
|
|
UNIFIED="$HOME/alfred-workspace-unified"
|
||
|
|
echo "═══════════════════════════════════════════════════════════════"
|
||
|
|
echo " ALFRED WORKSPACE CONSOLIDATOR"
|
||
|
|
echo " Target: $UNIFIED"
|
||
|
|
echo "═══════════════════════════════════════════════════════════════"
|
||
|
|
|
||
|
|
# Create structure
|
||
|
|
mkdir -p "$UNIFIED"/{memories,sessions,plans,playbooks,journals,strategy,archives,analytics,skills,hooks,history-index}
|
||
|
|
|
||
|
|
# ── 1. Copilot Chat Memories ──────────────────────────────────────
|
||
|
|
SRC="$HOME/.vscode-server/data/User/globalStorage/github.copilot-chat/memory-tool/memories"
|
||
|
|
if [ -d "$SRC" ]; then
|
||
|
|
echo "✓ Copilot memories: $(ls "$SRC"/*.md 2>/dev/null | wc -l) files"
|
||
|
|
cp -u "$SRC"/*.md "$UNIFIED/memories/" 2>/dev/null || true
|
||
|
|
fi
|
||
|
|
|
||
|
|
# ── 2. Cursor Plans ───────────────────────────────────────────────
|
||
|
|
SRC="$HOME/.cursor/plans"
|
||
|
|
if [ -d "$SRC" ]; then
|
||
|
|
echo "✓ Cursor plans: $(ls "$SRC"/*.plan.md 2>/dev/null | wc -l) files"
|
||
|
|
cp -u "$SRC"/*.plan.md "$UNIFIED/plans/" 2>/dev/null || true
|
||
|
|
cp -u "$SRC"/*.code-workspace "$UNIFIED/plans/" 2>/dev/null || true
|
||
|
|
fi
|
||
|
|
|
||
|
|
# ── 3. GoCodeMe Sessions & Data ──────────────────────────────────
|
||
|
|
SRC="$HOME/.gocodeme"
|
||
|
|
if [ -d "$SRC" ]; then
|
||
|
|
echo "✓ GoCodeMe data:"
|
||
|
|
# Chat sessions
|
||
|
|
if [ -d "$SRC/chatSessions" ]; then
|
||
|
|
mkdir -p "$UNIFIED/sessions/gocodeme"
|
||
|
|
cp -u "$SRC/chatSessions/"*.json "$UNIFIED/sessions/gocodeme/" 2>/dev/null || true
|
||
|
|
echo " - Chat sessions: $(ls "$SRC/chatSessions/"*.json 2>/dev/null | wc -l)"
|
||
|
|
fi
|
||
|
|
# Playbooks
|
||
|
|
if [ -d "$SRC/playbooks" ]; then
|
||
|
|
cp -u "$SRC/playbooks/"*.json "$UNIFIED/playbooks/" 2>/dev/null || true
|
||
|
|
echo " - Playbooks: $(ls "$SRC/playbooks/"*.json 2>/dev/null | wc -l)"
|
||
|
|
fi
|
||
|
|
# Analytics
|
||
|
|
if [ -f "$SRC/analytics/tool_usage.jsonl" ]; then
|
||
|
|
cp -u "$SRC/analytics/tool_usage.jsonl" "$UNIFIED/analytics/" 2>/dev/null || true
|
||
|
|
echo " - Analytics: $(wc -l < "$SRC/analytics/tool_usage.jsonl") tool usage events"
|
||
|
|
fi
|
||
|
|
# AI instructions
|
||
|
|
cp -u "$SRC/ai-instructions.md" "$UNIFIED/memories/gocodeme-ai-instructions.md" 2>/dev/null || true
|
||
|
|
cp -u "$SRC/settings.json" "$UNIFIED/analytics/gocodeme-settings.json" 2>/dev/null || true
|
||
|
|
fi
|
||
|
|
|
||
|
|
# ── 4. Alfred Agent Sessions ─────────────────────────────────────
|
||
|
|
SRC="$HOME/alfred-agent/data"
|
||
|
|
if [ -d "$SRC" ]; then
|
||
|
|
echo "✓ Alfred Agent data:"
|
||
|
|
# Sessions
|
||
|
|
if [ -d "$SRC/sessions" ]; then
|
||
|
|
mkdir -p "$UNIFIED/sessions/alfred-agent"
|
||
|
|
cp -u "$SRC/sessions/"*.json "$UNIFIED/sessions/alfred-agent/" 2>/dev/null || true
|
||
|
|
echo " - Sessions: $(ls "$SRC/sessions/"*.json 2>/dev/null | wc -l)"
|
||
|
|
fi
|
||
|
|
# Transcripts
|
||
|
|
if [ -d "$SRC/transcripts" ] && [ "$(ls -A "$SRC/transcripts" 2>/dev/null)" ]; then
|
||
|
|
mkdir -p "$UNIFIED/sessions/alfred-agent/transcripts"
|
||
|
|
cp -ru "$SRC/transcripts/"* "$UNIFIED/sessions/alfred-agent/transcripts/" 2>/dev/null || true
|
||
|
|
echo " - Transcripts: $(ls "$SRC/transcripts/" 2>/dev/null | wc -l)"
|
||
|
|
fi
|
||
|
|
# Hook logs
|
||
|
|
if [ -d "$SRC/hook-logs" ]; then
|
||
|
|
cp -u "$SRC/hook-logs/"* "$UNIFIED/hooks/" 2>/dev/null || true
|
||
|
|
echo " - Hook logs: $(ls "$SRC/hook-logs/" 2>/dev/null | wc -l)"
|
||
|
|
fi
|
||
|
|
# Memories
|
||
|
|
if [ -d "$SRC/memories" ] && [ "$(ls -A "$SRC/memories" 2>/dev/null)" ]; then
|
||
|
|
cp -u "$SRC/memories/"* "$UNIFIED/memories/" 2>/dev/null || true
|
||
|
|
echo " - Agent memories: $(ls "$SRC/memories/" 2>/dev/null | wc -l)"
|
||
|
|
fi
|
||
|
|
# Skills
|
||
|
|
if [ -d "$SRC/skills" ] && [ "$(ls -A "$SRC/skills" 2>/dev/null)" ]; then
|
||
|
|
cp -u "$SRC/skills/"* "$UNIFIED/skills/" 2>/dev/null || true
|
||
|
|
echo " - Skills: $(ls "$SRC/skills/" 2>/dev/null | wc -l)"
|
||
|
|
fi
|
||
|
|
# Costs
|
||
|
|
if [ -d "$SRC/costs" ] && [ "$(ls -A "$SRC/costs" 2>/dev/null)" ]; then
|
||
|
|
mkdir -p "$UNIFIED/analytics/costs"
|
||
|
|
cp -u "$SRC/costs/"* "$UNIFIED/analytics/costs/" 2>/dev/null || true
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
# ── 5. Strategy Docs ─────────────────────────────────────────────
|
||
|
|
echo "✓ Strategy docs:"
|
||
|
|
for f in \
|
||
|
|
"$HOME/ALFRED_IDE_PLATFORM_PLAN_2026-04-02.md" \
|
||
|
|
"$HOME/ALFRED_LINUX_GRAND_ROADMAP_v4-v9.md" \
|
||
|
|
"$HOME/ALFRED_LINUX_MESH_PLAN_2026-04-04.md" \
|
||
|
|
"$HOME/BULLETPROOF_PLAN_2026-04-05.md" \
|
||
|
|
"$HOME/ECOSYSTEM_LAUNCH_TRIAGE_2026-04-02.md" \
|
||
|
|
"$HOME/LAUNCH_SCOREBOARD_2026-04-02.md" \
|
||
|
|
"$HOME/LAUNCH_SCOREBOARD_2026-04-08.md" \
|
||
|
|
"$HOME/LAUNCH_CHECKPOINT_2026-04-03.md"; do
|
||
|
|
if [ -f "$f" ]; then
|
||
|
|
cp -u "$f" "$UNIFIED/strategy/"
|
||
|
|
echo " - $(basename "$f")"
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
|
||
|
|
# ── 6. Backup Archive ────────────────────────────────────────────
|
||
|
|
SRC="$HOME/.backup-archive"
|
||
|
|
if [ -d "$SRC" ]; then
|
||
|
|
echo "✓ Backup archive: $(ls "$SRC" | wc -l) files"
|
||
|
|
mkdir -p "$UNIFIED/archives/backup-archive"
|
||
|
|
cp -ru "$SRC/"* "$UNIFIED/archives/backup-archive/" 2>/dev/null || true
|
||
|
|
fi
|
||
|
|
|
||
|
|
# ── 7. VS Code History Index ─────────────────────────────────────
|
||
|
|
HIST="$HOME/.vscode-server/data/User/History"
|
||
|
|
if [ -d "$HIST" ]; then
|
||
|
|
HIST_COUNT=$(ls "$HIST" | wc -l)
|
||
|
|
echo "✓ VS Code history: $HIST_COUNT edit histories"
|
||
|
|
# Build a lightweight index (don't copy all files)
|
||
|
|
echo "# VS Code Edit History Index" > "$UNIFIED/history-index/vscode-history.md"
|
||
|
|
echo "# Generated: $(date -Iseconds)" >> "$UNIFIED/history-index/vscode-history.md"
|
||
|
|
echo "# Total: $HIST_COUNT files" >> "$UNIFIED/history-index/vscode-history.md"
|
||
|
|
echo "" >> "$UNIFIED/history-index/vscode-history.md"
|
||
|
|
for d in "$HIST"/*/; do
|
||
|
|
if [ -f "$d/entries.json" ]; then
|
||
|
|
resource=$(python3 -c "import sys,json; print(json.load(open('$d/entries.json')).get('resource','?'))" 2>/dev/null || echo "?")
|
||
|
|
entries=$(python3 -c "import sys,json; print(len(json.load(open('$d/entries.json')).get('entries',[])))" 2>/dev/null || echo "?")
|
||
|
|
echo "- $(basename "$d") | $entries edits | $resource" >> "$UNIFIED/history-index/vscode-history.md"
|
||
|
|
fi
|
||
|
|
done 2>/dev/null
|
||
|
|
fi
|
||
|
|
|
||
|
|
# ── 8. VS Code Workspace Storage Index ────────────────────────────
|
||
|
|
WS="$HOME/.vscode-server/data/User/workspaceStorage"
|
||
|
|
if [ -d "$WS" ]; then
|
||
|
|
echo "✓ VS Code workspaces: $(ls "$WS" | wc -l) workspaces"
|
||
|
|
echo "# VS Code Workspace Index" > "$UNIFIED/history-index/vscode-workspaces.md"
|
||
|
|
echo "# Generated: $(date -Iseconds)" >> "$UNIFIED/history-index/vscode-workspaces.md"
|
||
|
|
echo "" >> "$UNIFIED/history-index/vscode-workspaces.md"
|
||
|
|
for d in "$WS"/*/; do
|
||
|
|
if [ -f "$d/workspace.json" ]; then
|
||
|
|
info=$(cat "$d/workspace.json" 2>/dev/null)
|
||
|
|
echo "- $(basename "$d") | $info" >> "$UNIFIED/history-index/vscode-workspaces.md"
|
||
|
|
fi
|
||
|
|
done 2>/dev/null
|
||
|
|
fi
|
||
|
|
|
||
|
|
# ── 9. Copilot Chat Agents & Settings ─────────────────────────────
|
||
|
|
SRC="$HOME/.vscode-server/data/User/globalStorage/github.copilot-chat"
|
||
|
|
if [ -d "$SRC" ]; then
|
||
|
|
cp -u "$SRC/commandEmbeddings.json" "$UNIFIED/analytics/" 2>/dev/null || true
|
||
|
|
cp -u "$SRC/settingEmbeddings.json" "$UNIFIED/analytics/" 2>/dev/null || true
|
||
|
|
# Plan agent + Ask agent
|
||
|
|
mkdir -p "$UNIFIED/skills/copilot-agents"
|
||
|
|
cp -u "$SRC/plan-agent/Plan.agent.md" "$UNIFIED/skills/copilot-agents/" 2>/dev/null || true
|
||
|
|
cp -u "$SRC/ask-agent/Ask.agent.md" "$UNIFIED/skills/copilot-agents/" 2>/dev/null || true
|
||
|
|
echo "✓ Copilot agents & embeddings"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# ── 10. Cline/Claude Dev Data ─────────────────────────────────────
|
||
|
|
SRC="$HOME/.vscode-server/data/User/globalStorage/saoudrizwan.claude-dev"
|
||
|
|
if [ -d "$SRC" ]; then
|
||
|
|
mkdir -p "$UNIFIED/analytics/cline"
|
||
|
|
cp -u "$SRC/cache/"*.json "$UNIFIED/analytics/cline/" 2>/dev/null || true
|
||
|
|
cp -u "$SRC/settings/"*.json "$UNIFIED/analytics/cline/" 2>/dev/null || true
|
||
|
|
echo "✓ Cline/Claude Dev data"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# ── 11. Agent Backups ─────────────────────────────────────────────
|
||
|
|
if [ -d "$HOME/backups/alfred-agent" ]; then
|
||
|
|
echo "✓ Agent backups: $(ls "$HOME/backups/alfred-agent" | wc -l) snapshots"
|
||
|
|
# Just create a symlink instead of copying
|
||
|
|
ln -sfn "$HOME/backups/alfred-agent" "$UNIFIED/archives/agent-backups"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# ── Summary ───────────────────────────────────────────────────────
|
||
|
|
echo ""
|
||
|
|
echo "═══════════════════════════════════════════════════════════════"
|
||
|
|
echo " CONSOLIDATION COMPLETE"
|
||
|
|
echo "═══════════════════════════════════════════════════════════════"
|
||
|
|
echo ""
|
||
|
|
echo " Unified workspace: $UNIFIED"
|
||
|
|
echo ""
|
||
|
|
du -sh "$UNIFIED"/* 2>/dev/null | sort -rh | while read size dir; do
|
||
|
|
echo " $size $(basename "$dir")"
|
||
|
|
done
|
||
|
|
echo ""
|
||
|
|
TOTAL=$(find "$UNIFIED" -type f | wc -l)
|
||
|
|
echo " Total files: $TOTAL"
|
||
|
|
echo "═══════════════════════════════════════════════════════════════"
|