feat: log cmhub download diagnostics in GenerateWorker

GUI 半边配合 ai.py 的 cmhub 下载诊断:格式化「图片下载较慢」warning、
`cover_image_url` 调试行(脱敏 token、debug_only 不写入 SQLite run_log);
`_log_run_event` 增加 persist 开关。tests/test_gui.py 覆盖脱敏与不持久化。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
chengma
2026-07-08 00:41:44 +08:00
co-authored by Claude Opus 4.8
parent 5a09c6662e
commit 979112966e
2 changed files with 46 additions and 3 deletions
+21 -3
View File
@@ -159,7 +159,12 @@ class GenerateWorker(BaseWorker):
message = self._format_generation_event(payload)
if not message:
return
self._log_run_event(message, task=task, level=payload.get("level") or "info")
self._log_run_event(
message,
task=task,
level=payload.get("level") or "info",
persist=not bool(payload.get("debug_only")),
)
def _remember_cmhub_metadata(self, payload):
metadata = payload.get("metadata")
@@ -195,10 +200,15 @@ class GenerateWorker(BaseWorker):
return f"[停止] {self._task_plain_label(task)} 标题生成已取消"
return None
if phase == "cover":
if result == "debug" and step == "cover_image_url":
debug_detail = self._debug_detail(payload.get("detail"))
return f"[调试] {self._task_progress_label(task)} {debug_detail}"
if result == "start" and step == "cover_submit":
return f"[图片] {self._task_progress_label(task)} 开始生成"
if result == "success" and step == "cover_request":
return f"[图片] {self._task_progress_label(task)} {detail or 'cmhub 已返回,耗时未知'}"
if result == "warning" and step == "cover_download":
return f"[图片] {self._task_progress_label(task)} {detail or '图片下载较慢'}"
if result == "success" and step == "cover_download":
return f"[图片] {self._task_progress_label(task)} {detail or '图片下载完成,耗时未知'}"
if result == "success" and step == "cover_save":
@@ -267,6 +277,14 @@ class GenerateWorker(BaseWorker):
return text[:177] + "..."
return text
def _debug_detail(self, detail):
if detail is None:
return ""
text = diagnostics.redact_log_text(str(detail)).replace("\r", " ").replace("\n", " ").strip()
if len(text) > 2000:
return text[:1997] + "..."
return text
def _format_generate_completion(self, summary):
progress = self._summary_text(summary)
billing_error = summary.get("billing_error") or {}
@@ -382,10 +400,10 @@ class GenerateWorker(BaseWorker):
except Exception:
return
def _log_run_event(self, message, task=None, level="info"):
def _log_run_event(self, message, task=None, level="info", persist=True):
safe_message = diagnostics.redact_log_text(message)
self.log.emit(str(safe_message))
if self._run_id is None:
if self._run_id is None or not persist:
return
try:
db.add_run_log_event(