管理 Blog System API v1.0.0 的文章/标签/用户/评论/留言/说说/文件上传/健康检查。 无认证公开 API,27 个子命令(26 API + 1 capability-list),输出 JSON 与 Markdown 表格。 纯 CLI 管理 skill,不含 Grape Agent 加载集成与自动回复 Issue 能力。
Coding
blog-manager-kit
Try it封装 Blog System REST API 的管理 skill,提供文章/标签/用户/评论/留言/说说/上传/健康检查 共 8 模块 28 个子命令的命令行能力。无认证(公开 API)。
What it does
封装 Blog System REST API 的管理 skill,提供文章/标签/用户/评论/留言/说说/上传/健康检查 共 8 模块 28 个子命令的命令行能力。无认证(公开 API)。
The skill document
blog-manager-kit
封装 Blog System REST API(OpenAPI 3.1 文档:{base_url}/openapi.json)的管理 skill,提供 8 模块 28 个子命令。无认证。
安全硬约束(必须遵守)
通用约束(所有 skill 必含):
- 严禁读取 data/、configs/、sessions.db、user_accounts 等 Grape 内部数据。
- API 返回 403/无权限时:立即停止该操作并回复用户,严禁尝试其他 token 或绕行手段。
- 所有 curl / API 调用设 30s 超时——超时判定失败,不 hang。
- 严禁 mock 模式/假数据:所有 API 调用必须真实访问目标系统。
- 调用目标 API 一律以
references/api-reference.md为准:严禁根据经验/记忆/猜测自行拼写 API 路径。
动态约束:
- 无认证(公开 API):不需要凭据,省略凭据相关约束。
评论规范
- 所有 Issue/PR 评论 body 必须以
[blog-manager-kit]开头(环境变量未注入 AGENT_NAME 时用 skill name 作为前缀)。 - 引用用户原文:
> {用户评论}\n\n[blog-manager-kit] {回复}
Configuration
目标系统 API 地址必须在使用前确定。所有命令中的 {base_url} 替换为实际地址(格式 http://:,示例)。
{base_url} 解析优先级:
- 项目知识 — 检查
.project-info/目录下 JSON 配置文件(config.BLOG_MANAGER_KIT_BASE_URL) - 环境变量 —
BLOG_MANAGER_KIT_BASE_URL - 默认地址 — 以上都无时使用 skill 内置默认地址(
http://:,示例)
配置指导
方式一:环境变量(临时,推荐快速测试)
export BLOG_MANAGER_KIT_BASE_URL="http://:port" # (示例)
方式二:项目知识 JSON 文件(持久化,推荐生产使用)
在项目根目录下创建 .project-info/ 目录,放入任意名称的 .json 文件(脚本会递归扫描所有 JSON 文件):
{
"config": {
"BLOG_MANAGER_KIT_BASE_URL": "http://:port" // (示例)
}
}
⚠️
.project-info/含敏感配置,不提交到 git 仓库(加入 .gitignore)。
场景 / When to Use
- 用户要求查询/发布/更新/删除博客文章
- 用户要求管理博客标签、用户、评论、留言、说说
- 用户要求上传/列出/删除博客文件资源
- 用户要求检查博客系统 API 可达性
- 用户要求获取热门文章 Top N
Don't use for: 后台 Cookie 登录/登出/批量删除(Web UI 层 /admin*)、博客 HTML 页面浏览(GET /、GET /article/{id})、非 Blog System 的 API 操作。
知识 / Knowledge
API Base URL
{base_url}
All endpoints below are relative to this base. 无认证(不需要 header)。
Endpoints
按资源分组列出端点表(从 API 文档解析,详见 references/api-reference.md):
| Method | Path | 子命令 | 说明 |
|---|---|---|---|
| GET | /health | health-check | 检查 API 可达性 |
| GET | /api/articles | list-articles | 分页查询文章列表 |
| POST | /api/articles | create-article | 发布新文章 |
| GET | /api/articles/{id} | get-article | 查询文章详情(含评论) |
| PUT | /api/articles/{id} | update-article | 更新文章 |
| DELETE | /api/articles/{id}?soft=true | delete-article | 软删除文章(可恢复) |
| DELETE | /api/articles/{id}?soft=false | hard-delete-article | 硬删除文章(不可逆) |
| POST | /api/articles/{id}/restore | restore-article | 恢复软删除文章 |
| GET | /api/articles/heat/top | top-articles | 热门文章 Top N |
| GET | /api/lables | list-labels | 获取所有标签 |
| POST | /api/lables | create-label | 创建标签 |
| GET | /api/users | list-users | 获取用户列表 |
| POST | /api/users | create-user | 创建用户 |
| POST | /api/comments | create-comment | 发表评论 |
| GET | /api/comments/{aid} | list-comments | 获取文章评论列表 |
| DELETE | /api/comments/{id} | delete-comment | 删除评论(软删除) |
| GET | /api/messages | list-messages | 获取留言列表 |
| POST | /api/messages | create-message | 发表留言 |
| POST | /api/messages/reply | reply-message | 回复留言 |
| DELETE | /api/messages/{id} | delete-message | 删除留言(软删除) |
| GET | /api/moods | list-moods | 获取说说列表 |
| POST | /api/moods | create-mood | 发布说说 |
| DELETE | /api/moods/{id} | delete-mood | 删除说说 |
| POST | /api/upload | upload-single | 上传单个文件 |
| POST | /api/upload/multiple | upload-batch | 批量上传文件 |
| GET | /api/uploads/list | list-uploads | 列出已上传文件 |
| DELETE | /api/uploads/{filename} | delete-upload | 删除已上传文件 |
认证方式
- 无认证:不需要凭据
- API 地址:
BLOG_MANAGER_KIT_BASE_URL - 凭据前缀:由 skill name 推导(
blog-manager-kit→BLOG_MANAGER_KIT),无认证模式仅需 BASE_URL - 读取优先级(4 级):项目知识(
.project-info/下 JSON 的config.BLOG_MANAGER_KIT_BASE_URL)> 环境变量BLOG_MANAGER_KIT_BASE_URL> 默认地址
Common Pitfalls
- API 路径拼写
lables。 API 实际路径为/api/lables(原文拼写错误),子命令用正确拼写labels(list-labels / create-label),脚本内部请求时用lables。详见 api-reference.md。 - 硬删除不可逆。
hard-delete-article永久删除文章且无法 restore 恢复。子命令默认二次确认(输入yes),自动化场景用--yes跳过。软删除用delete-article(可restore-article恢复)。 - DELETE 软/硬删除同一端点。
DELETE /api/articles/{id}通过 query 参数soft区分:soft=true(默认,软删除)/soft=false(硬删除)。本 skill 拆为两个子命令避免误操作。 - 文件上传字段名不同。 单文件上传字段
file(files={'file': f}),批量上传字段files(files=[('files', f)...])。批量上传不能用 dict value 为列表(requests 会报 unpack 错误),必须用元组列表。 - 响应结构包裹在
code/data。 列表/详情返回{"code":200,"data":[...]},不是直接返回数组。解析时取data字段。 - 分页参数。
list-articles用page(从 1 开始)/size(最大 100),不是 offset/limit。lid=0表示不按标签过滤。 - Web 页面端点不属于 API。
GET /和GET /article/{id}返回 HTML 页面,/admin*是后台 Cookie 管理层,均不在本 skill 范围。
字段说明
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| article_id | integer | 是 | — | 文章 ID(路径参数) |
| title | string | create 是 | — | 文章/说说标题 |
| content | string | 是 | — | 文章/评论/留言/说说内容 |
| uid | integer | 是 | 1 | 用户 ID |
| lid | integer | 否 | 1 | 标签 ID |
| aid | integer | 是 | — | 文章 ID(评论关联) |
| mid | integer | 是 | — | 留言 ID(回复关联) |
| comment_id | integer | 是 | — | 评论 ID |
| message_id | integer | 是 | — | 留言 ID |
| mood_id | integer | 是 | — | 说说 ID |
| filename | string | 是 | — | 上传文件名 |
| lname | string | 是 | — | 标签名 |
| uname | string | 是 | — | 用户名 |
步骤 / Steps
主流程按序号排列,每个操作是子步骤。所有命令在 skills/blog-manager-kit/ 目录下执行。
1. 检查 API 可达性
health-check
python3 scripts/blog-manager-kit.py health-check
Expected: {"status":"ok"}
capability-list
python3 scripts/blog-manager-kit.py capability-list
Expected: {"capability":"capability-list","skill":"blog-manager-kit","subcommand_count":28,...}
2. 文章管理(articles)
list-articles
python3 scripts/blog-manager-kit.py list-articles --page 1 --size 10 --lid 0 --keyword ""
Expected: {"code":200,"data":[...]}。参数:--page页码 / --size每页数(≤100) / --lid标签过滤(0=不过滤) / --keyword关键词
create-article
python3 scripts/blog-manager-kit.py create-article --title "标题" --content "内容" --uid 1 --lid 1
Expected: {"code":200,"data":{"id":...}}。参数:--title/--content必填;--uid(默认1)/--lid(默认1)/--img/--heat(默认0)可选
get-article
python3 scripts/blog-manager-kit.py get-article --article-id 1
Expected: {"code":200,"data":{...}}。参数:--article-id必填
update-article
python3 scripts/blog-manager-kit.py update-article --article-id 1 --title "新标题"
Expected: {"code":200,"data":{...}}。参数:--article-id必填;--title/--content/--lid/--img/--heat可选
delete-article(软删除,可恢复)
python3 scripts/blog-manager-kit.py delete-article --article-id 1
Expected: {"code":200,"data":{...}}。参数:--article-id必填。软删除,可用 restore-article 恢复
hard-delete-article(硬删除,不可逆,二次确认)
python3 scripts/blog-manager-kit.py hard-delete-article --article-id 1
Expected: 提示确认 → 输入 yes → {"code":200,"data":{...}}。参数:--article-id必填;--yes跳过确认(自动化)
restore-article
python3 scripts/blog-manager-kit.py restore-article --article-id 1
Expected: {"code":200,"data":{...}}。参数:--article-id必填
top-articles
python3 scripts/blog-manager-kit.py top-articles --limit 5
Expected: {"code":200,"data":[...]}。参数:--limit(默认5)
3. 标签管理(labels)
list-labels
python3 scripts/blog-manager-kit.py list-labels
Expected: {"code":200,"data":[{"id":1,"lname":"..."}]}
create-label
python3 scripts/blog-manager-kit.py create-label --lname "新标签"
Expected: {"code":200,"data":{...}}。参数:--lname必填
4. 用户管理(users)
list-users
python3 scripts/blog-manager-kit.py list-users
Expected: {"code":200,"data":[...]}
create-user
python3 scripts/blog-manager-kit.py create-user --uname "用户名" --phone "13800000000"
Expected: {"code":200,"data":{...}}。参数:--uname必填;--phone/--pwd/--email/--img(默认img/moren.jpg)可选
5. 评论管理(comments)
create-comment
python3 scripts/blog-manager-kit.py create-comment --uid 1 --aid 1 --content "评论内容"
Expected: {"code":200,"data":{...}}。参数:--uid/--aid/--content必填
list-comments
python3 scripts/blog-manager-kit.py list-comments --aid 1
Expected: {"code":200,"data":[...]}。参数:--aid必填
delete-comment
python3 scripts/blog-manager-kit.py delete-comment --comment-id 1
Expected: {"code":200,"data":{...}}。参数:--comment-id必填(软删除)
6. 留言管理(messages)
list-messages
python3 scripts/blog-manager-kit.py list-messages
Expected: {"code":200,"data":[...]}
create-message
python3 scripts/blog-manager-kit.py create-message --uid 1 --content "留言内容"
Expected: {"code":200,"data":{...}}。参数:--uid/--content必填
reply-message
python3 scripts/blog-manager-kit.py reply-message --uid 1 --mid 1 --content "回复内容"
Expected: {"code":200,"data":{...}}。参数:--uid/--mid/--content必填
delete-message
python3 scripts/blog-manager-kit.py delete-message --message-id 1
Expected: {"code":200,"data":{...}}。参数:--message-id必填(软删除)
7. 说说管理(moods)
list-moods
python3 scripts/blog-manager-kit.py list-moods
Expected: {"code":200,"data":[...]}
create-mood
python3 scripts/blog-manager-kit.py create-mood --content "说说内容" --title "标题"
Expected: {"code":200,"data":{...}}。参数:--content必填;--title/--src可选
delete-mood
python3 scripts/blog-manager-kit.py delete-mood --mood-id 1
Expected: {"code":200,"data":{...}}。参数:--mood-id必填
8. 文件上传(uploads)
upload-single
python3 scripts/blog-manager-kit.py upload-single --file /path/to/file.png
Expected: {"code":200,"data":{"url":"/uploads/..."}}。参数:--file必填(本地文件路径)
upload-batch
python3 scripts/blog-manager-kit.py upload-batch --files /path/a.png /path/b.png
Expected: {"code":200,"data":[...]}。参数:--files必填(≥1 个本地文件路径)
list-uploads
python3 scripts/blog-manager-kit.py list-uploads
Expected: {"code":200,"data":[{"filename":"...","url":"...","type":"image"}]}
delete-upload
python3 scripts/blog-manager-kit.py delete-upload --filename abc123.png
Expected: {"code":200,"data":{...}}。参数:--filename必填
判断标准 / Verification
- API 可达(
health-check返回 200 /{"status":"ok"}) - 只读操作返回有效数据(list-* 命令返回非空 data 数组/字段完整)
- 脚本
--help无语法错误 - 退出码正确(0=成功 / 2=参数错误或取消 / 3=缺少配置 / 4=API 调用失败)
-
hard-delete-article默认二次确认(未加--yes时提示) - JSON 结构化输出,
--format md可切换 Markdown 表格
输出规范 / Output Format
脚本输出
- 默认输出:JSON(
json.dumps(..., ensure_ascii=False, indent=2)) - 可选输出:Markdown 表格(
--format md,仅 capability-list 渲染为表格,其他保持 JSON) - 使用示例:
cd skills/blog-manager-kit/ && python3 scripts/blog-manager-kit.py list-articles --page 1 --size 5
Issue 评论格式
执行完操作后,Issue 评论 body 格式:
[blog-manager-kit] ✅ {操作名称}完成
## 操作结果
| 操作 | 状态 | 资源 ID | 详情 |
|------|------|---------|------|
| {操作名} | ✅ 成功 / 🔴 失败 | {id} | {简要说明} |
**API 地址**:{base_url}
**执行时间**:{UTC ISO}
失败时:
[blog-manager-kit] 🔴 {操作名称}失败
## 错误分析
- **操作**:{操作名}
- **错误**:{API 返回的错误信息}
- **HTTP 状态码**:{code}
- **原因**:{分析原因}
### 修复建议
{修复步骤}
参考文档 / References
- API 端点文档
- 测试用例
分析结论示例
成功时:
分析结论:
- 场景:Blog System API 操作(无认证)
- Skill:blog-manager-kit v0.1.0
- 操作:{subcommand} {params}
- 结果:✅ 成功({API 返回的关键数据摘要})
- 必须执行:Issue 评论汇总结果 → 任务结束
失败时:
分析结论:
- 场景:Blog System API 操作(无认证)
- Skill:blog-manager-kit v0.1.0
- 操作:{subcommand} {params}
- 结果:🔴 失败({错误原因})
- 必须执行:Issue 评论报告错误 → 任务结束
任务结束
完成所有业务动作后,在最终答复末尾输出以下 JSON 块并结束任务:
{
"actions": ["{具体执行的操作,如 list-articles: 返回 5 篇文章}"],
"conclusion": "{处理结论,如 查询成功,返回 5 篇文章}",
"artifacts": ["{产生的产物:写操作返回资源 ID 或操作结果 / 只读查询无产物填空数组}"],
"next_step": "{下一步建议,如 无 / 等待用户下一步指令}",
"issue_summary": "{Issue 最新聚合结论,紧凑文本,用 | 分隔}"
}
注意:只输出一个 JSON 块,放在答复末尾。
Related skills
博客系统 API 管理工具,覆盖文章/标签/用户/评论/留言/说说/文件上传/健康检查 8 大资源域 26 个端点。 无认证(公开 API),提供统一的内容管理能力。
管理 Blog System (FastAPI) 全部 32 个 API 端点:文章/标签/用户/评论/留言/说说/ 文件上传/健康检查/博客页面/后台管理。无认证公开 API,支持 CLI 子命令调用。
管理博客系统(FastAPI)全部 32 个 API 端点:文章 CRUD/恢复/热门、标签管理、用户管理、 评论/留言/说说管理、文件上传、后台管理、前端页面、健康检查。无认证,curl+JSON 示例。
博客内容发布 Skill,基于 FastAPI 博客系统 OpenAPI 文档自动生成。 覆盖文章/标签/用户/评论/留言/说说/文件上传/健康检查全部 API。
Manage Blog System API v1.0.0 via 27 CLI subcommands covering articles, tags, users, comments, messages, moods, uploads, and health checks.