[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-wix-rp-import-codegen":3,"mdc-hr0za7-key":34,"related-org-wix-rp-import-codegen":1575,"related-repo-wix-rp-import-codegen":1731},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"rp-import-codegen","generate migration code for Wix","Generates migration readers, transforms, and Wix writers from schema and mapping artifacts. Use when producing runnable extract\u002Fimport code under the migration project.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"wix","Wix","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fwix.jpg",[12,14,17,20],{"name":9,"slug":8,"type":13},"tag",{"name":15,"slug":16,"type":13},"Data Engineering","data-engineering",{"name":18,"slug":19,"type":13},"Automation","automation",{"name":21,"slug":22,"type":13},"Migration","migration",23,"https:\u002F\u002Fgithub.com\u002Fwix\u002Fskills","2026-07-01T08:08:05.755188",null,28,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":31},[],"Wix Skills","https:\u002F\u002Fgithub.com\u002Fwix\u002Fskills\u002Ftree\u002FHEAD\u002Freplatform\u002Frp-import-codegen","---\nname: rp-import-codegen\ndescription: >-\n  Generates migration readers, transforms, and Wix writers from schema and mapping\n  artifacts. Use when producing runnable extract\u002Fimport code under the migration project.\n---\n\n# rp-import-codegen\n\nGenerate source readers, transforms, and Wix writers from approved migration artifacts.\n\n## Purpose\n\nThis skill turns the schema, mapping, and setup decisions into implementation files under the active migration project.\n\n## Required inputs\n\n- `migrations\u002F\u003Cproject>\u002Fsource-schema.json`\n- `migrations\u002F\u003Cproject>\u002Fmapping-plan.md`\n- `migrations\u002F\u003Cproject>\u002Fsetup-requirements.md` when setup affects write paths\n\n## Source read contract\n\nGenerating a correct reader requires platform-specific knowledge — auth model,\npagination, rate limits, and REST quirks. That knowledge lives in the matching **source\nadapter** skill, not here, so this skill never names a platform. Resolve the adapter from\nthe `platform` field in `source-schema.json` via the naming convention `rp-source-\u003Cplatform>`\n(e.g. `platform: \"wordpress\"` → `rp-source-wordpress`) and read its \"Read contract\"\nsection. The operational facts should already be recorded in `source-profile.md`; use the\nadapter to fill any gaps rather than guessing. `rp-execute-import` runs the reader you\ngenerate and stays platform-agnostic — so the platform specifics must be baked into this\ngenerated code, not deferred to execution.\n\nAdding a new source platform therefore requires no change to this skill: a new\n`rp-source-\u003Cplatform>` adapter is enough.\n\n## Target write contract\n\nSymmetrically, do **not** re-derive the Wix write surface here. It is identical for\nevery migration and is pre-verified in the **`rp-target-wix`** adapter (sibling skill;\nsee `CONVENTIONS.md`), which ships\n`lib\u002Fwix-writers.js` — verified-once request builders + executors for media import,\nthe Ricos HTML→rich-content converter, Blog categories\u002Ftags\u002Fdraft-posts, Wix Data\nitems, and Members. **Vendor a copy of `rp-target-wix\u002Flib\u002Fwix-writers.js` into the\nproject** (like the source transport) and generate writers that **call its primitives**,\nsupplying only per-project field maps. Never hand-emit Wix endpoints\u002Fbodies inline —\nthat path repeatedly shipped wrong shapes (lowercase Ricos plugin enums, `{tag:{…}}`\ntag bodies, `media.wixMedia.image.id` featured images) that only failed at execution.\n\n**Validate by real call, not by doc example.** MCP doc checks confirm an endpoint\n*exists*; they do not confirm the request *shape works* — public examples have been\nwrong (FR-007). Trust a Wix request shape only once a real call (or\n`rp-target-wix\u002Fscripts\u002Fcontract-test.js` in live mode, run from the `rp-target-wix` skill\ndirectory) has succeeded. Treat the\nadapter's `\u002F\u002F VERIFIED:` shapes as the source of truth over any docs example.\n\nAdding a new source platform requires no change here, and the Wix surface change for\n*all* migrations is a one-place edit in `rp-target-wix` (caught by its contract test),\nnot a per-project regeneration.\n\n## Workflow\n\n1. Read the discovery, mapping, and setup artifacts, plus the source adapter's read\n   contract and the `rp-target-wix` write contract.\n2. Generate source reader code that can enumerate and fetch source entities. If the adapter\n   ships a shared transport module (auth, pagination, throttling, retries), vendor a copy of\n   it into the project (e.g. `migrations\u002F\u003Cproject>\u002Fsrc\u002Flib\u002F`) and import from it instead of\n   re-emitting that plumbing — the reader should hold only per-project orchestration.\n   The reader must extract source records to durable files on disk; it must not require the\n   whole source dataset to live in memory before import begins.\n3. Generate transform code that maps source records into Wix payloads.\n4. Generate writer code that writes to Wix entities or collections — vendor\n   `rp-target-wix\u002Flib\u002Fwix-writers.js` into `src\u002Flib\u002F` and call its primitives; the\n   generated writer holds only per-project field maps + ordering, not Wix API plumbing.\n5. Generate the runnable extraction\u002Fimport entrypoints (see below) — the artifacts\n   `rp-execute-import` actually runs. This is required, not optional.\n6. Generate an execution plan if batching, checkpointing, or retries are needed.\n7. Document any manual code follow-up still required.\n\n## Runnable extraction\u002Fimport entrypoints — the artifacts are the execution path (required)\n\n`rp-execute-import` runs the import by **executing this artifact**, never by the agent\nhand-issuing Wix MCP calls (see that skill's \"Execute the generated scripts — never an\nagentic MCP flow\"). So codegen must emit real, runnable entrypoints:\n\n- **`src\u002Fextract-source.js`** or equivalent reader entrypoint — reads the source APIs and\n  writes durable extracted files under the project. Extraction is a separate step from\n  destination writes, so large migrations can be resumed or re-imported without re-reading\n  the whole source.\n- **`src\u002Frun-import.js`** or equivalent import entrypoint — reads the extracted files,\n  applies transforms, and writes to Wix in dependency order through the vendored\n  `wix-writers` transport (`fetch` + injected credentials, or the Wix SDK). It must:\n  - load project-local config files, then process env, for all expected env-style values\n    (never hardcoded; fail fast if absent — do not fall back to any agent\u002FMCP auth),\n  - consume extracted source files from disk rather than materializing the entire source in\n    memory,\n  - apply idempotent dedupe keyed by source ID, using either a client-controlled source-id\n    field on the target or a durable `sourceId -> targetId` crosswalk for native Wix\n    entities with server-assigned IDs,\n  - honor a `--dry-run`\u002F`--sample` flag for the safe-validation pass.\n- **The dry-run is the same import code path with writes disabled** — not a separate driver.\n  A standalone dry-run that builds request envelopes but never exercises the real\n  `fetch`\u002Fauth\u002Fasync-polling path validates code that won't ship.\n\nExtraction format requirements:\n\n- write extracted data to project-local files, not process memory\n- chunk by entity and page\u002Fbatch so a large source does not become one giant file\n- write a manifest that lets the import step discover which entity files exist and in what\n  order to consume them\n- make the extracted files deterministic enough for resume, replay, and debugging\n\n## Project-local config files\n\nGenerated code should treat `migrations\u002F\u003Cproject>\u002Fconfig\u002F` as the canonical home for all\nvalues that are otherwise expected as environment variables. Use simple `.env` syntax and\nload these files before reading config:\n\n- `config\u002Fwix.env` always exists:\n\n  ```bash\n  WIX_SITE_ID=\n  WIX_AUTH_TOKEN=\n  ```\n\n- `config\u002Fsource.\u003Cplatform>.env` exists after the source platform is known. For WordPress:\n\n  ```bash\n  WP_BASE_URL=\n  WP_USERNAME=\n  WP_APPLICATION_PASSWORD=\n  WP_MEDIA_URL_REWRITE_FROM=\n  WP_MEDIA_URL_REWRITE_TO=\n  WC_CONSUMER_KEY=\n  WC_CONSUMER_SECRET=\n  ```\n\nCodegen rules:\n\n- Generate a small dependency-free config loader in the runnable entrypoint or `src\u002Flib\u002F`.\n- Load `config\u002Fwix.env` and the selected source config before constructing source\u002FWix\n  clients.\n- Real process environment variables may override file values.\n- Blank values in config files must not overwrite non-empty process env values.\n- If a required key is still missing after loading file + env, fail fast with the key\n  name, not a downstream 401.\n- Never log secret values. It is okay to log that a key is present\u002Fmissing.\n- Do not generate debug output that dumps config file contents, environment snapshots, or\n  request headers carrying credentials.\n\n## Localhost media sources\n\nIf the source profile shows `localhost`, `127.0.0.1`, or another private-only source URL,\ngenerated media import code must not assume Wix can fetch those URLs. Wix Media import is\nURL-based (`rp-target-wix` import-from-URL primitive), so live media import needs a public\nURL reachable by Wix servers. This is optional and, as far as we know today, only affects\nmedia import.\n\nCodegen\u002Fruntime should support one of these explicit paths:\n\n- Use a public HTTPS tunnel\u002Fsource URL for live media import. For ngrok on macOS:\n\n  ```bash\n  brew install ngrok\n  ngrok config add-authtoken \"\u003CYOUR_AUTHTOKEN>\"\n  ngrok http 8090\n  export WP_BASE_URL=https:\u002F\u002F\u003Cid>.ngrok-free.app\n  ```\n\n- If the source REST responses still contain local media URLs, generate a configurable\n  rewrite from the local base URL to the public tunnel base URL. For WordPress, use\n  `WP_MEDIA_URL_REWRITE_FROM` and `WP_MEDIA_URL_REWRITE_TO`; when those are blank, it is\n  acceptable to rewrite localhost\u002Fprivate origins to public `WP_BASE_URL`.\n- Or generate\u002Fallow a media-skip\u002Fdefer mode and document that media-dependent references\n  such as hero images, galleries, and downloadable files will be absent until media is\n  imported.\n\nSurface the selected path in `import-plan.md` and the execution plan before any live\nwrite. Do not let a dry-run with localhost media URLs imply live Wix Media import is ready.\n\n## File targets\n\nWrite code under the project-local source tree:\n\n- `migrations\u002F\u003Cproject>\u002Fsrc\u002Freaders\u002F`\n- `migrations\u002F\u003Cproject>\u002Fsrc\u002Ftransforms\u002F`\n- `migrations\u002F\u003Cproject>\u002Fsrc\u002Fwriters\u002F`\n- `migrations\u002F\u003Cproject>\u002Fsrc\u002Flib\u002F` — vendored shared modules (e.g. the source adapter's\n  transport module), copied here so the project runs standalone with no external deps\n- `migrations\u002F\u003Cproject>\u002Fsrc\u002Fextract-source.js` or equivalent reader entrypoint — writes the\n  extracted source files\n- `migrations\u002F\u003Cproject>\u002Fsrc\u002Frun-import.js` — the runnable import entrypoint (required; see\n  \"Runnable extraction\u002Fimport entrypoints\" above). `--dry-run` drives the safe-validation\n  pass through the same import code path.\n- `migrations\u002F\u003Cproject>\u002Fdata\u002Fsource-extract\u002F` — extracted source files and manifest(s)\n- `migrations\u002F\u003Cproject>\u002Fimport-plan.md`\n\n## Verifying Wix APIs\n\n**The primary control is the Target write contract above: call `rp-target-wix`'s\nverified primitives when they exist.** That adapter is where each stable shape is\nverified-once (by a real call) and where a Wix surface change is fixed in one place.\nWhen Wix has a native entity but `rp-target-wix` does not yet have a dedicated writer,\ncodegen must generate a Wix REST call for that native entity via the adapter's generic\ndirect REST helper, log the missing writer, and call the RePlatform notification hook.\nDo **not** route to CMS merely because the writer is missing.\n\n- **Prefer the Wix MCP** (the API-docs\u002Fschema server) to locate the endpoint and\n  request\u002Fresponse shape. If the shape is common enough, add a dedicated primitive to\n  `rp-target-wix\u002Flib\u002Fwix-writers.js`; otherwise generate a project-local native REST call\n  through `sendDirectRest` and mark it `UNVERIFIED`.\n- **If the Wix MCP is expected but missing, treat that as a prerequisite gap first.**\n  Before falling back to docs, first try to ensure the Wix MCP is installed\u002Fconnected in\n  the current runtime. If the environment supports connector\u002Fplugin install flows, use\n  them. Otherwise halt to needs-user with exact install\u002Fconnect instructions for the Wix\n  MCP, then resume codegen after it is available.\n- **Confirm the shape with a real call, not a doc example** — public examples have been\n  wrong (FR-007: lowercase Ricos plugin enums 400). Cover the new primitive in\n  `rp-target-wix\u002Fscripts\u002Fcontract-test.js` so drift stays visible.\n- **Fallback when no Wix MCP is available:** rely on published Wix REST\u002FSDK docs and\n  conservative names only when the user explicitly accepts a provisional path. Mark the\n  generated native call `\u002F\u002F UNVERIFIED:` until a real call confirms it — never ship an\n  unchecked Wix call to a user's live site without surfacing it in the execution plan.\n\n## Runtime policy\n\nVerify each Wix endpoint and field against the Wix MCP at codegen time. The\n`\u002F\u002F UNVERIFIED:` marker is a fallback only for environments where the MCP is genuinely\nunavailable, not a way to ship unchecked calls that fail later on the user's live site.\nAnything unverified must be surfaced explicitly in downstream artifacts before execution.\n\n## Missing writer policy\n\nCMS fallback is for source concepts that do **not** have a suitable native Wix entity, or\nfor native entities explicitly rejected because they cannot preserve fidelity or would\ncause unsafe side effects. CMS is **not** a fallback for a missing writer, and it is not a\nspecial default for coupons just because coupon scoping\u002Frestrictions need mapping.\n\nWhen the mapping targets a native Wix entity and no dedicated `rp-target-wix` writer\nexists:\n\n1. Generate project-local code that calls the native Wix REST endpoint through\n   `sendDirectRest`.\n2. Add a clear log line before the first use of that generated REST path.\n3. Call `notifyMissingWriter({ sourceEntity, wixEntity, method, path, reason })`. The\n   current implementation may be a no-op; the generated code must still call it.\n4. Mark the path `UNVERIFIED` in `import-plan.md` and the execution-plan report until a\n   live\u002Fsandbox call promotes it.\n5. Maintain the same idempotency rules as dedicated writers: crosswalk by source ID and\n   never dedupe by slug.\n\n## Codegen rules\n\n- Keep reader and writer responsibilities separate.\n- Do not generate a read-all-into-memory importer for the general case. The reader extracts\n  to disk first; the importer consumes extracted files from disk.\n- Make transforms deterministic and testable.\n- Preserve **source IDs** for traceability, but do not assume native Wix target IDs can\n  be preserved or client-assigned.\n- For native Wix entities, generate and use a durable crosswalk (`sourceId -> targetId`)\n  whenever the target API does not expose a client-controlled source-id field. Seed it at\n  startup via `queryAllDataItems(ImportCrosswalk)` and write a row per created entity, so\n  re-runs\u002Fcontinues skip done records. **Slug-based dedupe does NOT work** — Wix rewrites\n  slugs (FR-010); never rely on it.\n- The canonical collection name is **`ImportCrosswalk`**. If upstream artifacts still say\n  `MigrationRefs`, normalize them to `ImportCrosswalk` in the generated code and note the\n  normalization in `import-plan.md`.\n- **Attach every related entity, don't just create it.** Creating a tag\u002Fcategory is not the\n  same as linking it. Blog posts attach tags via `tagIds` (GUIDs) and categories via\n  `categoryIds` on the draft-post create — collect the resolved ids and pass them, or the\n  taxonomy exists on the site but `postCount` stays 0 (the FR-012 builder bug).\n- **Taxonomy creates are not idempotent** (FR-011): treat `409 ALREADY_EXISTS` as success\n  AND resolve the existing entity's id (e.g. `listBlogTags`) so it can still be attached —\n  don't drop it.\n- **Rich text is chunked for you.** `convertHtmlToRichContent` transparently splits HTML over\n  the 30k Ricos cap (FR-009) and merges the node arrays; pass full HTML, don't pre-truncate\n  or skip large posts.\n- Include batching, pagination, logging, and retry hooks where relevant.\n- Do not hardcode secrets.\n\n## Output\n\nSummarize which files were generated, which entities they cover, and any remaining implementation gaps.\n",{"data":35,"body":36},{"name":4,"description":6},{"type":37,"children":38},"root",[39,46,52,59,64,70,105,111,180,192,198,275,323,342,348,424,430,447,558,563,586,592,613,776,781,833,839,867,872,1032,1045,1051,1056,1145,1151,1181,1261,1267,1279,1285,1302,1314,1370,1376,1558,1564,1569],{"type":40,"tag":41,"props":42,"children":43},"element","h1",{"id":4},[44],{"type":45,"value":4},"text",{"type":40,"tag":47,"props":48,"children":49},"p",{},[50],{"type":45,"value":51},"Generate source readers, transforms, and Wix writers from approved migration artifacts.",{"type":40,"tag":53,"props":54,"children":56},"h2",{"id":55},"purpose",[57],{"type":45,"value":58},"Purpose",{"type":40,"tag":47,"props":60,"children":61},{},[62],{"type":45,"value":63},"This skill turns the schema, mapping, and setup decisions into implementation files under the active migration project.",{"type":40,"tag":53,"props":65,"children":67},{"id":66},"required-inputs",[68],{"type":45,"value":69},"Required inputs",{"type":40,"tag":71,"props":72,"children":73},"ul",{},[74,85,94],{"type":40,"tag":75,"props":76,"children":77},"li",{},[78],{"type":40,"tag":79,"props":80,"children":82},"code",{"className":81},[],[83],{"type":45,"value":84},"migrations\u002F\u003Cproject>\u002Fsource-schema.json",{"type":40,"tag":75,"props":86,"children":87},{},[88],{"type":40,"tag":79,"props":89,"children":91},{"className":90},[],[92],{"type":45,"value":93},"migrations\u002F\u003Cproject>\u002Fmapping-plan.md",{"type":40,"tag":75,"props":95,"children":96},{},[97,103],{"type":40,"tag":79,"props":98,"children":100},{"className":99},[],[101],{"type":45,"value":102},"migrations\u002F\u003Cproject>\u002Fsetup-requirements.md",{"type":45,"value":104}," when setup affects write paths",{"type":40,"tag":53,"props":106,"children":108},{"id":107},"source-read-contract",[109],{"type":45,"value":110},"Source read contract",{"type":40,"tag":47,"props":112,"children":113},{},[114,116,122,124,130,132,138,140,146,148,154,156,162,164,170,172,178],{"type":45,"value":115},"Generating a correct reader requires platform-specific knowledge — auth model,\npagination, rate limits, and REST quirks. That knowledge lives in the matching ",{"type":40,"tag":117,"props":118,"children":119},"strong",{},[120],{"type":45,"value":121},"source\nadapter",{"type":45,"value":123}," skill, not here, so this skill never names a platform. Resolve the adapter from\nthe ",{"type":40,"tag":79,"props":125,"children":127},{"className":126},[],[128],{"type":45,"value":129},"platform",{"type":45,"value":131}," field in ",{"type":40,"tag":79,"props":133,"children":135},{"className":134},[],[136],{"type":45,"value":137},"source-schema.json",{"type":45,"value":139}," via the naming convention ",{"type":40,"tag":79,"props":141,"children":143},{"className":142},[],[144],{"type":45,"value":145},"rp-source-\u003Cplatform>",{"type":45,"value":147},"\n(e.g. ",{"type":40,"tag":79,"props":149,"children":151},{"className":150},[],[152],{"type":45,"value":153},"platform: \"wordpress\"",{"type":45,"value":155}," → ",{"type":40,"tag":79,"props":157,"children":159},{"className":158},[],[160],{"type":45,"value":161},"rp-source-wordpress",{"type":45,"value":163},") and read its \"Read contract\"\nsection. The operational facts should already be recorded in ",{"type":40,"tag":79,"props":165,"children":167},{"className":166},[],[168],{"type":45,"value":169},"source-profile.md",{"type":45,"value":171},"; use the\nadapter to fill any gaps rather than guessing. ",{"type":40,"tag":79,"props":173,"children":175},{"className":174},[],[176],{"type":45,"value":177},"rp-execute-import",{"type":45,"value":179}," runs the reader you\ngenerate and stays platform-agnostic — so the platform specifics must be baked into this\ngenerated code, not deferred to execution.",{"type":40,"tag":47,"props":181,"children":182},{},[183,185,190],{"type":45,"value":184},"Adding a new source platform therefore requires no change to this skill: a new\n",{"type":40,"tag":79,"props":186,"children":188},{"className":187},[],[189],{"type":45,"value":145},{"type":45,"value":191}," adapter is enough.",{"type":40,"tag":53,"props":193,"children":195},{"id":194},"target-write-contract",[196],{"type":45,"value":197},"Target write contract",{"type":40,"tag":47,"props":199,"children":200},{},[201,203,208,210,219,221,227,229,235,237,250,252,257,259,265,267,273],{"type":45,"value":202},"Symmetrically, do ",{"type":40,"tag":117,"props":204,"children":205},{},[206],{"type":45,"value":207},"not",{"type":45,"value":209}," re-derive the Wix write surface here. It is identical for\nevery migration and is pre-verified in the ",{"type":40,"tag":117,"props":211,"children":212},{},[213],{"type":40,"tag":79,"props":214,"children":216},{"className":215},[],[217],{"type":45,"value":218},"rp-target-wix",{"type":45,"value":220}," adapter (sibling skill;\nsee ",{"type":40,"tag":79,"props":222,"children":224},{"className":223},[],[225],{"type":45,"value":226},"CONVENTIONS.md",{"type":45,"value":228},"), which ships\n",{"type":40,"tag":79,"props":230,"children":232},{"className":231},[],[233],{"type":45,"value":234},"lib\u002Fwix-writers.js",{"type":45,"value":236}," — verified-once request builders + executors for media import,\nthe Ricos HTML→rich-content converter, Blog categories\u002Ftags\u002Fdraft-posts, Wix Data\nitems, and Members. ",{"type":40,"tag":117,"props":238,"children":239},{},[240,242,248],{"type":45,"value":241},"Vendor a copy of ",{"type":40,"tag":79,"props":243,"children":245},{"className":244},[],[246],{"type":45,"value":247},"rp-target-wix\u002Flib\u002Fwix-writers.js",{"type":45,"value":249}," into the\nproject",{"type":45,"value":251}," (like the source transport) and generate writers that ",{"type":40,"tag":117,"props":253,"children":254},{},[255],{"type":45,"value":256},"call its primitives",{"type":45,"value":258},",\nsupplying only per-project field maps. Never hand-emit Wix endpoints\u002Fbodies inline —\nthat path repeatedly shipped wrong shapes (lowercase Ricos plugin enums, ",{"type":40,"tag":79,"props":260,"children":262},{"className":261},[],[263],{"type":45,"value":264},"{tag:{…}}",{"type":45,"value":266},"\ntag bodies, ",{"type":40,"tag":79,"props":268,"children":270},{"className":269},[],[271],{"type":45,"value":272},"media.wixMedia.image.id",{"type":45,"value":274}," featured images) that only failed at execution.",{"type":40,"tag":47,"props":276,"children":277},{},[278,283,285,291,293,298,300,306,308,313,315,321],{"type":40,"tag":117,"props":279,"children":280},{},[281],{"type":45,"value":282},"Validate by real call, not by doc example.",{"type":45,"value":284}," MCP doc checks confirm an endpoint\n",{"type":40,"tag":286,"props":287,"children":288},"em",{},[289],{"type":45,"value":290},"exists",{"type":45,"value":292},"; they do not confirm the request ",{"type":40,"tag":286,"props":294,"children":295},{},[296],{"type":45,"value":297},"shape works",{"type":45,"value":299}," — public examples have been\nwrong (FR-007). Trust a Wix request shape only once a real call (or\n",{"type":40,"tag":79,"props":301,"children":303},{"className":302},[],[304],{"type":45,"value":305},"rp-target-wix\u002Fscripts\u002Fcontract-test.js",{"type":45,"value":307}," in live mode, run from the ",{"type":40,"tag":79,"props":309,"children":311},{"className":310},[],[312],{"type":45,"value":218},{"type":45,"value":314}," skill\ndirectory) has succeeded. Treat the\nadapter's ",{"type":40,"tag":79,"props":316,"children":318},{"className":317},[],[319],{"type":45,"value":320},"\u002F\u002F VERIFIED:",{"type":45,"value":322}," shapes as the source of truth over any docs example.",{"type":40,"tag":47,"props":324,"children":325},{},[326,328,333,335,340],{"type":45,"value":327},"Adding a new source platform requires no change here, and the Wix surface change for\n",{"type":40,"tag":286,"props":329,"children":330},{},[331],{"type":45,"value":332},"all",{"type":45,"value":334}," migrations is a one-place edit in ",{"type":40,"tag":79,"props":336,"children":338},{"className":337},[],[339],{"type":45,"value":218},{"type":45,"value":341}," (caught by its contract test),\nnot a per-project regeneration.",{"type":40,"tag":53,"props":343,"children":345},{"id":344},"workflow",[346],{"type":45,"value":347},"Workflow",{"type":40,"tag":349,"props":350,"children":351},"ol",{},[352,364,377,382,402,414,419],{"type":40,"tag":75,"props":353,"children":354},{},[355,357,362],{"type":45,"value":356},"Read the discovery, mapping, and setup artifacts, plus the source adapter's read\ncontract and the ",{"type":40,"tag":79,"props":358,"children":360},{"className":359},[],[361],{"type":45,"value":218},{"type":45,"value":363}," write contract.",{"type":40,"tag":75,"props":365,"children":366},{},[367,369,375],{"type":45,"value":368},"Generate source reader code that can enumerate and fetch source entities. If the adapter\nships a shared transport module (auth, pagination, throttling, retries), vendor a copy of\nit into the project (e.g. ",{"type":40,"tag":79,"props":370,"children":372},{"className":371},[],[373],{"type":45,"value":374},"migrations\u002F\u003Cproject>\u002Fsrc\u002Flib\u002F",{"type":45,"value":376},") and import from it instead of\nre-emitting that plumbing — the reader should hold only per-project orchestration.\nThe reader must extract source records to durable files on disk; it must not require the\nwhole source dataset to live in memory before import begins.",{"type":40,"tag":75,"props":378,"children":379},{},[380],{"type":45,"value":381},"Generate transform code that maps source records into Wix payloads.",{"type":40,"tag":75,"props":383,"children":384},{},[385,387,392,394,400],{"type":45,"value":386},"Generate writer code that writes to Wix entities or collections — vendor\n",{"type":40,"tag":79,"props":388,"children":390},{"className":389},[],[391],{"type":45,"value":247},{"type":45,"value":393}," into ",{"type":40,"tag":79,"props":395,"children":397},{"className":396},[],[398],{"type":45,"value":399},"src\u002Flib\u002F",{"type":45,"value":401}," and call its primitives; the\ngenerated writer holds only per-project field maps + ordering, not Wix API plumbing.",{"type":40,"tag":75,"props":403,"children":404},{},[405,407,412],{"type":45,"value":406},"Generate the runnable extraction\u002Fimport entrypoints (see below) — the artifacts\n",{"type":40,"tag":79,"props":408,"children":410},{"className":409},[],[411],{"type":45,"value":177},{"type":45,"value":413}," actually runs. This is required, not optional.",{"type":40,"tag":75,"props":415,"children":416},{},[417],{"type":45,"value":418},"Generate an execution plan if batching, checkpointing, or retries are needed.",{"type":40,"tag":75,"props":420,"children":421},{},[422],{"type":45,"value":423},"Document any manual code follow-up still required.",{"type":40,"tag":53,"props":425,"children":427},{"id":426},"runnable-extractionimport-entrypoints-the-artifacts-are-the-execution-path-required",[428],{"type":45,"value":429},"Runnable extraction\u002Fimport entrypoints — the artifacts are the execution path (required)",{"type":40,"tag":47,"props":431,"children":432},{},[433,438,440,445],{"type":40,"tag":79,"props":434,"children":436},{"className":435},[],[437],{"type":45,"value":177},{"type":45,"value":439}," runs the import by ",{"type":40,"tag":117,"props":441,"children":442},{},[443],{"type":45,"value":444},"executing this artifact",{"type":45,"value":446},", never by the agent\nhand-issuing Wix MCP calls (see that skill's \"Execute the generated scripts — never an\nagentic MCP flow\"). So codegen must emit real, runnable entrypoints:",{"type":40,"tag":71,"props":448,"children":449},{},[450,464,541],{"type":40,"tag":75,"props":451,"children":452},{},[453,462],{"type":40,"tag":117,"props":454,"children":455},{},[456],{"type":40,"tag":79,"props":457,"children":459},{"className":458},[],[460],{"type":45,"value":461},"src\u002Fextract-source.js",{"type":45,"value":463}," or equivalent reader entrypoint — reads the source APIs and\nwrites durable extracted files under the project. Extraction is a separate step from\ndestination writes, so large migrations can be resumed or re-imported without re-reading\nthe whole source.",{"type":40,"tag":75,"props":465,"children":466},{},[467,476,478,484,486,492,494],{"type":40,"tag":117,"props":468,"children":469},{},[470],{"type":40,"tag":79,"props":471,"children":473},{"className":472},[],[474],{"type":45,"value":475},"src\u002Frun-import.js",{"type":45,"value":477}," or equivalent import entrypoint — reads the extracted files,\napplies transforms, and writes to Wix in dependency order through the vendored\n",{"type":40,"tag":79,"props":479,"children":481},{"className":480},[],[482],{"type":45,"value":483},"wix-writers",{"type":45,"value":485}," transport (",{"type":40,"tag":79,"props":487,"children":489},{"className":488},[],[490],{"type":45,"value":491},"fetch",{"type":45,"value":493}," + injected credentials, or the Wix SDK). It must:\n",{"type":40,"tag":71,"props":495,"children":496},{},[497,502,507,520],{"type":40,"tag":75,"props":498,"children":499},{},[500],{"type":45,"value":501},"load project-local config files, then process env, for all expected env-style values\n(never hardcoded; fail fast if absent — do not fall back to any agent\u002FMCP auth),",{"type":40,"tag":75,"props":503,"children":504},{},[505],{"type":45,"value":506},"consume extracted source files from disk rather than materializing the entire source in\nmemory,",{"type":40,"tag":75,"props":508,"children":509},{},[510,512,518],{"type":45,"value":511},"apply idempotent dedupe keyed by source ID, using either a client-controlled source-id\nfield on the target or a durable ",{"type":40,"tag":79,"props":513,"children":515},{"className":514},[],[516],{"type":45,"value":517},"sourceId -> targetId",{"type":45,"value":519}," crosswalk for native Wix\nentities with server-assigned IDs,",{"type":40,"tag":75,"props":521,"children":522},{},[523,525,531,533,539],{"type":45,"value":524},"honor a ",{"type":40,"tag":79,"props":526,"children":528},{"className":527},[],[529],{"type":45,"value":530},"--dry-run",{"type":45,"value":532},"\u002F",{"type":40,"tag":79,"props":534,"children":536},{"className":535},[],[537],{"type":45,"value":538},"--sample",{"type":45,"value":540}," flag for the safe-validation pass.",{"type":40,"tag":75,"props":542,"children":543},{},[544,549,551,556],{"type":40,"tag":117,"props":545,"children":546},{},[547],{"type":45,"value":548},"The dry-run is the same import code path with writes disabled",{"type":45,"value":550}," — not a separate driver.\nA standalone dry-run that builds request envelopes but never exercises the real\n",{"type":40,"tag":79,"props":552,"children":554},{"className":553},[],[555],{"type":45,"value":491},{"type":45,"value":557},"\u002Fauth\u002Fasync-polling path validates code that won't ship.",{"type":40,"tag":47,"props":559,"children":560},{},[561],{"type":45,"value":562},"Extraction format requirements:",{"type":40,"tag":71,"props":564,"children":565},{},[566,571,576,581],{"type":40,"tag":75,"props":567,"children":568},{},[569],{"type":45,"value":570},"write extracted data to project-local files, not process memory",{"type":40,"tag":75,"props":572,"children":573},{},[574],{"type":45,"value":575},"chunk by entity and page\u002Fbatch so a large source does not become one giant file",{"type":40,"tag":75,"props":577,"children":578},{},[579],{"type":45,"value":580},"write a manifest that lets the import step discover which entity files exist and in what\norder to consume them",{"type":40,"tag":75,"props":582,"children":583},{},[584],{"type":45,"value":585},"make the extracted files deterministic enough for resume, replay, and debugging",{"type":40,"tag":53,"props":587,"children":589},{"id":588},"project-local-config-files",[590],{"type":45,"value":591},"Project-local config files",{"type":40,"tag":47,"props":593,"children":594},{},[595,597,603,605,611],{"type":45,"value":596},"Generated code should treat ",{"type":40,"tag":79,"props":598,"children":600},{"className":599},[],[601],{"type":45,"value":602},"migrations\u002F\u003Cproject>\u002Fconfig\u002F",{"type":45,"value":604}," as the canonical home for all\nvalues that are otherwise expected as environment variables. Use simple ",{"type":40,"tag":79,"props":606,"children":608},{"className":607},[],[609],{"type":45,"value":610},".env",{"type":45,"value":612}," syntax and\nload these files before reading config:",{"type":40,"tag":71,"props":614,"children":615},{},[616,669],{"type":40,"tag":75,"props":617,"children":618},{},[619,625,627],{"type":40,"tag":79,"props":620,"children":622},{"className":621},[],[623],{"type":45,"value":624},"config\u002Fwix.env",{"type":45,"value":626}," always exists:",{"type":40,"tag":628,"props":629,"children":634},"pre",{"className":630,"code":631,"language":632,"meta":633,"style":633},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","WIX_SITE_ID=\nWIX_AUTH_TOKEN=\n","bash","",[635],{"type":40,"tag":79,"props":636,"children":637},{"__ignoreMap":633},[638,656],{"type":40,"tag":639,"props":640,"children":643},"span",{"class":641,"line":642},"line",1,[644,650],{"type":40,"tag":639,"props":645,"children":647},{"style":646},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[648],{"type":45,"value":649},"WIX_SITE_ID",{"type":40,"tag":639,"props":651,"children":653},{"style":652},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[654],{"type":45,"value":655},"=\n",{"type":40,"tag":639,"props":657,"children":659},{"class":641,"line":658},2,[660,665],{"type":40,"tag":639,"props":661,"children":662},{"style":646},[663],{"type":45,"value":664},"WIX_AUTH_TOKEN",{"type":40,"tag":639,"props":666,"children":667},{"style":652},[668],{"type":45,"value":655},{"type":40,"tag":75,"props":670,"children":671},{},[672,678,680],{"type":40,"tag":79,"props":673,"children":675},{"className":674},[],[676],{"type":45,"value":677},"config\u002Fsource.\u003Cplatform>.env",{"type":45,"value":679}," exists after the source platform is known. For WordPress:",{"type":40,"tag":628,"props":681,"children":683},{"className":630,"code":682,"language":632,"meta":633,"style":633},"WP_BASE_URL=\nWP_USERNAME=\nWP_APPLICATION_PASSWORD=\nWP_MEDIA_URL_REWRITE_FROM=\nWP_MEDIA_URL_REWRITE_TO=\nWC_CONSUMER_KEY=\nWC_CONSUMER_SECRET=\n",[684],{"type":40,"tag":79,"props":685,"children":686},{"__ignoreMap":633},[687,699,711,724,737,750,763],{"type":40,"tag":639,"props":688,"children":689},{"class":641,"line":642},[690,695],{"type":40,"tag":639,"props":691,"children":692},{"style":646},[693],{"type":45,"value":694},"WP_BASE_URL",{"type":40,"tag":639,"props":696,"children":697},{"style":652},[698],{"type":45,"value":655},{"type":40,"tag":639,"props":700,"children":701},{"class":641,"line":658},[702,707],{"type":40,"tag":639,"props":703,"children":704},{"style":646},[705],{"type":45,"value":706},"WP_USERNAME",{"type":40,"tag":639,"props":708,"children":709},{"style":652},[710],{"type":45,"value":655},{"type":40,"tag":639,"props":712,"children":714},{"class":641,"line":713},3,[715,720],{"type":40,"tag":639,"props":716,"children":717},{"style":646},[718],{"type":45,"value":719},"WP_APPLICATION_PASSWORD",{"type":40,"tag":639,"props":721,"children":722},{"style":652},[723],{"type":45,"value":655},{"type":40,"tag":639,"props":725,"children":727},{"class":641,"line":726},4,[728,733],{"type":40,"tag":639,"props":729,"children":730},{"style":646},[731],{"type":45,"value":732},"WP_MEDIA_URL_REWRITE_FROM",{"type":40,"tag":639,"props":734,"children":735},{"style":652},[736],{"type":45,"value":655},{"type":40,"tag":639,"props":738,"children":740},{"class":641,"line":739},5,[741,746],{"type":40,"tag":639,"props":742,"children":743},{"style":646},[744],{"type":45,"value":745},"WP_MEDIA_URL_REWRITE_TO",{"type":40,"tag":639,"props":747,"children":748},{"style":652},[749],{"type":45,"value":655},{"type":40,"tag":639,"props":751,"children":753},{"class":641,"line":752},6,[754,759],{"type":40,"tag":639,"props":755,"children":756},{"style":646},[757],{"type":45,"value":758},"WC_CONSUMER_KEY",{"type":40,"tag":639,"props":760,"children":761},{"style":652},[762],{"type":45,"value":655},{"type":40,"tag":639,"props":764,"children":766},{"class":641,"line":765},7,[767,772],{"type":40,"tag":639,"props":768,"children":769},{"style":646},[770],{"type":45,"value":771},"WC_CONSUMER_SECRET",{"type":40,"tag":639,"props":773,"children":774},{"style":652},[775],{"type":45,"value":655},{"type":40,"tag":47,"props":777,"children":778},{},[779],{"type":45,"value":780},"Codegen rules:",{"type":40,"tag":71,"props":782,"children":783},{},[784,796,808,813,818,823,828],{"type":40,"tag":75,"props":785,"children":786},{},[787,789,794],{"type":45,"value":788},"Generate a small dependency-free config loader in the runnable entrypoint or ",{"type":40,"tag":79,"props":790,"children":792},{"className":791},[],[793],{"type":45,"value":399},{"type":45,"value":795},".",{"type":40,"tag":75,"props":797,"children":798},{},[799,801,806],{"type":45,"value":800},"Load ",{"type":40,"tag":79,"props":802,"children":804},{"className":803},[],[805],{"type":45,"value":624},{"type":45,"value":807}," and the selected source config before constructing source\u002FWix\nclients.",{"type":40,"tag":75,"props":809,"children":810},{},[811],{"type":45,"value":812},"Real process environment variables may override file values.",{"type":40,"tag":75,"props":814,"children":815},{},[816],{"type":45,"value":817},"Blank values in config files must not overwrite non-empty process env values.",{"type":40,"tag":75,"props":819,"children":820},{},[821],{"type":45,"value":822},"If a required key is still missing after loading file + env, fail fast with the key\nname, not a downstream 401.",{"type":40,"tag":75,"props":824,"children":825},{},[826],{"type":45,"value":827},"Never log secret values. It is okay to log that a key is present\u002Fmissing.",{"type":40,"tag":75,"props":829,"children":830},{},[831],{"type":45,"value":832},"Do not generate debug output that dumps config file contents, environment snapshots, or\nrequest headers carrying credentials.",{"type":40,"tag":53,"props":834,"children":836},{"id":835},"localhost-media-sources",[837],{"type":45,"value":838},"Localhost media sources",{"type":40,"tag":47,"props":840,"children":841},{},[842,844,850,852,858,860,865],{"type":45,"value":843},"If the source profile shows ",{"type":40,"tag":79,"props":845,"children":847},{"className":846},[],[848],{"type":45,"value":849},"localhost",{"type":45,"value":851},", ",{"type":40,"tag":79,"props":853,"children":855},{"className":854},[],[856],{"type":45,"value":857},"127.0.0.1",{"type":45,"value":859},", or another private-only source URL,\ngenerated media import code must not assume Wix can fetch those URLs. Wix Media import is\nURL-based (",{"type":40,"tag":79,"props":861,"children":863},{"className":862},[],[864],{"type":45,"value":218},{"type":45,"value":866}," import-from-URL primitive), so live media import needs a public\nURL reachable by Wix servers. This is optional and, as far as we know today, only affects\nmedia import.",{"type":40,"tag":47,"props":868,"children":869},{},[870],{"type":45,"value":871},"Codegen\u002Fruntime should support one of these explicit paths:",{"type":40,"tag":71,"props":873,"children":874},{},[875,1002,1027],{"type":40,"tag":75,"props":876,"children":877},{},[878,880],{"type":45,"value":879},"Use a public HTTPS tunnel\u002Fsource URL for live media import. For ngrok on macOS:",{"type":40,"tag":628,"props":881,"children":883},{"className":630,"code":882,"language":632,"meta":633,"style":633},"brew install ngrok\nngrok config add-authtoken \"\u003CYOUR_AUTHTOKEN>\"\nngrok http 8090\nexport WP_BASE_URL=https:\u002F\u002F\u003Cid>.ngrok-free.app\n",[884],{"type":40,"tag":79,"props":885,"children":886},{"__ignoreMap":633},[887,907,940,958],{"type":40,"tag":639,"props":888,"children":889},{"class":641,"line":642},[890,896,902],{"type":40,"tag":639,"props":891,"children":893},{"style":892},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[894],{"type":45,"value":895},"brew",{"type":40,"tag":639,"props":897,"children":899},{"style":898},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[900],{"type":45,"value":901}," install",{"type":40,"tag":639,"props":903,"children":904},{"style":898},[905],{"type":45,"value":906}," ngrok\n",{"type":40,"tag":639,"props":908,"children":909},{"class":641,"line":658},[910,915,920,925,930,935],{"type":40,"tag":639,"props":911,"children":912},{"style":892},[913],{"type":45,"value":914},"ngrok",{"type":40,"tag":639,"props":916,"children":917},{"style":898},[918],{"type":45,"value":919}," config",{"type":40,"tag":639,"props":921,"children":922},{"style":898},[923],{"type":45,"value":924}," add-authtoken",{"type":40,"tag":639,"props":926,"children":927},{"style":652},[928],{"type":45,"value":929}," \"",{"type":40,"tag":639,"props":931,"children":932},{"style":898},[933],{"type":45,"value":934},"\u003CYOUR_AUTHTOKEN>",{"type":40,"tag":639,"props":936,"children":937},{"style":652},[938],{"type":45,"value":939},"\"\n",{"type":40,"tag":639,"props":941,"children":942},{"class":641,"line":713},[943,947,952],{"type":40,"tag":639,"props":944,"children":945},{"style":892},[946],{"type":45,"value":914},{"type":40,"tag":639,"props":948,"children":949},{"style":898},[950],{"type":45,"value":951}," http",{"type":40,"tag":639,"props":953,"children":955},{"style":954},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[956],{"type":45,"value":957}," 8090\n",{"type":40,"tag":639,"props":959,"children":960},{"class":641,"line":726},[961,967,972,977,982,987,992,997],{"type":40,"tag":639,"props":962,"children":964},{"style":963},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[965],{"type":45,"value":966},"export",{"type":40,"tag":639,"props":968,"children":969},{"style":646},[970],{"type":45,"value":971}," WP_BASE_URL",{"type":40,"tag":639,"props":973,"children":974},{"style":652},[975],{"type":45,"value":976},"=",{"type":40,"tag":639,"props":978,"children":979},{"style":646},[980],{"type":45,"value":981},"https:\u002F\u002F",{"type":40,"tag":639,"props":983,"children":984},{"style":652},[985],{"type":45,"value":986},"\u003C",{"type":40,"tag":639,"props":988,"children":989},{"style":646},[990],{"type":45,"value":991},"id",{"type":40,"tag":639,"props":993,"children":994},{"style":652},[995],{"type":45,"value":996},">",{"type":40,"tag":639,"props":998,"children":999},{"style":646},[1000],{"type":45,"value":1001},".ngrok-free.app\n",{"type":40,"tag":75,"props":1003,"children":1004},{},[1005,1007,1012,1014,1019,1021,1026],{"type":45,"value":1006},"If the source REST responses still contain local media URLs, generate a configurable\nrewrite from the local base URL to the public tunnel base URL. For WordPress, use\n",{"type":40,"tag":79,"props":1008,"children":1010},{"className":1009},[],[1011],{"type":45,"value":732},{"type":45,"value":1013}," and ",{"type":40,"tag":79,"props":1015,"children":1017},{"className":1016},[],[1018],{"type":45,"value":745},{"type":45,"value":1020},"; when those are blank, it is\nacceptable to rewrite localhost\u002Fprivate origins to public ",{"type":40,"tag":79,"props":1022,"children":1024},{"className":1023},[],[1025],{"type":45,"value":694},{"type":45,"value":795},{"type":40,"tag":75,"props":1028,"children":1029},{},[1030],{"type":45,"value":1031},"Or generate\u002Fallow a media-skip\u002Fdefer mode and document that media-dependent references\nsuch as hero images, galleries, and downloadable files will be absent until media is\nimported.",{"type":40,"tag":47,"props":1033,"children":1034},{},[1035,1037,1043],{"type":45,"value":1036},"Surface the selected path in ",{"type":40,"tag":79,"props":1038,"children":1040},{"className":1039},[],[1041],{"type":45,"value":1042},"import-plan.md",{"type":45,"value":1044}," and the execution plan before any live\nwrite. Do not let a dry-run with localhost media URLs imply live Wix Media import is ready.",{"type":40,"tag":53,"props":1046,"children":1048},{"id":1047},"file-targets",[1049],{"type":45,"value":1050},"File targets",{"type":40,"tag":47,"props":1052,"children":1053},{},[1054],{"type":45,"value":1055},"Write code under the project-local source tree:",{"type":40,"tag":71,"props":1057,"children":1058},{},[1059,1068,1077,1086,1096,1107,1125,1136],{"type":40,"tag":75,"props":1060,"children":1061},{},[1062],{"type":40,"tag":79,"props":1063,"children":1065},{"className":1064},[],[1066],{"type":45,"value":1067},"migrations\u002F\u003Cproject>\u002Fsrc\u002Freaders\u002F",{"type":40,"tag":75,"props":1069,"children":1070},{},[1071],{"type":40,"tag":79,"props":1072,"children":1074},{"className":1073},[],[1075],{"type":45,"value":1076},"migrations\u002F\u003Cproject>\u002Fsrc\u002Ftransforms\u002F",{"type":40,"tag":75,"props":1078,"children":1079},{},[1080],{"type":40,"tag":79,"props":1081,"children":1083},{"className":1082},[],[1084],{"type":45,"value":1085},"migrations\u002F\u003Cproject>\u002Fsrc\u002Fwriters\u002F",{"type":40,"tag":75,"props":1087,"children":1088},{},[1089,1094],{"type":40,"tag":79,"props":1090,"children":1092},{"className":1091},[],[1093],{"type":45,"value":374},{"type":45,"value":1095}," — vendored shared modules (e.g. the source adapter's\ntransport module), copied here so the project runs standalone with no external deps",{"type":40,"tag":75,"props":1097,"children":1098},{},[1099,1105],{"type":40,"tag":79,"props":1100,"children":1102},{"className":1101},[],[1103],{"type":45,"value":1104},"migrations\u002F\u003Cproject>\u002Fsrc\u002Fextract-source.js",{"type":45,"value":1106}," or equivalent reader entrypoint — writes the\nextracted source files",{"type":40,"tag":75,"props":1108,"children":1109},{},[1110,1116,1118,1123],{"type":40,"tag":79,"props":1111,"children":1113},{"className":1112},[],[1114],{"type":45,"value":1115},"migrations\u002F\u003Cproject>\u002Fsrc\u002Frun-import.js",{"type":45,"value":1117}," — the runnable import entrypoint (required; see\n\"Runnable extraction\u002Fimport entrypoints\" above). ",{"type":40,"tag":79,"props":1119,"children":1121},{"className":1120},[],[1122],{"type":45,"value":530},{"type":45,"value":1124}," drives the safe-validation\npass through the same import code path.",{"type":40,"tag":75,"props":1126,"children":1127},{},[1128,1134],{"type":40,"tag":79,"props":1129,"children":1131},{"className":1130},[],[1132],{"type":45,"value":1133},"migrations\u002F\u003Cproject>\u002Fdata\u002Fsource-extract\u002F",{"type":45,"value":1135}," — extracted source files and manifest(s)",{"type":40,"tag":75,"props":1137,"children":1138},{},[1139],{"type":40,"tag":79,"props":1140,"children":1142},{"className":1141},[],[1143],{"type":45,"value":1144},"migrations\u002F\u003Cproject>\u002Fimport-plan.md",{"type":40,"tag":53,"props":1146,"children":1148},{"id":1147},"verifying-wix-apis",[1149],{"type":45,"value":1150},"Verifying Wix APIs",{"type":40,"tag":47,"props":1152,"children":1153},{},[1154,1166,1168,1173,1175,1179],{"type":40,"tag":117,"props":1155,"children":1156},{},[1157,1159,1164],{"type":45,"value":1158},"The primary control is the Target write contract above: call ",{"type":40,"tag":79,"props":1160,"children":1162},{"className":1161},[],[1163],{"type":45,"value":218},{"type":45,"value":1165},"'s\nverified primitives when they exist.",{"type":45,"value":1167}," That adapter is where each stable shape is\nverified-once (by a real call) and where a Wix surface change is fixed in one place.\nWhen Wix has a native entity but ",{"type":40,"tag":79,"props":1169,"children":1171},{"className":1170},[],[1172],{"type":45,"value":218},{"type":45,"value":1174}," does not yet have a dedicated writer,\ncodegen must generate a Wix REST call for that native entity via the adapter's generic\ndirect REST helper, log the missing writer, and call the RePlatform notification hook.\nDo ",{"type":40,"tag":117,"props":1176,"children":1177},{},[1178],{"type":45,"value":207},{"type":45,"value":1180}," route to CMS merely because the writer is missing.",{"type":40,"tag":71,"props":1182,"children":1183},{},[1184,1216,1226,1243],{"type":40,"tag":75,"props":1185,"children":1186},{},[1187,1192,1194,1199,1201,1207,1209,1215],{"type":40,"tag":117,"props":1188,"children":1189},{},[1190],{"type":45,"value":1191},"Prefer the Wix MCP",{"type":45,"value":1193}," (the API-docs\u002Fschema server) to locate the endpoint and\nrequest\u002Fresponse shape. If the shape is common enough, add a dedicated primitive to\n",{"type":40,"tag":79,"props":1195,"children":1197},{"className":1196},[],[1198],{"type":45,"value":247},{"type":45,"value":1200},"; otherwise generate a project-local native REST call\nthrough ",{"type":40,"tag":79,"props":1202,"children":1204},{"className":1203},[],[1205],{"type":45,"value":1206},"sendDirectRest",{"type":45,"value":1208}," and mark it ",{"type":40,"tag":79,"props":1210,"children":1212},{"className":1211},[],[1213],{"type":45,"value":1214},"UNVERIFIED",{"type":45,"value":795},{"type":40,"tag":75,"props":1217,"children":1218},{},[1219,1224],{"type":40,"tag":117,"props":1220,"children":1221},{},[1222],{"type":45,"value":1223},"If the Wix MCP is expected but missing, treat that as a prerequisite gap first.",{"type":45,"value":1225},"\nBefore falling back to docs, first try to ensure the Wix MCP is installed\u002Fconnected in\nthe current runtime. If the environment supports connector\u002Fplugin install flows, use\nthem. Otherwise halt to needs-user with exact install\u002Fconnect instructions for the Wix\nMCP, then resume codegen after it is available.",{"type":40,"tag":75,"props":1227,"children":1228},{},[1229,1234,1236,1241],{"type":40,"tag":117,"props":1230,"children":1231},{},[1232],{"type":45,"value":1233},"Confirm the shape with a real call, not a doc example",{"type":45,"value":1235}," — public examples have been\nwrong (FR-007: lowercase Ricos plugin enums 400). Cover the new primitive in\n",{"type":40,"tag":79,"props":1237,"children":1239},{"className":1238},[],[1240],{"type":45,"value":305},{"type":45,"value":1242}," so drift stays visible.",{"type":40,"tag":75,"props":1244,"children":1245},{},[1246,1251,1253,1259],{"type":40,"tag":117,"props":1247,"children":1248},{},[1249],{"type":45,"value":1250},"Fallback when no Wix MCP is available:",{"type":45,"value":1252}," rely on published Wix REST\u002FSDK docs and\nconservative names only when the user explicitly accepts a provisional path. Mark the\ngenerated native call ",{"type":40,"tag":79,"props":1254,"children":1256},{"className":1255},[],[1257],{"type":45,"value":1258},"\u002F\u002F UNVERIFIED:",{"type":45,"value":1260}," until a real call confirms it — never ship an\nunchecked Wix call to a user's live site without surfacing it in the execution plan.",{"type":40,"tag":53,"props":1262,"children":1264},{"id":1263},"runtime-policy",[1265],{"type":45,"value":1266},"Runtime policy",{"type":40,"tag":47,"props":1268,"children":1269},{},[1270,1272,1277],{"type":45,"value":1271},"Verify each Wix endpoint and field against the Wix MCP at codegen time. The\n",{"type":40,"tag":79,"props":1273,"children":1275},{"className":1274},[],[1276],{"type":45,"value":1258},{"type":45,"value":1278}," marker is a fallback only for environments where the MCP is genuinely\nunavailable, not a way to ship unchecked calls that fail later on the user's live site.\nAnything unverified must be surfaced explicitly in downstream artifacts before execution.",{"type":40,"tag":53,"props":1280,"children":1282},{"id":1281},"missing-writer-policy",[1283],{"type":45,"value":1284},"Missing writer policy",{"type":40,"tag":47,"props":1286,"children":1287},{},[1288,1290,1294,1296,1300],{"type":45,"value":1289},"CMS fallback is for source concepts that do ",{"type":40,"tag":117,"props":1291,"children":1292},{},[1293],{"type":45,"value":207},{"type":45,"value":1295}," have a suitable native Wix entity, or\nfor native entities explicitly rejected because they cannot preserve fidelity or would\ncause unsafe side effects. CMS is ",{"type":40,"tag":117,"props":1297,"children":1298},{},[1299],{"type":45,"value":207},{"type":45,"value":1301}," a fallback for a missing writer, and it is not a\nspecial default for coupons just because coupon scoping\u002Frestrictions need mapping.",{"type":40,"tag":47,"props":1303,"children":1304},{},[1305,1307,1312],{"type":45,"value":1306},"When the mapping targets a native Wix entity and no dedicated ",{"type":40,"tag":79,"props":1308,"children":1310},{"className":1309},[],[1311],{"type":45,"value":218},{"type":45,"value":1313}," writer\nexists:",{"type":40,"tag":349,"props":1315,"children":1316},{},[1317,1328,1333,1346,1365],{"type":40,"tag":75,"props":1318,"children":1319},{},[1320,1322,1327],{"type":45,"value":1321},"Generate project-local code that calls the native Wix REST endpoint through\n",{"type":40,"tag":79,"props":1323,"children":1325},{"className":1324},[],[1326],{"type":45,"value":1206},{"type":45,"value":795},{"type":40,"tag":75,"props":1329,"children":1330},{},[1331],{"type":45,"value":1332},"Add a clear log line before the first use of that generated REST path.",{"type":40,"tag":75,"props":1334,"children":1335},{},[1336,1338,1344],{"type":45,"value":1337},"Call ",{"type":40,"tag":79,"props":1339,"children":1341},{"className":1340},[],[1342],{"type":45,"value":1343},"notifyMissingWriter({ sourceEntity, wixEntity, method, path, reason })",{"type":45,"value":1345},". The\ncurrent implementation may be a no-op; the generated code must still call it.",{"type":40,"tag":75,"props":1347,"children":1348},{},[1349,1351,1356,1358,1363],{"type":45,"value":1350},"Mark the path ",{"type":40,"tag":79,"props":1352,"children":1354},{"className":1353},[],[1355],{"type":45,"value":1214},{"type":45,"value":1357}," in ",{"type":40,"tag":79,"props":1359,"children":1361},{"className":1360},[],[1362],{"type":45,"value":1042},{"type":45,"value":1364}," and the execution-plan report until a\nlive\u002Fsandbox call promotes it.",{"type":40,"tag":75,"props":1366,"children":1367},{},[1368],{"type":45,"value":1369},"Maintain the same idempotency rules as dedicated writers: crosswalk by source ID and\nnever dedupe by slug.",{"type":40,"tag":53,"props":1371,"children":1373},{"id":1372},"codegen-rules",[1374],{"type":45,"value":1375},"Codegen rules",{"type":40,"tag":71,"props":1377,"children":1378},{},[1379,1384,1389,1394,1406,1433,1470,1504,1530,1548,1553],{"type":40,"tag":75,"props":1380,"children":1381},{},[1382],{"type":45,"value":1383},"Keep reader and writer responsibilities separate.",{"type":40,"tag":75,"props":1385,"children":1386},{},[1387],{"type":45,"value":1388},"Do not generate a read-all-into-memory importer for the general case. The reader extracts\nto disk first; the importer consumes extracted files from disk.",{"type":40,"tag":75,"props":1390,"children":1391},{},[1392],{"type":45,"value":1393},"Make transforms deterministic and testable.",{"type":40,"tag":75,"props":1395,"children":1396},{},[1397,1399,1404],{"type":45,"value":1398},"Preserve ",{"type":40,"tag":117,"props":1400,"children":1401},{},[1402],{"type":45,"value":1403},"source IDs",{"type":45,"value":1405}," for traceability, but do not assume native Wix target IDs can\nbe preserved or client-assigned.",{"type":40,"tag":75,"props":1407,"children":1408},{},[1409,1411,1416,1418,1424,1426,1431],{"type":45,"value":1410},"For native Wix entities, generate and use a durable crosswalk (",{"type":40,"tag":79,"props":1412,"children":1414},{"className":1413},[],[1415],{"type":45,"value":517},{"type":45,"value":1417},")\nwhenever the target API does not expose a client-controlled source-id field. Seed it at\nstartup via ",{"type":40,"tag":79,"props":1419,"children":1421},{"className":1420},[],[1422],{"type":45,"value":1423},"queryAllDataItems(ImportCrosswalk)",{"type":45,"value":1425}," and write a row per created entity, so\nre-runs\u002Fcontinues skip done records. ",{"type":40,"tag":117,"props":1427,"children":1428},{},[1429],{"type":45,"value":1430},"Slug-based dedupe does NOT work",{"type":45,"value":1432}," — Wix rewrites\nslugs (FR-010); never rely on it.",{"type":40,"tag":75,"props":1434,"children":1435},{},[1436,1438,1447,1449,1455,1457,1462,1464,1469],{"type":45,"value":1437},"The canonical collection name is ",{"type":40,"tag":117,"props":1439,"children":1440},{},[1441],{"type":40,"tag":79,"props":1442,"children":1444},{"className":1443},[],[1445],{"type":45,"value":1446},"ImportCrosswalk",{"type":45,"value":1448},". If upstream artifacts still say\n",{"type":40,"tag":79,"props":1450,"children":1452},{"className":1451},[],[1453],{"type":45,"value":1454},"MigrationRefs",{"type":45,"value":1456},", normalize them to ",{"type":40,"tag":79,"props":1458,"children":1460},{"className":1459},[],[1461],{"type":45,"value":1446},{"type":45,"value":1463}," in the generated code and note the\nnormalization in ",{"type":40,"tag":79,"props":1465,"children":1467},{"className":1466},[],[1468],{"type":45,"value":1042},{"type":45,"value":795},{"type":40,"tag":75,"props":1471,"children":1472},{},[1473,1478,1480,1486,1488,1494,1496,1502],{"type":40,"tag":117,"props":1474,"children":1475},{},[1476],{"type":45,"value":1477},"Attach every related entity, don't just create it.",{"type":45,"value":1479}," Creating a tag\u002Fcategory is not the\nsame as linking it. Blog posts attach tags via ",{"type":40,"tag":79,"props":1481,"children":1483},{"className":1482},[],[1484],{"type":45,"value":1485},"tagIds",{"type":45,"value":1487}," (GUIDs) and categories via\n",{"type":40,"tag":79,"props":1489,"children":1491},{"className":1490},[],[1492],{"type":45,"value":1493},"categoryIds",{"type":45,"value":1495}," on the draft-post create — collect the resolved ids and pass them, or the\ntaxonomy exists on the site but ",{"type":40,"tag":79,"props":1497,"children":1499},{"className":1498},[],[1500],{"type":45,"value":1501},"postCount",{"type":45,"value":1503}," stays 0 (the FR-012 builder bug).",{"type":40,"tag":75,"props":1505,"children":1506},{},[1507,1512,1514,1520,1522,1528],{"type":40,"tag":117,"props":1508,"children":1509},{},[1510],{"type":45,"value":1511},"Taxonomy creates are not idempotent",{"type":45,"value":1513}," (FR-011): treat ",{"type":40,"tag":79,"props":1515,"children":1517},{"className":1516},[],[1518],{"type":45,"value":1519},"409 ALREADY_EXISTS",{"type":45,"value":1521}," as success\nAND resolve the existing entity's id (e.g. ",{"type":40,"tag":79,"props":1523,"children":1525},{"className":1524},[],[1526],{"type":45,"value":1527},"listBlogTags",{"type":45,"value":1529},") so it can still be attached —\ndon't drop it.",{"type":40,"tag":75,"props":1531,"children":1532},{},[1533,1538,1540,1546],{"type":40,"tag":117,"props":1534,"children":1535},{},[1536],{"type":45,"value":1537},"Rich text is chunked for you.",{"type":45,"value":1539}," ",{"type":40,"tag":79,"props":1541,"children":1543},{"className":1542},[],[1544],{"type":45,"value":1545},"convertHtmlToRichContent",{"type":45,"value":1547}," transparently splits HTML over\nthe 30k Ricos cap (FR-009) and merges the node arrays; pass full HTML, don't pre-truncate\nor skip large posts.",{"type":40,"tag":75,"props":1549,"children":1550},{},[1551],{"type":45,"value":1552},"Include batching, pagination, logging, and retry hooks where relevant.",{"type":40,"tag":75,"props":1554,"children":1555},{},[1556],{"type":45,"value":1557},"Do not hardcode secrets.",{"type":40,"tag":53,"props":1559,"children":1561},{"id":1560},"output",[1562],{"type":45,"value":1563},"Output",{"type":40,"tag":47,"props":1565,"children":1566},{},[1567],{"type":45,"value":1568},"Summarize which files were generated, which entities they cover, and any remaining implementation gaps.",{"type":40,"tag":1570,"props":1571,"children":1572},"style",{},[1573],{"type":45,"value":1574},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1576,"total":1730},[1577,1591,1602,1614,1621,1631,1642,1654,1670,1683,1700,1712],{"slug":1578,"name":1578,"fn":1579,"description":1580,"org":1581,"tags":1582,"stars":23,"repoUrl":24,"updatedAt":1590},"rp-discovery","discover source platform schema for migration","Discovers and documents the source platform schema (entities, fields, relationships) for a migration project. Use when capturing source structure before mapping to Wix.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1583,1586,1589],{"name":1584,"slug":1585,"type":13},"Data Modeling","data-modeling",{"name":1587,"slug":1588,"type":13},"Documentation","documentation",{"name":21,"slug":22,"type":13},"2026-07-01T08:08:08.302261",{"slug":177,"name":177,"fn":1592,"description":1593,"org":1594,"tags":1595,"stars":23,"repoUrl":24,"updatedAt":1601},"execute migration pipelines to Wix","Runs the generated extract\u002Fimport pipeline and records execution results. Use when setup and codegen are complete and the user has approved the execution plan.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1596,1599,1600],{"name":1597,"slug":1598,"type":13},"Data Pipeline","data-pipeline",{"name":21,"slug":22,"type":13},{"name":9,"slug":8,"type":13},"2026-07-01T08:08:07.038962",{"slug":1603,"name":1603,"fn":1604,"description":1605,"org":1606,"tags":1607,"stars":23,"repoUrl":24,"updatedAt":1613},"rp-execute-setup","provision Wix site setup for migration","Verifies and provisions Wix-side setup required before import. Use after codegen when setup-requirements.md must be validated or executed against the target site.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1608,1611,1612],{"name":1609,"slug":1610,"type":13},"Deployment","deployment",{"name":21,"slug":22,"type":13},{"name":9,"slug":8,"type":13},"2026-07-01T08:08:04.475894",{"slug":4,"name":4,"fn":5,"description":6,"org":1615,"tags":1616,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1617,1618,1619,1620],{"name":18,"slug":19,"type":13},{"name":15,"slug":16,"type":13},{"name":21,"slug":22,"type":13},{"name":9,"slug":8,"type":13},{"slug":1622,"name":1622,"fn":1623,"description":1624,"org":1625,"tags":1626,"stars":23,"repoUrl":24,"updatedAt":1630},"rp-mapper","map source entities to Wix targets","Maps discovered source entities and fields to Wix targets and documents lossiness. Use when creating mapping-plan.md and mapping-summary.md after discovery.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1627,1628,1629],{"name":1584,"slug":1585,"type":13},{"name":21,"slug":22,"type":13},{"name":9,"slug":8,"type":13},"2026-07-01T08:08:01.958081",{"slug":1632,"name":1632,"fn":1633,"description":1634,"org":1635,"tags":1636,"stars":23,"repoUrl":24,"updatedAt":1641},"rp-orchestration","orchestrate Wix site migrations","Routes RePlatform source-to-Wix migrations to the next workflow step by inspecting migration project artifacts. Use when starting, continuing, or recovering a migration run.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1637,1638,1639,1640],{"name":18,"slug":19,"type":13},{"name":1609,"slug":1610,"type":13},{"name":21,"slug":22,"type":13},{"name":9,"slug":8,"type":13},"2026-07-01T08:08:09.570887",{"slug":1643,"name":1643,"fn":1644,"description":1645,"org":1646,"tags":1647,"stars":23,"repoUrl":24,"updatedAt":1653},"rp-setup-discovery","set up Wix environment prerequisites","Derives Wix environment prerequisites (apps, collections, schemas) from an approved mapping plan. Use after mapping review and before import code generation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1648,1651,1652],{"name":1649,"slug":1650,"type":13},"Configuration","configuration",{"name":1584,"slug":1585,"type":13},{"name":9,"slug":8,"type":13},"2026-07-01T08:07:59.413698",{"slug":161,"name":161,"fn":1655,"description":1656,"org":1657,"tags":1658,"stars":23,"repoUrl":24,"updatedAt":1669},"capture data from WordPress and WooCommerce","WordPress and WooCommerce source adapter: REST capture, auth, pagination, and read contract for codegen. Use when the source platform is WordPress or WooCommerce.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1659,1660,1663,1666],{"name":15,"slug":16,"type":13},{"name":1661,"slug":1662,"type":13},"REST API","rest-api",{"name":1664,"slug":1665,"type":13},"WooCommerce","woocommerce",{"name":1667,"slug":1668,"type":13},"WordPress","wordpress","2026-07-01T08:08:00.69949",{"slug":218,"name":218,"fn":1671,"description":1672,"org":1673,"tags":1674,"stars":23,"repoUrl":24,"updatedAt":1682},"validate Wix API write operations","Wix target adapter with verified write primitives (wix-writers.js) and contract tests. Use when vendoring Wix writers, validating API shapes, or Wix provisioning mechanics.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1675,1678,1681],{"name":1676,"slug":1677,"type":13},"API Development","api-development",{"name":1679,"slug":1680,"type":13},"Testing","testing",{"name":9,"slug":8,"type":13},"2026-07-01T08:08:03.226054",{"slug":1684,"name":1684,"fn":1685,"description":1686,"org":1687,"tags":1688,"stars":23,"repoUrl":24,"updatedAt":1699},"wix-app","build Wix CLI app extensions","Build and review Wix CLI app extensions — dashboard pages, modals, plugins, menu plugins, custom element widgets, Editor React components, site plugins, embedded scripts, backend APIs, backend events, service plugins, data collections, and App Market readiness. Use when building ANY feature or extension for a Wix CLI app or preparing a Wix app for App Market review. Triggers on: add, build, create, implement, help me, dashboard, widget, plugin, backend, API, event, collection, embedded script, service plugin, Editor React component, checkout, shipping, tax, discount, SPI, CMS, schema, tracking, popup, admin panel, menu item, modal, validate, test, verify, register extension, App Market, app review, submission readiness.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1689,1692,1695,1698],{"name":1690,"slug":1691,"type":13},"Backend","backend",{"name":1693,"slug":1694,"type":13},"CLI","cli",{"name":1696,"slug":1697,"type":13},"Frontend","frontend",{"name":9,"slug":8,"type":13},"2026-04-16T04:58:00.157961",{"slug":1701,"name":1701,"fn":1702,"description":1703,"org":1704,"tags":1705,"stars":23,"repoUrl":24,"updatedAt":1711},"wix-auth","authenticate with Wix APIs","Authenticate with Wix to obtain an access token for calling Wix APIs. Use when an agent needs a valid Wix access token and has none, or when the stored token is expired.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1706,1707,1710],{"name":1676,"slug":1677,"type":13},{"name":1708,"slug":1709,"type":13},"Auth","auth",{"name":9,"slug":8,"type":13},"2026-07-07T06:47:46.95263",{"slug":1713,"name":1713,"fn":1714,"description":1715,"org":1716,"tags":1717,"stars":23,"repoUrl":24,"updatedAt":1729},"wix-design-system","build UIs with Wix Design System","Wix Design System component reference. Use when building UI with @wix\u002Fdesign-system, choosing components, checking props and examples, or writing tests with component testkits. Triggers on \"what component\", \"how do I make\", \"WDS\", \"show me props\", \"testkit\", \"driver\", or component names like Button, Card, Modal, Box, Text.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1718,1721,1724,1725,1728],{"name":1719,"slug":1720,"type":13},"Design","design",{"name":1722,"slug":1723,"type":13},"Design System","design-system",{"name":1696,"slug":1697,"type":13},{"name":1726,"slug":1727,"type":13},"UI Components","ui-components",{"name":9,"slug":8,"type":13},"2026-04-29T05:33:44.561687",17,{"items":1732,"total":1777},[1733,1739,1745,1751,1758,1764,1771],{"slug":1578,"name":1578,"fn":1579,"description":1580,"org":1734,"tags":1735,"stars":23,"repoUrl":24,"updatedAt":1590},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1736,1737,1738],{"name":1584,"slug":1585,"type":13},{"name":1587,"slug":1588,"type":13},{"name":21,"slug":22,"type":13},{"slug":177,"name":177,"fn":1592,"description":1593,"org":1740,"tags":1741,"stars":23,"repoUrl":24,"updatedAt":1601},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1742,1743,1744],{"name":1597,"slug":1598,"type":13},{"name":21,"slug":22,"type":13},{"name":9,"slug":8,"type":13},{"slug":1603,"name":1603,"fn":1604,"description":1605,"org":1746,"tags":1747,"stars":23,"repoUrl":24,"updatedAt":1613},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1748,1749,1750],{"name":1609,"slug":1610,"type":13},{"name":21,"slug":22,"type":13},{"name":9,"slug":8,"type":13},{"slug":4,"name":4,"fn":5,"description":6,"org":1752,"tags":1753,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1754,1755,1756,1757],{"name":18,"slug":19,"type":13},{"name":15,"slug":16,"type":13},{"name":21,"slug":22,"type":13},{"name":9,"slug":8,"type":13},{"slug":1622,"name":1622,"fn":1623,"description":1624,"org":1759,"tags":1760,"stars":23,"repoUrl":24,"updatedAt":1630},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1761,1762,1763],{"name":1584,"slug":1585,"type":13},{"name":21,"slug":22,"type":13},{"name":9,"slug":8,"type":13},{"slug":1632,"name":1632,"fn":1633,"description":1634,"org":1765,"tags":1766,"stars":23,"repoUrl":24,"updatedAt":1641},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1767,1768,1769,1770],{"name":18,"slug":19,"type":13},{"name":1609,"slug":1610,"type":13},{"name":21,"slug":22,"type":13},{"name":9,"slug":8,"type":13},{"slug":1643,"name":1643,"fn":1644,"description":1645,"org":1772,"tags":1773,"stars":23,"repoUrl":24,"updatedAt":1653},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1774,1775,1776],{"name":1649,"slug":1650,"type":13},{"name":1584,"slug":1585,"type":13},{"name":9,"slug":8,"type":13},16]