diff --git a/.gitignore b/.gitignore index 2d072668a..602b8c791 100644 --- a/.gitignore +++ b/.gitignore @@ -31,6 +31,8 @@ Session.vim *.swp .~lock* .vscode +.cursor +.claude # Mac OSX .DS_Store diff --git a/CHANGELOG.md b/CHANGELOG.md index 4aae9c16b..4795dd07f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,9 +4,55 @@ All notable changes to this project will be documented in this file, per [the Ke ## [Unreleased] - TBD +## [3.8.0] - 2026-02-XX + +### Added + +- New filters, `classifai_provider_credentials_{$provider_id}` and `classifai_provider_credentials`, that allows developers the ability to override AI credentials prior to those being used. This allows you to manage credentials outside of the database, like as environment variables or other secret management services (props [@fabiankaegy](https://github.com/fabiankaegy), [@peterwilsoncc](https://github.com/peterwilsoncc), [@dkotter](https://github.com/dkotter) via [#1043](https://github.com/10up/classifai/pull/1043)). +- Content Generation integration with the WordPress Quick Draft widget for quick AI-powered draft content creation (props [@faisal-alvi](https://github.com/faisal-alvi), [@jeffpaul](https://github.com/jeffpaul), [@dkotter](https://github.com/dkotter) via [#1012](https://github.com/10up/classifai/pull/1012)). +- New methods on the Provider class that allow you to get all credentials or a specific credential, pulling the credentials from the larger Feature settings (props [@fabiankaegy](https://github.com/fabiankaegy), [@peterwilsoncc](https://github.com/peterwilsoncc), [@dkotter](https://github.com/dkotter) via [#1043](https://github.com/10up/classifai/pull/1043)). +- Ability to change any AI suggested terms when using the Classification Feature in manual mode (props [@zamanq](https://github.com/zamanq), [@jeffpaul](https://github.com/jeffpaul), [@dkotter](https://github.com/dkotter) via [#1039](https://github.com/10up/classifai/pull/1039)). +- Helper texts for various settings, making it easier to understand what each setting does (props [@hugosolar](https://github.com/hugosolar), [@jeffpaul](https://github.com/jeffpaul), [@dkotter](https://github.com/dkotter) via [#957](https://github.com/10up/classifai/pull/957)). +- Ensure all Providers have an `authenticate_credentials` method that we can use to validate the credentials are valid (props [@peterwilsoncc](https://github.com/peterwilsoncc), [@dkotter](https://github.com/dkotter) via [#1048](https://github.com/10up/classifai/pull/1048)). + +### Changed + +- Text-to-speech audio generation now runs asynchronously via Action Scheduler, ensuring request timeouts aren't hit (props [@rahulsprajapati](https://github.com/rahulsprajapati), [@peterwilsoncc](https://github.com/peterwilsoncc), [@dkotter](https://github.com/dkotter) via [#1042](https://github.com/10up/classifai/pull/1042)). +- Move the Ollama model dropdown setting out of the Provider configuration, making it easier to choose a model (props [@turtlepod](https://github.com/turtlepod), [@jeffpaul](https://github.com/jeffpaul), [@iamdharmesh](https://github.com/iamdharmesh), [@dkotter](https://github.com/dkotter) via [#1031](https://github.com/10up/classifai/pull/1031)). +- For filters that run when API requests are made, the Feature name, not the Feature option name is now passed as an argument. If you have code that relies on that argument, updates will be needed (props [@peterwilsoncc](https://github.com/peterwilsoncc), [@dkotter](https://github.com/dkotter) via [#1043](https://github.com/10up/classifai/pull/1043)). +- Allow all settings to be saved, including credential fields, even if they are blank. This is mostly to support those using the new `classifai_provider_credentials` filters to override credentials (props [@peterwilsoncc](https://github.com/peterwilsoncc), [@dkotter](https://github.com/dkotter) via [#1048](https://github.com/10up/classifai/pull/1048)). + +### Fixed + +- Opt-in to new changes coming to Gutenberg react components, like larger font-sizing and removal of margins, to avoid deprecation notices being logged to the browser console (props [@dkotter](https://github.com/dkotter), [@peterwilsoncc](https://github.com/peterwilsoncc) via [#1045](https://github.com/10up/classifai/pull/1045)). +- Resolve deprecation warnings in our WordPress Playground integration (props [@dkotter](https://github.com/dkotter), [@jeffpaul](https://github.com/jeffpaul) via [#1037](https://github.com/10up/classifai/pull/1037)). + ### Deprecated -- The legacy settings screen (enabled via the `classifai_use_legacy_settings_panel` filter) is now formally deprecated and scheduled for removal in a future release. An admin notice will be displayed when this filter is active. Please migrate to the new React-based settings experience (props [@zamanq](https://github.com/zamanq), [@jeffpaul](https://github.com/jeffpaul) via [#1036](https://github.com/10up/classifai/pull/1036)). +- The legacy settings screen (enabled via the `classifai_use_legacy_settings_panel` filter) is now formally deprecated and scheduled for removal in a future release. An admin notice will be displayed when this filter is active. Please migrate to the new React-based settings experience (props [@zamanq](https://github.com/zamanq), [@jeffpaul](https://github.com/jeffpaul), [@dkotter](https://github.com/dkotter) via [#1036](https://github.com/10up/classifai/pull/1036)). + +### Security + +- Add a `CredentialObfuscator` class that will obfuscate any private credentials before rendering those in the settings screen (props [@dkotter](https://github.com/dkotter), [@peterwilsoncc](https://github.com/peterwilsoncc) via [#1047](https://github.com/10up/classifai/pull/1047)). +- Hardening: add read post check for Watson NLU classification previewer (props [@peterwilsoncc](https://github.com/peterwilsoncc) [@dkotter](https://github.com/dkotter) via [#1049](https://github.com/10up/classifai/pull/1049)). +- Ensure our helper files don't allow direct file access (props [@dkotter](https://github.com/dkotter), [@jeffpaul](https://github.com/jeffpaul) via [#1028](https://github.com/10up/classifai/pull/1028)). +- Update dependencies via npm audit fix (props [@peterwilsoncc](https://github.com/peterwilsoncc), [@dkotter](https://github.com/dkotter) via [#1033](https://github.com/10up/classifai/pull/1033)). +- Bump `lodash` from 4.17.21 to 4.17.23 (props [@dependabot[bot]](https://github.com/apps/dependabot), [@dkotter](https://github.com/dkotter) via [#1034](https://github.com/10up/classifai/pull/1034)). +- Bump `lodash-es` from 4.17.22 to 4.17.23 (props [@dependabot[bot]](https://github.com/apps/dependabot), [@dkotter](https://github.com/dkotter) via [#1035](https://github.com/10up/classifai/pull/1035)). +- Bump `systeminformation` from 5.30.0 to 5.31.1 (props [@dependabot[bot]](https://github.com/apps/dependabot), [@dkotter](https://github.com/dkotter) via [#1057](https://github.com/10up/classifai/pull/1057)). +- Bump `basic-ftp` from 5.1.0 to 5.2.0 (props [@dependabot[bot]](https://github.com/apps/dependabot), [@dkotter](https://github.com/dkotter) via [#1061](https://github.com/10up/classifai/pull/1061)). +- Bump `immutable` from 5.1.4 to 5.1.5 (props [@dependabot[bot]](https://github.com/apps/dependabot), [@dkotter](https://github.com/dkotter) via [#1063](https://github.com/10up/classifai/pull/1063)). +- Bump `svgo` from 3.3.2 to 3.3.3 (props [@dependabot[bot]](https://github.com/apps/dependabot), [@dkotter](https://github.com/dkotter) via [#1064](https://github.com/10up/classifai/pull/1064)). + +### Developer + +- New documentation on how to extend ClassifAI with a custom Feature (props [@shadyvb](https://github.com/shadyvb), [@dkotter](https://github.com/dkotter) via [#1015](https://github.com/10up/classifai/pull/1015)). +- Add Patchstack security-reporting FAQ (props [@jeffpaul](https://github.com/jeffpaul) via [#1029](https://github.com/10up/classifai/pull/1029)). +- Remove SVG loader in favour of WP Scripts version (props [@peterwilsoncc](https://github.com/peterwilsoncc), [@dkotter](https://github.com/dkotter) via [#1033](https://github.com/10up/classifai/pull/1033)). +- E2E test: set fast fail to false in GitHub action (props [@peterwilsoncc](https://github.com/peterwilsoncc), [@dkotter](https://github.com/dkotter) via [#1033](https://github.com/10up/classifai/pull/1033)). +- Update `@wordpress/scripts` to 31.3.0 and `@wordpress/env` to 10.38.0 (props [@peterwilsoncc](https://github.com/peterwilsoncc), [@dkotter](https://github.com/dkotter) via [#1033](https://github.com/10up/classifai/pull/1033)). +- Move WP bundled dependencies to eslint config (props [@peterwilsoncc](https://github.com/peterwilsoncc), [@dkotter](https://github.com/dkotter) via [#1033](https://github.com/10up/classifai/pull/1033)). +- Update readmes to be more streamlined and link to our documentation site for those that want more information (props [@dkotter](https://github.com/dkotter), [@jeffpaul](https://github.com/jeffpaul) via [#1041](https://github.com/10up/classifai/pull/1041)). ## [3.7.1] - 2026-01-12 @@ -890,6 +936,7 @@ All notable changes to this project will be documented in this file, per [the Ke - Initial closed source release [Unreleased]: https://github.com/10up/classifai/compare/trunk...develop +[3.8.0]: https://github.com/10up/classifai/compare/3.7.1...3.8.0 [3.7.1]: https://github.com/10up/classifai/compare/3.7.0...3.7.1 [3.7.0]: https://github.com/10up/classifai/compare/3.6.0...3.7.0 [3.6.0]: https://github.com/10up/classifai/compare/3.5.0...3.6.0 diff --git a/CREDITS.md b/CREDITS.md index 6d287f6f5..ad26a310f 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -10,7 +10,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. -[Darshan Sawardekar (@dsawardekar)](https://github.com/dsawardekar), [Ryan Welcher (@ryanwelcher)](https://github.com/ryanwelcher), [Adam Silverstein (@adamsilverstein)](https://github.com/adamsilverstein), [Jeffrey Paul (@jeffpaul)](https://github.com/jeffpaul), [Helen Hou-Sandí (@helen)](https://github.com/helen), [Christian Chung (@christianc1)](https://github.com/christianc1), [Dependabot (@dependabot)](https://github.com/dependabot), [Dillon McCallum (@McCallumDillon)](https://github.com/McCallumDillon), [Dustin Rue (@dustinrue)](https://github.com/dustinrue), [Jay Wood (@JayWood)](https://github.com/JayWood), [John Watkins (@johnwatkins0)](https://github.com/johnwatkins0), [Matthew McAchran (@mmcachran)](https://github.com/mmcachran), [Tung Du (@dinhtungdu)](https://github.com/dinhtungdu), [Darío Hereñú (@kant)](https://github.com/kant), [Aaron Jorbin (@aaronjorbin)](https://github.com/aaronjorbin), [Eduard Florea (@eflorea)](https://github.com/eflorea), [Jackie Kjome (@JackieKjome)](https://github.com/JackieKjome), [Ricky Lee Whittemore (@rickalee)](https://github.com/rickalee), [Ritesh Patel (@Ritesh-patel)](https://github.com/Ritesh-patel), [Dana Ross (@dana-ross)](https://github.com/dana-ross), [Darin Kotter (@dkotter)](https://github.com/dkotter), [Pete Nelson (@petenelson)](https://github.com/petenelson), [Connor Smyth (@ActuallyConnor)](https://github.com/ActuallyConnor), [Oscar Sanchez S. (@oscarssanchez)](https://github.com/oscarssanchez), [Shah Qureshi (@ShahAaron)](https://github.com/ShahAaron), [Barry Ceelen (@barryceelen)](https://github.com/barryceelen), [Jeffrey Carandang (@phpbits)](https://github.com/phpbits), [Thrijith Thankachan (@thrijith)](https://github.com/thrijith), [Junaid Bhura (@junaidbhura)](https://github.com/junaidbhura), [Blanca Hong [@blancahong]](https://profiles.wordpress.org/blancahong/), [Barney Jeffries (@barneyjeffries)](https://github.com/barneyjeffries), [Siddharth Thevaril (@Sidsector9)](https://github.com/Sidsector9), [@myBCN](https://github.com/myBCN), [James Morrison (@jamesmorrison)](https://github.com/jamesmorrison), [Rahul Prajapati (@rahulsprajapati)](https://github.com/rahulsprajapati), [Sérgio Santos (@s3rgiosan)](https://github.com/s3rgiosan), [Dharmesh Patel (@iamdharmesh)](https://github.com/iamdharmesh), [Delfina Hoxha](https://www.linkedin.com/in/delfina-hoxha/), [Ajay Maurya (@ajmaurya99)](https://github.com/ajmaurya99), [Faisal Alvi (@faisal-alvi)](https://github.com/faisal-alvi), [Mustafa Uysal (@mustafauysal)](https://github.com/mustafauysal), [Max Lyuchin (@cadic)](https://github.com/cadic), [Peter Wilson (@peterwilsoncc)](https://github.com/peterwilsoncc), [Quamruz Zaman (@zamanq)](https://github.com/zamanq), [Ravinder Kumar (@ravinderk)](https://github.com/ravinderk), [Joe McGill (@joemcgill)](https://github.com/joemcgill), [Tyler Bailey (@TylerB24890)](https://github.com/TylerB24890), [Viktor Szépe (@szepeviktor)](https://github.com/szepeviktor), [Ivan Ivanić (@Spoygg)](https://github.com/Spoygg), [Jayedul Kabir (@jayedul)](https://github.com/jayedul), [Garth Gutenberg (@ggutenberg)](https://github.com/ggutenberg), [Mehidi Hassan (@mehidi258)](https://github.com/mehidi258), [Julian Weiland (@derweili)](https://github.com/derweili), [Anton Vanyukov (@av3nger)](https://github.com/av3nger), [Ben Keith (@benlk)](https://github.com/benlk), [David Hechler (@pixeldevsio)](https://github.com/pixeldevsio), [Joshua Abenazer (@joshuaabenazer)](https://github.com/joshuaabenazer), [Dominik Schilling (@ocean90)](https://github.com/ocean90), [Björn Holine (@bjorn2404)](https://github.com/bjorn2404), [Konstantinos Galanakis (@kmgalanakis)](https://github.com/kmgalanakis), [Dan Berko (@berkod)](https://github.com/berkod), [Luca Ricci (@theskinnyghost)](https://github.com/theskinnyghost), [Parikshit Adhikari (@parikshit-adhikari)](https://github.com/parikshit-adhikari), [Surav Shrestha (@shresthasurav)](https://github.com/shresthasurav), [Tim Schwartz (@timatron)](https://github.com/timatron), [Ankit Gupta (@ankitguptaindia)](https://github.com/ankitguptaindia), [Kirtan Gajjar (@kirtangajjar)](https://github.com/kirtangajjar), [Shazahan Kabir Saju (@sksaju)](https://github.com/sksaju), [Giorgos Sarigiannidis (@gsarig)](https://github.com/gsarig), [Harshal Kadu (@QAharshalkadu)](https://github.com/QAharshalkadu), [Sumit Bagthariya (@qasumitbagthariya)](https://github.com/qasumitbagthariya), [ajaxthemestudios (@ajaxthemestudios)](https://github.com/ajaxthemestudios), [CacheMeOwside (@CacheMeOwside)](https://github.com/CacheMeOwside), [James Styles (@jamespstyles)](https://github.com/jamespstyles), [Kate Rickard](https://uk.linkedin.com/in/katerickard), [Felipe Elia (@felipeelia)](https://github.com/felipeelia), [Tyler Cherpak (@tylercherpak)](https://github.com/tylercherpak), [Fabian Kägy (@fabiankaegy)](https://github.com/fabiankaegy), [Jason LeMahieu (@MadtownLems)](https://github.com/MadtownLems), [Mike Hemberger (@JiveDig)](https://github.com/JiveDig), [Dilip Bheda (@dilipbheda)](https://github.com/dilipbheda), [Bhargav(Bunty) (@BhargavBhandari90)](https://github.com/BhargavBhandari90), [Miguel Axcar (@MiguelAxcar)](https://github.com/MiguelAxcar), [Matt Radford (@mattradford-sage)](https://github.com/mattradford-sage), [Peter Sorensen (@psorensen)](https://github.com/psorensen), [Jeremy Englert (@JeremyEnglert)](https://github.com/JeremyEnglert), [Vikram Moparthy (@vikrampm1)](https://github.com/vikrampm1), [Ernesto Méndez (@mendezcode)](https://github.com/mendezcode), [Kevin Kyburz (@swissky)](https://github.com/swissky), [Jake Hudson (@jhudson-ent)](https://github.com/jhudson-ent), [@DAnn2012](https://github.com/DAnn2012). +[Darshan Sawardekar (@dsawardekar)](https://github.com/dsawardekar), [Ryan Welcher (@ryanwelcher)](https://github.com/ryanwelcher), [Adam Silverstein (@adamsilverstein)](https://github.com/adamsilverstein), [Jeffrey Paul (@jeffpaul)](https://github.com/jeffpaul), [Helen Hou-Sandí (@helen)](https://github.com/helen), [Christian Chung (@christianc1)](https://github.com/christianc1), [Dependabot (@dependabot)](https://github.com/dependabot), [Dillon McCallum (@McCallumDillon)](https://github.com/McCallumDillon), [Dustin Rue (@dustinrue)](https://github.com/dustinrue), [Jay Wood (@JayWood)](https://github.com/JayWood), [John Watkins (@johnwatkins0)](https://github.com/johnwatkins0), [Matthew McAchran (@mmcachran)](https://github.com/mmcachran), [Tung Du (@dinhtungdu)](https://github.com/dinhtungdu), [Darío Hereñú (@kant)](https://github.com/kant), [Aaron Jorbin (@aaronjorbin)](https://github.com/aaronjorbin), [Eduard Florea (@eflorea)](https://github.com/eflorea), [Jackie Kjome (@JackieKjome)](https://github.com/JackieKjome), [Ricky Lee Whittemore (@rickalee)](https://github.com/rickalee), [Ritesh Patel (@Ritesh-patel)](https://github.com/Ritesh-patel), [Dana Ross (@dana-ross)](https://github.com/dana-ross), [Darin Kotter (@dkotter)](https://github.com/dkotter), [Pete Nelson (@petenelson)](https://github.com/petenelson), [Connor Smyth (@ActuallyConnor)](https://github.com/ActuallyConnor), [Oscar Sanchez S. (@oscarssanchez)](https://github.com/oscarssanchez), [Shah Qureshi (@ShahAaron)](https://github.com/ShahAaron), [Barry Ceelen (@barryceelen)](https://github.com/barryceelen), [Jeffrey Carandang (@phpbits)](https://github.com/phpbits), [Thrijith Thankachan (@thrijith)](https://github.com/thrijith), [Junaid Bhura (@junaidbhura)](https://github.com/junaidbhura), [Blanca Hong [@blancahong]](https://profiles.wordpress.org/blancahong/), [Barney Jeffries (@barneyjeffries)](https://github.com/barneyjeffries), [Siddharth Thevaril (@Sidsector9)](https://github.com/Sidsector9), [@myBCN](https://github.com/myBCN), [James Morrison (@jamesmorrison)](https://github.com/jamesmorrison), [Rahul Prajapati (@rahulsprajapati)](https://github.com/rahulsprajapati), [Sérgio Santos (@s3rgiosan)](https://github.com/s3rgiosan), [Dharmesh Patel (@iamdharmesh)](https://github.com/iamdharmesh), [Delfina Hoxha](https://www.linkedin.com/in/delfina-hoxha/), [Ajay Maurya (@ajmaurya99)](https://github.com/ajmaurya99), [Faisal Alvi (@faisal-alvi)](https://github.com/faisal-alvi), [Mustafa Uysal (@mustafauysal)](https://github.com/mustafauysal), [Max Lyuchin (@cadic)](https://github.com/cadic), [Peter Wilson (@peterwilsoncc)](https://github.com/peterwilsoncc), [Quamruz Zaman (@zamanq)](https://github.com/zamanq), [Ravinder Kumar (@ravinderk)](https://github.com/ravinderk), [Joe McGill (@joemcgill)](https://github.com/joemcgill), [Tyler Bailey (@TylerB24890)](https://github.com/TylerB24890), [Viktor Szépe (@szepeviktor)](https://github.com/szepeviktor), [Ivan Ivanić (@Spoygg)](https://github.com/Spoygg), [Jayedul Kabir (@jayedul)](https://github.com/jayedul), [Garth Gutenberg (@ggutenberg)](https://github.com/ggutenberg), [Mehidi Hassan (@mehidi258)](https://github.com/mehidi258), [Julian Weiland (@derweili)](https://github.com/derweili), [Anton Vanyukov (@av3nger)](https://github.com/av3nger), [Ben Keith (@benlk)](https://github.com/benlk), [David Hechler (@pixeldevsio)](https://github.com/pixeldevsio), [Joshua Abenazer (@joshuaabenazer)](https://github.com/joshuaabenazer), [Dominik Schilling (@ocean90)](https://github.com/ocean90), [Björn Holine (@bjorn2404)](https://github.com/bjorn2404), [Konstantinos Galanakis (@kmgalanakis)](https://github.com/kmgalanakis), [Dan Berko (@berkod)](https://github.com/berkod), [Luca Ricci (@theskinnyghost)](https://github.com/theskinnyghost), [Parikshit Adhikari (@parikshit-adhikari)](https://github.com/parikshit-adhikari), [Surav Shrestha (@shresthasurav)](https://github.com/shresthasurav), [Tim Schwartz (@timatron)](https://github.com/timatron), [Ankit Gupta (@ankitguptaindia)](https://github.com/ankitguptaindia), [Kirtan Gajjar (@kirtangajjar)](https://github.com/kirtangajjar), [Shazahan Kabir Saju (@sksaju)](https://github.com/sksaju), [Giorgos Sarigiannidis (@gsarig)](https://github.com/gsarig), [Harshal Kadu (@QAharshalkadu)](https://github.com/QAharshalkadu), [Sumit Bagthariya (@qasumitbagthariya)](https://github.com/qasumitbagthariya), [ajaxthemestudios (@ajaxthemestudios)](https://github.com/ajaxthemestudios), [CacheMeOwside (@CacheMeOwside)](https://github.com/CacheMeOwside), [James Styles (@jamespstyles)](https://github.com/jamespstyles), [Kate Rickard](https://uk.linkedin.com/in/katerickard), [Felipe Elia (@felipeelia)](https://github.com/felipeelia), [Tyler Cherpak (@tylercherpak)](https://github.com/tylercherpak), [Fabian Kägy (@fabiankaegy)](https://github.com/fabiankaegy), [Jason LeMahieu (@MadtownLems)](https://github.com/MadtownLems), [Mike Hemberger (@JiveDig)](https://github.com/JiveDig), [Dilip Bheda (@dilipbheda)](https://github.com/dilipbheda), [Bhargav(Bunty) (@BhargavBhandari90)](https://github.com/BhargavBhandari90), [Miguel Axcar (@MiguelAxcar)](https://github.com/MiguelAxcar), [Matt Radford (@mattradford-sage)](https://github.com/mattradford-sage), [Peter Sorensen (@psorensen)](https://github.com/psorensen), [Jeremy Englert (@JeremyEnglert)](https://github.com/JeremyEnglert), [Vikram Moparthy (@vikrampm1)](https://github.com/vikrampm1), [Ernesto Méndez (@mendezcode)](https://github.com/mendezcode), [Kevin Kyburz (@swissky)](https://github.com/swissky), [Jake Hudson (@jhudson-ent)](https://github.com/jhudson-ent), [@DAnn2012](https://github.com/DAnn2012), [Hugo Solar (@hugosolar)](https://github.com/hugosolar), [David Chandra Purnama (@turtlepod)](https://github.com/turtlepod), [Shady Sharaf (@shadyvb)](https://github.com/shadyvb). ## Libraries diff --git a/README.md b/README.md index 3c307b9b6..ad09e9b2e 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,7 @@ Tap into leading cloud-based services like [OpenAI](https://openai.com/), [Micro * Scan PDF files for embedded text and save for use in post meta using [Microsoft Azure's AI Vision API](https://azure.microsoft.com/en-us/services/cognitive-services/computer-vision/) * Bulk classify content with [WP-CLI](https://wp-cli.org/) * Modification of your `robots.txt` file to block the most common AI data scraping bots from indexing your site +* Use [built-in filters to override AI credentials](https://10up.github.io/classifai/advanced-docs/programmatic-credentials), allowing management of credentials outside of the database, such as by using environment variables or a specific secret management service ### Language Processing @@ -80,6 +81,8 @@ For detailed instructions on how to register for a ClassifAI account, please ref ClassifAI implements a variety of Features that can be configured and used to augment your WordPress-powered websites. For detailed instructions on how to set up each Feature, please refer to the [ClassifAI documentation site](https://10up.github.io/classifai/feature-configuration). +If you want to more securely manage credentials for a specific Feature, you can use the [built-in filters to override AI credentials](https://10up.github.io/classifai/advanced-docs/programmatic-credentials). + ## Run locally hosted LLMs Some of the Features in ClassifAI can be set up to use locally hosted LLMs. This has the benefit of complete privacy and data control, as well as being able to be run without any cost. The trade-offs here are performance isn't as great and results may also be less accurate. diff --git a/classifai.php b/classifai.php index 976d741ee..292e98d28 100644 --- a/classifai.php +++ b/classifai.php @@ -4,7 +4,7 @@ * Plugin URI: https://github.com/10up/classifai * Update URI: https://classifaiplugin.com * Description: Enhance your WordPress content with Artificial Intelligence and Machine Learning services. - * Version: 3.8.0-dev + * Version: 3.8.0 * Requires at least: 6.8 * Requires PHP: 7.4 * Author: 10up diff --git a/config.php b/config.php index 43106c276..f40697a44 100644 --- a/config.php +++ b/config.php @@ -7,7 +7,7 @@ exit; } -$plugin_version = '3.7.1'; +$plugin_version = '3.8.0'; // Useful global constants classifai_define( 'CLASSIFAI_PLUGIN', __DIR__ . '/classifai.php' ); diff --git a/includes/Classifai/Admin/Notifications.php b/includes/Classifai/Admin/Notifications.php index 362f466d5..8cfc97ad5 100644 --- a/includes/Classifai/Admin/Notifications.php +++ b/includes/Classifai/Admin/Notifications.php @@ -281,7 +281,7 @@ public function render_embeddings_notice() { /** * Render a deprecation notice when the legacy settings filter is active. * - * @since x.x.x + * @since 3.8.0 */ public function render_legacy_settings_deprecation_notice() { // Only show if the legacy settings filter is active. diff --git a/includes/Classifai/Providers/CredentialObfuscator.php b/includes/Classifai/Providers/CredentialObfuscator.php index f92c588c6..da13995fe 100644 --- a/includes/Classifai/Providers/CredentialObfuscator.php +++ b/includes/Classifai/Providers/CredentialObfuscator.php @@ -19,7 +19,7 @@ * Handles obfuscation of sensitive credentials when displayed in the admin UI * and preserves original values when obfuscated values are submitted. * - * @since x.x.x + * @since 3.8.0 */ class CredentialObfuscator { @@ -43,7 +43,7 @@ class CredentialObfuscator { * Returns first N characters followed by asterisks. * Example: "sk-abc123xyz789" becomes "sk-abc************" * - * @since x.x.x + * @since 3.8.0 * * @param string $value The credential value to obfuscate. * @return string The obfuscated value, or original if too short. @@ -78,7 +78,7 @@ public static function obfuscate( string $value ): string { * * Detects values containing 3 or more consecutive asterisks. * - * @since x.x.x + * @since 3.8.0 * * @param string $value The value to check. * @return bool True if the value appears to be obfuscated. @@ -97,7 +97,7 @@ public static function is_obfuscated( string $value ): bool { * * Returns false for non-sensitive fields like authenticated, endpoint_url, etc. * - * @since x.x.x + * @since 3.8.0 * * @param string $field The field name to check. * @param string $profile_id The profile ID. @@ -113,7 +113,7 @@ public static function should_obfuscate_field( string $field, string $profile_id * * Uses ProviderProfiles to determine which fields are credentials. * - * @since x.x.x + * @since 3.8.0 * * @param string $provider_id The Provider ID (e.g., 'openai_chatgpt'). * @param array $settings The Provider settings array. @@ -147,7 +147,7 @@ public static function obfuscate_provider_settings( string $provider_id, array $ * Iterates through all Provider settings in the Feature and obfuscates * their credential fields. * - * @since x.x.x + * @since 3.8.0 * * @param array $settings The complete Feature settings array. * @return array The settings with all Provider credentials obfuscated. @@ -177,7 +177,7 @@ public static function obfuscate_feature_settings( array $settings ): array { * If a new value is obfuscated, use the existing value instead. * This prevents obfuscated placeholder values from being saved to the database. * - * @since x.x.x + * @since 3.8.0 * * @param array $new_settings The new settings being saved. * @param array $existing_settings The current saved settings. @@ -220,7 +220,7 @@ public static function merge_credentials( array $new_settings, array $existing_s * when obfuscated values are submitted. This ensures switching Providers * doesn't save obfuscated values for inactive Providers. * - * @since x.x.x + * @since 3.8.0 * * @param array $new_settings The new Feature settings being saved. * @param array $existing_settings The current saved Feature settings. diff --git a/includes/Classifai/Providers/CredentialResolver.php b/includes/Classifai/Providers/CredentialResolver.php index 53c4394ce..ac4ba102b 100644 --- a/includes/Classifai/Providers/CredentialResolver.php +++ b/includes/Classifai/Providers/CredentialResolver.php @@ -6,7 +6,7 @@ * Feature-level config. Used at runtime when Providers need * api_key, endpoint_url, etc. * - * @since x.x.x + * @since 3.8.0 */ namespace Classifai\Providers; diff --git a/includes/Classifai/Providers/Provider.php b/includes/Classifai/Providers/Provider.php index 971386b44..02dfa1f9f 100644 --- a/includes/Classifai/Providers/Provider.php +++ b/includes/Classifai/Providers/Provider.php @@ -173,7 +173,7 @@ public function add_api_key_field( array $args = [] ) { /** * Get the credentials for the Provider. * - * @since x.x.x + * @since 3.8.0 * * @param array $settings Feature settings. Optional, will default to using saved settings. * @return array @@ -223,7 +223,7 @@ public function get_credentials( array $settings = [] ): array { * - `classifai_provider_credentials_chrome_ai` * - `classifai_provider_credentials_togetherai_image` * - * @since x.x.x + * @since 3.8.0 * @hook classifai_provider_credentials_{$provider_id} * * @param array $credentials The credentials for the Provider. @@ -241,7 +241,7 @@ public function get_credentials( array $settings = [] ): array { /** * Filter the credentials for the Provider. * - * @since x.x.x + * @since 3.8.0 * @hook classifai_provider_credentials * * @param array $credentials The credentials for the Provider. diff --git a/includes/Classifai/Providers/ProviderProfiles.php b/includes/Classifai/Providers/ProviderProfiles.php index 6b60a1d25..b790989dc 100644 --- a/includes/Classifai/Providers/ProviderProfiles.php +++ b/includes/Classifai/Providers/ProviderProfiles.php @@ -6,7 +6,7 @@ * profiles (e.g. openai). Grouped profiles share one credential set across * multiple Providers; ungrouped profiles are 1:1 with a Provider. * - * @since x.x.x + * @since 3.8.0 */ namespace Classifai\Providers; @@ -132,7 +132,7 @@ public static function get_all_profiles(): array { /** * Filter the Provider profiles registry. * - * @since x.x.x + * @since 3.8.0 * @hook classifai_provider_profiles * * @param array $profiles Profile definitions. diff --git a/package-lock.json b/package-lock.json index 23b399e83..159708213 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "classifai", - "version": "3.7.1", + "version": "3.8.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "classifai", - "version": "3.7.1", + "version": "3.8.0", "license": "GPL-2.0-or-later", "dependencies": { "@wordpress/icons": "^11.4.0", diff --git a/package.json b/package.json index 6297df570..b334d28c7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "classifai", - "version": "3.7.1", + "version": "3.8.0", "license": "GPL-2.0-or-later", "repository": "https://github.com/10up/classifai/", "description": "Enhance your WordPress content with Artificial Intelligence and Machine Learning services.", diff --git a/readme.txt b/readme.txt index ea1f1dfb5..5ab3361a3 100644 --- a/readme.txt +++ b/readme.txt @@ -4,7 +4,7 @@ Tags: AI, Artificial Intelligence, ML, Machine Learning, Microsoft Requires at least: 6.8 Tested up to: 6.9 Requires PHP: 7.4 -Stable tag: 3.7.1 +Stable tag: 3.8.0 License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html @@ -36,6 +36,7 @@ Tap into leading cloud-based services like [OpenAI](https://openai.com/), [Micro * Scan PDF files for embedded text and save for use in post meta using [Microsoft Azure's AI Vision API](https://azure.microsoft.com/en-us/services/cognitive-services/computer-vision/) * Bulk classify content with [WP-CLI](https://wp-cli.org/) * Modification of your `robots.txt` file to block the most common AI data scraping bots from indexing your site +* Use [built-in filters to override AI credentials](https://10up.github.io/classifai/advanced-docs/programmatic-credentials), allowing management of credentials outside of the database, such as by using environment variables or a specific secret management service == Requirements == @@ -53,7 +54,7 @@ Please report security bugs found in the source code of the undefined plugin thr == Upgrade Notice == -= x.x.x = += 3.8.0 = **Note that the legacy settings screen (enabled via the `classifai_use_legacy_settings_panel` filter) is now formally deprecated and scheduled for removal in a future release. Please migrate to the new React-based settings experience.** = 3.3.0 =