@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,415 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+
4
+ // One reusable check that answers exactly one question about a long-running
5
+ // generated script: healthy, stalled, or complete. Reads only the artifacts the progress-log and
6
+ // execution contracts already define (`execution/progress.ndjson`, `execution/completion-
7
+ // report.json`, the `state/.lock/` PID/host claim model rp-execute-import/SKILL.md already
8
+ // describes) -- it defines no new state and writes none.
9
+ //
10
+ // This does not change the progress-log format, event names, or polling contract; it is
11
+ // the "so nobody hand-rolls this per run" check layered on top of them.
12
+
13
+ const fs = require('node:fs');
14
+ const os = require('node:os');
15
+ const path = require('node:path');
16
+ const { createProgressLogger, parseProgressArgs } = require('../lib/progress-log.js');
17
+ // Note: `process.kill(pid, 0)` throwing does not
18
+ // by itself mean the process is dead -- Node surfaces the same exception for ESRCH (no such
19
+ // process) and EPERM (a real, live process this user cannot signal, e.g. owned by a different
20
+ // UID on a shared sandbox). Only ESRCH means dead. This used to be a separate copy of the same
21
+ // check duplicated from `local-state.js`'s `withStateLock` -- now shared from one place.
22
+ const { isProcessAlive } = require('../lib/local-state.js');
23
+
24
+ const DEFAULT_SCRIPT = 'run-import';
25
+ const DEFAULT_STALE_AFTER = '5m';
26
+
27
+ let progress;
28
+
29
+ function usage() {
30
+ console.error(`Usage:
31
+ node skills/wix-replatform/scripts/execution-health-check.js <projectDir> [--script <name>] [--stale-after <duration>]
32
+
33
+ Reads <projectDir>/execution/progress.ndjson (the NDJSON progress contract) and
34
+ <projectDir>/execution/completion-report.json and reports whether the named script's most
35
+ recent run is healthy, stalled, or complete. Writes no state and touches no target.
36
+
37
+ --script script id to filter progress records by (substring match against each
38
+ record's own "script" field); default "${DEFAULT_SCRIPT}"
39
+ --stale-after how old the most recent matching record may be before it counts as stale,
40
+ absent a live local process claim; default "${DEFAULT_STALE_AFTER}"
41
+ (accepts "<n>ms", "<n>s", "<n>m", "<n>h", "<n>d", or a bare millisecond
42
+ integer)
43
+ `);
44
+ }
45
+
46
+ function parseArgs(argv) {
47
+ const args = { script: DEFAULT_SCRIPT, staleAfter: DEFAULT_STALE_AFTER };
48
+ for (let i = 0; i < argv.length; i += 1) {
49
+ const token = argv[i];
50
+ if (token === '--script') {
51
+ args.script = argv[i + 1];
52
+ i += 1;
53
+ } else if (token === '--stale-after') {
54
+ args.staleAfter = argv[i + 1];
55
+ i += 1;
56
+ } else if (!args.projectDir) {
57
+ args.projectDir = token;
58
+ } else {
59
+ throw new Error(`unknown argument: ${token}`);
60
+ }
61
+ }
62
+ return args;
63
+ }
64
+
65
+ const DURATION_RE = /^(\d+(?:\.\d+)?)(ms|s|m|h|d)?$/i;
66
+ const DURATION_UNIT_MS = { ms: 1, s: 1000, m: 60000, h: 3600000, d: 86400000 };
67
+
68
+ function parseDurationMs(value) {
69
+ const match = DURATION_RE.exec(String(value === undefined ? '' : value).trim());
70
+ if (!match) {
71
+ throw new Error(`invalid --stale-after duration: ${JSON.stringify(value)} (expected e.g. "5m", "30s", "1h", or a bare millisecond integer)`);
72
+ }
73
+ const amount = Number(match[1]);
74
+ const unit = (match[2] || 'ms').toLowerCase();
75
+ return amount * DURATION_UNIT_MS[unit];
76
+ }
77
+
78
+ function readProgressRecords(progressLogPath) {
79
+ let raw;
80
+ try {
81
+ raw = fs.readFileSync(progressLogPath, 'utf8');
82
+ } catch (error) {
83
+ if (error && error.code === 'ENOENT') {
84
+ return { records: [], anyLineSeen: false };
85
+ }
86
+ throw error;
87
+ }
88
+ const records = [];
89
+ let anyLineSeen = false;
90
+ const lines = raw.split(/\r?\n/);
91
+ for (let index = 0; index < lines.length; index += 1) {
92
+ const line = lines[index].trim();
93
+ if (!line) {
94
+ continue;
95
+ }
96
+ anyLineSeen = true;
97
+ try {
98
+ records.push(JSON.parse(line));
99
+ } catch (error) {
100
+ // This used to throw and crash the WHOLE health-check on a
101
+ // single malformed/truncated line -- e.g. a generated run-import.js SIGKILLed/OOM-killed
102
+ // mid-write leaves a truncated final line in progress.ndjson. That turned the exact
103
+ // crashed-process case this tool exists to diagnose into an opaque failure (exit 1 instead
104
+ // of "stalled"), and every future poll on that project would fail the same way, since the
105
+ // append-only file is never rewritten. Skip the malformed line and keep reading: the health
106
+ // check still evaluates off the last VALID record, which is exactly what "healthy, stalled,
107
+ // or complete" needs. `local-state.js` already tolerates malformed/historical rows the same
108
+ // way on read for the same reason (see tolerateIdentifierOnlyMessage).
109
+ process.stderr.write(`warning: ${progressLogPath}:${index + 1} invalid NDJSON, skipped: ${error.message}\n`);
110
+ }
111
+ }
112
+ // `records.length === 0` alone cannot tell "the log never
113
+ // existed / has zero lines" apart from "the log has lines, but every one was malformed and
114
+ // skipped above" -- both looked identical to `checkHealth`'s `noProgressRecordsAtAll`, letting
115
+ // an all-malformed log fall through to trusting a stale, unrelated completion-report.json as
116
+ // proof of completion. `anyLineSeen` lets the caller tell the two apart.
117
+ return { records, anyLineSeen };
118
+ }
119
+
120
+ // Per the progress-log contract: `seq` is only strictly increasing WITHIN one `runId` -- a shared file can
121
+ // interleave more than one `runId`'s lines. "The current state of this script" is therefore the
122
+ // highest-`seq` record belonging to the MOST RECENT `runId` that produced a matching line, never
123
+ // the raw last line in file order and never a max `seq` compared across different `runId`s.
124
+ // "The most recent runId" used to be picked by array position --
125
+ // whichever matching record happened to be LAST IN FILE-APPEND ORDER (`matching[matching.length -
126
+ // 1].runId`), not by actual timestamp. That is racy if two processes for the same --script ever
127
+ // append to the same progress.ndjson concurrently (e.g. a health-check falsely reports "stalled"
128
+ // on a run that's actually alive, the driving agent redispatches per this file's own SKILL.md
129
+ // guidance without confirming the first process is dead, and now two processes append heartbeats
130
+ // to the same file): whichever write reaches the file last would silently win, ignoring the other
131
+ // process's later completion or crash. Every record already carries its own genuine `ts`
132
+ // (progress-log.js's `append` writes `new Date().toISOString()` on every record, never supplied
133
+ // by a caller), so pick the runId that owns the record with the latest real timestamp instead of
134
+ // trusting file position. A millisecond-exact tie between two different runIds' records is not
135
+ // disambiguated further (ISO timestamps only carry millisecond resolution) -- an acceptable
136
+ // residual limitation, not the append-order bug this closes.
137
+ function latestMatchingRecord(records, scriptFilter) {
138
+ const matching = records.filter((record) => (
139
+ record && typeof record.script === 'string' && record.script.includes(scriptFilter)
140
+ ));
141
+ if (!matching.length) {
142
+ return null;
143
+ }
144
+ const recordTimeMs = (record) => {
145
+ const parsed = Date.parse(record?.ts);
146
+ return Number.isFinite(parsed) ? parsed : -Infinity;
147
+ };
148
+ const mostRecentRunId = matching.reduce((best, record) => (
149
+ best === null || recordTimeMs(record) > recordTimeMs(best) ? record : best
150
+ ), null).runId;
151
+ const sameRun = matching.filter((record) => record.runId === mostRecentRunId);
152
+ return sameRun.reduce((best, record) => (
153
+ best === null || (Number(record.seq) || 0) > (Number(best.seq) || 0) ? record : best
154
+ ), null);
155
+ }
156
+
157
+ // Best-effort, local-machine-only liveness: reuses the SAME PID/host claim
158
+ // model `state/.lock/` already uses (see local-state.js's withStateLock and
159
+ // rp-execute-import/SKILL.md). A run driven from a different host cannot be corroborated this
160
+ // way -- staleness alone still produces a correct verdict for it.
161
+ //
162
+ // This only ever covers a process that calls `withStateLock` -- an import writer. A read-only
163
+ // script (a generated `run-extract.js`, or any future non-writing script) never acquires this
164
+ // lock even while genuinely alive, so this check alone cannot corroborate it. See
165
+ // `hasLiveRecordedPid` below for the script-agnostic complement.
166
+ // this used to treat ANY live PID claim under state/.lock/ for
167
+ // this host as proof the QUERIED script (`scriptFilter`) was alive, regardless of which
168
+ // script/writer actually holds that claim. A genuinely crashed run-import.js could be falsely
169
+ // reported healthy merely because an unrelated concurrent writer (e.g. run-extract.js) holds its
170
+ // own live claim in the same project. `local-state.js`'s `withStateLock` now writes a `script`
171
+ // field into the claim's own JSON content (defaulting to `process.argv[1]` of whichever process
172
+ // acquired it) -- require that identity to match `scriptFilter` before trusting the claim at all,
173
+ // mirroring how `hasLiveRecordedPid` below is already scoped to a specific progress record's own
174
+ // `script` field rather than any record's pid.
175
+ function hasLiveLocalProcess(projectDir, scriptFilter) {
176
+ const lockDir = path.join(projectDir, 'state', '.lock');
177
+ let entries;
178
+ try {
179
+ entries = fs.readdirSync(lockDir);
180
+ } catch (error) {
181
+ return false;
182
+ }
183
+ const host = Buffer.from(os.hostname()).toString('base64url');
184
+ for (const entry of entries) {
185
+ const match = /^([^.]+)\.(\d+)\.[a-f0-9-]+\.owner$/.exec(entry);
186
+ if (!match || match[1] !== host) {
187
+ continue;
188
+ }
189
+ let claim = null;
190
+ try {
191
+ claim = JSON.parse(fs.readFileSync(path.join(lockDir, entry), 'utf8'));
192
+ } catch (error) {
193
+ // Unreadable/malformed/removed-mid-read claim: its identity cannot be corroborated, so it
194
+ // cannot count as evidence for ANY specific script. Keep checking other claims present.
195
+ }
196
+ // A claim written before this field existed, or with no recognizable script identity, cannot
197
+ // be trusted as evidence for this specific scriptFilter either -- the whole point of this
198
+ // fix is that an uncorroborated claim must not pass as "this script is alive".
199
+ if (!claim || typeof claim.script !== 'string' || !claim.script.includes(scriptFilter)) {
200
+ continue;
201
+ }
202
+ if (isProcessAlive(Number(match[2]))) {
203
+ return true;
204
+ }
205
+ // ESRCH: that claim's process is dead; keep checking any other claim present.
206
+ }
207
+ return false;
208
+ }
209
+
210
+ // Script-agnostic complement to `hasLiveLocalProcess`: every progress-log record now carries its
211
+ // own writer's `host`/`pid` (see lib/progress-log.js), so a read-only script that never touches
212
+ // `state/.lock/` -- an extraction pass, or anything else that only reads -- can still be
213
+ // corroborated as live directly from its own most recent heartbeat, the same way an import
214
+ // writer is corroborated via its lock claim. Only trusts a pid on THIS host, same as the lock
215
+ // check.
216
+ function hasLiveRecordedPid(record) {
217
+ if (!record || typeof record.pid !== 'number' || typeof record.host !== 'string') {
218
+ return false;
219
+ }
220
+ if (record.host !== Buffer.from(os.hostname()).toString('base64url')) {
221
+ return false;
222
+ }
223
+ return isProcessAlive(record.pid);
224
+ }
225
+
226
+ // Either signal corroborates liveness: an import writer's lock claim (now scoped to the same
227
+ // scriptFilter this whole check is asked about), or (for any script, writer or read-only) its own
228
+ // most recent heartbeat's recorded pid still being alive on this host.
229
+ function hasLiveSignal(projectDir, latestRecord, scriptFilter) {
230
+ return hasLiveLocalProcess(projectDir, scriptFilter) || hasLiveRecordedPid(latestRecord);
231
+ }
232
+
233
+ function checkHealth({ projectDir, scriptFilter, staleAfterMs }) {
234
+ const completionReportPath = path.join(projectDir, 'execution', 'completion-report.json');
235
+ const progressLogPath = path.join(projectDir, 'execution', 'progress.ndjson');
236
+ const { records, anyLineSeen } = readProgressRecords(progressLogPath);
237
+ const latest = latestMatchingRecord(records, scriptFilter);
238
+ const lastEventAt = latest ? latest.ts : null;
239
+ const runId = latest ? latest.runId : null;
240
+ // A missing/unparsable `ts` used to throw here, crashing the
241
+ // whole check (exit 1) instead of producing a verdict -- the same failure mode the
242
+ // malformed-NDJSON-line fix closed for a syntactically-broken line, just left open for a
243
+ // schema-level defect (no `ts`, or one `Date.parse` can't read) in an otherwise-valid record,
244
+ // e.g. from a hand-rolled heartbeat that never went through lib/progress-log.js's `append()`.
245
+ // Treat it as "this record can't corroborate freshness" rather than fatal: `ageMs` stays null,
246
+ // which the staleness check below (`ageMs <= staleAfterMs`) cannot satisfy, so evaluation falls
247
+ // through to the live-signal checks instead of ever treating an unknown age as fresh.
248
+ let ageMs = null;
249
+ if (latest) {
250
+ const parsedAgeMs = Date.now() - Date.parse(latest.ts);
251
+ if (!Number.isNaN(parsedAgeMs)) {
252
+ ageMs = parsedAgeMs;
253
+ } else {
254
+ process.stderr.write(`warning: ${progressLogPath}: most recent matching record has an unparsable ts, treating its age as unknown: ${JSON.stringify(latest.ts)}\n`);
255
+ }
256
+ }
257
+
258
+ // A completion artifact settles the verdict regardless of progress-log staleness -- the run
259
+ // finished, so a stale-looking last heartbeat before completion is not evidence of a stall.
260
+ // But a completion report is only evidence for the run it was written for: a resumed project
261
+ // carries its PREVIOUS run's completion-report.json into the new run's entire duration (it is
262
+ // only overwritten at the new run's own end), so existence alone would falsely call an actively
263
+ // resuming run "complete" from its very first tick. Only trust it when its own recorded `runId`
264
+ // matches the most recent run this progress log has seen -- if a newer `runId` is already
265
+ // writing progress lines, the report is stale evidence of a PRIOR run, not this one.
266
+ let completionReport = null;
267
+ if (fs.existsSync(completionReportPath)) {
268
+ try {
269
+ completionReport = JSON.parse(fs.readFileSync(completionReportPath, 'utf8'));
270
+ } catch (error) {
271
+ throw new Error(`${completionReportPath}: invalid JSON: ${error.message}`);
272
+ }
273
+ }
274
+ // `runId` (from `latest`) is null in two different situations that must NOT be conflated:
275
+ // the progress log has no records at all (a legacy script never instrumented with
276
+ // heartbeats -- the completion report is the only signal there is and must be trusted), or
277
+ // the progress log has records, just none matching THIS `--script` filter (a filter/script-id
278
+ // mismatch, or a different script actively writing under a name this call isn't watching).
279
+ // Only the first case may fall back to trusting an unmatched completion report; the second
280
+ // must not, or a caller who mis-names `--script` gets a false "complete" from some unrelated
281
+ // run's leftover report instead of a "stalled"/"no signal" verdict it would actually notice.
282
+ //
283
+ // Even the first case must not trust the report BLINDLY: a resumed/fresh run can be genuinely
284
+ // alive and simply hasn't flushed its first heartbeat yet, while a stale completion-report.json
285
+ // from a wholly earlier run still sits on disk. Corroborate with the same liveness signal used
286
+ // everywhere else in this file -- if something claims to be running right now, that wins over
287
+ // an old report, exactly like the "past the staleness window but a live claim exists" branch
288
+ // below already does for the non-empty-log case.
289
+ //
290
+ // Note: a redispatched run that crashes
291
+ // before writing its first heartbeat or acquiring its lock claim is, from this file's evidence
292
+ // alone, INDISTINGUISHABLE from "a legacy script that never emits heartbeats at all" -- both
293
+ // produce zero progress records and no live signal. A runId-based heuristic was tried here and
294
+ // reverted: `tests/execution-health/execution-health-check-test.js`'s own "a legacy
295
+ // uninstrumented script's completion report is still trusted" case deliberately gives its
296
+ // completion report a real, non-null `runId` (`'legacy-run'`), so "does the report have a real
297
+ // runId" cannot separate the two cases -- it isn't a signal this file has. Closing this race
298
+ // for real needs a NEW artifact recording that a dispatch attempt started (written by the
299
+ // dispatcher before it launches the script, not by the script itself, since the crash this
300
+ // finding describes happens before the script can write anything) -- out of scope for a
301
+ // same-file fix; flagged as a known, accepted limitation rather than silently left unaddressed.
302
+ const noProgressRecordsAtAll = !anyLineSeen;
303
+ const legacyReportTrustworthy = noProgressRecordsAtAll && !hasLiveSignal(projectDir, null, scriptFilter);
304
+ if (completionReport && (legacyReportTrustworthy || (runId && completionReport.runId === runId))) {
305
+ return {
306
+ ok: true,
307
+ status: 'complete',
308
+ lastEventAt,
309
+ ageMs,
310
+ runId,
311
+ detail: `${completionReportPath} exists and matches the most recent run (${completionReport.runId})`,
312
+ };
313
+ }
314
+
315
+ if (!latest) {
316
+ // No matching heartbeat AND no (trustworthy) completion report. A live local process claim
317
+ // still corroborates "genuinely running, just hasn't flushed its first heartbeat yet" over
318
+ // "stalled" -- the same "a live claim beats an old/absent signal" rule the staleness branch
319
+ // below applies. `hasLiveRecordedPid` needs a record to check a pid against, so only the
320
+ // lock-claim signal is available here.
321
+ if (hasLiveLocalProcess(projectDir, scriptFilter)) {
322
+ return {
323
+ ok: true,
324
+ status: 'healthy',
325
+ lastEventAt: null,
326
+ ageMs: null,
327
+ runId: null,
328
+ detail: `no progress record for script matching "${scriptFilter}" in ${progressLogPath} yet, but a live local process claim was found`,
329
+ };
330
+ }
331
+ return {
332
+ ok: true,
333
+ status: 'stalled',
334
+ lastEventAt: null,
335
+ ageMs: null,
336
+ runId: null,
337
+ detail: `no progress record for script matching "${scriptFilter}" in ${progressLogPath}, and no completion report`,
338
+ };
339
+ }
340
+
341
+ if (ageMs !== null && ageMs <= staleAfterMs) {
342
+ return {
343
+ ok: true,
344
+ status: 'healthy',
345
+ lastEventAt,
346
+ ageMs,
347
+ runId,
348
+ detail: `last matching event ${ageMs}ms ago, within the ${staleAfterMs}ms staleness window`,
349
+ };
350
+ }
351
+
352
+ if (!hasLiveSignal(projectDir, latest, scriptFilter)) {
353
+ return {
354
+ ok: true,
355
+ status: 'stalled',
356
+ lastEventAt,
357
+ ageMs,
358
+ runId,
359
+ detail: `last matching event ${ageMs}ms ago, past the ${staleAfterMs}ms staleness window, and no live local process claim or recorded pid was found`,
360
+ };
361
+ }
362
+
363
+ // Older than the staleness window but a live local process claim OR the record's own recorded
364
+ // pid still claims this run: the process being alive is the stronger signal when the two
365
+ // disagree. A slow batch without a fresh heartbeat is not itself a failure.
366
+ return {
367
+ ok: true,
368
+ status: 'healthy',
369
+ lastEventAt,
370
+ ageMs,
371
+ runId,
372
+ detail: `last matching event ${ageMs}ms ago, past the ${staleAfterMs}ms staleness window, but a live local process claim or recorded pid was found`,
373
+ };
374
+ }
375
+
376
+ function main() {
377
+ const parsed = parseProgressArgs(process.argv.slice(2));
378
+ progress = createProgressLogger({
379
+ script: 'skills/wix-replatform/scripts/execution-health-check.js',
380
+ ...parsed.progress,
381
+ });
382
+ progress.start('Execution health check started', { phase: 'execution', step: 'health-check' });
383
+
384
+ const args = parseArgs(parsed.args);
385
+ if (!args.projectDir) {
386
+ usage();
387
+ throw new Error('Missing project directory');
388
+ }
389
+
390
+ const projectDir = path.resolve(args.projectDir);
391
+ const staleAfterMs = parseDurationMs(args.staleAfter);
392
+ const result = checkHealth({ projectDir, scriptFilter: args.script, staleAfterMs });
393
+
394
+ console.log(JSON.stringify(result, null, 2));
395
+ progress.complete('Execution health check completed', {
396
+ phase: 'execution',
397
+ step: 'health-check',
398
+ artifact: projectDir,
399
+ status: result.status,
400
+ });
401
+ }
402
+
403
+ try {
404
+ main();
405
+ process.exit(0);
406
+ } catch (error) {
407
+ if (progress) {
408
+ progress.error(error && error.message ? error.message : 'Execution health check failed', {
409
+ phase: 'execution',
410
+ step: 'health-check',
411
+ });
412
+ }
413
+ console.error(error && error.message ? error.message : error);
414
+ process.exit(1);
415
+ }
@@ -11,7 +11,7 @@ let progress;
11
11
  async function main() {
12
12
  const parsed = parseProgressArgs(process.argv.slice(2));
13
13
  progress = createProgressLogger({
14
- script: 'skills/replatform/scripts/execution-manifest-validate.js',
14
+ script: 'skills/wix-replatform/scripts/execution-manifest-validate.js',
15
15
  ...parsed.progress,
16
16
  });
17
17
  progress.start('Execution manifest validation started', { phase: 'validation' });
@@ -75,7 +75,7 @@ async function readMirrorRows(projectDir, specs) {
75
75
  async function main() {
76
76
  const parsed = parseProgressArgs(process.argv.slice(2));
77
77
  progress = createProgressLogger({
78
- script: 'skills/replatform/scripts/execution-state-prepare.js',
78
+ script: 'skills/wix-replatform/scripts/execution-state-prepare.js',
79
79
  ...parsed.progress,
80
80
  });
81
81
  progress.start('Execution state preparation started', { phase: 'execution', step: 'prepare-state' });
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+
4
+ const path = require('node:path');
5
+ const { appendExpectation } = require('../lib/expectations-ledger.js');
6
+ const { loadArtifacts } = require('../lib/orchestration-state.js');
7
+
8
+ function parseArgs(argv) {
9
+ const args = { artifactRef: [] };
10
+ for (let index = 0; index < argv.length; index += 1) {
11
+ const token = argv[index];
12
+ if (!token.startsWith('--')) continue;
13
+ const key = token.slice(2).replace(/-([a-z])/g, (_, char) => char.toUpperCase());
14
+ const value = argv[index + 1];
15
+ if (key === 'artifactRef') args.artifactRef.push(value);
16
+ else args[key] = value;
17
+ index += 1;
18
+ }
19
+ return args;
20
+ }
21
+
22
+ async function main() {
23
+ const args = parseArgs(process.argv.slice(2));
24
+ if (!args.projectDir || !args.expectation) {
25
+ throw new Error('Usage: expectations-ledger.js --project-dir <migration-dir> --expectation <note> [--artifact-ref <project-relative-path>]');
26
+ }
27
+ const projectDir = path.resolve(args.projectDir);
28
+ const artifacts = await loadArtifacts(projectDir);
29
+ const result = await appendExpectation(projectDir, args.expectation, {
30
+ phase: args.phase || artifacts.run?.activePhase,
31
+ state: args.state || artifacts.run?.currentState,
32
+ resource: args.resource,
33
+ source: args.source,
34
+ target: args.target,
35
+ decision: args.decision,
36
+ artifactRefs: args.artifactRef,
37
+ });
38
+ console.log(JSON.stringify({ ok: true, expectationId: result.id, file: result.file, redacted: result.redacted }, null, 2));
39
+ }
40
+
41
+ main().catch((error) => {
42
+ console.error(error.message || error);
43
+ process.exit(1);
44
+ });
@@ -0,0 +1,183 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+
4
+ // Layer 2 — the committed pre-write gate.
5
+ //
6
+ // Layer 1 is the generated entrypoint checking itself: `run-import.js` calls
7
+ // `assertGeneratedImporterContract` as the first statement of `main()`, so an operator cannot
8
+ // skip it. This is the outside check, run before the first write, that catches the importer
9
+ // which never emitted that call at all — such an importer also cannot answer `--describe`.
10
+ //
11
+ // Neither layer replaces the other. Layer 1 covers the run an operator starts directly; layer 2
12
+ // is what makes the boundary testable, because a test can spawn a real script the same way the
13
+ // suite already spawns execution-state-prepare.js.
14
+ //
15
+ // This writes no state and touches no target.
16
+
17
+ const fsSync = require('node:fs');
18
+ const path = require('node:path');
19
+ const { spawnSync } = require('node:child_process');
20
+ const { verifyPluginHandoff } = require('../lib/generated-plugin-handoff.js');
21
+ const { parseSelectionArgs } = require('../resources/rp-source-wordpress/lib/plugin-entity-read-plan.js');
22
+ const { assertGeneratedImporterContract } = require('../lib/import-recovery.js');
23
+ const { createProgressLogger, parseProgressArgs } = require('../lib/progress-log.js');
24
+
25
+ const DEFAULT_ENTRYPOINTS = ['src/import/run-import.js'];
26
+ const DESCRIBE_TIMEOUT_MS = 30000;
27
+
28
+ let progress;
29
+
30
+ function usage() {
31
+ console.error(`Usage:
32
+ node skills/wix-replatform/scripts/import-contract-verify.js <projectDir> [--entrypoint <path>]
33
+
34
+ Spawns each generated import entrypoint with --describe, parses the single JSON object it
35
+ prints, and checks it against the generated-importer contract. Exits non-zero naming every
36
+ missing selection mode and every misplaced ledger path. Writes no state, touches no target.
37
+
38
+ --entrypoint may be repeated; paths are resolved against <projectDir>. When omitted, the
39
+ conventional entrypoint ${DEFAULT_ENTRYPOINTS.join(', ')} is used.
40
+ `);
41
+ }
42
+
43
+ function parseArgs(argv) {
44
+ const args = { entrypoints: [], selection: {} };
45
+ for (let i = 0; i < argv.length; i += 1) {
46
+ const token = argv[i];
47
+ if (token === '--') {
48
+ args.selection = parseSelectionArgs(argv.slice(i + 1));
49
+ break;
50
+ } else if (token === '--extract-entrypoint') {
51
+ args.extractEntrypoint = argv[++i];
52
+ } else if (token === '--entrypoint') {
53
+ args.entrypoints.push(argv[i + 1]);
54
+ i += 1;
55
+ } else if (!args.projectDir) {
56
+ args.projectDir = token;
57
+ } else {
58
+ throw new Error(`unknown argument: ${token}`);
59
+ }
60
+ }
61
+ return args;
62
+ }
63
+
64
+ // The entrypoint prints ONE JSON object. Generated importers habitually log a banner line
65
+ // first, so take the last balanced top-level object rather than demanding a pristine stdout —
66
+ // but never guess: unparsable stdout is a gate failure, not a pass.
67
+ function parseDescriptor(stdout) {
68
+ const trimmed = String(stdout || '').trim();
69
+ if (!trimmed) {
70
+ throw new Error('printed nothing on --describe (an entrypoint that ignores --describe fails the gate)');
71
+ }
72
+ const start = trimmed.indexOf('{');
73
+ const end = trimmed.lastIndexOf('}');
74
+ if (start < 0 || end <= start) {
75
+ throw new Error(`printed no JSON object on --describe: ${trimmed.slice(0, 200)}`);
76
+ }
77
+ try {
78
+ return JSON.parse(trimmed.slice(start, end + 1));
79
+ } catch (error) {
80
+ throw new Error(`printed unparsable JSON on --describe: ${error.message}`);
81
+ }
82
+ }
83
+
84
+ function verifyEntrypoint(projectDir, relativePath) {
85
+ const absolute = path.resolve(projectDir, relativePath);
86
+ if (!fsSync.existsSync(absolute)) {
87
+ return { entrypoint: relativePath, ok: false, error: 'entrypoint not found' };
88
+ }
89
+ const described = spawnSync(process.execPath, [absolute, '--describe'], {
90
+ cwd: projectDir,
91
+ encoding: 'utf8',
92
+ timeout: DESCRIBE_TIMEOUT_MS,
93
+ });
94
+ if (described.error) {
95
+ return { entrypoint: relativePath, ok: false, error: `could not run --describe: ${described.error.message}` };
96
+ }
97
+ if (described.status !== 0) {
98
+ const detail = (described.stderr || described.stdout || '').trim().slice(0, 400);
99
+ return { entrypoint: relativePath, ok: false, error: `--describe exited ${described.status}: ${detail}` };
100
+ }
101
+ let descriptor;
102
+ try {
103
+ descriptor = parseDescriptor(described.stdout);
104
+ } catch (error) {
105
+ return { entrypoint: relativePath, ok: false, error: error.message };
106
+ }
107
+ try {
108
+ assertGeneratedImporterContract(descriptor);
109
+ const readiness = require('../lib/import-readiness-contract').verifyReadinessContract(projectDir, descriptor);
110
+ if (!readiness.ok) throw new Error(readiness.errors.join(';'));
111
+ } catch (error) {
112
+ return { entrypoint: relativePath, ok: false, error: error.message };
113
+ }
114
+ return { entrypoint: relativePath, ok: true, error: null };
115
+ }
116
+
117
+ function main() {
118
+ const parsed = parseProgressArgs(process.argv.slice(2));
119
+ progress = createProgressLogger({
120
+ script: 'skills/wix-replatform/scripts/import-contract-verify.js',
121
+ ...parsed.progress,
122
+ });
123
+ progress.start('Import contract verification started', { phase: 'execution', step: 'verify-import-contract' });
124
+
125
+ const args = parseArgs(parsed.args);
126
+ if (!args.projectDir) {
127
+ usage();
128
+ progress.error('Missing project directory', { phase: 'execution', step: 'verify-import-contract' });
129
+ process.exit(1);
130
+ }
131
+
132
+ const projectDir = path.resolve(args.projectDir);
133
+ const entrypoints = args.entrypoints.length ? args.entrypoints : DEFAULT_ENTRYPOINTS;
134
+ // Inspect canonical inventory and exact generated bytes BEFORE executing --describe.
135
+ const plugin = verifyPluginHandoff(projectDir, args.selection);
136
+ if (plugin.applicable && entrypoints.some((entrypoint) => entrypoint !== 'src/import/run-import.js')) throw new Error('unsupported generated plugin importer entrypoint');
137
+ if (plugin.applicable && args.extractEntrypoint && args.extractEntrypoint !== 'src/extract/run-extract.js') throw new Error('unsupported generated plugin extractor entrypoint');
138
+ const results = entrypoints.map((entrypoint) => verifyEntrypoint(projectDir, entrypoint));
139
+ const failures = results.filter((result) => !result.ok);
140
+
141
+ console.log(JSON.stringify({
142
+ ok: failures.length === 0,
143
+ projectDir,
144
+ entrypoints: results,
145
+ }, null, 2));
146
+
147
+ if (failures.length) {
148
+ for (const failure of failures) {
149
+ console.error(`${failure.entrypoint}: ${failure.error}`);
150
+ }
151
+ console.error('Import aborted: the generated importer does not satisfy the entry contract. Route back to codegen — there is no degraded mode and no skip flag.');
152
+ progress.error('Import contract verification failed', {
153
+ phase: 'execution',
154
+ step: 'verify-import-contract',
155
+ artifact: projectDir,
156
+ count: failures.length,
157
+ unit: 'entrypoints',
158
+ });
159
+ process.exit(1);
160
+ }
161
+
162
+ progress.complete('Import contract verification passed', {
163
+ phase: 'execution',
164
+ step: 'verify-import-contract',
165
+ artifact: projectDir,
166
+ count: results.length,
167
+ unit: 'entrypoints',
168
+ });
169
+ process.exit(0);
170
+ }
171
+
172
+ try {
173
+ main();
174
+ } catch (error) {
175
+ if (progress) {
176
+ progress.error(error && error.message ? error.message : 'Import contract verification failed', {
177
+ phase: 'execution',
178
+ step: 'verify-import-contract',
179
+ });
180
+ }
181
+ console.error(error && error.message ? error.message : error);
182
+ process.exit(1);
183
+ }