@wix/agent-skills 1.14.0 → 1.15.1

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 (268) hide show
  1. package/README.md +12 -1
  2. package/package.json +1 -1
  3. package/skills/README.md +23 -0
  4. package/skills/wix-app/SKILL.md +10 -2
  5. package/skills/wix-app/references/AUTO_PATTERNS_DASHBOARD.md +326 -0
  6. package/skills/wix-app/references/CODE_QUALITY.md +1 -0
  7. package/skills/wix-app/references/CUSTOM_ELEMENT_WIDGET.md +124 -115
  8. package/skills/wix-app/references/DASHBOARD_PAGE.md +3 -0
  9. package/skills/wix-app/references/DATA_COLLECTION.md +5 -3
  10. package/skills/wix-app/references/EDITOR_REACT_COMPONENT.md +25 -9
  11. package/skills/wix-app/references/SITE_PLUGIN.md +1 -1
  12. package/skills/wix-app/references/STORES_VERSIONING.md +9 -211
  13. package/skills/wix-app/references/auto-patterns-dashboard/action-cell.md +115 -0
  14. package/skills/wix-app/references/auto-patterns-dashboard/app-config-structure.md +264 -0
  15. package/skills/wix-app/references/auto-patterns-dashboard/app-context.md +37 -0
  16. package/skills/wix-app/references/auto-patterns-dashboard/bulk-actions.md +86 -0
  17. package/skills/wix-app/references/auto-patterns-dashboard/collection-page-actions.md +119 -0
  18. package/skills/wix-app/references/auto-patterns-dashboard/collection-page.md +103 -0
  19. package/skills/wix-app/references/auto-patterns-dashboard/custom-actions-override.md +76 -0
  20. package/skills/wix-app/references/auto-patterns-dashboard/custom-columns-override.md +82 -0
  21. package/skills/wix-app/references/auto-patterns-dashboard/custom-components-override.md +89 -0
  22. package/skills/wix-app/references/auto-patterns-dashboard/custom-header-override.md +124 -0
  23. package/skills/wix-app/references/auto-patterns-dashboard/custom-sections-override.md +91 -0
  24. package/skills/wix-app/references/auto-patterns-dashboard/custom-slots-override.md +71 -0
  25. package/skills/wix-app/references/auto-patterns-dashboard/entity-page-actions.md +70 -0
  26. package/skills/wix-app/references/auto-patterns-dashboard/entity-page-view-actions.md +73 -0
  27. package/skills/wix-app/references/auto-patterns-dashboard/entity-page.md +98 -0
  28. package/skills/wix-app/references/auto-patterns-dashboard/example-patterns.json +278 -0
  29. package/skills/wix-app/references/auto-patterns-dashboard/pages-configuration.md +94 -0
  30. package/skills/wix-app/references/auto-patterns-dashboard/resolved-action.md +43 -0
  31. package/skills/wix-app/references/auto-patterns-dashboard/sdk-utilities.md +66 -0
  32. package/skills/wix-app/references/auto-patterns-dashboard/views.md +76 -0
  33. package/skills/wix-app/references/backend-event/COMMON-EVENTS.md +5 -0
  34. package/skills/wix-app/references/editor-react-component/ACCESSIBILITY.md +1 -14
  35. package/skills/wix-app/references/editor-react-component/ANIMATED-COMPONENTS.md +151 -0
  36. package/skills/wix-app/references/editor-react-component/COMPONENT-API.md +54 -29
  37. package/skills/wix-app/references/editor-react-component/COMPONENT-CONFIGURATION.md +2 -2
  38. package/skills/wix-app/references/editor-react-component/COMPONENT-PREVIEW.md +57 -0
  39. package/skills/wix-app/references/editor-react-component/CSS-GUIDELINES.md +23 -105
  40. package/skills/wix-app/references/editor-react-component/DESIGN-STATES.md +127 -0
  41. package/skills/wix-app/references/editor-react-component/PARTS.md +2 -1
  42. package/skills/wix-app/references/editor-react-component/REACT-GUIDELINES.md +18 -16
  43. package/skills/wix-app/references/editor-react-component/REACT-PATTERNS.md +25 -53
  44. package/skills/wix-app/references/stores/CATEGORIES.md +22 -0
  45. package/skills/wix-app/references/stores/GET_PRODUCT.md +99 -0
  46. package/skills/wix-app/references/stores/INVENTORY.md +37 -0
  47. package/skills/wix-app/references/stores/QUERY.md +87 -0
  48. package/skills/wix-app/references/stores/WRITE.md +55 -0
  49. package/skills/wix-app/scripts/generate-auto-patterns.js +510 -0
  50. package/skills/wix-auth/SKILL.md +12 -0
  51. package/skills/wix-auth/references/device-flow.md +140 -0
  52. package/skills/wix-docs/SKILL.md +188 -0
  53. package/skills/wix-docs/references/API_SPEC_SEARCH.md +213 -0
  54. package/skills/wix-docs/references/EXTRACTING.md +120 -0
  55. package/skills/wix-headless/SKILL.md +89 -130
  56. package/skills/wix-headless/entry/bootstrap.mjs +93 -0
  57. package/skills/wix-headless/entry/skill.md +76 -0
  58. package/skills/wix-headless/references/AI_FEATURES.md +178 -0
  59. package/skills/wix-headless/references/CAPABILITIES.md +86 -0
  60. package/skills/wix-headless/references/DISCOVERY.md +34 -56
  61. package/skills/wix-headless/references/DOC_DISCOVERY.md +37 -0
  62. package/skills/wix-headless/references/FEEDBACK.md +129 -0
  63. package/skills/wix-headless/references/IMAGE_GENERATION.md +69 -0
  64. package/skills/wix-headless/references/SDK_HANDOFF.md +99 -0
  65. package/skills/wix-headless/references/SEED.md +45 -187
  66. package/skills/wix-headless/references/SETUP.md +32 -103
  67. package/skills/wix-headless/references/astro.md +98 -0
  68. package/skills/wix-headless/references/inline-recipes/how-to-code-a-blog.md +196 -0
  69. package/skills/wix-headless/references/inline-recipes/how-to-code-a-store.md +236 -0
  70. package/skills/wix-headless/references/inline-recipes/how-to-code-bookings.md +279 -0
  71. package/skills/wix-headless/references/inline-recipes/how-to-code-cms.md +163 -0
  72. package/skills/wix-headless/references/inline-recipes/how-to-code-events.md +203 -0
  73. package/skills/wix-headless/references/inline-recipes/how-to-code-forms.md +222 -0
  74. package/skills/wix-headless/references/inline-recipes/how-to-code-members-astro.md +124 -0
  75. package/skills/wix-headless/references/inline-recipes/how-to-code-members-custom-login.md +160 -0
  76. package/skills/wix-headless/references/inline-recipes/how-to-code-members-non-astro.md +118 -0
  77. package/skills/wix-headless/references/inline-recipes/how-to-code-portfolio.md +132 -0
  78. package/skills/wix-headless/references/inline-recipes/how-to-code-pricing-plans.md +124 -0
  79. package/skills/wix-headless/references/inline-recipes/how-to-code-restaurant-orders.md +188 -0
  80. package/skills/wix-headless/references/inline-recipes/how-to-code-restaurant-reservations.md +213 -0
  81. package/skills/wix-headless/references/inline-recipes/how-to-code-restaurants.md +161 -0
  82. package/skills/wix-headless/references/inline-recipes/setup-blog.md +175 -0
  83. package/skills/wix-headless/references/inline-recipes/setup-bookings.md +232 -0
  84. package/skills/wix-headless/references/inline-recipes/setup-cms.md +200 -0
  85. package/skills/wix-headless/references/inline-recipes/setup-events.md +196 -0
  86. package/skills/wix-headless/references/inline-recipes/setup-forms.md +174 -0
  87. package/skills/wix-headless/references/inline-recipes/setup-online-store.md +192 -0
  88. package/skills/wix-headless/references/inline-recipes/setup-portfolio.md +155 -0
  89. package/skills/wix-headless/references/inline-recipes/setup-pricing-plans.md +229 -0
  90. package/skills/wix-headless/references/inline-recipes/setup-restaurant-experiences.md +73 -0
  91. package/skills/wix-headless/references/inline-recipes/setup-restaurant-orders.md +197 -0
  92. package/skills/wix-headless/references/inline-recipes/setup-restaurant-reservations.md +136 -0
  93. package/skills/wix-headless/references/inline-recipes/setup-restaurants.md +152 -0
  94. package/skills/wix-headless/references/managed/AUTHENTICATION.md +57 -0
  95. package/skills/wix-headless/references/managed/CONNECT.md +74 -0
  96. package/skills/wix-headless/references/managed/CREATE.md +130 -0
  97. package/skills/wix-headless/references/managed/DEPLOYMENT.md +79 -0
  98. package/skills/wix-headless/references/non-astro.md +59 -0
  99. package/skills/wix-headless/references/self-managed/AUTHENTICATION.md +22 -0
  100. package/skills/wix-headless/references/self-managed/DEPLOYMENT.md +15 -0
  101. package/skills/wix-headless/references/stripe/AUTHENTICATION.md +55 -0
  102. package/skills/wix-headless/references/stripe/DEPLOYMENT.md +71 -0
  103. package/skills/wix-manage/SKILL.md +29 -3
  104. package/skills/wix-manage/references/analytics/query-site-analytics.md +298 -0
  105. package/skills/wix-manage/references/app-installation/install-wix-apps.md +3 -0
  106. package/skills/wix-manage/references/bookings/create-and-update-booking-services.md +1 -1
  107. package/skills/wix-manage/references/bookings/create-booking-service-from-prompt.md +6 -5
  108. package/skills/wix-manage/references/bookings/create-course-service.md +30 -5
  109. package/skills/wix-manage/references/bookings/diagnose-availability-issues.md +299 -0
  110. package/skills/wix-manage/references/cms/cms-schema-management.md +6 -0
  111. package/skills/wix-manage/references/get-paid/how-to-setup-wix-payments.md +30 -7
  112. package/skills/wix-manage/references/marketing/create-and-publish-social-post.md +517 -0
  113. package/skills/wix-manage/references/marketing/generate-and-publish-marketing-plan.md +218 -0
  114. package/skills/wix-manage/references/rich-content/author-ricos-rich-content.md +249 -0
  115. package/skills/wix-manage/references/sites/site-import.md +270 -0
  116. package/skills/wix-manage/references/stores/create-product-from-image.md +8 -6
  117. package/skills/wix-manage/references/stores/create-product-with-options-catalog-v3.md +57 -0
  118. package/skills/wix-vibe-headless/SKILL.md +142 -0
  119. package/skills/wix-vibe-headless/platforms/README.md +22 -0
  120. package/skills/wix-vibe-headless/platforms/base44.md +142 -0
  121. package/skills/wix-vibe-headless/platforms/generic.md +87 -0
  122. package/skills/wix-vibe-headless/references/blog/INSTRUCTIONS.md +128 -0
  123. package/skills/wix-vibe-headless/references/blog/wix-blog.js +217 -0
  124. package/skills/wix-vibe-headless/references/bookings/INSTRUCTIONS.md +157 -0
  125. package/skills/wix-vibe-headless/references/bookings/wix-bookings-checkout.js +147 -0
  126. package/skills/wix-vibe-headless/references/bookings/wix-bookings-services.js +217 -0
  127. package/skills/wix-vibe-headless/references/cms/INSTRUCTIONS.md +154 -0
  128. package/skills/wix-vibe-headless/references/cms/wix-cms.js +186 -0
  129. package/skills/wix-vibe-headless/references/events/INSTRUCTIONS.md +142 -0
  130. package/skills/wix-vibe-headless/references/events/wix-events-browse.js +136 -0
  131. package/skills/wix-vibe-headless/references/events/wix-events-registration.js +187 -0
  132. package/skills/wix-vibe-headless/references/members/INSTRUCTIONS.md +211 -0
  133. package/skills/wix-vibe-headless/references/members/wix-members-auth.js +387 -0
  134. package/skills/wix-vibe-headless/references/portfolio/INSTRUCTIONS.md +111 -0
  135. package/skills/wix-vibe-headless/references/portfolio/wix-portfolio.js +223 -0
  136. package/skills/wix-vibe-headless/references/pricing-plans/INSTRUCTIONS.md +127 -0
  137. package/skills/wix-vibe-headless/references/pricing-plans/wix-pricing-plans.js +157 -0
  138. package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +138 -0
  139. package/skills/wix-vibe-headless/references/restaurants/wix-restaurants-menu.js +224 -0
  140. package/skills/wix-vibe-headless/references/restaurants/wix-restaurants-ordering.js +156 -0
  141. package/skills/wix-vibe-headless/references/restaurants/wix-restaurants-reservations.js +107 -0
  142. package/skills/wix-vibe-headless/references/shared/wix-client.js +186 -0
  143. package/skills/wix-vibe-headless/references/storefront/INSTRUCTIONS.md +164 -0
  144. package/skills/wix-vibe-headless/references/storefront/wix-store-cart.js +147 -0
  145. package/skills/wix-vibe-headless/references/storefront/wix-store-catalog.js +146 -0
  146. package/skills/wix-headless/references/BUILD-astro.md +0 -253
  147. package/skills/wix-headless/references/BUILD-own-build.md +0 -167
  148. package/skills/wix-headless/references/BUILD.md +0 -105
  149. package/skills/wix-headless/references/DESIGN_SYSTEM.md +0 -165
  150. package/skills/wix-headless/references/DISCOVERY-connect.md +0 -55
  151. package/skills/wix-headless/references/DISCOVERY-create.md +0 -238
  152. package/skills/wix-headless/references/PLAN-connect.md +0 -19
  153. package/skills/wix-headless/references/PLAN-create.md +0 -17
  154. package/skills/wix-headless/references/PLAN.md +0 -92
  155. package/skills/wix-headless/references/astro/blog/BLOG_PAGES.md +0 -300
  156. package/skills/wix-headless/references/astro/blog/BLOG_SETUP.md +0 -218
  157. package/skills/wix-headless/references/astro/bookings/COMPONENTS.md +0 -45
  158. package/skills/wix-headless/references/astro/bookings/SERVICES_PAGES.md +0 -77
  159. package/skills/wix-headless/references/astro/cms/CMS_FOUNDATIONS.md +0 -214
  160. package/skills/wix-headless/references/astro/cms/FAQ_KNOWLEDGE_BASE.md +0 -231
  161. package/skills/wix-headless/references/astro/cms/PORTFOLIO.md +0 -453
  162. package/skills/wix-headless/references/astro/cms/RESOURCE_LIBRARY.md +0 -354
  163. package/skills/wix-headless/references/astro/cms/TEAM_DIRECTORY.md +0 -299
  164. package/skills/wix-headless/references/astro/designer/INSTRUCTIONS.md +0 -351
  165. package/skills/wix-headless/references/astro/ecom/CART_PAGES.md +0 -119
  166. package/skills/wix-headless/references/astro/ecom/CART_WIRING.md +0 -103
  167. package/skills/wix-headless/references/astro/ecom/COMPONENTS_CSS.md +0 -132
  168. package/skills/wix-headless/references/astro/forms/CONTACT_FORM.md +0 -463
  169. package/skills/wix-headless/references/astro/gift-cards/COMPONENTS.md +0 -119
  170. package/skills/wix-headless/references/astro/gift-cards/PAGES.md +0 -129
  171. package/skills/wix-headless/references/astro/stores/BACK_IN_STOCK.md +0 -178
  172. package/skills/wix-headless/references/astro/stores/CATEGORY_PAGES.md +0 -85
  173. package/skills/wix-headless/references/astro/stores/COMPONENTS_CSS.md +0 -129
  174. package/skills/wix-headless/references/astro/stores/HOME_AND_NAV.md +0 -229
  175. package/skills/wix-headless/references/astro/stores/PRODUCT_PAGES.md +0 -215
  176. package/skills/wix-headless/references/astro/stores/SHARED_WIRING.md +0 -165
  177. package/skills/wix-headless/references/astro/templates/Layout.astro +0 -132
  178. package/skills/wix-headless/references/astro/templates/astro.config.mjs +0 -41
  179. package/skills/wix-headless/references/astro/templates/bookings/AvailabilityCalendar.tsx +0 -374
  180. package/skills/wix-headless/references/astro/templates/bookings/BookingForm.tsx +0 -136
  181. package/skills/wix-headless/references/astro/templates/bookings/SeoTags.astro +0 -25
  182. package/skills/wix-headless/references/astro/templates/bookings/ServiceBookingFlow.tsx +0 -71
  183. package/skills/wix-headless/references/astro/templates/bookings/ServiceCard.astro +0 -54
  184. package/skills/wix-headless/references/astro/templates/bookings/booking-confirmation.astro +0 -49
  185. package/skills/wix-headless/references/astro/templates/bookings/bookingDriver.ts +0 -245
  186. package/skills/wix-headless/references/astro/templates/bookings/components-bookings.css +0 -424
  187. package/skills/wix-headless/references/astro/templates/bookings/services/[slug].astro +0 -176
  188. package/skills/wix-headless/references/astro/templates/bookings/services/index.astro +0 -181
  189. package/skills/wix-headless/references/astro/templates/ecom/CartBadge.tsx +0 -84
  190. package/skills/wix-headless/references/astro/templates/ecom/CartView.tsx +0 -543
  191. package/skills/wix-headless/references/astro/templates/ecom/cart.astro +0 -13
  192. package/skills/wix-headless/references/astro/templates/ecom/components-ecom.css +0 -302
  193. package/skills/wix-headless/references/astro/templates/ecom/discounts.ts +0 -71
  194. package/skills/wix-headless/references/astro/templates/ecom/thank-you.astro +0 -24
  195. package/skills/wix-headless/references/astro/templates/gift-cards/GiftCardPurchase.tsx +0 -172
  196. package/skills/wix-headless/references/astro/templates/gift-cards/_home-teaser-snippet.astro +0 -42
  197. package/skills/wix-headless/references/astro/templates/gift-cards/_nav-snippet.astro +0 -11
  198. package/skills/wix-headless/references/astro/templates/gift-cards/components-gift-cards.css +0 -220
  199. package/skills/wix-headless/references/astro/templates/gift-cards/gift-cards.astro +0 -51
  200. package/skills/wix-headless/references/astro/templates/gift-cards/gift-cards.ts +0 -75
  201. package/skills/wix-headless/references/astro/templates/global.css +0 -288
  202. package/skills/wix-headless/references/astro/templates/stores/AddToCartButton.tsx +0 -77
  203. package/skills/wix-headless/references/astro/templates/stores/BackInStockForm.tsx +0 -176
  204. package/skills/wix-headless/references/astro/templates/stores/CategoryRail.astro +0 -69
  205. package/skills/wix-headless/references/astro/templates/stores/ProductCard.astro +0 -79
  206. package/skills/wix-headless/references/astro/templates/stores/ProductPurchase.tsx +0 -397
  207. package/skills/wix-headless/references/astro/templates/stores/SeoTags.astro +0 -21
  208. package/skills/wix-headless/references/astro/templates/stores/back-in-stock.ts +0 -67
  209. package/skills/wix-headless/references/astro/templates/stores/categories.ts +0 -155
  210. package/skills/wix-headless/references/astro/templates/stores/category/[slug].astro +0 -130
  211. package/skills/wix-headless/references/astro/templates/stores/components-stores.css +0 -400
  212. package/skills/wix-headless/references/astro/templates/stores/products/[slug].astro +0 -128
  213. package/skills/wix-headless/references/astro/templates/stores/products/index.astro +0 -101
  214. package/skills/wix-headless/references/blog/BLOG_CONTENT.md +0 -161
  215. package/skills/wix-headless/references/blog/INSTRUCTIONS.md +0 -32
  216. package/skills/wix-headless/references/bookings/FLOW.md +0 -246
  217. package/skills/wix-headless/references/bookings/INSTRUCTIONS.md +0 -95
  218. package/skills/wix-headless/references/bookings/SERVICES_DATA.md +0 -355
  219. package/skills/wix-headless/references/cms/CMS_FOUNDATIONS.md +0 -176
  220. package/skills/wix-headless/references/cms/INSTRUCTIONS.md +0 -71
  221. package/skills/wix-headless/references/commands/known-apps.json +0 -6
  222. package/skills/wix-headless/references/custom/CONNECTION_PLAN.md +0 -142
  223. package/skills/wix-headless/references/custom/INSTRUCTIONS.md +0 -88
  224. package/skills/wix-headless/references/custom/blog/WIRING.md +0 -52
  225. package/skills/wix-headless/references/custom/bookings/WIRING.md +0 -197
  226. package/skills/wix-headless/references/custom/cms/WIRING.md +0 -97
  227. package/skills/wix-headless/references/custom/ecom/WIRING.md +0 -67
  228. package/skills/wix-headless/references/custom/forms/WIRING.md +0 -101
  229. package/skills/wix-headless/references/custom/stores/WIRING.md +0 -80
  230. package/skills/wix-headless/references/ecom/INSTRUCTIONS.md +0 -59
  231. package/skills/wix-headless/references/forms/INSTRUCTIONS.md +0 -43
  232. package/skills/wix-headless/references/gift-cards/INSTRUCTIONS.md +0 -51
  233. package/skills/wix-headless/references/images/INSTRUCTIONS.md +0 -357
  234. package/skills/wix-headless/references/seed-recipes.md +0 -49
  235. package/skills/wix-headless/references/shared/AGENTS_MD.md +0 -47
  236. package/skills/wix-headless/references/shared/AUTHENTICATION.md +0 -108
  237. package/skills/wix-headless/references/shared/BUILD_NOISE.md +0 -8
  238. package/skills/wix-headless/references/shared/DESIGN_MD.md +0 -84
  239. package/skills/wix-headless/references/shared/DOCS_SEARCH.md +0 -41
  240. package/skills/wix-headless/references/shared/IMAGE_GENERATION.md +0 -186
  241. package/skills/wix-headless/references/shared/IMPLEMENTER.md +0 -206
  242. package/skills/wix-headless/references/shared/PRODUCTION_SHARP_EDGES.md +0 -97
  243. package/skills/wix-headless/references/shared/RETURN_CONTRACT.md +0 -143
  244. package/skills/wix-headless/references/shared/STYLING.md +0 -140
  245. package/skills/wix-headless/references/stores/INSTRUCTIONS.md +0 -126
  246. package/skills/wix-headless/references/stores/PRODUCT_CATALOG_DATA.md +0 -252
  247. package/skills/wix-headless/references/verticals/_schema.json +0 -74
  248. package/skills/wix-headless/references/verticals/_schema.md +0 -95
  249. package/skills/wix-headless/references/verticals/blog.md +0 -31
  250. package/skills/wix-headless/references/verticals/bookings.md +0 -41
  251. package/skills/wix-headless/references/verticals/cms.md +0 -30
  252. package/skills/wix-headless/references/verticals/ecom.md +0 -25
  253. package/skills/wix-headless/references/verticals/forms.md +0 -26
  254. package/skills/wix-headless/references/verticals/gift-cards.md +0 -24
  255. package/skills/wix-headless/references/verticals/stores.md +0 -33
  256. package/skills/wix-headless/scripts/check-manifest.mjs +0 -335
  257. package/skills/wix-headless/scripts/compose.mjs +0 -520
  258. package/skills/wix-headless/scripts/emit-design-tokens.mjs +0 -157
  259. package/skills/wix-headless/scripts/flatten.sh +0 -61
  260. package/skills/wix-headless/scripts/generate-images.mjs +0 -242
  261. package/skills/wix-headless/scripts/patch-decorative-slots.mjs +0 -154
  262. package/skills/wix-headless/scripts/plan-entity-image-waves.mjs +0 -190
  263. package/skills/wix-headless/scripts/scaffold.sh +0 -139
  264. package/skills/wix-headless/scripts/seed-utilities.sh +0 -93
  265. package/skills/wix-headless/scripts/write-decorative-json.mjs +0 -62
  266. package/skills/wix-headless/shared-utilities/analytics.ts +0 -40
  267. package/skills/wix-headless/shared-utilities/ricos.ts +0 -179
  268. package/skills/wix-headless/shared-utilities/wix-image.ts +0 -72
@@ -0,0 +1,37 @@
1
+ # Stores — Inventory
2
+
3
+ ## Increment stock
4
+
5
+ ```typescript
6
+ import { inventory, inventoryItemsV3 } from '@wix/stores';
7
+
8
+ if (v === 'V3_CATALOG') {
9
+ // Per-variant; flat shape.
10
+ await inventoryItemsV3.bulkIncrementInventoryItems([
11
+ { inventoryItemId, incrementBy: 5 },
12
+ ]);
13
+ } else {
14
+ // Per-product (variant optional).
15
+ await inventory.incrementInventory([
16
+ { productId, variantId, incrementBy: 5 },
17
+ ]);
18
+ }
19
+ ```
20
+
21
+ To find a V3 inventory item ID, use `inventoryItemsV3.searchInventoryItems` filtered by `productId` / `variantId`.
22
+
23
+ ---
24
+
25
+ ## Query inventory
26
+
27
+ ```typescript
28
+ if (v === 'V3_CATALOG') {
29
+ const res = await inventoryItemsV3.queryInventoryItems().eq('productId', productId).find();
30
+ return res.items;
31
+ }
32
+ // V1: filter is a JSON-stringified expression.
33
+ const res = await inventory.queryInventory({
34
+ query: { filter: JSON.stringify({ productId }) },
35
+ });
36
+ return res.inventoryItems;
37
+ ```
@@ -0,0 +1,87 @@
1
+ # Stores — Query / List Products
2
+
3
+ ## List products with pagination
4
+
5
+ Both versions expose a fluent query builder, but the paging method differs:
6
+
7
+ | Aspect | V1 (`products.queryProducts()`) | V3 (`productsV3.queryProducts()`) |
8
+ |--------|--------------------------------|----------------------------------|
9
+ | API style | Fluent builder: `.skip().limit().find()` | Fluent builder: `.skipTo(cursor).limit().find()` |
10
+ | Pagination | Offset (`.skip(n)`) | Cursor (`.skipTo(cursor)`) |
11
+ | Result `items` | `res.items` (V1 `Product[]`) | `res.items` (V3 `Product[]`) |
12
+ | Total count | `res.totalCount` | **None** — V3 only has `cursors.next` + `hasNext()` |
13
+ | `hasNext` | `res.hasNext()` (method) | `res.hasNext()` (method) |
14
+ | Next cursor | n/a | `res.cursors.next` (string) |
15
+
16
+ ```typescript
17
+ import { catalogVersioning, products, productsV3 } from '@wix/stores';
18
+
19
+ export interface ProductsPage {
20
+ products: unknown[]; // narrow at call site
21
+ nextCursor: string | null; // V3 only
22
+ hasNext: boolean;
23
+ totalCount: number | null; // V1 only
24
+ }
25
+
26
+ export async function listProductsPage(
27
+ limit: number,
28
+ cursorOrSkip: string | number | undefined,
29
+ ): Promise<ProductsPage> {
30
+ const v = await getVersion();
31
+ if (v === 'STORES_NOT_INSTALLED') {
32
+ return { products: [], nextCursor: null, hasNext: false, totalCount: 0 };
33
+ }
34
+
35
+ if (v === 'V3_CATALOG') {
36
+ let builder = productsV3.queryProducts().limit(limit);
37
+ if (typeof cursorOrSkip === 'string') builder = builder.skipTo(cursorOrSkip);
38
+ // Do NOT chain a sort — see OVERVIEW.md gotcha #10.
39
+ const res = await builder.find();
40
+ return {
41
+ products: res.items,
42
+ nextCursor: res.cursors.next ?? null,
43
+ hasNext: res.hasNext(),
44
+ totalCount: null,
45
+ };
46
+ }
47
+
48
+ const skip = typeof cursorOrSkip === 'number' ? cursorOrSkip : 0;
49
+ const res = await products.queryProducts().skip(skip).limit(limit).find();
50
+ return {
51
+ products: res.items,
52
+ nextCursor: null,
53
+ hasNext: res.hasNext(),
54
+ totalCount: res.totalCount ?? null,
55
+ };
56
+ }
57
+ ```
58
+
59
+ > **Two ways to call V3 `queryProducts`:** the canonical builder shown above, and a direct-call form `productsV3.queryProducts({ cursorPaging: { limit, cursor } })` returning a `Promise<{ products, pagingMetadata }>`. Both compile and run, but the builder is more idiomatic and matches V1's shape.
60
+
61
+ ---
62
+
63
+ ## Display price/stock without fetching variants
64
+
65
+ V3 `queryProducts` does not return variants. Read product-level rollup fields instead:
66
+
67
+ ```typescript
68
+ function displayPrice(p: { actualPriceRange?: { minValue?: { amount?: string }; maxValue?: { amount?: string } } }): string {
69
+ const min = p.actualPriceRange?.minValue?.amount;
70
+ const max = p.actualPriceRange?.maxValue?.amount;
71
+ if (!min) return '—';
72
+ return max && max !== min ? `${min} – ${max}` : min;
73
+ }
74
+
75
+ function stockLabel(status: string | undefined): string {
76
+ switch (status) {
77
+ case 'IN_STOCK': return 'In Stock';
78
+ case 'OUT_OF_STOCK': return 'Out of Stock';
79
+ case 'PARTIALLY_OUT_OF_STOCK': return 'Limited';
80
+ case 'PREORDER': return 'Pre-order';
81
+ default: return '—';
82
+ }
83
+ }
84
+ // V1 path: product.stock.inventoryStatus (same UPPER_SNAKE_CASE values)
85
+ // V3 path: product.inventory.availabilityStatus (adds PREORDER)
86
+ // SKU lives on the variant — show "—" in lists, or use Read-Only Variants API.
87
+ ```
@@ -0,0 +1,55 @@
1
+ # Stores — Write Operations (Create / Update / Delete)
2
+
3
+ ## Create a product (single-variant, with price)
4
+
5
+ ```typescript
6
+ if (v === 'V3_CATALOG') {
7
+ const product = await productsV3.createProduct({
8
+ name: 'My Product',
9
+ productType: 'PHYSICAL', // UPPER_CASE
10
+ variantsInfo: {
11
+ variants: [{
12
+ price: { actualPrice: { amount: '19.99' } }, // string, on the variant
13
+ sku: 'SKU-001',
14
+ }],
15
+ },
16
+ });
17
+ return product;
18
+ }
19
+
20
+ const { product } = await products.createProduct({
21
+ name: 'My Product',
22
+ productType: 'physical', // lower-case
23
+ priceData: { price: 19.99 }, // number, on the product
24
+ sku: 'SKU-001',
25
+ });
26
+ return product;
27
+ ```
28
+
29
+ ---
30
+
31
+ ## Update a product (V3 needs `revision`)
32
+
33
+ ```typescript
34
+ if (v === 'V3_CATALOG') {
35
+ // Signature: updateProduct(_id, productFields). Returns Product directly.
36
+ const current = await productsV3.getProduct(id);
37
+ if (current.revision == null) throw new Error(`Product ${id} has no revision`);
38
+ return await productsV3.updateProduct(id, {
39
+ revision: current.revision, // narrowed — required under exactOptionalPropertyTypes
40
+ name: 'New name',
41
+ });
42
+ }
43
+ // V1: updateProduct(id, productFields). Returns { product }.
44
+ const { product } = await products.updateProduct(id, { name: 'New name' });
45
+ return product;
46
+ ```
47
+
48
+ ---
49
+
50
+ ## Delete a product
51
+
52
+ ```typescript
53
+ if (v === 'V3_CATALOG') await productsV3.deleteProduct(id);
54
+ else await products.deleteProduct(id);
55
+ ```
@@ -0,0 +1,510 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Auto Patterns Generator Script
5
+ *
6
+ * Generates patterns.json and the page component for @wix/auto-patterns dashboard pages.
7
+ * Replicates the deterministic logic from AutoPatternsGenerator.ts.
8
+ *
9
+ * The page component is written as `<folder>.tsx` (the basename of --output) to
10
+ * match — and overwrite — the stub the Wix CLI scaffolds and registers in
11
+ * `<folder>.extension.ts`. This wires the wrapper up with no manual edit.
12
+ *
13
+ * Usage:
14
+ * node <SKILL_ROOT>/scripts/generate-auto-patterns.js --input <path-to-input.json> --output <target-directory>
15
+ * node <SKILL_ROOT>/scripts/generate-auto-patterns.js --help
16
+ *
17
+ * <SKILL_ROOT> is the absolute path to the wix-app skill bundle (the folder containing SKILL.md).
18
+ * The script is not installed in the user's app repo — invoke it by absolute path from the project directory.
19
+ *
20
+ * Input JSON shape:
21
+ * {
22
+ * "collection": {
23
+ * "idSuffix": "additional-fees",
24
+ * "fields": [{ "key": "feeTitle", "displayName": "Fee Title", "type": "TEXT" }, ...]
25
+ * },
26
+ * "schema": {
27
+ * "content": { "collectionRouteId": "...", ... (20 string fields) },
28
+ * "layout": { "main": [...], "sidebar": [...] },
29
+ * "columns": [{ "id": "feeTitle", "displayName": "Title" }],
30
+ * "gridItem": null | { "titleFieldId": "...", ... }
31
+ * },
32
+ * "relevantCollectionId": "my-namespace/additional-fees",
33
+ * "extensionName": "Additional Fees Manager"
34
+ * }
35
+ *
36
+ * Output:
37
+ * Writes patterns.json and <folder>.tsx to the specified output directory.
38
+ * Prints JSON result to stdout: { "files": ["patterns.json", "<folder>.tsx"] }
39
+ *
40
+ * Exit codes:
41
+ * 0 - Success
42
+ * 1 - Invalid arguments or missing required fields
43
+ * 2 - File system error
44
+ */
45
+
46
+ import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'fs';
47
+ import { basename, join, resolve } from 'path';
48
+
49
+ // --- Argument parsing ---
50
+
51
+ const args = process.argv.slice(2);
52
+
53
+ function getArg(name) {
54
+ const idx = args.indexOf(`--${name}`);
55
+ if (idx === -1 || idx + 1 >= args.length) return null;
56
+ return args[idx + 1];
57
+ }
58
+
59
+ if (args.includes('--help') || args.includes('-h')) {
60
+ console.log(`Auto Patterns Generator
61
+
62
+ Usage:
63
+ node <SKILL_ROOT>/scripts/generate-auto-patterns.js --input <path> --output <dir>
64
+
65
+ <SKILL_ROOT> is the absolute path to the wix-app skill bundle (the folder containing SKILL.md).
66
+
67
+ Options:
68
+ --input Path to input JSON file (required)
69
+ --output Target directory for generated files (required)
70
+ --help Show this help message
71
+
72
+ Input JSON shape:
73
+ {
74
+ "collection": {
75
+ "idSuffix": "string",
76
+ "fields": [{ "key": "string", "displayName": "string", "type": "string" }]
77
+ },
78
+ "schema": {
79
+ "content": { "collectionRouteId": "string", ... },
80
+ "layout": { "main": [...], "sidebar": [...] },
81
+ "columns": [{ "id": "string", "displayName": "string" }],
82
+ "gridItem": null | { "titleFieldId": "string", ... }
83
+ },
84
+ "relevantCollectionId": "string",
85
+ "extensionName": "string"
86
+ }
87
+
88
+ Output:
89
+ Writes patterns.json and <folder>.tsx to the output directory.
90
+ Prints JSON to stdout: { "files": ["patterns.json", "<folder>.tsx"] }`);
91
+ process.exit(0);
92
+ }
93
+
94
+ const inputPath = getArg('input');
95
+ const outputDir = getArg('output');
96
+
97
+ if (!inputPath) {
98
+ console.error('Error: --input is required. Use --help for usage.');
99
+ process.exit(1);
100
+ }
101
+ if (!outputDir) {
102
+ console.error('Error: --output is required. Use --help for usage.');
103
+ process.exit(1);
104
+ }
105
+
106
+ // --- Read and validate input ---
107
+
108
+ let input;
109
+ try {
110
+ const raw = readFileSync(resolve(inputPath), 'utf-8');
111
+ input = JSON.parse(raw);
112
+ } catch (err) {
113
+ console.error(`Error: Failed to read input file: ${err.message}`);
114
+ process.exit(1);
115
+ }
116
+
117
+ const { collection, schema, relevantCollectionId } = input;
118
+
119
+ if (!collection || !collection.idSuffix || !Array.isArray(collection.fields)) {
120
+ console.error(
121
+ 'Error: Input must include "collection" with "idSuffix" and "fields" array.',
122
+ );
123
+ process.exit(1);
124
+ }
125
+ if (
126
+ !schema ||
127
+ !schema.content ||
128
+ !schema.layout ||
129
+ !Array.isArray(schema.columns)
130
+ ) {
131
+ console.error(
132
+ 'Error: Input must include "schema" with "content", "layout", and "columns".',
133
+ );
134
+ process.exit(1);
135
+ }
136
+
137
+ // --- Generator logic (mirrors AutoPatternsGenerator.ts) ---
138
+
139
+ function generatePatternsConfig(collection, schema) {
140
+ const collectionRouteId = schema.content.collectionRouteId;
141
+ const singularEntityName = schema.content.singularEntityName;
142
+
143
+ // Build field map
144
+ const fieldMap = new Map();
145
+ for (const field of collection.fields) {
146
+ if (field.key && field.displayName) {
147
+ fieldMap.set(field.key, field);
148
+ }
149
+ }
150
+
151
+ const sortableFieldTypes = ['TEXT', 'DATE', 'NUMBER', 'BOOLEAN', 'URL'];
152
+
153
+ // Generate columns
154
+ const columns = schema.columns
155
+ .map((columnConfig) => {
156
+ const field = fieldMap.get(columnConfig.id);
157
+ if (!field || !field.key || !field.type) return null;
158
+
159
+ let width = '200px';
160
+ if (['BOOLEAN', 'IMAGE', 'NUMBER'].includes(field.type)) width = '100px';
161
+ if (field.type === 'URL') width = '300px';
162
+
163
+ return {
164
+ id: field.key,
165
+ name: columnConfig.displayName || field.displayName || 'Field',
166
+ width,
167
+ sortable: sortableFieldTypes.includes(field.type || ''),
168
+ };
169
+ })
170
+ .filter(Boolean);
171
+
172
+ // Generate filters
173
+ const filterableFieldTypes = ['DATE', 'NUMBER', 'BOOLEAN'];
174
+ const filters = columns
175
+ .map((column) => {
176
+ const field = fieldMap.get(column.id);
177
+ if (
178
+ !field ||
179
+ !field.key ||
180
+ !filterableFieldTypes.includes(field.type || '')
181
+ )
182
+ return null;
183
+
184
+ const baseFilter = {
185
+ id: `${field.key}-filter`,
186
+ fieldId: field.key,
187
+ displayName: field.displayName || '',
188
+ tagLabel: field.displayName || '',
189
+ };
190
+
191
+ if (field.type === 'DATE') {
192
+ return {
193
+ ...baseFilter,
194
+ dateConfig: {
195
+ mode: 'COMBINE',
196
+ presets: [
197
+ 'TODAY',
198
+ 'SEVEN_DAYS',
199
+ 'MONTH',
200
+ 'NEXT_SEVEN_DAYS',
201
+ 'NEXT_THIRTY_DAYS',
202
+ ],
203
+ includeTime: false,
204
+ },
205
+ };
206
+ }
207
+ if (field.type === 'NUMBER') {
208
+ return {
209
+ ...baseFilter,
210
+ numberConfig: { allowedDecimals: true },
211
+ };
212
+ }
213
+ if (field.type === 'BOOLEAN') {
214
+ return baseFilter;
215
+ }
216
+ return null;
217
+ })
218
+ .filter(Boolean);
219
+
220
+ // Generate layout (Table + optional Grid)
221
+ const layout = [
222
+ {
223
+ type: 'Table',
224
+ table: {
225
+ columns,
226
+ customColumns: { enabled: true },
227
+ },
228
+ },
229
+ ];
230
+
231
+ if (schema.gridItem) {
232
+ layout.push({
233
+ type: 'Grid',
234
+ grid: {
235
+ item: {
236
+ titleFieldId: schema.gridItem.titleFieldId,
237
+ ...(schema.gridItem.subtitleFieldId
238
+ ? { subtitleFieldId: schema.gridItem.subtitleFieldId }
239
+ : {}),
240
+ ...(schema.gridItem.imageFieldId
241
+ ? { imageFieldId: schema.gridItem.imageFieldId }
242
+ : {}),
243
+ cardContentMode: schema.gridItem.subtitleFieldId ? 'full' : 'title',
244
+ },
245
+ },
246
+ });
247
+ }
248
+
249
+ // Generate entity page layout
250
+ function generateEntityPageLayout(layoutData) {
251
+ if (!layoutData) return { main: [] };
252
+
253
+ const main = layoutData.main.map((section) => ({
254
+ type: 'card',
255
+ card: {
256
+ title: { text: section.title },
257
+ subtitle: { text: section.subtitle },
258
+ children: section.fields.map((fieldKey) => ({
259
+ type: 'field',
260
+ field: { span: 12, fieldId: fieldKey },
261
+ })),
262
+ },
263
+ }));
264
+
265
+ const sidebar = layoutData.sidebar.map((section) => ({
266
+ type: 'card',
267
+ card: {
268
+ title: { text: section.title },
269
+ subtitle: { text: section.subtitle },
270
+ children: section.fields.map((fieldKey) => ({
271
+ type: 'field',
272
+ field: { span: 12, fieldId: fieldKey },
273
+ })),
274
+ },
275
+ }));
276
+
277
+ return {
278
+ main,
279
+ ...(sidebar.length > 0 ? { sidebar } : {}),
280
+ };
281
+ }
282
+
283
+ // Use relevantCollectionId for the collection reference in the config
284
+ const collectionId = relevantCollectionId || collection.idSuffix;
285
+
286
+ return {
287
+ pages: [
288
+ {
289
+ id: `${collectionRouteId}-collection`,
290
+ type: 'collectionPage',
291
+ appMainPage: true,
292
+ collectionPage: {
293
+ route: { path: '/' },
294
+ title: {
295
+ text: schema.content.pageTitle || '',
296
+ hideTotal: false,
297
+ },
298
+ subtitle: {
299
+ text: schema.content.pageSubtitle || '',
300
+ },
301
+ actions: {
302
+ primaryActions: {
303
+ type: 'action',
304
+ action: {
305
+ item: {
306
+ id: `create-${collectionRouteId}`,
307
+ type: 'create',
308
+ label: schema.content.actionButtonLabel,
309
+ collection: {
310
+ collectionId,
311
+ entityTypeSource: 'cms',
312
+ },
313
+ create: {
314
+ mode: 'page',
315
+ page: { id: `${collectionRouteId}-entity` },
316
+ },
317
+ },
318
+ },
319
+ },
320
+ },
321
+ components: [
322
+ {
323
+ type: 'collection',
324
+ layout,
325
+ entityPageId: `${collectionRouteId}-entity`,
326
+ collection: {
327
+ collectionId,
328
+ entityTypeSource: 'cms',
329
+ },
330
+ toolbarTitle: {
331
+ title: schema.content.toolbarTitle || '',
332
+ subtitle: {
333
+ text: schema.content.toolbarSubtitle || '',
334
+ },
335
+ showTotal: true,
336
+ },
337
+ filters: { items: filters },
338
+ emptyState: {
339
+ title: schema.content.emptyStateTitle,
340
+ subtitle: schema.content.emptyStateSubtitle,
341
+ addNewCta: {
342
+ id: `create-${collectionRouteId}`,
343
+ text: schema.content.emptyStateButtonText,
344
+ },
345
+ },
346
+ actionCell: {
347
+ primaryAction: {
348
+ item: {
349
+ id: `edit-${collectionRouteId}`,
350
+ type: 'update',
351
+ update: {
352
+ mode: 'page',
353
+ page: { id: `${collectionRouteId}-entity` },
354
+ },
355
+ },
356
+ },
357
+ secondaryActions: {
358
+ items: [
359
+ {
360
+ id: `delete-${collectionRouteId}`,
361
+ type: 'delete',
362
+ label: 'Delete',
363
+ delete: {
364
+ mode: 'modal',
365
+ modal: {
366
+ title: {
367
+ text: schema.content.deleteModalTitle || '',
368
+ },
369
+ description: {
370
+ text: schema.content.deleteModalDescription || '',
371
+ },
372
+ feedback: {
373
+ successToast: {
374
+ text: schema.content.deleteSuccessToast || '',
375
+ },
376
+ errorToast: {
377
+ text: schema.content.deleteErrorToast || '',
378
+ },
379
+ },
380
+ },
381
+ },
382
+ },
383
+ ],
384
+ },
385
+ },
386
+ bulkActionToolbar: {
387
+ primaryActions: [
388
+ {
389
+ type: 'action',
390
+ action: {
391
+ item: {
392
+ id: `bulk-delete-${collectionRouteId}`,
393
+ type: 'bulkDelete',
394
+ bulkDelete: {
395
+ mode: 'modal',
396
+ modal: {
397
+ title: {
398
+ text: schema.content.bulkDeleteModalTitle || '',
399
+ },
400
+ description: {
401
+ text:
402
+ schema.content.bulkDeleteModalDescription || '',
403
+ },
404
+ feedback: {
405
+ successToast: {
406
+ text:
407
+ schema.content.bulkDeleteSuccessToast || '',
408
+ },
409
+ errorToast: {
410
+ text: schema.content.bulkDeleteErrorToast || '',
411
+ },
412
+ },
413
+ },
414
+ },
415
+ },
416
+ },
417
+ },
418
+ ],
419
+ },
420
+ },
421
+ ],
422
+ },
423
+ },
424
+ {
425
+ id: `${collectionRouteId}-entity`,
426
+ type: 'entityPage',
427
+ entityPage: {
428
+ route: {
429
+ path: `/${singularEntityName}/:entityId`,
430
+ params: { id: 'entityId' },
431
+ },
432
+ title: { text: schema.content.entityPageTitle || '' },
433
+ subtitle: { text: schema.content.entityPageSubtitle },
434
+ parentPageId: `${collectionRouteId}-collection`,
435
+ layout: generateEntityPageLayout(schema.layout),
436
+ collectionId,
437
+ entityTypeSource: 'cms',
438
+ },
439
+ },
440
+ ],
441
+ };
442
+ }
443
+
444
+ function generatePageTsx() {
445
+ return `import React from 'react';
446
+ import { WixDesignSystemProvider } from '@wix/design-system';
447
+ import '@wix/design-system/styles.global.css';
448
+ import { WixPatternsProvider } from '@wix/patterns/provider';
449
+ import { PatternsWizardOverridesProvider, AutoPatternsApp, type AppConfig } from '@wix/auto-patterns';
450
+ import { withDashboard } from '@wix/patterns';
451
+ import config from './patterns.json';
452
+
453
+ const Index: React.FC = () => {
454
+ return (
455
+ <WixDesignSystemProvider features={{ newColorsBranding: true }}>
456
+ <WixPatternsProvider>
457
+ <PatternsWizardOverridesProvider value={{}}>
458
+ <AutoPatternsApp configuration={config as AppConfig} />
459
+ </PatternsWizardOverridesProvider>
460
+ </WixPatternsProvider>
461
+ </WixDesignSystemProvider>
462
+ );
463
+ };
464
+
465
+ export default withDashboard(Index);
466
+ `;
467
+ }
468
+
469
+ // --- Generate and write output ---
470
+
471
+ const resolvedOutput = resolve(outputDir);
472
+
473
+ try {
474
+ if (!existsSync(resolvedOutput)) {
475
+ mkdirSync(resolvedOutput, { recursive: true });
476
+ }
477
+ } catch (err) {
478
+ console.error(`Error: Failed to create output directory: ${err.message}`);
479
+ process.exit(2);
480
+ }
481
+
482
+ const patternsConfig = generatePatternsConfig(collection, schema);
483
+ const pageTsx = generatePageTsx();
484
+
485
+ // The Wix CLI scaffolds the page component as `<folder>.tsx` and registers THAT
486
+ // file in the generated `<folder>.extension.ts`. Write the auto-patterns wrapper
487
+ // to the same filename so it overwrites the CLI stub and is wired up with no
488
+ // manual edit to the builder file. (Writing `page.tsx` would leave the wrapper
489
+ // unregistered next to the empty stub the CLI registered.)
490
+ const componentFileName = `${basename(resolvedOutput)}.tsx`;
491
+
492
+ try {
493
+ writeFileSync(
494
+ join(resolvedOutput, 'patterns.json'),
495
+ JSON.stringify(patternsConfig, null, 2),
496
+ );
497
+ writeFileSync(join(resolvedOutput, componentFileName), pageTsx);
498
+ } catch (err) {
499
+ console.error(`Error: Failed to write output files: ${err.message}`);
500
+ process.exit(2);
501
+ }
502
+
503
+ // Print structured result to stdout
504
+ console.log(
505
+ JSON.stringify({
506
+ success: true,
507
+ files: ['patterns.json', componentFileName],
508
+ outputDir: resolvedOutput,
509
+ }),
510
+ );
@@ -0,0 +1,12 @@
1
+ ---
2
+ name: wix-auth
3
+ description: "Authenticate with Wix to obtain an access token for calling Wix APIs. Use when an agent needs a valid Wix access token and has none, or when the stored token is expired."
4
+ ---
5
+
6
+ # Wix Auth
7
+
8
+ Wix supports multiple authentication flows. This skill currently covers:
9
+
10
+ - [Device Flow](references/device-flow.md) — interactive login via browser, no client secret required. Use when the agent is acting on behalf of a logged-in Wix user.
11
+
12
+ Other flows (OAuth authorization code, API key) are documented at [https://www.wix.com/skills/docs](https://www.wix.com/skills/docs).