feat(v1.8.0): 稳定性修复 + AI Agent 体验增强
稳定性修复: - 修复 cache.py SQLite 连接泄漏(contextlib.closing 包装) - 修复 fetch.py requests stream=True 连接泄漏(try/finally resp.close()) - RETRYABLE_STATUS 新增 403,激活 UA fallback 切换逻辑 - --cache-stats 移至实例解析前,无需实例即可查询 - classify_error 从错误消息提取 HTTP 状态码,正确分类 E_AUTH/E_RATE_LIMIT - --stream 与 --queries-file 互斥检查,违规报 E_INPUT - batch 退出码语义统一(0=有结果 / 1=全部错误 / 2=全部空结果) AI Agent 体验增强: - 错误码体系完善:E_CONFIG/E_AUTH/E_NETWORK/E_RATE_LIMIT/E_PARSE/E_EMPTY/E_INPUT/E_INTERNAL - recovery_hint 恢复提示字段,AI Agent 可程序化决策恢复策略 - stream 模式新增 error 事件类型(含 error_code + recovery_hint) - 进度事件扩展:instance_try/instance_ok/instance_fail - batch 模式统一 schema(status 字段区分 success/failed) - JSON 输出含 schema_version 字段确保版本兼容 测试与文档: - 测试覆盖:330 -> 352 - SKILL.md / README.md 同步更新
This commit is contained in:
@@ -143,8 +143,10 @@ def test_non_retryable_404():
|
||||
assert is_retryable_error(_http_error(404)) is False
|
||||
|
||||
|
||||
def test_non_retryable_403():
|
||||
assert is_retryable_error(_http_error(403)) is False
|
||||
def test_retryable_403():
|
||||
# 403 是可重试的:让 fetch_url 的 UA-fallback 循环有机会切换到浏览器 UA。
|
||||
# 真正的认证错误会在重试耗尽后由 classify_error 归为 E_AUTH。
|
||||
assert is_retryable_error(_http_error(403)) is True
|
||||
|
||||
|
||||
def test_non_retryable_200():
|
||||
@@ -160,7 +162,8 @@ def test_retryable_os_error():
|
||||
|
||||
|
||||
def test_retryable_status_set_contents():
|
||||
assert RETRYABLE_STATUS == frozenset({429, 502, 503, 504})
|
||||
# 403 加入可重试集合,让 UA-fallback 在 UA 被屏蔽时有机会切换浏览器 UA
|
||||
assert RETRYABLE_STATUS == frozenset({403, 429, 502, 503, 504})
|
||||
|
||||
|
||||
# ----- apply_proxy -----
|
||||
|
||||
Reference in New Issue
Block a user