@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.
Files changed (195) hide show
  1. package/README.md +5 -9
  2. package/package.json +1 -1
  3. package/skills/wix-app/SKILL.md +51 -42
  4. package/skills/wix-app/references/BACKEND_EVENT.md +10 -65
  5. package/skills/wix-app/references/CUSTOM_ELEMENT_WIDGET.md +101 -406
  6. package/skills/wix-app/references/DASHBOARD_MENU_PLUGIN.md +14 -111
  7. package/skills/wix-app/references/DASHBOARD_MODAL.md +56 -205
  8. package/skills/wix-app/references/DASHBOARD_PAGE.md +19 -98
  9. package/skills/wix-app/references/DASHBOARD_PLUGIN.md +6 -108
  10. package/skills/wix-app/references/DATA_COLLECTION.md +113 -198
  11. package/skills/wix-app/references/EMBEDDED_SCRIPT.md +41 -268
  12. package/skills/wix-app/references/EXTENSION_REGISTRATION.md +27 -76
  13. package/skills/wix-app/references/SERVICE_PLUGIN.md +35 -188
  14. package/skills/wix-app/references/SITE_PLUGIN.md +8 -92
  15. package/skills/wix-app/references/STORES_VERSIONING.md +1 -0
  16. package/skills/wix-app/references/backend-event/COMMON-EVENTS.md +0 -44
  17. package/skills/wix-app/references/custom-element-widget/SETTINGS_PANEL.md +19 -330
  18. package/skills/wix-app/references/dashboard-menu-plugin/bookings-slots.md +0 -12
  19. package/skills/wix-app/references/dashboard-menu-plugin/ecommerce-slots.md +7 -0
  20. package/skills/wix-app/references/dashboard-menu-plugin/restaurants-slots.md +0 -12
  21. package/skills/wix-app/references/dashboard-plugin/SLOTS.md +3 -15
  22. package/skills/wix-app/references/service-plugin/ADDITIONAL-FEES.md +2 -18
  23. package/skills/wix-app/references/service-plugin/BOOKINGS-STAFF-SORTING.md +2 -42
  24. package/skills/wix-app/references/service-plugin/DISCOUNT-TRIGGERS.md +1 -11
  25. package/skills/wix-app/references/service-plugin/GIFT-CARDS.md +1 -11
  26. package/skills/wix-app/references/service-plugin/PAYMENT-SETTINGS.md +2 -40
  27. package/skills/wix-app/references/service-plugin/SHIPPING-RATES.md +2 -19
  28. package/skills/wix-app/references/service-plugin/VALIDATIONS.md +2 -18
  29. package/skills/wix-app/references/site-plugin/SLOTS.md +17 -68
  30. package/skills/wix-design-system/SKILL.md +4 -0
  31. package/skills/wix-headless/SKILL.md +131 -386
  32. package/skills/wix-headless/references/BUILD-astro.md +246 -0
  33. package/skills/wix-headless/references/BUILD-own-build.md +167 -0
  34. package/skills/wix-headless/references/BUILD.md +105 -0
  35. package/skills/wix-headless/references/DESIGN_SYSTEM.md +175 -0
  36. package/skills/wix-headless/references/DISCOVERY-connect.md +55 -0
  37. package/skills/wix-headless/references/DISCOVERY-create.md +238 -0
  38. package/skills/wix-headless/references/DISCOVERY.md +50 -306
  39. package/skills/wix-headless/references/PLAN-connect.md +19 -0
  40. package/skills/wix-headless/references/PLAN-create.md +17 -0
  41. package/skills/wix-headless/references/PLAN.md +92 -0
  42. package/skills/wix-headless/references/SEED.md +214 -0
  43. package/skills/wix-headless/references/SETUP.md +73 -248
  44. package/skills/wix-headless/references/{blog → astro/blog}/BLOG_PAGES.md +6 -5
  45. package/skills/wix-headless/references/{blog → astro/blog}/BLOG_SETUP.md +2 -2
  46. package/skills/wix-headless/references/astro/bookings/COMPONENTS.md +337 -0
  47. package/skills/wix-headless/references/astro/bookings/SERVICES_PAGES.md +428 -0
  48. package/skills/wix-headless/references/astro/cms/CMS_FOUNDATIONS.md +214 -0
  49. package/skills/wix-headless/references/{cms → astro/cms}/FAQ_KNOWLEDGE_BASE.md +14 -12
  50. package/skills/wix-headless/references/{cms → astro/cms}/PORTFOLIO.md +15 -16
  51. package/skills/wix-headless/references/{cms → astro/cms}/RESOURCE_LIBRARY.md +13 -15
  52. package/skills/wix-headless/references/{cms → astro/cms}/TEAM_DIRECTORY.md +11 -11
  53. package/skills/wix-headless/references/astro/designer/INSTRUCTIONS.md +354 -0
  54. package/skills/wix-headless/references/{ecom → astro/ecom}/CART_PAGES.md +8 -9
  55. package/skills/wix-headless/references/{ecom → astro/ecom}/CART_WIRING.md +6 -6
  56. package/skills/wix-headless/references/{ecom → astro/ecom}/COMPONENTS_CSS.md +6 -6
  57. package/skills/wix-headless/references/{forms → astro/forms}/CONTACT_FORM.md +18 -32
  58. package/skills/wix-headless/references/{gift-cards → astro/gift-cards}/COMPONENTS.md +3 -3
  59. package/skills/wix-headless/references/{gift-cards → astro/gift-cards}/PAGES.md +2 -2
  60. package/skills/wix-headless/references/{stores → astro/stores}/BACK_IN_STOCK.md +7 -7
  61. package/skills/wix-headless/references/{stores → astro/stores}/CATEGORY_PAGES.md +12 -13
  62. package/skills/wix-headless/references/{stores → astro/stores}/COMPONENTS_CSS.md +7 -7
  63. package/skills/wix-headless/references/{stores → astro/stores}/HOME_AND_NAV.md +11 -9
  64. package/skills/wix-headless/references/{stores → astro/stores}/PRODUCT_PAGES.md +11 -9
  65. package/skills/wix-headless/references/{stores → astro/stores}/SHARED_WIRING.md +8 -7
  66. package/skills/wix-headless/references/astro/templates/Footer.astro +27 -0
  67. package/skills/wix-headless/references/astro/templates/Layout.astro +132 -0
  68. package/skills/wix-headless/references/astro/templates/Navigation.astro +38 -0
  69. package/skills/wix-headless/references/astro/templates/astro.config.mjs +41 -0
  70. package/skills/wix-headless/references/astro/templates/bookings/AvailabilityCalendar.tsx +218 -0
  71. package/skills/wix-headless/references/astro/templates/bookings/BookingForm.tsx +194 -0
  72. package/skills/wix-headless/references/astro/templates/bookings/ManageBooking.tsx +84 -0
  73. package/skills/wix-headless/references/astro/templates/bookings/SeoTags.astro +25 -0
  74. package/skills/wix-headless/references/astro/templates/bookings/ServiceBookingFlow.tsx +50 -0
  75. package/skills/wix-headless/references/astro/templates/bookings/ServiceCard.astro +45 -0
  76. package/skills/wix-headless/references/astro/templates/bookings/api/confirm-booking.ts +34 -0
  77. package/skills/wix-headless/references/astro/templates/bookings/api/waitlist.ts +74 -0
  78. package/skills/wix-headless/references/astro/templates/bookings/booking-confirmation.astro +111 -0
  79. package/skills/wix-headless/references/astro/templates/bookings/components-bookings.css +413 -0
  80. package/skills/wix-headless/references/astro/templates/bookings/manage-booking.astro +76 -0
  81. package/skills/wix-headless/references/astro/templates/bookings/services/[slug].astro +81 -0
  82. package/skills/wix-headless/references/astro/templates/bookings/services/index.astro +65 -0
  83. package/skills/wix-headless/references/astro/templates/ecom/components-ecom.css +302 -0
  84. package/skills/wix-headless/references/astro/templates/global.css +286 -0
  85. package/skills/wix-headless/references/astro/templates/index.astro +56 -0
  86. package/skills/wix-headless/{templates → references/astro/templates}/stores/back-in-stock.ts +1 -1
  87. package/skills/wix-headless/{templates → references/astro/templates}/stores/components-stores.css +138 -33
  88. package/skills/wix-headless/references/blog/BLOG_CONTENT.md +28 -19
  89. package/skills/wix-headless/references/blog/INSTRUCTIONS.md +6 -6
  90. package/skills/wix-headless/references/bookings/INSTRUCTIONS.md +106 -0
  91. package/skills/wix-headless/references/bookings/SERVICES_DATA.md +295 -0
  92. package/skills/wix-headless/references/cms/CMS_FOUNDATIONS.md +35 -232
  93. package/skills/wix-headless/references/cms/INSTRUCTIONS.md +39 -8
  94. package/skills/wix-headless/references/commands/known-apps.json +2 -1
  95. package/skills/wix-headless/references/custom/CONNECTION_PLAN.md +142 -0
  96. package/skills/wix-headless/references/custom/INSTRUCTIONS.md +88 -0
  97. package/skills/wix-headless/references/custom/blog/WIRING.md +52 -0
  98. package/skills/wix-headless/references/custom/bookings/WIRING.md +88 -0
  99. package/skills/wix-headless/references/custom/cms/WIRING.md +97 -0
  100. package/skills/wix-headless/references/custom/ecom/WIRING.md +67 -0
  101. package/skills/wix-headless/references/custom/forms/WIRING.md +101 -0
  102. package/skills/wix-headless/references/custom/stores/WIRING.md +80 -0
  103. package/skills/wix-headless/references/ecom/INSTRUCTIONS.md +12 -12
  104. package/skills/wix-headless/references/forms/INSTRUCTIONS.md +6 -6
  105. package/skills/wix-headless/references/gift-cards/INSTRUCTIONS.md +13 -13
  106. package/skills/wix-headless/references/images/INSTRUCTIONS.md +58 -60
  107. package/skills/wix-headless/references/seed-recipes.md +49 -0
  108. package/skills/wix-headless/references/shared/AGENTS_MD.md +47 -0
  109. package/skills/wix-headless/references/shared/AUTHENTICATION.md +108 -0
  110. package/skills/wix-headless/references/shared/BUILD_NOISE.md +2 -2
  111. package/skills/wix-headless/references/shared/DESIGN_MD.md +85 -0
  112. package/skills/wix-headless/references/shared/DOCS_SEARCH.md +41 -0
  113. package/skills/wix-headless/references/shared/IMAGE_GENERATION.md +40 -39
  114. package/skills/wix-headless/references/shared/IMPLEMENTER.md +92 -41
  115. package/skills/wix-headless/references/shared/PRODUCTION_SHARP_EDGES.md +3 -3
  116. package/skills/wix-headless/references/shared/RETURN_CONTRACT.md +32 -312
  117. package/skills/wix-headless/references/shared/STYLING.md +48 -21
  118. package/skills/wix-headless/references/stores/INSTRUCTIONS.md +59 -29
  119. package/skills/wix-headless/references/stores/PRODUCT_CATALOG_DATA.md +31 -28
  120. package/skills/wix-headless/references/verticals/_schema.json +31 -117
  121. package/skills/wix-headless/references/verticals/_schema.md +60 -150
  122. package/skills/wix-headless/references/verticals/blog.md +5 -99
  123. package/skills/wix-headless/references/verticals/bookings.md +41 -0
  124. package/skills/wix-headless/references/verticals/cms.md +9 -100
  125. package/skills/wix-headless/references/verticals/ecom.md +6 -77
  126. package/skills/wix-headless/references/verticals/forms.md +5 -85
  127. package/skills/wix-headless/references/verticals/gift-cards.md +6 -103
  128. package/skills/wix-headless/references/verticals/stores.md +10 -144
  129. package/skills/wix-headless/scripts/check-manifest.mjs +148 -11
  130. package/skills/wix-headless/scripts/compose.mjs +540 -0
  131. package/skills/wix-headless/scripts/emit-design-tokens.mjs +136 -53
  132. package/skills/wix-headless/scripts/flatten.sh +61 -0
  133. package/skills/wix-headless/scripts/generate-images.mjs +242 -0
  134. package/skills/wix-headless/scripts/patch-decorative-slots.mjs +67 -43
  135. package/skills/wix-headless/scripts/plan-entity-image-waves.mjs +3 -3
  136. package/skills/wix-headless/scripts/scaffold.sh +113 -27
  137. package/skills/wix-headless/scripts/seed-utilities.sh +50 -12
  138. package/skills/wix-headless/scripts/write-decorative-json.mjs +62 -0
  139. package/skills/wix-manage/SKILL.md +4 -8
  140. package/skills/wix-manage/references/blog/how-to-create-blog-posts.md +2 -0
  141. package/skills/wix-manage/references/cms/cms-data-items-crud.md +4 -0
  142. package/skills/wix-manage/references/cms/cms-references-and-relationships.md +2 -0
  143. package/skills/wix-manage/references/cms/cms-schema-management.md +4 -0
  144. package/skills/wix-manage/references/domains/domain-search-and-purchase.md +10 -7
  145. package/skills/wix-manage/references/ecommerce/api-shipping.md +443 -0
  146. package/skills/wix-manage/references/ecommerce/flow-add-free-shipping.md +5 -6
  147. package/skills/wix-manage/references/ecommerce/flow-fix-coverage-gaps.md +4 -5
  148. package/skills/wix-manage/references/ecommerce/flow-optimize-shipping-rates.md +4 -5
  149. package/skills/wix-manage/references/ecommerce/goal-increase-aov.md +1 -1
  150. package/skills/wix-manage/references/ecommerce/goal-reduce-cart-abandonment.md +1 -2
  151. package/skills/wix-manage/references/ecommerce/guardrail-shipping-health.md +2 -2
  152. package/skills/wix-manage/references/ecommerce/recipe-apply-shipping-recommendations.md +4 -5
  153. package/skills/wix-manage/references/ecommerce/recommend-ecommerce-strategy.md +7 -7
  154. package/skills/wix-manage/references/ecommerce/setup-discount-rules.md +209 -72
  155. package/skills/wix-manage/references/ecommerce/setup-store-pickup-location.md +9 -10
  156. package/skills/wix-manage/references/ecommerce/skill-graph.md +4 -4
  157. package/skills/wix-manage/references/forms/create-form.md +50 -0
  158. package/skills/wix-manage/references/stores/bulk-create-products-with-options.md +2 -0
  159. package/skills/wix-manage/references/stores/create-product-from-image.md +91 -38
  160. package/skills/wix-manage/references/stores/setup-online-store-catalog-v3.md +2 -0
  161. package/skills/wix-app/references/custom-element-widget/default-thumbnail.png +0 -0
  162. package/skills/wix-app/references/data-collection/extension-template.ts +0 -107
  163. package/skills/wix-headless/references/ORCHESTRATION.md +0 -269
  164. package/skills/wix-headless/references/commands/install-app.md +0 -42
  165. package/skills/wix-headless/references/commands/mcp-bootstrap.md +0 -28
  166. package/skills/wix-headless/references/designer/INSTRUCTIONS.md +0 -828
  167. package/skills/wix-headless/references/shared/MCP_PREFIX.md +0 -105
  168. package/skills/wix-headless/scripts/copy-utility-templates.mjs +0 -153
  169. package/skills/wix-headless/scripts/finalize-run-json.mjs +0 -141
  170. package/skills/wix-headless/scripts/init-site-json.mjs +0 -63
  171. package/skills/wix-headless/scripts/preview.sh +0 -45
  172. package/skills/wix-headless/scripts/release.sh +0 -73
  173. package/skills/wix-headless/templates/ecom/components-ecom.css +0 -215
  174. package/skills/wix-manage/references/events/list-events.md +0 -203
  175. /package/skills/wix-headless/{templates → references/astro/templates}/ecom/CartBadge.tsx +0 -0
  176. /package/skills/wix-headless/{templates → references/astro/templates}/ecom/CartView.tsx +0 -0
  177. /package/skills/wix-headless/{templates → references/astro/templates}/ecom/cart.astro +0 -0
  178. /package/skills/wix-headless/{templates → references/astro/templates}/ecom/discounts.ts +0 -0
  179. /package/skills/wix-headless/{templates → references/astro/templates}/ecom/thank-you.astro +0 -0
  180. /package/skills/wix-headless/{templates → references/astro/templates}/gift-cards/GiftCardPurchase.tsx +0 -0
  181. /package/skills/wix-headless/{templates → references/astro/templates}/gift-cards/_home-teaser-snippet.astro +0 -0
  182. /package/skills/wix-headless/{templates → references/astro/templates}/gift-cards/_nav-snippet.astro +0 -0
  183. /package/skills/wix-headless/{templates → references/astro/templates}/gift-cards/components-gift-cards.css +0 -0
  184. /package/skills/wix-headless/{templates → references/astro/templates}/gift-cards/gift-cards.astro +0 -0
  185. /package/skills/wix-headless/{templates → references/astro/templates}/gift-cards/gift-cards.ts +0 -0
  186. /package/skills/wix-headless/{templates → references/astro/templates}/stores/AddToCartButton.tsx +0 -0
  187. /package/skills/wix-headless/{templates → references/astro/templates}/stores/BackInStockForm.tsx +0 -0
  188. /package/skills/wix-headless/{templates → references/astro/templates}/stores/CategoryRail.astro +0 -0
  189. /package/skills/wix-headless/{templates → references/astro/templates}/stores/ProductCard.astro +0 -0
  190. /package/skills/wix-headless/{templates → references/astro/templates}/stores/ProductPurchase.tsx +0 -0
  191. /package/skills/wix-headless/{templates → references/astro/templates}/stores/SeoTags.astro +0 -0
  192. /package/skills/wix-headless/{templates → references/astro/templates}/stores/categories.ts +0 -0
  193. /package/skills/wix-headless/{templates → references/astro/templates}/stores/category/[slug].astro +0 -0
  194. /package/skills/wix-headless/{templates → references/astro/templates}/stores/products/[slug].astro +0 -0
  195. /package/skills/wix-headless/{templates → references/astro/templates}/stores/products/index.astro +0 -0
@@ -5,65 +5,95 @@ description: "Implements Wix Stores vertical — product catalog, categories, ad
5
5
 
6
6
  # Stores Implementer
7
7
 
8
- Extends `references/shared/IMPLEMENTER.md`. Read that file first for phase routing, MCP prefix, site.json read pattern, return contract, style conventions, and common failure modes.
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 (MCP catalog setup — products only; categories are merchant-driven, not seeded) | `./PRODUCT_CATALOG_DATA.md` |
15
- | `components` | Components (React islands + SeoTags + back-in-stock util — TSX/Astro only, **no CSS**) | `./SHARED_WIRING.md` |
16
- | `components-css` | Components (scoped CSS — `components-stores.css` only; runs concurrently with `components`) | `./COMPONENTS_CSS.md` |
17
- | `pages-categories` | Pages (`/category/[slug]` listing + shared CategoryRail + `utils/categories.ts`) | `./CATEGORY_PAGES.md` |
18
- | `pages-products` | Pages (products listing + detail + ProductCard; mounts the rail written by `pages-categories`) | `./PRODUCT_PAGES.md` |
19
- | `pages-home-and-nav` | Pages (home-page contribution + Shop submenu in Navigation) | `./HOME_AND_NAV.md` |
14
+ | `seed` | Seed (REST catalog setup — products only; categories are merchant-driven, not seeded) | `./PRODUCT_CATALOG_DATA.md` |
15
+ | `components` | Components (React islands + SeoTags + back-in-stock util — TSX/Astro only, **no CSS**) | `../astro/stores/SHARED_WIRING.md` |
16
+ | ~~`components-css`~~ | **Do not dispatch.** `src/styles/components-stores.css` is copied from `<SKILL_ROOT>/references/astro/templates/stores/components-stores.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. | — |
17
+ | `pages-categories` | Pages (`/category/[slug]` listing + shared CategoryRail + `utils/categories.ts`) | `../astro/stores/CATEGORY_PAGES.md` |
18
+ | `pages-products` | Pages (products listing + detail + ProductCard; mounts the rail written by `pages-categories`) | `../astro/stores/PRODUCT_PAGES.md` |
19
+ | `pages-home-and-nav` | Pages (home-page contribution + Shop submenu in Navigation) | `../astro/stores/HOME_AND_NAV.md` |
20
20
 
21
- > **Why `components` is split.** A single agent writing five .tsx/.astro files plus the scoped CSS dominated Phase 3 wall time (228 s on a 3-product run, 320 s on an 8-product run). The CSS file has no runtime coupling to the TSX components — it's referenced only by class name at build time — so it splits cleanly into a sibling agent that runs in the same dispatch batch. Each scope gets a smaller reading set and a smaller write list. See `./COMPONENTS_CSS.md` § "What this scope owns".
21
+ > **Why `components` is TSX/Astro-only.** The scoped CSS (`src/styles/components-stores.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 § "CSS ownership" below) rather than being written by an agent. The `components` agent gets a smaller reading set and a smaller write list. See `../astro/stores/COMPONENTS_CSS.md` § "What this scope owns".
22
22
 
23
23
  ## Files this vertical creates / contributes
24
24
 
25
- See `<SKILL_ROOT>/references/verticals/stores.md` frontmatter (`creates:` and `contributes:` blocks).
25
+ See the § "Templates" list below for the canonical files each scope reads and adapts.
26
+
27
+ ## Seed return
28
+
29
+ The `seed` scope emits this `data` shape in its return JSON (envelope rules in `../shared/RETURN_CONTRACT.md`). Phase 4 page agents consume `data.products[*].slug` and `data.products[*].variantId` to wire live SDK queries.
30
+
31
+ ```json
32
+ {
33
+ "status": "complete",
34
+ "phase": "stores-seed",
35
+ "scope": "seed",
36
+ "summary": "Deleted 12 default products; created 3 on-brand products with variants",
37
+ "data": {
38
+ "products": [
39
+ {
40
+ "id": "2d1bce83-...",
41
+ "name": "Tero Dining Table",
42
+ "slug": "tero-dining-table",
43
+ "variantId": "ffc1caa2-...",
44
+ "price": 2890,
45
+ "inventory": 12,
46
+ "sku": "TAB-TERO-OAK"
47
+ }
48
+ ],
49
+ "deletedCount": 12,
50
+ "createdCount": 3
51
+ },
52
+ "files": [],
53
+ "errors": []
54
+ }
55
+ ```
26
56
 
27
57
  ## Pre-return file-existence assertion (all page scopes)
28
58
 
29
- Before returning `status: "complete"` from any `pages-*` scope, verify every file listed in your scope's `files:` block (see verticals/stores.md) exists on disk. Silently dropping a file (e.g. `[slug].astro` from `pages-products`) reports `complete` to the orchestrator, but every product link 404s at runtime.
59
+ Before returning `status: "complete"` from any `pages-*` scope, verify every file your scope produces (per the § "Templates" list below) exists on disk. Silently dropping a file (e.g. `[slug].astro` from `pages-products`) reports `complete` to the orchestrator, but every product link 404s at runtime.
30
60
 
31
61
  If a declared file is missing, return `status: "partial"` with `errors: [{ code: "PHASE4_FILE_MISSING", path: "<expected path>" }]` rather than claiming success. The orchestrator's Step 8.0.5 manifest check will also catch this, but an agent-side assertion gives a faster and more precise failure.
32
62
 
33
63
  ## Templates
34
64
 
35
- Canonical templates live at `<SKILL_ROOT>/templates/stores/`. Your `components` and `pages-*` scopes read these and adapt them — don't invent markup or logic.
65
+ Canonical templates live at `<SKILL_ROOT>/references/astro/templates/stores/`. Your `components` and `pages-*` scopes read these and adapt them — don't invent markup or logic.
36
66
 
37
67
  Components (`components` scope — TSX/Astro only):
38
- - `<SKILL_ROOT>/templates/stores/AddToCartButton.tsx`
39
- - `<SKILL_ROOT>/templates/stores/ProductPurchase.tsx`
40
- - `<SKILL_ROOT>/templates/stores/BackInStockForm.tsx`
41
- - `<SKILL_ROOT>/templates/stores/SeoTags.astro`
68
+ - `<SKILL_ROOT>/references/astro/templates/stores/AddToCartButton.tsx`
69
+ - `<SKILL_ROOT>/references/astro/templates/stores/ProductPurchase.tsx`
70
+ - `<SKILL_ROOT>/references/astro/templates/stores/BackInStockForm.tsx`
71
+ - `<SKILL_ROOT>/references/astro/templates/stores/SeoTags.astro`
42
72
 
43
- Components CSS (`components-css` scope — scoped CSS only):
44
- - `<SKILL_ROOT>/templates/stores/components-stores.css`
73
+ Components CSS (pre-copied by the orchestrator — no agent writes it):
74
+ - `<SKILL_ROOT>/references/astro/templates/stores/components-stores.css`
45
75
 
46
76
  Pages (`pages-products` scope):
47
- - `<SKILL_ROOT>/templates/stores/ProductCard.astro`
48
- - `<SKILL_ROOT>/templates/stores/products/index.astro`
49
- - `<SKILL_ROOT>/templates/stores/products/[slug].astro`
77
+ - `<SKILL_ROOT>/references/astro/templates/stores/ProductCard.astro`
78
+ - `<SKILL_ROOT>/references/astro/templates/stores/products/index.astro`
79
+ - `<SKILL_ROOT>/references/astro/templates/stores/products/[slug].astro`
50
80
 
51
81
  Pages (`pages-categories` scope):
52
- - `<SKILL_ROOT>/templates/stores/CategoryRail.astro`
53
- - `<SKILL_ROOT>/templates/stores/category/[slug].astro`
82
+ - `<SKILL_ROOT>/references/astro/templates/stores/CategoryRail.astro`
83
+ - `<SKILL_ROOT>/references/astro/templates/stores/category/[slug].astro`
54
84
 
55
85
  ### Pre-copied by the orchestrator (do NOT write these yourself)
56
86
 
57
87
  The following utility files are deterministically copied by the orchestrator BEFORE your phase dispatches (`components` for the first, `pages` for the second). They are mechanical SDK wrappers with no brand-specific content; reading or rewriting them as part of your scope wastes tokens and risks drift. Just import the helpers at the listed paths:
58
88
 
59
- - `src/utils/back-in-stock.ts` — pre-copied from `<SKILL_ROOT>/templates/stores/back-in-stock.ts` before `components` dispatches.
60
- - `src/utils/categories.ts` — pre-copied from `<SKILL_ROOT>/templates/stores/categories.ts` before `pages` dispatches.
89
+ - `src/utils/back-in-stock.ts` — pre-copied from `<SKILL_ROOT>/references/astro/templates/stores/back-in-stock.ts` before `components` dispatches.
90
+ - `src/utils/categories.ts` — pre-copied from `<SKILL_ROOT>/references/astro/templates/stores/categories.ts` before `pages` dispatches.
61
91
 
62
92
  If you find one of these missing at runtime, that's an orchestrator-side bug — return `status: "partial"` with `errors: [{code: "UTILITY_TEMPLATE_NOT_PRECOPIED", path: "<missing>"}]` and continue. Do NOT write your own version; the post-phase manifest check will recover by template-copy and the right helper lands on disk.
63
93
 
64
94
  ## CSS ownership — stores pack
65
95
 
66
- Stores-specific component CSS lives in `src/styles/components-stores.css` (written by the `components-css` scope — see `./COMPONENTS_CSS.md`), NOT in the designer's `global.css`. The classes the pack owns:
96
+ Stores-specific component CSS lives in `src/styles/components-stores.css` (pre-copied from the template by the orchestrator before Step 4.5 — see the `components` scope-routing note above and `../astro/stores/COMPONENTS_CSS.md`), NOT in the designer's `global.css`. The classes the pack owns:
67
97
 
68
98
  - `.product-card`, `.product-card-media`, `.product-card-ribbon`, `.product-card-index` — the product card itself, including the `overflow: hidden` + `border-radius` clipping context. Whoever writes the `border-radius` here also writes any inner padding required to keep child content inside the rounded edges. Without inner padding, a price `<p>` sits flush against the rounded bottom corner and descenders get clipped. Add `padding-bottom: var(--spacing-md)` on the card plus horizontal padding on each text block when you set the radius. See `references/shared/STYLING.md` § "Component-specific CSS is owned by the component, not the designer".
69
99
  - `.product-grid` — the layout that lists product cards. Both `/products` (pages-products scope) and `/category/[slug]` (pages-categories scope) consume it from one place. Include `display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: var(--spacing-xl);` plus the View-Transitions opacity fade for in-flight navigations.
@@ -73,10 +103,10 @@ The designer's `global.css` declares only tokens, the `.btn` family, decorative
73
103
 
74
104
  ## Back-in-stock subscribe — components + pages wiring split
75
105
 
76
- Back-in-stock is a dashboard-toggleable feature: it ships in every stores build but only lights up when the merchant clicks "Start Collecting Requests" in the Back in Stock dashboard. The implementation is split across the two scopes the same way every other stores feature is:
106
+ Back-in-stock is a dashboard-toggleable feature: it ships in every stores build but only lights up when the merchant clicks "Start Collecting Requests" in the Back in Stock dashboard. The implementation is split across the `components` and `pages-products` scopes the same way every other stores feature is, with its CSS riding along in the pre-copied stylesheet:
77
107
 
78
- - **`components` scope** writes the SSR probe (`src/utils/back-in-stock.ts`) and the React form island (`src/components/BackInStockForm.tsx`). See `./BACK_IN_STOCK.md` for the full rules — especially the two app ids (use `1380b703-…` for back-in-stock, NOT the Stores install id `215238eb-…`) and the bare-fields rule (no `itemUrl`, no `image` on the SDK call).
79
- - **`components-css` scope** appends the back-in-stock form rules to `src/styles/components-stores.css` as part of writing that file. See `./BACK_IN_STOCK.md` § 3 for the CSS append.
108
+ - **`components` scope** writes the SSR probe (`src/utils/back-in-stock.ts`) and the React form island (`src/components/BackInStockForm.tsx`). See `../astro/stores/BACK_IN_STOCK.md` for the full rules — especially the two app ids (use `1380b703-…` for back-in-stock, NOT the Stores install id `215238eb-…`) and the bare-fields rule (no `itemUrl`, no `image` on the SDK call).
109
+ - **Back-in-stock form CSS** ships in the pre-copied `src/styles/components-stores.css` template — no agent writes it. See `../astro/stores/BACK_IN_STOCK.md` § 3 for the rules it carries.
80
110
  - **`pages-products` scope** imports `getBackInStockEnabled` in `[slug].astro`, awaits the probe, and passes `backInStockEnabled` + `priceAmount` to `<ProductPurchase>`. ProductPurchase renders the form in its three OOS branches when the prop is true.
81
111
 
82
112
  If the merchant hasn't enabled "Start Collecting Requests", the probe returns `false`, the prop stays `false`, and the form never mounts — no rebuild needed when the merchant flips the toggle in the dashboard.
@@ -93,4 +123,4 @@ If the merchant hasn't enabled "Start Collecting Requests", the probe returns `f
93
123
  | Use the back-in-stock app id `1380b703-…` when adding items to a category | Use the **Stores install id** `215238eb-22a5-4c36-9e7b-e7c08025e04e` for `appId` on `bulkAddItemsToCategory` items — it's the same id Wix Stores writes to its products |
94
124
  | Call `categories.queryCategories(...).limit(N).find()` with no filter | The SDK builder rejects empty filter expressions with `INVALID_FILTER`. Always chain at least `.eq("visible", true)` before `.find()` |
95
125
  | Call `categories.listCategoriesForItems(items, ...)` from the SDK | The SDK function ships items via GET querystring and breaks on arrays. Use `POST /categories/v1/categories/list-categories-for-items` directly, or fan out per-category via `listItemsInCategory` |
96
- | Ship a client-side filter (`data-category-ids` + JS hide) on the product grid | Filter server-side via `/category/[slug]` routes; client-side filtering doesn't scale past ~100 products and breaks SEO. The `<CategoryRail/>` swaps cards via `<ClientRouter />`, not by hiding them |
126
+ | Ship a client-side filter (`data-category-ids` + JS hide) on the product grid | Filter server-side via `/category/[slug]` routes; client-side filtering doesn't scale past ~100 products and breaks SEO. The `<CategoryRail/>` swaps cards via `<ClientRouter />`, not by hiding them |
@@ -1,45 +1,48 @@
1
- # Recipe: Product Catalog Data Setup (Phase 1)
1
+ # Recipe: Product Catalog Data Setup (seed scope)
2
2
 
3
- Replace the default sample products Wix Stores installs with on-brand products via MCP. This file covers the `seed-seed` scope — data seeding only. Frontend wiring lives in the Phase 2 scope references (`SHARED_WIRING.md`, `PRODUCT_PAGES.md`, `CART_CHECKOUT.md`, `HOME_AND_NAV.md`) and should not be read by `seed-seed`.
3
+ Replace the default sample products Wix Stores installs with on-brand products via the Stores REST API (`curl` against `wixapis.com/stores/v3/...` with the standard headers from `../shared/AUTHENTICATION.md`). This file covers the `seed` scope — data seeding only. Frontend wiring lives in the astro scope references (`../astro/stores/SHARED_WIRING.md`, `../astro/stores/PRODUCT_PAGES.md`, `../astro/ecom/CART_PAGES.md`, `../astro/stores/HOME_AND_NAV.md`) and should not be read by `seed`.
4
4
 
5
5
  > **Critical Rules — Read Before Starting**
6
6
  > 1. **V3 only** — all endpoints under `/stores/v3/...` for products.
7
- > 2. **No improvised endpoints** — if an MCP call returns 404, stop and report. Do not guess alternative URLs. Do not loop on `SearchWixRESTDocumentation` more than twice on the same topic.
8
- > 3. **Do not seed categories.** Categories are merchant-driven — created in the Wix dashboard, not by this scope. The storefront's rail, Shop submenu, and `/category/[slug]` route are still wired (Phase 4) and light up automatically once the merchant adds at least one visible category with items (≤ 5 min after creation, the helper's TTL).
7
+ > 2. **No improvised endpoints** — if an REST call returns 404, stop and report. Do not guess alternative URLs. Do not loop on `docs-search REST (see DOCS_SEARCH.md)` more than twice on the same topic.
8
+ > 3. **Do not seed categories** — they are merchant-driven. See Step 6 for the full rule and how the storefront still wires up automatically.
9
9
 
10
10
  > **V3 Catalog:** New Wix sites use Catalog V3. All endpoints below live under `/stores/v3/...`. The V1 product endpoints should not be used — they silently return 0 results on V3 catalogs.
11
11
 
12
12
  ## Prerequisites
13
13
 
14
- - Wix Stores app must be installed on the site (via MCP after scaffolding, or installed via MCP if missing — see Step 0)
14
+ - Wix Stores app must be installed on the site (installed via the apps-installer REST endpoint after scaffolding — see Step 0)
15
15
 
16
- ## Setup: Replace Default Products via MCP
16
+ ## Setup: Replace Default Products via REST
17
17
 
18
18
  > **Conditional:** This section only applies when ALL of these are true:
19
19
  > - The Stores app was just installed (default sample products exist)
20
- > - Wix MCP tools are available (`mcp__wix-mcp-remote__CallWixSiteAPI` exists)
20
+ > - CLI auth works (`npx @wix/cli@latest token --site "$SITE_ID"` returns a token)
21
21
  > - Discovery context is available in your prompt (business type, brand name, style)
22
22
  >
23
- > **If MCP tools are not available, skip this entire section.** The 12 default products remain and can be customized later in the Wix dashboard.
23
+ > **If CLI auth is not available, skip this entire section.** The 12 default products remain and can be customized later in the Wix dashboard.
24
24
 
25
- > **API error guard:** If any MCP call in Phase 1 returns a 404 or an unexpected error, do **not** retry the same call with a guessed alternative URL or namespace. Report the failing endpoint, request body, and error verbatim to the user, then stop. Improvised endpoints have caused multi-minute silent stalls in past runs.
25
+ > **API error guard:** If any REST call in this seed scope returns a 404 or an unexpected error, do **not** retry the same call with a guessed alternative URL or namespace. Report the failing endpoint, request body, and error verbatim to the user, then stop.
26
+
27
+ > **Stores appDefId** for install and `catalogReference.appId`: `215238eb-22a5-4c36-9e7b-e7c08025e04e`. (A different defId — `1380b703-ce81-ff05-f115-39571d94dfcd` — is used for `wixMetadata.appDefId` in the pages scope. Do not swap them.)
28
+ >
29
+ > <!-- REVIEW (appDefId discrepancy): `1380b703-…` is labeled the `wixMetadata.appDefId` here, but `stores/INSTRUCTIONS.md` (back-in-stock split + failure-mode table) calls the same id the back-in-stock app id. One of these labels is wrong — flagged for human review; value left unchanged. -->
26
30
 
27
- > **Stores appDefId** for install and `catalogReference.appId`: `215238eb-22a5-4c36-9e7b-e7c08025e04e`. (A different defId — `1380b703-ce81-ff05-f115-39571d94dfcd` — is used for `wixMetadata.appDefId` in Phase 2. Do not swap them.)
28
31
 
29
32
  ### Step 0: Ensure Stores App Is Installed
30
33
 
31
34
  Before querying products, verify the Stores app is installed:
32
35
 
33
- 1. **Probe** — `CallWixSiteAPI: POST /stores/v3/products/query` with body `{ "query": { "paging": { "limit": 1 } } }`
36
+ 1. **Probe** — `REST: POST https://www.wixapis.com/stores/v3/products/query`
34
37
  2. **If the API returns a "REQUIRED_APP_NOT_INSTALLED" error** → install the Wix Stores app:
35
38
  ```
36
- CallWixSiteAPI: POST https://www.wixapis.com/apps-installer-service/v1/app-instance/install
39
+ REST: POST https://www.wixapis.com/apps-installer-service/v1/app-instance/install
37
40
  body: {
38
41
  "tenant": { "tenantType": "SITE", "id": "<siteId>" },
39
42
  "appInstance": { "appDefId": "215238eb-22a5-4c36-9e7b-e7c08025e04e", "enabled": true }
40
43
  }
41
44
  ```
42
- > Translate this prose-HTTP form into the full `CallWixSiteAPI` tool-call shape — include `siteId`, `reason`, `sourceDocUrl` wrapper fields and pass `body` as a real object (NOT a stringified JSON). See `../../shared/MCP_PREFIX.md` § "CallWixSiteAPI call conventions".
45
+ > Translate this prose-HTTP form into the full `curl` tool-call shape — pass `body` as JSON in `-d` (NOT a stringified JSON). See `../shared/AUTHENTICATION.md` for the standard REST headers.
43
46
 
44
47
  Then retry the probe query to confirm installation succeeded.
45
48
  3. **If the probe succeeds** → proceed to Step 1.
@@ -51,7 +54,7 @@ Replace the 12 generic sample products with 3 on-brand products that match the u
51
54
  ### Step 1: Query Default Products
52
55
 
53
56
  ```
54
- CallWixSiteAPI: POST /stores/v3/products/query
57
+ REST: POST https://www.wixapis.com/stores/v3/products/query
55
58
  body: {
56
59
  "query": {
57
60
  "paging": { "limit": 50 }
@@ -64,7 +67,7 @@ Collect all product IDs from the response.
64
67
  ### Step 2: Bulk Delete Defaults
65
68
 
66
69
  ```
67
- CallWixSiteAPI: POST /stores/v3/bulk/products/delete
70
+ REST: POST https://www.wixapis.com/stores/v3/bulk/products/delete
68
71
  body: {
69
72
  "productIds": ["<id1>", "<id2>", ..., "<id12>"]
70
73
  }
@@ -98,7 +101,7 @@ Adapt names, descriptions, and pricing to match the brand's tone and style. Use
98
101
  **Product with variants** (e.g., skincare with 30ml/50ml sizes):
99
102
 
100
103
  ```
101
- CallWixSiteAPI: POST /stores/v3/bulk/products-with-inventory/create
104
+ REST: POST https://www.wixapis.com/stores/v3/bulk/products-with-inventory/create
102
105
  body: {
103
106
  "products": [
104
107
  {
@@ -183,7 +186,7 @@ Include all products in the same `products` array. Do not include `media` — pr
183
186
  ### Step 5: Verify
184
187
 
185
188
  ```
186
- CallWixSiteAPI: POST /stores/v3/products/query
189
+ REST: POST https://www.wixapis.com/stores/v3/products/query
187
190
  body: {
188
191
  "query": { "paging": { "limit": 50 } }
189
192
  }
@@ -201,17 +204,17 @@ If the merchant later creates visible categories in the Wix dashboard and assign
201
204
  - The `Navigation` Shop submenu lists the categories.
202
205
  - `/category/<slug>` becomes a reachable, server-side-filtered listing.
203
206
 
204
- This works because the frontend (`src/utils/categories.ts`, written by the `pages-categories` scope in Phase 4) live-queries the Wix API at SSR time with a 5-min cache — no redeploy or regen is needed.
207
+ This works because the frontend (`src/utils/categories.ts`, pre-copied by the orchestrator before Phase 4 and imported by the `pages-*` scopes) live-queries the Wix API at SSR time with a 5-min cache — no redeploy or regen is needed.
205
208
 
206
209
  ### Step 7: Return Results
207
210
 
208
- Emit a structured JSON block at the end of your completion message per `../../shared/RETURN_CONTRACT.md`. Do NOT write a sidecar file.
211
+ Emit a structured JSON block at the end of your completion message per `../shared/RETURN_CONTRACT.md`. Do NOT write a sidecar file.
209
212
 
210
213
  ```json
211
214
  {
212
215
  "status": "complete",
213
216
  "phase": "stores-seed",
214
- "scope": "seed-seed",
217
+ "scope": "seed",
215
218
  "summary": "Deleted {N} default products; created {N} on-brand products with variants",
216
219
  "data": {
217
220
  "products": [
@@ -220,14 +223,14 @@ Emit a structured JSON block at the end of your completion message per `../../sh
220
223
  "name": "<name>",
221
224
  "slug": "<slug>",
222
225
  "variantId": "<uuid>",
223
- "price": 0,
224
- "inventory": 0,
226
+ "price": 48.0,
227
+ "inventory": 50,
225
228
  "sku": "<sku>"
226
229
  }
227
230
  ],
228
231
  "categories": [],
229
- "deletedCount": 0,
230
- "createdCount": 0
232
+ "deletedCount": 12,
233
+ "createdCount": 3
231
234
  },
232
235
  "files": [],
233
236
  "errors": []
@@ -238,12 +241,12 @@ Emit a structured JSON block at the end of your completion message per `../../sh
238
241
 
239
242
  The JSON block MUST be the last content in your message. Parent skill consumes `data.products[*].slug` and `data.products[*].variantId` for the Phase 4 Pages scopes.
240
243
 
241
- ### Phase 1 Boundary — Do Not Touch Other Site Data
244
+ ### Seed Boundary — Do Not Touch Other Site Data
242
245
 
243
- Phase 1 is complete after Step 7. Do **not** attempt any of the following, even if they seem like reasonable polish:
246
+ The seed scope is complete after Step 7. Do **not** attempt any of the following, even if they seem like reasonable polish:
244
247
 
245
248
  - Cleaning up "orphan customizations", "All Products" containers, brand records, or any other catalog metadata you didn't create.
246
- - Creating, renaming, or deleting any category — categories are merchant-driven (see Step 6). The auto-managed "All Products" category (handle `online_stores_all_products`) stays in place; the frontend filters it out by handle.
249
+ - Creating, renaming, or deleting any category — see Step 6 (leave the auto-managed "All Products" category in place).
247
250
  - Verifying your work via additional `query` calls beyond the Step 5 verification already performed.
248
251
 
249
- Phase 2+ (frontend wiring) is covered in the scope-specific references (`SHARED_WIRING.md`, `PRODUCT_PAGES.md`, `CATEGORY_PAGES.md`, `CART_CHECKOUT.md`, `HOME_AND_NAV.md`) — do not read them during `seed-seed`.
252
+ Phase 2+ (frontend wiring) is covered in the astro scope references (`../astro/stores/SHARED_WIRING.md`, `../astro/stores/PRODUCT_PAGES.md`, `../astro/stores/CATEGORY_PAGES.md`, `../astro/ecom/CART_PAGES.md`, `../astro/stores/HOME_AND_NAV.md`) — do not read them during `seed`.
@@ -1,160 +1,74 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "title": "Wix Headless Vertical Frontmatter",
4
- "description": "Validates verticals/<name>.md frontmatter. Runs at session start; malformed vertical aborts the skill.",
3
+ "title": "Wix Headless Vertical Frontmatter (Phase 1 — discovery only)",
4
+ "description": "Validates verticals/<name>.md frontmatter. Phase 1 scope only — later phases (setup, seed, design, pages, build) are owned by @skills/wix-manage plus this skill's own templates and INSTRUCTIONS.md files; per-pack fields (packages, cmsCollections, seed, components, componentsCss, pages, creates, contributes, include) are not part of this skill and not validated here.",
5
5
  "type": "object",
6
- "required": ["name", "description", "packages"],
7
- "additionalProperties": true,
6
+ "required": ["name", "description"],
7
+ "additionalProperties": false,
8
8
  "properties": {
9
9
  "name": {
10
10
  "type": "string",
11
11
  "pattern": "^[a-z][a-z0-9-]*$",
12
12
  "description": "Must match filename stem (e.g., stores.md → 'stores')"
13
13
  },
14
+ "description": { "type": "string" },
14
15
  "triggers": {
15
16
  "type": "array",
16
- "items": { "type": "string" }
17
+ "items": { "type": "string" },
18
+ "description": "Prompt patterns that route to this vertical. Empty allowed for transitive-only packs (ecom, gift-cards, cms). The SKILL.md routing table is the actual source of truth for what gets loaded; this is human reference + a fallback signal."
17
19
  },
18
- "description": { "type": "string" },
19
20
  "requires": {
20
21
  "type": "array",
21
- "items": { "type": "string" }
22
+ "items": { "type": "string" },
23
+ "description": "Verticals that must be co-loaded in the same read batch when this pack is loaded. Today: stores → [ecom, gift-cards]; gift-cards → [ecom]."
22
24
  },
23
25
  "features": {
24
26
  "type": "array",
25
27
  "items": {
26
28
  "type": "object",
27
29
  "required": ["name", "description"],
30
+ "additionalProperties": false,
28
31
  "properties": {
29
32
  "name": { "type": "string" },
30
33
  "description": { "type": "string" }
31
34
  }
32
- }
35
+ },
36
+ "description": "Feature blurbs for DISCOVERY-create.md Step 3 Section B."
33
37
  },
34
38
  "apps": {
35
- "type": "array",
36
- "items": {
37
- "oneOf": [
38
- { "type": "string", "description": "App name (resolved via known-apps.json)" },
39
- {
40
- "type": "object",
41
- "required": ["name"],
42
- "properties": {
43
- "name": { "type": "string" },
44
- "appDefId": { "type": "string" }
45
- }
46
- }
47
- ]
48
- }
49
- },
50
- "packages": {
51
- "type": "array",
52
- "minItems": 1,
53
- "items": { "type": "string" }
54
- },
55
- "routes": {
56
39
  "type": "array",
57
40
  "items": {
58
41
  "type": "object",
59
- "required": ["route"],
42
+ "required": ["name"],
43
+ "additionalProperties": false,
60
44
  "properties": {
61
- "route": { "type": "string", "description": "URL path (e.g. /cart) OR the literal 'Hosted by Wix' for Wix-hosted endpoints like checkout." },
62
- "name": { "type": "string", "description": "Optional user-facing page name override for DISCOVERY.md's Section C table. When omitted, the orchestrator derives the name from the path (/ → Home; /thank-you → Thank You). Set this only when path-derivation produces a poor name (e.g. /products/[slug] → 'Product Detail') or when the route has no path (e.g. ecom's Wix-hosted Checkout)." }
63
- }
64
- }
65
- },
66
- "cmsCollections": { "type": "array" },
67
- "seed": {
68
- "oneOf": [
69
- { "type": "null" },
70
- {
71
- "type": "object",
72
- "required": ["agentLocation", "scope", "references"],
73
- "properties": {
74
- "agentLocation": { "type": "string" },
75
- "scope": { "type": "string", "const": "seed" },
76
- "description": { "type": "string" },
77
- "references": { "type": "array", "items": { "type": "string" } }
78
- }
79
- }
80
- ]
81
- },
82
- "components": {
83
- "oneOf": [
84
- { "type": "null" },
85
- {
86
- "type": "object",
87
- "required": ["agentLocation", "scope", "references"],
88
- "properties": {
89
- "agentLocation": { "type": "string" },
90
- "scope": { "type": "string", "const": "components" },
91
- "description": { "type": "string" },
92
- "references": { "type": "array", "items": { "type": "string" } },
93
- "files": { "type": "array", "items": { "type": "string" } }
94
- }
95
- }
96
- ]
97
- },
98
- "componentsCss": {
99
- "oneOf": [
100
- { "type": "null" },
101
- {
102
- "type": "object",
103
- "required": ["agentLocation", "scope", "references"],
104
- "description": "Optional sibling of `components`. When present, the orchestrator dispatches a second concurrent Phase 3 subagent that owns the pack's scoped CSS file only — independent of TSX/Astro work in the `components` scope. Used by packs whose `components` agent dominated phase wall time (today: stores). Backward compatible — packs without this field keep the single-agent shape.",
105
- "properties": {
106
- "agentLocation": { "type": "string" },
107
- "scope": { "type": "string", "const": "components-css" },
108
- "description": { "type": "string" },
109
- "references": { "type": "array", "items": { "type": "string" } },
110
- "files": { "type": "array", "items": { "type": "string" } }
111
- }
45
+ "name": { "type": "string" },
46
+ "appDefId": { "type": "string" }
112
47
  }
113
- ]
48
+ },
49
+ "description": "Zero or one entry per pack. apps[0].name fills the Source column of the Pages table."
114
50
  },
115
- "pages": {
51
+ "routes": {
116
52
  "type": "array",
117
53
  "items": {
118
54
  "type": "object",
119
- "required": ["agentLocation", "scope", "references"],
55
+ "required": ["route"],
56
+ "additionalProperties": false,
120
57
  "properties": {
121
- "name": { "type": "string" },
122
- "agentLocation": { "type": "string" },
123
- "scope": {
58
+ "route": {
124
59
  "type": "string",
125
- "pattern": "^pages(-[a-z][a-z0-9-]*)?$",
126
- "description": "Must be 'pages' or 'pages-<subscope>'"
60
+ "description": "URL path (e.g. /cart) OR the literal 'Hosted by Wix' for Wix-hosted endpoints like checkout."
127
61
  },
128
- "description": { "type": "string" },
129
- "references": { "type": "array", "items": { "type": "string" } },
130
- "files": { "type": "array", "items": { "type": "string" } }
131
- }
132
- }
133
- },
134
- "creates": {
135
- "type": "array",
136
- "items": {
137
- "type": "object",
138
- "required": ["file", "phase"],
139
- "properties": {
140
- "file": { "type": "string" },
141
- "phase": { "type": "string", "enum": ["seed", "components", "pages"] }
142
- }
143
- }
144
- },
145
- "contributes": {
146
- "type": "array",
147
- "items": {
148
- "type": "object",
149
- "required": ["file", "marker"],
150
- "properties": {
151
- "file": { "type": "string" },
152
- "marker": { "type": "string", "pattern": "^<!--\\s.*\\s-->$" },
153
- "description": { "type": "string" }
62
+ "name": {
63
+ "type": "string",
64
+ "description": "Optional user-facing page name override for DISCOVERY.md's Section C table. When omitted, the orchestrator derives the name from the path (/ → Home; /thank-you → Thank You). Set this only when path-derivation produces a poor name (e.g. /products/[slug] → 'Product Detail') or when the route has no path (e.g. ecom's Wix-hosted Checkout)."
65
+ }
154
66
  }
155
67
  }
156
68
  },
157
- "include": { "type": "boolean", "description": "Pack-level loading flag. If true, the pack is loaded in every site regardless of triggers/requires (today: only the cms pack uses include:true). Default false — the pack loads only when triggers match the user's prompt or another pack pulls it in via requires." },
158
- "disabled": { "type": "boolean", "description": "Pack-level activation flag, ORTHOGONAL to `include`. If true, the pack's surfaces (pages, nav links, home blocks) are disabled by default — they ship as code but do not appear without a separate user action (today: enabling the matching Wix app from the dashboard, which the pack's runtime probe detects). Files still ship via creates: / contributes: so activation is instant once the user opts in. DISCOVERY.md plan composition (Sections B + C) skips features and routes from disabled packs so the plan never promises a surface the user did not ask for. Today only the gift-cards pack uses disabled:true." }
69
+ "disabled": {
70
+ "type": "boolean",
71
+ "description": "If true, the pack's surfaces (pages, nav links, home blocks) are inactive by default — they ship as code but do not appear without a separate user action (today: enabling the matching Wix app from the dashboard, which the pack's runtime probe detects). DISCOVERY.md plan composition (Sections B + C) skips features and routes from disabled packs so the plan never promises a surface the user did not ask for. Today only the gift-cards pack uses disabled: true."
72
+ }
159
73
  }
160
74
  }