fix(kiro): 加固 Kiro adapter 错误处理与请求构建逻辑

- 提取 request.py 统一 URL/headers/payload 构建,消除 handler_adapter_base 与 envelope 的重复逻辑
- 新增 error_enhancer 模块,分类 HTTP 状态码与连接错误,增强上游错误诊断信息
- envelope 实现 extract_error_text / on_http_status / on_connection_error,透传错误上下文到 eventstream rewriter
- KiroRequestContext 扩展错误状态字段,支持网络诊断信息传递
- provider_oauth_utils 改用 importlib 动态加载,避免 core 层对 services 的静态依赖
- idc auth_method 下跳过 profileArn,修复 usage 查询参数

Closes #247

Co-authored-by: AAEE86 <ppk0227@hotmail.com>
This commit is contained in:
fawney19
2026-03-19 13:54:40 +08:00
parent ddd6adbcf7
commit a8620e133a
17 changed files with 717 additions and 121 deletions

View File

@@ -855,8 +855,6 @@ async def test_antigravity_refresher_success_resets_forbidden_flag(
async def test_kiro_refresher_runtime_401_marks_key_invalid(
monkeypatch: pytest.MonkeyPatch,
) -> None:
from src.services.provider_keys.quota_refresh import kiro_refresher as module
class _Banned(Exception):
pass
@@ -881,7 +879,10 @@ async def test_kiro_refresher_runtime_401_marks_key_invalid(
"src.services.proxy_node.resolver",
{"resolve_effective_proxy": lambda provider_proxy, key_proxy: None},
)
monkeypatch.setattr(module.crypto_service, "decrypt", lambda _v: "{}")
monkeypatch.setattr(
"src.services.provider_keys.quota_refresh.kiro_refresher.crypto_service.decrypt",
lambda _v: "{}",
)
db = _FakeDB()
key = SimpleNamespace(
@@ -919,8 +920,6 @@ async def test_kiro_refresher_runtime_401_marks_key_invalid(
async def test_kiro_refresher_success_updates_metadata_and_auth_config(
monkeypatch: pytest.MonkeyPatch,
) -> None:
from src.services.provider_keys.quota_refresh import kiro_refresher as module
class _Banned(Exception):
pass
@@ -945,8 +944,14 @@ async def test_kiro_refresher_success_updates_metadata_and_auth_config(
"src.services.proxy_node.resolver",
{"resolve_effective_proxy": lambda provider_proxy, key_proxy: None},
)
monkeypatch.setattr(module.crypto_service, "decrypt", lambda _v: json.dumps({"seed": 1}))
monkeypatch.setattr(module.crypto_service, "encrypt", lambda raw: f"ENC:{raw}")
monkeypatch.setattr(
"src.services.provider_keys.quota_refresh.kiro_refresher.crypto_service.decrypt",
lambda _v: json.dumps({"seed": 1}),
)
monkeypatch.setattr(
"src.services.provider_keys.quota_refresh.kiro_refresher.crypto_service.encrypt",
lambda raw: f"ENC:{raw}",
)
key = SimpleNamespace(
id="k1",