@wix/agent-skills 1.33.0 → 1.34.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 (635) hide show
  1. package/README.md +23 -0
  2. package/package.json +2 -2
  3. package/skills/wix-app/references/DASHBOARD_PAGE.md +1 -1
  4. package/skills/wix-export/SKILL.md +83 -0
  5. package/skills/wix-harmony-editor/.publish-manifest.json +8 -0
  6. package/skills/wix-harmony-editor/COPY-SITE.md +494 -0
  7. package/skills/wix-harmony-editor/SKILL.md +317 -0
  8. package/skills/wix-harmony-editor/scripts/copy/build-description.mjs +249 -0
  9. package/skills/wix-harmony-editor/scripts/copy/check-description.mjs +225 -0
  10. package/skills/wix-harmony-editor/scripts/copy/check-mirror.mjs +89 -0
  11. package/skills/wix-harmony-editor/scripts/copy/compare-preview.mjs +76 -0
  12. package/skills/wix-harmony-editor/scripts/copy/deploy-description.mjs +212 -0
  13. package/skills/wix-harmony-editor/scripts/copy/desc-hash.mjs +44 -0
  14. package/skills/wix-harmony-editor/scripts/copy/editor-run.mjs +45 -0
  15. package/skills/wix-harmony-editor/scripts/copy/export-page.mjs +53 -0
  16. package/skills/wix-harmony-editor/scripts/copy/find-interactions.mjs +76 -0
  17. package/skills/wix-harmony-editor/scripts/copy/hide-scrollbars.mjs +16 -0
  18. package/skills/wix-harmony-editor/scripts/copy/import-media.mjs +150 -0
  19. package/skills/wix-harmony-editor/scripts/copy/link-url.mjs +27 -0
  20. package/skills/wix-harmony-editor/scripts/copy/lint-api.mjs +56 -0
  21. package/skills/wix-harmony-editor/scripts/copy/measure-source.mjs +211 -0
  22. package/skills/wix-harmony-editor/scripts/copy/merge-mirrors.mjs +29 -0
  23. package/skills/wix-harmony-editor/scripts/copy/mirror-site.mjs +92 -0
  24. package/skills/wix-harmony-editor/scripts/copy/mobile-stage.mjs +56 -0
  25. package/skills/wix-harmony-editor/scripts/copy/preview-widths.mjs +73 -0
  26. package/skills/wix-harmony-editor/scripts/copy/render-plate.mjs +67 -0
  27. package/skills/wix-harmony-editor/scripts/copy/serve-mirror.mjs +102 -0
  28. package/skills/wix-harmony-editor/scripts/copy/snapshot-capabilities.mjs +40 -0
  29. package/skills/wix-harmony-editor/scripts/copy/split-sections.mjs +191 -0
  30. package/skills/wix-harmony-editor/scripts/copy/upload-media-manager.mjs +61 -0
  31. package/skills/wix-harmony-editor/scripts/launch.sh +359 -0
  32. package/skills/wix-headless/SKILL.md +7 -2
  33. package/skills/wix-headless/references/CAPABILITIES.md +6 -1
  34. package/skills/wix-headless/references/DISCOVERY.md +2 -1
  35. package/skills/wix-headless/references/SDK_HANDOFF.md +6 -1
  36. package/skills/wix-headless/references/SEED.md +3 -2
  37. package/skills/wix-headless/references/SETUP.md +1 -0
  38. package/skills/wix-headless/references/inline-recipes/experience-donations.md +102 -0
  39. package/skills/wix-headless/references/inline-recipes/how-to-code-donations.md +146 -0
  40. package/skills/wix-headless/references/inline-recipes/setup-donations.md +15 -0
  41. package/skills/wix-headless/references/managed/CREATE.md +1 -1
  42. package/skills/wix-headless-kit/SKILL.md +110 -21
  43. package/skills/wix-headless-kit/guides/api-run.md +15 -13
  44. package/skills/wix-headless-kit/guides/existing-site.md +31 -0
  45. package/skills/wix-headless-kit/guides/migration.md +49 -17
  46. package/skills/wix-headless-kit/install/agents-md.mjs +1 -1
  47. package/skills/wix-headless-kit/install/context.mjs +61 -6
  48. package/skills/wix-headless-kit/install/pins.json +1 -1
  49. package/skills/wix-headless-kit/install/setup.mjs +107 -12
  50. package/skills/wix-headless-replatform/.publish-manifest.json +8 -0
  51. package/skills/wix-headless-replatform/SKILL.md +116 -0
  52. package/skills/wix-headless-replatform/agents/openai.yaml +6 -0
  53. package/skills/wix-headless-replatform/references/control-and-visual-fidelity-contract.md +43 -0
  54. package/skills/wix-headless-replatform/references/extraction-schema.md +187 -0
  55. package/skills/wix-headless-replatform/references/interaction-runtime-contract.md +137 -0
  56. package/skills/wix-headless-replatform/references/layout-blueprint-contract.md +41 -0
  57. package/skills/wix-headless-replatform/references/output-contract.md +93 -0
  58. package/skills/wix-headless-replatform/references/post-build-gap-contract.md +125 -0
  59. package/skills/wix-headless-replatform/references/qa-checklist.md +83 -0
  60. package/skills/wix-headless-replatform/references/safety.md +19 -0
  61. package/skills/wix-headless-replatform/references/ui-normalization-contract.md +70 -0
  62. package/skills/wix-headless-replatform/references/workflow.md +157 -0
  63. package/skills/wix-headless-replatform/registry/README.md +20 -0
  64. package/skills/wix-headless-replatform/registry/approvals/button/shadcn-default-ac60ef5.json +28 -0
  65. package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/button.tsx +54 -0
  66. package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/capabilities.json +60 -0
  67. package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/contract.md +48 -0
  68. package/skills/wix-headless-replatform/registry/licenses/shadcn-ui-ac60ef5-MIT.txt +21 -0
  69. package/skills/wix-headless-replatform/registry/registry.json +36 -0
  70. package/skills/wix-headless-replatform/resources/rp-facelift/SKILL.md +32 -0
  71. package/skills/wix-headless-replatform/resources/rp-project-context/SKILL.md +62 -0
  72. package/skills/wix-headless-replatform/resources/rp-qa-gap-loop/SKILL.md +64 -0
  73. package/skills/wix-headless-replatform/resources/rp-source-evidence/SKILL.md +42 -0
  74. package/skills/wix-headless-replatform/resources/rp-ui-implementation/SKILL.md +73 -0
  75. package/skills/wix-headless-replatform/schemas/build-plan.schema.json +10 -0
  76. package/skills/wix-headless-replatform/schemas/candidate.schema.json +19 -0
  77. package/skills/wix-headless-replatform/schemas/common.schema.json +33 -0
  78. package/skills/wix-headless-replatform/schemas/decision-patch.schema.json +10 -0
  79. package/skills/wix-headless-replatform/schemas/decision-request.schema.json +10 -0
  80. package/skills/wix-headless-replatform/schemas/extraction-gap.schema.json +28 -0
  81. package/skills/wix-headless-replatform/schemas/extraction-manifest.schema.json +34 -0
  82. package/skills/wix-headless-replatform/schemas/final-report.schema.json +10 -0
  83. package/skills/wix-headless-replatform/schemas/foundation.schema.json +11 -0
  84. package/skills/wix-headless-replatform/schemas/metadata.schema.json +11 -0
  85. package/skills/wix-headless-replatform/schemas/observation-packet.schema.json +17 -0
  86. package/skills/wix-headless-replatform/schemas/page-capture.schema.json +11 -0
  87. package/skills/wix-headless-replatform/schemas/page-resolution.schema.json +33 -0
  88. package/skills/wix-headless-replatform/schemas/shared-chrome.schema.json +11 -0
  89. package/skills/wix-headless-replatform/schemas/unit.schema.json +40 -0
  90. package/skills/wix-headless-replatform/scripts/assemble-extraction.mjs +844 -0
  91. package/skills/wix-headless-replatform/scripts/benchmark-extraction.mjs +163 -0
  92. package/skills/wix-headless-replatform/scripts/browser-extraction-preflight.mjs +42 -0
  93. package/skills/wix-headless-replatform/scripts/build-extracted-homepage.mjs +228 -0
  94. package/skills/wix-headless-replatform/scripts/clear-wix-starter.mjs +87 -0
  95. package/skills/wix-headless-replatform/scripts/create-wix-project.mjs +505 -0
  96. package/skills/wix-headless-replatform/scripts/discover-urls.mjs +142 -0
  97. package/skills/wix-headless-replatform/scripts/extract-assets.mjs +140 -0
  98. package/skills/wix-headless-replatform/scripts/extract-design-system.mjs +637 -0
  99. package/skills/wix-headless-replatform/scripts/extract-interactions.mjs +1903 -0
  100. package/skills/wix-headless-replatform/scripts/extract-page.mjs +2461 -0
  101. package/skills/wix-headless-replatform/scripts/extract-seo.mjs +25 -0
  102. package/skills/wix-headless-replatform/scripts/extract-tokens.mjs +63 -0
  103. package/skills/wix-headless-replatform/scripts/finalize-extraction-report.mjs +126 -0
  104. package/skills/wix-headless-replatform/scripts/finalize-gap-review.mjs +180 -0
  105. package/skills/wix-headless-replatform/scripts/finalize-gap-review.test.mjs +98 -0
  106. package/skills/wix-headless-replatform/scripts/finalize-migration-website.mjs +103 -0
  107. package/skills/wix-headless-replatform/scripts/generate-control-state-contract.mjs +176 -0
  108. package/skills/wix-headless-replatform/scripts/generate-design-md.mjs +261 -0
  109. package/skills/wix-headless-replatform/scripts/generate-extraction-validators.mjs +25 -0
  110. package/skills/wix-headless-replatform/scripts/generate-invoice-download-backend.mjs +342 -0
  111. package/skills/wix-headless-replatform/scripts/generate-layout-blueprint.mjs +140 -0
  112. package/skills/wix-headless-replatform/scripts/generate-repeater-cms.mjs +22 -0
  113. package/skills/wix-headless-replatform/scripts/generate-route-plan.mjs +143 -0
  114. package/skills/wix-headless-replatform/scripts/generate-scene-contract.mjs +288 -0
  115. package/skills/wix-headless-replatform/scripts/generate-ui-normalization.mjs +266 -0
  116. package/skills/wix-headless-replatform/scripts/generate-visual-assets.mjs +111 -0
  117. package/skills/wix-headless-replatform/scripts/lib/browser-tooling.mjs +570 -0
  118. package/skills/wix-headless-replatform/scripts/lib/common.mjs +329 -0
  119. package/skills/wix-headless-replatform/scripts/lib/component-capabilities.mjs +121 -0
  120. package/skills/wix-headless-replatform/scripts/lib/component-registry.mjs +282 -0
  121. package/skills/wix-headless-replatform/scripts/lib/content-boundary.mjs +61 -0
  122. package/skills/wix-headless-replatform/scripts/lib/extraction-contract.mjs +374 -0
  123. package/skills/wix-headless-replatform/scripts/lib/extraction-detectors.mjs +243 -0
  124. package/skills/wix-headless-replatform/scripts/lib/extraction-validators.generated.mjs +1139 -0
  125. package/skills/wix-headless-replatform/scripts/lib/font-contract.mjs +326 -0
  126. package/skills/wix-headless-replatform/scripts/lib/frontend-automation-state.mjs +184 -0
  127. package/skills/wix-headless-replatform/scripts/lib/gap-analysis.mjs +396 -0
  128. package/skills/wix-headless-replatform/scripts/lib/html-extract.mjs +168 -0
  129. package/skills/wix-headless-replatform/scripts/lib/interaction-bootstrap.mjs +10 -0
  130. package/skills/wix-headless-replatform/scripts/lib/interaction-runtime.mjs +194 -0
  131. package/skills/wix-headless-replatform/scripts/lib/interaction-timeline.mjs +348 -0
  132. package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/classifiers.mjs +141 -0
  133. package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/geometry.mjs +43 -0
  134. package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/vocabulary.mjs +18 -0
  135. package/skills/wix-headless-replatform/scripts/lib/ui-normalization.css +64 -0
  136. package/skills/wix-headless-replatform/scripts/optimize-svg.mjs +31 -0
  137. package/skills/wix-headless-replatform/scripts/post-build-gap.mjs +358 -0
  138. package/skills/wix-headless-replatform/scripts/provision-repeater-cms.mjs +25 -0
  139. package/skills/wix-headless-replatform/scripts/record-gap-decision.mjs +39 -0
  140. package/skills/wix-headless-replatform/scripts/replay-extraction.mjs +107 -0
  141. package/skills/wix-headless-replatform/scripts/resolve-home-page.mjs +96 -0
  142. package/skills/wix-headless-replatform/scripts/site-clone.mjs +658 -0
  143. package/skills/wix-headless-replatform/scripts/validate-font-contract.mjs +29 -0
  144. package/skills/wix-headless-replatform/scripts/verify-interactions.mjs +669 -0
  145. package/skills/wix-headless-replatform/scripts/visual-qa.mjs +370 -0
  146. package/skills/wix-headless-templates/donations/INSTRUCTIONS.md +37 -24
  147. package/skills/wix-headless-templates/donations/app/components/donations/DonateForm.tsx +49 -23
  148. package/skills/wix-headless-templates/donations/app/components/donations/DonationReceipt.tsx +6 -5
  149. package/skills/wix-headless-templates/donations/app/components/donations/GoalProgress.tsx +5 -5
  150. package/skills/wix-headless-templates/donations/app/wix/donations/campaigns.ts +4 -4
  151. package/skills/wix-headless-templates/donations/app/wix/donations/donate.ts +7 -3
  152. package/skills/wix-headless-templates/donations/app/wix/donations/donation-store.ts +2 -2
  153. package/skills/wix-headless-templates/donations/app/wix/donations/donations-core.ts +12 -9
  154. package/skills/wix-headless-templates/donations/project/src/components/donations/DonateForm.tsx +49 -23
  155. package/skills/wix-headless-templates/donations/project/src/components/donations/DonationReceipt.tsx +6 -5
  156. package/skills/wix-headless-templates/donations/project/src/components/donations/GoalProgress.tsx +5 -5
  157. package/skills/wix-headless-templates/donations/project/src/wix/donations/campaigns.ts +4 -4
  158. package/skills/wix-headless-templates/donations/project/src/wix/donations/donate.ts +7 -3
  159. package/skills/wix-headless-templates/donations/project/src/wix/donations/donation-store.ts +2 -2
  160. package/skills/wix-headless-templates/donations/project/src/wix/donations/donations-core.ts +12 -9
  161. package/skills/wix-headless-templates/donations/rest/campaigns.ts +4 -4
  162. package/skills/wix-headless-templates/donations/rest/donate.ts +7 -3
  163. package/skills/wix-headless-templates/donations/seed/SEED.md +12 -7
  164. package/skills/wix-headless-templates/donations/tests/donation-contract.test.mjs +71 -0
  165. package/skills/wix-headless-templates/donations/tests/donation-form.test.cjs +137 -0
  166. package/skills/wix-headless-templates/restaurants/INSTRUCTIONS.md +28 -14
  167. package/skills/wix-headless-templates/restaurants/app/components/restaurants/OrderCartDrawer.tsx +87 -5
  168. package/skills/wix-headless-templates/restaurants/app/hooks/restaurants/useOrderCart.ts +9 -1
  169. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/order-store.ts +33 -4
  170. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/ordering-core.ts +100 -5
  171. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/ordering.ts +101 -15
  172. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/types.ts +35 -1
  173. package/skills/wix-headless-templates/restaurants/project/src/components/restaurants/OrderCartDrawer.tsx +87 -5
  174. package/skills/wix-headless-templates/restaurants/project/src/hooks/restaurants/useOrderCart.ts +9 -1
  175. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/order-store.ts +33 -4
  176. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/ordering-core.ts +100 -5
  177. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/ordering.ts +101 -15
  178. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/types.ts +35 -1
  179. package/skills/wix-headless-templates/restaurants/rest/ordering.ts +91 -14
  180. package/skills/wix-import/SKILL.md +90 -0
  181. package/skills/wix-manage/SKILL.md +38 -10
  182. package/skills/wix-manage/references/automations/actions.md +11 -11
  183. package/skills/wix-manage/references/automations/activation-status.md +6 -9
  184. package/skills/wix-manage/references/automations/api-catalog.md +48 -32
  185. package/skills/wix-manage/references/automations/automation-model.md +97 -22
  186. package/skills/wix-manage/references/automations/bracket-expressions.md +7 -7
  187. package/skills/wix-manage/references/automations/build-and-manage-automations.md +140 -309
  188. package/skills/wix-manage/references/automations/conditions.md +187 -0
  189. package/skills/wix-manage/references/automations/schemas-and-scheduling.md +191 -0
  190. package/skills/wix-manage/references/automations/special-actions.md +210 -0
  191. package/skills/wix-manage/references/automations/triggers.md +47 -10
  192. package/skills/wix-manage/references/automations/validation-and-verification.md +320 -0
  193. package/skills/wix-manage/references/custom-apps/use-app-tools.md +124 -0
  194. package/skills/wix-manage/references/dashboard-navigation/dashboard-navigation.md +2 -1
  195. package/skills/wix-manage/references/dashboard-navigation/routes.json +249 -0
  196. package/skills/wix-manage/references/donations/create-and-update-donation-campaigns.md +139 -0
  197. package/skills/wix-manage/references/events/create-wix-event.md +136 -73
  198. package/skills/wix-manage/references/events/events-dashboard-navigation.md +81 -0
  199. package/skills/wix-manage/references/events/manage-event-guests.md +366 -0
  200. package/skills/wix-manage/references/events/manage-event-tickets.md +293 -0
  201. package/skills/wix-manage/references/events/manage-wix-events.md +313 -55
  202. package/skills/wix-manage/references/sites/manage-oauth-apps.md +1 -0
  203. package/skills/wix-manage/references/sites/upload-static-site.md +127 -8
  204. package/skills/wix-manage/references/stores/update-product-with-options.md +58 -2
  205. package/skills/wix-replatform/.publish-manifest.json +5 -5
  206. package/skills/wix-replatform/CLI.md +162 -0
  207. package/skills/wix-replatform/README.md +52 -0
  208. package/skills/wix-replatform/SKILL.md +229 -684
  209. package/skills/wix-replatform/console/account.css +1 -0
  210. package/skills/wix-replatform/console/app.css +1 -0
  211. package/skills/wix-replatform/console/app.js +117 -0
  212. package/skills/wix-replatform/console/index.html +4 -0
  213. package/skills/wix-replatform/console/json.css +11 -0
  214. package/skills/wix-replatform/lib/agent-adapters/index.js +71 -0
  215. package/skills/wix-replatform/lib/app-page-routing.js +75 -0
  216. package/skills/wix-replatform/lib/artifact-freshness.js +11 -1
  217. package/skills/wix-replatform/lib/blocked-data-requests.js +427 -0
  218. package/skills/wix-replatform/lib/census-reconciliation.js +426 -0
  219. package/skills/wix-replatform/lib/completion-report.js +1393 -13
  220. package/skills/wix-replatform/lib/config-env.js +85 -11
  221. package/skills/wix-replatform/lib/confirmed-pictures.js +212 -0
  222. package/skills/wix-replatform/lib/dependency-readiness.js +423 -0
  223. package/skills/wix-replatform/lib/dependency-recovery.js +21 -0
  224. package/skills/wix-replatform/lib/destination-choice.js +163 -0
  225. package/skills/wix-replatform/lib/destination-handoff.js +62 -0
  226. package/skills/wix-replatform/lib/destination-http.js +81 -0
  227. package/skills/wix-replatform/lib/destination-route.js +98 -0
  228. package/skills/wix-replatform/lib/destination.js +919 -0
  229. package/skills/wix-replatform/lib/discovered-census.js +231 -0
  230. package/skills/wix-replatform/lib/discovered-set-status.js +255 -0
  231. package/skills/wix-replatform/lib/document-url-guard.js +203 -0
  232. package/skills/wix-replatform/lib/entity-qa-attestation.js +339 -0
  233. package/skills/wix-replatform/lib/entity-verification.js +18 -0
  234. package/skills/wix-replatform/lib/execution-capability.js +120 -0
  235. package/skills/wix-replatform/lib/execution-log.js +170 -0
  236. package/skills/wix-replatform/lib/execution-manifest.js +20 -2
  237. package/skills/wix-replatform/lib/execution-state.js +22 -0
  238. package/skills/wix-replatform/lib/expectations-ledger.js +96 -0
  239. package/skills/wix-replatform/lib/generated-plugin-handoff.js +140 -0
  240. package/skills/wix-replatform/lib/import-readiness-contract.js +23 -0
  241. package/skills/wix-replatform/lib/import-recovery.js +800 -6
  242. package/skills/wix-replatform/lib/imported-redirect-targets.js +608 -0
  243. package/skills/wix-replatform/lib/internal-link-reconciliation.js +166 -0
  244. package/skills/wix-replatform/lib/link-audit.js +173 -0
  245. package/skills/wix-replatform/lib/link-census.js +194 -0
  246. package/skills/wix-replatform/lib/link-plan.js +148 -0
  247. package/skills/wix-replatform/lib/link-verification.js +274 -0
  248. package/skills/wix-replatform/lib/link-write-journal.js +42 -0
  249. package/skills/wix-replatform/lib/local-state.js +869 -30
  250. package/skills/wix-replatform/lib/member-completion.js +658 -0
  251. package/skills/wix-replatform/lib/member-crosswalk.js +69 -0
  252. package/skills/wix-replatform/lib/member-outcome-registry.js +265 -0
  253. package/skills/wix-replatform/lib/migration-completion.js +311 -0
  254. package/skills/wix-replatform/lib/operator-identity.js +47 -0
  255. package/skills/wix-replatform/lib/orchestration-decisions.js +248 -0
  256. package/skills/wix-replatform/lib/orchestration-preflight.js +401 -19
  257. package/skills/wix-replatform/lib/orchestration-router.js +608 -32
  258. package/skills/wix-replatform/lib/orchestration-state.js +188 -12
  259. package/skills/wix-replatform/lib/order-reference-readiness.js +30 -0
  260. package/skills/wix-replatform/lib/payments-outcome-registry.js +200 -0
  261. package/skills/wix-replatform/lib/plugin-cms-fallback.js +618 -0
  262. package/skills/wix-replatform/lib/preservation-approval-stamp.js +54 -0
  263. package/skills/wix-replatform/lib/product-media-deferral.js +96 -0
  264. package/skills/wix-replatform/lib/progress-log.js +19 -3
  265. package/skills/wix-replatform/lib/read-back-approval.js +184 -0
  266. package/skills/wix-replatform/lib/read-back-comparison.js +136 -0
  267. package/skills/wix-replatform/lib/read-back-contract.js +243 -0
  268. package/skills/wix-replatform/lib/read-back-extract.js +118 -0
  269. package/skills/wix-replatform/lib/read-back-gate.js +734 -0
  270. package/skills/wix-replatform/lib/read-back-reads.js +94 -0
  271. package/skills/wix-replatform/lib/read-back-state.js +107 -0
  272. package/skills/wix-replatform/lib/read-back-summary.js +81 -0
  273. package/skills/wix-replatform/lib/rerun-conflicts.js +334 -0
  274. package/skills/wix-replatform/lib/run-controller.js +401 -0
  275. package/skills/wix-replatform/lib/seo-outcome-registry.js +45 -0
  276. package/skills/wix-replatform/lib/setup-verification.js +148 -0
  277. package/skills/wix-replatform/lib/source-access.js +231 -0
  278. package/skills/wix-replatform/lib/source-coverage.js +1130 -0
  279. package/skills/wix-replatform/lib/source-secrets.js +277 -0
  280. package/skills/wix-replatform/lib/structured-link-patch.js +59 -0
  281. package/skills/wix-replatform/lib/task-state.js +110 -0
  282. package/skills/wix-replatform/lib/url-preservation-report.js +319 -0
  283. package/skills/wix-replatform/lib/url-preservation-state.js +349 -1
  284. package/skills/wix-replatform/lib/url-redirect-plan.js +728 -0
  285. package/skills/wix-replatform/lib/url-verification.js +315 -0
  286. package/skills/wix-replatform/lib/user-action-effects.js +42 -0
  287. package/skills/wix-replatform/lib/user-actions.js +264 -0
  288. package/skills/wix-replatform/lib/website-handoff.js +1220 -0
  289. package/skills/wix-replatform/lib/wix-client-callers.js +54 -0
  290. package/skills/wix-replatform/lib/wix-dashboard-url.js +35 -0
  291. package/skills/wix-replatform/lib/write-verification-state.js +92 -0
  292. package/skills/wix-replatform/lib/write-verification.js +274 -0
  293. package/skills/wix-replatform/resources/rp-destination/SKILL.md +137 -0
  294. package/skills/wix-replatform/resources/rp-discovery/SKILL.md +189 -16
  295. package/skills/wix-replatform/resources/rp-discovery/scripts/promote-source-coverage.js +47 -0
  296. package/skills/wix-replatform/resources/rp-execute-import/SKILL.md +869 -29
  297. package/skills/wix-replatform/resources/rp-execute-import/scripts/shipping-estimate-audit.js +70 -0
  298. package/skills/wix-replatform/resources/rp-execute-setup/SKILL.md +195 -29
  299. package/skills/wix-replatform/resources/rp-execute-setup/scripts/execute-setup.js +442 -0
  300. package/skills/wix-replatform/resources/rp-execution-policy/SKILL.md +112 -0
  301. package/skills/wix-replatform/resources/rp-execution-policy/lib/coupon-currency-plan-report.js +143 -0
  302. package/skills/wix-replatform/resources/rp-execution-policy/lib/payments-report.js +244 -0
  303. package/skills/wix-replatform/resources/rp-import-codegen/SKILL.md +2082 -38
  304. package/skills/wix-replatform/resources/rp-mapper/SKILL.md +528 -11
  305. package/skills/wix-replatform/resources/rp-mapper/lib/structure-bridge-planning.js +303 -0
  306. package/skills/wix-replatform/resources/rp-mapper/scripts/coverage-reconcile.js +88 -0
  307. package/skills/wix-replatform/resources/rp-mapper/wix-business-solutions-taxonomy.md +6 -5
  308. package/skills/wix-replatform/resources/rp-preflight/SKILL.md +40 -0
  309. package/skills/wix-replatform/resources/rp-project-intake/SKILL.md +55 -0
  310. package/skills/wix-replatform/resources/rp-quick-runtime/SKILL.md +60 -0
  311. package/skills/wix-replatform/resources/rp-quick-runtime/lib/import-progress.js +89 -0
  312. package/skills/wix-replatform/resources/rp-quick-runtime/lib/limit-recovery.js +36 -0
  313. package/skills/wix-replatform/resources/rp-quick-shopify/SKILL.md +123 -0
  314. package/skills/wix-replatform/resources/rp-quick-shopify/quick-mode.json +124 -0
  315. package/skills/wix-replatform/resources/rp-quick-shopify/scripts/quick-mode.js +522 -0
  316. package/skills/wix-replatform/resources/rp-quick-woocommerce/SKILL.md +56 -0
  317. package/skills/wix-replatform/resources/rp-quick-woocommerce/quick-mode.json +91 -0
  318. package/skills/wix-replatform/resources/rp-quick-woocommerce/scripts/quick-mode.js +255 -0
  319. package/skills/wix-replatform/resources/rp-setup-discovery/SKILL.md +80 -10
  320. package/skills/wix-replatform/resources/rp-setup-discovery/scripts/quick-setup-plan.js +44 -0
  321. package/skills/wix-replatform/resources/rp-source-csv/SKILL.md +3 -0
  322. package/skills/wix-replatform/resources/rp-source-csv/lib/csv-fileset.js +0 -0
  323. package/skills/wix-replatform/resources/rp-source-csv/scripts/csv-discovery.js +21 -1
  324. package/skills/wix-replatform/resources/rp-source-inputs/SKILL.md +66 -0
  325. package/skills/wix-replatform/resources/rp-source-sfcc/SKILL.md +153 -0
  326. package/skills/wix-replatform/resources/rp-source-shopify/SKILL.md +394 -0
  327. package/skills/wix-replatform/resources/rp-source-shopify/lib/discovery-reads.js +200 -0
  328. package/skills/wix-replatform/resources/rp-source-shopify/lib/import-findings.js +34 -0
  329. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-bulk-sqlite-worker.js +44 -0
  330. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-bulk.js +1470 -0
  331. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-cli.js +446 -0
  332. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-gift-cards.js +474 -0
  333. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-protected-fields.js +879 -0
  334. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-session.js +426 -0
  335. package/skills/wix-replatform/resources/rp-source-shopify/queries/articles.graphql +24 -0
  336. package/skills/wix-replatform/resources/rp-source-shopify/queries/blogs.graphql +18 -0
  337. package/skills/wix-replatform/resources/rp-source-shopify/queries/collections.graphql +40 -0
  338. package/skills/wix-replatform/resources/rp-source-shopify/queries/customers.graphql +76 -0
  339. package/skills/wix-replatform/resources/rp-source-shopify/queries/delivery-profiles.graphql +51 -0
  340. package/skills/wix-replatform/resources/rp-source-shopify/queries/discounts.graphql +35 -0
  341. package/skills/wix-replatform/resources/rp-source-shopify/queries/files.graphql +20 -0
  342. package/skills/wix-replatform/resources/rp-source-shopify/queries/gift-cards.graphql +18 -0
  343. package/skills/wix-replatform/resources/rp-source-shopify/queries/inventory.graphql +31 -0
  344. package/skills/wix-replatform/resources/rp-source-shopify/queries/locations.graphql +21 -0
  345. package/skills/wix-replatform/resources/rp-source-shopify/queries/menus.graphql +21 -0
  346. package/skills/wix-replatform/resources/rp-source-shopify/queries/metaobjects.graphql +30 -0
  347. package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-core.graphql +150 -0
  348. package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-fulfillments.graphql +36 -0
  349. package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-refunds.graphql +48 -0
  350. package/skills/wix-replatform/resources/rp-source-shopify/queries/pages.graphql +20 -0
  351. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-address.graphql +8 -0
  352. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-email.graphql +6 -0
  353. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-name.graphql +8 -0
  354. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-phone.graphql +8 -0
  355. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-address.graphql +12 -0
  356. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-email.graphql +6 -0
  357. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-name.graphql +13 -0
  358. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-phone.graphql +13 -0
  359. package/skills/wix-replatform/resources/rp-source-shopify/queries/products.graphql +73 -0
  360. package/skills/wix-replatform/resources/rp-source-shopify/queries/url-redirects.graphql +13 -0
  361. package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-discovery.js +693 -0
  362. package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-extract.js +283 -0
  363. package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-gift-card-remedy.js +191 -0
  364. package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-session-check.js +115 -0
  365. package/skills/wix-replatform/resources/rp-source-shopify/source-schema.example.json +201 -0
  366. package/skills/wix-replatform/resources/rp-source-wordpress/PLUGIN-READ-PLANS.md +146 -0
  367. package/skills/wix-replatform/resources/rp-source-wordpress/SKILL.md +736 -22
  368. package/skills/wix-replatform/resources/rp-source-wordpress/lib/blocked-data-handlers.js +73 -0
  369. package/skills/wix-replatform/resources/rp-source-wordpress/lib/checkout-field-csv-parser.js +115 -0
  370. package/skills/wix-replatform/resources/rp-source-wordpress/lib/checkout-field-csv-parser.test-fixture.js +91 -0
  371. package/skills/wix-replatform/resources/rp-source-wordpress/lib/coupon-discovery.js +440 -0
  372. package/skills/wix-replatform/resources/rp-source-wordpress/lib/currency-gate.js +125 -0
  373. package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-source-keys.js +252 -0
  374. package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-source-keys.json +183 -0
  375. package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-summary.mjs +333 -0
  376. package/skills/wix-replatform/resources/rp-source-wordpress/lib/invoice-discovery.js +426 -0
  377. package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-disposition.js +400 -0
  378. package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-entity-read-plan.js +633 -0
  379. package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-knowledge.js +1127 -0
  380. package/skills/wix-replatform/resources/rp-source-wordpress/lib/refund-corroboration.js +194 -0
  381. package/skills/wix-replatform/resources/rp-source-wordpress/lib/refund-corroboration.json +100 -0
  382. package/skills/wix-replatform/resources/rp-source-wordpress/lib/sampled-ids-batch.js +157 -0
  383. package/skills/wix-replatform/resources/rp-source-wordpress/lib/secret-value-guard.js +234 -0
  384. package/skills/wix-replatform/resources/rp-source-wordpress/lib/store-currency.js +101 -0
  385. package/skills/wix-replatform/resources/rp-source-wordpress/lib/structure-bridge-reader.js +755 -0
  386. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wix-wp-plugin-v2-client.js +1074 -0
  387. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wix-wp-plugin-v2-client.test-fixture.js +149 -0
  388. package/skills/wix-replatform/resources/rp-source-wordpress/lib/woo-inventory.js +25 -0
  389. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-http.js +204 -9
  390. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-image-url.js +186 -0
  391. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-plugin-detect.js +1422 -0
  392. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-redirect-sources.js +343 -0
  393. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-route-classifier.js +262 -26
  394. package/skills/wix-replatform/resources/rp-source-wordpress/lib/yoast-product-seo-evidence.js +272 -0
  395. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/README.md +373 -0
  396. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/advanced-custom-fields.json +101 -0
  397. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/back-in-stock-notifier-for-woocommerce.json +81 -0
  398. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/capabilities-pending-decision.json +128 -0
  399. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/cms-fallback-eligible.json +18 -0
  400. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/contact-form-7.json +104 -0
  401. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/facebook-for-woocommerce.json +44 -0
  402. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/fingerprint-aliases.json +49 -0
  403. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/free-gifts-for-woocommerce.json +94 -0
  404. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/index.json +863 -0
  405. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/mailpoet.json +52 -0
  406. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/membership-for-woocommerce.json +161 -0
  407. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/mwb-bookings-for-woocommerce.json +180 -0
  408. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/no-migration-needed.json +286 -0
  409. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/pricing-deals-for-woocommerce.json +79 -0
  410. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/product-extras-for-woocommerce.json +120 -0
  411. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/pw-woocommerce-gift-cards.json +128 -0
  412. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/requires-development.json +88 -0
  413. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/seo-by-rank-math.json +80 -0
  414. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/seriously-simple-podcasting.json +46 -0
  415. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/strong-testimonials.json +55 -0
  416. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/subscriptions-for-woocommerce.json +99 -0
  417. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/tablepress.json +55 -0
  418. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/the-events-calendar.json +160 -0
  419. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/ti-woocommerce-wishlist.json +81 -0
  420. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-checkout-field-editor-pro.json +60 -0
  421. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-discount-rules.json +74 -0
  422. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-product-bundle.json +75 -0
  423. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-gift-cards.json +60 -0
  424. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-other-payment-gateway.json +44 -0
  425. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-pdf-invoices-packing-slips.json +57 -0
  426. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-product-addon.json +141 -0
  427. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-progressive-discounts.json +54 -0
  428. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wordpress-seo.json +158 -0
  429. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wpc-composite-products.json +97 -0
  430. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wpforms-lite.json +86 -0
  431. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/capture-store-settings.js +90 -0
  432. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/plugin-knowledge-validate.js +51 -0
  433. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/plugin-knowledge.js +103 -0
  434. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/wp-discovery.js +1668 -33
  435. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/wp-plugin-inventory.js +273 -0
  436. package/skills/wix-replatform/resources/rp-source-wordpress/secret-value-patterns.v1.json +11 -0
  437. package/skills/wix-replatform/resources/rp-source-wordpress/sub-parts.json +13 -0
  438. package/skills/wix-replatform/resources/rp-target-wix/SKILL.md +446 -32
  439. package/skills/wix-replatform/resources/rp-target-wix/app-page-routing-capabilities.json +36 -0
  440. package/skills/wix-replatform/resources/rp-target-wix/domains/README.md +38 -2
  441. package/skills/wix-replatform/resources/rp-target-wix/domains/SERVICE-PLUGINS.md +322 -0
  442. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/docs-survey.json +70 -0
  443. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/domain.json +19 -9
  444. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/category.json +42 -8
  445. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/comment.json +54 -8
  446. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/post.json +66 -10
  447. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/tag.json +38 -7
  448. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/docs-survey.json +332 -0
  449. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/domain.json +75 -0
  450. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/booking.json +181 -0
  451. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/service-add-on.json +130 -0
  452. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/service.json +180 -0
  453. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/docs-survey.json +161 -0
  454. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/domain.json +15 -4
  455. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/collection.json +39 -7
  456. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/data-item.json +47 -8
  457. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/reference.json +7 -1
  458. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/docs-survey.json +204 -0
  459. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/domain.json +17 -4
  460. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/contact.json +159 -15
  461. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/email-subscription.json +80 -12
  462. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/label.json +48 -8
  463. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/docs-survey.json +306 -0
  464. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/domain.json +30 -7
  465. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/delivery-profile.json +171 -0
  466. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/discount-rule.json +182 -0
  467. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-applied-discount.json +129 -0
  468. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-invoice-document.json +192 -0
  469. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-line-item-options.json +123 -0
  470. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-line-item.json +60 -12
  471. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-merchant-note.json +112 -0
  472. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-payment.json +191 -0
  473. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-refund.json +140 -13
  474. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order.json +383 -18
  475. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/pickup-location.json +122 -0
  476. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/shipping-option.json +98 -0
  477. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/wishlist-item.json +86 -0
  478. package/skills/wix-replatform/resources/rp-target-wix/domains/events/docs-survey.json +128 -0
  479. package/skills/wix-replatform/resources/rp-target-wix/domains/events/domain.json +38 -0
  480. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/category.json +73 -0
  481. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/event.json +107 -0
  482. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/registration-form.json +89 -0
  483. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/rsvp.json +118 -0
  484. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/ticket-definition.json +93 -0
  485. package/skills/wix-replatform/resources/rp-target-wix/domains/forms/docs-survey.json +86 -0
  486. package/skills/wix-replatform/resources/rp-target-wix/domains/forms/domain.json +56 -0
  487. package/skills/wix-replatform/resources/rp-target-wix/domains/forms/entities/form-submission.json +121 -0
  488. package/skills/wix-replatform/resources/rp-target-wix/domains/forms/entities/form.json +134 -0
  489. package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/docs-survey.json +41 -0
  490. package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/domain.json +50 -0
  491. package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/entities/gift-card-product.json +87 -0
  492. package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/entities/gift-card.json +130 -0
  493. package/skills/wix-replatform/resources/rp-target-wix/domains/index.json +914 -24
  494. package/skills/wix-replatform/resources/rp-target-wix/domains/media/docs-survey.json +41 -0
  495. package/skills/wix-replatform/resources/rp-target-wix/domains/media/domain.json +14 -4
  496. package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-file.json +45 -8
  497. package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-folder.json +41 -7
  498. package/skills/wix-replatform/resources/rp-target-wix/domains/members/docs-survey.json +119 -0
  499. package/skills/wix-replatform/resources/rp-target-wix/domains/members/domain.json +13 -3
  500. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/badge.json +41 -7
  501. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/custom-field.json +82 -0
  502. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/member-about.json +77 -0
  503. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/member.json +165 -13
  504. package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/docs-survey.json +41 -0
  505. package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/domain.json +46 -0
  506. package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/entities/plan-order.json +137 -0
  507. package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/entities/plan.json +133 -0
  508. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/docs-survey.json +7 -0
  509. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/domain.json +36 -0
  510. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/amazon-shop-connect.json +71 -0
  511. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/ebay-shop-connect.json +67 -0
  512. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/google-youtube-connect.json +72 -0
  513. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/meta-catalog-connect.json +74 -0
  514. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/pinterest-catalog-connect.json +69 -0
  515. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/tiktok-catalog-connect.json +61 -0
  516. package/skills/wix-replatform/resources/rp-target-wix/domains/schema.json +28 -1
  517. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/docs-survey.json +109 -0
  518. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/domain.json +73 -0
  519. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/item-seo-tags.json +148 -0
  520. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/seo-pattern.json +91 -0
  521. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/site-seo-tags.json +79 -0
  522. package/skills/wix-replatform/resources/rp-target-wix/domains/site/docs-survey.json +32 -0
  523. package/skills/wix-replatform/resources/rp-target-wix/domains/site/domain.json +49 -0
  524. package/skills/wix-replatform/resources/rp-target-wix/domains/site/entities/business-contact.json +103 -0
  525. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/docs-survey.json +203 -0
  526. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/domain.json +27 -10
  527. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/back-in-stock-request.json +119 -0
  528. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/brand.json +111 -0
  529. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/category.json +52 -8
  530. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/coupon.json +214 -10
  531. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/inventory-item.json +93 -13
  532. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-customization.json +111 -0
  533. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-tag.json +52 -10
  534. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product.json +145 -14
  535. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/promotion.json +84 -0
  536. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/review.json +178 -0
  537. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/subscription-product.json +87 -0
  538. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/docs-survey.json +106 -0
  539. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/domain.json +64 -0
  540. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/manual-tax-mapping.json +119 -0
  541. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-group.json +94 -0
  542. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-region.json +113 -0
  543. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-settings.json +65 -0
  544. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-author-attribution.js +165 -0
  545. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-client.js +60 -0
  546. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-duplicates.js +201 -0
  547. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-ledger.js +306 -0
  548. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-report.js +229 -0
  549. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-stage.js +55 -0
  550. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build.js +715 -0
  551. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-media.js +567 -0
  552. package/skills/wix-replatform/resources/rp-target-wix/lib/bulk-results.js +73 -0
  553. package/skills/wix-replatform/resources/rp-target-wix/lib/contact-extended-fields.js +194 -0
  554. package/skills/wix-replatform/resources/rp-target-wix/lib/contact-import.js +133 -0
  555. package/skills/wix-replatform/resources/rp-target-wix/lib/contract-ledger.js +13 -4
  556. package/skills/wix-replatform/resources/rp-target-wix/lib/coupon-redemption-drift.js +491 -0
  557. package/skills/wix-replatform/resources/rp-target-wix/lib/customer-member.js +104 -0
  558. package/skills/wix-replatform/resources/rp-target-wix/lib/data-extension-schema.js +673 -0
  559. package/skills/wix-replatform/resources/rp-target-wix/lib/domain-knowledge.js +453 -2
  560. package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-balance-reconciliation.js +119 -0
  561. package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-build.js +566 -0
  562. package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-redemption-build.js +249 -0
  563. package/skills/wix-replatform/resources/rp-target-wix/lib/order-applied-discount-build.js +63 -0
  564. package/skills/wix-replatform/resources/rp-target-wix/lib/order-buyer.js +187 -0
  565. package/skills/wix-replatform/resources/rp-target-wix/lib/order-channel-build.js +64 -0
  566. package/skills/wix-replatform/resources/rp-target-wix/lib/order-history.js +1027 -0
  567. package/skills/wix-replatform/resources/rp-target-wix/lib/order-invoice-contract.js +90 -0
  568. package/skills/wix-replatform/resources/rp-target-wix/lib/order-payment-mapping.js +420 -0
  569. package/skills/wix-replatform/resources/rp-target-wix/lib/pricing-plan-definition.js +177 -0
  570. package/skills/wix-replatform/resources/rp-target-wix/lib/product-import.js +151 -0
  571. package/skills/wix-replatform/resources/rp-target-wix/lib/product-seo.js +723 -0
  572. package/skills/wix-replatform/resources/rp-target-wix/lib/seo-redirects.js +353 -0
  573. package/skills/wix-replatform/resources/rp-target-wix/lib/shipping-build.js +1437 -0
  574. package/skills/wix-replatform/resources/rp-target-wix/lib/shipping-option-stage.js +354 -0
  575. package/skills/wix-replatform/resources/rp-target-wix/lib/store-config-build.js +134 -0
  576. package/skills/wix-replatform/resources/rp-target-wix/lib/stores-category-attach.js +221 -0
  577. package/skills/wix-replatform/resources/rp-target-wix/lib/stores-inventory.js +248 -0
  578. package/skills/wix-replatform/resources/rp-target-wix/lib/stores-verification.js +86 -3
  579. package/skills/wix-replatform/resources/rp-target-wix/lib/tax-build.js +231 -0
  580. package/skills/wix-replatform/resources/rp-target-wix/lib/url-mapper-transport.js +28 -0
  581. package/skills/wix-replatform/resources/rp-target-wix/lib/value-utils.js +14 -0
  582. package/skills/wix-replatform/resources/rp-target-wix/lib/variant-correlation.js +34 -0
  583. package/skills/wix-replatform/resources/rp-target-wix/lib/wix-build.js +166 -15
  584. package/skills/wix-replatform/resources/rp-target-wix/lib/wix-target-spec.js +19 -2
  585. package/skills/wix-replatform/resources/rp-target-wix/lib/wix-writers.js +4079 -257
  586. package/skills/wix-replatform/resources/rp-target-wix/lib/write-verification.js +3 -0
  587. package/skills/wix-replatform/resources/rp-target-wix/scripts/docs-survey-sync.js +150 -0
  588. package/skills/wix-replatform/resources/rp-target-wix/scripts/domain-knowledge-validate.js +40 -2
  589. package/skills/wix-replatform/resources/rp-target-wix/scripts/verify-stores.js +6 -1
  590. package/skills/wix-replatform/resources/rp-telemetry/SKILL.md +148 -8
  591. package/skills/wix-replatform/resources/rp-telemetry/lib/bi-sink.js +83 -15
  592. package/skills/wix-replatform/resources/rp-telemetry/lib/telemetry-recorder.js +1119 -215
  593. package/skills/wix-replatform/resources/rp-telemetry/lib/transcript-digest.js +318 -0
  594. package/skills/wix-replatform/resources/rp-telemetry/scripts/meter-from-audit.js +2 -2
  595. package/skills/wix-replatform/resources/rp-telemetry/scripts/rp-telemetry.js +106 -4
  596. package/skills/wix-replatform/resources/rp-website-continuation/SKILL.md +94 -0
  597. package/skills/wix-replatform/scripts/census-reconciliation.js +25 -0
  598. package/skills/wix-replatform/scripts/cms-fallback.js +89 -0
  599. package/skills/wix-replatform/scripts/discovered-census.js +26 -0
  600. package/skills/wix-replatform/scripts/discovered-set-status.js +33 -0
  601. package/skills/wix-replatform/scripts/entity-qa-attestation.js +130 -0
  602. package/skills/wix-replatform/scripts/execution-health-check.js +415 -0
  603. package/skills/wix-replatform/scripts/execution-manifest-validate.js +1 -1
  604. package/skills/wix-replatform/scripts/execution-state-prepare.js +1 -1
  605. package/skills/wix-replatform/scripts/expectations-ledger.js +44 -0
  606. package/skills/wix-replatform/scripts/import-contract-verify.js +183 -0
  607. package/skills/wix-replatform/scripts/internal-link-audit.js +90 -0
  608. package/skills/wix-replatform/scripts/item-seo-tags-verify.js +205 -0
  609. package/skills/wix-replatform/scripts/migration-completion.js +76 -0
  610. package/skills/wix-replatform/scripts/orchestration-preflight.js +21 -2
  611. package/skills/wix-replatform/scripts/orchestration-route.js +32 -1
  612. package/skills/wix-replatform/scripts/orchestration-state.js +146 -10
  613. package/skills/wix-replatform/scripts/read-back-gate.js +175 -0
  614. package/skills/wix-replatform/scripts/replatform-console.js +146 -0
  615. package/skills/wix-replatform/scripts/replatform.js +436 -0
  616. package/skills/wix-replatform/scripts/source-secrets.js +77 -0
  617. package/skills/wix-replatform/scripts/url-redirects.js +286 -0
  618. package/skills/wix-replatform/scripts/user-action.js +58 -0
  619. package/skills/wix-replatform/scripts/website-handoff-generate.js +64 -0
  620. package/skills/wix-replatform/scripts/wix-dashboard-url.js +54 -0
  621. package/skills/wix-replatform/scripts/wix-destination.js +143 -0
  622. package/skills/wix-replatform/scripts/wix-headless-scaffold.js +762 -0
  623. package/skills/wix-vibe-headless/SKILL.md +7 -3
  624. package/skills/wix-vibe-headless/install/deploy.cjs +61 -34
  625. package/skills/wix-vibe-headless/platforms/base44.md +1 -0
  626. package/skills/wix-vibe-headless/references/donations/INSTRUCTIONS.md +88 -0
  627. package/skills/wix-vibe-headless/references/donations/app/rest/wix-donations.js +112 -0
  628. package/skills/wix-vibe-headless/references/donations/seed/SEED.md +11 -0
  629. package/skills/wix-vibe-headless/references/donations/tests/donations.test.mjs +258 -0
  630. package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +5 -2
  631. package/skills/wix-vibe-headless/references/restaurants/app/context/OrderCartContext.jsx +4 -1
  632. package/skills/wix-vibe-headless/references/restaurants/app/rest/wix-restaurants-ordering.js +67 -3
  633. package/skills/wix-vibe-headless/references/shared/app/rest/wix-client.js +4 -3
  634. package/skills/wix-manage/references/custom-apps/use-app-skills-and-app-tools.md +0 -208
  635. package/skills/wix-replatform/resources/rp-target-wix/SPEC-product-reviews-and-blog-authorship.md +0 -330
@@ -0,0 +1,43 @@
1
+ export function round(value, precision = 3) {
2
+ const factor = 10 ** precision;
3
+ return Math.round(Number(value || 0) * factor) / factor;
4
+ }
5
+
6
+ export function normalizedRect(rect, frame) {
7
+ if (!rect || !frame) return null;
8
+ return {
9
+ x: round((Number(rect.left ?? rect.x) - Number(frame.left ?? frame.x ?? 0)) / Math.max(Number(frame.width), 1)),
10
+ y: round((Number(rect.top ?? rect.y) - Number(frame.top ?? frame.y ?? 0)) / Math.max(Number(frame.height), 1)),
11
+ width: round(Number(rect.width) / Math.max(Number(frame.width), 1)),
12
+ height: round(Number(rect.height) / Math.max(Number(frame.height), 1)),
13
+ };
14
+ }
15
+
16
+ export function placementFor(rect) {
17
+ if (!rect) return "center";
18
+ const centerX = Number(rect.x) + (Number(rect.width) / 2);
19
+ const centerY = Number(rect.y) + (Number(rect.height) / 2);
20
+ const horizontal = centerX < 0.38 ? "left" : centerX > 0.62 ? "right" : "center";
21
+ const vertical = centerY < 0.38 ? "top" : centerY > 0.62 ? "bottom" : "center";
22
+ return vertical === "center" && horizontal === "center" ? "center" : `${vertical}-${horizontal}`;
23
+ }
24
+
25
+ export function overlapRatio(first, second) {
26
+ if (!first || !second) return 0;
27
+ const left = Math.max(first.x, second.x);
28
+ const top = Math.max(first.y, second.y);
29
+ const right = Math.min(first.x + first.width, second.x + second.width);
30
+ const bottom = Math.min(first.y + first.height, second.y + second.height);
31
+ if (right <= left || bottom <= top) return 0;
32
+ const intersection = (right - left) * (bottom - top);
33
+ return round(intersection / Math.max(Math.min(first.width * first.height, second.width * second.height), 0.0001));
34
+ }
35
+
36
+ export function horizontalRelation(first, second) {
37
+ if (!first || !second) return "unknown";
38
+ const gap = 0.025;
39
+ if (first.x + first.width + gap <= second.x) return "before";
40
+ if (second.x + second.width + gap <= first.x) return "after";
41
+ return "overlap";
42
+ }
43
+
@@ -0,0 +1,18 @@
1
+ export const LAYOUT_VOCABULARY_VERSION = 2;
2
+
3
+ export const VOCABULARY = Object.freeze({
4
+ composition: ["layered-overlay", "split", "stack", "grid", "rail", "scroll-narrative", "freeform"],
5
+ canvasWidth: ["full-bleed", "bounded"],
6
+ canvasHeight: ["viewport", "content", "fixed-ratio", "scroll-driven"],
7
+ backgroundKind: ["none", "color", "gradient", "image", "video", "composite"],
8
+ container: ["full", "bounded"],
9
+ regionRole: ["heading", "body-copy", "media", "action", "tabs", "tab", "navigation", "content"],
10
+ placement: [
11
+ "top-left", "top-center", "top-right",
12
+ "center-left", "center", "center-right",
13
+ "bottom-left", "bottom-center", "bottom-right",
14
+ ],
15
+ layerRole: ["base", "media", "scrim", "decoration", "content"],
16
+ mediaFit: ["cover", "contain", "fill", "natural"],
17
+ textWrapPolicy: ["single-line", "wrapped", "clipped-or-overflowing"],
18
+ });
@@ -0,0 +1,64 @@
1
+ /* @generated-source wix-headless-replatform */
2
+ /* Identity-neutral layout and motion primitives. Source tokens always win. */
3
+
4
+ [data-rp-layout="horizontal-card-rail"] [data-rp-track],
5
+ [data-rp-layout="card-grid"] {
6
+ align-items: stretch;
7
+ }
8
+
9
+ [data-rp-equal-height="true"] [data-rp-item] {
10
+ height: var(--rp-item-block-size);
11
+ min-height: var(--rp-item-block-size);
12
+ max-height: var(--rp-item-block-size);
13
+ }
14
+
15
+ [data-rp-item] [data-rp-media] {
16
+ min-width: 0;
17
+ overflow: hidden;
18
+ }
19
+
20
+ [data-rp-item] [data-rp-media] > :is(img, video, iframe) {
21
+ display: block;
22
+ width: 100%;
23
+ height: 100%;
24
+ object-fit: cover;
25
+ }
26
+
27
+ [data-rp-item] [data-rp-body] {
28
+ display: flex;
29
+ min-width: 0;
30
+ min-height: 0;
31
+ flex: 1 1 auto;
32
+ flex-direction: column;
33
+ }
34
+
35
+ [data-rp-item] [data-rp-action] {
36
+ margin-block-start: auto;
37
+ }
38
+
39
+ [data-rp-motion="micro"] {
40
+ transition-duration: var(--rp-micro-duration, 180ms);
41
+ transition-timing-function: var(--rp-motion-easing, cubic-bezier(0.2, 0, 0, 1));
42
+ }
43
+
44
+ [data-rp-motion="state"] {
45
+ transition-duration: var(--rp-state-duration, 360ms);
46
+ transition-timing-function: var(--rp-motion-easing, cubic-bezier(0.2, 0, 0, 1));
47
+ }
48
+
49
+ [data-rp-layout] :focus-visible {
50
+ outline: 2px solid currentColor;
51
+ outline-offset: 3px;
52
+ }
53
+
54
+ @media (prefers-reduced-motion: reduce) {
55
+ [data-rp-motion],
56
+ [data-rp-layout] *,
57
+ [data-rp-layout] *::before,
58
+ [data-rp-layout] *::after {
59
+ scroll-behavior: auto !important;
60
+ transition-duration: 0.01ms !important;
61
+ animation-duration: 0.01ms !important;
62
+ animation-iteration-count: 1 !important;
63
+ }
64
+ }
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env node
2
+ import { readFile, writeFile } from "node:fs/promises";
3
+ import { parseArgs } from "./lib/common.mjs";
4
+
5
+ async function main() {
6
+ const args = parseArgs();
7
+ const file = args._[0] || args.file;
8
+ if (!file) throw new Error("Usage: optimize-svg.mjs <file.svg>");
9
+ const optimized = await optimizeSvg(await readFile(file, "utf8"));
10
+ if (args.stdout) process.stdout.write(optimized);
11
+ else await writeFile(args.out || file, optimized, "utf8");
12
+ }
13
+
14
+ export async function optimizeSvg(svg) {
15
+ try {
16
+ const { optimize } = await import("svgo");
17
+ return optimize(svg, { multipass: true }).data;
18
+ } catch {
19
+ return svg
20
+ .replace(/<!--[\s\S]*?-->/g, "")
21
+ .replace(/>\s+</g, "><")
22
+ .trim();
23
+ }
24
+ }
25
+
26
+ if (import.meta.url === `file://${process.argv[1]}`) {
27
+ main().catch((error) => {
28
+ console.error(error.stack || error.message);
29
+ process.exit(1);
30
+ });
31
+ }
@@ -0,0 +1,358 @@
1
+ #!/usr/bin/env node
2
+ import path from "node:path";
3
+ import { readdir, readFile, rm } from "node:fs/promises";
4
+ import {
5
+ docsDir,
6
+ ensureDir,
7
+ isAssetLikeUrl,
8
+ normalizeUrl,
9
+ parseArgs,
10
+ readJson,
11
+ resolveOutputDir,
12
+ slugForUrl,
13
+ writeJson,
14
+ writeText,
15
+ } from "./lib/common.mjs";
16
+ import { ensureBrowserExtractionReady } from "./lib/browser-tooling.mjs";
17
+ import { extractPage } from "./extract-page.mjs";
18
+ import { extractAssets } from "./extract-assets.mjs";
19
+ import { extractInteractions } from "./extract-interactions.mjs";
20
+ import { extractSeoForUrl } from "./extract-seo.mjs";
21
+ import { extractDesignSystem } from "./extract-design-system.mjs";
22
+ import { generateSceneContract } from "./generate-scene-contract.mjs";
23
+ import { generateControlStateContract } from "./generate-control-state-contract.mjs";
24
+ import { generateVisualAssets } from "./generate-visual-assets.mjs";
25
+ import { generateLayoutBlueprint } from "./generate-layout-blueprint.mjs";
26
+ import { generateUiNormalization } from "./generate-ui-normalization.mjs";
27
+ import { analyzeGapEvidence, renderGapAnalysisMarkdown, renderGapFixPlan } from "./lib/gap-analysis.mjs";
28
+
29
+ export const MAX_GAP_CYCLES = 5;
30
+
31
+ async function main() {
32
+ const args = parseArgs();
33
+ const sourceUrl = normalizeUrl(args._[0] || args.url).toString();
34
+ const resultUrlValue = args["result-url"] || args["clone-url"];
35
+ if (!resultUrlValue) throw new Error("Missing --result-url for the running clone, for example http://localhost:4321/");
36
+ const paths = String(args.paths || "").split(",").map((value) => value.trim()).filter(Boolean);
37
+ const outputDir = resolveOutputDir(sourceUrl, args.out);
38
+ const report = await runPostBuildGap({
39
+ sourceUrl,
40
+ resultUrl: normalizeUrl(resultUrlValue).toString(),
41
+ outputDir,
42
+ screenshots: args.screenshots !== "false",
43
+ designExtractor: args["design-extractor"],
44
+ paths,
45
+ });
46
+ if (args.json) process.stdout.write(`${JSON.stringify(report, null, 2)}\n`);
47
+ else console.log(`[gap-analysis] iteration ${String(report.iteration).padStart(3, "0")}: score ${report.summary.score}/100, ${report.summary.blockingCount} blocking gap(s), visual review ${report.visualReview.status}`);
48
+ }
49
+
50
+ export async function runPostBuildGap({ sourceUrl, resultUrl, outputDir, screenshots = true, designExtractor, browserTooling, paths = [] } = {}) {
51
+ if (!sourceUrl || !resultUrl || !outputDir) throw new Error("sourceUrl, resultUrl, and outputDir are required");
52
+ const canonicalDocs = docsDir(outputDir);
53
+ const frozenSource = await loadFrozenSourceEvidence(canonicalDocs);
54
+ const canonicalSourceMap = sanitizeSourceMap(frozenSource.evidence.sourceMap);
55
+ const sourceMap = structuredClone(canonicalSourceMap);
56
+ const selectedPaths = [...new Set(paths.map((value) => new URL(value, sourceUrl).pathname.replace(/\/$/, "") || "/"))];
57
+ if (selectedPaths.length) {
58
+ sourceMap.pages = (sourceMap.pages || []).filter((page) => selectedPaths.includes(new URL(page.url).pathname.replace(/\/$/, "") || "/"));
59
+ if (!sourceMap.pages.length) throw new Error(`No source-map pages matched --paths ${selectedPaths.join(", ")}`);
60
+ }
61
+ const gapRoot = path.join(canonicalDocs, "gap-analysis");
62
+ const previousReport = await readPreviousReport(gapRoot);
63
+ const iteration = await nextIteration(gapRoot);
64
+ const iterationDir = path.join(gapRoot, "iterations", String(iteration).padStart(3, "0"));
65
+ const resultOutputDir = path.join(iterationDir, "result-extraction");
66
+ const sourceEvidence = frozenSource.evidence;
67
+ sourceEvidence.sourceMap = sourceMap;
68
+ const sourceEvidenceReference = {
69
+ root: frozenSource.extractionDir,
70
+ fingerprint: frozenSource.manifest.manifestHash,
71
+ mode: "frozen-manifest-reference",
72
+ };
73
+ await ensureDir(iterationDir);
74
+ await writeJson(path.join(iterationDir, "iteration-manifest.json"), {
75
+ iteration,
76
+ sourceUrl,
77
+ resultUrl,
78
+ paths: selectedPaths,
79
+ sourceEvidence: sourceEvidenceReference,
80
+ status: "extracting",
81
+ startedAt: new Date().toISOString(),
82
+ });
83
+
84
+ const tooling = browserTooling || await ensureBrowserExtractionReady({ startDir: process.cwd() });
85
+ const resultEvidence = await extractResultEvidence({
86
+ sourceMap,
87
+ sourceUrl,
88
+ resultUrl,
89
+ resultOutputDir,
90
+ screenshots,
91
+ designExtractor: designExtractor || sourceMap.designExtraction?.selectedExtractor || "auto",
92
+ browserTooling: tooling,
93
+ });
94
+ await attachScreenshotMetadata(sourceEvidence);
95
+ await attachScreenshotMetadata(resultEvidence);
96
+ const report = analyzeGapEvidence({ source: sourceEvidence, result: resultEvidence, iteration });
97
+ report.sourceEvidence = sourceEvidenceReference;
98
+ report.visualProgress = buildVisualProgressRequirement({ previousReport, report });
99
+ report.paths = {
100
+ iterationDir,
101
+ sourceEvidence: canonicalDocs,
102
+ resultExtraction: docsDir(resultOutputDir),
103
+ reportJson: path.join(iterationDir, "gap-analysis.json"),
104
+ reportMarkdown: path.join(iterationDir, "gap-analysis.md"),
105
+ fixPlan: path.join(iterationDir, "gap-fix-plan.md"),
106
+ visualProgress: path.join(iterationDir, "visual-progress.json"),
107
+ };
108
+ if (report.visualProgress.required) await writeJson(report.paths.visualProgress, visualProgressTemplate({ report, previousReport }));
109
+ await writeJson(report.paths.reportJson, report);
110
+ await writeText(report.paths.reportMarkdown, renderGapAnalysisMarkdown(report));
111
+ await writeText(report.paths.fixPlan, renderGapFixPlan(report));
112
+ await writeJson(path.join(gapRoot, "latest.json"), report);
113
+ await writeText(path.join(gapRoot, "latest.md"), renderGapAnalysisMarkdown(report));
114
+ await writeJson(path.join(iterationDir, "iteration-manifest.json"), {
115
+ iteration,
116
+ sourceUrl,
117
+ resultUrl,
118
+ status: "comparison-complete-visual-review-pending",
119
+ startedAt: report.generatedAt,
120
+ completedAt: new Date().toISOString(),
121
+ score: report.summary.score,
122
+ blockingCount: report.summary.blockingCount,
123
+ sourceEvidence: sourceEvidenceReference,
124
+ visualProgress: report.visualProgress,
125
+ });
126
+ return report;
127
+ }
128
+
129
+ async function extractResultEvidence({ sourceMap, sourceUrl, resultUrl, resultOutputDir, screenshots, designExtractor, browserTooling }) {
130
+ await rm(resultOutputDir, { recursive: true, force: true });
131
+ const resultDocs = docsDir(resultOutputDir);
132
+ const pagesDir = path.join(resultDocs, "pages");
133
+ const screenshotsDir = path.join(resultDocs, "screenshots");
134
+ await ensureDir(pagesDir);
135
+ const pages = [];
136
+ for (const [index, sourcePage] of (sourceMap.pages || []).entries()) {
137
+ const comparisonPath = pagePath(sourcePage.url, sourceUrl, index);
138
+ const targetUrl = resultPageUrl(resultUrl, comparisonPath);
139
+ console.log(`[gap-analysis] extracting result page ${targetUrl}`);
140
+ const page = await extractPage(targetUrl, {
141
+ outputDir: resultOutputDir,
142
+ screenshots,
143
+ browserTooling,
144
+ screenshotDir: screenshotsDir,
145
+ screenshotPrefix: "result",
146
+ });
147
+ page.comparisonPath = comparisonPath;
148
+ page.sourceComparisonUrl = sourcePage.url;
149
+ pages.push(page);
150
+ await writeJson(path.join(pagesDir, `${String(index + 1).padStart(3, "0")}-${slugForUrl(targetUrl)}.json`), page);
151
+ }
152
+
153
+ const [seo, assets] = await Promise.all([
154
+ extractSeoForUrl(resultUrl),
155
+ extractAssets(resultUrl, { outputDir: resultOutputDir, download: false }),
156
+ ]);
157
+ await writeJson(path.join(resultDocs, "seo.json"), seo);
158
+ await writeJson(path.join(resultDocs, "assets.json"), assets);
159
+ await writeJson(path.join(resultDocs, "fonts.json"), assets.fonts);
160
+
161
+ const interactionMap = await extractInteractions(resultUrl, { outputDir: resultOutputDir, pages, browserTooling });
162
+ const enrichedPages = interactionMap.pages?.length ? interactionMap.pages : pages;
163
+ for (const page of enrichedPages) page.comparisonPath ||= pagePath(page.sourceComparisonUrl || page.url, sourceUrl);
164
+ await writeJson(path.join(resultDocs, "interaction-map.json"), interactionMap);
165
+ const resultMap = {
166
+ sourceUrl: resultUrl,
167
+ comparisonSourceUrl: sourceUrl,
168
+ normalizedAt: new Date().toISOString(),
169
+ scope: sourceMap.scope,
170
+ pages: enrichedPages,
171
+ assets: assets.assets,
172
+ fonts: { families: assets.fonts?.families || [], faceCount: assets.fonts?.faces?.length || 0 },
173
+ interactions: interactionMap.summary || {},
174
+ seo,
175
+ tokens: {},
176
+ extractionRole: "post-build-result",
177
+ };
178
+ await writeJson(path.join(resultDocs, "source-map.json"), resultMap);
179
+
180
+ console.log("[gap-analysis] extracting result design system and derived contracts");
181
+ const designSystem = await extractDesignSystem({ sourceUrl: resultUrl, outputDir: resultOutputDir, extractor: designExtractor, browserTooling });
182
+ resultMap.tokens = designSystem.tokens;
183
+ resultMap.designExtraction = {
184
+ selectedExtractor: designSystem.selectedExtractor,
185
+ actualExtractor: designSystem.actualExtractor || designSystem.extractor,
186
+ fallbackReason: designSystem.fallbackReason,
187
+ };
188
+ await writeJson(path.join(resultDocs, "tokens.json"), designSystem.tokens);
189
+ await writeJson(path.join(resultDocs, "source-map.json"), resultMap);
190
+ const sceneContract = await generateSceneContract({ outputDir: resultOutputDir, pages: enrichedPages, interactionMap });
191
+ await generateControlStateContract({ outputDir: resultOutputDir, interactionMap });
192
+ await generateVisualAssets({ outputDir: resultOutputDir, pages: enrichedPages, assets });
193
+ const layoutBlueprint = await generateLayoutBlueprint({ outputDir: resultOutputDir, pages: enrichedPages, interactionMap, sceneContract });
194
+ await generateUiNormalization({ outputDir: resultOutputDir, pages: enrichedPages, interactionMap, sceneContract, layoutBlueprint });
195
+ return loadEvidence(resultDocs);
196
+ }
197
+
198
+ async function readPreviousReport(gapRoot) {
199
+ try { return await readJson(path.join(gapRoot, "latest.json")); } catch { return null; }
200
+ }
201
+
202
+ function buildVisualProgressRequirement({ previousReport, report }) {
203
+ const previousBlocking = (previousReport?.findings || []).filter((finding) => ["critical", "high"].includes(finding.severity) && finding.status !== "resolved" && finding.status !== "accepted");
204
+ return {
205
+ required: previousBlocking.length > 0,
206
+ status: previousBlocking.length ? "pending" : "not-applicable",
207
+ previousIteration: previousBlocking.length ? previousReport.iteration : null,
208
+ previousReportPath: previousBlocking.length ? previousReport.paths?.reportJson || null : null,
209
+ previousBlockingFindingIds: previousBlocking.map((finding) => finding.id),
210
+ instructions: "For every prior blocking finding, record a named target section and exact source, before-result, and after-result screenshots. A claimed resolution requires verdict improved.",
211
+ };
212
+ }
213
+
214
+ function visualProgressTemplate({ report, previousReport }) {
215
+ const prior = report.visualProgress.previousBlockingFindingIds;
216
+ const pairs = new Map((report.screenshotPairs || []).map((pair) => [pair.id, pair]));
217
+ const priorPairs = new Map((previousReport?.screenshotPairs || []).map((pair) => [pair.id, pair]));
218
+ return {
219
+ entries: prior.map((findingId) => ({
220
+ priorFindingId: findingId,
221
+ target: "Name the affected section or interaction state.",
222
+ pairId: "Choose the matching screenshot pair ID.",
223
+ sourceScreenshotPath: "Copy the source path for that pair.",
224
+ beforeResultScreenshotPath: "Copy the result path from the prior iteration for that pair.",
225
+ afterResultScreenshotPath: "Copy the result path from this iteration for that pair.",
226
+ beforeObservation: "Describe the visible pre-fix mismatch.",
227
+ afterObservation: "Describe what is visibly closer, unchanged, or worse.",
228
+ verdict: "improved",
229
+ evidence: "State the visible relationship being judged; do not cite only a score or code change.",
230
+ })),
231
+ _templateNote: `Use the source and before/after paths from the matching pair. Current pair IDs: ${[...pairs.keys()].join(", ") || "none"}. Prior pair IDs: ${[...priorPairs.keys()].join(", ") || "available in the prior report"}.`,
232
+ };
233
+ }
234
+
235
+ function sanitizeSourceMap(sourceMap) {
236
+ const sanitized = structuredClone(sourceMap || {});
237
+ const pages = Array.isArray(sanitized.pages) ? sanitized.pages : [];
238
+ sanitized.pages = pages.filter((page) => page?.url && !isAssetLikeUrl(page.url));
239
+ return sanitized;
240
+ }
241
+
242
+ async function loadEvidence(dir) {
243
+ const read = async (name, fallback) => {
244
+ try { return await readJson(path.join(dir, name)); } catch { return fallback; }
245
+ };
246
+ return {
247
+ root: dir,
248
+ sourceMap: await read("source-map.json", { pages: [] }),
249
+ assets: await read("assets.json", { assets: [] }),
250
+ seo: await read("seo.json", {}),
251
+ interactionMap: await read("interaction-map.json", { interactions: [] }),
252
+ sceneContract: await read("scene-contract.json", { scenes: [] }),
253
+ controlStateContract: await read("control-state-contract.json", { controls: [] }),
254
+ visualAssets: await read("visual-assets.json", { logos: [], icons: [] }),
255
+ layoutBlueprint: await read("layout-blueprint.json", { pages: [] }),
256
+ uiNormalization: await read("ui-normalization.json", { sections: [] }),
257
+ tokens: await read("tokens.json", {}),
258
+ };
259
+ }
260
+
261
+ async function loadFrozenSourceEvidence(canonicalDocs) {
262
+ const latest = await readJson(path.join(canonicalDocs, "extraction", "latest.json"));
263
+ const extractionDir = path.join(canonicalDocs, "extraction", latest.captureId);
264
+ const manifest = await readJson(path.join(extractionDir, "extraction-manifest.json"));
265
+ if (manifest.manifestHash !== latest.manifestHash) throw new Error("Frozen source manifest does not match extraction/latest.json");
266
+ const observations = path.join(extractionDir, "observations");
267
+ const page = await readJson(path.join(observations, "page.json"));
268
+ page.screenshots = Object.fromEntries(Object.entries(page.screenshots || {}).map(([viewport, filePath]) => [
269
+ viewport,
270
+ path.isAbsolute(filePath) ? filePath : path.join(observations, filePath),
271
+ ]));
272
+ const read = async (name, fallback) => {
273
+ try { return await readJson(path.join(observations, name)); } catch { return fallback; }
274
+ };
275
+ const seo = await read("seo.json", {});
276
+ const tokens = await read("tokens.json", {});
277
+ return {
278
+ extractionDir,
279
+ manifest,
280
+ evidence: {
281
+ root: extractionDir,
282
+ sourceMap: {
283
+ sourceUrl: page.url,
284
+ scope: "home",
285
+ pages: [page],
286
+ seo,
287
+ tokens,
288
+ designExtraction: tokens.extraction || {},
289
+ },
290
+ assets: await read("assets.json", { assets: [] }),
291
+ seo,
292
+ interactionMap: await read("interaction-map.json", { interactions: [] }),
293
+ sceneContract: await read("scene-contract.json", { scenes: [] }),
294
+ controlStateContract: await read("control-state-contract.json", { controls: [] }),
295
+ visualAssets: await read("visual-assets.json", { logos: [], icons: [] }),
296
+ layoutBlueprint: await read("layout-blueprint.json", { pages: [] }),
297
+ uiNormalization: await read("ui-normalization.json", { sections: [] }),
298
+ tokens,
299
+ },
300
+ };
301
+ }
302
+
303
+ async function attachScreenshotMetadata(evidence) {
304
+ for (const page of evidence.sourceMap.pages || []) {
305
+ page.screenshotMetadata = {};
306
+ for (const [viewport, filePath] of Object.entries(page.screenshots || {})) {
307
+ const metadata = await pngMetadata(filePath);
308
+ if (metadata) page.screenshotMetadata[viewport] = metadata;
309
+ }
310
+ }
311
+ }
312
+
313
+ async function pngMetadata(filePath) {
314
+ try {
315
+ const buffer = await readFile(filePath);
316
+ if (buffer.length < 24 || buffer.toString("hex", 0, 8) !== "89504e470d0a1a0a") return null;
317
+ return { width: buffer.readUInt32BE(16), height: buffer.readUInt32BE(20), bytes: buffer.length };
318
+ } catch {
319
+ return null;
320
+ }
321
+ }
322
+
323
+ async function nextIteration(gapRoot) {
324
+ try {
325
+ const names = await readdir(path.join(gapRoot, "iterations"));
326
+ const numbers = names.map((name) => Number(name)).filter(Number.isInteger);
327
+ const next = Math.max(0, ...numbers) + 1;
328
+ if (next > MAX_GAP_CYCLES) throw new Error(`Maximum of ${MAX_GAP_CYCLES} visual gap cycles reached; finalize the reviewed final iteration as done_with_gaps when blockers remain.`);
329
+ return next;
330
+ } catch (error) {
331
+ if (error?.code !== "ENOENT") throw error;
332
+ return 1;
333
+ }
334
+ }
335
+
336
+ function pagePath(pageUrl, sourceUrl, fallbackIndex = 0) {
337
+ try {
338
+ const page = new URL(pageUrl, sourceUrl);
339
+ return page.pathname || "/";
340
+ } catch {
341
+ return fallbackIndex ? `/page-${fallbackIndex + 1}` : "/";
342
+ }
343
+ }
344
+
345
+ function resultPageUrl(resultUrl, pathname) {
346
+ const target = new URL(resultUrl);
347
+ target.pathname = pathname || "/";
348
+ target.search = "";
349
+ target.hash = "";
350
+ return target.toString();
351
+ }
352
+
353
+ if (import.meta.url === `file://${process.argv[1]}`) {
354
+ main().catch((error) => {
355
+ console.error(error.stack || error.message);
356
+ process.exit(1);
357
+ });
358
+ }
@@ -0,0 +1,25 @@
1
+ import path from "node:path";
2
+ import { readFile } from "node:fs/promises";
3
+ import { parseArgs } from "./lib/common.mjs";
4
+
5
+ const API = "https://www.wixapis.com";
6
+ async function main() {
7
+ const args = parseArgs(); if (!args.out) throw new Error("--out is required");
8
+ const plan = JSON.parse(await readFile(path.join(args.out, "docs", "site-clone", "repeater-cms.json"), "utf8"));
9
+ if (!args.execute) return console.log(JSON.stringify({ dryRun: true, collections: plan.collections.map((c) => ({ id: c.id, rows: c.items.length })) }, null, 2));
10
+ const token = process.env.WIX_AUTH_TOKEN; const siteId = process.env.WIX_SITE_ID;
11
+ if (!token || !siteId) throw new Error("--execute requires WIX_AUTH_TOKEN and WIX_SITE_ID");
12
+ for (const collection of plan.collections) {
13
+ const definition = { id: collection.id, displayName: collection.displayName, fields: fields(), permissions: permissions() };
14
+ const created = await send("/wix-data/v2/collections", { collection: definition }, token, siteId, [409]);
15
+ const existing = created?.collection || (await send(`/wix-data/v2/collections/${collection.id}`, undefined, token, siteId, [], "GET"))?.collection;
16
+ const collectionId = existing?.id || existing?._id || collection.id;
17
+ if (existing) await send("/wix-data/v2/collections", { collection: { ...existing, permissions: permissions() } }, token, siteId, [], "PUT");
18
+ await send("/wix-data/v1/permissions", { dataCollectionId: collectionId, dataPermissions: { id: collectionId, itemRead: "ANYONE", itemInsert: "PRIVILEGED", itemUpdate: "PRIVILEGED", itemRemove: "PRIVILEGED" } }, token, siteId);
19
+ for (const data of collection.items) await send("/wix-data/v2/items", { dataCollectionId: collectionId, dataItem: { id: data.sourceKey, data: { ...data, _id: data.sourceKey } } }, token, siteId, [409]);
20
+ }
21
+ }
22
+ function fields() { return [["sourceKey","TEXT"],["label","TEXT"],["body","TEXT"],["imagesJson","TEXT"],["linksJson","TEXT"],["sortOrder","NUMBER"],["initialExpanded","BOOLEAN"],["itemStructure","TEXT"]].map(([key,type]) => ({ key, displayName: key, type })); }
23
+ function permissions() { return { read: "ANYONE", insert: "ADMIN", update: "ADMIN", remove: "ADMIN" }; }
24
+ async function send(endpoint, body, token, siteId, allowed = [], method = "POST") { const value = String(token).trim(); const authorization = /^Bearer\s/i.test(value) || /^IST\./.test(value) ? value : `Bearer ${value}`; const res = await fetch(`${API}${endpoint}`, { method, headers: { Authorization: authorization, "wix-site-id": siteId, "Content-Type": "application/json" }, ...(body === undefined ? {} : { body: JSON.stringify(body) }) }); if (!res.ok && !allowed.includes(res.status)) throw new Error(`${endpoint}: ${res.status} ${await res.text()}`); return res.ok ? res.json() : null; }
25
+ main().catch((error) => { console.error(error.stack || error.message); process.exit(1); });
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env node
2
+ import path from "node:path";
3
+ import { docsDir, parseArgs, readJson, writeJson } from "./lib/common.mjs";
4
+ import { finalizeExtractionReport } from "./finalize-extraction-report.mjs";
5
+
6
+ export const GAP_DECISIONS = new Set(["accept-as-is", "retry-or-fix", "provide-material", "replace", "omit", "leave-unresolved"]);
7
+
8
+ export async function recordGapDecision({ outputDir, gapId, decision, note = "", materialRefs = [] }) {
9
+ if (!gapId) throw new Error("gapId is required");
10
+ if (!GAP_DECISIONS.has(decision)) throw new Error(`Unsupported gap decision: ${decision}`);
11
+ const docs = docsDir(outputDir);
12
+ const latest = await readJson(path.join(docs, "extraction", "latest.json"));
13
+ const gaps = await readJson(path.join(docs, "extraction", latest.captureId, "extraction-gaps.json"));
14
+ if (!(gaps.gaps || []).some((gap) => gap.id === gapId)) throw new Error(`Unknown extraction gap: ${gapId}`);
15
+ const decisionPath = path.join(docs, "gap-decisions.json");
16
+ let artifact;
17
+ try { artifact = await readJson(decisionPath); } catch { artifact = { schemaVersion: "0083.1", manifestHash: latest.manifestHash, decisions: [] }; }
18
+ if (artifact.manifestHash !== latest.manifestHash) throw new Error("Gap decisions belong to a stale frozen manifest; review the current final report first");
19
+ const record = { gapId, decision, note, materialRefs };
20
+ artifact.decisions = [...artifact.decisions.filter((item) => item.gapId !== gapId), record].sort((a, b) => a.gapId.localeCompare(b.gapId));
21
+ await writeJson(decisionPath, artifact);
22
+ const report = await finalizeExtractionReport({ outputDir });
23
+ return { decisionPath, record, finalStatus: report.status };
24
+ }
25
+
26
+ async function main() {
27
+ const args = parseArgs();
28
+ if (!args.out || !args.gap || !args.decision) throw new Error("--out, --gap, and --decision are required");
29
+ const materialRefs = String(args.material || "").split(",").map((item) => item.trim()).filter(Boolean);
30
+ console.log(JSON.stringify(await recordGapDecision({
31
+ outputDir: path.resolve(String(args.out)),
32
+ gapId: String(args.gap),
33
+ decision: String(args.decision),
34
+ note: String(args.note || ""),
35
+ materialRefs,
36
+ }), null, 2));
37
+ }
38
+
39
+ if (import.meta.url === `file://${process.argv[1]}`) main().catch((error) => { console.error(error.stack || error.message); process.exit(1); });