Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
31 changes: 28 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,30 @@ All notable changes to this project will be documented in this file, per [the Ke

## [Unreleased] - TBD

## [0.4.0] - 2026-03-05
### Added
- Inline Image Generation directly in the post editor, enabling users to generate images without leaving authoring/editing flows ([#235](https://github.com/WordPress/ai/pull/235)).
- Generate Image within the Media Library with prompt-based image generation workflows ([#258](https://github.com/WordPress/ai/pull/258)).
- Generate Review Notes experiment to analyze post content or individual blocks and suggest refinements via Notes comments in the editor ([#260](https://github.com/WordPress/ai/pull/260), [#267](https://github.com/WordPress/ai/pull/267)).
- Split editor and admin experiments within the settings page ([#232](https://github.com/WordPress/ai/pull/232)).
- Contextual help text to the Abilities Explorer screen to assist users in understanding what Abilities are and how to use them ([#243](https://github.com/WordPress/ai/pull/243)).

### Changed
- Update “Generate Summary” button style to use consistent UI with other buttons in the ediot ([#253](https://github.com/WordPress/ai/pull/253)).
- Standardize Abilities invocation using the `runAbility` helper to improve consistency across API calls ([#228](https://github.com/WordPress/ai/pull/228)).
- Make provider labels in the Abilities Explorer translatable and adjust badge styling for clarity ([#247](https://github.com/WordPress/ai/pull/247)).
- Improve Abilities Explorer table layout by aligning spacing and styles with WordPress admin table conventions ([#248](https://github.com/WordPress/ai/pull/248)).
- Improve the Ability test page with better internationalization and add copy-to-clipboard functionality ([#256](https://github.com/WordPress/ai/pull/256)).

### Removed
- Remove unused checkbox column from the Abilities Explorer table, as it was not tied to any bulk actions ([#246](https://github.com/WordPress/ai/pull/246)).

### Fixed
- Fix the position and behavior of the “Copy” button in code blocks within the Abilities Explorer ([#245](https://github.com/WordPress/ai/pull/245)).

### Developer
- Bump `basic-ftp` from 5.1.0 to 5.2.0 ([#259](https://github.com/WordPress/ai/pull/259)).

## [0.3.1] - 2026-02-18
### Fixed
- Increased image generation request timeout from 30s to 90s to reduce failed generations on slower providers/models ([#226](https://github.com/WordPress/ai/pull/226)).
Expand Down Expand Up @@ -45,6 +69,8 @@ All notable changes to this project will be documented in this file, per [the Ke

### Security
- Change our user permission checks to use `edit_post` instead of `read_post` ([GHSA-mxf5-gp98-93wv](https://github.com/WordPress/ai/security/advisories/GHSA-mxf5-gp98-93wv)).

### Developer
- Bumped `diff` from 4.0.2 to 4.0.4 ([#196](https://github.com/WordPress/ai/pull/196)).
- Bumped `lodash-es` from 4.17.22 to 4.17.23 ([#198](https://github.com/WordPress/ai/pull/198)).
- Bumped `lodash` from 4.17.21 to 4.17.23 ([#199](https://github.com/WordPress/ai/pull/199)).
Expand Down Expand Up @@ -89,10 +115,8 @@ All notable changes to this project will be documented in this file, per [the Ke
### Fixed
- Bug in asset loader causing missing dependencies ([#113](https://github.com/WordPress/ai/pull/113)).

### Security
- Bumped `js-yaml` from 3.14.1 to 3.14.2 ([#105](https://github.com/WordPress/ai/pull/105)).

### Developer
- Bumped `js-yaml` from 3.14.1 to 3.14.2 ([#105](https://github.com/WordPress/ai/pull/105)).
- Updated format script to only format JS to avoid random JSON file changes ([#114](https://github.com/WordPress/ai/pull/114)).
- Updated documentation ([#108](https://github.com/WordPress/ai/pull/108), [#112](https://github.com/WordPress/ai/pull/112)).

Expand All @@ -108,6 +132,7 @@ First public release of the AI Experiments plugin, introducing a framework for e
- Utilities Ability for common AI tasks and testing

[Unreleased]: https://github.com/WordPress/ai/compare/trunk...develop
[0.4.0]: https://github.com/WordPress/ai/compare/0.3.1...0.4.0
[0.3.1]: https://github.com/WordPress/ai/compare/0.3.0...0.3.1
[0.3.0]: https://github.com/WordPress/ai/compare/0.2.1...0.3.0
[0.2.1]: https://github.com/WordPress/ai/compare/0.2.0...0.2.1
Expand Down
2 changes: 1 addition & 1 deletion CREDITS.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ The following individuals are responsible for curating the list of issues, respo

Thank you to all the people who have already contributed to this repository via bug reports, code, design, ideas, project management, translation, testing, etc.

[Darin Kotter (@dkotter)](https://github.com/dkotter), [Jeffrey Paul (@jeffpaul)](https://github.com/jeffpaul), [Jason Adams (@JasonTheAdams)](https://github.com/JasonTheAdams), [Dovid Levine (@justlevine)](https://github.com/justlevine),[Md Aminul Islam (@theaminuli)](https://github.com/theaminuli), [Felix Arntz (@felixarntz)](https://github.com/felixarntz), [Jonathan Desrosiers (@desrosj)](https://github.com/desrosj), [Mohamed Khaled (@Ref34t)](https://github.com/Ref34t), [Iqbal Hossain (iqbal-web)](https://github.com/iqbal-web), [Lina Wiezkowiak (@linawiezkowiak)](https://github.com/linawiezkowiak), [Rachael Cortellessa (@rachaelcortellessa)](https://github.com/rachaelcortellessa), [James LePage (@Jameswlepage)](https://github.com/Jameswlepage), [Tammie Lister (@karmatosed)](https://github.com/karmatosed), [Aki Hamano (@t-hamano)](https://github.com/t-hamano), [Blake Bertuccelli-Booth (@bbertucc)](https://github.com/bbertucc), [Mujeebu Rahman (@mujuonly)](https://github.com/mujuonly), [Mukesh Panchal (@mukeshpanchal27)](https://github.com/mukeshpanchal27), [Pascal Birchler (@swissspidy)](https://github.com/swissspidy), [Dhruvang Shah (@dhruvang21)](https://github.com/dhruvang21), [Aslam Doctor (@aslamdoctor)](https://github.com/aslamdoctor), [John Parris (@mindctrl)](https://github.com/mindctrl), [James Morrison (@jamesmorrison)](https://github.com/jamesmorrison), [Paul Bearne (@pbearne)](https://github.com/pbearne), [Matt Cromwell (@mathetos)](https://github.com/mathetos), [Huzaifa Al Mesbah (@huzaifaalmesbah)](https://github.com/huzaifaalmesbah), [Mehraz Morshed (@mehrazmorshed)](https://github.com/mehrazmorshed), [JuanMa Garrido (@juanmaguitar)](https://github.com/juanmaguitar), [Adam Zieliński (@adamziel)](https://github.com/adamziel), [Weston Ruter (@westonruter)](https://github.com/westonruter), [Jonathan Bossenger (@jonathanbossenger)](https://github.com/jonathanbossenger), [Juan Aldasoro (@juanfra)](https://github.com/juanfra), [Casey Manos (@caseymanos)](https://github.com/caseymanos), [Stephanie Walters (@PypWalters)](https://github.com/PypWalters), [prabinjha (@prabinjha)](https://github.com/prabinjha), [Kurt Rank (@kurtrank)](https://github.com/kurtrank), [Lauren Woodmansee (@lwoodmansee)](https://github.com/lwoodmansee), [Andrew Palmer (@hellobertha)](https://github.com/hellobertha), [Md Aminul Islam (@theaminulai)](https://github.com/theaminulai), [Joe Dolson (@joedolson)](https://github.com/joedolson), [Andrei Zanouski (@andreizanik)](https://github.com/andreizanik), [Om vataliya (@Omcodes23)](https://github.com/Omcodes23).
[Darin Kotter (@dkotter)](https://github.com/dkotter), [Jeffrey Paul (@jeffpaul)](https://github.com/jeffpaul), [Jason Adams (@JasonTheAdams)](https://github.com/JasonTheAdams), [Dovid Levine (@justlevine)](https://github.com/justlevine),[Md Aminul Islam (@theaminuli)](https://github.com/theaminuli), [Felix Arntz (@felixarntz)](https://github.com/felixarntz), [Jonathan Desrosiers (@desrosj)](https://github.com/desrosj), [Mohamed Khaled (@Ref34t)](https://github.com/Ref34t), [Iqbal Hossain (iqbal-web)](https://github.com/iqbal-web), [Lina Wiezkowiak (@linawiezkowiak)](https://github.com/linawiezkowiak), [Rachael Cortellessa (@rachaelcortellessa)](https://github.com/rachaelcortellessa), [James LePage (@Jameswlepage)](https://github.com/Jameswlepage), [Tammie Lister (@karmatosed)](https://github.com/karmatosed), [Aki Hamano (@t-hamano)](https://github.com/t-hamano), [Blake Bertuccelli-Booth (@bbertucc)](https://github.com/bbertucc), [Mujeebu Rahman (@mujuonly)](https://github.com/mujuonly), [Mukesh Panchal (@mukeshpanchal27)](https://github.com/mukeshpanchal27), [Pascal Birchler (@swissspidy)](https://github.com/swissspidy), [Dhruvang Shah (@dhruvang21)](https://github.com/dhruvang21), [Aslam Doctor (@aslamdoctor)](https://github.com/aslamdoctor), [John Parris (@mindctrl)](https://github.com/mindctrl), [James Morrison (@jamesmorrison)](https://github.com/jamesmorrison), [Paul Bearne (@pbearne)](https://github.com/pbearne), [Matt Cromwell (@mathetos)](https://github.com/mathetos), [Huzaifa Al Mesbah (@huzaifaalmesbah)](https://github.com/huzaifaalmesbah), [Mehraz Morshed (@mehrazmorshed)](https://github.com/mehrazmorshed), [JuanMa Garrido (@juanmaguitar)](https://github.com/juanmaguitar), [Adam Zieliński (@adamziel)](https://github.com/adamziel), [Weston Ruter (@westonruter)](https://github.com/westonruter), [Jonathan Bossenger (@jonathanbossenger)](https://github.com/jonathanbossenger), [Juan Aldasoro (@juanfra)](https://github.com/juanfra), [Casey Manos (@caseymanos)](https://github.com/caseymanos), [Stephanie Walters (@PypWalters)](https://github.com/PypWalters), [prabinjha (@prabinjha)](https://github.com/prabinjha), [Kurt Rank (@kurtrank)](https://github.com/kurtrank), [Lauren Woodmansee (@lwoodmansee)](https://github.com/lwoodmansee), [Andrew Palmer (@hellobertha)](https://github.com/hellobertha), [Md Aminul Islam (@theaminulai)](https://github.com/theaminulai), [Joe Dolson (@joedolson)](https://github.com/joedolson), [Andrei Zanouski (@andreizanik)](https://github.com/andreizanik), [Om vataliya (@Omcodes23)](https://github.com/Omcodes23), [Greg Ziółkowski (@gziolo)](https://github.com/gziolo), [Sapayth Hossain (@sapayth)](https://github.com/sapayth), [Ryuji Yasukochi (@Ryujiyasu)](https://github.com/Ryujiyasu), [Nischay (@zeus2611)](https://github.com/zeus2611).

## Libraries

Expand Down
27 changes: 11 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,15 @@ This [Canonical Plugin](https://make.wordpress.org/core/2022/09/11/canonical-plu

## Current Features

* **[Abilities Explorer](docs/experiments/abilities-explorer.md)** – Browse and interact with registered AI abilities from a dedicated admin screen.
* * **[Alt Text Generation](docs/experiments/alt-text-generation.md)** - Generate descriptive alt text for images to improve accessibility.
* **[Abilities Explorer](docs/experiments/abilities-explorer.md)** – Discover, inspect, test, and document all abilities registered via the WordPress Abilities API.
* * **[Alt Text Generation](docs/experiments/alt-text-generation.md)** - Generates descriptive alt text for images using AI vision models.
* **[Content Summarization](docs/experiments/summarization.md)** - Summarizes long-form content into digestible overviews.
* **[Excerpt Generation](docs/experiments/excerpt-generation.md)** - Automatically create concise summaries for your posts.
* **[Excerpt Generation](docs/experiments/excerpt-generation.md)** - Generates excerpt suggestions from content.
* **Experiment Framework** - Opt-in system that lets you enable only the AI features you want to use.
* **[Image Generation](docs/experiments/image-generation.md)** - Create feature image from post content directly in the block editor.
* **[Image Generation](docs/experiments/image-generation.md)** - Create images from post content in the editor, also via the Media Library.
* **Multi-Provider Support** - Works with popular AI providers like OpenAI, Google, and Anthropic.
* **Title Generation** - Generate title suggestions for your posts with a single click. Perfect for brainstorming headlines or finding the right tone for your content.
* **Review Notes** - Reviews post content block-by-block and adds Notes with suggestions for Accessibility, Readability, Grammar, and SEO.
* **Title Generation** - Generates title suggestions from content.

## Roadmap

Expand All @@ -52,28 +53,22 @@ Overview of planned features:
* **Content Assistant** – AI-powered writing and editing in Gutenberg
* **Site Agent** – Natural language WordPress administration
* **Workflow Automation** – AI-driven task automation
* Title Generation / Rewriting – Suggests alternative post titles for better clarity, tone, or engagement.
* Excerpt Generation – Creates concise summaries for post excerpts.
* Content Summarization – Summarizes long-form content into digestible overviews.
* Contextual Tagging – Suggests relevant tags and categories to organize content.
* **Media Enhancement** – Auto-captioning and intelligent organization
* Alt Text Generation – Auto-generates descriptive alt text for images.
* Image Generation – Produces inline or featured images from text prompts.

## Developer Experience

The AI Experiments plugin is meant to be studied, forked, and extended. If you’re a host or agency, you can configure AI providers on behalf of your users so they don’t need to bring their own API keys.

If you’re a plugin developer, you’ll be able to:

* Read the [Contributing Guide](CONTRIBUTING.md) for detailed development information.
* Register new AI abilities
* Override default behavior with custom filters
* Reuse the same building blocks in your own plugins
* Read the [Contributing Guide](CONTRIBUTING.md) for detailed development information.
* Register new AI abilities
* Override default behavior with custom filters
* Reuse the same building blocks in your own plugins

## How to Get Involved

We want everyone's input! Whether you're an author, editor, educator, researcher, accessibility expert, user, or just someone with strong feelings about AI, all are welcome.
We want everyone's input! Whether you're an author, editor, educator, researcher, accessibility expert, user, or someone with strong feelings about AI, all are welcome.

Anyone contributing to the AI Experiments plugin is expected to conduct themselves in accordance with the WordPress project's [Code of Conduct](https://github.com/WordPress/.github/blob/trunk/CODE_OF_CONDUCT.md).

Expand Down
2 changes: 1 addition & 1 deletion ai.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
* Plugin Name: AI Experiments
* Plugin URI: https://github.com/WordPress/ai
* Description: AI experiments and capabilities for WordPress.
* Version: 0.3.1
* Version: 0.4.0
* Requires at least: 6.9
* Requires PHP: 7.4
* Author: WordPress.org Contributors
Expand Down
22 changes: 11 additions & 11 deletions includes/Abilities/Review_Notes/Review_Notes.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,14 @@
* Reviews a single block's content and returns suggestions for the specified
* review types (Accessibility, Readability, Grammar, SEO, etc.).
*
* @since x.x.x
* @since 0.4.0
*/
class Review_Notes extends Abstract_Ability {

/**
* Review types supported by this Ability.
*
* @since x.x.x
* @since 0.4.0
*
* @var list<string>
*/
Expand All @@ -44,7 +44,7 @@ class Review_Notes extends Abstract_Ability {
/**
* {@inheritDoc}
*
* @since x.x.x
* @since 0.4.0
*
* @return array<string, mixed> The input schema of the ability.
*/
Expand Down Expand Up @@ -95,7 +95,7 @@ protected function input_schema(): array {
/**
* {@inheritDoc}
*
* @since x.x.x
* @since 0.4.0
*
* @return array<string, mixed> The output schema of the ability.
*/
Expand Down Expand Up @@ -127,7 +127,7 @@ protected function output_schema(): array {
/**
* {@inheritDoc}
*
* @since x.x.x
* @since 0.4.0
*
* @param mixed $input The input arguments to the ability.
* @return array{suggestions: list<array{review_type: string, text: string}>}|\WP_Error
Expand Down Expand Up @@ -180,7 +180,7 @@ protected function execute_callback( $input ) {
/**
* {@inheritDoc}
*
* @since x.x.x
* @since 0.4.0
*
* @param mixed $input The input arguments to the ability.
* @return bool|\WP_Error True if the user has permission, WP_Error otherwise.
Expand Down Expand Up @@ -234,7 +234,7 @@ protected function permission_callback( $input ) {
/**
* {@inheritDoc}
*
* @since x.x.x
* @since 0.4.0
*/
protected function meta(): array {
return array(
Expand All @@ -245,7 +245,7 @@ protected function meta(): array {
/**
* Returns the JSON schema used for structured output generation.
*
* @since x.x.x
* @since 0.4.0
*
* @return array<string, mixed> JSON schema for an array of suggestions.
*/
Expand Down Expand Up @@ -279,7 +279,7 @@ protected function suggestions_schema(): array {
/**
* Generates review suggestions for a single block.
*
* @since x.x.x
* @since 0.4.0
*
* @param string $block_type The block type identifier.
* @param string $block_content The plain-text block content.
Expand Down Expand Up @@ -357,7 +357,7 @@ protected function generate_review(
/**
* Creates the prompt for the review.
*
* @since x.x.x
* @since 0.4.0
*
* @param string $block_type The block type identifier.
* @param string $block_content The plain-text block content.
Expand Down Expand Up @@ -392,7 +392,7 @@ private function create_prompt( string $block_type, string $block_content, strin
* Notes use format [REVIEW_TYPE] text. Returns lowercase keys
* for case-insensitive comparison.
*
* @since x.x.x
* @since 0.4.0
*
* @param list<string> $existing_notes Note content strings.
* @return array<string, true> Map of existing review types to true.
Expand Down
4 changes: 2 additions & 2 deletions includes/Abstracts/Abstract_Experiment.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
/**
* Experiment category.
*
* @since x.x.x
* @since 0.4.0
* @var string
*/
protected string $category;
Expand Down Expand Up @@ -149,7 +149,7 @@
/**
* Gets the experiment category.
*
* @since x.x.x
* @since 0.4.0
*
* @return string The experiment category.
*/
Expand Down Expand Up @@ -192,7 +192,7 @@
*
* @param bool $experiment_enabled Whether the experiment is enabled.
*/
$is_enabled = (bool) apply_filters( "ai_experiments_experiment_{$this->id}_enabled", $experiment_enabled );

Check warning on line 195 in includes/Abstracts/Abstract_Experiment.php

View workflow job for this annotation

Image GitHub Actions / Run Plugin Check

WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound

Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "ai_experiments_experiment_{$this->id}_enabled".

// Cache the result.
$this->enabled_cache = $is_enabled;
Expand Down
2 changes: 1 addition & 1 deletion includes/Contracts/Experiment.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public function get_description(): string;
*
* Determines where the experiment appears in the settings UI.
*
* @since x.x.x
* @since 0.4.0
*
* @return string The experiment category.
*/
Expand Down
10 changes: 5 additions & 5 deletions includes/Experiment_Category.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
*
* @package WordPress\AI
*
* @since x.x.x
* @since 0.4.0
*/

declare( strict_types=1 );
Expand All @@ -19,7 +19,7 @@
* Provides type-safe-ish constants for experiment categorization.
* These values correspond to where experiments are displayed in the settings UI.
*
* @since x.x.x
* @since 0.4.0
*/
class Experiment_Category {

Expand All @@ -28,7 +28,7 @@ class Experiment_Category {
*
* Experiments in this category appear in the Editor Experiments.
*
* @since x.x.x
* @since 0.4.0
*
* @var string
*/
Expand All @@ -39,7 +39,7 @@ class Experiment_Category {
*
* Experiments in this category appear in the WordPress admin context.
*
* @since x.x.x
* @since 0.4.0
*
* @var string
*/
Expand All @@ -52,7 +52,7 @@ class Experiment_Category {
* known category constant. Experiments in this category appear in the
* Other Experiments section.
*
* @since x.x.x
* @since 0.4.0
*
* @var string
*/
Expand Down
4 changes: 2 additions & 2 deletions includes/Experiments/Abilities_Explorer/Ability_Handler.php
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ private static function format_single_ability( \WP_Ability $ability ): array {
/**
* Get translatable provider labels keyed by provider slug.
*
* @since x.x.x
* @since 0.4.0
*
* @return array<string,string> Map of provider slug to translated label.
*/
Expand All @@ -136,7 +136,7 @@ public static function get_provider_labels(): array {
/**
* Get the label for a provider.
*
* @since x.x.x
* @since 0.4.0
*
* @param string $provider Provider slug.
* @return string Provider label.
Expand Down
2 changes: 1 addition & 1 deletion includes/Experiments/Abilities_Explorer/Admin_Page.php
Original file line number Diff line number Diff line change
Expand Up @@ -485,7 +485,7 @@ public function ajax_invoke_ability(): void {
/**
* Add contextual help tabs to the screen.
*
* @since x.x.x
* @since 0.4.0
*/
public function add_help_tabs(): void {
$screen = get_current_screen();
Expand Down
Loading
Loading