@wix/agent-skills 1.6.0 → 1.8.0
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/README.md +5 -9
- package/package.json +1 -1
- package/skills/wix-app/SKILL.md +51 -42
- package/skills/wix-app/references/BACKEND_EVENT.md +10 -65
- package/skills/wix-app/references/CUSTOM_ELEMENT_WIDGET.md +101 -406
- package/skills/wix-app/references/DASHBOARD_MENU_PLUGIN.md +14 -111
- package/skills/wix-app/references/DASHBOARD_MODAL.md +56 -205
- package/skills/wix-app/references/DASHBOARD_PAGE.md +19 -98
- package/skills/wix-app/references/DASHBOARD_PLUGIN.md +6 -108
- package/skills/wix-app/references/DATA_COLLECTION.md +113 -198
- package/skills/wix-app/references/EMBEDDED_SCRIPT.md +41 -268
- package/skills/wix-app/references/EXTENSION_REGISTRATION.md +27 -76
- package/skills/wix-app/references/SERVICE_PLUGIN.md +35 -188
- package/skills/wix-app/references/SITE_PLUGIN.md +8 -92
- package/skills/wix-app/references/STORES_VERSIONING.md +1 -0
- package/skills/wix-app/references/backend-event/COMMON-EVENTS.md +0 -44
- package/skills/wix-app/references/custom-element-widget/SETTINGS_PANEL.md +19 -330
- package/skills/wix-app/references/dashboard-menu-plugin/bookings-slots.md +0 -12
- package/skills/wix-app/references/dashboard-menu-plugin/ecommerce-slots.md +7 -0
- package/skills/wix-app/references/dashboard-menu-plugin/restaurants-slots.md +0 -12
- package/skills/wix-app/references/dashboard-plugin/SLOTS.md +3 -15
- package/skills/wix-app/references/service-plugin/ADDITIONAL-FEES.md +2 -18
- package/skills/wix-app/references/service-plugin/BOOKINGS-STAFF-SORTING.md +2 -42
- package/skills/wix-app/references/service-plugin/DISCOUNT-TRIGGERS.md +1 -11
- package/skills/wix-app/references/service-plugin/GIFT-CARDS.md +1 -11
- package/skills/wix-app/references/service-plugin/PAYMENT-SETTINGS.md +2 -40
- package/skills/wix-app/references/service-plugin/SHIPPING-RATES.md +2 -19
- package/skills/wix-app/references/service-plugin/VALIDATIONS.md +2 -18
- package/skills/wix-app/references/site-plugin/SLOTS.md +17 -68
- package/skills/wix-design-system/SKILL.md +4 -0
- package/skills/wix-headless/SKILL.md +131 -386
- package/skills/wix-headless/references/BUILD-astro.md +246 -0
- package/skills/wix-headless/references/BUILD-own-build.md +167 -0
- package/skills/wix-headless/references/BUILD.md +105 -0
- package/skills/wix-headless/references/DESIGN_SYSTEM.md +175 -0
- package/skills/wix-headless/references/DISCOVERY-connect.md +55 -0
- package/skills/wix-headless/references/DISCOVERY-create.md +238 -0
- package/skills/wix-headless/references/DISCOVERY.md +50 -306
- package/skills/wix-headless/references/PLAN-connect.md +19 -0
- package/skills/wix-headless/references/PLAN-create.md +17 -0
- package/skills/wix-headless/references/PLAN.md +92 -0
- package/skills/wix-headless/references/SEED.md +214 -0
- package/skills/wix-headless/references/SETUP.md +73 -248
- package/skills/wix-headless/references/{blog → astro/blog}/BLOG_PAGES.md +6 -5
- package/skills/wix-headless/references/{blog → astro/blog}/BLOG_SETUP.md +2 -2
- package/skills/wix-headless/references/astro/bookings/COMPONENTS.md +337 -0
- package/skills/wix-headless/references/astro/bookings/SERVICES_PAGES.md +428 -0
- package/skills/wix-headless/references/astro/cms/CMS_FOUNDATIONS.md +214 -0
- package/skills/wix-headless/references/{cms → astro/cms}/FAQ_KNOWLEDGE_BASE.md +14 -12
- package/skills/wix-headless/references/{cms → astro/cms}/PORTFOLIO.md +15 -16
- package/skills/wix-headless/references/{cms → astro/cms}/RESOURCE_LIBRARY.md +13 -15
- package/skills/wix-headless/references/{cms → astro/cms}/TEAM_DIRECTORY.md +11 -11
- package/skills/wix-headless/references/astro/designer/INSTRUCTIONS.md +354 -0
- package/skills/wix-headless/references/{ecom → astro/ecom}/CART_PAGES.md +8 -9
- package/skills/wix-headless/references/{ecom → astro/ecom}/CART_WIRING.md +6 -6
- package/skills/wix-headless/references/{ecom → astro/ecom}/COMPONENTS_CSS.md +6 -6
- package/skills/wix-headless/references/{forms → astro/forms}/CONTACT_FORM.md +18 -32
- package/skills/wix-headless/references/{gift-cards → astro/gift-cards}/COMPONENTS.md +3 -3
- package/skills/wix-headless/references/{gift-cards → astro/gift-cards}/PAGES.md +2 -2
- package/skills/wix-headless/references/{stores → astro/stores}/BACK_IN_STOCK.md +7 -7
- package/skills/wix-headless/references/{stores → astro/stores}/CATEGORY_PAGES.md +12 -13
- package/skills/wix-headless/references/{stores → astro/stores}/COMPONENTS_CSS.md +7 -7
- package/skills/wix-headless/references/{stores → astro/stores}/HOME_AND_NAV.md +11 -9
- package/skills/wix-headless/references/{stores → astro/stores}/PRODUCT_PAGES.md +11 -9
- package/skills/wix-headless/references/{stores → astro/stores}/SHARED_WIRING.md +8 -7
- package/skills/wix-headless/references/astro/templates/Footer.astro +27 -0
- package/skills/wix-headless/references/astro/templates/Layout.astro +132 -0
- package/skills/wix-headless/references/astro/templates/Navigation.astro +38 -0
- package/skills/wix-headless/references/astro/templates/astro.config.mjs +41 -0
- package/skills/wix-headless/references/astro/templates/bookings/AvailabilityCalendar.tsx +218 -0
- package/skills/wix-headless/references/astro/templates/bookings/BookingForm.tsx +194 -0
- package/skills/wix-headless/references/astro/templates/bookings/ManageBooking.tsx +84 -0
- package/skills/wix-headless/references/astro/templates/bookings/SeoTags.astro +25 -0
- package/skills/wix-headless/references/astro/templates/bookings/ServiceBookingFlow.tsx +50 -0
- package/skills/wix-headless/references/astro/templates/bookings/ServiceCard.astro +45 -0
- package/skills/wix-headless/references/astro/templates/bookings/api/confirm-booking.ts +34 -0
- package/skills/wix-headless/references/astro/templates/bookings/api/waitlist.ts +74 -0
- package/skills/wix-headless/references/astro/templates/bookings/booking-confirmation.astro +111 -0
- package/skills/wix-headless/references/astro/templates/bookings/components-bookings.css +413 -0
- package/skills/wix-headless/references/astro/templates/bookings/manage-booking.astro +76 -0
- package/skills/wix-headless/references/astro/templates/bookings/services/[slug].astro +81 -0
- package/skills/wix-headless/references/astro/templates/bookings/services/index.astro +65 -0
- package/skills/wix-headless/references/astro/templates/ecom/components-ecom.css +302 -0
- package/skills/wix-headless/references/astro/templates/global.css +286 -0
- package/skills/wix-headless/references/astro/templates/index.astro +56 -0
- package/skills/wix-headless/{templates → references/astro/templates}/stores/back-in-stock.ts +1 -1
- package/skills/wix-headless/{templates → references/astro/templates}/stores/components-stores.css +138 -33
- package/skills/wix-headless/references/blog/BLOG_CONTENT.md +28 -19
- package/skills/wix-headless/references/blog/INSTRUCTIONS.md +6 -6
- package/skills/wix-headless/references/bookings/INSTRUCTIONS.md +106 -0
- package/skills/wix-headless/references/bookings/SERVICES_DATA.md +295 -0
- package/skills/wix-headless/references/cms/CMS_FOUNDATIONS.md +35 -232
- package/skills/wix-headless/references/cms/INSTRUCTIONS.md +39 -8
- package/skills/wix-headless/references/commands/known-apps.json +2 -1
- package/skills/wix-headless/references/custom/CONNECTION_PLAN.md +142 -0
- package/skills/wix-headless/references/custom/INSTRUCTIONS.md +88 -0
- package/skills/wix-headless/references/custom/blog/WIRING.md +52 -0
- package/skills/wix-headless/references/custom/bookings/WIRING.md +88 -0
- package/skills/wix-headless/references/custom/cms/WIRING.md +97 -0
- package/skills/wix-headless/references/custom/ecom/WIRING.md +67 -0
- package/skills/wix-headless/references/custom/forms/WIRING.md +101 -0
- package/skills/wix-headless/references/custom/stores/WIRING.md +80 -0
- package/skills/wix-headless/references/ecom/INSTRUCTIONS.md +12 -12
- package/skills/wix-headless/references/forms/INSTRUCTIONS.md +6 -6
- package/skills/wix-headless/references/gift-cards/INSTRUCTIONS.md +13 -13
- package/skills/wix-headless/references/images/INSTRUCTIONS.md +58 -60
- package/skills/wix-headless/references/seed-recipes.md +49 -0
- package/skills/wix-headless/references/shared/AGENTS_MD.md +47 -0
- package/skills/wix-headless/references/shared/AUTHENTICATION.md +108 -0
- package/skills/wix-headless/references/shared/BUILD_NOISE.md +2 -2
- package/skills/wix-headless/references/shared/DESIGN_MD.md +85 -0
- package/skills/wix-headless/references/shared/DOCS_SEARCH.md +41 -0
- package/skills/wix-headless/references/shared/IMAGE_GENERATION.md +40 -39
- package/skills/wix-headless/references/shared/IMPLEMENTER.md +92 -41
- package/skills/wix-headless/references/shared/PRODUCTION_SHARP_EDGES.md +3 -3
- package/skills/wix-headless/references/shared/RETURN_CONTRACT.md +32 -312
- package/skills/wix-headless/references/shared/STYLING.md +48 -21
- package/skills/wix-headless/references/stores/INSTRUCTIONS.md +59 -29
- package/skills/wix-headless/references/stores/PRODUCT_CATALOG_DATA.md +31 -28
- package/skills/wix-headless/references/verticals/_schema.json +31 -117
- package/skills/wix-headless/references/verticals/_schema.md +60 -150
- package/skills/wix-headless/references/verticals/blog.md +5 -99
- package/skills/wix-headless/references/verticals/bookings.md +41 -0
- package/skills/wix-headless/references/verticals/cms.md +9 -100
- package/skills/wix-headless/references/verticals/ecom.md +6 -77
- package/skills/wix-headless/references/verticals/forms.md +5 -85
- package/skills/wix-headless/references/verticals/gift-cards.md +6 -103
- package/skills/wix-headless/references/verticals/stores.md +10 -144
- package/skills/wix-headless/scripts/check-manifest.mjs +148 -11
- package/skills/wix-headless/scripts/compose.mjs +540 -0
- package/skills/wix-headless/scripts/emit-design-tokens.mjs +136 -53
- package/skills/wix-headless/scripts/flatten.sh +61 -0
- package/skills/wix-headless/scripts/generate-images.mjs +242 -0
- package/skills/wix-headless/scripts/patch-decorative-slots.mjs +67 -43
- package/skills/wix-headless/scripts/plan-entity-image-waves.mjs +3 -3
- package/skills/wix-headless/scripts/scaffold.sh +113 -27
- package/skills/wix-headless/scripts/seed-utilities.sh +50 -12
- package/skills/wix-headless/scripts/write-decorative-json.mjs +62 -0
- package/skills/wix-manage/SKILL.md +4 -8
- package/skills/wix-manage/references/blog/how-to-create-blog-posts.md +2 -0
- package/skills/wix-manage/references/cms/cms-data-items-crud.md +4 -0
- package/skills/wix-manage/references/cms/cms-references-and-relationships.md +2 -0
- package/skills/wix-manage/references/cms/cms-schema-management.md +4 -0
- package/skills/wix-manage/references/domains/domain-search-and-purchase.md +10 -7
- package/skills/wix-manage/references/ecommerce/api-shipping.md +443 -0
- package/skills/wix-manage/references/ecommerce/flow-add-free-shipping.md +5 -6
- package/skills/wix-manage/references/ecommerce/flow-fix-coverage-gaps.md +4 -5
- package/skills/wix-manage/references/ecommerce/flow-optimize-shipping-rates.md +4 -5
- package/skills/wix-manage/references/ecommerce/goal-increase-aov.md +1 -1
- package/skills/wix-manage/references/ecommerce/goal-reduce-cart-abandonment.md +1 -2
- package/skills/wix-manage/references/ecommerce/guardrail-shipping-health.md +2 -2
- package/skills/wix-manage/references/ecommerce/recipe-apply-shipping-recommendations.md +4 -5
- package/skills/wix-manage/references/ecommerce/recommend-ecommerce-strategy.md +7 -7
- package/skills/wix-manage/references/ecommerce/setup-discount-rules.md +209 -72
- package/skills/wix-manage/references/ecommerce/setup-store-pickup-location.md +9 -10
- package/skills/wix-manage/references/ecommerce/skill-graph.md +4 -4
- package/skills/wix-manage/references/forms/create-form.md +50 -0
- package/skills/wix-manage/references/stores/bulk-create-products-with-options.md +2 -0
- package/skills/wix-manage/references/stores/create-product-from-image.md +91 -38
- package/skills/wix-manage/references/stores/setup-online-store-catalog-v3.md +2 -0
- package/skills/wix-app/references/custom-element-widget/default-thumbnail.png +0 -0
- package/skills/wix-app/references/data-collection/extension-template.ts +0 -107
- package/skills/wix-headless/references/ORCHESTRATION.md +0 -269
- package/skills/wix-headless/references/commands/install-app.md +0 -42
- package/skills/wix-headless/references/commands/mcp-bootstrap.md +0 -28
- package/skills/wix-headless/references/designer/INSTRUCTIONS.md +0 -828
- package/skills/wix-headless/references/shared/MCP_PREFIX.md +0 -105
- package/skills/wix-headless/scripts/copy-utility-templates.mjs +0 -153
- package/skills/wix-headless/scripts/finalize-run-json.mjs +0 -141
- package/skills/wix-headless/scripts/init-site-json.mjs +0 -63
- package/skills/wix-headless/scripts/preview.sh +0 -45
- package/skills/wix-headless/scripts/release.sh +0 -73
- package/skills/wix-headless/templates/ecom/components-ecom.css +0 -215
- package/skills/wix-manage/references/events/list-events.md +0 -203
- /package/skills/wix-headless/{templates → references/astro/templates}/ecom/CartBadge.tsx +0 -0
- /package/skills/wix-headless/{templates → references/astro/templates}/ecom/CartView.tsx +0 -0
- /package/skills/wix-headless/{templates → references/astro/templates}/ecom/cart.astro +0 -0
- /package/skills/wix-headless/{templates → references/astro/templates}/ecom/discounts.ts +0 -0
- /package/skills/wix-headless/{templates → references/astro/templates}/ecom/thank-you.astro +0 -0
- /package/skills/wix-headless/{templates → references/astro/templates}/gift-cards/GiftCardPurchase.tsx +0 -0
- /package/skills/wix-headless/{templates → references/astro/templates}/gift-cards/_home-teaser-snippet.astro +0 -0
- /package/skills/wix-headless/{templates → references/astro/templates}/gift-cards/_nav-snippet.astro +0 -0
- /package/skills/wix-headless/{templates → references/astro/templates}/gift-cards/components-gift-cards.css +0 -0
- /package/skills/wix-headless/{templates → references/astro/templates}/gift-cards/gift-cards.astro +0 -0
- /package/skills/wix-headless/{templates → references/astro/templates}/gift-cards/gift-cards.ts +0 -0
- /package/skills/wix-headless/{templates → references/astro/templates}/stores/AddToCartButton.tsx +0 -0
- /package/skills/wix-headless/{templates → references/astro/templates}/stores/BackInStockForm.tsx +0 -0
- /package/skills/wix-headless/{templates → references/astro/templates}/stores/CategoryRail.astro +0 -0
- /package/skills/wix-headless/{templates → references/astro/templates}/stores/ProductCard.astro +0 -0
- /package/skills/wix-headless/{templates → references/astro/templates}/stores/ProductPurchase.tsx +0 -0
- /package/skills/wix-headless/{templates → references/astro/templates}/stores/SeoTags.astro +0 -0
- /package/skills/wix-headless/{templates → references/astro/templates}/stores/categories.ts +0 -0
- /package/skills/wix-headless/{templates → references/astro/templates}/stores/category/[slug].astro +0 -0
- /package/skills/wix-headless/{templates → references/astro/templates}/stores/products/[slug].astro +0 -0
- /package/skills/wix-headless/{templates → references/astro/templates}/stores/products/index.astro +0 -0
|
@@ -5,17 +5,17 @@ description: "Implements vertical-agnostic ecommerce — cart page, checkout red
|
|
|
5
5
|
|
|
6
6
|
# Ecom Implementer
|
|
7
7
|
|
|
8
|
-
Extends `references/shared/IMPLEMENTER.md`. Read that file first for phase routing,
|
|
8
|
+
Extends `references/shared/IMPLEMENTER.md`. Read that file first for phase routing, REST auth + doc lookups, prompt-inlined inputs (read only your `.wix/seeded.json` slice), return contract, style conventions, and common failure modes.
|
|
9
9
|
|
|
10
10
|
## Scope routing
|
|
11
11
|
|
|
12
12
|
| Scope | Phase | Reference |
|
|
13
13
|
|-------|-------|-----------|
|
|
14
|
-
| `components` | Components (CartView, CartBadge — TSX only, **no CSS**) — `src/utils/discounts.ts` is pre-copied by the orchestrator |
|
|
15
|
-
|
|
|
16
|
-
| `pages` | Pages (cart.astro, thank-you.astro, Navigation CartBadge mount) |
|
|
14
|
+
| `components` | Components (CartView, CartBadge — TSX only, **no CSS**) — `src/utils/discounts.ts` is pre-copied by the orchestrator | `../astro/ecom/CART_WIRING.md` |
|
|
15
|
+
| ~~`components-css`~~ | **Do not dispatch.** `src/styles/components-ecom.css` is copied from `<SKILL_ROOT>/references/astro/templates/ecom/components-ecom.css` by the orchestrator's pre-Step-4.5 batch (see BUILD-astro.md § Step 4.5). The template uses direct `var(--token)` CSS, so it works against any designer-published vocabulary without per-run rewrites. `COMPONENTS_CSS.md` documents that CSS for reference — there is no `components-css` subagent to dispatch. | — |
|
|
16
|
+
| `pages` | Pages (cart.astro, thank-you.astro, Navigation CartBadge mount) | `../astro/ecom/CART_PAGES.md` |
|
|
17
17
|
|
|
18
|
-
> **Why `components` is
|
|
18
|
+
> **Why `components` is TSX-only.** The scoped CSS (`src/styles/components-ecom.css`) has no runtime coupling to the TSX components — it's referenced only by class name at build time — so it ships pre-copied from the template by the orchestrator (see the `components-css` scope-routing row above) rather than being written by an agent. Mirrors the stores split. See `../astro/ecom/COMPONENTS_CSS.md` § "What this scope owns".
|
|
19
19
|
|
|
20
20
|
Note: `ecom` is never triggered independently — it's co-loaded by verticals that require it (`stores` today; `bookings`, `events` in the future). No `seed` scope — ecom has no data of its own; it works off line items from whichever catalog app is installed.
|
|
21
21
|
|
|
@@ -26,21 +26,21 @@ See `<SKILL_ROOT>/references/verticals/ecom.md` frontmatter.
|
|
|
26
26
|
## Templates
|
|
27
27
|
|
|
28
28
|
Components (`components` scope — TSX only):
|
|
29
|
-
- `<SKILL_ROOT>/templates/ecom/CartView.tsx`
|
|
30
|
-
- `<SKILL_ROOT>/templates/ecom/CartBadge.tsx`
|
|
29
|
+
- `<SKILL_ROOT>/references/astro/templates/ecom/CartView.tsx`
|
|
30
|
+
- `<SKILL_ROOT>/references/astro/templates/ecom/CartBadge.tsx`
|
|
31
31
|
|
|
32
|
-
Components CSS (
|
|
33
|
-
- `<SKILL_ROOT>/templates/ecom/components-ecom.css`
|
|
32
|
+
Components CSS (pre-copied by the orchestrator — no agent writes it):
|
|
33
|
+
- `<SKILL_ROOT>/references/astro/templates/ecom/components-ecom.css`
|
|
34
34
|
|
|
35
35
|
### Pre-copied by the orchestrator (do NOT write this yourself)
|
|
36
36
|
|
|
37
|
-
- `src/utils/discounts.ts` — pre-copied from `<SKILL_ROOT>/templates/ecom/discounts.ts` BEFORE your `components` scope dispatches. Wix Ecom Discount Rules fetch + per-product match utility; consumers are stores `pages-products` / `pages-home-and-nav` (ProductCard ribbon + product-detail offer callout). Uses `auth.elevate()` from `@wix/essentials` — `discountRules.queryDiscountRules` requires `ECOM.DISCOUNT_RULES_READ`, a visitor client returns empty silently without elevation.
|
|
37
|
+
- `src/utils/discounts.ts` — pre-copied from `<SKILL_ROOT>/references/astro/templates/ecom/discounts.ts` BEFORE your `components` scope dispatches. Wix Ecom Discount Rules fetch + per-product match utility; consumers are stores `pages-products` / `pages-home-and-nav` (ProductCard ribbon + product-detail offer callout). Uses `auth.elevate()` from `@wix/essentials` — `discountRules.queryDiscountRules` requires `ECOM.DISCOUNT_RULES_READ`, a visitor client returns empty silently without elevation.
|
|
38
38
|
|
|
39
39
|
Just import from this path; never rewrite the file. Regenerating it has shipped a no-op stub that satisfied the manifest but caused the discount ribbon to silently never render. The pre-copy makes that regression structurally impossible.
|
|
40
40
|
|
|
41
41
|
## CSS ownership — ecom pack
|
|
42
42
|
|
|
43
|
-
Ecom-specific component CSS lives in `src/styles/components-ecom.css` (
|
|
43
|
+
Ecom-specific component CSS lives in `src/styles/components-ecom.css` (pre-copied from the template by the orchestrator before Step 4.5 — see the `components-css` scope-routing row above; your `components` scope imports it, never writes it), NOT in the designer's `global.css`. The classes the pack owns:
|
|
44
44
|
|
|
45
45
|
- `.cart-summary` — the bordered/sticky summary panel on `/cart`. Compound bordered card; sticky on desktop.
|
|
46
46
|
- `.cart-total` — the row inside the summary that anchors the total amount with a top rule and display-serif typography.
|
|
@@ -56,4 +56,4 @@ See `references/shared/STYLING.md` § "Component-specific CSS is owned by the co
|
|
|
56
56
|
|
|
57
57
|
`cart-updated` CustomEvent on `window`:
|
|
58
58
|
- **Dispatchers:** `AddToCartButton` (stores), `CartView` (ecom)
|
|
59
|
-
- **Listener:** `CartBadge` (ecom)
|
|
59
|
+
- **Listener:** `CartBadge` (ecom)
|
|
@@ -5,19 +5,19 @@ description: "Implements contact, lead, and signup forms via @wix/forms. Scopes:
|
|
|
5
5
|
|
|
6
6
|
# Forms Implementer
|
|
7
7
|
|
|
8
|
-
Extends `references/shared/IMPLEMENTER.md`. Read that file first for phase routing,
|
|
8
|
+
Extends `references/shared/IMPLEMENTER.md`. Read that file first for phase routing, REST auth + doc lookups, prompt-inlined inputs (read only your `.wix/seeded.json` slice), return contract, style conventions, and common failure modes.
|
|
9
9
|
|
|
10
10
|
## Scope routing
|
|
11
11
|
|
|
12
12
|
| Scope | Phase | Reference |
|
|
13
13
|
|-------|-------|-----------|
|
|
14
|
-
| `seed` | Seed (Forms app install + form creation + postSubmissionTriggers PATCH) |
|
|
15
|
-
| `components` | Components (ContactForm.tsx React island) |
|
|
16
|
-
| `pages` | Pages (contact.astro wire with formId from seeded data) |
|
|
14
|
+
| `seed` | Seed (Forms app install + form creation + postSubmissionTriggers PATCH) | `../astro/forms/CONTACT_FORM.md` (§ Form Setup) |
|
|
15
|
+
| `components` | Components (ContactForm.tsx React island) | `../astro/forms/CONTACT_FORM.md` (§ React island) |
|
|
16
|
+
| `pages` | Pages (contact.astro wire with formId from seeded data) | `../astro/forms/CONTACT_FORM.md` (§ Page wiring) |
|
|
17
17
|
|
|
18
18
|
## Files this vertical creates / contributes
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
Each scope's files are enumerated in `../astro/forms/CONTACT_FORM.md` (§ Form Setup, § React island, § Page wiring).
|
|
21
21
|
|
|
22
22
|
## Form purpose variants
|
|
23
23
|
|
|
@@ -40,4 +40,4 @@ The `seed` scope adapts field selection based on business purpose from the funct
|
|
|
40
40
|
| Skip `auth.elevate` when listing forms | `listForms` requires elevated permissions |
|
|
41
41
|
| Submit forms from server-side code | Form submission must be client-side (React island with `client:load`) |
|
|
42
42
|
| Detect textarea by `componentType === "TEXT_AREA"` | Check `identifier === "TEXT_AREA"` or `target === "message"` |
|
|
43
|
-
| Hardcode form field IDs or form ID | Use `forms.listForms("wix.form_app.form")` with `auth.elevate` for runtime discovery |
|
|
43
|
+
| Hardcode form field IDs or form ID | Use `forms.listForms("wix.form_app.form")` with `auth.elevate` for runtime discovery |
|
|
@@ -5,38 +5,38 @@ description: "Implements the passive Wix Gift Cards vertical — runtime probe u
|
|
|
5
5
|
|
|
6
6
|
# Gift Cards Implementer
|
|
7
7
|
|
|
8
|
-
Extends `references/shared/IMPLEMENTER.md`. Read that file first for phase routing,
|
|
8
|
+
Extends `references/shared/IMPLEMENTER.md`. Read that file first for phase routing, REST auth + doc lookups, prompt-inlined inputs (read only your `.wix/seeded.json` slice), return contract, style conventions, and common failure modes.
|
|
9
9
|
|
|
10
10
|
## Scope routing
|
|
11
11
|
|
|
12
12
|
| Scope | Phase | Reference |
|
|
13
13
|
|-------|-------|-----------|
|
|
14
|
-
| `components` | Components (probe util, React island, scoped CSS) |
|
|
15
|
-
| `pages` | Pages (gift-cards landing + Navigation/index patches) |
|
|
14
|
+
| `components` | Components (probe util, React island, scoped CSS) | `../astro/gift-cards/COMPONENTS.md` |
|
|
15
|
+
| `pages` | Pages (gift-cards landing + Navigation/index patches) | `../astro/gift-cards/PAGES.md` |
|
|
16
16
|
|
|
17
17
|
This pack has **no `seed` scope** — the dashboard's eGift Card template is the source of truth and we never seed denominations from code.
|
|
18
18
|
|
|
19
19
|
## Files this vertical creates / contributes
|
|
20
20
|
|
|
21
|
-
See
|
|
21
|
+
See the § "Templates" list below for the files each scope produces (and the nav/home contributions it patches).
|
|
22
22
|
|
|
23
23
|
## Pre-return file-existence assertion (pages scope)
|
|
24
24
|
|
|
25
|
-
Before returning `status: "complete"` from the `pages` scope, verify every file
|
|
25
|
+
Before returning `status: "complete"` from the `pages` scope, verify every file the scope produces (the page templates in § "Templates" below, plus the patched `Navigation.astro` / `index.astro`) exists on disk. If a declared file is missing, return `status: "partial"` with `errors: [{ code: "PHASE4_FILE_MISSING", path: "<expected path>" }]` rather than claiming success.
|
|
26
26
|
|
|
27
27
|
## Templates
|
|
28
28
|
|
|
29
|
-
Canonical templates live at `<SKILL_ROOT>/templates/gift-cards/`. Your `components` and `pages` scopes read these and adapt them — don't invent markup or logic.
|
|
29
|
+
Canonical templates live at `<SKILL_ROOT>/references/astro/templates/gift-cards/`. Your `components` and `pages` scopes read these and adapt them — don't invent markup or logic.
|
|
30
30
|
|
|
31
31
|
Components (`components` scope):
|
|
32
|
-
- `<SKILL_ROOT>/templates/gift-cards/gift-cards.ts`
|
|
33
|
-
- `<SKILL_ROOT>/templates/gift-cards/GiftCardPurchase.tsx`
|
|
34
|
-
- `<SKILL_ROOT>/templates/gift-cards/components-gift-cards.css`
|
|
32
|
+
- `<SKILL_ROOT>/references/astro/templates/gift-cards/gift-cards.ts`
|
|
33
|
+
- `<SKILL_ROOT>/references/astro/templates/gift-cards/GiftCardPurchase.tsx`
|
|
34
|
+
- `<SKILL_ROOT>/references/astro/templates/gift-cards/components-gift-cards.css`
|
|
35
35
|
|
|
36
36
|
Pages (`pages` scope):
|
|
37
|
-
- `<SKILL_ROOT>/templates/gift-cards/gift-cards.astro`
|
|
38
|
-
- `<SKILL_ROOT>/templates/gift-cards/_nav-snippet.astro` — exact contribution to insert at `<!-- nav:links -->` in `Navigation.astro`
|
|
39
|
-
- `<SKILL_ROOT>/templates/gift-cards/_home-teaser-snippet.astro` — exact contribution to insert at `<!-- home:gift-cards -->` in `index.astro`
|
|
37
|
+
- `<SKILL_ROOT>/references/astro/templates/gift-cards/gift-cards.astro`
|
|
38
|
+
- `<SKILL_ROOT>/references/astro/templates/gift-cards/_nav-snippet.astro` — exact contribution to insert at `<!-- nav:links -->` in `Navigation.astro`
|
|
39
|
+
- `<SKILL_ROOT>/references/astro/templates/gift-cards/_home-teaser-snippet.astro` — exact contribution to insert at `<!-- home:gift-cards -->` in `index.astro`
|
|
40
40
|
|
|
41
41
|
## Gift-cards-specific failure modes
|
|
42
42
|
|
|
@@ -48,4 +48,4 @@ Pages (`pages` scope):
|
|
|
48
48
|
| Forget to import `getGiftCardProduct` when patching `Navigation.astro` or `index.astro` | When inserting at a marker, also add the corresponding import + frontmatter call to that file |
|
|
49
49
|
| Drop or rename the marker comment after inserting | Preserve the marker line — future re-runs and other verticals depend on it |
|
|
50
50
|
| Render the page when probe returns `null` | Redirect to `/` (`Astro.redirect("/", 302)`) so users following stale links never see a broken page |
|
|
51
|
-
| Skip memoization of `getGiftCardProduct()` | Module-level cache promise — Navigation, home, and page render in the same request and must coalesce to one fetch |
|
|
51
|
+
| Skip memoization of `getGiftCardProduct()` | Module-level cache promise — Navigation, home, and page render in the same request and must coalesce to one fetch |
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: images-agent
|
|
3
|
-
description: "Generates images for the site. Two scopes: image-phase-1-decorative (hero/about/background art
|
|
3
|
+
description: "Generates images for the site. Two scopes: image-phase-1-decorative (hero/about/background art) and image-phase-2-entity (product/blog/CMS item images, needs Phase 1 Seed entity IDs)."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Images Agent — Scope-Based Image Generation
|
|
7
7
|
|
|
8
|
-
Generates site images in two scopes
|
|
8
|
+
Generates site images in two scopes. Uses Wix AI (Runware) for generation and Wix Media for hosting — all via `curl` against `wixapis.com` using the CLI-minted REST token (see `../shared/AUTHENTICATION.md`).
|
|
9
9
|
|
|
10
10
|
**Nothing else blocks on image generation.** Phases 1–4 and the core pipeline all proceed independently. Products, posts, and pages work without images. Each image phase enriches them when it finishes.
|
|
11
11
|
|
|
@@ -13,21 +13,21 @@ Generates site images in two scopes dispatched separately by the parent skill. U
|
|
|
13
13
|
|
|
14
14
|
Your prompt includes `Scope: <name>`. Map it to an image phase:
|
|
15
15
|
|
|
16
|
-
| Scope |
|
|
17
|
-
|
|
18
|
-
| `image-phase-1-decorative` |
|
|
19
|
-
| `image-phase-2-entity` |
|
|
16
|
+
| Scope | Depends on | Output |
|
|
17
|
+
|---|---|---|
|
|
18
|
+
| `image-phase-1-decorative` | Brand context only | Decorative images for hero / about / backgrounds; slot→URL map returned in `data.slots` |
|
|
19
|
+
| `image-phase-2-entity` | Phase 1 Seed return data (entity IDs in prompt) | Entity images attached to products / blog posts / CMS items via REST PATCH |
|
|
20
20
|
|
|
21
21
|
If your prompt is missing a `Scope:` line, stop and ask the parent — do not guess.
|
|
22
22
|
|
|
23
23
|
## Self-Loading
|
|
24
24
|
|
|
25
25
|
1. Read `../shared/IMAGE_GENERATION.md` — Wix AI image generation + Wix Media import recipe (including the **required** batched-call pattern)
|
|
26
|
-
2. Read `../shared/
|
|
26
|
+
2. Read `../shared/DOCS_SEARCH.md` — REST auth for Wix API calls
|
|
27
27
|
3. **Prefer the inlined recipe below and `IMAGE_GENERATION.md` over external docs.** When a PATCH or API call fails:
|
|
28
28
|
1. **FIRST re-read your own recipe** in this file (INSTRUCTIONS.md § for that entity type) — it likely covers the error.
|
|
29
29
|
2. If the recipe covers it, follow the recipe. Do NOT look up external docs for errors your recipe already handles.
|
|
30
|
-
3. **ONLY** if you've re-read the recipe AND the error is genuinely not covered, fall back to `
|
|
30
|
+
3. **ONLY** if you've re-read the recipe AND the error is genuinely not covered, fall back to `docs-search REST (see DOCS_SEARCH.md)` / `raw-docs REST (see DOCS_SEARCH.md)`.
|
|
31
31
|
|
|
32
32
|
Known errors already covered by this recipe (do not look up externally):
|
|
33
33
|
- **428** from product PATCH → missing `options`/`variantsInfo` → see § "Products" step 1
|
|
@@ -36,19 +36,23 @@ If your prompt is missing a `Scope:` line, stop and ask the parent — do not gu
|
|
|
36
36
|
- **400** `unsupportedDimensions` → see § "Error Handling"
|
|
37
37
|
- **400** `invalidTaskUUID` → `taskUUID` must be valid UUIDv4 → see § "Quick Reference"
|
|
38
38
|
|
|
39
|
-
##
|
|
39
|
+
## Preferred: generate + import via `generate-images.mjs`
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
**Run the phase's generation + Wix Media import through `<SKILL_ROOT>/scripts/generate-images.mjs`** (see `../shared/IMAGE_GENERATION.md` § "Preferred: run the whole phase through `generate-images.mjs`"). Build the image list — one entry per slot (Phase 1) or per entity (Phase 2), each with `{key, positivePrompt, width, height}` — and pipe it in with the run's cached `WIX_TOKEN`. The script fires all generations concurrently in-process and returns a `key → {url, fileId}` map plus a `slots` (key→url) convenience map. This is the deterministic form of the "one concurrent batch" rule — it cannot serialize and cannot hit the `google:4@2` N≥3 504. Then attach: Phase 1 → `write-decorative-json.mjs`; Phase 2 → the per-entity PATCH/PUT/publish recipe in this file. **You still own prompt construction** (brand-contextual, per the guidelines) and **entity attachment**; the script owns the parallel network round-trips only.
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
## Quick Reference: Generation Call Shape (manual fallback)
|
|
44
44
|
|
|
45
|
-
-
|
|
46
|
-
|
|
45
|
+
The shapes below are the **reference bodies** the script builds, and the **fallback** if you hand-drive generation. Before the first REST call, ensure the `curl` tool schema is loaded (the orchestrator's session auth covers this for the whole session per `<SKILL_ROOT>/references/shared/AUTHENTICATION.md` — only re-load if you hit a tool-not-found error). Use your runtime's AUTHENTICATION.md recovery ladder to look up the suffix.
|
|
46
|
+
|
|
47
|
+
**If you do hand-drive it, all generation tool calls for an image phase MUST be in one concurrent batch.** The exact shape depends on the model — see `../shared/IMAGE_GENERATION.md` § "Required (manual fallback): minimize round-trips" for the rule. In short:
|
|
48
|
+
|
|
49
|
+
- **`google:4@2` (the default):** N concurrent 1-task `curl` calls as siblings in one batch. (Batched N≥3 times out at 504 on this model.)
|
|
50
|
+
- **`bfl:5@1`, `runware:400@1`:** one batched `curl` call with N tasks in the body array.
|
|
47
51
|
|
|
48
52
|
Example task body (same for both patterns — only the distribution across tool calls changes):
|
|
49
53
|
|
|
50
54
|
```
|
|
51
|
-
|
|
55
|
+
REST: POST https://www.wixapis.com/runwareschemaless/v1/request
|
|
52
56
|
body: [
|
|
53
57
|
{
|
|
54
58
|
"taskType": "imageInference",
|
|
@@ -93,11 +97,11 @@ Concurrent siblings are safe across all three stages (gen, import, PATCH). Wix M
|
|
|
93
97
|
|
|
94
98
|
Image Phase 2 for N products + M CMS items: ~1 schema-load + 1 product query + 1 batched generate + (N+M) imports + (N+M) PATCHes ≈ 2(N+M) + 3 calls. For 4 entities that's ~11 calls. If above 20, check for unnecessary doc reads or re-queries.
|
|
95
99
|
|
|
96
|
-
## Scope: `image-phase-1-decorative` (
|
|
100
|
+
## Scope: `image-phase-1-decorative` (no dependencies)
|
|
97
101
|
|
|
98
102
|
Generate site-wide decorative images that don't depend on any entity. Used by the Phase 2 Design System agent + Phase 4 Pages agents for hero sections, about pages, and backgrounds.
|
|
99
103
|
|
|
100
|
-
**What to generate** is determined by the `decorativeSlots` list in your prompt — generate exactly those keys, no more, no less. Typical canonical keys: `hero`, `about`, `productsHeader`, `cmsHeader`. Do not invent additional keys (`background`, `aboutFeature`, etc.) — orphan keys ship as unused images and unfilled slots show as empty placeholders. The orchestrator composes this list from the loaded verticals + the designer's slot vocabulary (`references/designer/INSTRUCTIONS.md` § common rule #7); the two must agree.
|
|
104
|
+
**What to generate** is determined by the `decorativeSlots` list in your prompt — generate exactly those keys, no more, no less. Typical canonical keys: `hero`, `about`, `productsHeader`, `cmsHeader`. Do not invent additional keys (`background`, `aboutFeature`, etc.) — orphan keys ship as unused images and unfilled slots show as empty placeholders. The orchestrator composes this list from the loaded verticals + the designer's slot vocabulary (`references/astro/designer/INSTRUCTIONS.md` § common rule #7); the two must agree.
|
|
101
105
|
|
|
102
106
|
**Inputs (from your prompt):**
|
|
103
107
|
- Brand name, business type, aesthetic direction
|
|
@@ -108,25 +112,16 @@ Generate site-wide decorative images that don't depend on any entity. Used by th
|
|
|
108
112
|
**Process (must follow this order):**
|
|
109
113
|
|
|
110
114
|
1. **Craft all image prompts up front** using brand context — see `IMAGE_GENERATION.md` § "Prompt guidelines".
|
|
111
|
-
2. **
|
|
112
|
-
3. **Import each to Wix Media** via
|
|
113
|
-
4. **
|
|
114
|
-
|
|
115
|
-
# Image URLs
|
|
116
|
-
|
|
117
|
-
## hero
|
|
118
|
-
- url: https://static.wixstatic.com/media/...
|
|
115
|
+
2. **Generate + import via `generate-images.mjs`** (preferred — § "Preferred: generate + import" above): build the `images` list (`key` = slot name, e.g. `hero`/`about`) and run the script with the cached `WIX_TOKEN`; it fires all generations concurrently and returns the `slots` map. **Manual fallback only:** follow § "Mandatory pre-call procedure" above (construct ALL tasks first, dispatch in one concurrent batch).
|
|
116
|
+
3. **Import each to Wix Media** via `REST: POST https://www.wixapis.com/site-media/v1/files/import`.
|
|
117
|
+
4. **Collect the resolved URLs keyed by slot purpose** (e.g., `{"hero": "https://static.wixstatic.com/...", "about": "https://static.wixstatic.com/..."}`). This map goes into your return JSON under `data.slots` — see § Return below. Do NOT write `.wix/image-urls.md` or any other file; the orchestrator pipes your `data.slots` directly into `patch-decorative-slots.mjs` via stdin.
|
|
118
|
+
5. Return the structured JSON block per `../shared/RETURN_CONTRACT.md` (see § Return below). The JSON return is your sole output channel.
|
|
119
119
|
|
|
120
|
-
|
|
121
|
-
- url: https://static.wixstatic.com/media/...
|
|
122
|
-
```
|
|
123
|
-
5. Return the structured JSON block per `../shared/RETURN_CONTRACT.md` (see § Return below).
|
|
124
|
-
|
|
125
|
-
Page design agents read `.wix/image-urls.md` and use the URLs. If the file doesn't exist when a page agent runs, the page agent uses placeholder styling instead — nothing blocks.
|
|
120
|
+
The orchestrator consumes your `data.slots` map via one of two deterministic scripts, depending on the frontend — **your output contract is identical either way** (a slot→URL map; you never touch frontend source): on **astro** it pipes the map into `patch-decorative-slots.mjs`, which injects `<img>` tags into the designer's `data-decorative-slot="<key>"` placeholders in `.astro` pages; on a **framework-SPA (`own`)** it pipes the map into `write-decorative-json.mjs`, which writes `src/decorative-images.json` for the generated app to import. Either way, if your return is missing or has no slots, the consumer is a no-op and the placeholders fall back to the designer's solid-color (themed-block) rendering — nothing blocks.
|
|
126
121
|
|
|
127
|
-
## Scope: `image-phase-2-entity` (
|
|
122
|
+
## Scope: `image-phase-2-entity` (Phase 1 Seed data inline)
|
|
128
123
|
|
|
129
|
-
Generate images for products, blog posts, and CMS items. Attach via
|
|
124
|
+
Generate images for products, blog posts, and CMS items. Attach via REST PATCH calls (`curl` against `wixapis.com`).
|
|
130
125
|
|
|
131
126
|
> **Parent must NOT paste a PATCH/Update body template.** This INSTRUCTIONS.md owns the recipe per entity type (Products, Blog Posts, CMS Items) — including the exact write-shape (`media.itemsInfo.items[].url` + echoed `options`/`variantsInfo` + `revision`, no `fieldMask`) and the failure-mode mappings. An inline template in the parent prompt causes drift; the wrong shape (e.g. `media.main.image` + `fieldMask`) returns `400 "Expected an object"` on every product. Parents should pass `Phase 1 Seed return data` and `Brand context` only.
|
|
132
127
|
|
|
@@ -135,21 +130,18 @@ Generate images for products, blog posts, and CMS items. Attach via MCP PATCH ca
|
|
|
135
130
|
- `collections: [{name, itemIds, fields}, ...]` — if cms pack loaded
|
|
136
131
|
- `blogPosts: [{id, title, ...}, ...]` — if blog pack loaded
|
|
137
132
|
|
|
138
|
-
**Do not poll for sidecars.** `.wix/logs/<feature>-data.md`
|
|
133
|
+
**Do not poll for sidecars.** Do not read `.wix/logs/<feature>-data.md` or any coordination file (see `../shared/RETURN_CONTRACT.md`). If the `Phase 1 Seed return data:` block is missing from your prompt, return `status: "failed"` with `reason: "Phase 1 Seed return data not provided; image-phase-2-entity cannot run without entity IDs"` — do not sleep, do not read sidecars, do not re-query Phase 1 Seed data.
|
|
139
134
|
|
|
140
135
|
**Process per entity type (must follow):**
|
|
141
136
|
|
|
142
137
|
1. **Craft all image prompts** for this entity type up front, using each entity's own context (name, description, title, etc.).
|
|
143
|
-
2. **
|
|
144
|
-
- For `google:4@2` (default): N parallel sibling `CallWixSiteAPI` tool calls, one task each.
|
|
145
|
-
- For `bfl:5@1` / `runware:400@1` / others: ONE batched call with all N tasks in `body`.
|
|
146
|
-
See `IMAGE_GENERATION.md` § "Required: minimize round-trips per image phase". Sequential 1-task calls across multiple turns is an anti-pattern.
|
|
138
|
+
2. **Generate + import via `generate-images.mjs`** (preferred — § "Preferred: generate + import" above): build the `images` list with `key` = each entity's ID, run the script with the cached `WIX_TOKEN`, and read the returned `map[entityId].url` / `.fileId` for the attach step. The script generates all entity images concurrently and isolates per-image failures (`status: "partial"`) — including the `google:4@2` 504 retry below, handled in-script. **Manual fallback only:** follow § "Mandatory pre-call procedure" above (construct ALL tasks first, dispatch in one concurrent batch).
|
|
147
139
|
|
|
148
|
-
**`google:4@2` 504 retry
|
|
140
|
+
**`google:4@2` 504 retry** (manual fallback; the script does this for you). Even with N concurrent siblings, individual tasks intermittently 504. When the response array contains an entry with `errorMessage: "Request timed out"` or HTTP 504, retry **only the failing task(s)** in a follow-up batch — do NOT re-dispatch the whole batch. Cap at 1 retry per task; if it 504s twice, fall back to `bfl:5@1` for that task or skip it (entity gets no image; user can upload from dashboard).
|
|
149
141
|
|
|
150
|
-
**N≥6 entities — stagger.** When you have 6 or more entities of one type, split into pairs of 3 parallel siblings rather than 6+ in one shot. Runware throttles google:4@2 above ~4 concurrent tasks per request burst, and the timeout ladder gets steeper. Two messages with 3 siblings each is reliably faster than one message with 6 + multiple retries.
|
|
142
|
+
**N≥6 entities — stagger.** When you have 6 or more entities of one type, split into pairs of 3 parallel siblings rather than 6+ in one shot. Runware throttles google:4@2 above ~4 concurrent tasks per request burst, and the timeout ladder gets steeper. Two messages with 3 siblings each is reliably faster than one message with 6 + multiple retries.
|
|
151
143
|
3. **Import each to Wix Media**. Imports can parallelize.
|
|
152
|
-
4. **PATCH each entity** with its image URL / file ID. PATCH calls can also parallelize (sibling `
|
|
144
|
+
4. **PATCH each entity** with its image URL / file ID. PATCH calls can also parallelize (sibling `curl` tool calls in one message).
|
|
153
145
|
|
|
154
146
|
### Products (if `products` is in your prompt)
|
|
155
147
|
|
|
@@ -161,9 +153,9 @@ Generate images for products, blog posts, and CMS items. Attach via MCP PATCH ca
|
|
|
161
153
|
|
|
162
154
|
> **Use per-product GET instead of bulk query:**
|
|
163
155
|
> ```
|
|
164
|
-
>
|
|
156
|
+
> REST: GET https://www.wixapis.com/stores/v3/products/{productId}
|
|
165
157
|
> ```
|
|
166
|
-
> GET returns both `options` and `variantsInfo` in one shot. Parallelize the N GETs as sibling `
|
|
158
|
+
> GET returns both `options` and `variantsInfo` in one shot. Parallelize the N GETs as sibling `curl` tool calls in one concurrent batch so they fan out without adding to the critical path.
|
|
167
159
|
|
|
168
160
|
> If you skip this and get a 428, re-read this section — do not look up external docs.
|
|
169
161
|
|
|
@@ -173,7 +165,7 @@ Generate images for products, blog posts, and CMS items. Attach via MCP PATCH ca
|
|
|
173
165
|
|
|
174
166
|
4. PATCH each product with its image + preserved options/variantsInfo + product `revision`:
|
|
175
167
|
```
|
|
176
|
-
|
|
168
|
+
REST: PATCH https://www.wixapis.com/stores/v3/products/{productId}
|
|
177
169
|
body: {
|
|
178
170
|
"product": {
|
|
179
171
|
"revision": "<product.revision from step 1's GET>",
|
|
@@ -197,11 +189,11 @@ Generate images for products, blog posts, and CMS items. Attach via MCP PATCH ca
|
|
|
197
189
|
|
|
198
190
|
**409 `INVALID_REVISION` recovery.** If a single PATCH returns 409 with `{"applicationError": {"code": "INVALID_REVISION", ...}}`, the product's actual revision has advanced past the value you cached in step 1's GET. This typically happens against an already-built site (re-runs, remediation runs) where the user edited products via the dashboard between builds. Recovery is per-failure, not whole-batch:
|
|
199
191
|
|
|
200
|
-
1. Re-fetch the failed product:
|
|
192
|
+
1. Re-fetch the failed product: `REST: GET https://www.wixapis.com/stores/v3/products/{productId}`.
|
|
201
193
|
2. Retry the PATCH once with the new revision.
|
|
202
194
|
3. If the retry also fails with 409, surface the error — something else is mutating the entity faster than we can react. Don't loop.
|
|
203
195
|
|
|
204
|
-
Successful PATCHes from the original parallel batch keep their state; only the 409'd entity needs the recovery. Cap at one retry per failed entity.
|
|
196
|
+
Successful PATCHes from the original parallel batch keep their state; only the 409'd entity needs the recovery. Cap at one retry per failed entity.
|
|
205
197
|
|
|
206
198
|
### Blog Posts (if `blogPosts` is in your prompt)
|
|
207
199
|
|
|
@@ -213,7 +205,7 @@ Generate images for products, blog posts, and CMS items. Attach via MCP PATCH ca
|
|
|
213
205
|
|
|
214
206
|
4. PATCH each draft post's cover image:
|
|
215
207
|
```
|
|
216
|
-
|
|
208
|
+
REST: PATCH https://www.wixapis.com/blog/v3/draft-posts/{draftPostId}
|
|
217
209
|
body: {
|
|
218
210
|
"draftPost": {
|
|
219
211
|
"media": { "wixMedia": { "image": { "id": "<file-id-from-fileUrl>" } } }
|
|
@@ -223,7 +215,7 @@ Generate images for products, blog posts, and CMS items. Attach via MCP PATCH ca
|
|
|
223
215
|
|
|
224
216
|
5. **Re-publish** each updated post (PATCHing a published post makes it unpublished):
|
|
225
217
|
```
|
|
226
|
-
|
|
218
|
+
REST: POST https://www.wixapis.com/blog/v3/draft-posts/{draftPostId}/publish
|
|
227
219
|
```
|
|
228
220
|
|
|
229
221
|
Re-publish calls parallelize — dispatch as concurrent sibling calls.
|
|
@@ -236,7 +228,7 @@ The `PATCH /wix-data/v2/items/{itemId}` endpoint exists but requires a JsonPatch
|
|
|
236
228
|
|
|
237
229
|
1. Your prompt lists `collections[].itemIds` for each collection with an image field. **Fetch the existing item data** once per collection via `POST /wix-data/v2/items/query` — you cannot skip this step because you need every existing field to merge-preserve.
|
|
238
230
|
```
|
|
239
|
-
|
|
231
|
+
REST: POST https://www.wixapis.com/wix-data/v2/items/query
|
|
240
232
|
body: {
|
|
241
233
|
"dataCollectionId": "<collection>",
|
|
242
234
|
"query": { "filter": { "_id": { "$in": ["<itemId1>", "<itemId2>", ...] } } }
|
|
@@ -250,7 +242,7 @@ The `PATCH /wix-data/v2/items/{itemId}` endpoint exists but requires a JsonPatch
|
|
|
250
242
|
|
|
251
243
|
4. **PUT each item's full record** with the image field merged into the existing `data`:
|
|
252
244
|
```
|
|
253
|
-
|
|
245
|
+
REST: PUT https://www.wixapis.com/wix-data/v2/items/{itemId}
|
|
254
246
|
body: {
|
|
255
247
|
"dataCollectionId": "<collection>",
|
|
256
248
|
"dataItem": {
|
|
@@ -269,15 +261,15 @@ body: { "dataCollectionId": "<c>", "dataItem": { "id": "...", "data": { "image":
|
|
|
269
261
|
```
|
|
270
262
|
Without the read-merge step, an `about-content` item loses its seeded `heading` and `body` when Image Phase 2 attaches the image — the About page then renders only its fallback copy.
|
|
271
263
|
|
|
272
|
-
PUT calls parallelize — dispatch all items across all collections as sibling `
|
|
264
|
+
PUT calls parallelize — dispatch all items across all collections as sibling `curl` tool calls in one concurrent batch.
|
|
273
265
|
|
|
274
|
-
##
|
|
266
|
+
## REST call discovery
|
|
275
267
|
|
|
276
|
-
Your prompt includes a `
|
|
268
|
+
Your prompt includes a `siteId (for token mint):` line. Use it for every Wix REST call. If an endpoint isn't covered by this recipe, fall back to the doc lookup endpoints in `../shared/DOCS_SEARCH.md`.
|
|
277
269
|
|
|
278
270
|
## Return Contract
|
|
279
271
|
|
|
280
|
-
At the end, emit a structured JSON block per `../shared/RETURN_CONTRACT.md`. Do **not** write `.wix/logs/images.md`
|
|
272
|
+
At the end, emit a structured JSON block per `../shared/RETURN_CONTRACT.md`. Do **not** write `.wix/logs/images.md` or any sidecar file; the parent reads your return JSON directly.
|
|
281
273
|
|
|
282
274
|
### `image-phase-1-decorative` return
|
|
283
275
|
|
|
@@ -286,14 +278,19 @@ At the end, emit a structured JSON block per `../shared/RETURN_CONTRACT.md`. Do
|
|
|
286
278
|
"status": "complete" | "partial" | "failed",
|
|
287
279
|
"phase": "image-phase-1-decorative",
|
|
288
280
|
"scope": "image-phase-1-decorative",
|
|
289
|
-
"summary": "Generated N decorative images; uploaded to Wix Media;
|
|
281
|
+
"summary": "Generated N decorative images; uploaded to Wix Media; returned slot→URL map",
|
|
290
282
|
"data": {
|
|
291
283
|
"decorativeCount": 3,
|
|
292
|
-
"purposes": ["hero", "about", "
|
|
284
|
+
"purposes": ["hero", "about", "productsHeader"],
|
|
285
|
+
"slots": {
|
|
286
|
+
"hero": "https://static.wixstatic.com/media/...",
|
|
287
|
+
"about": "https://static.wixstatic.com/media/...",
|
|
288
|
+
"productsHeader": "https://static.wixstatic.com/media/..."
|
|
289
|
+
},
|
|
293
290
|
"model": "google:4@2",
|
|
294
291
|
"totalCredits": 0.297
|
|
295
292
|
},
|
|
296
|
-
"files": [
|
|
293
|
+
"files": [],
|
|
297
294
|
"errors": []
|
|
298
295
|
}
|
|
299
296
|
```
|
|
@@ -340,11 +337,11 @@ The JSON block MUST be the **last** content in your message (see `../shared/RETU
|
|
|
340
337
|
|
|
341
338
|
| WRONG | CORRECT |
|
|
342
339
|
|-------|---------|
|
|
343
|
-
| N sequential 1-task `
|
|
340
|
+
| N sequential 1-task `curl` generation calls across multiple turns | Run `generate-images.mjs` (it parallelizes in-process); or, hand-driving, all generation tool calls in one concurrent batch — parallel siblings for `google:4@2`, or one batched call for other models. See IMAGE_GENERATION.md § "Required (manual fallback): minimize round-trips" |
|
|
344
341
|
| Poll `.wix/logs/<feature>-data.md` sidecars to learn Phase 1 Seed is done | Phase 1 Seed data is inline in your prompt — if missing, return `failed` |
|
|
345
342
|
| `sleep 60` loop to wait for Phase 1 Seed | No waiting, no polling — prompt has the data or the agent fails |
|
|
346
|
-
| Write `.wix/logs/images.md` sidecar |
|
|
347
|
-
| Re-query Phase 1 Seed entity IDs via
|
|
343
|
+
| Write `.wix/logs/images.md` or `.wix/image-urls.md` sidecar | Return structured JSON per `RETURN_CONTRACT.md` instead (decorative URLs go in `data.slots`) |
|
|
344
|
+
| Re-query Phase 1 Seed entity IDs via the REST API | IDs are in your prompt; re-querying wastes a round-trip |
|
|
348
345
|
| Generic prompts ("a product photo") | Use brand context, product name, aesthetic direction |
|
|
349
346
|
| Ignore color palette from prompt | Reference actual hex codes in image prompts |
|
|
350
347
|
| Request text in images | Always include "no text, no watermarks" |
|
|
@@ -352,8 +349,9 @@ The JSON block MUST be the **last** content in your message (see `../shared/RETU
|
|
|
352
349
|
| Use free-form sizes (e.g., `800×600`) | Use allowed dimensions only — `1024×1024`, `1376×768`, `1200×896` |
|
|
353
350
|
| Use blog post `file.url` for cover image | Blog posts need `file.fileUrl` (file ID) for `media.wixMedia.image.id` |
|
|
354
351
|
| Block on image failures | Skip failed images, continue with others |
|
|
352
|
+
| Write any coordination file (`.wix/image-urls.md`, sidecars) | Return slot→URL map in `data.slots`; the orchestrator pipes it to `patch-decorative-slots.mjs` via stdin |
|
|
355
353
|
| PATCH products without `options`/`variantsInfo` | Always query products first for these fields — PATCH returns 428 without them (see § "Products" step 1) |
|
|
356
354
|
| PUT a CMS item with only `{data: {image: "..."}}` | Read-merge-write: query the item, merge image into existing `data`, PUT the full record (see § "CMS Items" step 4). Writing only `image` erases seeded heading/body/etc. |
|
|
357
355
|
| Use `PATCH /wix-data/v2/items/{itemId}` with `{dataItem: {data}}` | PATCH requires JsonPatch `fieldModifications` — use read-merge-PUT instead (see § "CMS Items") |
|
|
358
356
|
| Hit a 428 → immediately search external docs | Re-read § "Products" step 1 first — it covers 428. Only use external docs if your recipe genuinely doesn't cover the error (see § "Self-Loading" step 3) |
|
|
359
|
-
| Default to `
|
|
357
|
+
| Default to `raw-docs REST (see DOCS_SEARCH.md)` for API errors already covered by your recipe | Re-read your own recipe first; fall back to the doc-lookup endpoints in `DOCS_SEARCH.md` only for errors genuinely not covered (see § "Self-Loading" step 3) |
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Seed recipe map
|
|
2
|
+
|
|
3
|
+
Per-vertical recipe lookup for the seed dispatch in `SEED.md`. Recipe paths are **relative to `<wix-manage-root>`**, the absolute path that `wix-manage`'s SKILL.md publishes when Phase 2 Step 4 loads it. The orchestrator joins `<wix-manage-root>` + the relative path at dispatch time. Do not pre-resolve, hardcode, or pre-validate the absolute paths at session start — fail at dispatch time if a recipe has moved.
|
|
4
|
+
|
|
5
|
+
| Pack | Recipes (relative to `<wix-manage-root>`) | Returns |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| stores | `references/stores/setup-online-store-catalog-v3.md` (idempotent catalog setup) + `references/stores/bulk-create-products-with-options.md` (single bulk call for N products) | `productIds[]`, `categoryIds[]` (when `intent.stores.categoriesNamed` is non-empty) |
|
|
8
|
+
| cms | `references/cms/cms-schema-management.md` (collection create) + `references/cms/cms-data-items-crud.md` (item create per collection) + `references/cms/cms-references-and-relationships.md` (only when a collection's `intent.cms.collections[N]` declares cross-references) | `collectionIds{}`, `itemIds{<collection>: []}` |
|
|
9
|
+
| blog | `references/blog/how-to-create-blog-posts.md` | `postIds[]`, `categoryIds[]` |
|
|
10
|
+
| forms | `references/forms/create-form.md` | `formIds[]` |
|
|
11
|
+
| gift-cards | — *(no recipe by design — no seed surface; activation lives in Phase 2 app-install)* | `{status: "skipped"}` |
|
|
12
|
+
| ecom | — *(no recipe by design — cart/checkout vertical; no seed surface)* | `{status: "skipped"}` |
|
|
13
|
+
|
|
14
|
+
The orchestrator dispatches one subagent per pack with a recipe. `gift-cards` and `ecom` get a phase entry of `{phase: "seed-<pack>", status: "skipped"}` recorded directly by the orchestrator without dispatching a subagent.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Per-pack input notes
|
|
19
|
+
|
|
20
|
+
These notes reduce dispatch-time guesswork. The recipe itself is the source of truth for the API shape — these notes are about how to translate `intent.<pack>` + `brand` into the recipe's input.
|
|
21
|
+
|
|
22
|
+
### stores
|
|
23
|
+
|
|
24
|
+
- The bulk recipe wants `products: [{name, slug, sku, price, options?, variants?}]`. Populate `name` and `slug` from `intent.stores.productCount` and `brand` (e.g. for a coffee shop with `productCount: 3`, generate three product names that fit the brand vibe).
|
|
25
|
+
- `sku` defaults to `<slug>-001` when not otherwise constrained.
|
|
26
|
+
- `price` is a positive number; pick brand-appropriate values (don't default to $1).
|
|
27
|
+
- When `intent.stores.categoriesNamed` is non-empty, the subagent creates those categories via the Categories API after the bulk product create and assigns products into them. When the array is empty, skip categories entirely (do not invent a default set).
|
|
28
|
+
- The recipe documents a 5-product cap on the bulk endpoint. If `intent.stores.productCount` exceeds it, fan out into batches of 5.
|
|
29
|
+
- Text-only seeding: do not generate or attach product images. The `media` field follows the recipe's documented placeholder pattern.
|
|
30
|
+
|
|
31
|
+
### cms
|
|
32
|
+
|
|
33
|
+
- The schema recipe wants one `POST /wix-data/v2/collections` call per collection in `intent.cms.collections`. Field shape comes from `collection.purpose` — e.g. `purpose: "about"` → a single-row text collection with `title` + `body`; `purpose: "faq"` → repeated `question` + `answer` rows.
|
|
34
|
+
- After all collections exist, the items recipe (`cms-data-items-crud.md`) inserts `intent.cms.collections[N].itemCount` rows per collection, with content generated from `brand`.
|
|
35
|
+
- `cms-references-and-relationships.md` is consulted **only** when a collection's intent block declares cross-references (e.g. `references: ["products"]`). Otherwise skip it.
|
|
36
|
+
- Return shape: `collectionIds: { <purpose>: <id> }` and `itemIds: { <purpose>: [<id>, ...] }`. Keying by `purpose` (not by collection display name) lets Phase 4 wire pages without re-deriving slug ↔ id.
|
|
37
|
+
|
|
38
|
+
### blog
|
|
39
|
+
|
|
40
|
+
- The recipe's Part 0 (member ID lookup) is mandatory — third-party app installs require `draftPost.memberId`. The subagent issues one `GET /members/v1/members?paging.limit=1` and uses the returned id for every post.
|
|
41
|
+
- `intent.blog.postCount` posts are created. Topics come from `intent.blog.topics` when present; otherwise the subagent picks brand-appropriate topics from `brand.description`.
|
|
42
|
+
- Text-only seeding: cover images use the recipe's documented placeholder pattern; do not call Media Manager import.
|
|
43
|
+
- `categoryIds[]` returned only when the recipe creates categories during seeding (the recipe handles category-on-create automatically when the post payload references one).
|
|
44
|
+
|
|
45
|
+
### forms
|
|
46
|
+
|
|
47
|
+
- One `POST /form-schema-service/v4/forms` call per entry in `intent.forms.forms`. The subagent maps `intent.forms.forms[N].fields` (a string array like `["name", "email", "message"]`) into the recipe's `formFields` payload using the recipe's documented field templates (`CONTACTS_FIRST_NAME`, `CONTACTS_EMAIL`, etc.).
|
|
48
|
+
- `purpose` ("contact", "lead", "signup") drives the form's `name` field — e.g. `"contact"` → `"Contact Form"`.
|
|
49
|
+
- Wix Forms app is usually pre-installed via Phase 2 — the recipe notes this and the seeder does not need to install it again.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# AGENTS.md — the end-of-run site doc
|
|
2
|
+
|
|
3
|
+
The orchestrator writes one file at the end of a successful run: a project-root `AGENTS.md` describing **what the site has**. It is the one end-of-run artifact — *content about the site*, not telemetry. A fresh session (or a coding agent) opening the project reads it to learn what's there.
|
|
4
|
+
|
|
5
|
+
## Author, location, timing
|
|
6
|
+
|
|
7
|
+
- **Author:** the orchestrator, in the final turn. Composed **from session scratch** (brand, frontend, verticals, the page/route list it built) **+ `.wix/seeded.json`** (entity counts). **Re-read nothing** to compose it.
|
|
8
|
+
- **Location:** project-root `AGENTS.md` — the conventional path agents auto-read. Root, not `.wix/`. It sits outside the astro/Vite bundler root, so it never ships to `dist/`.
|
|
9
|
+
- **Timing:** the **last tool call of the final message**. Summary prose (the live URL) first; `Write AGENTS.md` last — same ordering discipline `BUILD.md` § "Final Message" defines.
|
|
10
|
+
|
|
11
|
+
## Content — fill this template, slotted values only
|
|
12
|
+
|
|
13
|
+
Deterministic projection of scratch + seeded counts → same inputs produce a byte-identical file. Emit exactly these sections; no free prose beyond the slots.
|
|
14
|
+
|
|
15
|
+
```markdown
|
|
16
|
+
# <brand>
|
|
17
|
+
|
|
18
|
+
A Wix headless site built with the `wix-headless` skill. <one-line brand description>.
|
|
19
|
+
|
|
20
|
+
## Live site
|
|
21
|
+
- **Site:** <published URL>
|
|
22
|
+
- **Dashboard:** https://manage.wix.com/dashboard/<siteId>
|
|
23
|
+
|
|
24
|
+
## Frontend
|
|
25
|
+
<astro (Wix-hosted) | custom>. Run: `<wix dev | npm run dev>`. Build + publish: `<wix release | npm run build then wix release>`.
|
|
26
|
+
|
|
27
|
+
## Features
|
|
28
|
+
- <one bullet per loaded, non-disabled vertical, in plain language>
|
|
29
|
+
Stores → a product catalog · CMS → content collections (About, FAQ, …) · Blog → posts · Forms → a contact form · Gift cards → activate from the dashboard
|
|
30
|
+
|
|
31
|
+
## Pages
|
|
32
|
+
<one line per route that exists: `/`, `/products`, `/products/[slug]`, `/cart`, …>
|
|
33
|
+
|
|
34
|
+
## Seeded content
|
|
35
|
+
<counts only: "3 products across 2 categories · 6 blog posts · About + FAQ collections.">
|
|
36
|
+
|
|
37
|
+
## Extending
|
|
38
|
+
Built with the `wix-headless` skill; re-run it to add features or restyle.
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Excluded — never in AGENTS.md
|
|
42
|
+
|
|
43
|
+
No per-phase timings, statuses, `started`/`ended`/`seconds`, `x-wix-request-id`s, error codes, subagent handles, recoveries, or rate-limit notes. If a field would only matter to someone debugging the *run*, it does not belong here. (Entity IDs stay in `.wix/seeded.json`, not here — counts only.)
|
|
44
|
+
|
|
45
|
+
## Not a state file
|
|
46
|
+
|
|
47
|
+
`AGENTS.md` is reading material. Project **detection** ("is this a wix-headless project / which frontend") keys off `wix.config.json` + the `@wix/astro` dep in `package.json` — never `AGENTS.md` presence.
|