2.4
Connect Admin, AI code review, and native Windows support
Showing every integration. Set your stack in Preferences and this page hides what isn't yours.
20.* || >=22.14.02.4 lets non-developers change feature configuration without a deploy, reviews every pull request with AI, and runs on Windows without WSL. It also fixes the crash that stopped deployed Next.js storefronts on their first request. Almost every package has a new version, but only nine of them change behavior. The others are dependency bumps, and you still apply them by hand.
Highlights
Edit your feature configuration at runtime, without redeploying and without Compass
@alokai/connect-admin@alokai/compassChanging how a feature behaves meant a code change and a deploy. The only editor was inside Compass, and many projects never install Compass.
The feature editor is now its own package, @alokai/connect-admin. Install it with yarn alokai add-module connect-admin. The middleware serves it at /connect-admin.
You register one feature for each area of your app you want to administer. Each feature groups views, and a view is either an editable form or a browsable list panel. Read the values authored in the editor back with sdk.connectAdmin.getFormValues().
The editor keeps drafts and a version history, and it saves automatically. When you import a configuration file over the live form, it combines the two with a three-way merge. {{ }} template variables resolve against the live request. Each feature can have its own documentation guide, and a playground feature comes bundled.
@alokai/compass no longer has the matching endpoints, the defineFeatureEditor API, the featureEditors config field, or the sdk.compass.getFeatureEditorData method. Nothing is re-exported in their place.
yarn alokai add-module connect-adminYou can give a non-developer a URL where they change how a feature behaves, and the change takes effect without a deploy. This works on a project that never installed Compass, because Connect Admin is versioned and enabled on its own. If you leave it uninstalled, you have nothing to do. If you already used the feature editor, its authoring API and environment variables are renamed, and saved versions don't carry over.
See the step in the upgrade guide →AI code review on your pull requests, and a skill that applies the fixes
@alokai/cli-plugin-review@alokai/ai-toolkitReview ran only as a local command that needed an API key and a set of flags. It raised findings you couldn't always trust, and you applied its fixes by hand.
Review now runs in CI and posts its findings on your pull requests. Each run reviews only the commits pushed since the last review, and a push with nothing new posts nothing. Pass --full to review the whole pull request.
Findings are fewer and easier to trust. Each one quotes the code it's about, a finding you already replied to isn't raised again, and defects that were already near your change show up as context, not as blocking comments. Every review also says what it didn't cover.
@alokai/ai-toolkit adds the autofix skill. It applies the findings you accept one at a time and asks you about judgement calls instead of guessing. The review skill is renamed from code-reviewer to alokai-review, so it no longer collides with the review skill some coding agents ship with.
# incremental by default; whole PR on demand
AI_REVIEW_MODEL=<model> yarn alokai ai review --fullNobody has to run a command to get review comments, and applying the fixes is one skill call. To review before you open a pull request, run the alokai-review skill in your coding agent. It applies the same criteria and needs no API key. Set the model with AI_REVIEW_MODEL. The default configuration works in CI as shipped. If you scripted the CLI, update the script, because some of its flags are gone.
Alokai projects run on native Windows, without WSL
@alokai/cliGenerated scripts used shell-only syntax, such as inline VAR=value prefixes and mkdir -p, so a developer on Windows couldn't start the project without WSL.
Cloning, installing, generating a project, and running the Next.js storefront all work in PowerShell.
Generated package.json scripts set environment variables with cross-env. Windows can't parse an inline NODE_OPTIONS=... command prefix. Shell-only constructs, such as if [ -d ... ] and inline node -e one-liners, are now small Node scripts. Project generation no longer uses the Unix-only mkdir -p.
Store composition no longer creates node_modules/.bin shims that point at broken paths. It also no longer crashes with RangeError: path should be a path.relative()'d string when it meets an absolute C:\... path. yarn alokai ai sync repairs AI skill links that git checked out as plain text files instead of symlinks.
A developer on Windows can join the project without setting up WSL first. Two limits remain. The Nuxt storefront doesn't start on native Windows yet, and Windows CI coverage is a biweekly scheduled E2E run, not a check on every pull request. So WSL2 stays the recommended setup.
If you develop on native Windows and overrode any of these scripts, prefix their inline environment variables with cross-env. The upgrade doesn't rewrite your package.json.
Deployed storefronts no longer crash on their first request
@alokai/cliA deployed storefront could crash on its first request with Failed to load external module <package>-<hash>: Cannot find module. Packaging reinstalled a minimal dependency set, so a server-external package hoisted outside the app directory, such as pino, was missing at runtime.
yarn alokai store deploy ships the complete Next.js standalone output, including the node_modules the build traced. It no longer reinstalls a minimal dependency set at packaging time.
Packaging fails with an actionable error when the assembled package contains dangling symlinks. When an install from the registry is rejected, the error names the package instead of reporting only "Authorization required".
Server-external packages such as pino are there at runtime. Packaging no longer depends on the npm registry being reachable. Two failure modes that used to show up as production crashes now fail packaging, before the package leaves your machine.
All changes by area
Every change in 2.4 has one entry here, grouped by area. The highlights, from above and from the patch sections, are here too, marked with a star. Open an area to see its changes, and open a change to read why it changed and what changed. The upgrade guide from 2.3.6 to 2.4.2 collects the migration steps for the whole line.
Alokai Connect2 changes
added Circuit breaker presets can be selected per integration
Tune one integration's circuit breaker without changing the others.
What changedWhy, and what changed ▸
One preset applied to every integration, so the tolerant settings one flaky vendor needed applied to the stable ones too.
CB_<INTEGRATION>_PRESET sets the preset for one integration, for example CB_SAPCC_PRESET=TOLERANT. Write the integration name in uppercase, with - replaced by _. The per-integration variable wins over CB_PRESET, which wins over circuitBreaker.preset in the integration config. With none of them set, the preset is BALANCED.
An invalid value logs a warning that names the variable and falls back to BALANCED. EXTREME_DEBUG stays blocked in production.
@alokai/connectfixed The request mocker no longer loads nock at startup
Your application no longer loads mocking packages it doesn't use.
What changedWhy, and what changed ▸
Importing the integration kit loaded two dev-only packages into every application at startup, even when you didn't use mocking.
nock and @mswjs/interceptors load only when you use defineMocker.
@alokai/connectStorefrontAction needed2 changes
added Alokai projects run on native Windows, without WSL highlight Action needed
A developer on Windows can join the project without setting up WSL. The Nuxt storefront doesn't start on native Windows yet, and Windows CI is a biweekly run, so WSL2 stays recommended. If you develop on native Windows and overrode a script that sets environment variables inline, prefix them with cross-env.
What changedWhy, and what changed ▸
Generated scripts used shell-only syntax, such as inline VAR=value prefixes and mkdir -p, so a developer on Windows couldn't start the project without WSL.
Generated package.json scripts set environment variables with cross-env. Shell-only constructs are now small Node scripts, and project generation no longer uses mkdir -p.
Store composition no longer creates broken .bin shims. yarn alokai ai sync repairs skill symlinks that git checked out as text files.
@alokai/clifixed Icon-only buttons expose accessible names
This fixes the failing agent-accessibility-tree audit in the Lighthouse "Agentic Browsing" category.
What changedWhy, and what changed ▸
The CMS mini-cart button, the rotating-images pagination dots, and the Compass add-use-case button have translated aria-labels. The mini-cart label includes the item count.
CLI & toolingAction needed12 changes
added AI code review on your pull requests, and a skill that applies the fixes highlight Action needed
Nobody has to run a command to get review comments, and applying the fixes is one skill call. To review before you open a pull request, run the alokai-review skill in your coding agent. It needs no API key. If you scripted the CLI, update the script, because some of its flags are gone.
What changedWhy, and what changed ▸
Review ran only as a local command that needed an API key and a set of flags. It raised findings you couldn't always trust, and you applied its fixes by hand.
Review now runs in CI and posts its findings on your pull requests. Each run reviews only the commits pushed since the last review. Pass --full to review the whole pull request.
Each finding quotes the code it's about, and a finding you already replied to isn't raised again. @alokai/ai-toolkit adds the autofix skill, which applies the findings you accept. The review skill is renamed from code-reviewer to alokai-review.
@alokai/cli-plugin-review@alokai/ai-toolkitfixed Deployed storefronts no longer crash on their first request highlight
Packaging no longer depends on the npm registry being reachable, and two failure modes that used to crash production now fail packaging on your machine.
What changedWhy, and what changed ▸
A deployed storefront could crash on its first request with "Cannot find module". Packaging reinstalled a minimal dependency set, so a server-external package hoisted outside the app directory, such as pino, was missing at runtime.
yarn alokai store deploy ships the complete Next.js standalone output, including the traced node_modules. Packaging fails with an actionable error on dangling symlinks. When a registry install is rejected, the error names the package.
@alokai/clichanged Major version upgrades prompt before installing dependencies
A major upgrade doesn't start by accident, and the guide is one click away when it ends.
What changedWhy, and what changed ▸
When yarn alokai version upgrade crosses a major version, it asks you to confirm before it installs dependencies. When it finishes, it prints the migration guide URL.
@alokai/clifixed Install errors name the failing package
When an install is rejected, you know which package to check.
What changedWhy, and what changed ▸
When a package fails to install from the registry, for example during yarn alokai store deploy, the error names that package. It no longer reports only a generic "Authorization required".
@alokai/clifixed Store lint no longer fails a store with nothing to lint
A template store passes lint like any other.
What changedWhy, and what changed ▸
yarn alokai store lint no longer reports a store as failed when it has no override files, such as a template store or a store that fully inherits an app.
@alokai/clifixed yarn install no longer fails at the plugin postinstall step
A fresh clone needs only the registry auth token, not a scope mapping.
What changedWhy, and what changed ▸
@alokai/cli resolves plugins from https://npm.alokai.cloud directly. The alokai-cli plugins install @alokai/cli-plugin-compass postinstall step no longer needs an @alokai:registry mapping in your user-level ~/.npmrc.
A user-level scope mapping or the ALOKAI_CLI_NPM_REGISTRY variable still takes precedence when you set one.
@alokai/clifixed Installing a CMS module removes the mock CMS import under any name
If a store override renamed cmsMockConfig, as BigCommerce did with cmsConfig, the install no longer leaves a dangling @/sf-modules/cms-mock import that broke the middleware build.
What changedWhy, and what changed ▸
Installing a CMS module removes the base mock CMS from middleware.config.ts whatever name its import uses.
@vsf-enterprise/module-kitchanged Generated AGENTS.md points to skills instead of inlining them
The file your coding agent always loads stays short.
What changedWhy, and what changed ▸
The generated AGENTS.md links to the theming and perf-review skills instead of repeating their instructions.
@alokai/cliadded AI code review on GitLab merge requests highlight 2.4.1
If you host on GitLab, install the plugin at 0.3.0, set GITLAB_TOKEN, and pass the merge request number to ai review with --pr. The plugin doesn't detect GitLab CI, so a run without the number reviews your uncommitted working tree instead. On a self-managed instance whose hostname names neither platform, pass --provider gitlab. If you host on GitHub, your runs don't change, and the token still comes from GITHUB_TOKEN, then GH_TOKEN, then the gh CLI's own credentials. On GitHub Enterprise, a hostname that isn't github.com or a subdomain of it now stops with an error that names it and tells you to pass --provider github, which sends API calls to your host instead of api.github.com.
What changedWhy, and what changed ▸
The review plugin worked only with GitHub. It rejected any other git remote before the review started, so if you host on GitLab, you couldn't run ai review or ai fix at all:
Git remote host "gitlab.com" is not supported - only GitHub today.@alokai/cli-plugin-review 0.3.0 supports GitLab as well as GitHub, and detects which one to use from your git remote's host. On a merge request, ai review posts inline findings and a sticky summary comment. ai fix applies fixes from a /fix note and replies in that discussion thread.
--provider takes github or gitlab, and AI_REVIEW_PROVIDER sets it too. --host overrides the host taken from the git remote. --repo accepts a nested project path such as group/subgroup/store, not only owner/name.
@alokai/cli-plugin-reviewchanged The AI review plugin moves to 0.3.0 only when you install it Action needed 2.4.1
If you installed the plugin, list the CLI's plugin store and install 0.3.0 over any older version. If you never installed it and don't want AI review, there's nothing to do. If you want it, 0.3.0 is the version to install.
step →What changedWhy, and what changed ▸
The upgrade command and a dependency install don't update the review plugin, because it lives in the CLI's own plugin store, not in package.json. A project keeps the plugin version it installed, whichever release it upgrades to.
2.4.1 ships @alokai/cli-plugin-review 0.3.0. It includes every earlier plugin change, 2.4.0's incremental review among them, and adds this release's GitLab support.
@alokai/cli-plugin-reviewchanged The version commands report 2.4.1 on a project still at 2.4.0 Action needed 2.4.1
version check and version upgrade can't tell your 2.4.0 project from a 2.4.1 one, and both treat it as 2.4.1. While 2.4.1 is the newest release, that's harmless: the commands report you're already current, which is true of your core packages. Once a later release exists, version upgrade offers to move you from "2.4.1" straight onto it. Run it with --dry-run first, and check the version it names.
What changedWhy, and what changed ▸
The CLI doesn't read a release number from your project. It works the release out from the installed versions of @alokai/connect, @alokai/cli, @vue-storefront/next, and @vue-storefront/nuxt, and picks the newest release that pins those versions. When two releases pin the same four versions, the CLI reads a project on either one as the newer release.
This release changes no core package. @alokai/connect stays at 2.5.0, @alokai/cli at 2.8.0, @vue-storefront/next at 10.0.0, and @vue-storefront/nuxt at 13.0.0, as in 2.4.0.
The only package with a change of its own is the review plugin, and the CLI doesn't use it to work out your release. Two other packages move with a version bump only.
fixed store deploy applies your patches/ directory to the deployed middleware highlight Action needed 2.4.2
Upgrading fixes your next deploy, not the images already running. If you deploy with patches, redeploy every store and fix any patch the deploy now rejects.
step →What changedWhy, and what changed ▸
Since 2.0.0, store deploy ran patch-package against your local node_modules instead of the dependency tree it packages into the image. The deployed middleware shipped your dependencies unpatched, and the command still reported success.
store deploy in @alokai/cli 2.8.1 applies your patches/ directory to the dependency tree each image is built from. A patch whose package isn't in that tree is skipped and named in a warning, and a patch that fails to apply stops the deploy.
@alokai/cliCompass12 changes
added A/B experiments with sticky per-visitor variants
Run a split test on a Compass storefront and send the assignment to your analytics without a third-party experiment tool.
What changedWhy, and what changed ▸
Mount ExperimentsProvider with an experiment registry. On page load, each visitor gets one variant per experiment, picked at random by weight. A cookie per experiment keeps that variant the same across reloads.
useExperiments() returns the assigned variants, serialized payloads to attach to analytics events, and an override for development and QA. An onAssignment callback on each experiment sends the assignment to any analytics provider. NEXT_PUBLIC_COMPASS_AB_<EXPERIMENT>_<VARIANT> overrides a split from the environment.
Variants are assigned in the browser only, not during SSR, so CDN caching keeps working.
@alokai/compasschanged Installing Compass sets up the LLM gateway with your own API key
A fresh install calls the gateway with your own key. Existing projects keep what their .env already says.
What changedWhy, and what changed ▸
Installing Compass seeds .env.example with an active ALOKAI_COMPASS_API_URL that points at the Alokai LLM gateway, and an active ALOKAI_COMPASS_NO_CREDENTIALS_MANAGER=true. It also adds a commented-out, empty ALOKAI_COMPASS_API_KEY= for you to fill in.
Before, the install seeded an active dummy API key and a commented-out URL, so Compass used the hosted credentials manager.
@alokai/compassfixed AI Shopping Assistant steadier after the gateway model update
Your storefront assistant drops fewer answers and gives fewer wrong ones with the updated model.
What changedWhy, and what changed ▸
Adding products from an uploaded CSV no longer ends with "no products found". The assistant answers price questions on a product page in the product's own currency. It doesn't assume or convert the currency symbol.
In guided selling, the assistant no longer sets a facet to a value that no catalog option matches. It retries with a valid option instead. Guided-selling UI updates also apply reliably while the answer streams.
@alokai/compassfixed The assistant keeps track of the viewed product after a session clear
After a restart, the assistant sends the context of the product you're viewing right away, instead of losing track of it.
What changedWhy, and what changed ▸
Clearing the AI assistant session also clears the product, title, and search context the assistant stored in the browser. The product and category pages read that context fresh each time they render.
@alokai/compassfixed Dev tools trace import no longer fails with HTTP 413
You can import a trace dump larger than 100kb.
What changedWhy, and what changed ▸
Installing the Compass module raises the middleware's JSON body limit for the devToolsImport endpoint to 2mb. The default is 100kb.
@alokai/compassfixed Dev tools work when the middleware is served behind a path prefix
If you serve the middleware under a path prefix such as /api, the dev tools page loads.
What changedWhy, and what changed ▸
The dev tools page at /compass/devTools loads its stylesheet, script, and trace data relative to the page URL. Before, it loaded them from the domain root, where they returned 404.
@alokai/compassfixed Clicking the search submit button no longer clears the live query
A results slot no longer reverts to its default state between the submit and the navigation.
What changedWhy, and what changed ▸
Only the Cancel button clears the search query. Submitting the search form keeps the query, so a results-slot module such as Coveo instant results can still read it.
@alokai/compassadded Chat product results show a "Powered by" source badge
A search engine can name itself in chat results with no change to Compass.
What changedWhy, and what changed ▸
Chat product results show the search engine's display name from the result's $custom.source field. The search engine behind the unified method sets that field. The badge shows the name as is, and no badge shows when the field is absent.
@alokai/compassfixed Cart and order widgets render absolute media URLs
Cart, order summary, and cart-confirmation widgets no longer show broken product images when your commerce backend returns absolute media URLs.
What changedWhy, and what changed ▸
Absolute image URLs are used as they are. mediaHost is added only in front of relative paths.
@alokai/compassfixed The "Open in Store" button no longer crashes after the assistant changes the cart
The topbar button no longer throws TypeError: redirectLinkFactories.addCartLineItems is not a function.
What changedWhy, and what changed ▸
After the assistant adds, removes, or updates cart items, or clears the cart, the "Open in Store" button opens /cart.
@alokai/compassfixed Search-result product names in the ChatGPT app render matched terms in bold
Matched terms show in bold instead of as literal <em>...</em> markup.
What changedWhy, and what changed ▸
The widget escapes every HTML tag the search backend might emit except the <em> highlight, so only the highlight renders as styled output.
@alokai/compasschanged The Compass CLI plugin moves to 1.1.11 only when you install it 2.4.2
If you run Compass, installing 1.1.11 keeps your plugin on the version this release pins, but you lose nothing by staying on 1.1.10. The upgrade doesn't move the plugin, because it lives in the CLI's own plugin store, not in package.json.
What changedWhy, and what changed ▸
2.4.2 ships @alokai/cli-plugin-compass 1.1.11. It's rebuilt against this release's CLI internals and behaves exactly like 1.1.10.
@alokai/cli-plugin-compassConnect Admin8 changes
added Edit your feature configuration at runtime, without redeploying and without Compass highlight
Give a non-developer a URL where they change how a feature behaves, without a deploy, even on a project that never installed Compass. If you leave it uninstalled, you have nothing to do. If you already used the feature editor, its authoring API and environment variables are renamed, and saved versions don't carry over.
step →What changedWhy, and what changed ▸
Changing how a feature behaves meant a code change and a deploy. The only editor was inside Compass, and many projects never install Compass.
The feature editor is now its own package, @alokai/connect-admin. Install it with yarn alokai add-module connect-admin, and the middleware serves it at /connect-admin. You register features, each grouping form or list-panel views, and read the values back with sdk.connectAdmin.getFormValues().
@alokai/compass no longer has the matching endpoints, defineFeatureEditor, the featureEditors config field, or sdk.compass.getFeatureEditorData.
@alokai/connect-admin@alokai/compassadded The feature editor has its own enable flag
Turn the editor and the dev tools on independently.
What changedWhy, and what changed ▸
CONNECT_ADMIN_FEATURE_EDITOR turns on the feature editor. It's separate from COMPASS_DEV_TOOLS, which turns on the dev tools. Local development and tests turn the editor on automatically when NODE_ENV !== "production". A production build turns it on only when you set CONNECT_ADMIN_FEATURE_EDITOR.
@alokai/connect-adminfixed The feature editor works behind a path prefix
The editor works when your middleware is served under a path prefix.
What changedWhy, and what changed ▸
The editor requests its stylesheet, script, and API endpoints relative to the page URL, not from the domain root.
@alokai/connect-adminfixed Row actions no longer fail with 413 on a large row
Save and Remove work on large list-panel rows.
What changedWhy, and what changed ▸
Save and Remove on a list-panel row no longer send the whole row to the server. The server looks the row up itself.
@alokai/connect-adminfixed The per-row action menu is no longer clipped on the last row
You can reach the action menu on every row, including the last one.
What changedWhy, and what changed ▸
The per-row action menu opens above its button when there's no room below it. The list card no longer cuts it off.
@alokai/connect-adminfixed Save no longer stays enabled for an unchanged draft
A value that differs only in what JSON drops on save (keys set to undefined, NaN, and Date values), or in how the server normalizes it, no longer shows as unsaved.
What changedWhy, and what changed ▸
The editor compares your draft with the saved version as JSON. After a successful save, the draft takes the value the server sends back.
@alokai/connect-adminfixed New entries compose from each field's defaultValue
The defaults you declare apply when you add an entry.
What changedWhy, and what changed ▸
A new entry in a multi-entry configuration starts from each field's defaultValue, including fields inside nested objects. It no longer starts as a blank row.
@alokai/connect-adminfixed Download and Copy export the real configuration data
A file you download loads back in through Upload.
What changedWhy, and what changed ▸
Download and Copy export the entries array for a multi-entry form and the settings object for a single-entry form. They no longer export {}.
@alokai/connect-adminSAP Commerce CloudAction needed1 change
fixed Products with several variant axes return their variants Action needed
If you built around the empty array, for example with a custom normalizer that fills variants from variantMatrix itself, restore the empty array by overriding normalizeProduct.
What changedWhy, and what changed ▸
Products with two or more variant axes came back with an empty variants array.
getProductDetails and getProductCatalogItem read variant options from SAP's variantMatrix when baseOptions is absent. Products with two or more variant axes, such as Size and Color, return their variants.
@vsf-enterprise/unified-api-sapcccommercetoolsAction needed1 change
fixed commercetools deleteCart deletes the cart within the current Store Action needed 2.4.2
If you use commercetools Stores, a deleteCart call made while a different Store is resolved than the one the cart was created in now fails to find the cart instead of deleting it. If you don't use Stores, nothing changes.
What changedWhy, and what changed ▸
deleteCart ignored the commercetools Store and always deleted in project scope, while createCart, updateCart and createMyOrderFromCart already worked within the Store.
deleteCart in @vsf-enterprise/commercetools-api 11.0.1 sends the Store key resolved from the vsf-store cookie, or from the store configuration property when the cookie is absent. Without a resolved Store, it deletes in project scope, as before. A custom query that sets storeKey itself still overrides the resolved key.
@vsf-enterprise/commercetools-apiBigCommerce1 change
fixed bigcommerce-types publishes its declaration files again
Types such as CartIncludeEnum resolve again when you use @vsf-enterprise/bigcommerce-api, without Module has no exported member errors.
What changedWhy, and what changed ▸
@vsf-enterprise/bigcommerce-types ships its TypeScript declaration files again.
@vsf-enterprise/bigcommerce-typesCI / deployment workflowsAction needed1 change
security Generated GitHub Actions workflows pin third-party actions to a commit SHA Action needed
The upgrade doesn't rewrite your existing workflow files, so pin the actions in them yourself.
step →What changedWhy, and what changed ▸
A version tag can be moved to different code after you adopt it. GitHub recommends pinning third-party actions to a commit SHA.
The workflow templates pin actions/checkout, actions/setup-node, and actions/cache to commit SHAs, which can't change.
Patches in 2.4.x
2.4.2
18 Sept 2026 · Patch · 8 of 84 packages moved
If you keep a patches/ directory and deploy with store deploy, the middleware you're running right now was built without your patches: redeploy once you've upgraded. On commercetools, deleteCart now deletes within the resolved Store, like the other cart methods, so check any code that deletes a cart while a different Store is resolved.
store deploy applies your patches/ directory to the deployed middleware
@alokai/cliSince 2.0.0, store deploy ran patch-package against your local node_modules instead of the dependency tree it packages into the image. The deployed middleware shipped your dependencies unpatched, and the command still reported success.
store deploy in @alokai/cli 2.8.1 applies your patches/ directory to the dependency tree each image is built from. A patch whose package isn't in that tree, such as a patched devDependency, is skipped and named in a warning instead of failing the deploy. A patch that fails to apply stops the deploy.
Upgrading fixes your next deploy, not the images already running. If you deploy with patches, redeploy every store so production gets the patched packages, and fix any patch the deploy now rejects.
See the step in the upgrade guide →2.4.1
21 Aug 2026 · Patch · 3 of 84 packages moved
The AI code review plugin now works with GitLab as well as GitHub, so ai review and ai fix run on merge requests instead of rejecting any remote that isn't github.com. Nothing else in your project changes. No core package moved in this release, so the CLI's version commands can't tell a 2.4.0 project from a 2.4.1 one and report 2.4.1 for both. Check what the upgrade proposes before you let it run.
AI code review on GitLab merge requests
@alokai/cli-plugin-reviewThe review plugin worked only with GitHub. It rejected any other git remote before the review started, so if you host on GitLab, you couldn't run ai review or ai fix at all:
Git remote host "gitlab.com" is not supported - only GitHub today.@alokai/cli-plugin-review 0.3.0 supports GitLab as well as GitHub, and detects which one to use from your git remote's host. On a merge request, ai review posts inline findings and a sticky summary comment, and on later pushes it reviews only what's new. ai fix applies fixes from a /fix note and replies in that discussion thread. Both produce the same comments they produce on a GitHub pull request.
Three flags tell the plugin which git host and project to use. --provider takes github or gitlab, and the AI_REVIEW_PROVIDER environment variable sets it too. --host overrides the host taken from the git remote. --repo accepts a nested project path such as group/subgroup/store, not only owner/name.
If you host on GitLab, install the plugin at 0.3.0, set GITLAB_TOKEN, and pass the merge request number to ai review with --pr. The plugin doesn't detect GitLab CI, so a run without the number reviews your uncommitted working tree instead, behind a warning that's easy to miss. On a self-managed instance whose hostname names neither platform, pass --provider gitlab.
If you host on GitHub, your runs don't change. The token still comes from GITHUB_TOKEN, then GH_TOKEN, then the gh CLI's own credentials, and GitHub Actions detection is unchanged. On GitHub Enterprise, a hostname that isn't github.com or a subdomain of it now stops with an error that names it and tells you to pass --provider github. With that flag, API calls go to your host's own REST API instead of api.github.com.