@wix/agent-skills 1.15.0 → 1.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -1
- package/package.json +1 -1
- package/skills/wix-app/SKILL.md +4 -1
- package/skills/wix-app/references/APP_TOOLS.md +134 -0
- package/skills/wix-app/references/CUSTOM_ELEMENT_WIDGET.md +1 -1
- package/skills/wix-app/references/DASHBOARD_PAGE.md +0 -10
- package/skills/wix-app/references/DATA_COLLECTION.md +6 -4
- package/skills/wix-app/references/EDITOR_REACT_COMPONENT.md +28 -7
- package/skills/wix-app/references/SERVICE_PLUGIN.md +12 -10
- package/skills/wix-app/references/STORES_VERSIONING.md +9 -211
- package/skills/wix-app/references/app-tools/TOOLS.md +75 -0
- package/skills/wix-app/references/backend-event/COMMON-EVENTS.md +5 -0
- package/skills/wix-app/references/dashboard-page/DASHBOARD_API.md +2 -2
- package/skills/wix-app/references/editor-react-component/A11Y-REVIEW-REFERENCE.md +172 -0
- package/skills/wix-app/references/editor-react-component/A11Y-REVIEW.md +138 -0
- package/skills/wix-app/references/editor-react-component/ANIMATED-COMPONENTS.md +172 -0
- package/skills/wix-app/references/editor-react-component/BRANDED-COMPONENTS.md +29 -0
- package/skills/wix-app/references/editor-react-component/COMPONENT-API.md +1 -1
- package/skills/wix-app/references/editor-react-component/COMPONENT-PREVIEW.md +57 -0
- package/skills/wix-app/references/editor-react-component/CSS-GUIDELINES.md +33 -2
- package/skills/wix-app/references/editor-react-component/DESIGN-STATES.md +5 -3
- package/skills/wix-app/references/editor-react-component/DIRECTIONALITY.md +18 -1
- package/skills/wix-app/references/editor-react-component/PARTS.md +15 -2
- package/skills/wix-app/references/editor-react-component/REACT-GUIDELINES.md +4 -3
- package/skills/wix-app/references/service-plugin/BOOKINGS-STAFF-SORTING.md +13 -9
- package/skills/wix-app/references/service-plugin/DISCOUNT-TRIGGERS.md +4 -0
- package/skills/wix-app/references/service-plugin/GIFT-CARDS.md +4 -0
- package/skills/wix-app/references/service-plugin/PAYMENT-SETTINGS.md +3 -1
- package/skills/wix-app/references/service-plugin/SHIPPING-RATES.md +4 -0
- package/skills/wix-app/references/service-plugin/TOOLS_PROVIDER.md +54 -0
- package/skills/wix-app/references/stores/CATEGORIES.md +22 -0
- package/skills/wix-app/references/stores/GET_PRODUCT.md +99 -0
- package/skills/wix-app/references/stores/INVENTORY.md +37 -0
- package/skills/wix-app/references/stores/QUERY.md +119 -0
- package/skills/wix-app/references/stores/WRITE.md +55 -0
- package/skills/wix-docs/SKILL.md +35 -3
- package/skills/wix-headless/SKILL.md +9 -2
- package/skills/wix-headless/entry/bootstrap.mjs +2 -2
- package/skills/wix-headless/entry/skill.md +0 -2
- package/skills/wix-headless/references/CAPABILITIES.md +6 -4
- package/skills/wix-headless/references/CONTENT.md +36 -0
- package/skills/wix-headless/references/DESIGN.md +54 -0
- package/skills/wix-headless/references/DISCOVERY.md +25 -1
- package/skills/wix-headless/references/FEEDBACK.md +16 -5
- package/skills/wix-headless/references/IMAGE_GENERATION.md +10 -0
- package/skills/wix-headless/references/SDK_HANDOFF.md +2 -0
- package/skills/wix-headless/references/SEED.md +3 -1
- package/skills/wix-headless/references/SETUP.md +1 -1
- package/skills/wix-headless/references/inline-recipes/how-to-code-a-store.md +3 -2
- package/skills/wix-headless/references/inline-recipes/how-to-code-restaurant-reservations.md +42 -2
- package/skills/wix-headless/references/inline-recipes/setup-bookings.md +5 -1
- package/skills/wix-headless/references/inline-recipes/setup-forms.md +1 -1
- package/skills/wix-headless/references/inline-recipes/setup-online-store.md +33 -8
- package/skills/wix-headless/references/inline-recipes/setup-portfolio.md +3 -1
- package/skills/wix-headless/references/inline-recipes/setup-restaurant-experiences.md +73 -0
- package/skills/wix-headless/references/inline-recipes/setup-restaurant-orders.md +38 -2
- package/skills/wix-headless/references/inline-recipes/setup-restaurant-reservations.md +20 -1
- package/skills/wix-headless/references/inline-recipes/setup-restaurants.md +1 -1
- package/skills/wix-headless/references/managed/CONNECT.md +2 -2
- package/skills/wix-headless/references/managed/CREATE.md +15 -1
- package/skills/wix-headless/references/managed/DEPLOYMENT.md +47 -0
- package/skills/wix-headless/references/self-managed/DEPLOYMENT.md +8 -0
- package/skills/wix-headless/references/stripe/DEPLOYMENT.md +8 -0
- package/skills/wix-manage/SKILL.md +131 -12
- package/skills/wix-manage/references/analytics/analytics-dashboard-navigation.md +41 -0
- package/skills/wix-manage/references/analytics/query-site-analytics.md +66 -9
- package/skills/wix-manage/references/app-installation/app-installation-dashboard-navigation.md +28 -0
- package/skills/wix-manage/references/app-installation/install-wix-apps.md +3 -0
- package/skills/wix-manage/references/blog/blog-dashboard-navigation.md +56 -0
- package/skills/wix-manage/references/blog/how-to-create-blog-posts.md +31 -6
- package/skills/wix-manage/references/bookings/booking-service-policy-setup.md +3 -1
- package/skills/wix-manage/references/bookings/bookings-dashboard-navigation.md +63 -0
- package/skills/wix-manage/references/bookings/create-booking-service-from-prompt.md +6 -5
- package/skills/wix-manage/references/bookings/create-course-service.md +30 -5
- package/skills/wix-manage/references/bookings/diagnose-availability-issues.md +85 -42
- package/skills/wix-manage/references/cms/cms-dashboard-navigation.md +44 -0
- package/skills/wix-manage/references/cms/cms-data-items-crud.md +31 -3
- package/skills/wix-manage/references/cms/cms-publishing-flow.md +287 -0
- package/skills/wix-manage/references/cms/cms-schema-management.md +33 -1
- package/skills/wix-manage/references/contacts/contacts-dashboard-navigation.md +46 -0
- package/skills/wix-manage/references/contacts/create-a-contact.md +82 -0
- package/skills/wix-manage/references/contacts/update-a-contact.md +119 -0
- package/skills/wix-manage/references/dashboard-navigation/dashboard-navigation.md +82 -0
- package/skills/wix-manage/references/dashboard-navigation/routes.json +1733 -0
- package/skills/wix-manage/references/domains/domains-dashboard-navigation.md +32 -0
- package/skills/wix-manage/references/ecommerce/ecom-pricing.md +4 -4
- package/skills/wix-manage/references/ecommerce/ecom-shipping.md +1 -1
- package/skills/wix-manage/references/ecommerce/gift-cards/ecom-gift-cards-goal-sell-gift-cards.md +338 -0
- package/skills/wix-manage/references/ecommerce/pricing-promotions/ecom-pricing-create-discount-rule.md +42 -78
- package/skills/wix-manage/references/ecommerce/pricing-promotions/ecom-pricing-flow-bundle-and-save.md +1 -1
- package/skills/wix-manage/references/ecommerce/pricing-promotions/ecom-pricing-flow-stock-mover.md +1 -1
- package/skills/wix-manage/references/ecommerce/pricing-promotions/ecom-pricing-flow-upsell-boost.md +1 -1
- package/skills/wix-manage/references/ecommerce/recommend-ecommerce-strategy.md +90 -92
- package/skills/wix-manage/references/events/create-wix-event.md +176 -0
- package/skills/wix-manage/references/events/manage-wix-events.md +174 -0
- package/skills/wix-manage/references/forms/forms-dashboard-navigation.md +44 -0
- package/skills/wix-manage/references/get-paid/get-paid-dashboard-navigation.md +52 -0
- package/skills/wix-manage/references/get-paid/how-to-setup-wix-payments.md +30 -7
- package/skills/wix-manage/references/google-ads/billing-and-payment.md +80 -0
- package/skills/wix-manage/references/google-ads/create-performance-max-campaign.md +212 -0
- package/skills/wix-manage/references/google-ads/get-campaign-suggestions.md +110 -0
- package/skills/wix-manage/references/google-ads/google-ads-dashboard-navigation.md +25 -0
- package/skills/wix-manage/references/google-ads/install-and-create-account.md +155 -0
- package/skills/wix-manage/references/google-ads/manage-campaign-lifecycle.md +63 -0
- package/skills/wix-manage/references/google-ads/query-campaign-analytics.md +155 -0
- package/skills/wix-manage/references/marketing/create-and-publish-social-post.md +225 -144
- package/skills/wix-manage/references/marketing/generate-and-publish-marketing-plan.md +19 -10
- package/skills/wix-manage/references/marketing/marketing-dashboard-navigation.md +52 -0
- package/skills/wix-manage/references/pricing-plans/create-and-update-pricing-plans.md +99 -1
- package/skills/wix-manage/references/pricing-plans/pricing-plans-dashboard-navigation.md +45 -0
- package/skills/wix-manage/references/restaurants/restaurants-dashboard-navigation.md +68 -0
- package/skills/wix-manage/references/restaurants/wix-restaurants-setup.md +94 -125
- package/skills/wix-manage/references/site-properties/change-payment-currency-site-properties.md +48 -9
- package/skills/wix-manage/references/site-properties/site-properties-dashboard-navigation.md +31 -0
- package/skills/wix-manage/references/sites/create-headless-site.md +52 -0
- package/skills/wix-manage/references/sites/create-site-from-template.md +2 -25
- package/skills/wix-manage/references/sites/site-import.md +243 -0
- package/skills/wix-manage/references/sites/sites-dashboard-navigation.md +29 -0
- package/skills/wix-manage/references/stores/add-store-pages-to-site.md +17 -1
- package/skills/wix-manage/references/stores/create-product-from-image.md +8 -6
- package/skills/wix-manage/references/stores/create-product-with-options-catalog-v3.md +16 -10
- package/skills/wix-manage/references/stores/find-products-query-and-search-catalog-v3.md +26 -8
- package/skills/wix-manage/references/stores/stores-dashboard-navigation.md +65 -0
- package/skills/wix-manage/references/stores/update-product-with-options.md +39 -7
- package/skills/wix-replatform/.publish-manifest.json +8 -0
- package/skills/wix-replatform/SKILL.md +693 -0
- package/skills/wix-replatform/lib/artifact-freshness.js +215 -0
- package/skills/wix-replatform/lib/completion-report.js +200 -0
- package/skills/wix-replatform/lib/config-env.js +59 -0
- package/skills/wix-replatform/lib/execution-manifest.js +185 -0
- package/skills/wix-replatform/lib/execution-state.js +173 -0
- package/skills/wix-replatform/lib/import-recovery.js +313 -0
- package/skills/wix-replatform/lib/local-state.js +642 -0
- package/skills/wix-replatform/lib/orchestration-preflight.js +143 -0
- package/skills/wix-replatform/lib/orchestration-router.js +122 -0
- package/skills/wix-replatform/lib/orchestration-state.js +455 -0
- package/skills/wix-replatform/lib/progress-log.js +224 -0
- package/skills/wix-replatform/lib/progress-log.sh +140 -0
- package/skills/wix-replatform/lib/url-preservation-state.js +391 -0
- package/skills/wix-replatform/resources/rp-discovery/SKILL.md +184 -0
- package/skills/wix-replatform/resources/rp-execute-import/SKILL.md +529 -0
- package/skills/wix-replatform/resources/rp-execute-setup/SKILL.md +316 -0
- package/skills/wix-replatform/resources/rp-execute-setup/scripts/mint-token.sh +64 -0
- package/skills/wix-replatform/resources/rp-import-codegen/SKILL.md +1114 -0
- package/skills/wix-replatform/resources/rp-mapper/SKILL.md +430 -0
- package/skills/wix-replatform/resources/rp-mapper/lib/mapping-resolve.js +217 -0
- package/skills/wix-replatform/resources/rp-mapper/scripts/resolve-mapping.js +148 -0
- package/skills/wix-replatform/resources/rp-mapper/wix-business-solutions-taxonomy.md +378 -0
- package/skills/wix-replatform/resources/rp-setup-discovery/SKILL.md +183 -0
- package/skills/wix-replatform/resources/rp-source-csv/SKILL.md +478 -0
- package/skills/wix-replatform/resources/rp-source-csv/lib/canonical-record.js +136 -0
- 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 +310 -0
- package/skills/wix-replatform/resources/rp-source-csv/lib/csv-layout.js +1081 -0
- package/skills/wix-replatform/resources/rp-source-csv/lib/csv-parse.js +618 -0
- package/skills/wix-replatform/resources/rp-source-csv/scripts/csv-discovery.js +949 -0
- package/skills/wix-replatform/resources/rp-source-csv/source-schema.example.json +196 -0
- package/skills/wix-replatform/resources/rp-source-csv/vendors/bigcommerce.json +66 -0
- package/skills/wix-replatform/resources/rp-source-csv/vendors/magento.json +60 -0
- package/skills/wix-replatform/resources/rp-source-csv/vendors/shopify.json +95 -0
- package/skills/wix-replatform/resources/rp-source-csv/vendors/woocommerce.json +82 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/SKILL.md +256 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-http.js +249 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-route-classifier.js +444 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/scripts/wp-discovery.js +774 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/source-schema.example.json +71 -0
- package/skills/wix-replatform/resources/rp-target-wix/SKILL.md +632 -0
- package/skills/wix-replatform/resources/rp-target-wix/SPEC-product-reviews-and-blog-authorship.md +330 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/README.md +21 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/domain.json +19 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/category.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/comment.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/post.json +39 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/tag.json +35 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/domain.json +14 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/collection.json +35 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/data-item.json +36 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/reference.json +35 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/domain.json +14 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/contact.json +131 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/email-subscription.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/label.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/domain.json +21 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-line-item.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-refund.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order.json +97 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/index.json +528 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/domain.json +14 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-file.json +38 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-folder.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/domain.json +13 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/badge.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/member.json +53 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/schema.json +84 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/domain.json +25 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/category.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/coupon.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/inventory-item.json +38 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-tag.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product.json +90 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/audit-summary.js +64 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/contract-ledger.js +141 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/domain-knowledge.js +384 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/ndjson.js +260 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/stores-verification.js +238 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/wix-build.js +237 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/wix-target-spec.js +238 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/wix-writers.js +2219 -0
- package/skills/wix-replatform/resources/rp-target-wix/scripts/domain-knowledge-validate.js +31 -0
- package/skills/wix-replatform/resources/rp-target-wix/scripts/domain-knowledge.js +100 -0
- package/skills/wix-replatform/resources/rp-target-wix/scripts/verify-stores.js +107 -0
- package/skills/wix-replatform/resources/rp-telemetry/SKILL.md +344 -0
- package/skills/wix-replatform/resources/rp-telemetry/lib/bi-sink.js +250 -0
- package/skills/wix-replatform/resources/rp-telemetry/lib/telemetry-recorder.js +1927 -0
- package/skills/wix-replatform/resources/rp-telemetry/scripts/meter-from-audit.js +83 -0
- package/skills/wix-replatform/resources/rp-telemetry/scripts/rp-telemetry.js +141 -0
- package/skills/wix-replatform/scripts/artifact-freshness.js +76 -0
- package/skills/wix-replatform/scripts/execution-manifest-validate.js +43 -0
- package/skills/wix-replatform/scripts/execution-state-prepare.js +128 -0
- package/skills/wix-replatform/scripts/orchestration-preflight.js +48 -0
- package/skills/wix-replatform/scripts/orchestration-route.js +46 -0
- package/skills/wix-replatform/scripts/orchestration-state.js +245 -0
- package/skills/wix-vibe-headless/SKILL.md +54 -25
- package/skills/wix-vibe-headless/install/deploy.cjs +95 -0
- package/skills/wix-vibe-headless/install/pin-agents-md.cjs +34 -0
- package/skills/wix-vibe-headless/platforms/README.md +26 -0
- package/skills/wix-vibe-headless/platforms/base44.md +177 -0
- package/skills/wix-vibe-headless/platforms/generic.md +122 -0
- package/skills/wix-vibe-headless/references/blog/INSTRUCTIONS.md +230 -119
- package/skills/wix-vibe-headless/references/blog/app/components/PostCard.jsx +43 -0
- package/skills/wix-vibe-headless/references/blog/app/components/PostChips.jsx +25 -0
- package/skills/wix-vibe-headless/references/blog/app/components/PostGrid.jsx +15 -0
- package/skills/wix-vibe-headless/references/blog/app/context/TaxonomyContext.jsx +35 -0
- package/skills/wix-vibe-headless/references/blog/app/hooks/usePostDetail.js +38 -0
- package/skills/wix-vibe-headless/references/blog/app/pages/Blog.jsx +40 -0
- package/skills/wix-vibe-headless/references/blog/app/pages/CategoryPage.jsx +54 -0
- package/skills/wix-vibe-headless/references/blog/app/pages/PostDetail.jsx +65 -0
- package/skills/wix-vibe-headless/references/blog/app/pages/TagPage.jsx +50 -0
- package/skills/wix-vibe-headless/references/blog/seed/SEED.md +103 -0
- package/skills/wix-vibe-headless/references/blog/seed/seed-blog.js +270 -0
- package/skills/wix-vibe-headless/references/bookings/INSTRUCTIONS.md +260 -145
- package/skills/wix-vibe-headless/references/bookings/app/components/BookingForm.jsx +65 -0
- package/skills/wix-vibe-headless/references/bookings/app/components/ServiceCard.jsx +47 -0
- package/skills/wix-vibe-headless/references/bookings/app/components/ServiceGrid.jsx +13 -0
- package/skills/wix-vibe-headless/references/bookings/app/components/SlotPicker.jsx +126 -0
- package/skills/wix-vibe-headless/references/bookings/app/hooks/useServiceDetail.js +108 -0
- package/skills/wix-vibe-headless/references/bookings/app/hooks/useServices.js +58 -0
- package/skills/wix-vibe-headless/references/bookings/app/lib/serviceFacts.js +95 -0
- package/skills/wix-vibe-headless/references/bookings/app/pages/ServiceDetail.jsx +94 -0
- package/skills/wix-vibe-headless/references/bookings/app/pages/Services.jsx +89 -0
- package/skills/wix-vibe-headless/references/bookings/{wix-bookings-checkout.js → app/rest/wix-bookings-checkout.js} +1 -1
- package/skills/wix-vibe-headless/references/bookings/{wix-bookings-services.js → app/rest/wix-bookings-services.js} +90 -12
- package/skills/wix-vibe-headless/references/bookings/seed/SEED.md +117 -0
- package/skills/wix-vibe-headless/references/bookings/seed/seed-bookings.js +333 -0
- package/skills/wix-vibe-headless/references/cms/INSTRUCTIONS.md +169 -147
- package/skills/wix-vibe-headless/references/cms/app/collection.config.js +31 -0
- package/skills/wix-vibe-headless/references/cms/app/lib/wixImage.js +18 -0
- package/skills/wix-vibe-headless/references/cms/{wix-cms.js → app/rest/wix-cms.js} +47 -2
- package/skills/wix-vibe-headless/references/cms/seed/SEED.md +145 -0
- package/skills/wix-vibe-headless/references/events/INSTRUCTIONS.md +228 -131
- package/skills/wix-vibe-headless/references/events/app/components/CategoryFilter.jsx +23 -0
- package/skills/wix-vibe-headless/references/events/app/components/EventCard.jsx +43 -0
- package/skills/wix-vibe-headless/references/events/app/components/EventGrid.jsx +13 -0
- package/skills/wix-vibe-headless/references/events/app/components/EventRegistration.jsx +29 -0
- package/skills/wix-vibe-headless/references/events/app/components/RsvpForm.jsx +57 -0
- package/skills/wix-vibe-headless/references/events/app/components/TicketPicker.jsx +78 -0
- package/skills/wix-vibe-headless/references/events/app/hooks/useEventDetail.js +27 -0
- package/skills/wix-vibe-headless/references/events/app/hooks/useEventsList.js +54 -0
- package/skills/wix-vibe-headless/references/events/app/hooks/useRsvpForm.js +40 -0
- package/skills/wix-vibe-headless/references/events/app/hooks/useTicketing.js +81 -0
- package/skills/wix-vibe-headless/references/events/app/pages/EventDetail.jsx +48 -0
- package/skills/wix-vibe-headless/references/events/app/pages/Events.jsx +36 -0
- package/skills/wix-vibe-headless/references/events/{wix-events-browse.js → app/rest/wix-events-browse.js} +3 -2
- package/skills/wix-vibe-headless/references/events/seed/SEED.md +107 -0
- package/skills/wix-vibe-headless/references/events/seed/seed-events.js +251 -0
- package/skills/wix-vibe-headless/references/members/INSTRUCTIONS.md +276 -188
- package/skills/wix-vibe-headless/references/members/app/components/LoginForm.jsx +101 -0
- package/skills/wix-vibe-headless/references/members/app/components/MemberMenu.jsx +33 -0
- package/skills/wix-vibe-headless/references/members/app/components/RequireAuth.jsx +21 -0
- package/skills/wix-vibe-headless/references/members/app/components/SocialButtons.jsx +29 -0
- package/skills/wix-vibe-headless/references/members/app/context/MemberContext.jsx +54 -0
- package/skills/wix-vibe-headless/references/members/app/hooks/useLoginForm.js +77 -0
- package/skills/wix-vibe-headless/references/members/app/pages/Account.jsx +36 -0
- package/skills/wix-vibe-headless/references/members/app/pages/Callback.jsx +32 -0
- package/skills/wix-vibe-headless/references/members/app/pages/Login.jsx +35 -0
- package/skills/wix-vibe-headless/references/members/{wix-members-auth.js → app/rest/wix-members-auth.js} +6 -3
- package/skills/wix-vibe-headless/references/members/install/Register.jsx +22 -0
- package/skills/wix-vibe-headless/references/members/seed/SEED.md +22 -0
- package/skills/wix-vibe-headless/references/portfolio/INSTRUCTIONS.md +233 -104
- package/skills/wix-vibe-headless/references/portfolio/app/components/CollectionCard.jsx +31 -0
- package/skills/wix-vibe-headless/references/portfolio/app/components/CollectionGrid.jsx +15 -0
- package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectCard.jsx +39 -0
- package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectGrid.jsx +15 -0
- package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectMedia.jsx +29 -0
- package/skills/wix-vibe-headless/references/portfolio/app/hooks/useCollectionProjects.js +35 -0
- package/skills/wix-vibe-headless/references/portfolio/app/hooks/usePortfolioGallery.js +27 -0
- package/skills/wix-vibe-headless/references/portfolio/app/hooks/useProjectDetail.js +25 -0
- package/skills/wix-vibe-headless/references/portfolio/app/pages/CollectionPage.jsx +39 -0
- package/skills/wix-vibe-headless/references/portfolio/app/pages/Portfolio.jsx +27 -0
- package/skills/wix-vibe-headless/references/portfolio/app/pages/ProjectDetail.jsx +60 -0
- package/skills/wix-vibe-headless/references/portfolio/{wix-portfolio.js → app/rest/wix-portfolio.js} +84 -55
- package/skills/wix-vibe-headless/references/portfolio/seed/SEED.md +94 -0
- package/skills/wix-vibe-headless/references/portfolio/seed/seed-portfolio.js +236 -0
- package/skills/wix-vibe-headless/references/pricing-plans/INSTRUCTIONS.md +240 -117
- package/skills/wix-vibe-headless/references/pricing-plans/app/components/OrderCard.jsx +35 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanCard.jsx +48 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanGrid.jsx +16 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanPrice.jsx +35 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/hooks/useMyPlans.js +25 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/hooks/usePlanDetail.js +28 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/hooks/usePlans.js +30 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/pages/MyPlans.jsx +30 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/pages/PlanDetail.jsx +53 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/pages/Plans.jsx +28 -0
- package/skills/wix-vibe-headless/references/pricing-plans/seed/SEED.md +86 -0
- package/skills/wix-vibe-headless/references/pricing-plans/seed/seed-pricing-plans.js +251 -0
- package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +248 -124
- package/skills/wix-vibe-headless/references/restaurants/app/components/ItemDialog.jsx +81 -0
- package/skills/wix-vibe-headless/references/restaurants/app/components/MenuItemCard.jsx +71 -0
- package/skills/wix-vibe-headless/references/restaurants/app/components/MenuList.jsx +43 -0
- package/skills/wix-vibe-headless/references/restaurants/app/components/OrderCartButton.jsx +21 -0
- package/skills/wix-vibe-headless/references/restaurants/app/components/OrderCartDrawer.jsx +60 -0
- package/skills/wix-vibe-headless/references/restaurants/app/context/OrderCartContext.jsx +63 -0
- package/skills/wix-vibe-headless/references/restaurants/app/hooks/useItemOrder.js +32 -0
- package/skills/wix-vibe-headless/references/restaurants/app/hooks/useReservation.js +73 -0
- package/skills/wix-vibe-headless/references/restaurants/app/pages/Menu.jsx +28 -0
- package/skills/wix-vibe-headless/references/restaurants/app/pages/Reservations.jsx +102 -0
- package/skills/wix-vibe-headless/references/restaurants/seed/SEED.md +180 -0
- package/skills/wix-vibe-headless/references/restaurants/seed/seed-restaurants.js +452 -0
- package/skills/wix-vibe-headless/references/shared/app/components/WixManageBanner.jsx +56 -0
- package/skills/wix-vibe-headless/references/shared/{wix-client.js → app/rest/wix-client.js} +6 -8
- package/skills/wix-vibe-headless/references/shared/app/rest/wix-config.js +6 -0
- package/skills/wix-vibe-headless/references/storefront/INSTRUCTIONS.md +263 -148
- package/skills/wix-vibe-headless/references/storefront/app/components/CartButton.jsx +20 -0
- package/skills/wix-vibe-headless/references/storefront/app/components/CartDrawer.jsx +150 -0
- package/skills/wix-vibe-headless/references/storefront/app/components/ProductCard.jsx +167 -0
- package/skills/wix-vibe-headless/references/storefront/app/components/ProductGallery.jsx +51 -0
- package/skills/wix-vibe-headless/references/storefront/app/components/ProductGrid.jsx +54 -0
- package/skills/wix-vibe-headless/references/storefront/app/components/VariantPicker.jsx +119 -0
- package/skills/wix-vibe-headless/references/storefront/app/context/CartContext.jsx +71 -0
- package/skills/wix-vibe-headless/references/storefront/app/hooks/useProductDetail.js +109 -0
- package/skills/wix-vibe-headless/references/storefront/app/hooks/useShop.js +98 -0
- package/skills/wix-vibe-headless/references/storefront/app/lib/storeImage.js +27 -0
- package/skills/wix-vibe-headless/references/storefront/app/pages/ProductDetail.jsx +139 -0
- package/skills/wix-vibe-headless/references/storefront/app/pages/Shop.jsx +75 -0
- package/skills/wix-vibe-headless/references/storefront/{wix-store-cart.js → app/rest/wix-store-cart.js} +1 -1
- package/skills/wix-vibe-headless/references/storefront/{wix-store-catalog.js → app/rest/wix-store-catalog.js} +25 -2
- package/skills/wix-vibe-headless/references/storefront/seed/SEED.md +111 -0
- package/skills/wix-vibe-headless/references/storefront/seed/seed-store.js +299 -0
- /package/skills/wix-vibe-headless/references/blog/{wix-blog.js → app/rest/wix-blog.js} +0 -0
- /package/skills/wix-vibe-headless/references/events/{wix-events-registration.js → app/rest/wix-events-registration.js} +0 -0
- /package/skills/wix-vibe-headless/references/pricing-plans/{wix-pricing-plans.js → app/rest/wix-pricing-plans.js} +0 -0
- /package/skills/wix-vibe-headless/references/restaurants/{wix-restaurants-menu.js → app/rest/wix-restaurants-menu.js} +0 -0
- /package/skills/wix-vibe-headless/references/restaurants/{wix-restaurants-ordering.js → app/rest/wix-restaurants-ordering.js} +0 -0
- /package/skills/wix-vibe-headless/references/restaurants/{wix-restaurants-reservations.js → app/rest/wix-restaurants-reservations.js} +0 -0
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
const path = require('node:path');
|
|
5
|
+
const {
|
|
6
|
+
nowIso,
|
|
7
|
+
randomId,
|
|
8
|
+
orchestrationDir,
|
|
9
|
+
loadArtifacts,
|
|
10
|
+
initArtifacts,
|
|
11
|
+
validateArtifacts,
|
|
12
|
+
writeJsonAtomic,
|
|
13
|
+
appendEvent,
|
|
14
|
+
updateDecisionObject,
|
|
15
|
+
updateApprovalObject,
|
|
16
|
+
updateCheckpointObject,
|
|
17
|
+
transitionRun,
|
|
18
|
+
} = require('../lib/orchestration-state.js');
|
|
19
|
+
const { createProgressLogger, parseProgressArgs } = require('../lib/progress-log.js');
|
|
20
|
+
|
|
21
|
+
let progress;
|
|
22
|
+
|
|
23
|
+
function usage() {
|
|
24
|
+
console.log(`Usage:
|
|
25
|
+
node scripts/orchestration-state.js init --project-dir <dir> [--project-id <id>]
|
|
26
|
+
node scripts/orchestration-state.js validate --project-dir <dir>
|
|
27
|
+
node scripts/orchestration-state.js status --project-dir <dir>
|
|
28
|
+
node scripts/orchestration-state.js decide --project-dir <dir> --key <decisionKey> --value <jsonOrString> [--source user|deterministic_inference|prior_artifact] [--rationale <text>]
|
|
29
|
+
node scripts/orchestration-state.js approve --project-dir <dir> --type mapping|execution --status pending|approved|rejected|provisional [--notes <text>] [--decided-by user|system]
|
|
30
|
+
node scripts/orchestration-state.js checkpoint --project-dir <dir> --phase discovery|mapping|setup|codegen|execution --patch <json>
|
|
31
|
+
node scripts/orchestration-state.js transition --project-dir <dir> --state <state> --phase <activePhase> [--status <runStatus>] [--needs-user-input true|false] [--needs-llm true|false] [--resume-from <jsonReasonRef>]
|
|
32
|
+
`);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function parseArgs(argv) {
|
|
36
|
+
const args = { _: [] };
|
|
37
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
38
|
+
const token = argv[i];
|
|
39
|
+
if (!token.startsWith('--')) {
|
|
40
|
+
args._.push(token);
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
const key = token.slice(2).replace(/-([a-z])/g, (_, c) => c.toUpperCase());
|
|
44
|
+
args[key] = argv[i + 1];
|
|
45
|
+
i += 1;
|
|
46
|
+
}
|
|
47
|
+
return args;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function parseMaybeJson(value) {
|
|
51
|
+
if (value == null) {
|
|
52
|
+
return value;
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
return JSON.parse(value);
|
|
56
|
+
} catch {
|
|
57
|
+
return value;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function parseBoolean(value, fallback) {
|
|
62
|
+
if (value == null) {
|
|
63
|
+
return fallback;
|
|
64
|
+
}
|
|
65
|
+
return String(value) === 'true';
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
async function saveArtifacts(projectDir, artifacts) {
|
|
69
|
+
const dir = orchestrationDir(projectDir);
|
|
70
|
+
await writeJsonAtomic(path.join(dir, 'run.json'), artifacts.run);
|
|
71
|
+
await writeJsonAtomic(path.join(dir, 'checkpoints.json'), artifacts.checkpoints);
|
|
72
|
+
await writeJsonAtomic(path.join(dir, 'decisions.json'), artifacts.decisions);
|
|
73
|
+
await writeJsonAtomic(path.join(dir, 'approvals.json'), artifacts.approvals);
|
|
74
|
+
if (artifacts.preflight) {
|
|
75
|
+
await writeJsonAtomic(path.join(dir, 'preflight.json'), artifacts.preflight);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
async function main() {
|
|
80
|
+
const parsed = parseProgressArgs(process.argv.slice(2));
|
|
81
|
+
progress = createProgressLogger({
|
|
82
|
+
script: 'skills/replatform/scripts/orchestration-state.js',
|
|
83
|
+
...parsed.progress,
|
|
84
|
+
});
|
|
85
|
+
progress.start('Orchestration state command started', { phase: 'orchestration' });
|
|
86
|
+
|
|
87
|
+
const args = parseArgs(parsed.args);
|
|
88
|
+
const command = args._[0];
|
|
89
|
+
if (!command || command === 'help') {
|
|
90
|
+
usage();
|
|
91
|
+
if (command) {
|
|
92
|
+
progress.complete('Orchestration state help shown', { phase: 'orchestration', step: 'help' });
|
|
93
|
+
} else {
|
|
94
|
+
progress.error('Missing orchestration state command', { phase: 'orchestration' });
|
|
95
|
+
}
|
|
96
|
+
process.exit(command ? 0 : 1);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if (!args.projectDir) {
|
|
100
|
+
throw new Error('--project-dir is required');
|
|
101
|
+
}
|
|
102
|
+
const projectDir = path.resolve(args.projectDir);
|
|
103
|
+
|
|
104
|
+
if (command === 'init') {
|
|
105
|
+
const artifacts = await initArtifacts(projectDir, { projectId: args.projectId || path.basename(projectDir) });
|
|
106
|
+
console.log(JSON.stringify({ ok: true, projectDir, state: artifacts.run.currentState }, null, 2));
|
|
107
|
+
progress.complete('Orchestration artifacts initialized', { phase: 'orchestration', step: 'init', artifact: projectDir });
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const artifacts = await loadArtifacts(projectDir);
|
|
112
|
+
if (!artifacts.run) {
|
|
113
|
+
throw new Error(`orchestration artifacts not initialized under ${projectDir}`);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if (command === 'validate') {
|
|
117
|
+
const result = validateArtifacts(artifacts);
|
|
118
|
+
console.log(JSON.stringify(result, null, 2));
|
|
119
|
+
if (result.ok) {
|
|
120
|
+
progress.complete('Orchestration artifacts validated', { phase: 'orchestration', step: 'validate', artifact: projectDir });
|
|
121
|
+
} else {
|
|
122
|
+
progress.error('Orchestration artifact validation failed', { phase: 'orchestration', step: 'validate', artifact: projectDir, count: result.errors.length, unit: 'errors' });
|
|
123
|
+
}
|
|
124
|
+
process.exit(result.ok ? 0 : 1);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if (command === 'status') {
|
|
128
|
+
const result = validateArtifacts(artifacts);
|
|
129
|
+
console.log(JSON.stringify({
|
|
130
|
+
ok: result.ok,
|
|
131
|
+
currentState: artifacts.run.currentState,
|
|
132
|
+
activePhase: artifacts.run.activePhase,
|
|
133
|
+
runStatus: artifacts.run.status,
|
|
134
|
+
approvals: artifacts.approvals,
|
|
135
|
+
checkpointStatus: {
|
|
136
|
+
discovery: artifacts.checkpoints.discovery.status,
|
|
137
|
+
mapping: artifacts.checkpoints.mapping.status,
|
|
138
|
+
setup: artifacts.checkpoints.setup.status,
|
|
139
|
+
codegen: artifacts.checkpoints.codegen.status,
|
|
140
|
+
execution: artifacts.checkpoints.execution.status,
|
|
141
|
+
},
|
|
142
|
+
errors: result.errors,
|
|
143
|
+
}, null, 2));
|
|
144
|
+
if (result.ok) {
|
|
145
|
+
progress.complete('Orchestration status read', { phase: 'orchestration', step: 'status', artifact: projectDir });
|
|
146
|
+
} else {
|
|
147
|
+
progress.error('Orchestration status is invalid', { phase: 'orchestration', step: 'status', artifact: projectDir, count: result.errors.length, unit: 'errors' });
|
|
148
|
+
}
|
|
149
|
+
process.exit(result.ok ? 0 : 1);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (command === 'decide') {
|
|
153
|
+
if (!args.key || args.value == null) {
|
|
154
|
+
throw new Error('decide requires --key and --value');
|
|
155
|
+
}
|
|
156
|
+
updateDecisionObject(artifacts.decisions, args.key, parseMaybeJson(args.value), {
|
|
157
|
+
source: args.source || 'user',
|
|
158
|
+
rationale: args.rationale || null,
|
|
159
|
+
timestamp: nowIso(),
|
|
160
|
+
});
|
|
161
|
+
await saveArtifacts(projectDir, artifacts);
|
|
162
|
+
await appendEvent(projectDir, {
|
|
163
|
+
id: randomId('evt'),
|
|
164
|
+
timestamp: nowIso(),
|
|
165
|
+
phase: artifacts.run.activePhase,
|
|
166
|
+
state: artifacts.run.currentState,
|
|
167
|
+
type: 'decision.recorded',
|
|
168
|
+
payload: { key: args.key },
|
|
169
|
+
});
|
|
170
|
+
console.log(JSON.stringify({ ok: true, decision: args.key }, null, 2));
|
|
171
|
+
progress.complete('Orchestration decision recorded', { phase: 'orchestration', step: 'decide', entity: args.key, artifact: projectDir });
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
if (command === 'approve') {
|
|
176
|
+
if (!args.type || !args.status) {
|
|
177
|
+
throw new Error('approve requires --type and --status');
|
|
178
|
+
}
|
|
179
|
+
updateApprovalObject(artifacts.approvals, args.type, args.status, {
|
|
180
|
+
notes: args.notes || null,
|
|
181
|
+
decidedBy: args.decidedBy || 'user',
|
|
182
|
+
timestamp: nowIso(),
|
|
183
|
+
});
|
|
184
|
+
await saveArtifacts(projectDir, artifacts);
|
|
185
|
+
await appendEvent(projectDir, {
|
|
186
|
+
id: randomId('evt'),
|
|
187
|
+
timestamp: nowIso(),
|
|
188
|
+
phase: artifacts.run.activePhase,
|
|
189
|
+
state: artifacts.run.currentState,
|
|
190
|
+
type: 'approval.updated',
|
|
191
|
+
payload: { approvalType: args.type, status: args.status },
|
|
192
|
+
});
|
|
193
|
+
console.log(JSON.stringify({ ok: true, approvalType: args.type, status: args.status }, null, 2));
|
|
194
|
+
progress.complete('Orchestration approval updated', { phase: 'orchestration', step: 'approve', entity: args.type, artifact: projectDir });
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
if (command === 'checkpoint') {
|
|
199
|
+
if (!args.phase || !args.patch) {
|
|
200
|
+
throw new Error('checkpoint requires --phase and --patch');
|
|
201
|
+
}
|
|
202
|
+
updateCheckpointObject(artifacts.checkpoints, args.phase, parseMaybeJson(args.patch), nowIso());
|
|
203
|
+
await saveArtifacts(projectDir, artifacts);
|
|
204
|
+
console.log(JSON.stringify({ ok: true, phase: args.phase }, null, 2));
|
|
205
|
+
progress.complete('Orchestration checkpoint updated', { phase: 'orchestration', step: 'checkpoint', entity: args.phase, artifact: projectDir });
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
if (command === 'transition') {
|
|
210
|
+
if (!args.state || !args.phase) {
|
|
211
|
+
throw new Error('transition requires --state and --phase');
|
|
212
|
+
}
|
|
213
|
+
artifacts.run = transitionRun(artifacts.run, {
|
|
214
|
+
state: args.state,
|
|
215
|
+
activePhase: args.phase,
|
|
216
|
+
status: args.status || artifacts.run.status,
|
|
217
|
+
needsUserInput: parseBoolean(args.needsUserInput, artifacts.run.needsUserInput),
|
|
218
|
+
needsLlm: parseBoolean(args.needsLlm, artifacts.run.needsLlm),
|
|
219
|
+
resumeFrom: args.resumeFrom ? parseMaybeJson(args.resumeFrom) : artifacts.run.resumeFrom,
|
|
220
|
+
timestamp: nowIso(),
|
|
221
|
+
});
|
|
222
|
+
await saveArtifacts(projectDir, artifacts);
|
|
223
|
+
await appendEvent(projectDir, {
|
|
224
|
+
id: randomId('evt'),
|
|
225
|
+
timestamp: nowIso(),
|
|
226
|
+
phase: artifacts.run.activePhase,
|
|
227
|
+
state: artifacts.run.currentState,
|
|
228
|
+
type: 'state.transitioned',
|
|
229
|
+
payload: { activePhase: artifacts.run.activePhase, runStatus: artifacts.run.status },
|
|
230
|
+
});
|
|
231
|
+
console.log(JSON.stringify({ ok: true, state: artifacts.run.currentState, phase: artifacts.run.activePhase }, null, 2));
|
|
232
|
+
progress.complete('Orchestration state transitioned', { phase: 'orchestration', step: 'transition', entity: args.state, artifact: projectDir });
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
throw new Error(`unknown command: ${command}`);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
main().catch((error) => {
|
|
240
|
+
if (progress) {
|
|
241
|
+
progress.error(error && error.message ? error.message : 'Orchestration state command failed', { phase: 'orchestration' });
|
|
242
|
+
}
|
|
243
|
+
console.error(error && error.message ? error.message : error);
|
|
244
|
+
process.exit(1);
|
|
245
|
+
});
|
|
@@ -39,7 +39,13 @@ This skill is the deliberately **client-only, REST-only** path. It is independen
|
|
|
39
39
|
- **Auth = one public client id.** `WIX_CLIENT_ID` is a **buyer/visitor-facing** credential —
|
|
40
40
|
it only mints anonymous visitor tokens. It is **not a secret**; hardcoding and committing it
|
|
41
41
|
is fine. The user provides it (their vibe/host platform surfaces a copyable prompt with the
|
|
42
|
-
id filled in). Paste it into `wix-
|
|
42
|
+
id filled in). Paste it into `wix-config.js` in place of the `<YOUR-CLIENT-ID>` placeholder.
|
|
43
|
+
- **Money/price fields are objects, never scalars.** Every price/amount a Wix API returns —
|
|
44
|
+
Stores `price.actualPrice`, Bookings service `payment.fixed.price`, Events ticket
|
|
45
|
+
`registration.tickets.lowestPrice`, and the rest — has the shape `{ value, currency,
|
|
46
|
+
formattedValue }`. Render **`formattedValue`** (it already includes the currency symbol), or
|
|
47
|
+
fall back to building from `value` + `currency`. **Never** drop the object straight into the UI
|
|
48
|
+
or treat it as a number/string — that renders `[object Object]` or a bare unformatted number.
|
|
43
49
|
- **Visitor token = identity.** `wix-client.js` mints an anonymous visitor token, persists the
|
|
44
50
|
**refresh token to `localStorage`**, and refreshes on expiry. That token IS the identity of
|
|
45
51
|
the cart / reservation / member session — **never re-mint anonymously per load** or the cart
|
|
@@ -87,14 +93,16 @@ This skill is the deliberately **client-only, REST-only** path. It is independen
|
|
|
87
93
|
|
|
88
94
|
## How this skill is structured
|
|
89
95
|
|
|
90
|
-
`<SKILL_ROOT>` is this file's directory (strip `/SKILL.md`).
|
|
91
|
-
|
|
96
|
+
`<SKILL_ROOT>` is this file's directory (strip `/SKILL.md`). Each vertical ships a **complete UI
|
|
97
|
+
client as files** under `references/<vertical>/app/` — `components/`, `pages/`,
|
|
98
|
+
`hooks/`/`context/`, and its REST helpers in `app/rest/` — plus the **shared transport** in
|
|
99
|
+
`references/shared/app/` (`app/rest/wix-client.js` + `wix-config.js`, identical for every vertical).
|
|
100
|
+
Set `WIX_CLIENT_ID` (and `WIX_METASITE_ID`) in `wix-config.js`. Deploying `references/<vertical>/app/`
|
|
101
|
+
and `references/shared/app/` into the app's `src/` puts every file in place — the helpers all land in
|
|
102
|
+
`src/rest/`, so their relative imports resolve.
|
|
92
103
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
2. **The vertical helper** — `references/<vertical>/<helper>.js`. Copy it into the **same**
|
|
96
|
-
`src/rest/` folder (it does `import { wixApiRequest } from "./wix-client.js"`, so the two
|
|
97
|
-
files must sit side by side).
|
|
104
|
+
**Where these files live in the app, and how they get there** (pre-installed at setup, or copied
|
|
105
|
+
in) **is your platform's call — follow your platform instructions for that.**
|
|
98
106
|
|
|
99
107
|
Each vertical's `INSTRUCTIONS.md` is the full playbook for that solution: when to use it,
|
|
100
108
|
prerequisites, the exported API, how to wire it, the hard rules, and a verification checklist.
|
|
@@ -105,28 +113,49 @@ prerequisites, the exported API, how to wire it, the hard rules, and a verificat
|
|
|
105
113
|
Load the vertical(s) the user's app needs; a project may combine several (e.g. a restaurant
|
|
106
114
|
with a blog, or a store with pricing plans).
|
|
107
115
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
|
112
|
-
|
|
113
|
-
|
|
|
114
|
-
|
|
|
115
|
-
|
|
|
116
|
-
|
|
|
117
|
-
|
|
|
118
|
-
|
|
|
116
|
+
Each vertical's UI + helpers ship in `references/<vertical>/app/`; copy that dir plus
|
|
117
|
+
`references/shared/app/` into the app's `src/` (base44 does this at install via `deploy.cjs`).
|
|
118
|
+
|
|
119
|
+
| The user wants… | Vertical | Read |
|
|
120
|
+
|---|---|---|
|
|
121
|
+
| Online store: products, categories, cart, checkout | **storefront** | `references/storefront/INSTRUCTIONS.md` |
|
|
122
|
+
| Appointments: services, time slots, booking, checkout | **bookings** | `references/bookings/INSTRUCTIONS.md` |
|
|
123
|
+
| Blog/news: post feed, post pages, categories, tags | **blog** | `references/blog/INSTRUCTIONS.md` |
|
|
124
|
+
| Events: browse, event page, RSVP, ticketing | **events** | `references/events/INSTRUCTIONS.md` |
|
|
125
|
+
| Portfolio/showcase: collections, projects, media galleries | **portfolio** | `references/portfolio/INSTRUCTIONS.md` |
|
|
126
|
+
| Restaurant: menu, online ordering, table reservations | **restaurants** | `references/restaurants/INSTRUCTIONS.md` |
|
|
127
|
+
| CMS content: list/detail, filter/search, forms, data CRUD | **cms** | `references/cms/INSTRUCTIONS.md` |
|
|
128
|
+
| Plans & pricing: memberships/subscriptions, subscribe, my plans | **pricing-plans** | `references/pricing-plans/INSTRUCTIONS.md` |
|
|
129
|
+
| Member accounts: custom login/sign-up (email+password, Google/Facebook, SSO), account area, gated content | **members** | `references/members/INSTRUCTIONS.md` |
|
|
130
|
+
|
|
131
|
+
### When the request doesn't name a Wix Business Solution — ask, or check the site
|
|
132
|
+
|
|
133
|
+
Don't infer which Wix Business Solution to build (stores, bookings, blog, events, portfolio,
|
|
134
|
+
restaurants, CMS, pricing plans, members, etc..) from a vague brief. **Ask the user** one short
|
|
135
|
+
question — what do they offer (products? appointments? posts? events?) — or **check what the
|
|
136
|
+
site actually has**: call a cheap read from each likely solution's helper (`queryProducts`,
|
|
137
|
+
`queryServices`, `queryPosts`, `queryEvents`, …) — authenticated with a visitor token minted
|
|
138
|
+
from the `WIX_CLIENT_ID`, or with an admin token if you have one — and build for the solutions
|
|
139
|
+
that return real content. A `428` "app not installed" (blog: `401`) means
|
|
140
|
+
that solution isn't on the site; sample-looking content ("Sample product 3") proves the app is
|
|
141
|
+
installed, not what the business is about. Never default to store/bookings on silence.
|
|
119
142
|
|
|
120
143
|
## The run
|
|
121
144
|
|
|
122
145
|
1. **Get `WIX_CLIENT_ID`.** It comes from the user (the handoff prompt from their Wix/vibe
|
|
123
146
|
platform carries it). If it's missing, ask for it before wiring — nothing works without it.
|
|
124
|
-
2. **Pick the vertical(s)** from the routing table and
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
147
|
+
2. **Pick the vertical(s)** from the routing table — and when the request doesn't name any,
|
|
148
|
+
**ask or check the site** (see above) instead of guessing. Open each picked vertical's
|
|
149
|
+
`INSTRUCTIONS.md`.
|
|
150
|
+
3. **Ensure the vertical's files are in place** — copy `references/<vertical>/app/` and
|
|
151
|
+
`references/shared/app/` into the app's `src/`, and set `WIX_CLIENT_ID` in `wix-config.js`. (Where
|
|
152
|
+
and how they get there is your platform's call — see its instructions.)
|
|
153
|
+
4. **Wire the shipped client** following the vertical's INSTRUCTIONS: the components are themed by
|
|
154
|
+
base44's design tokens (`src/index.css` — shadcn palette, already set by the design phase), so
|
|
155
|
+
there's no re-skin step; just wire routes + header/footer through the Layout. The UI ships as
|
|
156
|
+
files — you compose the home page and wire it, you don't rebuild the client. Style what you add
|
|
157
|
+
from the same tokens: every background paired with its own foreground (`bg-primary` with
|
|
158
|
+
`text-primary-foreground`), `border-input` on form controls, `border-border` on cards and dividers.
|
|
130
159
|
5. **Verify** against the vertical's checklist before declaring done: token persists across
|
|
131
160
|
reload, live data renders (or a real empty state), and purchases go through the Wix redirect.
|
|
132
161
|
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
// Post-install deploy — run by base44.md STEP 1 with the vertical(s) the app needs:
|
|
2
|
+
// node deploy.cjs <vertical> [<vertical> …]
|
|
3
|
+
// (storefront | bookings | blog | cms | portfolio | pricing-plans | events | members)
|
|
4
|
+
// ONE mechanism: recursively copy `app/` -> /app/src. The shared transport (app/rest/wix-client.js,
|
|
5
|
+
// wix-config.js) is copied always; then each named vertical's app/ (its UI + app/rest/ helpers).
|
|
6
|
+
// Deploy every vertical the app actually uses, in one call or across several — an app that needs both
|
|
7
|
+
// members and cms names both, and its CMS helpers then come from the skill instead of being
|
|
8
|
+
// hand-written. Order matters only where two verticals ship a file at the SAME path (both have
|
|
9
|
+
// components/…, pages/…): the first one listed wins, since the copy never overwrites. Verticals whose
|
|
10
|
+
// file sets don't overlap (cms ships utils only, no UI) combine freely.
|
|
11
|
+
// paths are the Base44 sandbox's /app. Re-running is non-destructive: it fills in only missing files,
|
|
12
|
+
// never overwriting the agent's edits (see COPY), so a later call can add a vertical safely.
|
|
13
|
+
// No vertical arg -> deploys just the shared transport; re-run with the vertical(s) once known.
|
|
14
|
+
// NOTE: .cjs on purpose — the app is an ESM package ("type":"module"); a .js here would load as ESM
|
|
15
|
+
// and require()/module.exports would throw.
|
|
16
|
+
const { existsSync, cpSync, readFileSync } = require('fs');
|
|
17
|
+
|
|
18
|
+
const REF = '/app/.agents/skills/wix-vibe-headless/references';
|
|
19
|
+
const VERTICALS = ['storefront', 'bookings', 'blog', 'cms', 'portfolio', 'pricing-plans', 'events', 'members', 'restaurants'];
|
|
20
|
+
|
|
21
|
+
// force:false + errorOnExist:false — fill in only files that AREN'T there yet; never overwrite.
|
|
22
|
+
// A re-run (e.g. the "files missing? re-run" fallback) then restores what's missing without
|
|
23
|
+
// clobbering the agent's edits (wired App.jsx, home/header components) from the first deploy.
|
|
24
|
+
const COPY = { recursive: true, force: false, errorOnExist: false };
|
|
25
|
+
|
|
26
|
+
// --- members vertical only: replace leftover Base44 auth pages -------------------------------
|
|
27
|
+
//
|
|
28
|
+
// Base44 seeds src/pages/Login.jsx + src/pages/Register.jsx into every custom-auth-enrolled app
|
|
29
|
+
// at APP CREATION, before any Wix skill ever runs (backend/app/user_apps/auth_templates/_loader.py
|
|
30
|
+
// in the platform repo). The members vertical's own Login.jsx lands at that SAME path via the COPY
|
|
31
|
+
// above, but COPY's force:false skips it because Base44's file is already there — so the Base44-auth
|
|
32
|
+
// page silently survives instead of the Wix-auth one, and the app ends up with two half-wired auth
|
|
33
|
+
// systems. There is no Wix Register.jsx at all (LoginForm's own "Sign up" tab covers registration),
|
|
34
|
+
// so Base44's Register.jsx was never even in contention — it just sits there, wrong, either way.
|
|
35
|
+
//
|
|
36
|
+
// Fix both, but ONLY when the file currently on disk is still recognizably Base44's boilerplate
|
|
37
|
+
// (imports base44Client / calls base44.auth.*). Never touch a file that's already the Wix version
|
|
38
|
+
// or an agent's own customization — same "don't clobber" contract as COPY above, just evaluated on
|
|
39
|
+
// content instead of mere existence.
|
|
40
|
+
function isBase44AuthBoilerplate(path) {
|
|
41
|
+
if (!existsSync(path)) return false;
|
|
42
|
+
const src = readFileSync(path, 'utf8');
|
|
43
|
+
return src.includes('@/api/base44Client') || src.includes('base44.auth.');
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Each entry: the src/ file to repair, and the reference file that replaces it.
|
|
47
|
+
// Login.jsx comes from the vertical's shipped pages; Register.jsx from references/members/install/
|
|
48
|
+
// (a repair stub kept OUT of app/ — this vertical ships no /register route, so a fresh app with no
|
|
49
|
+
// Base44 leftover must not receive it).
|
|
50
|
+
const MEMBERS_AUTH_REPAIRS = [
|
|
51
|
+
{ dest: '/app/src/pages/Login.jsx', src: `${REF}/members/app/pages/Login.jsx` },
|
|
52
|
+
{ dest: '/app/src/pages/Register.jsx', src: `${REF}/members/install/Register.jsx` },
|
|
53
|
+
];
|
|
54
|
+
|
|
55
|
+
function replaceMembersAuthLeftovers() {
|
|
56
|
+
const result = {};
|
|
57
|
+
for (const { dest, src } of MEMBERS_AUTH_REPAIRS) {
|
|
58
|
+
const name = dest.split('/').pop().replace('.jsx', '').toLowerCase();
|
|
59
|
+
if (existsSync(src) && isBase44AuthBoilerplate(dest)) {
|
|
60
|
+
cpSync(src, dest, { force: true });
|
|
61
|
+
result[name] = 'replaced_base44_leftover';
|
|
62
|
+
} else {
|
|
63
|
+
result[name] = 'left_as_is';
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// --- main ---------------------------------------------------------------------------------------
|
|
70
|
+
|
|
71
|
+
// Accept one or many: `deploy.cjs members cms`. Duplicates collapse; order is preserved so the
|
|
72
|
+
// first vertical listed wins any same-path file (the copy never overwrites).
|
|
73
|
+
const requested = [...new Set(process.argv.slice(2))];
|
|
74
|
+
const deployed = { verticals: [] };
|
|
75
|
+
|
|
76
|
+
// Shared transport — always (app/rest/wix-client.js, wix-config.js -> src/rest/).
|
|
77
|
+
if (existsSync(`${REF}/shared/app`)) cpSync(`${REF}/shared/app`, '/app/src', COPY);
|
|
78
|
+
|
|
79
|
+
// Each named vertical — its app/ (UI + app/rest/ helpers) -> src/.
|
|
80
|
+
const unknown = requested.filter((v) => !VERTICALS.includes(v));
|
|
81
|
+
for (const vertical of requested.filter((v) => VERTICALS.includes(v))) {
|
|
82
|
+
if (!existsSync(`${REF}/${vertical}/app`)) continue;
|
|
83
|
+
cpSync(`${REF}/${vertical}/app`, '/app/src', COPY);
|
|
84
|
+
deployed.verticals.push(vertical);
|
|
85
|
+
if (vertical === 'members') deployed.authPagesFixed = replaceMembersAuthLeftovers();
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (unknown.length) {
|
|
89
|
+
deployed.error = `unknown vertical(s) ${unknown.map((v) => `"${v}"`).join(', ')} — expected: ${VERTICALS.join(', ')}`;
|
|
90
|
+
}
|
|
91
|
+
if (!requested.length) {
|
|
92
|
+
deployed.note = 'no vertical given — deployed the shared transport only; re-run: node deploy.cjs <vertical> [<vertical> …]';
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
console.log(JSON.stringify(deployed));
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// Pin the skill location + project facts into /app/AGENTS.md so later turns (after the platform
|
|
2
|
+
// build doc leaves context) still know the rules. Idempotent — safe to re-run; writes at most once.
|
|
3
|
+
// Run once by base44.md STEP 1, separately from per-vertical deploys (deploy.cjs), so "copy a
|
|
4
|
+
// vertical's files" and "record the project's ground rules" stay independent concerns.
|
|
5
|
+
// .cjs on purpose — the app is an ESM package ("type":"module"); a .js here would load as ESM and
|
|
6
|
+
// require()/module.exports would throw.
|
|
7
|
+
const { existsSync, readFileSync, appendFileSync } = require('fs');
|
|
8
|
+
|
|
9
|
+
const NOTE = `
|
|
10
|
+
|
|
11
|
+
## This app — a Wix-managed headless frontend (built with the Wix skills)
|
|
12
|
+
|
|
13
|
+
This project is the **frontend for a Wix-managed business** — a REST client that talks directly to a live Wix site over \`WIX_CLIENT_ID\`. The **Wix site is the source of truth** for all content and commerce; build and seed it only through the Wix connector and the skills below. **Do NOT use the Base44 commerce kit (or any Base44 solution kit).**
|
|
14
|
+
|
|
15
|
+
The Wix skills live under \`.agents/skills/\` — on ANY turn, read them from that exact path (ignore stray copies like \`agent/skills/\`).
|
|
16
|
+
|
|
17
|
+
- \`wix-vibe-headless\` — **how the CLIENT is built AND how the site is seeded**: your vertical's UI client + REST scaffolds are already deployed into \`src/\`; one vertical per capability under \`references/<vertical>/\`, each with a \`seed/\` module that creates content over the connector:
|
|
18
|
+
- **storefront** — sell physical or digital products online.
|
|
19
|
+
- **bookings** — let customers book appointments or services with your business.
|
|
20
|
+
- **blog** — publish articles for visitors to read.
|
|
21
|
+
- **cms** — model and serve your own custom, structured content — for anything the other verticals don't cover.
|
|
22
|
+
- **portfolio** — showcase creative work in collections and project pages.
|
|
23
|
+
- **pricing-plans** — sell memberships or subscriptions to your service.
|
|
24
|
+
- **events** — publish events and handle RSVPs or ticket sales.
|
|
25
|
+
- **members** — let visitors create an account and sign in — this is **auth**.
|
|
26
|
+
- **restaurants** — publish a menu, take online orders, and manage table reservations.
|
|
27
|
+
- \`wix-docs\` — **fallback** for **frontend code**, **backend code**, or **runtime / API management operations** alike: search + read the Wix API reference docs.
|
|
28
|
+
`;
|
|
29
|
+
|
|
30
|
+
const amd = '/app/AGENTS.md';
|
|
31
|
+
const cur = existsSync(amd) ? readFileSync(amd, 'utf8') : '';
|
|
32
|
+
const pinned = !cur.includes('Wix-managed headless frontend');
|
|
33
|
+
if (pinned) appendFileSync(amd, NOTE);
|
|
34
|
+
console.log(JSON.stringify({ agentsMdPinned: pinned }));
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Vibe platform handoff prompts
|
|
2
|
+
|
|
3
|
+
One file per AI-builder platform (Base44, Lovable, Bolt, v0, Manus, …). Each file is the
|
|
4
|
+
**handoff prompt** the Wix Headless funnel hands to that platform after it creates the site +
|
|
5
|
+
OAuth app: build the client, then seed/manage the business.
|
|
6
|
+
|
|
7
|
+
`generic.md` is the **platform-agnostic** version and the default/fallback for any platform without
|
|
8
|
+
its own tuned file. It is also a **lens over the skill**: the skill's `SKILL.md` + per-vertical
|
|
9
|
+
`INSTRUCTIONS.md` are written for Base44's stack (Vite + react-router + `.jsx`, files pre-copied into
|
|
10
|
+
`src/`), so `generic.md` tells a non-Base44 agent what the skill's three real assets are (the `rest/`
|
|
11
|
+
client layer, the field-shape/route-pattern data contract, the `seed/` functions), which Base44-isms
|
|
12
|
+
to ignore/translate, and the hard rule to **generate into the existing stack — never convert the
|
|
13
|
+
framework**. `base44.md` is the Base44-specific one (its exec tool, secret store, pre-configured
|
|
14
|
+
connector, `deploy.cjs` copy path, etc.).
|
|
15
|
+
|
|
16
|
+
These are hosted (served at `https://www.wix.com/skills/vibe-headless/platforms/<platform>.md`)
|
|
17
|
+
so the funnel loader can pass a short pointer to the prompt instead of inlining the whole
|
|
18
|
+
script into the launch URL. Inlining tripped the Base44 edge WAF, which scans the POST body
|
|
19
|
+
for command-injection patterns (`curl … | tar`, `require('child_process')`, etc.); a plain
|
|
20
|
+
GET of a hosted file is not scanned that way.
|
|
21
|
+
|
|
22
|
+
**Loader contract:** the funnel sends a short prompt that names the business, passes the Wix
|
|
23
|
+
client id + metasite id, and points here — e.g. "Build a site for my Wix managed business:
|
|
24
|
+
<business>. Then fetch and follow https://www.wix.com/skills/vibe-headless/platforms/base44.md
|
|
25
|
+
exactly." The dynamic bits (business description, client id, metasite id) stay in the loader
|
|
26
|
+
prompt; everything static lives in these files.
|