elementor-mcp-agent 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -71,7 +71,7 @@ The `ssh` block is **optional** but unlocks **8 additional tools** (WP-CLI escap
71
71
 
72
72
  ---
73
73
 
74
- ## Tools (24)
74
+ ## Tools (34)
75
75
 
76
76
  ### Sites & health
77
77
  - `list_sites` — enumerate the pool
@@ -104,11 +104,54 @@ The `ssh` block is **optional** but unlocks **8 additional tools** (WP-CLI escap
104
104
  - `screenshot_page` — headless Chrome PNG of any URL
105
105
  - `compare_screenshots` — SHA-256 + byte-delta
106
106
 
107
+ ### Widgets (v1.1 — widget-level CRUD)
108
+ - `read_widget` — fetch one widget by id (read-only)
109
+ - `update_widget_settings` — shallow-merge settings, with backup + validate + flush
110
+ - `delete_widget` — remove a widget from its parent container
111
+ - `duplicate_widget` — clone as sibling with fresh id
112
+ - `swap_widget_type` — replace widgetType + settings, preserve id + position
113
+ - `add_widget` — append a widget into a parent container
114
+ - `move_widget` — move a widget between containers (with position)
115
+
116
+ ### Bulk & fleet (v1.1)
117
+ - `bulk_find_replace_site` — find/replace across every Elementor page of one site, per-page backup + validate + flush
118
+ - `fleet_find_replace` — same across **every site in the pool** (sequential, dry-run mandatory)
119
+ - `restore_from_file` — restore `_elementor_data` from a JSON file backup, with pre-restore safety backup
120
+
107
121
  ### Fleet
108
122
  - `check_elementor_versions` — flag outdated installs against wordpress.org latest
109
123
 
110
124
  ---
111
125
 
126
+ ## Post-write verification (v1.2)
127
+
128
+ Every mutating widget tool re-reads the page from canonical WP **after the
129
+ write** and surfaces persisted state to the model. The HTTP write API can
130
+ lie — return 200 OK while plugin filters or REST quirks silently drop the
131
+ payload. This contract makes that observable.
132
+
133
+ Every `applied` response carries:
134
+
135
+ ```jsonc
136
+ {
137
+ "mutated": true, // false = no-op OR silent drop
138
+ "warnings": [], // non-fatal issues
139
+ "verification": {
140
+ "method": "Re-read /wp/v2/pages/42 and check widget abc settings…",
141
+ "reread_ok": true,
142
+ "matches_requested": true, // false = write API lied
143
+ "persisted": { /* canonical state */ },
144
+ "notes": "…explanation when something diverged"
145
+ }
146
+ }
147
+ ```
148
+
149
+ If `verification.matches_requested === false`, treat as a failure even if
150
+ the HTTP layer said OK. The original payload survives in
151
+ `backup_meta_key` — restore via `restore_elementor_backup`.
152
+
153
+ ---
154
+
112
155
  ## Safety guarantees
113
156
 
114
157
  Hardcoded in `src/elementor/policies.ts`:
@@ -156,15 +199,16 @@ v1.0.0 was tested in real conditions against a live WordPress install with Eleme
156
199
 
157
200
  ## Roadmap
158
201
 
159
- **v1.1**
160
- - Widget-level CRUD: `read_widget`, `update_widget_settings`, `add_widget`, `delete_widget`, `swap_widget_type`
202
+ **v1.1** ✅ shipped
203
+ - Widget-level CRUD: `read_widget`, `update_widget_settings`, `delete_widget`, `duplicate_widget`, `swap_widget_type`, `add_widget`, `move_widget`
161
204
  - `bulk_find_replace_site` (across all Elementor pages of one site)
162
- - `restore_from_file` tool
205
+ - `fleet_find_replace` (across all sites in pool)
206
+ - `restore_from_file`
163
207
 
164
208
  **v1.2**
165
- - `fleet_find_replace` (across all sites in pool)
166
209
  - Global styles read/write
167
210
  - Theme Builder template push across sites
211
+ - Section/column-level operations
168
212
 
169
213
  **v2.0**
170
214
  - WooCommerce-aware tools