New major version for active development for the Drupal ^11.4 and Drupal ^12 supported version of this module.
Drupal 9 and 10 support is dropped.
Basic refactoring done to support Drupal ^11.4 and Drupal ^12. The submodule flexmail_webform can add support for D12 as soon as webform supports D12.
Consent Audit can now count, per day, how many visitors answer the consent banner and what they answer, and shows the decision and acceptance rates on the report page.
Drupal 12 compatibility. Supports Drupal ^11 || ^12.
- Bug fix: uploading a Lottie file over 10 MB caused a fatal error on Drupal 11 (format_size() was removed from core). It now shows the intended validation message.
- Hooks moved to an OOP hook class (LottieFileHooks), with backwards-compatible wrappers so Drupal 11.0 keeps working.
- The status report check now uses hook_runtime_requirements().
- Dependency injection and test updates for PHPUnit 12.
Bugfix release for a regression in 8.x-1.8: the security fix for SA-CONTRIB-2026-209 also removed safe container attributes like container_class from the configuration (#3590635).
- On PHP-FPM, LiteSpeed and Drush, changes reach Emporiqa right after they are saved instead of at the next cron run, once Shop URL or trusted_host_patterns is set. Under Apache mod_php they still wait for cron, and the Settings and Sync tabs say so.
- An unpublished variation, or a product left with one variation, no longer stays in the chat until the next full sync.
- A new Shop URL setting puts every link sent to Emporiqa, and the Order status address, on your shop's address, whoever runs the sync.
#3628728: Automatic child labels now follow each node translation. When content translation is enabled for menu links, sync writes the child title in every language the node has, and removes a link translation when the node no longer has that language. A link keeps the language it already has. Status lists the translated labels and marks one stale until the next sync removes it.
Successful Read and Explain tool results include _mcp_sentinel_untrusted_read with class: untrusted_data and instructions: false. The marker says the result is data. It grants no permission, and a payload cannot remove or replace it. The marker counts toward the profile response-size cap; a read that exceeds the cap after the marker is refused and the payload is not returned. Write, trigger, and failed results omit it. This is not jailbreak detection.
- Drupal 12 compatibility is declared. core_version_requirement in query.info.yml is now ^9 || ^10 || ^11 || ^12 (drupal.org #3602271).
Fixed
- QueryService::condition() now declares ?string $key and a Condition return type, matching QueryInterface. The old untyped signature caused a fatal "must be compatible" error when the class loaded.
Requires drupal/mcp_server ^2.0.0-beta5. The stdio transport now uses upstream's drush mcp:server, and this module's dkan-mcp-server:serve command has been removed.
Breaking change
drush dkan-mcp-server:serve is gone. Use upstream's command, which requires an account argument:
First public beta. This module connects Drupal AI Assistant chat to one Telos Brain. Brain is a workflow runner: chat turns go to the Brain Execution API, and the model list is Brain workflows, not LLM names such as gpt-4.
Do not set Telos Brain as the site Chat default. Content Suggestions, CKEditor, and other one-shot features need a token LLM. Point only the AI Assistant at Brain.
System lines store facts: who made the change, the person it was about, and for a rename the new name. The sentence is written when the line is shown, in the reader's language, and follows renamed or deleted accounts.
New SystemLineBuilder service, and a "System line" display component on private messages that shows the sentence. Lines saved before this release still display.
A renamed conversation's line quotes the name, and a name with an ampersand shows as typed.
Drupal 12 compatibility fixes and backports from the original Bootstrap module (8.x-3.41 and 8.x-3.42).
This release requires Drupal 10.5 or 11.2 and later. Run the database updates (drush updb) after upgrading: a new post-update clears legacy cached HTTP responses that newer Symfony versions can no longer unserialize.