@wix/agent-skills 1.36.0 → 1.36.1
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/package.json +8 -3
- package/skills/wix-headless-kit/install/pins.json +1 -1
- package/skills/wix-manage/SKILL.md +3 -3
- package/skills/wix-manage/references/cms/cms-data-items-crud.md +78 -1
- package/skills/wix-manage/references/google-ads/create-performance-max-campaign.md +11 -11
- package/skills/wix-manage/references/marketing/create-and-publish-social-post.md +20 -51
- package/skills/wix-manage/references/marketing/generate-and-publish-marketing-plan.md +4 -4
- package/skills/wix-base44-connector/SKILL.md +0 -437
- package/skills/wix-base44-connector/references/CAPABILITY_MAP.md +0 -78
- package/skills/wix-base44-connector/scripts/utils.cjs +0 -466
- package/skills/wix-export/SKILL.md +0 -83
- package/skills/wix-harmony-editor/.publish-manifest.json +0 -8
- package/skills/wix-harmony-editor/COPY-SITE.md +0 -494
- package/skills/wix-harmony-editor/SKILL.md +0 -317
- package/skills/wix-harmony-editor/scripts/copy/build-description.mjs +0 -249
- package/skills/wix-harmony-editor/scripts/copy/check-description.mjs +0 -225
- package/skills/wix-harmony-editor/scripts/copy/check-mirror.mjs +0 -89
- package/skills/wix-harmony-editor/scripts/copy/compare-preview.mjs +0 -76
- package/skills/wix-harmony-editor/scripts/copy/deploy-description.mjs +0 -212
- package/skills/wix-harmony-editor/scripts/copy/desc-hash.mjs +0 -44
- package/skills/wix-harmony-editor/scripts/copy/editor-run.mjs +0 -45
- package/skills/wix-harmony-editor/scripts/copy/export-page.mjs +0 -53
- package/skills/wix-harmony-editor/scripts/copy/find-interactions.mjs +0 -76
- package/skills/wix-harmony-editor/scripts/copy/hide-scrollbars.mjs +0 -16
- package/skills/wix-harmony-editor/scripts/copy/import-media.mjs +0 -150
- package/skills/wix-harmony-editor/scripts/copy/link-url.mjs +0 -27
- package/skills/wix-harmony-editor/scripts/copy/lint-api.mjs +0 -56
- package/skills/wix-harmony-editor/scripts/copy/measure-source.mjs +0 -211
- package/skills/wix-harmony-editor/scripts/copy/merge-mirrors.mjs +0 -29
- package/skills/wix-harmony-editor/scripts/copy/mirror-site.mjs +0 -92
- package/skills/wix-harmony-editor/scripts/copy/mobile-stage.mjs +0 -56
- package/skills/wix-harmony-editor/scripts/copy/preview-widths.mjs +0 -73
- package/skills/wix-harmony-editor/scripts/copy/render-plate.mjs +0 -67
- package/skills/wix-harmony-editor/scripts/copy/serve-mirror.mjs +0 -102
- package/skills/wix-harmony-editor/scripts/copy/snapshot-capabilities.mjs +0 -40
- package/skills/wix-harmony-editor/scripts/copy/split-sections.mjs +0 -191
- package/skills/wix-harmony-editor/scripts/copy/upload-media-manager.mjs +0 -61
- package/skills/wix-harmony-editor/scripts/launch.sh +0 -359
- package/skills/wix-headless/SKILL.md +0 -151
- package/skills/wix-headless/references/AI_FEATURES.md +0 -178
- package/skills/wix-headless/references/CAPABILITIES.md +0 -117
- package/skills/wix-headless/references/CONTENT.md +0 -36
- package/skills/wix-headless/references/DESIGN.md +0 -55
- package/skills/wix-headless/references/DISCOVERY.md +0 -80
- package/skills/wix-headless/references/DOC_DISCOVERY.md +0 -43
- package/skills/wix-headless/references/FEEDBACK.md +0 -129
- package/skills/wix-headless/references/IMAGE_GENERATION.md +0 -80
- package/skills/wix-headless/references/SDK_HANDOFF.md +0 -108
- package/skills/wix-headless/references/SEED.md +0 -74
- package/skills/wix-headless/references/SETUP.md +0 -60
- package/skills/wix-headless/references/astro.md +0 -98
- package/skills/wix-headless/references/inline-recipes/experience-donations.md +0 -102
- package/skills/wix-headless/references/inline-recipes/experience-store.md +0 -49
- package/skills/wix-headless/references/inline-recipes/how-to-code-a-blog.md +0 -196
- package/skills/wix-headless/references/inline-recipes/how-to-code-a-store.md +0 -590
- package/skills/wix-headless/references/inline-recipes/how-to-code-bookings.md +0 -279
- package/skills/wix-headless/references/inline-recipes/how-to-code-cms.md +0 -163
- package/skills/wix-headless/references/inline-recipes/how-to-code-donations.md +0 -146
- package/skills/wix-headless/references/inline-recipes/how-to-code-events.md +0 -203
- package/skills/wix-headless/references/inline-recipes/how-to-code-forms.md +0 -696
- package/skills/wix-headless/references/inline-recipes/how-to-code-members-astro.md +0 -124
- package/skills/wix-headless/references/inline-recipes/how-to-code-members-custom-login.md +0 -160
- package/skills/wix-headless/references/inline-recipes/how-to-code-members-non-astro.md +0 -118
- package/skills/wix-headless/references/inline-recipes/how-to-code-portfolio.md +0 -132
- package/skills/wix-headless/references/inline-recipes/how-to-code-pricing-plans.md +0 -126
- package/skills/wix-headless/references/inline-recipes/how-to-code-rentals.md +0 -254
- package/skills/wix-headless/references/inline-recipes/how-to-code-restaurant-orders.md +0 -191
- package/skills/wix-headless/references/inline-recipes/how-to-code-restaurant-reservations.md +0 -213
- package/skills/wix-headless/references/inline-recipes/how-to-code-restaurants.md +0 -161
- package/skills/wix-headless/references/inline-recipes/setup-blog.md +0 -175
- package/skills/wix-headless/references/inline-recipes/setup-bookings.md +0 -232
- package/skills/wix-headless/references/inline-recipes/setup-cms.md +0 -200
- package/skills/wix-headless/references/inline-recipes/setup-donations.md +0 -15
- package/skills/wix-headless/references/inline-recipes/setup-events.md +0 -196
- package/skills/wix-headless/references/inline-recipes/setup-forms.md +0 -288
- package/skills/wix-headless/references/inline-recipes/setup-online-store.md +0 -214
- package/skills/wix-headless/references/inline-recipes/setup-portfolio.md +0 -155
- package/skills/wix-headless/references/inline-recipes/setup-pricing-plans.md +0 -229
- package/skills/wix-headless/references/inline-recipes/setup-rentals.md +0 -254
- package/skills/wix-headless/references/inline-recipes/setup-restaurant-experiences.md +0 -73
- package/skills/wix-headless/references/inline-recipes/setup-restaurant-orders.md +0 -197
- package/skills/wix-headless/references/inline-recipes/setup-restaurant-reservations.md +0 -136
- package/skills/wix-headless/references/inline-recipes/setup-restaurants.md +0 -152
- package/skills/wix-headless/references/managed/AUTHENTICATION.md +0 -71
- package/skills/wix-headless/references/managed/CONNECT.md +0 -74
- package/skills/wix-headless/references/managed/CREATE.md +0 -149
- package/skills/wix-headless/references/managed/DEPLOYMENT.md +0 -104
- package/skills/wix-headless/references/non-astro.md +0 -59
- package/skills/wix-headless/references/self-managed/AUTHENTICATION.md +0 -22
- package/skills/wix-headless/references/self-managed/DEPLOYMENT.md +0 -15
- package/skills/wix-headless/references/stripe/AUTHENTICATION.md +0 -55
- package/skills/wix-headless/references/stripe/DEPLOYMENT.md +0 -71
- package/skills/wix-headless/scripts/bootstrap.mjs +0 -156
- package/skills/wix-headless-replatform/.publish-manifest.json +0 -8
- package/skills/wix-headless-replatform/SKILL.md +0 -116
- package/skills/wix-headless-replatform/agents/openai.yaml +0 -6
- package/skills/wix-headless-replatform/references/control-and-visual-fidelity-contract.md +0 -43
- package/skills/wix-headless-replatform/references/extraction-schema.md +0 -187
- package/skills/wix-headless-replatform/references/interaction-runtime-contract.md +0 -137
- package/skills/wix-headless-replatform/references/layout-blueprint-contract.md +0 -41
- package/skills/wix-headless-replatform/references/output-contract.md +0 -93
- package/skills/wix-headless-replatform/references/post-build-gap-contract.md +0 -125
- package/skills/wix-headless-replatform/references/qa-checklist.md +0 -83
- package/skills/wix-headless-replatform/references/safety.md +0 -19
- package/skills/wix-headless-replatform/references/ui-normalization-contract.md +0 -70
- package/skills/wix-headless-replatform/references/workflow.md +0 -157
- package/skills/wix-headless-replatform/registry/README.md +0 -20
- package/skills/wix-headless-replatform/registry/approvals/button/shadcn-default-ac60ef5.json +0 -28
- package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/button.tsx +0 -54
- package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/capabilities.json +0 -60
- package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/contract.md +0 -48
- package/skills/wix-headless-replatform/registry/licenses/shadcn-ui-ac60ef5-MIT.txt +0 -21
- package/skills/wix-headless-replatform/registry/registry.json +0 -36
- package/skills/wix-headless-replatform/resources/rp-facelift/SKILL.md +0 -32
- package/skills/wix-headless-replatform/resources/rp-project-context/SKILL.md +0 -62
- package/skills/wix-headless-replatform/resources/rp-qa-gap-loop/SKILL.md +0 -64
- package/skills/wix-headless-replatform/resources/rp-source-evidence/SKILL.md +0 -42
- package/skills/wix-headless-replatform/resources/rp-ui-implementation/SKILL.md +0 -73
- package/skills/wix-headless-replatform/schemas/build-plan.schema.json +0 -10
- package/skills/wix-headless-replatform/schemas/candidate.schema.json +0 -19
- package/skills/wix-headless-replatform/schemas/common.schema.json +0 -33
- package/skills/wix-headless-replatform/schemas/decision-patch.schema.json +0 -10
- package/skills/wix-headless-replatform/schemas/decision-request.schema.json +0 -10
- package/skills/wix-headless-replatform/schemas/extraction-gap.schema.json +0 -28
- package/skills/wix-headless-replatform/schemas/extraction-manifest.schema.json +0 -34
- package/skills/wix-headless-replatform/schemas/final-report.schema.json +0 -10
- package/skills/wix-headless-replatform/schemas/foundation.schema.json +0 -11
- package/skills/wix-headless-replatform/schemas/metadata.schema.json +0 -11
- package/skills/wix-headless-replatform/schemas/observation-packet.schema.json +0 -17
- package/skills/wix-headless-replatform/schemas/page-capture.schema.json +0 -11
- package/skills/wix-headless-replatform/schemas/page-resolution.schema.json +0 -33
- package/skills/wix-headless-replatform/schemas/shared-chrome.schema.json +0 -11
- package/skills/wix-headless-replatform/schemas/unit.schema.json +0 -40
- package/skills/wix-headless-replatform/scripts/assemble-extraction.mjs +0 -844
- package/skills/wix-headless-replatform/scripts/benchmark-extraction.mjs +0 -163
- package/skills/wix-headless-replatform/scripts/browser-extraction-preflight.mjs +0 -42
- package/skills/wix-headless-replatform/scripts/build-extracted-homepage.mjs +0 -228
- package/skills/wix-headless-replatform/scripts/clear-wix-starter.mjs +0 -87
- package/skills/wix-headless-replatform/scripts/create-wix-project.mjs +0 -505
- package/skills/wix-headless-replatform/scripts/discover-urls.mjs +0 -142
- package/skills/wix-headless-replatform/scripts/extract-assets.mjs +0 -140
- package/skills/wix-headless-replatform/scripts/extract-design-system.mjs +0 -637
- package/skills/wix-headless-replatform/scripts/extract-interactions.mjs +0 -1903
- package/skills/wix-headless-replatform/scripts/extract-page.mjs +0 -2461
- package/skills/wix-headless-replatform/scripts/extract-seo.mjs +0 -25
- package/skills/wix-headless-replatform/scripts/extract-tokens.mjs +0 -63
- package/skills/wix-headless-replatform/scripts/finalize-extraction-report.mjs +0 -126
- package/skills/wix-headless-replatform/scripts/finalize-gap-review.mjs +0 -180
- package/skills/wix-headless-replatform/scripts/finalize-gap-review.test.mjs +0 -98
- package/skills/wix-headless-replatform/scripts/finalize-migration-website.mjs +0 -103
- package/skills/wix-headless-replatform/scripts/generate-control-state-contract.mjs +0 -176
- package/skills/wix-headless-replatform/scripts/generate-design-md.mjs +0 -261
- package/skills/wix-headless-replatform/scripts/generate-extraction-validators.mjs +0 -25
- package/skills/wix-headless-replatform/scripts/generate-invoice-download-backend.mjs +0 -342
- package/skills/wix-headless-replatform/scripts/generate-layout-blueprint.mjs +0 -140
- package/skills/wix-headless-replatform/scripts/generate-repeater-cms.mjs +0 -22
- package/skills/wix-headless-replatform/scripts/generate-route-plan.mjs +0 -143
- package/skills/wix-headless-replatform/scripts/generate-scene-contract.mjs +0 -288
- package/skills/wix-headless-replatform/scripts/generate-ui-normalization.mjs +0 -266
- package/skills/wix-headless-replatform/scripts/generate-visual-assets.mjs +0 -111
- package/skills/wix-headless-replatform/scripts/lib/browser-tooling.mjs +0 -570
- package/skills/wix-headless-replatform/scripts/lib/common.mjs +0 -329
- package/skills/wix-headless-replatform/scripts/lib/component-capabilities.mjs +0 -121
- package/skills/wix-headless-replatform/scripts/lib/component-registry.mjs +0 -282
- package/skills/wix-headless-replatform/scripts/lib/content-boundary.mjs +0 -61
- package/skills/wix-headless-replatform/scripts/lib/extraction-contract.mjs +0 -374
- package/skills/wix-headless-replatform/scripts/lib/extraction-detectors.mjs +0 -243
- package/skills/wix-headless-replatform/scripts/lib/extraction-validators.generated.mjs +0 -1139
- package/skills/wix-headless-replatform/scripts/lib/font-contract.mjs +0 -326
- package/skills/wix-headless-replatform/scripts/lib/frontend-automation-state.mjs +0 -184
- package/skills/wix-headless-replatform/scripts/lib/gap-analysis.mjs +0 -396
- package/skills/wix-headless-replatform/scripts/lib/html-extract.mjs +0 -168
- package/skills/wix-headless-replatform/scripts/lib/interaction-bootstrap.mjs +0 -10
- package/skills/wix-headless-replatform/scripts/lib/interaction-runtime.mjs +0 -194
- package/skills/wix-headless-replatform/scripts/lib/interaction-timeline.mjs +0 -348
- package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/classifiers.mjs +0 -141
- package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/geometry.mjs +0 -43
- package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/vocabulary.mjs +0 -18
- package/skills/wix-headless-replatform/scripts/lib/ui-normalization.css +0 -64
- package/skills/wix-headless-replatform/scripts/optimize-svg.mjs +0 -31
- package/skills/wix-headless-replatform/scripts/post-build-gap.mjs +0 -358
- package/skills/wix-headless-replatform/scripts/provision-repeater-cms.mjs +0 -25
- package/skills/wix-headless-replatform/scripts/record-gap-decision.mjs +0 -39
- package/skills/wix-headless-replatform/scripts/replay-extraction.mjs +0 -107
- package/skills/wix-headless-replatform/scripts/resolve-home-page.mjs +0 -96
- package/skills/wix-headless-replatform/scripts/site-clone.mjs +0 -658
- package/skills/wix-headless-replatform/scripts/validate-font-contract.mjs +0 -29
- package/skills/wix-headless-replatform/scripts/verify-interactions.mjs +0 -669
- package/skills/wix-headless-replatform/scripts/visual-qa.mjs +0 -370
- package/skills/wix-import/SKILL.md +0 -90
- package/skills/wix-replatform/.publish-manifest.json +0 -8
- package/skills/wix-replatform/CLI.md +0 -162
- package/skills/wix-replatform/README.md +0 -52
- package/skills/wix-replatform/SKILL.md +0 -238
- package/skills/wix-replatform/console/account.css +0 -1
- package/skills/wix-replatform/console/app.css +0 -1
- package/skills/wix-replatform/console/app.js +0 -117
- package/skills/wix-replatform/console/index.html +0 -4
- package/skills/wix-replatform/console/json.css +0 -11
- package/skills/wix-replatform/lib/agent-adapters/index.js +0 -71
- package/skills/wix-replatform/lib/app-page-routing.js +0 -75
- package/skills/wix-replatform/lib/artifact-freshness.js +0 -225
- package/skills/wix-replatform/lib/blocked-data-requests.js +0 -427
- package/skills/wix-replatform/lib/census-reconciliation.js +0 -426
- package/skills/wix-replatform/lib/completion-report.js +0 -1580
- package/skills/wix-replatform/lib/config-env.js +0 -133
- package/skills/wix-replatform/lib/confirmed-pictures.js +0 -212
- package/skills/wix-replatform/lib/dependency-readiness.js +0 -423
- package/skills/wix-replatform/lib/dependency-recovery.js +0 -21
- package/skills/wix-replatform/lib/destination-choice.js +0 -163
- package/skills/wix-replatform/lib/destination-handoff.js +0 -62
- package/skills/wix-replatform/lib/destination-http.js +0 -81
- package/skills/wix-replatform/lib/destination-route.js +0 -98
- package/skills/wix-replatform/lib/destination.js +0 -919
- package/skills/wix-replatform/lib/discovered-census.js +0 -231
- package/skills/wix-replatform/lib/discovered-set-status.js +0 -255
- package/skills/wix-replatform/lib/document-url-guard.js +0 -203
- package/skills/wix-replatform/lib/entity-qa-attestation.js +0 -339
- package/skills/wix-replatform/lib/entity-verification.js +0 -18
- package/skills/wix-replatform/lib/execution-capability.js +0 -120
- package/skills/wix-replatform/lib/execution-log.js +0 -170
- package/skills/wix-replatform/lib/execution-manifest.js +0 -203
- package/skills/wix-replatform/lib/execution-state.js +0 -195
- package/skills/wix-replatform/lib/expectations-ledger.js +0 -96
- package/skills/wix-replatform/lib/generated-plugin-handoff.js +0 -140
- package/skills/wix-replatform/lib/import-readiness-contract.js +0 -23
- package/skills/wix-replatform/lib/import-recovery.js +0 -1107
- package/skills/wix-replatform/lib/imported-redirect-targets.js +0 -608
- package/skills/wix-replatform/lib/internal-link-reconciliation.js +0 -166
- package/skills/wix-replatform/lib/link-audit.js +0 -173
- package/skills/wix-replatform/lib/link-census.js +0 -194
- package/skills/wix-replatform/lib/link-plan.js +0 -148
- package/skills/wix-replatform/lib/link-verification.js +0 -274
- package/skills/wix-replatform/lib/link-write-journal.js +0 -42
- package/skills/wix-replatform/lib/local-state.js +0 -1481
- package/skills/wix-replatform/lib/member-completion.js +0 -658
- package/skills/wix-replatform/lib/member-crosswalk.js +0 -69
- package/skills/wix-replatform/lib/member-outcome-registry.js +0 -265
- package/skills/wix-replatform/lib/migration-completion.js +0 -311
- package/skills/wix-replatform/lib/operator-identity.js +0 -47
- package/skills/wix-replatform/lib/orchestration-decisions.js +0 -248
- package/skills/wix-replatform/lib/orchestration-preflight.js +0 -525
- package/skills/wix-replatform/lib/orchestration-router.js +0 -698
- package/skills/wix-replatform/lib/orchestration-state.js +0 -631
- package/skills/wix-replatform/lib/order-reference-readiness.js +0 -30
- package/skills/wix-replatform/lib/payments-outcome-registry.js +0 -200
- package/skills/wix-replatform/lib/plugin-cms-fallback.js +0 -618
- package/skills/wix-replatform/lib/preservation-approval-stamp.js +0 -54
- package/skills/wix-replatform/lib/product-media-deferral.js +0 -96
- package/skills/wix-replatform/lib/progress-log.js +0 -240
- package/skills/wix-replatform/lib/progress-log.sh +0 -140
- package/skills/wix-replatform/lib/read-back-approval.js +0 -184
- package/skills/wix-replatform/lib/read-back-comparison.js +0 -136
- package/skills/wix-replatform/lib/read-back-contract.js +0 -243
- package/skills/wix-replatform/lib/read-back-extract.js +0 -118
- package/skills/wix-replatform/lib/read-back-gate.js +0 -734
- package/skills/wix-replatform/lib/read-back-reads.js +0 -94
- package/skills/wix-replatform/lib/read-back-state.js +0 -107
- package/skills/wix-replatform/lib/read-back-summary.js +0 -81
- package/skills/wix-replatform/lib/rerun-conflicts.js +0 -334
- package/skills/wix-replatform/lib/run-controller.js +0 -401
- package/skills/wix-replatform/lib/seo-outcome-registry.js +0 -45
- package/skills/wix-replatform/lib/setup-verification.js +0 -148
- package/skills/wix-replatform/lib/source-access.js +0 -231
- package/skills/wix-replatform/lib/source-coverage.js +0 -1130
- package/skills/wix-replatform/lib/source-secrets.js +0 -277
- package/skills/wix-replatform/lib/structured-link-patch.js +0 -59
- package/skills/wix-replatform/lib/task-state.js +0 -110
- package/skills/wix-replatform/lib/url-preservation-report.js +0 -319
- package/skills/wix-replatform/lib/url-preservation-state.js +0 -739
- package/skills/wix-replatform/lib/url-redirect-plan.js +0 -728
- package/skills/wix-replatform/lib/url-verification.js +0 -315
- package/skills/wix-replatform/lib/user-action-effects.js +0 -42
- package/skills/wix-replatform/lib/user-actions.js +0 -264
- package/skills/wix-replatform/lib/website-handoff.js +0 -1220
- package/skills/wix-replatform/lib/wix-client-callers.js +0 -54
- package/skills/wix-replatform/lib/wix-dashboard-url.js +0 -35
- package/skills/wix-replatform/lib/write-verification-state.js +0 -92
- package/skills/wix-replatform/lib/write-verification.js +0 -274
- package/skills/wix-replatform/resources/rp-destination/SKILL.md +0 -137
- package/skills/wix-replatform/resources/rp-discovery/SKILL.md +0 -357
- package/skills/wix-replatform/resources/rp-discovery/scripts/promote-source-coverage.js +0 -47
- package/skills/wix-replatform/resources/rp-execute-import/SKILL.md +0 -1369
- package/skills/wix-replatform/resources/rp-execute-import/scripts/shipping-estimate-audit.js +0 -70
- package/skills/wix-replatform/resources/rp-execute-setup/SKILL.md +0 -482
- package/skills/wix-replatform/resources/rp-execute-setup/scripts/execute-setup.js +0 -442
- package/skills/wix-replatform/resources/rp-execute-setup/scripts/mint-token.sh +0 -64
- package/skills/wix-replatform/resources/rp-execution-policy/SKILL.md +0 -112
- package/skills/wix-replatform/resources/rp-execution-policy/lib/coupon-currency-plan-report.js +0 -143
- package/skills/wix-replatform/resources/rp-execution-policy/lib/payments-report.js +0 -244
- package/skills/wix-replatform/resources/rp-import-codegen/SKILL.md +0 -3158
- package/skills/wix-replatform/resources/rp-mapper/SKILL.md +0 -947
- package/skills/wix-replatform/resources/rp-mapper/lib/mapping-resolve.js +0 -217
- package/skills/wix-replatform/resources/rp-mapper/lib/structure-bridge-planning.js +0 -303
- package/skills/wix-replatform/resources/rp-mapper/scripts/coverage-reconcile.js +0 -88
- package/skills/wix-replatform/resources/rp-mapper/scripts/resolve-mapping.js +0 -148
- package/skills/wix-replatform/resources/rp-mapper/wix-business-solutions-taxonomy.md +0 -378
- package/skills/wix-replatform/resources/rp-preflight/SKILL.md +0 -40
- package/skills/wix-replatform/resources/rp-project-intake/SKILL.md +0 -55
- package/skills/wix-replatform/resources/rp-quick-runtime/SKILL.md +0 -60
- package/skills/wix-replatform/resources/rp-quick-runtime/lib/import-progress.js +0 -89
- package/skills/wix-replatform/resources/rp-quick-runtime/lib/limit-recovery.js +0 -36
- package/skills/wix-replatform/resources/rp-quick-shopify/SKILL.md +0 -123
- package/skills/wix-replatform/resources/rp-quick-shopify/quick-mode.json +0 -124
- package/skills/wix-replatform/resources/rp-quick-shopify/scripts/quick-mode.js +0 -522
- package/skills/wix-replatform/resources/rp-quick-woocommerce/SKILL.md +0 -56
- package/skills/wix-replatform/resources/rp-quick-woocommerce/quick-mode.json +0 -91
- package/skills/wix-replatform/resources/rp-quick-woocommerce/scripts/quick-mode.js +0 -255
- package/skills/wix-replatform/resources/rp-setup-discovery/SKILL.md +0 -253
- package/skills/wix-replatform/resources/rp-setup-discovery/scripts/quick-setup-plan.js +0 -44
- package/skills/wix-replatform/resources/rp-source-csv/SKILL.md +0 -481
- package/skills/wix-replatform/resources/rp-source-csv/lib/canonical-record.js +0 -136
- package/skills/wix-replatform/resources/rp-source-csv/lib/csv-fileset.js +0 -0
- package/skills/wix-replatform/resources/rp-source-csv/lib/csv-fingerprint.js +0 -310
- package/skills/wix-replatform/resources/rp-source-csv/lib/csv-layout.js +0 -1081
- package/skills/wix-replatform/resources/rp-source-csv/lib/csv-parse.js +0 -618
- package/skills/wix-replatform/resources/rp-source-csv/scripts/csv-discovery.js +0 -969
- package/skills/wix-replatform/resources/rp-source-csv/source-schema.example.json +0 -196
- package/skills/wix-replatform/resources/rp-source-csv/vendors/bigcommerce.json +0 -66
- package/skills/wix-replatform/resources/rp-source-csv/vendors/magento.json +0 -60
- package/skills/wix-replatform/resources/rp-source-csv/vendors/shopify.json +0 -95
- package/skills/wix-replatform/resources/rp-source-csv/vendors/woocommerce.json +0 -82
- package/skills/wix-replatform/resources/rp-source-inputs/SKILL.md +0 -66
- package/skills/wix-replatform/resources/rp-source-sfcc/SKILL.md +0 -153
- package/skills/wix-replatform/resources/rp-source-shopify/SKILL.md +0 -394
- package/skills/wix-replatform/resources/rp-source-shopify/lib/discovery-reads.js +0 -200
- package/skills/wix-replatform/resources/rp-source-shopify/lib/import-findings.js +0 -34
- package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-bulk-sqlite-worker.js +0 -44
- package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-bulk.js +0 -1470
- package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-cli.js +0 -446
- package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-gift-cards.js +0 -474
- package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-protected-fields.js +0 -879
- package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-session.js +0 -426
- package/skills/wix-replatform/resources/rp-source-shopify/queries/articles.graphql +0 -24
- package/skills/wix-replatform/resources/rp-source-shopify/queries/blogs.graphql +0 -18
- package/skills/wix-replatform/resources/rp-source-shopify/queries/collections.graphql +0 -40
- package/skills/wix-replatform/resources/rp-source-shopify/queries/customers.graphql +0 -76
- package/skills/wix-replatform/resources/rp-source-shopify/queries/delivery-profiles.graphql +0 -51
- package/skills/wix-replatform/resources/rp-source-shopify/queries/discounts.graphql +0 -35
- package/skills/wix-replatform/resources/rp-source-shopify/queries/files.graphql +0 -20
- package/skills/wix-replatform/resources/rp-source-shopify/queries/gift-cards.graphql +0 -18
- package/skills/wix-replatform/resources/rp-source-shopify/queries/inventory.graphql +0 -31
- package/skills/wix-replatform/resources/rp-source-shopify/queries/locations.graphql +0 -21
- package/skills/wix-replatform/resources/rp-source-shopify/queries/menus.graphql +0 -21
- package/skills/wix-replatform/resources/rp-source-shopify/queries/metaobjects.graphql +0 -30
- package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-core.graphql +0 -150
- package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-fulfillments.graphql +0 -36
- package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-refunds.graphql +0 -48
- package/skills/wix-replatform/resources/rp-source-shopify/queries/pages.graphql +0 -20
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-address.graphql +0 -8
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-email.graphql +0 -6
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-name.graphql +0 -8
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-phone.graphql +0 -8
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-address.graphql +0 -12
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-email.graphql +0 -6
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-name.graphql +0 -13
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-phone.graphql +0 -13
- package/skills/wix-replatform/resources/rp-source-shopify/queries/products.graphql +0 -73
- package/skills/wix-replatform/resources/rp-source-shopify/queries/url-redirects.graphql +0 -13
- package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-discovery.js +0 -693
- package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-extract.js +0 -283
- package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-gift-card-remedy.js +0 -191
- package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-session-check.js +0 -115
- package/skills/wix-replatform/resources/rp-source-shopify/source-schema.example.json +0 -201
- package/skills/wix-replatform/resources/rp-source-wordpress/PLUGIN-READ-PLANS.md +0 -146
- package/skills/wix-replatform/resources/rp-source-wordpress/SKILL.md +0 -970
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/blocked-data-handlers.js +0 -73
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/checkout-field-csv-parser.js +0 -115
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/checkout-field-csv-parser.test-fixture.js +0 -91
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/coupon-discovery.js +0 -440
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/currency-gate.js +0 -125
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-source-keys.js +0 -252
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-source-keys.json +0 -183
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-summary.mjs +0 -333
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/invoice-discovery.js +0 -426
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-disposition.js +0 -400
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-entity-read-plan.js +0 -633
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-knowledge.js +0 -1127
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/refund-corroboration.js +0 -194
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/refund-corroboration.json +0 -100
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/sampled-ids-batch.js +0 -157
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/secret-value-guard.js +0 -234
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/store-currency.js +0 -101
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/structure-bridge-reader.js +0 -755
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wix-wp-plugin-v2-client.js +0 -1074
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wix-wp-plugin-v2-client.test-fixture.js +0 -149
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/woo-inventory.js +0 -25
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-http.js +0 -444
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-image-url.js +0 -186
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-plugin-detect.js +0 -1422
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-redirect-sources.js +0 -343
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-route-classifier.js +0 -680
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/yoast-product-seo-evidence.js +0 -272
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/README.md +0 -373
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/advanced-custom-fields.json +0 -101
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/back-in-stock-notifier-for-woocommerce.json +0 -81
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/capabilities-pending-decision.json +0 -128
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/cms-fallback-eligible.json +0 -18
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/contact-form-7.json +0 -104
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/facebook-for-woocommerce.json +0 -44
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/fingerprint-aliases.json +0 -49
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/free-gifts-for-woocommerce.json +0 -94
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/index.json +0 -863
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/mailpoet.json +0 -52
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/membership-for-woocommerce.json +0 -161
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/mwb-bookings-for-woocommerce.json +0 -180
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/no-migration-needed.json +0 -286
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/pricing-deals-for-woocommerce.json +0 -79
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/product-extras-for-woocommerce.json +0 -120
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/pw-woocommerce-gift-cards.json +0 -128
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/requires-development.json +0 -88
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/seo-by-rank-math.json +0 -80
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/seriously-simple-podcasting.json +0 -46
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/strong-testimonials.json +0 -55
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/subscriptions-for-woocommerce.json +0 -99
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/tablepress.json +0 -55
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/the-events-calendar.json +0 -160
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/ti-woocommerce-wishlist.json +0 -81
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-checkout-field-editor-pro.json +0 -60
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-discount-rules.json +0 -74
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-product-bundle.json +0 -75
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-gift-cards.json +0 -60
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-other-payment-gateway.json +0 -44
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-pdf-invoices-packing-slips.json +0 -57
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-product-addon.json +0 -141
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-progressive-discounts.json +0 -54
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wordpress-seo.json +0 -158
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wpc-composite-products.json +0 -97
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wpforms-lite.json +0 -86
- package/skills/wix-replatform/resources/rp-source-wordpress/scripts/capture-store-settings.js +0 -90
- package/skills/wix-replatform/resources/rp-source-wordpress/scripts/plugin-knowledge-validate.js +0 -51
- package/skills/wix-replatform/resources/rp-source-wordpress/scripts/plugin-knowledge.js +0 -103
- package/skills/wix-replatform/resources/rp-source-wordpress/scripts/wp-discovery.js +0 -2409
- package/skills/wix-replatform/resources/rp-source-wordpress/scripts/wp-plugin-inventory.js +0 -273
- package/skills/wix-replatform/resources/rp-source-wordpress/secret-value-patterns.v1.json +0 -11
- package/skills/wix-replatform/resources/rp-source-wordpress/source-schema.example.json +0 -71
- package/skills/wix-replatform/resources/rp-source-wordpress/sub-parts.json +0 -13
- package/skills/wix-replatform/resources/rp-target-wix/SKILL.md +0 -1046
- package/skills/wix-replatform/resources/rp-target-wix/app-page-routing-capabilities.json +0 -36
- package/skills/wix-replatform/resources/rp-target-wix/domains/README.md +0 -57
- package/skills/wix-replatform/resources/rp-target-wix/domains/SERVICE-PLUGINS.md +0 -322
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/docs-survey.json +0 -70
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/domain.json +0 -29
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/category.json +0 -71
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/comment.json +0 -83
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/post.json +0 -95
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/tag.json +0 -66
- package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/docs-survey.json +0 -332
- package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/domain.json +0 -75
- package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/booking.json +0 -181
- package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/service-add-on.json +0 -130
- package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/service.json +0 -180
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/docs-survey.json +0 -161
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/domain.json +0 -25
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/collection.json +0 -67
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/data-item.json +0 -75
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/reference.json +0 -41
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/docs-survey.json +0 -204
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/domain.json +0 -27
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/contact.json +0 -275
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/email-subscription.json +0 -105
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/label.json +0 -77
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/docs-survey.json +0 -297
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/domain.json +0 -44
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/delivery-profile.json +0 -171
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/discount-rule.json +0 -182
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-applied-discount.json +0 -129
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-invoice-document.json +0 -192
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-line-item-options.json +0 -123
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-line-item.json +0 -85
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-merchant-note.json +0 -112
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-payment.json +0 -191
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-refund.json +0 -164
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order.json +0 -462
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/pickup-location.json +0 -122
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/shipping-option.json +0 -98
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/wishlist-item.json +0 -86
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/docs-survey.json +0 -128
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/domain.json +0 -38
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/category.json +0 -73
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/event.json +0 -107
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/registration-form.json +0 -89
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/rsvp.json +0 -118
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/ticket-definition.json +0 -93
- package/skills/wix-replatform/resources/rp-target-wix/domains/forms/docs-survey.json +0 -86
- package/skills/wix-replatform/resources/rp-target-wix/domains/forms/domain.json +0 -56
- package/skills/wix-replatform/resources/rp-target-wix/domains/forms/entities/form-submission.json +0 -121
- package/skills/wix-replatform/resources/rp-target-wix/domains/forms/entities/form.json +0 -134
- package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/docs-survey.json +0 -41
- package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/domain.json +0 -50
- package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/entities/gift-card-product.json +0 -87
- package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/entities/gift-card.json +0 -130
- package/skills/wix-replatform/resources/rp-target-wix/domains/index.json +0 -1418
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/docs-survey.json +0 -41
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/domain.json +0 -24
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-file.json +0 -75
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-folder.json +0 -71
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/docs-survey.json +0 -119
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/domain.json +0 -23
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/badge.json +0 -71
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/custom-field.json +0 -82
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/member-about.json +0 -77
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/member.json +0 -205
- package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/docs-survey.json +0 -41
- package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/domain.json +0 -46
- package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/entities/plan-order.json +0 -137
- package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/entities/plan.json +0 -133
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/docs-survey.json +0 -7
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/domain.json +0 -36
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/amazon-shop-connect.json +0 -71
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/ebay-shop-connect.json +0 -67
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/google-youtube-connect.json +0 -72
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/meta-catalog-connect.json +0 -74
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/pinterest-catalog-connect.json +0 -69
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/tiktok-catalog-connect.json +0 -61
- package/skills/wix-replatform/resources/rp-target-wix/domains/schema.json +0 -111
- package/skills/wix-replatform/resources/rp-target-wix/domains/seo/docs-survey.json +0 -109
- package/skills/wix-replatform/resources/rp-target-wix/domains/seo/domain.json +0 -73
- package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/item-seo-tags.json +0 -148
- package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/seo-pattern.json +0 -91
- package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/site-seo-tags.json +0 -79
- package/skills/wix-replatform/resources/rp-target-wix/domains/site/docs-survey.json +0 -32
- package/skills/wix-replatform/resources/rp-target-wix/domains/site/domain.json +0 -49
- package/skills/wix-replatform/resources/rp-target-wix/domains/site/entities/business-contact.json +0 -103
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/docs-survey.json +0 -203
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/domain.json +0 -42
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/back-in-stock-request.json +0 -119
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/brand.json +0 -111
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/category.json +0 -81
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/coupon.json +0 -241
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/inventory-item.json +0 -118
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-customization.json +0 -111
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-tag.json +0 -79
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product.json +0 -221
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/promotion.json +0 -84
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/review.json +0 -178
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/subscription-product.json +0 -87
- package/skills/wix-replatform/resources/rp-target-wix/domains/tax/docs-survey.json +0 -106
- package/skills/wix-replatform/resources/rp-target-wix/domains/tax/domain.json +0 -64
- package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/manual-tax-mapping.json +0 -119
- package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-group.json +0 -94
- package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-region.json +0 -113
- package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-settings.json +0 -65
- package/skills/wix-replatform/resources/rp-target-wix/lib/audit-summary.js +0 -64
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-author-attribution.js +0 -165
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-client.js +0 -60
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-duplicates.js +0 -201
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-ledger.js +0 -306
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-report.js +0 -229
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-stage.js +0 -55
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build.js +0 -715
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-media.js +0 -567
- package/skills/wix-replatform/resources/rp-target-wix/lib/bulk-results.js +0 -73
- package/skills/wix-replatform/resources/rp-target-wix/lib/contact-extended-fields.js +0 -194
- package/skills/wix-replatform/resources/rp-target-wix/lib/contact-import.js +0 -133
- package/skills/wix-replatform/resources/rp-target-wix/lib/contract-ledger.js +0 -150
- package/skills/wix-replatform/resources/rp-target-wix/lib/coupon-redemption-drift.js +0 -491
- package/skills/wix-replatform/resources/rp-target-wix/lib/customer-member.js +0 -104
- package/skills/wix-replatform/resources/rp-target-wix/lib/data-extension-schema.js +0 -673
- package/skills/wix-replatform/resources/rp-target-wix/lib/domain-knowledge.js +0 -835
- package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-balance-reconciliation.js +0 -119
- package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-build.js +0 -566
- package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-redemption-build.js +0 -249
- package/skills/wix-replatform/resources/rp-target-wix/lib/ndjson.js +0 -260
- package/skills/wix-replatform/resources/rp-target-wix/lib/order-applied-discount-build.js +0 -63
- package/skills/wix-replatform/resources/rp-target-wix/lib/order-buyer.js +0 -187
- package/skills/wix-replatform/resources/rp-target-wix/lib/order-channel-build.js +0 -64
- package/skills/wix-replatform/resources/rp-target-wix/lib/order-history.js +0 -1027
- package/skills/wix-replatform/resources/rp-target-wix/lib/order-invoice-contract.js +0 -90
- package/skills/wix-replatform/resources/rp-target-wix/lib/order-payment-mapping.js +0 -420
- package/skills/wix-replatform/resources/rp-target-wix/lib/pricing-plan-definition.js +0 -177
- package/skills/wix-replatform/resources/rp-target-wix/lib/product-import.js +0 -151
- package/skills/wix-replatform/resources/rp-target-wix/lib/product-seo.js +0 -723
- package/skills/wix-replatform/resources/rp-target-wix/lib/seo-redirects.js +0 -353
- package/skills/wix-replatform/resources/rp-target-wix/lib/shipping-build.js +0 -1437
- package/skills/wix-replatform/resources/rp-target-wix/lib/shipping-option-stage.js +0 -354
- package/skills/wix-replatform/resources/rp-target-wix/lib/store-config-build.js +0 -134
- package/skills/wix-replatform/resources/rp-target-wix/lib/stores-category-attach.js +0 -221
- package/skills/wix-replatform/resources/rp-target-wix/lib/stores-inventory.js +0 -248
- package/skills/wix-replatform/resources/rp-target-wix/lib/stores-verification.js +0 -321
- package/skills/wix-replatform/resources/rp-target-wix/lib/tax-build.js +0 -231
- package/skills/wix-replatform/resources/rp-target-wix/lib/url-mapper-transport.js +0 -28
- package/skills/wix-replatform/resources/rp-target-wix/lib/value-utils.js +0 -14
- package/skills/wix-replatform/resources/rp-target-wix/lib/variant-correlation.js +0 -34
- package/skills/wix-replatform/resources/rp-target-wix/lib/wix-build.js +0 -388
- package/skills/wix-replatform/resources/rp-target-wix/lib/wix-target-spec.js +0 -255
- package/skills/wix-replatform/resources/rp-target-wix/lib/wix-writers.js +0 -6041
- package/skills/wix-replatform/resources/rp-target-wix/lib/write-verification.js +0 -3
- package/skills/wix-replatform/resources/rp-target-wix/scripts/docs-survey-sync.js +0 -150
- package/skills/wix-replatform/resources/rp-target-wix/scripts/domain-knowledge-validate.js +0 -69
- package/skills/wix-replatform/resources/rp-target-wix/scripts/domain-knowledge.js +0 -100
- package/skills/wix-replatform/resources/rp-target-wix/scripts/verify-stores.js +0 -112
- package/skills/wix-replatform/resources/rp-telemetry/SKILL.md +0 -484
- package/skills/wix-replatform/resources/rp-telemetry/lib/bi-sink.js +0 -318
- package/skills/wix-replatform/resources/rp-telemetry/lib/telemetry-recorder.js +0 -2831
- package/skills/wix-replatform/resources/rp-telemetry/lib/transcript-digest.js +0 -318
- package/skills/wix-replatform/resources/rp-telemetry/scripts/meter-from-audit.js +0 -83
- package/skills/wix-replatform/resources/rp-telemetry/scripts/rp-telemetry.js +0 -243
- package/skills/wix-replatform/resources/rp-website-continuation/SKILL.md +0 -94
- package/skills/wix-replatform/scripts/artifact-freshness.js +0 -76
- package/skills/wix-replatform/scripts/census-reconciliation.js +0 -25
- package/skills/wix-replatform/scripts/cms-fallback.js +0 -89
- package/skills/wix-replatform/scripts/discovered-census.js +0 -26
- package/skills/wix-replatform/scripts/discovered-set-status.js +0 -33
- package/skills/wix-replatform/scripts/entity-qa-attestation.js +0 -130
- package/skills/wix-replatform/scripts/execution-health-check.js +0 -415
- package/skills/wix-replatform/scripts/execution-manifest-validate.js +0 -43
- package/skills/wix-replatform/scripts/execution-state-prepare.js +0 -128
- package/skills/wix-replatform/scripts/expectations-ledger.js +0 -44
- package/skills/wix-replatform/scripts/import-contract-verify.js +0 -183
- package/skills/wix-replatform/scripts/internal-link-audit.js +0 -90
- package/skills/wix-replatform/scripts/item-seo-tags-verify.js +0 -205
- package/skills/wix-replatform/scripts/migration-completion.js +0 -76
- package/skills/wix-replatform/scripts/orchestration-preflight.js +0 -67
- package/skills/wix-replatform/scripts/orchestration-route.js +0 -77
- package/skills/wix-replatform/scripts/orchestration-state.js +0 -381
- package/skills/wix-replatform/scripts/read-back-gate.js +0 -175
- package/skills/wix-replatform/scripts/replatform-console.js +0 -146
- package/skills/wix-replatform/scripts/replatform.js +0 -436
- package/skills/wix-replatform/scripts/source-secrets.js +0 -77
- package/skills/wix-replatform/scripts/url-redirects.js +0 -286
- package/skills/wix-replatform/scripts/user-action.js +0 -58
- package/skills/wix-replatform/scripts/website-handoff-generate.js +0 -64
- package/skills/wix-replatform/scripts/wix-dashboard-url.js +0 -54
- package/skills/wix-replatform/scripts/wix-destination.js +0 -143
- package/skills/wix-replatform/scripts/wix-headless-scaffold.js +0 -762
- package/skills/wix-vibe-headless/SKILL.md +0 -183
- package/skills/wix-vibe-headless/install/deploy.cjs +0 -221
- package/skills/wix-vibe-headless/install/pin-agents-md.cjs +0 -35
- package/skills/wix-vibe-headless/platforms/README.md +0 -26
- package/skills/wix-vibe-headless/platforms/base44-ecom-light-seed-with-install.md +0 -127
- package/skills/wix-vibe-headless/platforms/base44-ecom-light-seed.md +0 -121
- package/skills/wix-vibe-headless/platforms/base44-ecom-light.md +0 -87
- package/skills/wix-vibe-headless/platforms/base44.md +0 -148
- package/skills/wix-vibe-headless/platforms/generic.md +0 -132
- package/skills/wix-vibe-headless/references/_shared/nav/nav.tanstack.js +0 -30
- package/skills/wix-vibe-headless/references/_shared/routing.md +0 -86
- package/skills/wix-vibe-headless/references/blog/INSTRUCTIONS.md +0 -270
- package/skills/wix-vibe-headless/references/blog/app/components/PostCard.jsx +0 -43
- package/skills/wix-vibe-headless/references/blog/app/components/PostChips.jsx +0 -25
- package/skills/wix-vibe-headless/references/blog/app/components/PostGrid.jsx +0 -15
- package/skills/wix-vibe-headless/references/blog/app/context/TaxonomyContext.jsx +0 -35
- package/skills/wix-vibe-headless/references/blog/app/hooks/usePostDetail.js +0 -38
- package/skills/wix-vibe-headless/references/blog/app/pages/Blog.jsx +0 -40
- package/skills/wix-vibe-headless/references/blog/app/pages/CategoryPage.jsx +0 -54
- package/skills/wix-vibe-headless/references/blog/app/pages/PostDetail.jsx +0 -65
- package/skills/wix-vibe-headless/references/blog/app/pages/TagPage.jsx +0 -50
- package/skills/wix-vibe-headless/references/blog/app/rest/wix-blog.js +0 -217
- package/skills/wix-vibe-headless/references/blog/seed/SEED.md +0 -99
- package/skills/wix-vibe-headless/references/blog/seed/seed-blog.cjs +0 -269
- package/skills/wix-vibe-headless/references/bookings/INSTRUCTIONS.md +0 -342
- package/skills/wix-vibe-headless/references/bookings/app/components/BookingForm.jsx +0 -65
- package/skills/wix-vibe-headless/references/bookings/app/components/RentalDurationPicker.jsx +0 -67
- package/skills/wix-vibe-headless/references/bookings/app/components/ServiceCard.jsx +0 -47
- package/skills/wix-vibe-headless/references/bookings/app/components/ServiceGrid.jsx +0 -13
- package/skills/wix-vibe-headless/references/bookings/app/components/SlotPicker.jsx +0 -126
- package/skills/wix-vibe-headless/references/bookings/app/hooks/useRentalDuration.js +0 -128
- package/skills/wix-vibe-headless/references/bookings/app/hooks/useServiceDetail.js +0 -110
- package/skills/wix-vibe-headless/references/bookings/app/hooks/useServices.js +0 -58
- package/skills/wix-vibe-headless/references/bookings/app/lib/serviceFacts.js +0 -95
- package/skills/wix-vibe-headless/references/bookings/app/pages/ServiceDetail.jsx +0 -94
- package/skills/wix-vibe-headless/references/bookings/app/pages/Services.jsx +0 -89
- package/skills/wix-vibe-headless/references/bookings/app/rest/wix-bookings-checkout.js +0 -148
- package/skills/wix-vibe-headless/references/bookings/app/rest/wix-bookings-rentals.js +0 -250
- package/skills/wix-vibe-headless/references/bookings/app/rest/wix-bookings-services.js +0 -300
- package/skills/wix-vibe-headless/references/bookings/seed/SEED.md +0 -154
- package/skills/wix-vibe-headless/references/bookings/seed/seed-bookings.cjs +0 -333
- package/skills/wix-vibe-headless/references/bookings/seed/seed-rentals.cjs +0 -267
- package/skills/wix-vibe-headless/references/cms/INSTRUCTIONS.md +0 -178
- package/skills/wix-vibe-headless/references/cms/app/collection.config.js +0 -31
- package/skills/wix-vibe-headless/references/cms/app/lib/wixImage.js +0 -18
- package/skills/wix-vibe-headless/references/cms/app/rest/wix-cms.js +0 -231
- package/skills/wix-vibe-headless/references/cms/seed/SEED.md +0 -145
- package/skills/wix-vibe-headless/references/donations/INSTRUCTIONS.md +0 -88
- package/skills/wix-vibe-headless/references/donations/app/rest/wix-donations.js +0 -112
- package/skills/wix-vibe-headless/references/donations/seed/SEED.md +0 -11
- package/skills/wix-vibe-headless/references/donations/tests/donations.test.mjs +0 -258
- package/skills/wix-vibe-headless/references/events/INSTRUCTIONS.md +0 -267
- package/skills/wix-vibe-headless/references/events/app/components/CategoryFilter.jsx +0 -23
- package/skills/wix-vibe-headless/references/events/app/components/EventCard.jsx +0 -43
- package/skills/wix-vibe-headless/references/events/app/components/EventGrid.jsx +0 -13
- package/skills/wix-vibe-headless/references/events/app/components/EventRegistration.jsx +0 -29
- package/skills/wix-vibe-headless/references/events/app/components/RsvpForm.jsx +0 -57
- package/skills/wix-vibe-headless/references/events/app/components/TicketPicker.jsx +0 -78
- package/skills/wix-vibe-headless/references/events/app/hooks/useEventDetail.js +0 -27
- package/skills/wix-vibe-headless/references/events/app/hooks/useEventsList.js +0 -54
- package/skills/wix-vibe-headless/references/events/app/hooks/useRsvpForm.js +0 -40
- package/skills/wix-vibe-headless/references/events/app/hooks/useTicketing.js +0 -81
- package/skills/wix-vibe-headless/references/events/app/pages/EventDetail.jsx +0 -48
- package/skills/wix-vibe-headless/references/events/app/pages/Events.jsx +0 -36
- package/skills/wix-vibe-headless/references/events/app/rest/wix-events-browse.js +0 -136
- package/skills/wix-vibe-headless/references/events/app/rest/wix-events-registration.js +0 -187
- package/skills/wix-vibe-headless/references/events/seed/SEED.md +0 -103
- package/skills/wix-vibe-headless/references/events/seed/seed-events.cjs +0 -251
- package/skills/wix-vibe-headless/references/forms/INSTRUCTIONS.md +0 -487
- package/skills/wix-vibe-headless/references/forms/app/hooks/useWixForm.js +0 -425
- package/skills/wix-vibe-headless/references/forms/app/lib/wix-form-schema-utils.js +0 -187
- package/skills/wix-vibe-headless/references/forms/app/rest/wix-forms-submissions.js +0 -238
- package/skills/wix-vibe-headless/references/forms/app/rest/wix-forms.js +0 -108
- package/skills/wix-vibe-headless/references/forms/seed/SEED.md +0 -1836
- package/skills/wix-vibe-headless/references/members/INSTRUCTIONS.md +0 -328
- package/skills/wix-vibe-headless/references/members/app/components/LoginForm.jsx +0 -101
- package/skills/wix-vibe-headless/references/members/app/components/MemberMenu.jsx +0 -33
- package/skills/wix-vibe-headless/references/members/app/components/RequireAuth.jsx +0 -21
- package/skills/wix-vibe-headless/references/members/app/components/SocialButtons.jsx +0 -29
- package/skills/wix-vibe-headless/references/members/app/context/MemberContext.jsx +0 -54
- package/skills/wix-vibe-headless/references/members/app/hooks/useLoginForm.js +0 -77
- package/skills/wix-vibe-headless/references/members/app/pages/Account.jsx +0 -36
- package/skills/wix-vibe-headless/references/members/app/pages/Callback.jsx +0 -32
- package/skills/wix-vibe-headless/references/members/app/pages/Login.jsx +0 -35
- package/skills/wix-vibe-headless/references/members/app/rest/wix-members-auth.js +0 -390
- package/skills/wix-vibe-headless/references/members/install/Register.jsx +0 -22
- package/skills/wix-vibe-headless/references/members/seed/SEED.md +0 -21
- package/skills/wix-vibe-headless/references/portfolio/INSTRUCTIONS.md +0 -270
- package/skills/wix-vibe-headless/references/portfolio/app/components/CollectionCard.jsx +0 -31
- package/skills/wix-vibe-headless/references/portfolio/app/components/CollectionGrid.jsx +0 -15
- package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectCard.jsx +0 -39
- package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectGrid.jsx +0 -15
- package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectMedia.jsx +0 -29
- package/skills/wix-vibe-headless/references/portfolio/app/hooks/useCollectionProjects.js +0 -35
- package/skills/wix-vibe-headless/references/portfolio/app/hooks/usePortfolioGallery.js +0 -27
- package/skills/wix-vibe-headless/references/portfolio/app/hooks/useProjectDetail.js +0 -25
- package/skills/wix-vibe-headless/references/portfolio/app/pages/CollectionPage.jsx +0 -39
- package/skills/wix-vibe-headless/references/portfolio/app/pages/Portfolio.jsx +0 -27
- package/skills/wix-vibe-headless/references/portfolio/app/pages/ProjectDetail.jsx +0 -60
- package/skills/wix-vibe-headless/references/portfolio/app/rest/wix-portfolio.js +0 -223
- package/skills/wix-vibe-headless/references/portfolio/seed/SEED.md +0 -90
- package/skills/wix-vibe-headless/references/portfolio/seed/seed-portfolio.cjs +0 -236
- package/skills/wix-vibe-headless/references/pricing-plans/INSTRUCTIONS.md +0 -280
- package/skills/wix-vibe-headless/references/pricing-plans/app/components/OrderCard.jsx +0 -35
- package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanCard.jsx +0 -48
- package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanGrid.jsx +0 -16
- package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanPrice.jsx +0 -35
- package/skills/wix-vibe-headless/references/pricing-plans/app/hooks/useMyPlans.js +0 -25
- package/skills/wix-vibe-headless/references/pricing-plans/app/hooks/usePlanDetail.js +0 -28
- package/skills/wix-vibe-headless/references/pricing-plans/app/hooks/usePlans.js +0 -30
- package/skills/wix-vibe-headless/references/pricing-plans/app/pages/MyPlans.jsx +0 -30
- package/skills/wix-vibe-headless/references/pricing-plans/app/pages/PlanDetail.jsx +0 -53
- package/skills/wix-vibe-headless/references/pricing-plans/app/pages/Plans.jsx +0 -28
- package/skills/wix-vibe-headless/references/pricing-plans/app/rest/wix-pricing-plans.js +0 -157
- package/skills/wix-vibe-headless/references/pricing-plans/seed/SEED.md +0 -82
- package/skills/wix-vibe-headless/references/pricing-plans/seed/seed-pricing-plans.cjs +0 -251
- package/skills/wix-vibe-headless/references/rentals/INSTRUCTIONS.md +0 -13
- package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +0 -290
- package/skills/wix-vibe-headless/references/restaurants/app/components/ItemDialog.jsx +0 -81
- package/skills/wix-vibe-headless/references/restaurants/app/components/MenuItemCard.jsx +0 -71
- package/skills/wix-vibe-headless/references/restaurants/app/components/MenuList.jsx +0 -43
- package/skills/wix-vibe-headless/references/restaurants/app/components/OrderCartButton.jsx +0 -21
- package/skills/wix-vibe-headless/references/restaurants/app/components/OrderCartDrawer.jsx +0 -72
- package/skills/wix-vibe-headless/references/restaurants/app/context/OrderCartContext.jsx +0 -66
- package/skills/wix-vibe-headless/references/restaurants/app/hooks/useItemOrder.js +0 -32
- package/skills/wix-vibe-headless/references/restaurants/app/hooks/useReservation.js +0 -73
- package/skills/wix-vibe-headless/references/restaurants/app/pages/Menu.jsx +0 -28
- package/skills/wix-vibe-headless/references/restaurants/app/pages/Reservations.jsx +0 -102
- package/skills/wix-vibe-headless/references/restaurants/app/rest/wix-restaurants-menu.js +0 -224
- package/skills/wix-vibe-headless/references/restaurants/app/rest/wix-restaurants-ordering.js +0 -218
- package/skills/wix-vibe-headless/references/restaurants/app/rest/wix-restaurants-reservations.js +0 -107
- package/skills/wix-vibe-headless/references/restaurants/seed/SEED.md +0 -176
- package/skills/wix-vibe-headless/references/restaurants/seed/seed-restaurants.cjs +0 -452
- package/skills/wix-vibe-headless/references/shared/app/components/WixManageBanner.jsx +0 -56
- package/skills/wix-vibe-headless/references/shared/app/lib/nav.js +0 -9
- package/skills/wix-vibe-headless/references/shared/app/rest/wix-client.js +0 -185
- package/skills/wix-vibe-headless/references/shared/app/rest/wix-config.js +0 -8
- package/skills/wix-vibe-headless/references/storefront/INSTRUCTIONS.md +0 -471
- package/skills/wix-vibe-headless/references/storefront/app/components/CartButton.jsx +0 -20
- package/skills/wix-vibe-headless/references/storefront/app/components/CartDrawer.jsx +0 -167
- package/skills/wix-vibe-headless/references/storefront/app/context/CartContext.jsx +0 -83
- package/skills/wix-vibe-headless/references/storefront/app/hooks/useProductCard.js +0 -104
- package/skills/wix-vibe-headless/references/storefront/app/hooks/useProductDetail.js +0 -163
- package/skills/wix-vibe-headless/references/storefront/app/hooks/useShop.js +0 -83
- package/skills/wix-vibe-headless/references/storefront/app/hooks/useVariantOptions.js +0 -76
- package/skills/wix-vibe-headless/references/storefront/app/lib/storeImage.js +0 -64
- package/skills/wix-vibe-headless/references/storefront/app/rest/wix-store-cart.js +0 -176
- package/skills/wix-vibe-headless/references/storefront/app/rest/wix-store-catalog.js +0 -218
- package/skills/wix-vibe-headless/references/storefront/seed/SEED.md +0 -174
- package/skills/wix-vibe-headless/references/storefront/seed/seed-store.cjs +0 -546
|
@@ -1,835 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const fs = require('node:fs');
|
|
4
|
-
const path = require('node:path');
|
|
5
|
-
const wixWriters = require('./wix-writers.js');
|
|
6
|
-
|
|
7
|
-
const CLASSIFICATIONS = new Set([
|
|
8
|
-
'native',
|
|
9
|
-
'cms',
|
|
10
|
-
'native-plus-cms',
|
|
11
|
-
'setup-config',
|
|
12
|
-
'skip-by-default',
|
|
13
|
-
'unsupported-native-gap',
|
|
14
|
-
// For manual-mapping: a complete, decided mapping with no write for our code to make — the entity
|
|
15
|
-
// carries `manualSteps` instead of a working `preferredWrite`. Deliberately not added to
|
|
16
|
-
// NATIVE_CLASSIFICATIONS below: import codegen must never treat this as a write target.
|
|
17
|
-
'manual-mapping',
|
|
18
|
-
]);
|
|
19
|
-
const ID_POLICIES = new Set(['client-assigned', 'server-assigned', 'natural-key', 'not-applicable']);
|
|
20
|
-
const VERIFICATIONS = new Set(['verified-live', 'docs', 'source-review', 'internal-only', 'unverified', 'none']);
|
|
21
|
-
const RELIABILITY = new Set(['reliable', 'partially-reliable', 'unreliable', 'unknown']);
|
|
22
|
-
const SURVEY_VERDICTS = new Set(['claimed', 'not-importable', 'not-relevant', 'gap', 'unreviewed']);
|
|
23
|
-
const NATIVE_CLASSIFICATIONS = new Set(['native', 'native-plus-cms']);
|
|
24
|
-
const SAFE_MODE_CONTACT_KINDS = new Set(['email', 'phone']);
|
|
25
|
-
const BLOCKED_DEPENDENCY_DEGRADATIONS = new Set(['warning', 'deferred']);
|
|
26
|
-
const MANUAL_STEP_ACTORS = new Set(['merchant', 'external', 'wix-automatable']);
|
|
27
|
-
const WRITER_IDS = new Set(Object.keys(wixWriters).filter((name) => typeof wixWriters[name] === 'function'));
|
|
28
|
-
|
|
29
|
-
function knowledgeRoot(rootDir = path.resolve(__dirname, '..')) {
|
|
30
|
-
return path.join(rootDir, 'domains');
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
function readJson(filePath) {
|
|
34
|
-
return JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
function writeJson(filePath, value) {
|
|
38
|
-
fs.writeFileSync(filePath, `${JSON.stringify(value, null, 2)}\n`);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
function entityRef(entity) {
|
|
42
|
-
return `${entity.domain}/${entity.entity}`;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
function listDomainDirs(domainsDir) {
|
|
46
|
-
return fs
|
|
47
|
-
.readdirSync(domainsDir, { withFileTypes: true })
|
|
48
|
-
.filter((entry) => entry.isDirectory())
|
|
49
|
-
.map((entry) => entry.name)
|
|
50
|
-
.sort();
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
function listEntityFiles(domainDir) {
|
|
54
|
-
const entitiesDir = path.join(domainDir, 'entities');
|
|
55
|
-
if (!fs.existsSync(entitiesDir)) return [];
|
|
56
|
-
return fs
|
|
57
|
-
.readdirSync(entitiesDir, { withFileTypes: true })
|
|
58
|
-
.filter((entry) => entry.isFile() && entry.name.endsWith('.json'))
|
|
59
|
-
.map((entry) => entry.name)
|
|
60
|
-
.sort();
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
function loadDomain(domainsDir, domain) {
|
|
64
|
-
return readJson(path.join(domainsDir, domain, 'domain.json'));
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
function loadEntity(domainsDir, domain, entity) {
|
|
68
|
-
return readJson(path.join(domainsDir, domain, 'entities', `${entity}.json`));
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
function generateIndex(domainsDir) {
|
|
72
|
-
const index = {
|
|
73
|
-
schemaVersion: 1,
|
|
74
|
-
domains: {},
|
|
75
|
-
sourceAliasIndex: {},
|
|
76
|
-
routeAliasIndex: {},
|
|
77
|
-
capabilityIndex: {},
|
|
78
|
-
flags: {},
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
for (const domain of listDomainDirs(domainsDir)) {
|
|
82
|
-
const domainPath = path.join(domain, 'domain.json');
|
|
83
|
-
const domainJson = loadDomain(domainsDir, domain);
|
|
84
|
-
const entities = {};
|
|
85
|
-
for (const fileName of listEntityFiles(path.join(domainsDir, domain))) {
|
|
86
|
-
const entityId = fileName.replace(/\.json$/, '');
|
|
87
|
-
const entityPath = path.join(domain, 'entities', fileName);
|
|
88
|
-
const entity = readJson(path.join(domainsDir, entityPath));
|
|
89
|
-
entities[entityId] = {
|
|
90
|
-
path: `domains/${entityPath}`,
|
|
91
|
-
displayName: entity.displayName,
|
|
92
|
-
classification: entity.target && entity.target.classification,
|
|
93
|
-
reliabilityStatus: entity.reliability && entity.reliability.status,
|
|
94
|
-
reliabilityFlags: (entity.reliability && entity.reliability.flags) || [],
|
|
95
|
-
summary: firstPitfallOrGuidance(entity),
|
|
96
|
-
};
|
|
97
|
-
if (entity.capability) {
|
|
98
|
-
if (!index.capabilityIndex[entity.capability]) index.capabilityIndex[entity.capability] = [];
|
|
99
|
-
index.capabilityIndex[entity.capability].push(`${domain}/${entityId}`);
|
|
100
|
-
}
|
|
101
|
-
for (const alias of entity.sourceAliases || []) {
|
|
102
|
-
const key = `${alias.sourceSystem}:${alias.sourceEntity}`;
|
|
103
|
-
if (!index.sourceAliasIndex[key]) index.sourceAliasIndex[key] = [];
|
|
104
|
-
index.sourceAliasIndex[key].push(`${domain}/${entityId}`);
|
|
105
|
-
for (const route of alias.routes || []) {
|
|
106
|
-
if (!index.routeAliasIndex[route]) index.routeAliasIndex[route] = [];
|
|
107
|
-
index.routeAliasIndex[route].push(`${domain}/${entityId}`);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
for (const flag of (entity.reliability && entity.reliability.flags) || []) {
|
|
111
|
-
if (!index.flags[flag]) index.flags[flag] = [];
|
|
112
|
-
index.flags[flag].push(`${domain}/${entityId}`);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
index.domains[domain] = {
|
|
116
|
-
path: `domains/${domainPath}`,
|
|
117
|
-
displayName: domainJson.displayName,
|
|
118
|
-
ownerHint: domainJson.ownerHint,
|
|
119
|
-
entities,
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
for (const collection of [index.sourceAliasIndex, index.routeAliasIndex, index.capabilityIndex, index.flags]) {
|
|
124
|
-
for (const key of Object.keys(collection)) collection[key] = Array.from(new Set(collection[key])).sort();
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
return index;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
function firstPitfallOrGuidance(entity) {
|
|
131
|
-
if (Array.isArray(entity.pitfalls) && entity.pitfalls[0] && entity.pitfalls[0].summary) {
|
|
132
|
-
return entity.pitfalls[0].summary;
|
|
133
|
-
}
|
|
134
|
-
if (Array.isArray(entity.mappingGuidance) && entity.mappingGuidance[0]) return entity.mappingGuidance[0];
|
|
135
|
-
return '';
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
function validateKnowledge(domainsDir) {
|
|
139
|
-
const errors = [];
|
|
140
|
-
const indexPath = path.join(domainsDir, 'index.json');
|
|
141
|
-
const index = fs.existsSync(indexPath) ? readJson(indexPath) : null;
|
|
142
|
-
const generated = generateIndex(domainsDir);
|
|
143
|
-
|
|
144
|
-
if (!fs.existsSync(path.join(domainsDir, 'schema.json'))) {
|
|
145
|
-
errors.push('domains/schema.json is missing');
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
for (const domain of listDomainDirs(domainsDir)) {
|
|
149
|
-
const domainFile = path.join(domainsDir, domain, 'domain.json');
|
|
150
|
-
if (!fs.existsSync(domainFile)) {
|
|
151
|
-
errors.push(`${domain}: missing domain.json`);
|
|
152
|
-
continue;
|
|
153
|
-
}
|
|
154
|
-
const domainJson = readJson(domainFile);
|
|
155
|
-
requireFields(domainJson, ['schemaVersion', 'domain', 'displayName', 'ownerHint', 'defaultImportOrder', 'evidence'], `${domain}/domain.json`, errors);
|
|
156
|
-
if (domainJson.schemaVersion !== 1) errors.push(`${domain}/domain.json: schemaVersion must be 1`);
|
|
157
|
-
if (domainJson.domain !== domain) errors.push(`${domain}/domain.json: domain must match directory`);
|
|
158
|
-
for (const entityId of domainJson.defaultImportOrder || []) {
|
|
159
|
-
if (!fs.existsSync(path.join(domainsDir, domain, 'entities', `${entityId}.json`))) {
|
|
160
|
-
errors.push(`${domain}/domain.json: defaultImportOrder references missing entity ${entityId}`);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
// REACHABILITY, the other direction — and the one that actually bites. The check above
|
|
164
|
-
// catches an order naming an entity that does not exist, which fails loudly. The reverse
|
|
165
|
-
// fails SILENTLY: an entity that is authored, has a verified writer, is covered by tests,
|
|
166
|
-
// and is named in no import order at all. Nothing errors, every test passes, and a run
|
|
167
|
-
// simply never writes it. That is how three separate entities shipped unreachable
|
|
168
|
-
// (ecom/shipping-option, ecom/pickup-location, site/business-contact) — each found only
|
|
169
|
-
// when a migrated site was missing the data and a human noticed.
|
|
170
|
-
//
|
|
171
|
-
// Rule: an entity with a writerId MUST be in its domain's defaultImportOrder. An entity
|
|
172
|
-
// with `writerId: null` has nothing to run and is legitimately absent, so the exclusion is
|
|
173
|
-
// derived from the entity's own contract rather than a hand-maintained opt-out list that
|
|
174
|
-
// would drift the same way.
|
|
175
|
-
const entitiesPath = path.join(domainsDir, domain, 'entities');
|
|
176
|
-
if (fs.existsSync(entitiesPath)) {
|
|
177
|
-
const order = new Set(domainJson.defaultImportOrder || []);
|
|
178
|
-
for (const fileName of fs.readdirSync(entitiesPath).filter((f) => f.endsWith('.json')).sort()) {
|
|
179
|
-
const entityId = fileName.replace(/\.json$/, '');
|
|
180
|
-
if (order.has(entityId)) continue;
|
|
181
|
-
let entityJson = null;
|
|
182
|
-
try {
|
|
183
|
-
entityJson = JSON.parse(fs.readFileSync(path.join(entitiesPath, fileName), 'utf8'));
|
|
184
|
-
} catch (error) {
|
|
185
|
-
continue; // the entity's own parse error is reported by validateEntity
|
|
186
|
-
}
|
|
187
|
-
if (entityJson && entityJson.preferredWrite && entityJson.preferredWrite.writerId) {
|
|
188
|
-
errors.push(`${domain}/domain.json: entity ${entityId} has writerId ${entityJson.preferredWrite.writerId} but is not in defaultImportOrder — a writer nothing runs migrates nothing. Add it to the order, or set preferredWrite.writerId to null if it genuinely cannot be written yet.`);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
if (fs.existsSync(entitiesPath)) {
|
|
193
|
-
const entities = listEntityFiles(entitiesPath).map((fileName) => ({
|
|
194
|
-
id: fileName.replace(/\.json$/, ''),
|
|
195
|
-
dependsOn: loadEntity(domainsDir, domain, fileName.replace(/\.json$/, '')).dependsOn,
|
|
196
|
-
}));
|
|
197
|
-
errors.push(...validateDependsOnPromotion(domain, domainJson.dependsOnRequired, entities));
|
|
198
|
-
}
|
|
199
|
-
validateEvidence(domainJson.evidence || [], `${domain}/domain.json`, errors);
|
|
200
|
-
|
|
201
|
-
for (const fileName of listEntityFiles(path.join(domainsDir, domain))) {
|
|
202
|
-
const entityId = fileName.replace(/\.json$/, '');
|
|
203
|
-
const entity = loadEntity(domainsDir, domain, entityId);
|
|
204
|
-
const label = `${domain}/entities/${fileName}`;
|
|
205
|
-
validateEntity(entity, domain, entityId, label, errors);
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
validateDocsSurvey(domainsDir, domain, domainJson, errors);
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
if (!index) {
|
|
212
|
-
errors.push('domains/index.json is missing; run domain-knowledge-validate.js --write-index');
|
|
213
|
-
} else {
|
|
214
|
-
const current = JSON.stringify(index);
|
|
215
|
-
const expected = JSON.stringify(generated);
|
|
216
|
-
if (current !== expected) {
|
|
217
|
-
errors.push('domains/index.json is stale; run domain-knowledge-validate.js --write-index');
|
|
218
|
-
}
|
|
219
|
-
validateIndexConsistency(index, domainsDir, errors);
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
validateDependsOn(domainsDir, errors);
|
|
223
|
-
|
|
224
|
-
return { ok: errors.length === 0, errors, generatedIndex: generated };
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
function validateDependsOnPromotion(domain, dependsOnRequired, entities) {
|
|
228
|
-
const errors = [];
|
|
229
|
-
if (typeof dependsOnRequired !== 'boolean') {
|
|
230
|
-
errors.push(`${domain}/domain.json: dependsOnRequired must be a boolean`);
|
|
231
|
-
return errors;
|
|
232
|
-
}
|
|
233
|
-
const undeclared = entities.filter((entity) => entity.dependsOn === undefined);
|
|
234
|
-
if (dependsOnRequired && undeclared.length) {
|
|
235
|
-
for (const entity of undeclared) {
|
|
236
|
-
errors.push(`${domain}/domain.json: dependsOnRequired is true but ${domain}/entities/${entity.id}.json has no dependsOn; review and declare its dependencies`);
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
if (!dependsOnRequired && undeclared.length === 0) {
|
|
240
|
-
errors.push(`${domain}/domain.json: dependsOnRequired is false but every entity is declared; promote this domain by setting dependsOnRequired to true`);
|
|
241
|
-
}
|
|
242
|
-
return errors;
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
// The dependsOn graph across every entity that has it. Pure disk read, no validation —
|
|
246
|
-
// `validateDependsOn` (ref resolution, cycles) and `checkScope` (rp-mapper's review-gate check)
|
|
247
|
-
// both build on this so the graph is assembled exactly once, the same way, everywhere it's needed.
|
|
248
|
-
function buildDependsOnGraph(domainsDir) {
|
|
249
|
-
const graph = new Map(); // ref -> dependsOn refs
|
|
250
|
-
for (const domain of listDomainDirs(domainsDir)) {
|
|
251
|
-
for (const fileName of listEntityFiles(path.join(domainsDir, domain))) {
|
|
252
|
-
const entityId = fileName.replace(/\.json$/, '');
|
|
253
|
-
const entity = loadEntity(domainsDir, domain, entityId);
|
|
254
|
-
if (entity.dependsOn === undefined) continue;
|
|
255
|
-
const ref = `${domain}/${entityId}`;
|
|
256
|
-
graph.set(ref, Array.isArray(entity.dependsOn) ? entity.dependsOn : []);
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
return graph;
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
// dependsOn is optional only in a domain that has not yet been promoted. Once a
|
|
263
|
-
// domain's explicit dependsOnRequired flag is true, validateKnowledge rejects an undeclared
|
|
264
|
-
// entity; in every domain a present declaration must resolve and the graph must stay acyclic.
|
|
265
|
-
// Builds its own local graph rather than calling buildDependsOnGraph afterward — this function
|
|
266
|
-
// already reads and parses every entity file once for ref-resolution/array-type checks, so
|
|
267
|
-
// reusing that same read for cycle detection (instead of a second full read+parse pass) halves
|
|
268
|
-
// the I/O of every `domain-knowledge-validate.js` run.
|
|
269
|
-
function validateDependsOn(domainsDir, errors) {
|
|
270
|
-
const graph = new Map();
|
|
271
|
-
for (const domain of listDomainDirs(domainsDir)) {
|
|
272
|
-
for (const fileName of listEntityFiles(path.join(domainsDir, domain))) {
|
|
273
|
-
const entityId = fileName.replace(/\.json$/, '');
|
|
274
|
-
const entity = loadEntity(domainsDir, domain, entityId);
|
|
275
|
-
const label = `${domain}/entities/${fileName}`;
|
|
276
|
-
if (entity.dependsOn === undefined) continue;
|
|
277
|
-
if (!Array.isArray(entity.dependsOn)) {
|
|
278
|
-
errors.push(`${label}: dependsOn must be an array when present`);
|
|
279
|
-
continue;
|
|
280
|
-
}
|
|
281
|
-
graph.set(`${domain}/${entityId}`, entity.dependsOn);
|
|
282
|
-
for (const [ref, mode] of Object.entries(entity.dependencyModes || {})) {
|
|
283
|
-
if (mode !== 'per-record' || !entity.dependsOn.includes(ref) || !Array.isArray(entity.dependencyReferenceFields?.[ref]) || !entity.dependencyReferenceFields[ref].length) errors.push(`dependency_mode_invalid:${domain}/${entityId}:${ref}`);
|
|
284
|
-
const [producerDomain, producerEntity] = ref.split('/');
|
|
285
|
-
if (fs.existsSync(path.join(domainsDir, producerDomain || '', 'entities', `${producerEntity}.json`)) && loadEntity(domainsDir, producerDomain, producerEntity).target?.classification === 'setup-config') errors.push(`dependency_mode_invalid:${domain}/${entityId}:${ref}`);
|
|
286
|
-
}
|
|
287
|
-
for (const dep of entity.dependsOn) {
|
|
288
|
-
const segments = String(dep).split('/');
|
|
289
|
-
const [depDomain, depEntity] = segments;
|
|
290
|
-
if (segments.length !== 2 || !depDomain || !depEntity || !fs.existsSync(path.join(domainsDir, depDomain, 'entities', `${depEntity}.json`))) {
|
|
291
|
-
errors.push(`${label}: dependsOn entry "${dep}" does not resolve to an entity file`);
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
const cycle = findCycle(graph);
|
|
298
|
-
if (cycle) errors.push(`dependsOn graph has a cycle: ${cycle.join(' -> ')}`);
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
function findCycle(graph) {
|
|
302
|
-
const WHITE = 0;
|
|
303
|
-
const GRAY = 1;
|
|
304
|
-
const BLACK = 2;
|
|
305
|
-
const color = new Map();
|
|
306
|
-
const stack = [];
|
|
307
|
-
|
|
308
|
-
function visit(node) {
|
|
309
|
-
color.set(node, GRAY);
|
|
310
|
-
stack.push(node);
|
|
311
|
-
for (const next of graph.get(node) || []) {
|
|
312
|
-
const state = color.get(next) || WHITE;
|
|
313
|
-
if (state === GRAY) return [...stack, next];
|
|
314
|
-
if (state === WHITE && graph.has(next)) {
|
|
315
|
-
const found = visit(next);
|
|
316
|
-
if (found) return found;
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
stack.pop();
|
|
320
|
-
color.set(node, BLACK);
|
|
321
|
-
return null;
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
for (const node of graph.keys()) {
|
|
325
|
-
if ((color.get(node) || WHITE) === WHITE) {
|
|
326
|
-
const found = visit(node);
|
|
327
|
-
if (found) return found;
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
return null;
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
// Every entity ref that actually exists on disk, regardless of whether it has dependsOn authored.
|
|
334
|
-
// checkScope needs this to tell "unknown ref" (not in this set) apart from "known but unreviewed"
|
|
335
|
-
// (in this set, absent from the dependsOn graph).
|
|
336
|
-
function listAllEntityRefs(domainsDir) {
|
|
337
|
-
const refs = [];
|
|
338
|
-
for (const domain of listDomainDirs(domainsDir)) {
|
|
339
|
-
for (const fileName of listEntityFiles(path.join(domainsDir, domain))) {
|
|
340
|
-
refs.push(`${domain}/${fileName.replace(/\.json$/, '')}`);
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
return refs;
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
// The rp-mapper review-gate check, as a pure function (the caller does not compute the transitive
|
|
347
|
-
// closure, and unknown refs and never-reviewed entities are never passed as though they were
|
|
348
|
-
// "reviewed, no dependencies").
|
|
349
|
-
// Given every real entity ref, the dependsOn graph, and the plan's own selected scope (only —
|
|
350
|
-
// the caller does not pre-expand anything), this walks dependsOn edges outward itself and reports
|
|
351
|
-
// three distinct, non-overlapping failure categories. `checkScope` below is the disk-reading
|
|
352
|
-
// wrapper `rp-mapper`/an agent/the CLI actually calls.
|
|
353
|
-
function computeScopeCheck(allRefs, graph, selectedRefs) {
|
|
354
|
-
const selectedSet = new Set((selectedRefs || []).map((ref) => String(ref)));
|
|
355
|
-
const unknownRefs = new Set(Array.from(selectedSet).filter((ref) => !allRefs.has(ref)));
|
|
356
|
-
const validSelected = Array.from(selectedSet).filter((ref) => allRefs.has(ref));
|
|
357
|
-
|
|
358
|
-
const visited = new Set();
|
|
359
|
-
const queue = [...validSelected];
|
|
360
|
-
const unreviewedRefs = [];
|
|
361
|
-
const missingByRef = new Map();
|
|
362
|
-
|
|
363
|
-
while (queue.length) {
|
|
364
|
-
const ref = queue.shift();
|
|
365
|
-
if (visited.has(ref)) continue;
|
|
366
|
-
visited.add(ref);
|
|
367
|
-
|
|
368
|
-
if (!allRefs.has(ref)) {
|
|
369
|
-
// Reached only via a dependsOn edge (never itself in selectedRefs, or `selectedSet` would
|
|
370
|
-
// already have caught it above) — a dangling/typo'd ref, not merely unreviewed.
|
|
371
|
-
unknownRefs.add(ref);
|
|
372
|
-
continue;
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
if (!graph.has(ref)) {
|
|
376
|
-
// Reachable, resolves to a real entity, but dependsOn has never been authored at all —
|
|
377
|
-
// fail-closed: "not yet reviewed" is not the same fact as "reviewed, no dependencies."
|
|
378
|
-
unreviewedRefs.push(ref);
|
|
379
|
-
continue;
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
const deps = graph.get(ref);
|
|
383
|
-
const missing = deps.filter((dep) => !selectedSet.has(dep));
|
|
384
|
-
if (missing.length) missingByRef.set(ref, missing);
|
|
385
|
-
for (const dep of deps) {
|
|
386
|
-
if (!visited.has(dep)) queue.push(dep);
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
const missingDependencies = Array.from(missingByRef.entries())
|
|
391
|
-
.map(([ref, missing]) => ({ ref, missing }))
|
|
392
|
-
.sort((a, b) => a.ref.localeCompare(b.ref));
|
|
393
|
-
|
|
394
|
-
return {
|
|
395
|
-
ok: unknownRefs.size === 0 && missingDependencies.length === 0 && unreviewedRefs.length === 0,
|
|
396
|
-
unknownRefs: Array.from(unknownRefs).sort(),
|
|
397
|
-
missingDependencies,
|
|
398
|
-
unreviewedRefs: unreviewedRefs.sort(),
|
|
399
|
-
};
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
// Disk-reading wrapper — this is what `domain-knowledge-validate.js --check-scope` and rp-mapper's
|
|
403
|
-
// review gate should call, passing only the plan's own selected scope. See computeScopeCheck for
|
|
404
|
-
// the pure algorithm and why each failure category exists.
|
|
405
|
-
function checkScope(domainsDir, selectedRefs) {
|
|
406
|
-
return computeScopeCheck(new Set(listAllEntityRefs(domainsDir)), buildDependsOnGraph(domainsDir), selectedRefs);
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
// The live backlog: every entity that has never had dependsOn authored at all (field
|
|
410
|
-
// absent, not merely empty). Non-blocking by design — this is a report, not a validation error.
|
|
411
|
-
// `node domain-knowledge-validate.js --list-missing-deps` is the intended way to read it, so the
|
|
412
|
-
// backlog never drifts out of sync with a hand-maintained list the way a markdown table would.
|
|
413
|
-
function listMissingDependsOn(domainsDir) {
|
|
414
|
-
const missing = [];
|
|
415
|
-
for (const domain of listDomainDirs(domainsDir)) {
|
|
416
|
-
for (const fileName of listEntityFiles(path.join(domainsDir, domain))) {
|
|
417
|
-
const entityId = fileName.replace(/\.json$/, '');
|
|
418
|
-
const entity = loadEntity(domainsDir, domain, entityId);
|
|
419
|
-
if (entity.dependsOn === undefined) missing.push(`${domain}/${entityId}`);
|
|
420
|
-
}
|
|
421
|
-
}
|
|
422
|
-
return missing.sort();
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
// Every domain with entities carries a docs survey in which every
|
|
426
|
-
// docs-menu surface is triaged, and its native entities cite their object
|
|
427
|
-
// page. The backfill completed 2026-08-11, so a missing survey is an error.
|
|
428
|
-
function validateDocsSurvey(domainsDir, domain, domainJson, errors) {
|
|
429
|
-
const surveyPath = path.join(domainsDir, domain, 'docs-survey.json');
|
|
430
|
-
const hasEntities = listEntityFiles(path.join(domainsDir, domain)).length > 0;
|
|
431
|
-
if (!fs.existsSync(surveyPath)) {
|
|
432
|
-
if (hasEntities) errors.push(`${domain}: missing docs-survey.json; run docs-survey-sync.js ${domain} and triage`);
|
|
433
|
-
return;
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
const label = `${domain}/docs-survey.json`;
|
|
437
|
-
const survey = readJson(surveyPath);
|
|
438
|
-
requireFields(survey, ['schemaVersion', 'domain', 'fetchedAt', 'roots', 'surfaces'], label, errors);
|
|
439
|
-
if (survey.schemaVersion !== 1) errors.push(`${label}: schemaVersion must be 1`);
|
|
440
|
-
if (survey.domain !== domain) errors.push(`${label}: domain must match directory`);
|
|
441
|
-
|
|
442
|
-
const declaredRoots = JSON.stringify([...(domainJson.docsRoots || [])].sort());
|
|
443
|
-
const surveyRoots = JSON.stringify([...(survey.roots || [])].sort());
|
|
444
|
-
if (declaredRoots !== surveyRoots) {
|
|
445
|
-
errors.push(`${label}: roots must match ${domain}/domain.json docsRoots; re-run docs-survey-sync.js ${domain}`);
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
for (const surface of survey.surfaces || []) {
|
|
449
|
-
const surfaceLabel = `${label}: ${surface.id || '<missing id>'}`;
|
|
450
|
-
requireFields(surface, ['id', 'title', 'url', 'verdict'], surfaceLabel, errors);
|
|
451
|
-
if (surface.removed) {
|
|
452
|
-
errors.push(`${surfaceLabel}: surface no longer in the docs menu; delete the entry or revisit the facts that cited it`);
|
|
453
|
-
continue;
|
|
454
|
-
}
|
|
455
|
-
if (!SURVEY_VERDICTS.has(surface.verdict)) {
|
|
456
|
-
errors.push(`${surfaceLabel}: invalid verdict ${surface.verdict}`);
|
|
457
|
-
continue;
|
|
458
|
-
}
|
|
459
|
-
if (surface.verdict === 'unreviewed') {
|
|
460
|
-
errors.push(`${surfaceLabel}: unreviewed surface; triage it (claimed / not-importable / not-relevant / gap)`);
|
|
461
|
-
continue;
|
|
462
|
-
}
|
|
463
|
-
if (!surface.reviewedOn) errors.push(`${surfaceLabel}: triaged surface must carry reviewedOn`);
|
|
464
|
-
if (surface.verdict === 'claimed') {
|
|
465
|
-
if (!Array.isArray(surface.refs) || surface.refs.length === 0) {
|
|
466
|
-
errors.push(`${surfaceLabel}: claimed surface must list refs[]`);
|
|
467
|
-
} else {
|
|
468
|
-
for (const ref of surface.refs) {
|
|
469
|
-
const [refDomain, refEntity] = String(ref).split('/');
|
|
470
|
-
if (!refDomain || !refEntity || !fs.existsSync(path.join(domainsDir, refDomain, 'entities', `${refEntity}.json`))) {
|
|
471
|
-
errors.push(`${surfaceLabel}: claimed ref ${ref} does not resolve to an entity file`);
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
if ((surface.verdict === 'not-importable' || surface.verdict === 'not-relevant') && !surface.reason) {
|
|
477
|
-
errors.push(`${surfaceLabel}: ${surface.verdict} requires a reason`);
|
|
478
|
-
}
|
|
479
|
-
if (surface.verdict === 'gap' && (!surface.reason || !surface.tracking)) {
|
|
480
|
-
errors.push(`${surfaceLabel}: gap requires reason and tracking`);
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
|
-
|
|
484
|
-
for (const fileName of listEntityFiles(path.join(domainsDir, domain))) {
|
|
485
|
-
const entityId = fileName.replace(/\.json$/, '');
|
|
486
|
-
const entity = loadEntity(domainsDir, domain, entityId);
|
|
487
|
-
if (!NATIVE_CLASSIFICATIONS.has(entity.target && entity.target.classification)) continue;
|
|
488
|
-
const citesObjectPage = (entity.evidence || []).some(
|
|
489
|
-
(item) => typeof item.url === 'string' && /-object$/.test(item.url.replace(/\.md$/, ''))
|
|
490
|
-
);
|
|
491
|
-
// A surface with no …-object reference page (e.g. Comments, which has no
|
|
492
|
-
// REST reference at all) declares objectPageException with the reason —
|
|
493
|
-
// explicit and greppable, never silent.
|
|
494
|
-
const hasException = typeof entity.objectPageException === 'string' && entity.objectPageException.length > 0;
|
|
495
|
-
if (!citesObjectPage && !hasException) {
|
|
496
|
-
errors.push(`${domain}/entities/${fileName}: native target must cite its docs object page (…-object URL) in evidence[], or declare objectPageException with a reason`);
|
|
497
|
-
}
|
|
498
|
-
}
|
|
499
|
-
}
|
|
500
|
-
|
|
501
|
-
function requireFields(value, fields, label, errors) {
|
|
502
|
-
for (const field of fields) {
|
|
503
|
-
if (value[field] === undefined) errors.push(`${label}: missing required field ${field}`);
|
|
504
|
-
}
|
|
505
|
-
}
|
|
506
|
-
|
|
507
|
-
function validateEntity(entity, domain, entityId, label, errors) {
|
|
508
|
-
requireFields(entity, ['schemaVersion', 'domain', 'entity', 'displayName', 'target', 'sourceAliases', 'preferredWrite', 'reliability', 'pitfalls', 'mappingGuidance', 'evidence'], label, errors);
|
|
509
|
-
if (entity.schemaVersion !== 1) errors.push(`${label}: schemaVersion must be 1`);
|
|
510
|
-
if (entity.domain !== domain) errors.push(`${label}: domain must match file path`);
|
|
511
|
-
if (entity.entity !== entityId) errors.push(`${label}: entity must match file path`);
|
|
512
|
-
if (!CLASSIFICATIONS.has(entity.target && entity.target.classification)) errors.push(`${label}: invalid target.classification`);
|
|
513
|
-
if (!ID_POLICIES.has(entity.target && entity.target.idPolicy)) errors.push(`${label}: invalid target.idPolicy`);
|
|
514
|
-
if (typeof (entity.target && entity.target.crosswalkRequired) !== 'boolean') errors.push(`${label}: target.crosswalkRequired must be boolean`);
|
|
515
|
-
if (!VERIFICATIONS.has(entity.preferredWrite && entity.preferredWrite.verification)) errors.push(`${label}: invalid preferredWrite.verification`);
|
|
516
|
-
if (!RELIABILITY.has(entity.reliability && entity.reliability.status)) errors.push(`${label}: invalid reliability.status`);
|
|
517
|
-
if (!Array.isArray(entity.reliability && entity.reliability.flags)) errors.push(`${label}: reliability.flags must be an array`);
|
|
518
|
-
if (entity.preferredWrite && entity.preferredWrite.writerId !== null && !WRITER_IDS.has(entity.preferredWrite.writerId)) {
|
|
519
|
-
errors.push(`${label}: writerId ${entity.preferredWrite.writerId} is not exported by wix-writers.js`);
|
|
520
|
-
}
|
|
521
|
-
if (entity.target && entity.target.classification !== 'cms' && entity.target.idPolicy === 'server-assigned' && entity.target.crosswalkRequired !== true) {
|
|
522
|
-
errors.push(`${label}: server-assigned non-CMS targets must require crosswalk`);
|
|
523
|
-
}
|
|
524
|
-
for (const alias of entity.sourceAliases || []) {
|
|
525
|
-
if (!alias.sourceSystem || !alias.sourceEntity) errors.push(`${label}: sourceAliases entries must include sourceSystem and sourceEntity`);
|
|
526
|
-
}
|
|
527
|
-
if (entity.target && entity.target.classification === 'manual-mapping') {
|
|
528
|
-
validateManualMapping(entity, label, errors);
|
|
529
|
-
} else if (entity.manualSteps !== undefined) {
|
|
530
|
-
errors.push(`${label}: manualSteps is only allowed when target.classification is manual-mapping`);
|
|
531
|
-
}
|
|
532
|
-
validateSafeModeContactFields(entity.safeModeContactFields, label, errors);
|
|
533
|
-
validateBlockedSourceDependencies(entity, label, errors);
|
|
534
|
-
validateEvidence(entity.evidence || [], label, errors);
|
|
535
|
-
}
|
|
536
|
-
|
|
537
|
-
function validateBlockedSourceDependencies(entity, label, errors) {
|
|
538
|
-
if (entity.blockedSourceDependencies === undefined) return;
|
|
539
|
-
if (!Array.isArray(entity.blockedSourceDependencies)) {
|
|
540
|
-
errors.push(`${label}: blockedSourceDependencies must be an array when present`);
|
|
541
|
-
return;
|
|
542
|
-
}
|
|
543
|
-
const pitfallCodes = new Set((entity.pitfalls || []).map((pitfall) => pitfall.code));
|
|
544
|
-
const seen = new Set();
|
|
545
|
-
entity.blockedSourceDependencies.forEach((dependency, index) => {
|
|
546
|
-
const dependencyLabel = `${label}: blockedSourceDependencies[${index}]`;
|
|
547
|
-
if (!dependency || typeof dependency !== 'object' || Array.isArray(dependency)) {
|
|
548
|
-
errors.push(`${dependencyLabel} must be an object`);
|
|
549
|
-
return;
|
|
550
|
-
}
|
|
551
|
-
for (const field of ['sourceEntityRef', 'degradedField', 'pitfallCode', 'degradation']) {
|
|
552
|
-
if (!dependency[field] || typeof dependency[field] !== 'string') errors.push(`${dependencyLabel}.${field} must be a non-empty string`);
|
|
553
|
-
}
|
|
554
|
-
if (dependency.sourceEntityRef && !/^plugin\.[^.]+\.[^.]+$/.test(dependency.sourceEntityRef)) {
|
|
555
|
-
errors.push(`${dependencyLabel}.sourceEntityRef must use plugin.<slug>.<entity>`);
|
|
556
|
-
}
|
|
557
|
-
if (dependency.pitfallCode && !pitfallCodes.has(dependency.pitfallCode)) {
|
|
558
|
-
errors.push(`${dependencyLabel}.pitfallCode ${dependency.pitfallCode} does not resolve in this entity's pitfalls[]`);
|
|
559
|
-
}
|
|
560
|
-
if (dependency.degradation && !BLOCKED_DEPENDENCY_DEGRADATIONS.has(dependency.degradation)) {
|
|
561
|
-
errors.push(`${dependencyLabel}.degradation must be warning or deferred`);
|
|
562
|
-
}
|
|
563
|
-
const key = `${dependency.sourceEntityRef}:${dependency.degradedField}`;
|
|
564
|
-
if (seen.has(key)) errors.push(`${dependencyLabel} duplicates ${key}`);
|
|
565
|
-
seen.add(key);
|
|
566
|
-
});
|
|
567
|
-
}
|
|
568
|
-
|
|
569
|
-
// For manual-mapping: a manual-mapping entity performs no write, so its preferredWrite must
|
|
570
|
-
// be structurally inert (nothing for import codegen to accidentally call), and its manualSteps
|
|
571
|
-
// must actually contain a runbook — an empty or missing one would render nothing to the
|
|
572
|
-
// merchant, which is worse than not classifying it manual-mapping at all.
|
|
573
|
-
function validateManualMapping(entity, label, errors) {
|
|
574
|
-
const pw = entity.preferredWrite || {};
|
|
575
|
-
if (pw.endpoint !== null) errors.push(`${label}: manual-mapping requires preferredWrite.endpoint === null`);
|
|
576
|
-
if (pw.writerId !== null) errors.push(`${label}: manual-mapping requires preferredWrite.writerId === null`);
|
|
577
|
-
if (pw.verification !== 'none') errors.push(`${label}: manual-mapping requires preferredWrite.verification === 'none'`);
|
|
578
|
-
if (pw.importSafe !== false) errors.push(`${label}: manual-mapping requires preferredWrite.importSafe === false`);
|
|
579
|
-
if (pw.bulk !== false) errors.push(`${label}: manual-mapping requires preferredWrite.bulk === false`);
|
|
580
|
-
|
|
581
|
-
const manualSteps = entity.manualSteps;
|
|
582
|
-
if (!manualSteps || typeof manualSteps !== 'object') {
|
|
583
|
-
errors.push(`${label}: manual-mapping requires a manualSteps object`);
|
|
584
|
-
return;
|
|
585
|
-
}
|
|
586
|
-
if (!Array.isArray(manualSteps.steps) || manualSteps.steps.length === 0) {
|
|
587
|
-
errors.push(`${label}: manualSteps.steps must be a non-empty array`);
|
|
588
|
-
return;
|
|
589
|
-
}
|
|
590
|
-
manualSteps.steps.forEach((step, index) => {
|
|
591
|
-
if (!step || !MANUAL_STEP_ACTORS.has(step.actor)) {
|
|
592
|
-
errors.push(`${label}: manualSteps.steps[${index}].actor must be one of ${Array.from(MANUAL_STEP_ACTORS).join(', ')}`);
|
|
593
|
-
}
|
|
594
|
-
if (!step || typeof step.text !== 'string' || step.text.trim() === '') {
|
|
595
|
-
errors.push(`${label}: manualSteps.steps[${index}].text must be a non-empty string`);
|
|
596
|
-
}
|
|
597
|
-
});
|
|
598
|
-
}
|
|
599
|
-
|
|
600
|
-
function validateSafeModeContactFields(fields, label, errors) {
|
|
601
|
-
if (fields === undefined) return;
|
|
602
|
-
if (!Array.isArray(fields)) {
|
|
603
|
-
errors.push(`${label}: safeModeContactFields must be an array when present`);
|
|
604
|
-
return;
|
|
605
|
-
}
|
|
606
|
-
for (const [index, field] of fields.entries()) {
|
|
607
|
-
const fieldLabel = `${label}: safeModeContactFields[${index}]`;
|
|
608
|
-
if (!field || typeof field !== 'object' || Array.isArray(field)) {
|
|
609
|
-
errors.push(`${fieldLabel} must be an object`);
|
|
610
|
-
continue;
|
|
611
|
-
}
|
|
612
|
-
if (!SAFE_MODE_CONTACT_KINDS.has(field.kind)) errors.push(`${fieldLabel}.kind must be email or phone`);
|
|
613
|
-
if (!field.targetPath || typeof field.targetPath !== 'string') errors.push(`${fieldLabel}.targetPath must be a non-empty string`);
|
|
614
|
-
if (!field.source || typeof field.source !== 'string') errors.push(`${fieldLabel}.source must be a non-empty string`);
|
|
615
|
-
}
|
|
616
|
-
}
|
|
617
|
-
|
|
618
|
-
function validateEvidence(items, label, errors) {
|
|
619
|
-
if (!Array.isArray(items) || items.length === 0) {
|
|
620
|
-
errors.push(`${label}: evidence must be a non-empty array`);
|
|
621
|
-
return;
|
|
622
|
-
}
|
|
623
|
-
for (const item of items) {
|
|
624
|
-
if (!item.url && !item.path) errors.push(`${label}: every evidence item must include url or path`);
|
|
625
|
-
}
|
|
626
|
-
}
|
|
627
|
-
|
|
628
|
-
function validateIndexConsistency(index, domainsDir, errors) {
|
|
629
|
-
const flagged = new Set(index.flags && index.flags.IMPORT_UNRELIABLE ? index.flags.IMPORT_UNRELIABLE : []);
|
|
630
|
-
const entityFlagged = new Set();
|
|
631
|
-
|
|
632
|
-
for (const [domain, domainEntry] of Object.entries(index.domains || {})) {
|
|
633
|
-
if (!fs.existsSync(path.join(domainsDir, domain, 'domain.json'))) errors.push(`index: missing domain file for ${domain}`);
|
|
634
|
-
for (const [entityId, entityEntry] of Object.entries(domainEntry.entities || {})) {
|
|
635
|
-
const ref = `${domain}/${entityId}`;
|
|
636
|
-
const entityPath = path.join(domainsDir, domain, 'entities', `${entityId}.json`);
|
|
637
|
-
if (!fs.existsSync(entityPath)) {
|
|
638
|
-
errors.push(`index: missing entity file for ${ref}`);
|
|
639
|
-
continue;
|
|
640
|
-
}
|
|
641
|
-
const entity = readJson(entityPath);
|
|
642
|
-
if ((entity.reliability.flags || []).includes('IMPORT_UNRELIABLE')) entityFlagged.add(ref);
|
|
643
|
-
if (entityEntry.path !== `domains/${domain}/entities/${entityId}.json`) {
|
|
644
|
-
errors.push(`index: invalid path for ${ref}`);
|
|
645
|
-
}
|
|
646
|
-
}
|
|
647
|
-
}
|
|
648
|
-
|
|
649
|
-
for (const ref of entityFlagged) {
|
|
650
|
-
if (!flagged.has(ref)) errors.push(`index: ${ref} has IMPORT_UNRELIABLE but is missing from flags`);
|
|
651
|
-
}
|
|
652
|
-
for (const ref of flagged) {
|
|
653
|
-
if (!entityFlagged.has(ref)) errors.push(`index: ${ref} is flagged IMPORT_UNRELIABLE but entity file is not`);
|
|
654
|
-
}
|
|
655
|
-
}
|
|
656
|
-
|
|
657
|
-
function loadIndex(domainsDir) {
|
|
658
|
-
return readJson(path.join(domainsDir, 'index.json'));
|
|
659
|
-
}
|
|
660
|
-
|
|
661
|
-
function listDomains(domainsDir) {
|
|
662
|
-
const index = loadIndex(domainsDir);
|
|
663
|
-
return Object.entries(index.domains || {}).map(([domain, info]) => ({
|
|
664
|
-
domain,
|
|
665
|
-
displayName: info.displayName,
|
|
666
|
-
ownerHint: info.ownerHint,
|
|
667
|
-
path: info.path,
|
|
668
|
-
}));
|
|
669
|
-
}
|
|
670
|
-
|
|
671
|
-
function listEntities(domainsDir, domain) {
|
|
672
|
-
const index = loadIndex(domainsDir);
|
|
673
|
-
const domainInfo = index.domains && index.domains[domain];
|
|
674
|
-
if (!domainInfo) throw new Error(`Unknown domain: ${domain}`);
|
|
675
|
-
return Object.entries(domainInfo.entities || {}).map(([entity, info]) => ({
|
|
676
|
-
ref: `${domain}/${entity}`,
|
|
677
|
-
entity,
|
|
678
|
-
displayName: info.displayName,
|
|
679
|
-
classification: info.classification,
|
|
680
|
-
reliabilityStatus: info.reliabilityStatus,
|
|
681
|
-
reliabilityFlags: info.reliabilityFlags,
|
|
682
|
-
path: info.path,
|
|
683
|
-
}));
|
|
684
|
-
}
|
|
685
|
-
|
|
686
|
-
function readEntityByRef(domainsDir, ref) {
|
|
687
|
-
const [domain, entity] = ref.split('/');
|
|
688
|
-
if (!domain || !entity) throw new Error(`Invalid ref: ${ref}`);
|
|
689
|
-
return loadEntity(domainsDir, domain, entity);
|
|
690
|
-
}
|
|
691
|
-
|
|
692
|
-
function resolveSource(domainsDir, { sourceSystem, sourceEntity, route }) {
|
|
693
|
-
const index = loadIndex(domainsDir);
|
|
694
|
-
const refs = new Set();
|
|
695
|
-
if (sourceSystem && sourceEntity) {
|
|
696
|
-
for (const ref of index.sourceAliasIndex[`${sourceSystem}:${sourceEntity}`] || []) refs.add(ref);
|
|
697
|
-
}
|
|
698
|
-
if (route) {
|
|
699
|
-
for (const [pattern, patternRefs] of Object.entries(index.routeAliasIndex || {})) {
|
|
700
|
-
if (route === pattern || routeMatches(pattern, route)) {
|
|
701
|
-
for (const ref of patternRefs) refs.add(ref);
|
|
702
|
-
}
|
|
703
|
-
}
|
|
704
|
-
}
|
|
705
|
-
return Array.from(refs).sort().map((ref) => {
|
|
706
|
-
const entity = readEntityByRef(domainsDir, ref);
|
|
707
|
-
return {
|
|
708
|
-
ref,
|
|
709
|
-
confidence: bestAliasConfidence(entity, { sourceSystem, sourceEntity, route }),
|
|
710
|
-
sourceAliases: (entity.sourceAliases || []).filter((alias) => aliasMatches(alias, { sourceSystem, sourceEntity, route })),
|
|
711
|
-
};
|
|
712
|
-
});
|
|
713
|
-
}
|
|
714
|
-
|
|
715
|
-
function routeMatches(pattern, route) {
|
|
716
|
-
if (!pattern.includes('{') && !pattern.includes(':')) return false;
|
|
717
|
-
const escaped = pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&').replace(/\\\{[^}]+\\\}/g, '[^/]+').replace(/:[A-Za-z0-9_-]+/g, '[^/]+');
|
|
718
|
-
return new RegExp(`^${escaped}$`).test(route);
|
|
719
|
-
}
|
|
720
|
-
|
|
721
|
-
function aliasMatches(alias, query) {
|
|
722
|
-
const sourceMatches = (!query.sourceSystem || alias.sourceSystem === query.sourceSystem) && (!query.sourceEntity || alias.sourceEntity === query.sourceEntity);
|
|
723
|
-
const routeMatchesAlias = !query.route || (alias.routes || []).some((pattern) => query.route === pattern || routeMatches(pattern, query.route));
|
|
724
|
-
return sourceMatches && routeMatchesAlias;
|
|
725
|
-
}
|
|
726
|
-
|
|
727
|
-
function bestAliasConfidence(entity, query) {
|
|
728
|
-
const order = { high: 3, medium: 2, low: 1 };
|
|
729
|
-
let best = 'low';
|
|
730
|
-
for (const alias of entity.sourceAliases || []) {
|
|
731
|
-
if (aliasMatches(alias, query) && (order[alias.confidence] || 0) > (order[best] || 0)) best = alias.confidence;
|
|
732
|
-
}
|
|
733
|
-
return best;
|
|
734
|
-
}
|
|
735
|
-
|
|
736
|
-
function listFlagged(domainsDir, flag) {
|
|
737
|
-
const index = loadIndex(domainsDir);
|
|
738
|
-
return (index.flags && index.flags[flag] ? index.flags[flag] : []).map((ref) => {
|
|
739
|
-
const entity = readEntityByRef(domainsDir, ref);
|
|
740
|
-
return {
|
|
741
|
-
ref,
|
|
742
|
-
displayName: entity.displayName,
|
|
743
|
-
classification: entity.target.classification,
|
|
744
|
-
reliabilityStatus: entity.reliability.status,
|
|
745
|
-
summary: firstPitfallOrGuidance(entity),
|
|
746
|
-
};
|
|
747
|
-
});
|
|
748
|
-
}
|
|
749
|
-
|
|
750
|
-
// Lazily required: domain-knowledge is loaded by tooling that has no need for the schema library,
|
|
751
|
-
// and a hard dependency at module load is how one domain file breaks everything (learned the hard
|
|
752
|
-
// way when a generic library loaded an eCommerce entity at init).
|
|
753
|
-
function stampSetupRequirement(requirement) {
|
|
754
|
-
if (!requirement || requirement.kind !== 'extendedFieldSchema') return requirement;
|
|
755
|
-
// eslint-disable-next-line global-require
|
|
756
|
-
return require('./data-extension-schema.js').stampRequirement(requirement);
|
|
757
|
-
}
|
|
758
|
-
|
|
759
|
-
function summarizeEntities(domainsDir, refs, { includeEvidence = false } = {}) {
|
|
760
|
-
return refs.map((ref) => {
|
|
761
|
-
const entity = readEntityByRef(domainsDir, ref);
|
|
762
|
-
const summary = {
|
|
763
|
-
ref,
|
|
764
|
-
displayName: entity.displayName,
|
|
765
|
-
target: entity.target,
|
|
766
|
-
preferredWrite: entity.preferredWrite,
|
|
767
|
-
reliability: entity.reliability,
|
|
768
|
-
pitfalls: entity.pitfalls,
|
|
769
|
-
mappingGuidance: entity.mappingGuidance,
|
|
770
|
-
// Stamped HERE, at the producer the shipped path actually uses. The stamp used to live only
|
|
771
|
-
// on a domain adapter that setup discovery never calls, so the real chain emitted unstamped
|
|
772
|
-
// requirements and every invoice write was refused by a guard that was working correctly.
|
|
773
|
-
setupRequirements: (entity.setupRequirements || []).map(stampSetupRequirement),
|
|
774
|
-
fieldContracts: entity.fieldContracts || [],
|
|
775
|
-
blockedSourceDependencies: entity.blockedSourceDependencies || [],
|
|
776
|
-
extendedFields: entity.extendedFields || null,
|
|
777
|
-
};
|
|
778
|
-
if (includeEvidence) summary.evidence = entity.evidence;
|
|
779
|
-
return summary;
|
|
780
|
-
});
|
|
781
|
-
}
|
|
782
|
-
|
|
783
|
-
// Compact cross-adapter view consumed by the WordPress plugin knowledge base so plugin
|
|
784
|
-
// profiles can be validated against real Wix target refs and capability claims without
|
|
785
|
-
// each adapter re-reading the other's tree.
|
|
786
|
-
function knowledgeSummary(domainsDir) {
|
|
787
|
-
const index = loadIndex(domainsDir);
|
|
788
|
-
const knownRefs = new Set();
|
|
789
|
-
const verificationByRef = new Map();
|
|
790
|
-
// manual-mapping entities only — lets classifyCoverage tell a manual-mapping
|
|
791
|
-
// target apart from a real write target using only this compact summary, with no need to
|
|
792
|
-
// re-read the full rp-target-wix entity tree from the WordPress side.
|
|
793
|
-
const manualStepsByRef = new Map();
|
|
794
|
-
const blockedSourceDependenciesByRef = new Map();
|
|
795
|
-
for (const [domain, domainEntry] of Object.entries(index.domains || {})) {
|
|
796
|
-
for (const entityId of Object.keys(domainEntry.entities || {})) {
|
|
797
|
-
const ref = `${domain}/${entityId}`;
|
|
798
|
-
knownRefs.add(ref);
|
|
799
|
-
const entity = loadEntity(domainsDir, domain, entityId);
|
|
800
|
-
verificationByRef.set(ref, entity.preferredWrite && entity.preferredWrite.verification);
|
|
801
|
-
if (entity.target && entity.target.classification === 'manual-mapping' && entity.manualSteps) {
|
|
802
|
-
manualStepsByRef.set(ref, entity.manualSteps);
|
|
803
|
-
}
|
|
804
|
-
if (Array.isArray(entity.blockedSourceDependencies) && entity.blockedSourceDependencies.length > 0) {
|
|
805
|
-
blockedSourceDependenciesByRef.set(ref, entity.blockedSourceDependencies);
|
|
806
|
-
}
|
|
807
|
-
}
|
|
808
|
-
}
|
|
809
|
-
const capabilityRefs = new Map(Object.entries(index.capabilityIndex || {}));
|
|
810
|
-
return { knownRefs, capabilityRefs, verificationByRef, manualStepsByRef, blockedSourceDependenciesByRef };
|
|
811
|
-
}
|
|
812
|
-
|
|
813
|
-
module.exports = {
|
|
814
|
-
knowledgeRoot,
|
|
815
|
-
generateIndex,
|
|
816
|
-
knowledgeSummary,
|
|
817
|
-
validateKnowledge,
|
|
818
|
-
validateDependsOnPromotion,
|
|
819
|
-
validateDependsOn,
|
|
820
|
-
validateEntity,
|
|
821
|
-
validateBlockedSourceDependencies,
|
|
822
|
-
buildDependsOnGraph,
|
|
823
|
-
findCycle,
|
|
824
|
-
listAllEntityRefs,
|
|
825
|
-
computeScopeCheck,
|
|
826
|
-
checkScope,
|
|
827
|
-
listMissingDependsOn,
|
|
828
|
-
writeJson,
|
|
829
|
-
listDomains,
|
|
830
|
-
listEntities,
|
|
831
|
-
readEntityByRef,
|
|
832
|
-
resolveSource,
|
|
833
|
-
listFlagged,
|
|
834
|
-
summarizeEntities,
|
|
835
|
-
};
|