Files
Estrella Pan ca7fcdf058 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,同步插件文档
2026-10-20 10:56:32 +02:00

74 lines
3.9 KiB
Markdown

# The ab-plugin Command
`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.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]`).
## new
```bash
ab-plugin new <id> [--kind rename|notifier|search] [--dir .]
```
Creates the directory `<id>/`:
```
<id>/
├── plugin.toml
├── <id with underscores>/__init__.py # plugin code
├── tests/test_contract.py # inherits a suite from ab_sdk.testing
├── pyproject.toml # for development only; not packed
└── README.md
```
The `id` can contain only lowercase letters, digits and hyphens. The command refuses if the directory exists. There is no downloader skeleton. A downloader needs a real backend, so a skeleton that passes the contract has no value.
The `pyproject.toml` that `new` creates needs `autobangumi-sdk`. This package is not on PyPI. Before you run `uv run pytest`, run `uv add <path to the wheel>` one time in the plugin directory. Then uv uses the local wheel for this dependency.
## validate
```bash
ab-plugin validate [path]
```
Checks the manifest fields, that the `sdk` range includes the current SDK, that the entry module exists and that the frontend entry files exist. It refuses a directory that has native extensions (`.so` / `.pyd` / `.dylib` / `.dll`). The exit code is 1 if there are problems.
## pack
```bash
ab-plugin pack [path] [-o dist]
```
Validates, then creates `dist/<id>-<version>.zip`. The content is at the root of the zip, the same layout as a signed-catalog package. `tests/`, `pyproject.toml`, `uv.lock`, `dist/`, `.venv`, `.git`, `node_modules`, caches and `.pyc` files are excluded. File order and timestamps are fixed, so the same content gives the same sha256.
## dev
```bash
ab-plugin dev [path] [--config-dir config]
```
- Validates, then links the plugin directory to `<config-dir>/plugins/local/<id>` with a symlink.
- The default `--config-dir` is `config` in the current directory. When you run the command in the plugin directory, set it to the config directory of AB (`backend/src/config` when you run AB from source).
- The symlink points to the absolute path of the plugin directory. AB must be able to open that same path, for example when you run AB from source. When AB runs in Docker, copy or mount the plugin directory to `config/plugins/local/<id>/` in the container. Then turn on "Allow unsigned plugins" in Settings → Plugins and enable the plugin.
- Writes `plugins.dev_mode`, `plugins.allow_unsigned` and `plugins.enabled.<id>` in the host config file (`config_dev.json` first, then `config.json`).
- Refuses if no config file exists. Start AutoBangumi one time first.
- A running AB does not re-read the config file. Restart it one time. After that, `dev_mode` checks the local plugin directories each second. When a file changes, AB reloads that plugin. AB also watches a plugin that failed to load, so it recovers after you fix the source.
- `dev_mode` watches local directories only. It does not watch pip packages. It does not find new plugin directories until the next config change or restart.
## Development loop
```bash
ab-plugin new my-notify --kind notifier
cd my-notify
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
ab-plugin pack .
```