diff --git a/README.md b/README.md index 409a98f..dca6664 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ | 平台 | 登录/账号准备 | 视频上传 | 图文上传 | 定时发布 | CLI | Skill | 说明 | | --- | --- | --- | --- | --- | --- | --- | --- | | 抖音 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 当前主线重构最完整 | -| Bilibili | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | 依赖 `biliup` | +| Bilibili | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | 运行时自动准备 `biliup` | | 小红书(浏览器版) | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | 当前仓库有浏览器 uploader | | 快手 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 浏览器自动化,CLI/Skill 初版已接入 | | 视频号 | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | 对应 `tencent_uploader` | @@ -49,6 +49,7 @@ - CLI 使用请看:[CLI 使用说明](./docs/CLI.md) - agent / skill 请看:[Douyin Upload Skill](./skills/douyin-upload/SKILL.md) - agent / skill 请看:[Kuaishou Upload Skill](./skills/kuaishou-upload/SKILL.md) +- agent / skill 请看:[Bilibili Upload Skill](./skills/bilibili-upload/SKILL.md) - 历史 Web 说明请看:[历史 Web 版本说明](./docs/legacy-web.md) - 其他单平台 skill 与整合型 skill 仍在开发中 - `requirements.txt` 目前主要用于历史兼容路径,普通用户不需要优先使用它 @@ -92,7 +93,7 @@ Web 端相关代码仍然保留,但已经不是当前主线,不保证可直 ### 方式 1:使用 CLI -当前抖音和快手已经完成 CLI 化: +当前抖音、快手、Bilibili 已经接入 CLI: ```bash sau douyin login --account creator @@ -104,8 +105,18 @@ sau kuaishou login --account creator sau kuaishou check --account creator sau kuaishou upload-video --account creator --file videos/demo.mp4 --title "示例标题" sau kuaishou upload-note --account creator --images videos/1.png videos/2.png videos/3.png --note "图文示例" + +sau bilibili login --account creator +sau bilibili check --account creator +sau bilibili upload-video --account creator --file videos/demo.mp4 --title "示例标题" --desc "示例简介" --tid 249 ``` +补充说明: + +- Bilibili CLI 不要求用户手动安装 `biliup` +- 首次运行相关命令时,程序会自动下载 `biliup` +- 后续运行会自动检查上游 release 并更新 + ### 方式 2:使用 examples 其他平台当前仍以 `examples/` 下的示例脚本为主,例如: @@ -198,6 +209,13 @@ sau kuaishou upload-note --account creator --images videos/1.png videos/2.png vi 4. Push到您的分支 (`git push origin feature/YourFeature`)。 5. 创建一个 Pull Request。 +## 🙏致谢 + +本项目的 Bilibili 上传能力基于开源项目 `biliup` 的能力进行接入与封装。 +感谢 `biliup` 项目及其贡献者提供的基础能力: + +- https://github.com/biliup/biliup + ## 📜许可证 本项目暂时采用 [MIT License](LICENSE) 开源许可证。 diff --git a/docs/CLI.md b/docs/CLI.md index 5292b66..1a0a755 100644 --- a/docs/CLI.md +++ b/docs/CLI.md @@ -4,6 +4,7 @@ - `douyin` - `kuaishou` +- `bilibili` 实现说明: @@ -12,6 +13,7 @@ - 如果需要给 OpenClaw、Codex 等 agent 使用,可参考仓库内 skill: - `skills/douyin-upload/` - `skills/kuaishou-upload/` + - `skills/bilibili-upload/` ## 安装 CLI 入口 @@ -26,6 +28,7 @@ uv pip install -e . ```bash sau douyin --help sau kuaishou --help +sau bilibili --help ``` ## 安装 patchright 浏览器 @@ -55,6 +58,20 @@ sau kuaishou upload-video --account creator --file videos/demo.mp4 --title "示 sau kuaishou upload-note --account creator --images videos/1.png videos/2.png videos/3.png --note "图文示例" --tags 图文,测试 ``` +## Bilibili CLI 子命令 + +```bash +sau bilibili login --account creator +sau bilibili check --account creator +sau bilibili upload-video --account creator --file videos/demo.mp4 --title "示例标题" --desc "示例简介" --tid 249 --tags 足球,测试 +``` + +补充说明: + +- `sau bilibili ...` 会自动准备 `biliup` +- 如果本地没有 `biliup`,第一次运行会自动下载 +- 如果上游 GitHub Release 有更新,运行时会先自动更新 + ## 登录二维码说明 - 抖音和快手登录过程中,CLI / uploader 可能会生成临时二维码图片 @@ -64,13 +81,14 @@ sau kuaishou upload-note --account creator --images videos/1.png videos/2.png vi ## 定时发布 -抖音和快手的视频、图文都支持 `--schedule`。只要传了 `--schedule`,CLI 就会自动切换到 `scheduled` 发布策略;不传则默认立即发布。 +抖音、快手、Bilibili 的视频上传都支持 `--schedule`。只要传了 `--schedule`,CLI 就会自动切换到对应平台的定时发布策略;不传则默认立即发布。 ```bash sau douyin upload-video --account creator --file videos/demo.mp4 --title "示例标题" --schedule "2026-03-24 21:30" sau douyin upload-note --account creator --images videos/1.png videos/2.png --note "图文示例" --schedule "2026-03-24 21:30" sau kuaishou upload-video --account creator --file videos/demo.mp4 --title "示例标题" --schedule "2026-03-24 21:30" sau kuaishou upload-note --account creator --images videos/1.png videos/2.png videos/3.png --note "图文示例" --schedule "2026-03-24 21:30" +sau bilibili upload-video --account creator --file videos/demo.mp4 --title "示例标题" --desc "示例简介" --tid 249 --schedule "2026-03-24 21:30" ``` ## 运行时参数 @@ -110,6 +128,17 @@ CLI 将 `debug` 和 `headless` 拆成了两个独立维度: --product-title 示例商品 ``` +Bilibili 额外要求: + +```bash +--desc "视频简介" +--tid 249 +``` + +- `--tid` 第一版是必填 +- `--tags` 会映射到 `biliup upload --tag` +- `--schedule` 会映射到 Bilibili 所需的时间戳参数 + ## 图文上传参数 ```bash @@ -123,4 +152,4 @@ CLI 将 `debug` 和 `headless` 拆成了两个独立维度: - 抖音:最多 35 张图片,不支持 GIF - 快手:支持多张图片,建议传真实不同文件,不要把同一路径重复多次 -后续维护 CLI 时,优先看 `sau_cli.py` 和 `uploader/`。 +后续维护 CLI 时,优先看 `sau_cli.py`、`uploader/` 和 `skills/`。 diff --git a/docs/install.md b/docs/install.md index 5744998..7e7a050 100644 --- a/docs/install.md +++ b/docs/install.md @@ -84,6 +84,7 @@ Windows 也可以直接手动复制并重命名。 sau --help sau douyin --help sau kuaishou --help +sau bilibili --help ``` 如果命令找不到,优先确认: @@ -108,6 +109,20 @@ sau kuaishou upload-video --account creator --file videos/demo.mp4 --title "示 sau kuaishou upload-note --account creator --images videos/1.png videos/2.png videos/3.png --note "图文示例" ``` +### 9. Bilibili 主线示例 + +```bash +sau bilibili login --account creator +sau bilibili check --account creator +sau bilibili upload-video --account creator --file videos/demo.mp4 --title "示例标题" --desc "示例简介" --tid 249 +``` + +补充说明: + +- 用户不需要手动安装 `biliup` +- 首次运行 Bilibili 相关命令时,程序会自动下载 `biliup` +- 后续运行会自动检查上游 release 并自动更新 + ## For AI Agents 如果你是一个可执行命令的 agent,请优先按下面顺序处理: @@ -140,6 +155,7 @@ PLAYWRIGHT_DOWNLOAD_HOST="https://npmmirror.com/mirrors/playwright" patchright i sau --help sau douyin --help sau kuaishou --help +sau bilibili --help ``` 6. 如果用户的目标是抖音或快手的登录、cookie 校验、视频上传、图文上传,优先走 CLI: @@ -154,6 +170,10 @@ sau kuaishou login sau kuaishou check sau kuaishou upload-video sau kuaishou upload-note + +sau bilibili login +sau bilibili check +sau bilibili upload-video ``` 7. 如果用户明确在使用 skill 系统,再引导其阅读: @@ -162,6 +182,8 @@ sau kuaishou upload-note - `skills/douyin-upload/references/cli-contract.md` - `skills/kuaishou-upload/SKILL.md` - `skills/kuaishou-upload/references/cli-contract.md` +- `skills/bilibili-upload/SKILL.md` +- `skills/bilibili-upload/references/cli-contract.md` ### 对 agent 的额外说明 @@ -172,3 +194,4 @@ sau kuaishou upload-note - `uploader/` 是核心实现目录 - `sau_cli.py` 是当前 CLI 主入口 - `docs/legacy-web.md` 是历史 Web 版本说明,不保证当前可用 +- Bilibili 首次运行时可能自动下载 `biliup` diff --git a/docs/superpowers/plans/2026-03-25-bilibili-cli-implementation.md b/docs/superpowers/plans/2026-03-25-bilibili-cli-implementation.md new file mode 100644 index 0000000..379675a --- /dev/null +++ b/docs/superpowers/plans/2026-03-25-bilibili-cli-implementation.md @@ -0,0 +1,458 @@ +# Bilibili CLI Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** 为 Bilibili 补齐和抖音、快手同层级的 `sau` CLI、自动更新 `biliup` 的运行时机制、对应 skill,以及完整文档与上游致谢说明。 + +**Architecture:** 保持轻量,不新建大而全框架。新增一个 Bilibili 运行时模块负责检查 GitHub Release、下载/更新 `biliup`、执行命令;`sau_cli.py` 仅补 `bilibili` 子命令和参数映射;skill、example、README/CLI/install/update 文档按现有 Douyin/Kuaishou 结构对齐。 + +**Tech Stack:** Python 3.10+, `requests`, `argparse`, `asyncio`, `subprocess`, `pathlib`, `unittest`, GitHub Releases, existing `biliup` integration + +--- + +## File Structure + +### New files + +- `uploader/bilibili_uploader/runtime.py` + - Bilibili 运行时入口 + - 负责 `biliup` 自动检查、自动下载、自动更新、执行命令 +- `tests/__init__.py` + - 测试包初始化 +- `tests/test_bilibili_runtime.py` + - 测试自动更新、下载、缓存复用、执行器行为 +- `tests/test_sau_bilibili_cli.py` + - 测试 `sau bilibili` parser 和 dispatch 行为 +- `skills/bilibili-upload/SKILL.md` + - Bilibili CLI skill 主说明 +- `skills/bilibili-upload/references/runtime-requirements.md` + - 运行前提和自动下载说明 +- `skills/bilibili-upload/references/cli-contract.md` + - `sau bilibili ...` 命令契约 +- `skills/bilibili-upload/references/troubleshooting.md` + - 常见问题与排障 +- `skills/bilibili-upload/scripts/examples/bilibili_commands.ps1` + - PowerShell 示例命令 +- `skills/bilibili-upload/scripts/examples/bilibili_commands.sh` + - shell 示例命令 +- `skills/bilibili-upload/scripts/examples/bilibili_cli_template.py` + - Python 调用模板 + +### Modified files + +- `sau_cli.py` + - 补 `bilibili` 子命令 + - 复用现有 `resolve_account_file()`、`parse_tags()`、`parse_schedule()` +- `examples/get_bilibili_cookie.py` + - 对齐新的 `sau bilibili login` 用法 +- `examples/upload_video_to_bilibili.py` + - 对齐新的 CLI/账号文件约定 +- `README.md` + - 补 Bilibili CLI 用法、自动下载说明、致谢说明 +- `docs/CLI.md` + - 补 `sau bilibili login/check/upload-video` +- `docs/install.md` + - 补 Bilibili 自动下载/首次运行说明 +- `docs/update.md` + - 补 Bilibili 自动更新行为说明 + +## Task 1: Bilibili 自动更新运行时 + +**Files:** +- Create: `uploader/bilibili_uploader/runtime.py` +- Create: `tests/__init__.py` +- Create: `tests/test_bilibili_runtime.py` + +- [ ] **Step 1: 写 Bilibili 运行时测试** + +使用 `unittest`,覆盖这些最小路径: + +```python +import unittest +from pathlib import Path +from unittest.mock import Mock, patch + +from uploader.bilibili_uploader.runtime import ( + build_biliup_runtime_path, + ensure_biliup_binary, + run_biliup_command, +) + + +class BiliupRuntimeTests(unittest.TestCase): + def test_build_biliup_runtime_path_returns_platform_path(self): + path = build_biliup_runtime_path("Windows") + self.assertTrue(str(path).endswith("biliup.exe")) + + @patch("uploader.bilibili_uploader.runtime.fetch_latest_release") + def test_ensure_biliup_binary_downloads_when_missing(self, mock_release): + mock_release.return_value = { + "tag_name": "v1.0.0", + "asset_url": "https://example.invalid/biliup.exe", + "asset_name": "biliup.exe", + } + with patch("uploader.bilibili_uploader.runtime.download_biliup_asset") as mock_download: + ensure_biliup_binary(force_check=True) + mock_download.assert_called_once() + + @patch("uploader.bilibili_uploader.runtime.fetch_latest_release") + def test_ensure_biliup_binary_reuses_local_when_up_to_date(self, mock_release): + mock_release.return_value = { + "tag_name": "v1.0.0", + "asset_url": "https://example.invalid/biliup.exe", + "asset_name": "biliup.exe", + } + with patch("uploader.bilibili_uploader.runtime.read_local_biliup_version", return_value="v1.0.0"): + with patch("uploader.bilibili_uploader.runtime.download_biliup_asset") as mock_download: + ensure_biliup_binary(force_check=True) + mock_download.assert_not_called() + + @patch("uploader.bilibili_uploader.runtime.subprocess.run") + def test_run_biliup_command_returns_completed_process(self, mock_run): + mock_run.return_value = Mock(returncode=0, stdout="ok", stderr="") + result = run_biliup_command(["login"]) + self.assertEqual(result.returncode, 0) +``` + +- [ ] **Step 2: 运行测试,确认先失败** + +Run: + +```powershell +.\.venv\Scripts\python.exe -m unittest tests.test_bilibili_runtime -v +``` + +Expected: + +- 因为 `uploader.bilibili_uploader.runtime` 还不存在而失败 + +- [ ] **Step 3: 写最小运行时实现** + +在 `uploader/bilibili_uploader/runtime.py` 里先补这些最小函数: + +```python +def get_biliup_runtime_root() -> Path: ... +def build_biliup_runtime_path(system_name: str | None = None) -> Path: ... +def fetch_latest_release() -> dict: ... +def read_local_biliup_version() -> str | None: ... +def write_local_biliup_version(version: str) -> None: ... +def download_biliup_asset(release: dict, destination: Path) -> Path: ... +def ensure_biliup_binary(force_check: bool = True) -> Path: ... +def run_biliup_command(arguments: list[str]) -> subprocess.CompletedProcess[str]: ... +``` + +约束: + +- 不引入复杂 manifest +- 直接面向 GitHub Release 最新版本 +- 本地只保存当前版本字符串和二进制 +- 保持简单的路径/网络/替换逻辑 + +- [ ] **Step 4: 再跑运行时测试,确认通过** + +Run: + +```powershell +.\.venv\Scripts\python.exe -m unittest tests.test_bilibili_runtime -v +``` + +Expected: + +- 所有 `BiliupRuntimeTests` 通过 + +- [ ] **Step 5: 提交这一小步** + +```powershell +git add uploader/bilibili_uploader/runtime.py tests/__init__.py tests/test_bilibili_runtime.py +git commit -m "feat: add biliup runtime bootstrap" +``` + +## Task 2: 接入 `sau bilibili` CLI + +**Files:** +- Modify: `sau_cli.py` +- Create: `tests/test_sau_bilibili_cli.py` +- Reference: `uploader/bilibili_uploader/main.py` +- Reference: `utils/constant.py` + +- [ ] **Step 1: 写 CLI parser 和 dispatch 测试** + +在 `tests/test_sau_bilibili_cli.py` 中覆盖: + +```python +import unittest +from argparse import Namespace +from pathlib import Path +from unittest.mock import AsyncMock, patch + +import sau_cli + + +class BilibiliCliTests(unittest.TestCase): + def test_build_parser_accepts_bilibili_login(self): + parser = sau_cli.build_parser() + args = parser.parse_args(["bilibili", "login", "--account", "creator"]) + self.assertEqual(args.platform, "bilibili") + self.assertEqual(args.action, "login") + + def test_build_parser_requires_tid_for_upload_video(self): + parser = sau_cli.build_parser() + with self.assertRaises(SystemExit): + parser.parse_args([ + "bilibili", "upload-video", + "--account", "creator", + "--file", "demo.mp4", + "--title", "hello", + "--desc", "hello", + ]) + + def test_dispatch_bilibili_check_prints_valid(self): + args = Namespace(platform="bilibili", action="check", account="creator") + with patch("sau_cli.check_bilibili_account", new=AsyncMock(return_value=True)): + code = asyncio.run(sau_cli.dispatch(args)) + self.assertEqual(code, 0) +``` + +- [ ] **Step 2: 运行测试,确认先失败** + +Run: + +```powershell +.\.venv\Scripts\python.exe -m unittest tests.test_sau_bilibili_cli -v +``` + +Expected: + +- 因为 `sau_cli.py` 里还没有 `bilibili` parser/dispatch 分支而失败 + +- [ ] **Step 3: 在 `sau_cli.py` 中补 Bilibili 请求模型和命令** + +只做最小接入,保持和 Douyin/Kuaishou 同风格: + +```python +@dataclass(slots=True) +class BilibiliVideoUploadRequest: + account_name: str + video_file: Path + title: str + description: str + tid: int + tags: list[str] + publish_date: datetime | int + debug: bool = True + + +async def login_bilibili_account(account_name: str) -> dict: ... +async def check_bilibili_account(account_name: str) -> bool: ... +async def upload_bilibili_video(request: BilibiliVideoUploadRequest) -> Path: ... +``` + +Parser 最小要求: + +- `sau bilibili login --account ` +- `sau bilibili check --account ` +- `sau bilibili upload-video --account ... --file ... --title ... --desc ... --tid ... [--tags] [--schedule]` + +Dispatch 最小要求: + +- 和其他平台一样输出 `valid` / `invalid` +- 上传成功后打印简洁摘要 + +- [ ] **Step 4: 复用现有 B 站参数语义** + +在 Bilibili wrapper 中直接沿用现有工程概念: + +- `tid` 必填 +- `tags` 用现有 `parse_tags()` +- `schedule` 沿用现有 `parse_schedule()` +- `account` 仍通过 `resolve_account_file("bilibili", account_name)` 得到项目内账号路径 + +- [ ] **Step 5: 再跑 CLI 测试,确认通过** + +Run: + +```powershell +.\.venv\Scripts\python.exe -m unittest tests.test_sau_bilibili_cli -v +``` + +Expected: + +- `BilibiliCliTests` 通过 + +- [ ] **Step 6: 做一次联测** + +Run: + +```powershell +.\.venv\Scripts\python.exe sau_cli.py bilibili --help +.\.venv\Scripts\python.exe sau_cli.py bilibili upload-video --help +``` + +Expected: + +- 能看到 `login` / `check` / `upload-video` +- `upload-video` 中 `--tid` 显示为必填 + +- [ ] **Step 7: 提交这一小步** + +```powershell +git add sau_cli.py tests/test_sau_bilibili_cli.py +git commit -m "feat: add bilibili cli commands" +``` + +## Task 3: 补 skill 和 example + +**Files:** +- Create: `skills/bilibili-upload/SKILL.md` +- Create: `skills/bilibili-upload/references/runtime-requirements.md` +- Create: `skills/bilibili-upload/references/cli-contract.md` +- Create: `skills/bilibili-upload/references/troubleshooting.md` +- Create: `skills/bilibili-upload/scripts/examples/bilibili_commands.ps1` +- Create: `skills/bilibili-upload/scripts/examples/bilibili_commands.sh` +- Create: `skills/bilibili-upload/scripts/examples/bilibili_cli_template.py` +- Modify: `examples/get_bilibili_cookie.py` +- Modify: `examples/upload_video_to_bilibili.py` + +- [ ] **Step 1: 参考 Douyin/Kuaishou skill 结构搭出 Bilibili skill** + +要求: + +- `SKILL.md` 风格和现有两个 skill 对齐 +- 默认优先用 `sau bilibili ...` +- 明确写“程序会自动准备 `biliup`” + +- [ ] **Step 2: 写示例命令文件** + +示例命令至少包括: + +```powershell +sau bilibili login --account creator +sau bilibili check --account creator +sau bilibili upload-video --account creator --file .\videos\demo.mp4 --title "demo" --desc "demo" --tid 249 --tags 足球,测试 +``` + +- [ ] **Step 3: 修改本地 example** + +让以下 example 明确转向新入口或新约定: + +- `examples/get_bilibili_cookie.py` +- `examples/upload_video_to_bilibili.py` + +要求: + +- 不再让用户手动猜 `biliup.exe` 路径 +- 明确说明现在推荐走 `sau bilibili ...` +- 继续保留 `VideoZoneTypes` 的使用示例 + +- [ ] **Step 4: 做一次文件级自检** + +Run: + +```powershell +Get-ChildItem skills\bilibili-upload -Recurse +Get-Content examples\get_bilibili_cookie.py +Get-Content examples\upload_video_to_bilibili.py +``` + +Expected: + +- Bilibili skill 目录完整 +- example 内容已切到新的 CLI/说明 + +- [ ] **Step 5: 提交这一小步** + +```powershell +git add skills/bilibili-upload examples/get_bilibili_cookie.py examples/upload_video_to_bilibili.py +git commit -m "feat: add bilibili upload skill" +``` + +## Task 4: 补文档与上游致谢 + +**Files:** +- Modify: `README.md` +- Modify: `docs/CLI.md` +- Modify: `docs/install.md` +- Modify: `docs/update.md` + +- [ ] **Step 1: 在 README 中补 Bilibili CLI 用法** + +至少写清: + +- `sau bilibili login` +- `sau bilibili check` +- `sau bilibili upload-video` +- 自动下载/自动更新 `biliup` + +- [ ] **Step 2: 在 CLI 文档中补命令契约** + +把 Bilibili 一节写成和 Douyin/Kuaishou 同风格: + +- 参数表 +- `tid` 必填 +- `schedule` 的行为 + +- [ ] **Step 3: 在安装/更新文档中写清自动下载机制** + +至少补这些说明: + +- 用户不需要自己安装 `biliup` +- 第一次运行会自动下载 +- 后续运行会自动检查更新 + +- [ ] **Step 4: 在文档中加入对上游项目的感谢与借用说明** + +至少在 README 中补一段明确说明: + +- Bilibili 能力基于 `biliup` +- 感谢/借用上游项目 +- 给出项目地址 + +建议文案: + +```markdown +## 致谢 + +本项目的 Bilibili 上传能力基于开源项目 `biliup` 的能力进行接入与封装。 +感谢 `biliup` 项目及其贡献者提供的基础能力: + +- https://github.com/biliup/biliup +``` + +- [ ] **Step 5: 做一次文档核对** + +Run: + +```powershell +Get-Content README.md | Select-String -Pattern "bilibili|biliup|致谢" -Context 1,2 +Get-Content docs\CLI.md | Select-String -Pattern "bilibili" -Context 1,3 +Get-Content docs\install.md | Select-String -Pattern "bilibili|biliup" -Context 1,2 +Get-Content docs\update.md | Select-String -Pattern "bilibili|biliup" -Context 1,2 +``` + +Expected: + +- README、CLI、install、update 都出现 Bilibili 新内容 +- README 里有明确的上游致谢 + +- [ ] **Step 6: 跑最终验证** + +Run: + +```powershell +.\.venv\Scripts\python.exe -m unittest tests.test_bilibili_runtime tests.test_sau_bilibili_cli -v +.\.venv\Scripts\python.exe sau_cli.py bilibili --help +.\.venv\Scripts\python.exe sau_cli.py bilibili upload-video --help +``` + +Expected: + +- 单元测试通过 +- Bilibili CLI 帮助可用 +- `upload-video` 显示必填 `--tid` + +- [ ] **Step 7: 提交收尾** + +```powershell +git add README.md docs/CLI.md docs/install.md docs/update.md +git commit -m "docs: add bilibili cli guidance and attribution" +``` diff --git a/docs/update.md b/docs/update.md index 1ef4024..a0b28a3 100644 --- a/docs/update.md +++ b/docs/update.md @@ -47,14 +47,17 @@ PLAYWRIGHT_DOWNLOAD_HOST="https://npmmirror.com/mirrors/playwright" patchright i sau --help sau douyin --help sau kuaishou --help +sau bilibili --help sau douyin check --account your_account sau kuaishou check --account your_account +sau bilibili check --account your_account ``` 如果你在使用 skill,也建议同步看一下: - `skills/douyin-upload/SKILL.md` - `skills/kuaishou-upload/SKILL.md` +- `skills/bilibili-upload/SKILL.md` - `docs/CLI.md` ## For AI Agents @@ -81,6 +84,7 @@ uv pip install -e . sau --help sau douyin --help sau kuaishou --help +sau bilibili --help ``` 5. 如果任务是抖音或快手链路,再继续验证: @@ -88,6 +92,7 @@ sau kuaishou --help ```bash sau douyin check --account test sau kuaishou check --account test +sau bilibili check --account test ``` 6. 如果用户依赖 skill,再检查这些路径是否仍存在且契约没变: @@ -98,6 +103,9 @@ sau kuaishou check --account test - `skills/kuaishou-upload/SKILL.md` - `skills/kuaishou-upload/references/cli-contract.md` - `skills/kuaishou-upload/references/runtime-requirements.md` +- `skills/bilibili-upload/SKILL.md` +- `skills/bilibili-upload/references/cli-contract.md` +- `skills/bilibili-upload/references/runtime-requirements.md` ### 对 agent 的额外说明 @@ -105,3 +113,4 @@ sau kuaishou check --account test - 当前 README 只做总览,安装和更新以 `docs/install.md`、`docs/update.md` 为准 - Web 相关内容属于历史路径,见 `docs/legacy-web.md` - 如果更新后的登录流程输出了本地二维码图片,agent 应直接把图片展示/发送给用户扫码,不要只回传图片路径 +- Bilibili 命令运行时会自动检查并更新 `biliup`