84 lines
2.7 KiB
Bash
Executable File
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."
|