Track bundled vendor runtime sources
Some checks failed
CI / main (push) Has been cancelled
CI / release-e2e (push) Has been cancelled

This commit is contained in:
2026-07-07 10:05:50 +08:00
parent fbe179ab53
commit 52636c91ae
2111 changed files with 1850012 additions and 14 deletions

View File

@@ -0,0 +1,70 @@
---
name: kuaishou-upload
description: 当 agent 需要通过已安装的 `sau` CLI 完成快手登录、cookie 校验、视频上传或图文发布时使用这个 skill。该 skill 适用于已经安装 `social-auto-upload` 且可调用 `sau` 命令的环境。优先使用这个 skill 进行稳定的命令式快手工作流,而不是一开始就阅读 uploader 源码。
---
# 快手上传 Skill
优先把 `sau` 作为主接口。
不要假设当前环境一定能读取仓库源码。
不要一开始就去读 `uploader/`
只有在命令不可用或 CLI 执行失败时,才回退到故障排查说明。
## 功能概览
| 功能 | 命令入口 | 说明 |
| --- | --- | --- |
| 快手登录 | `sau kuaishou login --account <name>` | 生成或刷新指定账号的 cookie |
| cookie 校验 | `sau kuaishou check --account <name>` | 检查指定账号 cookie 是否有效 |
| 视频上传 | `sau kuaishou upload-video ...` | 上传并发布快手视频 |
| 图文上传 | `sau kuaishou upload-note ...` | 上传并发布快手图文 |
元数据约定:
- 视频使用 `title + desc + tags`
- 图文使用 `title + note + tags`
## 默认工作流
1. 先确认 `references/runtime-requirements.md` 里的运行前提。
2. 再确认 `references/cli-contract.md` 里的命令契约。
3. 执行匹配的 `sau kuaishou ...` 命令。
4. 如果命令失败,再看 `references/troubleshooting.md`
## 支持动作
- 使用 `sau kuaishou login --account <name>` 登录快手
- 使用 `sau kuaishou check --account <name>` 校验 cookie 是否有效
- 使用 `sau kuaishou upload-video ...` 上传快手视频
- 使用 `sau kuaishou upload-note ...` 上传快手图文
## 命令选择建议
- 当用户需要新的 cookie或现有 cookie 已失效时,使用 `login`
- 当用户只需要确认 cookie 状态时,使用 `check`
- 当用户要发布视频时,使用 `upload-video`
- 当用户要发布图文时,使用 `upload-note`
## 执行前检查
- 先确认当前 shell 里是否可以调用 `sau`
- 如果 `sau` 不可用,按 `references/runtime-requirements.md` 里的回退方式处理
- 当用户明确指定无头或有头模式时,显式传 `--headless``--headed`
- 只有用户明确要求定时发布时,才使用 `--schedule`
- 如果登录流程生成了本地二维码图片,不要只把图片路径告诉用户
- 二维码图片本身就是给用户扫码的,优先直接把本地图片展示/发送给用户
## 模板文件
当你需要稳定的命令模板时,使用 `scripts/examples/` 下的文件:
- `kuaishou_commands.ps1`
- `kuaishou_commands.sh`
- `kuaishou_cli_template.py`
## 参考文档
- 运行前提:`references/runtime-requirements.md`
- CLI 契约:`references/cli-contract.md`
- 故障排查:`references/troubleshooting.md`

View File

@@ -0,0 +1,104 @@
# 快手 CLI 契约
这个 skill 默认假设当前环境已经安装并可调用 `sau` 命令。
## 命令列表
### 登录
```bash
sau kuaishou login --account <account>
```
- 必填参数:
- `--account`
- 作用:
- 启动快手登录流程,为指定账号生成或刷新 cookie 文件
- 如果登录过程中生成本地二维码图片agent 应优先直接把图片展示/发送给用户扫码,而不是只回传路径
- 账号说明:
- `--account` 传的是用户自定义的 `account_name`,不是固定只能叫 `creator`
- 一个 `account_name` 对应一个账号文件,可用于多账号隔离和并发任务
### 校验 cookie
```bash
sau kuaishou check --account <account>
```
- 必填参数:
- `--account`
- 预期输出:
- `valid`cookie 可用
- `invalid`cookie 缺失或已失效
### 上传视频
```bash
sau kuaishou upload-video \
--account <account> \
--file <video-path> \
--title "<title>" \
[--desc "<description>"] \
[--tags tag1,tag2] \
[--schedule "YYYY-MM-DD HH:MM"] \
[--thumbnail <image-path>] \
[--debug] \
[--headless | --headed]
```
- 必填参数:
- `--account`
- `--file`
- `--title`
- 可选参数:
- `--desc`
- `--tags`
- `--schedule`
- `--thumbnail`
- `--debug`
- `--headless`
- `--headed`
### 上传图文
```bash
sau kuaishou upload-note \
--account <account> \
--images <image-1> [image-2 ...] \
--title "<title>" \
[--note "<content>"] \
[--tags tag1,tag2] \
[--schedule "YYYY-MM-DD HH:MM"] \
[--debug] \
[--headless | --headed]
```
- 必填参数:
- `--account`
- `--images`
- `--title`
- 可选参数:
- `--note`
- `--tags`
- `--schedule`
- `--debug`
- `--headless`
- `--headed`
## 发布策略
- 如果不传 `--schedule`CLI 使用立即发布
- 如果传了 `--schedule`CLI 自动切换为定时发布
- 时间格式为:
```text
YYYY-MM-DD HH:MM
```
## 额外说明
- `upload-video` 每次命令只支持一个视频文件
- `upload-note` 每次命令支持多张图片
- 视频描述字段统一使用 `--desc`
- 图文正文统一使用 `--note`
- `upload-note` 当前要求传入真实的多张图片文件,而不是同一路径重复多次

View File

@@ -0,0 +1,68 @@
# 运行前提
这个 skill 默认假设当前环境已经具备:
- 已安装 `social-auto-upload`
- 可以调用 `sau` 命令,或至少有等效调用方式
- 已为 `patchright` 安装 Chromium
## 推荐安装方式
在项目根目录执行:
```bash
uv pip install -e .
```
## 安装 patchright 浏览器
Windows PowerShell
```powershell
$env:PLAYWRIGHT_DOWNLOAD_HOST="https://npmmirror.com/mirrors/playwright"; patchright install chromium
```
Linux / macOSbash / zsh
```bash
PLAYWRIGHT_DOWNLOAD_HOST="https://npmmirror.com/mirrors/playwright" patchright install chromium
```
## 常见调用方式
### 如果 `sau` 已经在 PATH 中
```bash
sau kuaishou --help
```
### 如果虚拟环境存在,但还没有激活
PowerShell
```powershell
.\.venv\Scripts\Activate.ps1
sau kuaishou --help
```
### 如果你想直接调用可执行文件
PowerShell
```powershell
.\.venv\Scripts\sau.exe kuaishou --help
```
### 如果你更倾向于使用 uv
```bash
uv run sau kuaishou --help
```
## 无头和有头模式
- 使用 `--headless` 表示无头模式
- 使用 `--headed` 表示有头模式
- 快手 CLI 默认按无头模式运行
- 如果用户明确要求可见浏览器窗口,或二维码展示确实有问题,再切到 `--headed`
- 如果登录过程中已经生成了本地二维码图片agent 应优先直接把图片展示/发送给用户扫码,不要只告诉用户图片路径

View File

@@ -0,0 +1,85 @@
# 故障排查
## 找不到 `sau` 命令
可以尝试以下方式:
```powershell
.\.venv\Scripts\Activate.ps1
sau kuaishou --help
```
```powershell
.\.venv\Scripts\sau.exe kuaishou --help
```
```bash
uv run sau kuaishou --help
```
如果当前环境还没有安装项目:
```bash
uv pip install -e .
```
## cookie 无效或已过期
先检查 cookie 状态:
```bash
sau kuaishou check --account <account>
```
如果无效,就重新登录:
```bash
sau kuaishou login --account <account>
```
## 登录二维码问题
如果用户反馈二维码在终端里不好扫:
- 先优先使用 CLI / uploader 生成的本地二维码图片
- 只有用户明确需要可见浏览器窗口,或图片方案仍然不方便时,再切到 `--headed`
- 如果 CLI / uploader 已经生成临时二维码图片agent 不要只回图片路径
- agent 应优先直接把本地二维码图片展示/发送给用户扫码
- 图片路径只作为补充信息
## 上传参数缺失
### 视频上传
最少需要:
- `--account`
- `--file`
- `--title`
### 图文上传
最少需要:
- `--account`
- `--images`
- `--title`
`--note` 当前是可选图文正文。
## 图文上传只有一张生效
如果用户一次传了多张图片,但页面只识别到一张,先确认:
- `--images` 里传的是不是真正不同的文件
- 不是同一路径重复多次
## 定时发布
时间格式使用:
```text
YYYY-MM-DD HH:MM
```
如果不需要定时发布,去掉 `--schedule` 即可改为立即发布。

View File

@@ -0,0 +1,63 @@
from __future__ import annotations
import shlex
import subprocess
def run_command(command: list[str]) -> None:
print("Running:", " ".join(shlex.quote(part) for part in command))
subprocess.run(command, check=True)
def main() -> None:
account = "account_a"
# account_name is user-defined. One account_name maps to one account file.
# You can prepare multiple account names and run them in parallel.
commands = [
["sau", "kuaishou", "login", "--account", account],
["sau", "kuaishou", "check", "--account", account],
[
"sau",
"kuaishou",
"upload-video",
"--account",
account,
"--file",
"videos/demo.mp4",
"--title",
"Kuaishou video from Python",
"--desc",
"Kuaishou video description from Python",
"--tags",
"cli,video",
"--thumbnail",
"videos/demo.png",
"--headless",
],
[
"sau",
"kuaishou",
"upload-note",
"--account",
account,
"--images",
"videos/1.png",
"videos/2.png",
"videos/3.png",
"--title",
"Kuaishou note title from Python",
"--note",
"Kuaishou note from Python",
"--tags",
"cli,note",
"--headless",
],
]
for command in commands:
run_command(command)
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,28 @@
# PowerShell examples for the installed sau CLI.
# account_name is user-defined. One account_name maps to one account file.
# You can prepare multiple account names and run them in parallel.
$account = "account_a"
$video = "videos/demo.mp4"
$thumbnail = "videos/demo.png"
$noteImages = @("videos/1.png", "videos/2.png", "videos/3.png")
sau kuaishou login --account $account
sau kuaishou check --account $account
sau kuaishou upload-video `
--account $account `
--file $video `
--title "Kuaishou video from PowerShell" `
--desc "Kuaishou video description from PowerShell" `
--tags "cli,video" `
--thumbnail $thumbnail `
--headless
sau kuaishou upload-note `
--account $account `
--images $noteImages `
--title "Kuaishou note title from PowerShell" `
--note "Kuaishou note from PowerShell" `
--tags "cli,note" `
--headless

View File

@@ -0,0 +1,29 @@
#!/usr/bin/env bash
set -euo pipefail
# account_name is user-defined. One account_name maps to one account file.
# You can prepare multiple account names and run them in parallel.
account="account_a"
video="videos/demo.mp4"
thumbnail="videos/demo.png"
sau kuaishou login --account "$account"
sau kuaishou check --account "$account"
sau kuaishou upload-video \
--account "$account" \
--file "$video" \
--title "Kuaishou video from bash" \
--desc "Kuaishou video description from bash" \
--tags "cli,video" \
--thumbnail "$thumbnail" \
--headless
sau kuaishou upload-note \
--account "$account" \
--images "videos/1.png" "videos/2.png" "videos/3.png" \
--title "Kuaishou note title from bash" \
--note "Kuaishou note from bash" \
--tags "cli,note" \
--headless