@wix/agent-skills 1.33.1 → 1.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (619) hide show
  1. package/README.md +3 -0
  2. package/package.json +1 -1
  3. package/skills/wix-export/SKILL.md +83 -0
  4. package/skills/wix-harmony-editor/.publish-manifest.json +8 -0
  5. package/skills/wix-harmony-editor/COPY-SITE.md +494 -0
  6. package/skills/wix-harmony-editor/SKILL.md +317 -0
  7. package/skills/wix-harmony-editor/scripts/copy/build-description.mjs +249 -0
  8. package/skills/wix-harmony-editor/scripts/copy/check-description.mjs +225 -0
  9. package/skills/wix-harmony-editor/scripts/copy/check-mirror.mjs +89 -0
  10. package/skills/wix-harmony-editor/scripts/copy/compare-preview.mjs +76 -0
  11. package/skills/wix-harmony-editor/scripts/copy/deploy-description.mjs +212 -0
  12. package/skills/wix-harmony-editor/scripts/copy/desc-hash.mjs +44 -0
  13. package/skills/wix-harmony-editor/scripts/copy/editor-run.mjs +45 -0
  14. package/skills/wix-harmony-editor/scripts/copy/export-page.mjs +53 -0
  15. package/skills/wix-harmony-editor/scripts/copy/find-interactions.mjs +76 -0
  16. package/skills/wix-harmony-editor/scripts/copy/hide-scrollbars.mjs +16 -0
  17. package/skills/wix-harmony-editor/scripts/copy/import-media.mjs +150 -0
  18. package/skills/wix-harmony-editor/scripts/copy/link-url.mjs +27 -0
  19. package/skills/wix-harmony-editor/scripts/copy/lint-api.mjs +56 -0
  20. package/skills/wix-harmony-editor/scripts/copy/measure-source.mjs +211 -0
  21. package/skills/wix-harmony-editor/scripts/copy/merge-mirrors.mjs +29 -0
  22. package/skills/wix-harmony-editor/scripts/copy/mirror-site.mjs +92 -0
  23. package/skills/wix-harmony-editor/scripts/copy/mobile-stage.mjs +56 -0
  24. package/skills/wix-harmony-editor/scripts/copy/preview-widths.mjs +73 -0
  25. package/skills/wix-harmony-editor/scripts/copy/render-plate.mjs +67 -0
  26. package/skills/wix-harmony-editor/scripts/copy/serve-mirror.mjs +102 -0
  27. package/skills/wix-harmony-editor/scripts/copy/snapshot-capabilities.mjs +40 -0
  28. package/skills/wix-harmony-editor/scripts/copy/split-sections.mjs +191 -0
  29. package/skills/wix-harmony-editor/scripts/copy/upload-media-manager.mjs +61 -0
  30. package/skills/wix-harmony-editor/scripts/launch.sh +359 -0
  31. package/skills/wix-headless/SKILL.md +7 -2
  32. package/skills/wix-headless/references/CAPABILITIES.md +6 -1
  33. package/skills/wix-headless/references/DISCOVERY.md +2 -1
  34. package/skills/wix-headless/references/SDK_HANDOFF.md +6 -1
  35. package/skills/wix-headless/references/SEED.md +3 -2
  36. package/skills/wix-headless/references/SETUP.md +1 -0
  37. package/skills/wix-headless/references/inline-recipes/experience-donations.md +102 -0
  38. package/skills/wix-headless/references/inline-recipes/how-to-code-donations.md +146 -0
  39. package/skills/wix-headless/references/inline-recipes/setup-donations.md +15 -0
  40. package/skills/wix-headless/references/managed/CREATE.md +1 -1
  41. package/skills/wix-headless-kit/SKILL.md +110 -21
  42. package/skills/wix-headless-kit/guides/api-run.md +15 -13
  43. package/skills/wix-headless-kit/guides/existing-site.md +31 -0
  44. package/skills/wix-headless-kit/guides/migration.md +49 -17
  45. package/skills/wix-headless-kit/install/agents-md.mjs +1 -1
  46. package/skills/wix-headless-kit/install/context.mjs +61 -6
  47. package/skills/wix-headless-kit/install/pins.json +1 -1
  48. package/skills/wix-headless-kit/install/setup.mjs +107 -12
  49. package/skills/wix-headless-replatform/.publish-manifest.json +8 -0
  50. package/skills/wix-headless-replatform/SKILL.md +116 -0
  51. package/skills/wix-headless-replatform/agents/openai.yaml +6 -0
  52. package/skills/wix-headless-replatform/references/control-and-visual-fidelity-contract.md +43 -0
  53. package/skills/wix-headless-replatform/references/extraction-schema.md +187 -0
  54. package/skills/wix-headless-replatform/references/interaction-runtime-contract.md +137 -0
  55. package/skills/wix-headless-replatform/references/layout-blueprint-contract.md +41 -0
  56. package/skills/wix-headless-replatform/references/output-contract.md +93 -0
  57. package/skills/wix-headless-replatform/references/post-build-gap-contract.md +125 -0
  58. package/skills/wix-headless-replatform/references/qa-checklist.md +83 -0
  59. package/skills/wix-headless-replatform/references/safety.md +19 -0
  60. package/skills/wix-headless-replatform/references/ui-normalization-contract.md +70 -0
  61. package/skills/wix-headless-replatform/references/workflow.md +157 -0
  62. package/skills/wix-headless-replatform/registry/README.md +20 -0
  63. package/skills/wix-headless-replatform/registry/approvals/button/shadcn-default-ac60ef5.json +28 -0
  64. package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/button.tsx +54 -0
  65. package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/capabilities.json +60 -0
  66. package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/contract.md +48 -0
  67. package/skills/wix-headless-replatform/registry/licenses/shadcn-ui-ac60ef5-MIT.txt +21 -0
  68. package/skills/wix-headless-replatform/registry/registry.json +36 -0
  69. package/skills/wix-headless-replatform/resources/rp-facelift/SKILL.md +32 -0
  70. package/skills/wix-headless-replatform/resources/rp-project-context/SKILL.md +62 -0
  71. package/skills/wix-headless-replatform/resources/rp-qa-gap-loop/SKILL.md +64 -0
  72. package/skills/wix-headless-replatform/resources/rp-source-evidence/SKILL.md +42 -0
  73. package/skills/wix-headless-replatform/resources/rp-ui-implementation/SKILL.md +73 -0
  74. package/skills/wix-headless-replatform/schemas/build-plan.schema.json +10 -0
  75. package/skills/wix-headless-replatform/schemas/candidate.schema.json +19 -0
  76. package/skills/wix-headless-replatform/schemas/common.schema.json +33 -0
  77. package/skills/wix-headless-replatform/schemas/decision-patch.schema.json +10 -0
  78. package/skills/wix-headless-replatform/schemas/decision-request.schema.json +10 -0
  79. package/skills/wix-headless-replatform/schemas/extraction-gap.schema.json +28 -0
  80. package/skills/wix-headless-replatform/schemas/extraction-manifest.schema.json +34 -0
  81. package/skills/wix-headless-replatform/schemas/final-report.schema.json +10 -0
  82. package/skills/wix-headless-replatform/schemas/foundation.schema.json +11 -0
  83. package/skills/wix-headless-replatform/schemas/metadata.schema.json +11 -0
  84. package/skills/wix-headless-replatform/schemas/observation-packet.schema.json +17 -0
  85. package/skills/wix-headless-replatform/schemas/page-capture.schema.json +11 -0
  86. package/skills/wix-headless-replatform/schemas/page-resolution.schema.json +33 -0
  87. package/skills/wix-headless-replatform/schemas/shared-chrome.schema.json +11 -0
  88. package/skills/wix-headless-replatform/schemas/unit.schema.json +40 -0
  89. package/skills/wix-headless-replatform/scripts/assemble-extraction.mjs +844 -0
  90. package/skills/wix-headless-replatform/scripts/benchmark-extraction.mjs +163 -0
  91. package/skills/wix-headless-replatform/scripts/browser-extraction-preflight.mjs +42 -0
  92. package/skills/wix-headless-replatform/scripts/build-extracted-homepage.mjs +228 -0
  93. package/skills/wix-headless-replatform/scripts/clear-wix-starter.mjs +87 -0
  94. package/skills/wix-headless-replatform/scripts/create-wix-project.mjs +505 -0
  95. package/skills/wix-headless-replatform/scripts/discover-urls.mjs +142 -0
  96. package/skills/wix-headless-replatform/scripts/extract-assets.mjs +140 -0
  97. package/skills/wix-headless-replatform/scripts/extract-design-system.mjs +637 -0
  98. package/skills/wix-headless-replatform/scripts/extract-interactions.mjs +1903 -0
  99. package/skills/wix-headless-replatform/scripts/extract-page.mjs +2461 -0
  100. package/skills/wix-headless-replatform/scripts/extract-seo.mjs +25 -0
  101. package/skills/wix-headless-replatform/scripts/extract-tokens.mjs +63 -0
  102. package/skills/wix-headless-replatform/scripts/finalize-extraction-report.mjs +126 -0
  103. package/skills/wix-headless-replatform/scripts/finalize-gap-review.mjs +180 -0
  104. package/skills/wix-headless-replatform/scripts/finalize-gap-review.test.mjs +98 -0
  105. package/skills/wix-headless-replatform/scripts/finalize-migration-website.mjs +103 -0
  106. package/skills/wix-headless-replatform/scripts/generate-control-state-contract.mjs +176 -0
  107. package/skills/wix-headless-replatform/scripts/generate-design-md.mjs +261 -0
  108. package/skills/wix-headless-replatform/scripts/generate-extraction-validators.mjs +25 -0
  109. package/skills/wix-headless-replatform/scripts/generate-invoice-download-backend.mjs +342 -0
  110. package/skills/wix-headless-replatform/scripts/generate-layout-blueprint.mjs +140 -0
  111. package/skills/wix-headless-replatform/scripts/generate-repeater-cms.mjs +22 -0
  112. package/skills/wix-headless-replatform/scripts/generate-route-plan.mjs +143 -0
  113. package/skills/wix-headless-replatform/scripts/generate-scene-contract.mjs +288 -0
  114. package/skills/wix-headless-replatform/scripts/generate-ui-normalization.mjs +266 -0
  115. package/skills/wix-headless-replatform/scripts/generate-visual-assets.mjs +111 -0
  116. package/skills/wix-headless-replatform/scripts/lib/browser-tooling.mjs +570 -0
  117. package/skills/wix-headless-replatform/scripts/lib/common.mjs +329 -0
  118. package/skills/wix-headless-replatform/scripts/lib/component-capabilities.mjs +121 -0
  119. package/skills/wix-headless-replatform/scripts/lib/component-registry.mjs +282 -0
  120. package/skills/wix-headless-replatform/scripts/lib/content-boundary.mjs +61 -0
  121. package/skills/wix-headless-replatform/scripts/lib/extraction-contract.mjs +374 -0
  122. package/skills/wix-headless-replatform/scripts/lib/extraction-detectors.mjs +243 -0
  123. package/skills/wix-headless-replatform/scripts/lib/extraction-validators.generated.mjs +1139 -0
  124. package/skills/wix-headless-replatform/scripts/lib/font-contract.mjs +326 -0
  125. package/skills/wix-headless-replatform/scripts/lib/frontend-automation-state.mjs +184 -0
  126. package/skills/wix-headless-replatform/scripts/lib/gap-analysis.mjs +396 -0
  127. package/skills/wix-headless-replatform/scripts/lib/html-extract.mjs +168 -0
  128. package/skills/wix-headless-replatform/scripts/lib/interaction-bootstrap.mjs +10 -0
  129. package/skills/wix-headless-replatform/scripts/lib/interaction-runtime.mjs +194 -0
  130. package/skills/wix-headless-replatform/scripts/lib/interaction-timeline.mjs +348 -0
  131. package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/classifiers.mjs +141 -0
  132. package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/geometry.mjs +43 -0
  133. package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/vocabulary.mjs +18 -0
  134. package/skills/wix-headless-replatform/scripts/lib/ui-normalization.css +64 -0
  135. package/skills/wix-headless-replatform/scripts/optimize-svg.mjs +31 -0
  136. package/skills/wix-headless-replatform/scripts/post-build-gap.mjs +358 -0
  137. package/skills/wix-headless-replatform/scripts/provision-repeater-cms.mjs +25 -0
  138. package/skills/wix-headless-replatform/scripts/record-gap-decision.mjs +39 -0
  139. package/skills/wix-headless-replatform/scripts/replay-extraction.mjs +107 -0
  140. package/skills/wix-headless-replatform/scripts/resolve-home-page.mjs +96 -0
  141. package/skills/wix-headless-replatform/scripts/site-clone.mjs +658 -0
  142. package/skills/wix-headless-replatform/scripts/validate-font-contract.mjs +29 -0
  143. package/skills/wix-headless-replatform/scripts/verify-interactions.mjs +669 -0
  144. package/skills/wix-headless-replatform/scripts/visual-qa.mjs +370 -0
  145. package/skills/wix-headless-templates/donations/INSTRUCTIONS.md +37 -24
  146. package/skills/wix-headless-templates/donations/app/components/donations/DonateForm.tsx +49 -23
  147. package/skills/wix-headless-templates/donations/app/components/donations/DonationReceipt.tsx +6 -5
  148. package/skills/wix-headless-templates/donations/app/components/donations/GoalProgress.tsx +5 -5
  149. package/skills/wix-headless-templates/donations/app/wix/donations/campaigns.ts +4 -4
  150. package/skills/wix-headless-templates/donations/app/wix/donations/donate.ts +7 -3
  151. package/skills/wix-headless-templates/donations/app/wix/donations/donation-store.ts +2 -2
  152. package/skills/wix-headless-templates/donations/app/wix/donations/donations-core.ts +12 -9
  153. package/skills/wix-headless-templates/donations/project/src/components/donations/DonateForm.tsx +49 -23
  154. package/skills/wix-headless-templates/donations/project/src/components/donations/DonationReceipt.tsx +6 -5
  155. package/skills/wix-headless-templates/donations/project/src/components/donations/GoalProgress.tsx +5 -5
  156. package/skills/wix-headless-templates/donations/project/src/wix/donations/campaigns.ts +4 -4
  157. package/skills/wix-headless-templates/donations/project/src/wix/donations/donate.ts +7 -3
  158. package/skills/wix-headless-templates/donations/project/src/wix/donations/donation-store.ts +2 -2
  159. package/skills/wix-headless-templates/donations/project/src/wix/donations/donations-core.ts +12 -9
  160. package/skills/wix-headless-templates/donations/rest/campaigns.ts +4 -4
  161. package/skills/wix-headless-templates/donations/rest/donate.ts +7 -3
  162. package/skills/wix-headless-templates/donations/seed/SEED.md +12 -7
  163. package/skills/wix-headless-templates/donations/tests/donation-contract.test.mjs +71 -0
  164. package/skills/wix-headless-templates/donations/tests/donation-form.test.cjs +137 -0
  165. package/skills/wix-headless-templates/restaurants/INSTRUCTIONS.md +28 -14
  166. package/skills/wix-headless-templates/restaurants/app/components/restaurants/OrderCartDrawer.tsx +87 -5
  167. package/skills/wix-headless-templates/restaurants/app/hooks/restaurants/useOrderCart.ts +9 -1
  168. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/order-store.ts +33 -4
  169. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/ordering-core.ts +100 -5
  170. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/ordering.ts +101 -15
  171. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/types.ts +35 -1
  172. package/skills/wix-headless-templates/restaurants/project/src/components/restaurants/OrderCartDrawer.tsx +87 -5
  173. package/skills/wix-headless-templates/restaurants/project/src/hooks/restaurants/useOrderCart.ts +9 -1
  174. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/order-store.ts +33 -4
  175. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/ordering-core.ts +100 -5
  176. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/ordering.ts +101 -15
  177. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/types.ts +35 -1
  178. package/skills/wix-headless-templates/restaurants/rest/ordering.ts +91 -14
  179. package/skills/wix-import/SKILL.md +90 -0
  180. package/skills/wix-manage/SKILL.md +14 -4
  181. package/skills/wix-manage/references/blog/how-to-create-blog-posts.md +2 -0
  182. package/skills/wix-manage/references/dashboard-navigation/dashboard-navigation.md +2 -1
  183. package/skills/wix-manage/references/dashboard-navigation/routes.json +249 -0
  184. package/skills/wix-manage/references/donations/create-and-update-donation-campaigns.md +139 -0
  185. package/skills/wix-manage/references/events/events-dashboard-navigation.md +81 -0
  186. package/skills/wix-manage/references/seo/manage-content-plan.md +207 -222
  187. package/skills/wix-manage/references/sites/manage-oauth-apps.md +1 -0
  188. package/skills/wix-manage/references/sites/upload-static-site.md +128 -8
  189. package/skills/wix-readme/SKILL.md +166 -0
  190. package/skills/wix-replatform/.publish-manifest.json +5 -5
  191. package/skills/wix-replatform/CLI.md +162 -0
  192. package/skills/wix-replatform/README.md +52 -0
  193. package/skills/wix-replatform/SKILL.md +229 -684
  194. package/skills/wix-replatform/console/account.css +1 -0
  195. package/skills/wix-replatform/console/app.css +1 -0
  196. package/skills/wix-replatform/console/app.js +117 -0
  197. package/skills/wix-replatform/console/index.html +4 -0
  198. package/skills/wix-replatform/console/json.css +11 -0
  199. package/skills/wix-replatform/lib/agent-adapters/index.js +71 -0
  200. package/skills/wix-replatform/lib/app-page-routing.js +75 -0
  201. package/skills/wix-replatform/lib/artifact-freshness.js +11 -1
  202. package/skills/wix-replatform/lib/blocked-data-requests.js +427 -0
  203. package/skills/wix-replatform/lib/census-reconciliation.js +426 -0
  204. package/skills/wix-replatform/lib/completion-report.js +1393 -13
  205. package/skills/wix-replatform/lib/config-env.js +85 -11
  206. package/skills/wix-replatform/lib/confirmed-pictures.js +212 -0
  207. package/skills/wix-replatform/lib/dependency-readiness.js +423 -0
  208. package/skills/wix-replatform/lib/dependency-recovery.js +21 -0
  209. package/skills/wix-replatform/lib/destination-choice.js +163 -0
  210. package/skills/wix-replatform/lib/destination-handoff.js +62 -0
  211. package/skills/wix-replatform/lib/destination-http.js +81 -0
  212. package/skills/wix-replatform/lib/destination-route.js +98 -0
  213. package/skills/wix-replatform/lib/destination.js +919 -0
  214. package/skills/wix-replatform/lib/discovered-census.js +231 -0
  215. package/skills/wix-replatform/lib/discovered-set-status.js +255 -0
  216. package/skills/wix-replatform/lib/document-url-guard.js +203 -0
  217. package/skills/wix-replatform/lib/entity-qa-attestation.js +339 -0
  218. package/skills/wix-replatform/lib/entity-verification.js +18 -0
  219. package/skills/wix-replatform/lib/execution-capability.js +120 -0
  220. package/skills/wix-replatform/lib/execution-log.js +170 -0
  221. package/skills/wix-replatform/lib/execution-manifest.js +20 -2
  222. package/skills/wix-replatform/lib/execution-state.js +22 -0
  223. package/skills/wix-replatform/lib/expectations-ledger.js +96 -0
  224. package/skills/wix-replatform/lib/generated-plugin-handoff.js +140 -0
  225. package/skills/wix-replatform/lib/import-readiness-contract.js +23 -0
  226. package/skills/wix-replatform/lib/import-recovery.js +800 -6
  227. package/skills/wix-replatform/lib/imported-redirect-targets.js +608 -0
  228. package/skills/wix-replatform/lib/internal-link-reconciliation.js +166 -0
  229. package/skills/wix-replatform/lib/link-audit.js +173 -0
  230. package/skills/wix-replatform/lib/link-census.js +194 -0
  231. package/skills/wix-replatform/lib/link-plan.js +148 -0
  232. package/skills/wix-replatform/lib/link-verification.js +274 -0
  233. package/skills/wix-replatform/lib/link-write-journal.js +42 -0
  234. package/skills/wix-replatform/lib/local-state.js +869 -30
  235. package/skills/wix-replatform/lib/member-completion.js +658 -0
  236. package/skills/wix-replatform/lib/member-crosswalk.js +69 -0
  237. package/skills/wix-replatform/lib/member-outcome-registry.js +265 -0
  238. package/skills/wix-replatform/lib/migration-completion.js +311 -0
  239. package/skills/wix-replatform/lib/operator-identity.js +47 -0
  240. package/skills/wix-replatform/lib/orchestration-decisions.js +248 -0
  241. package/skills/wix-replatform/lib/orchestration-preflight.js +401 -19
  242. package/skills/wix-replatform/lib/orchestration-router.js +608 -32
  243. package/skills/wix-replatform/lib/orchestration-state.js +188 -12
  244. package/skills/wix-replatform/lib/order-reference-readiness.js +30 -0
  245. package/skills/wix-replatform/lib/payments-outcome-registry.js +200 -0
  246. package/skills/wix-replatform/lib/plugin-cms-fallback.js +618 -0
  247. package/skills/wix-replatform/lib/preservation-approval-stamp.js +54 -0
  248. package/skills/wix-replatform/lib/product-media-deferral.js +96 -0
  249. package/skills/wix-replatform/lib/progress-log.js +19 -3
  250. package/skills/wix-replatform/lib/read-back-approval.js +184 -0
  251. package/skills/wix-replatform/lib/read-back-comparison.js +136 -0
  252. package/skills/wix-replatform/lib/read-back-contract.js +243 -0
  253. package/skills/wix-replatform/lib/read-back-extract.js +118 -0
  254. package/skills/wix-replatform/lib/read-back-gate.js +734 -0
  255. package/skills/wix-replatform/lib/read-back-reads.js +94 -0
  256. package/skills/wix-replatform/lib/read-back-state.js +107 -0
  257. package/skills/wix-replatform/lib/read-back-summary.js +81 -0
  258. package/skills/wix-replatform/lib/rerun-conflicts.js +334 -0
  259. package/skills/wix-replatform/lib/run-controller.js +401 -0
  260. package/skills/wix-replatform/lib/seo-outcome-registry.js +45 -0
  261. package/skills/wix-replatform/lib/setup-verification.js +148 -0
  262. package/skills/wix-replatform/lib/source-access.js +231 -0
  263. package/skills/wix-replatform/lib/source-coverage.js +1130 -0
  264. package/skills/wix-replatform/lib/source-secrets.js +277 -0
  265. package/skills/wix-replatform/lib/structured-link-patch.js +59 -0
  266. package/skills/wix-replatform/lib/task-state.js +110 -0
  267. package/skills/wix-replatform/lib/url-preservation-report.js +319 -0
  268. package/skills/wix-replatform/lib/url-preservation-state.js +349 -1
  269. package/skills/wix-replatform/lib/url-redirect-plan.js +728 -0
  270. package/skills/wix-replatform/lib/url-verification.js +315 -0
  271. package/skills/wix-replatform/lib/user-action-effects.js +42 -0
  272. package/skills/wix-replatform/lib/user-actions.js +264 -0
  273. package/skills/wix-replatform/lib/website-handoff.js +1220 -0
  274. package/skills/wix-replatform/lib/wix-client-callers.js +54 -0
  275. package/skills/wix-replatform/lib/wix-dashboard-url.js +35 -0
  276. package/skills/wix-replatform/lib/write-verification-state.js +92 -0
  277. package/skills/wix-replatform/lib/write-verification.js +274 -0
  278. package/skills/wix-replatform/resources/rp-destination/SKILL.md +137 -0
  279. package/skills/wix-replatform/resources/rp-discovery/SKILL.md +189 -16
  280. package/skills/wix-replatform/resources/rp-discovery/scripts/promote-source-coverage.js +47 -0
  281. package/skills/wix-replatform/resources/rp-execute-import/SKILL.md +869 -29
  282. package/skills/wix-replatform/resources/rp-execute-import/scripts/shipping-estimate-audit.js +70 -0
  283. package/skills/wix-replatform/resources/rp-execute-setup/SKILL.md +195 -29
  284. package/skills/wix-replatform/resources/rp-execute-setup/scripts/execute-setup.js +442 -0
  285. package/skills/wix-replatform/resources/rp-execution-policy/SKILL.md +112 -0
  286. package/skills/wix-replatform/resources/rp-execution-policy/lib/coupon-currency-plan-report.js +143 -0
  287. package/skills/wix-replatform/resources/rp-execution-policy/lib/payments-report.js +244 -0
  288. package/skills/wix-replatform/resources/rp-import-codegen/SKILL.md +2082 -38
  289. package/skills/wix-replatform/resources/rp-mapper/SKILL.md +528 -11
  290. package/skills/wix-replatform/resources/rp-mapper/lib/structure-bridge-planning.js +303 -0
  291. package/skills/wix-replatform/resources/rp-mapper/scripts/coverage-reconcile.js +88 -0
  292. package/skills/wix-replatform/resources/rp-mapper/wix-business-solutions-taxonomy.md +6 -5
  293. package/skills/wix-replatform/resources/rp-preflight/SKILL.md +40 -0
  294. package/skills/wix-replatform/resources/rp-project-intake/SKILL.md +55 -0
  295. package/skills/wix-replatform/resources/rp-quick-runtime/SKILL.md +60 -0
  296. package/skills/wix-replatform/resources/rp-quick-runtime/lib/import-progress.js +89 -0
  297. package/skills/wix-replatform/resources/rp-quick-runtime/lib/limit-recovery.js +36 -0
  298. package/skills/wix-replatform/resources/rp-quick-shopify/SKILL.md +123 -0
  299. package/skills/wix-replatform/resources/rp-quick-shopify/quick-mode.json +124 -0
  300. package/skills/wix-replatform/resources/rp-quick-shopify/scripts/quick-mode.js +522 -0
  301. package/skills/wix-replatform/resources/rp-quick-woocommerce/SKILL.md +56 -0
  302. package/skills/wix-replatform/resources/rp-quick-woocommerce/quick-mode.json +91 -0
  303. package/skills/wix-replatform/resources/rp-quick-woocommerce/scripts/quick-mode.js +255 -0
  304. package/skills/wix-replatform/resources/rp-setup-discovery/SKILL.md +80 -10
  305. package/skills/wix-replatform/resources/rp-setup-discovery/scripts/quick-setup-plan.js +44 -0
  306. package/skills/wix-replatform/resources/rp-source-csv/SKILL.md +3 -0
  307. package/skills/wix-replatform/resources/rp-source-csv/lib/csv-fileset.js +0 -0
  308. package/skills/wix-replatform/resources/rp-source-csv/scripts/csv-discovery.js +21 -1
  309. package/skills/wix-replatform/resources/rp-source-inputs/SKILL.md +66 -0
  310. package/skills/wix-replatform/resources/rp-source-sfcc/SKILL.md +153 -0
  311. package/skills/wix-replatform/resources/rp-source-shopify/SKILL.md +394 -0
  312. package/skills/wix-replatform/resources/rp-source-shopify/lib/discovery-reads.js +200 -0
  313. package/skills/wix-replatform/resources/rp-source-shopify/lib/import-findings.js +34 -0
  314. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-bulk-sqlite-worker.js +44 -0
  315. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-bulk.js +1470 -0
  316. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-cli.js +446 -0
  317. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-gift-cards.js +474 -0
  318. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-protected-fields.js +879 -0
  319. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-session.js +426 -0
  320. package/skills/wix-replatform/resources/rp-source-shopify/queries/articles.graphql +24 -0
  321. package/skills/wix-replatform/resources/rp-source-shopify/queries/blogs.graphql +18 -0
  322. package/skills/wix-replatform/resources/rp-source-shopify/queries/collections.graphql +40 -0
  323. package/skills/wix-replatform/resources/rp-source-shopify/queries/customers.graphql +76 -0
  324. package/skills/wix-replatform/resources/rp-source-shopify/queries/delivery-profiles.graphql +51 -0
  325. package/skills/wix-replatform/resources/rp-source-shopify/queries/discounts.graphql +35 -0
  326. package/skills/wix-replatform/resources/rp-source-shopify/queries/files.graphql +20 -0
  327. package/skills/wix-replatform/resources/rp-source-shopify/queries/gift-cards.graphql +18 -0
  328. package/skills/wix-replatform/resources/rp-source-shopify/queries/inventory.graphql +31 -0
  329. package/skills/wix-replatform/resources/rp-source-shopify/queries/locations.graphql +21 -0
  330. package/skills/wix-replatform/resources/rp-source-shopify/queries/menus.graphql +21 -0
  331. package/skills/wix-replatform/resources/rp-source-shopify/queries/metaobjects.graphql +30 -0
  332. package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-core.graphql +150 -0
  333. package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-fulfillments.graphql +36 -0
  334. package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-refunds.graphql +48 -0
  335. package/skills/wix-replatform/resources/rp-source-shopify/queries/pages.graphql +20 -0
  336. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-address.graphql +8 -0
  337. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-email.graphql +6 -0
  338. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-name.graphql +8 -0
  339. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-phone.graphql +8 -0
  340. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-address.graphql +12 -0
  341. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-email.graphql +6 -0
  342. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-name.graphql +13 -0
  343. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-phone.graphql +13 -0
  344. package/skills/wix-replatform/resources/rp-source-shopify/queries/products.graphql +73 -0
  345. package/skills/wix-replatform/resources/rp-source-shopify/queries/url-redirects.graphql +13 -0
  346. package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-discovery.js +693 -0
  347. package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-extract.js +283 -0
  348. package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-gift-card-remedy.js +191 -0
  349. package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-session-check.js +115 -0
  350. package/skills/wix-replatform/resources/rp-source-shopify/source-schema.example.json +201 -0
  351. package/skills/wix-replatform/resources/rp-source-wordpress/PLUGIN-READ-PLANS.md +146 -0
  352. package/skills/wix-replatform/resources/rp-source-wordpress/SKILL.md +736 -22
  353. package/skills/wix-replatform/resources/rp-source-wordpress/lib/blocked-data-handlers.js +73 -0
  354. package/skills/wix-replatform/resources/rp-source-wordpress/lib/checkout-field-csv-parser.js +115 -0
  355. package/skills/wix-replatform/resources/rp-source-wordpress/lib/checkout-field-csv-parser.test-fixture.js +91 -0
  356. package/skills/wix-replatform/resources/rp-source-wordpress/lib/coupon-discovery.js +440 -0
  357. package/skills/wix-replatform/resources/rp-source-wordpress/lib/currency-gate.js +125 -0
  358. package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-source-keys.js +252 -0
  359. package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-source-keys.json +183 -0
  360. package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-summary.mjs +333 -0
  361. package/skills/wix-replatform/resources/rp-source-wordpress/lib/invoice-discovery.js +426 -0
  362. package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-disposition.js +400 -0
  363. package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-entity-read-plan.js +633 -0
  364. package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-knowledge.js +1127 -0
  365. package/skills/wix-replatform/resources/rp-source-wordpress/lib/refund-corroboration.js +194 -0
  366. package/skills/wix-replatform/resources/rp-source-wordpress/lib/refund-corroboration.json +100 -0
  367. package/skills/wix-replatform/resources/rp-source-wordpress/lib/sampled-ids-batch.js +157 -0
  368. package/skills/wix-replatform/resources/rp-source-wordpress/lib/secret-value-guard.js +234 -0
  369. package/skills/wix-replatform/resources/rp-source-wordpress/lib/store-currency.js +101 -0
  370. package/skills/wix-replatform/resources/rp-source-wordpress/lib/structure-bridge-reader.js +755 -0
  371. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wix-wp-plugin-v2-client.js +1074 -0
  372. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wix-wp-plugin-v2-client.test-fixture.js +149 -0
  373. package/skills/wix-replatform/resources/rp-source-wordpress/lib/woo-inventory.js +25 -0
  374. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-http.js +204 -9
  375. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-image-url.js +186 -0
  376. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-plugin-detect.js +1422 -0
  377. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-redirect-sources.js +343 -0
  378. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-route-classifier.js +262 -26
  379. package/skills/wix-replatform/resources/rp-source-wordpress/lib/yoast-product-seo-evidence.js +272 -0
  380. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/README.md +373 -0
  381. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/advanced-custom-fields.json +101 -0
  382. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/back-in-stock-notifier-for-woocommerce.json +81 -0
  383. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/capabilities-pending-decision.json +128 -0
  384. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/cms-fallback-eligible.json +18 -0
  385. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/contact-form-7.json +104 -0
  386. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/facebook-for-woocommerce.json +44 -0
  387. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/fingerprint-aliases.json +49 -0
  388. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/free-gifts-for-woocommerce.json +94 -0
  389. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/index.json +863 -0
  390. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/mailpoet.json +52 -0
  391. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/membership-for-woocommerce.json +161 -0
  392. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/mwb-bookings-for-woocommerce.json +180 -0
  393. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/no-migration-needed.json +286 -0
  394. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/pricing-deals-for-woocommerce.json +79 -0
  395. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/product-extras-for-woocommerce.json +120 -0
  396. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/pw-woocommerce-gift-cards.json +128 -0
  397. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/requires-development.json +88 -0
  398. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/seo-by-rank-math.json +80 -0
  399. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/seriously-simple-podcasting.json +46 -0
  400. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/strong-testimonials.json +55 -0
  401. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/subscriptions-for-woocommerce.json +99 -0
  402. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/tablepress.json +55 -0
  403. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/the-events-calendar.json +160 -0
  404. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/ti-woocommerce-wishlist.json +81 -0
  405. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-checkout-field-editor-pro.json +60 -0
  406. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-discount-rules.json +74 -0
  407. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-product-bundle.json +75 -0
  408. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-gift-cards.json +60 -0
  409. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-other-payment-gateway.json +44 -0
  410. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-pdf-invoices-packing-slips.json +57 -0
  411. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-product-addon.json +141 -0
  412. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-progressive-discounts.json +54 -0
  413. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wordpress-seo.json +158 -0
  414. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wpc-composite-products.json +97 -0
  415. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wpforms-lite.json +86 -0
  416. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/capture-store-settings.js +90 -0
  417. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/plugin-knowledge-validate.js +51 -0
  418. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/plugin-knowledge.js +103 -0
  419. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/wp-discovery.js +1668 -33
  420. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/wp-plugin-inventory.js +273 -0
  421. package/skills/wix-replatform/resources/rp-source-wordpress/secret-value-patterns.v1.json +11 -0
  422. package/skills/wix-replatform/resources/rp-source-wordpress/sub-parts.json +13 -0
  423. package/skills/wix-replatform/resources/rp-target-wix/SKILL.md +446 -32
  424. package/skills/wix-replatform/resources/rp-target-wix/app-page-routing-capabilities.json +36 -0
  425. package/skills/wix-replatform/resources/rp-target-wix/domains/README.md +38 -2
  426. package/skills/wix-replatform/resources/rp-target-wix/domains/SERVICE-PLUGINS.md +322 -0
  427. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/docs-survey.json +70 -0
  428. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/domain.json +19 -9
  429. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/category.json +42 -8
  430. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/comment.json +54 -8
  431. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/post.json +66 -10
  432. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/tag.json +38 -7
  433. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/docs-survey.json +332 -0
  434. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/domain.json +75 -0
  435. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/booking.json +181 -0
  436. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/service-add-on.json +130 -0
  437. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/service.json +180 -0
  438. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/docs-survey.json +161 -0
  439. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/domain.json +15 -4
  440. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/collection.json +39 -7
  441. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/data-item.json +47 -8
  442. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/reference.json +7 -1
  443. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/docs-survey.json +204 -0
  444. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/domain.json +17 -4
  445. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/contact.json +159 -15
  446. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/email-subscription.json +80 -12
  447. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/label.json +48 -8
  448. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/docs-survey.json +306 -0
  449. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/domain.json +30 -7
  450. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/delivery-profile.json +171 -0
  451. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/discount-rule.json +182 -0
  452. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-applied-discount.json +129 -0
  453. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-invoice-document.json +192 -0
  454. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-line-item-options.json +123 -0
  455. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-line-item.json +60 -12
  456. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-merchant-note.json +112 -0
  457. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-payment.json +191 -0
  458. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-refund.json +140 -13
  459. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order.json +383 -18
  460. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/pickup-location.json +122 -0
  461. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/shipping-option.json +98 -0
  462. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/wishlist-item.json +86 -0
  463. package/skills/wix-replatform/resources/rp-target-wix/domains/events/docs-survey.json +128 -0
  464. package/skills/wix-replatform/resources/rp-target-wix/domains/events/domain.json +38 -0
  465. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/category.json +73 -0
  466. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/event.json +107 -0
  467. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/registration-form.json +89 -0
  468. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/rsvp.json +118 -0
  469. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/ticket-definition.json +93 -0
  470. package/skills/wix-replatform/resources/rp-target-wix/domains/forms/docs-survey.json +86 -0
  471. package/skills/wix-replatform/resources/rp-target-wix/domains/forms/domain.json +56 -0
  472. package/skills/wix-replatform/resources/rp-target-wix/domains/forms/entities/form-submission.json +121 -0
  473. package/skills/wix-replatform/resources/rp-target-wix/domains/forms/entities/form.json +134 -0
  474. package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/docs-survey.json +41 -0
  475. package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/domain.json +50 -0
  476. package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/entities/gift-card-product.json +87 -0
  477. package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/entities/gift-card.json +130 -0
  478. package/skills/wix-replatform/resources/rp-target-wix/domains/index.json +914 -24
  479. package/skills/wix-replatform/resources/rp-target-wix/domains/media/docs-survey.json +41 -0
  480. package/skills/wix-replatform/resources/rp-target-wix/domains/media/domain.json +14 -4
  481. package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-file.json +45 -8
  482. package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-folder.json +41 -7
  483. package/skills/wix-replatform/resources/rp-target-wix/domains/members/docs-survey.json +119 -0
  484. package/skills/wix-replatform/resources/rp-target-wix/domains/members/domain.json +13 -3
  485. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/badge.json +41 -7
  486. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/custom-field.json +82 -0
  487. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/member-about.json +77 -0
  488. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/member.json +165 -13
  489. package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/docs-survey.json +41 -0
  490. package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/domain.json +46 -0
  491. package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/entities/plan-order.json +137 -0
  492. package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/entities/plan.json +133 -0
  493. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/docs-survey.json +7 -0
  494. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/domain.json +36 -0
  495. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/amazon-shop-connect.json +71 -0
  496. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/ebay-shop-connect.json +67 -0
  497. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/google-youtube-connect.json +72 -0
  498. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/meta-catalog-connect.json +74 -0
  499. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/pinterest-catalog-connect.json +69 -0
  500. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/tiktok-catalog-connect.json +61 -0
  501. package/skills/wix-replatform/resources/rp-target-wix/domains/schema.json +28 -1
  502. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/docs-survey.json +109 -0
  503. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/domain.json +73 -0
  504. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/item-seo-tags.json +148 -0
  505. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/seo-pattern.json +91 -0
  506. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/site-seo-tags.json +79 -0
  507. package/skills/wix-replatform/resources/rp-target-wix/domains/site/docs-survey.json +32 -0
  508. package/skills/wix-replatform/resources/rp-target-wix/domains/site/domain.json +49 -0
  509. package/skills/wix-replatform/resources/rp-target-wix/domains/site/entities/business-contact.json +103 -0
  510. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/docs-survey.json +203 -0
  511. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/domain.json +27 -10
  512. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/back-in-stock-request.json +119 -0
  513. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/brand.json +111 -0
  514. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/category.json +52 -8
  515. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/coupon.json +214 -10
  516. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/inventory-item.json +93 -13
  517. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-customization.json +111 -0
  518. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-tag.json +52 -10
  519. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product.json +145 -14
  520. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/promotion.json +84 -0
  521. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/review.json +178 -0
  522. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/subscription-product.json +87 -0
  523. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/docs-survey.json +106 -0
  524. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/domain.json +64 -0
  525. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/manual-tax-mapping.json +119 -0
  526. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-group.json +94 -0
  527. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-region.json +113 -0
  528. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-settings.json +65 -0
  529. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-author-attribution.js +165 -0
  530. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-client.js +60 -0
  531. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-duplicates.js +201 -0
  532. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-ledger.js +306 -0
  533. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-report.js +229 -0
  534. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-stage.js +55 -0
  535. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build.js +715 -0
  536. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-media.js +567 -0
  537. package/skills/wix-replatform/resources/rp-target-wix/lib/bulk-results.js +73 -0
  538. package/skills/wix-replatform/resources/rp-target-wix/lib/contact-extended-fields.js +194 -0
  539. package/skills/wix-replatform/resources/rp-target-wix/lib/contact-import.js +133 -0
  540. package/skills/wix-replatform/resources/rp-target-wix/lib/contract-ledger.js +13 -4
  541. package/skills/wix-replatform/resources/rp-target-wix/lib/coupon-redemption-drift.js +491 -0
  542. package/skills/wix-replatform/resources/rp-target-wix/lib/customer-member.js +104 -0
  543. package/skills/wix-replatform/resources/rp-target-wix/lib/data-extension-schema.js +673 -0
  544. package/skills/wix-replatform/resources/rp-target-wix/lib/domain-knowledge.js +453 -2
  545. package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-balance-reconciliation.js +119 -0
  546. package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-build.js +566 -0
  547. package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-redemption-build.js +249 -0
  548. package/skills/wix-replatform/resources/rp-target-wix/lib/order-applied-discount-build.js +63 -0
  549. package/skills/wix-replatform/resources/rp-target-wix/lib/order-buyer.js +187 -0
  550. package/skills/wix-replatform/resources/rp-target-wix/lib/order-channel-build.js +64 -0
  551. package/skills/wix-replatform/resources/rp-target-wix/lib/order-history.js +1027 -0
  552. package/skills/wix-replatform/resources/rp-target-wix/lib/order-invoice-contract.js +90 -0
  553. package/skills/wix-replatform/resources/rp-target-wix/lib/order-payment-mapping.js +420 -0
  554. package/skills/wix-replatform/resources/rp-target-wix/lib/pricing-plan-definition.js +177 -0
  555. package/skills/wix-replatform/resources/rp-target-wix/lib/product-import.js +151 -0
  556. package/skills/wix-replatform/resources/rp-target-wix/lib/product-seo.js +723 -0
  557. package/skills/wix-replatform/resources/rp-target-wix/lib/seo-redirects.js +353 -0
  558. package/skills/wix-replatform/resources/rp-target-wix/lib/shipping-build.js +1437 -0
  559. package/skills/wix-replatform/resources/rp-target-wix/lib/shipping-option-stage.js +354 -0
  560. package/skills/wix-replatform/resources/rp-target-wix/lib/store-config-build.js +134 -0
  561. package/skills/wix-replatform/resources/rp-target-wix/lib/stores-category-attach.js +221 -0
  562. package/skills/wix-replatform/resources/rp-target-wix/lib/stores-inventory.js +248 -0
  563. package/skills/wix-replatform/resources/rp-target-wix/lib/stores-verification.js +86 -3
  564. package/skills/wix-replatform/resources/rp-target-wix/lib/tax-build.js +231 -0
  565. package/skills/wix-replatform/resources/rp-target-wix/lib/url-mapper-transport.js +28 -0
  566. package/skills/wix-replatform/resources/rp-target-wix/lib/value-utils.js +14 -0
  567. package/skills/wix-replatform/resources/rp-target-wix/lib/variant-correlation.js +34 -0
  568. package/skills/wix-replatform/resources/rp-target-wix/lib/wix-build.js +166 -15
  569. package/skills/wix-replatform/resources/rp-target-wix/lib/wix-target-spec.js +19 -2
  570. package/skills/wix-replatform/resources/rp-target-wix/lib/wix-writers.js +4079 -257
  571. package/skills/wix-replatform/resources/rp-target-wix/lib/write-verification.js +3 -0
  572. package/skills/wix-replatform/resources/rp-target-wix/scripts/docs-survey-sync.js +150 -0
  573. package/skills/wix-replatform/resources/rp-target-wix/scripts/domain-knowledge-validate.js +40 -2
  574. package/skills/wix-replatform/resources/rp-target-wix/scripts/verify-stores.js +6 -1
  575. package/skills/wix-replatform/resources/rp-telemetry/SKILL.md +148 -8
  576. package/skills/wix-replatform/resources/rp-telemetry/lib/bi-sink.js +83 -15
  577. package/skills/wix-replatform/resources/rp-telemetry/lib/telemetry-recorder.js +1119 -215
  578. package/skills/wix-replatform/resources/rp-telemetry/lib/transcript-digest.js +318 -0
  579. package/skills/wix-replatform/resources/rp-telemetry/scripts/meter-from-audit.js +2 -2
  580. package/skills/wix-replatform/resources/rp-telemetry/scripts/rp-telemetry.js +106 -4
  581. package/skills/wix-replatform/resources/rp-website-continuation/SKILL.md +94 -0
  582. package/skills/wix-replatform/scripts/census-reconciliation.js +25 -0
  583. package/skills/wix-replatform/scripts/cms-fallback.js +89 -0
  584. package/skills/wix-replatform/scripts/discovered-census.js +26 -0
  585. package/skills/wix-replatform/scripts/discovered-set-status.js +33 -0
  586. package/skills/wix-replatform/scripts/entity-qa-attestation.js +130 -0
  587. package/skills/wix-replatform/scripts/execution-health-check.js +415 -0
  588. package/skills/wix-replatform/scripts/execution-manifest-validate.js +1 -1
  589. package/skills/wix-replatform/scripts/execution-state-prepare.js +1 -1
  590. package/skills/wix-replatform/scripts/expectations-ledger.js +44 -0
  591. package/skills/wix-replatform/scripts/import-contract-verify.js +183 -0
  592. package/skills/wix-replatform/scripts/internal-link-audit.js +90 -0
  593. package/skills/wix-replatform/scripts/item-seo-tags-verify.js +205 -0
  594. package/skills/wix-replatform/scripts/migration-completion.js +76 -0
  595. package/skills/wix-replatform/scripts/orchestration-preflight.js +21 -2
  596. package/skills/wix-replatform/scripts/orchestration-route.js +32 -1
  597. package/skills/wix-replatform/scripts/orchestration-state.js +146 -10
  598. package/skills/wix-replatform/scripts/read-back-gate.js +175 -0
  599. package/skills/wix-replatform/scripts/replatform-console.js +146 -0
  600. package/skills/wix-replatform/scripts/replatform.js +436 -0
  601. package/skills/wix-replatform/scripts/source-secrets.js +77 -0
  602. package/skills/wix-replatform/scripts/url-redirects.js +286 -0
  603. package/skills/wix-replatform/scripts/user-action.js +58 -0
  604. package/skills/wix-replatform/scripts/website-handoff-generate.js +64 -0
  605. package/skills/wix-replatform/scripts/wix-dashboard-url.js +54 -0
  606. package/skills/wix-replatform/scripts/wix-destination.js +143 -0
  607. package/skills/wix-replatform/scripts/wix-headless-scaffold.js +762 -0
  608. package/skills/wix-vibe-headless/SKILL.md +7 -3
  609. package/skills/wix-vibe-headless/install/deploy.cjs +61 -34
  610. package/skills/wix-vibe-headless/platforms/base44.md +1 -0
  611. package/skills/wix-vibe-headless/references/donations/INSTRUCTIONS.md +88 -0
  612. package/skills/wix-vibe-headless/references/donations/app/rest/wix-donations.js +112 -0
  613. package/skills/wix-vibe-headless/references/donations/seed/SEED.md +11 -0
  614. package/skills/wix-vibe-headless/references/donations/tests/donations.test.mjs +258 -0
  615. package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +5 -2
  616. package/skills/wix-vibe-headless/references/restaurants/app/context/OrderCartContext.jsx +4 -1
  617. package/skills/wix-vibe-headless/references/restaurants/app/rest/wix-restaurants-ordering.js +67 -3
  618. package/skills/wix-vibe-headless/references/shared/app/rest/wix-client.js +4 -3
  619. package/skills/wix-replatform/resources/rp-target-wix/SPEC-product-reviews-and-blog-authorship.md +0 -330
@@ -0,0 +1,303 @@
1
+ 'use strict';
2
+
3
+ // Mapping-stage planning for structure-bridge-plugin entities .
4
+ //
5
+ // A plugin entity whose only read path is wix-wp-plugin-v2's /query is two different things,
6
+ // and this module keeps them apart:
7
+ //
8
+ // - A PLANNED ENTITY: the profile proposes a Wix target (`candidateTargetRefs[]`), so the table
9
+ // becomes a migration entity in its own right. It gets `mapping/entity-decisions/<entity>.json`
10
+ // and a row in `mapping/mapping-plan.json`, under the same mapping-review gate as a REST
11
+ // entity, and rp-import-codegen generates a normal incremental reader for it
12
+ // (rp-source-wordpress/lib/structure-bridge-reader.js).
13
+ // - A BLOCKED-FIELD SOURCE: no candidate target; the data only fills a field on a target that
14
+ // is planned through another source (for example gift-card balance). That stays on the
15
+ // blockedSourceDependencies / blocked-data-requests.js path, unchanged.
16
+ //
17
+ // A target entity may declare a blockedSourceDependency on a source that is ALSO planned here
18
+ // as its own entity (ecom/discount-rule on discount-rule-definition). Routing it through both
19
+ // paths would offer the same table as a one-shot blocked-data request that can never resolve,
20
+ // so partitionBlockedSourceDependencies() removes that dependency before the blocked-data
21
+ // builder runs and records it on the planned entity's decision instead.
22
+ //
23
+ // Readiness is the only thing checked through blocked-data-handlers.js; data is never resolved
24
+ // through blocked-data-requests.js's snapshot mechanism.
25
+
26
+ const fsp = require('node:fs/promises');
27
+ const path = require('node:path');
28
+ const { fulfillmentReadiness } = require('../../rp-source-wordpress/lib/blocked-data-handlers.js');
29
+ const { readEntityByRef } = require('../../rp-target-wix/lib/domain-knowledge.js');
30
+ const { verifyEavReadPlanIntegrity } = require('../../rp-source-wordpress/lib/wix-wp-plugin-v2-client.js');
31
+
32
+ const DEFAULT_DOMAINS_DIR = path.join(__dirname, '..', '..', 'rp-target-wix', 'domains');
33
+ const REVIEW_GATE = Object.freeze({ artifact: 'orchestration/approvals.json', field: 'mapping.status' });
34
+ const PLAN_ROW_KEYS = ['entityMappings', 'entityDecisions', 'mappings', 'entities'];
35
+
36
+ function slugify(value) {
37
+ return String(value).toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '') || 'entity';
38
+ }
39
+
40
+ function sourceEntityRefOf(plugin, entity) {
41
+ return `plugin.${plugin}.${entity}`;
42
+ }
43
+
44
+ function structureBridgeFulfillment(entity) {
45
+ const blockers = [...(entity.blocked || []), ...((entity.pitfalls || []).flatMap((p) => p.blocked || []))];
46
+ const hit = blockers.find((b) => b.fulfillment && b.fulfillment.kind === 'structure-bridge-plugin');
47
+ return hit ? hit.fulfillment : null;
48
+ }
49
+
50
+ async function readJsonIfExists(filePath) {
51
+ try {
52
+ return JSON.parse(await fsp.readFile(filePath, 'utf8'));
53
+ } catch (error) {
54
+ if (error.code === 'ENOENT') return null;
55
+ throw error;
56
+ }
57
+ }
58
+
59
+ /** A discovery artifact that is not valid JSON is a pending reason, not a crashed mapping run. */
60
+ async function readArtifact(filePath, fileName, pendingReasons) {
61
+ try {
62
+ return await readJsonIfExists(filePath);
63
+ } catch (error) {
64
+ if (!(error instanceof SyntaxError)) throw error;
65
+ pendingReasons.push(`discovery artifact ${fileName} is not valid JSON -- re-run discovery for this table`);
66
+ return null;
67
+ }
68
+ }
69
+
70
+ /** Why an EAV read plan cannot drive extraction, or null. Mirrors the reader's own checks. */
71
+ function eavPlanIntegrityReason(plan, planFile) {
72
+ if (!plan || typeof plan !== 'object' || Array.isArray(plan)) return `read plan ${planFile} is not an object -- re-run discovery for this table`;
73
+ let problem;
74
+ try { problem = verifyEavReadPlanIntegrity(plan); } catch (error) { problem = error.message; }
75
+ if (!Array.isArray(plan.pairs)) problem = problem || 'it has no pairs array';
76
+ return problem ? `read plan ${planFile} fails its integrity check, so extraction would defer: ${problem}` : null;
77
+ }
78
+
79
+ function loadTarget(domainsDir, ref) {
80
+ try { return readEntityByRef(domainsDir, ref); } catch { return null; }
81
+ }
82
+
83
+ /**
84
+ * Classify every structure-bridge-plugin entity of the detected plugins.
85
+ *
86
+ * @param plugins [{ plugin, entities: [...] }] -- profiles or wp-plugin-detect's detected list
87
+ * @param dataDir the project's `data/` directory (discovery sidecars live in wp-discovery/)
88
+ * @param readiness optional override of blocked-data-handlers.js's fulfillmentReadiness
89
+ * @returns { decisions, blockedFieldSources }
90
+ */
91
+ async function planStructureBridgeEntities({ plugins = [], sourceEntities = null, dataDir, readiness = fulfillmentReadiness, domainsDir = DEFAULT_DOMAINS_DIR } = {}) {
92
+ if (!dataDir) throw new Error('planStructureBridgeEntities needs dataDir');
93
+ if (sourceEntities === null) {
94
+ const schema = await readJsonIfExists(path.join(path.dirname(path.resolve(dataDir)), 'source-schema.json'));
95
+ sourceEntities = Array.isArray(schema?.entities) ? schema.entities
96
+ : Object.entries(schema?.entities || {}).map(([key, row]) => ({ sourceEntityRef: key, ...row }));
97
+ }
98
+ const decisions = [];
99
+ const blockedFieldSources = [];
100
+ const boundRefs = new Set();
101
+ const bound = require('../../rp-source-wordpress/lib/plugin-entity-read-plan.js');
102
+ for (const entity of sourceEntities) {
103
+ const planRef = entity.sourceMeta?.extractionPlan;
104
+ if (!planRef && !entity.bridgeDesignated) continue;
105
+ const sourceEntityRef = entity.sourceEntityRef;
106
+ boundRefs.add(sourceEntityRef);
107
+ const pendingReasons = [];
108
+ let plan;
109
+ try { plan = bound.loadPlan({ projectDir: path.dirname(dataDir), sourceEntityRef, planRef }); }
110
+ catch (error) {
111
+ pendingReasons.push(error.message);
112
+ bound.recordPluginExtractionDeferral({ projectDir: path.dirname(dataDir), sourceEntityRef, planRef, code: error.code || 'plan-invalid', reason: error.message });
113
+ }
114
+ const candidates = entity.candidateTargetRefs || entity.sourceMeta?.candidateTargetRefs || [];
115
+ if (!candidates.length) {
116
+ blockedFieldSources.push({ sourceEntityRef, sourceEntity: entity.entity || sourceEntityRef, table: plan?.components.length === 1 ? plan.components[0].table : null, route: 'blocked-source-dependency' });
117
+ continue;
118
+ }
119
+ const targetRef = candidates[0];
120
+ const target = loadTarget(domainsDir, targetRef);
121
+ if (!target) pendingReasons.push(`candidate target ${targetRef} is not in the Wix domain knowledge`);
122
+ decisions.push({ schemaVersion: 1, sourceEntityRef, sourceEntity: sourceEntityRef,
123
+ sourcePlugin: sourceEntityRef.split('.')[1], sourceMeta: { ...entity.sourceMeta }, bridgeDesignated: true,
124
+ sourceType: entity.sourceType || null, sourcePrerequisites: entity.sourcePrerequisites || [],
125
+ resolution: 'structure-bridge-reader', fulfillment: { kind: 'structure-bridge-plugin', handlerId: 'wix-wp-plugin-v2' },
126
+ targetRef, targetDomain: targetRef.split('/')[0], targetEntity: targetRef.split('/')[1], targetClassification: target?.target?.classification || null, candidateTargetRefs: candidates,
127
+ confidence: 'proposed', status: pendingReasons.length ? 'pending' : 'migration-planned', pendingReasons,
128
+ readiness: { ready: Boolean(plan), reason: pendingReasons.join('; ') || null }, readVariant: 'entity-plan',
129
+ readArtifacts: { extractionPlan: planRef || null },
130
+ sourceExtract: { ndjson: `data/source-extract/${sourceEntityRef}.ndjson`, manifest: `data/source-extract/${sourceEntityRef}.manifest.json` },
131
+ supersedesBlockedDependencies: [], reviewGate: { ...REVIEW_GATE } });
132
+ }
133
+ for (const plugin of plugins) {
134
+ for (const entity of plugin.entities || []) {
135
+ const fulfillment = structureBridgeFulfillment(entity);
136
+ if (!fulfillment) continue;
137
+ const sourceEntityRef = sourceEntityRefOf(plugin.plugin, entity.entity);
138
+ if (boundRefs.has(sourceEntityRef)) continue;
139
+ const candidateTargetRefs = [...(entity.candidateTargetRefs || [])];
140
+ if (candidateTargetRefs.length === 0) {
141
+ blockedFieldSources.push({ sourceEntityRef, sourceEntity: entity.entity, table: fulfillment.table, route: 'blocked-source-dependency' });
142
+ continue;
143
+ }
144
+
145
+ const requestFile = `wix-wp-plugin-v2--${slugify(fulfillment.table)}.structure-request.json`;
146
+ const planFile = `wix-wp-plugin-v2--${slugify(fulfillment.table)}.eav-read-plan.json`;
147
+ const artifactReasons = [];
148
+ // eslint-disable-next-line no-await-in-loop
149
+ const [request, plan, ready] = await Promise.all([
150
+ readArtifact(path.join(dataDir, 'wp-discovery', requestFile), requestFile, artifactReasons),
151
+ readArtifact(path.join(dataDir, 'wp-discovery', planFile), planFile, artifactReasons),
152
+ readiness(fulfillment),
153
+ ]);
154
+ const targetRef = candidateTargetRefs[0];
155
+ const target = loadTarget(domainsDir, targetRef);
156
+ const pendingReasons = [...artifactReasons];
157
+ if (!ready || ready.ready !== true) pendingReasons.push(`handler not ready: ${(ready && ready.reason) || 'unknown'}`);
158
+ if (!target) pendingReasons.push(`candidate target ${targetRef} is not in the Wix domain knowledge`);
159
+ if (!request && !plan && artifactReasons.length === 0) pendingReasons.push(`discovery produced no read artifact (${requestFile}) -- the table was not sampled successfully`);
160
+ const integrity = plan ? eavPlanIntegrityReason(plan, planFile) : null;
161
+ if (integrity) pendingReasons.push(integrity);
162
+ if (plan && Array.isArray(plan.droppedIdentityColumns) && plan.droppedIdentityColumns.length > 0) {
163
+ pendingReasons.push(`read plan drops identity column(s) ${plan.droppedIdentityColumns.join(', ')}; complete identity is required -- narrow the mapping or redesign the read plan`);
164
+ }
165
+ if (plan && plan.keysTruncated) pendingReasons.push('read plan key list is truncated, so the extraction cannot be whole-table');
166
+
167
+ decisions.push({
168
+ schemaVersion: 1,
169
+ sourceEntity: entity.entity,
170
+ sourceEntityRef,
171
+ sourcePlugin: plugin.plugin,
172
+ capability: entity.capability || null,
173
+ channel: entity.channel || null,
174
+ resolution: 'structure-bridge-reader',
175
+ fulfillment: { kind: fulfillment.kind, handlerId: fulfillment.handlerId, table: fulfillment.table },
176
+ readiness: { ready: Boolean(ready && ready.ready), reason: (ready && ready.reason) || null },
177
+ targetRef,
178
+ targetDomain: targetRef.split('/')[0],
179
+ targetEntity: targetRef.split('/')[1],
180
+ targetClassification: target && target.target ? target.target.classification : null,
181
+ candidateTargetRefs,
182
+ confidence: 'proposed',
183
+ status: pendingReasons.length === 0 ? 'migration-planned' : 'pending',
184
+ pendingReasons,
185
+ readVariant: plan ? 'eav' : 'single-request',
186
+ readArtifacts: {
187
+ structureRequest: request ? `data/wp-discovery/${requestFile}` : null,
188
+ eavReadPlan: plan ? `data/wp-discovery/${planFile}` : null,
189
+ },
190
+ sourceExtract: {
191
+ ndjson: `data/source-extract/${entity.entity}.ndjson`,
192
+ manifest: `data/source-extract/${entity.entity}.manifest.json`,
193
+ },
194
+ supersedesBlockedDependencies: [],
195
+ reviewGate: { ...REVIEW_GATE },
196
+ });
197
+ }
198
+ }
199
+ return { decisions, blockedFieldSources };
200
+ }
201
+
202
+ /**
203
+ * Remove blockedSourceDependencies whose source is planned as its own entity, so the
204
+ * blocked-data builder never also requests it. Returns new target objects (inputs untouched) and
205
+ * records each removed dependency on the matching decision.
206
+ */
207
+ function partitionBlockedSourceDependencies(targetEntities = [], decisions = []) {
208
+ const byRef = new Map(decisions.map((d) => [d.sourceEntityRef, d]));
209
+ const targets = targetEntities.map((target) => {
210
+ const deps = Array.isArray(target.blockedSourceDependencies) ? target.blockedSourceDependencies : [];
211
+ const kept = [];
212
+ for (const dep of deps) {
213
+ const decision = byRef.get(dep.sourceEntityRef);
214
+ if (!decision) { kept.push(dep); continue; }
215
+ const targetEntity = target.ref || `${target.domain}/${target.entity}`;
216
+ if (!decision.supersedesBlockedDependencies.some((s) => s.targetEntity === targetEntity && s.degradedField === dep.degradedField)) {
217
+ decision.supersedesBlockedDependencies.push({ targetEntity, degradedField: dep.degradedField, pitfallCode: dep.pitfallCode });
218
+ }
219
+ }
220
+ return { ...target, blockedSourceDependencies: kept };
221
+ });
222
+ return { targetEntities: targets, decisions };
223
+ }
224
+
225
+ // Fields rp-mapper or the operator may already have set on a row, which a planning rerun keeps.
226
+ // Everything else planning emits is bridge-owned structure (target, readiness, read variant,
227
+ // artifacts, planner-owned status) and is refreshed; fields planning never emits -- field mappings,
228
+ // transformations, relationships, notes, operator edits -- are always preserved.
229
+ const PRESERVED_WHEN_SET = ['confidence'];
230
+
231
+ /** Merge a bridge decision into an existing row without erasing the mapping work on it. */
232
+ function mergeBridgeRow(existing, decision) {
233
+ if (!existing || typeof existing !== 'object' || Array.isArray(existing)) return { ...decision };
234
+ const merged = { ...existing, ...decision };
235
+ // Only the planner's own provisional states may refresh. Reviewed exclusions,
236
+ // manual routing and other mapping decisions retain their status and reason.
237
+ if (existing.status && !['pending', 'migration-planned'].includes(existing.status)) merged.status = existing.status;
238
+ if (decision.readVariant === 'entity-plan' && existing.targetRef) {
239
+ for (const key of ['targetRef', 'targetDomain', 'targetEntity', 'targetClassification']) {
240
+ if (existing[key] !== undefined) merged[key] = existing[key];
241
+ }
242
+ }
243
+ for (const key of PRESERVED_WHEN_SET) {
244
+ if (existing[key] !== undefined && existing[key] !== null) merged[key] = existing[key];
245
+ }
246
+ return merged;
247
+ }
248
+
249
+ function upsertPlanRows(plan, decisions) {
250
+ if (plan.entities && typeof plan.entities === 'object' && !Array.isArray(plan.entities)
251
+ && !PLAN_ROW_KEYS.some((k) => Array.isArray(plan[k]))) {
252
+ for (const d of decisions) plan.entities[d.sourceEntity] = mergeBridgeRow(plan.entities[d.sourceEntity], d);
253
+ return plan;
254
+ }
255
+ const key = PLAN_ROW_KEYS.find((k) => Array.isArray(plan[k])) || 'entityDecisions';
256
+ const rows = Array.isArray(plan[key]) ? plan[key] : [];
257
+ for (const d of decisions) {
258
+ const index = rows.findIndex((row) => row && (row.sourceEntityRef === d.sourceEntityRef || (row.sourceEntity || row.entityName || row.entityKey) === d.sourceEntity));
259
+ const decision = key === 'entities' ? { entityKey: index >= 0 ? rows[index].entityKey || d.sourceEntity : d.sourceEntity, ...d } : d;
260
+ if (index >= 0) rows[index] = mergeBridgeRow(rows[index], decision); else rows.push(mergeBridgeRow(null, decision));
261
+ }
262
+ plan[key] = rows;
263
+ return plan;
264
+ }
265
+
266
+ async function writeJson(filePath, value) {
267
+ await fsp.mkdir(path.dirname(filePath), { recursive: true });
268
+ const staging = `${filePath}.writing`;
269
+ await fsp.writeFile(staging, `${JSON.stringify(value, null, 2)}\n`, 'utf8');
270
+ await fsp.rename(staging, filePath);
271
+ }
272
+
273
+ /**
274
+ * Write the planned entities into the mapping artifacts. Refuses once the mapping review has
275
+ * been approved: adding an entity after the gate would skip the review it depends on.
276
+ */
277
+ async function writeStructureBridgePlanning(projectDir, decisions) {
278
+ if (!projectDir) throw new Error('writeStructureBridgePlanning needs projectDir');
279
+ const approvals = await readJsonIfExists(path.join(projectDir, 'orchestration', 'approvals.json'));
280
+ const gate = approvals && approvals.mapping && approvals.mapping.status;
281
+ if (gate === 'approved' || gate === 'provisional') {
282
+ throw new Error(`mapping review is already ${gate}; re-open the mapping review before adding structure-bridge-plugin entities`);
283
+ }
284
+ const decisionPaths = [];
285
+ for (const decision of decisions) {
286
+ const filePath = path.join(projectDir, 'mapping', 'entity-decisions', `${slugify(decision.sourceEntity)}.json`);
287
+ // eslint-disable-next-line no-await-in-loop
288
+ await writeJson(filePath, mergeBridgeRow(await readJsonIfExists(filePath), decision));
289
+ decisionPaths.push(filePath);
290
+ }
291
+ const planPath = path.join(projectDir, 'mapping', 'mapping-plan.json');
292
+ const plan = (await readJsonIfExists(planPath)) || {};
293
+ await writeJson(planPath, upsertPlanRows(plan, decisions));
294
+ return { decisionPaths, planPath };
295
+ }
296
+
297
+ module.exports = {
298
+ REVIEW_GATE,
299
+ planStructureBridgeEntities,
300
+ partitionBlockedSourceDependencies,
301
+ writeStructureBridgePlanning,
302
+ sourceEntityRefOf,
303
+ };
@@ -0,0 +1,88 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+
4
+ // Source-coverage reconcile check and decision writer.
5
+ //
6
+ // node scripts/coverage-reconcile.js check <projectDir> [--json]
7
+ // node scripts/coverage-reconcile.js decide <projectDir> --coverage-id <id> --value provided|declined [--rationale <text>]
8
+ //
9
+ // `check` joins discovery/source-coverage.json, mapping/review/mapping-gaps.json and
10
+ // orchestration/decisions.json by coverageId. Every coverage row needs exactly one valid
11
+ // disposition: a mapping-gaps.json entry carrying its coverageId, a `sourceCoverage:<coverageId>`
12
+ // decision, or (quick mode only) its declared exclusion.
13
+ //
14
+ // `decide` records a `sourceCoverage:<coverageId>` decision and removes that row's gap entries in
15
+ // the same write, so the normal recovery path never creates a disposition conflict.
16
+ //
17
+ // Exit codes: 0 every row reconciles; 2 a row has no, two, a stale or a mismatched disposition, a
18
+ // gap/decision names an unknown coverageId, or the coverage file is missing or malformed;
19
+ // 1 usage error.
20
+
21
+ const path = require('node:path');
22
+ const {
23
+ reconcileProject,
24
+ recordCoverageDecision,
25
+ SourceCoverageError,
26
+ } = require('../../../lib/source-coverage.js');
27
+
28
+ function parseArgs(argv) {
29
+ const args = { command: null, projectDir: null, coverageId: null, value: null, rationale: null, json: false };
30
+ const positional = [];
31
+ for (let i = 0; i < argv.length; i += 1) {
32
+ const arg = argv[i];
33
+ if (arg === '--coverage-id') { args.coverageId = argv[i + 1]; i += 1; }
34
+ else if (arg === '--value') { args.value = argv[i + 1]; i += 1; }
35
+ else if (arg === '--rationale') { args.rationale = argv[i + 1]; i += 1; }
36
+ else if (arg === '--json') args.json = true;
37
+ else positional.push(arg);
38
+ }
39
+ [args.command, args.projectDir] = positional;
40
+ return args;
41
+ }
42
+
43
+ function usage() {
44
+ return 'Usage: coverage-reconcile.js check <projectDir> [--json]\n'
45
+ + ' coverage-reconcile.js decide <projectDir> --coverage-id <id> --value provided|declined [--rationale <text>]\n';
46
+ }
47
+
48
+ function report(failures, json) {
49
+ if (json) {
50
+ process.stdout.write(`${JSON.stringify({ ok: failures.length === 0, failures }, null, 2)}\n`);
51
+ return;
52
+ }
53
+ if (!failures.length) {
54
+ process.stdout.write('source coverage reconciles: every row has exactly one valid disposition\n');
55
+ return;
56
+ }
57
+ for (const item of failures) process.stderr.write(`${item.code}: ${item.message}\n`);
58
+ }
59
+
60
+ async function main() {
61
+ const args = parseArgs(process.argv.slice(2));
62
+ if (!['check', 'decide'].includes(args.command) || !args.projectDir) {
63
+ process.stderr.write(usage());
64
+ return 1;
65
+ }
66
+ const projectDir = path.resolve(args.projectDir);
67
+ try {
68
+ if (args.command === 'decide') {
69
+ const result = await recordCoverageDecision(projectDir, { coverageId: args.coverageId, value: args.value, rationale: args.rationale });
70
+ process.stdout.write(`${JSON.stringify({ ok: true, ...result })}\n`);
71
+ }
72
+ const result = await reconcileProject(projectDir);
73
+ report(result.failures, args.json);
74
+ return result.ok ? 0 : 2;
75
+ } catch (error) {
76
+ if (error instanceof SourceCoverageError) {
77
+ const failures = error.failures.length ? error.failures : [{ code: 'invalid_coverage', coverageId: null, message: error.message, sources: [] }];
78
+ report(failures, args.json);
79
+ return 2;
80
+ }
81
+ throw error;
82
+ }
83
+ }
84
+
85
+ main().then((code) => { process.exitCode = code; }).catch((error) => {
86
+ process.stderr.write(`${error.stack || error.message}\n`);
87
+ process.exitCode = 1;
88
+ });
@@ -25,7 +25,8 @@ This distinction must stay explicit in mapper output.
25
25
  It owns the purchase flow and operational commerce entities that are reused across multiple vertical apps.
26
26
 
27
27
  Typical `eCommerce` entities:
28
- - carts (the unified cart + checkout entity)
28
+ - carts
29
+ - checkouts
29
30
  - orders
30
31
  - order billing / refunds
31
32
  - payment and fulfillment state tied to orders
@@ -89,19 +90,19 @@ Main page:
89
90
  - [Integrating with Wix's Business Solutions](https://dev.wix.com/docs/build-apps/get-started/overview/integrating-with-wix-s-business-solutions)
90
91
 
91
92
  Short description:
92
- - Shared commerce platform for purchase flow and order operations. It is the canonical target for carts (Cart V2, which now also covers checkout) and orders, even when catalog data originates in a vertical app such as Stores or Bookings.
93
+ - Shared commerce platform for purchase flow and order operations. It is the canonical target for carts, checkouts, and orders, even when catalog data originates in a vertical app such as Stores or Bookings.
93
94
 
94
95
  Primary entities:
95
96
 
96
97
  | Entity | What it does | Docs |
97
98
  | --- | --- | --- |
98
- | `cart` | The unified purchase-flow entity — holds line items, buyer/contact info, discounts, delivery, billing, and payment context all the way through placing the order. | [About the Cart API](https://dev.wix.com/docs/rest/business-solutions/e-commerce/purchase-flow/cart-v2/introduction) |
99
- | `current-cart` | The current cart for a visitor/member session — the same entity as `cart`, addressed by the shopper's session rather than a cart id. | [About the Cart API](https://dev.wix.com/docs/rest/business-solutions/e-commerce/purchase-flow/cart-v2/introduction) |
99
+ | `cart` | First phase of the purchase flow; holds line items, buyer references, discounts, and pricing context before checkout | [About the eCommerce Cart API](https://dev.wix.com/docs/rest/business-solutions/e-commerce/purchase-flow/cart/cart/introduction) |
100
+ | `current-cart` | Visitor/member scoped cart used in live purchase flows | [About the eCommerce Current Cart API](https://dev.wix.com/docs/sdk/backend-modules/ecom/current-cart/introduction) |
101
+ | `checkout` | Second phase of purchase flow; holds calculated prices, tax, billing, shipping, and discount state before order creation | [About the eCommerce Checkout API](https://dev.wix.com/docs/sdk/backend-modules/ecom/checkout/introduction) |
100
102
  | `order` | Final commerce record for completed or externally recorded purchases | [About the Orders API](https://dev.wix.com/docs/rest/business-solutions/e-commerce/orders/orders/introduction) |
101
103
  | `order-billing` | Payment capture, void, and refund operations for eCommerce orders | [About the Order Billing API](https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/orders/order-billing/introduction) |
102
104
 
103
105
  Mapper notes:
104
- - **A source system's separate "checkout" has no distinct Wix target.** The cart is the unified purchase-flow entity (there's no separate checkout), so map a source checkout's *input* state onto `cart`: billing → `paymentInfo.billingAddress`, shipping/delivery → `deliveryInfo`, applied coupons → cart `coupons`. **Calculated price *and* payment figures are NOT stored on the cart** — both the price totals (`summary.priceSummary`) and the payment breakdown (`summary.paymentSummary` — amount due, gift-card deductions, and the like) are computed on demand by Calculate/Estimate Cart (returned in a `CartSummary`), and the final figures live on the `order` after placement — so don't try to persist a source checkout's computed totals on the cart.
105
106
  - If the source platform exposes products and orders in one model, split catalog entities into the vertical app and transaction entities into `ecommerce`.
106
107
  - If the source has historical orders but no cart or checkout history, map directly to `order` and document missing pre-purchase state.
107
108
 
@@ -0,0 +1,40 @@
1
+ ---
2
+ name: rp-preflight
3
+ description: Validates the selected source and destination configuration before discovery.
4
+ ---
5
+
6
+ # rp-preflight
7
+
8
+ Run the deterministic preflight helper before discovery:
9
+
10
+ ```bash
11
+ node skills/wix-replatform/scripts/orchestration-preflight.js <projectDir>
12
+ ```
13
+
14
+ Use its structured result as authority. When it reports missing source configuration or
15
+ credentials, route to `rp-source-inputs`; when it reports a destination issue, route to
16
+ `rp-destination`. Do not begin discovery with a blocked preflight.
17
+
18
+ ## The recording line
19
+
20
+ The result also carries a `telemetry_journal` check reporting whether this project is
21
+ recording: `active`, `absent`, `finalized_only` or `unreadable`. Its status is always
22
+ `info`, and `info` never affects the overall verdict — a run with no telemetry journal
23
+ still passes preflight and still proceeds.
24
+
25
+ The check only looks; the script then recovers. When the reading is `absent`,
26
+ `finalized_only`, or an `unreadable` journal that replays to no run start, the preflight
27
+ script starts recording itself (a damaged journal is first moved aside to
28
+ `telemetry/events.unreadable-<timestamp>.jsonl`, every byte kept). The check keeps the
29
+ original `journal` reading and adds `recovery` — `not_needed`, `started`,
30
+ `set_aside_and_started` or `failed` — plus `recoveredRunId`/`recoveredAttempt`,
31
+ `setAsideFile` or `recoveryError`. You do not need to act on this line.
32
+
33
+ `recovery: failed` never changes the verdict or exit code, and is team-only evidence: do
34
+ not relay it to the person running the migration (the `rp-telemetry` "never mention"
35
+ rule). Call `rp-telemetry` `start` at run begin as before; preflight is the safety net.
36
+
37
+ ## Output
38
+
39
+ `orchestration/preflight.json` — the script's structured result (`status: pass | blocked |
40
+ failed` plus per-check detail). This is what a dispatched run must produce.
@@ -0,0 +1,55 @@
1
+ ---
2
+ name: rp-project-intake
3
+ description: Resolves the active migration project and the minimum intake decisions needed to route it.
4
+ ---
5
+
6
+ # rp-project-intake
7
+
8
+ Use when the router reports unresolved project, delivery mode, destination strategy, or
9
+ source mode.
10
+
11
+ Resolve project precedence: explicit user project, current project context, the sole
12
+ project under the migrations root, otherwise ask the user to choose. Never infer from a
13
+ sibling project.
14
+
15
+ Project initialization also creates `EXPECTATIONS.md` at the project root when it is
16
+ missing. Mention it as an optional place to record expectations; do not make it an intake
17
+ question or replace a user's existing file.
18
+
19
+ Resolve delivery mode before destination creation: default to `management`; choose
20
+ `website` for frontend only; choose `management_and_website` when the user wants both a
21
+ backend migration and a customer-facing storefront. Accept `both` as an input alias for
22
+ `management_and_website`, then record the canonical value in `orchestration/decisions.json`.
23
+
24
+ For a new destination site, the site type is an explicit operator choice with no
25
+ default: Headless (a website developed in code), Wix Studio, or Wix Harmony. It decides
26
+ where the imported data lives and cannot be changed later as a setting. A generic "Editor"
27
+ answer is incomplete until Studio or Harmony is named; the classic Wix Editor is not offered.
28
+ Ask it together with Harmony's business type as one combined question — store,
29
+ bookings/services, another business, or "not sure, start blank" — never as two questions.
30
+ Record it with `orchestration-state.js decide --key targetSiteType --value <type>
31
+ [--business-type store|bookings|other]`; a Harmony answer that names no business type records
32
+ `unknown`. A choice the operator already gave counts; do not ask again. `rp-destination` raises
33
+ the durable request when it is still missing. Existing-site adoption needs no type.
34
+
35
+ For delivery modes that include management, also record `managementImportMode`. Default to
36
+ `standard`; accept an explicit user choice of `quick` at intake even before the source URL is
37
+ probed. The later source-inputs/probe result validates whether a matching quick adapter exists;
38
+ never promise quick support merely from the user's choice.
39
+
40
+ Record `faceliftMode=requested` only when the user explicitly asks for a post-clone UI/UX
41
+ facelift. It is optional, defaults to off, and is not a substitute for normal clone fidelity.
42
+ In explicit user-requested 1-click mode include this choice in the initial grouped intake so the later, separate
43
+ facelift stage is authorized without another routine approval.
44
+
45
+ In normal mode ask only the current missing decision. In explicit user-requested 1-click mode
46
+ record `automationMode=one_click` with `source=user`, collect every still missing intake value
47
+ together, record the answers, and continue. Never infer one-click from an uploaded file or
48
+ execution surface. Delegate all destination,
49
+ source-file, and credential procedures to their dedicated modules.
50
+
51
+ ## Output
52
+
53
+ The resolved project, plus `orchestration/decisions.json` entries for whichever of
54
+ `deliveryMode`, `managementImportMode`, `targetSiteType` (with `targetSiteBusinessType` for
55
+ Harmony), `faceliftMode`, and `automationMode` this run resolved. This is what a dispatched run must produce.
@@ -0,0 +1,60 @@
1
+ ---
2
+ name: rp-quick-runtime
3
+ description: Shared deterministic target-limit recovery and final-report runtime every rp-quick-<platform> quick-mode adapter uses before a Wix Stores write.
4
+ ---
5
+
6
+ # rp-quick-runtime
7
+
8
+ Not invoked directly — this is a shared library (`lib/limit-recovery.js`), not a standalone
9
+ adapter. Every `rp-quick-<platform>` quick-mode adapter (`rp-quick-shopify`, `rp-quick-woocommerce`)
10
+ requires it from its own `scripts/quick-mode.js` and must use it from its first version. Platform adapters own source extraction and field semantics; this runtime owns
11
+ target-limit enforcement, recovery-ledger aggregation, and the human-readable final report — so a
12
+ Wix Stores validation limit never silently turns an otherwise-valid record into an opaque skip.
13
+
14
+ ```js
15
+ const recovery = require('../rp-quick-runtime/lib/limit-recovery.js');
16
+
17
+ const normalized = recovery.normalizeProduct({ sourceId, sku, tagIds });
18
+ // normalized.sku / normalized.tagIds are the capped/trimmed values to write;
19
+ // normalized.recoveries lists what was capped or trimmed, if anything.
20
+ await writeProduct({ ...product, sku: normalized.sku, tagIds: normalized.tagIds });
21
+ // Record written_with_loss only after the target write succeeds, and never in a dry run.
22
+ if (normalized.recoveries.length) {
23
+ if (!dryRun) await recovery.appendRecoveries(projectDir, adapterName, sourceId, normalized.recoveries);
24
+ recovery.recordRecoveredRecord(summary, normalized.recoveries);
25
+ }
26
+ // ...after the run:
27
+ await recovery.writeFinalReport(projectDir, summary, { dryRun });
28
+ ```
29
+
30
+ `normalizeProduct` applies the two verified Stores limits deterministically: caps `tagIds` at
31
+ `STORES_PRODUCT_TAGS_MAX` (first-seen source order, extras omitted) and trims `sku` to
32
+ `STORES_SKU_MAX` Unicode-safe characters with a stable source-ID-derived suffix so a trimmed SKU
33
+ stays unique. Every cap/trim is reported back in `recoveries[]`, never applied silently.
34
+
35
+ `appendRecoveries` ledgers each recovery to `execution/quick-limit-recoveries.ndjson` under the
36
+ adapter's own name, tagged `outcome: written_with_loss` — the durable record of what was
37
+ preserved versus lost, per source record. Call it only after the target write succeeds.
38
+
39
+ `recordRecoveredRecord` increments `summary.recovered` once for the written source record and
40
+ increments `summary.recoveryCounts` once for each recovery event on that record.
41
+
42
+ `writeFinalReport` renders `execution/quick-mode-final-report.md`: a count of records imported
43
+ with deterministic recovery plus a per-recovery-code breakdown, so the operator gets a compact,
44
+ actionable account instead of a bare skip count. It adds a "Collections not migrated" section
45
+ from `summary.excludedCollections`, a "Products to check" section from
46
+ `summary.writtenUnverified.product`, and an inventory pointer when `summary.inventory` is set.
47
+ With `{ dryRun: true }` it writes `execution/dry-run-final-report.md` instead and sets
48
+ `summary.finalReport` to that path, so a dry run can never overwrite or stand in for the live
49
+ report. A dry run must write no live artifact at all (report, ledger, audit log, crosswalk or
50
+ marker); adapters skip those writes when `dryRun` is true. `writeFileAtomic` (temp file, then
51
+ rename) is the shared way to publish a report that a crash must not leave half-written.
52
+
53
+ `lib/import-progress.js` holds three more shared pieces. Each adapter's `import` first calls
54
+ `assertQuickImportAdapter`, which fails unless the plan and extract manifest both carry exactly
55
+ the loaded contract's `{ id, version, fingerprint }`. It then calls
56
+ `writeQuickImportStartedMarker(projectDir, plan.adapter)` before its first destination write.
57
+ It is skipped on a dry run and never rewritten on resume; concurrent first attempts publish
58
+ one marker (temp file, then a no-replace hard link). It writes
59
+ `state/quick-import-started.json`, which the router reads as evidence of an interrupted import.
60
+ `validateQuickExecutionManifest` is the router's check of the manifest that `plan` writes.