archive: 紫鸟/HubStudio 文档快照(3889 篇 Markdown)
来源:紫鸟帮助中心/博客/主站资讯 + HubStudio API 文档/帮助中心 + 三个官方 skill 仓库。 只入库 Markdown 与元数据;原始 HTML 与 tarball 留在本机。
This commit is contained in:
commit
322b7737eb
3976 files changed
+695714
No files matched your search
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2026 ziniao-open
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -0,0 +1,244 @@
|
||||
# ziniao-skills
|
||||
|
||||
紫鸟浏览器 AI Agent Skill 包,覆盖 ERP 管理(员工/角色/设备/标签/部门)和店铺自动化操作,适配 ziniao-cli 与 ZClaw 本地接口。
|
||||
|
||||
## Skill 安装
|
||||
|
||||
以后 Skill 内置在 `ziniao-cli` 里安装,不再单独走 `npx skills add`:
|
||||
|
||||
```bash
|
||||
ziniao-cli skills install
|
||||
```
|
||||
|
||||
先安装 CLI 后再执行上面的命令。备选(不推荐):`npx skills add ziniao-open/skills -y -g`
|
||||
|
||||
## ziniao-cli 安装
|
||||
|
||||
```bash
|
||||
npm install -g @ziniao-open/cli
|
||||
```
|
||||
|
||||
安装后验证:
|
||||
|
||||
```bash
|
||||
ziniao-cli --version
|
||||
```
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 1. 初始化配置
|
||||
|
||||
```bash
|
||||
ziniao-cli config init
|
||||
```
|
||||
|
||||
按提示选择"新建应用"或"手动输入 API Key",完成后凭证自动存入系统 Keychain。
|
||||
|
||||
### 2. AI Agent 初始化流程
|
||||
|
||||
AI Agent 应使用非交互模式:
|
||||
|
||||
```bash
|
||||
ziniao-cli config init --new
|
||||
```
|
||||
|
||||
该命令会阻塞直到审核通过、被拒绝或超时(1 小时),Agent 的处理流程:
|
||||
|
||||
1. 后台执行 `config init --new`
|
||||
2. 从 stderr 输出中提取 URL(包含 `memberAuth?cliRequestId=` 的行)
|
||||
3. 将链接展示给用户,提示在浏览器中打开完成应用创建
|
||||
4. 等待命令完成(审核通过/拒绝/超时)
|
||||
|
||||
输出示例:
|
||||
|
||||
```
|
||||
请在浏览器中打开以下链接完成应用创建:
|
||||
|
||||
https://open.ziniao.com/memberAuth?cliRequestId=a1b2c3d4-...&from=cli
|
||||
|
||||
⏳ 等待应用创建及审核... (按 Ctrl+C 取消)
|
||||
✓ 审核已通过
|
||||
✓ 企业 ID: 15393*****3459
|
||||
✓ 配置已保存 (profile: zhangsan)
|
||||
```
|
||||
|
||||
初始化完成后,`isBoss` 字段决定账号权限范围:
|
||||
|
||||
| 账号类型 | 服务端 API | ZClaw Bridge(本地浏览器) |
|
||||
|---------|-----------|--------------------------|
|
||||
| Boss | 全部可用 | 全部可用 |
|
||||
| 成员 | 不可用 | 全部可用 |
|
||||
|
||||
可通过 `ziniao-cli config show` 查看当前账号类型。
|
||||
|
||||
### 3. 多账号管理
|
||||
|
||||
支持多个账号配置(profile),通过 `config use` 切换:
|
||||
|
||||
```bash
|
||||
# 列出所有 profile
|
||||
ziniao-cli config list
|
||||
|
||||
# 切换到指定 profile
|
||||
ziniao-cli config use <name>
|
||||
|
||||
# 重命名 profile
|
||||
ziniao-cli config rename <old> <new>
|
||||
|
||||
# 删除 profile(需确认,--yes 跳过)
|
||||
ziniao-cli config remove --profile <name>
|
||||
```
|
||||
|
||||
### 4. 验证连通性
|
||||
|
||||
```bash
|
||||
ziniao-cli doctor
|
||||
```
|
||||
|
||||
### 5. 开始使用
|
||||
|
||||
```bash
|
||||
# 查看员工列表
|
||||
ziniao-cli staff list --format table
|
||||
|
||||
# 查看部门树
|
||||
ziniao-cli department list --tree
|
||||
|
||||
# 查看角色列表
|
||||
ziniao-cli role list --format table
|
||||
```
|
||||
|
||||
## 命令概览
|
||||
|
||||
### 配置管理
|
||||
|
||||
| 命令 | 说明 |
|
||||
|------|------|
|
||||
| `config init` | 初始化配置 |
|
||||
| `config show` | 显示当前配置 |
|
||||
| `config list` | 列出所有 profile |
|
||||
| `config use <name>` | 切换当前 profile |
|
||||
| `config rename <old> <new>` | 重命名 profile |
|
||||
| `config remove` | 删除 profile(需确认) |
|
||||
|
||||
### 部门管理
|
||||
|
||||
| 命令 | 说明 |
|
||||
|------|------|
|
||||
| `department list` | 查询部门列表 |
|
||||
| `department create` | 新增部门 |
|
||||
| `department update` | 修改部门 |
|
||||
| `department delete` | 删除部门 |
|
||||
| `department reorder` | 部门排序 |
|
||||
|
||||
### 员工管理
|
||||
|
||||
| 命令 | 说明 |
|
||||
|------|------|
|
||||
| `staff list` | 查询员工列表 |
|
||||
| `staff create` | 新增员工 |
|
||||
| `staff update` | 修改员工信息 |
|
||||
| `staff enable` | 启用员工 |
|
||||
| `staff disable` | 禁用员工 |
|
||||
| `staff remove` | 删除员工 |
|
||||
| `staff transfer` | 员工调岗 |
|
||||
|
||||
### 角色管理
|
||||
|
||||
| 命令 | 说明 |
|
||||
|------|------|
|
||||
| `role list` | 查询角色列表 |
|
||||
| `role detail` | 查看角色详情 |
|
||||
| `role create` | 创建角色 |
|
||||
| `role update` | 修改角色 |
|
||||
| `role assign` | 分配角色给员工 |
|
||||
| `role staff-roles` | 查看员工已分配角色 |
|
||||
| `role permissions` | 查看可用权限列表 |
|
||||
|
||||
### 账号(店铺)管理
|
||||
|
||||
| 命令 | 说明 |
|
||||
|------|------|
|
||||
| `account list` | 查询账号列表 |
|
||||
| `account create` | 创建账号 |
|
||||
| `account update` | 修改账号信息 |
|
||||
| `account delete` | 删除账号 |
|
||||
| `account auth-add` | 授权员工访问店铺 |
|
||||
| `account auth-remove` | 撤销员工授权 |
|
||||
| `account auth-clean` | 清空店铺所有授权 |
|
||||
| `account auth-list` | 查询员工被授权的店铺 |
|
||||
| `account auth-users` | 查询店铺已授权的员工 |
|
||||
| `account tag-list` | 查询企业标签列表 |
|
||||
| `account tag-create` | 创建标签 |
|
||||
| `account tag-rename` | 重命名标签 |
|
||||
| `account tag-delete` | 删除标签 |
|
||||
| `account tag-bind` | 绑定标签到店铺 |
|
||||
| `account tag-unbind` | 解绑标签 |
|
||||
| `account tag-replace` | 全量替换店铺标签 |
|
||||
| `account tag-clear` | 清空店铺标签 |
|
||||
| `account tag-remove` | 从店铺移除标签 |
|
||||
| `account tag-of-store` | 查询店铺绑定的标签 |
|
||||
|
||||
### 设备管理
|
||||
|
||||
| 命令 | 说明 |
|
||||
|------|------|
|
||||
| `device list` | 查询设备列表 |
|
||||
| `device add-custom` | 添加自有设备 |
|
||||
| `device update-custom` | 修改自有设备 |
|
||||
| `device plan-list` | 查询可购买套餐 |
|
||||
| `device bind` | 绑定设备到店铺 |
|
||||
| `device unbind` | 解绑设备 |
|
||||
| `device auto-renew` | 设置自动续费 |
|
||||
| `device purchase` | 购买设备套餐 |
|
||||
| `device renew` | 续费设备 |
|
||||
|
||||
### 浏览器控制(ZClaw)
|
||||
|
||||
| 命令 | 说明 |
|
||||
|------|------|
|
||||
| `store list` | 列出已打开的店铺浏览器 |
|
||||
| `store open` | 打开店铺浏览器 |
|
||||
| `store close` | 关闭店铺浏览器 |
|
||||
| `page visit` | 导航到指定 URL |
|
||||
| `page screenshot` | 页面截图 |
|
||||
| `page automation` | 页面自动化操作 |
|
||||
|
||||
### 通用 API 调用
|
||||
|
||||
对于未提供快捷命令的接口(共 73 个接口中 shortcut 覆盖 45 个),可使用通用 `api` 命令:
|
||||
|
||||
```bash
|
||||
ziniao-cli api <path> [--data '{}'] [--format table] [--jq '.field']
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/store/deletecookie --data '{"storeId":"xxx"}'
|
||||
```
|
||||
|
||||
## Skill 模块
|
||||
|
||||
| Skill | 说明 |
|
||||
|-------|------|
|
||||
| `ziniao-shared` | 共享基础:配置初始化、认证、输出格式、权限点 |
|
||||
| `ziniao-staff` | 员工管理 |
|
||||
| `ziniao-role` | 角色与权限管理 |
|
||||
| `ziniao-department` | 部门管理 |
|
||||
| `ziniao-account` | 账号(店铺)管理与标签 |
|
||||
| `ziniao-device` | 设备管理 |
|
||||
| `ziniao-store` | 浏览器店铺控制(ZClaw) |
|
||||
| `ziniao-page` | 浏览器页面操作(ZClaw) |
|
||||
| `ziniao-access-policy` | 访问策略管理 |
|
||||
| `ziniao-openapi-explorer` | API 路径清单与探索指引 |
|
||||
| `ziniao-workflow-batch-account` | 批量账号授权工作流 |
|
||||
| `ziniao-skill-maker` | 自定义 Skill 创建指引 |
|
||||
|
||||
## 适用环境
|
||||
|
||||
这些 Skill 文档适用于任何支持工具调用的 AI Agent 环境:
|
||||
|
||||
- Claude Code
|
||||
- Cursor
|
||||
- OpenClaw
|
||||
- 其他支持 Skill 协议的 Agent
|
||||
|
||||
## License
|
||||
|
||||
CC BY 4.0
|
||||
@@ -0,0 +1,183 @@
|
||||
---
|
||||
name: ziniao-access-policy
|
||||
version: 1.0.0
|
||||
description: "紫鸟访问策略管理:网页访问规则、网页/网页分组、规则生效成员/账号、账号绑定策略的查询和维护。当前无快捷命令,全部通过 ziniao-cli api 直调。"
|
||||
metadata:
|
||||
requires:
|
||||
bins: ["ziniao-cli"]
|
||||
---
|
||||
|
||||
# 访问策略管理
|
||||
|
||||
**CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../ziniao-shared/SKILL.md`](../ziniao-shared/SKILL.md)**
|
||||
|
||||
访问策略接口用于管理 ERP 网页访问权限,包括访问规则、网页配置、网页分组,以及账号与访问策略的绑定关系。
|
||||
|
||||
当前没有 `access-policy` 快捷命令,全部使用通用 `api` 命令直调。所有接口均为 `POST`、`application/json`,请求体需要显式传 `companyId`。
|
||||
|
||||
## 关键枚举
|
||||
|
||||
| 字段 | 值 | 说明 |
|
||||
|------|----|------|
|
||||
| `activeUser` | `1` | 除 boss 外所有成员 |
|
||||
| `activeUser` | `2` | 指定成员 |
|
||||
| `activeUser` | `3` | 指定部门 |
|
||||
| `activeUser` | `4` | 指定角色 |
|
||||
| `activeAccount` | `0` | 所有账号 |
|
||||
| `activeAccount` | `1` | 指定账号 |
|
||||
| `activeRange` | `1` | 所有网站 |
|
||||
| `activeRange` | `2` | 指定网址-黑名单 |
|
||||
| `activeRange` | `3` | 指定网址-白名单 |
|
||||
| `isActive` | `0` | 禁用 |
|
||||
| `isActive` | `1` | 启用 |
|
||||
|
||||
## 访问规则
|
||||
|
||||
| 操作 | API |
|
||||
|------|-----|
|
||||
| 规则列表 | `/superbrowser/rest/v1/erp/security/access_rule/list` |
|
||||
| 规则详情 | `/superbrowser/rest/v1/erp/security/access_rule/detail` |
|
||||
| 新建规则 | `/superbrowser/rest/v1/erp/security/access_rule/add` |
|
||||
| 编辑规则 | `/superbrowser/rest/v1/erp/security/access_rule/edit` |
|
||||
| 删除规则 | `/superbrowser/rest/v1/erp/security/access_rule/delete` |
|
||||
| 启用/禁用规则 | `/superbrowser/rest/v1/erp/security/access_rule/active` |
|
||||
| 设置生效成员 | `/superbrowser/rest/v1/erp/security/access_rule/change_user` |
|
||||
| 设置生效账号 | `/superbrowser/rest/v1/erp/security/access_rule/change_account` |
|
||||
| 规则可绑定账号列表 | `/superbrowser/rest/v1/erp/security/access_rule/account/bindable_list` |
|
||||
|
||||
```bash
|
||||
# 查询访问规则
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/security/access_rule/list \
|
||||
--data '{"companyId":123,"page":1,"limit":20}'
|
||||
|
||||
# 查看规则详情
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/security/access_rule/detail \
|
||||
--data '{"companyId":123,"ruleId":456}'
|
||||
|
||||
# 删除规则,ruleIds 是数组
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/security/access_rule/delete \
|
||||
--data '{"companyId":123,"ruleIds":[456]}'
|
||||
|
||||
# 启用规则,禁用时 isActive 传 "0"
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/security/access_rule/active \
|
||||
--data '{"companyId":123,"ruleIds":[456],"isActive":"1"}'
|
||||
```
|
||||
|
||||
设置生效成员接口无快捷命令,需通过 `api` 直调。请求体字段必须按接口文档发送:
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `ruleId` | number | 规则 ID |
|
||||
| `activeUser` | number | `1` 除 boss 外所有成员;`2` 指定成员;`3` 指定部门;`4` 指定角色 |
|
||||
| `userChange.addIds` | string[] | 新增成员 ID 列表;无新增传 `[]` |
|
||||
| `userChange.addNames` | string[] | 新增成员用户名列表;无新增传 `[]` |
|
||||
| `userChange.deleteIds` | string[] | 删除成员 ID 列表;无删除传 `[]` |
|
||||
| `userChange.deleteNames` | string[] | 删除成员用户名列表;无删除传 `[]` |
|
||||
| `departmentIds` | number[] | 指定部门列表;非部门模式也传 `[]` |
|
||||
| `roleIds` | number[] | 指定角色列表;非角色模式也传 `[]` |
|
||||
|
||||
`addIds` 和 `addNames` 可任选一个传,两者都传时取并集;`deleteIds/deleteNames` 不能与新增列表重复。`companyId` 由 CLI 自动注入,不要在 `--data` 中手动传入公共参数。
|
||||
|
||||
```bash
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/security/access_rule/change_user \
|
||||
--data '{"companyId":123,"ruleId":456,"activeUser":2,"userChange":{"addIds":["1001"],"deleteIds":[],"addNames":[],"deleteNames":[]},"departmentIds":[],"roleIds":[]}'
|
||||
```
|
||||
|
||||
设置生效账号时,`accountChange.addIds` 和 `accountChange.deleteIds` 传账号 ID 字符串数组。
|
||||
|
||||
```bash
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/security/access_rule/change_account \
|
||||
--data '{"companyId":123,"ruleId":456,"activeAccount":1,"accountChange":{"addIds":["2001"],"deleteIds":[]}}'
|
||||
```
|
||||
|
||||
新建/编辑规则的请求体较复杂,核心结构如下:
|
||||
|
||||
```json
|
||||
{
|
||||
"companyId": 123,
|
||||
"name": "限制文件下载",
|
||||
"desc": "运营角色适用",
|
||||
"activeUser": 2,
|
||||
"userChange": { "addIds": ["1001"], "addNames": [] },
|
||||
"departmentIds": [],
|
||||
"roleIds": [],
|
||||
"activeAccount": 0,
|
||||
"accountChange": { "addIds": [] },
|
||||
"activeRange": "3",
|
||||
"configs": [
|
||||
{
|
||||
"urlId": 789,
|
||||
"isAccessible": true,
|
||||
"isLog": true,
|
||||
"functions": [
|
||||
{ "function": "file_download", "permission": 3 }
|
||||
]
|
||||
}
|
||||
],
|
||||
"isSkipRuleConflictCheck": false,
|
||||
"effectiveTime": { "timeType": "0", "startTime": 0, "endTime": 0 }
|
||||
}
|
||||
```
|
||||
|
||||
## 网页与网页分组
|
||||
|
||||
| 操作 | API |
|
||||
|------|-----|
|
||||
| 网页列表 | `/superbrowser/rest/v1/erp/security/access_rule_url/list` |
|
||||
| 网页详情 | `/superbrowser/rest/v1/erp/security/access_rule_url/detail` |
|
||||
| 添加网页 | `/superbrowser/rest/v1/erp/security/access_rule_url/add` |
|
||||
| 编辑网页 | `/superbrowser/rest/v1/erp/security/access_rule_url/edit` |
|
||||
| 删除网页 | `/superbrowser/rest/v1/erp/security/access_rule_url/delete` |
|
||||
| 网页修改分组 | `/superbrowser/rest/v1/erp/security/access_rule_url/change_group` |
|
||||
| 网页分组列表 | `/superbrowser/rest/v1/erp/security/access_rule_url_group/list` |
|
||||
| 添加网页分组 | `/superbrowser/rest/v1/erp/security/access_rule_url_group/add` |
|
||||
| 编辑网页分组 | `/superbrowser/rest/v1/erp/security/access_rule_url_group/edit` |
|
||||
| 删除网页分组 | `/superbrowser/rest/v1/erp/security/access_rule_url_group/delete` |
|
||||
|
||||
```bash
|
||||
# 查询网页列表
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/security/access_rule_url/list \
|
||||
--data '{"companyId":123,"page":1,"limit":20}'
|
||||
|
||||
# 添加网页
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/security/access_rule_url/add \
|
||||
--data '{"companyId":123,"name":"Amazon后台","groupId":10,"urlPattern":"https://sellercentral.amazon.com/*","desc":"亚马逊后台"}'
|
||||
|
||||
# 移动网页到分组,urlIds 是数组
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/security/access_rule_url/change_group \
|
||||
--data '{"companyId":123,"groupId":10,"urlIds":[789]}'
|
||||
|
||||
# 查询分组树,isAll=true 时返回 children
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/security/access_rule_url_group/list \
|
||||
--data '{"companyId":123,"groupIdParent":0,"isAll":true}'
|
||||
```
|
||||
|
||||
## 账号绑定策略
|
||||
|
||||
| 操作 | API |
|
||||
|------|-----|
|
||||
| 账号绑定的访问策略列表 | `/superbrowser/rest/v1/erp/security/access_rule/list/one_account` |
|
||||
| 账号添加访问策略 | `/superbrowser/rest/v1/erp/security/access_rule/account_ref/add_to_account` |
|
||||
| 账号移除访问策略 | `/superbrowser/rest/v1/erp/security/access_rule/account_ref/remove_from_account` |
|
||||
|
||||
```bash
|
||||
# 查询某账号已绑定的策略
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/security/access_rule/list/one_account \
|
||||
--data '{"companyId":123,"accountId":"2001","page":1,"limit":20}'
|
||||
|
||||
# 给账号添加访问策略
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/security/access_rule/account_ref/add_to_account \
|
||||
--data '{"companyId":123,"accountId":"2001","ruleIds":[456],"isSkipRuleConflictCheck":false}'
|
||||
|
||||
# 从账号移除访问策略
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/security/access_rule/account_ref/remove_from_account \
|
||||
--data '{"companyId":123,"accountId":"2001","ruleIds":[456]}'
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
- `ruleIds`、`urlIds`、`platformIds`、`tagIds`、`departmentIds`、`roleIds` 都是数组,单个值也要包装成数组。
|
||||
- 成员相关 `addIds/deleteIds/addNames/deleteNames` 是字符串数组;账号相关 `accountChange.addIds/deleteIds` 也是字符串数组。
|
||||
- 新建规则文档说明 `userChange.addIds` 和 `userChange.addNames` 可任选一个传,两者都传时取并集。
|
||||
- `configs.functions.permission` 常用值:`1` 允许、`2` 允许并记录、`3` 限制并记录、`6` 限制。`password`、`mouse_click`、`keyboard_input` 只支持 `1`、`6`。
|
||||
- `request_id` 会由 CLI 输出到 `meta.requestId`,排查接口问题时优先记录该值。
|
||||
@@ -0,0 +1,131 @@
|
||||
---
|
||||
name: ziniao-account
|
||||
version: 1.1.0
|
||||
description: "紫鸟账号(店铺)管理:店铺账号的查询、创建、修改、删除、授权和标签管理。当用户需要查看店铺账号列表、创建/修改/删除账号、管理账号授权或标签时使用。"
|
||||
metadata:
|
||||
requires:
|
||||
bins: ["ziniao-cli"]
|
||||
---
|
||||
|
||||
# 账号(店铺)管理
|
||||
|
||||
**CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../ziniao-shared/SKILL.md`](../ziniao-shared/SKILL.md)**
|
||||
**CRITICAL — Shortcuts 执行前,务必先读取对应的 references/ 说明文档。**
|
||||
|
||||
紫鸟的"账号"指浏览器店铺账号(store),不是员工用户。本模块共覆盖 22 个接口,全部已有快捷命令。
|
||||
|
||||
> **注意区分:** `account` 命令通过**服务端 API** 管理店铺账号(创建、删除、授权、标签)。如需控制本地浏览器窗口(打开/关闭/导航/截图),请使用 `store` + `page` 命令(走本地 ZClaw Bridge)。
|
||||
|
||||
> **获取店铺列表的选择:**
|
||||
> - 成员账号没有服务端 `account list` 权限,应使用 `store list`(本地 ZClaw Bridge)获取店铺列表。
|
||||
> - Boss 账号如果目的是打开店铺浏览器,也应优先使用 `store list` 获取本地可用店铺,而非 `account list`。
|
||||
> - `account list` 适用于需要管理店铺元数据(标签、授权、批量操作)的场景。
|
||||
> - 成员类型可通过 `ziniao-cli config show` 结果中的 `isBoss` 字段判断。
|
||||
|
||||
## Shortcuts — 账号 CRUD
|
||||
|
||||
| 命令 | 说明 | 详细文档 |
|
||||
|------|------|---------|
|
||||
| `account list` | 查询账号列表 | [`references/ziniao-account-list.md`](references/ziniao-account-list.md) |
|
||||
| `account create` | 创建账号 | [`references/ziniao-account-create.md`](references/ziniao-account-create.md) |
|
||||
| `account update` | 编辑账号基础信息 | 只发修改字段:`--id xxx --name "新名"` |
|
||||
| `account delete` | 删除账号(高风险) | `--id xxx`,逗号分隔可批量,需 `--yes` |
|
||||
|
||||
```bash
|
||||
# 查询
|
||||
ziniao-cli account list --name "某店" --format table
|
||||
ziniao-cli account list --page-all
|
||||
|
||||
# 创建
|
||||
ziniao-cli account create --name "我的店铺" --site-id 1 --remark "测试"
|
||||
|
||||
# 修改
|
||||
ziniao-cli account update --id 123 --name "新名称" --site-id 1
|
||||
|
||||
# 删除(批量)
|
||||
ziniao-cli account delete --id "101,102,103" --yes
|
||||
```
|
||||
|
||||
## Shortcuts — 授权管理
|
||||
|
||||
| 命令 | 说明 |
|
||||
|------|------|
|
||||
| `account auth-add` | 授权员工访问店铺(`--store-id` 和 `--staff-id` 均支持逗号分隔批量) |
|
||||
| `account auth-remove` | 撤销员工访问权限(`--store-id` 和 `--staff-id` 均支持逗号分隔批量) |
|
||||
| `account auth-clean` | 清空店铺所有员工授权(高风险) |
|
||||
| `account auth-list` | 查询某员工被授权的店铺列表 |
|
||||
| `account auth-users` | 查询某店铺已授权的员工列表 |
|
||||
|
||||
```bash
|
||||
# 批量授权(把 3 个店铺同时授权给 3 个员工)
|
||||
ziniao-cli account auth-add --store-id "111,222,333" --staff-id "201,202,203"
|
||||
|
||||
# 撤销单人
|
||||
ziniao-cli account auth-remove --store-id 111 --staff-id 201
|
||||
|
||||
# 查看某员工被授权的所有店铺
|
||||
ziniao-cli account auth-list --user-id 201 --page-all --format table
|
||||
|
||||
# 清空授权(高风险)
|
||||
ziniao-cli account auth-clean --store-id 111 --yes
|
||||
```
|
||||
|
||||
## Shortcuts — 标签管理
|
||||
|
||||
| 命令 | 说明 |
|
||||
|------|------|
|
||||
| `account tag-list` | 查询企业下所有标签 |
|
||||
| `account tag-of-store --store-id` | 查询某店铺绑定的标签列表 |
|
||||
| `account tag-create --name` | 创建标签 |
|
||||
| `account tag-rename --id --name` | 重命名标签 |
|
||||
| `account tag-delete --id` | 删除标签(高风险) |
|
||||
| `account tag-bind --tag-id --store-id` | 绑定标签到店铺(`--store-id` 支持批量) |
|
||||
| `account tag-unbind --tag-id --store-id` | 解绑(`--store-id` 支持批量) |
|
||||
| `account tag-replace --store-id --tag-ids` | 全量替换店铺的标签集合 |
|
||||
| `account tag-clear --store-id` | 清空店铺所有标签(高风险) |
|
||||
| `account tag-remove --tag-id --store-id` | 从指定店铺移除该标签(高风险,`--store-id` 支持批量) |
|
||||
|
||||
底层接口与请求体字段必须严格按接口文档发送,不要补发未记录的别名字段。
|
||||
|
||||
| 命令 | API | 请求体字段(不含公共 `companyId`) |
|
||||
|------|-----|------------------------------------------|
|
||||
| `account tag-list` | `/superbrowser/rest/v1/erp/tag/list` | 无 |
|
||||
| `account tag-of-store --store-id` | `/superbrowser/rest/v1/store-tag/list` | `storeId`, 可选 `withSystem` |
|
||||
| `account tag-create --name` | `/superbrowser/rest/v1/store-tag/add` | `tagName` |
|
||||
| `account tag-rename --id --name` | `/superbrowser/rest/v1/store-tag/rename` | `tid`, `name` |
|
||||
| `account tag-delete --id` | `/superbrowser/rest/v1/store-tag/delete` | `tagIds` |
|
||||
| `account tag-bind --tag-id --store-id` | `/superbrowser/rest/v1/store-tag/bind` | `tagIds`, `storeIds` |
|
||||
| `account tag-unbind --tag-id --store-id` | `/superbrowser/rest/v1/store-tag/unbind` | `tagIds`, `storeIds` |
|
||||
| `account tag-replace --store-id --tag-ids` | `/superbrowser/rest/v1/store-tag/replace` | `tagIds`, `storeIds` |
|
||||
| `account tag-clear --store-id` | `/superbrowser/rest/v1/store-tag/clear` | `storeIds` |
|
||||
| `account tag-remove --tag-id --store-id` | `/superbrowser/rest/v1/store-tag/remove` | `tagIds`, `storeIds` |
|
||||
|
||||
```bash
|
||||
# 查看所有标签
|
||||
ziniao-cli account tag-list --format table
|
||||
|
||||
# 查看某店铺已有标签
|
||||
ziniao-cli account tag-of-store --store-id 101
|
||||
|
||||
# 创建标签后批量绑定到多个店铺
|
||||
ziniao-cli account tag-create --name "重点店铺"
|
||||
ziniao-cli account tag-bind --tag-id 99 --store-id "101,102,103"
|
||||
|
||||
# 全量替换(将店铺 101 的标签换成 99 和 100)
|
||||
ziniao-cli account tag-replace --store-id 101 --tag-ids "99,100"
|
||||
|
||||
# 从多个店铺移除某个标签
|
||||
ziniao-cli account tag-remove --tag-id 99 --store-id "101,102" --yes
|
||||
```
|
||||
|
||||
## 通用 api 覆盖(仅剩的接口)
|
||||
|
||||
```bash
|
||||
# 缓存清理(仅此接口无快捷命令)
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/store/deletecookie --data '{"removeStoreId":"xxx","removeType":1}'
|
||||
# removeType: 1=清除所有缓存, 2=仅保留 cookie, 3=仅保留二步验证状态
|
||||
|
||||
# 账号授权用户列表 / 用户有权限的账号列表
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/store/user/list --data '{"storeIdList":["xxx"],"page":1,"limit":10}'
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/user/stores --data '{"userId":"xxx","page":1,"limit":10}'
|
||||
```
|
||||
@@ -0,0 +1,43 @@
|
||||
# account create
|
||||
|
||||
> **前置条件:** 先阅读 [`../ziniao-shared/SKILL.md`](../../ziniao-shared/SKILL.md)。
|
||||
|
||||
创建店铺账号。写入操作。CLI 将嵌套的 `storeData` 数组展平为命名 flag。
|
||||
|
||||
## 命令
|
||||
|
||||
```bash
|
||||
ziniao-cli account create --name "新店铺"
|
||||
ziniao-cli account create --name "US Store" --site-id 123 --proxy-id 456
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
| 参数 | 必填 | 说明 |
|
||||
|------|------|------|
|
||||
| `--name` | 是 | 账号名称 |
|
||||
| `--site-id` | 否 | 平台 ID |
|
||||
| `--proxy-id` | 否 | 代理设备 ID |
|
||||
| `--group-id` | 否 | 分组 ID |
|
||||
| `--remark` | 否 | 备注 |
|
||||
|
||||
## 底层 API(快捷命令不可用时的兜底)
|
||||
|
||||
```bash
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/store/create \
|
||||
--data '{"storeData":[{"name":"新店铺","siteId":123}]}'
|
||||
```
|
||||
|
||||
**注意事项:**
|
||||
- `storeData` 必须是**数组**,即使只创建一个店铺
|
||||
- 字段名是 `name`(不是 `storeName`)
|
||||
- 在 **Windows Git Bash** 中,以 `/` 开头的路径会被自动转换为本地文件路径,需加环境变量:
|
||||
```bash
|
||||
MSYS_NO_PATHCONV=1 ziniao-cli api /superbrowser/rest/v1/erp/store/create \
|
||||
--data '{"storeData":[{"name":"新店铺"}]}'
|
||||
```
|
||||
- 在 **PowerShell** 或 **CMD** 中无此问题
|
||||
|
||||
## 参考
|
||||
|
||||
- [ziniao-account](../SKILL.md) — 账号管理全部命令
|
||||
@@ -0,0 +1,30 @@
|
||||
# account list
|
||||
|
||||
> **前置条件:** 先阅读 [`../ziniao-shared/SKILL.md`](../../ziniao-shared/SKILL.md)。
|
||||
|
||||
查询账号列表。只读操作,支持分页和按名称搜索。
|
||||
|
||||
## 命令
|
||||
|
||||
```bash
|
||||
ziniao-cli account list
|
||||
ziniao-cli account list --format table
|
||||
ziniao-cli account list --name "Rosehut"
|
||||
ziniao-cli account list --page-all --page-size 50
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
| 参数 | 必填 | 说明 |
|
||||
|------|------|------|
|
||||
| `--name` | 否 | 按名称搜索 |
|
||||
| `--page-size` | 否 | 每页条数(默认 20) |
|
||||
| `--page-all` | 否 | 自动翻页获取全部 |
|
||||
| `--page-limit` | 否 | 最大翻页数(默认 10,0 为不限) |
|
||||
| `--page-delay` | 否 | 翻页间隔毫秒数(默认 200) |
|
||||
| `--format` | 否 | json \| table \| csv |
|
||||
| `--jq` | 否 | jq 过滤表达式 |
|
||||
|
||||
## 参考
|
||||
|
||||
- [ziniao-account](../SKILL.md) — 账号管理全部命令
|
||||
@@ -0,0 +1,74 @@
|
||||
---
|
||||
name: ziniao-department
|
||||
version: 1.0.0
|
||||
description: "紫鸟部门管理:部门的查询、创建、修改、删除和排序。当用户需要查看组织架构、创建/修改/删除部门、调整部门排序时使用。"
|
||||
metadata:
|
||||
requires:
|
||||
bins: ["ziniao-cli"]
|
||||
---
|
||||
|
||||
# 部门管理
|
||||
|
||||
**CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../ziniao-shared/SKILL.md`](../ziniao-shared/SKILL.md),其中包含认证、错误处理和安全规则**
|
||||
**CRITICAL — 所有 Shortcuts 在执行之前,务必先用 Read 工具读取其对应的 references/ 说明文档,禁止直接盲目调用命令。**
|
||||
|
||||
## 核心场景
|
||||
|
||||
### 查看组织架构
|
||||
|
||||
用户想了解公司部门结构时,使用 `--tree` 展示层级关系:
|
||||
|
||||
```bash
|
||||
ziniao-cli department list --tree
|
||||
```
|
||||
|
||||
输出树形结构:
|
||||
```
|
||||
├── 技术部 (id: 15868464646076)
|
||||
│ ├── 前端组 (id: 15954943062431)
|
||||
│ └── 后端组 (id: 15954943062432)
|
||||
└── 市场部 (id: 15868464646077)
|
||||
```
|
||||
|
||||
### 创建部门
|
||||
|
||||
`hierarchy` 由 CLI 自动推算(查父部门层级 +1),用户无需关心:
|
||||
|
||||
```bash
|
||||
# 在已有部门下创建子部门(parentId 必须为已存在的部门 ID,不支持传 0)
|
||||
ziniao-cli department create --name "华东区" --parent-id 15868464646076
|
||||
```
|
||||
|
||||
> ⚠ `--parent-id` 不能传 0,必须传已存在的父部门 ID。如需查询可用的父部门 ID,先执行 `department list --tree`。
|
||||
|
||||
### 危险操作
|
||||
|
||||
删除部门是 `high-risk-write`,会要求确认。**删除父部门会级联删除所有子部门,且不可恢复。** 删除前建议先检查是否有子部门或员工:
|
||||
|
||||
```bash
|
||||
ziniao-cli department list --tree # 检查子部门
|
||||
ziniao-cli staff list --department-id xxx # 检查是否有员工
|
||||
ziniao-cli department delete --id xxx # 执行删除(需确认)
|
||||
```
|
||||
|
||||
## Shortcuts
|
||||
|
||||
| 命令 | 说明 | 详细文档 |
|
||||
|------|------|---------|
|
||||
| `department list` | 查询部门列表 | [`references/ziniao-department-list.md`](references/ziniao-department-list.md) |
|
||||
| `department create` | 新增部门 | [`references/ziniao-department-create.md`](references/ziniao-department-create.md) |
|
||||
| `department update` | 修改部门 | 只发修改字段:`--id xxx --name "新名"` |
|
||||
| `department delete` | 删除部门(子部门及员工归属将被清除) | `high-risk-write`,`--yes` 跳过确认 |
|
||||
| `department reorder` | 调整排序 | `--parent-id xxx --order "id1,id2,id3"` |
|
||||
|
||||
## 通用 api 覆盖
|
||||
|
||||
所有部门接口也可通过通用 api 命令调用:
|
||||
|
||||
```bash
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/department/list
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/department/add --data '{"name":"xxx","parentId":"<父部门ID>","hierarchy":"0"}'
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/department/update --data '{"id":"xxx","name":"新名"}'
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/department/delete --data '{"id":"xxx"}'
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/department/order --data '{"parentId":"xxx","order":["id1","id2"]}'
|
||||
```
|
||||
@@ -0,0 +1,31 @@
|
||||
# department create
|
||||
|
||||
> **前置条件:** 先阅读 [`../ziniao-shared/SKILL.md`](../../ziniao-shared/SKILL.md) 了解认证和安全规则。
|
||||
|
||||
新增部门。写入操作。
|
||||
|
||||
## 命令
|
||||
|
||||
```bash
|
||||
# 创建顶级部门
|
||||
ziniao-cli department create --name "市场部"
|
||||
|
||||
# 创建子部门(hierarchy 自动推算)
|
||||
ziniao-cli department create --name "华东区" --parent-id 15868464646076
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
| 参数 | 必填 | 说明 |
|
||||
|------|------|------|
|
||||
| `--name` | 是 | 部门名称 |
|
||||
| `--parent-id` | 否 | 父部门 ID(默认 "0" 表示顶级部门) |
|
||||
|
||||
## 智能推算
|
||||
|
||||
- `hierarchy` 由 CLI 自动推算:无 `--parent-id` 则 `hierarchy=0`;有则查父部门层级 +1
|
||||
- 用户无需关心 `hierarchy` 参数
|
||||
|
||||
## 参考
|
||||
|
||||
- [ziniao-department](../SKILL.md) — 部门管理全部命令
|
||||
@@ -0,0 +1,54 @@
|
||||
# department list
|
||||
|
||||
> **前置条件:** 先阅读 [`../ziniao-shared/SKILL.md`](../../ziniao-shared/SKILL.md) 了解认证和安全规则。
|
||||
|
||||
查询部门列表。只读操作。
|
||||
|
||||
## 命令
|
||||
|
||||
```bash
|
||||
# 默认 JSON 输出
|
||||
ziniao-cli department list
|
||||
|
||||
# 树形展示
|
||||
ziniao-cli department list --tree
|
||||
|
||||
# 表格输出
|
||||
ziniao-cli department list --format table
|
||||
|
||||
# jq 过滤顶级部门
|
||||
ziniao-cli department list --jq '.[] | select(.parentId == 0)'
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
| 参数 | 必填 | 说明 |
|
||||
|------|------|------|
|
||||
| `--tree` | 否 | 以树形结构展示部门层级(按 parentId 关系渲染) |
|
||||
| `--format` | 否 | 输出格式:json(默认)\| table \| csv |
|
||||
| `--jq` / `-q` | 否 | jq 过滤表达式 |
|
||||
|
||||
## 输出字段
|
||||
|
||||
| 字段 | 说明 |
|
||||
|------|------|
|
||||
| `id` | 部门 ID |
|
||||
| `name` | 部门名称 |
|
||||
| `parentId` | 父部门 ID(0 表示顶级) |
|
||||
| `hierarchy` | 层级深度 |
|
||||
|
||||
## 树形输出格式
|
||||
|
||||
当使用 `--tree` 时,按层级渲染:
|
||||
|
||||
```
|
||||
├── 部门名 (id: 123)
|
||||
│ ├── 子部门 (id: 456)
|
||||
│ └── 子部门 (id: 789)
|
||||
└── 其他部门 (id: 101)
|
||||
```
|
||||
|
||||
## 参考
|
||||
|
||||
- [ziniao-department](../SKILL.md) — 部门管理全部命令
|
||||
- [ziniao-shared](../../ziniao-shared/SKILL.md) — 认证和全局参数
|
||||
@@ -0,0 +1,104 @@
|
||||
---
|
||||
name: ziniao-device
|
||||
version: 1.1.0
|
||||
description: "紫鸟设备管理:代理设备(IP)的查询、添加、修改、绑定/解绑、购买续费和自动续费。当用户需要查看代理设备列表、添加/修改自有代理、绑定设备到店铺或管理设备费用时使用。"
|
||||
metadata:
|
||||
requires:
|
||||
bins: ["ziniao-cli"]
|
||||
---
|
||||
|
||||
# 设备管理
|
||||
|
||||
**CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../ziniao-shared/SKILL.md`](../ziniao-shared/SKILL.md)**
|
||||
|
||||
管理紫鸟浏览器使用的代理设备(IP)。常用 9 个接口已有快捷命令覆盖;价格查询、历史绑定记录使用通用 `api` 命令。
|
||||
|
||||
## 代理类型映射
|
||||
|
||||
| CLI 值 | API 值 | 说明 |
|
||||
|--------|--------|------|
|
||||
| http | 0 | HTTP 代理 |
|
||||
| https | 1 | HTTPS 代理 |
|
||||
| socks5 | 2 | SOCKS5 代理 |
|
||||
| ssh | 3 | SSH 隧道 |
|
||||
| ssl | 4 | SSL 代理 |
|
||||
|
||||
## Shortcuts — 查询与自有设备
|
||||
|
||||
| 命令 | 说明 | 详细文档 |
|
||||
|------|------|---------|
|
||||
| `device list` | 查询设备列表 | [`references/ziniao-device-list.md`](references/ziniao-device-list.md) |
|
||||
| `device add-custom` | 添加自有设备 | [`references/ziniao-device-add-custom.md`](references/ziniao-device-add-custom.md) |
|
||||
| `device update-custom` | 修改自有设备 | 部分更新:`--id xxx --addr "1.2.3.4"` |
|
||||
|
||||
```bash
|
||||
ziniao-cli device list --format table
|
||||
ziniao-cli device list --page-all
|
||||
|
||||
ziniao-cli device add-custom --name "我的代理" --proxy-type socks5 \
|
||||
--addr "1.2.3.4" --port 1080 --proxy-user admin --proxy-pass secret
|
||||
|
||||
ziniao-cli device update-custom --id 123 --addr "5.6.7.8"
|
||||
```
|
||||
|
||||
底层接口:设备列表 `/superbrowser/rest/v1/erp/ip/page`;添加自有设备 `/superbrowser/rest/v1/erp/ip/self/add/new`;修改自有设备 `/superbrowser/rest/v1/erp/ip/self/edit/new`。
|
||||
|
||||
## Shortcuts — 绑定管理
|
||||
|
||||
| 命令 | 说明 |
|
||||
|------|------|
|
||||
| `device bind --id --store-id` | 将设备绑定到店铺(`--store-id` 支持批量) |
|
||||
| `device unbind --store-id` | 按店铺 ID 解绑设备(`--store-id` 支持批量) |
|
||||
|
||||
```bash
|
||||
# 将设备 10 绑定到三个店铺
|
||||
ziniao-cli device bind --id 10 --store-id "101,102,103"
|
||||
|
||||
# 批量解绑
|
||||
ziniao-cli device unbind --store-id "101,102,103"
|
||||
```
|
||||
|
||||
> ⚠ 批量解绑为逐个执行,部分失败不影响已成功项,也不会回滚。
|
||||
|
||||
底层接口:绑定 `/superbrowser/rest/v1/erp/ip/bind`;解绑 `/superbrowser/rest/v1/erp/ip/unbind`。
|
||||
|
||||
## Shortcuts — 费用相关(涉及真实扣费)
|
||||
|
||||
> ⚠ `purchase` 和 `renew` 为 `high-risk-write`,执行前会要求确认或需传 `--yes`。
|
||||
|
||||
| 命令 | 说明 |
|
||||
|------|------|
|
||||
| `device plan-list` | 查询可购买的套餐列表(先看这里) |
|
||||
| `device purchase --plan-id --period-id --count` | 购买套餐(涉及费用,不可撤销) |
|
||||
| `device renew --id --period-id` | 续费设备(`--id` 支持批量,涉及费用) |
|
||||
| `device auto-renew --id --enable` | 批量开启/关闭自动续费 |
|
||||
|
||||
```bash
|
||||
# 先查套餐,再购买
|
||||
ziniao-cli device plan-list --format table
|
||||
ziniao-cli device purchase --plan-id "plan_xxx" --period-id 1 --count 3
|
||||
|
||||
# 续费单台
|
||||
ziniao-cli device renew --id 10 --period-id 1
|
||||
|
||||
# 批量开启自动续费
|
||||
ziniao-cli device auto-renew --id "10,11,12" --enable true
|
||||
|
||||
# 关闭自动续费(bool 类型必须用等号连接)
|
||||
ziniao-cli device auto-renew --id "10,11,12" --enable=false
|
||||
|
||||
# 关闭自动续费
|
||||
ziniao-cli device auto-renew --id 10 --enable=false
|
||||
```
|
||||
|
||||
底层接口:套餐 `/superbrowser/rest/v1/erp/package/new`;购买 `/superbrowser/rest/v1/erp/purchase`;续费 `/superbrowser/rest/v1/erp/renew`;自动续费 `/superbrowser/rest/v1/erp/ip/renewal`。
|
||||
|
||||
## 通用 api 覆盖
|
||||
|
||||
```bash
|
||||
# 查询已购设备价格
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/proxy/purchased_package_info --data '{"proxyId":"123"}'
|
||||
|
||||
# 查询设备历史绑定记录
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/ip/historybind --data '{"proxyId":"123"}'
|
||||
```
|
||||
@@ -0,0 +1,52 @@
|
||||
# device add-custom
|
||||
|
||||
> **前置条件:** 先阅读 [`../ziniao-shared/SKILL.md`](../../ziniao-shared/SKILL.md)。
|
||||
|
||||
添加自有代理设备。CLI 将嵌套的 `proxy` 对象展平为命名 flag。
|
||||
|
||||
底层 API:`/superbrowser/rest/v1/erp/ip/self/add/new`
|
||||
|
||||
## 命令
|
||||
|
||||
```bash
|
||||
# 基础用法
|
||||
ziniao-cli device add-custom \
|
||||
--name "美国代理1" \
|
||||
--proxy-type socks5 \
|
||||
--addr "1.2.3.4" \
|
||||
--port 1080
|
||||
|
||||
# 带认证
|
||||
ziniao-cli device add-custom \
|
||||
--name "美国代理1" \
|
||||
--proxy-type socks5 \
|
||||
--addr "1.2.3.4" \
|
||||
--port 1080 \
|
||||
--proxy-user admin \
|
||||
--proxy-pass secret
|
||||
|
||||
# 动态 IP
|
||||
ziniao-cli device add-custom \
|
||||
--name "动态代理" \
|
||||
--proxy-type http \
|
||||
--addr "proxy.example.com" \
|
||||
--port 8080 \
|
||||
--dynamic
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
| 参数 | 必填 | 说明 |
|
||||
|------|------|------|
|
||||
| `--name` | 是 | 设备名称 |
|
||||
| `--proxy-type` | 是 | http \| https \| socks5 \| ssh \| ssl |
|
||||
| `--addr` | 是 | 代理地址 |
|
||||
| `--port` | 是 | 代理端口 |
|
||||
| `--proxy-user` | 否 | 代理用户名 |
|
||||
| `--proxy-pass` | 否 | 代理密码 |
|
||||
| `--dynamic` | 否 | 是否动态 IP |
|
||||
| `--defy-warning` | 否 | 是否无视风险导入:1=是,0=否,默认 1 |
|
||||
|
||||
## 参考
|
||||
|
||||
- [ziniao-device](../SKILL.md) — 设备管理全部命令
|
||||
@@ -0,0 +1,29 @@
|
||||
# device list
|
||||
|
||||
> **前置条件:** 先阅读 [`../ziniao-shared/SKILL.md`](../../ziniao-shared/SKILL.md)。
|
||||
|
||||
查询设备列表。只读操作。
|
||||
|
||||
底层 API:`/superbrowser/rest/v1/erp/ip/page`
|
||||
|
||||
## 命令
|
||||
|
||||
```bash
|
||||
ziniao-cli device list
|
||||
ziniao-cli device list --format table
|
||||
ziniao-cli device list --page-all
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
| 参数 | 必填 | 说明 |
|
||||
|------|------|------|
|
||||
| `--page-size` | 否 | 每页条数(默认 20) |
|
||||
| `--page-all` | 否 | 自动翻页获取全部 |
|
||||
| `--page-limit` | 否 | 最大翻页数(默认 10,0 为不限) |
|
||||
| `--page-delay` | 否 | 翻页间隔毫秒数(默认 200) |
|
||||
| `--format` | 否 | json \| table \| csv |
|
||||
|
||||
## 参考
|
||||
|
||||
- [ziniao-device](../SKILL.md) — 设备管理全部命令
|
||||
@@ -0,0 +1,137 @@
|
||||
---
|
||||
name: ziniao-openapi-explorer
|
||||
version: 1.1.0
|
||||
description: "紫鸟 API 探索:当现有快捷命令无法满足需求时,通过通用 api 命令和已知路径清单探索紫鸟全部 73 个 API 接口。"
|
||||
metadata:
|
||||
requires:
|
||||
bins: ["ziniao-cli"]
|
||||
---
|
||||
|
||||
# API 探索
|
||||
|
||||
> **前置条件:** 先阅读 [`../ziniao-shared/SKILL.md`](../ziniao-shared/SKILL.md)。
|
||||
|
||||
当用户的需求**无法被现有快捷命令覆盖**时,使用本技能查找对应的 API 路径并通过 `ziniao-cli api` 裸调。
|
||||
|
||||
## 探索流程
|
||||
|
||||
### Step 1: 确认现有命令不足
|
||||
|
||||
```bash
|
||||
ziniao-cli department --help
|
||||
ziniao-cli staff --help
|
||||
ziniao-cli account --help
|
||||
ziniao-cli device --help
|
||||
ziniao-cli role --help
|
||||
```
|
||||
|
||||
如果已有对应快捷命令,直接使用。
|
||||
|
||||
### Step 2: 从路径清单定位 API
|
||||
|
||||
**禁止猜测 API 路径**,必须从以下清单中查找。
|
||||
|
||||
#### 部门(5 个)✅ 全部已有快捷命令
|
||||
|
||||
| 操作 | 路径 | 快捷命令 |
|
||||
|------|------|---------|
|
||||
| 列表 | `/superbrowser/rest/v1/erp/department/list` | `department list` |
|
||||
| 新增 | `/superbrowser/rest/v1/erp/department/add` | `department create` |
|
||||
| 修改 | `/superbrowser/rest/v1/erp/department/update` | `department update` |
|
||||
| 删除 | `/superbrowser/rest/v1/erp/department/delete` | `department delete` |
|
||||
| 排序 | `/superbrowser/rest/v1/erp/department/order` | `department reorder` |
|
||||
|
||||
#### 员工(5 个)✅ 全部已有快捷命令
|
||||
|
||||
| 操作 | 路径 | 快捷命令 |
|
||||
|------|------|---------|
|
||||
| 列表 | `/superbrowser/rest/v1/erp/staff/list` | `staff list` |
|
||||
| 新增 | `/superbrowser/rest/v2/erp/staff/add` | `staff create` |
|
||||
| 修改 | `/superbrowser/rest/v2/erp/staff/modify` | `staff update` |
|
||||
| 状态 | `/superbrowser/rest/v1/erp/staff/status` | `staff enable/disable/remove` |
|
||||
| 调岗 | `/superbrowser/rest/v1/erp/staff/department` | `staff transfer` |
|
||||
|
||||
#### 账号(23 个)— 仍有 4 个需用 `api`
|
||||
|
||||
| 分类 | 路径前缀 | 快捷命令 |
|
||||
|------|---------|---------|
|
||||
| CRUD | `/superbrowser/rest/v1/erp/store/list\|create\|update/base\|delete` | `account list/create/update/delete` |
|
||||
| 缓存 | `/superbrowser/rest/v1/erp/store/deletecookie` | `api` |
|
||||
| 授权 | `/superbrowser/rest/v1/erp/store/auth/add\|delete\|clean`、`/superbrowser/rest/v1/erp/user/stores`、`/superbrowser/rest/v1/erp/store/user/list` | `account auth-*` |
|
||||
| 授权查询 | `/superbrowser/rest/v1/erp/store/auth/query` | `api` |
|
||||
| 用户账号 | `/superbrowser/rest/v1/erp/store/list/by/user` | `api` |
|
||||
| 附加信息 | `/superbrowser/rest/v1/erp/store/addtion` | `api` |
|
||||
| 标签 | `/superbrowser/rest/v1/erp/tag/list`、`/superbrowser/rest/v1/store-tag/add\|delete\|rename\|bind\|unbind\|replace\|clear\|remove\|list` | `account tag-*` |
|
||||
|
||||
#### 设备(11 个)— 仍有 2 个需用 `api`
|
||||
|
||||
| 分类 | 路径前缀 | 快捷命令 |
|
||||
|------|---------|---------|
|
||||
| 查询 | `/superbrowser/rest/v1/erp/ip/page`、`/superbrowser/rest/v1/erp/proxy/purchased_package_info`、`/superbrowser/rest/v1/erp/ip/historybind` | `device list`(price/history 用 `api`)|
|
||||
| 套餐 | `/superbrowser/rest/v1/erp/package/new` | `device plan-list` |
|
||||
| 购买 | `/superbrowser/rest/v1/erp/purchase\|renew` | `device purchase/renew` |
|
||||
| 自有 | `/superbrowser/rest/v1/erp/ip/self/add/new\|edit/new` | `device add-custom/update-custom` |
|
||||
| 绑定 | `/superbrowser/rest/v1/erp/ip/bind\|unbind\|renewal` | `device bind/unbind/auto-renew` |
|
||||
|
||||
#### 角色(7 个)✅ 全部已有快捷命令
|
||||
|
||||
| 操作 | 路径 | 快捷命令 |
|
||||
|------|------|---------|
|
||||
| 列表 | `/superbrowser/rest/v1/erp/per/role/list` | `role list` |
|
||||
| 详情 | `/superbrowser/rest/v1/erp/per/role/detail` | `role detail` |
|
||||
| 新增 | `/superbrowser/rest/v1/erp/per/role/add` | `role create` |
|
||||
| 修改 | `/superbrowser/rest/v1/erp/per/role/edit` | `role update` |
|
||||
| 分配 | `/superbrowser/rest/v1/erp/staff/change/role` | `role assign` |
|
||||
| 用户角色 | `/superbrowser/rest/v1/erp/staff/role/list` | `role staff-roles` |
|
||||
| 权限列表 | `/superbrowser/rest/v1/erp/per/permission/list` | `role permissions` |
|
||||
|
||||
#### 访问策略(22 个)— 全部需用 `api`
|
||||
|
||||
| 分类 | 路径 |
|
||||
|------|------|
|
||||
| 规则 | `/superbrowser/rest/v1/erp/security/access_rule/list` |
|
||||
| 规则 | `/superbrowser/rest/v1/erp/security/access_rule/detail` |
|
||||
| 规则 | `/superbrowser/rest/v1/erp/security/access_rule/add` |
|
||||
| 规则 | `/superbrowser/rest/v1/erp/security/access_rule/edit` |
|
||||
| 规则 | `/superbrowser/rest/v1/erp/security/access_rule/delete` |
|
||||
| 规则 | `/superbrowser/rest/v1/erp/security/access_rule/active` |
|
||||
| 规则成员 | `/superbrowser/rest/v1/erp/security/access_rule/change_user` |
|
||||
| 规则账号 | `/superbrowser/rest/v1/erp/security/access_rule/change_account` |
|
||||
| 规则账号 | `/superbrowser/rest/v1/erp/security/access_rule/account/bindable_list` |
|
||||
| 网页 | `/superbrowser/rest/v1/erp/security/access_rule_url/list` |
|
||||
| 网页 | `/superbrowser/rest/v1/erp/security/access_rule_url/detail` |
|
||||
| 网页 | `/superbrowser/rest/v1/erp/security/access_rule_url/add` |
|
||||
| 网页 | `/superbrowser/rest/v1/erp/security/access_rule_url/edit` |
|
||||
| 网页 | `/superbrowser/rest/v1/erp/security/access_rule_url/delete` |
|
||||
| 网页 | `/superbrowser/rest/v1/erp/security/access_rule_url/change_group` |
|
||||
| 网页分组 | `/superbrowser/rest/v1/erp/security/access_rule_url_group/list` |
|
||||
| 网页分组 | `/superbrowser/rest/v1/erp/security/access_rule_url_group/add` |
|
||||
| 网页分组 | `/superbrowser/rest/v1/erp/security/access_rule_url_group/edit` |
|
||||
| 网页分组 | `/superbrowser/rest/v1/erp/security/access_rule_url_group/delete` |
|
||||
| 账号策略 | `/superbrowser/rest/v1/erp/security/access_rule/list/one_account` |
|
||||
| 账号策略 | `/superbrowser/rest/v1/erp/security/access_rule/account_ref/add_to_account` |
|
||||
| 账号策略 | `/superbrowser/rest/v1/erp/security/access_rule/account_ref/remove_from_account` |
|
||||
|
||||
### Step 3: 使用 dry-run 探索
|
||||
|
||||
```bash
|
||||
# 先预览请求
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/per/role/list --dry-run
|
||||
|
||||
# 确认后执行
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/per/role/list
|
||||
```
|
||||
|
||||
## 安全规则
|
||||
|
||||
- **禁止猜测** API 路径或参数,必须从清单中查找
|
||||
- 写入/删除类操作前确认用户意图
|
||||
- 建议先用 `--dry-run` 预览
|
||||
|
||||
## 参考
|
||||
|
||||
- [ziniao-shared](../ziniao-shared/SKILL.md) — 认证和全局参数
|
||||
- [ziniao-account](../ziniao-account/SKILL.md) — 账号/授权/标签快捷命令
|
||||
- [ziniao-device](../ziniao-device/SKILL.md) — 设备管理快捷命令
|
||||
- [ziniao-role](../ziniao-role/SKILL.md) — 角色管理快捷命令
|
||||
- [ziniao-skill-maker](../ziniao-skill-maker/SKILL.md) — 如需将常用 API 固化为新 Skill
|
||||
@@ -0,0 +1,54 @@
|
||||
---
|
||||
name: ziniao-page
|
||||
description: "Use when a request concerns a webpage running inside an already-opened 紫鸟/ZClaw store browser, including navigation, inspection, interaction, extraction, or screenshots. If the task starts by identifying or opening a store, use ziniao-store first."
|
||||
metadata:
|
||||
requires:
|
||||
bins: ["ziniao-cli"]
|
||||
---
|
||||
|
||||
# 紫鸟页面能力
|
||||
|
||||
本技能负责已打开紫鸟店铺浏览器中的通用网页资源操作,不负责店铺生命周期,也不定义用户的业务流程。
|
||||
|
||||
## 负责范围
|
||||
|
||||
- 对当前店铺浏览器中的网页进行通用操作或读取。
|
||||
- 在页面操作中复用已确认的 `store-id`,必要时指定 `target-id`。
|
||||
- 根据页面状态选择 CLI 已提供的页面命令;参数以 `ziniao-cli page <command> --help` 为准。
|
||||
- 页面操作需要复杂编排时,按需读取 automation reference。
|
||||
|
||||
## 路由边界
|
||||
|
||||
- 已有店铺浏览器并且目标是网页资源:直接使用本技能。
|
||||
- 任务尚未确定或打开店铺:转到 `ziniao-store`,不要自行猜测店铺 ID。
|
||||
- 不要把用户的业务目标或任务参数写入技能;这些是用户任务,由模型组合通用页面能力完成。
|
||||
- 配置、认证、Bridge、客户端或网络异常:按需读取 `ziniao-shared` 的诊断规则,不在本技能重复维护环境修复流程。
|
||||
|
||||
## 最小执行规则
|
||||
|
||||
1. 确认店铺已打开,并取得有效 `store-id`;页面命令通常都需要它。
|
||||
2. 先确认当前页面状态,再执行必要的页面操作;页面变化后不要复用失效的目标或定位信息。
|
||||
3. 对导航、等待、读取、交互、提取和截图等能力,直接使用 CLI 的对应命令;不确定参数时先看 `--help`。
|
||||
4. 涉及附件或图片上传时,在下载、路径转换或上传调用前,必须完整读取 [page upload 安全规则](references/ziniao-page-upload.md);未读取不得执行上传。
|
||||
5. 只在当前任务需要时读取 reference,不要默认读取全部页面文档。
|
||||
6. 报错时区分页面/目标定位问题和环境问题;环境问题再转 `ziniao-shared`/`doctor`。
|
||||
|
||||
## 页面读取与定位顺序
|
||||
|
||||
1. 页面状态、`target-id` 和稳定 CSS selector 已知时,直接复用并执行必要操作;不要为每一步重复读取页面。
|
||||
2. 需要理解页面或验证导航、搜索、提交结果时,优先使用 `page content --content-format structured`;只需 URL/title 时也可使用 `page exec`。
|
||||
3. selector 未知时,先使用 `page content`、`page query` 或 `page exec` 分析 DOM,再使用 `page input` / `page click --selector`。
|
||||
4. 只有上传控件、自定义或图标控件、多个相似控件存在歧义,或上述 DOM 方法仍无法唯一定位时,才使用 `page snapshot` 和当前页面 ref。
|
||||
|
||||
`page snapshot` 不是通用页面状态检查命令。不得为了验证店铺窗口、读取 URL/title/`target-id`、操作已知 selector、普通搜索或结果验证而调用 snapshot;页面未变化时也不得重复创建 snapshot/ref。snapshot ref 只属于当前店铺、tab 和页面,页面导航或刷新后不得复用。
|
||||
|
||||
输入后提交只能选择一种方式:使用 `page input --submit` 后等待并验证结果,或不传 `--submit` 再执行提交按钮的 `page click --wait-nav`;不得重复提交。
|
||||
|
||||
## 按需参考
|
||||
|
||||
- [page visit](references/ziniao-page-visit.md):需要导航时读取。
|
||||
- [page screenshot](references/ziniao-page-screenshot.md):需要截图时读取。
|
||||
- [page upload 安全规则](references/ziniao-page-upload.md):涉及附件、图片、文件输入框或 `page upload` 时必须读取。
|
||||
- [automation run](references/ziniao-page-automation.md):需要多步骤自动化时读取。
|
||||
- `ziniao-store`:需要确定或打开店铺时使用。
|
||||
- `ziniao-shared`:仅在环境、配置、认证或 Bridge 诊断时读取。
|
||||
@@ -0,0 +1,132 @@
|
||||
# automation run
|
||||
|
||||
> **前置条件:** 先阅读 [`../ziniao-shared/SKILL.md`](../../ziniao-shared/SKILL.md)。紫鸟浏览器必须已启动,且店铺已打开。
|
||||
|
||||
执行多步骤自动化流程。将多个页面操作编排为一条命令执行,减少多次调用的开销。
|
||||
|
||||
## 命令
|
||||
|
||||
```bash
|
||||
ziniao-cli automation run --steps '[
|
||||
{"type": "visit", "url": "https://example.com", "waitUntil": "networkidle"},
|
||||
{"type": "wait", "selector": "#login"},
|
||||
{"type": "click", "selector": "#login"},
|
||||
{"type": "input", "selector": "#username", "text": "admin", "clear": true},
|
||||
{"type": "input", "selector": "#password", "text": "pass123", "clear": true},
|
||||
{"type": "click", "selector": "#submit", "waitForNavigation": true},
|
||||
{"type": "screenshot", "fullPage": true, "path": "./result.png"}
|
||||
]'
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
| 参数 | 必填 | 说明 |
|
||||
|------|------|------|
|
||||
| `--steps` | 是 | 步骤 JSON 数组 |
|
||||
|
||||
## 步骤类型及字段
|
||||
|
||||
### visit — 导航到 URL
|
||||
|
||||
| 字段 | 必填 | 说明 |
|
||||
|------|------|------|
|
||||
| `url` | 是 | 目标 URL |
|
||||
| `waitUntil` | 否 | 等待条件: domcontentloaded / load / networkidle |
|
||||
| `timeoutMs` | 否 | 超时毫秒数 |
|
||||
|
||||
### click — 点击元素
|
||||
|
||||
| 字段 | 必填 | 说明 |
|
||||
|------|------|------|
|
||||
| `selector` | 是 | CSS 选择器 |
|
||||
| `waitForNavigation` | 否 | 点击后等待导航完成 |
|
||||
| `timeoutMs` | 否 | 超时毫秒数 |
|
||||
|
||||
### input — 输入文本
|
||||
|
||||
| 字段 | 必填 | 说明 |
|
||||
|------|------|------|
|
||||
| `selector` | 是 | CSS 选择器 |
|
||||
| `text` | 是 | 要输入的文本 |
|
||||
| `clear` | 否 | 输入前清空已有内容 |
|
||||
| `submit` | 否 | 输入后提交表单 |
|
||||
| `timeoutMs` | 否 | 超时毫秒数 |
|
||||
|
||||
### scroll — 滚动页面
|
||||
|
||||
| 字段 | 必填 | 说明 |
|
||||
|------|------|------|
|
||||
| `x` | 否 | 水平滚动像素 |
|
||||
| `y` | 否 | 垂直滚动像素 |
|
||||
| `selector` | 否 | 滚动目标元素选择器 |
|
||||
| `behavior` | 否 | 滚动行为: auto / smooth |
|
||||
|
||||
### screenshot — 截图
|
||||
|
||||
| 字段 | 必填 | 说明 |
|
||||
|------|------|------|
|
||||
| `fullPage` | 否 | 全页截图 |
|
||||
| `path` | 否 | 保存路径 |
|
||||
|
||||
### wait — 等待
|
||||
|
||||
| 字段 | 必填 | 说明 |
|
||||
|------|------|------|
|
||||
| `selector` | 否* | 等待元素出现(与 timeout 二选一) |
|
||||
| `timeout` | 否* | 延时毫秒数(与 selector 二选一) |
|
||||
| `timeoutMs` | 否 | 等待超时上限 |
|
||||
|
||||
### exec — 执行 JavaScript
|
||||
|
||||
| 字段 | 必填 | 说明 |
|
||||
|------|------|------|
|
||||
| `script` | 是 | JavaScript 代码 |
|
||||
| `timeoutMs` | 否 | 超时毫秒数 |
|
||||
|
||||
## 使用示例
|
||||
|
||||
### 登录流程
|
||||
|
||||
```bash
|
||||
ziniao-cli automation run --steps '[
|
||||
{"type": "visit", "url": "https://sellercentral.amazon.com", "waitUntil": "networkidle"},
|
||||
{"type": "input", "selector": "#ap_email", "text": "seller@example.com", "clear": true},
|
||||
{"type": "input", "selector": "#ap_password", "text": "password123", "clear": true},
|
||||
{"type": "click", "selector": "#signInSubmit", "waitForNavigation": true},
|
||||
{"type": "screenshot", "fullPage": true}
|
||||
]'
|
||||
```
|
||||
|
||||
### 滚动加载 + 截图
|
||||
|
||||
```bash
|
||||
ziniao-cli automation run --steps '[
|
||||
{"type": "visit", "url": "https://www.amazon.com/dp/B0XXXXX", "waitUntil": "networkidle"},
|
||||
{"type": "scroll", "y": 500, "behavior": "smooth"},
|
||||
{"type": "wait", "timeout": 1000},
|
||||
{"type": "scroll", "y": 1000, "behavior": "smooth"},
|
||||
{"type": "wait", "timeout": 1000},
|
||||
{"type": "screenshot", "fullPage": true, "path": "./listing-full.png"}
|
||||
]'
|
||||
```
|
||||
|
||||
### 提取数据后截图确认
|
||||
|
||||
```bash
|
||||
ziniao-cli automation run --steps '[
|
||||
{"type": "visit", "url": "https://example.com/dashboard", "waitUntil": "networkidle"},
|
||||
{"type": "wait", "selector": ".data-table"},
|
||||
{"type": "exec", "script": "document.querySelector('.data-table').style.border = '2px solid red'"},
|
||||
{"type": "screenshot", "path": "./dashboard.png"}
|
||||
]'
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
- steps 必须为合法 JSON 数组,建议用单引号包裹避免转义问题
|
||||
- 步骤按顺序执行,任何一步失败会终止后续步骤
|
||||
- 复杂的条件逻辑(if/else)不适合用 automation run,应拆分为多条单独命令由 Agent 控制
|
||||
|
||||
## 参考
|
||||
|
||||
- [ziniao-page](../SKILL.md) — 页面操作全部命令
|
||||
@@ -0,0 +1,35 @@
|
||||
# page screenshot
|
||||
|
||||
> **前置条件:** 先阅读 [`../ziniao-shared/SKILL.md`](../../ziniao-shared/SKILL.md)。店铺必须已打开。
|
||||
|
||||
对当前页面截图。
|
||||
|
||||
## 命令
|
||||
|
||||
```bash
|
||||
# 视口截图
|
||||
ziniao-cli page screenshot --store-id abc123
|
||||
|
||||
# 全页截图
|
||||
ziniao-cli page screenshot --store-id abc123 --full-page
|
||||
|
||||
# 保存到指定路径
|
||||
ziniao-cli page screenshot --store-id abc123 --path "./output.png"
|
||||
|
||||
# 指定超时
|
||||
ziniao-cli page screenshot --store-id abc123 --timeout 10000
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
| 参数 | 必填 | 说明 |
|
||||
|------|------|------|
|
||||
| `--store-id` | 是 | 店铺 ID |
|
||||
| `--full-page` | 否 | 全页截图(默认仅视口) |
|
||||
| `--path` | 否 | 保存路径 |
|
||||
| `--timeout` | 否 | 超时毫秒数 |
|
||||
| `--target-id` | 否 | 目标页面 ID(多 tab 时指定) |
|
||||
|
||||
## 参考
|
||||
|
||||
- [ziniao-page](../SKILL.md) — 页面操作全部命令
|
||||
@@ -0,0 +1,55 @@
|
||||
# page upload 安全规则
|
||||
|
||||
页面附件或图片上传属于写操作。执行任何下载、路径转换、文件选择或上传调用前,先完成来源、页面目标和用户确认检查。
|
||||
|
||||
## 来源边界
|
||||
|
||||
- `page upload` 只接受用户提供的本地文件路径。
|
||||
- 若附件来源是 `http://` 或 `https://` URL,立即停止上传并原样回复:
|
||||
|
||||
> 暂不支持从 URL 上传附件,请提供本地文件路径。
|
||||
|
||||
- 不得先下载、复制、缓存或转换 URL 内容,再把生成的本地文件当作可信来源上传。用户要求跳过该限制也不能改变来源边界。
|
||||
- 不得把导航 URL、页面链接或下载链接解释为附件路径。
|
||||
|
||||
## 页面与控件定位
|
||||
|
||||
1. 上传前确认当前 `store-id`、当前页面和唯一 `target-id`。多个可用标签页而用户未指定目标时,停止并让用户确认,不得任意选择。
|
||||
2. 只使用当前页面快照产生的 ref。页面 reload、URL 变化、标签页切换或 ref 失效后,重新执行 `page snapshot`。
|
||||
3. 上传控件不唯一时,根据当前快照的可访问名称和上下文,通过 `--trigger-ref` 或 `--hint` 消歧;不要先单独点击上传入口,也不要猜测泛选择器。
|
||||
|
||||
错误处理:
|
||||
|
||||
- `PAGE_TARGET_AMBIGUOUS`:重新获取当前页面快照并确定唯一 `target-id`;不得任意选择其他标签页。
|
||||
- `PAGE_TARGET_NOT_FOUND`:原目标已失效;重新获取当前店铺快照,不得回退到其他标签页。
|
||||
- `UPLOAD_CONTROL_NOT_DISCOVERED`:重新快照检查动态上传入口;仍未发现时停止并报告。
|
||||
- `UPLOAD_CONTROL_AMBIGUOUS`:使用当前快照的 `--trigger-ref` 或 `--hint` 消歧;仍无法唯一确认时停止并让用户选择。
|
||||
|
||||
## 外部本地路径确认
|
||||
|
||||
当下载目录外的本地路径返回 `confirmationRequired` 时:
|
||||
|
||||
本轮最终用户可见回复必须是一个不可拆分的确认包,并按以下顺序同时包含:
|
||||
|
||||
1. 原样输出完整 `confirmationMessage`,不得摘要、改写或删除字段。
|
||||
2. 紧接着实际显示 `screenshotFilePath` 指向的截图。
|
||||
3. 明确说明文件尚未上传。
|
||||
4. 最后等待用户按照 `confirmationMessage` 的要求明确确认。
|
||||
|
||||
仅调用图片读取工具、仅在中间进度消息或折叠区域显示图片、或只输出截图路径,均不算已经向用户展示截图。结束本轮前必须确认最终回复中同时可见完整确认文字和实际截图。
|
||||
|
||||
截图无法读取或无法在最终回复中展示时,本轮不得索要确认,也不得重试上传。用户明确确认后,只以相同的 `store-id`、`target-id`、文件来源、目标控件和上传意图,追加原响应的 `--confirmation-token <token>` 重试一次。不得换标签页、换文件、换控件或改写来源。先前的笼统授权或“无需再确认”不能替代本次确认。
|
||||
|
||||
页面、店铺会话或任一上传参数发生变化时,原 token 不再用于新的上传意图;重新开始定位和确认流程。
|
||||
|
||||
## 结果判定与重试
|
||||
|
||||
上传命令的结果只描述文件控件状态,不能单独证明网站业务提交完成:
|
||||
|
||||
- `confirmationRequired=true` 或 `stage=confirmation_pending`:尚未获得上传授权;不得声称已上传。
|
||||
- `attached=true, stage=input_attached`:文件仍在网页文件输入控件中;继续根据页面可见文件名、缩略图、进度或错误提示验证。
|
||||
- `attached=true, stage=input_consumed`:网页组件已接收并消费或清空输入;仍需等待页面可见的处理结果。
|
||||
- `attached=false, stage=input_unverified`:CDP 已执行但页面是否接收无法确认;不得报告成功或失败,也不得自动重试。先通过新快照、截图、文件名、进度或错误提示确认;只有页面明确失败,或把本次不确定结果告知用户后用户再次明确要求时才重试。任务开始前的笼统授权不构成这次重试授权。
|
||||
- `UPLOAD_ATTACH_VERIFY_FAILED`:重新快照并检查页面可见状态;不得盲目重试或声称成功。
|
||||
|
||||
只有页面出现与目标文件对应的可见业务结果,才能报告网站侧上传完成。文件进入控件、命令退出码为 0、`attached=true` 或 `input_consumed` 都不是业务完成证明。
|
||||
@@ -0,0 +1,37 @@
|
||||
# page visit
|
||||
|
||||
> **前置条件:** 先阅读 [`../ziniao-shared/SKILL.md`](../../ziniao-shared/SKILL.md)。店铺必须已打开。
|
||||
|
||||
导航到指定 URL。
|
||||
|
||||
## 命令
|
||||
|
||||
```bash
|
||||
ziniao-cli page visit --store-id abc123 --url "https://www.amazon.com"
|
||||
|
||||
# 等待 networkidle 后再返回
|
||||
ziniao-cli page visit --store-id abc123 --url "https://www.amazon.com" --wait-until networkidle
|
||||
|
||||
# 指定超时
|
||||
ziniao-cli page visit --store-id abc123 --url "https://www.amazon.com" --timeout 60000
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
| 参数 | 必填 | 说明 |
|
||||
|------|------|------|
|
||||
| `--store-id` | 是 | 店铺 ID |
|
||||
| `--url` | 是 | 目标 URL |
|
||||
| `--wait-until` | 否 | 等待条件: domcontentloaded \| load \| networkidle |
|
||||
| `--timeout` | 否 | 超时毫秒数 |
|
||||
| `--target-id` | 否 | 目标页面 ID(多 tab 时指定) |
|
||||
|
||||
## 提示
|
||||
|
||||
- 导航后建议用 `page wait-nav` 等待页面加载完成
|
||||
- 可用 `page content` 获取页面内容确认是否到达目标页面
|
||||
- `--wait-until networkidle` 适合 SPA 页面,等待所有网络请求完成
|
||||
|
||||
## 参考
|
||||
|
||||
- [ziniao-page](../SKILL.md) — 页面操作全部命令
|
||||
@@ -0,0 +1,94 @@
|
||||
---
|
||||
name: ziniao-role
|
||||
version: 1.0.0
|
||||
description: "紫鸟角色管理:角色的查询、创建、修改、分配和权限查看。当用户需要查看角色列表、创建/修改角色、将角色分配给员工或查看角色成员时使用。"
|
||||
metadata:
|
||||
requires:
|
||||
bins: ["ziniao-cli"]
|
||||
---
|
||||
|
||||
# 角色管理
|
||||
|
||||
**CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../ziniao-shared/SKILL.md`](../ziniao-shared/SKILL.md)**
|
||||
|
||||
管理紫鸟 ERP 中的角色(权限组)。角色决定员工能看到哪些功能、能操作哪些店铺。
|
||||
创建员工时需要传入 `--role-id`,可通过 `role list` 获取。
|
||||
|
||||
## Shortcuts
|
||||
|
||||
| 命令 | 说明 |
|
||||
|------|------|
|
||||
| `role list` | 查询所有角色 |
|
||||
| `role detail --id` | 查看角色详情(含权限列表) |
|
||||
| `role create --name --identity-id --permission-ids` | 创建角色 |
|
||||
| `role update --id --name --identity-id --permission-ids` | 修改角色(需全量提交,不传的字段可能被清空) |
|
||||
| `role assign --role-id --staff-id` | 将角色分配给员工(`--staff-id` 支持批量) |
|
||||
| `role staff-roles --staff-id` | 查看某员工已分配的角色列表 |
|
||||
| `role permissions --identity-id` | 查看指定身份的可用权限项 |
|
||||
|
||||
## 核心场景
|
||||
|
||||
### 查看角色与权限
|
||||
|
||||
```bash
|
||||
# 查询所有角色(先获取 role-id)
|
||||
ziniao-cli role list --format table
|
||||
|
||||
# 查看某角色详情
|
||||
ziniao-cli role detail --id 123
|
||||
|
||||
# 查看系统支持的全部权限项(创建角色前先查)
|
||||
ziniao-cli role permissions --identity-id 2
|
||||
```
|
||||
|
||||
### 创建与修改角色
|
||||
|
||||
```bash
|
||||
# 创建角色(权限使用权限 ID,多个权限用逗号分隔)
|
||||
ziniao-cli role create --name "店铺运营" --identity-id 2 --permission-ids "100,101" --desc "负责日常店铺操作"
|
||||
|
||||
# 修改角色(需全量提交,建议先 role detail 查看当前值)
|
||||
ziniao-cli role update --id 123 --name "高级运营" --identity-id 2 --permission-ids "100,101,102"
|
||||
```
|
||||
|
||||
### 分配角色给员工
|
||||
|
||||
```bash
|
||||
# 将角色分配给单个员工
|
||||
ziniao-cli role assign --role-id 123 --staff-id 456
|
||||
|
||||
# 批量分配给多人
|
||||
ziniao-cli role assign --role-id 123 --staff-id "456,789,101"
|
||||
|
||||
# 查看某员工已分配的角色
|
||||
ziniao-cli role staff-roles --staff-id 456 --format table
|
||||
```
|
||||
|
||||
### 典型工作流:新建角色并批量分配
|
||||
|
||||
```bash
|
||||
# 1. 查看系统已有角色,避免重复创建
|
||||
ziniao-cli role list --format table
|
||||
|
||||
# 2. 查看普通成员可用权限项
|
||||
ziniao-cli role permissions --identity-id 2 --jq '.[] | .id'
|
||||
|
||||
# 3. 创建新角色
|
||||
ziniao-cli role create --name "跨境运营" --identity-id 2 --permission-ids "100,101,102"
|
||||
|
||||
# 4. 获取新角色 ID(从上一步输出的 data.id 取)
|
||||
# 5. 批量分配给员工
|
||||
ziniao-cli role assign --role-id <new-id> --staff-id "201,202,203"
|
||||
```
|
||||
|
||||
## 通用 api 覆盖
|
||||
|
||||
```bash
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/per/role/list
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/per/role/detail --data '{"roleId":"xxx"}'
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/per/role/add --data '{"roleName":"xxx","identityId":2,"permissionIds":[100,101]}'
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/per/role/edit --data '{"roleId":"xxx","roleName":"yyy","identityId":2,"permissionIds":[100,101]}'
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/staff/change/role --data '{"roleId":"xxx","staffIds":["yyy"]}'
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/staff/role/list --data '{"staffId":"yyy"}'
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/per/permission/list --data '{"identityId":2}'
|
||||
```
|
||||
@@ -0,0 +1,401 @@
|
||||
---
|
||||
name: ziniao-shared
|
||||
version: 1.0.0
|
||||
description: "紫鸟 CLI 共享基础:应用配置初始化、ZClaw 客户端与 Bridge 就绪、统一 apiKey 认证、错误处理、输出格式和安全规则。当用户需要首次使用 ziniao-cli、配置 API Key、启动紫鸟客户端、登录 ZClaw 或排查认证/Bridge 问题时触发。"
|
||||
metadata:
|
||||
requires:
|
||||
bins: ["ziniao-cli"]
|
||||
---
|
||||
|
||||
# ziniao-cli 共享规则
|
||||
|
||||
本技能指导你如何通过 ziniao-cli 操作紫鸟开放平台资源和控制紫鸟浏览器,以及有哪些注意事项。
|
||||
|
||||
## 配置初始化
|
||||
|
||||
首次使用需运行 `ziniao-cli config init` 完成应用配置。
|
||||
|
||||
### 初始化模式
|
||||
|
||||
| 命令 | 场景 | 行为 |
|
||||
|------|------|------|
|
||||
| `ziniao-cli config init --new` | **AI Agent(推荐)** | 直接进入新建应用流程,输出浏览器链接后轮询等待 |
|
||||
| `ziniao-cli config init` | 人类用户交互 | 菜单选择:[1] 新建应用 [2] 手动输入 Key |
|
||||
| `ziniao-cli config init --api-key-stdin` | CI/CD 管道 | 从 stdin 读取已有 API Key |
|
||||
| `ziniao-cli config init --api-key-stdin --member` | 成员账号 CI | 跳过企业信息获取,仅用于控制浏览器 |
|
||||
| `ziniao-cli config init --profile <name>` | 多账号 | 指定 profile 名称(不传则自动命名) |
|
||||
|
||||
### AI Agent 初始化流程
|
||||
|
||||
使用 background 方式执行以下命令,启动后读取 stderr 输出,从中提取浏览器链接并展示给用户:
|
||||
|
||||
```bash
|
||||
# 直接进入新建应用流程(该命令会阻塞直到审核通过、被拒绝或超时 1 小时)
|
||||
ziniao-cli config init --new
|
||||
```
|
||||
|
||||
输出示例(Boss 账号):
|
||||
```
|
||||
请在浏览器中打开以下链接完成应用创建:
|
||||
|
||||
https://open.ziniao.com/memberAuth?cliRequestId=a1b2c3d4-...&from=cli
|
||||
|
||||
⏳ 等待应用创建及审核... (按 Ctrl+C 取消)
|
||||
⏳ 等待中... 已等待 30s
|
||||
✓ 审核已通过
|
||||
⏳ 正在获取企业信息...
|
||||
✓ 企业 ID: 15393571083459
|
||||
✓ 配置已保存
|
||||
```
|
||||
|
||||
输出示例(成员账号):
|
||||
```
|
||||
...
|
||||
✓ 审核已通过
|
||||
✓ 成员账号,跳过企业信息获取
|
||||
✓ 配置已保存
|
||||
```
|
||||
|
||||
Agent 应该:
|
||||
1. 后台执行 `config init --new`
|
||||
2. 从输出中提取 URL(包含 `memberAuth?cliRequestId=` 的行)
|
||||
3. 将链接展示给用户,提示在浏览器中打开完成应用创建
|
||||
4. 等待命令完成(审核通过/拒绝/超时)
|
||||
5. 如果审核被拒绝,告知用户联系 Boss 审批
|
||||
|
||||
apiKey 加密后写入本地。沙箱/容器可直接使用,无需系统钥匙串。
|
||||
|
||||
### Boss 与成员账号
|
||||
|
||||
初始化时服务端返回 `isBoss` 标识,决定账号权限范围:
|
||||
|
||||
| 账号类型 | 服务端 API | ZClaw Bridge(本地浏览器) |
|
||||
|---------|-----------|--------------------------|
|
||||
| Boss | ✓ 全部可用 | ✓ 全部可用 |
|
||||
| 成员 | ✗ 不可用(返回 auth 错误) | ✓ 全部可用 |
|
||||
|
||||
服务端 API 权限仅 Boss 账号可申请和调用。成员账号不能开通这些权限点,也不存储 companyId;所有通过 `api` 命令或服务端快捷命令(account/staff/department/role/device)的请求会被拦截并提示"需要 Boss 权限"。
|
||||
|
||||
### 检查配置
|
||||
|
||||
```bash
|
||||
ziniao-cli config show # 查看当前配置(含 profile 名称)
|
||||
ziniao-cli config list # 列出所有 profile
|
||||
ziniao-cli doctor # 全面自检(配置 + apiKey + 网络 + ZClaw Bridge)
|
||||
```
|
||||
|
||||
## ZClaw 客户端与 Bridge 就绪
|
||||
|
||||
ZClaw 本地浏览器操作依赖紫鸟客户端和本地 Bridge。本次任务首次执行店铺或页面命令前,先运行以下命令检查环境:
|
||||
|
||||
### 登录命令硬约束
|
||||
|
||||
本节所有“登录”“自动登录”“先登录”都只表示逐字执行 `ziniao-cli zclaw login`。不存在可替代的 `ziniao-cli login`,也不得省略 `zclaw`。在输出或执行登录步骤前先核对完整命令。
|
||||
|
||||
```bash
|
||||
ziniao-cli doctor
|
||||
```
|
||||
|
||||
如果 `doctor` 各项明细确认配置、API Key、服务端连通性、Bridge 连通且客户端账号与当前 profile 一致,直接执行原店铺或页面命令;不要只依据最后的汇总文字。一次任务内已经检查通过且认证、profile 和客户端状态未变化时,不要为每个后续命令重复检查。
|
||||
|
||||
当 `doctor` 的客户端明细明确显示“紫鸟客户端已启动,但尚未登录”或 `[CLIENT_LOGGED_OUT]`,且 Bridge 已连通、没有 API Key、终端绑定或账号不一致错误时,这已经是确定的未登录状态。未登录恢复命令固定且只能是 `ziniao-cli zclaw login`;`ziniao-cli login` 不是有效命令,不得缩写或替换。必须在任何 `store`、`page` 业务命令之前按以下顺序执行:
|
||||
|
||||
```bash
|
||||
ziniao-cli zclaw login
|
||||
ziniao-cli doctor
|
||||
# 仅当 doctor 明细全部通过时,执行一次原业务命令
|
||||
```
|
||||
|
||||
禁止先调用 `store list`、`store resolve`、`store open` 或 `page` 命令来再次探测登录状态,即使 `doctor` 退出码为 0 或 Bridge 显示正常也不例外。登录失败或复查仍未通过时立即停止并报告实际错误。
|
||||
|
||||
仅当 `doctor` 的客户端检查明确显示“紫鸟客户端未启动或本地服务未就绪”时,才可尝试启动客户端。调用前按**当前 Shell**选择一种命令检查 `ziniao` 是否可解析,不得把某一种检测命令用于所有平台,也不得依次执行多种检测命令:
|
||||
|
||||
| 当前 Shell | 命令检测 |
|
||||
|------------|----------|
|
||||
| Windows PowerShell | `Get-Command ziniao -ErrorAction SilentlyContinue` |
|
||||
| Windows CMD | `where.exe ziniao` |
|
||||
| macOS/Linux Bash、Zsh、sh,或 Windows Git Bash | `command -v ziniao` |
|
||||
|
||||
若当前 Shell 找不到 `ziniao`,不得调用或重试 `ziniao start`。macOS 例外:如果 `/Applications/ziniao.app` 存在,可执行一次 `open -a "/Applications/ziniao.app"` 启动桌面客户端,然后重新运行 `ziniao-cli doctor`;不得把 `open` 当作 Bridge 就绪证明。其他平台提示用户手动启动紫鸟客户端,用户完成后重新运行 `ziniao-cli doctor`。只有找到 `ziniao` 命令时,才执行一次:
|
||||
|
||||
```bash
|
||||
ziniao start
|
||||
ziniao-cli doctor
|
||||
```
|
||||
|
||||
`ziniao start` 只用于启动或唤起单实例紫鸟客户端,不能修复 API Key、终端绑定、账号不一致或登录会话问题。Bridge 可能在客户端启动后才就绪;启动后可短间隔重新运行 `doctor`,总等待时间最多 30 秒。若 `ziniao start` 返回 Windows 错误 1113 或其他启动错误,或命令成功返回但 macOS 上 `doctor` 仍明确显示客户端未启动,可在 `/Applications/ziniao.app` 存在时额外执行一次 `open -a "/Applications/ziniao.app"`,随后重新运行 `doctor`;不得再次重试 `ziniao start`。仍未通过则报告启动错误和 doctor 明细后停止。
|
||||
|
||||
如果 ZClaw Bridge 暂时不可连接,不要再次执行 `ziniao start`,也不要执行 `zclaw login`;只短间隔重新运行 `doctor`,总等待时间最多 30 秒,仍未恢复则停止并报告。即使同一次 `doctor` 还显示客户端未登录,也必须先等 Bridge 恢复。Bridge 恢复后的下一步只能是读取最新一次 `doctor` 明细并重新分流:仍未登录才执行 `ziniao-cli zclaw login`,全部通过才执行原业务命令;禁止在复查前预先执行或承诺执行 `store open`。不要把启动或登录当作状态探测。
|
||||
|
||||
独立的运行中会话失效分支:如果此前 `doctor` 明细已经通过,但原始 `store`、`page` 或其他 ZClaw 本地命令随后明确返回 `Ziniao user is not logged in`,下一条命令必须逐字为:
|
||||
|
||||
```bash
|
||||
ziniao-cli zclaw login
|
||||
```
|
||||
|
||||
这里同样只能使用完整命令 `ziniao-cli zclaw login`,不得写成不存在的 `ziniao-cli login`。登录成功后,使用相同参数只重试刚才失败的原命令一次;不要为了这次恢复额外执行 `doctor`。不得在尚未尝试 `zclaw login` 前要求用户手工登录。
|
||||
|
||||
若 `zclaw login` 失败,直接报告其实际错误。API Key 无效或被拒绝、终端未绑定、账号不一致,或 Bridge 不可连接时,必须立即停止,禁止重复登录、重复发送店铺请求,或笼统要求用户“先登录客户端”。只有原始错误不是该精确未登录错误、或登录命令本身无法恢复时,才按对应原因要求用户处理前置条件。
|
||||
|
||||
只有 `doctor` 显示配置、API Key、服务端连通性、ZClaw Bridge 和客户端账号一致时,才继续浏览器操作:
|
||||
|
||||
- 店铺窗口操作使用 `ziniao-store` Skill。
|
||||
- 页面浏览器自动化使用 `ziniao-page` Skill。
|
||||
- 查询可用 Bridge 工具使用 `ziniao-cli zclaw tools`;仅在没有快捷命令或用户明确要求调试原始工具时,才使用 `ziniao-cli zclaw invoke <tool>`。
|
||||
|
||||
| 现象 | 处理 |
|
||||
|------|------|
|
||||
| `config init --new` 提示客户端未登录 | 启动并登录紫鸟客户端,再重新执行初始化。 |
|
||||
| `doctor` 提示客户端未启动或本地服务未就绪 | 按当前 Shell 使用 PowerShell `Get-Command`、CMD `where.exe` 或 POSIX/Git Bash `command -v` 检测;找到命令才执行一次 `ziniao start`。若 macOS 上 `ziniao start` 失败或执行后仍未启动,且存在 `/Applications/ziniao.app`,可再执行一次 `open -a "/Applications/ziniao.app"`,随后重新运行 `doctor`;若 macOS 找不到命令但应用存在,也直接使用一次 `open`;其他情况提示用户手动启动。 |
|
||||
| `doctor` 明确显示客户端已启动但未登录,且 Bridge 已连通 | 直接执行一次 `ziniao-cli zclaw login`,不得先发店铺或页面命令探测;登录后重新运行 `doctor`,明细全部通过后才执行原业务命令。 |
|
||||
| `127.0.0.1:9481` 暂不可连接(无论客户端是否同时显示未登录) | 不启动、不登录;短间隔重新运行 `doctor`,最多等待 30 秒。Bridge 恢复后再按最新客户端明细分流。 |
|
||||
| `ziniao start` 返回 Windows 错误 1113 或其他启动错误 | 不重试启动;立即重新运行一次 `doctor`,明细通过则继续,否则同时报告启动错误和 doctor 明细后停止。 |
|
||||
| `zclaw login` 提示无法连接 ZClaw Bridge | 不把登录当作启动探测;回到 `doctor` 判断 9481 不可连接的具体原因。 |
|
||||
| API Key 无效或未配置 | 使用正确的 Key 重新执行 `ziniao-cli config init`,或重新运行 `ziniao-cli config init --new`。 |
|
||||
| 初始化后 ZClaw 仍提示 API Key 认证失败 | 前往 https://open.ziniao.com 的用户应用「终端管理」,绑定当前终端识别码(在紫鸟浏览器设置中查看),然后重新执行 `ziniao-cli zclaw login` 和 `ziniao-cli doctor`。 |
|
||||
| `doctor` 提示客户端登录用户与当前 profile 不一致 | 明确说明当前 profile 与客户端登录账号及其不一致,询问用户是否切换到当前 profile 对应账号并继续原请求;不要只要求用户手工切换。用户确认后按既有登录流程继续。 |
|
||||
|
||||
### 多账号切换
|
||||
|
||||
支持多个账号配置(profile),通过 `config use` 切换:
|
||||
|
||||
```bash
|
||||
# 列出所有 profile
|
||||
ziniao-cli config list
|
||||
# * zhangsan
|
||||
# staging
|
||||
|
||||
# 切换到指定 profile
|
||||
ziniao-cli config use staging
|
||||
|
||||
# 重命名 profile
|
||||
ziniao-cli config rename staging production
|
||||
```
|
||||
|
||||
初始化时通过 `--profile` 指定名称,浏览器创建流程会自动用账号用户名命名。
|
||||
|
||||
### 删除配置
|
||||
|
||||
删除操作会弹出确认提示,`--yes` 可跳过:
|
||||
|
||||
```bash
|
||||
ziniao-cli config remove # 删除当前 profile(需确认)
|
||||
ziniao-cli config remove --profile staging # 删除指定 profile(需确认)
|
||||
ziniao-cli config remove --yes # 跳过确认直接删除
|
||||
```
|
||||
|
||||
## 认证
|
||||
|
||||
### 认证模型
|
||||
|
||||
ziniao-cli 使用**统一 apiKey**(Bearer Token),一个 Key 同时用于:
|
||||
|
||||
| 用途 | 地址 | 说明 |
|
||||
|------|------|------|
|
||||
| 服务端 API | `sbappstoreapi.ziniao.com` | 部门/员工/账号/设备等业务接口 |
|
||||
| 本地 ZClaw Bridge | `127.0.0.1:9481` | 紫鸟浏览器店铺/页面操控 |
|
||||
|
||||
**没有** OAuth、token 刷新、双身份(user/bot)等复杂机制。apiKey 是静态凭证,不过期。
|
||||
|
||||
### ISV 应用权限点
|
||||
|
||||
调用服务端 API 前,需在紫鸟开放平台为应用开通对应的权限点。这些权限仅 Boss 账号可申请和调用。以下是各模块所需的权限点:
|
||||
|
||||
| 模块 | 权限点 | 覆盖接口 |
|
||||
|------|--------|---------|
|
||||
| 部门员工 | ERP-部门与员工接口 | 部门 CRUD + 员工查询/新增/修改/启禁用(9 个) |
|
||||
| 部门员工 | ERP-用户的部门变更 | 员工调岗(1 个) |
|
||||
| 角色权限 | ERP-角色列表查询 | 角色列表 + 用户角色列表(2 个) |
|
||||
| 角色权限 | ERP-角色详情 | 角色详情(1 个) |
|
||||
| 角色权限 | ERP-权限列表 | 权限项列表(1 个) |
|
||||
| 角色权限 | ERP-角色添加、修改权限 | 添加/修改/调整角色(3 个) |
|
||||
| 设备管理 | ERP-设备查询 | 设备列表 + 历史绑定记录(2 个) |
|
||||
| 设备管理 | ERP-设备套餐列表查询权限 | 套餐列表(1 个) |
|
||||
| 设备管理 | ERP-设备绑定权限 | 绑定设备(1 个) |
|
||||
| 设备管理 | ERP-解绑设备 | 解绑设备(1 个) |
|
||||
| 设备管理 | ERP-开关自动续费 | 自动续费开关(1 个) |
|
||||
| 设备管理 | ERP-设备购买与续费权限 | 购买 + 续费(2 个) |
|
||||
| 设备管理 | ERP-添加自有设备(新) | 添加自有设备(1 个) |
|
||||
| 设备管理 | ERP-修改自有设备信息(新) | 修改自有设备(1 个) |
|
||||
| 设备管理 | ERP-查询已购设备价格接口 | 已购设备价格(1 个) |
|
||||
| 账号管理 | ERP-账号查看权限 | 账号列表/授权查询/用户账号列表/授权用户列表(4 个) |
|
||||
| 账号管理 | ERP-创建与删除账号权限 | 创建 + 删除账号(2 个) |
|
||||
| 账号管理 | ERP-编辑账号基础信息 | 编辑账号信息(1 个) |
|
||||
| 账号管理 | ERP-账号授权权限 | 授权新增 + 授权删除(2 个) |
|
||||
| 账号管理 | ERP-清除账号授权 | 清除全部授权(1 个) |
|
||||
| 账号管理 | ERP-清除账号缓存 | 清除缓存(1 个) |
|
||||
| 账号管理 | ERP-标签列表 | 企业标签列表(1 个) |
|
||||
| 账号管理 | ERP-查询某用户有权限的账号列表 | 用户有权限的账号(1 个) |
|
||||
| 账号管理 | ERP-获取附加网站信息 | 附加网站信息(1 个) |
|
||||
| 账号管理 | 账号标签管理权限 | 标签 CRUD + 绑定/解绑/替换/清空/移除(9 个) |
|
||||
| 访问策略 | ERP-网页访问权限 | 访问规则/网页/网页分组全部操作(22 个) |
|
||||
|
||||
> 如果调用接口返回 `isv.invalid-method`(不存在的方法名),通常是该权限点未开通。前往 [紫鸟开放平台](https://open.ziniao.com) → 应用管理 → 权限管理 中开通。
|
||||
|
||||
### 公共参数
|
||||
|
||||
每个服务端 API 请求都需要 `companyId`,**CLI 自动注入并强制使用配置值**,无需也不应手动传递。该值在 `config init` 时通过 `/app/builtin/company` 接口自动获取并写入配置;即使 `--data` 中显式传入 `companyId`,CLI 也会用配置值覆盖。
|
||||
|
||||
## 两层命令体系
|
||||
|
||||
### 第一层:通用 api 命令(覆盖全部 73 个接口)
|
||||
|
||||
任何紫鸟服务端 API 都可以通过 `api` 命令调用,无需专门的快捷命令:
|
||||
|
||||
```bash
|
||||
ziniao-cli api <path> [--data '{}'] [--format table] [--jq '.data[]']
|
||||
ziniao-cli api GET /app/builtin/company
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/department/list
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/staff/list --data '{"page":1,"limit":10}' --format table
|
||||
```
|
||||
|
||||
- 默认 POST 方法,支持 GET/POST/PUT/DELETE
|
||||
- `companyId` 由框架自动注入,并强制覆盖 `--data` 中的同名字段
|
||||
- `--page-all` 自动翻页(默认最多 10 页,需取全部时配合 `--page-limit 0`)
|
||||
- `--page-size N` 每页条数(默认 20)
|
||||
- `--page-limit N` 最大翻页数(默认 10,0 为不限,配合 `--page-all`)
|
||||
- `--page-delay MS` 翻页间隔毫秒数(默认 200,配合 `--page-all`)
|
||||
- `--dry-run` 预览请求不执行
|
||||
- `--jq` 内置 jq 过滤
|
||||
|
||||
### 第二层:快捷命令(高频场景优化)
|
||||
|
||||
为复杂接口提供命名 flag + 智能默认值:
|
||||
|
||||
```bash
|
||||
ziniao-cli department list --tree
|
||||
ziniao-cli staff create --username "zhangsan" --name "张三" --password "Pass123!" --role-id 16691047257645
|
||||
ziniao-cli store list --format table
|
||||
```
|
||||
|
||||
## `account` 与 `store` 的区别
|
||||
|
||||
两组命令都涉及"店铺",但职责和通道完全不同:
|
||||
|
||||
| | `account` 命令 | `store` 命令 |
|
||||
|--|---------------|-------------|
|
||||
| 通道 | 服务端 API(`sbappstoreapi.ziniao.com`) | 本地 ZClaw Bridge(`127.0.0.1:9481`) |
|
||||
| 职责 | 店铺账号的 CRUD、授权、标签等**管理操作** | 控制已打开的浏览器实例:列出、打开、关闭 |
|
||||
| 前置条件 | 只需 apiKey + 网络 | 紫鸟浏览器客户端必须已启动 |
|
||||
| 典型场景 | 创建店铺、批量授权员工、管理标签 | 打开店铺浏览器 → 导航 → 截图 → 自动化操作 |
|
||||
|
||||
**简单记忆:** `account` = 管理后台增删改查,`store` = 控制本地浏览器窗口。
|
||||
|
||||
## 命令优先级
|
||||
|
||||
AI Agent 调用时按优先级选择:
|
||||
|
||||
1. **快捷命令** -- `staff list`、`department create`、`store open` 等(参数简化,体验最好)
|
||||
2. **通用 api 命令** -- `api <path>` 兜底(任意接口都能调,需要手写 JSON body)
|
||||
3. **zclaw invoke** -- `zclaw invoke <tool>` 兜底(任意 ZClaw 工具都能调)
|
||||
|
||||
### ZClaw 快捷命令硬约束
|
||||
|
||||
若某个 ZClaw 工具已有对应快捷命令,**必须只调用快捷命令**,禁止再调用
|
||||
`ziniao-cli zclaw invoke <tool>`。两者最终都会请求同一个 Bridge 工具;重复调用会重复执行操作。
|
||||
|
||||
`zclaw invoke` 仅用于没有快捷命令的 Bridge 工具,或用户明确要求按原始工具名和 JSON 参数调试。
|
||||
|
||||
例如 `visit_page` 已由 `page visit` 封装,必须使用 `ziniao-cli page visit ...`。
|
||||
|
||||
### 店铺环境结果硬约束
|
||||
|
||||
当用户要求店铺浏览器、店铺代理或该店铺登录态下的结果时,结果只能来自该店铺环境。
|
||||
店铺页面操作失败后,禁止改用公开网页、搜索引擎、其他店铺、服务端 API 或供应来源来“替代”结果;除非用户明确将任务范围改为公开信息检索。
|
||||
|
||||
发生 `ERR_SOCKS_CONNECTION_FAILED` 时,保持当前店铺打开,等待 5 秒后以相同参数重试;最多 3 次总尝试。仍失败时,报告该店铺环境暂时无法访问及已尝试次数,并停止该店铺任务;不得声称已取得店铺环境结果。
|
||||
|
||||
## 输出格式
|
||||
|
||||
所有命令支持 `--format json|table|csv` 和 `--jq` 过滤:
|
||||
|
||||
```bash
|
||||
ziniao-cli staff list --format table
|
||||
ziniao-cli staff list --jq '.[].name'
|
||||
ziniao-cli department list --format csv
|
||||
```
|
||||
|
||||
### 输出结构
|
||||
|
||||
成功(stdout):
|
||||
```json
|
||||
{"ok": true, "data": ..., "meta": {"count": 10}}
|
||||
```
|
||||
|
||||
失败(stderr):
|
||||
```json
|
||||
{"ok": false, "error": {"type": "gateway|business|auth|validation", "code": 1001, "message": "...", "hint": "..."}}
|
||||
```
|
||||
|
||||
### 错误类型与处理
|
||||
|
||||
| 错误类型 | 含义 | AI Agent 应该做什么 |
|
||||
|---------|------|-------------------|
|
||||
| `auth` | apiKey 缺失或无效 | 提示用户运行 `ziniao-cli config init` |
|
||||
| `gateway` | 网关层错误 (code != "0") | 报告错误,检查网络/apiKey |
|
||||
| `business` | 业务层错误 (ret != 0) | 报告错误信息,根据 msg 判断原因 |
|
||||
| `validation` | 参数校验失败 | 检查命令参数是否正确 |
|
||||
| `network` | 网络不通/Bridge 未启动 | ZClaw 相关:回到 `doctor` 明细路由,只有客户端未启动时才进入启动流程;API 相关:检查网络 |
|
||||
|
||||
## 更新检查
|
||||
|
||||
ziniao-cli 命令执行后,如果检测到新版本,JSON 输出中会包含 `_notice.update` 字段:
|
||||
|
||||
```json
|
||||
{
|
||||
"ok": true,
|
||||
"data": ...,
|
||||
"_notice": {
|
||||
"update": {
|
||||
"current": "1.0.0",
|
||||
"latest": "1.1.0",
|
||||
"message": "ziniao-cli 1.1.0 可用,当前 1.0.0,运行 npm update -g @ziniao-open/cli 更新"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**当你在输出中看到 `_notice.update` 时:**
|
||||
1. 先完成用户当前请求
|
||||
2. 然后将 `message` 字段内容展示给用户,提议帮其更新
|
||||
3. 若用户同意,执行 `npm update -g @ziniao-open/cli`
|
||||
|
||||
更新提示仅通过 stdout JSON 的 `_notice` 字段传递,不会输出到 stderr。可通过环境变量 `ZINIAO_CLI_NO_UPDATE_CHECK=1` 禁用检查。
|
||||
|
||||
## 环境兼容说明
|
||||
|
||||
### Windows Git Bash 路径转义问题
|
||||
|
||||
在 **Git Bash** 中,以 `/` 开头的字符串会被 MSYS 自动转换为 Windows 本地路径(如 `/superbrowser/...` → `C:/Program Files/Git/superbrowser/...`),导致 `api` 命令的路径参数被破坏。
|
||||
|
||||
**PowerShell 和 CMD 无此问题。**
|
||||
|
||||
**解决方式一(推荐):写入 `.bashrc` 永久生效**
|
||||
|
||||
```bash
|
||||
echo 'export MSYS_NO_PATHCONV=1' >> ~/.bashrc
|
||||
source ~/.bashrc
|
||||
```
|
||||
|
||||
**解决方式二:每次命令前加前缀**
|
||||
|
||||
```bash
|
||||
MSYS_NO_PATHCONV=1 ziniao-cli api /superbrowser/rest/v1/erp/store/create \
|
||||
--data '{"storeData":[{"name":"新店铺"}]}'
|
||||
```
|
||||
|
||||
## 安全规则
|
||||
|
||||
- **API Key 是静态敏感凭证**:不得请求用户在聊天中发送完整 Key,也不得在回复、终端输出或错误信息中展示完整 Key
|
||||
- **禁止把完整 API Key 写入命令行参数、Shell 历史、脚本、截图、录屏、聊天消息、日志或 Git**
|
||||
- 人工交互环境使用 `ziniao-cli config init` 输入 Key;输入期间避免屏幕共享、录屏和终端日志采集
|
||||
- CI/CD 使用 `ziniao-cli config init --api-key-stdin`,由 Secret Manager 或受保护的标准输入提供 Key;不得把 Key 直接写在流水线命令中
|
||||
- **写入/删除操作前必须确认用户意图**
|
||||
- `high-risk-write` 操作(department delete、staff remove)会要求交互式确认,可用 `--yes` 跳过
|
||||
- 建议先用 `--dry-run` 预览危险请求
|
||||
|
||||
## 重要行为规则
|
||||
|
||||
- **ZClaw 本地接口必须通过 ziniao-cli 调用**:调用紫鸟浏览器本地接口(store/page/zclaw 命令)时,必须使用本技能体系中的 ziniao-cli 能力,不要使用 ziniao-assistant 技能自行调用 ZClaw Bridge。
|
||||
- **店铺列表优先使用本地接口**:如果用户要求获取店铺列表,应优先使用 `store list` 快捷命令(走本地 ZClaw Bridge),因为普通成员没有服务端 `account list` 接口权限。成员类型可通过 `ziniao-cli config show` 结果中的 `isBoss` 字段判断。
|
||||
- **ZClaw 认证失败排查**:如果帮用户初始化应用(`config init`)之后,请求 ZClaw 接口仍返回 API Key 认证失败,应提醒用户前往紫鸟开放平台 https://open.ziniao.com 查看自己的用户应用里「终端管理」是否已绑定当前终端识别码(识别码在紫鸟浏览器设置中查看)。
|
||||
@@ -0,0 +1,81 @@
|
||||
---
|
||||
name: ziniao-skill-maker
|
||||
version: 1.0.0
|
||||
description: "创建 ziniao-cli 的自定义 Skill。当用户需要把紫鸟 API 操作封装成可复用的 Skill(包装原子 API 或编排多步流程)时使用。"
|
||||
metadata:
|
||||
requires:
|
||||
bins: ["ziniao-cli"]
|
||||
---
|
||||
|
||||
# Skill Maker
|
||||
|
||||
基于 ziniao-cli 创建新 Skill。Skill = 一份 `SKILL.md`,教 AI 用 CLI 命令完成任务。
|
||||
|
||||
## CLI 核心能力
|
||||
|
||||
```bash
|
||||
ziniao-cli <service> <command> # 快捷命令
|
||||
ziniao-cli api [METHOD] <path> [--data/--format] # 任意服务端 API
|
||||
ziniao-cli zclaw invoke <tool> [--args] # 任意 ZClaw 工具
|
||||
ziniao-cli store/page <command> # ZClaw 快捷命令
|
||||
```
|
||||
|
||||
优先级:快捷命令 > 通用 api/zclaw invoke。
|
||||
|
||||
## 调研 API
|
||||
|
||||
```bash
|
||||
# 1. 查看已有快捷命令
|
||||
ziniao-cli department --help
|
||||
ziniao-cli staff --help
|
||||
|
||||
# 2. 查看 ZClaw 工具
|
||||
ziniao-cli zclaw tools
|
||||
|
||||
# 3. 通用 api 裸调
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/per/role/list
|
||||
```
|
||||
|
||||
如果命令不够用,使用 [ziniao-openapi-explorer](../ziniao-openapi-explorer/SKILL.md) 查找 API 路径。
|
||||
|
||||
## SKILL.md 模板
|
||||
|
||||
文件放在 `skills/ziniao-<name>/SKILL.md`:
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: ziniao-<name>
|
||||
version: 1.0.0
|
||||
description: "<功能描述>。当用户需要<触发场景>时使用。"
|
||||
metadata:
|
||||
requires:
|
||||
bins: ["ziniao-cli"]
|
||||
---
|
||||
|
||||
|
||||
# <标题>
|
||||
|
||||
**CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../ziniao-shared/SKILL.md`](../ziniao-shared/SKILL.md)**
|
||||
|
||||
## 命令
|
||||
|
||||
\```bash
|
||||
# 单步操作
|
||||
ziniao-cli api POST /superbrowser/rest/v1/erp/xxx --data '{...}'
|
||||
|
||||
# 多步编排
|
||||
# Step 1: ...(记录返回的 xxx_id)
|
||||
# Step 2: 使用 Step 1 的 xxx_id
|
||||
\```
|
||||
|
||||
## 参考
|
||||
|
||||
- [ziniao-shared](../ziniao-shared/SKILL.md) — 认证和全局参数
|
||||
```
|
||||
|
||||
## 关键原则
|
||||
|
||||
- **description 决定触发** — 包含功能关键词 + "当用户需要...时使用"
|
||||
- **CRITICAL 依赖** — 所有 Skill 必须强制读取 ziniao-shared
|
||||
- **安全** — 写入操作前确认用户意图
|
||||
- **编排** — 说明步骤间的数据传递和失败处理
|
||||
@@ -0,0 +1,77 @@
|
||||
---
|
||||
name: ziniao-staff
|
||||
version: 1.0.0
|
||||
description: "紫鸟员工管理:员工的查询、创建、修改、启用/禁用/删除和调岗。当用户需要查询员工信息、创建新员工、修改员工信息、启用/禁用/删除员工或调整员工部门时使用。"
|
||||
metadata:
|
||||
requires:
|
||||
bins: ["ziniao-cli"]
|
||||
---
|
||||
|
||||
# 员工管理
|
||||
|
||||
**CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../ziniao-shared/SKILL.md`](../ziniao-shared/SKILL.md),其中包含认证、错误处理和安全规则**
|
||||
**CRITICAL — 所有 Shortcuts 在执行之前,务必先用 Read 工具读取其对应的 references/ 说明文档,禁止直接盲目调用命令。**
|
||||
|
||||
## 核心场景
|
||||
|
||||
### 查询员工
|
||||
|
||||
支持多种筛选条件,枚举值已映射为人类可读。注意:默认返回包含已删除员工,取 ID 做后续操作时建议加 `--status active`。
|
||||
|
||||
```bash
|
||||
ziniao-cli staff list --name "张三" --status active --format table
|
||||
ziniao-cli staff list --role boss --page-all
|
||||
ziniao-cli staff list --department-id 15868464646076
|
||||
```
|
||||
|
||||
### 创建员工
|
||||
|
||||
原始 API 需要 20+ 字段的嵌套 JSON,CLI 简化为核心 flag + 智能默认值(`--department-id` 必填):
|
||||
|
||||
```bash
|
||||
ziniao-cli staff create --username "zhangsan" --name "张三" --password "Pass123!" --role-id 16691047257645 --department-id 15868464646076
|
||||
```
|
||||
|
||||
智能默认值:`authDevide=1`(全设备授权)、`authClient=全部允许`、`isLimitLogin=0`。
|
||||
登录日期默认发送有效日期:`loginLimitStartDate=今天`、`loginLimitEndDate=2099-12-31`,也可通过 `--login-start-date` / `--login-end-date` 指定。
|
||||
|
||||
### 启用/禁用/删除
|
||||
|
||||
原始 API 是一个接口通过 `status` 字段区分,CLI 拆为 3 个语义化命令:
|
||||
|
||||
```bash
|
||||
ziniao-cli staff enable --id 16524289555087
|
||||
ziniao-cli staff disable --id "id1,id2,id3" # 支持批量
|
||||
ziniao-cli staff remove --id 16524289555087 # high-risk-write
|
||||
```
|
||||
|
||||
## 枚举映射
|
||||
|
||||
| flag | 可选值 | 对应 API 值 |
|
||||
|------|--------|-----------|
|
||||
| `--status` | active / disabled / deleted | delflag: 0/1/2 |
|
||||
| `--role` | boss / manager / employee / admin | level: 0/1/2/3 |
|
||||
| `--device-auth` | auto / first / approve / phone | authDevide: 1/2/3/4 |
|
||||
| `--allow-clients` | windows,mac,web,android,ios,linux,miniapp 或 all | authClient 嵌套对象 |
|
||||
|
||||
## Shortcuts
|
||||
|
||||
| 命令 | 说明 | 详细文档 |
|
||||
|------|------|---------|
|
||||
| `staff list` | 查询员工列表 | [`references/ziniao-staff-list.md`](references/ziniao-staff-list.md) |
|
||||
| `staff create` | 新增员工 | [`references/ziniao-staff-create.md`](references/ziniao-staff-create.md) |
|
||||
| `staff update` | 修改员工 | 只发修改字段:`--id xxx --name "新名"`,底层路径 `/superbrowser/rest/v2/erp/staff/modify` |
|
||||
| `staff enable` | 启用员工 | [`references/ziniao-staff-enable-disable.md`](references/ziniao-staff-enable-disable.md) |
|
||||
| `staff disable` | 禁用员工 | 同上 |
|
||||
| `staff remove` | 删除员工 | `high-risk-write` |
|
||||
| `staff transfer` | 调岗 | `--staff-id xxx --department-id yyy` |
|
||||
|
||||
## 通用 api 覆盖
|
||||
|
||||
```bash
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/staff/list --data '{"page":1,"limit":10}'
|
||||
ziniao-cli api /superbrowser/rest/v2/erp/staff/add --data '{...}'
|
||||
ziniao-cli api /superbrowser/rest/v2/erp/staff/modify --data '{...}'
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/staff/status --data '{"staffIds":["xxx"],"status":"1"}'
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/staff/department --data '{"staffIds":["xxx"],"departmentIds":["yyy"]}'
|
||||
```
|
||||
@@ -0,0 +1,60 @@
|
||||
# staff create
|
||||
|
||||
> **前置条件:** 先阅读 [`../ziniao-shared/SKILL.md`](../../ziniao-shared/SKILL.md)。
|
||||
|
||||
新增员工。写入操作。原始 API 需要 20+ 字段,CLI 简化为核心 flag,并补齐服务端需要的登录日期字段。
|
||||
|
||||
## 命令
|
||||
|
||||
```bash
|
||||
# 最简用法(5 个必填参数)
|
||||
ziniao-cli staff create \
|
||||
--username "zhangsan" \
|
||||
--name "张三" \
|
||||
--password "Pass123!" \
|
||||
--role-id 16691047257645 \
|
||||
--department-id 15868464646076
|
||||
|
||||
# 指定部门 + 限制登录终端
|
||||
ziniao-cli staff create \
|
||||
--username "zhangsan" \
|
||||
--name "张三" \
|
||||
--password "Pass123!" \
|
||||
--role-id 16691047257645 \
|
||||
--department-id 15868464646076 \
|
||||
--allow-clients windows,mac,web
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
| 参数 | 必填 | 默认值 | 说明 |
|
||||
|------|------|--------|------|
|
||||
| `--username` | 是 | — | 登录账号 |
|
||||
| `--name` | 是 | — | 姓名 |
|
||||
| `--password` | 是 | — | 密码 |
|
||||
| `--role-id` | 是 | — | 角色 ID(用 `ziniao-cli role list` 或 `ziniao-cli api /superbrowser/rest/v1/erp/per/role/list` 查询) |
|
||||
| `--department-id` | 是 | — | 部门 ID |
|
||||
| `--mobile` | 否 | 无 | 手机号 |
|
||||
| `--allow-clients` | 否 | all | 允许登录终端(windows,mac,web,android,ios,linux,miniapp) |
|
||||
| `--device-auth` | 否 | auto | 设备授权模式(auto\|first\|approve\|phone) |
|
||||
| `--login-start-date` | 否 | 今天 | 可登录起始日期,格式 yyyy-MM-dd |
|
||||
| `--login-end-date` | 否 | 2099-12-31 | 可登录结束日期,格式 yyyy-MM-dd |
|
||||
|
||||
## 智能默认值
|
||||
|
||||
以下字段使用智能默认值,用户无需指定:
|
||||
|
||||
| 原始 API 字段 | 默认值 | 说明 |
|
||||
|--------------|--------|------|
|
||||
| `authDevide` | 1 | 全设备自动永久授权 |
|
||||
| `isUpdatePersonInfo` | 1 | 允许修改个人信息 |
|
||||
| `isLimitLogin` | 0 | 不限制登录时间 |
|
||||
| `isTwoStepVerify` | 0 | 不开启二步验证 |
|
||||
| `enablePhoneLogin` | 0 | 不开启手机号登录 |
|
||||
| `authClient` | 全部 "1" | 允许所有终端 |
|
||||
| `loginLimitStartDate` | 今天 | 服务端需要非空有效日期 |
|
||||
| `loginLimitEndDate` | 2099-12-31 | 服务端需要非空有效日期 |
|
||||
|
||||
## 参考
|
||||
|
||||
- [ziniao-staff](../SKILL.md) — 员工管理全部命令
|
||||
@@ -0,0 +1,47 @@
|
||||
# staff enable / disable / remove
|
||||
|
||||
> **前置条件:** 先阅读 [`../ziniao-shared/SKILL.md`](../../ziniao-shared/SKILL.md)。
|
||||
|
||||
启用、禁用或删除员工。原始 API 是一个接口(`/erp/staff/status`),CLI 拆为 3 个语义化命令。
|
||||
|
||||
## 命令
|
||||
|
||||
```bash
|
||||
# 启用
|
||||
ziniao-cli staff enable --id 16524289555087
|
||||
|
||||
# 禁用(支持批量)
|
||||
ziniao-cli staff disable --id 16524289555087
|
||||
ziniao-cli staff disable --id "id1,id2,id3"
|
||||
|
||||
# 删除(高风险,需确认)
|
||||
ziniao-cli staff remove --id 16524289555087
|
||||
ziniao-cli staff remove --id 16524289555087 --yes # 跳过确认
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
| 参数 | 必填 | 说明 |
|
||||
|------|------|------|
|
||||
| `--id` | 是 | 员工 ID(逗号分隔可批量) |
|
||||
| `--yes` | 否 | 跳过确认(仅 remove) |
|
||||
|
||||
## 风险等级
|
||||
|
||||
| 命令 | 风险等级 | 是否需确认 |
|
||||
|------|---------|----------|
|
||||
| `staff enable` | write | 否 |
|
||||
| `staff disable` | write | 否 |
|
||||
| `staff remove` | high-risk-write | 是(交互式确认) |
|
||||
|
||||
## 内部映射
|
||||
|
||||
| 命令 | API status 值 |
|
||||
|------|--------------|
|
||||
| enable | "0" |
|
||||
| disable | "1" |
|
||||
| remove | "2" |
|
||||
|
||||
## 参考
|
||||
|
||||
- [ziniao-staff](../SKILL.md) — 员工管理全部命令
|
||||
@@ -0,0 +1,64 @@
|
||||
# staff list
|
||||
|
||||
> **前置条件:** 先阅读 [`../ziniao-shared/SKILL.md`](../../ziniao-shared/SKILL.md)。
|
||||
|
||||
查询员工列表。只读操作。
|
||||
|
||||
## 命令
|
||||
|
||||
```bash
|
||||
# 查询全部
|
||||
ziniao-cli staff list
|
||||
|
||||
# 按姓名搜索(模糊)
|
||||
ziniao-cli staff list --name "张三"
|
||||
|
||||
# 精确匹配
|
||||
ziniao-cli staff list --name "张三" --exact
|
||||
|
||||
# 按状态筛选 + 表格输出
|
||||
ziniao-cli staff list --status active --format table
|
||||
|
||||
# 按角色筛选
|
||||
ziniao-cli staff list --role boss
|
||||
|
||||
# 按部门筛选
|
||||
ziniao-cli staff list --department-id 15868464646076
|
||||
|
||||
# 自动翻页
|
||||
ziniao-cli staff list --page-all --page-size 50
|
||||
|
||||
# jq 过滤
|
||||
ziniao-cli staff list --jq '.[].name'
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
| 参数 | 必填 | 说明 |
|
||||
|------|------|------|
|
||||
| `--name` | 否 | 按姓名搜索 |
|
||||
| `--username` | 否 | 按账号搜索 |
|
||||
| `--department-id` | 否 | 按部门 ID 筛选(逗号分隔) |
|
||||
| `--status` | 否 | active \| disabled \| deleted |
|
||||
| `--role` | 否 | boss \| manager \| employee \| admin |
|
||||
| `--exact` | 否 | 精确匹配(默认模糊) |
|
||||
| `--page-size` | 否 | 每页条数(默认 20) |
|
||||
| `--page-all` | 否 | 自动翻页获取全部 |
|
||||
| `--page-limit` | 否 | 最大翻页数(默认 10,0 为不限) |
|
||||
| `--page-delay` | 否 | 翻页间隔毫秒数(默认 200) |
|
||||
| `--format` | 否 | json \| table \| csv |
|
||||
| `--jq` / `-q` | 否 | jq 过滤表达式 |
|
||||
|
||||
## 输出字段翻译
|
||||
|
||||
表格输出时,枚举值自动翻译:
|
||||
- `level "0"` -> `role: "Boss"`
|
||||
- `delflag "0"` -> `statusText: "正常"`
|
||||
|
||||
## 注意事项
|
||||
|
||||
- 默认返回所有状态的员工(含已禁用和已删除)。如果需要取员工 ID 做后续操作(分配角色、授权店铺等),建议加 `--status active` 筛选,避免使用已删除员工 ID 导致"无效的 staffId"错误。
|
||||
|
||||
## 参考
|
||||
|
||||
- [ziniao-staff](../SKILL.md) — 员工管理全部命令
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
name: ziniao-store
|
||||
description: "Use when a request concerns the local 紫鸟/ZClaw browser, a store name or ID, listing/resolving/opening/reusing/closing a store browser, or a store-scoped task that starts from a store. Do not use for server-side account CRUD or for a webpage task on an already-open store."
|
||||
metadata:
|
||||
requires:
|
||||
bins: ["ziniao-cli"]
|
||||
---
|
||||
|
||||
# 紫鸟店铺入口
|
||||
|
||||
本技能负责“店铺”这一资源及其本地浏览器生命周期,不负责定义用户的业务目标,也不复制 CLI 帮助文档。
|
||||
|
||||
## 负责范围
|
||||
|
||||
- 列出、解析、打开、复用、关闭本地紫鸟店铺浏览器。
|
||||
- 保存本次任务确认过的 `store-id`,供后续步骤复用。
|
||||
- 用户从某个店铺开始并继续操作网页时,按需使用 `ziniao-page`。
|
||||
- 任务涉及配置、认证、Bridge、客户端或网络异常时,按需读取 `ziniao-shared` 的诊断规则。
|
||||
|
||||
## 路由边界
|
||||
|
||||
- 请求以店铺名称/ID或“本地紫鸟店铺”为起点:先处理店铺,再判断是否需要页面能力。
|
||||
- 已有明确且正在运行的店铺,只需网页操作:使用 `ziniao-page`,不要重复打开店铺。
|
||||
- 店铺后台账号的创建、删除、授权、标签等服务端管理:使用 `ziniao-account`,不是本技能。
|
||||
- 不要把用户的业务目标或任务参数写入本技能;这些属于任务内容,不是店铺能力。
|
||||
|
||||
## 最小执行规则
|
||||
|
||||
1. 需要店铺对象时,使用 CLI 的 `store list` 或 `store resolve` 获取并确认目标。
|
||||
2. 需要浏览器窗口时,使用 `store open`;已有有效 `store-id` 且店铺仍运行时直接复用。
|
||||
3. 需要网页资源操作时,继续使用 `ziniao-page`;不要在本技能中重述页面命令。
|
||||
4. 店铺命令失败时,根据错误按需运行 `ziniao-cli doctor`;不要无条件登录、启动或重复重试。
|
||||
5. 具体参数不确定时,使用 `ziniao-cli store <command> --help`,复杂命令再读取对应 reference。
|
||||
|
||||
## 打开后的验证边界
|
||||
|
||||
- 用户只要求打开店铺时,精确解析店铺并成功执行带 `--expected-name` 的 `store open` 即可结束;不得为了证明窗口存在而追加 `page snapshot`。
|
||||
- 用户同时给出目标 URL 时,首次打开优先使用同一次 `store open --url`,不要再对同一 URL 重复执行 `page visit`。
|
||||
- 用户要求确认最终页面或业务状态时,转到 `ziniao-page`,使用导航返回值、`page content` 或 `page exec` 验证 URL/title/正文;不得用 snapshot 代替普通页面验证。
|
||||
- 只有后续页面任务本身满足上传、自定义控件或复杂歧义定位条件时,才由 `ziniao-page` 决定使用 snapshot。
|
||||
|
||||
## 按需参考
|
||||
|
||||
- [store list](references/ziniao-store-list.md):需要列出店铺时读取。
|
||||
- [store open](references/ziniao-store-open.md):需要打开或复用店铺时读取。
|
||||
- `ziniao-shared`:仅在配置、认证、Bridge 或诊断问题出现时读取。
|
||||
- `ziniao-page`:仅在任务继续操作已打开店铺内网页时读取。
|
||||
@@ -0,0 +1,50 @@
|
||||
# store list
|
||||
|
||||
> **前置条件:** 先阅读 [`../ziniao-shared/SKILL.md`](../../ziniao-shared/SKILL.md),再检查店铺操作所需状态:
|
||||
>
|
||||
> ```bash
|
||||
> ziniao-cli doctor
|
||||
> ```
|
||||
>
|
||||
> `doctor` 明细确认通过后直接执行 `store list`,不得无条件启动或登录。检查未通过时,严格按照 `ziniao-shared` 的「ZClaw 客户端与 Bridge 就绪」流程处理;只有客户端未登录或 `store list` 明确返回会话缺失/过期时,才允许登录一次,随后重新检查并只重试一次。API Key、终端或账号认证失败时立即停止。
|
||||
|
||||
列出所有店铺。只读操作。
|
||||
|
||||
## 命令
|
||||
|
||||
```bash
|
||||
ziniao-cli store list
|
||||
ziniao-cli store list --format table
|
||||
ziniao-cli store list --keyword "Rose" --limit 10
|
||||
ziniao-cli store list --all
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
| 参数 | 必填 | 说明 |
|
||||
|------|------|------|
|
||||
| `--page` | 否 | 页码 |
|
||||
| `--limit` | 否 | 每页数量 |
|
||||
| `--all` | 否 | 获取全部店铺 |
|
||||
| `--keyword` | 否 | 按关键词筛选 |
|
||||
| `--type` | 否 | 店铺列表类型 |
|
||||
| `--format` | 否 | 输出格式: json \| table |
|
||||
| `--jq` | 否 | jq 过滤表达式 |
|
||||
|
||||
## 输出字段
|
||||
|
||||
| 字段 | 说明 |
|
||||
|------|------|
|
||||
| storeId | 店铺 ID(后续操作需要) |
|
||||
| storeName | 店铺名称 |
|
||||
| platformName | 平台名称 |
|
||||
| ip | 绑定的 IP |
|
||||
|
||||
## 提示
|
||||
|
||||
- storeId 是后续所有页面操作(page visit/click/screenshot 等)的必填参数
|
||||
- 建议先用 `store list --format table` 查看所有店铺
|
||||
|
||||
## 参考
|
||||
|
||||
- [ziniao-store](../SKILL.md) — 店铺管理全部命令
|
||||
@@ -0,0 +1,48 @@
|
||||
# store open
|
||||
|
||||
> **前置条件:** 先阅读 [`../ziniao-shared/SKILL.md`](../../ziniao-shared/SKILL.md),再检查店铺操作所需状态:
|
||||
>
|
||||
> ```bash
|
||||
> ziniao-cli doctor
|
||||
> ```
|
||||
>
|
||||
> `doctor` 明细确认通过后直接执行 `store open`,不得无条件启动或登录。检查未通过时,严格按照 `ziniao-shared` 的「ZClaw 客户端与 Bridge 就绪」流程处理;只有客户端未登录或 `store open` 明确返回会话缺失/过期时,才允许登录一次,随后重新检查并只重试一次。API Key、终端或账号认证失败时立即停止。
|
||||
|
||||
打开或复用店铺浏览器窗口;带 `--url` 时导航到目标页面。
|
||||
|
||||
> 首次进入目标页面时,优先使用 `store open --url <url>`,即使店铺为 `reused: true` 也会直接导航当前页面。已建立会话后的后续 URL 跳转使用 `page visit`。同一个 URL 不得连续执行 `store open --url` 与 `page visit`。
|
||||
|
||||
## 命令
|
||||
|
||||
```bash
|
||||
# 按名称打开
|
||||
ziniao-cli store open --name "Rosehut"
|
||||
|
||||
# 按 ID 打开
|
||||
ziniao-cli store open --id abc123
|
||||
|
||||
# 打开并直接访问 URL
|
||||
ziniao-cli store open --name "Rosehut" --url "https://www.amazon.com"
|
||||
|
||||
# 无头模式打开
|
||||
ziniao-cli store open --name "Rosehut" --headless
|
||||
|
||||
# 隐私模式打开
|
||||
ziniao-cli store open --name "Rosehut" --privacy
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
| 参数 | 必填 | 说明 |
|
||||
|------|------|------|
|
||||
| `--name` | 否* | 店铺名称(与 --id 二选一) |
|
||||
| `--id` | 否* | 店铺 ID(与 --name 二选一) |
|
||||
| `--expected-name` | 否 | 期望匹配的名称(用于验证) |
|
||||
| `--url` | 否 | 打开后直接导航到的 URL(对应 launchUrl) |
|
||||
| `--headless` | 否 | 无头模式 |
|
||||
| `--privacy` | 否 | 隐私模式 |
|
||||
| `--window-ratio` | 否 | 窗口比例 |
|
||||
|
||||
## 参考
|
||||
|
||||
- [ziniao-store](../SKILL.md) — 店铺管理全部命令
|
||||
@@ -0,0 +1,80 @@
|
||||
---
|
||||
name: ziniao-workflow-batch-account
|
||||
version: 1.0.0
|
||||
description: "批量账号授权工作流:编排 account list + staff list + api 调用完成批量授权店铺给员工。适用于新员工入职时批量分配店铺权限。"
|
||||
metadata:
|
||||
requires:
|
||||
bins: ["ziniao-cli"]
|
||||
---
|
||||
|
||||
# 批量账号授权工作流
|
||||
|
||||
**CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../ziniao-shared/SKILL.md`](../ziniao-shared/SKILL.md)**
|
||||
|
||||
## 适用场景
|
||||
|
||||
- "给新员工分配店铺权限"
|
||||
- "批量授权店铺给某个员工"
|
||||
- "新人入职,需要授权所有店铺"
|
||||
|
||||
## 前置条件
|
||||
|
||||
- 已配置 apiKey(`ziniao-cli config init`)
|
||||
|
||||
## 工作流
|
||||
|
||||
```
|
||||
staff list ──► 找到目标员工 ID
|
||||
account list ──► 找到目标店铺 ID 列表
|
||||
│
|
||||
├──► 对每个店铺:
|
||||
│ api /superbrowser/rest/v1/erp/store/auth/add { storeIdList, staffId }
|
||||
│
|
||||
└──► 汇总授权结果
|
||||
```
|
||||
|
||||
### Step 1: 查找员工
|
||||
|
||||
```bash
|
||||
# 按姓名查找
|
||||
ziniao-cli staff list --name "张三" --format table
|
||||
# 记录 userId
|
||||
```
|
||||
|
||||
### Step 2: 查找要授权的店铺
|
||||
|
||||
```bash
|
||||
# 列出所有店铺
|
||||
ziniao-cli account list --format table --page-all
|
||||
# 或按名称搜索
|
||||
ziniao-cli account list --name "US" --format table
|
||||
```
|
||||
|
||||
### Step 3: 逐个授权
|
||||
|
||||
对每个店铺执行:
|
||||
|
||||
```bash
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/store/auth/add \
|
||||
--data '{"storeIdList":["<storeId>"],"staffId":"<staffId>"}'
|
||||
```
|
||||
|
||||
### Step 4: 验证
|
||||
|
||||
```bash
|
||||
# 查看该员工已授权的店铺
|
||||
ziniao-cli api /superbrowser/rest/v1/erp/user/stores \
|
||||
--data '{"userId":"<userId>","page":1,"limit":10}'
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
- 授权是写入操作,执行前确认用户意图
|
||||
- 如果需要授权大量店铺,建议先列出计划并确认
|
||||
- 授权失败时记录错误并继续下一个
|
||||
|
||||
## 参考
|
||||
|
||||
- [ziniao-account](../ziniao-account/SKILL.md) — 账号管理
|
||||
- [ziniao-staff](../ziniao-staff/SKILL.md) — 员工管理
|
||||
- [ziniao-shared](../ziniao-shared/SKILL.md) — 认证和全局参数
|
||||
Reference in new issue
Block a user