GCW — 网站复制工具(Gao Copy Website)
研究一个公开网站的实际运作方式,复现其中重要的部分,并在真实浏览器中验证结果。优先依赖真实的源代码和可观察的运行时证据,而非看似合理的 AI 猜测。
牢记三条规则:
- 在实现之前找到证据。
- 在重构之前让它能运行。
- 在优化之前进行对比。
边界
- 仅当目标由用户拥有、已获得预期复用的许可或明确授权时才进行操作。仅在授权不明确时进行询问。
- 将经过身份验证、仅需密码以及私有内容视为超出范围,除非明确授权。
- 不要绕过访问控制,也不要恢复、交付或提交凭据。
- 在公开复用之前,分别检查代码、字体、图像、模型和品牌的权限。
- 将不确定的技术声明标记为
SOURCE(来源)、PARTIAL(部分)或GUESS(猜测)。 - 不要将已部署的打包产物呈现为原始创作源码。
1. 先选择目标,再选择工具
阅读 references/clone-modes.md 并选择一种主要模式:
TEARDOWN(拆解分析):理解真实的设计与实现,无需承诺重建。FAITHFUL_CLONE(忠实克隆):尽可能根据证据复现可观察到的站点。CREATIVE_REBUILD(创意重建):保留选定的结构、节奏或交互思路,同时替换品牌和内容。PRODUCTION_RECOVERY(生产恢复):在无法获得可维护源码时,恢复已拥有但已部署的站点。
记录一份简短的预检:
- 目标:
- 站点类型:
- 源码可用性:
- 复用边界:
- 高置信度范围:
- 近似或排除范围:
- 推荐路径:
不要让每个项目都承担生产恢复的成本。使用能够支持所选目标的最轻量级的证据和验证方式。
2. 首先寻找真实实现
在抓取或重建之前:
- 搜索站点名称、产品名称、域名所有者和部署标识,查找官方公开仓库。
- 检查源码映射、框架元数据和公开部署产物。
- 验证仓库和资源许可证;公开可用不等于允许重新部署。
- 将原始源码、已部署产物和你可编辑的实现清晰分离。
- 使用最终的规范 HTTP(S) URL。GCW 拒绝携带凭据的 URL 以及重定向到已配置源之外的内容。
当存在官方可复用的源码时,从该源码开始。如果没有,则继续进行运行时侦察,并说明哪些仍然未知。
3. 初始化项目记录
阅读工作区中的 AGENTS.md。如果此机器尚未验证,请在 GCW 仓库中运行 npm install、npm run install:browser 和 npm run check。
创建一个非破坏性的项目记录:
python scripts/init_reconstruction.py <workspace> --url <canonical-url> --authorization <owned|licensed|authorized>
使用 .gcw/ 目录存放清单、截图、报告和已知缺口。不要静默覆盖现有证据。
4. 侦察站点并分类其表面
当 Node.js 和 Playwright 可用时运行清单:
node scripts/site_inventory.mjs --url <canonical-url> --out <workspace>/.gcw/evidence/network/site-inventory.json
然后验证自动化无法可靠推断的内容:
- 路由、页面族、深层链接和响应式断点
- DOM 根节点、固定覆盖层和内滚动容器
- 悬停、点击、拖拽、滚动、时间、大小调整、主题和存储状态
- Canvas、WebGL、WebGPU、工作线程、iframe、视频、音频和懒加载资源
- 加载状态与稳定应用状态
- 需要本地模拟数据的公共 API 和数据依赖
对于 Canvas/WebGL/WebGPU 的所有权、着色器和渲染管线,使用 web-shader-extractor。当目标是保留排版、间距、调色板、布局、动效或视觉语言而非字节级产物时,使用 design-dna。
5. 选择实现路径
根据证据和站点类型选择路径:
| 证据或站点类型 | 默认路径 |
|---|---|
| 官方可复用源码 | 在其许可证范围内运行并适配源码 |
| 简单的静态站点 | 保留公开文件和 URL 路径,然后移除跟踪并替换内容 |
| 内容丰富的 React/Vue/Next 站点 | 重建页面模板并使用公开或本地模拟数据 |
| 多页面营销站点 | 在构建共享模板之前,先映射路由和页面族 |
| 交互密集型站点 | 先捕获状态,再复现状态转换 |
| WebGL/Canvas 站点 | 在项目化之前恢复渲染/输入/输出模型 |
| 仅视觉灵感 | 提取设计 DNA 并构建原始实现 |
| 失去源码的生产站点 | 阅读 references/recovery-tiers.md 和 references/gates.md,然后建立经过验证的回放(oracle)机制 |
不要归档或复制所选模式不需要的第三方资源。
6. 构建一个可运行的本地项目
- 在编辑新项目时,保留一个稳定的参考或证据记录。
- 恢复所有范围内的路由,而不仅仅是首页。
- 在所选主机上保留导航和深层链接行为。
- 用明确的模拟数据或安全的回退方案替代不可用的服务器行为。
- 验证生产构建和静态预览,而不仅仅是开发服务器。
在适用时运行路由检查:
python scripts/route_smoke.py --base-url <preview-url> --route / --route /example
7. 在真实浏览器中验证
阅读 references/qa-scenarios.md 和 references/tooling.md。
定义来源和候选场景,然后捕获匹配状态:
node scripts/capture_compare.mjs --config <capture-scenarios.json> --output <results-dir>
python scripts/batch_image_diff.py <results-dir> --diff-dir <results-dir>/diff
匹配视口、DPR、路由、指针、滚动、随机种子、就绪状态和时间阶段。检查截图和差异图像;单一的全局分数无法解释交互或合成器失败。
不要通过调整颜色、偏移或动画速度来隐藏缺失的接线。将有相位依赖的区域与确定性失败分离。
8. 交付学习成果,而不仅仅是克隆产物
仅输出所选模式要求的文档:
TEARDOWN.md:真实实现、证据级别和可转移的技术DESIGN_DNA.json:用于创意重建的设计系统、视觉语言和效果REPLACE_GUIDE.md:替换文本、媒体、颜色、字体、模型和数据的位置CLONE_REPORT.md:来源与本地版本的对比、权衡和已知缺口- 可运行的项目、构建命令和部署说明
对于高级资产情况,例如烘焙在 GLTF/GLB 几何体中的文本,请阅读 references/special-cases.md 而非扩展主工作流。
9. 仅在需要时加固
对于维护的项目或生产恢复,安装截图回归运行器:
python scripts/install_ci.py <project-root> --source-url <canonical-url>
对于一次性的拆解分析或学习练习,CI 是可选的。如果安装了,即使阈值失败,也必须上传截图、差异和报告。
10. 诚实地收尾
- 重新运行构建以及预检中承诺的 QA 场景。
- 记录已知缺口和下一步需要的证据;永远不要编造成功的交互。
- 在发布改编版本之前,移除跟踪和原始品牌残留。
- 留下干净的 Git 检查点;未经用户授权,切勿推送。
- 区分原始创意、已获许可复用的资产、观察到的行为以及你自己的实现。