Repository navigation
PressPilot 2.2.2
PressPilot 2.2.2
First tagged release of the 2.x line — the version where an AI agent connects directly to WordPress.
Install: upload presspilot.zip (attached) via Plugins → Add New → Upload Plugin. Requires WordPress 5.8+ and PHP 7.4+ (verified on WP 5.8 → 7.1, PHP 7.4 → 8.4).
Highlights
- MCP server —
POST /wp-json/presspilot/v1/mcp. Claude Code, OpenAI Codex, Cursor and any MCP client see the site as native tools. Both the legacyinitializehandshake and the modern statelessserver/discovershape on one endpoint. - Built-in copilot — Anthropic, OpenAI, OpenRouter, AgentRouter, Dahl Inference, or any OpenAI-compatible endpoint, driven from wp-admin with the same tools, permissions and Skill.
- Multilingual dashboard, automatic RTL — English, Persian, Arabic, German. Language and direction come from WordPress alone; nothing about the site's URLs changes.
- Permissions carry through — a disabled capability's tools are hidden from the agent entirely, not refused at call time.
Changelog
2.2.2
- Fix: the Copilot screen now notices when the plugin has been updated underneath it. Its behaviour ships inside the page it was served with, so a screen left open across an update kept running the old code — which looks exactly like a fix that did not work. It now checks the running version and says plainly that a reload is needed.
2.2.1
- Fix: the copilot chat showed raw markup. Models do not agree on a format — some answer in Markdown (
**bold**), some in HTML, some mix the two — and the chat rendered every reply as plain text, so the markup itself was visible. Replies now go through one pipeline that converts Markdown, passes model-written HTML through, and filters the result against a strict allowlist (no script, no styles, no attributes beyond a validatedhref). Anything unrecognised is unwrapped to its text, so a stray tag reads as words rather than executing. - Fix: reasoning models (Kimi, DeepSeek and friends) emit their chain of thought inline as
<think>…</think>in the normal content field. That is not an answer and is now stripped server-side, so headless callers of/agent/runget clean text too. Unclosed and orphaned tags are handled. The assistant turn echoed back into the conversation is left verbatim. - Chat code blocks and inline code stay left-to-right on an RTL dashboard.
2.2.0
- New copilot provider: Dahl Inference (
inference.dahl.global) — open models (MiniMax M2.7, Kimi K2.6, DeepSeek V4 Flash) served over a decentralised GPU network at a fraction of the usual price, with the first 100M tokens free. OpenAI-compatible, so it plugs into the existing wire layer; pick it on the Copilot screen and Load available models lists what it currently serves. Model ids are namespaced, e.g.MiniMaxAI/MiniMax-M2.7.
2.1.1
- Fix: copilot errors were invisible behind a CDN. Provider failures returned HTTP 502, and Cloudflare (by default) replaces a 5xx from the origin with its own generic error page — so the plugin's actual diagnostic never reached the user, who just saw "error code: 502". Upstream failures now return 424 Failed Dependency, a 4xx that proxies pass through untouched.
- Fix: a provider base URL saved as the bare origin (e.g.
https://agentrouter.orginstead ofhttps://agentrouter.org/v1) silently sent every call to the vendor's marketing site, which answers 200 with HTML. Known providers are now normalised back to their documented API base; a path you chose yourself, and thecustomprovider, are left alone. - The "not JSON" error now names the URL it called and points at the missing
/v1.
2.1.0
- The dashboard is now multilingual — every screen is fully translatable, and the plugin ships with Persian (fa_IR), Arabic (ar) and German (de_DE) alongside English. 169 strings, no gaps.
- Right-to-left support is automatic. The language comes from WordPress alone (Settings → Site Language, or the per-user language on a profile) and RTL follows the locale's own direction. The plugin adds no rewrite rules, no query parameters and no URL segments — translating it changes nothing about this site's addresses.
- The admin stylesheet is written with CSS logical properties, so every screen mirrors correctly on an RTL locale with no separate RTL stylesheet to load. API keys, endpoint URLs, curl lines, TOML and JSON snippets are pinned left-to-right so they stay readable and copyable in an RTL dashboard, and chat messages use
unicode-bidi: plaintextso each message picks up its own direction. - What a model reads stays English on every locale by design — the agent prompt, the MCP
instructions, and tool descriptions. They pair with an English operating manual, and mixing languages in an LLM's context makes its output worse. - Capability descriptions, provider notes and MCP client hints are translated; capability keys and vendor names are not (they are wire identifiers and brands).
2.0.1
- Compatibility verified end to end (activation, MCP handshake, tools/list, a real block-content write through tools/call, and the full copilot loop) on WordPress 5.8, 6.9.5 and 7.1 across PHP 7.4, 8.2 and 8.4 — no notices, warnings or deprecations on any combination. Syntax additionally checked on PHP 8.0 and 8.3.
Tested up toraised to 7.1 (previously 7.0), now actually exercised rather than assumed.- Fix:
GET /agent/modelsreported "the provider returned HTTP 200" when a 2xx response body was not JSON — it now says the base URL is likely pointing at a web page rather than an API root. - Fix: the MCP authentication-failure path read the error status without checking its shape; hardened so the failure path cannot itself raise a warning.
- Remove dead code in the
/agent/configwrite handler.
2.0.0
- MCP server —
POST /mcp, a Model Context Protocol endpoint over Streamable HTTP (JSON-RPC 2.0). Connect Claude Code, OpenAI Codex, Cursor or any MCP client directly; the site shows up as native tools.- Dual-era on one endpoint: the legacy
initializehandshake (2024-11-05 … 2025-11-25) and the modern statelessserver/discovershape (2026-07-28), with spec-correct version negotiation (-32022) and header/body validation (-32020). - Tools, resources (
presspilot://skill,presspilot://site,presspilot://openapi) and prompts (build_site,migrate_to_gutenberg,configure_plugin,audit_site). - The agent Skill is delivered on connect as MCP
instructions, so agents follow the site's build rules from their first message.
- Dual-era on one endpoint: the legacy
- Built-in copilot — connect Anthropic, OpenAI, OpenRouter, AgentRouter or any OpenAI-compatible endpoint and chat with your site from wp-admin.
GET /agent/modelspulls the live model list from the provider;POST /agent/stepruns one round trip (the browser drives the loop, so no request can hit max_execution_time) andPOST /agent/runruns the whole loop server-side for headless callers. - One tool registry behind both surfaces (
GET /tools,POST /tools/call) — every tool is a thin wrapper over an existing REST route, dispatched internally, so handlers, validation and capability scopes stay the single source of truth. - Permissions carry over: a tool whose capability scope is disabled is omitted from
tools/listentirely rather than failing at call time. New "Essential/Full" tool-profile setting trims the surface for smaller models. - New admin screens: Agents (MCP) (endpoint, per-client copy-paste setup, tool inventory) and Copilot (provider, model, chat).
- Optional
?key=URL auth for clients that cannot send custom headers (off by default).