@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
|
@@ -1,9 +1,21 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
const { execFile } = require('node:child_process');
|
|
4
|
+
const { promisify } = require('node:util');
|
|
5
|
+
const fs = require('node:fs');
|
|
3
6
|
const path = require('node:path');
|
|
4
|
-
const { statEnvKeys } = require('./config-env.js');
|
|
7
|
+
const { statEnvKeys, readEnvFile } = require('./config-env.js');
|
|
8
|
+
const { SESSION_RECEIPT_FILE } = require('./source-access.js');
|
|
9
|
+
const {
|
|
10
|
+
SOURCE_MODE_DECISION_KEYS,
|
|
11
|
+
getDecisionValue,
|
|
12
|
+
invalidSourceModeMessage,
|
|
13
|
+
isKnownSourceMode,
|
|
14
|
+
normalizeSourceMode,
|
|
15
|
+
} = require('./orchestration-decisions.js');
|
|
5
16
|
|
|
6
17
|
const SCHEMA_VERSION = 1;
|
|
18
|
+
const execFileAsync = promisify(execFile);
|
|
7
19
|
|
|
8
20
|
const SOURCE_CONFIG_BY_PLATFORM = {
|
|
9
21
|
wordpress: ['WP_BASE_URL'],
|
|
@@ -15,12 +27,315 @@ const SOURCE_CONFIG_BY_PLATFORM = {
|
|
|
15
27
|
csv: [],
|
|
16
28
|
};
|
|
17
29
|
|
|
30
|
+
const PRIVATE_SOURCE_CONFIG_BY_PLATFORM = {
|
|
31
|
+
wordpress: ['WP_BASE_URL', 'WP_USERNAME', 'WP_APPLICATION_PASSWORD'],
|
|
32
|
+
woocommerce: ['WP_BASE_URL', 'WP_USERNAME', 'WP_APPLICATION_PASSWORD'],
|
|
33
|
+
// The store's *.myshopify.com domain, not a secret. The connection itself is the
|
|
34
|
+
// operator's Shopify CLI session, proven by the session check (probeShopifySession), never by a
|
|
35
|
+
// sourceCredentialRef string. SHOPIFY_STORE_URL stays the public storefront probe's key.
|
|
36
|
+
shopify: ['SHOPIFY_SHOP_DOMAIN'],
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
// wix-wp-plugin-v2's migration key authenticates only the plugin's own /structure and
|
|
40
|
+
// /query routes. Track its presence in the preflight receipt, but never let it satisfy a
|
|
41
|
+
// private/authenticated WordPress REST requirement: wp/v2 and wc/v3 still need their own
|
|
42
|
+
// credential.
|
|
43
|
+
const MIGRATION_KEY_CREDENTIAL_BY_PLATFORM = {
|
|
44
|
+
wordpress: 'WMH2_MIGRATION_KEY',
|
|
45
|
+
woocommerce: 'WMH2_MIGRATION_KEY',
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
// Local signals that the user asked for authenticated capture. Only key names are ever
|
|
49
|
+
// reported, never values. WP_BASE_URL and WMH2_MIGRATION_KEY are not intent signals.
|
|
50
|
+
const AUTH_INTENT_ENV_KEYS = ['WP_USERNAME', 'WP_APPLICATION_PASSWORD'];
|
|
51
|
+
|
|
52
|
+
// `acquisitionMode` is not a decision key the product records, but earlier runs invented
|
|
53
|
+
// it from prose. A stray value naming authentication is still read as intent.
|
|
54
|
+
const STRAY_ACQUISITION_MODE_KEY = 'acquisitionMode';
|
|
55
|
+
const AUTH_INTENT_ACQUISITION_VALUES = ['authenticated', 'private', 'private_data'];
|
|
56
|
+
|
|
57
|
+
function rawDecisionValue(decisions, key) {
|
|
58
|
+
const entry = decisions && decisions[key];
|
|
59
|
+
return entry && Object.prototype.hasOwnProperty.call(entry, 'value') ? entry.value : null;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Returns the key names of every local authenticated-intent signal found.
|
|
63
|
+
async function findAuthIntentSignals(projectDir, decisions, sourcePlatform, credentialRef) {
|
|
64
|
+
const signals = [];
|
|
65
|
+
if (sourcePlatform) {
|
|
66
|
+
const sourceEnv = await statEnvKeys(configFileForPlatform(projectDir, sourcePlatform), AUTH_INTENT_ENV_KEYS);
|
|
67
|
+
for (const key of AUTH_INTENT_ENV_KEYS) {
|
|
68
|
+
if (sourceEnv.keys[key] === 'present') signals.push(key);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (credentialRef) signals.push('sourceCredentialRef');
|
|
72
|
+
// A Shopify session receipt means a private connection was checked for this project.
|
|
73
|
+
if (fs.existsSync(path.join(projectDir, SESSION_RECEIPT_FILE))) signals.push(SESSION_RECEIPT_FILE);
|
|
74
|
+
// A second sourceMode spelling that names private mode conflicts with the resolved one.
|
|
75
|
+
for (const key of SOURCE_MODE_DECISION_KEYS) {
|
|
76
|
+
if (normalizeSourceMode(rawDecisionValue(decisions, key)) === 'private_data') signals.push(key);
|
|
77
|
+
}
|
|
78
|
+
const acquisitionMode = rawDecisionValue(decisions, STRAY_ACQUISITION_MODE_KEY);
|
|
79
|
+
if (typeof acquisitionMode === 'string' && AUTH_INTENT_ACQUISITION_VALUES.includes(acquisitionMode.trim().toLowerCase())) {
|
|
80
|
+
signals.push(STRAY_ACQUISITION_MODE_KEY);
|
|
81
|
+
}
|
|
82
|
+
return signals;
|
|
83
|
+
}
|
|
84
|
+
|
|
18
85
|
function makeCheck(id, label, status, message, details = {}) {
|
|
19
86
|
return { id, label, status, message, ...details };
|
|
20
87
|
}
|
|
21
88
|
|
|
22
|
-
|
|
23
|
-
|
|
89
|
+
// Reports whether this project is recording telemetry. It only ever reports: the check never
|
|
90
|
+
// starts a journal on the run's behalf, because a check that quietly created one would report a
|
|
91
|
+
// healthy run it had just manufactured, and could attach a fresh journal to a project that
|
|
92
|
+
// already owns a finished one. Starting a journal stays in the run's own opening step.
|
|
93
|
+
//
|
|
94
|
+
// The reading comes from the recorder's own `status()` rather than a second presence test here,
|
|
95
|
+
// so "active" cannot drift from what the recorder means by it when the journal format moves.
|
|
96
|
+
function telemetryJournalCheck(projectDir) {
|
|
97
|
+
const check = (journal, message, details = {}) =>
|
|
98
|
+
// Always `info`: see the roll-up below. This line informs, it never gates.
|
|
99
|
+
makeCheck('telemetry_journal', 'Telemetry recording', 'info', message, { journal, ...details });
|
|
100
|
+
|
|
101
|
+
let result;
|
|
102
|
+
try {
|
|
103
|
+
// Required lazily, inside the guard, on purpose. A top-level require would make the whole
|
|
104
|
+
// preflight module fail to load in any bundle shipped without rp-telemetry; lazily, that
|
|
105
|
+
// case degrades to `unreadable` like any other unreadable record.
|
|
106
|
+
//
|
|
107
|
+
// `status()` is synchronous and reads the whole journal. At preflight time — once per
|
|
108
|
+
// project, before discovery — the journal is empty or near-empty, so this is a trivial read.
|
|
109
|
+
// It stops being trivial if this check is ever moved into the router, which runs on every
|
|
110
|
+
// invocation. Do not move it there without re-deciding that.
|
|
111
|
+
const { status } = require('../resources/rp-telemetry/lib/telemetry-recorder.js');
|
|
112
|
+
result = status(projectDir);
|
|
113
|
+
} catch (error) {
|
|
114
|
+
// Preflight gates source configuration and destination credentials. It must not acquire a
|
|
115
|
+
// new way to die on a project whose telemetry file is a truncated line of garbage.
|
|
116
|
+
return check('unreadable', error && error.message ? error.message : String(error));
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// `finalized_attempts` is present only when there is no journal file at all; the recorder
|
|
120
|
+
// returns the replayed run state otherwise.
|
|
121
|
+
if (Object.prototype.hasOwnProperty.call(result, 'finalized_attempts')) {
|
|
122
|
+
return result.finalized_attempts > 0
|
|
123
|
+
? check('finalized_only', 'previous attempts were finalized; nothing is recording the current one')
|
|
124
|
+
: check('absent', 'no telemetry journal for this project — this run is recording nothing');
|
|
125
|
+
}
|
|
126
|
+
if (!result.active) {
|
|
127
|
+
return check('finalized_only', 'journal present but finalized; nothing is recording the current one');
|
|
128
|
+
}
|
|
129
|
+
if (!result.run_id) {
|
|
130
|
+
// A journal file that replays to no run start — truncated, empty or garbage. `status()` does
|
|
131
|
+
// not throw on one; it reports an open run with no identity. Calling that "recording" would
|
|
132
|
+
// be a green line over a run that is recording nothing, which is the exact shape of thing
|
|
133
|
+
// this check exists to stop, so it is reported as a record we could not read.
|
|
134
|
+
return check('unreadable', 'telemetry journal is present but unreadable — no run start could be replayed from it');
|
|
135
|
+
}
|
|
136
|
+
return check('active', `recording (run ${result.run_id}, attempt ${result.attempt})`, {
|
|
137
|
+
runId: result.run_id,
|
|
138
|
+
attempt: result.attempt,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
const TELEMETRY_RECORDER = '../resources/rp-telemetry/lib/telemetry-recorder.js';
|
|
143
|
+
|
|
144
|
+
// Preflight decision → recorder dimension. Only decisions preflight already holds; everything
|
|
145
|
+
// else (operator identity, skills version/commit) the recorder resolves itself, and later
|
|
146
|
+
// dimensions arrive through the agent's own `dims` calls.
|
|
147
|
+
const TELEMETRY_DIMS_BY_DECISION = {
|
|
148
|
+
sourcePlatform: 'source_platform',
|
|
149
|
+
deliveryMode: 'delivery_mode',
|
|
150
|
+
targetSiteStrategy: 'destination_strategy',
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
function telemetryDimsFromDecisions(decisions = {}) {
|
|
154
|
+
const dims = {};
|
|
155
|
+
for (const [decisionKey, dimKey] of Object.entries(TELEMETRY_DIMS_BY_DECISION)) {
|
|
156
|
+
const value = getDecisionValue(decisions, decisionKey);
|
|
157
|
+
if (value !== undefined && value !== null && value !== '') dims[dimKey] = value;
|
|
158
|
+
}
|
|
159
|
+
return dims;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// Keep each dimension the recorder's own validator accepts; drop, never fail on, the rest.
|
|
163
|
+
function acceptedTelemetryDims(recorder, dims = {}) {
|
|
164
|
+
const accepted = {};
|
|
165
|
+
for (const [key, value] of Object.entries(dims || {})) {
|
|
166
|
+
try {
|
|
167
|
+
Object.assign(accepted, recorder.validateDims({ [key]: value }));
|
|
168
|
+
} catch {
|
|
169
|
+
// A value the recorder rejects is dropped so the start itself still happens.
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return accepted;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// A filename-safe ISO-8601 instant (`:` is not a legal filename character on every OS).
|
|
176
|
+
function setAsideStamp(now) {
|
|
177
|
+
const date = now instanceof Date ? now : new Date(now === undefined ? Date.now() : now);
|
|
178
|
+
return date.toISOString().replace(/:/g, '-');
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// Moves `source` to `target` without ever replacing an existing `target`. A check-then-rename
|
|
182
|
+
// is racy (POSIX rename silently replaces a destination created in between), so the target is
|
|
183
|
+
// created by a hard link, which fails atomically with EEXIST when the name is taken. The source
|
|
184
|
+
// is removed only after the link exists and still names the same file, so every failure leaves
|
|
185
|
+
// both files as they were. Returns null on success, or the Error to report.
|
|
186
|
+
function moveAsideExclusive(source, target, targetName) {
|
|
187
|
+
try {
|
|
188
|
+
fs.linkSync(source, target);
|
|
189
|
+
} catch (error) {
|
|
190
|
+
if (error && error.code === 'EEXIST') {
|
|
191
|
+
return new Error(`cannot set the unreadable telemetry journal aside: ${targetName} already exists`);
|
|
192
|
+
}
|
|
193
|
+
return new Error(`cannot set the unreadable telemetry journal aside: ${error && error.message ? error.message : String(error)}`);
|
|
194
|
+
}
|
|
195
|
+
const a = fs.statSync(source, { throwIfNoEntry: false });
|
|
196
|
+
const b = fs.statSync(target);
|
|
197
|
+
if (!a || a.ino !== b.ino || a.dev !== b.dev) {
|
|
198
|
+
return Object.assign(new Error('telemetry journal changed while it was being set aside; both files were kept'), { linked: true });
|
|
199
|
+
}
|
|
200
|
+
fs.unlinkSync(source);
|
|
201
|
+
return null;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// The recovery step that runs right after the read-only `telemetry_journal` check.
|
|
205
|
+
//
|
|
206
|
+
// The check (above) only looks, so the report shows what was found rather than a healthy run
|
|
207
|
+
// this step just made. This step then starts recording when the reading says nothing is. It is
|
|
208
|
+
// called by the preflight script, never from inside `runPreflight`, which stays read-only.
|
|
209
|
+
//
|
|
210
|
+
// It never throws and never gates: every error becomes `recovery: 'failed'`, and the caller
|
|
211
|
+
// leaves the preflight verdict and exit code untouched. A failure is team-only evidence: the returned details and one progress line are the whole escalation.
|
|
212
|
+
async function recoverTelemetryJournal(projectDir, check, dims = {}, { now } = {}) {
|
|
213
|
+
const failed = (error) => ({
|
|
214
|
+
recovery: 'failed',
|
|
215
|
+
recoveryError: error && error.message ? error.message : String(error),
|
|
216
|
+
});
|
|
217
|
+
try {
|
|
218
|
+
const reading = check && check.journal;
|
|
219
|
+
if (reading === 'active') return { recovery: 'not_needed' };
|
|
220
|
+
|
|
221
|
+
// Act only on a fresh reading that still matches the check, so a start made between the
|
|
222
|
+
// check and here (the agent's own) is not doubled into an extra session.
|
|
223
|
+
const fresh = telemetryJournalCheck(projectDir);
|
|
224
|
+
if (fresh.journal === 'active') return { recovery: 'not_needed' };
|
|
225
|
+
if (fresh.journal !== reading) {
|
|
226
|
+
return failed(new Error(`telemetry reading changed between check (${reading}) and recovery (${fresh.journal}); recovery did not act`));
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
// Required lazily, inside the guard, as the check does: a bundle without rp-telemetry
|
|
230
|
+
// degrades to `failed` rather than failing preflight.
|
|
231
|
+
const recorder = require(TELEMETRY_RECORDER);
|
|
232
|
+
const startDims = acceptedTelemetryDims(recorder, dims);
|
|
233
|
+
let setAsideFile = null;
|
|
234
|
+
|
|
235
|
+
if (reading === 'unreadable') {
|
|
236
|
+
// Recoverable only when the file is there and replays to no run start. Any other cause
|
|
237
|
+
// (an unreadable directory, a read error) needs a human.
|
|
238
|
+
const journalFile = recorder.journalPath(projectDir);
|
|
239
|
+
const journal = recorder.readJournal(projectDir);
|
|
240
|
+
if (!journal) return failed(new Error(fresh.message || 'telemetry journal could not be read'));
|
|
241
|
+
if (recorder.replay(journal.records).runStart) {
|
|
242
|
+
return failed(new Error(fresh.message || 'telemetry journal could not be read'));
|
|
243
|
+
}
|
|
244
|
+
// Moved aside byte-for-byte, next to the journal and outside `telemetry/runs/` so
|
|
245
|
+
// attempt numbering is unaffected. Never deleted, truncated, rewritten or overwritten.
|
|
246
|
+
setAsideFile = `events.unreadable-${setAsideStamp(now)}.jsonl`;
|
|
247
|
+
const target = path.join(path.dirname(journalFile), setAsideFile);
|
|
248
|
+
const moved = moveAsideExclusive(journalFile, target, setAsideFile);
|
|
249
|
+
if (moved) return moved.linked ? { ...failed(moved), setAsideFile } : failed(moved);
|
|
250
|
+
} else if (reading !== 'absent' && reading !== 'finalized_only') {
|
|
251
|
+
return failed(new Error(`unknown telemetry reading: ${reading}`));
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
let started;
|
|
255
|
+
try {
|
|
256
|
+
started = await recorder.start(projectDir, startDims, now === undefined ? {} : { now });
|
|
257
|
+
} catch (error) {
|
|
258
|
+
return setAsideFile ? { ...failed(error), setAsideFile } : failed(error);
|
|
259
|
+
}
|
|
260
|
+
return {
|
|
261
|
+
recovery: setAsideFile ? 'set_aside_and_started' : 'started',
|
|
262
|
+
recoveredRunId: started.run_id,
|
|
263
|
+
recoveredAttempt: started.attempt,
|
|
264
|
+
...(setAsideFile ? { setAsideFile } : {}),
|
|
265
|
+
};
|
|
266
|
+
} catch (error) {
|
|
267
|
+
return failed(error);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
async function defaultProbeWixCli({ execFile = execFileAsync } = {}) {
|
|
272
|
+
try {
|
|
273
|
+
const { stdout } = await execFile('npx', ['@wix/cli@latest', 'whoami'], {
|
|
274
|
+
timeout: 30000,
|
|
275
|
+
maxBuffer: 1024 * 1024,
|
|
276
|
+
});
|
|
277
|
+
const output = String(stdout || '').trim();
|
|
278
|
+
if (!output) {
|
|
279
|
+
return { available: true, authState: 'unknown', reason: 'wix whoami returned empty output' };
|
|
280
|
+
}
|
|
281
|
+
return {
|
|
282
|
+
available: true,
|
|
283
|
+
authState: 'authenticated',
|
|
284
|
+
// `whoami` is the authority for the displayed identity; it is not necessarily an email.
|
|
285
|
+
identity: output,
|
|
286
|
+
email: output,
|
|
287
|
+
};
|
|
288
|
+
} catch (error) {
|
|
289
|
+
return {
|
|
290
|
+
available: false,
|
|
291
|
+
authState: 'unknown',
|
|
292
|
+
reason: error && error.message ? error.message : String(error),
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
// Runs the Shopify session check without installing anything and without asking
|
|
298
|
+
// the first-connection question; the result is the receipt, or the reason there is none.
|
|
299
|
+
async function defaultProbeShopifySession({ projectDir, shopDomain }) {
|
|
300
|
+
try {
|
|
301
|
+
// Lazily: the core preflight must load in a bundle without the Shopify adapter.
|
|
302
|
+
const { runSessionCheck } = require('../resources/rp-source-shopify/lib/shopify-session.js');
|
|
303
|
+
const { receipt } = await runSessionCheck({ projectDir, store: shopDomain, install: false, askFirstConnection: false });
|
|
304
|
+
return { receipt };
|
|
305
|
+
} catch (error) {
|
|
306
|
+
return {
|
|
307
|
+
receipt: null,
|
|
308
|
+
code: error && error.code ? error.code : null,
|
|
309
|
+
reason: error && error.message ? error.message : String(error),
|
|
310
|
+
...(error && error.details && Array.isArray(error.details.missingScopes) ? { missingScopes: error.details.missingScopes } : {}),
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
async function shopifySessionCheck(projectDir, probeShopifySession) {
|
|
316
|
+
let shopDomain = null;
|
|
317
|
+
try {
|
|
318
|
+
const values = await readEnvFile(configFileForPlatform(projectDir, 'shopify'));
|
|
319
|
+
shopDomain = String(values.SHOPIFY_SHOP_DOMAIN || '').trim().toLowerCase() || null;
|
|
320
|
+
} catch (error) {
|
|
321
|
+
if (error.code !== 'ENOENT') throw error;
|
|
322
|
+
}
|
|
323
|
+
const label = 'Shopify CLI session';
|
|
324
|
+
if (!shopDomain) return makeCheck('source_credentials', label, 'blocked', 'SHOPIFY_SHOP_DOMAIN is missing from source.shopify.env; the session check needs the store domain');
|
|
325
|
+
const result = (await probeShopifySession({ projectDir, shopDomain })) || {};
|
|
326
|
+
const receipt = result.receipt || null;
|
|
327
|
+
if (!receipt) {
|
|
328
|
+
const missing = Array.isArray(result.missingScopes) && result.missingScopes.length ? ` (missing scopes: ${result.missingScopes.join(', ')})` : '';
|
|
329
|
+
return makeCheck('source_credentials', label, 'blocked', `no passing Shopify session check${missing}: ${result.reason || 'no session receipt'}. Run rp-source-shopify scripts/shopify-session-check.js.`, { missingScopes: result.missingScopes || [] });
|
|
330
|
+
}
|
|
331
|
+
const missingScopes = Array.isArray(receipt.missingScopes) ? receipt.missingScopes : ['(unknown)'];
|
|
332
|
+
if (missingScopes.length) {
|
|
333
|
+
return makeCheck('source_credentials', label, 'blocked', `the Shopify session is missing scopes: ${missingScopes.join(', ')}. Run rp-source-shopify scripts/shopify-session-check.js --connect.`, { missingScopes });
|
|
334
|
+
}
|
|
335
|
+
if (receipt.shopDomain !== shopDomain) {
|
|
336
|
+
return makeCheck('source_credentials', label, 'blocked', `the Shopify session is for ${receipt.shopDomain || 'an unrecorded store'}, not SHOPIFY_SHOP_DOMAIN=${shopDomain}`, { shopDomain: receipt.shopDomain || null });
|
|
337
|
+
}
|
|
338
|
+
return makeCheck('source_credentials', label, 'pass', `Shopify CLI session checked for ${shopDomain}`, { shopDomain, cliVersion: receipt.cliVersion || null, apiVersion: receipt.apiVersion || null });
|
|
24
339
|
}
|
|
25
340
|
|
|
26
341
|
function configFileForPlatform(projectDir, platform) {
|
|
@@ -29,24 +344,27 @@ function configFileForPlatform(projectDir, platform) {
|
|
|
29
344
|
|
|
30
345
|
async function runPreflight(projectDir, artifacts, options = {}) {
|
|
31
346
|
const probeWixCli = options.probeWixCli || defaultProbeWixCli;
|
|
347
|
+
const probeShopifySession = options.probeShopifySession || defaultProbeShopifySession;
|
|
32
348
|
const progress = options.progress || null;
|
|
33
349
|
const checks = [];
|
|
34
350
|
const decisions = artifacts.decisions || {};
|
|
35
|
-
const sourceMode = decisions
|
|
36
|
-
const sourcePlatform = decisions
|
|
37
|
-
const deliveryMode = decisions
|
|
38
|
-
const targetSiteStrategy = decisions
|
|
39
|
-
const fileInputPaths = decisions
|
|
40
|
-
const credentialRef = decisions
|
|
351
|
+
const sourceMode = getDecisionValue(decisions, 'sourceMode');
|
|
352
|
+
const sourcePlatform = getDecisionValue(decisions, 'sourcePlatform');
|
|
353
|
+
const deliveryMode = getDecisionValue(decisions, 'deliveryMode');
|
|
354
|
+
const targetSiteStrategy = getDecisionValue(decisions, 'targetSiteStrategy');
|
|
355
|
+
const fileInputPaths = getDecisionValue(decisions, 'fileInputPaths');
|
|
356
|
+
const credentialRef = getDecisionValue(decisions, 'sourceCredentialRef');
|
|
41
357
|
|
|
42
358
|
checks.push(
|
|
43
|
-
sourceMode
|
|
44
|
-
? makeCheck('source_mode', 'Source acquisition mode', '
|
|
45
|
-
:
|
|
359
|
+
!sourceMode
|
|
360
|
+
? makeCheck('source_mode', 'Source acquisition mode', 'blocked', 'sourceMode decision is missing')
|
|
361
|
+
: isKnownSourceMode(sourceMode)
|
|
362
|
+
? makeCheck('source_mode', 'Source acquisition mode', 'pass', `sourceMode=${sourceMode}`)
|
|
363
|
+
: makeCheck('source_mode', 'Source acquisition mode', 'blocked', invalidSourceModeMessage(sourceMode)),
|
|
46
364
|
);
|
|
47
365
|
progress?.progress('Checked source acquisition mode', { phase: 'preflight', step: 'source-mode' });
|
|
48
366
|
|
|
49
|
-
if (sourceMode === 'private_data' || sourceMode === 'authenticated_api') {
|
|
367
|
+
if ((sourceMode === 'private_data' || sourceMode === 'authenticated_api') && !(sourcePlatform in PRIVATE_SOURCE_CONFIG_BY_PLATFORM)) {
|
|
50
368
|
checks.push(
|
|
51
369
|
credentialRef
|
|
52
370
|
? makeCheck('source_credentials', 'Source credential reference', 'pass', 'credential reference present')
|
|
@@ -55,7 +373,14 @@ async function runPreflight(projectDir, artifacts, options = {}) {
|
|
|
55
373
|
progress?.progress('Checked source credential reference', { phase: 'preflight', step: 'source-credentials' });
|
|
56
374
|
}
|
|
57
375
|
|
|
58
|
-
|
|
376
|
+
// Shopify private data: a sourceCredentialRef never satisfies this; only a passing session check
|
|
377
|
+
// for the configured store does.
|
|
378
|
+
if ((sourceMode === 'private_data' || sourceMode === 'authenticated_api') && sourcePlatform === 'shopify') {
|
|
379
|
+
checks.push(await shopifySessionCheck(projectDir, probeShopifySession));
|
|
380
|
+
progress?.progress('Checked Shopify CLI session', { phase: 'preflight', step: 'source-credentials' });
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
if (sourceMode === 'files_only' || getDecisionValue(decisions, 'includeAdditionalFiles') === true) {
|
|
59
384
|
const files = Array.isArray(fileInputPaths) ? fileInputPaths : [];
|
|
60
385
|
checks.push(
|
|
61
386
|
files.length > 0
|
|
@@ -92,23 +417,67 @@ async function runPreflight(projectDir, artifacts, options = {}) {
|
|
|
92
417
|
}
|
|
93
418
|
|
|
94
419
|
if (sourcePlatform) {
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
420
|
+
const isPrivateMode = sourceMode === 'private_data' || sourceMode === 'authenticated_api';
|
|
421
|
+
const migrationKeyField = isPrivateMode ? MIGRATION_KEY_CREDENTIAL_BY_PLATFORM[sourcePlatform] : null;
|
|
422
|
+
const requiredSourceKeys =
|
|
423
|
+
isPrivateMode
|
|
424
|
+
? (PRIVATE_SOURCE_CONFIG_BY_PLATFORM[sourcePlatform] || SOURCE_CONFIG_BY_PLATFORM[sourcePlatform] || [])
|
|
425
|
+
: (SOURCE_CONFIG_BY_PLATFORM[sourcePlatform] || []);
|
|
426
|
+
const keysToCheck = migrationKeyField ? [...requiredSourceKeys, migrationKeyField] : requiredSourceKeys;
|
|
427
|
+
if (keysToCheck.length > 0) {
|
|
428
|
+
const sourceEnv = await statEnvKeys(configFileForPlatform(projectDir, sourcePlatform), keysToCheck);
|
|
429
|
+
// The migration key is useful for bridge reads, but it does not authenticate wp/v2 or
|
|
430
|
+
// wc/v3. A private/authenticated source mode therefore still requires the Application
|
|
431
|
+
// Password pair; otherwise preflight would advance a knowingly incomplete capture.
|
|
432
|
+
const nonCredentialKeys = migrationKeyField
|
|
433
|
+
? requiredSourceKeys.filter((key) => key !== 'WP_USERNAME' && key !== 'WP_APPLICATION_PASSWORD')
|
|
434
|
+
: requiredSourceKeys;
|
|
435
|
+
const nonCredentialGood = nonCredentialKeys.every((key) => sourceEnv.keys[key] === 'present');
|
|
436
|
+
const applicationPasswordGood = !migrationKeyField
|
|
437
|
+
|| (sourceEnv.keys.WP_USERNAME === 'present' && sourceEnv.keys.WP_APPLICATION_PASSWORD === 'present');
|
|
438
|
+
const migrationKeyGood = migrationKeyField && sourceEnv.keys[migrationKeyField] === 'present';
|
|
439
|
+
const allGood = nonCredentialGood && applicationPasswordGood;
|
|
440
|
+
// Report bridge-key availability separately from the credential that satisfies the
|
|
441
|
+
// selected source scope. The router consumes `status`, so explanatory prose must never
|
|
442
|
+
// be the only thing distinguishing complete from incomplete readiness.
|
|
443
|
+
const credentialMode = !migrationKeyField
|
|
444
|
+
? null
|
|
445
|
+
: sourceEnv.keys.WP_USERNAME === 'present' && sourceEnv.keys.WP_APPLICATION_PASSWORD === 'present'
|
|
446
|
+
? 'application-password'
|
|
447
|
+
: 'none';
|
|
99
448
|
checks.push(
|
|
100
449
|
makeCheck(
|
|
101
450
|
'source_env',
|
|
102
451
|
'Source config file',
|
|
103
452
|
allGood ? 'pass' : 'blocked',
|
|
104
453
|
sourceEnv.exists ? `checked source.${sourcePlatform}.env` : `source.${sourcePlatform}.env is missing`,
|
|
105
|
-
|
|
454
|
+
credentialMode
|
|
455
|
+
? { keyStatus: sourceEnv.keys, credentialMode, bridgeMigrationKeyAvailable: Boolean(migrationKeyGood) }
|
|
456
|
+
: { keyStatus: sourceEnv.keys },
|
|
106
457
|
),
|
|
107
458
|
);
|
|
108
459
|
progress?.progress(`Checked source ${sourcePlatform} config file`, { phase: 'preflight', step: 'source-env', entity: sourcePlatform });
|
|
109
460
|
}
|
|
110
461
|
}
|
|
111
462
|
|
|
463
|
+
// Fail closed when the run is configured public but local signals say the user asked
|
|
464
|
+
// for authenticated capture: a public capture would silently drop private data.
|
|
465
|
+
if (sourceMode === 'public_content') {
|
|
466
|
+
const signals = await findAuthIntentSignals(projectDir, decisions, sourcePlatform, credentialRef);
|
|
467
|
+
if (signals.length > 0) {
|
|
468
|
+
checks.push(
|
|
469
|
+
makeCheck(
|
|
470
|
+
'source_auth_intent',
|
|
471
|
+
'Authenticated capture intent',
|
|
472
|
+
'blocked',
|
|
473
|
+
`you asked for authenticated capture but are configured public (sourceMode=public_content); found ${signals.join(', ')}. Record sourceMode=private_data, or remove these signals to confirm public-only capture.`,
|
|
474
|
+
{ signals },
|
|
475
|
+
),
|
|
476
|
+
);
|
|
477
|
+
}
|
|
478
|
+
progress?.progress('Checked authenticated capture intent', { phase: 'preflight', step: 'source-auth-intent' });
|
|
479
|
+
}
|
|
480
|
+
|
|
112
481
|
progress?.progress('Wix CLI probe started', { phase: 'preflight', step: 'wix-cli' });
|
|
113
482
|
const wixCli = progress
|
|
114
483
|
? await progress.withHeartbeat({ phase: 'preflight', step: 'wix-cli', message: 'Still probing Wix CLI' }, probeWixCli)
|
|
@@ -125,8 +494,17 @@ async function runPreflight(projectDir, artifacts, options = {}) {
|
|
|
125
494
|
);
|
|
126
495
|
progress?.progress('Checked Wix CLI availability and auth', { phase: 'preflight', step: 'wix-cli' });
|
|
127
496
|
|
|
497
|
+
// Last on purpose: it reads as a note, not a prerequisite.
|
|
498
|
+
checks.push(telemetryJournalCheck(projectDir));
|
|
499
|
+
progress?.progress('Checked telemetry recording', { phase: 'preflight', step: 'telemetry-journal' });
|
|
500
|
+
|
|
128
501
|
const blocked = checks.filter((check) => check.status === 'blocked');
|
|
129
502
|
const failed = checks.filter((check) => check.status === 'failed');
|
|
503
|
+
// `info` is non-gating BY DESIGN and must stay out of both branches below. A local run, a
|
|
504
|
+
// rehearsal or a one-off repair may legitimately proceed with no telemetry journal; what they
|
|
505
|
+
// may not do is proceed without anyone knowing. Folding `info` into `blocked` would turn every
|
|
506
|
+
// such run into a halt. If you are here to "fix" a status the roll-up ignores: it is ignored
|
|
507
|
+
// deliberately, and the readiness tests asserting `status === 'pass'` are the standing proof.
|
|
130
508
|
const status = failed.length > 0 ? 'failed' : blocked.length > 0 ? 'blocked' : 'pass';
|
|
131
509
|
|
|
132
510
|
return {
|
|
@@ -139,5 +517,9 @@ async function runPreflight(projectDir, artifacts, options = {}) {
|
|
|
139
517
|
|
|
140
518
|
module.exports = {
|
|
141
519
|
SCHEMA_VERSION,
|
|
520
|
+
defaultProbeWixCli,
|
|
521
|
+
defaultProbeShopifySession,
|
|
142
522
|
runPreflight,
|
|
523
|
+
recoverTelemetryJournal,
|
|
524
|
+
telemetryDimsFromDecisions,
|
|
143
525
|
};
|