File size: 5,420 Bytes
b69a3ea 215d090 b69a3ea 215d090 b69a3ea 798bc63 87660f2 c54005f b69a3ea 215d090 87660f2 c54005f 798bc63 b69a3ea | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 | # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# π PATH: sync.py (root HF Space repo)
# Upload/edit file ini di:
# https://huggingface.co/spaces/mark421/OpenClaw-ai/blob/main/sync.py
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
import os
import sys
import tarfile
from huggingface_hub import HfApi, hf_hub_download
api = HfApi()
repo_id = os.getenv("HF_DATASET")
token = os.getenv("HF_TOKEN")
# File backup utama (config, sessions)
FILENAME = "latest_backup.tar.gz"
# File backup browser (chromium binary ~150MB, download sekali saja)
BROWSER_FILENAME = "browser_backup.tar.gz"
def restore():
try:
if not repo_id or not token:
print("Skip Restore: HF_DATASET or HF_TOKEN not set")
return
# Restore config & sessions
print(f"Downloading {FILENAME} from {repo_id}...")
path = hf_hub_download(
repo_id=repo_id,
filename=FILENAME,
repo_type="dataset",
token=token
)
with tarfile.open(path, "r:gz") as tar:
tar.extractall(path="/root/.openclaw/")
print(f"Success: Restored config from {FILENAME}")
except Exception as e:
print(f"Restore Note (config): {e}")
try:
if not repo_id or not token:
return
# Restore browser binary (kalau ada)
print(f"Downloading {BROWSER_FILENAME} from {repo_id}...")
browser_path = hf_hub_download(
repo_id=repo_id,
filename=BROWSER_FILENAME,
repo_type="dataset",
token=token
)
with tarfile.open(browser_path, "r:gz") as tar:
tar.extractall(path="/root/.openclaw/")
print(f"Success: Restored browser from {BROWSER_FILENAME}")
except Exception as e:
print(f"Restore Note (browser): {e} β will install fresh if needed")
def backup():
"""
Backup strategy: Always backup the entire workspace directory.
This ensures all agent workspaces (workspace, workspace-jarvis, workspace-writer, etc.)
and their memory files are included in every backup.
"""
try:
if not repo_id or not token:
print("Skip Backup: HF_DATASET or HF_TOKEN not set")
return
# ββ Backup: Always include ALL workspaces (required) ββ
with tarfile.open(FILENAME, "w:gz") as tar:
paths_to_backup = [
"/root/.openclaw/sessions",
"/root/.openclaw/agents/main/sessions",
"/root/.openclaw/agents/jarvis/sessions",
"/root/.openclaw/agents/writer/sessions",
"/root/.openclaw/agents/mp-agent/sessions",
"/root/.openclaw/agents/stocke/sessions",
"/root/.openclaw/openclaw.json",
"/root/.openclaw/credentials",
# ALWAYS backup all workspaces (full workspace requirement)
"/root/.openclaw/workspace",
"/root/.openclaw/workspace-jarvis",
"/root/.openclaw/workspace-writer",
"/root/.openclaw/workspace-mp-agent",
"/root/.openclaw/workspace-stock",
# System skills and plugins
"/usr/local/lib/node_modules/openclaw/skills",
"/usr/local/lib/node_modules/openclaw/dist/extensions",
]
for p in paths_to_backup:
if os.path.exists(p):
arcname = p.replace("/root/.openclaw/", "")
tar.add(p, arcname=arcname)
api.upload_file(
path_or_fileobj=FILENAME,
path_in_repo=FILENAME,
repo_id=repo_id,
repo_type="dataset",
token=token
)
print(f"Backup config {FILENAME} Success.")
# ββ Backup 2: browser binary (besar ~150MB, hanya upload kalau belum ada) ββ
browsers_dir = "/root/.openclaw/browsers"
if os.path.exists(browsers_dir):
# Cek apakah browser_backup sudah ada di dataset
try:
hf_hub_download(
repo_id=repo_id,
filename=BROWSER_FILENAME,
repo_type="dataset",
token=token
)
print(f"Browser backup already exists in dataset, skipping upload.")
except Exception:
# Belum ada, upload sekarang
print(f"Uploading browser backup (first time, ~150MB)...")
with tarfile.open(BROWSER_FILENAME, "w:gz") as tar:
tar.add(browsers_dir, arcname="browsers")
api.upload_file(
path_or_fileobj=BROWSER_FILENAME,
path_in_repo=BROWSER_FILENAME,
repo_id=repo_id,
repo_type="dataset",
token=token
)
print(f"Browser backup uploaded successfully.")
except Exception as e:
print(f"Backup Error: {e}")
if __name__ == "__main__":
if len(sys.argv) > 1 and sys.argv[1] == "backup":
backup()
else:
restore() |