Communitygithub.com

boyang-hu/website-rebuild-skill

復刻網站的 Agent Skill:抓取唯讀鏡像、從壓縮程式碼逐行還原、自動比對驗收。

website-rebuild-skill 是什麼?

這是一個專為 AI 代理設計的技能,能以「鑑識級」方法復刻獲獎創意網站。它會先建立目標網站的唯讀鏡像作為證據基準,接著對最小化或混淆的原始碼進行逆向工程,逐行移植到可獨立運行的工程中,並透過自動化比對閘門進行量化驗收,確保復刻結果與原始網站的行為、視覺及互動達到高度一致。此技能支援超過 40 個已驗證的網站類型,涵蓋 WebGL、GSAP 動畫、RSC 框架等,並嚴格遵守法律與道德使用邊界。使用者可以選擇三種不同的驗收等級:純存檔的 L1 鏡像、可部署的 L2 完整復刻,或是可讀性極高的 L3 原始碼化版本。整個流程由一套「憲法級」紀律約束,確保鏡像不被修改、源碼為唯一裁決、且所有偏差皆被記錄,最終產出一個既可驗證又具教育價值的復刻工程。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add boyang-hu/website-rebuild-skill

在你喜歡的 AI 中提問

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

說明文件

Website Rebuild(獲獎創意站 1:1 復刻)

把一個獲獎創意網站(WebGL / 滾動敘事 / 作品集站)以鑑識式方法復刻為可獨立執行、可驗證還原度的工程。不是「看起來像」的仿製——是以源站 bundle 為唯一規格書、以量化驗收閘門收口的逐行為移植。

本方法論提煉自六個連續實踐專案(工期從 6.5 週收斂到 1 天),後經 22 個完整復刻 + 5 個死站存檔搶救持續回填、43 站邊界探測實測校準適用範圍(清單見倉庫 README「已驗證過的網站」)。

使用前提與授權 ⛔ 必讀

本 skill 面向學習與研究目的的保真復刻,用於研究獲獎創意站的實現手法。適用對象是你自有的、已獲授權的,或公開可訪問且允許學習臨摹的網站。它不是用於未授權地採集受保護內容、規避訪問控制、或商業性盜用他人作品的工具。

執行時遵守下列邊界:

  • 尊重目標站規則:遵守其 robots.txt、服務條款與版權;抓取保持低頻、單會話,不對目標站施加異常負載。⛔ robots.txt 是逐路徑的許可聲明,不是全站開關——逐 URL 判定(選組 → 最長匹配 → 無匹配即允許),不得因為存在任何 Disallow 行就判「整站禁止」(幾乎每個商業站都有 /cart、/checkout、/admin 的 Disallow);禁令要按行為類別歸類,只有針對「抓取」的禁令才影響鏡像範圍,針對交易的禁令只意味著「別去點結帳」。⭐ 「讀不懂 / 拿不准」不等於「禁止」:走呈交,不走停工,更不自行縮小抓取範圍。讀法見 references/legal-and-deploy.md §0.3。
  • 不觸碰受保護邊界:不採集需要登入態、付費牆或授權才能訪問的內容;本 skill 只處理匿名可公開訪問的資源。若目標站明確禁止此類複製,停止並告知用戶——何為「明確禁止」見 legal-and-deploy.md §0.3.6 寫死的四條門檻,其餘一切不確定性走呈交不走停工。
  • 產出預設私有:預設 noindex、不公開部署。任何公開前必須完成逐資產版權取證,並顯著標註「非官方復刻」與原作者歸屬(見 references/legal-and-deploy.md)。

⛔ 法務判斷歸用戶,skill 只取證與呈現(三條,全程有效):

  1. 決定權在用戶:skill 收集事實(逐資產歸屬、許可狀態、第三方權利人、源站是否仍在營業、產物內第三方識別碼)、列出選項與各自的風險邊界、給出建議與理由;凡涉及「能不能公開 / 部署 / 再散布 / 對外展示」,必須用下文「User Input Tools」顯式交回用戶,不許 agent 自行下法律結論後繼續往下走。
  2. 未獲用戶明確決定前按安全預設執行:私有倉庫 + noindex + 不公開部署 + 不再散布。寫給用戶時說明這是預設動作(「在你決定之前我不會把它發出去」),不是 agent 已作出的法務結論——兩者責任歸屬完全不同。agent 只能往保守側執行預設,往公開側走必須有用戶的明確決定。
  3. ⛔ 法務考量不得削減鏡像完整性或閘門的覆蓋面:鏡像是證據基座,完整性是技術不變量(四遍法、閉包門、GAP=0 全建立在它之上)。不抓只能有技術性理由(不是檔案 / 伺服端不提供 / 需授權或登入態 / 源站明令禁止),一律登記;不得以「反正不公開」「不該多存一份」這類法務理由留洞。實證:某專案以「產出永不公開」為由對一類資產「登記、不補抓」,缺了約 60% 的資產而五道門始終全綠,藏了四個里程碑【objectarchive】。法務決定作用於產出怎麼被使用,不是證據基座是否完整。

適用範圍 ⛔ 必讀

主場(A 類):內容靜態託管、簽名行為(動畫/互動)全部存放在客戶端靜態資產裡的站——命令式 WebGL/Canvas 場景、GSAP 時間軸、烘焙資料檔案(GLB/.buf/.riv)、minified 或未混淆的 bundle。絕大多數 Awwwards 風格創意站屬於此類。

有條件支援(B 類):管線成立但需要額外場景處理(Shopify 平台層剝離、第三方儲存桶資產、執行時 API 快照、SSG payload 展開)。當前版本的指南覆蓋大部分 B 類場景,遇到未覆蓋的要向用戶明示風險。

明確拒絕(C/D 類):

  • C1(v0.3 起可做:重構式逆向):伺服端元件源確實不下發,但它的完整輸出(flight 流)內聯在每頁 HTML 裡,是可對拍的規格書。路線:flight-decode 建座標系 → 重構一個可構建的 Next 工程(客戶端一方元件按 C2 逐字譯,伺服端元件從 flight 樹反推為顯式登記的推斷物)→ verify-flight 語義門收口(模組 id 全域雙射)。實測 rauchg.com(Next 16/Turbopack):18/18 路由語義一致,盲逆向對答案結構 ≈95%/行為 ≈98%。⚠ C1 的 L2/L3 合併——第一份產物就是「人寫的原始碼 + 閘門證明的等價」。全流程見 references/rsc-reconstruction.md。
  • C2(可做,按 A 類跑):⭐ 寫法是宣告式但原始碼下發(R3F / Theatre / Vue SFC 編譯產物)。實測一個 R3F 站:useFrame 回呼裡就是 MathUtils.damp(x, y, 7, t) 這樣的普通命令式程式碼,逐字切片 18 個模組換進頁面後 CLEAN、8 個 canvas 齊全、跨側 99.5%。切片器不關心範式——它切的是位元組。 渲染器當平台層從鏡像伺服。⛔ 判別器不是庫名,是「客戶端是否持有行為源」(scope-and-fingerprint.md §4.0.1)。
  • D:行為主體在伺服端(CMS 內容站、電商 cart/庫存、A/B 實驗分桶、個人化注水)——客戶端沒有可移植的目標物,且確定性驗收無基準。

X 類(可搶救):原站已消失(域名易主 / 平台回收 / 路徑移除 / 原地被替換),但 Internet Archive 往往有捕獲——scripts/wayback-mirror.mjs 從 CDX 索引按錨點 + 時間窗選一個連貫時刻、以 id_ 原始位元組抓成標準鏡像(下游閘門原樣工作),洞按既成事實登記進 wayback-holes.txt(讀法與流程見 references/archival-rescue.md)。⭐ 搶救產出是標準鏡像——X 類可走完 L3 全程(實測 first-launch:策略 A 外殼 + 數值門 9,856 樣本全等 + 像素頻寬內 + 自包含門,無一道門需改語義)。⛔ 「CDX 無覆蓋才是真不可做」按資產層讀,不按站讀:IA 爬蟲不執行 JS,清單/拼接驅動的站可以程式碼層覆蓋 100% 而畫面層為零(實測 157/160 資產任何年代零捕獲,斷網即白屏)——Step 0 先做分層覆蓋偵察(推導 + CDX 前綴查詢)預判搶救深度,見 archival-rescue.md §1.9。歷年獲獎站實測消失率約 29%——這也是「第一時間鏡像」是本 skill 第一紀律的原因。

判級由 Step 0 指紋偵察決定,完整判定樹見 references/scope-and-fingerprint.md。拒絕時要解釋原因並說明該站屬於哪一類,不要硬跑。

User Input Tools

需要向用戶提問時(確認範圍、法務決定、外部依賴決策):優先使用當前執行時的內建提問工具(如 AskUserQuestion);沒有則輸出編號問題清單讓用戶回覆編號。支援多問合併時一次問完。法務類提問按 legal-and-deploy.md §0.1 的五段式寫:事實 / 查不清的 / 選項 / 每個選項的風險邊界 / 建議與當前預設動作。

憲法(六條紀律,全程有效)

以下六條在六個源專案中被稱為「憲法級」,違反任何一條都會在後續階段以 bug 形式償還:

  1. 鏡像神聖不可污染:mirror/ 磁碟檔案永不修改;一切本地化適配(CDN 改寫、外鏈 stub)在服務層響應時動態完成。
  2. 源站程式碼是唯一裁決,不憑觀感修:每個改動先在 bundle/CSS/鏡像 HTML 裡找到歸屬行號再落地。Do not tune visuals, motion, or interaction by eye.
  3. 源站有的都要有,源站沒有的不做:不自創補償性 CSS/JS。寧可先不像,也不要發明規則——自創補丁會在機制對齊後反轉成 bug。
  4. bug / 死程式碼 / 怪寫法照抄不修:壓縮程式碼裡的每個怪寫法都可能是行為本身。「好心修正」no-op bug 曾導致轉場崩潰(實證見 porting-discipline.md)。
  5. 有意偏差必須登記:寫清「源站怎麼做 / 我們怎麼做 / 為什麼 / 什麼條件下重新考慮」。沒登記的差異一律視為 bug。
  6. 程式碼與文件同一次提交:每個里程碑成對提交(Port xxx + Update rebuild plan: xxx),日誌固定含產出 / 驗收 / 教訓 / 下一步斷點(帶行號)。

⭐ 紀律 3 在 M(n+1) 的邊界:src/ 是顯式登記的衍生物,不是對源站的斷言,所以在 src/ 裡重新命名、拆模組、寫註解不算「發明」——紀律 3 約束的是「為了讓它看起來像而自創行為」,不是「讓已證明等價的程式碼變得可讀」。但兩條硬邊界不動:① 結構性重寫預設禁止(合併重複、提取公用函數、改演算法——它們讓等價不可判定);② 註解裡的推測必須標註為推測,不許把逆向筆記裡的猜測寫成陳述句。port/ 與 mirror/ 仍然一個位元組都不許動。詳見 references/readable-source.md §3.4 與 §5。

Workflow

Progress Checklist

[ ] Step 0  指紋偵察與範圍門 ⛔(判級 A/B/C/D/X;C/D/X 拒絕或引導,不進入下一步)
[ ] Step 1  開工評級(架構證否、分項難度打星、工期預估、與用戶確認範圍 + 終點 L1/L2/L3)
[ ] M0      鏡像取證 ⛔(BFS 爬蟲 + CDP 補錄 + manifest 帳本;GAP=0)
[ ] M0.5    鏡像斷網跑通 ⛔(零 404 / 零控制台錯誤 / 零外聯;serve.mjs 伺服)← L1 鏡像存檔 終點
[ ] M1      逆向建座標系 ⛔(_pretty 釘版本展開;engine-notes 先於任何程式碼;技術棧釘死;REBUILD_PLAN 建立)
[ ] M2+     嚴格溯源移植(依賴序里程碑推進;先豎切一條端到端鏈路;每里程碑冷啟動實測 + CLEAN 門)
[ ] M(n-1)  對拍驗收(按 verification-gates.md 決策樹選門型;根因修復,不調參糊平)
[ ] M(n)    收口 ⛔(冷頭評審 / 模組清單對帳;版權取證 + 呈交用戶決定——公開部署前必須完成)← L2 工程化復刻 終點
[ ] M(n+1)  原始碼化(port/ → src/:拆模組、去混淆重新命名、補註解、自包含)← L3 原始碼化 終點

⛔ = 阻塞門:驗收標準未達成不得進入下一階段。

Flow

Step 0 — 指紋偵察與範圍門。載入 references/scope-and-fingerprint.md,對用戶給的 URL 執行探測協定(GET 到路徑粒度、最終 URL 同一性、雙抓 diff、物種/年代校驗、bundle 初檢),輸出判級與依據。A/B 類繼續;C/D/X 類向用戶解釋後停止或引導。

Step 1 — 開工評級。載入 references/recon-and-rating.md。架構假設先證否(依賴表會說謊),分項難度打星(素材/3D/滾動編排/私有格式/平台層),向用戶確認復刻範圍(整站或指定頁面)與預期。

⭐ 同一次提問裡讓用戶選終點(三級梯子,帶著判級結論與分級成本估計問,不要乾巴巴列選項):

終點回答的問題止於典型用途
L1 鏡像存檔它長什麼樣M0.5存檔、離線欣賞(獲獎站年消失率約 29%)
L2 工程化復刻它在做什麼M(n)可部署、可驗證的 1:1(含版權取證與部署評估)
L3 原始碼化它怎麼做的M(n+1)研究與學習實現手法

梯子單調,選低不虧:每一級都是下一級的前綴,鏡像紀律保證時間敏感的部分永遠最先完成——今天選 L1,以後想升級隨時續跑(向用戶說明這一點)。「拿它做自己的專案」(腳手架化)不是本 skill 的階段——用戶問起時指向 references/beyond-the-rebuild.md 交接,那是他的工程,skill 到「人能讀懂的真實」為止。

M0 / M0.5 — 鏡像取證。載入 references/mirroring.md。用 scripts/mirror-site.mjs BFS 爬取 + scripts/netcapture.mjs 真實瀏覽器補錄,manifest 逐檔登記 sha256,redirect: manual 紀律,外部依賴逐項決策。scripts/verify-mirror.mjs 是鏡像自己的門(五項斷言,跑在斷網門之前——下游所有門問的都是「渲染得出來嗎」,錯的鏡像能讓它們全綠;一個 HTTP 200 也不是「你拿到了那個資源」的證據)。scripts/serve.mjs 伺服鏡像,斷網驗收。這一步永遠最先做——原站隨時可能消失或改版,鏡像是全專案唯一證據基準,也是後續一切對拍的參照服。

M1 — 逆向建座標系。載入 references/reverse-engineering.md。⛔ 第一個動作是判 bundle 型態(扁平拼接 / 模組化打包 / 多 chunk),再選工具——分層表掃頂層宣告,而 webpack 打包產物的頂層宣告數是 0,邊界與依賴邊由打包器給定(實測 24,378 行 → 569 個現成模組,用 scripts/module-map.mjs)。認不出容器時 FATAL,禁止回退到分層表(§0.5)。scripts/beautify-bundle.mjs(js-beautify 釘 1.15.1)展開 bundle 到 _pretty/,此後行號是全專案唯一溯源座標系。先寫 docs/engine-notes.md(範本:assets/templates/engine-notes.md)再寫任何程式碼。技術棧從 bundle 取證釘死精確版本。資料驅動動畫先 dump 數值帳本。建立 REBUILD_PLAN.md(範本:assets/templates/rebuild-plan.md)。

M2+ — 嚴格溯源移植。載入 references/porting-discipline.md,並按分支路由表載入對應場景指南。每個移植檔案頭部註明源行號區間;GLSL/魔數/資料逐字提取;資料資產腳本抽取入庫不手抄。

M(n-1) — 對拍驗收。載入 references/verification-gates.md 與 references/determinism.md。全站渲染廣度用 scripts/sweep-routes.mjs(全路由一個瀏覽器,逐路由 0 錯誤/0 失敗/0 外聯 + 互動鉤子與逐路由採集),單路由深度才用 probe.mjs——⛔ 不要手搓逐路由起 Chrome 的迴圈,成本按瀏覽器啟動次數計,且並發探針會互相收割孤兒。⚠ 歸因殘差之前先建自比頻寬(pixelcompare --self,逐側 ≥4 次、交錯跑)——沒有頻寬的殘差一律 UNCLASSIFIED,而 UNCLASSIFIED 是失敗不是通過。門型選擇:有 SSR/靜態 HTML 產物先建位元組門 → DOM 靜態場景凍結熵源走 byte-equal → 活場景(WebGL/影片/隨機相位)降級量化指標 + 雜訊歸類 → 資料驅動動畫補數值探針門 → CLEAN 門全程兜底。判定時序 bug 前先校準探針(references/environment-traps.md)。

M(n) — 收口。冷頭評審:對 bundle 頂層類/模組清單逐一核對落點(功能測試測不出整塊遺漏,只有清單式核對能)。載入 references/legal-and-deploy.md 完成版權取證並把決定呈交用戶——在用戶決定之前按安全預設執行(私有 + noindex + 不部署),公開前必須逐資產取證、顯著標註非官方復刻。

M(n+1) — 原始碼化。載入 references/readable-source.md。到 M(n) 為止產物已證明正確但人讀不了(實測:14,271 行擠在一個檔案裡,e 出現 2962 次,註解佔 0.2%)。本階段把 port/ 重寫成 src/:拆模組 → 作用域安全地去混淆重新命名 → 補分檔註解 → 複製資產做到自包含。⛔ 拆分粒度不是自由選擇——扁平腳本的宣告順序即求值順序,粒度由三條硬約束決定(互相引用 / 求值順序 / import 繫結不可賦值),先出劃分方案讓人過目,再切;遇到巨型模組時先測「延遲繫結少數末尾單例」的收益曲線再決定(實測 6 個繫結即從 11,246 行降到 1,013 行,而換模組系統要賠上整條工具鏈才換來同樣粒度)。⭐ 「這件事做不到」這個判斷極不可靠——實測兩次判為結構性不可能,兩次真兇都是自己工具裡的一行 bug;先懷疑測量它的工具,再懷疑物件(readable-source.md §3.1–3.1.3)。⛔ 前置條件不可協商:必須先有全綠的閘門。 沒有裁判的重構是盲改;有了 meanAbsDiff 0.00 的裁判,每一步都能被證死——這是重構能有的最好條件,也是它必須排在最後的原因。現有閘門全部原樣複用(目標換成 src/ 構建產物,容差不許放寬),另加符號映射閘門與自包含閘門。⛔ 結構性重寫(合併重複、提取公用函數、改演算法)預設禁止——它會讓閘門從「證明等價」退化為「沒測出不等價」。⭐ 紀律 4 在本階段依然有效:你現在讀得懂了,「這明顯是個 bug」的衝動會比任何階段都強,而它依然可能是行為本身。

⭐ 無容器 scope-hoisted 產物(Vite/esbuild,逐字分層交付的站)走另一條路:不重寫,切——拼接式分解(scripts/census-bundles.mjs 出 chunk 圖與座標 → scripts/slice-esm.mjs 按宣告切成语義命名的部件,按序拼接逐位元組等於原件 → scripts/verify-reassembly.mjs 一門定案,位元組等價成立時全部執行時閘門的裁決免費轉移)。執行側不變,瀏覽器繼續跑原 chunk。詳見 readable-source.md §3.0.6。

分支路由表

Step 1 偵察結果決定載入哪些場景指南(按需,不要全量載入):

偵察發現載入
Next.js App Router / RSC(self.__next_f flight 流)——C1 重構式逆向references/rsc-reconstruction.md
WebGL / Canvas 場景(three.js、自研引擎、GLSL)references/webgl-scenes.md
GSAP / 烘焙動畫資料 / CSS 變數動畫 / 自研輸入狀態機references/animation-recovery.md
私有二進位格式(.buf / .sog / VAT / GLB 時間線 / .riv)references/binary-formats.md
Shopify 店鋪(指紋見 cdn/shop、Shopify.theme、cdn.shopify.com)references/shopify-platform.md
Sanity CMS(指紋見 cdn.sanity.io/images/<projectId>/、*.api.sanity.io、載荷裡成片 _key/_type/_ref)——⛔ 判級看內容烘焙時點不看庫名,且 auto=format 資產按 Accept 協商返回不同位元組references/sanity-platform.md
DOM 層策略選型(所有站必經;Webflow 匯出 / 靜態單頁 / 框架 SSR 分支不同,另有「DOM 被 3D 引擎當座標源讀」的正交約束)references/dom-shell-strategies.md
大體量資產(百 MB 級媒體 / 授權字型)references/asset-management.md
無頭探測行為異常 / 疑似環境問題references/environment-traps.md

Step Summary

階段關鍵動作阻塞門驗收產出物
Step 0指紋探測判級判級明確且已告知用戶判級結論與依據
Step 1證否 + 評級 + 確認範圍用戶確認難度評級表、範圍共識
M0/M0.5鏡像 + 帳本 + 斷網跑通verify-mirror 五項全綠;GAP=0;零 404/零錯誤/零外聯mirror/(唯讀)、manifest、serve.mjs 參照服
M1展開 bundle、逆向筆記、釘棧engine-notes 完成;版本釘死表完成_pretty/、docs/engine-notes.md、REBUILD_PLAN.md
M2+溯源移植、里程碑成對提交每里程碑冷啟動實測 + CLEAN 門綠帶行號註解的原始碼、三張登記表滾動更新
M(n-1)對拍驗收所選門型全綠或差異全部登記驗證腳本 + 對拍產物入庫(docs/compare/)
M(n)冷頭評審 + 版權取證 + 呈交用戶清單對帳零缺口;用戶已作出部署決定(未決則維持安全預設)審計記錄、DEPLOY.md
M(n+1)拆模組 + 去混淆 + 註解 + 自包含現有門全綠且容差未放寬;符號門雙向單射零孤兒;自包含門(複製出去、斷網、構建)過src/(可讀工程)、docs/rename-map.json、src/README.md

Script Directory

Node 22+,路徑相對本 skill 目錄。用法與成熟度詳見 scripts/README.md。

⭐⭐ 依賴紀律是按階段劃的,不是按目錄劃的:原始碼化之前,整條管線零依賴。

Step 0 → M(n) 全程不安裝任何東西;復刻專案要到 M(n+1) 才獲得 devDependencies(作用域安全的重新命名需要真正的 parser)。scripts/(零依賴)與 tools/(允許 devDeps)只是這條階段線在目錄上的投影——判據住 scripts/,原始碼化階段的重構器住 tools/。

⛔ 任何閘門不許 import 任何工具(verification-gates.md §2.1.2)——檢查者不能是生產者。

⭐ 前面的階段需要真正的 parser 怎麼辦?外掛,不要 import。 beautify-bundle.mjs(js-beautify)與 module-map.mjs(acorn)都是 spawn 一個釘死版本的 npx,腳本自身仍然零依賴、仍然可獨立審查。⛔ 不要改成手寫詞法分析器——本 skill 裡試過,一個含引號的正則字面量把它帶偏了 16,177 行(F27)。token 流上的括號匹配是精確的,文字上的括號匹配是對字串/正則/註解的猜測。

⚠ 這條線是被違反之後才被發現的:module-map.mjs 依賴 @babel/*,卻在 scripts/ 裡住了整整八個版本,而同一份紀律的原話就寫在它上面三行。一條只寫在文件裡、沒有任何東西去查的規矩,會安靜地失效。

腳本用途使用階段
scripts/fingerprint.mjsStep 0 六步探測協定的跨平台等價實現(GET 存活 + 重新導向鏈與終點域同一性、雙抓 diff、物種/年代、HTML 技術指紋、bundle 初檢;出現次數計數與 <1KB Referer 重試內建;Sanity CMS 證據採集——projectId/dataset/API 主機/auto=format/_key,三種拼寫歸一,命中即指路 sanity-platform.md)。只採證據不出判級——判級仍走 scope-and-fingerprint.md §3 判定樹Step 0(無 POSIX 工具鏈時)
scripts/mirror-site.mjsBFS 爬蟲鏡像(資產白名單 + 迭代到不動點;redirect:manual + 三本帳,含逐檔 sha256;⭐ redirects.tsv 與 manifest 一樣跨執行累積——--scope 補頁曾把它截成只剩表頭,載荷門在 /work 撞 404 才發現)。--scope <前綴> 把頁面佇列限制在目標路徑下(微站掛在企業 CMS 域下時必用;⛔ 只限頁面不限資產)。帳本累積(--seeds 補漏不再截短上一輪的行)+ off-host 普查(不跟的主機逐個計數並告警——靜默丟棄曾讓 827 條媒體引用消失而報告寫著「57 files saved」)M0 第一遍
scripts/netcapture.mjs真實瀏覽器 CDP 抓包對帳補錄執行時資源(CDN 站必須傳 --hosts,否則只觀測同源流量、會報假 GAP=0)M0 第二遍
scripts/verify-mirror.mjs鏡像自己的門,跑在斷網門之前。五項斷言:映射單射性 / 帳本與磁碟 sha256 / 真實性(挑戰頁正文 + 宣告類型對魔數——一個 200 不是「你拿到了那個資源」的證據) / 閉包 / 可選抽樣回源。下游所有門問的都是「渲染得出來嗎」,錯的鏡像能讓它們全綠M0 關帳前,每次重抓鏡像後
scripts/gapfill-video.mjsHLS/DASH 串流媒體階梯補錄(master → rendition → 分片),靜態爬蟲的結構性盲區M0(有串流媒體時)
scripts/reconcile-gaps.mjs執行時缺口對帳器:把 netcapture 記下的 GAP 行與位元組推導的全集清單(如 next/image 的 srcset 階梯窮舉——實測 1,078 vs 瀏覽器碰到 217)逐條補進鏡像。⭐ 請求頭梯子(標準 profile 4xx → 裸 profile 重試:同一個 403 有兩種相反的藥,landonorris 要 Referer、video.twimg 恨 Referer)+ 逐 URL 容錯 + 分批記帳(一次崩潰不留帳外檔案)。⛔ 圖片 URL 的標準 profile 發瀏覽器同款圖片 Accept(lib/negotiate.mjs)——auto=format 類 CDN 按 Accept 協商格式,*/* 拿到的是回退位元組(basement D5:391 變體全回退而門全綠);帳本記 profile+varyM0(執行時資源多的站)
scripts/flight-decode.mjsC1 的座標系:把每頁 self.__next_f.push 流解成模組引用表(I 行匯出名=白送的 tier-1 命名證據)、HL 預載、已解引用的元素樹 + JSX 式 outline。T 行按宣告位元組數走;:HL 空 id 行不許斷鏈M1(C1)
scripts/verify-flight.mjsC1 語義門:構建產物 flight 樹 ≟ 鏡像 flight 樹。自帶解析器(⛔ 不 import flight-decode——檢查者不能是生產者);規範化只收「證明不攜帶行為」的構建雜湊命名空間(chunk 名/css-module 類/媒體雜湊/可提升資源掛載點/編碼自由度),模組 id 做全域雙射(一對多即紅);站點登記項走 --normalize-props(ISR 紀元欄位)與 --normalize-class(庫渲染子樹);其餘一切差異照紅M(n-1)(C1)
scripts/serve.mjs零依賴靜態伺服器(MIME/Range/服務層改寫/重新導向回放),兼任源站參照服。--rewrite FROM::TO 是登記式字面量替換,為的是一類本地化觸及不到的東西——源程式按自己的域名分支(location.hostname=="x.com" && (CDN=...),鏡像不在那個域名上於是整個條件不命中,資源不去索取,門照綠(因為 resolve 到 undefined,瀏覽器不報錯)。--rewrite 在終端機上分支,不是完全替換。--remote <url> 做遠端代理(有資源時透傳,無資源時不報錯)。--mirror <path> 把另一份鏡像掛上。未提供 --dir 時從 mirror/ 伺服。跨平台行列式同M0+(全部階段)
scripts/sweep-routes.mjs全路由掃描:單一瀏覽器實例順序走訪所有路由,每路由採集控制台錯誤 / 拋出例外 / 外聯 / 像素快照 + 互動鉤子。不是逐路由起 Chrome——瀏覽器啟動是 O(100ms) 成本,而新分頁是 O(10ms)。避免並發探針互相收割孤兒視窗。M(n-1)(廣度層)
scripts/probe.mjs深度探針:對單一 URL 做精密像素比對(全域 diff + 閾值分佈 + meanAbsDiff)、執行時 grafana、數值採集(getComputedStyle 矩陣 / canvas 快照 / 圖形 API 呼叫攔截)。不出決策,只產證據泡M(n-1)(深度層)
scripts/module-map.mjs用釘死版本的 acorn 解析 _pretty/ 下的 bundle,輸出模組邊界(頂層宣告 / webpack 區塊 / 匯出 / 模組間參照)。--container auto 先試 webpack 模式,失敗時回退到扁平腳本模式(非打包器約定)。⛔ 容器偵測只見於此腳本,reverse-engineering.md 不重複它M1(模組化 bundle)
scripts/beautify-bundle.mjs用 js-beautify 1.15.1 展開 bundle(預設 --brace-style collapse --preserve-newlines false --wrap-line-length 120,可透過 BEAUTIFY_OPTS 環境變數自訂)。⛔ 門用來關聯的只有行號,不重新格式化不會讓它更正確。多時戳手段:--force 跳過 mtime 檢查M1(全部)
scripts/slice-esm.mjsESM 拼接式分解:對無容器、逐字分層交付(Vite/esbuild 輸出單檔 script 標籤的 ESM)的產物,按頂層宣告切成语義命名的部件,輸出保證按序拼接後位元組等於原件的分散檔案。⛔ 不修改作用域——宣告到同名函數時自動「匯出約定」,不自行推斷匯出表。M(n+1)(無容器 ESM)
scripts/verify-reassembly.mjs拼接回卷門:對 slice-esm 產出的分散檔案做位元組級回卷驗證。行號反向映射表記入 docs/reassembly-map.jsonM(n+1)(無容器 ESM)
scripts/census-bundles.mjschunk 普查與座標圖:掃 _pretty/ 或 mirror/ 下所有 .js 檔案,識別 chunk 互參(import()、__webpack_require__),輸出依賴拓撲與模組座標圖M1(模組化 bundle)
scripts/wayback-mirror.mjsIA 搶救式鏡像:給定 URL,以 CDX 索引 + 時間窗選一個連貫快照時刻,以 id_ 原始位元組抓取並建立標準鏡像。--force-single-snapshot 只抓最新。洞登記進 wayback-holes.txtM0(X 類)

References

參考用途使用階段
references/scope-and-fingerprint.md分級判定樹、指紋探測協定、C/D 類拒絕依據Step 0
references/recon-and-rating.md證否與難度評級、里程碑建立框架Step 1
references/mirroring.md鏡像取證操作細則(BFS 策略、外部依賴決策樹、CDP 補錄)M0
references/reverse-engineering.md逆向筆記範本、容器檢測流程、_pretty 展開規範M1
references/porting-discipline.md移植紀律、行號溯源、三張登記表M2+
references/verification-gates.md閘門選型決策樹、像素比對規範、自比頻寬M(n-1)
references/determinism.md確定性策略(熵源隔離、時序凍結、環境鎖定)M(n-1)
references/rsc-reconstruction.mdC1 重構式逆向流程(flight-decode → 反推 → verify-flight)M1、M(n-1)(C1)
references/webgl-scenes.mdWebGL/Canvas 場景移植指南(GLSL 提取、uniform 快照、canvas 快照對比)M2+
references/animation-recovery.md動畫復原指南(GSAP timeline dump、CSS 變數烘焙、數值探針)M2+
references/binary-formats.md私有二進位格式處理(headless extractor、schema 推斷、hex diff)M2+
references/shopify-platform.mdShopify 平台層剝離與資產抽取M2+
references/sanity-platform.mdSanity CMS 烘焙時點判定與資產協商M0、M2+
references/dom-shell-strategies.mdDOM 層策略選型(Webflow 匯出 / 靜態單頁 / 框架 SSR / 3D 座標源)M2+
references/asset-management.md大體量資產管理(媒體、字型、模型壓縮與歸檔)M0、M2+
references/legal-and-deploy.md版權取證流程、部署評估、法務呈交範本M(n)
references/readable-source.md原始碼化規範(拆分約束、去混淆策略、符號門、自包含門)M(n+1)
references/environment-traps.md環境陷阱目錄(GPU 差異、字型回退、時區、locale、canvas 指紋)M(n-1)
references/archival-rescue.mdIA 搶救流程(CDX 覆蓋偵察、時間窗策略、方式記錄規範)M0(X 類)
references/beyond-the-rebuild.md超越復刻:從復刻到自建專案的交接點用戶詢問時

Assets

資產用途
assets/templates/engine-notes.mdM1 逆向筆記範本
assets/templates/rebuild-plan.mdM1 復刻計畫範本

法務免責聲明

使用本 skill 的全部責任歸屬於終端使用者。本 skill 不鼓勵或縱容任何侵犯智慧財產權的行為。使用者必須確保他們有權重現目標網站,並且遵守所有適用的法律與服務條款。作者與貢獻者對因使用本 skill 而產生的任何濫用、侵權行為或法律責任概不負責。

相關技能