Indexer::index_post now stores a SHA-256 content hash + embedding model per post and skips re-embedding when nothing has changed. Makes "Reindex all" idempotent and cheap.
Read full notes11 changes
Added
Indexer::index_post now stores a SHA-256 content hash + embedding model per post and skips re-embedding when nothing has changed. Makes "Reindex all" idempotent and cheap.
New GET /knowledge-base/queue endpoint returning pending / in_progress / complete / failed counts for the alpha-chat Action Scheduler group.
New POST /knowledge-base/queue endpoint runs one Action Scheduler batch synchronously (useful when DISABLE_WP_CRON is set).
Dashboard shows live indexing queue counts with auto-refresh every 5s while work is in flight, plus a one-click "Process now" button.
Knowledge Base toolbar gains a "Process queue now" button.
Fixed
Chat panel close button was invisible on mobile — SVG had no explicit size inside the shadow DOM's all: initial root. Added a global svg rule + sized close icon; close is now a circular button in the header top-right.
Re-queued bulk jobs no longer re-embed already-indexed content (hash guard).
Changed
Removed :host reset for all SVGs globally, ensuring any icon placed in the widget renders at its CSS size.
Bundles v2.1.0 through v2.4.0 — major feature release.
Read full notes14 changes
Supported: tags, .class, #id, [attr="val"], {text}, > child, + sibling, *N multiply, \$ numbering. Cursor auto-jumps to the first empty slot.
Removed: Unreliable HTML class autocomplete (replaced by Emmet).
Emmet HTML Expansion (NEW): Type an abbreviation in the HTML editor, press Tab, get expanded HTML: - div.hero>h1{Title}+p{Body} → nested section with heading and paragraph - ul.menu>li.item\$*4>a[href="#"]{Link} → 4-item menu with auto-numbered classes - img.avatar[alt=""] → self-closing void tag
Frontend CSS Layers (NEW): Three independent toggles under Page Blocks → Settings → Frontend CSS:
Semantic Reset (~1KB) — modern reset, accessible images, prefers-reduced-motion
Utility Classes — ~330 Tailwind-inspired classes (grid, flex, spacing, typography, colors, borders, shadows, transitions) + sm:md:lg: responsive variants. Frontend inlines ONLY the classes actually used on the page — no bloat. Builder loads the full set for autocomplete.
Top-Level Page Blocks Admin (NEW): Moved out of Settings to its own top-level menu: - All Page Blocks — list table with bulk actions, search, status filter - Add New — full edit form with Monaco editors, live preview, position picker - Settings — existing settings page - License — license management
Shortcode Library (NEW): Reusable blocks stored in a custom database table (wp_gt_page_blocks): - [page_block id="123"] — embed by ID - [page_block slug="hero-section"] — embed by slug - Theme-independent position hooks via gt_pb_get_positions() filter (wp_head, wp_footer, the_content, loop_start, etc.)
Bug Fixes
Fixed cssClasses config being serialized as JSON object (array_unique key gaps) — Array.isArray() now passes on the JS side.
Critical fix for v2.0.0/v2.0.1. The builder was stuck on "Loading Page Blocks Builder..." with no errors. Root cause: the v2.0.0 release ported the dropin's JS which expects the app element ID md-pb-builder-app, but the template HTML still used the old ID md-page-block-builder-app. The JS bailed out silently at the missing-element check.
Read full notes5 changes
Critical fix for v2.0.0/v2.0.1. The builder was stuck on "Loading Page Blocks Builder..." with no errors. Root cause: the v2.0.0 release ported the dropin's JS which expects the app element ID md-pb-builder-app, but the template HTML still used the old ID md-page-block-builder-app. The JS bailed out silently at the missing-element check.
Fix
templates/builder-shell.php: Updated app element ID to md-pb-builder-app
Updated wrapper class to md-pb-builder-root and loading class to md-pb-builder-loading to match the new CSS naming
Upgrading from v2.0.x: Just update — clear browser cache to reload the new template.
Major refactor bringing the standalone plugin to production parity with the MD theme dropin.
Read full notes23 changes
Major Features
AI Chat Sidebar — Multi-turn conversation replaces the inline AI bar. Persistent context, "+ New Chat" button, message history. OpenAI, Anthropic, Gemini supported. Theme CSS variables sent as system prompt context.
Inline Text Editing in Preview — Click any heading, paragraph, link, or list item directly in the preview iframe to edit. Enter commits, Escape cancels.
Live Preview Patching — No more flicker on every keystroke. CSS/content edits patch iframe DOM in place; only structural changes trigger full reload.
HTML Snippet Buttons — Quick-insert buttons on the HTML editor title bar: sec, div, h1-h3, p, a, img, ul, ol, span, b, i. Wraps selection or inserts empty.
Section Renaming — Double-click any section name in the sidebar to rename it inline.
SVG Icons — Replaces unicode glyphs for hide/duplicate/delete buttons.
Keyboard Shortcuts Overlay — ? button shows all shortcuts.
Export/Import — Download/upload sections as JSON, append or replace modes.
Settings
Preview Customization — New admin fields for custom CSS, head HTML, and footer JS injected into the preview iframe. No PHP filter needed for common cases.
AI default model changed from gpt-5.2 to claude-sonnet-4-6.
Fixes
Script injection in preview iframe: Now injected post-load via contentDocument.createElement('script') instead of inline <script> in srcdoc. Fixes SyntaxError: Unexpected token '<' errors caused by </script> parsing in srcdoc HTML.
SVG icon click delegation: Uses closest('[data-action]') to traverse up from clicked SVG to the button.
HTTPS enforcement: All preview style URLs forced to https:// to eliminate mixed content warnings.
AI conversation history: All three providers (OpenAI, Anthropic, Gemini) properly send the message array.
Removed
Terminal feature (was beta) — removed for production safety.
Compatibility
WordPress 6.0+
PHP 8.1+
Works with any WordPress theme (no theme dependencies)
All blocks: Every ACF field is now optional. Removed required: 1 flags and min: 1 constraints on repeaters/relationships so any block can be inserted without being forced to fill specific fields.
Read full notes24 changes
What's Changed
Changed
All blocks: Every ACF field is now optional. Removed required: 1 flags and min: 1 constraints on repeaters/relationships so any block can be inserted without being forced to fill specific fields.
Removed
Chat block: Completely removed the acf/chat-block and its directory (blocks/chat-block/).
Improved
LLM prompt library (llm/): Added llm/README.md as an index covering all 29 blocks grouped by category, universal rules (single-line JSON, field-key prefix, repeater format, InnerBlocks vs ACF data), and a block-comment anatomy reference. Removed stale "Required" annotations from nine per-block docs now that no fields are required.
Product Review block: Fixed 4 Google Search Console structured data errors: missing price, hasMerchantReturnPolicy, shippingDetails in offers, and missing image fallback.
Read full notes24 changes
What's Changed
Fixed
Product Review block: Fixed 4 Google Search Console structured data errors: missing price, hasMerchantReturnPolicy, shippingDetails in offers, and missing image fallback.
Added
Product Review block: New Product Type field — choose between Product (physical/generic) and SoftwareApplication (apps/SaaS) schema types. SoftwareApplication includes applicationCategory and operatingSystem fields.
Product Review block: New Return Policy field with options: No Returns (digital), Finite Return Window (with configurable days), Unlimited Returns. Maps to hasMerchantReturnPolicy in offers schema.
Product Review block: New Delivery Type field — Digital (instant/$0 shipping) or Physical. Digital products get zero-cost instant delivery in shippingDetails.
Product Review block: New Shipping Country field (ISO country code) used for both shipping destination and return policy region.
Product Review block: Image now falls back to post featured image when no product image is set, preventing GSC "Missing field image" errors.
Product Review block: Offers schema is now always generated (price defaults to "0" when empty) to prevent GSC missing field warnings.
Commits
Fix GSC structured data errors and add schema options to Product Review block (37e9980)