Files
fireclaw/scripts/update.sh

84 lines
2.7 KiB
Bash
Executable File

#!/bin/bash
# Update fireclaw agent code and skills in the rootfs.
# Stops the overseer, patches the rootfs, rebuilds snapshot, restarts.
#
# Usage: ./scripts/update.sh
set -euo pipefail
log() { echo -e "\033[1;34m[fireclaw]\033[0m $*"; }
step() { echo -e "\n\033[1;32m━━━ $* ━━━\033[0m"; }
ok() { echo -e " \033[0;32m✓\033[0m $*"; }
err() { echo -e "\033[1;31m[error]\033[0m $*" >&2; exit 1; }
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
FIRECLAW_DIR="$HOME/.fireclaw"
ROOTFS="$FIRECLAW_DIR/agent-rootfs.ext4"
MNT="/tmp/fireclaw-update-mnt"
[[ ! -f "$ROOTFS" ]] && err "No rootfs found at $ROOTFS — run install.sh first."
# ─── Stop overseer ──────────────────────────────────────────────────
step "Stop overseer"
if systemctl is-active --quiet fireclaw-overseer 2>/dev/null; then
sudo systemctl stop fireclaw-overseer
ok "Overseer stopped"
else
ok "Overseer not running"
fi
# Wait for any firecracker processes to exit
sleep 1
# ─── Build TypeScript ───────────────────────────────────────────────
step "Build TypeScript"
cd "$SCRIPT_DIR"
npm run build
ok "TypeScript compiled"
# ─── Patch rootfs ───────────────────────────────────────────────────
step "Patch rootfs"
sudo mkdir -p "$MNT"
sudo mount "$ROOTFS" "$MNT" || err "Failed to mount rootfs"
trap 'sudo umount "$MNT" 2>/dev/null; sudo rmdir "$MNT" 2>/dev/null' EXIT
sudo mkdir -p "$MNT/opt/agent" "$MNT/opt/skills"
sudo cp "$SCRIPT_DIR/agent/"*.py "$MNT/opt/agent/"
sudo chmod +x "$MNT/opt/agent/agent.py"
sudo rm -rf "$MNT/opt/skills/"*
sudo cp -r "$SCRIPT_DIR/skills/"* "$MNT/opt/skills/"
sudo chmod +x "$MNT/opt/skills/"*/run.*
sudo umount "$MNT"
sudo rmdir "$MNT"
trap - EXIT
ok "Agent + skills updated in rootfs"
# ─── Rebuild snapshot ───────────────────────────────────────────────
step "Rebuild snapshot"
rm -f "$FIRECLAW_DIR/snapshot.state" \
"$FIRECLAW_DIR/snapshot.mem" \
"$FIRECLAW_DIR/snapshot-rootfs.ext4"
fireclaw snapshot create
ok "Snapshot rebuilt"
# ─── Restart overseer ──────────────────────────────────────────────
step "Restart overseer"
sudo systemctl start fireclaw-overseer
ok "Overseer started"
echo ""
log "Update complete. Use IRC to test."