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 underpublic/js/pimcore/)getCssPaths()(registeredpublic/css/icons.cssandpublic/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.phpsrc/Controller/AutomationActionExecutionController.phpsrc/EventSubscriber/AdminSubscriber.phpsrc/Routing/StudioRouteLoader.phpsrc/Utils/Traits/AuditTrait.phpsrc/Utils/Traits/LogAndReturnTrait.phpsrc/Utils/Traits/ThrowableChainTrait.phpsrc/Utils/Traits/UpdateControllerTrait.phpsrc/Controller/Studio/Configuration/AutomationAction/ValidateStepConfigurationTrait.phpconfig/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 ConflictExceptionupdateConfiguration()— added@throws InvalidArgumentException
Configuration\InteractionAction\ServiceInterface
Namespace: Pimcore\Bundle\CopilotBundle\Service\Studio\Configuration\InteractionAction
createConfiguration()— added@throws ConflictExceptionupdateConfiguration()— added@throws InvalidArgumentException
EnvironmentServiceInterface
Namespace: Pimcore\Bundle\CopilotBundle\Service\Studio\Configuration\AutomationAction
getEnvironmentTypes()—@throws Exceptionremoved (method no longer declares a checked exception)getEnvironmentInlineHelp()—@throws Exceptionremoved
StepServiceInterface
Namespace: Pimcore\Bundle\CopilotBundle\Service\Studio\Configuration\AutomationAction
getPreconditionFilters()— now throwsInvalidArgumentException(wasException)- All other methods —
@throws Exceptionremoved
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:
CopilotJobRunIdInteractionActionChatHistoryInteractionActionOneStep
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:
| Class | EVENT_NAME constant |
|---|---|
CopilotJobRunIdEvent | pre_response.copilot.job_run_id |
InteractionActionChatHistoryEvent | pre_response.copilot.interaction_action_chat_history |
InteractionActionOneStepEvent | pre_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.xto2.x. Review yourphpstan-baseline.neonand custom PHPStan rules — PHPStan 2.x may report new errors. - Added support for
PHP8.5. - Removed support for
PHP8.3and Symfonyv6.
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 Engineand 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 Engineas soon as possible. To do so, also follow the migration guide here.