AG Sync Bridge
wordpress plugin - Ag sync bridge
by Codex · github.com/andrea52k/wordpress-plugin-ag-sync-bridge · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/andrea52k/wordpress-plugin-ag-sync-bridge/archive/refs/heads/main.zipVersione canonica del plugin WordPress ag-sync-bridge.
Il plugin sincronizza un sito WordPress locale e un sito live tramite snapshot completi, con pull manuale o auto-pull settimanale sul locale, push manuale protetto verso il live, cron settimanale sul live, backup locali automatici e log leggibili.
Questa repo nasce dal confronto di quattro installazioni WordPress preesistenti. I percorsi locali e i domini reali non sono documentati nella repo pubblica.
La base scelta e la variante funzionalmente piu completa, integrata con patch generiche utili trovate negli altri fork. I dettagli tecnici sono in docs/source-analysis.md.
Documentazione per agenti
Se devi modificare o gestire il plugin da un agente automatico, leggi prima:
AGENTS.mdper contesto operativo, regole e rischi noti.docs/architecture.mdper classi, opzioni, flussi pull/push e updater.docs/operations-runbook.mdper comandi WP-CLI, release, update live e troubleshooting.docs/source-analysis.mdper la scelta iniziale della base canonica.
Versione
Versione plugin: 0.1.57
Slug tecnico WordPress: ag-sync-bridge
Lo slug resta invariato per permettere aggiornamenti sicuri delle installazioni esistenti.
Cosa sincronizza
- Database completo
wp-content/uploadswp-content/mpg-uploadswp-content/pluginswp-content/themeswp-content/mu-pluginswp-config.phpcon merge sicuro dei valori ambiente-specifici sul target.htaccessopzionale- root text sicuri come
robots.txt,llms.txt,llms-full.txt,ads.txt,app-ads.txtehumans.txt - Replace URL nei dataset V4MPG supportati (
.xlsxe file testuali) durante l'import
Cosa esclude di default
wp-content/ag-sync-bridge-data/*wp-content/plugins/ag-sync-bridge/*- cache, backup vecchi, log e file temporanei configurati nei pattern di esclusione
- cache generate in
wp-content/uploads/al_opt_content/*,wp-content/mpg-cache/*ewp-content/uploads/cache/*
Il plugin esclude la propria cartella dal full overwrite per non interrompere operazioni in corso. La stessa versione del plugin va installata sia in locale sia sul live.
Funzioni principali
- Endpoint REST protetti con HMAC SHA-256, timestamp e anti-replay transient
- Aggiornamenti plugin da GitHub Releases
- Creazione snapshot live asincrona per evitare timeout HTTP durante i pull
- Download snapshot streaming, chunked JSON e raw chunked
- Upload snapshot diretto o a chunk form-encoded, compatibile con hosting che svuotano il raw body REST
- Import remoto asincrono con polling dello stato remoto
- Stop autenticato di un job remoto: annulla subito i job in coda; durante un import segnala
rollback_requiredse il target e gia stato modificato - Stop cooperativo durante export database e creazione ZIP, con rimozione del pacchetto parziale
- Errori dopo una mutazione classificati
rollback_required; nuovi job bloccati fino a verifica esplicita del recupero - Heartbeat file-backed per snapshot/import asincroni con fase, avanzamento, sequenza e classificazione
active/stale_or_orphaned - Riconciliazione autenticata a due fasi dei job stale, senza dichiarare il sync riuscito
- Aggiornamento AG Sync sul live da WP-CLI locale tramite richiesta firmata, release GitHub ufficiale, versione e SHA-256 obbligatori
- Preflight
doctorlocale/remoto per spazio, permessi e test scrittura prima dei push - Gate locale obbligatorio prima di ogni push: verifica e aggiorna plugin, temi e traduzioni; se un aggiornamento fallisce, non vengono creati snapshot e non parte alcuna chiamata al live
- Manifest snapshot con scope
full/partial, blocco dei push che riusano snapshot non completi e push selettivo file-only - Controllo root sitemap/XML per evitare DB o sitemap index che puntano a file non presenti
- Estrazione ZIP entry-by-entry con diagnostica del file che fallisce
- Pulizia automatica di snapshot, backup, incoming, temp e upload chunk dopo operazioni e fallimenti
- Backup automatico locale prima del pull
- Backup live pre-push disattivati di default, riattivabili solo da impostazione/costante
- Restore locale da backup
- Cleanup storage locale e remoto
- Lock runtime con sblocco forzato via WP-CLI
- Replace URL serializzato-safe nel database
- Replace URL anche per varianti JSON escaped (
http:\/\/...) - Replace URL nei dataset V4MPG (
.xlsxe file testuali) - Import SQL con remap prefisso tabelle e rimozione commenti MariaDB sandbox non compatibili
- Export PHP a batch con retry su perdita connessione MySQL
- Import/export CLI con limiti piu robusti per snapshot grandi
- Hook
ag_sync_bridge_after_importeseguito sul target dopo import riuscito, utile per rebuild/cache post-sync
Architettura
- Bootstrap plugin:
ag-sync-bridge.php - UI admin:
includes/class-admin-page.php - REST/API:
includes/class-rest-controller.php - Sync orchestration:
includes/class-sync-service.php - Export snapshot:
includes/class-export-service.php - Import snapshot:
includes/class-import-service.php - ZIP archive:
includes/class-archive-service.php - Database export/import/search-replace:
includes/class-database-service.php - Logging:
includes/class-logger.php - Cron:
includes/class-scheduler.php - Config/helpers:
includes/class-config.php,includes/helpers.php - WP-CLI:
includes/class-cli.php
Installazione locale
- Copia la cartella
ag-sync-bridgeinwp-content/plugins/. - Attiva il plugin in WordPress.
- Vai in
Strumenti > AG Sync Bridge. - Imposta
role = local. - Imposta URL del sito live.
- Imposta lo stesso shared secret che userai sul live.
- Salva le impostazioni.
Installazione live
- Copia la stessa cartella
ag-sync-bridgenel sito live. - Attiva il plugin.
- Vai in
Strumenti > AG Sync Bridge. - Imposta
role = remote. - Imposta lo stesso shared secret del locale.
- Configura opzionalmente
.htaccesse retention. - Salva le impostazioni.
Configurazione minima
- Stesso plugin installato e attivo su entrambi i siti
- Stesso shared secret su locale e live
- URL live configurato sul sito locale
- HTTPS consigliato sul live
- Opzionalmente, cartelle backup esterne per restore manuale
Pull live -> locale
Quando premi Aggiorna il locale dal live:
- Il locale crea un backup automatico.
- Il live accetta la richiesta e genera uno snapshot aggiornato in asincrono.
- Il locale scarica lo snapshot.
- Il locale importa il database.
- Il locale esegue replace URL live -> locale in modo serializzato-safe.
- Il locale importa file, plugin, temi, uploads e mu-plugins.
- Il locale riscrive URL live -> locale nei dataset V4MPG supportati.
- Il locale applica
wp-config.phpcon merge dei valori target. - Il plugin scrive log e aggiorna lo stato.
Il live crea automaticamente lo snapshot settimanale, ma il locale non lo scarica/importa da solo finche non attivi l'auto-pull.
Push locale -> live
Quando premi Invia il locale al live:
- Devi digitare
INVIA LIVE. - Nei push completi il locale rileva e aggiorna plugin, temi e traduzioni disponibili. Se uno step fallisce, il push si ferma prima di contattare il live. Un update di AG Sync Bridge stesso va eseguito dal normale updater WordPress e poi il push va ripetuto. Nei push parziali espliciti gli updater di plugin, temi e traduzioni vengono saltati e lo skip viene registrato, perche sono estranei ai path file-only dichiarati.
- Il locale esegue un preflight remoto su storage, permessi e test scrittura.
- Il backup live pre-push viene saltato di default per non consumare quota hosting. Quando la policy lo richiede, entrambi i peer devono usare
0.1.42o superiore e il push prosegue solo con statocompletede prova verificata dell'archivio. Un deploy parziale salva soltanto gli stessi path che verranno sovrascritti; un deploy completo conserva il backup completo. - Il locale crea uno snapshot completo.
- Lo snapshot viene validato localmente: ZIP estraibile, manifest
full, database, componenti e sitemap root coerenti. - Lo snapshot viene caricato sul live.
- Il live rifiuta snapshot non
full, salvo override esplicito di recovery. - Il live importa database e file.
- Il live esegue replace URL locale -> live.
- Il live riscrive URL locale -> live nei dataset V4MPG supportati.
- Il live esegue l'hook
ag_sync_bridge_after_importper integrazioni post-import. - Il plugin scrive log e aggiorna lo stato.
L'import sul live viene accettato in modalita asincrona, pianificato come evento WordPress cron singolo e monitorato dal locale con polling dello stato remoto. Questo evita che una chiusura SSL/proxy durante un import lungo venga interpretata come fallimento immediato del deploy.
Push selettivo file/cartelle
Da 0.1.26, il push puo inviare solo percorsi specifici dal locale al live.
Il pacchetto selettivo e file-only: non contiene database, non sostituisce
directory non richieste e non puo aggiornare AG Sync Bridge stesso.
Esempi WP-CLI:
wp agsync push --paths=robots.txt
wp agsync push --paths=.htaccess
wp agsync push --paths="robots.txt,llms.txt"
wp agsync push --paths="robots.txt,wp-content/mu-plugins/mio-file.php"
wp agsync snapshot --type=partial-test --paths=robots.txt
Nella UI admin, lascia vuoto il campo percorsi per un push completo oppure
inserisci un percorso per riga. Sono supportati percorsi sotto wp-content/,
file root espliciti come .htaccess, robots.txt, llms.txt, ads.txt e
XML. Ogni push parziale richiede un backup remoto verificato con
scope=partial e path identici al piano. Il backup è file-only; se un path non
esisteva sul live, il pacchetto registra la sua assenza per poterlo eliminare
durante un rollback. wp-config.php, core WordPress, cache, runtime AG Sync e
la cartella del plugin sono bloccati.
Auto-pull locale
- Nel sito con
role = localpuoi attivareAuto pull settimanale. - Quando e attivo, WordPress pianifica
ag_sync_bridge_weekly_pull. - Se il PC o XAMPP sono spenti, il pull non puo partire mentre il sito locale e offline.
- Quando il locale torna online, WP-Cron recupera l'esecuzione arretrata al primo accesso utile.
Backup e restore
- Backup:
wp-content/ag-sync-bridge-data/backups - Snapshot:
wp-content/ag-sync-bridge-data/snapshots - Log:
wp-content/ag-sync-bridge-data/logs - Temp/incoming/chunk upload: puliti automaticamente dopo operazioni concluse o fallite
- Restore locale disponibile dalla UI admin
- Restore da ZIP/cartella esterna configurabile nelle impostazioni
- I backup live prima dei push sono disattivati di default; se servono, abilita
Backup live prima dei pushconsapevolmente. - Da
0.1.37, il risultato distinguecompleted,skipped,disabledefailed.completedrichiede basename, archivio esistente e non vuoto e SHA-256 verificato sul live; una risposta vuota o senza prova blocca qualsiasi push che richieda quel backup.
Cron
- Snapshot settimanale live:
ag_sync_bridge_weekly_snapshot - Auto-pull settimanale locale:
ag_sync_bridge_weekly_pull - Snapshot live asincrona per pull manuale:
ag_sync_bridge_async_create_snapshot - Import remoto asincrono:
ag_sync_bridge_async_import_snapshot
WP-CLI
wp agsync status
wp agsync doctor
wp agsync doctor --deep
wp agsync snapshot --type=manual
wp agsync snapshot --type=partial-test --paths=robots.txt
wp agsync pull
wp agsync push
wp agsync push --paths=robots.txt
wp agsync push --paths=.htaccess
wp agsync push_plan --paths=robots.txt
wp agsync remote_cancel --operation-id=<id> --kind=import
wp agsync cancel
wp agsync remote_reconcile --operation-id=<id> --kind=import --action=quarantine --expected-updated-at=<timestamp> --note="Worker verificato assente" --worker-absent-verified
wp agsync remote_reconcile --operation-id=<id> --kind=import --action=close --expected-updated-at=<timestamp-quarantena> --note="Identita, pagine e dati verificati" --worker-absent-verified --target-integrity-verified
wp agsync remote_reconcile --operation-id=<id> --kind=import --action=recover --expected-updated-at=<timestamp> --note="Backup ripristinato e verificato" --rollback-verified
wp agsync remote_enable_backups --confirm="ENABLE REMOTE BACKUPS"
wp agsync remote_update_bridge --version=0.1.43 --sha256=<sha256-ag-sync-bridge.zip> --confirm="UPDATE AG SYNC"
wp agsync cleanup
wp agsync remote_cleanup
wp agsync lock
wp agsync unlock
Costanti supportate
AG_SYNC_BRIDGE_ROLEAG_SYNC_BRIDGE_REMOTE_URLAG_SYNC_BRIDGE_SHARED_SECRETAG_SYNC_BRIDGE_STORAGE_DIRAG_SYNC_BRIDGE_AUTO_PULL_ENABLEDAG_SYNC_BRIDGE_INCLUDE_HTACCESSAG_SYNC_BRIDGE_REMOTE_BACKUPS_ENABLEDAG_SYNC_BRIDGE_RETENTION_COUNTAG_SYNC_BRIDGE_REQUEST_TIMEOUTAG_SYNC_BRIDGE_EXCLUDE_PATTERNSAG_SYNC_BRIDGE_EXTERNAL_BACKUP_DIRSAG_SYNC_BRIDGE_MYSQL_BINAG_SYNC_BRIDGE_MYSQLDUMP_BINAG_SYNC_BRIDGE_ALLOW_GLOBAL_MYSQL_LIMITSAG_SYNC_BRIDGE_GITHUB_TOKEN
Aggiornamenti da GitHub
Il plugin integra un updater per WordPress basato su GitHub Releases.
Da 0.1.36, un sito configurato come local puo aggiornare il peer remote
con wp agsync remote_update_bridge. La route usa la firma HMAC AG Sync con
nonce e protezione replay e accetta solo una release vX.Y.Z del repository
ufficiale con asset esatto ag-sync-bridge.zip. Versione, SHA-256 e conferma
sono obbligatori. Downgrade, reinstallazione, cambi di versione concorrenti,
sync remoti irrisolti, ZIP non canonici e filesystem interattivi vengono
bloccati. Il checksum va calcolato sull'asset finale pubblicato.
Workflow release:
- Aggiorna
VersioneAG_SYNC_BRIDGE_VERSIONinag-sync-bridge.php. - Crea lo ZIP con
git archive, non conCompress-Archive:
git archive --format=zip --prefix=ag-sync-bridge/ -o C:/xampp/ag-sync-bridge.zip HEAD
- Verifica che lo ZIP abbia questa struttura:
ag-sync-bridge/
ag-sync-bridge.php
includes/
assets/
uninstall.php
README.md
- Pubblica una GitHub Release con tag tipo
vX.Y.Z. - Carica nella release l'asset chiamato esattamente
ag-sync-bridge.zip.
WordPress controllera l'ultima release e proporra l'aggiornamento nella schermata Plugin.
La repo GitHub attuale e pubblica, quindi non serve token.
Se in futuro la repo torna privata, ogni sito dovra avere un token GitHub con permesso di sola lettura sul repository:
define( 'AG_SYNC_BRIDGE_GITHUB_TOKEN', 'github_pat_xxx' );
Metti la costante in wp-config.php, sopra la riga /* That's all, stop editing! */.
Da 0.1.17, cliccare Bacheca > Aggiornamenti > Verifica di nuovo forza anche il refresh della cache GitHub del plugin. Le versioni precedenti possono mantenere in cache la release GitHub per alcune ore; in quel caso installa manualmente lo ZIP piu recente una volta.
Limiti tecnici
- Snapshot molto grandi possono richiedere tempi lunghi su hosting condiviso.
- Da
0.1.76, durante la manutenzione il polling di un import usa un endpoint diretto read-only, autenticato con token casuale legato alla singola operazione e senza bootstrap WordPress. Il token non viene persistito in chiaro e il fallback si attiva solo quando il REST ordinario risponde 503. - Da
0.1.35, identita URL, configurazione AG Sync e plugin attivi del target vengono ripristinati subito dopo l'import del database, prima delle fasi lunghe. Un worker terminato dall'hosting non lascia piu il live consiteurl/homee impostazioni del sito locale. - Da
0.1.28, i pull freschi richiedono AG Sync Bridge0.1.28anche sul live per creare la snapshot in asincrono; con live piu vecchi il provider puo ancora tagliare la chiamata HTTP. - Da
0.1.29, l'import viamysqlrimuove dalla sessione SQL mode i flag incompatibili con dump WordPress legacy (NO_ZERO_DATE,NO_ZERO_IN_DATE, strict modes) per evitare fallback PHP lenti. Il replace URL usa anche un percorso veloce SQL perwp_mpg_dataset_rows.row_data. - Se
ZipArchivemanca, il plugin non puo creare/importare snapshot ZIP. wp agsync push --use-existing-snapshotriusa solo snapshot marcatifull; vecchi pacchetti senza scope vengono bloccati.wp agsync push --paths=...crea un pacchetto parziale file-only. Il formato base esiste da0.1.26, ma il protocollo sicuro di backup scoped richiede0.1.42su entrambi i peer.- Da
0.1.43, un push parziale esplicito non esegue aggiornamenti automatici di plugin, temi o traduzioni estranei allo scope. I push completi mantengono la manutenzione automatica fail-closed. - Da
0.1.44,wp agsync pull --paths=...richiede0.1.44su entrambi i peer, crea uno snapshot live file-only e un backup locale partial verificato con tombstone. Scope, path e SHA-256 devono coincidere esattamente;--use-existing-snapshotnon è ammesso. wp agsync push_plan [--paths=...]mostra senza modifiche classificazione, trasferimenti, metriche full/partial e stato del rollback. Un push parziale richiede un backup remoto pre-push: senza backup abilitato viene bloccato, perché una cartella selezionata sostituisce il relativo sottoalbero sul live.wp agsync remote_cancel --operation-id=<id> --kind=snapshot|importannulla solo l'operazione remota indicata. Un import che ha gia modificato database o file restarollback_requirede va ripristinato dal backup.wp agsync cancelrichiede lo stop cooperativo dell'operazione locale attiva. Il segnale resta nel lock e viene letto durante snapshot, trasferimenti e import.- Uno stato
stale_or_orphanednon equivale a errore certo e non equivale mai a successo.remote_reconcilerichiede quarantena, attesa, nuova lettura dello stato e verifiche esplicite; la chiusura producereconciled, mantiene l'avanzamento sotto 100 e registradeclared_success: false. --recover-stale-remote-importe riservato al recupero di un importreconcile_requestede senza heartbeat: richiede--use-existing-snapshot, uno snapshotfullprodotto dallo stesso live, un import asincrono e registra l'operazione sostituita. Il peer locale autenticato HMAC è già il soggetto autorizzato a inviare snapshot completi; questi controlli limitano il percorso eccezionale e ne rendono esplicito l'audit.--allow-partial-snapshotesiste solo per recovery deliberate e puo omettere file dal live.- Il fallback PHP per import/export DB e piu lento di
mysqldump/mysql. - Da
0.1.76,.htaccessviene esportato e sovrascritto solo se abilitato; il sync generico dei file root non puo piu aggirare questa opzione. wp-config.phpviene importato con merge dei valori ambiente-specifici del target.- La cartella del plugin stesso non viene sovrascritta durante il sync.
- Nei dataset V4MPG vengono riscritti
.xlsxe file testuali; vecchi formati binari come.xlsvanno controllati manualmente.
Checklist test finale
- Attivazione plugin riuscita
- Menu
Strumenti > AG Sync Bridgevisibile - Cartelle runtime create in
wp-content/ag-sync-bridge-data - Cron settimanale registrato sul ruolo
remote - Stato connessione e schedule visibili con indicatori colore
- Test connessione riuscito
- Snapshot manuale creato correttamente
- Snapshot con scope
fulle sitemap root coerenti - Checksum SHA-256 verificato
- Validazione import package riuscita
- Pull locale da live eseguibile
- Push locale verso live protetto da conferma forte
Disinstallazione
- La deactivation rimuove il cron.
- L'uninstall rimuove le option del plugin.
- I file snapshot/backup restano sul disco salvo purge manuale o costante custom.