一键导入
sync-upstream
把本 repo 同步到原作者(shines871)最新版——核心整包換上游原文、資產鏡像、套錨點補丁、重產 manifest/版本、smoke。當使用者說「同步原版」「同步上游」「更新上游」「跟進原作者」或 /sync-upstream 時使用。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
把本 repo 同步到原作者(shines871)最新版——核心整包換上游原文、資產鏡像、套錨點補丁、重產 manifest/版本、smoke。當使用者說「同步原版」「同步上游」「更新上游」「跟進原作者」或 /sync-upstream 時使用。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
放置天堂加掛版發版 — 用「日期 tag + 原作者版本號」開一個 GitHub Release(與同步 CI 同一套規則)。當使用者說「發版」「發 Release」「出新版」「發佈新版本」或 /release 時使用。
放置天堂小百科/掉落查詢的更新 SOP — diff 驅動、逐檔逐頁機械式對照「上游遊戲資料的變動」(錨點=wiki-checkpoint 的 reconciledUpstreamCommit,diff 在上游 clone 做,上限=已同步到的 syncedUpstreamCommit),補進 afk-wiki.js / afk-dex.js / afk-extradata.js,測過再更新 checkpoint。當使用者說「更新小百科」「同步小百科」「補小百科內容」或 /update-wiki 時使用。
放置天堂專案 push 前的完整檢查與準備 — bump 改動外掛的 ?v=、重算 sw.js 版本、跑 Playwright smoke、檢查衝突標記,全綠才建議 push。當使用者說「準備 push」「push 前檢查」「跑 prepush」或 /prepush 時使用。
基于 SOC 职业分类
| name | sync-upstream |
| description | 把本 repo 同步到原作者(shines871)最新版——核心整包換上游原文、資產鏡像、套錨點補丁、重產 manifest/版本、smoke。當使用者說「同步原版」「同步上游」「更新上游」「跟進原作者」或 /sync-upstream 時使用。 |
本 repo 架構=「上游原版鏡像+外掛層」(見 CLAUDE.md)。同步=整包蓋上游,我們的東西(afk-*.js、sw.js、scripts/、補丁)不在覆蓋範圍。舊的 3-way 逐功能移植 SOP 已作廢。
D:/otherPersonRepos/idle-lineage-class(upstream-checkpoint.json 的 localClone)。upstream-checkpoint.json 的 syncedUpstreamCommit(目前鏡像的上游 commit)。origin/main 最新(或使用者指定)。git -C <clone> fetch origin --quiet;TARGET=$(git -C <clone> rev-parse origin/main)。BASE==TARGET → 回報「原版無更新」結束。否則 git -C <clone> checkout -q $TARGET(sync 腳本讀的是 clone 的工作樹,必須真的 checkout)。git -C <clone> show BASE:js/00-data.js | grep -m1 GAME_VERSION vs TARGET)、diff --stat、assets 變動量。🚨 上游 commit message 全是「1」,一律讀 diff 本身。git -c core.quotepath=false ls-files -s assets public | sed 's/^[0-9]* \([0-9a-f]*\) [0-9]\t/\1\t/' | awk -F'\t' '{print $2"\t"$1}' | sort > /d/ppRepos/_scratch/ours.txt
git -C <clone> -c core.quotepath=false ls-files -s assets public | <同上> > /d/ppRepos/_scratch/up.txt
# 要複製 = 內容不同(join 比 sha) ∪ 上游新增(comm -13);要刪除 = 我方多出(comm -23)
tar -C <clone> -c -T <清單檔> | tar -x -C <本repo> # 中文檔名不經 exe 參數,安全
git rm -q --pathspec-from-file=<刪除清單>
afk-*.js scripts/ 確認外掛層沒引用要刪的檔(原則上不該有——assets 必須維持純鏡像,外掛引用上游既有檔)。git hash-object 對得上上游 sha。node scripts/sync-upstream.mjs <clone>——覆蓋核心 js/css → index.html=上游+scripts/afk-plugin-block.html → apply-core-patches.mjs → tools/gen-anim-manifest.js+gen-manifests.mjs+stamp-code-versions.mjs+stamp-sw-version.mjs → smoke-hooks.mjs。
apply-core-patches.mjs 的錨點字串/邏輯,重跑。改完 --check 全綠才算。check-save-io.mjs 失敗也會 exit 1:代表上游動了存檔寫入/壓縮(_lzSet/_lzGet/壓縮 Worker/_lzWorkerRev 那組),而 afk-synccompress(存檔即時壓縮)是直接覆寫 _lzSet、自己拼 "LZ1:"+compressToUTF16 的——格式或對帳機制一變,開著那支的玩家會被寫出讀不回來的存檔。處理:讀那幾支的 BASE..TARGET diff → 判斷 afk-synccompress 要不要跟著改(真有風險就先在 afk-toggles 把 synccompress 加 locked 鎖起來) → 確認安全後 node scripts/check-save-io.mjs --accept 收下新基準再續。grep -nE "^<<<<<<< |^>>>>>>> |^=======$" index.html sw.js afk-*.js 為空;每支外掛 index.html 引用恰一次;apply-core-patches.mjs --check exit 0;stamp-code-versions.mjs --check exit 0。upstream-checkpoint.json 由 sync 腳本自動更新(syncedUpstreamCommit/syncedAt/note;讀 clone 的 git rev-parse HEAD)——確認它有跟著變即可,不必手動改。chore(sync): 同步上游原版 vX→vY (<sha7>))。不主動 push(照 CLAUDE.md commit 節奏;push 時走 /prepush)。/update-wiki(以 BASE..TARGET 的遊戲資料 diff 為範圍)。.github/workflows/sync-upstream.yml,只有 workflow_dispatch;定時由 cf-sync-trigger/ 的 Cloudflare Worker 每天台灣 18:20 觸發)做同一件事並直推 main+發 Release(標題帶原作者版本號);assets 用 rsync --delete——所以 assets/public 絕不可放我方獨有檔。CI 已會自動更新 checkpoint(sync 腳本內建);本機跑完腳本 checkpoint 也已自動更新,不必手動改。