@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
@@ -3,10 +3,13 @@
3
3
  const fs = require('node:fs/promises');
4
4
  const path = require('node:path');
5
5
  const crypto = require('node:crypto');
6
+ const { getDecisionValue, isExplicitUserOneClick } = require('./orchestration-decisions.js');
7
+ const { ensureLedger } = require('./expectations-ledger.js');
8
+ const cmsFallback = require('./plugin-cms-fallback.js');
6
9
 
7
10
  const SCHEMA_VERSION = 1;
8
11
 
9
- const RUN_STATUS = new Set(['running', 'completed', 'partial', 'blocked', 'failed']);
12
+ const RUN_STATUS = new Set(['running', 'completed', 'partial', 'blocked', 'failed', 'cancel_requested', 'canceled', 'interrupted']);
10
13
  const ACTIVE_PHASE = new Set(['orchestration', 'discovery', 'mapping', 'setup', 'codegen', 'execution']);
11
14
  const ORCHESTRATION_STATES = new Set([
12
15
  'initialized',
@@ -15,30 +18,43 @@ const ORCHESTRATION_STATES = new Set([
15
18
  'awaiting_credentials',
16
19
  'awaiting_files',
17
20
  'awaiting_destination_strategy',
21
+ 'destination_running',
18
22
  'preflight_running',
19
23
  'preflight_blocked',
24
+ 'quick_mode_adapter_resolution_required',
25
+ 'quick_mode_preflight_required',
26
+ 'quick_mode_plan_required',
27
+ 'quick_mode_reverification_required',
20
28
  'discovery_running',
21
29
  'discovery_complete',
22
30
  'mapping_running',
23
31
  'awaiting_mapping_approval',
24
32
  'mapping_approved',
25
33
  'setup_discovery_running',
34
+ 'awaiting_website_scope',
35
+ 'website_handoff_running',
26
36
  'setup_complete',
27
37
  'codegen_running',
28
38
  'awaiting_execution_approval',
29
39
  'execution_approved',
30
40
  'executing_setup',
31
41
  'executing_import',
42
+ 'storefront_running',
43
+ 'finalizing',
32
44
  'completed',
33
45
  'partial',
34
46
  'blocked',
35
47
  'failed',
48
+ 'cancel_requested',
49
+ 'canceled',
50
+ 'interrupted',
36
51
  ]);
37
52
  const PHASE_STATUS = new Set(['not_started', 'running', 'complete', 'partial', 'blocked', 'failed']);
38
53
  const EXECUTION_ITEM_STATUS = new Set(['not_started', 'running', 'complete', 'partial', 'blocked', 'failed', 'skipped']);
39
54
  const APPROVAL_STATUS = new Set(['pending', 'approved', 'rejected', 'provisional']);
40
- const APPROVAL_ACTOR = new Set(['user', 'system', null]);
41
- const DECISION_SOURCE = new Set(['user', 'deterministic_inference', 'prior_artifact']);
55
+ const APPROVAL_ACTOR = new Set(['user', 'system', 'agent', null]);
56
+ // `context` and `not_asked` are the business-type sources; other keys keep using the first three.
57
+ const DECISION_SOURCE = new Set(['user', 'deterministic_inference', 'prior_artifact', 'context', 'not_asked']);
42
58
 
43
59
  function nowIso(date = new Date()) {
44
60
  return date.toISOString();
@@ -200,6 +216,10 @@ function validateRun(run, errors) {
200
216
  if ((isAwaitingState(run.currentState) || run.currentState === 'blocked') && run.needsUserInput !== true) {
201
217
  pushError(errors, 'run_needs_user_input', 'needsUserInput must be true for awaiting_* and blocked states');
202
218
  }
219
+ if (['cancel_requested', 'canceled', 'interrupted'].includes(run.currentState) &&
220
+ !['cancel_requested', 'canceled', 'interrupted'].includes(run.status)) {
221
+ pushError(errors, 'run_cancellation_status', `${run.currentState} requires matching cancellation status`);
222
+ }
203
223
  }
204
224
 
205
225
  function validateCheckpoints(checkpoints, errors) {
@@ -250,13 +270,25 @@ function validateApprovals(approvals, errors) {
250
270
  if (!Array.isArray(item.artifactRefs)) {
251
271
  pushError(errors, `approval_${approvalType}_artifact_refs`, `${approvalType} approval artifactRefs must be an array`);
252
272
  }
273
+ if (Array.isArray(item.artifactRefs)) {
274
+ for (const ref of item.artifactRefs) {
275
+ if (typeof ref === 'string' && ref.length) continue;
276
+ if (!ref || typeof ref !== 'object' || Array.isArray(ref) || ref.kind !== 'census-reconciliation' || ref.path !== 'mapping/review/census-reconciliation.json' || !/^[0-9a-f]{64}$/i.test(ref.sha256 || '')) {
277
+ pushError(errors, `approval_${approvalType}_artifact_ref_invalid`, `${approvalType} approval contains an invalid artifact reference`);
278
+ }
279
+ }
280
+ }
253
281
  if (approvalType === 'execution' && item.status === 'provisional') {
254
282
  pushError(errors, 'approval_execution_provisional', 'execution approval must not be provisional');
255
283
  }
256
284
  }
257
285
  }
258
286
 
259
- function validateDecisions(decisions, errors) {
287
+ // `quarantined` collects malformed `pluginCmsFallback:*` entries. That one family (exact,
288
+ // case-sensitive prefix) is never honored when malformed and never fails the run: the entry
289
+ // counts as "no valid answer" everywhere and the capability is asked again at the mapping
290
+ // review. Every other key keeps the fail-closed checks below.
291
+ function validateDecisions(decisions, errors, quarantined = []) {
260
292
  if (!decisions || typeof decisions !== 'object') {
261
293
  pushError(errors, 'decisions_missing', 'decisions.json is missing or not an object');
262
294
  return;
@@ -268,6 +300,11 @@ function validateDecisions(decisions, errors) {
268
300
  if (key === 'schemaVersion') {
269
301
  continue;
270
302
  }
303
+ if (cmsFallback.isCmsFallbackDecisionKey(key)) {
304
+ const shape = cmsFallback.cmsFallbackDecisionShape(key, value);
305
+ if (!shape.ok) quarantined.push({ key, problem: shape.problem });
306
+ continue;
307
+ }
271
308
  if (!value || typeof value !== 'object') {
272
309
  pushError(errors, 'decision_entry_invalid', `decision ${key} must be an object`);
273
310
  continue;
@@ -276,44 +313,56 @@ function validateDecisions(decisions, errors) {
276
313
  }
277
314
  }
278
315
 
316
+ function isObjectValue(value) {
317
+ return Boolean(value) && typeof value === 'object';
318
+ }
319
+
320
+ // Each check reads only its own sub-object and is skipped when that sub-object is
321
+ // missing: the per-file validators already report it (`*_missing`), and reading
322
+ // `.status` of a missing entry would throw instead of returning the error list.
279
323
  function validateCrossArtifactInvariants(artifacts, errors) {
280
324
  const { run, checkpoints, approvals } = artifacts;
281
325
  if (!run || !checkpoints || !approvals) {
282
326
  return;
283
327
  }
284
- if (run.currentState === 'preflight_running' || run.currentState === 'preflight_blocked' || run.currentState === 'awaiting_destination_strategy') {
328
+ const mappingCheckpoint = isObjectValue(checkpoints.mapping) ? checkpoints.mapping : null;
329
+ const mappingApproval = isObjectValue(approvals.mapping) ? approvals.mapping : null;
330
+ const executionApproval = isObjectValue(approvals.execution) ? approvals.execution : null;
331
+ if (run.currentState === 'preflight_running' || run.currentState === 'preflight_blocked' || run.currentState === 'awaiting_destination_strategy' || run.currentState === 'destination_running') {
285
332
  if (run.activePhase !== 'orchestration') {
286
333
  pushError(errors, 'state_phase_preflight', `${run.currentState} requires activePhase=orchestration`);
287
334
  }
288
335
  }
289
- if (run.currentState === 'mapping_running' && checkpoints.mapping.status === 'not_started') {
336
+ if (run.currentState === 'mapping_running' && mappingCheckpoint && mappingCheckpoint.status === 'not_started') {
290
337
  pushError(errors, 'state_mapping_checkpoint', 'mapping_running requires mapping checkpoint status to be started');
291
338
  }
292
- if (run.currentState === 'awaiting_mapping_approval' && approvals.mapping.status !== 'pending') {
339
+ if (run.currentState === 'awaiting_mapping_approval' && mappingApproval && mappingApproval.status !== 'pending') {
293
340
  pushError(errors, 'state_mapping_approval_pending', 'awaiting_mapping_approval requires approvals.mapping.status=pending');
294
341
  }
295
- if (run.currentState === 'mapping_approved' && !['approved', 'provisional'].includes(approvals.mapping.status)) {
342
+ if (run.currentState === 'mapping_approved' && mappingApproval && !['approved', 'provisional'].includes(mappingApproval.status)) {
296
343
  pushError(errors, 'state_mapping_approved', 'mapping_approved requires approvals.mapping.status=approved|provisional');
297
344
  }
298
- if (run.currentState === 'awaiting_execution_approval' && approvals.execution.status !== 'pending') {
345
+ if (run.currentState === 'awaiting_execution_approval' && executionApproval && executionApproval.status !== 'pending') {
299
346
  pushError(errors, 'state_execution_approval_pending', 'awaiting_execution_approval requires approvals.execution.status=pending');
300
347
  }
301
348
  if (['execution_approved', 'executing_setup', 'executing_import', 'completed'].includes(run.currentState) &&
302
- approvals.execution.status !== 'approved') {
349
+ executionApproval && executionApproval.status !== 'approved') {
303
350
  pushError(errors, 'state_execution_approved', `${run.currentState} requires approvals.execution.status=approved`);
304
351
  }
305
352
  }
306
353
 
307
354
  function validateArtifacts(artifacts) {
308
355
  const errors = [];
356
+ const quarantined = [];
309
357
  validateRun(artifacts.run, errors);
310
358
  validateCheckpoints(artifacts.checkpoints, errors);
311
359
  validateApprovals(artifacts.approvals, errors);
312
- validateDecisions(artifacts.decisions, errors);
360
+ validateDecisions(artifacts.decisions, errors, quarantined);
313
361
  validateCrossArtifactInvariants(artifacts, errors);
314
362
  return {
315
363
  ok: errors.length === 0,
316
364
  errors,
365
+ quarantined,
317
366
  };
318
367
  }
319
368
 
@@ -326,6 +375,7 @@ async function appendEvent(projectDir, event) {
326
375
  }
327
376
 
328
377
  async function initArtifacts(projectDir, { projectId = path.basename(projectDir), timestamp = nowIso() } = {}) {
378
+ await ensureLedger(projectDir);
329
379
  const dirPath = orchestrationDir(projectDir);
330
380
  await mkdirp(dirPath);
331
381
  const run = createRun(projectId, timestamp);
@@ -363,7 +413,8 @@ async function loadArtifacts(projectDir) {
363
413
  };
364
414
  }
365
415
 
366
- function updateDecisionObject(decisions, key, value, { source = 'user', rationale = null, timestamp = nowIso() } = {}) {
416
+ function updateDecisionObject(decisions, key, value, { source = 'user', rationale = null, timestamp = nowIso(), evidenceRef = null } = {}) {
417
+ assertGenericDecisionKey(key);
367
418
  if (!DECISION_SOURCE.has(source)) {
368
419
  throw new Error(`invalid decision source: ${source}`);
369
420
  }
@@ -372,10 +423,97 @@ function updateDecisionObject(decisions, key, value, { source = 'user', rational
372
423
  decidedAt: timestamp,
373
424
  source,
374
425
  rationale,
426
+ ...(evidenceRef ? { evidenceRef } : {}),
375
427
  };
376
428
  return decisions;
377
429
  }
378
430
 
431
+ function assertGenericDecisionKey(key) {
432
+ if (cmsFallback.isCmsFallbackDecisionKey(key)) {
433
+ throw new Error(`${key} is a CMS-fallback answer and is written only by \`orchestration-state.js decide-cms-fallback\` (it binds the answer to the exact proposal shown); the generic decide command cannot record it`);
434
+ }
435
+ }
436
+
437
+ /**
438
+ * The only writer of `pluginCmsFallback:<capability>`. Reads the proposal from the capability's
439
+ * current plugin-coverage row — the exact text shown at the mapping review — and binds the
440
+ * answer to it. In the same save it resets the mapping approval to pending, so the router
441
+ * regenerates the plan; it never deletes artifacts. Mutates `artifacts` and returns the event
442
+ * to append.
443
+ */
444
+ function recordPluginCmsFallbackDecision(artifacts, {
445
+ capability,
446
+ value,
447
+ approvedBy,
448
+ coverageRow,
449
+ registerEntry = undefined,
450
+ pluginsRoot = undefined,
451
+ rationale = null,
452
+ timestamp = nowIso(),
453
+ } = {}) {
454
+ if (!artifacts || !artifacts.decisions || !artifacts.approvals) {
455
+ throw new Error('artifacts.decisions and artifacts.approvals are required');
456
+ }
457
+ // One-click/unattended runs never record this answer, approval or decline. Any
458
+ // automationMode that normalizes to one_click blocks it, whatever its source, so the row
459
+ // stays pending with zero CMS writes.
460
+ if (getDecisionValue(artifacts.decisions, 'automationMode') === 'one_click') {
461
+ throw new Error('decide-cms-fallback is not allowed in a one-click/unattended run (automationMode=one_click): the CMS-fallback row stays pending and is reported for cutover');
462
+ }
463
+ if (!capability || typeof capability !== 'string') throw new Error('decide-cms-fallback requires --capability');
464
+ if (!cmsFallback.DECISION_VALUES.has(value)) {
465
+ throw new Error(`decide-cms-fallback --value must be approved or declined (got: ${value})`);
466
+ }
467
+ if (typeof approvedBy !== 'string' || approvedBy.trim().length === 0) {
468
+ throw new Error('decide-cms-fallback requires a non-empty --approved-by naming who answered');
469
+ }
470
+ const row = coverageRow;
471
+ if (!row || row.capability !== capability || !cmsFallback.isEligibleCmsFallbackRow(row)
472
+ || !(row.status === 'pending' || cmsFallback.isApprovedCmsFallbackRow(row))) {
473
+ throw new Error(`no eligible CMS-fallback row for ${capability} in plugin-coverage.json; there is nothing to approve or decline`);
474
+ }
475
+ const entry = registerEntry !== undefined
476
+ ? registerEntry
477
+ : cmsFallback.eligibilityByCapability(cmsFallback.loadCmsFallbackRegisters(pluginsRoot).cmsFallbackEligible).get(capability) || null;
478
+ if (!entry) {
479
+ throw new Error(`${capability} has no signed entry in cms-fallback-eligible.json; rerun reclassification first`);
480
+ }
481
+ const proposal = cmsFallback.proposalFromRow(row);
482
+ const proposalDigest = cmsFallback.cmsFallbackProposalDigest({ capability, ...proposal });
483
+ const currentDigest = cmsFallback.cmsFallbackProposalDigest(entry);
484
+ if (row.cmsFallback.proposalDigest !== currentDigest || proposalDigest !== currentDigest) {
485
+ throw new Error(`plugin-coverage.json is stale for ${capability}: its proposal differs from the current cms-fallback-eligible.json entry; rerun reclassification (wp-discovery.js --reclassify-coverage) and ask again`);
486
+ }
487
+ const key = cmsFallback.decisionKey(capability);
488
+ artifacts.decisions[key] = {
489
+ value,
490
+ decidedAt: timestamp,
491
+ source: 'user',
492
+ rationale: rationale || null,
493
+ approvedBy: approvedBy.trim(),
494
+ proposal,
495
+ proposalDigest,
496
+ };
497
+ if (artifacts.approvals.mapping && artifacts.approvals.mapping.status !== 'pending') {
498
+ updateApprovalObject(artifacts.approvals, 'mapping', 'pending', {
499
+ artifactRefs: artifacts.approvals.mapping.artifactRefs || [],
500
+ notes: `${key} changed`,
501
+ timestamp,
502
+ });
503
+ }
504
+ return {
505
+ key,
506
+ event: {
507
+ id: randomId('evt'),
508
+ timestamp,
509
+ phase: artifacts.run ? artifacts.run.activePhase : 'mapping',
510
+ state: artifacts.run ? artifacts.run.currentState : null,
511
+ type: 'decision.recorded',
512
+ payload: { key, value },
513
+ },
514
+ };
515
+ }
516
+
379
517
  function updateApprovalObject(approvals, approvalType, status, { artifactRefs = [], notes = null, decidedBy = 'user', timestamp = nowIso() } = {}) {
380
518
  if (!approvals[approvalType]) {
381
519
  throw new Error(`unknown approval type: ${approvalType}`);
@@ -396,6 +534,40 @@ function updateApprovalObject(approvals, approvalType, status, { artifactRefs =
396
534
  return approvals;
397
535
  }
398
536
 
537
+ function isOneClickArtifacts(artifacts) {
538
+ return isExplicitUserOneClick(artifacts && artifacts.decisions ? artifacts.decisions : {});
539
+ }
540
+
541
+ function autoApproveOneClick(artifacts, approvalType, { artifactRefs = [], notes = null, timestamp = nowIso() } = {}) {
542
+ if (!artifacts || !artifacts.approvals) {
543
+ throw new Error('artifacts.approvals is required');
544
+ }
545
+ const automationMode = getDecisionValue(artifacts.decisions || {}, 'automationMode');
546
+ if (automationMode === 'one_click' && !isOneClickArtifacts(artifacts)) {
547
+ return { ok: false, changed: false, reason: 'automation_mode_not_explicit_user_one_click' };
548
+ }
549
+ if (!isOneClickArtifacts(artifacts)) {
550
+ return { ok: false, changed: false, reason: 'automation_mode_not_one_click' };
551
+ }
552
+ const current = artifacts.approvals[approvalType];
553
+ if (!current) {
554
+ throw new Error(`unknown approval type: ${approvalType}`);
555
+ }
556
+ if (current.status === 'rejected') {
557
+ return { ok: false, changed: false, reason: 'approval_rejected' };
558
+ }
559
+ if (current.status === 'approved') {
560
+ return { ok: true, changed: false, reason: 'already_approved' };
561
+ }
562
+ updateApprovalObject(artifacts.approvals, approvalType, 'approved', {
563
+ artifactRefs,
564
+ notes,
565
+ decidedBy: 'agent',
566
+ timestamp,
567
+ });
568
+ return { ok: true, changed: true, reason: 'auto_approved' };
569
+ }
570
+
399
571
  function updateCheckpointObject(checkpoints, phase, patch, timestamp = nowIso()) {
400
572
  if (!checkpoints[phase]) {
401
573
  throw new Error(`unknown checkpoint phase: ${phase}`);
@@ -449,7 +621,11 @@ module.exports = {
449
621
  validateArtifacts,
450
622
  appendEvent,
451
623
  updateDecisionObject,
624
+ assertGenericDecisionKey,
625
+ recordPluginCmsFallbackDecision,
452
626
  updateApprovalObject,
627
+ autoApproveOneClick,
628
+ isOneClickArtifacts,
453
629
  updateCheckpointObject,
454
630
  transitionRun,
455
631
  };
@@ -0,0 +1,30 @@
1
+ 'use strict';
2
+ // API acceptance is insufficient: every selected rule requires observed dashboard fidelity.
3
+ function proven(cell, aspect) { return cell?.accepted === true && cell.dashboardVerified === true && cell[aspect + 'Fidelity'] === true; }
4
+ function selectOrderReferenceMapping(cells = require('../resources/rp-target-wix/domains/ecom/entities/order.json').importReferenceCanary?.cells || []) {
5
+ const byId = new Map((cells || []).map(cell => [cell.cell, cell]));
6
+ const baseline = byId.get(1), blockers = [];
7
+ if (!proven(baseline, 'shipping')) blockers.push('order-shipping-reference-unverified');
8
+ if (!proven(baseline, 'tax')) blockers.push('order-tax-reference-unverified');
9
+ if (blockers.length) return { verified: false, blockers, setupEdgeMode: 'task-complete' };
10
+ let carrier = true, code = true, taxGroup = true;
11
+ if (proven(byId.get(2), 'shipping')) carrier = code = false;
12
+ else if (proven(byId.get(8), 'shipping')) carrier = false;
13
+ else if (proven(byId.get(9), 'shipping')) code = false;
14
+ if (proven(byId.get(3), 'tax')) taxGroup = false;
15
+ if (!carrier && !code && !taxGroup && !(proven(byId.get(4), 'shipping') && proven(byId.get(4), 'tax'))) carrier = code = taxGroup = true;
16
+ const signatures = { 1: [true, true, true], 2: [false, false, true], 3: [true, true, false], 4: [false, false, false], 8: [false, true, true], 9: [true, false, true] };
17
+ let selected = [...byId.values()].find(cell => JSON.stringify(signatures[cell.cell] || cell.selectedReferences) === JSON.stringify([carrier, code, taxGroup]));
18
+ if (!selected || !proven(selected, 'shipping') || !proven(selected, 'tax')) return { verified: false, blockers: ['order-shipping-reference-unverified', 'order-tax-reference-unverified'], setupEdgeMode: 'task-complete', requiredCombination: [carrier, code, taxGroup] };
19
+ return { verified: true, carrier, code, taxGroup, selectedCell: selected.cell, blockers: [], setupEdgeMode: 'task-complete' };
20
+ }
21
+ function orderShippingReadiness(order, mapping = selectOrderReferenceMapping(), { logistics } = {}) {
22
+ const lines = order.shipping_lines || [];
23
+ if (!Array.isArray(lines) || lines.length > 1) return { deferred: true, reason: 'order-multiple-shipping-lines', severity: 'blocker' };
24
+ if (!lines.length && !(order.tax_lines || []).length) return { shippingInfo: undefined };
25
+ if (!mapping?.verified) return { deferred: true, reason: mapping?.blockers?.[0] || 'order-shipping-reference-unverified', severity: 'blocker' };
26
+ if (!lines.length) return { shippingInfo: undefined };
27
+ const line = lines[0];
28
+ return { shippingInfo: { title: line.method_title, cost: { price: { amount: String(line.total) } }, ...(logistics ? { logistics } : {}) }, requiredReferences: { carrier: mapping.carrier, code: mapping.code, taxGroup: mapping.taxGroup } };
29
+ }
30
+ module.exports = { selectOrderReferenceMapping, orderShippingReadiness };
@@ -0,0 +1,200 @@
1
+ 'use strict';
2
+
3
+ // Every outcome and finding code the payments path can produce, in one frozen place.
4
+ //
5
+ // This exists because of a specific repeated failure: a writer gained an outcome, the report never
6
+ // gained a line for it, and a run could lose work while the approval read clean. It happened four
7
+ // times. The first fix was a hand-maintained list, which drifted. The second was a test that
8
+ // SCRAPED the writer source for `outcome: 'literal'`, which missed `invoice-number-only` because
9
+ // that one is produced by a ternary — a green test and a silently unreportable outcome, which is
10
+ // worse than the list it replaced.
11
+ //
12
+ // So: the codes live here, both sides import them, and neither can add one the other has not seen.
13
+ // A registry cannot be out of date with itself.
14
+
15
+ // Mutually exclusive per-order payment outcomes. Their sum must equal the discovered population,
16
+ // so a new reason belongs HERE rather than folded into an existing bucket.
17
+ const PAYMENT_OUTCOMES = Object.freeze([
18
+ 'payment-written',
19
+ 'payment-reconciled-existing',
20
+ 'payment-not-written-no-amount',
21
+ 'payment-not-written-no-paid-date',
22
+ 'payment-not-written-multi-payment',
23
+ 'payment-not-written-currency-mismatch',
24
+ 'payment-reconciliation-ambiguous',
25
+ 'payment-target-read-failed',
26
+ 'payment-failed',
27
+ ]);
28
+
29
+ // Outcomes a writer returns that are NOT the per-order payment partition: refund results, invoice
30
+ // results, and internal bookkeeping. Everything a writer can hand back must appear in one of the
31
+ // three lists, or the report has nowhere to put it.
32
+ const WRITER_OUTCOMES = Object.freeze([
33
+ 'refund-written',
34
+ 'refund-reconciled-existing',
35
+ 'refund-without-payment',
36
+ 'refund-still-settling',
37
+ 'invoice-preserved',
38
+ 'invoice-already-preserved',
39
+ 'invoice-number-only',
40
+ 'invoice-none-found',
41
+ 'invoice-import-failed',
42
+ 'invoice-import-not-ready',
43
+ 'invoice-import-read-failed',
44
+ // The Media file is READY but the order patch failed; the file id rides back as
45
+ // pendingMediaFileId so the resume does not import a second copy.
46
+ 'invoice-fields-write-failed',
47
+ 'invoice-fields-not-provisioned',
48
+ 'invoice-preservation-not-approved',
49
+ 'invoice-preservation-declined',
50
+ 'invoice-document-url-unsafe',
51
+ // The order-history composite's own outcomes. The ORDER stage has four; a stage that threw after
52
+ // the order existed is a named partial-failure outcome rather than an exception, so a resumed
53
+ // run reconciles the order and retries only what failed.
54
+ 'order-imported',
55
+ 'order-already-imported',
56
+ 'order-import-failed',
57
+ 'order-target-read-failed',
58
+ 'refund-failed',
59
+ 'invoice-failed',
60
+ // The buyer stage -- which member, if any, an imported order was attributed to.
61
+ // These PARTITION the order population (see BUYER_OUTCOMES); `buyer-not-resolved` is the
62
+ // composite's answer when no buyer was supplied.
63
+ 'buyer-member-linked',
64
+ 'buyer-guest',
65
+ 'buyer-contact-only',
66
+ 'buyer-member-not-imported',
67
+ 'buyer-member-email-mismatch',
68
+ 'buyer-not-resolved',
69
+ // Product category attachment (stores-category-attach.js). The identical orthogonal-axis shape
70
+ // as the order sub-stages above, but for products: a product the entity row already counts as
71
+ // `imported` can still carry zero of its categories, invisibly, unless this stage is tracked on
72
+ // its own. The failure this guards against: a 3-argument call site silently dropped
73
+ // every category-attach write's payload to `{ productId: undefined, categoryIds: undefined }`,
74
+ // every request almost certainly failed, and a wrapping `catch {}` hid it completely -- a
75
+ // completion report showed `product: reconciled, mismatch: false` while no product actually
76
+ // carried its categories live.
77
+ 'category-attach-written',
78
+ 'category-attach-reconciled-existing',
79
+ 'category-attach-unverified',
80
+ 'category-attach-failed',
81
+ // Internal: a target read that carried no mapped payment, and the pre-create verdict.
82
+ 'target-read',
83
+ 'create',
84
+ ]);
85
+
86
+ // Nested findings — attached to a result rather than returned as its outcome. They count too: an
87
+ // over-length link is a loss the merchant should see even though the document was preserved.
88
+ const FINDING_CODES = Object.freeze([
89
+ 'payment-status-conflict',
90
+ 'paid-date-disagreement',
91
+ 'paid-date-timezone-assumed',
92
+ 'paid-date-unparseable',
93
+ 'reference-without-paid-date',
94
+ 'no-transaction-reference',
95
+ 'ambiguous-transaction-reference',
96
+ 'incompatible-gateway-metadata',
97
+ 'unverified-gateway-key',
98
+ 'reference-over-length',
99
+ 'method-name-over-length',
100
+ 'card-display-over-length',
101
+ 'unclassified-method',
102
+ 'unmapped-gateway-family',
103
+ 'refund-weak-signal',
104
+ 'refund-date-not-preserved',
105
+ 'refund-line-detail-not-preserved',
106
+ 'invoice-link-over-length',
107
+ 'saved-cards-not-transferred',
108
+ 'redacted-source-values',
109
+ // Order-history composite: the order's id came from a crosswalk row rather than being derived from the source
110
+ // id -- an order imported before deterministic ids, or by another tool. Counted so a store
111
+ // where every row says this is visibly an import from before deterministic ids rather than a derivation bug.
112
+ 'order-id-from-crosswalk',
113
+ // Order-history composite: Import Order returned an id other than the one supplied. The target's id is adopted
114
+ // and persisted so re-runs converge; the finding says the identity model did not hold here.
115
+ 'order-id-not-derived',
116
+ // Order-history composite: a crosswalk row pointed at an order the target no longer has (a cleared migration),
117
+ // so the order was imported again under the derived id and the row replaced.
118
+ 'order-reimported-after-deletion',
119
+ // Order-history composite: a crosswalk row pointed at a missing order while the DERIVED-id order exists; the
120
+ // existing order was adopted and the row replaced, nothing imported.
121
+ 'order-crosswalk-row-stale',
122
+ // Order-history composite: a remembered Media file came from a different source URL and was not resumed.
123
+ 'invoice-pending-file-superseded',
124
+ // Buyer stage: crosswalk values that could not be used as ids.
125
+ 'buyer-member-id-not-guid',
126
+ 'buyer-contact-id-not-guid',
127
+ // Import Order refused an order on a contact field its rejection NAMED, so that
128
+ // field was removed and the order sent once more. The row names
129
+ // the field and the reason, never the value. Registering a code is what gives it a report line
130
+ // (REPORTABLE feeds ADDITIONAL_COUNTS), including a zero line on a clean run. The `order-`/
131
+ // `buyer-` prefixes are load-bearing: payments-report-lines-test.js scans writer source for
132
+ // exactly those prefixes, and a code it cannot see is a code nothing can count.
133
+ 'order-contact-email-dropped',
134
+ 'order-contact-phone-dropped',
135
+ // A WARNING, not a loss: a local check dislikes a source email or phone, which is
136
+ // kept and sent unchanged. Reported as its own line; never summed with the drops above.
137
+ 'order-contact-email-suspect',
138
+ 'order-contact-phone-suspect',
139
+ // The order carried an email `normalizeEmail` refused, so a named customer became
140
+ // an anonymous guest. A finding, NOT an outcome: the buyer partition is unchanged.
141
+ 'buyer-email-unusable',
142
+ ]);
143
+
144
+ // Mutually exclusive per-order buyer outcomes. When a report carries any of them, they
145
+ // must sum to the order population, like the payment partition.
146
+ const BUYER_OUTCOMES = Object.freeze([
147
+ 'buyer-member-linked',
148
+ 'buyer-guest',
149
+ 'buyer-contact-only',
150
+ 'buyer-member-not-imported',
151
+ 'buyer-member-email-mismatch',
152
+ 'buyer-not-resolved',
153
+ ]);
154
+
155
+ // Actions the invoice preservation plan assigns per document. They are not outcomes, but they
156
+ // travel the same chain -- plan action becomes the writer's approval -- so registering them keeps
157
+ // producer and consumer on one vocabulary rather than two that happen to agree.
158
+ const PLAN_ACTIONS = Object.freeze([
159
+ 'preserve',
160
+ 'offer-preservation',
161
+ 'reference-only',
162
+ 'refused',
163
+ ]);
164
+
165
+ // Causes attached to a partial-failure outcome (`errors.<stage>.cause`) by the order-history composite.
166
+ // Not outcomes and not counted, but handed back to callers, so they are registered here rather than
167
+ // living as stray literals the scan cannot account for.
168
+ const CAUSE_CODES = Object.freeze([
169
+ 'order-not-imported',
170
+ 'add-payment-returned-no-id',
171
+ ]);
172
+
173
+ // What the report must carry a line for: every writer outcome that is not internal bookkeeping,
174
+ // plus every nested finding. Zero-valued lines are emitted, so absence of a line is a defect.
175
+ //
176
+ // The four category-attach-* codes are WRITER_OUTCOMES (so stageResiduals can validate them --
177
+ // see completion-report.js's STAGE_RESIDUAL_OUTCOMES), but they are deliberately listed here too:
178
+ // `REPORTABLE` feeds `rp-execution-policy/payments-report.js`'s ADDITIONAL_COUNTS, which is the
179
+ // PAYMENTS plan report -- a product-category outcome has no business appearing as a merchant-facing
180
+ // line on a document about payment providers and invoices. Product category attachment is reported
181
+ // through completion-report.js's stageResiduals mechanism directly (see
182
+ // collectCategoryAttachStageResiduals in stores-category-attach.js), which is the correct and only
183
+ // channel for it.
184
+ const INTERNAL_ONLY = Object.freeze(['target-read', 'create',
185
+ 'category-attach-written', 'category-attach-reconciled-existing', 'category-attach-unverified', 'category-attach-failed']);
186
+ const REPORTABLE = Object.freeze([
187
+ ...WRITER_OUTCOMES.filter((code) => !INTERNAL_ONLY.includes(code)),
188
+ ...FINDING_CODES,
189
+ ]);
190
+
191
+ module.exports = {
192
+ PAYMENT_OUTCOMES,
193
+ BUYER_OUTCOMES,
194
+ PLAN_ACTIONS,
195
+ CAUSE_CODES,
196
+ WRITER_OUTCOMES,
197
+ FINDING_CODES,
198
+ INTERNAL_ONLY,
199
+ REPORTABLE,
200
+ };