@wix/agent-skills 1.36.0 → 1.36.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 (776) hide show
  1. package/package.json +8 -3
  2. package/skills/wix-headless-kit/install/pins.json +1 -1
  3. package/skills/wix-manage/SKILL.md +3 -3
  4. package/skills/wix-manage/references/cms/cms-data-items-crud.md +78 -1
  5. package/skills/wix-manage/references/google-ads/create-performance-max-campaign.md +11 -11
  6. package/skills/wix-manage/references/marketing/create-and-publish-social-post.md +20 -51
  7. package/skills/wix-manage/references/marketing/generate-and-publish-marketing-plan.md +4 -4
  8. package/skills/wix-base44-connector/SKILL.md +0 -437
  9. package/skills/wix-base44-connector/references/CAPABILITY_MAP.md +0 -78
  10. package/skills/wix-base44-connector/scripts/utils.cjs +0 -466
  11. package/skills/wix-export/SKILL.md +0 -83
  12. package/skills/wix-harmony-editor/.publish-manifest.json +0 -8
  13. package/skills/wix-harmony-editor/COPY-SITE.md +0 -494
  14. package/skills/wix-harmony-editor/SKILL.md +0 -317
  15. package/skills/wix-harmony-editor/scripts/copy/build-description.mjs +0 -249
  16. package/skills/wix-harmony-editor/scripts/copy/check-description.mjs +0 -225
  17. package/skills/wix-harmony-editor/scripts/copy/check-mirror.mjs +0 -89
  18. package/skills/wix-harmony-editor/scripts/copy/compare-preview.mjs +0 -76
  19. package/skills/wix-harmony-editor/scripts/copy/deploy-description.mjs +0 -212
  20. package/skills/wix-harmony-editor/scripts/copy/desc-hash.mjs +0 -44
  21. package/skills/wix-harmony-editor/scripts/copy/editor-run.mjs +0 -45
  22. package/skills/wix-harmony-editor/scripts/copy/export-page.mjs +0 -53
  23. package/skills/wix-harmony-editor/scripts/copy/find-interactions.mjs +0 -76
  24. package/skills/wix-harmony-editor/scripts/copy/hide-scrollbars.mjs +0 -16
  25. package/skills/wix-harmony-editor/scripts/copy/import-media.mjs +0 -150
  26. package/skills/wix-harmony-editor/scripts/copy/link-url.mjs +0 -27
  27. package/skills/wix-harmony-editor/scripts/copy/lint-api.mjs +0 -56
  28. package/skills/wix-harmony-editor/scripts/copy/measure-source.mjs +0 -211
  29. package/skills/wix-harmony-editor/scripts/copy/merge-mirrors.mjs +0 -29
  30. package/skills/wix-harmony-editor/scripts/copy/mirror-site.mjs +0 -92
  31. package/skills/wix-harmony-editor/scripts/copy/mobile-stage.mjs +0 -56
  32. package/skills/wix-harmony-editor/scripts/copy/preview-widths.mjs +0 -73
  33. package/skills/wix-harmony-editor/scripts/copy/render-plate.mjs +0 -67
  34. package/skills/wix-harmony-editor/scripts/copy/serve-mirror.mjs +0 -102
  35. package/skills/wix-harmony-editor/scripts/copy/snapshot-capabilities.mjs +0 -40
  36. package/skills/wix-harmony-editor/scripts/copy/split-sections.mjs +0 -191
  37. package/skills/wix-harmony-editor/scripts/copy/upload-media-manager.mjs +0 -61
  38. package/skills/wix-harmony-editor/scripts/launch.sh +0 -359
  39. package/skills/wix-headless/SKILL.md +0 -151
  40. package/skills/wix-headless/references/AI_FEATURES.md +0 -178
  41. package/skills/wix-headless/references/CAPABILITIES.md +0 -117
  42. package/skills/wix-headless/references/CONTENT.md +0 -36
  43. package/skills/wix-headless/references/DESIGN.md +0 -55
  44. package/skills/wix-headless/references/DISCOVERY.md +0 -80
  45. package/skills/wix-headless/references/DOC_DISCOVERY.md +0 -43
  46. package/skills/wix-headless/references/FEEDBACK.md +0 -129
  47. package/skills/wix-headless/references/IMAGE_GENERATION.md +0 -80
  48. package/skills/wix-headless/references/SDK_HANDOFF.md +0 -108
  49. package/skills/wix-headless/references/SEED.md +0 -74
  50. package/skills/wix-headless/references/SETUP.md +0 -60
  51. package/skills/wix-headless/references/astro.md +0 -98
  52. package/skills/wix-headless/references/inline-recipes/experience-donations.md +0 -102
  53. package/skills/wix-headless/references/inline-recipes/experience-store.md +0 -49
  54. package/skills/wix-headless/references/inline-recipes/how-to-code-a-blog.md +0 -196
  55. package/skills/wix-headless/references/inline-recipes/how-to-code-a-store.md +0 -590
  56. package/skills/wix-headless/references/inline-recipes/how-to-code-bookings.md +0 -279
  57. package/skills/wix-headless/references/inline-recipes/how-to-code-cms.md +0 -163
  58. package/skills/wix-headless/references/inline-recipes/how-to-code-donations.md +0 -146
  59. package/skills/wix-headless/references/inline-recipes/how-to-code-events.md +0 -203
  60. package/skills/wix-headless/references/inline-recipes/how-to-code-forms.md +0 -696
  61. package/skills/wix-headless/references/inline-recipes/how-to-code-members-astro.md +0 -124
  62. package/skills/wix-headless/references/inline-recipes/how-to-code-members-custom-login.md +0 -160
  63. package/skills/wix-headless/references/inline-recipes/how-to-code-members-non-astro.md +0 -118
  64. package/skills/wix-headless/references/inline-recipes/how-to-code-portfolio.md +0 -132
  65. package/skills/wix-headless/references/inline-recipes/how-to-code-pricing-plans.md +0 -126
  66. package/skills/wix-headless/references/inline-recipes/how-to-code-rentals.md +0 -254
  67. package/skills/wix-headless/references/inline-recipes/how-to-code-restaurant-orders.md +0 -191
  68. package/skills/wix-headless/references/inline-recipes/how-to-code-restaurant-reservations.md +0 -213
  69. package/skills/wix-headless/references/inline-recipes/how-to-code-restaurants.md +0 -161
  70. package/skills/wix-headless/references/inline-recipes/setup-blog.md +0 -175
  71. package/skills/wix-headless/references/inline-recipes/setup-bookings.md +0 -232
  72. package/skills/wix-headless/references/inline-recipes/setup-cms.md +0 -200
  73. package/skills/wix-headless/references/inline-recipes/setup-donations.md +0 -15
  74. package/skills/wix-headless/references/inline-recipes/setup-events.md +0 -196
  75. package/skills/wix-headless/references/inline-recipes/setup-forms.md +0 -288
  76. package/skills/wix-headless/references/inline-recipes/setup-online-store.md +0 -214
  77. package/skills/wix-headless/references/inline-recipes/setup-portfolio.md +0 -155
  78. package/skills/wix-headless/references/inline-recipes/setup-pricing-plans.md +0 -229
  79. package/skills/wix-headless/references/inline-recipes/setup-rentals.md +0 -254
  80. package/skills/wix-headless/references/inline-recipes/setup-restaurant-experiences.md +0 -73
  81. package/skills/wix-headless/references/inline-recipes/setup-restaurant-orders.md +0 -197
  82. package/skills/wix-headless/references/inline-recipes/setup-restaurant-reservations.md +0 -136
  83. package/skills/wix-headless/references/inline-recipes/setup-restaurants.md +0 -152
  84. package/skills/wix-headless/references/managed/AUTHENTICATION.md +0 -71
  85. package/skills/wix-headless/references/managed/CONNECT.md +0 -74
  86. package/skills/wix-headless/references/managed/CREATE.md +0 -149
  87. package/skills/wix-headless/references/managed/DEPLOYMENT.md +0 -104
  88. package/skills/wix-headless/references/non-astro.md +0 -59
  89. package/skills/wix-headless/references/self-managed/AUTHENTICATION.md +0 -22
  90. package/skills/wix-headless/references/self-managed/DEPLOYMENT.md +0 -15
  91. package/skills/wix-headless/references/stripe/AUTHENTICATION.md +0 -55
  92. package/skills/wix-headless/references/stripe/DEPLOYMENT.md +0 -71
  93. package/skills/wix-headless/scripts/bootstrap.mjs +0 -156
  94. package/skills/wix-headless-replatform/.publish-manifest.json +0 -8
  95. package/skills/wix-headless-replatform/SKILL.md +0 -116
  96. package/skills/wix-headless-replatform/agents/openai.yaml +0 -6
  97. package/skills/wix-headless-replatform/references/control-and-visual-fidelity-contract.md +0 -43
  98. package/skills/wix-headless-replatform/references/extraction-schema.md +0 -187
  99. package/skills/wix-headless-replatform/references/interaction-runtime-contract.md +0 -137
  100. package/skills/wix-headless-replatform/references/layout-blueprint-contract.md +0 -41
  101. package/skills/wix-headless-replatform/references/output-contract.md +0 -93
  102. package/skills/wix-headless-replatform/references/post-build-gap-contract.md +0 -125
  103. package/skills/wix-headless-replatform/references/qa-checklist.md +0 -83
  104. package/skills/wix-headless-replatform/references/safety.md +0 -19
  105. package/skills/wix-headless-replatform/references/ui-normalization-contract.md +0 -70
  106. package/skills/wix-headless-replatform/references/workflow.md +0 -157
  107. package/skills/wix-headless-replatform/registry/README.md +0 -20
  108. package/skills/wix-headless-replatform/registry/approvals/button/shadcn-default-ac60ef5.json +0 -28
  109. package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/button.tsx +0 -54
  110. package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/capabilities.json +0 -60
  111. package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/contract.md +0 -48
  112. package/skills/wix-headless-replatform/registry/licenses/shadcn-ui-ac60ef5-MIT.txt +0 -21
  113. package/skills/wix-headless-replatform/registry/registry.json +0 -36
  114. package/skills/wix-headless-replatform/resources/rp-facelift/SKILL.md +0 -32
  115. package/skills/wix-headless-replatform/resources/rp-project-context/SKILL.md +0 -62
  116. package/skills/wix-headless-replatform/resources/rp-qa-gap-loop/SKILL.md +0 -64
  117. package/skills/wix-headless-replatform/resources/rp-source-evidence/SKILL.md +0 -42
  118. package/skills/wix-headless-replatform/resources/rp-ui-implementation/SKILL.md +0 -73
  119. package/skills/wix-headless-replatform/schemas/build-plan.schema.json +0 -10
  120. package/skills/wix-headless-replatform/schemas/candidate.schema.json +0 -19
  121. package/skills/wix-headless-replatform/schemas/common.schema.json +0 -33
  122. package/skills/wix-headless-replatform/schemas/decision-patch.schema.json +0 -10
  123. package/skills/wix-headless-replatform/schemas/decision-request.schema.json +0 -10
  124. package/skills/wix-headless-replatform/schemas/extraction-gap.schema.json +0 -28
  125. package/skills/wix-headless-replatform/schemas/extraction-manifest.schema.json +0 -34
  126. package/skills/wix-headless-replatform/schemas/final-report.schema.json +0 -10
  127. package/skills/wix-headless-replatform/schemas/foundation.schema.json +0 -11
  128. package/skills/wix-headless-replatform/schemas/metadata.schema.json +0 -11
  129. package/skills/wix-headless-replatform/schemas/observation-packet.schema.json +0 -17
  130. package/skills/wix-headless-replatform/schemas/page-capture.schema.json +0 -11
  131. package/skills/wix-headless-replatform/schemas/page-resolution.schema.json +0 -33
  132. package/skills/wix-headless-replatform/schemas/shared-chrome.schema.json +0 -11
  133. package/skills/wix-headless-replatform/schemas/unit.schema.json +0 -40
  134. package/skills/wix-headless-replatform/scripts/assemble-extraction.mjs +0 -844
  135. package/skills/wix-headless-replatform/scripts/benchmark-extraction.mjs +0 -163
  136. package/skills/wix-headless-replatform/scripts/browser-extraction-preflight.mjs +0 -42
  137. package/skills/wix-headless-replatform/scripts/build-extracted-homepage.mjs +0 -228
  138. package/skills/wix-headless-replatform/scripts/clear-wix-starter.mjs +0 -87
  139. package/skills/wix-headless-replatform/scripts/create-wix-project.mjs +0 -505
  140. package/skills/wix-headless-replatform/scripts/discover-urls.mjs +0 -142
  141. package/skills/wix-headless-replatform/scripts/extract-assets.mjs +0 -140
  142. package/skills/wix-headless-replatform/scripts/extract-design-system.mjs +0 -637
  143. package/skills/wix-headless-replatform/scripts/extract-interactions.mjs +0 -1903
  144. package/skills/wix-headless-replatform/scripts/extract-page.mjs +0 -2461
  145. package/skills/wix-headless-replatform/scripts/extract-seo.mjs +0 -25
  146. package/skills/wix-headless-replatform/scripts/extract-tokens.mjs +0 -63
  147. package/skills/wix-headless-replatform/scripts/finalize-extraction-report.mjs +0 -126
  148. package/skills/wix-headless-replatform/scripts/finalize-gap-review.mjs +0 -180
  149. package/skills/wix-headless-replatform/scripts/finalize-gap-review.test.mjs +0 -98
  150. package/skills/wix-headless-replatform/scripts/finalize-migration-website.mjs +0 -103
  151. package/skills/wix-headless-replatform/scripts/generate-control-state-contract.mjs +0 -176
  152. package/skills/wix-headless-replatform/scripts/generate-design-md.mjs +0 -261
  153. package/skills/wix-headless-replatform/scripts/generate-extraction-validators.mjs +0 -25
  154. package/skills/wix-headless-replatform/scripts/generate-invoice-download-backend.mjs +0 -342
  155. package/skills/wix-headless-replatform/scripts/generate-layout-blueprint.mjs +0 -140
  156. package/skills/wix-headless-replatform/scripts/generate-repeater-cms.mjs +0 -22
  157. package/skills/wix-headless-replatform/scripts/generate-route-plan.mjs +0 -143
  158. package/skills/wix-headless-replatform/scripts/generate-scene-contract.mjs +0 -288
  159. package/skills/wix-headless-replatform/scripts/generate-ui-normalization.mjs +0 -266
  160. package/skills/wix-headless-replatform/scripts/generate-visual-assets.mjs +0 -111
  161. package/skills/wix-headless-replatform/scripts/lib/browser-tooling.mjs +0 -570
  162. package/skills/wix-headless-replatform/scripts/lib/common.mjs +0 -329
  163. package/skills/wix-headless-replatform/scripts/lib/component-capabilities.mjs +0 -121
  164. package/skills/wix-headless-replatform/scripts/lib/component-registry.mjs +0 -282
  165. package/skills/wix-headless-replatform/scripts/lib/content-boundary.mjs +0 -61
  166. package/skills/wix-headless-replatform/scripts/lib/extraction-contract.mjs +0 -374
  167. package/skills/wix-headless-replatform/scripts/lib/extraction-detectors.mjs +0 -243
  168. package/skills/wix-headless-replatform/scripts/lib/extraction-validators.generated.mjs +0 -1139
  169. package/skills/wix-headless-replatform/scripts/lib/font-contract.mjs +0 -326
  170. package/skills/wix-headless-replatform/scripts/lib/frontend-automation-state.mjs +0 -184
  171. package/skills/wix-headless-replatform/scripts/lib/gap-analysis.mjs +0 -396
  172. package/skills/wix-headless-replatform/scripts/lib/html-extract.mjs +0 -168
  173. package/skills/wix-headless-replatform/scripts/lib/interaction-bootstrap.mjs +0 -10
  174. package/skills/wix-headless-replatform/scripts/lib/interaction-runtime.mjs +0 -194
  175. package/skills/wix-headless-replatform/scripts/lib/interaction-timeline.mjs +0 -348
  176. package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/classifiers.mjs +0 -141
  177. package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/geometry.mjs +0 -43
  178. package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/vocabulary.mjs +0 -18
  179. package/skills/wix-headless-replatform/scripts/lib/ui-normalization.css +0 -64
  180. package/skills/wix-headless-replatform/scripts/optimize-svg.mjs +0 -31
  181. package/skills/wix-headless-replatform/scripts/post-build-gap.mjs +0 -358
  182. package/skills/wix-headless-replatform/scripts/provision-repeater-cms.mjs +0 -25
  183. package/skills/wix-headless-replatform/scripts/record-gap-decision.mjs +0 -39
  184. package/skills/wix-headless-replatform/scripts/replay-extraction.mjs +0 -107
  185. package/skills/wix-headless-replatform/scripts/resolve-home-page.mjs +0 -96
  186. package/skills/wix-headless-replatform/scripts/site-clone.mjs +0 -658
  187. package/skills/wix-headless-replatform/scripts/validate-font-contract.mjs +0 -29
  188. package/skills/wix-headless-replatform/scripts/verify-interactions.mjs +0 -669
  189. package/skills/wix-headless-replatform/scripts/visual-qa.mjs +0 -370
  190. package/skills/wix-import/SKILL.md +0 -90
  191. package/skills/wix-replatform/.publish-manifest.json +0 -8
  192. package/skills/wix-replatform/CLI.md +0 -162
  193. package/skills/wix-replatform/README.md +0 -52
  194. package/skills/wix-replatform/SKILL.md +0 -238
  195. package/skills/wix-replatform/console/account.css +0 -1
  196. package/skills/wix-replatform/console/app.css +0 -1
  197. package/skills/wix-replatform/console/app.js +0 -117
  198. package/skills/wix-replatform/console/index.html +0 -4
  199. package/skills/wix-replatform/console/json.css +0 -11
  200. package/skills/wix-replatform/lib/agent-adapters/index.js +0 -71
  201. package/skills/wix-replatform/lib/app-page-routing.js +0 -75
  202. package/skills/wix-replatform/lib/artifact-freshness.js +0 -225
  203. package/skills/wix-replatform/lib/blocked-data-requests.js +0 -427
  204. package/skills/wix-replatform/lib/census-reconciliation.js +0 -426
  205. package/skills/wix-replatform/lib/completion-report.js +0 -1580
  206. package/skills/wix-replatform/lib/config-env.js +0 -133
  207. package/skills/wix-replatform/lib/confirmed-pictures.js +0 -212
  208. package/skills/wix-replatform/lib/dependency-readiness.js +0 -423
  209. package/skills/wix-replatform/lib/dependency-recovery.js +0 -21
  210. package/skills/wix-replatform/lib/destination-choice.js +0 -163
  211. package/skills/wix-replatform/lib/destination-handoff.js +0 -62
  212. package/skills/wix-replatform/lib/destination-http.js +0 -81
  213. package/skills/wix-replatform/lib/destination-route.js +0 -98
  214. package/skills/wix-replatform/lib/destination.js +0 -919
  215. package/skills/wix-replatform/lib/discovered-census.js +0 -231
  216. package/skills/wix-replatform/lib/discovered-set-status.js +0 -255
  217. package/skills/wix-replatform/lib/document-url-guard.js +0 -203
  218. package/skills/wix-replatform/lib/entity-qa-attestation.js +0 -339
  219. package/skills/wix-replatform/lib/entity-verification.js +0 -18
  220. package/skills/wix-replatform/lib/execution-capability.js +0 -120
  221. package/skills/wix-replatform/lib/execution-log.js +0 -170
  222. package/skills/wix-replatform/lib/execution-manifest.js +0 -203
  223. package/skills/wix-replatform/lib/execution-state.js +0 -195
  224. package/skills/wix-replatform/lib/expectations-ledger.js +0 -96
  225. package/skills/wix-replatform/lib/generated-plugin-handoff.js +0 -140
  226. package/skills/wix-replatform/lib/import-readiness-contract.js +0 -23
  227. package/skills/wix-replatform/lib/import-recovery.js +0 -1107
  228. package/skills/wix-replatform/lib/imported-redirect-targets.js +0 -608
  229. package/skills/wix-replatform/lib/internal-link-reconciliation.js +0 -166
  230. package/skills/wix-replatform/lib/link-audit.js +0 -173
  231. package/skills/wix-replatform/lib/link-census.js +0 -194
  232. package/skills/wix-replatform/lib/link-plan.js +0 -148
  233. package/skills/wix-replatform/lib/link-verification.js +0 -274
  234. package/skills/wix-replatform/lib/link-write-journal.js +0 -42
  235. package/skills/wix-replatform/lib/local-state.js +0 -1481
  236. package/skills/wix-replatform/lib/member-completion.js +0 -658
  237. package/skills/wix-replatform/lib/member-crosswalk.js +0 -69
  238. package/skills/wix-replatform/lib/member-outcome-registry.js +0 -265
  239. package/skills/wix-replatform/lib/migration-completion.js +0 -311
  240. package/skills/wix-replatform/lib/operator-identity.js +0 -47
  241. package/skills/wix-replatform/lib/orchestration-decisions.js +0 -248
  242. package/skills/wix-replatform/lib/orchestration-preflight.js +0 -525
  243. package/skills/wix-replatform/lib/orchestration-router.js +0 -698
  244. package/skills/wix-replatform/lib/orchestration-state.js +0 -631
  245. package/skills/wix-replatform/lib/order-reference-readiness.js +0 -30
  246. package/skills/wix-replatform/lib/payments-outcome-registry.js +0 -200
  247. package/skills/wix-replatform/lib/plugin-cms-fallback.js +0 -618
  248. package/skills/wix-replatform/lib/preservation-approval-stamp.js +0 -54
  249. package/skills/wix-replatform/lib/product-media-deferral.js +0 -96
  250. package/skills/wix-replatform/lib/progress-log.js +0 -240
  251. package/skills/wix-replatform/lib/progress-log.sh +0 -140
  252. package/skills/wix-replatform/lib/read-back-approval.js +0 -184
  253. package/skills/wix-replatform/lib/read-back-comparison.js +0 -136
  254. package/skills/wix-replatform/lib/read-back-contract.js +0 -243
  255. package/skills/wix-replatform/lib/read-back-extract.js +0 -118
  256. package/skills/wix-replatform/lib/read-back-gate.js +0 -734
  257. package/skills/wix-replatform/lib/read-back-reads.js +0 -94
  258. package/skills/wix-replatform/lib/read-back-state.js +0 -107
  259. package/skills/wix-replatform/lib/read-back-summary.js +0 -81
  260. package/skills/wix-replatform/lib/rerun-conflicts.js +0 -334
  261. package/skills/wix-replatform/lib/run-controller.js +0 -401
  262. package/skills/wix-replatform/lib/seo-outcome-registry.js +0 -45
  263. package/skills/wix-replatform/lib/setup-verification.js +0 -148
  264. package/skills/wix-replatform/lib/source-access.js +0 -231
  265. package/skills/wix-replatform/lib/source-coverage.js +0 -1130
  266. package/skills/wix-replatform/lib/source-secrets.js +0 -277
  267. package/skills/wix-replatform/lib/structured-link-patch.js +0 -59
  268. package/skills/wix-replatform/lib/task-state.js +0 -110
  269. package/skills/wix-replatform/lib/url-preservation-report.js +0 -319
  270. package/skills/wix-replatform/lib/url-preservation-state.js +0 -739
  271. package/skills/wix-replatform/lib/url-redirect-plan.js +0 -728
  272. package/skills/wix-replatform/lib/url-verification.js +0 -315
  273. package/skills/wix-replatform/lib/user-action-effects.js +0 -42
  274. package/skills/wix-replatform/lib/user-actions.js +0 -264
  275. package/skills/wix-replatform/lib/website-handoff.js +0 -1220
  276. package/skills/wix-replatform/lib/wix-client-callers.js +0 -54
  277. package/skills/wix-replatform/lib/wix-dashboard-url.js +0 -35
  278. package/skills/wix-replatform/lib/write-verification-state.js +0 -92
  279. package/skills/wix-replatform/lib/write-verification.js +0 -274
  280. package/skills/wix-replatform/resources/rp-destination/SKILL.md +0 -137
  281. package/skills/wix-replatform/resources/rp-discovery/SKILL.md +0 -357
  282. package/skills/wix-replatform/resources/rp-discovery/scripts/promote-source-coverage.js +0 -47
  283. package/skills/wix-replatform/resources/rp-execute-import/SKILL.md +0 -1369
  284. package/skills/wix-replatform/resources/rp-execute-import/scripts/shipping-estimate-audit.js +0 -70
  285. package/skills/wix-replatform/resources/rp-execute-setup/SKILL.md +0 -482
  286. package/skills/wix-replatform/resources/rp-execute-setup/scripts/execute-setup.js +0 -442
  287. package/skills/wix-replatform/resources/rp-execute-setup/scripts/mint-token.sh +0 -64
  288. package/skills/wix-replatform/resources/rp-execution-policy/SKILL.md +0 -112
  289. package/skills/wix-replatform/resources/rp-execution-policy/lib/coupon-currency-plan-report.js +0 -143
  290. package/skills/wix-replatform/resources/rp-execution-policy/lib/payments-report.js +0 -244
  291. package/skills/wix-replatform/resources/rp-import-codegen/SKILL.md +0 -3158
  292. package/skills/wix-replatform/resources/rp-mapper/SKILL.md +0 -947
  293. package/skills/wix-replatform/resources/rp-mapper/lib/mapping-resolve.js +0 -217
  294. package/skills/wix-replatform/resources/rp-mapper/lib/structure-bridge-planning.js +0 -303
  295. package/skills/wix-replatform/resources/rp-mapper/scripts/coverage-reconcile.js +0 -88
  296. package/skills/wix-replatform/resources/rp-mapper/scripts/resolve-mapping.js +0 -148
  297. package/skills/wix-replatform/resources/rp-mapper/wix-business-solutions-taxonomy.md +0 -378
  298. package/skills/wix-replatform/resources/rp-preflight/SKILL.md +0 -40
  299. package/skills/wix-replatform/resources/rp-project-intake/SKILL.md +0 -55
  300. package/skills/wix-replatform/resources/rp-quick-runtime/SKILL.md +0 -60
  301. package/skills/wix-replatform/resources/rp-quick-runtime/lib/import-progress.js +0 -89
  302. package/skills/wix-replatform/resources/rp-quick-runtime/lib/limit-recovery.js +0 -36
  303. package/skills/wix-replatform/resources/rp-quick-shopify/SKILL.md +0 -123
  304. package/skills/wix-replatform/resources/rp-quick-shopify/quick-mode.json +0 -124
  305. package/skills/wix-replatform/resources/rp-quick-shopify/scripts/quick-mode.js +0 -522
  306. package/skills/wix-replatform/resources/rp-quick-woocommerce/SKILL.md +0 -56
  307. package/skills/wix-replatform/resources/rp-quick-woocommerce/quick-mode.json +0 -91
  308. package/skills/wix-replatform/resources/rp-quick-woocommerce/scripts/quick-mode.js +0 -255
  309. package/skills/wix-replatform/resources/rp-setup-discovery/SKILL.md +0 -253
  310. package/skills/wix-replatform/resources/rp-setup-discovery/scripts/quick-setup-plan.js +0 -44
  311. package/skills/wix-replatform/resources/rp-source-csv/SKILL.md +0 -481
  312. package/skills/wix-replatform/resources/rp-source-csv/lib/canonical-record.js +0 -136
  313. package/skills/wix-replatform/resources/rp-source-csv/lib/csv-fileset.js +0 -0
  314. package/skills/wix-replatform/resources/rp-source-csv/lib/csv-fingerprint.js +0 -310
  315. package/skills/wix-replatform/resources/rp-source-csv/lib/csv-layout.js +0 -1081
  316. package/skills/wix-replatform/resources/rp-source-csv/lib/csv-parse.js +0 -618
  317. package/skills/wix-replatform/resources/rp-source-csv/scripts/csv-discovery.js +0 -969
  318. package/skills/wix-replatform/resources/rp-source-csv/source-schema.example.json +0 -196
  319. package/skills/wix-replatform/resources/rp-source-csv/vendors/bigcommerce.json +0 -66
  320. package/skills/wix-replatform/resources/rp-source-csv/vendors/magento.json +0 -60
  321. package/skills/wix-replatform/resources/rp-source-csv/vendors/shopify.json +0 -95
  322. package/skills/wix-replatform/resources/rp-source-csv/vendors/woocommerce.json +0 -82
  323. package/skills/wix-replatform/resources/rp-source-inputs/SKILL.md +0 -66
  324. package/skills/wix-replatform/resources/rp-source-sfcc/SKILL.md +0 -153
  325. package/skills/wix-replatform/resources/rp-source-shopify/SKILL.md +0 -394
  326. package/skills/wix-replatform/resources/rp-source-shopify/lib/discovery-reads.js +0 -200
  327. package/skills/wix-replatform/resources/rp-source-shopify/lib/import-findings.js +0 -34
  328. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-bulk-sqlite-worker.js +0 -44
  329. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-bulk.js +0 -1470
  330. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-cli.js +0 -446
  331. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-gift-cards.js +0 -474
  332. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-protected-fields.js +0 -879
  333. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-session.js +0 -426
  334. package/skills/wix-replatform/resources/rp-source-shopify/queries/articles.graphql +0 -24
  335. package/skills/wix-replatform/resources/rp-source-shopify/queries/blogs.graphql +0 -18
  336. package/skills/wix-replatform/resources/rp-source-shopify/queries/collections.graphql +0 -40
  337. package/skills/wix-replatform/resources/rp-source-shopify/queries/customers.graphql +0 -76
  338. package/skills/wix-replatform/resources/rp-source-shopify/queries/delivery-profiles.graphql +0 -51
  339. package/skills/wix-replatform/resources/rp-source-shopify/queries/discounts.graphql +0 -35
  340. package/skills/wix-replatform/resources/rp-source-shopify/queries/files.graphql +0 -20
  341. package/skills/wix-replatform/resources/rp-source-shopify/queries/gift-cards.graphql +0 -18
  342. package/skills/wix-replatform/resources/rp-source-shopify/queries/inventory.graphql +0 -31
  343. package/skills/wix-replatform/resources/rp-source-shopify/queries/locations.graphql +0 -21
  344. package/skills/wix-replatform/resources/rp-source-shopify/queries/menus.graphql +0 -21
  345. package/skills/wix-replatform/resources/rp-source-shopify/queries/metaobjects.graphql +0 -30
  346. package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-core.graphql +0 -150
  347. package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-fulfillments.graphql +0 -36
  348. package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-refunds.graphql +0 -48
  349. package/skills/wix-replatform/resources/rp-source-shopify/queries/pages.graphql +0 -20
  350. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-address.graphql +0 -8
  351. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-email.graphql +0 -6
  352. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-name.graphql +0 -8
  353. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-phone.graphql +0 -8
  354. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-address.graphql +0 -12
  355. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-email.graphql +0 -6
  356. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-name.graphql +0 -13
  357. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-phone.graphql +0 -13
  358. package/skills/wix-replatform/resources/rp-source-shopify/queries/products.graphql +0 -73
  359. package/skills/wix-replatform/resources/rp-source-shopify/queries/url-redirects.graphql +0 -13
  360. package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-discovery.js +0 -693
  361. package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-extract.js +0 -283
  362. package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-gift-card-remedy.js +0 -191
  363. package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-session-check.js +0 -115
  364. package/skills/wix-replatform/resources/rp-source-shopify/source-schema.example.json +0 -201
  365. package/skills/wix-replatform/resources/rp-source-wordpress/PLUGIN-READ-PLANS.md +0 -146
  366. package/skills/wix-replatform/resources/rp-source-wordpress/SKILL.md +0 -970
  367. package/skills/wix-replatform/resources/rp-source-wordpress/lib/blocked-data-handlers.js +0 -73
  368. package/skills/wix-replatform/resources/rp-source-wordpress/lib/checkout-field-csv-parser.js +0 -115
  369. package/skills/wix-replatform/resources/rp-source-wordpress/lib/checkout-field-csv-parser.test-fixture.js +0 -91
  370. package/skills/wix-replatform/resources/rp-source-wordpress/lib/coupon-discovery.js +0 -440
  371. package/skills/wix-replatform/resources/rp-source-wordpress/lib/currency-gate.js +0 -125
  372. package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-source-keys.js +0 -252
  373. package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-source-keys.json +0 -183
  374. package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-summary.mjs +0 -333
  375. package/skills/wix-replatform/resources/rp-source-wordpress/lib/invoice-discovery.js +0 -426
  376. package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-disposition.js +0 -400
  377. package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-entity-read-plan.js +0 -633
  378. package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-knowledge.js +0 -1127
  379. package/skills/wix-replatform/resources/rp-source-wordpress/lib/refund-corroboration.js +0 -194
  380. package/skills/wix-replatform/resources/rp-source-wordpress/lib/refund-corroboration.json +0 -100
  381. package/skills/wix-replatform/resources/rp-source-wordpress/lib/sampled-ids-batch.js +0 -157
  382. package/skills/wix-replatform/resources/rp-source-wordpress/lib/secret-value-guard.js +0 -234
  383. package/skills/wix-replatform/resources/rp-source-wordpress/lib/store-currency.js +0 -101
  384. package/skills/wix-replatform/resources/rp-source-wordpress/lib/structure-bridge-reader.js +0 -755
  385. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wix-wp-plugin-v2-client.js +0 -1074
  386. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wix-wp-plugin-v2-client.test-fixture.js +0 -149
  387. package/skills/wix-replatform/resources/rp-source-wordpress/lib/woo-inventory.js +0 -25
  388. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-http.js +0 -444
  389. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-image-url.js +0 -186
  390. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-plugin-detect.js +0 -1422
  391. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-redirect-sources.js +0 -343
  392. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-route-classifier.js +0 -680
  393. package/skills/wix-replatform/resources/rp-source-wordpress/lib/yoast-product-seo-evidence.js +0 -272
  394. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/README.md +0 -373
  395. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/advanced-custom-fields.json +0 -101
  396. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/back-in-stock-notifier-for-woocommerce.json +0 -81
  397. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/capabilities-pending-decision.json +0 -128
  398. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/cms-fallback-eligible.json +0 -18
  399. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/contact-form-7.json +0 -104
  400. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/facebook-for-woocommerce.json +0 -44
  401. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/fingerprint-aliases.json +0 -49
  402. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/free-gifts-for-woocommerce.json +0 -94
  403. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/index.json +0 -863
  404. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/mailpoet.json +0 -52
  405. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/membership-for-woocommerce.json +0 -161
  406. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/mwb-bookings-for-woocommerce.json +0 -180
  407. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/no-migration-needed.json +0 -286
  408. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/pricing-deals-for-woocommerce.json +0 -79
  409. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/product-extras-for-woocommerce.json +0 -120
  410. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/pw-woocommerce-gift-cards.json +0 -128
  411. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/requires-development.json +0 -88
  412. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/seo-by-rank-math.json +0 -80
  413. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/seriously-simple-podcasting.json +0 -46
  414. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/strong-testimonials.json +0 -55
  415. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/subscriptions-for-woocommerce.json +0 -99
  416. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/tablepress.json +0 -55
  417. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/the-events-calendar.json +0 -160
  418. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/ti-woocommerce-wishlist.json +0 -81
  419. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-checkout-field-editor-pro.json +0 -60
  420. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-discount-rules.json +0 -74
  421. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-product-bundle.json +0 -75
  422. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-gift-cards.json +0 -60
  423. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-other-payment-gateway.json +0 -44
  424. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-pdf-invoices-packing-slips.json +0 -57
  425. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-product-addon.json +0 -141
  426. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-progressive-discounts.json +0 -54
  427. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wordpress-seo.json +0 -158
  428. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wpc-composite-products.json +0 -97
  429. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wpforms-lite.json +0 -86
  430. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/capture-store-settings.js +0 -90
  431. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/plugin-knowledge-validate.js +0 -51
  432. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/plugin-knowledge.js +0 -103
  433. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/wp-discovery.js +0 -2409
  434. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/wp-plugin-inventory.js +0 -273
  435. package/skills/wix-replatform/resources/rp-source-wordpress/secret-value-patterns.v1.json +0 -11
  436. package/skills/wix-replatform/resources/rp-source-wordpress/source-schema.example.json +0 -71
  437. package/skills/wix-replatform/resources/rp-source-wordpress/sub-parts.json +0 -13
  438. package/skills/wix-replatform/resources/rp-target-wix/SKILL.md +0 -1046
  439. package/skills/wix-replatform/resources/rp-target-wix/app-page-routing-capabilities.json +0 -36
  440. package/skills/wix-replatform/resources/rp-target-wix/domains/README.md +0 -57
  441. package/skills/wix-replatform/resources/rp-target-wix/domains/SERVICE-PLUGINS.md +0 -322
  442. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/docs-survey.json +0 -70
  443. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/domain.json +0 -29
  444. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/category.json +0 -71
  445. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/comment.json +0 -83
  446. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/post.json +0 -95
  447. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/tag.json +0 -66
  448. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/docs-survey.json +0 -332
  449. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/domain.json +0 -75
  450. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/booking.json +0 -181
  451. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/service-add-on.json +0 -130
  452. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/service.json +0 -180
  453. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/docs-survey.json +0 -161
  454. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/domain.json +0 -25
  455. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/collection.json +0 -67
  456. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/data-item.json +0 -75
  457. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/reference.json +0 -41
  458. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/docs-survey.json +0 -204
  459. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/domain.json +0 -27
  460. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/contact.json +0 -275
  461. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/email-subscription.json +0 -105
  462. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/label.json +0 -77
  463. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/docs-survey.json +0 -297
  464. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/domain.json +0 -44
  465. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/delivery-profile.json +0 -171
  466. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/discount-rule.json +0 -182
  467. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-applied-discount.json +0 -129
  468. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-invoice-document.json +0 -192
  469. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-line-item-options.json +0 -123
  470. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-line-item.json +0 -85
  471. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-merchant-note.json +0 -112
  472. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-payment.json +0 -191
  473. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-refund.json +0 -164
  474. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order.json +0 -462
  475. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/pickup-location.json +0 -122
  476. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/shipping-option.json +0 -98
  477. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/wishlist-item.json +0 -86
  478. package/skills/wix-replatform/resources/rp-target-wix/domains/events/docs-survey.json +0 -128
  479. package/skills/wix-replatform/resources/rp-target-wix/domains/events/domain.json +0 -38
  480. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/category.json +0 -73
  481. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/event.json +0 -107
  482. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/registration-form.json +0 -89
  483. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/rsvp.json +0 -118
  484. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/ticket-definition.json +0 -93
  485. package/skills/wix-replatform/resources/rp-target-wix/domains/forms/docs-survey.json +0 -86
  486. package/skills/wix-replatform/resources/rp-target-wix/domains/forms/domain.json +0 -56
  487. package/skills/wix-replatform/resources/rp-target-wix/domains/forms/entities/form-submission.json +0 -121
  488. package/skills/wix-replatform/resources/rp-target-wix/domains/forms/entities/form.json +0 -134
  489. package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/docs-survey.json +0 -41
  490. package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/domain.json +0 -50
  491. package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/entities/gift-card-product.json +0 -87
  492. package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/entities/gift-card.json +0 -130
  493. package/skills/wix-replatform/resources/rp-target-wix/domains/index.json +0 -1418
  494. package/skills/wix-replatform/resources/rp-target-wix/domains/media/docs-survey.json +0 -41
  495. package/skills/wix-replatform/resources/rp-target-wix/domains/media/domain.json +0 -24
  496. package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-file.json +0 -75
  497. package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-folder.json +0 -71
  498. package/skills/wix-replatform/resources/rp-target-wix/domains/members/docs-survey.json +0 -119
  499. package/skills/wix-replatform/resources/rp-target-wix/domains/members/domain.json +0 -23
  500. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/badge.json +0 -71
  501. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/custom-field.json +0 -82
  502. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/member-about.json +0 -77
  503. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/member.json +0 -205
  504. package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/docs-survey.json +0 -41
  505. package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/domain.json +0 -46
  506. package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/entities/plan-order.json +0 -137
  507. package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/entities/plan.json +0 -133
  508. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/docs-survey.json +0 -7
  509. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/domain.json +0 -36
  510. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/amazon-shop-connect.json +0 -71
  511. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/ebay-shop-connect.json +0 -67
  512. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/google-youtube-connect.json +0 -72
  513. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/meta-catalog-connect.json +0 -74
  514. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/pinterest-catalog-connect.json +0 -69
  515. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/tiktok-catalog-connect.json +0 -61
  516. package/skills/wix-replatform/resources/rp-target-wix/domains/schema.json +0 -111
  517. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/docs-survey.json +0 -109
  518. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/domain.json +0 -73
  519. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/item-seo-tags.json +0 -148
  520. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/seo-pattern.json +0 -91
  521. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/site-seo-tags.json +0 -79
  522. package/skills/wix-replatform/resources/rp-target-wix/domains/site/docs-survey.json +0 -32
  523. package/skills/wix-replatform/resources/rp-target-wix/domains/site/domain.json +0 -49
  524. package/skills/wix-replatform/resources/rp-target-wix/domains/site/entities/business-contact.json +0 -103
  525. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/docs-survey.json +0 -203
  526. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/domain.json +0 -42
  527. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/back-in-stock-request.json +0 -119
  528. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/brand.json +0 -111
  529. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/category.json +0 -81
  530. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/coupon.json +0 -241
  531. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/inventory-item.json +0 -118
  532. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-customization.json +0 -111
  533. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-tag.json +0 -79
  534. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product.json +0 -221
  535. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/promotion.json +0 -84
  536. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/review.json +0 -178
  537. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/subscription-product.json +0 -87
  538. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/docs-survey.json +0 -106
  539. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/domain.json +0 -64
  540. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/manual-tax-mapping.json +0 -119
  541. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-group.json +0 -94
  542. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-region.json +0 -113
  543. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-settings.json +0 -65
  544. package/skills/wix-replatform/resources/rp-target-wix/lib/audit-summary.js +0 -64
  545. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-author-attribution.js +0 -165
  546. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-client.js +0 -60
  547. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-duplicates.js +0 -201
  548. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-ledger.js +0 -306
  549. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-report.js +0 -229
  550. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-stage.js +0 -55
  551. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build.js +0 -715
  552. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-media.js +0 -567
  553. package/skills/wix-replatform/resources/rp-target-wix/lib/bulk-results.js +0 -73
  554. package/skills/wix-replatform/resources/rp-target-wix/lib/contact-extended-fields.js +0 -194
  555. package/skills/wix-replatform/resources/rp-target-wix/lib/contact-import.js +0 -133
  556. package/skills/wix-replatform/resources/rp-target-wix/lib/contract-ledger.js +0 -150
  557. package/skills/wix-replatform/resources/rp-target-wix/lib/coupon-redemption-drift.js +0 -491
  558. package/skills/wix-replatform/resources/rp-target-wix/lib/customer-member.js +0 -104
  559. package/skills/wix-replatform/resources/rp-target-wix/lib/data-extension-schema.js +0 -673
  560. package/skills/wix-replatform/resources/rp-target-wix/lib/domain-knowledge.js +0 -835
  561. package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-balance-reconciliation.js +0 -119
  562. package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-build.js +0 -566
  563. package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-redemption-build.js +0 -249
  564. package/skills/wix-replatform/resources/rp-target-wix/lib/ndjson.js +0 -260
  565. package/skills/wix-replatform/resources/rp-target-wix/lib/order-applied-discount-build.js +0 -63
  566. package/skills/wix-replatform/resources/rp-target-wix/lib/order-buyer.js +0 -187
  567. package/skills/wix-replatform/resources/rp-target-wix/lib/order-channel-build.js +0 -64
  568. package/skills/wix-replatform/resources/rp-target-wix/lib/order-history.js +0 -1027
  569. package/skills/wix-replatform/resources/rp-target-wix/lib/order-invoice-contract.js +0 -90
  570. package/skills/wix-replatform/resources/rp-target-wix/lib/order-payment-mapping.js +0 -420
  571. package/skills/wix-replatform/resources/rp-target-wix/lib/pricing-plan-definition.js +0 -177
  572. package/skills/wix-replatform/resources/rp-target-wix/lib/product-import.js +0 -151
  573. package/skills/wix-replatform/resources/rp-target-wix/lib/product-seo.js +0 -723
  574. package/skills/wix-replatform/resources/rp-target-wix/lib/seo-redirects.js +0 -353
  575. package/skills/wix-replatform/resources/rp-target-wix/lib/shipping-build.js +0 -1437
  576. package/skills/wix-replatform/resources/rp-target-wix/lib/shipping-option-stage.js +0 -354
  577. package/skills/wix-replatform/resources/rp-target-wix/lib/store-config-build.js +0 -134
  578. package/skills/wix-replatform/resources/rp-target-wix/lib/stores-category-attach.js +0 -221
  579. package/skills/wix-replatform/resources/rp-target-wix/lib/stores-inventory.js +0 -248
  580. package/skills/wix-replatform/resources/rp-target-wix/lib/stores-verification.js +0 -321
  581. package/skills/wix-replatform/resources/rp-target-wix/lib/tax-build.js +0 -231
  582. package/skills/wix-replatform/resources/rp-target-wix/lib/url-mapper-transport.js +0 -28
  583. package/skills/wix-replatform/resources/rp-target-wix/lib/value-utils.js +0 -14
  584. package/skills/wix-replatform/resources/rp-target-wix/lib/variant-correlation.js +0 -34
  585. package/skills/wix-replatform/resources/rp-target-wix/lib/wix-build.js +0 -388
  586. package/skills/wix-replatform/resources/rp-target-wix/lib/wix-target-spec.js +0 -255
  587. package/skills/wix-replatform/resources/rp-target-wix/lib/wix-writers.js +0 -6041
  588. package/skills/wix-replatform/resources/rp-target-wix/lib/write-verification.js +0 -3
  589. package/skills/wix-replatform/resources/rp-target-wix/scripts/docs-survey-sync.js +0 -150
  590. package/skills/wix-replatform/resources/rp-target-wix/scripts/domain-knowledge-validate.js +0 -69
  591. package/skills/wix-replatform/resources/rp-target-wix/scripts/domain-knowledge.js +0 -100
  592. package/skills/wix-replatform/resources/rp-target-wix/scripts/verify-stores.js +0 -112
  593. package/skills/wix-replatform/resources/rp-telemetry/SKILL.md +0 -484
  594. package/skills/wix-replatform/resources/rp-telemetry/lib/bi-sink.js +0 -318
  595. package/skills/wix-replatform/resources/rp-telemetry/lib/telemetry-recorder.js +0 -2831
  596. package/skills/wix-replatform/resources/rp-telemetry/lib/transcript-digest.js +0 -318
  597. package/skills/wix-replatform/resources/rp-telemetry/scripts/meter-from-audit.js +0 -83
  598. package/skills/wix-replatform/resources/rp-telemetry/scripts/rp-telemetry.js +0 -243
  599. package/skills/wix-replatform/resources/rp-website-continuation/SKILL.md +0 -94
  600. package/skills/wix-replatform/scripts/artifact-freshness.js +0 -76
  601. package/skills/wix-replatform/scripts/census-reconciliation.js +0 -25
  602. package/skills/wix-replatform/scripts/cms-fallback.js +0 -89
  603. package/skills/wix-replatform/scripts/discovered-census.js +0 -26
  604. package/skills/wix-replatform/scripts/discovered-set-status.js +0 -33
  605. package/skills/wix-replatform/scripts/entity-qa-attestation.js +0 -130
  606. package/skills/wix-replatform/scripts/execution-health-check.js +0 -415
  607. package/skills/wix-replatform/scripts/execution-manifest-validate.js +0 -43
  608. package/skills/wix-replatform/scripts/execution-state-prepare.js +0 -128
  609. package/skills/wix-replatform/scripts/expectations-ledger.js +0 -44
  610. package/skills/wix-replatform/scripts/import-contract-verify.js +0 -183
  611. package/skills/wix-replatform/scripts/internal-link-audit.js +0 -90
  612. package/skills/wix-replatform/scripts/item-seo-tags-verify.js +0 -205
  613. package/skills/wix-replatform/scripts/migration-completion.js +0 -76
  614. package/skills/wix-replatform/scripts/orchestration-preflight.js +0 -67
  615. package/skills/wix-replatform/scripts/orchestration-route.js +0 -77
  616. package/skills/wix-replatform/scripts/orchestration-state.js +0 -381
  617. package/skills/wix-replatform/scripts/read-back-gate.js +0 -175
  618. package/skills/wix-replatform/scripts/replatform-console.js +0 -146
  619. package/skills/wix-replatform/scripts/replatform.js +0 -436
  620. package/skills/wix-replatform/scripts/source-secrets.js +0 -77
  621. package/skills/wix-replatform/scripts/url-redirects.js +0 -286
  622. package/skills/wix-replatform/scripts/user-action.js +0 -58
  623. package/skills/wix-replatform/scripts/website-handoff-generate.js +0 -64
  624. package/skills/wix-replatform/scripts/wix-dashboard-url.js +0 -54
  625. package/skills/wix-replatform/scripts/wix-destination.js +0 -143
  626. package/skills/wix-replatform/scripts/wix-headless-scaffold.js +0 -762
  627. package/skills/wix-vibe-headless/SKILL.md +0 -183
  628. package/skills/wix-vibe-headless/install/deploy.cjs +0 -221
  629. package/skills/wix-vibe-headless/install/pin-agents-md.cjs +0 -35
  630. package/skills/wix-vibe-headless/platforms/README.md +0 -26
  631. package/skills/wix-vibe-headless/platforms/base44-ecom-light-seed-with-install.md +0 -127
  632. package/skills/wix-vibe-headless/platforms/base44-ecom-light-seed.md +0 -121
  633. package/skills/wix-vibe-headless/platforms/base44-ecom-light.md +0 -87
  634. package/skills/wix-vibe-headless/platforms/base44.md +0 -148
  635. package/skills/wix-vibe-headless/platforms/generic.md +0 -132
  636. package/skills/wix-vibe-headless/references/_shared/nav/nav.tanstack.js +0 -30
  637. package/skills/wix-vibe-headless/references/_shared/routing.md +0 -86
  638. package/skills/wix-vibe-headless/references/blog/INSTRUCTIONS.md +0 -270
  639. package/skills/wix-vibe-headless/references/blog/app/components/PostCard.jsx +0 -43
  640. package/skills/wix-vibe-headless/references/blog/app/components/PostChips.jsx +0 -25
  641. package/skills/wix-vibe-headless/references/blog/app/components/PostGrid.jsx +0 -15
  642. package/skills/wix-vibe-headless/references/blog/app/context/TaxonomyContext.jsx +0 -35
  643. package/skills/wix-vibe-headless/references/blog/app/hooks/usePostDetail.js +0 -38
  644. package/skills/wix-vibe-headless/references/blog/app/pages/Blog.jsx +0 -40
  645. package/skills/wix-vibe-headless/references/blog/app/pages/CategoryPage.jsx +0 -54
  646. package/skills/wix-vibe-headless/references/blog/app/pages/PostDetail.jsx +0 -65
  647. package/skills/wix-vibe-headless/references/blog/app/pages/TagPage.jsx +0 -50
  648. package/skills/wix-vibe-headless/references/blog/app/rest/wix-blog.js +0 -217
  649. package/skills/wix-vibe-headless/references/blog/seed/SEED.md +0 -99
  650. package/skills/wix-vibe-headless/references/blog/seed/seed-blog.cjs +0 -269
  651. package/skills/wix-vibe-headless/references/bookings/INSTRUCTIONS.md +0 -342
  652. package/skills/wix-vibe-headless/references/bookings/app/components/BookingForm.jsx +0 -65
  653. package/skills/wix-vibe-headless/references/bookings/app/components/RentalDurationPicker.jsx +0 -67
  654. package/skills/wix-vibe-headless/references/bookings/app/components/ServiceCard.jsx +0 -47
  655. package/skills/wix-vibe-headless/references/bookings/app/components/ServiceGrid.jsx +0 -13
  656. package/skills/wix-vibe-headless/references/bookings/app/components/SlotPicker.jsx +0 -126
  657. package/skills/wix-vibe-headless/references/bookings/app/hooks/useRentalDuration.js +0 -128
  658. package/skills/wix-vibe-headless/references/bookings/app/hooks/useServiceDetail.js +0 -110
  659. package/skills/wix-vibe-headless/references/bookings/app/hooks/useServices.js +0 -58
  660. package/skills/wix-vibe-headless/references/bookings/app/lib/serviceFacts.js +0 -95
  661. package/skills/wix-vibe-headless/references/bookings/app/pages/ServiceDetail.jsx +0 -94
  662. package/skills/wix-vibe-headless/references/bookings/app/pages/Services.jsx +0 -89
  663. package/skills/wix-vibe-headless/references/bookings/app/rest/wix-bookings-checkout.js +0 -148
  664. package/skills/wix-vibe-headless/references/bookings/app/rest/wix-bookings-rentals.js +0 -250
  665. package/skills/wix-vibe-headless/references/bookings/app/rest/wix-bookings-services.js +0 -300
  666. package/skills/wix-vibe-headless/references/bookings/seed/SEED.md +0 -154
  667. package/skills/wix-vibe-headless/references/bookings/seed/seed-bookings.cjs +0 -333
  668. package/skills/wix-vibe-headless/references/bookings/seed/seed-rentals.cjs +0 -267
  669. package/skills/wix-vibe-headless/references/cms/INSTRUCTIONS.md +0 -178
  670. package/skills/wix-vibe-headless/references/cms/app/collection.config.js +0 -31
  671. package/skills/wix-vibe-headless/references/cms/app/lib/wixImage.js +0 -18
  672. package/skills/wix-vibe-headless/references/cms/app/rest/wix-cms.js +0 -231
  673. package/skills/wix-vibe-headless/references/cms/seed/SEED.md +0 -145
  674. package/skills/wix-vibe-headless/references/donations/INSTRUCTIONS.md +0 -88
  675. package/skills/wix-vibe-headless/references/donations/app/rest/wix-donations.js +0 -112
  676. package/skills/wix-vibe-headless/references/donations/seed/SEED.md +0 -11
  677. package/skills/wix-vibe-headless/references/donations/tests/donations.test.mjs +0 -258
  678. package/skills/wix-vibe-headless/references/events/INSTRUCTIONS.md +0 -267
  679. package/skills/wix-vibe-headless/references/events/app/components/CategoryFilter.jsx +0 -23
  680. package/skills/wix-vibe-headless/references/events/app/components/EventCard.jsx +0 -43
  681. package/skills/wix-vibe-headless/references/events/app/components/EventGrid.jsx +0 -13
  682. package/skills/wix-vibe-headless/references/events/app/components/EventRegistration.jsx +0 -29
  683. package/skills/wix-vibe-headless/references/events/app/components/RsvpForm.jsx +0 -57
  684. package/skills/wix-vibe-headless/references/events/app/components/TicketPicker.jsx +0 -78
  685. package/skills/wix-vibe-headless/references/events/app/hooks/useEventDetail.js +0 -27
  686. package/skills/wix-vibe-headless/references/events/app/hooks/useEventsList.js +0 -54
  687. package/skills/wix-vibe-headless/references/events/app/hooks/useRsvpForm.js +0 -40
  688. package/skills/wix-vibe-headless/references/events/app/hooks/useTicketing.js +0 -81
  689. package/skills/wix-vibe-headless/references/events/app/pages/EventDetail.jsx +0 -48
  690. package/skills/wix-vibe-headless/references/events/app/pages/Events.jsx +0 -36
  691. package/skills/wix-vibe-headless/references/events/app/rest/wix-events-browse.js +0 -136
  692. package/skills/wix-vibe-headless/references/events/app/rest/wix-events-registration.js +0 -187
  693. package/skills/wix-vibe-headless/references/events/seed/SEED.md +0 -103
  694. package/skills/wix-vibe-headless/references/events/seed/seed-events.cjs +0 -251
  695. package/skills/wix-vibe-headless/references/forms/INSTRUCTIONS.md +0 -487
  696. package/skills/wix-vibe-headless/references/forms/app/hooks/useWixForm.js +0 -425
  697. package/skills/wix-vibe-headless/references/forms/app/lib/wix-form-schema-utils.js +0 -187
  698. package/skills/wix-vibe-headless/references/forms/app/rest/wix-forms-submissions.js +0 -238
  699. package/skills/wix-vibe-headless/references/forms/app/rest/wix-forms.js +0 -108
  700. package/skills/wix-vibe-headless/references/forms/seed/SEED.md +0 -1836
  701. package/skills/wix-vibe-headless/references/members/INSTRUCTIONS.md +0 -328
  702. package/skills/wix-vibe-headless/references/members/app/components/LoginForm.jsx +0 -101
  703. package/skills/wix-vibe-headless/references/members/app/components/MemberMenu.jsx +0 -33
  704. package/skills/wix-vibe-headless/references/members/app/components/RequireAuth.jsx +0 -21
  705. package/skills/wix-vibe-headless/references/members/app/components/SocialButtons.jsx +0 -29
  706. package/skills/wix-vibe-headless/references/members/app/context/MemberContext.jsx +0 -54
  707. package/skills/wix-vibe-headless/references/members/app/hooks/useLoginForm.js +0 -77
  708. package/skills/wix-vibe-headless/references/members/app/pages/Account.jsx +0 -36
  709. package/skills/wix-vibe-headless/references/members/app/pages/Callback.jsx +0 -32
  710. package/skills/wix-vibe-headless/references/members/app/pages/Login.jsx +0 -35
  711. package/skills/wix-vibe-headless/references/members/app/rest/wix-members-auth.js +0 -390
  712. package/skills/wix-vibe-headless/references/members/install/Register.jsx +0 -22
  713. package/skills/wix-vibe-headless/references/members/seed/SEED.md +0 -21
  714. package/skills/wix-vibe-headless/references/portfolio/INSTRUCTIONS.md +0 -270
  715. package/skills/wix-vibe-headless/references/portfolio/app/components/CollectionCard.jsx +0 -31
  716. package/skills/wix-vibe-headless/references/portfolio/app/components/CollectionGrid.jsx +0 -15
  717. package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectCard.jsx +0 -39
  718. package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectGrid.jsx +0 -15
  719. package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectMedia.jsx +0 -29
  720. package/skills/wix-vibe-headless/references/portfolio/app/hooks/useCollectionProjects.js +0 -35
  721. package/skills/wix-vibe-headless/references/portfolio/app/hooks/usePortfolioGallery.js +0 -27
  722. package/skills/wix-vibe-headless/references/portfolio/app/hooks/useProjectDetail.js +0 -25
  723. package/skills/wix-vibe-headless/references/portfolio/app/pages/CollectionPage.jsx +0 -39
  724. package/skills/wix-vibe-headless/references/portfolio/app/pages/Portfolio.jsx +0 -27
  725. package/skills/wix-vibe-headless/references/portfolio/app/pages/ProjectDetail.jsx +0 -60
  726. package/skills/wix-vibe-headless/references/portfolio/app/rest/wix-portfolio.js +0 -223
  727. package/skills/wix-vibe-headless/references/portfolio/seed/SEED.md +0 -90
  728. package/skills/wix-vibe-headless/references/portfolio/seed/seed-portfolio.cjs +0 -236
  729. package/skills/wix-vibe-headless/references/pricing-plans/INSTRUCTIONS.md +0 -280
  730. package/skills/wix-vibe-headless/references/pricing-plans/app/components/OrderCard.jsx +0 -35
  731. package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanCard.jsx +0 -48
  732. package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanGrid.jsx +0 -16
  733. package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanPrice.jsx +0 -35
  734. package/skills/wix-vibe-headless/references/pricing-plans/app/hooks/useMyPlans.js +0 -25
  735. package/skills/wix-vibe-headless/references/pricing-plans/app/hooks/usePlanDetail.js +0 -28
  736. package/skills/wix-vibe-headless/references/pricing-plans/app/hooks/usePlans.js +0 -30
  737. package/skills/wix-vibe-headless/references/pricing-plans/app/pages/MyPlans.jsx +0 -30
  738. package/skills/wix-vibe-headless/references/pricing-plans/app/pages/PlanDetail.jsx +0 -53
  739. package/skills/wix-vibe-headless/references/pricing-plans/app/pages/Plans.jsx +0 -28
  740. package/skills/wix-vibe-headless/references/pricing-plans/app/rest/wix-pricing-plans.js +0 -157
  741. package/skills/wix-vibe-headless/references/pricing-plans/seed/SEED.md +0 -82
  742. package/skills/wix-vibe-headless/references/pricing-plans/seed/seed-pricing-plans.cjs +0 -251
  743. package/skills/wix-vibe-headless/references/rentals/INSTRUCTIONS.md +0 -13
  744. package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +0 -290
  745. package/skills/wix-vibe-headless/references/restaurants/app/components/ItemDialog.jsx +0 -81
  746. package/skills/wix-vibe-headless/references/restaurants/app/components/MenuItemCard.jsx +0 -71
  747. package/skills/wix-vibe-headless/references/restaurants/app/components/MenuList.jsx +0 -43
  748. package/skills/wix-vibe-headless/references/restaurants/app/components/OrderCartButton.jsx +0 -21
  749. package/skills/wix-vibe-headless/references/restaurants/app/components/OrderCartDrawer.jsx +0 -72
  750. package/skills/wix-vibe-headless/references/restaurants/app/context/OrderCartContext.jsx +0 -66
  751. package/skills/wix-vibe-headless/references/restaurants/app/hooks/useItemOrder.js +0 -32
  752. package/skills/wix-vibe-headless/references/restaurants/app/hooks/useReservation.js +0 -73
  753. package/skills/wix-vibe-headless/references/restaurants/app/pages/Menu.jsx +0 -28
  754. package/skills/wix-vibe-headless/references/restaurants/app/pages/Reservations.jsx +0 -102
  755. package/skills/wix-vibe-headless/references/restaurants/app/rest/wix-restaurants-menu.js +0 -224
  756. package/skills/wix-vibe-headless/references/restaurants/app/rest/wix-restaurants-ordering.js +0 -218
  757. package/skills/wix-vibe-headless/references/restaurants/app/rest/wix-restaurants-reservations.js +0 -107
  758. package/skills/wix-vibe-headless/references/restaurants/seed/SEED.md +0 -176
  759. package/skills/wix-vibe-headless/references/restaurants/seed/seed-restaurants.cjs +0 -452
  760. package/skills/wix-vibe-headless/references/shared/app/components/WixManageBanner.jsx +0 -56
  761. package/skills/wix-vibe-headless/references/shared/app/lib/nav.js +0 -9
  762. package/skills/wix-vibe-headless/references/shared/app/rest/wix-client.js +0 -185
  763. package/skills/wix-vibe-headless/references/shared/app/rest/wix-config.js +0 -8
  764. package/skills/wix-vibe-headless/references/storefront/INSTRUCTIONS.md +0 -471
  765. package/skills/wix-vibe-headless/references/storefront/app/components/CartButton.jsx +0 -20
  766. package/skills/wix-vibe-headless/references/storefront/app/components/CartDrawer.jsx +0 -167
  767. package/skills/wix-vibe-headless/references/storefront/app/context/CartContext.jsx +0 -83
  768. package/skills/wix-vibe-headless/references/storefront/app/hooks/useProductCard.js +0 -104
  769. package/skills/wix-vibe-headless/references/storefront/app/hooks/useProductDetail.js +0 -163
  770. package/skills/wix-vibe-headless/references/storefront/app/hooks/useShop.js +0 -83
  771. package/skills/wix-vibe-headless/references/storefront/app/hooks/useVariantOptions.js +0 -76
  772. package/skills/wix-vibe-headless/references/storefront/app/lib/storeImage.js +0 -64
  773. package/skills/wix-vibe-headless/references/storefront/app/rest/wix-store-cart.js +0 -176
  774. package/skills/wix-vibe-headless/references/storefront/app/rest/wix-store-catalog.js +0 -218
  775. package/skills/wix-vibe-headless/references/storefront/seed/SEED.md +0 -174
  776. package/skills/wix-vibe-headless/references/storefront/seed/seed-store.cjs +0 -546
@@ -1,970 +0,0 @@
1
- ---
2
- name: rp-source-wordpress
3
- description: >-
4
- WordPress and WooCommerce source adapter: REST capture, auth, pagination, and read
5
- contract for codegen. Use when the source platform is WordPress or WooCommerce.
6
- ---
7
-
8
- # rp-source-wordpress
9
-
10
- WordPress / WooCommerce **source adapter**. Owns every WordPress-specific detail the
11
- platform-agnostic skills must not hardcode: how to capture the schema, how to read the
12
- data, auth models, pagination, and REST quirks.
13
-
14
- ## When this skill is used
15
-
16
- This is not a stage in the migration flow — it is a reference consulted by two stages:
17
-
18
- - **`rp-discovery`** consults the *Capture* section to sample the source and produce the
19
- canonical `source-profile.md` + `source-schema.json`.
20
- - **`rp-import-codegen`** consults the *Read contract* section to generate a reader that
21
- bulk-extracts WordPress data correctly (auth, pagination, `wc/v3` vs `wp/v2`) into
22
- durable project-local files for the later import step.
23
-
24
- `rp-execute-import` never consults this skill — by the time execution runs, the
25
- WordPress-specific knowledge is already baked into the generated reader code. Keeping the
26
- WordPress knowledge here is what lets the rest of the workflow stay platform-agnostic.
27
-
28
- For app routing and internal-link reconciliation, the generated reader also enumerates the captured source roots, declared
29
- source hosts, source permalink/alias evidence, and each record's containing source page.
30
- It passes those facts to the shared `internal-link-audit.js plan` input after backend
31
- import. Do not infer the containing page from a file basename or assume a default
32
- WooCommerce path. The deterministic census records every captured file as scanned,
33
- unreadable or unsupported; unsupported documents, dynamic URLs and missing captures
34
- remain coverage items. Never scan `config/*.env` or execute captured source code.
35
-
36
- ## Platform identity
37
-
38
- - Source platform: WordPress (core REST `wp/v2`), optionally WooCommerce (`wc/v3`).
39
- - Detect by hitting `<base-url>/wp-json/` — the REST index lists advertised namespaces.
40
- - Set `"platform": "wordpress"` (and note WooCommerce presence in `sourceMeta`) in the
41
- emitted `source-schema.json`. This describes the discovery artifact, not the orchestration
42
- decision.
43
- - Once discovery confirms WooCommerce, record `sourcePlatform.value=woocommerce` in
44
- `orchestration/decisions.json` and use `config/source.woocommerce.env`. Otherwise record
45
- `sourcePlatform.value=wordpress` there and use `config/source.wordpress.env`. Generated
46
- importers read that exact nested value — never the decision wrapper object and never the
47
- nullable `orchestration/run.json` `sourcePlatform` field. The adapter remains
48
- `rp-source-wordpress` in both cases.
49
-
50
- ## Capture (discovery-time)
51
-
52
- Sampling the source to learn its shape — **not** a bulk export.
53
-
54
- The Wix domain knowledge base may be used as a classifier supplement during synthesis,
55
- but not as a sampling mandate. When a discovered WordPress/WooCommerce route matches a
56
- known alias, annotate the emitted entity with `sourceMeta.candidateTargetRefs[]`; do not
57
- turn that hint into a target decision here. Keep frontend, theme, runtime, admin, and
58
- transient routes skipped by default even if a knowledge entry exists for a related
59
- setup/config target.
60
-
61
- After identifying the platform, verify `migrations/<project>/config/source.<platform>.env`.
62
- For a confirmed WooCommerce source, this is `source.woocommerce.env`; for WordPress without
63
- WooCommerce evidence, it is `source.wordpress.env`. Create the selected file if missing with
64
- empty values:
65
-
66
- ```bash
67
- WP_BASE_URL=
68
- WP_USERNAME=
69
- WP_APPLICATION_PASSWORD=
70
- WMH2_MIGRATION_KEY=
71
- WP_MEDIA_URL_REWRITE_FROM=
72
- WP_MEDIA_URL_REWRITE_TO=
73
- WC_CONSUMER_KEY=
74
- WC_CONSUMER_SECRET=
75
- ```
76
-
77
- Before requesting any WordPress / WooCommerce credentials for a URL-based migration, ask
78
- the user which data scope they want:
79
-
80
- - `public content only`
81
- - `also include private/authenticated data`
82
-
83
- This choice is mandatory and must be explicit. Do not ask for `WP_USERNAME`,
84
- `WP_APPLICATION_PASSWORD`, or WooCommerce keys until the user chooses `also include
85
- private/authenticated data`. Request `WMH2_MIGRATION_KEY` only when bridge-backed entities
86
- are actually in scope and the detected source has no WooCommerce. Collect every sensitive
87
- value through the secure Secrets Manager flow; do not ask the user to paste it into chat.
88
-
89
- There are two independent scopes, and a complete run may need both credentials:
90
-
91
- - **Private WordPress/WooCommerce REST** (`wp/v2`, `wc/v3`) requires a WordPress
92
- Application Password (`WP_USERNAME` + `WP_APPLICATION_PASSWORD`).
93
- - **`wix-wp-plugin-v2` bridge reads** use the Application Password path only when
94
- WooCommerce is present, because that route requires `manage_woocommerce`. When the
95
- source has no WooCommerce, collect `WMH2_MIGRATION_KEY` for bridge reads instead. The
96
- key is generated and shown once on the plugin's wp-admin page at activation or rotation.
97
- It never authenticates ordinary `wp/v2` or `wc/v3` reads.
98
-
99
- Key sensitivity is predefined and does not change at runtime. Requiredness is separate
100
- and may depend on the selected acquisition mode or source behavior.
101
-
102
- | Key | Sensitivity | Requiredness |
103
- |---|---|---|
104
- | `WP_BASE_URL` | non-sensitive | Required for URL-based capture |
105
- | `WP_USERNAME` | sensitive | Required for private/authenticated WordPress capture via Application Password |
106
- | `WP_APPLICATION_PASSWORD` | sensitive | Required for private/authenticated WordPress capture via Application Password |
107
- | `WMH2_MIGRATION_KEY` | sensitive | Required for `wix-wp-plugin-v2` bridge reads when the source has no WooCommerce; optional otherwise |
108
- | `WP_MEDIA_URL_REWRITE_FROM` | non-sensitive | Optional |
109
- | `WP_MEDIA_URL_REWRITE_TO` | non-sensitive | Optional |
110
- | `WC_CONSUMER_KEY` | sensitive | Optional unless WooCommerce rejects the WordPress Application Password for `wc/v3` reads |
111
- | `WC_CONSUMER_SECRET` | sensitive | Optional unless WooCommerce rejects the WordPress Application Password for `wc/v3` reads |
112
-
113
- Required for a complete WordPress/WooCommerce capture:
114
-
115
- - `WP_BASE_URL`
116
- - `WP_USERNAME` + `WP_APPLICATION_PASSWORD` when private REST-visible data is in scope
117
- - `WMH2_MIGRATION_KEY` additionally when bridge-backed entities are in scope and the
118
- source has no WooCommerce
119
-
120
- ⚠️ **`WMH2_MIGRATION_KEY` only unblocks the plugin's own `/structure` and `/query` routes**
121
- (`wix-wp-plugin-v2`'s `structure-bridge-plugin` entities — custom plugin tables with no REST
122
- route) — `wp-discovery.js`/`wix-wp-plugin-v2-client.js` sign requests with it
123
- automatically when the signed bridge path is selected. It does **not** authenticate
124
- standard WordPress/WooCommerce REST (`wp/v2`, `wc/v3`) at all — reading posts, pages,
125
- products, orders, customers, and every other REST-visible entity still requires the
126
- Application Password. On a source site with no WooCommerce, the Application Password routes
127
- are `manage_woocommerce`-gated and unusable by any user regardless, so the migration key is
128
- the only credential that reaches the bridge. If no separate WordPress REST credential is
129
- available, ordinary private content still cannot be captured through this adapter and needs
130
- another source API or export.
131
-
132
- `WC_CONSUMER_KEY` and `WC_CONSUMER_SECRET` are optional when WooCommerce accepts the
133
- WordPress Application Password for `wc/v3` reads; ask for them only if WooCommerce routes
134
- return 401/403 with the WordPress Application Password.
135
-
136
- `WP_MEDIA_URL_REWRITE_FROM` and `WP_MEDIA_URL_REWRITE_TO` are optional. Use them when the
137
- WordPress API is reached through a public tunnel but media/file URLs inside records still
138
- point at `localhost` or another private origin. If they are blank, generated readers may
139
- rewrite localhost/private origins to `WP_BASE_URL` when `WP_BASE_URL` is public.
140
-
141
- `config/source.<platform>.env` is a secret-bearing file once it may contain real values.
142
- Do not read it with whole-file commands that print its contents into tool output. Check
143
- only whether the file exists and whether each required key is present/blank/missing; when
144
- describing status, name keys only and never echo values.
145
-
146
- 1. Run the deterministic capture script **from this skill's directory** (the folder
147
- containing this `SKILL.md`; see `CONVENTIONS.md`):
148
-
149
- ```
150
- node scripts/wp-discovery.js --env-file <migrations-root>/<project>/config/source.<platform>.env --out-dir <migrations-root>/<project>/data/wp-discovery
151
- ```
152
-
153
- It walks the REST index, runs one `OPTIONS` + a small `GET` sample per entity, and
154
- writes per-entity markdown (routes, schemas, sample records, record counts,
155
- relationships). `--env-file` is the preferred launch path for project-local
156
- credential-bearing config because it avoids shell sourcing of secret-bearing files.
157
- Pass direct auth options only when there is no project-local config yet.
158
- For long runs, pass `--progress-log <path>` and poll it per
159
- `CONVENTIONS.md#progress-log-polling`.
160
-
161
- 2. If the user chose `public content only`, run unauthenticated and keep the scope framed
162
- as public-only. Do not pivot into asking for credentials unless the user changes scope.
163
-
164
- 3. **Credentials are required for a complete capture.** Without auth, only published
165
- public content is reachable; drafts, WooCommerce (`wc/v3`), user PII, and private
166
- fields return 401/403, making their `recordCount`/`inUse` unreliable. The script flags
167
- this in its README under "Incomplete Capture (Authentication)" — do not treat an
168
- unauthenticated run as authoritative.
169
-
170
- **Author identity is a specific casualty of public-only capture.** Public
171
- `/wp/v2/users` lists only users who authored public posts and exposes **no `roles`
172
- and no emails** — admin vs editor vs contributor vs subscriber is indistinguishable.
173
- Roles/capabilities require `context=edit` (App Password with `list_users`) or a DB
174
- dump (`wp_usermeta` → `wp_capabilities`); WXR exports carry author login/email/display
175
- name but no roles either. Vanilla WP has no guest-byline concept (every byline is a
176
- user); plugin guest authors (Co-Authors Plus `guest-author` entities) are separate
177
- non-user records. Record author capture mode in the source profile — it determines the
178
- blog `authorAttributionMode` downstream (public-only → fallback/owner attribution;
179
- authenticated → per-author mapping: administrators → owner user-member,
180
- content roles → per-author members; subscribers/customers → **Wix contacts by
181
- default** — a contact is the no-login CRM person entity and Contacts V5 upserts in
182
- bulk — promote to full site members (1/sec serial, re-registration) only when
183
- member-gated features are in scope. Every Wix member auto-creates its contact, so
184
- member-first ordering: never pre-create a contact for someone who will become a
185
- member. Note contacts cannot author blog posts or comments — bylines need members).
186
-
187
- 4. Distinguish **supported** entities (advertised by the REST index) from **used**
188
- entities (those with `recordCount > 0`). Entities advertised but empty should be
189
- flagged, not mapped as if they hold data.
190
-
191
- 5. **Backend data scope.** The capture script classifies REST routes before per-route
192
- `OPTIONS` or sample `GET` requests. By default it samples backend data routes and skips
193
- frontend, theme/editor, runtime session, admin dashboard, diagnostics, marketplace
194
- setup, and integration/helper APIs. It writes the skipped-route audit trail to
195
- `skipped-routes.json`.
196
-
197
- It also always writes `source-coverage.json` (`rows: []` when clean): one row per entity
198
- whose data request returned 401/403 (`auth-gated`) or failed with no records (an
199
- OPTIONS-probe failure alone is not one), per backend data route skipped by rule, per
200
- credential-bearing route never read (`not-recoverable`), and per unsupported route
201
- namespace. Frontend, theme, admin and transient skips get no row. `rp-discovery` promotes it; never edit it by hand.
202
-
203
- For WooCommerce, prefer canonical durable data APIs such as `wc/v3` over duplicated
204
- `wc/v2`/`wc/v1` routes for authenticated/private commerce reads. For `public content only`
205
- discovery, probe public Store API catalog routes before declaring commerce deferred:
206
- `wc/store/v1/products` and `wc/store/v1/products/categories` are in-scope public
207
- commerce data when present. Cart and checkout Store API routes remain out of scope as
208
- runtime session state.
209
-
210
- **Images: never read a field, always resolve.** An image reference in a WordPress-family
211
- payload is a *set* of candidate URLs for one picture — the merchant's original upload plus
212
- the crops WordPress generated from it. Which field holds the original varies by route, and
213
- the two WooCommerce APIs disagree on the **same site**: on `wc/store/v1` `images[].src` is
214
- the original, while on `wc/v3` it is resolved through WordPress's registered image sizes
215
- and can be the *smallest* crop, because any theme or image-optimizer plugin may redefine
216
- those sizes. Pass the whole reference to `resolveImageUrl` / `resolveImageUrls` in
217
- `lib/wp-image-url.js` and use what it returns. It handles `src`, `thumbnail`,
218
- `source_url`, `srcset`, `thumbnail_srcset`, and `media_details.sizes.*`, prefers the
219
- original, falls back to the widest crop, percent-encodes the result, and retains the
220
- attachment id as `sourceId` for the media-record check below.
221
-
222
- **Product pictures require source-record confirmation in generated imports.** For the
223
- exact orchestration identities `woocommerce` and `wordpress`, resolving the product
224
- reference is only the first step. Vendor/use the shared root `lib/confirmed-pictures.js`:
225
- collect the selected products' distinct positive `sourceId` values, call
226
- `readSourceMediaRecords({ ids, source: { baseUrl, request: authenticatedWpRequest } })`,
227
- where that wrapper delegates to `fetchJson` with the run's existing auth headers, then pass each
228
- whole resolved gallery to `confirmPictures`. The read requests authenticated
229
- `GET /wp/v2/media?include=<ids>&per_page=100` chunks in sorted groups of at most 100; each
230
- chunk has one total 60-second transport deadline. The media record's `source_url` is the
231
- evidence. Never infer an original from the filename and never construct a lookalike read or
232
- confirmed list: provenance is private to the shared module.
233
-
234
- A picture with no positive attachment id, no returned media record, or a media record in an
235
- unreadable chunk is unconfirmed (`no-source-id`, `no-source-record`, or
236
- `source-unreadable`). One unconfirmed picture defers the entire product gallery; continue
237
- with non-media product fields and follow `rp-import-codegen`'s ledger/recovery contract.
238
- Quick mode is unchanged and does not use this boundary.
239
-
240
- ⚠️ This is not optional on the public path just because `src` happens to be right there
241
- today. Same call, everywhere — a contract test pins the Store API no-op, so a change in
242
- that behaviour surfaces as a test failure rather than as a merchant's blurry storefront.
243
-
244
- ⚠️ The destination gives one attempt. Wix copies the single URL you send and generates
245
- every derivative from it, with no way to raise quality afterwards, so a crop shipped here
246
- is that product's permanent ceiling. When `resolvedIsCrop()` is true the source genuinely
247
- had nothing better — report those images in the run's own record rather than shipping them
248
- silently.
249
-
250
- 6. **Plugin coverage runs automatically.** Plugin handling is a deterministic pre-pass plus
251
- declarative profiles, not prose guesswork — see "Plugin coverage" below. The capture
252
- script writes `plugin-inventory.json` and `plugin-coverage.json` alongside the per-entity
253
- files. Never hand-map a plugin from memory; consult the profiles through
254
- `scripts/plugin-knowledge.js`.
255
-
256
- 7. **Localhost sources and media URLs.** A source at `localhost`, `127.0.0.1`, or another
257
- private-only host is valid for discovery and source reads from the user's machine.
258
- However, Wix Media import fetches files from the URL using Wix servers, so media URLs
259
- like `http://localhost:8090/wp-content/uploads/...` are not reachable by Wix during a
260
- live import. This is optional setup and, as far as we know today, only affects media
261
- import:
262
- - Prefer exposing the local source through a temporary public HTTPS tunnel such as
263
- ngrok before live media import.
264
- - Or explicitly skip/defer media import and continue with non-media entities.
265
- - If using ngrok on macOS:
266
- 1. Install: `brew install ngrok`
267
- 2. Add an authtoken from the ngrok dashboard:
268
- `ngrok config add-authtoken "<YOUR_AUTHTOKEN>"`
269
- 3. Expose the local source port, for example: `ngrok http 8090`
270
- 4. Set the source base URL to the HTTPS forwarding URL:
271
- `export WP_BASE_URL=https://<id>.ngrok-free.app`
272
- Record this in `source-profile.md` when the captured source URL is localhost, and note
273
- whether media will use the tunnel or be skipped/deferred.
274
-
275
- The raw capture is evidence, not a hand-off artifact. `rp-discovery` synthesizes it into
276
- the canonical artifacts and records traceability pointers (`rawDiscovery`, per-entity
277
- `rawFile`).
278
-
279
- ## Payment gateways: read the summary, never the route
280
-
281
- `GET /wc/v3/payment_gateways` and `/wc/v3/payment_gateways/{id}` return each gateway's **entire
282
- settings object**. On a site with a real gateway connected that includes the live API key and
283
- secret. Anything a tool returns is in the model's context, the transcript and potentially a
284
- durable run artifact, so there is no careful-handling mitigation available after the fact — the
285
- value must never be requested.
286
-
287
- **`fetchGatewaySummary()` in `lib/wp-http.js` is the only way to read gateway configuration.**
288
- It returns, per gateway, `id` / `title` / `enabled` / `order` and `fields: [{ name, state }]`,
289
- where `state` is `present`, `blank` or `absent` — plus a `value` for the short allowlist of
290
- display and behaviour fields, each of which passes the shared secret-value guard first. That is
291
- everything discovery legitimately needs: which gateways are registered, which are enabled, and
292
- whether a credential is configured. Request-level outcomes (`ok`, `unauthorized`, `unreachable`,
293
- `malformed`) are a separate axis, and a failed request returns **zero** field entries rather
294
- than a page of `absent`, so "this gateway has no API key" can never be confused with "we could
295
- not ask".
296
-
297
- Everything else about the route is closed, on purpose:
298
-
299
- - `fetchJson()` **refuses** either gateway route before issuing the request, below discovery's
300
- `--include-route` override. There is no flag, option, capability token or environment variable
301
- that lifts it; adding one is the exposure with extra steps.
302
- - The route classifier categorizes both shapes as `excluded_credential_bearing`, and neither
303
- `--include-route` nor `--include-excluded-category` can promote them to `sample`.
304
- - A plugin profile may not declare a gateway route as a readable entity route, under any flag.
305
- - Never write a gateway field value into `source-profile.md`, `source-schema.json`, a sample
306
- record, a progress log, a completion report, a CMS field, telemetry, or `.local.env`. Never a
307
- prefix, a length or a hash of one either — each of those is a usable clue on its own.
308
-
309
- Report what was read. A run that states "N gateways, M enabled, K credential fields present, 0
310
- values retained" is auditable; one that silently read the settings blob is not.
311
- `describeGatewaySummary()` produces that line for the approval gate.
312
-
313
- ⚠️ The value guard is a pattern list, not a guarantee — a credential in an unrecognized format
314
- passes it. It is the backstop for credentials nobody can name in advance; the controls above are
315
- the actual protection.
316
-
317
- ## Reading payment, refund and invoice history
318
-
319
- Three deterministic registries carry this knowledge. Use them; do not re-derive which source keys
320
- mean what, and do not hand-author the reads.
321
-
322
- | What you need | Use |
323
- | --- | --- |
324
- | Which source keys the payments import may read at all | `paymentReadKeys()` in `lib/gateway-source-keys.js` |
325
- | Which value may become a payment's provider transaction reference | `resolveTransactionReference()` in the same module |
326
- | Whether a method is online or offline | `resolveOfflinePayment()` — omits the flag when unknown |
327
- | Whether a refund actually happened | `qualifyRefund()` in `lib/refund-corroboration.js` |
328
- | Whether the store has invoices, and where their bytes live | `lib/invoice-discovery.js` |
329
-
330
- **The read manifest is closed.** `paymentReadKeys()` returns the complete set of keys this import
331
- touches — the amount, both paid-date fields, the method, the currency, the canonical reference,
332
- and each registry family's candidate fields. Nothing else is read. In particular a raw provider
333
- response blob is declared **unreadable**, not "to be pattern-matched later": on a live store its
334
- sibling fields carried customer name, phone and email, and a contract that requires parsing
335
- unstructured personal data is not one that can be honoured safely.
336
- `assertNoNeverReadKeys()` refuses a read plan naming it *before* the plan executes — filtering
337
- after the response arrives is too late, the blob is already in the run's working data.
338
-
339
- **Two surfaces, and neither alone covers payments.** Row-shaped tables come through the plugin
340
- `/query` surface; meta-backed fields come through WooCommerce REST. Run the generated
341
- `…--<table>.eav-read-plan.json` verbatim and reconcile it afterwards — a hand-authored scoped read
342
- cannot be reconciled against anything, and a plan edited after discovery wrote it is caught by its
343
- own hash.
344
-
345
- **A gateway-shaped key is not attribution.** The payment-method slug names the checkout plugin,
346
- not necessarily the processor: orders whose method is one gateway can carry
347
- another gateway's reference key, while every order whose method *was* that second gateway carried
348
- none. So a candidate is written only when its semantics are verified AND the registry recognizes
349
- the order's method — directly, or through a separately verified layered integration. Everything
350
- else is reported with a reason and never guessed at by precedence. Report candidate coverage and
351
- defensible coverage as separate numbers; collapsing them overstates fidelity.
352
-
353
- **A refund needs a refund record.** A canonical WooCommerce refund entity with a stable id and a
354
- positive amount is authoritative on its own. An order-level refunded status corroborates but
355
- cannot supply a missing amount. Gateway flags, statuses and refundable-balance fields never create
356
- a refund, however many agree — fields written by one callback are one signal. When only such flags and
357
- statuses exist, this yields zero importable refunds, which is the correct output.
358
-
359
- **Invoices are resolved per run.** Discovery matches key *families*, not authored names, and
360
- patterns found in a sample are then applied across the full order population. A discovered
361
- document URL is untrusted input that something is about to fetch: classify it before touching it,
362
- and never log or store it — the query string can be a bearer token and the filename can carry the
363
- customer's name. Nothing found means nothing is created, and the report says "no invoices found",
364
- never "not supported".
365
-
366
- Redaction counts are findings, not plumbing: a non-zero `redactedValueCount` means a credential
367
- was sitting somewhere unexpected in the source, and it belongs in the run report. Telemetry
368
- carries counts only — never a discovered key name and never a value.
369
-
370
- ## Plugin coverage
371
-
372
- A real WooCommerce site is mostly plugins. Handling them is deterministic and has its own
373
- knowledge base: `plugins/` (profiles + `no-migration-needed.json` + `README.md`), read through
374
- `scripts/plugin-knowledge.js`, detected by `scripts/wp-plugin-inventory.js`.
375
-
376
- **Every installed plugin lands in exactly one of the four statuses, and every status
377
- produces a row the user sees. Nothing is silently ignored.**
378
-
379
- | Population | Evidence | Result |
380
- | --- | --- | --- |
381
- | recognized | a profile matched | named entities, declared read channels, Wix target refs; mapping `confirmed` |
382
- | derived | no profile, data is REST-visible | derived from `wp/v2/types` + `wp/v2/taxonomies`, mapping `proposed` (CMS, or native on a domain-KB match) |
383
- | named only | detected, no read channel | *Pending* with its reason, resolved by the no-migration-needed list or at the review gate |
384
-
385
- A plugin therefore does not need a profile to migrate — it needs one to migrate *natively*.
386
-
387
- ### Detection
388
-
389
- Runs before route classification so profile-declared routes are already in scope. Signals,
390
- strongest first:
391
-
392
- 1. `GET /wp/v2/plugins` — the authoritative installed list (`plugin`, `status`, `name`,
393
- `version`). **Administrator credential required.** On 401/403 the run continues and
394
- records `pluginListAvailable: false`; say so plainly rather than implying full coverage.
395
- Without it, installed-but-unprofiled plugins cannot be enumerated at all — this is the
396
- concrete argument for the authenticated acquisition mode.
397
- 2. Declared routes present in the REST index.
398
- 3. `GET /wp/v2/types` / `GET /wp/v2/taxonomies` entries matching a profile's `restBases`.
399
- 4. **Record payload keys from the samples** — a second pass after sampling. This is not
400
- optional polish: several major WooCommerce extensions (Product Bundles, Composite
401
- Products, Product Add-Ons, ACF, Yoast) add **no REST route at all** and only widen
402
- `wc/v3/products` / `wc/v3/orders` payloads. Route-based discovery cannot see them.
403
- 5. REST namespaces and public `/wp-content/plugins/<slug>/` asset paths (low confidence,
404
- but they work with no credentials).
405
-
406
- A plugin version below a profile's `detect.minVersion` is reported as
407
- `api-below-min-version`, not read as if the documented API were present.
408
-
409
- ### Project-local plugin entity plans
410
-
411
- For an unfamiliar plugin, prefer a complete supported REST reader. If it is unavailable,
412
- investigate verified storage and use [PLUGIN-READ-PLANS.md](PLUGIN-READ-PLANS.md)'s shared
413
- validator/writer, including stable entity references, scoped related records and a bounded
414
- sample. A permanent profile or new transport handler is not required. Preserve the plan
415
- binding in canonical source metadata; only reconciled full extraction certifies readiness.
416
- Never return an ineffective “rerun discovery” task when a producer cannot emit its input.
417
-
418
- ## Read channels
419
-
420
- `plugin-rest`, `core-cpt`, `core-embedded`, `core-meta`, `plugin-rest-child`, `export-file`,
421
- `db-only` — see `plugins/README.md`. Two consequences worth stating to the user:
422
-
423
- - **Unregistered post meta is invisible to the REST API.** WordPress exposes meta only when
424
- the plugin registered it with `show_in_rest` (and, for a CPT, declared `custom-fields`
425
- support). A plugin can keep its entire per-record state in `postmeta` and expose none of
426
- it. Three ways to reach it, in preference order: the **structure bridge** (see "Reading
427
- key/value tables through the bridge" below — this is the one that needs no profile and no
428
- user action), a WXR export the user produces, or a database dump.
429
- - **WXR cannot be fetched.** Application Passwords authenticate the REST API and XML-RPC
430
- only, never `wp-admin`, so an export file is something the **user produces and supplies**.
431
- Treat `export-file` as a request to the user, never as a download.
432
- ### Source redirect maps
433
-
434
- Old addresses kept alive only by redirect rules must be inventoried; an empty REST answer or
435
- the route classifier's `/redirection/*` exclusion is never evidence that no rules exist.
436
- `lib/wp-redirect-sources.js` normalizes them from the plugins' own storage:
437
-
438
- - **Redirection** — `redirection_items` + `redirection_groups` tables; **Rank Math** —
439
- `rank_math_redirections` (PHP-serialized `sources`, one rule per pattern). Read them through
440
- the structure bridge by **bare** table name; `resolveTable` matches the site's real prefix
441
- from the bridge's table listing and reports several matches (multisite) as ambiguous.
442
- - **Yoast Premium** keeps redirects in `options`, which stays denied: coverage is
443
- `unsupported` until the operator supplies the plugin's CSV export.
444
- - Server/CDN rules (`.htaccess`, nginx, edge) live outside WordPress: record them as
445
- `unsupported` and ask the host for an export.
446
- - Logs, 404 records and hit counts are not rules. Disabled rules and rules of an inactive
447
- plugin are kept as `enabled: false` exclusions, never reactivated.
448
- - A failed, partial or channel-less read is `unreadable`, never `confirmed_empty`.
449
-
450
- Feed the reads to `node skills/wix-replatform/scripts/url-redirects.js sources --project
451
- <dir> --input <file.json>`; it appends `state/url-preservation/source-redirects.ndjson` and
452
- writes `source-redirect-coverage.json`. When declared source domains are present, it also
453
- plans the captured destinations into the redirect audit and URL rewrite report. If domains
454
- are declared later, run `url-redirects.js import-targets --project <dir>` after that
455
- declaration. Capability evidence for a specific rule can be supplied in the source input's
456
- `targetCapabilities[ruleKey]` with `productSupported`, optional `automationSupported`, and
457
- an evidence reference; absent evidence remains unverified where product support is not
458
- established for that rule shape. A complete capture records a disabled tombstone for a
459
- previously captured rule that disappeared, so the cutover report keeps its old address
460
- open for explicit redirect reconciliation. Partial or unreadable captures never retire
461
- missing rules.
462
-
463
- ### Reading key/value tables through the bridge
464
-
465
- When `wix-wp-plugin-v2` is installed on the source site, `postmeta` and every other
466
- key/value-shaped table is readable — key-scoped. This is the channel to reach for when a
467
- capability would otherwise be a `user-file` blocker, and it is the ONLY one that works for a
468
- plugin nobody has profiled.
469
-
470
- **Always run key discovery, even for a profiled plugin.** It is tempting to treat a profile's
471
- `detect.recordProperties` as the key list and skip the round-trip — `subscriptions-for-woocommerce.json`
472
- names `_wps_sfw_product` there — but those are *detection markers*, one or two keys that prove
473
- the plugin wrote the record. They are not the record's field list. Reading only them produces a
474
- short extraction that looks complete, the same failure as a truncated key list.
475
-
476
- Profiles earn their place elsewhere: they say which table to read, which entity it maps to, and
477
- what the pitfalls are. The key list comes from the site. A single order on a gateway-backed store
478
- can carry dozens of gateway-specific meta keys under a prefix no profile anywhere has seen, which
479
- is why discovery is the mechanism and not the fallback.
480
-
481
- **The rule: if you have not named the keys you want, the value column does not exist.** Not
482
- in `select`, not in `where`, not in `orderBy`, not in `groupBy`. Violating it returns
483
- `wmh2_invalid_structure_request` (400) — the same error as naming a nonexistent column, so
484
- the refusal will not tell you which column is the value column. Two steps:
485
-
486
- 1. **`GET /structure?table=postmeta`** → the column list plus `eavPair: {keyColumn,
487
- valueColumn}`. This tells you the table is key-scoped *before* you write a query. No rows,
488
- no key names.
489
- 2. **Discovery** — `select` the key column plus a count, `groupBy` the key column. Returns the
490
- real key list with row counts, `eavAccess.tier: "key-discovery"`.
491
- 3. **Scoped read** — `where` the key column `in` the keys you want (**max 50 per request**),
492
- then `select` the value column freely. `eavAccess.tier: "key-scoped"`.
493
-
494
- ```jsonc
495
- // 2. discovery // 3. scoped read
496
- {"structureRequest": { {"structureRequest": {
497
- "table": "postmeta", "table": "postmeta",
498
- "select": [{"column": "meta_key"}, "select": [{"column": "post_id"},
499
- {"column": "meta_key", {"column": "meta_key"},
500
- "aggregate": "count", "as": "n"}], {"column": "meta_value"}],
501
- "groupBy": ["meta_key"], "where": [{"column": "meta_key", "op": "in",
502
- "orderBy": [{"column": "meta_key", "value": ["<key from step 2>",
503
- "direction": "asc"}] "<key from step 2>"]}],
504
- }} "orderBy": [{"column": "post_id", "direction": "asc"}]
505
- }}
506
- ```
507
-
508
- ⚠️ **Count the KEY column, not some other column.** `{"column": "<keyColumn>", "aggregate":
509
- "count"}` works on any key/value table; counting `meta_id` only works where that column happens
510
- to exist, and a `name`/`value` table has no `meta_id` at all. The generic client counts the
511
- discovered key column for exactly this reason.
512
-
513
- Things that will bite:
514
-
515
- - **Page discovery to exhaustion.** `limit` maxes at 200 and a large `postmeta` has more
516
- distinct keys than one page. Follow `pagingMetadata.cursors.next` until it is null before
517
- concluding a key is absent — a truncated key list reads as "these are all the keys" and
518
- will send the mapping down a wrong path. Budget `ceil(N/200)` discovery pages plus at least
519
- `ceil(N/50)` scoped **batches** — and a batch is not a request: each pages at 200 rows, so a
520
- batch whose 50 keys hold 4,000 rows costs 20 requests. Because discovery returns each key's
521
- row count, the read plan states the real figure (`expectedPages` per batch,
522
- `expectedScopedRequests` overall) — read it there rather than estimating.
523
- - **`options` and `usermeta` are still refused outright**, and pinning `option_name` does not
524
- unlock `options`. Gateway configuration held in `options` is a different mechanism
525
- entirely — do not try to route around this.
526
- - **Check `redactionMetadata.redactedValueCount` on every response.** Non-zero means a value
527
- matched a credential shape and came back as `[REDACTED:secret-shaped]`. That is not a bug
528
- to work around: it means the source site keeps a credential somewhere unexpected, and it
529
- belongs in the run's notes.
530
- - **A table named `*meta` whose pair is not one of the six recognized ones is refused (403),
531
- not readable.** There is no key column to pin, so there is nothing to scope. Reach for a WXR
532
- export or a database dump for that table, and say so rather than reporting it as empty.
533
- - **A table can carry MORE than one pair**, and each is guarded separately: pinning `meta_key`
534
- does not make a second pair's `value` column readable. `eavPair.additionalPairs` and
535
- `eavAccess.additionalPairs` list them; `guardedValueColumns()` in the client returns all of
536
- them at once, which is what you want when building a select list.
537
- - **Every value comes back as a STRING — including flags, ids and counts.** A column the
538
- plugin stores as an integer flag arrives as `"0"` or `"1"`, and `Boolean("0")` is **true**
539
- in JavaScript, so the natural-looking `if (row.is_spam)` classifies *every* row as spam.
540
- A form-submission import that reads a plugin's `is_spam` column straight into a truthiness
541
- test mismarks the entire set, and nothing errors: the run simply reports every row as spam. Compare
542
- explicitly (`row.is_spam === '1'`, or `Number(row.is_spam) === 1`) on every flag, id and
543
- numeric column you branch on, and never feed a bridge value to a bare truthiness test. The
544
- same holds for text-valued status columns: `"active"` is a string the plugin chose, not a
545
- normalized enum — and note that a source's own spam/status flags being uniformly clean is
546
- not evidence the data is clean, only that the source never flagged it.
547
- - **A submissions table shared by every form needs the source form id on BOTH sides.** Form
548
- plugins that keep one entries table (Forminator's is the shape seen live; it has no profile
549
- in `plugins/` yet) key each row by the source form id, while the target form ids are minted
550
- per form by the forms import. That is two lookups, not one: filter the source rows to the
551
- form being imported, **and** resolve that same form's crosswalked target id. Getting either
552
- side wrong writes real submissions onto the wrong target form and the create still succeeds
553
- — there is no error to notice. Assert the source-form-id →
554
- target-form-id pairing from the crosswalk before the first write, and read one created
555
- submission back on the form you expected it to land on.
556
-
557
- #### Yoast product SEO evidence
558
-
559
- WooCommerce product `yoast_head_json` is **rendered** output, never proof of an override (a store
560
- can render a title on every product while holding no raw title override). Decide each product's SEO title,
561
- description and focus keyphrase per field with `lib/yoast-product-seo-evidence.js`:
562
-
563
- 1. **REST `meta`** on the product post (`/wp/v2/product/{id}?context=edit`): a key counts only
564
- when `meta` contains it (`restEvidence`). Missing key means unresolved, not "no override".
565
- 2. **Bridge key-scoped `postmeta` read** for keys still unresolved (`readBridgeEvidence`, with
566
- `queryPage` bound to `queryStructure`). It pins exactly `_yoast_wpseo_title`,
567
- `_yoast_wpseo_metadesc`, `_yoast_wpseo_focuskw` plus a batch of product ids, and pages to
568
- `hasNext: false`. This is the one deliberate exception to "always run key discovery": the key
569
- set is a fixed allow-list, never widened, and a complete scoped read with **no row** is itself
570
- the evidence (inherit). A failed, truncated or non-key-scoped batch makes only that batch's
571
- unresolved fields `unknown`.
572
- 3. Otherwise `unknown`. A user-supplied export can later provide evidence through the
573
- blocked-data request flow.
574
-
575
- `buildProductSeoReceipts` returns the audit receipt per product (stored with the extraction,
576
- never hashed whole); `seoEvidenceFromReceipt` gives the canonical `product.seoEvidence`. Never map
577
- `yoast_head_json.title/description`, `og_*` or the excerpt into `seoTitle`/`seoDescription`.
578
- Non-Yoast SEO plugins have no evidence contract: their product SEO is `unknown`.
579
-
580
- - **Parent-scoped sub-resources (`plugin-rest-child`, fixed 2026-08-11).** WooCommerce order
581
- *notes* (`/wc/v3/orders/{id}/notes`) and similar per-parent sub-collections cannot be listed
582
- on their own — the base classifier only samples flat collection routes (`page`/`per_page`
583
- shape). This is why a plugin that writes real data via `$order->add_order_note(...)` (e.g.
584
- Custom Payment Gateway for WooCommerce's payment-note field) used to report as
585
- `pending · cannot-tell` even though the data is real and REST-reachable in principle.
586
- `plugin-rest-child` fixes this: an entity declares `route` as a `{parentId}`-templated path
587
- (`/wc/v3/orders/{parentId}/notes`) plus `parentRoute` (the already-sampled collection that
588
- supplies real parent ids, e.g. `/wc/v3/orders`). Availability is a two-part **presence**
589
- check against the site's REST index — `parentRoute` is in scope, and the index advertises a
590
- route shaped like the template (WordPress's `(?P<id>[\d]+)`-style regex segments are
591
- normalized to `{parentId}` for the comparison, so the parameter's name never has to match).
592
- Presence alone does not confirm real data exists there: `wp-discovery.js`'s
593
- `sampleChildEntities` runs a **live, representative check** afterward — it substitutes up to
594
- 3 already-sampled parent ids into the template and fetches each, purely to say "N of 3
595
- sampled parents actually returned something," not to claim a full count. That result surfaces
596
- as a plain-language run note, never as a channel-status change: a small sample coming back
597
- empty does not mean the capability is absent, only that this sample did not confirm it.
598
- The infrastructure is
599
- built and tested (`plugin-knowledge.js`, `wp-route-classifier.js`'s `childRouteAdvertised`,
600
- `wp-plugin-detect.js`'s `describeProfiledEntity`, `wp-discovery.js`'s `sampleChildEntities`),
601
- and `plugins/woocommerce-other-payment-gateway.json` is authored and live-verified
602
- — do not guess a plugin's installed-directory id when authoring a similar
603
- profile; confirm `detect.pluginFileIds` against a live `GET /wp/v2/plugins` response first, it
604
- is exactly the kind of fact a stale or invented guess silently gets wrong.
605
- - **Non-standard response envelope (`responseEnvelope`, fixed 2026-08-11).** Sampling and
606
- counting assume a flat array (`X-WP-Total`/`X-WP-TotalPages` headers, or the array's own
607
- length) or a single object. MailPoet's REST API (`/mailpoet/v1/subscribers`,
608
- `/segments`, `/newsletters`, ...) broke that assumption: it is a real, paginated, GET-only
609
- REST route (VERIFIED LIVE 2026-08-11: readable with the
610
- standard Application Password), but the payload is wrapped as
611
- `{ data: { items: [...], meta: { count, pages } } }` with no `X-WP-Total` header — the count
612
- lives inside the body instead. Before this fix the whole envelope would have sampled as one
613
- opaque record. A profile entity (route-bearing channels only) now declares
614
- `responseEnvelope: { itemsPath, countPath }` — a dot-path to the array of records, and an
615
- optional dot-path to the true total when there's no header. `wp-discovery.js`'s
616
- `inspectEntity` unwraps to that path and otherwise treats it exactly like a flat array; a
617
- path that stops resolving (stale profile, plugin version drift) falls back to the raw payload
618
- shape and records a discovery note rather than failing the run.
619
- `plugins/mailpoet.json` is authored and live-verified: `crm.email-subscription`
620
- now resolves to migration-planned via the existing `crm/email-subscription` target, with
621
- `recordCount` read via the declared `countPath`. A namespace-wide `unprofiledRoutes`
622
- entry is still a sign a route this shape (or any other) has never been profiled — check there
623
- before concluding a plugin has "no REST surface."
624
- - **Route default query (`ROUTE_DEFAULT_QUERY_RULES`, fixed 2026-08-16).** Sampling sends
625
- `per_page` and nothing else, so any collection route that applies a **default filter to an
626
- unparameterized request** is read as its filtered subset and the plan under-counts — the
627
- hidden records are invisible to the mapper, not merely misreported. Observed on
628
- `/wc/v3/products/reviews`, which defaults to `status=approved`: a store holding both approved and on-hold
629
- reviews had only the approved ones counted. This is a class of bug, so the fix is a
630
- table rather than a special case: `wp-route-classifier.js` carries
631
- `ROUTE_DEFAULT_QUERY_RULES` — `[pattern, params, reason]`, `*`-suffix matching, longest
632
- pattern wins — and `defaultQueryFor(routePath)` / `defaultQueryReasonFor(routePath)` resolve
633
- it. `wp-discovery.js` merges the result under its paging parameters and records a discovery
634
- note naming the parameters and the reason, so generated readers know to send them too.
635
- Adding a route is one row in the table plus a fixture; a route with no row is unchanged.
636
-
637
- ### Coverage statuses
638
-
639
- The four statuses, and only the four: `migration-planned` (via `api` or `cms`,
640
- confidence `confirmed` or `proposed`), `no-need-to-migrate`, `pending`,
641
- `requires-development`. A failed or unavailable read is never a status — it attaches to the
642
- row as `blocked[]` (`user-file` / `surface-changed`, with a `declined` flag).
643
-
644
- The split is deliberate: `pending` (we do not know how to migrate this yet — our open item)
645
- and `requires-development` (a human established Wix has no surface) call for different
646
- conversations. Only the second is a closed door, and only a human may open it — the
647
- human-signed register `plugins/requires-development.json` is its single source.
648
-
649
- ### Interaction rules
650
-
651
- - **The admin Application Password is the source REST credential; `wix-wp-plugin-v2`'s
652
- migration key is scoped to that bridge.** A plugin REST namespace that honours
653
- WordPress authentication works with the Application Password, and that is the normal
654
- case — plugins with their own key systems offer them as an *alternative* for external
655
- callers, not a requirement (verified for Gravity Forms, which accepts Application
656
- Passwords and runs requests under the caller's plugin capabilities). Do **not** treat
657
- "this plugin has API keys" as "we need another credential"; that reasoning has been
658
- wrong every time it was applied. If a plugin genuinely rejects the platform credential,
659
- that is a config-gate requirement like the WooCommerce consumer keys — not a
660
- per-capability runtime state. For the structure bridge specifically, select the
661
- Application Password path only when WooCommerce is present; otherwise use
662
- `WMH2_MIGRATION_KEY`. Never describe that bridge-only key as private REST authentication.
663
- - `blocked[]` entries are collected and asked **once**, batched, each individually
664
- skippable. A `user-file` blocker means no *WordPress API* can reach it: unregistered post
665
- meta and plugin tables are invisible to REST, and Application Passwords cannot reach
666
- `wp-admin`, so absent anything else a WXR or CSV export must be produced by the user.
667
- **Check the structure bridge first** — if `wix-wp-plugin-v2` is installed on the source
668
- site, both of those are readable through it (see "Reading key/value tables through the
669
- bridge" below), and asking the user for an export they did not need to produce is a real
670
- cost to avoid. Record each
671
- answer in `orchestration/decisions.json` under `pluginBlocker:<capability>:<kind>`
672
- (`provided` / `declined`); `wp-discovery.js` reads it back (`--decisions`, defaulting to
673
- `<out-dir>/../../orchestration/decisions.json`) so a declined ask renders as declined.
674
- - `pluginCmsFallback:<capability>` sits beside it in the same file: the merchant's
675
- approve/decline answer to archiving a recognized capability's records in CMS, bound to the
676
- exact proposal shown. `wp-discovery.js` reads it with the eligibility register
677
- (`plugins/cms-fallback-eligible.json`) and classifies the row (`pending` with a
678
- `cms-fallback-*` reason, or `migration-planned · via cms · basis decision` with
679
- `cmsFallback.functionalityRestored: false`). It is written only at the mapping review by
680
- `orchestration-state.js decide-cms-fallback`. A malformed entry is never honored and never
681
- fails the run; with no row to carry it, it appears in `plugin-coverage.json`
682
- `cmsFallbackDecisionIssues[]`.
683
- - `plugin-coverage.json` also carries `entityStats` (per-route record counts and sample
684
- evidence) and `inputs.cmsFallbackDigest`; `--reclassify-coverage` rebuilds coverage from
685
- them without any source request (see `rp-discovery`).
686
- - `migration-planned · proposed` rows never block; the proposed capability and target are
687
- reviewed at the normal mapping-review checkpoint.
688
- - `requires-development` and `pending` rows **must** reach the user. A detected but
689
- undeliverable capability the user was never told about is the failure this machinery
690
- exists to prevent. Every `pending` row is decided at the mapping review — the only exit.
691
-
692
- **A recognized plugin always ends in Migration planned** (J2 property 1). If a profile
693
- matched we know what the plugin holds, so:
694
- - no readable channel (plugin tables only) → still classified by its target, with a
695
- `user-file` blocker on the row — **not** pending, and never a "cannot" verdict. A database
696
- export or a source-side bridge would reach it, and automation may not foreclose that any
697
- more than it may declare Wix incapable.
698
- - `pending · cannot-tell` is reserved for an **unrecognized** plugin where we genuinely
699
- found nothing; the no-migration-needed list or the agent's own reading can
700
- still resolve it to *No need to migrate* with a recorded rationale.
701
- - The one deliberate exception is a **CMS fallback**: when nothing native fits, a
702
- recognized capability with a signed `cms-fallback-eligible.json` entry stays *Pending*
703
- (`cms-fallback-*` reason) until this migration's merchant approves archiving its records in
704
- CMS. A profile never names a `cms/*` target itself.
705
-
706
- **A CMS destination is not turnkey.** "Kept as data" means the records land in a Wix CMS
707
- collection with their original IDs — genuinely migrated, not documented. But Wix Data must be
708
- installed first (item writes fail with `WDE0110` otherwise) and collection creation has no
709
- verified writer yet, so it is a setup step. Say both on the row; a customer reading "Kept as
710
- data" should not discover the setup work later.
711
-
712
- ### Guardrails
713
-
714
- - **Never a silent native mapping.** A derived entity may target a native Wix entity
715
- only when the Wix domain knowledge confirms its proposed capability; otherwise it goes to
716
- CMS. Either way the row is `confidence: proposed` and is confirmed at the mapping review.
717
- - **Never a scope reopening.** The generic path operates only on routes the route classifier
718
- already accepted. It does not resurrect frontend, editor, admin, runtime, or integration
719
- families because a plugin registered them.
720
- - Profile data routes outrank exclusion families (that is the per-capability opt-in), but a
721
- wildcard pattern must keep two concrete leading segments, so `/yoast/*` can never be
722
- opted in wholesale.
723
-
724
- ### Commands
725
-
726
- ```bash
727
- node scripts/plugin-knowledge.js list-plugins
728
- node scripts/plugin-knowledge.js read-plugin --slug the-events-calendar
729
- node scripts/plugin-knowledge.js resolve-route --route /tribe/events/v1/events
730
- node scripts/plugin-knowledge.js resolve-property --property bundled_items
731
- node scripts/plugin-knowledge.js list-capabilities
732
- node scripts/wp-plugin-inventory.js --base-url <url> --out-dir <dir> [auth options]
733
- node scripts/plugin-knowledge-validate.js --write-index
734
- ```
735
-
736
- To add or correct a plugin, edit `plugins/<slug>.json` and add a fixture — no skill logic
737
- changes. See `plugins/README.md`.
738
-
739
- ## Product and variation stock
740
-
741
- Extract `stock_status`, `manage_stock`, `stock_quantity`, `backorders`,
742
- `backorders_allowed`, and `backordered` from products and every variation. Use
743
- `lib/woo-inventory.js` → `mapWooInventory(record, {parent})` during canonical mapping.
744
- Persist its `fields` on the canonical variant and its disposition beside the source ID.
745
- An untracked product can still be explicitly in stock; `manage_stock:false` is not missing
746
- inventory. Use variation records for variable products; never replicate a parent's shared
747
- tracked quantity onto each child. Preserve `decision-needed` outcomes for missing signals,
748
- backorders, invalid quantities, and shared stock; do not turn them into an empty success.
749
-
750
- ## Read contract (codegen-time)
751
-
752
- What a generated WordPress reader must get right. Capture the operational facts below into
753
- `source-profile.md` during discovery so codegen has them without re-deriving.
754
-
755
- The generated reader is an **extractor**, not an in-memory bulk loader. It should fetch
756
- WordPress/WooCommerce records page by page and write them to project-local files (for
757
- example per-entity paged JSON files plus a manifest) so the import step can read from
758
- disk later without re-fetching the source.
759
-
760
- **Reuse the shared transport — do not regenerate it.** The auth, URL building, rate-limit
761
- throttling, and `Retry-After`-aware 429/503 backoff a reader needs already exist as a
762
- dependency-free module at `lib/wp-http.js` in **this skill directory** (the same module
763
- the capture script imports). It
764
- exports `fetchJson`, `buildHeaders`, `configureRateLimit`, and `parseTotalHeader`. It does
765
- **not** export an undenied transport — `fetchJson` refuses payment-gateway routes, and a
766
- generated reader must not reintroduce a raw one. Any
767
- generated WordPress reader **must reuse this module rather than reimplementing transport**,
768
- so the reader contains only per-project orchestration: which entities to pull, the
769
- pagination loop, `_embed`/`_links` resolution, and transform glue. One tested transport
770
- core is what makes the sampler and the reader behave identically. *How* the module is
771
- carried into a runnable migration project is `rp-import-codegen`'s concern (its File
772
- targets), not this adapter's. The notes below describe what the reader does *on top of*
773
- that shared core:
774
-
775
- - **Bounded media reads:** `fetchJson` accepts optional `deadlineMs`. One absolute deadline
776
- includes the rate-limit wait, every fetch attempt, each attempt timeout, response handling,
777
- and every retry delay. A wait that would finish after the deadline is not started. Omit
778
- `deadlineMs` for all existing calls; their behavior stays unchanged.
779
-
780
- - **Namespaces & auth differ per namespace:**
781
- - `wp/v2` (core): HTTP Basic auth with a WordPress **Application Password**
782
- (`--username` + `--application-password`).
783
- - `wc/v3` (WooCommerce): **consumer key / secret**, sent as Basic auth over HTTPS (or
784
- as query params on some hosts). This is a different credential from the Application
785
- Password — both may be needed for a full migration.
786
- - **Pagination:** `?page=N&per_page=M` (max `per_page` is typically 100). Total pages are
787
- in the `X-WP-TotalPages` response header and total records in `X-WP-Total` — read
788
- those rather than guessing when to stop. Some public WooCommerce Store API collection
789
- routes paginate without `X-WP-TotalPages`; when that header is absent, generated readers
790
- must stop on the first page whose item count is smaller than `per_page`.
791
- - **Embedded relations:** request `?_embed` to inline related resources, or follow the
792
- `_links` block (`author`, `wp:featuredmedia`, `wp:term`) to resolve relations. The
793
- `evidence` pointers in `source-schema.json` relations come from this `_links` block.
794
- - **Hierarchical taxonomies:** WordPress categories (and custom hierarchical taxonomies)
795
- carry a `parent` field on each term (`0` = top-level). When **any** term has a non-zero
796
- `parent`, the source taxonomy is nested. Discovery must elevate this into structured
797
- schema — set `"hierarchical": true` on that entity in `source-schema.json` (see
798
- `source-schema.example.json` → `category`) rather than leaving `parent` buried in the raw
799
- dump. The Wix Blog category target is flat (no parent/child), so this flag is what triggers the
800
- mapper's mandatory lossiness entry; without it, the flatten happens silently.
801
- - **Rate limits / retries:** not advertised; the capture script throttles
802
- (`--rate-limit-rpm`, default 120) and backs off on 429/503 honoring `Retry-After`.
803
- Generated readers should inherit the same discipline.
804
- - **Rich content:** `content.rendered` / `title.rendered` are HTML; `*.raw` requires
805
- `context=edit` (authenticated). Note which the reader should pull.
806
- - **HTML entities in "plain text" fields (trap, hit live 2026-07-19):** WordPress returns
807
- HTML-encoded entities (`&#8211;`, `&amp;`, `&#8217;`, …) not only in rendered HTML but
808
- also in fields consumed as plain text — product/category/tag `name`, `title.rendered`
809
- after tag-stripping, excerpts, even SKUs. Values sent to plain-text Wix fields (product
810
- name, blog title, tag label, CMS text columns) must be entity-decoded by the generated
811
- transforms or the encoded form appears verbatim in the Wix dashboard. HTML passed to
812
- rich-content conversion does NOT need pre-decoding — the converter handles entities.
813
- - **`slug` / `post_name` is percent-encoded for non-Latin values, and REST returns it
814
- undecoded (trap, confirmed live on a non-Latin source 2026-09-27):** WordPress stores a
815
- post/product slug whose original text contains non-Latin characters (e.g. Hebrew) as raw
816
- UTF-8 percent-encoded escapes (`%d7%90%d7%99...`), and both `wp/v2` and `wc/v3` return this
817
- field exactly as stored — no decoding happens server-side. The target's slug coercion
818
- (`rp-target-wix`'s `toWixSlug`) turns the literal `%` characters into dashes rather than
819
- erroring, so passing this value straight through silently produces a garbled
820
- hex-with-dashes URL instead of the real slug. Generated transforms must decode `slug` /
821
- `post_name` with `decodeURIComponent` before using it as a Wix slug or any other field —
822
- guarded in a try/catch, since a slug that was never percent-encoded (or one containing a
823
- literal `%` that isn't part of a valid escape) must pass through unchanged rather than throw
824
- or get mangled. The decoded Unicode slug is then kept as-is (the coercion preserves letters
825
- and digits in any script), so do not transliterate it. See the codegen-side rule in
826
- `rp-import-codegen/SKILL.md`'s "Never hand-write slug sanitizing" section and the domain-knowledge pitfalls on `rp-target-wix`'s
827
- `stores/entities/product.json` and `blog/entities/post.json`.
828
- - **Custom fields:** ACF / meta often appear in sample records but are absent from the
829
- `OPTIONS` schema — surface them as `unknowns` in discovery so the mapper can decide.
830
- - **WooCommerce variation attribute values are URL-encoded slugs, not display names (trap, hit live 2026-07-21):**
831
- `variations[].attributes[].value` from `wc/v3/products/{id}/variations` is a URL-encoded
832
- taxonomy-term slug (e.g. `caf%c3%a9` for `café`), not the human-readable display
833
- name that the product's `attributes[].options[]` array contains. Generated readers must
834
- build a per-option slug→displayName map from the parent product's `attributes[].options[]`
835
- (which does carry display names) and resolve slug values to display names before writing to
836
- Wix. Passing slugs directly causes `MISSING_VARIANT_OPTION_CHOICE` because Wix compares
837
- variant choice names against option choice names and finds no match.
838
- - **WooCommerce "Any"-style variations omit the attribute entirely, and fail silently (trap,
839
- hit live 2026-07-21):**
840
- `wc/v3` returns the per-variation field as `attributes[].option`, not `.value`. When a
841
- WooCommerce variation is set to "Any" for an option (the variation applies to any value of
842
- that option), that attribute is typically omitted from the variation's `attributes` array
843
- entirely rather than present with a null/empty `option` — but treat a present-and-empty
844
- `option` the same way if seen. Generated transforms that require every declared parent
845
- attribute to appear on the variation will resolve an empty option set for it. **This does
846
- not fail loudly** — Wix accepts the write — it surfaces only as a product that goes live
847
- with zero purchasable options, found by a human browsing the storefront, not by any
848
- automated check. Do not "fix" this by auto-expanding into a cartesian combination of all
849
- option choices: live-refuted (the combination count explodes for some products,
850
- because the attribute slots are ordinal pick-N-from-a-shared-list pickers,
851
- not independent size/color axes). The correct handling is to record the loss for human
852
- review rather than emit a default variant silently.
853
- - **The store's own configuration must be read DIRECTLY, and with the WordPress credential
854
- (trap, hit live 2026-09-01):** `/wc/v3/settings/general` holds the business address
855
- (`woocommerce_store_address`, `_address_2`, `_city`, `_postcode`, `woocommerce_default_country`),
856
- the currency, which countries the shop sells to, and whether tax is calculated. Two reasons it
857
- was never captured on any run:
858
- 1. **The REST index advertises only the parameterized form** `/wc/v3/settings/(?P<group>...)`,
859
- never the literal group route, so nothing in the generic sweep ever fetches it. Read
860
- `/wc/v3/settings/general` directly, the same way a shipping zone's `/locations` and
861
- `/methods` sub-resources are — a parent-scoped sub-resource the caller resolves itself.
862
- 2. **The WooCommerce consumer key gets `401 woocommerce_rest_cannot_view` here; the WordPress
863
- application password gets `200`.** Both are already in every run's source config. A reader
864
- that only tries the store key gets a plausible "no permission" and moves on — which is
865
- exactly how this stayed invisible while migrated sites published with an empty business
866
- address.
867
-
868
- `woocommerce_default_country` is `COUNTRY` **or** `COUNTRY:STATE` (e.g. `US:CA`) — the same
869
- packing a zone's `state`-type location uses. `rp-target-wix/lib/store-config-build.js` maps the
870
- whole group; do not hand-roll it.
871
- - **Route paths passed to `fetchJson` / `buildApiUrl` must NOT include `/wp-json` (trap, hit live 2026-07-21):**
872
- `buildApiUrl` in `lib/wp-http.js` already prepends `/wp-json` to the `routePath` argument.
873
- Generated route paths must start with the namespace directly (e.g. `/wc/store/v1/products`,
874
- `/wp/v2/posts`) — never with `/wp-json/...`. Prefixing with `/wp-json` doubles the prefix
875
- and produces 404s.
876
- - **WooCommerce consumer key/secret can 401 on some `wc/v3` routes even when it reads others
877
- fine (trap, hit live 2026-08-12):** `WC_CONSUMER_KEY`/`WC_CONSUMER_SECRET` are scoped at
878
- key-creation time (Read / Write / Read-Write) and can be narrower than the WordPress
879
- Application Password's access. The consumer key/secret can 401
880
- `woocommerce_rest_cannot_view` on `wc/v3/taxes`, `wc/v3/taxes/classes`, and
881
- `wc/v3/settings/tax` while the very same reads succeeded immediately with the
882
- `WP_USERNAME`/`WP_APPLICATION_PASSWORD` Basic auth pair. Generated readers must not treat a
883
- 401/403 on one `wc/v3` route as proof the whole consumer key is broken (which would wrongly
884
- block products/orders/coupons too) — retry that specific route with the Application Password
885
- credential before failing, and prefer the Application Password outright for admin-ish
886
- `wc/v3` routes (taxes, settings) that a narrowly-scoped key is more likely to be denied on.
887
- - **Core WooCommerce settings/tax routes are core, not plugin data:** `wc/v3/taxes`,
888
- `wc/v3/taxes/classes`, and `wc/v3/settings/tax` are ordinary WooCommerce core collections
889
- (same auth/pagination rules as `wc/v3/products` etc.) — they are not profiled as a "plugin"
890
- because tax is core WooCommerce, not an extension. Per-product `tax_status`/`tax_class`
891
- fields ride along on the ordinary `wc/v3/products` read; no separate per-product route is
892
- needed to get them. See `rp-target-wix` domains/tax/ for the corresponding Wix target
893
- entities (Tax Group / Tax Region / Manual Tax Mapping / Tax Settings) and mapping-plan.json's
894
- `product` and `tax-class` entities.
895
-
896
- ## Schema shape
897
-
898
- `source-schema.example.json` (in this skill folder) is the template `rp-discovery` follows
899
- when emitting `migrations/<project>/source-schema.json`. It is a shape to follow, not a
900
- strict schema to validate against. Keep the platform-agnostic core stable; push WordPress
901
- quirks (`restNamespace`, statuses, etc.) into each entity's open `sourceMeta` blob.
902
-
903
- For a profiled plugin entity, `sourceMeta` MUST also carry `requestMethod`, `requestBody`,
904
- and `responseFragmentGroupSize` verbatim whenever the plugin profile declares them — copy them from the profile entity (surfaced structurally in plugin detection's
905
- per-entity output, `wp-plugin-detect.js`'s `describeProfiledEntity`) rather than re-deriving
906
- them from discovery's prose notes. `rp-import-codegen`'s read contract depends on finding
907
- these under exactly those `sourceMeta` keys; omitting them silently degrades a declared
908
- non-GET/fragmented read into an unreadable one downstream.
909
-
910
- ## Coupons, coupon usage and the currency gate
911
-
912
- Three source-side decisions, each in a library so a generated importer supplies facts rather than
913
- rules. Read `lib/coupon-discovery.js` and `lib/currency-gate.js`; both are pure.
914
-
915
- - **Coupons are counted from one surface and imported from the same one.** `wc/v3/coupons`
916
- (published) is the discovered set and the denominator; sweep it to exhaustion with
917
- `sweepCoupons(fetchPage)`, which refuses a total that disagrees with `X-WP-Total`. The `posts`
918
- count by `post_status` is a reconciliation check only — `summarizeCoupons({ restCoupons,
919
- postsByStatus })` reports the non-published rows as deliberately excluded, never as a shortfall
920
- (the difference being drafts and auto-drafts).
921
- - **Redeemability, not expiry, classifies a coupon.** `classifyCoupon` — redeemable iff not expired
922
- and not usage-exhausted; **`usage_limit` 0 or empty means UNLIMITED**. A `usage_limit` or
923
- `usage_count` that is not an integer (`"1.5"`, `"abc"`) is `unresolved`: neither redeemable nor
924
- exhausted, not written (`coupon-usage-limit-unresolved`), its own partition line. Import all
925
- published coupons; the report carries the breakdown, never "imported N coupons".
926
- - **Mapping reports rather than approximates.** `mapCouponToWix(coupon, { resolveProduct,
927
- resolveCategory })` returns a Wix specification or a named refusal: `fgf_free_gift` and any
928
- unknown `discount_type` are `coupon-type-unmappable`, and so is an **unrestricted
929
- `fixed_product`** (a per-unit amount on every product; Wix's money-off takes it off the order
930
- once — a product-scoped one maps); a scope Wix cannot hold in one group is
931
- `coupon-scope-unmappable`. An exhausted single-use code is imported `active: false`, because
932
- Wix's usage count starts at zero. An eligibility constraint Wix cannot hold — excluded products
933
- or categories, a sale-item exclusion, a maximum discount amount, an email restriction, or a
934
- minimum spend on a product/collection-scoped coupon — is a **refusal** (`coupon-scope-unmappable`,
935
- reason `scope: constraints`): dropped, each would make the coupon more generous than the
936
- merchant published. Only a dropped amount on a free-shipping coupon stays a per-coupon finding.
937
- - **Coupon usage rides on the order.** On legacy post storage the surface is the order's REST
938
- `coupon_lines[]` (each carrying
939
- `discount` per code); HPOS stores have `wc_order_coupon_lookup`. Name whichever was found as
940
- `coupon-usage-surface`. The target side (`rp-target-wix/lib/order-applied-discount-build.js`)
941
- turns the lines into `appliedDiscounts` through the coupon crosswalk; an unresolved code writes
942
- nothing and is reported.
943
- - **Currency halts before any order write.** `currency-gate.js` `evaluateCurrencyGate({
944
- settingsCurrency, orderCurrencies, targetSiteCurrency })` — settings from
945
- `wc/v3/settings/general` through `store-currency.js`, order currencies through
946
- `resolveOrderCurrency` (which decodes `&#8362;` and refuses a contradicting symbol). One
947
- currency matching the site proceeds with `currency-validated`; a mismatch or a history spanning
948
- two currencies is a **halt**, and unresolved orders halt too. Two configured currencies with a
949
- single-currency history proceeds, with the configuration reported.
950
- - **Plan-shaped sources are gated by row counts** (`B1` subscription products, `B2` membership
951
- CPT, `B3` recurring-plan meta), never by plugin detection. Zero rows on all three reports "no pricing plans found". The gate and the plan body live target-side
952
- in `rp-target-wix/lib/pricing-plan-definition.js`.
953
-
954
- ## Currency is a store setting, not an order field
955
-
956
- `order.currency` is documented as an ISO 4217 code. Do not trust it. A store can return
957
- `currency: "&#8362;"` (an HTML-encoded currency SYMBOL) on every order, because a plugin or
958
- theme filter has overridden the field. Passed through, the payment
959
- existence gate refuses every payment as a currency mismatch; passed through without a gate it
960
- labels amounts with a symbol.
961
-
962
- `lib/store-currency.js` resolves it: `readStoreCurrency()` reads `woocommerce_currency` from
963
- `/wc/v3/settings/general` (one request per run, and the store's own authoritative setting), and
964
- `resolveOrderCurrency(order, storeCurrency)` trusts the order's own value when it is a plausible
965
- ISO code — a multi-currency store legitimately holds several — and falls back to the store setting
966
- when it is not. It reports `order-currency-not-iso` when it falls back, because a store that
967
- mangles this field is a store whose other currency-bearing fields are suspect too.
968
-
969
- It never infers a code from a symbol. `$` is at least a dozen different currencies, and guessing
970
- one silently mislabels money.