Commit History
-
feat: factory_mode 三模式(intercept/mock/real) — 空壳工厂页, 签发与目标站页面解耦
经 hf_reco/poc_mock_factory.py 三臂对照实验验证(真实页/host映射/route拦截 均签发+消费 200): - intercept(默认): route 拦截, 空壳页纯内存承载, 零基础设施, 不访问目标站 - mock: host-resolver-rules 域名映射 + 容器内本地 HTTPS 空壳页(自签证书), 不经 CDP 拦截层 - real: 真实工厂页(旧行为, 保底); 三模式均可在面板热切, mock<->其他自动回收浏览器重建 - 本地全链路冒烟: intercept/mock 两模式签发+消费 200 通过 - requirements: +cryptography==50.0.1(mock 模式自签证书用)8088875
-
deploy: update
0231737
-
config: switch factory page Kimi-K3 -> gemma-4-26B-A4B-it
Tokens are universal across routable models, so the factory page only determines where Turnstile executions happen. gemma-4-26B-A4B-it is the smallest (4B active) and least-contended entry in the current routable set; this keeps signing pressure off hot models (Kimi-K3 got per-model rate-limited under dense signing).1481207 -
config: restore deployed defaults WORKER_PAGES=3 SHELF_SIZE=30
These were the tuned production defaults in the previous deployed config.py; keep them as the in-repo defaults (with ADAPTIVE_SHELF on, SHELF_SIZE now acts as a peak cap, not a always-on stock level).5281872 -
feat(pool): self-healing hardening — adaptive shelf, worker health recycle, browser recycle, error visibility, rate limit
- fix: _wake() passed non-coroutine to create_task and called notify_all without the condition lock -> PUT /api/config 500 on token_max_age / idle_pause hot edits. Now wraps a proper coroutine holding the lock. - pool.last_error: most recent pool-level failure (worker start failure, sign-failure recycle, supervisor cycle, browser recycle) is exposed via /api/stats, /api/public/status and the read-only status page. - worker health: consecutive sign failures >= 5 recycles the page; keeper rebuilds it. Browser context missing -> keeper relaunches everything. - adaptive shelf: stock target = QPS(5min window) x avg sign latency + 1, capped by SHELF_SIZE; idles down instead of burning Turnstile at a fixed large level (ADAPTIVE_SHELF env, default on). - periodic browser recycle after BROWSER_MAX_AGE (default 12h) during idle windows; shelf tokens survive since they are plain strings. - probe results cached to probe_cache.json (PROBE_CACHE_TTL, default 6h). - ISSUE_TIMEOUT env …2d8e7b4
-
Update config.py
Verified signaturea5ddd9d -
Upload 8 files
Verified signaturef4541b6