@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.
- package/README.md +23 -0
- package/package.json +2 -2
- package/skills/wix-app/references/DASHBOARD_PAGE.md +1 -1
- package/skills/wix-export/SKILL.md +83 -0
- package/skills/wix-harmony-editor/.publish-manifest.json +8 -0
- package/skills/wix-harmony-editor/COPY-SITE.md +494 -0
- package/skills/wix-harmony-editor/SKILL.md +317 -0
- package/skills/wix-harmony-editor/scripts/copy/build-description.mjs +249 -0
- package/skills/wix-harmony-editor/scripts/copy/check-description.mjs +225 -0
- package/skills/wix-harmony-editor/scripts/copy/check-mirror.mjs +89 -0
- package/skills/wix-harmony-editor/scripts/copy/compare-preview.mjs +76 -0
- package/skills/wix-harmony-editor/scripts/copy/deploy-description.mjs +212 -0
- package/skills/wix-harmony-editor/scripts/copy/desc-hash.mjs +44 -0
- package/skills/wix-harmony-editor/scripts/copy/editor-run.mjs +45 -0
- package/skills/wix-harmony-editor/scripts/copy/export-page.mjs +53 -0
- package/skills/wix-harmony-editor/scripts/copy/find-interactions.mjs +76 -0
- package/skills/wix-harmony-editor/scripts/copy/hide-scrollbars.mjs +16 -0
- package/skills/wix-harmony-editor/scripts/copy/import-media.mjs +150 -0
- package/skills/wix-harmony-editor/scripts/copy/link-url.mjs +27 -0
- package/skills/wix-harmony-editor/scripts/copy/lint-api.mjs +56 -0
- package/skills/wix-harmony-editor/scripts/copy/measure-source.mjs +211 -0
- package/skills/wix-harmony-editor/scripts/copy/merge-mirrors.mjs +29 -0
- package/skills/wix-harmony-editor/scripts/copy/mirror-site.mjs +92 -0
- package/skills/wix-harmony-editor/scripts/copy/mobile-stage.mjs +56 -0
- package/skills/wix-harmony-editor/scripts/copy/preview-widths.mjs +73 -0
- package/skills/wix-harmony-editor/scripts/copy/render-plate.mjs +67 -0
- package/skills/wix-harmony-editor/scripts/copy/serve-mirror.mjs +102 -0
- package/skills/wix-harmony-editor/scripts/copy/snapshot-capabilities.mjs +40 -0
- package/skills/wix-harmony-editor/scripts/copy/split-sections.mjs +191 -0
- package/skills/wix-harmony-editor/scripts/copy/upload-media-manager.mjs +61 -0
- package/skills/wix-harmony-editor/scripts/launch.sh +359 -0
- package/skills/wix-headless/SKILL.md +7 -2
- package/skills/wix-headless/references/CAPABILITIES.md +6 -1
- package/skills/wix-headless/references/DISCOVERY.md +2 -1
- package/skills/wix-headless/references/SDK_HANDOFF.md +6 -1
- package/skills/wix-headless/references/SEED.md +3 -2
- package/skills/wix-headless/references/SETUP.md +1 -0
- package/skills/wix-headless/references/inline-recipes/experience-donations.md +102 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-donations.md +146 -0
- package/skills/wix-headless/references/inline-recipes/setup-donations.md +15 -0
- package/skills/wix-headless/references/managed/CREATE.md +1 -1
- package/skills/wix-headless-kit/SKILL.md +110 -21
- package/skills/wix-headless-kit/guides/api-run.md +15 -13
- package/skills/wix-headless-kit/guides/existing-site.md +31 -0
- package/skills/wix-headless-kit/guides/migration.md +49 -17
- package/skills/wix-headless-kit/install/agents-md.mjs +1 -1
- package/skills/wix-headless-kit/install/context.mjs +61 -6
- package/skills/wix-headless-kit/install/pins.json +1 -1
- package/skills/wix-headless-kit/install/setup.mjs +107 -12
- package/skills/wix-headless-replatform/.publish-manifest.json +8 -0
- package/skills/wix-headless-replatform/SKILL.md +116 -0
- package/skills/wix-headless-replatform/agents/openai.yaml +6 -0
- package/skills/wix-headless-replatform/references/control-and-visual-fidelity-contract.md +43 -0
- package/skills/wix-headless-replatform/references/extraction-schema.md +187 -0
- package/skills/wix-headless-replatform/references/interaction-runtime-contract.md +137 -0
- package/skills/wix-headless-replatform/references/layout-blueprint-contract.md +41 -0
- package/skills/wix-headless-replatform/references/output-contract.md +93 -0
- package/skills/wix-headless-replatform/references/post-build-gap-contract.md +125 -0
- package/skills/wix-headless-replatform/references/qa-checklist.md +83 -0
- package/skills/wix-headless-replatform/references/safety.md +19 -0
- package/skills/wix-headless-replatform/references/ui-normalization-contract.md +70 -0
- package/skills/wix-headless-replatform/references/workflow.md +157 -0
- package/skills/wix-headless-replatform/registry/README.md +20 -0
- package/skills/wix-headless-replatform/registry/approvals/button/shadcn-default-ac60ef5.json +28 -0
- package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/button.tsx +54 -0
- package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/capabilities.json +60 -0
- package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/contract.md +48 -0
- package/skills/wix-headless-replatform/registry/licenses/shadcn-ui-ac60ef5-MIT.txt +21 -0
- package/skills/wix-headless-replatform/registry/registry.json +36 -0
- package/skills/wix-headless-replatform/resources/rp-facelift/SKILL.md +32 -0
- package/skills/wix-headless-replatform/resources/rp-project-context/SKILL.md +62 -0
- package/skills/wix-headless-replatform/resources/rp-qa-gap-loop/SKILL.md +64 -0
- package/skills/wix-headless-replatform/resources/rp-source-evidence/SKILL.md +42 -0
- package/skills/wix-headless-replatform/resources/rp-ui-implementation/SKILL.md +73 -0
- package/skills/wix-headless-replatform/schemas/build-plan.schema.json +10 -0
- package/skills/wix-headless-replatform/schemas/candidate.schema.json +19 -0
- package/skills/wix-headless-replatform/schemas/common.schema.json +33 -0
- package/skills/wix-headless-replatform/schemas/decision-patch.schema.json +10 -0
- package/skills/wix-headless-replatform/schemas/decision-request.schema.json +10 -0
- package/skills/wix-headless-replatform/schemas/extraction-gap.schema.json +28 -0
- package/skills/wix-headless-replatform/schemas/extraction-manifest.schema.json +34 -0
- package/skills/wix-headless-replatform/schemas/final-report.schema.json +10 -0
- package/skills/wix-headless-replatform/schemas/foundation.schema.json +11 -0
- package/skills/wix-headless-replatform/schemas/metadata.schema.json +11 -0
- package/skills/wix-headless-replatform/schemas/observation-packet.schema.json +17 -0
- package/skills/wix-headless-replatform/schemas/page-capture.schema.json +11 -0
- package/skills/wix-headless-replatform/schemas/page-resolution.schema.json +33 -0
- package/skills/wix-headless-replatform/schemas/shared-chrome.schema.json +11 -0
- package/skills/wix-headless-replatform/schemas/unit.schema.json +40 -0
- package/skills/wix-headless-replatform/scripts/assemble-extraction.mjs +844 -0
- package/skills/wix-headless-replatform/scripts/benchmark-extraction.mjs +163 -0
- package/skills/wix-headless-replatform/scripts/browser-extraction-preflight.mjs +42 -0
- package/skills/wix-headless-replatform/scripts/build-extracted-homepage.mjs +228 -0
- package/skills/wix-headless-replatform/scripts/clear-wix-starter.mjs +87 -0
- package/skills/wix-headless-replatform/scripts/create-wix-project.mjs +505 -0
- package/skills/wix-headless-replatform/scripts/discover-urls.mjs +142 -0
- package/skills/wix-headless-replatform/scripts/extract-assets.mjs +140 -0
- package/skills/wix-headless-replatform/scripts/extract-design-system.mjs +637 -0
- package/skills/wix-headless-replatform/scripts/extract-interactions.mjs +1903 -0
- package/skills/wix-headless-replatform/scripts/extract-page.mjs +2461 -0
- package/skills/wix-headless-replatform/scripts/extract-seo.mjs +25 -0
- package/skills/wix-headless-replatform/scripts/extract-tokens.mjs +63 -0
- package/skills/wix-headless-replatform/scripts/finalize-extraction-report.mjs +126 -0
- package/skills/wix-headless-replatform/scripts/finalize-gap-review.mjs +180 -0
- package/skills/wix-headless-replatform/scripts/finalize-gap-review.test.mjs +98 -0
- package/skills/wix-headless-replatform/scripts/finalize-migration-website.mjs +103 -0
- package/skills/wix-headless-replatform/scripts/generate-control-state-contract.mjs +176 -0
- package/skills/wix-headless-replatform/scripts/generate-design-md.mjs +261 -0
- package/skills/wix-headless-replatform/scripts/generate-extraction-validators.mjs +25 -0
- package/skills/wix-headless-replatform/scripts/generate-invoice-download-backend.mjs +342 -0
- package/skills/wix-headless-replatform/scripts/generate-layout-blueprint.mjs +140 -0
- package/skills/wix-headless-replatform/scripts/generate-repeater-cms.mjs +22 -0
- package/skills/wix-headless-replatform/scripts/generate-route-plan.mjs +143 -0
- package/skills/wix-headless-replatform/scripts/generate-scene-contract.mjs +288 -0
- package/skills/wix-headless-replatform/scripts/generate-ui-normalization.mjs +266 -0
- package/skills/wix-headless-replatform/scripts/generate-visual-assets.mjs +111 -0
- package/skills/wix-headless-replatform/scripts/lib/browser-tooling.mjs +570 -0
- package/skills/wix-headless-replatform/scripts/lib/common.mjs +329 -0
- package/skills/wix-headless-replatform/scripts/lib/component-capabilities.mjs +121 -0
- package/skills/wix-headless-replatform/scripts/lib/component-registry.mjs +282 -0
- package/skills/wix-headless-replatform/scripts/lib/content-boundary.mjs +61 -0
- package/skills/wix-headless-replatform/scripts/lib/extraction-contract.mjs +374 -0
- package/skills/wix-headless-replatform/scripts/lib/extraction-detectors.mjs +243 -0
- package/skills/wix-headless-replatform/scripts/lib/extraction-validators.generated.mjs +1139 -0
- package/skills/wix-headless-replatform/scripts/lib/font-contract.mjs +326 -0
- package/skills/wix-headless-replatform/scripts/lib/frontend-automation-state.mjs +184 -0
- package/skills/wix-headless-replatform/scripts/lib/gap-analysis.mjs +396 -0
- package/skills/wix-headless-replatform/scripts/lib/html-extract.mjs +168 -0
- package/skills/wix-headless-replatform/scripts/lib/interaction-bootstrap.mjs +10 -0
- package/skills/wix-headless-replatform/scripts/lib/interaction-runtime.mjs +194 -0
- package/skills/wix-headless-replatform/scripts/lib/interaction-timeline.mjs +348 -0
- package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/classifiers.mjs +141 -0
- package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/geometry.mjs +43 -0
- package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/vocabulary.mjs +18 -0
- package/skills/wix-headless-replatform/scripts/lib/ui-normalization.css +64 -0
- package/skills/wix-headless-replatform/scripts/optimize-svg.mjs +31 -0
- package/skills/wix-headless-replatform/scripts/post-build-gap.mjs +358 -0
- package/skills/wix-headless-replatform/scripts/provision-repeater-cms.mjs +25 -0
- package/skills/wix-headless-replatform/scripts/record-gap-decision.mjs +39 -0
- package/skills/wix-headless-replatform/scripts/replay-extraction.mjs +107 -0
- package/skills/wix-headless-replatform/scripts/resolve-home-page.mjs +96 -0
- package/skills/wix-headless-replatform/scripts/site-clone.mjs +658 -0
- package/skills/wix-headless-replatform/scripts/validate-font-contract.mjs +29 -0
- package/skills/wix-headless-replatform/scripts/verify-interactions.mjs +669 -0
- package/skills/wix-headless-replatform/scripts/visual-qa.mjs +370 -0
- package/skills/wix-headless-templates/donations/INSTRUCTIONS.md +37 -24
- package/skills/wix-headless-templates/donations/app/components/donations/DonateForm.tsx +49 -23
- package/skills/wix-headless-templates/donations/app/components/donations/DonationReceipt.tsx +6 -5
- package/skills/wix-headless-templates/donations/app/components/donations/GoalProgress.tsx +5 -5
- package/skills/wix-headless-templates/donations/app/wix/donations/campaigns.ts +4 -4
- package/skills/wix-headless-templates/donations/app/wix/donations/donate.ts +7 -3
- package/skills/wix-headless-templates/donations/app/wix/donations/donation-store.ts +2 -2
- package/skills/wix-headless-templates/donations/app/wix/donations/donations-core.ts +12 -9
- package/skills/wix-headless-templates/donations/project/src/components/donations/DonateForm.tsx +49 -23
- package/skills/wix-headless-templates/donations/project/src/components/donations/DonationReceipt.tsx +6 -5
- package/skills/wix-headless-templates/donations/project/src/components/donations/GoalProgress.tsx +5 -5
- package/skills/wix-headless-templates/donations/project/src/wix/donations/campaigns.ts +4 -4
- package/skills/wix-headless-templates/donations/project/src/wix/donations/donate.ts +7 -3
- package/skills/wix-headless-templates/donations/project/src/wix/donations/donation-store.ts +2 -2
- package/skills/wix-headless-templates/donations/project/src/wix/donations/donations-core.ts +12 -9
- package/skills/wix-headless-templates/donations/rest/campaigns.ts +4 -4
- package/skills/wix-headless-templates/donations/rest/donate.ts +7 -3
- package/skills/wix-headless-templates/donations/seed/SEED.md +12 -7
- package/skills/wix-headless-templates/donations/tests/donation-contract.test.mjs +71 -0
- package/skills/wix-headless-templates/donations/tests/donation-form.test.cjs +137 -0
- package/skills/wix-headless-templates/restaurants/INSTRUCTIONS.md +28 -14
- package/skills/wix-headless-templates/restaurants/app/components/restaurants/OrderCartDrawer.tsx +87 -5
- package/skills/wix-headless-templates/restaurants/app/hooks/restaurants/useOrderCart.ts +9 -1
- package/skills/wix-headless-templates/restaurants/app/wix/restaurants/order-store.ts +33 -4
- package/skills/wix-headless-templates/restaurants/app/wix/restaurants/ordering-core.ts +100 -5
- package/skills/wix-headless-templates/restaurants/app/wix/restaurants/ordering.ts +101 -15
- package/skills/wix-headless-templates/restaurants/app/wix/restaurants/types.ts +35 -1
- package/skills/wix-headless-templates/restaurants/project/src/components/restaurants/OrderCartDrawer.tsx +87 -5
- package/skills/wix-headless-templates/restaurants/project/src/hooks/restaurants/useOrderCart.ts +9 -1
- package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/order-store.ts +33 -4
- package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/ordering-core.ts +100 -5
- package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/ordering.ts +101 -15
- package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/types.ts +35 -1
- package/skills/wix-headless-templates/restaurants/rest/ordering.ts +91 -14
- package/skills/wix-import/SKILL.md +90 -0
- package/skills/wix-manage/SKILL.md +38 -10
- package/skills/wix-manage/references/automations/actions.md +11 -11
- package/skills/wix-manage/references/automations/activation-status.md +6 -9
- package/skills/wix-manage/references/automations/api-catalog.md +48 -32
- package/skills/wix-manage/references/automations/automation-model.md +97 -22
- package/skills/wix-manage/references/automations/bracket-expressions.md +7 -7
- package/skills/wix-manage/references/automations/build-and-manage-automations.md +140 -309
- package/skills/wix-manage/references/automations/conditions.md +187 -0
- package/skills/wix-manage/references/automations/schemas-and-scheduling.md +191 -0
- package/skills/wix-manage/references/automations/special-actions.md +210 -0
- package/skills/wix-manage/references/automations/triggers.md +47 -10
- package/skills/wix-manage/references/automations/validation-and-verification.md +320 -0
- package/skills/wix-manage/references/custom-apps/use-app-tools.md +124 -0
- package/skills/wix-manage/references/dashboard-navigation/dashboard-navigation.md +2 -1
- package/skills/wix-manage/references/dashboard-navigation/routes.json +249 -0
- package/skills/wix-manage/references/donations/create-and-update-donation-campaigns.md +139 -0
- package/skills/wix-manage/references/events/create-wix-event.md +136 -73
- package/skills/wix-manage/references/events/events-dashboard-navigation.md +81 -0
- package/skills/wix-manage/references/events/manage-event-guests.md +366 -0
- package/skills/wix-manage/references/events/manage-event-tickets.md +293 -0
- package/skills/wix-manage/references/events/manage-wix-events.md +313 -55
- package/skills/wix-manage/references/sites/manage-oauth-apps.md +1 -0
- package/skills/wix-manage/references/sites/upload-static-site.md +127 -8
- package/skills/wix-manage/references/stores/update-product-with-options.md +58 -2
- package/skills/wix-replatform/.publish-manifest.json +5 -5
- package/skills/wix-replatform/CLI.md +162 -0
- package/skills/wix-replatform/README.md +52 -0
- package/skills/wix-replatform/SKILL.md +229 -684
- package/skills/wix-replatform/console/account.css +1 -0
- package/skills/wix-replatform/console/app.css +1 -0
- package/skills/wix-replatform/console/app.js +117 -0
- package/skills/wix-replatform/console/index.html +4 -0
- package/skills/wix-replatform/console/json.css +11 -0
- package/skills/wix-replatform/lib/agent-adapters/index.js +71 -0
- package/skills/wix-replatform/lib/app-page-routing.js +75 -0
- package/skills/wix-replatform/lib/artifact-freshness.js +11 -1
- package/skills/wix-replatform/lib/blocked-data-requests.js +427 -0
- package/skills/wix-replatform/lib/census-reconciliation.js +426 -0
- package/skills/wix-replatform/lib/completion-report.js +1393 -13
- package/skills/wix-replatform/lib/config-env.js +85 -11
- package/skills/wix-replatform/lib/confirmed-pictures.js +212 -0
- package/skills/wix-replatform/lib/dependency-readiness.js +423 -0
- package/skills/wix-replatform/lib/dependency-recovery.js +21 -0
- package/skills/wix-replatform/lib/destination-choice.js +163 -0
- package/skills/wix-replatform/lib/destination-handoff.js +62 -0
- package/skills/wix-replatform/lib/destination-http.js +81 -0
- package/skills/wix-replatform/lib/destination-route.js +98 -0
- package/skills/wix-replatform/lib/destination.js +919 -0
- package/skills/wix-replatform/lib/discovered-census.js +231 -0
- package/skills/wix-replatform/lib/discovered-set-status.js +255 -0
- package/skills/wix-replatform/lib/document-url-guard.js +203 -0
- package/skills/wix-replatform/lib/entity-qa-attestation.js +339 -0
- package/skills/wix-replatform/lib/entity-verification.js +18 -0
- package/skills/wix-replatform/lib/execution-capability.js +120 -0
- package/skills/wix-replatform/lib/execution-log.js +170 -0
- package/skills/wix-replatform/lib/execution-manifest.js +20 -2
- package/skills/wix-replatform/lib/execution-state.js +22 -0
- package/skills/wix-replatform/lib/expectations-ledger.js +96 -0
- package/skills/wix-replatform/lib/generated-plugin-handoff.js +140 -0
- package/skills/wix-replatform/lib/import-readiness-contract.js +23 -0
- package/skills/wix-replatform/lib/import-recovery.js +800 -6
- package/skills/wix-replatform/lib/imported-redirect-targets.js +608 -0
- package/skills/wix-replatform/lib/internal-link-reconciliation.js +166 -0
- package/skills/wix-replatform/lib/link-audit.js +173 -0
- package/skills/wix-replatform/lib/link-census.js +194 -0
- package/skills/wix-replatform/lib/link-plan.js +148 -0
- package/skills/wix-replatform/lib/link-verification.js +274 -0
- package/skills/wix-replatform/lib/link-write-journal.js +42 -0
- package/skills/wix-replatform/lib/local-state.js +869 -30
- package/skills/wix-replatform/lib/member-completion.js +658 -0
- package/skills/wix-replatform/lib/member-crosswalk.js +69 -0
- package/skills/wix-replatform/lib/member-outcome-registry.js +265 -0
- package/skills/wix-replatform/lib/migration-completion.js +311 -0
- package/skills/wix-replatform/lib/operator-identity.js +47 -0
- package/skills/wix-replatform/lib/orchestration-decisions.js +248 -0
- package/skills/wix-replatform/lib/orchestration-preflight.js +401 -19
- package/skills/wix-replatform/lib/orchestration-router.js +608 -32
- package/skills/wix-replatform/lib/orchestration-state.js +188 -12
- package/skills/wix-replatform/lib/order-reference-readiness.js +30 -0
- package/skills/wix-replatform/lib/payments-outcome-registry.js +200 -0
- package/skills/wix-replatform/lib/plugin-cms-fallback.js +618 -0
- package/skills/wix-replatform/lib/preservation-approval-stamp.js +54 -0
- package/skills/wix-replatform/lib/product-media-deferral.js +96 -0
- package/skills/wix-replatform/lib/progress-log.js +19 -3
- package/skills/wix-replatform/lib/read-back-approval.js +184 -0
- package/skills/wix-replatform/lib/read-back-comparison.js +136 -0
- package/skills/wix-replatform/lib/read-back-contract.js +243 -0
- package/skills/wix-replatform/lib/read-back-extract.js +118 -0
- package/skills/wix-replatform/lib/read-back-gate.js +734 -0
- package/skills/wix-replatform/lib/read-back-reads.js +94 -0
- package/skills/wix-replatform/lib/read-back-state.js +107 -0
- package/skills/wix-replatform/lib/read-back-summary.js +81 -0
- package/skills/wix-replatform/lib/rerun-conflicts.js +334 -0
- package/skills/wix-replatform/lib/run-controller.js +401 -0
- package/skills/wix-replatform/lib/seo-outcome-registry.js +45 -0
- package/skills/wix-replatform/lib/setup-verification.js +148 -0
- package/skills/wix-replatform/lib/source-access.js +231 -0
- package/skills/wix-replatform/lib/source-coverage.js +1130 -0
- package/skills/wix-replatform/lib/source-secrets.js +277 -0
- package/skills/wix-replatform/lib/structured-link-patch.js +59 -0
- package/skills/wix-replatform/lib/task-state.js +110 -0
- package/skills/wix-replatform/lib/url-preservation-report.js +319 -0
- package/skills/wix-replatform/lib/url-preservation-state.js +349 -1
- package/skills/wix-replatform/lib/url-redirect-plan.js +728 -0
- package/skills/wix-replatform/lib/url-verification.js +315 -0
- package/skills/wix-replatform/lib/user-action-effects.js +42 -0
- package/skills/wix-replatform/lib/user-actions.js +264 -0
- package/skills/wix-replatform/lib/website-handoff.js +1220 -0
- package/skills/wix-replatform/lib/wix-client-callers.js +54 -0
- package/skills/wix-replatform/lib/wix-dashboard-url.js +35 -0
- package/skills/wix-replatform/lib/write-verification-state.js +92 -0
- package/skills/wix-replatform/lib/write-verification.js +274 -0
- package/skills/wix-replatform/resources/rp-destination/SKILL.md +137 -0
- package/skills/wix-replatform/resources/rp-discovery/SKILL.md +189 -16
- package/skills/wix-replatform/resources/rp-discovery/scripts/promote-source-coverage.js +47 -0
- package/skills/wix-replatform/resources/rp-execute-import/SKILL.md +869 -29
- package/skills/wix-replatform/resources/rp-execute-import/scripts/shipping-estimate-audit.js +70 -0
- package/skills/wix-replatform/resources/rp-execute-setup/SKILL.md +195 -29
- package/skills/wix-replatform/resources/rp-execute-setup/scripts/execute-setup.js +442 -0
- package/skills/wix-replatform/resources/rp-execution-policy/SKILL.md +112 -0
- package/skills/wix-replatform/resources/rp-execution-policy/lib/coupon-currency-plan-report.js +143 -0
- package/skills/wix-replatform/resources/rp-execution-policy/lib/payments-report.js +244 -0
- package/skills/wix-replatform/resources/rp-import-codegen/SKILL.md +2082 -38
- package/skills/wix-replatform/resources/rp-mapper/SKILL.md +528 -11
- package/skills/wix-replatform/resources/rp-mapper/lib/structure-bridge-planning.js +303 -0
- package/skills/wix-replatform/resources/rp-mapper/scripts/coverage-reconcile.js +88 -0
- package/skills/wix-replatform/resources/rp-mapper/wix-business-solutions-taxonomy.md +6 -5
- package/skills/wix-replatform/resources/rp-preflight/SKILL.md +40 -0
- package/skills/wix-replatform/resources/rp-project-intake/SKILL.md +55 -0
- package/skills/wix-replatform/resources/rp-quick-runtime/SKILL.md +60 -0
- package/skills/wix-replatform/resources/rp-quick-runtime/lib/import-progress.js +89 -0
- package/skills/wix-replatform/resources/rp-quick-runtime/lib/limit-recovery.js +36 -0
- package/skills/wix-replatform/resources/rp-quick-shopify/SKILL.md +123 -0
- package/skills/wix-replatform/resources/rp-quick-shopify/quick-mode.json +124 -0
- package/skills/wix-replatform/resources/rp-quick-shopify/scripts/quick-mode.js +522 -0
- package/skills/wix-replatform/resources/rp-quick-woocommerce/SKILL.md +56 -0
- package/skills/wix-replatform/resources/rp-quick-woocommerce/quick-mode.json +91 -0
- package/skills/wix-replatform/resources/rp-quick-woocommerce/scripts/quick-mode.js +255 -0
- package/skills/wix-replatform/resources/rp-setup-discovery/SKILL.md +80 -10
- package/skills/wix-replatform/resources/rp-setup-discovery/scripts/quick-setup-plan.js +44 -0
- package/skills/wix-replatform/resources/rp-source-csv/SKILL.md +3 -0
- package/skills/wix-replatform/resources/rp-source-csv/lib/csv-fileset.js +0 -0
- package/skills/wix-replatform/resources/rp-source-csv/scripts/csv-discovery.js +21 -1
- package/skills/wix-replatform/resources/rp-source-inputs/SKILL.md +66 -0
- package/skills/wix-replatform/resources/rp-source-sfcc/SKILL.md +153 -0
- package/skills/wix-replatform/resources/rp-source-shopify/SKILL.md +394 -0
- package/skills/wix-replatform/resources/rp-source-shopify/lib/discovery-reads.js +200 -0
- package/skills/wix-replatform/resources/rp-source-shopify/lib/import-findings.js +34 -0
- package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-bulk-sqlite-worker.js +44 -0
- package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-bulk.js +1470 -0
- package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-cli.js +446 -0
- package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-gift-cards.js +474 -0
- package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-protected-fields.js +879 -0
- package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-session.js +426 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/articles.graphql +24 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/blogs.graphql +18 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/collections.graphql +40 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/customers.graphql +76 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/delivery-profiles.graphql +51 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/discounts.graphql +35 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/files.graphql +20 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/gift-cards.graphql +18 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/inventory.graphql +31 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/locations.graphql +21 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/menus.graphql +21 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/metaobjects.graphql +30 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-core.graphql +150 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-fulfillments.graphql +36 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-refunds.graphql +48 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/pages.graphql +20 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-address.graphql +8 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-email.graphql +6 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-name.graphql +8 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-phone.graphql +8 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-address.graphql +12 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-email.graphql +6 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-name.graphql +13 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-phone.graphql +13 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/products.graphql +73 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/url-redirects.graphql +13 -0
- package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-discovery.js +693 -0
- package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-extract.js +283 -0
- package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-gift-card-remedy.js +191 -0
- package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-session-check.js +115 -0
- package/skills/wix-replatform/resources/rp-source-shopify/source-schema.example.json +201 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/PLUGIN-READ-PLANS.md +146 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/SKILL.md +736 -22
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/blocked-data-handlers.js +73 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/checkout-field-csv-parser.js +115 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/checkout-field-csv-parser.test-fixture.js +91 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/coupon-discovery.js +440 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/currency-gate.js +125 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-source-keys.js +252 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-source-keys.json +183 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-summary.mjs +333 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/invoice-discovery.js +426 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-disposition.js +400 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-entity-read-plan.js +633 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-knowledge.js +1127 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/refund-corroboration.js +194 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/refund-corroboration.json +100 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/sampled-ids-batch.js +157 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/secret-value-guard.js +234 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/store-currency.js +101 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/structure-bridge-reader.js +755 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wix-wp-plugin-v2-client.js +1074 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wix-wp-plugin-v2-client.test-fixture.js +149 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/woo-inventory.js +25 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-http.js +204 -9
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-image-url.js +186 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-plugin-detect.js +1422 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-redirect-sources.js +343 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-route-classifier.js +262 -26
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/yoast-product-seo-evidence.js +272 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/README.md +373 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/advanced-custom-fields.json +101 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/back-in-stock-notifier-for-woocommerce.json +81 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/capabilities-pending-decision.json +128 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/cms-fallback-eligible.json +18 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/contact-form-7.json +104 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/facebook-for-woocommerce.json +44 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/fingerprint-aliases.json +49 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/free-gifts-for-woocommerce.json +94 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/index.json +863 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/mailpoet.json +52 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/membership-for-woocommerce.json +161 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/mwb-bookings-for-woocommerce.json +180 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/no-migration-needed.json +286 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/pricing-deals-for-woocommerce.json +79 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/product-extras-for-woocommerce.json +120 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/pw-woocommerce-gift-cards.json +128 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/requires-development.json +88 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/seo-by-rank-math.json +80 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/seriously-simple-podcasting.json +46 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/strong-testimonials.json +55 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/subscriptions-for-woocommerce.json +99 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/tablepress.json +55 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/the-events-calendar.json +160 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/ti-woocommerce-wishlist.json +81 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-checkout-field-editor-pro.json +60 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-discount-rules.json +74 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-product-bundle.json +75 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-gift-cards.json +60 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-other-payment-gateway.json +44 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-pdf-invoices-packing-slips.json +57 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-product-addon.json +141 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-progressive-discounts.json +54 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wordpress-seo.json +158 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wpc-composite-products.json +97 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wpforms-lite.json +86 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/scripts/capture-store-settings.js +90 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/scripts/plugin-knowledge-validate.js +51 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/scripts/plugin-knowledge.js +103 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/scripts/wp-discovery.js +1668 -33
- package/skills/wix-replatform/resources/rp-source-wordpress/scripts/wp-plugin-inventory.js +273 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/secret-value-patterns.v1.json +11 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/sub-parts.json +13 -0
- package/skills/wix-replatform/resources/rp-target-wix/SKILL.md +446 -32
- package/skills/wix-replatform/resources/rp-target-wix/app-page-routing-capabilities.json +36 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/README.md +38 -2
- package/skills/wix-replatform/resources/rp-target-wix/domains/SERVICE-PLUGINS.md +322 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/docs-survey.json +70 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/domain.json +19 -9
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/category.json +42 -8
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/comment.json +54 -8
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/post.json +66 -10
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/tag.json +38 -7
- package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/docs-survey.json +332 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/domain.json +75 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/booking.json +181 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/service-add-on.json +130 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/service.json +180 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/docs-survey.json +161 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/domain.json +15 -4
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/collection.json +39 -7
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/data-item.json +47 -8
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/reference.json +7 -1
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/docs-survey.json +204 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/domain.json +17 -4
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/contact.json +159 -15
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/email-subscription.json +80 -12
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/label.json +48 -8
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/docs-survey.json +306 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/domain.json +30 -7
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/delivery-profile.json +171 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/discount-rule.json +182 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-applied-discount.json +129 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-invoice-document.json +192 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-line-item-options.json +123 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-line-item.json +60 -12
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-merchant-note.json +112 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-payment.json +191 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-refund.json +140 -13
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order.json +383 -18
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/pickup-location.json +122 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/shipping-option.json +98 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/wishlist-item.json +86 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/docs-survey.json +128 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/domain.json +38 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/category.json +73 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/event.json +107 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/registration-form.json +89 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/rsvp.json +118 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/ticket-definition.json +93 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/forms/docs-survey.json +86 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/forms/domain.json +56 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/forms/entities/form-submission.json +121 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/forms/entities/form.json +134 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/docs-survey.json +41 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/domain.json +50 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/entities/gift-card-product.json +87 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/entities/gift-card.json +130 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/index.json +914 -24
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/docs-survey.json +41 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/domain.json +14 -4
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-file.json +45 -8
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-folder.json +41 -7
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/docs-survey.json +119 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/domain.json +13 -3
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/badge.json +41 -7
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/custom-field.json +82 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/member-about.json +77 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/member.json +165 -13
- package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/docs-survey.json +41 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/domain.json +46 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/entities/plan-order.json +137 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/entities/plan.json +133 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/docs-survey.json +7 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/domain.json +36 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/amazon-shop-connect.json +71 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/ebay-shop-connect.json +67 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/google-youtube-connect.json +72 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/meta-catalog-connect.json +74 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/pinterest-catalog-connect.json +69 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/tiktok-catalog-connect.json +61 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/schema.json +28 -1
- package/skills/wix-replatform/resources/rp-target-wix/domains/seo/docs-survey.json +109 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/seo/domain.json +73 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/item-seo-tags.json +148 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/seo-pattern.json +91 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/site-seo-tags.json +79 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/site/docs-survey.json +32 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/site/domain.json +49 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/site/entities/business-contact.json +103 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/docs-survey.json +203 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/domain.json +27 -10
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/back-in-stock-request.json +119 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/brand.json +111 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/category.json +52 -8
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/coupon.json +214 -10
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/inventory-item.json +93 -13
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-customization.json +111 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-tag.json +52 -10
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product.json +145 -14
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/promotion.json +84 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/review.json +178 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/subscription-product.json +87 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/tax/docs-survey.json +106 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/tax/domain.json +64 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/manual-tax-mapping.json +119 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-group.json +94 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-region.json +113 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-settings.json +65 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-author-attribution.js +165 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-client.js +60 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-duplicates.js +201 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-ledger.js +306 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-report.js +229 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-stage.js +55 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build.js +715 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-media.js +567 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/bulk-results.js +73 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/contact-extended-fields.js +194 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/contact-import.js +133 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/contract-ledger.js +13 -4
- package/skills/wix-replatform/resources/rp-target-wix/lib/coupon-redemption-drift.js +491 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/customer-member.js +104 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/data-extension-schema.js +673 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/domain-knowledge.js +453 -2
- package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-balance-reconciliation.js +119 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-build.js +566 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-redemption-build.js +249 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/order-applied-discount-build.js +63 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/order-buyer.js +187 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/order-channel-build.js +64 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/order-history.js +1027 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/order-invoice-contract.js +90 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/order-payment-mapping.js +420 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/pricing-plan-definition.js +177 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/product-import.js +151 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/product-seo.js +723 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/seo-redirects.js +353 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/shipping-build.js +1437 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/shipping-option-stage.js +354 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/store-config-build.js +134 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/stores-category-attach.js +221 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/stores-inventory.js +248 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/stores-verification.js +86 -3
- package/skills/wix-replatform/resources/rp-target-wix/lib/tax-build.js +231 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/url-mapper-transport.js +28 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/value-utils.js +14 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/variant-correlation.js +34 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/wix-build.js +166 -15
- package/skills/wix-replatform/resources/rp-target-wix/lib/wix-target-spec.js +19 -2
- package/skills/wix-replatform/resources/rp-target-wix/lib/wix-writers.js +4079 -257
- package/skills/wix-replatform/resources/rp-target-wix/lib/write-verification.js +3 -0
- package/skills/wix-replatform/resources/rp-target-wix/scripts/docs-survey-sync.js +150 -0
- package/skills/wix-replatform/resources/rp-target-wix/scripts/domain-knowledge-validate.js +40 -2
- package/skills/wix-replatform/resources/rp-target-wix/scripts/verify-stores.js +6 -1
- package/skills/wix-replatform/resources/rp-telemetry/SKILL.md +148 -8
- package/skills/wix-replatform/resources/rp-telemetry/lib/bi-sink.js +83 -15
- package/skills/wix-replatform/resources/rp-telemetry/lib/telemetry-recorder.js +1119 -215
- package/skills/wix-replatform/resources/rp-telemetry/lib/transcript-digest.js +318 -0
- package/skills/wix-replatform/resources/rp-telemetry/scripts/meter-from-audit.js +2 -2
- package/skills/wix-replatform/resources/rp-telemetry/scripts/rp-telemetry.js +106 -4
- package/skills/wix-replatform/resources/rp-website-continuation/SKILL.md +94 -0
- package/skills/wix-replatform/scripts/census-reconciliation.js +25 -0
- package/skills/wix-replatform/scripts/cms-fallback.js +89 -0
- package/skills/wix-replatform/scripts/discovered-census.js +26 -0
- package/skills/wix-replatform/scripts/discovered-set-status.js +33 -0
- package/skills/wix-replatform/scripts/entity-qa-attestation.js +130 -0
- package/skills/wix-replatform/scripts/execution-health-check.js +415 -0
- package/skills/wix-replatform/scripts/execution-manifest-validate.js +1 -1
- package/skills/wix-replatform/scripts/execution-state-prepare.js +1 -1
- package/skills/wix-replatform/scripts/expectations-ledger.js +44 -0
- package/skills/wix-replatform/scripts/import-contract-verify.js +183 -0
- package/skills/wix-replatform/scripts/internal-link-audit.js +90 -0
- package/skills/wix-replatform/scripts/item-seo-tags-verify.js +205 -0
- package/skills/wix-replatform/scripts/migration-completion.js +76 -0
- package/skills/wix-replatform/scripts/orchestration-preflight.js +21 -2
- package/skills/wix-replatform/scripts/orchestration-route.js +32 -1
- package/skills/wix-replatform/scripts/orchestration-state.js +146 -10
- package/skills/wix-replatform/scripts/read-back-gate.js +175 -0
- package/skills/wix-replatform/scripts/replatform-console.js +146 -0
- package/skills/wix-replatform/scripts/replatform.js +436 -0
- package/skills/wix-replatform/scripts/source-secrets.js +77 -0
- package/skills/wix-replatform/scripts/url-redirects.js +286 -0
- package/skills/wix-replatform/scripts/user-action.js +58 -0
- package/skills/wix-replatform/scripts/website-handoff-generate.js +64 -0
- package/skills/wix-replatform/scripts/wix-dashboard-url.js +54 -0
- package/skills/wix-replatform/scripts/wix-destination.js +143 -0
- package/skills/wix-replatform/scripts/wix-headless-scaffold.js +762 -0
- package/skills/wix-vibe-headless/SKILL.md +7 -3
- package/skills/wix-vibe-headless/install/deploy.cjs +61 -34
- package/skills/wix-vibe-headless/platforms/base44.md +1 -0
- package/skills/wix-vibe-headless/references/donations/INSTRUCTIONS.md +88 -0
- package/skills/wix-vibe-headless/references/donations/app/rest/wix-donations.js +112 -0
- package/skills/wix-vibe-headless/references/donations/seed/SEED.md +11 -0
- package/skills/wix-vibe-headless/references/donations/tests/donations.test.mjs +258 -0
- package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +5 -2
- package/skills/wix-vibe-headless/references/restaurants/app/context/OrderCartContext.jsx +4 -1
- package/skills/wix-vibe-headless/references/restaurants/app/rest/wix-restaurants-ordering.js +67 -3
- package/skills/wix-vibe-headless/references/shared/app/rest/wix-client.js +4 -3
- package/skills/wix-manage/references/custom-apps/use-app-skills-and-app-tools.md +0 -208
- package/skills/wix-replatform/resources/rp-target-wix/SPEC-product-reviews-and-blog-authorship.md +0 -330
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rp-source-inputs
|
|
3
|
+
description: Collects and validates source URLs, exports, acquisition modes, and credentials without exposing secrets.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# rp-source-inputs
|
|
7
|
+
|
|
8
|
+
Use only when the active source input/configuration is missing or invalid.
|
|
9
|
+
|
|
10
|
+
For URL sources, infer platform from the URL/probe before asking the user; ask for a
|
|
11
|
+
platform only when detection is inconclusive. For platforms with public and authenticated
|
|
12
|
+
paths, resolve the acquisition mode before requesting credentials.
|
|
13
|
+
|
|
14
|
+
Record the acquisition mode as the decision key `sourceMode`, and no other key name, with
|
|
15
|
+
one of `private_data` (authenticated capture), `public_content` (public pages only) or
|
|
16
|
+
`files_only` (supplied files). `decide` rejects any other value. If the router stops with
|
|
17
|
+
`invalid_source_mode`, record one of these values through `decide` to replace the bad entry.
|
|
18
|
+
If preflight blocks `source_auth_intent`, the run is public but credentials or an
|
|
19
|
+
authenticated choice were recorded: confirm with the user, then record
|
|
20
|
+
`sourceMode=private_data` or remove the listed signals.
|
|
21
|
+
|
|
22
|
+
When `managementImportMode=quick`, persist the probe's canonical platform id in
|
|
23
|
+
`sourcePlatform` and route to the matching `rp-quick-<platform>` adapter. Quick mode uses only
|
|
24
|
+
the adapter's declared public endpoints and must not request source credentials. An
|
|
25
|
+
inconclusive probe or unsupported adapter is a durable `quick_mode_unsupported` result; offer
|
|
26
|
+
standard mode rather than silently switching behavior.
|
|
27
|
+
|
|
28
|
+
For file sources, record every supplied path as `fileInputPaths`, use `sourceMode=files_only`,
|
|
29
|
+
and load `rp-source-csv`. Do not ask URL acquisition or credential questions for this path.
|
|
30
|
+
|
|
31
|
+
Treat source and Wix env files as secret-bearing once they may contain credentials. Never
|
|
32
|
+
print their contents. Use `scripts/source-secrets.js` for present/blank/missing checks and
|
|
33
|
+
Wix Secrets Manager hydration; request only unresolved secret keys through the secure flow.
|
|
34
|
+
Its result always includes `postHydrationReport` (`{ exists, keys }`, each key
|
|
35
|
+
present/blank/placeholder/missing in the local env file); read that field to confirm a
|
|
36
|
+
hydration succeeded instead of inspecting the file. Vault outcomes stay in per-key `status`.
|
|
37
|
+
Blank required values are a typed needs-user blocker; optional adapter keys may remain blank.
|
|
38
|
+
|
|
39
|
+
**Credentials already on another site.** If the user or a prior run says this source's
|
|
40
|
+
credentials were already captured for another (sibling) destination site, handle it as a
|
|
41
|
+
first-time collection for this destination under the rules above, unchanged. Secrets are
|
|
42
|
+
stored per destination site and there is no cross-site lookup or copy, so do not write an
|
|
43
|
+
ad hoc script to read or copy another site's secrets or env files. Run
|
|
44
|
+
`scripts/source-secrets.js` for this destination and request only the keys it reports
|
|
45
|
+
unresolved.
|
|
46
|
+
|
|
47
|
+
For WordPress/WooCommerce, keep REST scope and bridge access separate. Private `wp/v2` or
|
|
48
|
+
`wc/v3` capture requires `WP_USERNAME`/`WP_APPLICATION_PASSWORD`; a
|
|
49
|
+
`WMH2_MIGRATION_KEY` authenticates only `wix-wp-plugin-v2` bridge reads and never satisfies
|
|
50
|
+
that private REST requirement. When bridge-backed entities are in scope, choose its
|
|
51
|
+
credential from the detected source capabilities as described by `rp-source-wordpress`.
|
|
52
|
+
|
|
53
|
+
For Shopify private data (`sourceMode=private_data`, the "Admin API" answer), the only input is
|
|
54
|
+
`SHOPIFY_SHOP_DOMAIN=<shop>.myshopify.com` in `config/source.shopify.env` (not a secret; no
|
|
55
|
+
token or password is ever requested). Access is the import operator's Shopify CLI session,
|
|
56
|
+
approved in the browser from a dedicated migration staff account and proven by
|
|
57
|
+
`rp-source-shopify` `scripts/shopify-session-check.js`; a `sourceCredentialRef` never
|
|
58
|
+
satisfies preflight. The operator's Node.js must be 22.12 or later for this run.
|
|
59
|
+
`SHOPIFY_STORE_URL` stays the public storefront key.
|
|
60
|
+
|
|
61
|
+
## Output
|
|
62
|
+
|
|
63
|
+
`orchestration/decisions.json` entries for `sourcePlatform`, `sourceMode`, and either
|
|
64
|
+
`fileInputPaths` (file sources) or the resolved credential status (URL sources), plus the
|
|
65
|
+
populated source/Wix env file(s) with no secret values printed. This is what a dispatched
|
|
66
|
+
run must produce.
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rp-source-sfcc
|
|
3
|
+
description: >-
|
|
4
|
+
Salesforce Commerce Cloud (SFCC / Demandware, SFRA storefront) source techniques: how to
|
|
5
|
+
get a store's public data with no Business Manager or OCAPI access — the files and public
|
|
6
|
+
storefront endpoints to read, and how to scan the remaining site pages. Use when the
|
|
7
|
+
source platform is SFCC.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# rp-source-sfcc
|
|
11
|
+
|
|
12
|
+
Technique guide for reading a **public** SFCC/SFRA storefront. It ships no capture code:
|
|
13
|
+
`rp-discovery` follows its "no adapter exists → capture manually, same output contract"
|
|
14
|
+
path, and you write the capture code for each migration as generated project code under
|
|
15
|
+
`migrations/<project>/src/`, with its outputs in `migrations/<project>/data/sfcc-discovery/`.
|
|
16
|
+
⚠️ Nothing site-specific (code, ids, values, fixtures) is ever added to this skill.
|
|
17
|
+
|
|
18
|
+
## Recognize the platform
|
|
19
|
+
|
|
20
|
+
- Pipeline URLs: `/on/demandware.store/Sites-<site>-Site/<locale>/<Controller>`. The
|
|
21
|
+
homepage `og:url` often uses one, which gives you the site id and the default locale.
|
|
22
|
+
- Static assets: `/on/demandware.static/...`. Image renditions:
|
|
23
|
+
`/dw/image/v2/<REALM>_<ENV>/...`.
|
|
24
|
+
- OCAPI (`/s/<site>/dw/shop/...`, `/s/-/dw/data/...`) answers `401` without credentials.
|
|
25
|
+
Don't ask for Business Manager or OCAPI credentials in this flow; record them as a later
|
|
26
|
+
phase. Use `sourceMode=public_content`.
|
|
27
|
+
|
|
28
|
+
## Files to read first
|
|
29
|
+
|
|
30
|
+
1. **`robots.txt`.** Obey it for every request, and take the sitemap index from it.
|
|
31
|
+
2. **Sitemaps** (index → `sitemap_N.xml`). These list products, categories and
|
|
32
|
+
`<image:loc>` originals. ⚠️ **Sitemaps are incomplete.** Pre-order products and variant
|
|
33
|
+
SKUs are commonly missing, some listed products aren't searchable, and some `*.html`
|
|
34
|
+
entries are content assets or malformed. Never treat the sitemap as the catalog.
|
|
35
|
+
3. **The homepage, plus a few category and product pages.** Read the header, navigation,
|
|
36
|
+
footer and `hreflang` links. The homepage may have no `hreflang`, so learn the locale
|
|
37
|
+
routes from inner pages before you crawl.
|
|
38
|
+
|
|
39
|
+
## Public storefront endpoints (SFRA)
|
|
40
|
+
|
|
41
|
+
| Need | Endpoint / source | Notes |
|
|
42
|
+
|---|---|---|
|
|
43
|
+
| Category id | Category page markup (`cgid`) | Links carry it percent-encoded: decode it once, then encode it once when you build a request |
|
|
44
|
+
| Category members | `Search-ShowAjax?cgid=<id>&start=<n>&sz=<page>` | Page until `resultCount` is reached. Tiles are `div.product[data-pid]` with the PDP link. A zero-result listing is not a category |
|
|
45
|
+
| Full product model | `Product-Variation?pid=<id>&quantity=1` → JSON `{product}` | The main source: sales and list price, `variationAttributes` with every value, `options`, `availability`, min/max order quantity, descriptions, images with alt text, promotions, plus the store's own custom fields. It is a storefront controller, not a contracted API |
|
|
46
|
+
| Variant siblings | `Product-Variation?pid=<master>&dwvar_<master>_<attr>=<value>` | The master id appears in the value `url`s. A master alone returns `404`. Accept a value only when the response marks **that** value `selected`; `selectable: false` values may not be fetchable |
|
|
47
|
+
| Fallback | PDP `schema.org` JSON-LD (`Product`, `BreadcrumbList`) | It holds only the sales price and a flattened availability, so a record built from it lists the missing fields as unobserved |
|
|
48
|
+
| SEO and redirect source | PDP/category `<title>`, meta description, `og:*`, canonical | Detect template-generated SEO versus SEO set per item. Store paths decoded. A path is a redirect source, never a Wix slug |
|
|
49
|
+
|
|
50
|
+
The product set is the **union** of the grid tiles from every category (including
|
|
51
|
+
categories linked only from the navigation) and the sitemap's product URLs. Key products by
|
|
52
|
+
SFCC product id, not by URL: locale renditions have their own canonicals.
|
|
53
|
+
|
|
54
|
+
## Signals that are easy to misread
|
|
55
|
+
|
|
56
|
+
- **Product types.** Variation attributes create SKUs (Wix variant options). SFCC
|
|
57
|
+
*product options* (e.g. engraving) change the price, not the SKU, so they are Wix
|
|
58
|
+
modifiers. Keep them in separate fields.
|
|
59
|
+
- **Option visibility.** An option can be attached to a product but hidden on the
|
|
60
|
+
storefront: its markup is present but hidden. SFRA has no standard visibility flag. Find
|
|
61
|
+
the store's own custom field by comparing products where the option is shown and where
|
|
62
|
+
it isn't. If you can't find one, record visibility as unknown and never drop the option.
|
|
63
|
+
- **Stock.** The values are `inStock`, `preorder` (with `inStockDate`, which only means a
|
|
64
|
+
date when the status is `preorder`), and out of stock (often no status at all, only a
|
|
65
|
+
message). `lowStockCount` and `maxOrderQuantity` are hints, never authoritative
|
|
66
|
+
quantities.
|
|
67
|
+
- **Prices.** `price.list` is the compare-at price. `promotions[]` names promotion ids but
|
|
68
|
+
never their rules. `callForPrice` hides the price and add-to-cart: that needs a human
|
|
69
|
+
decision.
|
|
70
|
+
- **Images.** The original is the static path: drop `/dw/image/v2/<REALM>_<ENV>` and the
|
|
71
|
+
query string. Larger `sw`/`sh` renditions are upscales.
|
|
72
|
+
- **Ratings** can be an aggregate number with no reviews behind it, which can't be imported
|
|
73
|
+
as reviews.
|
|
74
|
+
- **Videos** may be opaque ids whose host is not exposed.
|
|
75
|
+
|
|
76
|
+
## Scan the other pages
|
|
77
|
+
|
|
78
|
+
Product and category pages are covered by the capture above. Everything else (about,
|
|
79
|
+
shipping, returns, FAQ, legal, store locator, forms, gift certificates, loyalty) is usually
|
|
80
|
+
linked **only** from the header and footer.
|
|
81
|
+
|
|
82
|
+
**Seeds:**
|
|
83
|
+
- the homepage;
|
|
84
|
+
- every link harvested from product and category pages;
|
|
85
|
+
- **every default-locale sitemap URL the catalog capture did not claim** (content assets and
|
|
86
|
+
`Page-Show` pages often appear only there).
|
|
87
|
+
|
|
88
|
+
**Rules:**
|
|
89
|
+
- Stay on the same host, follow `robots.txt`, and skip the alternate-locale prefixes.
|
|
90
|
+
- **Admit content routes:** `Page-Show?cid=<id>` (SFRA content assets), Page Designer pages,
|
|
91
|
+
`Stores-Find` (store locator), and ordinary `*.html` or extensionless content paths.
|
|
92
|
+
- **Skip only these:** assets; query variants of an already-seen page; catalog routes the
|
|
93
|
+
capture owns (`Product-*`, `Search-*`); and action or AJAX routes (`Cart-*`, `Checkout*`,
|
|
94
|
+
`Account-*`, `Login-*`, `Order-*`, `Wishlist-*`, `*-Ajax*`, form `POST` targets).
|
|
95
|
+
⚠️ Never skip a whole controller family that isn't on this list. Record it for review
|
|
96
|
+
instead.
|
|
97
|
+
- Give every URL a disposition (`captured`, `covered-by-catalog`, `skipped:<reason>` or
|
|
98
|
+
`failed:<status>`) in `data/sfcc-discovery/page-inventory.json`. Re-runs re-attempt
|
|
99
|
+
`failed`.
|
|
100
|
+
|
|
101
|
+
For each captured page, read its content and propose the Wix destination: a static page,
|
|
102
|
+
CMS items, a form, pickup locations, a gift-card product, or a manual or dropped item.
|
|
103
|
+
Policy prose such as free-shipping thresholds, delivery times, VAT wording or the return
|
|
104
|
+
window is **evidence for Wix settings, not settings**.
|
|
105
|
+
- Quote it verbatim into `data/sfcc-discovery/policy-rules.json`, with `status: candidate`.
|
|
106
|
+
- Never fill in a value the text doesn't state.
|
|
107
|
+
- Have the user confirm each rule, including threshold boundaries, shipping option titles
|
|
108
|
+
and delivery estimates. Store their verbatim answer and set `status: confirmed` before
|
|
109
|
+
anything is written to Wix.
|
|
110
|
+
|
|
111
|
+
## Be polite and resumable
|
|
112
|
+
|
|
113
|
+
- Keep one throttle for every request (start around 60 per minute), use a bounded timeout,
|
|
114
|
+
and retry `429`/`503` honoring `Retry-After`.
|
|
115
|
+
- Checkpoint as you go, so a re-run resumes and re-attempts only failures. Refresh prices
|
|
116
|
+
and stock just before import.
|
|
117
|
+
- Decode URLs tolerantly: a malformed `%` must not abort the run.
|
|
118
|
+
|
|
119
|
+
## Hand-off (existing artifacts only)
|
|
120
|
+
|
|
121
|
+
Each stage writes only its own part, through the contracts that already exist:
|
|
122
|
+
|
|
123
|
+
| Stage (producer) | Writes | Read by |
|
|
124
|
+
|---|---|---|
|
|
125
|
+
| Capture code (`migrations/<project>/src/`) | Raw data, `page-inventory.json`, `policy-rules.json` under `data/sfcc-discovery/` | `rp-discovery` |
|
|
126
|
+
| `rp-discovery` | `source-schema.json` (catalog entities, `site_page`, confirmed rules as `site_policy_rule`, gaps in `sourceMeta`) and the "Gaps" section of `source-profile.md`, naming each cutover item below | `rp-mapper` |
|
|
127
|
+
| `rp-mapper` | `mapping/mapping-plan.json`, including each routed entity's `urlPolicy`; one `mapping/review/mapping-gaps.json` row per cutover item | `rp-setup-discovery`, `rp-import-codegen` |
|
|
128
|
+
| `rp-setup-discovery` | One `setup/setup-requirements.json` entry per cutover item (`automation: manual` or `blocked`, the `requirementId` below, `recommendedAction`) | The website handoff (`setupContract.manualBlockers`) |
|
|
129
|
+
| Generated import code | URL state in `state/url-preservation/`, through `lib/url-preservation-state.js` (below) | Resume, redirect planning, cutover |
|
|
130
|
+
|
|
131
|
+
URL state, each file in its own role:
|
|
132
|
+
- `base-paths.json`: entity-level route intent from mapping `urlPolicy`.
|
|
133
|
+
- `url-ledger.ndjson`: one append-only row per public record (source URL, planned and actual
|
|
134
|
+
target).
|
|
135
|
+
- `redirects.ndjson`: only when both relative URLs are known and differ.
|
|
136
|
+
- `unresolved.ndjson`: only URLs still waiting on a route decision, a target lookup or
|
|
137
|
+
manual review.
|
|
138
|
+
- A preserved URL (same relative path) closes with no redirect.
|
|
139
|
+
|
|
140
|
+
Cutover items:
|
|
141
|
+
|
|
142
|
+
| `requirementId` | Trigger | Owner → action | Resolves when |
|
|
143
|
+
|---|---|---|---|
|
|
144
|
+
| `sfcc-redirects` | Planned `redirects.ndjson` rows exist | Cutover Operator → enter them in Wix when the domain moves (there is no redirect API) | Each planned old URL lands on its target after cutover |
|
|
145
|
+
| `sfcc-page-build:<path>` | A captured page with no automatic destination, or an `unresolved.ndjson` `manual_review` page | Cutover Operator → build the page from its captured content, or mark it dropped, before launch | The page is published at its target URL (then its ledger row and redirect follow), or a recorded drop decision exists |
|
|
146
|
+
| `sfcc-policy-unconfirmed:<domain>` | A rule still `candidate` in `policy-rules.json` | **Requires Import Operator** → "Confirm or reject the candidate rules in `data/sfcc-discovery/policy-rules.json` with the merchant, then re-run mapping and setup for `site_policy_rule`" | Every rule is `confirmed` (with the Wix setting read back) or `rejected`, each with the merchant's verbatim answer |
|
|
147
|
+
| `sfcc-call-for-price` | A product that hides its price | **Requires Import Operator** → "Ask the merchant how each call-for-price product should sell on Wix, record the answer, and re-import those products" | A recorded answer, and the products read back in that state |
|
|
148
|
+
| `sfcc-option-visibility` | Option visibility is unknown | **Requires Import Operator** → "Confirm which add-on options shoppers can buy, then re-import the affected products" | A recorded answer, and the options read back |
|
|
149
|
+
| `sfcc-partial-variants:<master>` | Unresolved variant values | **Requires Import Operator** → "Re-run the capture to re-attempt them; ask the merchant whether any remaining values are retired" | Every value is resolved or recorded as retired |
|
|
150
|
+
| `sfcc-authenticated-data` | Always, on a public-only run | Cutover Operator → tell the merchant that promotion rules, real inventory, customers, orders, gift-certificate balances and offline products need Business Manager access later | A recorded merchant acknowledgement, or the later authenticated pass is complete |
|
|
151
|
+
| `sfcc-alternate-locale:<locale>` | Locale renditions seen but not captured | Cutover Operator → tell the merchant that locale isn't migrated yet | A recorded merchant acknowledgement, or a later locale pass is complete |
|
|
152
|
+
|
|
153
|
+
⚠️ No cutover UI reads these yet. They are preserved for it, not wired to it.
|
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rp-source-shopify
|
|
3
|
+
description: >-
|
|
4
|
+
Shopify private-data source adapter, read entirely through the Shopify CLI (`shopify store
|
|
5
|
+
execute`) on the import operator's machine: discovery capture, its resumable step sequence,
|
|
6
|
+
source-coverage rows, the bulk extract of the full store, and the read contract for codegen. Use when the source platform is
|
|
7
|
+
Shopify and the Admin API (private data) was chosen. The public storefront route is
|
|
8
|
+
`rp-quick-shopify` / public content, not this skill.
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# rp-source-shopify
|
|
12
|
+
|
|
13
|
+
Shopify **source adapter** for private data: orders, customers, gift cards, discounts, draft and
|
|
14
|
+
archived products, content, navigation, locations, shipping, metaobjects, files and redirects.
|
|
15
|
+
It follows the same contract as `rp-source-wordpress` and `rp-source-csv`: it discovers what the
|
|
16
|
+
store holds, writes the standard discovery files, records everything it could not capture as a
|
|
17
|
+
source-coverage row, and hands over to the general mapping, approval, import and reporting
|
|
18
|
+
steps. Nothing it reads is written back; the store is never changed.
|
|
19
|
+
|
|
20
|
+
## When this skill is used
|
|
21
|
+
|
|
22
|
+
- **`rp-discovery`** runs the *Discovery* section when the Shopify acquisition-mode answer was
|
|
23
|
+
`Admin API` (`sourceMode=private_data`).
|
|
24
|
+
- **`rp-import-codegen`** reads the *Read contract* section.
|
|
25
|
+
|
|
26
|
+
## Access path: the Shopify CLI, read-only
|
|
27
|
+
|
|
28
|
+
Every call is `store execute --store <shop>.myshopify.com --query <query> --json --version
|
|
29
|
+
2026-10`, run through `lib/shopify-cli.js` by the adapter's own Shopify CLI install, using the
|
|
30
|
+
session the operator approved in the browser on their machine. No token is stored by this
|
|
31
|
+
adapter.
|
|
32
|
+
|
|
33
|
+
- **Read-only by construction.** A mutation document is refused before any process starts. The
|
|
34
|
+
one exception is the bulk extract's start: Shopify classes `bulkOperationRunQuery` (a read job)
|
|
35
|
+
as a mutation, so `startBulkOperation` sends that one fixed document with `--allow-mutations`.
|
|
36
|
+
No other call can carry the flag, and operations are never cancelled.
|
|
37
|
+
- **A GraphQL error is data about the store**, returned to the caller: discovery turns it into a
|
|
38
|
+
`capture-failed` coverage row. A read Shopify throttles on all 6 calls (1, 2, 4, 8, 16 s
|
|
39
|
+
between them) is `shopify_throttled`, also a `capture-failed` row at discovery. **Any other CLI
|
|
40
|
+
failure stops the step** (exit 2); it is never retried in a loop and never read as "no records".
|
|
41
|
+
- Shopify's terms forbid automating the store admin in a browser. Never do it.
|
|
42
|
+
|
|
43
|
+
### The connection: one dedicated staff account, checked before every read
|
|
44
|
+
|
|
45
|
+
Inputs: `SHOPIFY_SHOP_DOMAIN=<shop>.myshopify.com` in `config/source.shopify.env` (not a
|
|
46
|
+
secret). The operator's Node.js must be **22.12 or later**.
|
|
47
|
+
|
|
48
|
+
1. The store owner creates a staff account for the migration (Administrator role, or a custom
|
|
49
|
+
role with app and channel management) and gives it to the import operator. The owner's own
|
|
50
|
+
account is not an allowed fallback.
|
|
51
|
+
2. Run the session check from this skill directory:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
node scripts/shopify-session-check.js --project <migrations-root>/<project>
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
It checks, in order and stopping at the first failure: Node.js ≥ 22.12; the adapter's own
|
|
58
|
+
Shopify CLI at exactly 4.8.3 in `~/.replatform/tools/shopify-cli-4.8.3`; the connection and
|
|
59
|
+
Shopify's scope readback (every scope the reads declare); and that Shopify lists the pinned
|
|
60
|
+
Admin API version `2026-10` as supported. Then it writes
|
|
61
|
+
`data/shopify-discovery/session-receipt.json` (no secret, no personal data).
|
|
62
|
+
3. The first time, it asks the **first-connection question** (a discovery `question` action):
|
|
63
|
+
was the connection approved from the dedicated migration staff account? Answer
|
|
64
|
+
`dedicated-account` only when it was. `other-account` stops: discovery does not start and the
|
|
65
|
+
question is asked again after the owner provides a dedicated account.
|
|
66
|
+
4. Follow its stop codes:
|
|
67
|
+
|
|
68
|
+
| Code | What the operator does |
|
|
69
|
+
| --- | --- |
|
|
70
|
+
| `shopify_cli_node_unsupported` | **Requires Import Operator.** Switch this terminal to Node.js 22.12 or later (for example the current LTS) with the usual installer or version manager, check `node --version`, run the check again. Nothing was installed or read |
|
|
71
|
+
| `shopify_cli_not_installed` / `shopify_cli_version_changed` | Ask the operator; with their consent run the check again with `--install` (installs or reinstalls exactly 4.8.3 into the adapter folder, about 52 MB, nothing global) |
|
|
72
|
+
| `shopify_session_missing` / `shopify_scopes_missing` | Run the check with `--connect` and approve in the browser while signed in to the store as the dedicated staff account. `--connect` requests the full derived scope list |
|
|
73
|
+
| `shopify_cli_incompatible` | The adapter install is damaged or moved; reinstall with `--install` |
|
|
74
|
+
| `shopify_api_version_unsupported` | Stop and report: moving the pin is a tested code change, never a workaround |
|
|
75
|
+
|
|
76
|
+
**Never type `shopify store auth` or any other bare `shopify` command.** `--connect` starts the
|
|
77
|
+
browser approval itself through the adapter's CLI with Shopify's self-update switched off; a
|
|
78
|
+
bare command would run another Shopify CLI and could upgrade a machine-wide installation.
|
|
79
|
+
Never run `npm -g`, `shopify config autoupgrade`, or change any Shopify CLI setting.
|
|
80
|
+
|
|
81
|
+
Exit codes: **0** passed and confirmed; **3** the first-connection question is pending;
|
|
82
|
+
**2** stopped (the printed code says why); **1** usage error.
|
|
83
|
+
|
|
84
|
+
Run the check **before discovery and before each extract**. Discovery refuses to start
|
|
85
|
+
(`shopify_session_not_checked`, `shopify_first_connection_unconfirmed`) until the latest check
|
|
86
|
+
passed for this store and the first-connection answer is `dedicated-account`.
|
|
87
|
+
|
|
88
|
+
### When the connection expires
|
|
89
|
+
|
|
90
|
+
A read whose CLI session expired stops the step with `source_auth_expired` and creates a
|
|
91
|
+
`manual_action` user action for the stage (`discovery` or `execution`); the run holds at
|
|
92
|
+
`awaiting_user_action`. **Requires Import Operator:** run the session check (with `--connect`
|
|
93
|
+
if asked), then answer the request and run the same step again. Only the receipt changes, so the
|
|
94
|
+
step resumes where it stopped and no finished read is repeated.
|
|
95
|
+
|
|
96
|
+
### The staff account after cutover
|
|
97
|
+
|
|
98
|
+
The first passing check after a `dedicated-account` answer records the account in
|
|
99
|
+
`data/shopify-discovery/staff-access.json`. From then on every completion report lists
|
|
100
|
+
`shopify-staff-account-removal` (high) until the owner's removal is recorded:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
node scripts/shopify-session-check.js --project <dir> --confirm-staff-removal owner-removed-account
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Remove the account only after cutover and after the last read from Shopify (including any
|
|
107
|
+
catch-up). If the confirmation reports the record unreadable or missing, run
|
|
108
|
+
`--repair-staff-access` first: it keeps the damaged file aside, rebuilds a `pending` entry and
|
|
109
|
+
never writes `confirmed`. Nothing else closes the action; never edit the file by hand.
|
|
110
|
+
|
|
111
|
+
## Discovery
|
|
112
|
+
|
|
113
|
+
Run from this skill directory:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
node scripts/shopify-discovery.js --project <migrations-root>/<project> --store <shop>.myshopify.com
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
The steps run in this order. Each records its result in
|
|
120
|
+
`data/shopify-discovery/discovery-steps.json` before the next starts, so a restart runs only
|
|
121
|
+
the steps not yet recorded and reads no entity it already captured:
|
|
122
|
+
|
|
123
|
+
| Step | What it does | Writes |
|
|
124
|
+
| --- | --- | --- |
|
|
125
|
+
| `capture` | One count (where the API has one) and up to 3 sample records per entity, plus the shop and its policies | `entities/<entity>.json` |
|
|
126
|
+
| `withheld-details` | Eight ordinary 3-record probes classify withheld name, email, phone and address kinds for customers and orders | `kind-probes.json` |
|
|
127
|
+
| `gift-card-census` | Exact-count-gated gift-card census; every positive balance is owed | `bulk-manifest.json`, `gift-card-census.json` |
|
|
128
|
+
| `order-window` | Orders older than the CLI's ~60-day order-history window (below) | `order-window.json` |
|
|
129
|
+
| `questions` | Asks the merchant what earlier steps could not read, as discovery `question` user actions | answered `orchestration/user-actions/*.json` |
|
|
130
|
+
| `coverage` | Builds the coverage rows and writes the raw-capture index | `source-coverage.json`, `README.md` |
|
|
131
|
+
|
|
132
|
+
⚠️ When this bundle does not ship a step's implementation, discovery **stops at that step** with
|
|
133
|
+
`shopify_discovery_step_unavailable` (exit 2) after recording the steps before it. Do not work
|
|
134
|
+
around it: a discovery that skipped the check would look complete while missing data. Report it
|
|
135
|
+
to the user.
|
|
136
|
+
|
|
137
|
+
Exit codes: **0** complete; **3** a merchant question is pending — the run holds at
|
|
138
|
+
`awaiting_user_action`; answer it, then run the same command again (nothing is read again);
|
|
139
|
+
**2** stopped, with the reason code in the printed JSON; **1** usage error.
|
|
140
|
+
|
|
141
|
+
To re-read entities after their access is fixed, add `--reread <entity>` (repeatable). Only those
|
|
142
|
+
entities are read again; the coverage file is rebuilt.
|
|
143
|
+
|
|
144
|
+
**One store per capture.** The store is recorded in `discovery-steps.json` and in every
|
|
145
|
+
`entities/<entity>.json` before anything is read. A run for any other `--store` stops with
|
|
146
|
+
`shopify_discovery_store_mismatch` (exit 2) before reading or changing anything, so no artifact
|
|
147
|
+
ever combines two stores. `--restart` discards the whole `data/shopify-discovery/` capture
|
|
148
|
+
(steps, entities, every technical step's files, coverage file, index) and reads from scratch; it
|
|
149
|
+
keeps the connection records (`session-receipt.json`, `staff-access.json`). It
|
|
150
|
+
is refused with `shopify_restart_blocked_handoff` when this project already hands a different
|
|
151
|
+
store to mapping — `source-profile.md`, `source-schema.json` or the promoted
|
|
152
|
+
`discovery/source-coverage.json` exists — because those would keep presenting the first store:
|
|
153
|
+
start a new migration project for the other store instead. It also refuses with
|
|
154
|
+
`shopify_restart_blocked` while a merchant question from the previous capture is
|
|
155
|
+
still unanswered. Never delete files by hand to get past a mismatch.
|
|
156
|
+
|
|
157
|
+
### Order-history window
|
|
158
|
+
|
|
159
|
+
Through the CLI Shopify shows only the last ~60 days of orders, on every read path. The
|
|
160
|
+
`order-window` step reads `shop.createdAt`:
|
|
161
|
+
|
|
162
|
+
- shop older than the window, or `createdAt` unreadable → row `shopify:orders-before-window`;
|
|
163
|
+
- shop younger than the window → it reads the visible order with the earliest `processedAt`; one
|
|
164
|
+
processed before the shop existed (imported history) → the row, no question; otherwise it asks
|
|
165
|
+
the merchant "Were orders imported into this Shopify store from another system?" (`no` → no
|
|
166
|
+
row; `yes` or `unknown` → the row).
|
|
167
|
+
|
|
168
|
+
Never use the visible orders' dates as proof of completeness. The row is `auth-gated` /
|
|
169
|
+
`requires-development`, holds the run at mapping until it has a disposition, and loss is
|
|
170
|
+
accepted only through a `loss-accepted` gate.
|
|
171
|
+
|
|
172
|
+
### Withheld customer and order details
|
|
173
|
+
|
|
174
|
+
The `withheld-details` step sends one ordinary query per entity and protected kind. A kind is
|
|
175
|
+
withheld only when Shopify returns an error path naming one of that kind's fields. A blank with no
|
|
176
|
+
error is the merchant's blank; the accepted policy deliberately adds no full-store census. A
|
|
177
|
+
pathless `ACCESS_DENIED`, an unrelated path or another failure produces `shopify:<entity>`
|
|
178
|
+
`capture-failed`, never a guessed kind. A pathless denial first rechecks the session and permits at
|
|
179
|
+
most one reapproval.
|
|
180
|
+
|
|
181
|
+
`kind-probes.json` records only outcomes, paths and error codes, plus the per-entity projection;
|
|
182
|
+
it never records customer values. Each completed probe is atomic, so restart sends only missing
|
|
183
|
+
probes. `--reread customers` or `--reread orders` also clears that entity's probes.
|
|
184
|
+
|
|
185
|
+
The extract removes exactly the withheld kind's fields from customer and order queries. Name is
|
|
186
|
+
first/last name; address is address lines, zip and geolocation. Company, city, province, country
|
|
187
|
+
and every other explicitly unprotected field remain. A customer is written to
|
|
188
|
+
`customers-withheld-identity.ndjson`, not `customers.ndjson`, only when an identity kind is
|
|
189
|
+
withheld and no readable name, email or phone remains. The manifest records
|
|
190
|
+
`withheldIdentityCount`, and the count check includes the sidecar.
|
|
191
|
+
|
|
192
|
+
### Gift cards: codes never move, balances remain owed
|
|
193
|
+
|
|
194
|
+
Shopify exposes only `lastCharacters` and `maskedCode`, never a reusable full code. Never create
|
|
195
|
+
a spendable Wix gift card from this read. The census and every extract run the same bulk query,
|
|
196
|
+
then gate it before `done` with `giftCardsCount(limit: null)` bound to the read's `createdAt`.
|
|
197
|
+
Only `precision: EXACT` with at least that many read cards passes. A short or inexact count, a
|
|
198
|
+
rejected filter, or an invalid plain-decimal amount fails the entry and records
|
|
199
|
+
`shopify:gift-cards`; the extract remains stopped until `--retry-failed` starts a new read.
|
|
200
|
+
|
|
201
|
+
Every positive balance is owed, including disabled cards and cards carrying an expiry date.
|
|
202
|
+
Money is summed exactly per currency without floating point or conversion. The census keeps only
|
|
203
|
+
counts, per-currency totals, disabled/expired counts and read evidence; it stores no card id,
|
|
204
|
+
masked code or customer value. A nonempty census emits `shopify:gift-card-codes`. If cards first
|
|
205
|
+
appear during extract, that row is added and the extract stops so mapping can decide it.
|
|
206
|
+
|
|
207
|
+
### Entities read
|
|
208
|
+
|
|
209
|
+
`products` (all statuses, with variants), `collections`, `orders` (with refunds and
|
|
210
|
+
fulfillments), `customers`, `gift-cards`, `discounts`, `pages`, `blogs`, `articles`, `menus`,
|
|
211
|
+
`locations`, `inventory-items`, `delivery-profiles`, `metaobjects` (listed through their
|
|
212
|
+
definitions, each with its count), `files`, `url-redirects`, and the singletons `shop` and
|
|
213
|
+
`shop-policies`. `lib/discovery-reads.js` holds each named query.
|
|
214
|
+
|
|
215
|
+
### Synthesize, then promote
|
|
216
|
+
|
|
217
|
+
After the script exits 0, synthesize `source-profile.md` and the project-root
|
|
218
|
+
`source-schema.json` from `data/shopify-discovery/entities/*.json`, following
|
|
219
|
+
`source-schema.example.json` in this directory. Per entity:
|
|
220
|
+
|
|
221
|
+
- `rawFile` is `entities/<entity>.json`; `recordCount` is its `count` **only when its
|
|
222
|
+
`countExact` is true** (Shopify answered `precision: EXACT`). Otherwise `recordCount` is null:
|
|
223
|
+
where the API has no count, say so; where the count is a lower bound (`countPrecision:
|
|
224
|
+
"AT_LEAST"`), put it in `recordCountAtLeast` and never write it as `recordCount`. Never invent
|
|
225
|
+
a count. `inUse` is true when samples were returned.
|
|
226
|
+
- An entity whose file carries `errors[]` is **not** synthesized as an empty entity: it is a
|
|
227
|
+
coverage row already.
|
|
228
|
+
- Record in `source-profile.md`: access is the operator's Shopify CLI session, read-only; the CLI
|
|
229
|
+
only shows recent orders; the store's currency and timezone from the `shop` singleton.
|
|
230
|
+
|
|
231
|
+
Then promote, from `rp-discovery`:
|
|
232
|
+
|
|
233
|
+
```bash
|
|
234
|
+
node scripts/promote-source-coverage.js <migrations-root>/<project> --adapter shopify
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
## Extract
|
|
238
|
+
|
|
239
|
+
The full store is read through Shopify's server-side **bulk export**, one dataset at a time,
|
|
240
|
+
never page by page. Run from this skill directory, after the session check:
|
|
241
|
+
|
|
242
|
+
```bash
|
|
243
|
+
node scripts/shopify-extract.js --project <migrations-root>/<project> [--retry-failed] [--catch-up]
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
The store comes from `config/source.shopify.env` (or `--store`). It writes
|
|
247
|
+
`data/source-extract/<entity>.ndjson` — `products`, `collections`, `customers`, `orders` (the
|
|
248
|
+
three order queries joined by order id: core, refunds, fulfillments), `gift-cards-codeless`, `discounts`,
|
|
249
|
+
`delivery-profiles`, `inventory-items`, `pages`, `blogs`, `articles`, `menus`, `url-redirects`,
|
|
250
|
+
`locations`, `metaobjects`, `files` — plus the optional
|
|
251
|
+
`customers-withheld-identity.ndjson` — and `data/source-extract/extract-manifest.json`. The 18
|
|
252
|
+
bulk queries and eight `probe-*.graphql` ordinary queries each start with a `# scopes:` line the
|
|
253
|
+
session check derives the required scopes from. Orders and customers are filtered to the
|
|
254
|
+
manifest's snapshot time `T`.
|
|
255
|
+
|
|
256
|
+
- **One operation at a time**, in the table order. Each state change is one atomic manifest
|
|
257
|
+
write (`pending → starting → running → downloaded → done`, or `settling → failed | denied`), so
|
|
258
|
+
a restart resumes at the exact state and a finished dataset is never read again. A dataset
|
|
259
|
+
whose start was interrupted is simply started again; the first job's result is never read.
|
|
260
|
+
- **Only a complete download counts.** A file is `downloaded` only for HTTP 200, exactly
|
|
261
|
+
`fileSize` bytes, ending in a newline, every line one JSON object. An expired link (HTTP 400 or
|
|
262
|
+
403) re-runs the dataset (at most 2 times); other failures download again (3 tries), then one
|
|
263
|
+
re-run, then `failed`.
|
|
264
|
+
- **A failed, expired, cancelled or partial operation** is re-run once, then `failed`
|
|
265
|
+
(`shopify_bulk_failed`). A `failed` extract dataset stops the extract now and on every later
|
|
266
|
+
start. `ACCESS_DENIED` first runs the session check; a refusal with a valid session is final
|
|
267
|
+
for that dataset (customer and order queries go to the withheld-detail attribution of the
|
|
268
|
+
customer/order spec; every other dataset is `failed`).
|
|
269
|
+
- **Customer/order denial attribution.** A valid-session bulk denial enters `settling`, then
|
|
270
|
+
runs that entity's four ordinary probes. A named, newly withheld kind is upserted and promoted
|
|
271
|
+
as its own coverage row and stops with `shopify_protected_fields_withheld`; after mapping, the
|
|
272
|
+
denied query resets with the narrower projection. An all-readable, pathless or unrelated
|
|
273
|
+
diagnostic is `unattributed`, leaves the projection unchanged and stops every start with
|
|
274
|
+
`shopify_bulk_failed` until `--retry-failed`. Each diagnostic is keyed by query and
|
|
275
|
+
`settlingAt`, so handler replay never sends a finished probe or duplicates a row.
|
|
276
|
+
- **`settling`** makes consequences recoverable: the verbatim error is written first, then the
|
|
277
|
+
outcome's idempotent handler (the coverage row), then the terminal state. A restart reruns the
|
|
278
|
+
handler of any `settling` dataset before anything else.
|
|
279
|
+
- **Overdue.** A job still preparing 4 hours after it started creates one `question` user action
|
|
280
|
+
(`shopify_bulk_overdue`, choices `wait` / `abort`) and the step holds at
|
|
281
|
+
`awaiting_user_action` (exit 3). Answer it and run the same command again. `abort` makes the
|
|
282
|
+
dataset `failed` (`shopify_bulk_overdue_aborted`); Shopify's operation is not cancelled.
|
|
283
|
+
- **Count check.** After the read, customers (plus the withheld-identity file) and orders must
|
|
284
|
+
reach Shopify's own exact count at `T`. Fewer, or a count Shopify gives only as `AT_LEAST`, is a
|
|
285
|
+
`capture-failed` row `shopify:<entity>` (through `lib/import-findings.js` rules) and the stop
|
|
286
|
+
`shopify_extract_count_short` / `shopify_extract_count_inexact`; the run goes back through
|
|
287
|
+
mapping. A read is a picture of the store while it ran, not a frozen snapshot.
|
|
288
|
+
- **Gift-card gate.** While `gift-cards` is still `downloaded`, its exact count and every decimal
|
|
289
|
+
amount are checked. Only a pass writes the codeless per-read file named by `cardsFile`, records
|
|
290
|
+
owed counts and balances in the manifest, and permits `done`. Files no `done` entry names are
|
|
291
|
+
ignored. `gift-cards-codeless.ndjson` contains no `maskedCode` and is never a Wix gift-card
|
|
292
|
+
import file.
|
|
293
|
+
- **`--retry-failed`** (Import Operator): sends every stopping dataset — each `failed` entry, each
|
|
294
|
+
unattributed `denied` entry, and the datasets whose count check stopped the extract — back to
|
|
295
|
+
`pending` and reads them again. Nothing else is reset.
|
|
296
|
+
- **`--catch-up`** (the source catch-up rerun): archives a `complete` manifest as
|
|
297
|
+
`extract-manifest.<T_prev>.json` and reads the whole store again in full with a new `T`. A
|
|
298
|
+
manifest that is not complete is resumed instead. Without the flag a `complete` manifest with
|
|
299
|
+
its final files present reads nothing.
|
|
300
|
+
|
|
301
|
+
Exit codes: **0** complete; **3** an overdue question is pending; **2** stopped (the printed
|
|
302
|
+
code says why; finished datasets are kept); **1** usage error. Stop codes are in
|
|
303
|
+
`rp-execute-import`. A manifest bound to another store stops with `shopify_extract_store_mismatch`.
|
|
304
|
+
|
|
305
|
+
**Cutover — final re-read.** Every import leaves one task: after the merchant's Shopify activity
|
|
306
|
+
stops (and before the staff account is removed), run the session check, then the rerun for new
|
|
307
|
+
and modified records, which runs `shopify-extract.js --catch-up`. Check that
|
|
308
|
+
`extract-manifest.json` says `complete`, every entry's `readAt` is after activity stopped, and the
|
|
309
|
+
rerun completed. **Requires Import Operator.**
|
|
310
|
+
|
|
311
|
+
**Cutover — export withheld details.** Any withheld-kind or hollow-customer row also keeps the
|
|
312
|
+
high `shopify-withheld-details-export` completion action open, whatever its mapping disposition.
|
|
313
|
+
After the final catch-up and after the merchant exports customers and orders from Shopify Admin,
|
|
314
|
+
record the attestation in the original migration environment:
|
|
315
|
+
|
|
316
|
+
```bash
|
|
317
|
+
node scripts/shopify-discovery.js --project <migrations-root>/<project> --confirm-withheld-export owner-exported
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
Regenerate the completion report and check the action is gone. A later Shopify read or a new
|
|
321
|
+
withheld row reopens it. This is an operator attestation, not a Shopify verification. The future
|
|
322
|
+
0197/0198 catch-up/checklist integration is not wired; the completion report is the durable
|
|
323
|
+
handoff. **Requires Import Operator.**
|
|
324
|
+
|
|
325
|
+
**Cutover — owed gift-card balances.** The completion report always reevaluates the high-severity
|
|
326
|
+
`shopify-gift-card-codes-not-migrated` action whenever `shopify:gift-card-codes` exists, even
|
|
327
|
+
after its loss was accepted. **Requires Import Operator:**
|
|
328
|
+
|
|
329
|
+
```bash
|
|
330
|
+
node scripts/shopify-gift-card-remedy.js export --project <project>
|
|
331
|
+
node scripts/shopify-gift-card-remedy.js activity-stopped --project <project> --at <ISO-time> --by <name>
|
|
332
|
+
# Run the final --catch-up read here.
|
|
333
|
+
node scripts/shopify-gift-card-remedy.js record-replacements --project <project> --evidence <file.csv> --by <name>
|
|
334
|
+
# Or record the still-open date on which Shopify will stop redeeming them:
|
|
335
|
+
node scripts/shopify-gift-card-remedy.js keep-redeeming --project <project> --until <YYYY-MM-DD> --by <name>
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
`export` writes `data/shopify-cutover/gift-cards-owed.csv` with id, last characters, balance,
|
|
339
|
+
currency, enabled, expiry and current replaced state — no code or customer column. A card closes
|
|
340
|
+
only when the current manifest has a successful read started after `activity-stopped`, and its
|
|
341
|
+
CSV evidence names a Wix replacement worth at least that card's balance in the same currency
|
|
342
|
+
plus a non-future holder-notification date and confirmer. A newer card or higher balance reopens
|
|
343
|
+
that card; a pending/failed read or newer activity-stop record reopens all. Keeping Shopify
|
|
344
|
+
redeeming is never closure.
|
|
345
|
+
|
|
346
|
+
## Coverage rows
|
|
347
|
+
|
|
348
|
+
The adapter always writes `data/shopify-discovery/source-coverage.json` (`platform: "shopify"`,
|
|
349
|
+
`adapter: "shopify"`), with `rows: []` when there is nothing to report. Rows are decided at
|
|
350
|
+
mapping like any source's rows.
|
|
351
|
+
|
|
352
|
+
| `coverageId` | When | `reason` | `recoverability` |
|
|
353
|
+
| --- | --- | --- | --- |
|
|
354
|
+
| `shopify:<entity>` | A discovery read of that entity failed | `capture-failed` | `import-operator` |
|
|
355
|
+
| `shopify:<entity>` | A throttled read, an unattributed protected-field probe, a failed or overdue-aborted extract dataset, or a full read short of Shopify's count | `capture-failed` | `import-operator` |
|
|
356
|
+
| `shopify:orders-before-window` | Orders older than the CLI window may exist (order-window step) | `auth-gated` | `requires-development` |
|
|
357
|
+
| `shopify:customer-<kind>`, `shopify:order-<kind>` (`name`, `email`, `phone`, `address`) | An ordinary probe error path names that withheld kind | `auth-gated` | `requires-development` |
|
|
358
|
+
| `shopify:customers-withheld-identity` | At least one extracted customer has no readable identity after projection | `auth-gated` | `requires-development` |
|
|
359
|
+
| `shopify:gift-card-codes` | Gift-card codes are never readable | `route-unsupported` | `not-recoverable` |
|
|
360
|
+
|
|
361
|
+
`capability` is the registry string where one exists (`commerce.orders`, `crm.contact`,
|
|
362
|
+
`commerce.gift-cards`, `commerce.catalog-product`, …); otherwise `null` with
|
|
363
|
+
`capabilityUnregistered: true`. ⚠️ A row carries no count field; counts stay in the entity files
|
|
364
|
+
and the row's `evidence` points at them.
|
|
365
|
+
|
|
366
|
+
## Read contract
|
|
367
|
+
|
|
368
|
+
For `rp-import-codegen` when `source-schema.json.platform === "shopify"`:
|
|
369
|
+
|
|
370
|
+
- Vendor `lib/shopify-cli.js` and read only through it, with its defaults (the adapter's CLI,
|
|
371
|
+
`CI=1`, `--version 2026-10`); never pass `command` or `env`. No direct HTTP, no stored token,
|
|
372
|
+
never `--allow-mutations` for a read. The discovery samples and counts page with `readAllPages`
|
|
373
|
+
(`first: 250`, 500 ms apart); a full-store read never does.
|
|
374
|
+
- Run the session check before each extract. On `source_auth_expired` call
|
|
375
|
+
`lib/shopify-session.js` `recordAuthExpired(projectDir, { stage: 'execution', store })` and stop;
|
|
376
|
+
the extract resumes from its manifest after re-approval.
|
|
377
|
+
- The full-store extract is the adapter's bulk extractor (`scripts/shopify-extract.js`, above), not
|
|
378
|
+
a generated per-record pager: generate the importer to read `data/source-extract/<entity>.ndjson`
|
|
379
|
+
only when `extract-manifest.json` says `complete`. If this bundle does not ship
|
|
380
|
+
it, stop codegen and report it.
|
|
381
|
+
- **A gap first found during the extract** is recorded with `lib/import-findings.js`
|
|
382
|
+
`stopWithFinding(projectDir, { row, code })`: the row is added to the raw coverage file by
|
|
383
|
+
`coverageId` (replacing a row with the same id), the file is re-promoted, and the extract stops
|
|
384
|
+
with `code`. From there the run goes back through mapping by the pipeline's general path, the
|
|
385
|
+
same as for every source.
|
|
386
|
+
|
|
387
|
+
## Not in this adapter
|
|
388
|
+
|
|
389
|
+
- Installed apps and their data (reviews, subscriptions, loyalty points) are not inventoried
|
|
390
|
+
here.
|
|
391
|
+
- The merchant's own CSV exports go through `rp-source-csv`, a separate, degraded route.
|
|
392
|
+
- The final catch-up remains the source-catch-up task shared with every source. Withheld-detail
|
|
393
|
+
export and staff-account removal are tracked here (above) until the cutover checklist carries
|
|
394
|
+
them.
|