Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
3c0d190
WIP: add Runtime\unclaimed() for moved kits, stopped at usage limit (…
wppilot-labs Sep 29, 2026
b0dc46a
Match generated client configs to the vendors' current docs
wppilot-labs Sep 29, 2026
abeb5e6
Withhold cache-plugin credential option names in the change history
wppilot-labs Sep 29, 2026
5ccb183
Undo or redo everything one agent session did
wppilot-labs Sep 29, 2026
e48a9a3
Serve WPPilot over stdio with wp wppilot mcp serve
wppilot-labs Sep 29, 2026
e17c122
Document session undo/redo and the stdio connection
wppilot-labs Sep 29, 2026
2588bed
Move WooCommerce, SEO, form, backup and security basics and scheduled…
wppilot-labs Sep 29, 2026
aab053b
Load the Forminator and SmartCrawl reads on a real site, and stop the…
wppilot-labs Sep 29, 2026
d450077
Merge feat/session-undo-stdio into release/1.16.0
wppilot-labs Sep 29, 2026
b99e9df
Merge fix/client-configs into release/1.16.0
wppilot-labs Sep 29, 2026
0a5db98
Let session undo check and redo the moved kits' own changes
wppilot-labs Sep 29, 2026
b5e467c
Count 216 abilities in composer.json's description
wppilot-labs Sep 29, 2026
c838080
Do not call a session's own SEO write a conflict with its post update
wppilot-labs Sep 30, 2026
50bbeaf
Say how many abilities a fresh install registers, and which need Deve…
wppilot-labs Sep 30, 2026
1e70b3c
Adopt a theme's design when its spacing slugs are numbers
wppilot-labs Sep 30, 2026
b1b6fee
Record a permanent comment delete as irreversible in the ledger
wppilot-labs Sep 30, 2026
9ddf72c
Say where Forminator's withheld values can be seen, and list session …
wppilot-labs Sep 30, 2026
965c57e
Load wp-admin's theme functions before delete-theme calls delete_theme()
wppilot-labs Sep 30, 2026
90be094
Keep reading server files to Developer Full Access
wppilot-labs Sep 30, 2026
1f96169
Expect Forminator's entries description to point at its own screen
wppilot-labs Sep 30, 2026
5822aa3
Type the adopted design's token maps with the keys PHP really gives them
wppilot-labs Sep 30, 2026
ffd3be1
Title the link-only admin screens so admin-header gets no null
wppilot-labs Sep 30, 2026
8af59ee
List the delete-comment, delete-theme, design-adoption and admin-titl…
wppilot-labs Sep 30, 2026
5ebe205
Keep backslashes in alt text written by update-media and upload-media
wppilot-labs Sep 30, 2026
e28a018
List the alt-text backslash fix in the 1.16.0 changelog
wppilot-labs Sep 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/product-facts.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"_comment": "Source of truth for the product facts that appear in more than one document. scripts/check-doc-consistency.php fails the build when a document contradicts this file, so a number that changes gets changed once here and then everywhere the checker points at. Pro totals that cannot be derived from this repository are deliberately absent: an aggregate nobody can verify from source is how the last set of contradictions got in.",
"version": "1.15.1",
"version": "1.16.0",
"requires_wordpress": "6.9",
"tested_wordpress": "7.1",
"requires_php": "8.0",
"free_abilities": 168,
"free_abilities": 216,
"free_elementor_abilities": 17,
"elementor_minimum": "3.6",
"elementor_atomic_style_properties": 73,
Expand Down
24 changes: 24 additions & 0 deletions CHANGELOG.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,27 @@
v1.16.0 - 2026/09/30
* New, formerly WPPilot Pro: WooCommerce basics. wppilot/woocommerce-check-setup, list and read products and variations, product categories and tags, store settings, and read orders and customers (orders and customers also need manage_woocommerce), with the input and output Pro gives them. wppilot/woocommerce-edit-product edits one product's name, description, prices and stock, saves through WooCommerce so its lookup tables and caches follow, keeps backslashes, and can be undone from the Changes screen: the undo writes the old values back through WooCommerce and says which fields did not come back. Bulk prices and stock, order and customer writes, refunds, coupons, reports, shipping, tax, gateways and full product editing (SKU, categories, images, attributes) stay in Pro, whose richer edit-product takes over when Pro is active.
* New, formerly WPPilot Pro: one post's SEO title, meta description and robots in Yoast SEO, Rank Math, All in One SEO, SEOPress, The SEO Framework, Slim SEO and SmartCrawl (a get and an edit per plugin, under the names Pro uses; only the active plugins' abilities register). A raw meta write could trip Yoast's 0/2/1 noindex codes or AIOSEO's all-or-nothing robots switch; these write the way each plugin's own editor does. Every write keeps a before-image of exactly what it changed and wppilot/rollback-change restores and checks it; AIOSEO, which keeps SEO in its own table, is restored through its own model. Slim SEO cannot force index and has no follow flag, and SEOPress has no per-post force-index; the descriptions say so. Focus keywords, canonicals, social previews, schema, redirects and bulk SEO stay in Pro, whose richer per-post abilities register first on a site running it.
* New, formerly WPPilot Pro: read-only forms. List the forms of WPForms, Contact Form 7, Gravity Forms and Forminator, and read their entries (Contact Form 7's through Flamingo; WPForms entries need WPForms Pro). Entries come with email and phone answers, passwords, card data, uploads, signatures and the IP withheld, and email addresses and phone numbers cut out of free text; full values, exports and form editing are Pro's.
* New, formerly WPPilot Pro: backup and security status. wppilot/backup-status and wppilot/backup-list read UpdraftPlus, Duplicator 5 and BackWPup; wppilot/security-plugin-status, wppilot/security-scan-findings and wppilot/security-lockouts read Wordfence and Solid Security, with IP addresses shown as /24 or /48 networks and logins masked. Starting a backup, the require-a-fresh-backup hold, safe updates, hardening, IP blocks and scans stay in Pro.
* New, formerly WPPilot Pro: scheduled audits. A routine runs the read-only accessibility, content and media alt-text audits on WP-Cron, daily or weekly in the site's timezone, stores each run, compares it with the one before (new, resolved, changed) and emails the administrators it names. wppilot/routines-list and wppilot/routines-report read; wppilot/routines-save and wppilot/routines-delete can be undone from Changes; wppilot/routines-run-now queues a run. A Routines screen under Activity has a Run now button. Routines made with Pro keep running unchanged: the storage, cron hooks and undo are the same.
* New: undo a whole agent session. Every write an agent makes is filed under its session - one MCP connection, one wp wppilot mcp serve process, or one credential and client until it has been idle for 30 minutes - and wppilot/undo-session takes back everything that session did, newest first, each change verified against its before-image. Before writing anything it checks that nothing else changed a target after the session did; if something did, nothing is changed and the conflict is named (which change, which fields, which later edit). It stops at the first change that fails verification and reports what was undone, what failed and what was not attempted, and a change that cannot be undone is listed rather than skipped (the run is refused unless allow_partial is true). wppilot/redo-session puts an undone session back under the same checks, verified against the state the change first produced. wppilot/list-sessions lists sessions and shows what undo and redo would do now. The Changes screen lists recent sessions and has Undo session and Redo session buttons on a session's view. Works for Pro's writes that go through the change log.
* New: a local connection over WP-CLI. wp wppilot mcp serve --user=<login> serves the same MCP server as /wp-json/mcp/wppilot over stdio, for Claude Code, Cursor or a CI job on the machine that runs the site, with the same abilities, safety profile, confirmations and permission checks and no credential to create. The Connect screen shows the claude mcp add command and a Cursor mcp.json with this site's path filled in.
* New: native OAuth entries for Zed, Cline, Kilo Code, OpenCode, Amazon Q / Kiro and OpenClaw, which now run the sign-in themselves (only Roo Code still uses the mcp-remote bridge on a public site), and OAuth tabs for Kimi Code CLI, Qwen Code, ZCode, Factory Droid and OpenClaw, which had none (Gemini CLI gets one on a local site; its public-site entry is still to come). Manus can take an access token, as its documentation lists Bearer tokens for custom servers.
* Works beside WPPilot Pro 1.10.0, which still carries its own copies of all of the above: Pro registers first, and each of these abilities stands aside for a name that is already registered instead of registering it twice, so nothing changes on a site running Pro 1.10.0 until Pro's next release. While Pro 1.10.0 runs routines, the free copy stays off, so no routine runs twice.
* Kits: runtime 1.2 adds Runtime\unclaimed(), kit.json requires.any (a kit serving whichever of several plugins is active) and a SessionLedger host interface through which a kit lets session undo check and redo its own kind of change (the WooCommerce product edit, All in One SEO and routines use it), and loads Pro-tier kits ahead of Free ones in an export, so a richer copy of an ability wins there as it does inside WPPilot. scripts/test-kit-coexistence.php loads Pro's kits in the order Pro's engine does and takes --installed-pro=<a Pro release> to prove Free stands aside for a release that still carries the same abilities.
* Fixed: wppilot/delete-comment deletes a comment permanently, but the change log filed it as a reversible status change, so the Changes screen and session undo offered an undo that could only fail. It is now recorded as irreversible.
* Fixed: wppilot/delete-theme failed on every MCP call with "undefined function delete_theme()", because WordPress does not load its theme admin functions on REST requests.
* Fixed: wppilot/adopt-design-from-site threw a TypeError on themes whose spacing sizes have numeric slugs, such as Twenty Twenty-Five.
* Fixed: wppilot/update-media and wppilot/upload-media dropped backslashes from alt text, because WordPress unslashes meta on write.
* Fixed: the approval, OAuth consent, Block Editor Queue, visual runtime and Connected Apps screens logged a PHP deprecation on every load because they had no title.
* Fixed: the Dashboard's list of recent changes logged a WordPress notice for every change made by an ability that is no longer registered, such as an SEO plugin's edit after that plugin was switched off. It now reads the label only for abilities still registered.
* Fixed: every call made through the legacy MCP transport recorded a second change row for the adapter's execute tool, reads included, each saying "No supported before-image". The target ability's own row is unchanged; the extra row is no longer written.
* Fixed: generated client configuration that no longer matched the clients' own documentation (each re-checked against the vendor's docs on 2026-09-30, with the source cited in the code). Kimi now targets Kimi Code CLI (~/.kimi-code/mcp.json, /mcp-config, and /mcp-config login for OAuth) instead of the archived Python kimi-cli. GitHub Copilot snippets are for Copilot CLI (~/.copilot/mcp-config.json or .github/mcp.json, "mcpServers" with "tools"), since .github/copilot/mcp.json is not a documented location and Copilot CLI rejects the "servers" key; the notes say Copilot Chat in VS Code uses the VS Code tab and the cloud agent cannot use OAuth. Devin Desktop lists ~/.config/devin/mcp_config.json alongside the old Windsurf path. Kilo Code entries go in kilo.jsonc under "mcp". OpenClaw's token entry uses mcp.servers with transport "streamable-http" (it fell back to SSE before). Zed connects natively instead of through mcp-remote, without the retired "source" field. Claude Desktop's access-token entry runs through the mcp-remote bridge, because claude_desktop_config.json is for local servers. The Claude Code note no longer says /mcp shows a working token as "needs authentication", the Antigravity IDE hint names the IDE's own menu, and Roo Code points to Cline or ZooCode.
* Fixed: the change history hid fewer credentials than it should. Option names such as LiteSpeed's object-pswd and cdn-cloudflare_key, NitroPack's siteId, Autoptimize's ccss_key and any *_pass, *_pwd or *_auth key were shown in plain text in get-change, list-changes and the Changes screen; they are now withheld like passwords and tokens.
* Fixed: wppilot/read-file and wppilot/list-directory ran under Production Safe and even Read Only, because a read-only ability passed every profile, so an agent on those profiles could read wp-config.php with its database password and authentication salts. Both now need Developer Full Access like the other server-file abilities, and each call is recorded in the change log.
* The change log table gains two columns (session_id, redo_data); existing rows are kept and carry no session.
* 48 new abilities (216 in all). wppilot/read-file and wppilot/list-directory now need Developer Full Access; no other existing ability changed its permissions, and existing connections keep working and do not need re-authorising.

v1.15.1 - 2026/09/29
* Fixed: with Wordfence active, every MCP call made with an Application Password returned 401 and nothing said why. Wordfence switches Application Passwords off by default (its "Disable WordPress application passwords" setting), and the Connection Doctor, Diagnostics and the Connect screen only said "a plugin or code". They now name Wordfence and the exact setting to uncheck, name any other plugin that switches Application Passwords off by the file its filter lives in, and point to OAuth or an access token, which do not need Application Passwords.
* Fixed: change records showed email addresses in full. wppilot/get-change, wppilot/export-changes, the Changes screen and its download redacted secrets by key name only, so an address typed into an excerpt or a comment came back as written, and get-change returned before-images with no redaction at all. Email addresses in the input, the result, the before-image and the undo verification are now masked when a record is read (j***@e***.com), and before-images get the key-name redaction too. What is stored is unchanged, so undo still restores the exact original.
Expand Down
Loading
Loading