Daily Digest
Daily Digest – 15 July 2026
2026 Capabilities Progress
- Page generation — Canvas made significant progress with merged headless rendering support [140] and configuration UI for frontend management [143], enabling AI-driven page generation across multiple frameworks. Work continues on the place_components AI tool [121] that will allow natural language page assembly.
- Context management — Context Control Center hardened access controls for usage records [155] and advanced work on subcontext scope inheritance [157], though the core scope subscription model remains under design review with usability concerns blocking stable release [151].
- Background agents — AI Agents closed issue #3572361 for file-based instruction storage [92] and advanced work on tool execution controls including usage limits [101][102] and per-tool approval workflows [94], with the 1.4.0 release being planned [88].
- Design system integration — Canvas is addressing component folder assignment issues [142] and advancing multi-bundle content reference support [134][137], though two property input bugs affecting editorial workflows remain under investigation [117][122].
- Content creation and discovery — AI Search merged batch embeddings for improved indexing performance [163] and advanced work on structured result data with entity access controls [161]. The core AI module added rich-text image description support to automators [60][61] and is working to resolve CKEditor streaming issues with Gemini 2.x models [5][42].
- Advanced governance — The AI module merged streaming guardrail capabilities with mid-stream evaluation [62][70] and hardened chatbot API boundaries against unauthorized execution [69]. Canvas delivered conflict detection UI improvements [125][126] and strengthened auto-save integrity [136][141].
- Intelligent website improvements — No direct progress today.
- Multi-channel campaigns — No direct progress today.
Shipped
- AI module dark theme compatibility — Completed support for Gin dark theme in both the MDX editor and Tool Explorer, ensuring consistent appearance across admin interface configurations [51][52].
- AI module localization fix — Resolved an issue where the tone-of-voice CKEditor selector was not using translated taxonomy terms, enabling multilingual sites to present AI prompts in the correct language [50].
- AI module streaming guardrails — Merged a new guardrail plugin with kernel tests that demonstrates mid-stream content evaluation during AI generation [62].
- AI Search batch embeddings — Delivered batch processing capability for content indexing, improving performance when deploying AI-powered search across large content repositories [163].
- Canvas headless rendering — Shipped SDK support for automatically rendering Canvas component trees in headless frontend frameworks, along with configuration UI for managing multiple frontend environments [140][143][144].
Ongoing
- AI Agents tool execution controls — Multiple mechanisms to govern agent behavior are under review, including limits on tool invocation frequency and per-tool approval workflows [101][102].
- AI module chatbot modal interactions — Work continues to resolve an issue where the chatbot closes itself when modal dialogs are triggered, affecting editor workflows [72][74].
- Canvas component property bugs — Investigation underway for two issues where boolean toggles unexpectedly activate and radio button selections reset during property edits [117][122].
- Context Control Center access control hardening — Draft solution prepared to address a security issue where usage record pages could expose unpublished content to users without proper permissions [155].
- AI Search entity access enforcement — Development in progress to expose structured search result data and enforce entity-level permissions, ensuring users only see authorized content in AI-generated answers [161].
AI (Artificial Intelligence)
The AI module made significant progress on user experience, integration robustness, and content-moderation capabilities over the past 24 hours. Several fixes improving cross-theme compatibility and internationalization were merged, alongside enhancements to streaming guardrails and automation workflows.
Key delivery included improved rich-text content handling: automators can now detect and process images embedded in formatted text fields, generating AI descriptions that feed into moderation or summarization workflows. This enables content pre-screening that evaluates both text and visual context. Support for dark-theme rendering in the Gin admin interface was completed for both the MDX editor and Tool Explorer, ensuring consistent appearance across theming choices. A localization issue affecting the tone-of-voice taxonomy selector in CKEditor was resolved, so multilingual sites now correctly use translated term labels and descriptions in prompts.
On the guardrails front, a new streaming guardrail plugin and supporting kernel tests were merged, demonstrating mid-stream content evaluation during generation. The API boundary for the chatbot endpoint was hardened to reject caller-supplied execution identity fields, closing a potential authorization gap. Work continued on taxonomy automators (handling HTML-encoded entities), streaming output preservation, and chatbot behavior when modal dialogs trigger page refreshes.
Documentation expanded with an ecosystem index and OpenAI provider setup guide. Several uninstall and permission-handling bugs were addressed, and visual regression baselines were added for the module's four compiled UI elements.
How can I help on this project?
- Prioritize resourcing for the chatbot modal-interaction issue, which affects editor workflows and has an open merge request awaiting review and final testing.
- Commission a cross-provider streaming compatibility audit to confirm the Gemini 2.x streaming fix generalizes to other vendors and avoid further 400-error reports.
Contributors: Abhinav Jha (ajabhinavjha30), Abhishek Dhariwal (adaptative), Ahmad Khader (Ahmad-Khader) [3], Ann Mary Sruthy (annmarysruthy), Artem Dmitriiev (a.dmitriiev), Avinash jha (avinash.jha) [1], Bharat Kelotra (bharatkelotra), Billy Davies (billy.davies), codebymikey, Joshua Fernandes (joshua1234511), Levente Besenyei (LeventeB) [1], Marcus Johansson (Marcus_Johansson) [2], Prabhavathi Vanipenta (prabha1997) [1], Ricardo Castañeda (cadence96), Ryan Szrama (rszrama), Shubham Prakash (shubham.prakash) [1], Thomas Werthmüller (weri) [1]
amazee.ai Private AI Provider
This module integrates private AI capabilities into Drupal, including support for vector databases and trial account provisioning. Over the past 24 hours, the team merged several improvements focused on installation reliability and documentation quality.
Two critical installation bugs were resolved. The first addressed a configuration import error that prevented administrators from managing site configuration via command-line tools. The second fixed a problem where the entire installation would fail if the trial account provisioning service was temporarily unavailable or at capacity. This change ensures that sites can be installed even when the external trial service is unreachable, treating free trial setup as optional rather than mandatory.
Documentation has been migrated to a new system and expanded to cover vector database capabilities. Automated quality improvements were also merged. One optimization for bulk vector database operations remains in draft review; when completed, it will improve indexing performance for sites processing large volumes of content.
How can I help on this project?
- Prioritize testing of the installation improvements in realistic deployment scenarios to confirm trial provisioning failures are handled gracefully across different network conditions.
- Approve allocation of review capacity to finalize the bulk indexing optimization currently in draft.
Contributors: Dan Lemon (dan2k3k4), project update bot (Project-Update-Bot), Rajab Natshah (RajabNatshah)
Gemini Provider
The Gemini Provider module enables integration with Google's Gemini AI models within Drupal environments. Over the past 24 hours, activity focused on expanding the module's capabilities to support more efficient content processing.
Work continued on Add support for batch embeddings, which would allow the system to process multiple pieces of content simultaneously rather than one at a time. This capability is important for improving performance when analyzing or categorizing large volumes of content. The work is in review, with progress being made on naming conventions and testing infrastructure to ensure compatibility with related systems.
No code was merged or committed during this period, indicating the project is in a refinement phase. This is typical activity for a module in development, with focus on ensuring quality before integration.
How can I help on this project?
- Allocate reviewer capacity to evaluate the batch embeddings work currently awaiting review, which could accelerate delivery of performance improvements.
- Clarify priority and timeline expectations for the batch processing feature to help the team sequence remaining development work.
AI Agents
Development continued on key features needed to make agents safer and more controllable in production settings. Work progressed on several mechanisms to govern how tools are invoked: limiting how many times a tool can run during a session, restricting tools from being called more than once in a single response, and controlling the order in which tools execute. These capabilities are important for preventing agents from looping indefinitely or acting in ways that don't align with business logic.
One feature was merged that allows agents to store and read instructions from a file, making it easier to share context between parent and child agents without consuming excessive tokens or losing detail. A minor type-hinting issue that prevented administrators from swapping the agent status storage implementation was also resolved.
Several quality-of-life improvements are in review, including a fix for streaming responses in chatbots and a solution to a UI bug where the "Interactive" option disappeared after adding a tool. A test suite for externally-driven agent execution (used by Canvas) has been added to prevent accidental breaking changes to that mode.
Planning is underway for the 1.4.0 release, with several feature proposals opened for review, including per-tool approval workflows and the ability to forward images from tool output to vision models in the next loop iteration.
How can I help on this project?
- Confirm priorities for the 1.4.0 release roadmap to focus contributor effort on features that unlock the most business value.
- Provide a test environment or budget for QA support to validate streaming, tool approval, and external orchestration workflows before stable release.
Contributors: Ahmad Khalil (ahmad-khalil-imagex), AKHIL BABU (AkhilBabu), Bharat Kelotra (bharatkelotra), Marcus Johansson (Marcus_Johansson), Nicolae Procopan (thebumikgmail.com), Prabhavathi Vanipenta (prabha1997)
Drupal Canvas
The past 24 hours saw concentrated progress on the headless capabilities of Canvas, which allow organizations to use Canvas as a content and layout engine while rendering pages through separate frontend frameworks like Next.js, Astro, or Nuxt.
Three related improvements to the headless experience were completed and merged. First, a new rendering system was added to the headless SDK, enabling applications to automatically traverse and display Canvas component trees without custom integration code. Second, a configuration interface was introduced in Canvas to manage multiple frontend URLs and provide setup guidance to developers. Third, environment variable requirements for headless applications were simplified and standardized, reducing manual configuration steps and preventing drift between settings.
However, one of these changes temporarily broke the synchronization mechanism that allows Canvas to communicate with locally running frontend development servers. This was quickly identified and corrected with a restoration of browser-based component sync, ensuring all four supported frameworks can properly connect to the Canvas editor.
Work continues on several functional areas. Two significant bugs affecting component properties are under investigation: boolean toggles that unexpectedly activate when other properties change, and radio button selections that reset during edits. A fix is in progress for a visual issue where sections using viewport-relative heights cause the preview iframe to grow incorrectly. Additionally, work is advancing on supporting content references that can point to multiple content types with different field structures.
How can I help on this project?
- Review and approve the headless configuration interface to ensure it meets the needs of teams planning to adopt headless architectures.
- Prioritize investigation of the component property bugs affecting boolean and radio inputs, as these impact daily editorial workflows.
Contributors: **** (project_19391_bot_cb443e60680723bba08a5351bf595251), Ben Mullins (bnjmnm), Bálint Kléri (balintbrews) [3], Christian López Espínola (penyaskito), Feliksas Mazeikis (f.mazeikis), Kunal Sachdev (kunal.sachdev), Lauri Timmanee (lauriii), Narendra Singh Rathore (NarendraR), Nodar Davituri (Davituri), Ravi Maniyar (ravi.maniyar.123), Ted Bowman (tedbow), utkarsh_33 (Utkarsh_33), Wim Leers (wimleers), wotnak [1]
Context Control Center (CCC)
Development activity this period centered on hardening the module's security and test resilience ahead of a stable release. Work is underway to address an access control issue where usage record pages could potentially expose content from unpublished context items to users without proper view permissions. A draft solution has been prepared covering both the content leak and link generation concerns.
A significant piece of technical debt is being resolved through updates to the test suite. Multiple tests were found to use hardcoded URL paths that break when upstream modules reorganize their routing structure, even though the module itself continues to work correctly. This caused false failures in automated testing. A fix covering the remaining brittle path assertions has been drafted and is under review.
Planning discussions continued around the scope subscription model, which has proven confusing for early users. This represents a core user experience challenge as the module approaches a stable release. Separately, a feature is being designed to let AI agents opt out of automatic context injection in favor of tool-based retrieval, and work on subcontext scope inheritance remains in progress.
The release notes contribution tracking task was completed, improving recognition of non-code contributions to the project.
How can I help on this project?
- Prioritize user experience review resources for the scope subscription redesign, which is blocking the stable release and affects core usability.
- Consider allocating dedicated security review capacity to validate and merge the access control hardening work currently in draft.
Contributors: Ahmad Khalil (ahmad-khalil-imagex), Kristen Pol (kepol), Pravesh Poonia (Pravesh_Poonia)
AI Search
The AI Search module made focused progress on performance and data architecture during this period. A substantial batch embeddings enhancement was merged to improve indexing performance, allowing content to be processed more efficiently at scale. This directly addresses one of the key bottlenecks when deploying AI-powered search across large content repositories.
Work continued on a new Markdown-based embedding strategy that intelligently splits content at headings, with two competing implementation approaches now under review. Additionally, development began on exposing structured search result data and enforcing entity-level permissions—a critical requirement for ensuring users only see content they're authorised to access when AI generates answers from indexed material. This security and transparency work has an active merge request in progress.
The module remains in active development with normal iteration across features and architecture improvements.
How can I help on this project?
- Provide guidance on which Markdown splitting approach better serves your content strategy, as two competing implementations are awaiting decision.
- Clarify access control requirements to ensure the security work aligns with organisational policy on content visibility.
Contributors: Abhisek Mazumdar (abhisekmazumdar), Artem Dmitriiev (a.dmitriiev)
Field Widget Actions
Field Widget Actions enables users to trigger automated workflows directly from content editing forms. During this period, work focused on improving how the module can be configured through automated setup tools and supporting more complex AI-driven workflows.
A new merge request was opened to address a configuration limitation: when setting up multiple suggestion buttons on a single form using automated deployment tools, all buttons were inadvertently targeting the same field due to identifier conflicts. The Generate UUIDs for list-style widget-action settings applied via config actions work will allow each button to receive a unique identifier automatically, matching the behaviour users already experience when configuring buttons manually through the interface.
Separately, Support Automator Chain trigger with Field Widget Actions was closed. This expands the module's workflow capabilities to support multi-step AI processes, useful when tasks exceed single-prompt complexity or token limits and require sequential operations without reloading the page.
How can I help on this project?
Review and approve the open merge request addressing configuration automation. Consider whether additional testing resources are needed to validate multi-button deployments across environments before the work is finalized.
Contributors: Artem Dmitriiev (a.dmitriiev)
AI translate
The AI translate project saw focused work on resolving an issue affecting users who combine AI-powered translation with complex page layouts. A bug was identified and addressed where translated content blocks were not being fully configured in the system, leaving them in an incomplete state that prevented users from accessing certain features like media libraries within those blocks.
A fix for this inline block issue has been prepared and is under review. Once merged, this will ensure that AI-translated page layouts function correctly and users can work with all content features as expected. This work removes a blocker for organizations using AI translation alongside advanced page building capabilities.
How can I help on this project?
- Ensure the pending fix receives timely review and testing resources to accelerate its release to users.
- Consider funding additional quality assurance work to identify similar integration issues before they affect production users.
Contributors: arne michiels (aren33k)
References
[1] Create an HTML to Markdown API and service
[2] Integrate ChatProcessor plugin system into AI Chatbot DeepChat block
[3] Add YAML support to the MDX editor code blocks
[5] ai_ckeditor: streamGenerateContent causes 400 Bad Request with Gemini 2.x models
[42] Issue#3586446:CKEditor-AI-Streaming-Fails-For-OpenAI-When-Guzzle-Uses-StreamHandler fixes
[50] fix: #3586573 Tone of voice CKEditor Plugin does not use the translated...
[51] Fix the MDX Editor for Gin dark theme
[52] Issue #3582473: Tool Explorer does not render correctly with Gin dark theme
[60] Issue #3586478: "Add rich-text image description support to AI Automators"
[61] Issue #3586478: "Add rich-text image description support to AI Automators"
[62] Issue #3584951: Add kernel test for StreamableGuardrailInterface mid-stream...
[69] Issue #3574662: Add boundaries and test
[70] Issue#3586491:add-a-during-generate-streaming-section-to-the-guardrail-set-for...
[72] Issue #3499451: Restore toolbar chatbot state idempotently so a dialog re-attach cannot close it
[74] Issue #3499451: Fixed chatbot not reopening after CKEditor/media modal closes.
[88] [Meta] Road to 1.4.0 release
[92] Add possibility for an agent to store and read instructions from a file
[94] feat: Per-tool approval mode (pre-approved / approve-once / always) with loop pause-resume
[101] Issue #3547995: Add deterministic tool usage limits.
[102] feat: #3586051 Add a per-tool setting to restrict a tool from being called...
[117] Boolean props auto-enable when another prop is changed in the Canvas form
[121] Canvas AI: Add the place_components AI tool (+ kernel test)
[122] Radio button props loose value when another prop value is changed in the component
[125] feat(Conflict detection): #3591723 "Add 'Conflict detected' toast message"
[126] feat(Conflict detection): #3591591 Expand conflict resolution UI with...
[134] Resolve #3591829: Coalesce multi-bundle references with differing per-bundle fields
[137] Draft: Resolve #3591656: Support multi-target-bundle references in content-entity-reference props
[140] feat(Headless): #3591823 Add support for rendering Canvas component trees in the headless SDK
[141] Resolve #3591785: Strengthen AutoSaveManager to generate stable hashes
[142] #3591828 Refetch folder list after newly exposing a code component
[143] feat(Headless): #3591822 Add configuration UI for headless frontends
[144] chore(Headless): #3591826 Simplify headless app environment configuration
[151] [Discuss] Context scope subscription approach
[155] Issue #3586311: Harden usage record and listing access checks.
[157] Issue #3586218: Allow subcontext scope to override parent scope.
[161] Issue #3584031: RagTool::execute() should expose structured per-result data
[163] Resolve "Batch embeddings for improved indexing performance"
Shipped
- MDX Editor and Tool Explorer dark theme fixes — Both rendering issues with Gin dark theme were resolved, restoring proper styling in admin interfaces [23][22].
- Rich-text image description support for AI Automators — Automators can now process embedded images in formatted text fields and optionally store generated descriptions as metadata [31].
- SensitiveContentStream guardrail merged — A concrete streaming guardrail plugin with kernel tests for mid-stream content buffering and evaluation was added [32].
- Canvas headless SDK rendering and configuration — Added content-type-independent CanvasComponentTree renderer across framework adapters, multi-frontend configuration UI, and unified environment variables [116][119][120].
- AI Search batch embeddings — Batch embeddings feature in progress to improve indexing performance, porting functionality from deprecated ai_search submodule [158].
Ongoing
- ChatProcessor plugin integration for AI Chatbot DeepChat — Open merge request integrating the ChatProcessor plugin system into the DeepChat block remains under review [2].
- CKEditor ai_ckeditor uninstall leaves stale toolbar items — Merge request adds uninstall hook to clean up stale editor configuration entries [8][46].
- RagTool structured output and entity access — RagTool::execute() currently flattens results into a single string, losing metadata; fix under review to expose structured per-result data and check entity access [159].
- Canvas multi-bundle content-entity-reference coalescing — Validation failures when props target multiple bundles with differing per-bundle fields are being addressed [112].
- AI translate inline block usage rows missing — Merge request open to fix inline_block_usage database row creation for asymmetric Layout Builder translations [167].
AI (Artificial Intelligence)
The 24-hour window saw significant progress on UI rendering, guardrails, and API boundaries. Several bug fixes and enhancements were merged, and new feature work continued in open merge requests.
The MDX Editor does not render correctly with Gin dark theme and Tool Explorer does not render correctly with Gin dark theme were both resolved, restoring proper styling when the Gin admin theme is used in dark mode. The Tone of voice CKEditor Plugin does not use the translated version of the linked taxonomy was fixed so that translated taxonomy terms now correctly display and prompt in the editor. Match "Global Guardrails" config page title with "Global AI Guardrails" menu item and "AI Guardrails" or "AI Moderation Guardrails"? aligned naming for consistency across the interface.
The Add rich-text image description support to AI Automators feature was merged, enabling automators to process embedded images in formatted text fields and optionally store generated image descriptions as metadata. Add SensitiveContentStream guardrail and kernel test for StreamableGuardrailInterface mid-stream buffering and evaluation was merged, providing a concrete streaming guardrail plugin and tests for mid-stream content evaluation. The Support the `ai_json_schema` element inside off-canvas dialogs change was merged, making the JSON schema form element work reliably in off-canvas contexts. The Add Summarization operation type support to the echoai test provider was merged, allowing kernel tests against the mock provider. Add non-required visual regression tests for the four built UI elements landed, introducing Playwright-based visual regression coverage for the frontend bundles. The Reject caller-supplied execution identity fields at /api/deepchat boundary was merged, hardening the chatbot API endpoint by rejecting fields like executor_uid from external payloads. A type-safety issue in Do not assume action definitions have a type when deriving action plugin functions was resolved. The The Toolbar Chatbot runs the fold out animation on page reload and Type error and infinite AJAX request loop when the Agent is unable to resolve a request job were both closed.
Several feature requests remain in progress. The Uninstalling ai_ckeditor leaves stale toolbar items in editor.editor.* configuration has an open MR (!1731) adding an uninstall hook to clean up stale configuration. The Chatbot closes itself when adding a modal has MR !1815 open, restoring toolbar chatbot state idempotently. The Create an HTML to Markdown API and service has MR !1747 open, introducing a service for HTML-to-markdown conversion. Documentation staleness audit: automator-type ID drift, ai_eca/ai_validations deprecation notices, streaming API method names has MR !1737 open with documentation corrections. Add YAML support to the MDX editor code blocks has MR !1823 open. The Taxonomy automator clears valid term values when the LLM returns HTML-encoded entities (e.g. &) has MR !1819 open, addressing entity-decoding mismatches. Add interactive refinement capability to Field Widget Actions Automation has MR !1629 open.
The Visual regression baselines need regenerating after the MDXEditor dark theme fixes was opened following the dark-theme corrections; the stored baselines are now stale and need to be regenerated against the corrected UI.
How can I help on this project?
Review MR !1731 for the ai_ckeditor uninstall hook. Review MR !1815 for the toolbar chatbot state idempotency fix. Pick up the unassigned Visual regression baselines need regenerating after the MDXEditor dark theme fixes to regenerate and commit the updated baseline screenshots.
Contributors: Abhinav Jha (ajabhinavjha30), Abhishek Dhariwal (adaptative), Ahmad Khader (Ahmad-Khader) [3], Ann Mary Sruthy (annmarysruthy), Artem Dmitriiev (a.dmitriiev), Avinash jha (avinash.jha) [1], Bharat Kelotra (bharatkelotra), Billy Davies (billy.davies), codebymikey, Joshua Fernandes (joshua1234511), Levente Besenyei (LeventeB) [1], Marcus Johansson (Marcus_Johansson) [2], Prabhavathi Vanipenta (prabha1997) [1], Ricardo Castañeda (cadence96), Ryan Szrama (rszrama), Shubham Prakash (shubham.prakash) [1], Thomas Werthmüller (weri) [1]
amazee.ai Private AI Provider
Several bug fixes and infrastructure improvements landed over the past 24 hours. Two critical bugs were resolved and closed: array_flip(): Can only flip string and integer values in config_ignore_ignored_alter(), which caused PHP warnings during Drush configuration management operations when Key::load() received empty values, and Recipe apply aborts when amazee.ai trial account provisioning fails (e.g. HTTP 429 trial capacity), where trial endpoint capacity limits or network failures would abort recipe installations. The latter fix converts provisioning exceptions into graceful fallbacks rather than install-breakers.
Three merge requests were integrated: fix(#3575454) add vectordb to docs, Automated Project Update Bot fixes addressing issue #3586232, and chore: general improvements, switch to zensical docs, a substantial 927-line refactor migrating documentation infrastructure. Draft work continues on Draft: chore: add bulk chunking, which optimizes VDB batch inserts via a new insertMultipleIntoCollection() method in PostgresProvider and PostgresPgvectorClient.
How can I help on this project?
Review the draft bulk chunking MR targeting 2.0.x, focusing on the insertMultipleIntoCollection() API and PostgresProvider::indexItems() batching logic. Test the batch-insert optimization with large VDB indexing workloads to validate performance gains and confirm no regressions in chunking behavior.
Contributors: Dan Lemon (dan2k3k4), project update bot (Project-Update-Bot), Rajab Natshah (RajabNatshah)Gemini Provider
Activity this period focused on finalizing the batch embeddings implementation. Work on Add support for batch embeddings progressed with naming conventions finalized and the merge request updated accordingly. The continuous integration configuration was adjusted to load the required AI Core branch (2026Sprint14) for testing. This feature will enable the Gemini provider to leverage the batchEmbedContents method from the Gemini client when processing multiple embeddings requests, improving efficiency for bulk operations. The issue remains in needs review state with an open merge request.
How can I help on this project?
- Review the open merge request for batch embeddings support, testing the batchEmbedContents integration against the AI Core 2026Sprint14 branch.
- Check the module's issue queue for unassigned bugs or feature requests that need implementation work.
AI Agents
Activity over the past 24 hours focused on feature proposals and bug identification ahead of the 1.4.0 release cycle. Several issues related to tool execution control were updated, including work on deterministic tool usage limits and a new per-tool setting to restrict tools from being called more than once per response, both of which have open merge requests under review.
Two bugs surfaced: AgentStatusSubscriber type-hints PrivateTempStatusStorage instead of AiAgentStatusStorageInterface, blocking custom storage implementations, and an array-to-string conversion warning in Token::doReplace() triggered during applyTokens. A UI issue was reported where the "Interactive" section disappears after adding a tool to an agent.
Test infrastructure issues emerged: PHPUnit CI jobs fail with exit code 1 despite all assertions passing. An MR adding test coverage for externally-driven execution (setLooped(FALSE)) remains open. The agent instruction file storage feature was closed.
How can I help on this project?
Review MR !304 to fix the AgentStatusSubscriber type-hint blocking custom storage. Review MR !290 for streaming fixes or MR !299 for per-tool call restrictions. Investigate and patch the PHPUnit exit-code issue blocking CI.
Contributors: Ahmad Khalil (ahmad-khalil-imagex), AKHIL BABU (AkhilBabu), Bharat Kelotra (bharatkelotra), Marcus Johansson (Marcus_Johansson), Nicolae Procopan (thebumikgmail.com), Prabhavathi Vanipenta (prabha1997)
Drupal Canvas
Significant headless SDK improvements were merged this period. Add support for rendering Canvas component trees in the headless SDK landed via MR !1371, introducing a content-type-independent CanvasComponentTree renderer across all framework adapters, plus auto-generated component registries for Next, Astro, Nuxt, and TanStack Start. Add configuration UI for headless frontends was also merged (MR !1368), expanding headless configuration from a single URL to multiple frontends with an admin UI showing setup steps. Environment variable naming was unified in Simplify headless app environment configuration (MR !1373), replacing DRUPAL_BASE_URL with CANVAS_SITE_URL and removing the now-redundant DRAFT_ALLOWED_FRAME_ANCESTORS. A subsequent fix via Restore browser-based component sync for Canvas Headless (MR !1375) restored CORS and OPTIONS support broken by the environment changes, ensuring local frontends remain reachable during editor sessions.
Several data model and API issues remain in progress. Multi-bundle content-entity-reference picks fail to coalesce into a branch expression (MR !1376) addresses validation failures when content-entity-reference props target multiple bundles. useSyncIframeHeightToContent: vh-height sections with background images cause unbounded iframe growth via feedback loop (MR !1377) tackles an iframe sizing bug affecting Tailwind arbitrary vh classes. A fix for Incorrect folder assignment for newly created code components is under review in MR !1374.
Contributors: **** (project_19391_bot_cb443e60680723bba08a5351bf595251), Ben Mullins (bnjmnm), Bálint Kléri (balintbrews) [3], Christian López Espínola (penyaskito), Feliksas Mazeikis (f.mazeikis), Kunal Sachdev (kunal.sachdev), Lauri Timmanee (lauriii), Narendra Singh Rathore (NarendraR), Nodar Davituri (Davituri), Ravi Maniyar (ravi.maniyar.123), Ted Bowman (tedbow), utkarsh_33 (Utkarsh_33), Wim Leers (wimleers), wotnak [1]
How can I help on this project?
Review MR !1377 for useSyncIframeHeightToContent iframe growth or MR !1376 for multi-bundle reference coalescing. Test MR !1374 for folder assignment to confirm components save to selected folders. Help reproduce or diagnose Tailwind CSS conflicts with theme-level styles.
Context Control Center (CCC)
A merge request addressing Replace brittle hardcoded admin path assertions in functional and kernel tests with route-derived URLs was opened. The work refactors test assertions that currently use hardcoded admin URL strings to instead derive paths from Drupal routes using Url::fromRoute(). This prevents false test failures when upstream modules relocate route paths, as occurred when ai_agents moved agent URLs under /admin/config/ai/tools-automation/ in version 1.3.2.
Progress continues on several initiatives. The Usage record page leaks context item content and grants links without access checks blocker remains open with an MR that hardens access checks in AiContextUsageRecordController, addressing a security concern where users with only view ai context usage permission could read unpublished context item content without proper authorization. Work also advanced on Allow subcontext scope to override parent scope, which adds a toggle to customize scope inheritance with a default "Same as parent" behavior.
The Gather CCC contribution stats for code and non-code contributions for release notes issue was closed, completing the effort to track both code commits and non-code contributions for release documentation.
How can I help on this project?
Review and test MR !208 for Usage record page access hardening, verifying that AiContextUsageRecordController properly enforces permissions. Review MR !217 for route-derived test assertions to validate the refactored test patterns.
Contributors: Ahmad Khalil (ahmad-khalil-imagex), Kristen Pol (kepol), Pravesh Poonia (Pravesh_Poonia)
AI Search
A batch embeddings feature was merged to improve indexing performance, addressing Batch embeddings for improved indexing performance. This ports functionality from the deprecated ai_search submodule. The merge included 711 lines of changes to support batching operations during the embedding and indexing workflow.
Work continues on two open merge requests: #3584018: Markdown version of Embedding Strategy that splits on headings with fallback [Preferred] (1074 lines) introduces a new embedding strategy using CommonMark to split content on heading boundaries, and Cherry pick 7a76c143 (783 lines) is also under review.
An open issue tracking RagTool::execute() should expose structured per-result data and check entity access has an associated merge request (!65) awaiting review. The problem involves RagTool::execute() in src/Plugin/AiFunctionCall/RagTool.php flattening search results into a single string, losing per-result metadata like entity references and scores. The getStructuredOutput() method currently returns empty results because execute() never populates $this->results.
How can I help on this project?
Review MR !65 to validate the RagTool structured output changes and entity access checks. Test MR !60 with various Markdown documents to verify heading-based splitting behavior and fallback logic.
Contributors: Abhisek Mazumdar (abhisekmazumdar), Artem Dmitriiev (a.dmitriiev)Field Widget Actions
The module saw active development on configuration action improvements this period. Generate UUIDs for list-style widget-action settings applied via config actions received a 503-line merge request (MR !27) addressing a limitation where recipe-based configuration required hard-coded UUIDs for each field widget action. This caused collisions when multiple suggestion buttons were added to a single form, resulting in all buttons targeting the same field. The proposed solution generates unique UUIDs at apply time, mirroring the interactive UI behavior.
Meanwhile, Support Automator Chain trigger with Field Widget Actions was closed after adding support for Automator Chain workflows. This feature enables multi-turn AI workflows on edit pages without page reloads, addressing context window limitations that prevented complex workflows from running as single prompts.
How can I help on this project?
Review the open MR !27 to validate UUID generation logic and test for collision scenarios. Test the newly added Automator Chain support with multi-turn workflows to ensure proper integration.
Contributors: Artem Dmitriiev (a.dmitriiev)
AI translate
A merge request has been opened to address AI translation of asymmetric Layout Builder inline blocks does not create inline_block_usage rows. The issue affects sites using ai_translate with layout_builder_at for asymmetric Layout Builder translations. When inline blocks are cloned during translation, the module correctly duplicates the blocks but fails to create corresponding inline_block_usage database rows. This leaves translated blocks in an incomplete state, causing access dependency failures when interacting with fields like Media Library inside the translated inline blocks.
The fix inline block usage merge request proposes a solution spanning 206 lines of changes. The fix is currently in needs work status and awaiting review.
How can I help on this project?
Review the fix inline block usage merge request to help validate the approach for handling inline_block_usage rows. Test the patch with layout_builder_at and asymmetric translations to verify inline blocks behave correctly after translation.
Contributors: arne michiels (aren33k)
References
[1] Create an HTML to Markdown API and service
[2] Integrate ChatProcessor plugin system into AI Chatbot DeepChat block
[3] Add YAML support to the MDX editor code blocks
[8] Uninstalling ai_ckeditor leaves stale toolbar items in editor.editor.* configuration
[22] Tool Explorer does not render correctly with Gin dark theme
[23] MDX Editor does not render correctly with Gin dark theme
[31] Add rich-text image description support to AI Automators
[46] fix(ai_ckeditor): remove stale toolbar items on uninstall and warn on confirm page
[112] Multi-bundle content-entity-reference picks fail to coalesce into a branch expression
[116] Add support for rendering Canvas component trees in the headless SDK
[119] Add configuration UI for headless frontends
[120] Simplify headless app environment configuration
[158] Batch embeddings for improved indexing performance
[159] RagTool::execute() should expose structured per-result data and check entity access
[167] AI translation of asymmetric Layout Builder inline blocks does not create inline_block_usage rows