@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
@@ -10,13 +10,15 @@
10
10
  // They differ on a MIGRATION PREVIEW: a project whose config points at a fresh site created only to
11
11
  // host the deployment, while `.env.local` carries the credentials of the site being migrated (the
12
12
  // parent) and says so. Then every admin, discovery and seed call targets the parent, the SDK client
13
- // is the parent's, and only the release goes to the child. Completing the migration is a CLI step
14
- // that does not exist yet; this module only reads the state.
13
+ // is the parent's, and only the release goes to the child. Completing the migration follows
14
+ // guides/migration.md; this module only reads the state.
15
15
  //
16
16
  // `env pull` runs here when `.env.local` is missing (or --refresh): it is the source of the content
17
17
  // identity, and the Astro build refuses to run without it. Non-interactive (CI=1); a failure is
18
18
  // reported in `pullError` and the config's ids stand in, so a caller can still work offline.
19
+ import { spawnSync } from "node:child_process";
19
20
  import { existsSync, readFileSync } from "node:fs";
21
+ import { homedir } from "node:os";
20
22
  import { join } from "node:path";
21
23
  import { failure, npmSync } from "./proc.mjs";
22
24
  const PINS = JSON.parse(readFileSync(new URL("./pins.json", import.meta.url), "utf8"));
@@ -59,6 +61,55 @@ export function readWixConfig(cwd) {
59
61
  try { return JSON.parse(readFileSync(file, "utf8")); } catch { return null; }
60
62
  }
61
63
 
64
+ /**
65
+ * Where a release goes from this machine. `cli`: the Wix CLI's session file is here
66
+ * (`~/.wix/auth/account.json`, what `wix login` writes), so `wix release` and `wix env pull` work.
67
+ * `plugin`: no session; the Wix MCP's tools carry the user's login, the site is provisioned through
68
+ * them, and the Astro build is released by its upload tool.
69
+ */
70
+ export function publisher() {
71
+ return existsSync(join(homedir(), ".wix", "auth", "account.json")) ? "cli" : "plugin";
72
+ }
73
+
74
+ /**
75
+ * Whether the kit runs here: `npm ping` against the configured registry, thirty seconds at most. A chat
76
+ * host's sandbox answers through a proxy that can take six seconds to the first byte (measured on one
77
+ * 2026-10-24), so a short limit reads an open sandbox as closed.
78
+ */
79
+ export function npmReachable() {
80
+ const r = npmSync("npm", ["ping", "--no-fund", "--no-audit"], { encoding: "utf8", timeout: 30_000, env: { ...process.env, CI: "1" } });
81
+ return { ok: r.status === 0, detail: r.status === 0 ? null : failure(r, "npm ping failed").trim().slice(-200) };
82
+ }
83
+
84
+ /**
85
+ * Whether a build can travel from this shell: the upload tool's presigned URLs are on Amazon S3, and a
86
+ * sandbox limited to a few hosts gets a proxy's answer there instead of S3's (`Server: AmazonS3`). Measured
87
+ * with one HEAD request, twenty-five seconds at most (a sandbox proxy can take ten seconds to answer, and a
88
+ * short limit reads an open sandbox as closed); the client's attachment carrier is not measurable here.
89
+ */
90
+ export async function s3Reachable() {
91
+ // curl first: it is what the shell's upload would use and it honours the shell's proxy settings.
92
+ // S3 answered when its own headers are there: `x-amz-request-id` always, `Server: AmazonS3` unless a
93
+ // proxy in front rewrote the Server header (one chat host's proxy answers `server: envoy` and keeps the
94
+ // x-amz headers). A proxy that refuses the host answers with neither.
95
+ const fromS3 = (headers) => /^x-amz-request-id:/im.test(headers) || /^server:\s*amazons3/im.test(headers);
96
+ const c = spawnSync("curl", ["-sI", "-m", "25", "https://s3.amazonaws.com"], { encoding: "utf8" });
97
+ if (c.status === 0 && c.stdout) {
98
+ const server = (c.stdout.match(/^server:\s*(.+)$/im) ?? [])[1]?.trim() ?? "";
99
+ const amz = /^x-amz-request-id:/im.test(c.stdout);
100
+ return { ok: fromS3(c.stdout), detail: `${c.stdout.split("\n")[0].trim()}${server ? `, server: ${server}` : ""}${amz ? ", x-amz-request-id present" : ", no S3 headers"}` };
101
+ }
102
+ if (c.status !== null && c.error?.code !== "ENOENT") return { ok: false, detail: `curl exited ${c.status}` };
103
+ try {
104
+ const r = await fetch("https://s3.amazonaws.com", { method: "HEAD", redirect: "manual", signal: AbortSignal.timeout(25_000) });
105
+ const server = r.headers.get("server") ?? "";
106
+ const amz = r.headers.has("x-amz-request-id");
107
+ return { ok: amz || /amazons3/i.test(server), detail: `status ${r.status}${server ? `, server: ${server}` : ""}${amz ? ", x-amz-request-id present" : ", no S3 headers"}` };
108
+ } catch (e) {
109
+ return { ok: false, detail: String(e?.cause?.code ?? e?.message ?? e).slice(0, 120) };
110
+ }
111
+ }
112
+
62
113
  const ENV_PULL = ["-y", WIX_CLI, "env", "pull"];
63
114
  const runPull = (dir) => npmSync("npx", ENV_PULL, { cwd: dir, env: { ...process.env, CI: "1" }, encoding: "utf8", timeout: 180_000 });
64
115
 
@@ -165,7 +216,7 @@ export function folderShape(cwd = process.cwd(), { migrationActive = false } = {
165
216
  migration: "setup.mjs (MIGRATE): the shipped code into the starter the download carries (or the composed template around a bare config); the site being migrated owns its content — guides/migration.md",
166
217
  "static-in-astro": "a dropped site on its Dev Machine: the pages are plain files in public/, served as they are. deploy.mjs <vertical…> --stack static --out public puts the REST layer in public/js/wix/; wire the pages in place with <script type=\"module\">: do the least that makes them work: connect each control the pages show and add only what a control can't work without (more only when the brief asks), and no Astro pages. Read the site (read-site.mjs); run the vertical's seed module with a plan only for content the brief supplies or describes. Release with npx @wix/cli@latest build && npx @wix/cli@latest release; the URL stays",
167
218
  "blank-starter": "attach.mjs --business-name <brand> --vertical <v…> [--plan plan.json] (the site comes from wix.config.json): the CLI's blank starter with no work of its own, as a Dev Machine or a bare wix create leaves it. attach deploys the vertical onto it with its composed lock and starts the install and the seed detached: build the brand layer while they run, then sync on .install-exit and .seed-exit before release (SKILL.md step 3). Read the site first (read-site.mjs) when it may already hold content",
168
- "wix-project": "iterate: never scaffold, init or reseed. deploy.mjs <vertical…> --stack <stack> adds a solution, then one install: node <SKILL_ROOT>/install/install.mjs (it skips when node_modules already satisfies the lock); file edits for a change; release. Read the site (read-site.mjs) before any seed module runs",
219
+ "wix-project": "iterate: never scaffold, init or reseed. deploy.mjs <vertical…> --stack <stack> adds a solution, then one install: node <SKILL_ROOT>/install/install.mjs (it skips when node_modules already satisfies the lock); file edits for a change; release. Read the site (read-site.mjs) before any seed module runs. On the plugin route, a project downloaded from the site's Code Store repository has no .env.local: setup.mjs --vertical <v> --site <siteId> --app <appId> writes it (and installs when node_modules is missing); the release is UploadHeadlessWebsiteFiles with the downloaded revision as expectedHeadRevisionId (SKILL.md step 5)",
169
220
  "published-static": "setup.mjs --vertical <v>: the config's site, no init; site/ becomes the upload and the REST layer lands in site/js/wix/; move the pages, styles and assets into site/. Nothing is seeded: read the site, then run the vertical's seed module with a plan when the brief gives content; release keeps the URL",
170
221
  };
171
222
  let shape;
@@ -193,7 +244,8 @@ export function siteContext({ cwd = process.cwd(), pull = "auto" } = {}) {
193
244
  const deploy = { siteId: config.siteId ?? config.projectId ?? null, appId: config.appId ?? null };
194
245
  const envFile = join(cwd, ".env.local");
195
246
  let pulled = false, pullError;
196
- if (deploy.siteId && (pull === true || (pull === "auto" && !existsSync(envFile)))) {
247
+ // Only a machine with a CLI session can pull; on the plugin route setup.mjs wrote the env file.
248
+ if (deploy.siteId && publisher() === "cli" && (pull === true || (pull === "auto" && !existsSync(envFile)))) {
197
249
  const r = pullEnv(cwd);
198
250
  if (r.ok) pulled = r.via;
199
251
  else pullError = r.error;
@@ -214,12 +266,15 @@ export function siteContext({ cwd = process.cwd(), pull = "auto" } = {}) {
214
266
  if (active && migration.parentSiteId === deploy.siteId) {
215
267
  warnings.push("the migration's parent site is the deploy site itself — nothing is being migrated");
216
268
  }
217
- return { folder: folderShape(cwd, { migrationActive: active }), deploy, content, migration, env: { file: envFile, present: Object.keys(env).length > 0, pulled }, ...(pullError ? { pullError } : {}), warnings };
269
+ return { folder: folderShape(cwd, { migrationActive: active }), publisher: publisher(), npm: npmReachable(), deploy, content, migration, env: { file: envFile, present: Object.keys(env).length > 0, pulled }, ...(pullError ? { pullError } : {}), warnings };
218
270
  }
219
271
 
220
272
  // ---- CLI ----------------------------------------------------------------------------------------
221
273
  if (process.argv[1] && /context\.mjs$/.test(process.argv[1])) {
222
274
  const argv = process.argv.slice(2);
223
275
  const pull = argv.includes("--no-pull") ? false : argv.includes("--refresh") ? true : "auto";
224
- console.log(JSON.stringify(siteContext({ pull }), null, 2));
276
+ // The carrier is measured only when printing: the scripts that read siteContext() do not decide the route.
277
+ const ctx = siteContext({ pull });
278
+ ctx.carrier = { s3: await s3Reachable() };
279
+ console.log(JSON.stringify(ctx, null, 2));
225
280
  }
@@ -3,6 +3,6 @@
3
3
  "@wix/create-new": "0.0.124",
4
4
  "typescript": "5.8.3",
5
5
  "templates": {
6
- "ref": "v1.33.1"
6
+ "ref": "v1.35.0"
7
7
  }
8
8
  }
@@ -5,10 +5,14 @@
5
5
  //
6
6
  // node <SKILL_ROOT>/install/setup.mjs --vertical <storefront|bookings|…>[,<vertical>…] \
7
7
  // [--plan plan.json] [--business-name "<Brand>"] [--stack astro|react|lib|static] \
8
- // [--subfolder [--folder-name <npm-safe-name>]]
8
+ // [--site <metaSiteId> --app <appId>] [--subfolder [--folder-name <npm-safe-name>]]
9
9
  //
10
10
  // empty (or loose files: a CSV, a brief) → CREATE: `wix create` with the vertical's composed template
11
11
  // (templates/<vertical>/project), placed in the current directory (`--business-name` required).
12
+ // With --site and --app (a site provisioned through the Wix MCP: the metaSiteId and appId the
13
+ // provision call returned) the CLI is not run: the composed template is copied in, wix.config.json
14
+ // and .env.local are written for that site, and the release is the Wix MCP's upload tool with the
15
+ // Astro build (the plugin route). The seed runs through ExecuteWixAPI there, not here.
12
16
  // a frontend, no wix.config.json (a package.json, or an index.html at the root) → ADOPT: `init` in
13
17
  // place gives the project a new, empty site, then deploy. `--stack` required.
14
18
  // CREATE and ADOPT are the two cases that seed: the run made the site, it is empty by construction,
@@ -20,6 +24,9 @@
20
24
  // drop flow and downloaded): the config's site, no init; site/ becomes the upload, the REST layer
21
25
  // deploys there, the pages move in (the agent's step). Nothing seeded.
22
26
  // a config and a frontend (package.json, or index.html in the output folder) → refuses: iterate.
27
+ // With --site and --app matching the config and no .env.local (a project downloaded from the
28
+ // site's Code Store repository): writes .env.local as the plugin create does, installs when
29
+ // node_modules is missing, and nothing else: no scaffold, no deploy, no seed.
23
30
  // a config and nothing else → refuses: attach.mjs's case.
24
31
  //
25
32
  // Setup seeds only a site it created in this run. A site that existed before the run is never seeded
@@ -31,7 +38,7 @@
31
38
  // steps — the dependency install and the seed — running detached in the background (logs and
32
39
  // completion markers in the final event), so the caller can build the brand layer while they finish.
33
40
  import { spawnSync } from "node:child_process";
34
- import { cpSync, existsSync, readFileSync, readdirSync, renameSync, rmSync, writeFileSync } from "node:fs";
41
+ import { cpSync, existsSync, mkdirSync, readFileSync, readdirSync, renameSync, rmSync, writeFileSync } from "node:fs";
35
42
  import { basename, dirname, join, resolve } from "node:path";
36
43
  import { fileURLToPath } from "node:url";
37
44
  import { AGENT_CONFIG_FILES, writeAgentsMd } from "./agents-md.mjs";
@@ -65,13 +72,18 @@ const planPath = flag("plan");
65
72
  const verticals = (flag("vertical") ?? "").split(",").map((v) => v.trim()).filter(Boolean);
66
73
  const vertical = verticals[0] ?? null;
67
74
  const stackFlag = flag("stack");
75
+ // The plugin route: a site already provisioned through the Wix MCP, named by the two ids the provision
76
+ // call returned. No Wix CLI is run anywhere in this call; the release is the MCP's upload tool.
77
+ const siteFlag = flag("site");
78
+ const appFlag = flag("app");
79
+ const publisher = siteFlag ? "plugin" : "cli";
68
80
  // Opt-in: keep a CREATE's project in a subfolder instead of the current directory.
69
81
  const subfolder = argv.includes("--subfolder");
70
82
  // The shipped code: the repository's templates/ (a checkout, the cache, or fetched now, in a second).
71
83
  let TEMPLATES;
72
84
  try { TEMPLATES = templatesDir(); } catch (e) { fail("templates", e.message); }
73
85
  const knownVerticals = listVerticals(TEMPLATES);
74
- const usage = `usage: setup.mjs --vertical <${knownVerticals.join("|")}>[,<vertical>…] [--plan plan.json] [--business-name "<Brand>"] [--stack astro|react|lib|static] [--subfolder]`;
86
+ const usage = `usage: setup.mjs --vertical <${knownVerticals.join("|")}>[,<vertical>…] [--plan plan.json] [--business-name "<Brand>"] [--stack astro|react|lib|static] [--site <metaSiteId> --app <appId>] [--subfolder]`;
75
87
  // --vertical is REQUIRED: a defaulted vertical deploys the wrong code and runs the wrong seed.
76
88
  if (!vertical) fail("args", usage);
77
89
  for (const v of verticals) {
@@ -81,6 +93,43 @@ if (stackFlag && !["astro", "react", "lib", "static"].includes(stackFlag)) {
81
93
  fail("args", `unknown --stack "${stackFlag}" — astro, react, lib or static`);
82
94
  }
83
95
  if (planPath && !existsSync(planPath)) fail("args", `plan file not found: ${planPath}`);
96
+ if (!!siteFlag !== !!appFlag) fail("args", "--site and --app go together: the metaSiteId and the appId the provision call returned");
97
+ const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
98
+ if (siteFlag && !(UUID.test(siteFlag) && UUID.test(appFlag))) fail("args", "--site and --app are UUIDs (the provision call's metaSiteId and appId)");
99
+ if (siteFlag && stackFlag && stackFlag !== "astro") fail("args", `--site takes the astro stack: the composed template is copied in and released as a build; --stack ${stackFlag} does not apply`);
100
+
101
+ // The env the plugin route's build reads: the public client id, the cloud provider the hosting runs
102
+ // the server build on, and stand-ins for the three values the hosting runtime injects at release (the
103
+ // build only checks they exist).
104
+ const writePluginEnv = (dir) => writeFileSync(join(dir, ".env.local"), [
105
+ "# Read by the build. WIX_CLIENT_ID is the site's public OAuth client id (the provision call's appId).",
106
+ "# The hosting runtime injects the real values of the last three at release; the build only checks they exist.",
107
+ `WIX_CLIENT_ID="${appFlag}"`,
108
+ 'WIX_CLOUD_PROVIDER="KUBERNETES"',
109
+ 'WIX_CLIENT_INSTANCE_ID="set-at-release"',
110
+ 'WIX_CLIENT_PUBLIC_KEY="set-at-release"',
111
+ 'WIX_CLIENT_SECRET="set-at-release"',
112
+ "",
113
+ ].join("\n"));
114
+
115
+ // The plugin route's install: in the foreground, since it runs where a process may not outlive the
116
+ // tool call that started it; the event says it is done.
117
+ const foregroundInstall = (dir) => {
118
+ const installLog = join(dir, "npm-install.log");
119
+ emit("installing", { log: installLog, foreground: true });
120
+ const r = spawnSync("node", [join(SKILL_ROOT, "install", "install.mjs")], { cwd: dir, encoding: "utf8", timeout: 280_000 });
121
+ writeFileSync(installLog, `${r.stdout ?? ""}${r.stderr ?? ""}`);
122
+ let result = {};
123
+ try { result = JSON.parse((r.stdout ?? "").trim().split("\n").pop()); } catch { /* the log has it */ }
124
+ if (r.status !== 0) fail("install", failure(r, `install exited ${r.status}; see ${installLog}`).slice(-600));
125
+ const marker = join(dir, ".install-exit");
126
+ emit("install_done", { ...result, exit: existsSync(marker) ? readFileSync(marker, "utf8").trim() : String(r.status), log: installLog });
127
+ };
128
+
129
+ // The plugin route's release of an Astro project: the build, the two zips, the upload tool.
130
+ const ZIP_PY = (name, skip) => `python3 -c "import zipfile,pathlib as P; X=(${skip.map((s) => `'${s}'`).join(",")}); z=zipfile.ZipFile('${name}','w',zipfile.ZIP_DEFLATED); [z.write(p) for p in P.Path('.').rglob('*') if p.is_file() and p.parts[0] not in X and not p.name.startswith('.env') and str(p) not in ('project.zip','build.zip','source.zip')]; z.close()"`;
131
+ const pluginRelease = (head) =>
132
+ `npx astro build from the project root (the Wix hosting adapter writes .wix/build-metadata.json and dist/), then release with the Wix MCP's UploadHeadlessWebsiteFiles, siteId ${siteFlag}, in one of two forms. Attached: one zip of the project without node_modules (zip -qr project.zip . -x 'node_modules/*' '.astro/*' '.agents/*' '.env*'; without a zip binary: ${ZIP_PY("project.zip", ["node_modules", ".astro", ".agents"])}) passed as attachments. From a shell that reaches the internet (the upload URLs are on Amazon S3: curl -sI https://s3.amazonaws.com shows Server: AmazonS3 where they work; a sandbox limited to a few hosts gets a proxy's refusal without that header and cannot release this way): the build zip (zip -qr build.zip dist .wix) and the source zip (zip -qr source.zip . -x 'node_modules/*' 'dist/*' '.wix/*' '.astro/*' '.agents/*' '.env*' 'build.zip'; without a zip binary: ${ZIP_PY("source.zip", ["node_modules", "dist", ".wix", ".astro", ".agents"])}), then { siteId, prepare: true, size } with size from wc -c < build.zip, the curl -X PUT commands its reply gives, run as given, and the second call it names, { siteId, uploadKey, sourceUploadId, expectedHeadRevisionId }. ${head} The tool releases the build to the site's Wix hosting, stores the source in the site's Code Store repository and returns the live URL; EXPECTED_HEAD_REQUIRED or a 409 CODE_STORE_HEAD_CHANGED released nothing (SKILL.md step 5). Not wix build, not wix release: this run has no Wix CLI session`;
84
133
 
85
134
  // ---- 0 · read the folder --------------------------------------------------------------------------
86
135
  const cwd = process.cwd();
@@ -89,8 +138,25 @@ const pkg = has("package.json") ? JSON.parse(readFileSync(join(cwd, "package.jso
89
138
  let ctx = null;
90
139
  let shape = folderShape(cwd).shape;
91
140
  if (has("wix.config.json")) {
92
- ctx = siteContext({ cwd }); // pulls .env.local when missing — where a migration is declared
141
+ ctx = siteContext({ cwd, ...(siteFlag ? { pull: false } : {}) }); // pulls .env.local when missing — where a migration is declared
93
142
  shape = ctx.folder.shape;
143
+ // A project downloaded from the site's Code Store repository: the config and the frontend came with
144
+ // it, the env did not. Only the env is written, and the install runs when node_modules is missing.
145
+ if (siteFlag && pkg && shape !== "migration" && ctx.deploy.siteId === siteFlag && !has(".env.local")) {
146
+ if (ctx.deploy.appId && ctx.deploy.appId !== appFlag) fail("args", `--app ${appFlag} differs from wix.config.json appId ${ctx.deploy.appId}`);
147
+ emit("folder", { mode: "iterate", shape, stack: "astro", publisher, project: pkg.name ?? basename(cwd), deploySiteId: ctx.deploy.siteId, warnings: ctx.warnings });
148
+ writePluginEnv(cwd);
149
+ ignoreEnvLocal(cwd);
150
+ emit("env_written", { file: join(cwd, ".env.local"), clientId: appFlag });
151
+ if (!has("node_modules")) foregroundInstall(cwd);
152
+ else emit("install_skipped", { reason: "node_modules is there" });
153
+ emit("ready_for_brand_layer", {
154
+ mode: "iterate", shape, stack: "astro", publisher, verticals, projectDir: cwd, siteId: siteFlag,
155
+ dashboardUrl: `https://manage.wix.com/dashboard/${siteFlag}`, install: null, seed: null,
156
+ next: `a project downloaded from the site's Code Store repository: nothing scaffolded, deployed or seeded. Edit the files the change needs (deploy.mjs <vertical…> --stack astro adds a solution, then node ${join(SKILL_ROOT, "install", "install.mjs")}); then ${pluginRelease("expectedHeadRevisionId is the revision.id the download returned, in either form.")}`,
157
+ });
158
+ process.exit(0);
159
+ }
94
160
  if (shape !== "migration" && shape !== "published-static") {
95
161
  fail("place", `this folder is already a Wix project (wix.config.json), shape "${shape}": nothing to set up. ${ctx.folder.next} (SKILL.md step 3)` + (ctx.pullError ? ` — note: env pull failed here (${ctx.pullError.slice(0, 120)})` : ""));
96
162
  }
@@ -99,6 +165,7 @@ if (has("wix.config.json")) {
99
165
  }
100
166
  }
101
167
  const mode = { migration: "migrate", "published-static": "published-static", project: "adopt", empty: "create" }[shape];
168
+ if (siteFlag && mode !== "create") fail("args", `--site applies to an empty folder (shape "empty"); this folder is "${shape}": ${folderShape(cwd).next}`);
102
169
  const migrating = mode === "migrate";
103
170
  const publishedStatic = mode === "published-static";
104
171
  const hasProject = shape === "project";
@@ -106,7 +173,7 @@ if (mode === "adopt" && !stackFlag) {
106
173
  fail("args", "adopting a project on disk needs --stack astro|react|lib|static — the stack you resolved in SKILL.md step 1 for this project");
107
174
  }
108
175
  const stack = publishedStatic ? "static" : (stackFlag ?? "astro");
109
- emit("folder", { mode, shape, stack, project: hasProject ? (pkg?.name ?? basename(cwd)) : null, ...(ctx ? { deploySiteId: ctx.deploy.siteId, warnings: ctx.warnings } : {}), ...(migrating ? { migration: ctx.migration } : {}) });
176
+ emit("folder", { mode, shape, stack, publisher, project: hasProject ? (pkg?.name ?? basename(cwd)) : null, ...(ctx ? { deploySiteId: ctx.deploy.siteId, warnings: ctx.warnings } : {}), ...(migrating ? { migration: ctx.migration } : {}) });
110
177
 
111
178
  let projectDir = cwd;
112
179
  let folderName = null;
@@ -123,6 +190,23 @@ if (mode === "create") {
123
190
  projectDir = resolve(cwd, folderName);
124
191
  if (existsSync(join(projectDir, "wix.config.json"))) {
125
192
  emit("scaffold_skipped", { reason: "project already exists", folder: folderName });
193
+ } else if (siteFlag) {
194
+ // ---- 1 · a site provisioned through the Wix MCP: the template copied in, the config and the env
195
+ // written here; no CLI. The env is what the build reads: the public client id, the cloud provider
196
+ // the hosting runs the server build on, and stand-ins for the three values the hosting runtime
197
+ // injects at release (the build only checks they exist).
198
+ const template = join(templatesDir({ need: `${vertical}/project` }), vertical, "project");
199
+ emit("scaffolding", { folder: folderName, template, siteId: siteFlag, from: "the Wix MCP's provision call" });
200
+ mkdirSync(projectDir, { recursive: true });
201
+ cpSync(template, projectDir, { recursive: true, force: false, errorOnExist: false });
202
+ const pkgPath = join(projectDir, "package.json");
203
+ if (existsSync(pkgPath)) {
204
+ const scaffolded = JSON.parse(readFileSync(pkgPath, "utf8"));
205
+ scaffolded.name = folderName || "site";
206
+ writeFileSync(pkgPath, JSON.stringify(scaffolded, null, 2) + "\n");
207
+ }
208
+ writeFileSync(join(projectDir, "wix.config.json"), JSON.stringify({ siteId: siteFlag, appId: appFlag }, null, 2) + "\n");
209
+ writePluginEnv(projectDir);
126
210
  } else {
127
211
  // The composed template: the CLI copies it in place of its blank one, creates the site and
128
212
  // writes wix.config.json; the vertical's code and its lockfile arrive with it. Any other
@@ -257,9 +341,13 @@ emit("agent_configs", writeAgentsMd(projectDir, { skill: basename(SKILL_ROOT), s
257
341
  let install = null;
258
342
  if (stack !== "static" && existsSync(join(projectDir, "package.json"))) {
259
343
  const installLog = join(projectDir, "npm-install.log");
260
- startBackground("install", [], { cwd: projectDir, log: installLog });
261
- install = { log: installLog, doneMarker: ".install-exit", success: "file contains 0" };
262
- emit("install_started", install);
344
+ if (publisher === "plugin") {
345
+ foregroundInstall(projectDir);
346
+ } else {
347
+ startBackground("install", [], { cwd: projectDir, log: installLog });
348
+ install = { log: installLog, doneMarker: ".install-exit", success: "file contains 0" };
349
+ emit("install_started", install);
350
+ }
263
351
  }
264
352
 
265
353
  // ---- 4 · start the seed, detached (a site this run created, with a plan) ---------------------------
@@ -271,10 +359,12 @@ if (stack !== "static" && existsSync(join(projectDir, "package.json"))) {
271
359
  // idempotent by name.
272
360
  const madeTheSite = mode === "create" || mode === "adopt";
273
361
  let seed = null;
274
- if (planPath && !madeTheSite) {
362
+ if (planPath && publisher === "plugin") {
363
+ emit("seed_skipped", { reason: `the seed modules run with the Wix CLI's session, and this run has none: on the plugin route the plan is seeded through ExecuteWixAPI, as ${join(SKILL_ROOT, "guides", "api-run.md")} section 4 describes, with the vertical's SEED.md (${join(TEMPLATES, vertical, "seed", "SEED.md")}) as the contract` });
364
+ } else if (planPath && !madeTheSite) {
275
365
  emit("seed_skipped", { reason: `${mode}: the site existed before this run; setup seeds only a site it created. Read what the site holds (${join(TEMPLATES, vertical, "seed", "read-site.mjs")}), then run templates/${vertical}/seed/seed-*.mjs ${planPath} yourself when the brief supplies or describes content` });
276
366
  }
277
- if (planPath && madeTheSite) {
367
+ if (planPath && madeTheSite && publisher === "cli") {
278
368
  const seedDir = join(TEMPLATES, vertical, "seed");
279
369
  const seedName = existsSync(seedDir)
280
370
  ? readdirSync(seedDir).find((f) => f.startsWith("seed-") && f.endsWith(".mjs"))
@@ -288,7 +378,9 @@ if (planPath && madeTheSite) {
288
378
  }
289
379
 
290
380
  // ---- done ----------------------------------------------------------------------------------------
291
- const release = {
381
+ const release = publisher === "plugin" ? {
382
+ astro: pluginRelease("expectedHeadRevisionId is the headRevisionId the prepare returned; an attached release of this new site's first build leaves it out (the repository has nothing in it yet)."),
383
+ }[stack] : {
292
384
  astro: `npx ${WIX_CLI} build, then npx ${WIX_CLI} release`,
293
385
  react: `the project's own build, then npx ${WIX_CLI} release of the build folder named in wix.config.json (what Wix hosting serves and how routes must be shaped: SKILL.md step 1)`,
294
386
  lib: `the project's own build, then npx ${WIX_CLI} release of the build folder named in wix.config.json (SKILL.md step 1)`,
@@ -301,6 +393,7 @@ emit("ready_for_brand_layer", {
301
393
  mode,
302
394
  shape,
303
395
  stack,
396
+ publisher,
304
397
  verticals,
305
398
  projectDir,
306
399
  siteId: migrating ? ctx.content.siteId : siteId,
@@ -314,6 +407,8 @@ emit("ready_for_brand_layer", {
314
407
  (publishedStatic ? "a published static site: its pages are live on this site already and keep their URL; move index.html, the other pages, styles and assets into site/ (the root keeps the config, the plan, the seed output and the skills) and wire the solution into the page that needs it; " : "") +
315
408
  (mode === "migrate"
316
409
  ? "a migration preview: the site being migrated owns its content (read it with the vertical's read-site.mjs when the brief allows probing; never seed it); theme + write the home page; "
410
+ : madeTheSite && publisher === "plugin"
411
+ ? `the site is new and empty: seed it through ExecuteWixAPI (guides/api-run.md section 4, the plan per step 2 and the vertical's SEED.md as the contract${planPath ? `, the plan ${planPath}` : ", a plan drafted from the brief"}), and name the placeholder content in the closing message; theme + write the home page; `
317
412
  : madeTheSite
318
413
  ? (planPath ? "theme + write the home page; " : "the site is new and empty and no plan was given, so nothing was seeded yet: seed it now (a plan per step 2 — the brief's content, or one drafted per the vertical's SEED.md — then the vertical's seed module), and name the placeholder content in the closing message; theme + write the home page; ")
319
414
  : `nothing was seeded (setup seeds only a site it created): read what the site holds with ${join(TEMPLATES, vertical, "seed", "read-site.mjs")}, then run ${join(TEMPLATES, vertical, "seed")}/seed-*.mjs <plan> when the brief supplies or describes content; theme + write the home page; `) +
@@ -322,5 +417,5 @@ emit("ready_for_brand_layer", {
322
417
  : "") +
323
418
  (install || seed ? "then wait for the done markers" + (seed ? ", verify .seed-exit is 0 (else read seed.log and re-run the seed module)" : "") + "; " : "") +
324
419
  `then ${release}` +
325
- (mode === "migrate" ? "; the release is the PREVIEW on the deploy site — close with its URL and the parent's dashboard, say the original site is unchanged and that completing the migration is the user's next step in the Wix CLI once they approve" : ""),
420
+ (mode === "migrate" ? "; the release is the PREVIEW on the deploy site — close with its URL and the parent's dashboard, say the original site is unchanged and offer to complete the migration once they approve — guides/migration.md" : ""),
326
421
  });
@@ -0,0 +1,8 @@
1
+ {
2
+ "bundle": "wix-headless-replatform",
3
+ "version": "2.2.3",
4
+ "sourceRepo": "wix-private/replatform",
5
+ "sourcePath": "skills/wix-headless-replatform/",
6
+ "sourceCommit": "6bde03f",
7
+ "publishedAt": "2026-10-22T22:14:10Z"
8
+ }
@@ -0,0 +1,116 @@
1
+ ---
2
+ name: wix-headless-replatform
3
+ description: Clone, rebuild, migrate, or reverse-engineer a public website home page into a Wix Headless frontend while preserving source identity, SEO, interactions, and visual fidelity.
4
+ ---
5
+
6
+ # wix-headless-replatform
7
+
8
+ ## Role
9
+
10
+ Drive a close-enough, visually polished Wix Headless frontend from a source website.
11
+ The implemented scope is one resolved home page and the default output is
12
+ `projects/<project-name>`, derived from the hostname. Use Wix CLI Headless, Astro,
13
+ TypeScript, and Tailwind; use React only for complex interactive islands.
14
+ Reject additional-page and explicit-URL scope with an actionable explanation until a later
15
+ approved workflow defines page resolution and shared evidence across routes.
16
+
17
+ This entry skill is the supervisor. It decides the next workflow stage and loads only the
18
+ resource for that stage. Do not preload every resource or reference: stage-specific rules
19
+ are deliberately demand-loaded.
20
+
21
+ Two modes exist:
22
+
23
+ - **Standalone clone:** source URL to a new, real Wix CLI Headless project.
24
+ - **Migration phase:** `--handoff <migration-project>/website/handoff.json` continues on
25
+ the migration-owned destination. Never omit `--handoff` for an integrated migration:
26
+ the standalone command creates a second site.
27
+
28
+ ## Non-negotiable invariants
29
+
30
+ - Treat the requested public branded homepage as authorized; apply the boundaries in
31
+ `references/safety.md` without asking a separate routine authorization question.
32
+ - Browser-backed extraction is mandatory. Do not substitute HTML-only extraction.
33
+ - Resolve the home page before capture. Build only from a validated frozen extraction
34
+ manifest; raw observations are never builder inputs.
35
+ - A standalone output must be a successful Wix CLI scaffold with valid Wix identity and
36
+ runnable `dev` and `build` scripts. Never hand-create a Wix-shaped substitute.
37
+ - In migration mode, reuse the handoff's site/project and route/data-binding intent; do
38
+ not create or retarget a second destination.
39
+ - Preserve source structure, first-viewport evidence, chrome hierarchy, source assets,
40
+ fonts, core interactions, SEO, internal URL behavior, and branded fallback behavior.
41
+ - A build is not completion. Completion requires the accepted post-build visual-review and
42
+ gap-loop evidence described by `rp-qa-gap-loop`, plus optional facelift acceptance only
43
+ when the user explicitly selected facelift mode.
44
+
45
+ ## Supervisor protocol
46
+
47
+ On every new or resumed run:
48
+
49
+ 1. Resolve the source URL, output directory, and mode. In migration mode read
50
+ `website/handoff.json` and `docs/site-clone/frontend-automation-state.json` first.
51
+ 2. Select the first incomplete stage from the table below and read only that resource's
52
+ `SKILL.md` plus the references it explicitly needs.
53
+ 3. Execute that stage until it writes its required durable artifact, or records a specific
54
+ genuine blocker with evidence and an exact unblock action.
55
+ 4. Re-select the stage after every boundary. Do not say that a required next step “needs to
56
+ happen” and end the run; load its resource and perform it.
57
+
58
+ | Stage | Load only when | Resource | Durable outcome |
59
+ | --- | --- | --- | --- |
60
+ | Context | mode, scope, project, or browser environment is unresolved | `resources/rp-project-context/SKILL.md` | valid context, approval record, runnable project/plan state, or blocker |
61
+ | Evidence | frozen home-page extraction is absent or stale | `resources/rp-source-evidence/SKILL.md` | validated `extraction/latest.json` and frozen manifest, or global blocker |
62
+ | Implementation | frozen build plan exists and home UI is incomplete | `resources/rp-ui-implementation/SKILL.md` | manifest-hash-aware runnable home implementation |
63
+ | Verify and improve | build, QA, comparison, review, fix, report, release, or receipt is incomplete | `resources/rp-qa-gap-loop/SKILL.md` | accepted result, `done_with_gaps`, or global blocker |
64
+ | Optional facelift | normal clone accepted and automation state says facelift is requested | `resources/rp-facelift/SKILL.md` | accepted facelift review, or blocker |
65
+
66
+ When `frontendPhase.allowedNow` is `plan`, complete only the plan-eligible context and
67
+ evidence work and leave a resumable plan-state record. When it is `build`, continue through
68
+ implementation and verification against the migration-owned project.
69
+
70
+ ## One-click continuation
71
+
72
+ A migration handoff declaring `automationMode: "one_click"` authorizes routine scope and
73
+ frontend checkpoints. Record those approvals in
74
+ `docs/site-clone/frontend-automation-state.json`; do not pause to ask whether to proceed
75
+ with a required stage, screenshot review, or authorized gap-fix pass.
76
+ An explicit facelift request may be carried from 1-click intake, but it remains gated until
77
+ normal clone acceptance; 1-click never implies facelift by itself.
78
+
79
+ In a one-click build run, keep selecting and executing stages until one of these durable
80
+ outcomes exists:
81
+
82
+ - `website/completion.json` is valid and the latest visual review is complete with no open
83
+ critical/high identity finding; or
84
+ - five visual gap cycles have been completed and `website/completion.json` records the
85
+ truthful terminal status `done_with_gaps` with the final reviewed evidence; or
86
+ - a genuine blocker is recorded with owner, evidence, attempted recovery, and exact next
87
+ authority/action needed.
88
+
89
+ An owned local extraction gap is not a genuine blocker. Continue unrelated work, use no more
90
+ than two distinct targeted recovery attempts, then build the affected dependency closure
91
+ provisionally and surface post-assembly choices in `final-report.json` and `.md`.
92
+
93
+ Before classifying a shell, browser, or network failure as a blocker, use the
94
+ repo-local Wix/Yarn toolchain PATH ordering and follow the recovery order in
95
+ `resources/rp-project-context/SKILL.md`: aligned-shell retry, then the
96
+ required browser/network escalation and retry, then blocker only if it still
97
+ fails or approval is pending. After every gap iteration, immediately return to
98
+ the stage table; never treat a first build, a reported plan, or backend import
99
+ as frontend completion.
100
+
101
+ In migration mode the build must also leave the final route manifest that old-link
102
+ preservation consumes (`output-contract.md`, "Migration terminal receipt"). A built site is
103
+ not proof that old URLs work; redirect application and public verification stay pending
104
+ until the cutover step runs them.
105
+
106
+ ## Commands
107
+
108
+ Run `node scripts/site-clone.mjs <source-url>` for standalone mode, or
109
+ `node scripts/site-clone.mjs <source-url> --handoff <path>` for migration mode. The active
110
+ resource gives the exact commands and inputs for its stage.
111
+
112
+ ## References
113
+
114
+ Resources load their own references. The shared contracts are kept under `references/`:
115
+ `safety.md`, `workflow.md`, `extraction-schema.md`, `output-contract.md`,
116
+ `qa-checklist.md`, and the interaction/layout/control/normalization/gap contracts.
@@ -0,0 +1,6 @@
1
+ interface:
2
+ display_name: "Wix Headless RePlatform"
3
+ short_description: "Clone sites into Wix Headless frontends"
4
+ default_prompt: "Use $wix-headless-replatform to clone this website into a Wix Headless frontend."
5
+ policy:
6
+ allow_implicit_invocation: true
@@ -0,0 +1,43 @@
1
+ # Control and Visual Fidelity Contract
2
+
3
+ This layer sits beside the scene and layout contracts. It is deliberately modular:
4
+
5
+ - `control-state-contract.json` owns representative control states and transition owners;
6
+ - `visual-assets.json` owns identity-bearing logos/icons, their variants, usage, and size;
7
+ - `layout-blueprint.json` owns text geometry and wrapping;
8
+ - `scene-contract.json` owns initial interactive state, item separation, and motion scope.
9
+
10
+ ## Control terminology
11
+
12
+ Use `rest`, `hover`, `focus-visible`, `pressed`, `activated`, `current`, and `disabled`.
13
+ Implement the recorded delta on the element that owns it: target, `::before`, `::after`, or
14
+ nested icon. Source-observed states outrank normalization defaults. If source focus evidence
15
+ is absent, add a perceivable `:focus-visible` treatment without replacing source hover or
16
+ current styling.
17
+
18
+ ## Text geometry
19
+
20
+ Important text records include `inlineSize`, `blockSize`, `lineCount`, `wrapPolicy`,
21
+ `maxWidth`, `fontSize`, and `lineHeight`. At the canonical desktop viewport, a captured
22
+ `single-line` heading is an identity lock. Match its container width before shrinking type.
23
+
24
+ ## Stateful collections
25
+
26
+ Respect `initialState` and `initialActiveIndexes`. `all-collapsed` means no item may be
27
+ opened during runtime initialization. Reproduce `separation.mechanism`: it distinguishes
28
+ track gaps, geometric gaps, margins, dividers, inner insets, and flush items.
29
+
30
+ ## Motion ownership
31
+
32
+ `data-rp-visual` marks the measured visual transform owner. `data-rp-content` marks copy
33
+ whose geometry is verified separately. Never nest static content inside a scaling visual
34
+ wrapper unless source evidence explicitly says the content scales.
35
+
36
+ ## Logos and icons
37
+
38
+ Logo priority is exact source file or materialized source SVG. Preserve all observed
39
+ variants and usage sizes. Never recreate a logo as text or substitute a library mark.
40
+
41
+ Icon priority is exact source asset, then the source sprite/library, then a style-matched
42
+ established library such as Iconify. Library fallback is only allowed when no source icon
43
+ exists and never applies to logos.