chore(deps): httpx 全面迁移到 httpx2,SOCKS5 改用原生代理,升级 LLM SDK 大版本

- 依赖 httpx[socks] 换为 httpx2[socks]>=2.15,移除 httpx-socks / python-socks 及其 mypy 覆盖
- backend/src、ab_sdk、e2e 与单元测试统一使用 httpx2(异常类与 httpx 不通用)
- request_url 与 LLM 客户端工厂合并为 proxy_url(),SOCKS5 走 httpx2 原生代理(主机名由代理解析)
- 保留 #1104 过期连接池替换:httpcore2 2.15.1 的 start_tls 失败路径仍会泄漏隧道
- 日志同时压低 httpx2 与 httpx(google-genai、mcp 仍依赖旧 httpx)
- openai 3.35.1 / anthropic 1.15.0 / google-genai 2.31.0;结构化解析改用 chat.completions.parse
- ab_sdk 升到 0.6.0,客户端类型改为 httpx2.AsyncClient,同步插件文档
This commit is contained in:
Estrella Pan
2026-10-20 10:56:32 +02:00
parent 2ea56c50c6
commit ca7fcdf058
49 changed files with 459 additions and 440 deletions

View File

@@ -3,8 +3,8 @@
`ab-plugin` is installed with the `autobangumi-sdk` wheel. It depends only on `ab_sdk`. You do not need to install AutoBangumi.
```bash
uv tool install ./autobangumi_sdk-0.5.0-py3-none-any.whl
# or in a project: uv add ./autobangumi_sdk-0.5.0-py3-none-any.whl
uv tool install ./autobangumi_sdk-0.6.0-py3-none-any.whl
# or in a project: uv add ./autobangumi_sdk-0.6.0-py3-none-any.whl
```
The wheel is an attachment of the 4.0 beta and stable GitHub releases. It is not on PyPI. Refer to [Get the SDK](/en/dev/plugins/sdk). The contract tests need pytest. The `pyproject.toml` that `new` creates already has pytest in its `dev` dependency group. For a project that you make yourself, use `uv add --dev pytest` (or install `autobangumi-sdk[test]`).
@@ -65,7 +65,7 @@ ab-plugin dev [path] [--config-dir config]
```bash
ab-plugin new my-notify --kind notifier
cd my-notify
uv add ../autobangumi_sdk-0.5.0-py3-none-any.whl # one time only
uv add ../autobangumi_sdk-0.6.0-py3-none-any.whl # one time only
uv run pytest # contract tests
ab-plugin dev . --config-dir /path/to/autobangumi/config # link and enable hot reload; restart AB one time
# change code -> AB reloads -> check in the WebUI

View File

@@ -27,6 +27,7 @@ class MyPlugin(Plugin):
## Notes
- `ProviderInfo` drives the frontend form and the provider list. `auth_kind` is `api_key`, `oauth` or `device_code`.
- An adapter gets the model name, key, `base_url`, timeout and a proxy-aware httpx client factory through `AdapterContext`. It does not read the global configuration.
- An adapter gets the model name, key, `base_url`, timeout and a proxy-aware httpx2 client factory through `AdapterContext`. It does not read the global configuration.
- The factory returns an `httpx2.AsyncClient` (since SDK 0.6; before, it was `httpx`). To catch network errors, use `httpx2.HTTPError` and related classes. The `httpx` exception classes do not catch its errors.
- A subscription-type provider (`oauth` / `device_code`) implements the auth flow hooks (`AuthChallenge`, `TokenSet`). When the credentials are no longer valid and the refresh fails, raise `AuthExpiredError`. AB then trips the breaker for this provider and sends an `llm_auth_failure` event.
- Existing LLM plugins in the `plugin.json` format (released as `llm-plugins`) still work. New plugins use `plugin.toml` and this extension point.

View File

@@ -7,16 +7,16 @@ The plugin SDK is not on PyPI. Each 4.0 beta and stable [GitHub release](https:/
| `autobangumi_sdk-<SDK version>-py3-none-any.whl` | The `ab_sdk` package and the `ab-plugin` command |
| `autobangumi-plugin-skill-<AB version>.zip` | A plugin-development skill for AI coding assistants |
The wheel file name contains the SDK version (`ab_sdk.SDK_VERSION`, for example `0.5.0`). It does not contain the AB version. Download the wheel from the release of your target AB version, so that the two SDK versions are the same. The `sdk` range in the plugin manifest (for example `">=0.5,<1"`) must include this version.
The wheel file name contains the SDK version (`ab_sdk.SDK_VERSION`, for example `0.6.0`). It does not contain the AB version. Download the wheel from the release of your target AB version, so that the two SDK versions are the same. The `sdk` range in the plugin manifest (for example `">=0.5,<1"`) must include this version.
## Install the wheel
The wheel needs Python 3.13 or later. It depends on `pydantic`, `httpx` and `packaging`. You do not need to install AutoBangumi.
The wheel needs Python 3.13 or later. It depends on `pydantic`, `httpx2` and `packaging`. You do not need to install AutoBangumi.
To use only the command line, install the wheel as a global tool:
```bash
uv tool install ./autobangumi_sdk-0.5.0-py3-none-any.whl
uv tool install ./autobangumi_sdk-0.6.0-py3-none-any.whl
ab-plugin --help
```
@@ -24,7 +24,7 @@ To write a plugin and run its tests, add the wheel as a dependency of the plugin
```bash
cd my-plugin
uv add ../autobangumi_sdk-0.5.0-py3-none-any.whl
uv add ../autobangumi_sdk-0.6.0-py3-none-any.whl
uv run pytest
```