一键导入
track-round
Flight Arc「抓取一輪」FR24 資料工作流:fetch-flights → fetch-tracks → split-tracks → 同步文件 → 上傳 S3。當使用者說「抓下一輪」「抓軌跡」「fetch tracks」「抓 XX 機場的資料」「接續抓取」「補抓軌跡」「跑一輪抓取」時觸發。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Flight Arc「抓取一輪」FR24 資料工作流:fetch-flights → fetch-tracks → split-tracks → 同步文件 → 上傳 S3。當使用者說「抓下一輪」「抓軌跡」「fetch tracks」「抓 XX 機場的資料」「接續抓取」「補抓軌跡」「跑一輪抓取」時觸發。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Session 結束後收尾的 skill。當使用者說 /wrap-up、「收工」、「收尾」、「session 結束」、「做完了」、「整理記憶」時觸發。讀本 session 脈絡 + git log + 現有文件 → 更新三個活的地方(docs/backlog/ 狀態檔、README 覆蓋表、auto-memory)→ 產出 diff 給用戶 review → atomic commit → 不自動 push。
Flight Arc YouTube 影片製作全流程:錄影(HQ 逐幀匯出)+ 後製(轉檔、合成音樂、偵測停頓、裁切)。當使用者說「錄影」「錄製影片」「匯出影片」「HQ 匯出」「合成影片」「合成音樂」「轉影片」「檢查停頓」「做 YouTube 影片」「做最終影片」時觸發。
| name | track-round |
| description | Flight Arc「抓取一輪」FR24 資料工作流:fetch-flights → fetch-tracks → split-tracks → 同步文件 → 上傳 S3。當使用者說「抓下一輪」「抓軌跡」「fetch tracks」「抓 XX 機場的資料」「接續抓取」「補抓軌跡」「跑一輪抓取」時觸發。 |
| user_invocable | true |
FR24 Essential 方案限制:300 筆/次、30 次/分鐘、666,000 credits/月。
若這次是在推進「全球前 1000 大機場 2/18 軌跡」戰役(65,421 條 ≈ 2.62M credits ≈ 4 個月),走這個特化迴圈:跳過 Step 1(1000 座時刻表已全掃完)、日期固定 2026-02-18、按 rank 分批、--max-credits 封頂。每個 session:
# 0. 一鍵看狀態(現算:進度/目前批次/本週期額度/漂移警告/建議指令)
npx tsx scripts/campaign-status.ts
# 有漂移警告(沒 split / 沒上 S3)→ 先補做再抓
# 1. 照它印的「建議指令」跑(--rank 與 --max-credits 已算好);務必先 --dry-run 確認 todo
caffeinate -dims npx tsx scripts/fetch-tracks.ts --airports-file scripts/top1000-airports.json \
--rank <目前批次> --from-time 2026-02-17T16:00:00Z --to-time 2026-02-18T16:00:00Z \
--max-credits <算好的值> 2>&1 | tee scripts/_p2-batch.log
# ⚠️ 用 --from-time/--to-time(台北整日跨兩個 UTC 日),別用 --date(會漏掉 UTC 2/17 那 1/3)
# ⚠️ macOS 睡眠 → caffeinate;背景長工約 30-70 分被環境回收,track-done 保證中斷零損失、可隨時續跑
# 2. 補救網路 blip:track-failed 新增的 id → scripts/retry-targets.txt → retry-failed-tracks.ts
# 3. 重建 manifest:NODE_OPTIONS="--max-old-space-size=12288" npx tsx scripts/split-tracks.ts
# 4. 同步 README 覆蓋表 + data-fetching-status.md(campaign 進度不用手改,campaign-status 現算)
# 5. 上傳:npm run s3:upload(→ Zeabur 端 sh /app/scripts/pull-from-s3.sh)
# 6. commit scripts/fetch-sessions.ndjson + campaign-top1000.json(帳本進 git = 跨月審計)
fetch-tracks 每次跑完自動 append 一行到 scripts/fetch-sessions.ndjson(含 SIGINT / circuit breaker)。月額度重置後,從 FR24 dashboard 讀實際餘額,更新 campaign-top1000.json 的 budget.manual_remaining / manual_remaining_as_of。campaign-status.ts 掃 scripts/flights vs track-done 得出。docs/backlog/data-fetching-status.md 最上方「🔖 下次接續」。讀 docs/backlog/data-fetching-status.md:
若接力點只差軌跡(時刻表已抓),直接跳 Step 2。
npx tsx scripts/fetch-flights.ts \
--from 2026-02-17 --to 2026-03-02 \
--airports VTBS,VTBD
--from / --to — 日期範圍(YYYY-MM-DD 或 ISO)。⚠️ 是 --from/--to,不是 --from-time/--to-time(那是 fetch-tracks 的);誤用會 fallback 成「今天往前 3 天」--airports A,B,C — 覆蓋預設(預設 = 台灣 22 座)--airports-file path — 讀 JSON 清單(如 scripts/top1000-airports.json)--direction outbound|inbound|both — 預設 outbound(單向、零重複命中)--batch-size N — 跑 N 座機場後自動停(0 = 不停)--range A-B — 只跑清單中第 A~B 座(1-based 含頭含尾)scripts/flights/{ICAO}/{YYYY-MM-DD}.json 優先;legacy scripts/flight-list.json fallback# 先 dry-run 估數量
npx tsx scripts/fetch-tracks.ts --airports KSEA,ZBAA --dry-run
# 正式跑(可加 ISO 精準時區過濾)
npx tsx scripts/fetch-tracks.ts \
--airports KSEA,ZBAA,ZBAD \
--from-time 2026-02-17T16:00:00Z --to-time 2026-02-18T16:00:00Z
scripts/track-done.ndjson 的 fr24_id 不重抓(全域、跨 session)public/tracks/airports/{ICAO}.jsonl(dep + dest 各一份)public/tracks/raw/{YYYY-MM}/{ab}/{fr24_id}.json.gzscripts/track-failed.ndjson。網路 blip 造成的大量失敗用:
# 把要重試的 fr24_id 寫進 scripts/retry-targets.txt,然後
npx tsx scripts/retry-failed-tracks.ts # 帶 3 次網路 retry,歷史救回率 99.7%
剩下的才是真 404。# 完整跑(資料量大,預設 4GB heap 會 OOM,必加 NODE_OPTIONS)
NODE_OPTIONS="--max-old-space-size=12288" npx tsx scripts/split-tracks.ts
# 只重建 manifest(串流統計、低記憶體,避 OOM 的輕量選項)
npx tsx scripts/split-tracks.ts --manifest-only
airports/*.jsonl 做 dedupe + 產生 regions/*.jsonl + manifest.json--manifest-only 不重寫 region 檔(regions 沿用既有值);有新增 region 機場時要跑完整版scripts/pull-from-s3.sh 的 for R in ... 是 hardcode 清單,必須同步加上新 region,否則 Zeabur 拉不到(UK、CN 都曾漏加)npx tsx scripts/build-airport-points.ts 更新 public/airport-points.geojson(機場 metadata,Location 面板 + Atlas 星圖共用;讀 manifest.json,須在 split 之後)新機場群要在 UI 完整顯示,資料 / UI / 邊界三層缺一不可,缺了會像「沒抓到」:
public/tracks/airports/*.jsonl)src/map/cameraPresets.ts 加 AIRPORT_INFO + CAMERA_PRESETS(缺了機場 dropdown 不顯示);新地區記得更新 overview presetnpx tsx scripts/fetch-airport-boundaries.ts --icao A,B,C 更新 public/airports.geojson(找不到 aerodrome polygon 會自動 fallback 成 runway-buffer 矩形;腳本走 curl,勿改回 Node fetch — 對 Overpass 會 ETIMEDOUT)改完跑 npm run typecheck 再 commit。
數字一律以重建後的 public/tracks/manifest.json 為準:
wc -l scripts/track-done.ndjson)、機場 JSONL 數、Top 15 機場、最後更新日docs/backlog/data-fetching-status.md — 更新狀態欄、把完成項從接力點/目標清單移到「最近完成」、記新接力點project_fetch_resume_point.md — 若這輪沒抓完,記下接力指令# 增量上傳(對照 scripts/upload-state.json 的 mtime;--force 全部重傳)
npm run s3:upload
# Zeabur 終端機執行(Alpine 容器無 bash 且 WORKDIR=/,須 sh + 絕對路徑)
sh /app/scripts/pull-from-s3.sh
軌跡資料不進 git,S3 路徑 migu-gis-data-collector/flight-arc/。
前一天T16:00:00Z ~ 當天T16:00:00Z