feat(km-wiki-ingest): 新增無人值守 drainer runtime(cursor + cron + Gitea webhook)

Phase b:把 ingest 從手動直驅升級成真無人值守。drainer/ 是 workflow
km_wiki_ingest_drain 的可部署執行體(Cloudflare Worker),復用已 live 的
arcrun-code/kbdb/graph、不改 cypher-executor。

- 兩觸發共用 processCard 核心:(A) cron drain(Gitea tree 列卡→游標後取一小批→
  逐卡處理→進游標→到底回捲;撐 5,083 檔);(B) Gitea push webhook→只處理 delta。
- 游標存 KBDB 一個 ingest_cursor entry(走 API、零建表)。冪等:未改卡 entry
  (page_name+content_hash)/triplet(uri+hash) 皆 skip,只有新/改卡真寫。
- src/usercode.ts 由 workflow.yaml parse_card.code 抽出(單一真相源 card-to-envelope.mjs)。
- 維持非-auto:wrangler.toml 的 cron trigger 預設註解(不自走),drain 走 POST /drain。
  scheduled handler 已在 code,leo 過閘後取消註解即開自走。README 記部署/secret/webhook 設定。

已部署 leo21c:arcrun-km-wiki-drainer.leo21c.workers.dev。以 wrangler dev(本地 miniflare
+ .dev.vars token,非 secret 寫入)對 live 服務驗證:cron drain 冪等全 skip、游標前進+回捲、
webhook delta 只寫變更卡、三模式命中新卡。GITEA_TOKEN secret 需 leo 於互動模式設(auto 擋 secret 寫入)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HJiLCRUU2o3aSpPEzVCt2o
This commit is contained in:
kbdb-cc
2026-07-06 09:13:03 +00:00
parent befc63cfe0
commit 88b7fbf409
9 changed files with 1948 additions and 1 deletions
@@ -0,0 +1,22 @@
name = "arcrun-km-wiki-drainer"
main = "src/index.ts"
compatibility_date = "2025-02-19"
workers_dev = true
# ⚠️ 維持「非-auto」:預設不註冊 cron trigger(不自走排程、不無人值守亂寫)。
# drain 以 POST /drain 手動觸發(與 scheduled handler 同核心)。
# 要開自走 Phase 0 backfillleo 過閘後,取消下面兩行註解再 deployscheduled handler 已在 code)。
# [triggers]
# crons = ["*/5 * * * *"]
[vars]
REPO = "Leo/notes"
REF = "main"
OWNER = "leo"
CARDS_ROOT = "system-dev/wiki/cards"
CODE_WORKER_URL = "https://arcrun-code.leo21c.workers.dev/"
KBDB_URL = "https://arcrun-kbdb.leo21c.workers.dev"
GRAPH_URL = "https://kbdb-graph-plugin.leo21c.workers.dev"
GRAPH_KEY = "leo"
BATCH_SIZE = "2"
# secretwrangler secret put):GITEA_TOKEN(必),GITEA_WEBHOOK_SECRET(選)