Skip to main content
Version: 2026.1

Upgrade notes

Upgrade to 2026.1.0

Removed ExtJS / Admin Classic UI Support

The bundle no longer ships any ExtJS-based frontend code or integrates with the Pimcore Admin Classic UI.

PimcoreCopilotBundle no longer implements PimcoreBundleAdminClassicInterface and no longer uses BundleAdminClassicTrait. The following methods have been removed from the bundle class:

  • getJsPaths() (registered 38 JS files under public/js/pimcore/)
  • getCssPaths() (registered public/css/icons.css and public/css/styles.css)

All ExtJS JavaScript files under public/js/pimcore/, all CSS files under public/css/, and all SVG images under public/img/ have been deleted.

The following PHP classes have been deleted:

  • All controllers under src/Controller/Admin/ (configuration, interaction action, automation action, job run, role, user controllers)
  • src/Controller/CopilotController.php
  • src/Controller/AutomationActionExecutionController.php
  • src/EventSubscriber/AdminSubscriber.php
  • src/Routing/StudioRouteLoader.php
  • src/Utils/Traits/AuditTrait.php
  • src/Utils/Traits/LogAndReturnTrait.php
  • src/Utils/Traits/ThrowableChainTrait.php
  • src/Utils/Traits/UpdateControllerTrait.php
  • src/Controller/Studio/Configuration/AutomationAction/ValidateStepConfigurationTrait.php
  • config/admin-classic.yaml

If you relied on these Admin controllers or traits, you need to migrate to the equivalent Studio API endpoints.

Added Pimcore Studio Backend & UI Bundle Support

pimcore/studio-ui-bundle has been added as a required dependency. The Studio UI bundle must be registered in config/bundles.php:

"Pimcore\\Bundle\\StudioUiBundle\\PimcoreStudioUiBundle" => ['all' => true],

The Symfony security configuration must be updated to include the Studio firewall and access-control rules. Example:

security:
firewalls:
pimcore_studio: '%pimcore_studio_backend.firewall_settings%'
# ...

access_control:
- { path: ^/pimcore-studio/api/(docs|docs/json|translations|user/reset-password)$, roles: PUBLIC_ACCESS }
- { path: ^/pimcore-studio/api, roles: ROLE_PIMCORE_USER }
- { path: ^/asset/webdav, roles: ROLE_PIMCORE_USER }

Interface Changes

The following service interfaces have changed. If you implement or extend them, you must update your code accordingly.

ConfigurationCrudServiceInterface

Namespace: Pimcore\Bundle\CopilotBundle\Service\Studio\Configuration\AutomationAction

  • createConfiguration() — added @throws ConflictException
  • updateConfiguration() — added @throws InvalidArgumentException

Configuration\InteractionAction\ServiceInterface

Namespace: Pimcore\Bundle\CopilotBundle\Service\Studio\Configuration\InteractionAction

  • createConfiguration() — added @throws ConflictException
  • updateConfiguration() — added @throws InvalidArgumentException

EnvironmentServiceInterface

Namespace: Pimcore\Bundle\CopilotBundle\Service\Studio\Configuration\AutomationAction

  • getEnvironmentTypes()@throws Exception removed (method no longer declares a checked exception)
  • getEnvironmentInlineHelp()@throws Exception removed

StepServiceInterface

Namespace: Pimcore\Bundle\CopilotBundle\Service\Studio\Configuration\AutomationAction

  • getPreconditionFilters() — now throws InvalidArgumentException (was Exception)
  • All other methods — @throws Exception removed

ChatServiceInterface

Namespace: Pimcore\Bundle\CopilotBundle\Service\Studio\InteractionAction

  • initial(), prompt(), apply() — added @throws EnvironmentException|InvalidArgumentException (were previously undeclared)

OneStepServiceInterface

Namespace: Pimcore\Bundle\CopilotBundle\Service\Studio\InteractionAction

  • oneStep() — added @throws EnvironmentException|InvalidArgumentException

AutomationAction\ServiceInterface (new)

Namespace: Pimcore\Bundle\CopilotBundle\Service\Studio\AutomationAction

A new interface ServiceInterface has been introduced:

public function runAction(string $configurationName, AutomationActionRunParameters $parameters): CopilotJobRunId;
// @throws InvalidArgumentException|NotFoundException|ValidationFailedException

If you previously called Service::runAction() directly without the interface, type-hint against ServiceInterface instead.

Schema Classes Now Implement AdditionalAttributesInterface

The following schema classes now implement Pimcore\Bundle\StudioBackendBundle\Util\Schema\AdditionalAttributesInterface (via AdditionalAttributesTrait) and are no longer declared readonly:

  • CopilotJobRunId
  • InteractionActionChatHistory
  • InteractionActionOneStep

If you relied on these being readonly classes or serialized them directly, review your code for compatibility.

New Pre-Response Events

Three new event classes have been added under Pimcore\Bundle\CopilotBundle\Event\PreResponse, each extending AbstractPreResponseEvent:

ClassEVENT_NAME constant
CopilotJobRunIdEventpre_response.copilot.job_run_id
InteractionActionChatHistoryEventpre_response.copilot.interaction_action_chat_history
InteractionActionOneStepEventpre_response.copilot.interaction_action_one_step

These events are dispatched before the corresponding Studio API responses are returned and allow you to enrich the response with additional attributes.

Removed Doctrine Enum Mapping

The custom Doctrine mapping type enum: string has been removed from the test/application configuration. Pimcore 2026.x handles enum types natively. Remove the following from your config/packages/doctrine.yaml (or equivalent) if present:

doctrine:
dbal:
connections:
default:
mapping_types:
enum: string # remove this line

Updated Dependencies

  • PHPStan updated from 1.x to 2.x. Review your phpstan-baseline.neon and custom PHPStan rules — PHPStan 2.x may report new errors.
  • Added support for PHP 8.5.
  • Removed support for PHP 8.3 and Symfony v6.

1.1.0 to 2.0.0

  • The job execution engine was removed. You need to implement/adapt your actions to run with Generic Execution Engine.
    • To do so, please follow the migration guide here.

1.0.0 to 1.1.0

  • The job execution engine has been extracted to the core framework as Generic Execution Engine and it is highly recommended to switch to it. Following things need to be considered:
    • The old way of implementing custom job steps is deprecated. If you already have custom job steps implemented, you can still use them for now, but it is recommended to migrate them to the new way. Please see the migration guide here.
    • Use the Generic Execution Engine as soon as possible. To do so, also follow the migration guide here.