alfred-agent/consolidate-workspace.sh
Commander b7785c106b Alfred Agent v2.0 — production-grade runtime with 14 service modules
Core rewrite:
- agent.js: streaming, mid-loop compaction, context tracking, skill matching
- providers.js: streamQuery() method with SSE events for Anthropic
- index.js: v2 HTTP server with 12 endpoints (/health, /chat/stream, /tokens, etc.)
- cli.js: --stream flag, /tokens, /context, /skills commands

New services:
- tokenEstimation.js: multi-strategy token counting with context warnings
- messages.js: typed message system (user/assistant/system/compact/tombstone)
- compact.js: 4-tier compaction engine (micro → auto → memory → cleanup)
- contextTracker.js: file/git/error/discovery tracking with scoring
- steering.js: per-tool safety rules (OWASP-aligned)
- skillEngine.js: SKILL.md parser with keyword triggers and hot reload
- agentFork.js: sub-agent spawning with persistent task tracking
- redact.js: Aho-Corasick secret scrubbing from tool outputs
- intent.js, memory.js, permissions.js, costTracker.js, modelRouter.js, doctor.js
2026-04-08 19:01:30 -04:00

213 lines
11 KiB
Bash
Executable File

#!/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 "═══════════════════════════════════════════════════════════════"