Communitygithub.com

ethanplusai/astro-conversion-kit

將現有網站(先是 WordPress;接著是 Drupal、Webflow、Squarespace、Wix 和靜態網站)轉換為靜態 Astro 網站,保留相同的 URL、內容、頭部標籤、媒體、重新導向與外觀,並通過配對閘道和像素級視覺審查來驗證,最終產生一個 Pull Request、一個設為 noindex 的暫存部署,以及一份啟動操作手冊。

astro-conversion-kit 是什麼?

這是一個強大的 AI 驅動轉換工具,專為將現有網站遷移至靜態 Astro 架構而設計。它自動處理從 WordPress、Drupal、Webflow、Squarespace、Wix 或靜態 HTML 網站的複雜遷移,確保目標站點在 URL、內容、頭部標籤、媒體、重新導向以及視覺外觀上與原始站點完全一致。核心工作流程包含 13 個嚴謹的階段:從自動擷取、網域規劃、模板識別、基底線建立,到透過嚴格的配對閘道與像素級視覺比較來驗證每個組件。整個過程對原始站點僅做唯讀訪問,絕不觸碰實際數據。轉換結束時,它會自動產生一個 Pull Request、一個帶 noindex 標記的暫存部署,以及一份詳盡的啟動操作手冊,甚至還會生成一份待辦事項清單,列出需要人工介入的項目(例如缺少的 API 金鑰)。支援多種託管平台(Vercel、Cloudflare Pages),並提供多媒體管理策略(儲存庫、物件儲存或臨時資源)。建議功能可旁通部署,需經人工核准才能合併。此工具專為 Claude Code、Codex 及 Cursor 等 AI 代理平台設計,能以最少的人為互動,將遷移專案從開始到結束簡化為一個連貫的過程。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ethanplusai/astro-conversion-kit/tree/HEAD/skills/convert-site

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

轉換網站

協調器。它只會發送一次問題訊息,然後依序執行所有其他技能,不再停頓,最後以一個 Pull Request(由合併者處理)和一份操作手冊(啟動者使用)結束。

黃金法則

  1. 一次輸入訊息,之後不再停頓。 每個問題都附有預設值。若後續需要帳號、登入或您沒有的權杖,則會將其列入「need you」清單(state.needsYou 和 docs/LAUNCH.md 的 A 節),工作流程繼續進行。
  2. 原始站點僅供讀取。 只有以下腳本以節奏讀取它:擷取腳本、shoot.mjs、原始站點上的 styles.mjs、css-coverage.mjs、launch-audit --old-url 和 pre-launch --predecessor-url。原始頁面載入時會封鎖分析,因此不會產生訪問次數。切勿在原始站點上提交表單、登入或手動抓取網頁來填補資訊缺口。
  3. 預設建置等於原始站點,包括缺陷。 內容從擷取的標記中移動,絕不重新輸入或整理。每個異常都是一個決策行,表示「預設情況下重現原始站點」。強制性的差異是異常;改進是提案(僅在 PROPOSALS=on 時使用)。
  4. 每個提交都需通過閘道,絕不寬鬆。 切勿編輯 baseline/ 以通過閘道(只能使用 baseline/scripts.json 中的 keep 標記)。跳過不等於通過;「未涵蓋」永遠不等於通過。
  5. main 分支只包含支架提交,別無其他。 在一個新的空儲存庫中,init-site 會在 main 分支上建立一個提交,這與「絕不提交到 main」的規則例外:Pull Request 需要一個基礎。之後的所有工作都在 astro-rebuild 分支上,一個 Pull Request。絕不強制推送、絕不合併、絕不觸碰 DNS、舊主機或儀表板設定。
  6. 聊天記錄或儲存庫中不應包含密碼。 切勿要求使用者貼上權杖。憑證來自環境變數或 CLI 自身的登入流程。

以下使用的名稱

KIT 是此工具包的絕對路徑(包含 skills/ 和 package.json 的資料夾)。 LIVE 是原始網站的源頭。 SITE 是新網站儲存庫的絕對路徑(預設為 <當前資料夾>/<Slug>);擷取內容和執行狀態從一開始就寫入其中,而 init-site.mjs 則會圍繞它們建立支架。從 SITE 執行所有指令。每個腳本都會顯示 --help;請執行該指令,而非閱讀原始碼。每個在新 shell 中執行的 Node 指令都以 source ~/.nvm/nvm.sh && nvm use 22.23.4 開頭(或在讀取 .nvmrc 的 shell 中執行)。

步驟 0a:一個可以執行的工具包

這些腳本從工具包的 node_modules 匯入 parse5、playwright 等套件。如果 $KIT/package.json 或 $KIT/node_modules 遺失(表示安裝時只複製了技能資料夾,兩者皆無),請複製工具包並安裝它,然後將複製的版本用作 KIT:

git clone https://github.com/ethanplusai/astro-conversion-kit <資料夾>/astro-conversion-kit
npm install --prefix <資料夾>/astro-conversion-kit

步驟 0:預檢與指紋辨識(在輸入訊息之前)

node $KIT/skills/convert-site/scripts/preflight.mjs --json
node $KIT/skills/capture-site/scripts/fingerprint.mjs $LIVE

安裝缺失但您可以自行安裝的項目,無需詢問:當 playwright.chromium 為 false 時,執行 npx playwright install chromium;vercel 和 wrangler 透過 npx 執行。已安裝但未登入的 CLI 需要由使用者自行登入:在輸入訊息中指定指令名稱(gh auth login、npx vercel login、npx wrangler login),並在支架階段再次檢查。

experience 決定您說話的方式,而非您做什麼。new:每個階段用一句簡單的句子說明它做什麼和為什麼,每個術語解釋一次,安裝過程靜默進行。some:每個階段一行。experienced:僅顯示指令和結果。Shopify 的指紋是一個商店:停止並告知。

步驟 1:輸入(唯一的一次訊息)

發送 references/intake.md 的模板,填入預檢和指紋辨識找到的內容:每個問題及其預設值,以及「遺漏了什麼以及會發生什麼」的清單。如果使用者不回覆,則使用預設值。切勿發送第二次問題訊息。

各階段

順序如 docs/process.md 所示;references/phases.md 包含每個指令及其驗證方式。在每個邊界執行 node $KIT/skills/convert-site/scripts/state.mjs --dir $SITE phase <名稱>;在前一個階段的驗證成立之前,不要開始新階段。state.mjs 的呼叫應一次一個,切勿使用 && 鏈接:每個呼叫都會改寫 state.json,鏈接中途失敗會使其不同步。

#階段 (<名稱>)發生什麼事完成條件
1intake預檢、指紋辨識、唯一的一次訊息已回覆,或使用預設值
2capturecapture-site 到 $SITE/capture/,CSS 涵蓋率每個 URL 都已儲存或記錄其狀態;備註已寫入
3plan決定託管方式、URL 形式、媒體模式、模板;決策記錄在狀態中;草稿在 .conversion/ 下每個模板、計數、異常和超出範圍的功能都有一個決策
4scaffold儲存庫,圍繞擷取內容的 init-site.mjs,然後是 docs/plan.md 和 docs/media-plan.json建置成功但頁面為空;main 分支包含唯一的支架提交
5baselinenpm run baseline(templates.json 已存在)build-baseline.mjs --check 退出碼為 0
6build佈局和共享部分,每個模板一個頁面,鎖定模板設計,然後是每個頁面npm run build 通過;模板閘道逐一路徑通過
7gates完整閘道npm run verify 退出碼為 0
8visual每個模板在 390、768、1440 解析度下;每個頁面在 390 和 1440 解析度下每一對都通過
9components可選,預設關閉(references/components-optional.md)閘道和差異仍然通過,一個獨立的提交
10prelaunchpre-launch、暫存部署、verify-live、launch-audit、一次測試提交prelaunch-reconcile.mjs 退出碼為 0(references/phases.md §10);稽核查阻擋項目已修正或列出
11suggestionssuggest-improvements 與 gates.json 和 review/docs/suggestions.md 及其「From the review」章節
12pr操作手冊、推送、PR、最終報告PR 引用閘道輸出和每個「未涵蓋」章節
13啟動由使用者從 docs/LAUNCH.md 執行post-launch 檢查切換並監控 30 天

各個階段使用的技能及其各自的規則:capture-site(2)、parity-gates(5 到 7)、visual-review(6、8)、pre-launch 和 launch-audit(10)、suggest-improvements(11)、post-launch(在操作手冊中)。在其階段開始前閱讀每個技能的 SKILL.md。

建置,用一段話說明

references/build-rules.md 具有約束力。佈局以及共享的頁首、導覽和頁尾始終是元件;內容區塊是擷取到的標記,由腳本移動。媒體保留其原始路徑,字型自行託管,CSS 透過涵蓋率修剪(css-coverage.mjs 後接 css-prune.mjs),絕不重寫。表單遵循 references/forms.md,第三方腳本遵循 references/third-party.md。redirects.csv 是唯一的重新導向來源:新的重新導向是一個行,其 source 為 decision 且 note 命名決策 id,然後執行 npm run redirects:build;絕不手動編輯生成的規則。每個模板一個提交(feat: <模板> template,在其路徑範圍的閘道通過後),絕不為整個建置做一個提交。在展開到每個頁面之前,模板的設計會被鎖定(視覺審查)。使用子代理時,每個模板或閘道修復有一個實作者,絕不兩個處理同一個檔案;每個任務簡報攜帶絕對路徑和 build-rules.md,您在下一個階段之前審查他們的提交。

決策、異常、提案

本節是規則;參考資料連結到此處。

  • 決策。 任何原始站點表現異常的地方,以及您套用的每個預設值,都會得到 state.mjs decision '{"topic":…,"choice":…,"default":…,"reason":…,"costIfWrong":…}',它會列印其 id(d1、d2……)。唯一的總帳是 docs/plan.md 中的決策表格:id、日期、主題、選擇、預設值、原因、錯誤成本。在支架之前,決策存在於 .conversion/state.json 中;在 init-site 之後,計劃表格會立即從它們寫入。預設始終是「重現原始站點」。
  • 異常(exceptions.json,{ path, field, from, to, reason, approvedBy, date }):靜態建置無法避免的差異;對於該路徑上的該欄位,閘道會用 to 取代 from。approvedBy 是 "default, <decision id>",直到使用者在 PR 中簽核。表單和腳本不是異常欄位(它們有自己的標記)。routes 是:擷取無法讀取的路由:from 是其狀態字串,to 是 "skip" 或建置後的取代路徑。
  • 提案(proposals.json,形狀相同加上 id、決策 id 和 approvedBy: "proposed";多個記錄可能共享一個 id):一種改進。程式碼使用 proposalOn(id) 切換它;它僅在 PROPOSALS=on 的建置中發布,由 npm run verify:proposals 進行閘控。沒有閘道衡量的變更(改寫的 href)是 field: "markup",從不比較。當使用者批准時,記錄會移動到 exceptions.json(approvedBy)。

託管

預設為 Vercel,應要求使用 Cloudflare Pages:references/hosting-vercel.md 和 references/hosting-cloudflare.md。每個頁面都帶有 noindex,除非生產建置設定了 PUBLIC_INDEXABLE=true。媒體可以是 repo、store(media-upload.mjs)或 live-temporary(僅限暫存;在 DNS 切換前消失),由 media-plan.mjs 決定(references/phases.md §3)。

計劃後的一次訊息

在第 3 階段之後,發送一條簡短的狀態訊息(不是問題):平台、頁面和模板計數、媒體決策、超出範圍的功能和選項、預設採取的決策,以及到目前為止的「need you」清單。在非互動式執行中也是必需的(有既定答案,無人回覆):進度行不能取代它。然後繼續進行,無需等待。

Pull Request(第 12 階段)

推送 astro-rebuild 分支(main 分支已在支架階段推送),然後執行 gh pr create --base main --head astro-rebuild --title "Astro rebuild of <主機>" --body-file .conversion/pr-body.md。當 pre-launch 因 placeholders.form-id 失敗(尚無表單 id)時,加入 --draft,最終報告會將其列為阻擋項目。如果沒有 gh 登入,正文會留在該檔案中,而「推送並開啟 PR」則會加入「need you」清單。正文順序如下:

## What changed       一段話:平台、轉換了什麼、主機、媒體模式
## Counts             頁面、模板、重新導向、媒體檔案和大小、表單、保留/移除的供應商
## Exceptions applied  每個 exceptions.json 條目:路徑、欄位、原因、決策 id
## Proposals open      每個 proposals.json id:路徑、內容、原因(僅在 PROPOSALS=on 時發布)
## Decisions           docs/plan.md 的決策表格,以及每個非預設的選擇
## Gate output         `npm run verify` 的輸出,逐字,在程式碼區塊中,包含每個跳過行;
                      然後 prelaunch-reconcile 接受的每一行,標示為 "reproduced from live (dN)"
## Visual review      `npm run review:check` 的輸出,每個 docs/visual-overrides.json 條目
                      (路由、id、閾值、原因),每個 bannerClosed 和 heightMismatch;聯絡表單是
                      review/index.html 和 review/all.html(本地;npm run review:sheet)
## Staging            暫存 URL、verify-live 結果、launch-audit 的阻擋項目及其狀態
## Suggestions        按類別統計的計數、中風險和高風險項目、可套用的 id
## Not covered        pre-launch 和 launch-audit 的「未涵蓋」章節,逐字,每個
                      在其自己的標題下;然後是 capture-site、visual-review 和 suggestions 的
## Waiting on you     每個 state.needsYou 項目,按操作手冊順序

最終報告(給使用者)

以 PR 連結開頭(如果是草稿,則附上「draft: waiting on the form id」),然後是:轉換了什麼(計數)、閘道和視覺審查各一行、暫存 URL、「need you」清單,從 state.mjs --dir $SITE get needsYou 讀取(每個項目附上確切的指令或點擊,按操作手冊順序),然後是每個「未涵蓋」章節的逐字內容。說「PR open, waiting on your merge」,絕不說「done」或「live」。停止您啟動的任何審查伺服器(npm run review:serve -- --stop,如果您使用了預覽,則加上 npx astro preview stop),然後停止。

恢復執行

在新工作階段中,讀取 node $KIT/skills/convert-site/scripts/state.mjs --dir $SITE get 並從 phase 繼續:首先重新執行該階段的驗證;如果成立,則開始下一個階段。擷取使用 --resume 恢復。絕不重複輸入訊息。稍後套用建議是 convert-site --apply <id>(references/apply-suggestion.md),絕不是執行流程本身的一部分。

參考資料

檔案涵蓋範圍
references/intake.md唯一的一次訊息:問題、預設值、遺漏了什麼以及會發生什麼
references/phases.md每個階段:確切的指令、完成的驗證、要記錄的內容
references/build-rules.md如何建置佈局、內容、CSS、媒體、字型、延遲載入圖片和重新導向
references/forms.mdFormspree 連線、欄位名稱、蜜罐、感謝頁面、表單 id、一次測試提交
references/third-party.mdbaseline/scripts.json 和 docs/third-party.md 中的 keep 允許清單
references/hosting-vercel.md專案、公開的 noindex 暫存、索引、Blob 媒體、選擇性保護
references/hosting-cloudflare.mdPages 專案、_redirects、_headers、R2 媒體函數、查詢重新導向
references/runbook.mddocs/LAUNCH.md:A 需要您,B 結案,C 啟動日,D 30 天監控
references/components-optional.md可選的元件傳遞
references/apply-suggestion.md--apply <id>:提案記錄、分支提交、閘道、表單

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

ethanplusai/astro-conversion-kit

Crawl a live website, read-only and paced, into a capture/ folder that a rebuild is checked against — every page's HTML, text and head tags, redirects with every hop, links, third-party scripts, the media set, stylesheets, fonts, logo and icons, feeds, templates, and live screenshots at three widths. Use before converting or rebuilding a site, when asked to crawl, capture, snapshot or inventory a site, or when a capture stopped on blocks and needs resuming.

ethanplusai/astro-conversion-kit

Audit a live or staging website and report what would go wrong at launch — crawl and inventory, indexability, redirects for a domain cutover, links, images, forms, accessibility, performance, analytics, content sanity, and full-page screenshots for a visual pass. Use before or right after a site launch, when asked to QA, audit, or review a website, when a site is moving to a new domain, or when somebody asks whether a site is ready to go live. Read-only: it never submits a form, clicks a control, or edits anything.

ethanplusai/astro-conversion-kit

Freeze a site capture into baseline/ and prove an Astro build matches it — every route, redirect (one hop, through a simulation of the host), SEO head field, visible text, internal link, media file, sitemap entry, feed, form, third-party script and security header — with approved differences in exceptions.json and improvements in proposals.json. Use after a capture to build the baseline, when compiling redirects.csv for Vercel or Cloudflare, before calling any conversion page done, when a gate fails and needs reading, or to check a staging deploy against the baseline.

ethanplusai/astro-conversion-kit

The moment DNS moves and for the thirty days after — verifies the cutover (DNS propagation, certificate, http and www redirects, the noindex, robots and sitemap on the live host, every redirect the audit mapped, forms, analytics, the staging copy, the old host, security headers), diffs production against the pre-launch baseline, and schedules the watch. Use when asked did the launch work, is the site live, what should I check after launch, the domain just switched, or when a site went live in the last month and something looks wrong. It is read-only and exits 0 whatever it finds.

相關技能