bitexpert / sylius-wishlist-concierge-plugin
Wishlist Concierge Plugin
Package info
github.com/bitExpert/sylius-wishlist-concierge
Type:sylius-plugin
pkg:composer/bitexpert/sylius-wishlist-concierge-plugin
Requires
- php: ^8.2
- phpdocumentor/reflection-docblock: ^5.2
- sylius/sylius: ^2.0
- sylius/wishlist-plugin: ^1.3
Requires (Dev)
- behat/behat: ^3.16
- dbrekelmans/bdi: ^1.4
- friends-of-behat/mink: ^1.11
- friends-of-behat/mink-browserkit-driver: ^1.6
- friends-of-behat/mink-debug-extension: ^2.1
- friends-of-behat/mink-extension: ^2.7
- friends-of-behat/page-object-extension: ^0.3
- friends-of-behat/suite-settings-extension: ^1.1
- friends-of-behat/symfony-extension: ^2.6
- friends-of-behat/variadic-extension: ^1.6
- nyholm/psr7: ^1.8
- phpstan/phpstan: ^1.12
- phpstan/phpstan-doctrine: ^1.3
- phpstan/phpstan-webmozart-assert: ^1.2
- phpunit/phpunit: ^10.5
- sylius-labs/coding-standard: ^4.4
- sylius-labs/suite-tags-extension: ~0.2
- sylius/sylius-rector: ^2.0
- sylius/test-application: ^2.0.0@alpha
- symfony/browser-kit: ^6.4 || ^7.4
- symfony/debug-bundle: ^6.4 || ^7.4
- symfony/dotenv: ^6.4 || ^7.4
- symfony/http-client: ^6.4 || ^7.4
- symfony/intl: ^6.4 || ^7.4
- symfony/property-info: ^6.4 || ~7.3.0
- symfony/runtime: ^6.4 || ^7.4
- symfony/type-info: ~7.3.0
- symfony/var-exporter: ^7.4
- symfony/web-profiler-bundle: ^6.4 || ^7.4
- symfony/webpack-encore-bundle: ^2.2
This package is auto-updated.
Last update: 2026-09-02 09:47:45 UTC
README
Agent + human co-curate themed, budget-aware wishlist management for Sylius. Instead of clicking 30 filters, you tell your agent “birthday for my nephew” — it searches taxons, builds a wishlist, optimizes for budget with Sylius ChannelPricing, and moves the best fit to cart after your confirm.
- Demo:
https://wishlist-concierge.ddev.site/en_US/ - Video: ⚠️TODO
What People + Agents Can Do Together
Before: 30 filter clicks, manual budget math $75.89 + $17.03+..., missed CatalogPromotion, abandoned cart. After: one conversation.
Story 1 — Themed gift
User: “birthday for my nephew” Agent:
product.search {theme:"gift"}→ returnsEthereal_Drift_T_Shirtetc. Human: “more books, less plastic” → agent swaps viawishlist.add_item.
Story 2 — Budget
Agent:
wishlist.optimize_for_budget {wishlistId:2, budgetCents:15000}→BudgetOptimizer.php:40cheapest-first knapsack withquantity * ChannelPricing→chosen:["Lunar_Echo_T_Shirt-variant-0"], total $17.03, $7 remaining+ explanation string. Human decides to increase budget.
Story 3 — Share & Checkout
wishlist.move_to_cart {wishlistId:2}→CartTransferController.php:50(theconfirmMessagein the#[ModelContextTool]annotation) triggerswindow.confirm("Move items from this wishlist to cart?")atregistry.js:71(spec Mitigation 6.3.2 — agent cannot finalize without human; the exact items/amount shown come from the preceding budget optimization).OrderFactory+OrderProcessor→cartToken+/en_US/cart. Anon allowed (FASHION_WEBgift registries are shareable viaWishlistAccessChecker.php:34— owned lists still403).
Documentation
- Architecture overview
- WebMCP Tool reference (see
assets/shop/webmcp/registry.js:180, registering tools from the server-served manifest)
Installation
Sylius Application
- Install the plugin via Composer
composer require bitexpert/sylius-wishlist-concierge-plugin:dev-master
- Enable the plugin
<?php # config/bundles.php return [ // ... Sylius\WishlistPlugin\SyliusWishlistPlugin::class => ['all' => true], BitExpert\SyliusWishlistConciergePlugin\BitExpertSyliusWishlistConciergePlugin::class => ['all' => true], ];
- Import config
# config/packages/bitexpert_wishlist_concierge.yaml imports: - { resource: "@BitExpertSyliusWishlistConciergePlugin/config/config.yaml" }
- Import routing
# config/routes/bitexpert_wishlist_concierge.yaml bitexpert_sylius_wishlist_concierge_plugin_shop: resource: "@BitExpertSyliusWishlistConciergePlugin/config/routes/shop.yaml" prefix: /{_locale} requirements: _locale: ^[A-Za-z]{2,4}(_([A-Za-z]{4}|[0-9]{3}))?(_([A-Za-z]{2}|[0-9]{3}))?$
- Update your database schema
php bin/console doctrine:migrations:diff php bin/console doctrine:migrations:migrate
- Import the plugin's entrypoint in the host app's
assets/shop/entrypoint.js:
import '@vendor/bitexpert/sylius-wishlist-concierge-plugin/assets/shop/entrypoint';
- Make the npm package resolvable from the host app (required for the stimulus-bridge to read the plugin's
package.json):
yarn add @bitexpert/wishlist-concierge-plugin@file:vendor/bitexpert/sylius-wishlist-concierge-plugin/assets/shop
- Register the Stimulus controllers in the host app's
assets/shop/controllers.json:
{
"controllers": {
"@bitexpert/wishlist-concierge-plugin": {
"webmcp--toolbox": { "enabled": true, "fetch": "lazy" },
"webmcp--toast": { "enabled": true, "fetch": "lazy" }
}
}
}
The bridge looks up main and the short controller identifier webmcp--toolbox (via the name field) from the plugin's package.json — no host-side main/name needed.
- Rebuild assets:
yarn run build:prod bin/console assets:install bin/console cache:clear
Development
For local development, you need to install DDEV first.
Once you have DDEV installed, run the following commands to bootstrap the local development environment:
ddev start ddev bootstrap
To stop the DDEV instance run ddev stop.
License
The Wishlist Concierge Plugin is released under the MIT License.
