@wix/agent-skills 1.15.1 → 1.16.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 (322) hide show
  1. package/README.md +3 -7
  2. package/package.json +1 -1
  3. package/skills/wix-app/SKILL.md +4 -1
  4. package/skills/wix-app/references/APP_TOOLS.md +134 -0
  5. package/skills/wix-app/references/CUSTOM_ELEMENT_WIDGET.md +1 -1
  6. package/skills/wix-app/references/DASHBOARD_PAGE.md +0 -10
  7. package/skills/wix-app/references/DATA_COLLECTION.md +1 -1
  8. package/skills/wix-app/references/EDITOR_REACT_COMPONENT.md +28 -9
  9. package/skills/wix-app/references/SERVICE_PLUGIN.md +12 -10
  10. package/skills/wix-app/references/app-tools/TOOLS.md +75 -0
  11. package/skills/wix-app/references/dashboard-page/DASHBOARD_API.md +2 -2
  12. package/skills/wix-app/references/editor-react-component/A11Y-REVIEW-REFERENCE.md +172 -0
  13. package/skills/wix-app/references/editor-react-component/A11Y-REVIEW.md +138 -0
  14. package/skills/wix-app/references/editor-react-component/ANIMATED-COMPONENTS.md +23 -2
  15. package/skills/wix-app/references/editor-react-component/BRANDED-COMPONENTS.md +29 -0
  16. package/skills/wix-app/references/editor-react-component/COMPONENT-API.md +1 -1
  17. package/skills/wix-app/references/editor-react-component/CSS-GUIDELINES.md +27 -2
  18. package/skills/wix-app/references/editor-react-component/DESIGN-STATES.md +5 -3
  19. package/skills/wix-app/references/editor-react-component/DIRECTIONALITY.md +18 -1
  20. package/skills/wix-app/references/editor-react-component/PARTS.md +15 -2
  21. package/skills/wix-app/references/editor-react-component/REACT-GUIDELINES.md +2 -3
  22. package/skills/wix-app/references/service-plugin/BOOKINGS-STAFF-SORTING.md +13 -9
  23. package/skills/wix-app/references/service-plugin/DISCOUNT-TRIGGERS.md +4 -0
  24. package/skills/wix-app/references/service-plugin/GIFT-CARDS.md +4 -0
  25. package/skills/wix-app/references/service-plugin/PAYMENT-SETTINGS.md +3 -1
  26. package/skills/wix-app/references/service-plugin/SHIPPING-RATES.md +4 -0
  27. package/skills/wix-app/references/service-plugin/TOOLS_PROVIDER.md +54 -0
  28. package/skills/wix-app/references/stores/QUERY.md +32 -0
  29. package/skills/wix-docs/SKILL.md +35 -3
  30. package/skills/wix-headless/SKILL.md +3 -1
  31. package/skills/wix-headless/references/CONTENT.md +36 -0
  32. package/skills/wix-headless/references/DESIGN.md +54 -0
  33. package/skills/wix-headless/references/DISCOVERY.md +24 -0
  34. package/skills/wix-headless/references/IMAGE_GENERATION.md +10 -0
  35. package/skills/wix-headless/references/inline-recipes/how-to-code-a-store.md +3 -2
  36. package/skills/wix-headless/references/inline-recipes/setup-online-store.md +32 -23
  37. package/skills/wix-headless/references/managed/CONNECT.md +1 -1
  38. package/skills/wix-headless/references/managed/CREATE.md +14 -0
  39. package/skills/wix-headless/references/managed/DEPLOYMENT.md +25 -0
  40. package/skills/wix-manage/SKILL.md +123 -7
  41. package/skills/wix-manage/references/analytics/analytics-dashboard-navigation.md +41 -0
  42. package/skills/wix-manage/references/app-installation/app-installation-dashboard-navigation.md +28 -0
  43. package/skills/wix-manage/references/blog/blog-dashboard-navigation.md +56 -0
  44. package/skills/wix-manage/references/blog/how-to-create-blog-posts.md +31 -6
  45. package/skills/wix-manage/references/bookings/booking-service-policy-setup.md +3 -1
  46. package/skills/wix-manage/references/bookings/bookings-dashboard-navigation.md +63 -0
  47. package/skills/wix-manage/references/bookings/diagnose-availability-issues.md +10 -1
  48. package/skills/wix-manage/references/cms/cms-dashboard-navigation.md +44 -0
  49. package/skills/wix-manage/references/cms/cms-data-items-crud.md +31 -3
  50. package/skills/wix-manage/references/cms/cms-publishing-flow.md +287 -0
  51. package/skills/wix-manage/references/cms/cms-schema-management.md +27 -1
  52. package/skills/wix-manage/references/contacts/contacts-dashboard-navigation.md +46 -0
  53. package/skills/wix-manage/references/contacts/create-a-contact.md +82 -0
  54. package/skills/wix-manage/references/contacts/update-a-contact.md +119 -0
  55. package/skills/wix-manage/references/dashboard-navigation/dashboard-navigation.md +82 -0
  56. package/skills/wix-manage/references/dashboard-navigation/routes.json +1733 -0
  57. package/skills/wix-manage/references/domains/domains-dashboard-navigation.md +32 -0
  58. package/skills/wix-manage/references/ecommerce/ecom-pricing.md +4 -4
  59. package/skills/wix-manage/references/ecommerce/ecom-shipping.md +1 -1
  60. package/skills/wix-manage/references/ecommerce/gift-cards/ecom-gift-cards-goal-sell-gift-cards.md +338 -0
  61. package/skills/wix-manage/references/ecommerce/pricing-promotions/ecom-pricing-create-discount-rule.md +42 -78
  62. package/skills/wix-manage/references/ecommerce/pricing-promotions/ecom-pricing-flow-bundle-and-save.md +1 -1
  63. package/skills/wix-manage/references/ecommerce/pricing-promotions/ecom-pricing-flow-stock-mover.md +1 -1
  64. package/skills/wix-manage/references/ecommerce/pricing-promotions/ecom-pricing-flow-upsell-boost.md +1 -1
  65. package/skills/wix-manage/references/ecommerce/recommend-ecommerce-strategy.md +90 -92
  66. package/skills/wix-manage/references/events/create-wix-event.md +176 -0
  67. package/skills/wix-manage/references/events/manage-wix-events.md +174 -0
  68. package/skills/wix-manage/references/forms/forms-dashboard-navigation.md +44 -0
  69. package/skills/wix-manage/references/get-paid/get-paid-dashboard-navigation.md +52 -0
  70. package/skills/wix-manage/references/google-ads/billing-and-payment.md +80 -0
  71. package/skills/wix-manage/references/google-ads/create-performance-max-campaign.md +212 -0
  72. package/skills/wix-manage/references/google-ads/get-campaign-suggestions.md +110 -0
  73. package/skills/wix-manage/references/google-ads/google-ads-dashboard-navigation.md +25 -0
  74. package/skills/wix-manage/references/google-ads/install-and-create-account.md +155 -0
  75. package/skills/wix-manage/references/google-ads/manage-campaign-lifecycle.md +63 -0
  76. package/skills/wix-manage/references/google-ads/query-campaign-analytics.md +155 -0
  77. package/skills/wix-manage/references/marketing/marketing-dashboard-navigation.md +52 -0
  78. package/skills/wix-manage/references/pricing-plans/create-and-update-pricing-plans.md +99 -1
  79. package/skills/wix-manage/references/pricing-plans/pricing-plans-dashboard-navigation.md +45 -0
  80. package/skills/wix-manage/references/restaurants/restaurants-dashboard-navigation.md +68 -0
  81. package/skills/wix-manage/references/restaurants/wix-restaurants-setup.md +94 -125
  82. package/skills/wix-manage/references/site-properties/change-payment-currency-site-properties.md +48 -9
  83. package/skills/wix-manage/references/site-properties/site-properties-dashboard-navigation.md +31 -0
  84. package/skills/wix-manage/references/sites/create-headless-site.md +52 -0
  85. package/skills/wix-manage/references/sites/create-site-from-template.md +2 -25
  86. package/skills/wix-manage/references/sites/site-import.md +163 -190
  87. package/skills/wix-manage/references/sites/sites-dashboard-navigation.md +29 -0
  88. package/skills/wix-manage/references/stores/add-store-pages-to-site.md +17 -1
  89. package/skills/wix-manage/references/stores/find-products-query-and-search-catalog-v3.md +26 -8
  90. package/skills/wix-manage/references/stores/stores-dashboard-navigation.md +65 -0
  91. package/skills/wix-manage/references/stores/update-product-with-options.md +39 -7
  92. package/skills/wix-replatform/.publish-manifest.json +8 -0
  93. package/skills/wix-replatform/SKILL.md +693 -0
  94. package/skills/wix-replatform/lib/artifact-freshness.js +215 -0
  95. package/skills/wix-replatform/lib/completion-report.js +200 -0
  96. package/skills/wix-replatform/lib/config-env.js +59 -0
  97. package/skills/wix-replatform/lib/execution-manifest.js +185 -0
  98. package/skills/wix-replatform/lib/execution-state.js +173 -0
  99. package/skills/wix-replatform/lib/import-recovery.js +313 -0
  100. package/skills/wix-replatform/lib/local-state.js +642 -0
  101. package/skills/wix-replatform/lib/orchestration-preflight.js +143 -0
  102. package/skills/wix-replatform/lib/orchestration-router.js +122 -0
  103. package/skills/wix-replatform/lib/orchestration-state.js +455 -0
  104. package/skills/wix-replatform/lib/progress-log.js +224 -0
  105. package/skills/wix-replatform/lib/progress-log.sh +140 -0
  106. package/skills/wix-replatform/lib/url-preservation-state.js +391 -0
  107. package/skills/wix-replatform/resources/rp-discovery/SKILL.md +184 -0
  108. package/skills/wix-replatform/resources/rp-execute-import/SKILL.md +529 -0
  109. package/skills/wix-replatform/resources/rp-execute-setup/SKILL.md +316 -0
  110. package/skills/wix-replatform/resources/rp-execute-setup/scripts/mint-token.sh +64 -0
  111. package/skills/wix-replatform/resources/rp-import-codegen/SKILL.md +1114 -0
  112. package/skills/wix-replatform/resources/rp-mapper/SKILL.md +430 -0
  113. package/skills/wix-replatform/resources/rp-mapper/lib/mapping-resolve.js +217 -0
  114. package/skills/wix-replatform/resources/rp-mapper/scripts/resolve-mapping.js +148 -0
  115. package/skills/wix-replatform/resources/rp-mapper/wix-business-solutions-taxonomy.md +378 -0
  116. package/skills/wix-replatform/resources/rp-setup-discovery/SKILL.md +183 -0
  117. package/skills/wix-replatform/resources/rp-source-csv/SKILL.md +478 -0
  118. package/skills/wix-replatform/resources/rp-source-csv/lib/canonical-record.js +136 -0
  119. package/skills/wix-replatform/resources/rp-source-csv/lib/csv-fileset.js +0 -0
  120. package/skills/wix-replatform/resources/rp-source-csv/lib/csv-fingerprint.js +310 -0
  121. package/skills/wix-replatform/resources/rp-source-csv/lib/csv-layout.js +1081 -0
  122. package/skills/wix-replatform/resources/rp-source-csv/lib/csv-parse.js +618 -0
  123. package/skills/wix-replatform/resources/rp-source-csv/scripts/csv-discovery.js +949 -0
  124. package/skills/wix-replatform/resources/rp-source-csv/source-schema.example.json +196 -0
  125. package/skills/wix-replatform/resources/rp-source-csv/vendors/bigcommerce.json +66 -0
  126. package/skills/wix-replatform/resources/rp-source-csv/vendors/magento.json +60 -0
  127. package/skills/wix-replatform/resources/rp-source-csv/vendors/shopify.json +95 -0
  128. package/skills/wix-replatform/resources/rp-source-csv/vendors/woocommerce.json +82 -0
  129. package/skills/wix-replatform/resources/rp-source-wordpress/SKILL.md +256 -0
  130. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-http.js +249 -0
  131. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-route-classifier.js +444 -0
  132. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/wp-discovery.js +774 -0
  133. package/skills/wix-replatform/resources/rp-source-wordpress/source-schema.example.json +71 -0
  134. package/skills/wix-replatform/resources/rp-target-wix/SKILL.md +632 -0
  135. package/skills/wix-replatform/resources/rp-target-wix/SPEC-product-reviews-and-blog-authorship.md +330 -0
  136. package/skills/wix-replatform/resources/rp-target-wix/domains/README.md +21 -0
  137. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/domain.json +19 -0
  138. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/category.json +37 -0
  139. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/comment.json +37 -0
  140. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/post.json +39 -0
  141. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/tag.json +35 -0
  142. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/domain.json +14 -0
  143. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/collection.json +35 -0
  144. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/data-item.json +36 -0
  145. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/reference.json +35 -0
  146. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/domain.json +14 -0
  147. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/contact.json +131 -0
  148. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/email-subscription.json +37 -0
  149. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/label.json +37 -0
  150. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/domain.json +21 -0
  151. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-line-item.json +37 -0
  152. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-refund.json +37 -0
  153. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order.json +97 -0
  154. package/skills/wix-replatform/resources/rp-target-wix/domains/index.json +528 -0
  155. package/skills/wix-replatform/resources/rp-target-wix/domains/media/domain.json +14 -0
  156. package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-file.json +38 -0
  157. package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-folder.json +37 -0
  158. package/skills/wix-replatform/resources/rp-target-wix/domains/members/domain.json +13 -0
  159. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/badge.json +37 -0
  160. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/member.json +53 -0
  161. package/skills/wix-replatform/resources/rp-target-wix/domains/schema.json +84 -0
  162. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/domain.json +25 -0
  163. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/category.json +37 -0
  164. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/coupon.json +37 -0
  165. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/inventory-item.json +38 -0
  166. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-tag.json +37 -0
  167. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product.json +90 -0
  168. package/skills/wix-replatform/resources/rp-target-wix/lib/audit-summary.js +64 -0
  169. package/skills/wix-replatform/resources/rp-target-wix/lib/contract-ledger.js +141 -0
  170. package/skills/wix-replatform/resources/rp-target-wix/lib/domain-knowledge.js +384 -0
  171. package/skills/wix-replatform/resources/rp-target-wix/lib/ndjson.js +260 -0
  172. package/skills/wix-replatform/resources/rp-target-wix/lib/stores-verification.js +238 -0
  173. package/skills/wix-replatform/resources/rp-target-wix/lib/wix-build.js +237 -0
  174. package/skills/wix-replatform/resources/rp-target-wix/lib/wix-target-spec.js +238 -0
  175. package/skills/wix-replatform/resources/rp-target-wix/lib/wix-writers.js +2219 -0
  176. package/skills/wix-replatform/resources/rp-target-wix/scripts/domain-knowledge-validate.js +31 -0
  177. package/skills/wix-replatform/resources/rp-target-wix/scripts/domain-knowledge.js +100 -0
  178. package/skills/wix-replatform/resources/rp-target-wix/scripts/verify-stores.js +107 -0
  179. package/skills/wix-replatform/resources/rp-telemetry/SKILL.md +344 -0
  180. package/skills/wix-replatform/resources/rp-telemetry/lib/bi-sink.js +250 -0
  181. package/skills/wix-replatform/resources/rp-telemetry/lib/telemetry-recorder.js +1927 -0
  182. package/skills/wix-replatform/resources/rp-telemetry/scripts/meter-from-audit.js +83 -0
  183. package/skills/wix-replatform/resources/rp-telemetry/scripts/rp-telemetry.js +141 -0
  184. package/skills/wix-replatform/scripts/artifact-freshness.js +76 -0
  185. package/skills/wix-replatform/scripts/execution-manifest-validate.js +43 -0
  186. package/skills/wix-replatform/scripts/execution-state-prepare.js +128 -0
  187. package/skills/wix-replatform/scripts/orchestration-preflight.js +48 -0
  188. package/skills/wix-replatform/scripts/orchestration-route.js +46 -0
  189. package/skills/wix-replatform/scripts/orchestration-state.js +245 -0
  190. package/skills/wix-vibe-headless/SKILL.md +48 -25
  191. package/skills/wix-vibe-headless/install/deploy.cjs +95 -0
  192. package/skills/wix-vibe-headless/install/pin-agents-md.cjs +34 -0
  193. package/skills/wix-vibe-headless/platforms/README.md +8 -4
  194. package/skills/wix-vibe-headless/platforms/base44.md +133 -98
  195. package/skills/wix-vibe-headless/platforms/generic.md +99 -64
  196. package/skills/wix-vibe-headless/references/blog/INSTRUCTIONS.md +230 -119
  197. package/skills/wix-vibe-headless/references/blog/app/components/PostCard.jsx +43 -0
  198. package/skills/wix-vibe-headless/references/blog/app/components/PostChips.jsx +25 -0
  199. package/skills/wix-vibe-headless/references/blog/app/components/PostGrid.jsx +15 -0
  200. package/skills/wix-vibe-headless/references/blog/app/context/TaxonomyContext.jsx +35 -0
  201. package/skills/wix-vibe-headless/references/blog/app/hooks/usePostDetail.js +38 -0
  202. package/skills/wix-vibe-headless/references/blog/app/pages/Blog.jsx +40 -0
  203. package/skills/wix-vibe-headless/references/blog/app/pages/CategoryPage.jsx +54 -0
  204. package/skills/wix-vibe-headless/references/blog/app/pages/PostDetail.jsx +65 -0
  205. package/skills/wix-vibe-headless/references/blog/app/pages/TagPage.jsx +50 -0
  206. package/skills/wix-vibe-headless/references/blog/seed/SEED.md +103 -0
  207. package/skills/wix-vibe-headless/references/blog/seed/seed-blog.js +270 -0
  208. package/skills/wix-vibe-headless/references/bookings/INSTRUCTIONS.md +260 -149
  209. package/skills/wix-vibe-headless/references/bookings/app/components/BookingForm.jsx +65 -0
  210. package/skills/wix-vibe-headless/references/bookings/app/components/ServiceCard.jsx +47 -0
  211. package/skills/wix-vibe-headless/references/bookings/app/components/ServiceGrid.jsx +13 -0
  212. package/skills/wix-vibe-headless/references/bookings/app/components/SlotPicker.jsx +126 -0
  213. package/skills/wix-vibe-headless/references/bookings/app/hooks/useServiceDetail.js +108 -0
  214. package/skills/wix-vibe-headless/references/bookings/app/hooks/useServices.js +58 -0
  215. package/skills/wix-vibe-headless/references/bookings/app/lib/serviceFacts.js +95 -0
  216. package/skills/wix-vibe-headless/references/bookings/app/pages/ServiceDetail.jsx +94 -0
  217. package/skills/wix-vibe-headless/references/bookings/app/pages/Services.jsx +89 -0
  218. package/skills/wix-vibe-headless/references/bookings/{wix-bookings-checkout.js → app/rest/wix-bookings-checkout.js} +1 -1
  219. package/skills/wix-vibe-headless/references/bookings/{wix-bookings-services.js → app/rest/wix-bookings-services.js} +87 -11
  220. package/skills/wix-vibe-headless/references/bookings/seed/SEED.md +117 -0
  221. package/skills/wix-vibe-headless/references/bookings/seed/seed-bookings.js +333 -0
  222. package/skills/wix-vibe-headless/references/cms/INSTRUCTIONS.md +169 -147
  223. package/skills/wix-vibe-headless/references/cms/app/collection.config.js +31 -0
  224. package/skills/wix-vibe-headless/references/cms/app/lib/wixImage.js +18 -0
  225. package/skills/wix-vibe-headless/references/cms/{wix-cms.js → app/rest/wix-cms.js} +47 -2
  226. package/skills/wix-vibe-headless/references/cms/seed/SEED.md +145 -0
  227. package/skills/wix-vibe-headless/references/events/INSTRUCTIONS.md +228 -131
  228. package/skills/wix-vibe-headless/references/events/app/components/CategoryFilter.jsx +23 -0
  229. package/skills/wix-vibe-headless/references/events/app/components/EventCard.jsx +43 -0
  230. package/skills/wix-vibe-headless/references/events/app/components/EventGrid.jsx +13 -0
  231. package/skills/wix-vibe-headless/references/events/app/components/EventRegistration.jsx +29 -0
  232. package/skills/wix-vibe-headless/references/events/app/components/RsvpForm.jsx +57 -0
  233. package/skills/wix-vibe-headless/references/events/app/components/TicketPicker.jsx +78 -0
  234. package/skills/wix-vibe-headless/references/events/app/hooks/useEventDetail.js +27 -0
  235. package/skills/wix-vibe-headless/references/events/app/hooks/useEventsList.js +54 -0
  236. package/skills/wix-vibe-headless/references/events/app/hooks/useRsvpForm.js +40 -0
  237. package/skills/wix-vibe-headless/references/events/app/hooks/useTicketing.js +81 -0
  238. package/skills/wix-vibe-headless/references/events/app/pages/EventDetail.jsx +48 -0
  239. package/skills/wix-vibe-headless/references/events/app/pages/Events.jsx +36 -0
  240. package/skills/wix-vibe-headless/references/events/{wix-events-browse.js → app/rest/wix-events-browse.js} +1 -1
  241. package/skills/wix-vibe-headless/references/events/seed/SEED.md +107 -0
  242. package/skills/wix-vibe-headless/references/events/seed/seed-events.js +251 -0
  243. package/skills/wix-vibe-headless/references/members/INSTRUCTIONS.md +276 -188
  244. package/skills/wix-vibe-headless/references/members/app/components/LoginForm.jsx +101 -0
  245. package/skills/wix-vibe-headless/references/members/app/components/MemberMenu.jsx +33 -0
  246. package/skills/wix-vibe-headless/references/members/app/components/RequireAuth.jsx +21 -0
  247. package/skills/wix-vibe-headless/references/members/app/components/SocialButtons.jsx +29 -0
  248. package/skills/wix-vibe-headless/references/members/app/context/MemberContext.jsx +54 -0
  249. package/skills/wix-vibe-headless/references/members/app/hooks/useLoginForm.js +77 -0
  250. package/skills/wix-vibe-headless/references/members/app/pages/Account.jsx +36 -0
  251. package/skills/wix-vibe-headless/references/members/app/pages/Callback.jsx +32 -0
  252. package/skills/wix-vibe-headless/references/members/app/pages/Login.jsx +35 -0
  253. package/skills/wix-vibe-headless/references/members/{wix-members-auth.js → app/rest/wix-members-auth.js} +6 -3
  254. package/skills/wix-vibe-headless/references/members/install/Register.jsx +22 -0
  255. package/skills/wix-vibe-headless/references/members/seed/SEED.md +22 -0
  256. package/skills/wix-vibe-headless/references/portfolio/INSTRUCTIONS.md +233 -104
  257. package/skills/wix-vibe-headless/references/portfolio/app/components/CollectionCard.jsx +31 -0
  258. package/skills/wix-vibe-headless/references/portfolio/app/components/CollectionGrid.jsx +15 -0
  259. package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectCard.jsx +39 -0
  260. package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectGrid.jsx +15 -0
  261. package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectMedia.jsx +29 -0
  262. package/skills/wix-vibe-headless/references/portfolio/app/hooks/useCollectionProjects.js +35 -0
  263. package/skills/wix-vibe-headless/references/portfolio/app/hooks/usePortfolioGallery.js +27 -0
  264. package/skills/wix-vibe-headless/references/portfolio/app/hooks/useProjectDetail.js +25 -0
  265. package/skills/wix-vibe-headless/references/portfolio/app/pages/CollectionPage.jsx +39 -0
  266. package/skills/wix-vibe-headless/references/portfolio/app/pages/Portfolio.jsx +27 -0
  267. package/skills/wix-vibe-headless/references/portfolio/app/pages/ProjectDetail.jsx +60 -0
  268. package/skills/wix-vibe-headless/references/portfolio/seed/SEED.md +94 -0
  269. package/skills/wix-vibe-headless/references/portfolio/seed/seed-portfolio.js +236 -0
  270. package/skills/wix-vibe-headless/references/pricing-plans/INSTRUCTIONS.md +240 -117
  271. package/skills/wix-vibe-headless/references/pricing-plans/app/components/OrderCard.jsx +35 -0
  272. package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanCard.jsx +48 -0
  273. package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanGrid.jsx +16 -0
  274. package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanPrice.jsx +35 -0
  275. package/skills/wix-vibe-headless/references/pricing-plans/app/hooks/useMyPlans.js +25 -0
  276. package/skills/wix-vibe-headless/references/pricing-plans/app/hooks/usePlanDetail.js +28 -0
  277. package/skills/wix-vibe-headless/references/pricing-plans/app/hooks/usePlans.js +30 -0
  278. package/skills/wix-vibe-headless/references/pricing-plans/app/pages/MyPlans.jsx +30 -0
  279. package/skills/wix-vibe-headless/references/pricing-plans/app/pages/PlanDetail.jsx +53 -0
  280. package/skills/wix-vibe-headless/references/pricing-plans/app/pages/Plans.jsx +28 -0
  281. package/skills/wix-vibe-headless/references/pricing-plans/seed/SEED.md +86 -0
  282. package/skills/wix-vibe-headless/references/pricing-plans/seed/seed-pricing-plans.js +251 -0
  283. package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +248 -124
  284. package/skills/wix-vibe-headless/references/restaurants/app/components/ItemDialog.jsx +81 -0
  285. package/skills/wix-vibe-headless/references/restaurants/app/components/MenuItemCard.jsx +71 -0
  286. package/skills/wix-vibe-headless/references/restaurants/app/components/MenuList.jsx +43 -0
  287. package/skills/wix-vibe-headless/references/restaurants/app/components/OrderCartButton.jsx +21 -0
  288. package/skills/wix-vibe-headless/references/restaurants/app/components/OrderCartDrawer.jsx +60 -0
  289. package/skills/wix-vibe-headless/references/restaurants/app/context/OrderCartContext.jsx +63 -0
  290. package/skills/wix-vibe-headless/references/restaurants/app/hooks/useItemOrder.js +32 -0
  291. package/skills/wix-vibe-headless/references/restaurants/app/hooks/useReservation.js +73 -0
  292. package/skills/wix-vibe-headless/references/restaurants/app/pages/Menu.jsx +28 -0
  293. package/skills/wix-vibe-headless/references/restaurants/app/pages/Reservations.jsx +102 -0
  294. package/skills/wix-vibe-headless/references/restaurants/seed/SEED.md +180 -0
  295. package/skills/wix-vibe-headless/references/restaurants/seed/seed-restaurants.js +452 -0
  296. package/skills/wix-vibe-headless/references/shared/app/components/WixManageBanner.jsx +56 -0
  297. package/skills/wix-vibe-headless/references/shared/{wix-client.js → app/rest/wix-client.js} +6 -8
  298. package/skills/wix-vibe-headless/references/shared/app/rest/wix-config.js +6 -0
  299. package/skills/wix-vibe-headless/references/storefront/INSTRUCTIONS.md +263 -157
  300. package/skills/wix-vibe-headless/references/storefront/app/components/CartButton.jsx +20 -0
  301. package/skills/wix-vibe-headless/references/storefront/app/components/CartDrawer.jsx +150 -0
  302. package/skills/wix-vibe-headless/references/storefront/app/components/ProductCard.jsx +167 -0
  303. package/skills/wix-vibe-headless/references/storefront/app/components/ProductGallery.jsx +51 -0
  304. package/skills/wix-vibe-headless/references/storefront/app/components/ProductGrid.jsx +54 -0
  305. package/skills/wix-vibe-headless/references/storefront/app/components/VariantPicker.jsx +119 -0
  306. package/skills/wix-vibe-headless/references/storefront/app/context/CartContext.jsx +71 -0
  307. package/skills/wix-vibe-headless/references/storefront/app/hooks/useProductDetail.js +109 -0
  308. package/skills/wix-vibe-headless/references/storefront/app/hooks/useShop.js +98 -0
  309. package/skills/wix-vibe-headless/references/storefront/app/lib/storeImage.js +27 -0
  310. package/skills/wix-vibe-headless/references/storefront/app/pages/ProductDetail.jsx +139 -0
  311. package/skills/wix-vibe-headless/references/storefront/app/pages/Shop.jsx +75 -0
  312. package/skills/wix-vibe-headless/references/storefront/{wix-store-cart.js → app/rest/wix-store-cart.js} +1 -1
  313. package/skills/wix-vibe-headless/references/storefront/{wix-store-catalog.js → app/rest/wix-store-catalog.js} +20 -1
  314. package/skills/wix-vibe-headless/references/storefront/seed/SEED.md +111 -0
  315. package/skills/wix-vibe-headless/references/storefront/seed/seed-store.js +299 -0
  316. /package/skills/wix-vibe-headless/references/blog/{wix-blog.js → app/rest/wix-blog.js} +0 -0
  317. /package/skills/wix-vibe-headless/references/events/{wix-events-registration.js → app/rest/wix-events-registration.js} +0 -0
  318. /package/skills/wix-vibe-headless/references/portfolio/{wix-portfolio.js → app/rest/wix-portfolio.js} +0 -0
  319. /package/skills/wix-vibe-headless/references/pricing-plans/{wix-pricing-plans.js → app/rest/wix-pricing-plans.js} +0 -0
  320. /package/skills/wix-vibe-headless/references/restaurants/{wix-restaurants-menu.js → app/rest/wix-restaurants-menu.js} +0 -0
  321. /package/skills/wix-vibe-headless/references/restaurants/{wix-restaurants-ordering.js → app/rest/wix-restaurants-ordering.js} +0 -0
  322. /package/skills/wix-vibe-headless/references/restaurants/{wix-restaurants-reservations.js → app/rest/wix-restaurants-reservations.js} +0 -0
@@ -0,0 +1,53 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "domain": "members",
4
+ "entity": "member",
5
+ "displayName": "Site Member",
6
+ "target": {
7
+ "classification": "native-plus-cms",
8
+ "nativeEntity": "Member",
9
+ "verifiedFqdn": null,
10
+ "idPolicy": "server-assigned",
11
+ "crosswalkRequired": true
12
+ },
13
+ "sourceAliases": [
14
+ { "sourceSystem": "wordpress", "sourceEntity": "user", "routes": ["/wp/v2/users"], "confidence": "medium" },
15
+ { "sourceSystem": "woocommerce", "sourceEntity": "customer", "routes": ["/wc/v3/customers"], "confidence": "medium" },
16
+ { "sourceSystem": "wix", "sourceEntity": "member", "routes": ["Members APIs"], "confidence": "high" }
17
+ ],
18
+ "preferredWrite": {
19
+ "surface": "Members V1",
20
+ "endpoint": "POST /members/v1/members",
21
+ "writerId": "createMember",
22
+ "verification": "verified-live",
23
+ "importSafe": false,
24
+ "bulk": false
25
+ },
26
+ "safeModeContactFields": [
27
+ {
28
+ "kind": "email",
29
+ "targetPath": "member.loginEmail",
30
+ "source": "target-schema",
31
+ "notes": "Members V1 login email in the create-member request body."
32
+ }
33
+ ],
34
+ "fallbacks": [
35
+ { "classification": "crm", "when": "Use Contacts for person records that do not need login identity." },
36
+ { "classification": "cms", "when": "Use for author profiles or member metadata not represented by Members APIs." }
37
+ ],
38
+ "reliability": { "status": "unreliable", "flags": ["IMPORT_UNRELIABLE"] },
39
+ "pitfalls": [
40
+ { "code": "passwords-never-imported", "severity": "warning", "summary": "Passwords are NOT imported — project decision (2026-08-03), not just an API gap. Members keep account/profile/contact linkage; they set a new password via reset. Never propose hash import." },
41
+ { "code": "activation-via-forgot-password", "severity": "warning", "summary": "Activation (decided 2026-08-03): passwordless members complete the standard forgot-password flow (confirmed). Delivery = post-import automation (label-added trigger, owner-branded email, label applied in API waves). Never mass-send Send Set Password Email — its link dies in 3h." },
42
+ { "code": "serial-create-only", "severity": "warning", "summary": "No bulk member create; documented >=1s spacing per Create Member call (10k members ~ 3h serial floor). Plan throughput and resume via loginEmail crosswalk." },
43
+ { "code": "chronology-server-controlled", "severity": "warning", "summary": "Original createdDate and lastLoginDate are not writable as native member chronology." }
44
+ ],
45
+ "mappingGuidance": [
46
+ "Split author, customer, contact, and login-member roles before selecting targets.",
47
+ "Create Member sends no email and does not fire the signup automations trigger (source-confirmed) — silent import is the default; the only member-facing email is the explicit Send Set Password Email call, which is per-member, interactive-mode, owner-approved only."
48
+ ],
49
+ "setupRequirements": ["Activation is decided end-to-end: no credential import; post-import the owner creates ONE dashboard automation (label-added trigger → branded email directing members to Log in → Forgot password), then the importer applies the label in API waves for rate control and re-targeting. Enable the automation only after the import window (AUTO-02 pause choreography)."],
50
+ "evidence": [
51
+ { "type": "repo-research", "path": "research/import-api-suitability/orders-contacts-members.md" }
52
+ ]
53
+ }
@@ -0,0 +1,84 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://wix.com/replatform/domain-knowledge.schema.json",
4
+ "title": "RePlatform Wix Domain Knowledge Entity",
5
+ "type": "object",
6
+ "additionalProperties": true,
7
+ "required": [
8
+ "schemaVersion",
9
+ "domain",
10
+ "entity",
11
+ "displayName",
12
+ "target",
13
+ "sourceAliases",
14
+ "preferredWrite",
15
+ "reliability",
16
+ "pitfalls",
17
+ "mappingGuidance",
18
+ "evidence"
19
+ ],
20
+ "properties": {
21
+ "schemaVersion": { "const": 1 },
22
+ "domain": { "type": "string", "minLength": 1 },
23
+ "entity": { "type": "string", "minLength": 1 },
24
+ "displayName": { "type": "string", "minLength": 1 },
25
+ "target": {
26
+ "type": "object",
27
+ "required": ["classification", "idPolicy", "crosswalkRequired"],
28
+ "properties": {
29
+ "classification": {
30
+ "enum": [
31
+ "native",
32
+ "cms",
33
+ "native-plus-cms",
34
+ "setup-config",
35
+ "skip-by-default",
36
+ "unsupported-native-gap"
37
+ ]
38
+ },
39
+ "nativeEntity": { "type": ["string", "null"] },
40
+ "verifiedFqdn": { "type": ["string", "null"] },
41
+ "idPolicy": {
42
+ "enum": ["client-assigned", "server-assigned", "natural-key", "not-applicable"]
43
+ },
44
+ "crosswalkRequired": { "type": "boolean" }
45
+ }
46
+ },
47
+ "preferredWrite": {
48
+ "type": "object",
49
+ "required": ["surface", "endpoint", "writerId", "verification", "importSafe", "bulk"],
50
+ "properties": {
51
+ "surface": { "type": "string" },
52
+ "endpoint": { "type": ["string", "null"] },
53
+ "writerId": { "type": ["string", "null"] },
54
+ "verification": {
55
+ "enum": ["verified-live", "docs", "source-review", "internal-only", "unverified", "none"]
56
+ },
57
+ "importSafe": { "type": "boolean" },
58
+ "bulk": { "type": "boolean" }
59
+ }
60
+ },
61
+ "reliability": {
62
+ "type": "object",
63
+ "required": ["status", "flags"],
64
+ "properties": {
65
+ "status": { "enum": ["reliable", "partially-reliable", "unreliable", "unknown"] },
66
+ "flags": { "type": "array", "items": { "type": "string" } }
67
+ }
68
+ },
69
+ "safeModeContactFields": {
70
+ "type": "array",
71
+ "items": {
72
+ "type": "object",
73
+ "required": ["kind", "targetPath", "source"],
74
+ "properties": {
75
+ "kind": { "enum": ["email", "phone"] },
76
+ "targetPath": { "type": "string", "minLength": 1 },
77
+ "source": { "type": "string", "minLength": 1 },
78
+ "notes": { "type": "string" }
79
+ },
80
+ "additionalProperties": true
81
+ }
82
+ }
83
+ }
84
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "domain": "stores",
4
+ "displayName": "Wix Stores",
5
+ "ownerHint": "Stores Catalog, Inventory, Coupons, Tags, and merchandising domain owners",
6
+ "wixAppsRequired": ["Wix Stores"],
7
+ "defaultImportOrder": ["category", "product-tag", "product", "inventory-item", "coupon"],
8
+ "sharedPitfalls": [
9
+ {
10
+ "code": "catalog-version-required",
11
+ "severity": "blocker",
12
+ "summary": "Catalog V3 only — Catalog V1 is unsupported. Confirm catalogVersion is V3_CATALOG (GET /stores/v3/provision/version) before any Stores write; V1_CATALOG halts the run, it is never mapped or coded around."
13
+ }
14
+ ],
15
+ "evidence": [
16
+ {
17
+ "type": "repo-research",
18
+ "path": "research/import-api-suitability/stores-catalog-inventory.md"
19
+ },
20
+ {
21
+ "type": "repo-research",
22
+ "path": "research/source-entity-import-suitability-wordpress-woocommerce-wix.md"
23
+ }
24
+ ]
25
+ }
@@ -0,0 +1,37 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "domain": "stores",
4
+ "entity": "category",
5
+ "displayName": "Stores Category",
6
+ "target": {
7
+ "classification": "native",
8
+ "nativeEntity": "Stores Category",
9
+ "verifiedFqdn": null,
10
+ "idPolicy": "server-assigned",
11
+ "crosswalkRequired": true
12
+ },
13
+ "sourceAliases": [
14
+ { "sourceSystem": "woocommerce", "sourceEntity": "product_category", "routes": ["/wc/v3/products/categories"], "confidence": "high" },
15
+ { "sourceSystem": "wix", "sourceEntity": "storesCategory", "routes": ["Catalog V3 Categories", "V1 collections"], "confidence": "high" }
16
+ ],
17
+ "preferredWrite": {
18
+ "surface": "Categories",
19
+ "endpoint": "POST /categories/v1/categories",
20
+ "writerId": "createStoresCategory",
21
+ "verification": "verified-live",
22
+ "importSafe": true,
23
+ "bulk": false
24
+ },
25
+ "fallbacks": [
26
+ { "classification": "cms", "when": "Use only for source taxonomy metadata or hierarchy details not represented by Stores categories." }
27
+ ],
28
+ "reliability": { "status": "reliable", "flags": [] },
29
+ "pitfalls": [
30
+ { "code": "tree-reference-top-level", "severity": "blocker", "summary": "Pass Stores treeReference as a top-level sibling of category." }
31
+ ],
32
+ "mappingGuidance": ["Preserve hierarchy where the target category tree supports it; create before products."],
33
+ "setupRequirements": ["Wix Stores app"],
34
+ "evidence": [
35
+ { "type": "repo-research", "path": "research/import-api-suitability/stores-catalog-inventory.md" }
36
+ ]
37
+ }
@@ -0,0 +1,37 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "domain": "stores",
4
+ "entity": "coupon",
5
+ "displayName": "Stores Coupon",
6
+ "target": {
7
+ "classification": "native-plus-cms",
8
+ "nativeEntity": "Stores Coupon",
9
+ "verifiedFqdn": null,
10
+ "idPolicy": "server-assigned",
11
+ "crosswalkRequired": true
12
+ },
13
+ "sourceAliases": [
14
+ { "sourceSystem": "woocommerce", "sourceEntity": "coupon", "routes": ["/wc/v3/coupons"], "confidence": "high" },
15
+ { "sourceSystem": "wix", "sourceEntity": "coupon", "routes": ["Coupons API"], "confidence": "high" }
16
+ ],
17
+ "preferredWrite": {
18
+ "surface": "Coupons",
19
+ "endpoint": "POST /stores/v2/coupons",
20
+ "writerId": "createCoupon",
21
+ "verification": "unverified",
22
+ "importSafe": true,
23
+ "bulk": false
24
+ },
25
+ "fallbacks": [
26
+ { "classification": "cms", "when": "Use for unsupported source constraints, audit detail, or manual setup notes." }
27
+ ],
28
+ "reliability": { "status": "partially-reliable", "flags": [] },
29
+ "pitfalls": [
30
+ { "code": "constraint-coverage", "severity": "warning", "summary": "Source coupon constraints may be narrower or differently modeled in Wix." }
31
+ ],
32
+ "mappingGuidance": ["Prefer native coupons and record unsupported conditions as CMS shadow fields or setup gaps."],
33
+ "setupRequirements": ["Wix Stores app"],
34
+ "evidence": [
35
+ { "type": "repo-research", "path": "research/import-api-suitability/stores-catalog-inventory.md" }
36
+ ]
37
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "domain": "stores",
4
+ "entity": "inventory-item",
5
+ "displayName": "Stores Inventory Item",
6
+ "target": {
7
+ "classification": "native",
8
+ "nativeEntity": "Stores Inventory Item",
9
+ "verifiedFqdn": null,
10
+ "idPolicy": "server-assigned",
11
+ "crosswalkRequired": true
12
+ },
13
+ "sourceAliases": [
14
+ { "sourceSystem": "woocommerce", "sourceEntity": "product_variation_inventory", "routes": ["/wc/v3/products", "/wc/v3/products/{productId}/variations"], "confidence": "medium" },
15
+ { "sourceSystem": "wix", "sourceEntity": "inventoryItem", "routes": ["Stores Inventory APIs"], "confidence": "high" }
16
+ ],
17
+ "preferredWrite": {
18
+ "surface": "Stores Inventory V3",
19
+ "endpoint": "POST /stores/v3/inventory-items",
20
+ "writerId": "createInventoryItem",
21
+ "verification": "unverified",
22
+ "importSafe": true,
23
+ "bulk": false
24
+ },
25
+ "fallbacks": [
26
+ { "classification": "cms", "when": "Use for source stock history or multi-location detail not represented by the selected target inventory plan." }
27
+ ],
28
+ "reliability": { "status": "partially-reliable", "flags": [] },
29
+ "pitfalls": [
30
+ { "code": "product-first", "severity": "blocker", "summary": "Inventory requires target product and variant IDs." },
31
+ { "code": "bis-side-effects", "severity": "warning", "summary": "Avoid stock transitions that trigger Back in Stock notifications on live stores." }
32
+ ],
33
+ "mappingGuidance": ["Create products first, then create or update inventory per variant."],
34
+ "setupRequirements": ["SCOPE.STORES.INVENTORY_ITEM_WRITE"],
35
+ "evidence": [
36
+ { "type": "repo-research", "path": "research/import-api-suitability/stores-catalog-inventory.md" }
37
+ ]
38
+ }
@@ -0,0 +1,37 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "domain": "stores",
4
+ "entity": "product-tag",
5
+ "displayName": "Stores Product Tag",
6
+ "target": {
7
+ "classification": "native",
8
+ "nativeEntity": "Wix Tag",
9
+ "verifiedFqdn": "wix.stores.catalog.v3.product",
10
+ "idPolicy": "server-assigned",
11
+ "crosswalkRequired": true
12
+ },
13
+ "sourceAliases": [
14
+ { "sourceSystem": "woocommerce", "sourceEntity": "product_tag", "routes": ["/wc/v3/products/tags"], "confidence": "high" },
15
+ { "sourceSystem": "wix", "sourceEntity": "productTag", "routes": ["Tags API scoped to product FQDN"], "confidence": "high" }
16
+ ],
17
+ "preferredWrite": {
18
+ "surface": "Tags",
19
+ "endpoint": "POST /tags/v1/tags",
20
+ "writerId": null,
21
+ "verification": "unverified",
22
+ "importSafe": true,
23
+ "bulk": false
24
+ },
25
+ "fallbacks": [
26
+ { "classification": "cms", "when": "Use only for source tag metadata not represented by Wix Tags." }
27
+ ],
28
+ "reliability": { "status": "partially-reliable", "flags": [] },
29
+ "pitfalls": [
30
+ { "code": "fqdn-required", "severity": "blocker", "summary": "Use the verified product FQDN and resolve tag IDs before attaching them to products." }
31
+ ],
32
+ "mappingGuidance": ["Create tags before products; attach tag IDs through product publicTags when supported."],
33
+ "setupRequirements": ["Wix Stores app"],
34
+ "evidence": [
35
+ { "type": "repo-research", "path": "research/import-api-suitability/stores-catalog-inventory.md" }
36
+ ]
37
+ }
@@ -0,0 +1,90 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "domain": "stores",
4
+ "entity": "product",
5
+ "displayName": "Stores Product",
6
+ "target": {
7
+ "classification": "native-plus-cms",
8
+ "nativeEntity": "Stores Product",
9
+ "verifiedFqdn": "wix.stores.catalog.v3.product",
10
+ "idPolicy": "server-assigned",
11
+ "crosswalkRequired": true
12
+ },
13
+ "sourceAliases": [
14
+ { "sourceSystem": "woocommerce", "sourceEntity": "product", "routes": ["/wc/v3/products"], "confidence": "high" },
15
+ { "sourceSystem": "wix", "sourceEntity": "storesProduct", "routes": ["Stores Catalog V1 Products", "Stores Catalog V3 Products"], "confidence": "high" }
16
+ ],
17
+ "preferredWrite": {
18
+ "surface": "Stores Catalog V3 Products",
19
+ "endpoint": "POST /stores/v3/products",
20
+ "writerId": "createStoresProduct",
21
+ "verification": "verified-live",
22
+ "importSafe": true,
23
+ "bulk": false
24
+ },
25
+ "fieldContracts": [
26
+ {
27
+ "domain": "stores",
28
+ "entity": "product",
29
+ "surface": "catalog-v3",
30
+ "operation": "createProduct",
31
+ "path": "product.subscriptionDetails",
32
+ "verificationLevel": "live-create-and-readback",
33
+ "lastVerified": "2026-07-26",
34
+ "verifiedBy": "migration-20260726-01",
35
+ "requiredPaths": [
36
+ "product.subscriptionDetails.allowOneTimePurchases",
37
+ "product.subscriptionDetails.subscriptions[]",
38
+ "product.subscriptionDetails.subscriptions[].title",
39
+ "product.subscriptionDetails.subscriptions[].description",
40
+ "product.subscriptionDetails.subscriptions[].frequency",
41
+ "product.subscriptionDetails.subscriptions[].interval",
42
+ "product.subscriptionDetails.subscriptions[].autoRenewal"
43
+ ],
44
+ "constraints": [
45
+ {
46
+ "path": "product.subscriptionDetails.subscriptions[].description",
47
+ "maxLength": 60,
48
+ "source": "live-validation"
49
+ },
50
+ {
51
+ "path": "product.subscriptionDetails.subscriptions[].frequency",
52
+ "enum": ["DAY", "WEEK", "MONTH", "YEAR"],
53
+ "source": "live-create"
54
+ },
55
+ {
56
+ "path": "product.subscriptionDetails.subscriptions[].interval",
57
+ "minimum": 1,
58
+ "integer": true,
59
+ "source": "live-create"
60
+ }
61
+ ],
62
+ "readback": {
63
+ "product.subscriptionDetails": "returned-after-create",
64
+ "product.subscriptionDetails.subscriptions[].id": "server-assigned",
65
+ "product.subscriptionDetails.subscriptions[].title": "preserved",
66
+ "product.subscriptionDetails.subscriptions[].description": "preserved",
67
+ "product.subscriptionDetails.subscriptions[].frequency": "preserved",
68
+ "product.subscriptionDetails.subscriptions[].interval": "preserved",
69
+ "product.subscriptionDetails.subscriptions[].autoRenewal": "preserved"
70
+ }
71
+ }
72
+ ],
73
+ "fallbacks": [
74
+ { "classification": "cms", "when": "Use for plugin rules, source-only metadata, or catalog semantics that do not fit product extended fields." }
75
+ ],
76
+ "reliability": { "status": "partially-reliable", "flags": [] },
77
+ "pitfalls": [
78
+ { "code": "catalog-v3-normalization", "severity": "blocker", "summary": "Normalize V1/simple product fields into Catalog V3 product and variant shapes before create." },
79
+ { "code": "variant-matrix-two-pass", "severity": "warning", "summary": "Full variable product matrices require a post-create option-choice and variant pass." }
80
+ ],
81
+ "mappingGuidance": [
82
+ "Create categories, tags, and media references before products when the source uses them.",
83
+ "Preserve recurring offers natively via product.subscriptionDetails.subscriptions[] when the source exposes clear cadence data; live create coverage was verified on July 26, 2026, while patch/update coverage remains unverified."
84
+ ],
85
+ "setupRequirements": ["Wix Stores app", "Product data extension schema when source-only product fields are preserved natively."],
86
+ "evidence": [
87
+ { "type": "repo-research", "path": "research/import-api-suitability/stores-catalog-inventory.md" },
88
+ { "type": "repo-research", "path": "research/source-entity-import-suitability-wordpress-woocommerce-wix.md" }
89
+ ]
90
+ }
@@ -0,0 +1,64 @@
1
+ 'use strict';
2
+
3
+ const fs = require('fs');
4
+
5
+ function createBucket() {
6
+ return {
7
+ total: 0,
8
+ ok: 0,
9
+ created: 0,
10
+ updated: 0,
11
+ skipped: 0,
12
+ failed: 0,
13
+ retried: 0,
14
+ throttled: 0,
15
+ };
16
+ }
17
+
18
+ function statusOf(event) {
19
+ return event.status || event.resultStatus || event.result || 'unknown';
20
+ }
21
+
22
+ function entityOf(event) {
23
+ return event.entity || event.entityKey || event.sourceEntity || 'unknown';
24
+ }
25
+
26
+ function summarizeAuditEvents(events, { runId } = {}) {
27
+ if (!runId) {
28
+ throw new Error('summarizeAuditEvents requires runId; append-only audit logs may contain multiple attempts.');
29
+ }
30
+ const summary = {};
31
+ for (const event of events) {
32
+ if (!event || event.runId !== runId) continue;
33
+ const entity = entityOf(event);
34
+ const status = statusOf(event);
35
+ if (!summary[entity]) summary[entity] = createBucket();
36
+ summary[entity].total += 1;
37
+ if (Object.prototype.hasOwnProperty.call(summary[entity], status)) {
38
+ summary[entity][status] += 1;
39
+ }
40
+ }
41
+ return summary;
42
+ }
43
+
44
+ function readAuditNdjson(filePath) {
45
+ const text = fs.readFileSync(filePath, 'utf8').trim();
46
+ if (!text) return [];
47
+ return text.split('\n').filter(Boolean).map((line, index) => {
48
+ try {
49
+ return JSON.parse(line);
50
+ } catch (error) {
51
+ throw new Error(`Invalid audit JSON at line ${index + 1}: ${error.message}`);
52
+ }
53
+ });
54
+ }
55
+
56
+ function summarizeAuditFile(filePath, options) {
57
+ return summarizeAuditEvents(readAuditNdjson(filePath), options);
58
+ }
59
+
60
+ module.exports = {
61
+ summarizeAuditEvents,
62
+ summarizeAuditFile,
63
+ readAuditNdjson,
64
+ };
@@ -0,0 +1,141 @@
1
+ 'use strict';
2
+
3
+ const fs = require('node:fs');
4
+ const path = require('node:path');
5
+ const { readEntityByRef } = require('./domain-knowledge.js');
6
+
7
+ const SCHEMA_VERSION = 1;
8
+
9
+ function normalizePathPresence(verifiedPaths = []) {
10
+ return verifiedPaths
11
+ .filter((entry) => entry && entry.path && entry.present !== false)
12
+ .map((entry) => entry.path);
13
+ }
14
+
15
+ function createContractLedgerProposalFromStoresVerification(artifact) {
16
+ if (!artifact || typeof artifact !== 'object') {
17
+ throw new Error('verification artifact is required');
18
+ }
19
+ if (artifact.command !== 'stores subscription-create') {
20
+ throw new Error(`unsupported verification command: ${artifact.command || '<missing>'}`);
21
+ }
22
+ const verifiedPaths = normalizePathPresence(artifact.verifiedPaths);
23
+ return {
24
+ schemaVersion: SCHEMA_VERSION,
25
+ proposalId: `stores-product-subscription-create-${(artifact.timestamp || new Date().toISOString()).slice(0, 10)}`,
26
+ status: artifact.status === 'passed' ? 'proposed' : 'blocked',
27
+ sourceVerification: {
28
+ command: artifact.command,
29
+ artifactPath: artifact.artifactPath || null,
30
+ targetSiteIdentifier: artifact.targetSiteIdentifier || null,
31
+ timestamp: artifact.timestamp || null,
32
+ probeRecordId: artifact.probeRecordId || null,
33
+ },
34
+ targetRef: 'stores/product',
35
+ fieldContract: {
36
+ domain: 'stores',
37
+ entity: 'product',
38
+ surface: 'catalog-v3',
39
+ operation: 'createProduct',
40
+ path: 'product.subscriptionDetails',
41
+ verificationLevel: 'live-create-and-readback',
42
+ lastVerified: artifact.timestamp ? artifact.timestamp.slice(0, 10) : null,
43
+ verifiedBy: artifact.targetSiteIdentifier || artifact.sourceRunId || 'live-verification',
44
+ requiredPaths: verifiedPaths.filter((entry) => entry !== 'product.subscriptionDetails.subscriptions[].id'),
45
+ constraints: Array.isArray(artifact.constraintsDiscovered)
46
+ ? artifact.constraintsDiscovered.map((constraint) => ({ ...constraint }))
47
+ : [],
48
+ readback: {
49
+ 'product.subscriptionDetails': verifiedPaths.includes('product.subscriptionDetails') ? 'returned-after-create' : 'unverified',
50
+ 'product.subscriptionDetails.subscriptions[].id': verifiedPaths.includes('product.subscriptionDetails.subscriptions[].id') ? 'server-assigned' : 'unverified',
51
+ },
52
+ },
53
+ };
54
+ }
55
+
56
+ function proposalKey(proposal) {
57
+ const contract = proposal && proposal.fieldContract;
58
+ return [
59
+ proposal && proposal.targetRef,
60
+ contract && contract.surface,
61
+ contract && contract.operation,
62
+ contract && contract.path,
63
+ ].join('|');
64
+ }
65
+
66
+ function contractKey(contract, entity) {
67
+ return [
68
+ `${contract.domain || (entity && entity.domain)}/${contract.entity || (entity && entity.entity)}`,
69
+ contract.surface,
70
+ contract.operation,
71
+ contract.path,
72
+ ].join('|');
73
+ }
74
+
75
+ function promotedContractForProposal(domainsDir, proposal) {
76
+ if (!proposal || !proposal.targetRef || !proposal.fieldContract) return null;
77
+ const entity = readEntityByRef(domainsDir, proposal.targetRef);
78
+ return (entity.fieldContracts || []).find((contract) => contractKey(contract, entity) === proposalKey(proposal)) || null;
79
+ }
80
+
81
+ function isProposalPromoted(domainsDir, proposal) {
82
+ let promoted;
83
+ try {
84
+ promoted = promotedContractForProposal(domainsDir, proposal);
85
+ } catch (error) {
86
+ return false;
87
+ }
88
+ if (!promoted) return false;
89
+ const expected = proposal.fieldContract || {};
90
+ return promoted.verificationLevel === expected.verificationLevel;
91
+ }
92
+
93
+ function readJsonIfExists(filePath) {
94
+ if (!filePath || !fs.existsSync(filePath)) return null;
95
+ return JSON.parse(fs.readFileSync(filePath, 'utf8'));
96
+ }
97
+
98
+ function writeProposal(filePath, proposal) {
99
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
100
+ fs.writeFileSync(filePath, `${JSON.stringify(proposal, null, 2)}\n`);
101
+ return proposal;
102
+ }
103
+
104
+ function validateContractPromotion({ domainsDir, verificationArtifacts = [], proposalArtifacts = [] } = {}) {
105
+ const errors = [];
106
+ const proposals = proposalArtifacts
107
+ .map((artifactPath) => ({ artifactPath, proposal: readJsonIfExists(artifactPath) }))
108
+ .filter((entry) => entry.proposal);
109
+ const proposalsByVerification = new Map();
110
+ for (const { proposal, artifactPath } of proposals) {
111
+ const sourcePath = proposal.sourceVerification && proposal.sourceVerification.artifactPath;
112
+ if (sourcePath) proposalsByVerification.set(path.resolve(sourcePath), { proposal, artifactPath });
113
+ }
114
+
115
+ for (const artifactPath of verificationArtifacts) {
116
+ const artifact = readJsonIfExists(artifactPath);
117
+ if (!artifact || artifact.status !== 'passed') continue;
118
+ if (artifact.command !== 'stores subscription-create') continue;
119
+ const proposalEntry = proposalsByVerification.get(path.resolve(artifactPath));
120
+ if (!proposalEntry) {
121
+ errors.push(`${artifactPath}: passed verification is missing contract-ledger proposal`);
122
+ continue;
123
+ }
124
+ const { proposal } = proposalEntry;
125
+ if (proposal.status === 'deferred' || proposal.deferralReason) continue;
126
+ if (!isProposalPromoted(domainsDir, proposal)) {
127
+ errors.push(`${proposalEntry.artifactPath}: proposal is not promoted into shared target ledger`);
128
+ }
129
+ }
130
+
131
+ return { ok: errors.length === 0, errors };
132
+ }
133
+
134
+ module.exports = {
135
+ SCHEMA_VERSION,
136
+ createContractLedgerProposalFromStoresVerification,
137
+ promotedContractForProposal,
138
+ isProposalPromoted,
139
+ validateContractPromotion,
140
+ writeProposal,
141
+ };