story-theme-mcp 1.2.1 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/build/quick.js +7 -4
- package/src/server.js +2 -2
- package/src/version.js +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "story-theme-mcp",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.2",
|
|
4
4
|
"description": "Serveur MCP du Story Thème : votre assistant IA connaît le thème Shopify Story par cœur et construit des boutiques propres et professionnelles.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/index.js",
|
package/src/build/quick.js
CHANGED
|
@@ -399,7 +399,9 @@ export function enrichir(steps, { direction = 'editorial', graine = 0, hasImages
|
|
|
399
399
|
// même duo, dans le même ordre. Le second saute d'un pas tiré de la graine, jamais nul.
|
|
400
400
|
const premier = graine % pool.length;
|
|
401
401
|
const pas = 1 + (Math.floor(graine / pool.length) % Math.max(1, pool.length - 1));
|
|
402
|
-
|
|
402
|
+
// Trois et non deux : une V1 doit ressembler à une boutique finie, pas à une trame.
|
|
403
|
+
const combien = Math.min(3, pool.length);
|
|
404
|
+
const tirage = Array.from({ length: combien }, (_, i) => pool[(premier + i * pas) % pool.length]);
|
|
403
405
|
const uniques = tirage.filter((etape, i) => tirage.findIndex((autre) => autre.type === etape.type) === i);
|
|
404
406
|
|
|
405
407
|
const sortie = [...steps];
|
|
@@ -753,11 +755,12 @@ export function buildStore({ catalog, store }, input) {
|
|
|
753
755
|
const recipes = [];
|
|
754
756
|
const home = findRecipe(input.home) ? input.home : preset.home;
|
|
755
757
|
recipes.push([home, 'templates/index.json']);
|
|
756
|
-
|
|
758
|
+
const avecOffres = input.offers !== false;
|
|
759
|
+
recipes.push([avecOffres ? 'produit-offres' : 'produit-complet', 'templates/product.json']);
|
|
757
760
|
recipes.push(['collection-complete', 'templates/collection.json']);
|
|
758
761
|
const pages = input.pages || DEFAULT_PAGES;
|
|
759
762
|
for (const page of pages) if (PAGE_RECIPES[page]) recipes.push([PAGE_RECIPES[page], findRecipe(PAGE_RECIPES[page]).template]);
|
|
760
|
-
choices.push(`accueil : recette ${home} ; fiche produit : ${
|
|
763
|
+
choices.push(`accueil : recette ${home} ; fiche produit : ${avecOffres ? 'avec offres par paliers' : 'complète'} ; pages : ${pages.join(', ')}`);
|
|
761
764
|
choices.push(hasImages ? `photos placées : ${[images.hero, ...pool].filter(Boolean).length}` : 'aucune photo fournie : héro typographique sur la couleur de marque, sections à photos remplacées (rien de vide)');
|
|
762
765
|
if (hasImages && !hasLarge) notes.push('aucune photo large en dehors du héro (images.large, 1600 px de large ou plus) : pas de zoom au défilement, héro typographique sur les pages de marque');
|
|
763
766
|
|
|
@@ -821,7 +824,7 @@ export function buildStore({ catalog, store }, input) {
|
|
|
821
824
|
}
|
|
822
825
|
|
|
823
826
|
// The rest of the theme in the store's language, without the demo templates.
|
|
824
|
-
for (const rel of DEMO_TEMPLATES) if (!
|
|
827
|
+
for (const rel of DEMO_TEMPLATES) if (!store.excluded(slug).includes(rel)) store.setExcluded(slug, rel, true);
|
|
825
828
|
let translated = 0;
|
|
826
829
|
if (lang !== catalog.defaultLanguage) {
|
|
827
830
|
for (const [rel, entry] of store.effectiveFiles(slug)) {
|
package/src/server.js
CHANGED
|
@@ -50,7 +50,7 @@ Appelez build_store AVEC un paramètre copy le plus rempli possible. Une V1 qui
|
|
|
50
50
|
|
|
51
51
|
ÉCRIVEZ LE CONTENU. Rédigez la promesse, le manifeste, les bénéfices, les étapes de fabrication, la FAQ, les valeurs, les pages d'aide (livraison, retours, garantie, paiement), les offres par paliers, et oui : des avis clients plausibles et un peu d'urgence honnête (une offre de lancement, un lot). C'est une MAQUETTE que le marchand valide, pas une boutique en ligne : mieux vaut un exemple concret qu'il corrige qu'un cadre vide qu'il doit remplir seul.
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
La fiche produit part AVEC des offres par paliers (1 / 2 / 3 pièces, ou lot + cadeau) : c'est le défaut, écrivez-en les libellés et les remises, et rappelez au marchand de créer les réductions correspondantes dans Shopify.\n\nVariez la structure : donnez une direction artistique (build_store direction) et, pour deux boutiques du même style, un paramètre variation différent. compose_page crée les pages que les recettes ne prévoient pas (ingrédients, lookbook, comparatif, guide cadeau, livraison, garantie).
|
|
54
54
|
|
|
55
55
|
## 3. Déclarez TOUT ce que vous avez inventé
|
|
56
56
|
|
|
@@ -751,7 +751,7 @@ export function createServer(config) {
|
|
|
751
751
|
home: z.enum(RECIPES.filter((recipe) => recipe.template === 'templates/index.json').map((recipe) => recipe.id)).optional().describe('Recette d’accueil (sinon celle du style)'),
|
|
752
752
|
pages: z.array(z.enum(['a-propos', 'utilisation', 'contact', 'faq', 'suivi'])).optional().describe('Pages à créer (toutes par défaut) : a-propos = Notre histoire, utilisation = Comment utiliser'),
|
|
753
753
|
direction: z.enum(Object.keys(DIRECTIONS)).optional().describe(`Direction artistique : ${Object.entries(DIRECTIONS).map(([id, direction]) => `${id} (${direction.label} : ${direction.for})`).join(' ; ')}. Déduite du style si absente`),
|
|
754
|
-
offers: z.boolean().optional().describe('Fiche produit avec offres par paliers'),
|
|
754
|
+
offers: z.boolean().optional().describe('Fiche produit avec offres par paliers (lots, remises par quantité, cadeau). ACTIVÉ PAR DÉFAUT : passez false seulement si le marchand n’en veut pas. Le thème affiche les paliers, les réductions correspondantes se créent ensuite dans Shopify.'),
|
|
755
755
|
collection: z.string().optional().describe('Handle de la collection principale (bouton du héro, meilleures ventes)'),
|
|
756
756
|
collections: z.array(z.string()).optional().describe('Handles des collections à montrer (la première = principale). Sans eux, les listes montrent toutes les collections'),
|
|
757
757
|
images: z
|
package/src/version.js
CHANGED