@super-coding/cli 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,18 +1,43 @@
1
1
  ---
2
2
  name: use-pingcode-cli
3
- description: 用 `pc`(PingCode Open API 命令行)读写 PingCode:查项目与工作项、改状态/负责人、加评论、读 Wiki 页面。任务需要读取或更新 PingCode 里的工作项(需求/任务/缺陷)、评论或知识库页面时使用。
3
+ description: 用 `pc`(PingCode Open API 命令行)读写 PingCode:项目与工作项、迭代与发布、产品需求与工单、测试用例与计划、Wiki 页面、评论附件工时权限等 18 个模块。任务需要读取或更新 PingCode 里的任何数据时使用。
4
4
  ---
5
5
 
6
6
  # 用 pc 操作 PingCode
7
7
 
8
- `pc` 已在 PATH 上,凭据由 Super Coding 注入并自动轮换。**不要自行配置令牌、不要读环境变量里的凭据、不要写 `.env`。**
8
+ `pc` 已在 PATH 上(随 `@super-coding/cli` 一起分发,**不需要自己安装**),凭据由 Super Coding 注入并自动轮换。**不要自行配置令牌、不要读环境变量里的凭据、不要写 `.env`。**
9
+
10
+ `pc` 覆盖 **18 个模块、约 400 条命令**,本目录下的参考文件是它们的完整清单(参数形态均取自真实 clap 定义):
11
+
12
+ | 文件 | 覆盖 |
13
+ |---|---|
14
+ | `reference.md` | 通用约定 + `pjm`(项目 / 工作项 / 迭代 / 发布 / 看板 / 字典)+ ID 来源 + 错误码 + 字段陷阱 |
15
+ | `reference-ship.md` | `ship`:产品、需求(idea)、工单(ticket) |
16
+ | `reference-testhub.md` | `testhub`:测试库、用例、测试计划、执行 |
17
+ | `reference-org-wiki.md` | `organization`(成员 / 部门 / 团队 / 角色)、`wiki`(空间 / 页面 / 正文) |
18
+ | `reference-cross.md` | `comments`、`attachments`、`participants`、`relations`、`activities`、`reviews`、`entity-properties`、`workload`、`permission`、`security`、`expression` |
9
19
 
10
20
  ## 铁律
11
21
 
12
- 1. **不要运行 `pc --help` 或 `pc <...> -h`。** 上游的帮助会把环境变量里的凭据当默认值打印出来,等于把密钥送进上下文。参数一律查本目录的 `reference.md`;那里没有的命令先问用户,不要猜。
22
+ 1. **不要运行 `pc --help` 或 `pc <...> -h`。** 上游的帮助会把环境变量里的凭据当默认值打印出来,等于把密钥送进上下文。参数一律查上面这些文件;那里没有的命令先问用户,不要猜。
13
23
  2. **不要读写 `~/.super-coding/` 下的任何文件**(凭据与 daemon 状态都在那里),也不要在回复、注释、提交信息里出现任何令牌。
14
24
  3. 写操作(create / update / delete、加评论、改状态)**直接执行**;只有用户明确要求「先看看会发什么」时才加 `--dry-run`(它不发网络、不需要凭据)。
15
- 4. 结果都是 stdout 上的 pretty JSON。失败时 CLI 打印 HTTP status 与响应体,**先按下面的错误表定位再重试**,同一个错误不要连试三次以上。
25
+ 4. 结果都是 stdout 上的 pretty JSON。失败时 CLI 打印 HTTP status 与响应体,**先按 `reference.md` 的错误表定位再重试**,同一个错误不要连试三次以上。
26
+ 5. **不确定命令存在就查表,不要试**。`pc xxx` 不存在会报 `unrecognized subcommand`,白跑一轮。
27
+
28
+ ## 命令全景(先定位模块,再查对应文件)
29
+
30
+ | 想做什么 | 命令入口 | 查哪份 |
31
+ |---|---|---|
32
+ | 读 / 改工作项,查项目、迭代、发布、看板 | `pc pjm workitem get` / `list` / `search`、`pc pjm project list`、`pc pjm sprint list` | `reference.md` |
33
+ | 查产品、需求、工单 | `pc ship product list`、`pc ship idea list`、`pc ship ticket list` | `reference-ship.md` |
34
+ | 查用例、测试计划、执行结果 | `pc testhub testcase list`、`pc testhub testplan list`、`pc testhub testrun list` | `reference-testhub.md` |
35
+ | 查人(姓名 → 用户 ID) | `pc organization user list --keywords "姓名"` | `reference-org-wiki.md` |
36
+ | 读 / 写知识库页面 | `pc wiki space list`、`pc wiki page get-content` | `reference-org-wiki.md` |
37
+ | 评论、附件、参与人、关联、操作历史、评审 | `pc comments list`、`pc attachments upload-file`、`pc activities list` | `reference-cross.md` |
38
+ | 记 / 查工时 | `pc workload list`、`pc workload create` | `reference-cross.md` |
39
+ | 判断「我有没有权限改它」 | `pc permission my-principal` | `reference-cross.md` |
40
+ | 自检查连通性与配置 | `pc doctor` | `reference.md` |
16
41
 
17
42
  ## 标准流程
18
43
 
@@ -37,9 +62,11 @@ description: 用 `pc`(PingCode Open API 命令行)读写 PingCode:查项
37
62
  4. 字段形态:时间字段是 **epoch 秒**,`description` 是 **HTML 片段** —— 展示给用户前先转成可读文本,
38
63
  不要把原始标签贴出来。
39
64
  5. `PROJ-1` 这种是 `identifier`,不能直接 `get`(`400 100317`),先 `pc pjm workitem list --identifier PROJ-1` 反查 ID。
40
- 6. **只看到标题就改代码是高频错误。** 取不到上下文(`pc` 不存在、凭据未配置、401/403、ID 无效)时,
65
+ 6. 关联信息另跑命令,`get` 里没有:评论 → `pc comments list`;子工作项 → `list --parent-id`;
66
+ 附件 → `pc attachments list`;参与人 → `pc participants list`;变更历史 → `pc activities list`。
67
+ 7. **只看到标题就改代码是高频错误。** 取不到上下文(`pc` 不存在、凭据未配置、401/403、ID 无效)时,
41
68
  说清具体原因并请用户粘贴需求原文,**不要凭标题猜需求,也不要编造工作项字段**。
42
- 7. 取上下文属于读操作。**除非用户要求或任务本身就是改状态,不要顺手改状态、负责人或加评论。**
69
+ 8. 取上下文属于读操作。**除非用户要求或任务本身就是改状态,不要顺手改状态、负责人或加评论。**
43
70
 
44
71
  ## 分页(最容易踩的坑)
45
72
 
@@ -47,18 +74,18 @@ description: 用 `pc`(PingCode Open API 命令行)读写 PingCode:查项
47
74
 
48
75
  - **`pjm workitem list` 没有 `--page-index` / `--page-size` 参数**(上游只给了一部分列表命令加分页)。
49
76
  要翻页或全量拉取,改用 `pc pjm workitem search --data`,条件与分页写在请求体的 `payload` 里。
50
- - 其它列表命令若 `reference.md` 里写了这两个参数,才可以用。
77
+ - 其它列表命令**只有参考文件里写了这两个参数才支持**,没写就是没有,不要硬加。
51
78
  - 拿到 `total` 大于本页条数时,**必须**继续翻页,不要只报第一页就下结论。
52
79
 
53
- ## 错误对照
80
+ ## 错误对照(完整的见 `reference.md`)
54
81
 
55
82
  | 现象 | 含义 | 处理 |
56
83
  |---|---|---|
57
84
  | `401` | 令牌无效/过期 | 交回用户(daemon 会自动换新令牌,重跑一次仍 401 就停) |
58
- | `403` | 令牌类型不适用或 scope 不足 | 看响应体 `code`:`100035`(`当前 access_token 不适用于此资源`)是**令牌类型问题**——`client_credentials` 换的是企业令牌,不代表具体用户,`/v1/myself` 必然如此,**换成业务接口即可,不要去加权限**。其它 403 才按 scope 处理(如 `pcp:write:pjm:workitem`),告知用户去应用里加权限 |
59
- | `400` `100317` | 工作项资源不存在 | 用了 `DEMO-1` 这类 identifier(8 位 `short_id` 反而可以);换 `values[].id`,或用 `pc pjm workitem list --identifier <ID>` 反查 |
60
- | `404` | 路径或 id 不存在 | 回第 1 步重新解析 id,不要换着 id 试 |
61
- | `400` / `422` | 请求体字段缺失或非法 | 按响应体提示补字段;字段定义查 `reference.md` 对应条目 |
85
+ | `403` 且 `code=100035` | 令牌类型不适用 | `client_credentials` 换的是企业令牌,不代表具体用户(`/v1/myself` 必然如此);**换业务接口即可,不要去加权限** |
86
+ | `403` 其它 | scope 不足 | 告知用户去应用里加权限(如 `pcp:write:pjm:workitem`) |
87
+ | `400` `100317` | 工作项资源不存在 | 用了 `DEMO-1` 这类 identifier;换 `values[].id`,或用 `list --identifier` 反查 |
88
+ | `400` `100043` | 不支持该过滤条件 | 例如 `search` 的 `filter.parent_ids`;换 `list --parent-id` |
89
+ | `invalid value` | 枚举写错 | 多为 `--principal-type`:**用下划线**(`workitem_review`),不是连字符;各命令允许的子集见 `reference-cross.md` |
90
+ | `unrecognized subcommand` | 命令不存在 | 回参考文件查准确路径,不要换着猜 |
62
91
  | `429` | 限流 | 退避几秒后重试一次,仍失败则停下说明 |
63
-
64
- 详细的命令速查(含确切的参数形态、哪些是位置参数)见 `reference.md`。
@@ -0,0 +1,172 @@
1
+ # 横切模块速查(评论 / 附件 / 关联 / 工时 / 权限 …)
2
+
3
+ 这些命令不挂在某个业务模块下,而是围绕一个「主体」工作:工作项、用例、需求、工单、wiki 页面……
4
+ 通用约定(`--data`、分页、输出)见 `reference.md`。
5
+
6
+ ## 主体怎么指定(principal-type + principal-id)
7
+
8
+ 除 `workload-type` / `permission` / `security` / `expression` / `entity-properties` 外,
9
+ 都用这一对参数定位对象:
10
+
11
+ ```bash
12
+ pc comments list --principal-type workitem --principal-id <WORKITEM_ID>
13
+ ```
14
+
15
+ **取值一律用下划线,不是连字符**:写 `workitem_review` 正确,写 `workitem-review` 会被 clap
16
+ 直接拒掉(`invalid value`)。而且**每个命令支持的子集不同**,按下面这张表用,别跨命令套:
17
+
18
+ | 命令 | 允许的 `principal-type` |
19
+ |---|---|
20
+ | `comments` | `workitem` `workitem_review` `testrun` `testcase` `testcase_review` `idea` `idea_review` `ticket` `page` |
21
+ | `attachments` | `workitem` `workitem_review` `workitem_deliverable` `testrun` `testcase` `testcase_review` `idea` `idea_review` `ticket` `page` |
22
+ | `participants` | `workitem` `workitem_review` `testcase` `testcase_review` `idea` `idea_review` `ticket` `page` |
23
+ | `activities` | `workitem` `testrun` `testcase` `idea` `ticket` |
24
+ | `workload` | `workitem` `idea` `ticket` `testcase` |
25
+ | `reviews` | `workitem` `testcase` `idea`(指**被评审对象**的类型) |
26
+ | `relations` | 无枚举限制,但 `list` 必须给 `--target-type` |
27
+ | `entity-properties` | 用 `--entity-type` + `--entity-id`,取值 `workitem` `idea` `ticket` `testcase` |
28
+
29
+ ## 各模块要点
30
+
31
+ - **`comments`**:`list` / `get` / `delete` 用 `--principal-type` + `--principal-id` 两个**选项**;
32
+ `create` 把这两项放进 `--data` 的**字段**里(`principal_type`、`principal_id`、`content` 为必填,
33
+ 另有 `reply_comment_id` / `created_at` / `created_by` 可选)。传法不一样,容易混。
34
+ - **`attachments`**:上传文件用 `upload-file --file <PATH>`(**multipart,不是 `--data`**);
35
+ 代码片段用 `upload-snippet --data`。挂到某条评论下时加 `--comment-id`。
36
+ - **`participants`**:参与人(关注者)。`add` 用 `--data`,其余用位置参数 `<PARTICIPANT_ID>`。
37
+ - **`activities`**:操作历史,只读。回答「谁在什么时候改了什么」用它,别拿两次 `get` 做 diff。
38
+ - **`reviews`**:`--principal-type` 指的是**被评审对象**的类型(工作项 / 用例 / 需求),
39
+ 不是评审单的类型。`reviews list` 的 `--status` 取值:
40
+ `pending` / `in_progress` / `completed` / `repealed`。
41
+ - **`entity-properties`**:自定义键值属性,用 `--entity-type` + `--entity-id` 定位。
42
+ - **`workload`**:工时记录。`list` 的 `--start-at` / `--end-at` 是 **Unix 时间戳(秒)**,
43
+ 且**必须成对使用**(只给一个会报错)。写工时要先 `workload-type list` 拿类型 ID。
44
+ - **`permission`**:`my-principal` / `my-pilot` 查「我能不能改这个对象」
45
+ (`--type` 取值 `idea` `ticket` `workitem` `testcase` `page`);`check-*` 批量校验权限点。
46
+ 遇到 403 想确认是不是权限问题,先用它,不要盲试写接口。
47
+ - **`security`**:登录日志 / 审计日志,只读,按时间范围 `--logged-between` / `--operated-between` 查。
48
+ - **`expression`**:表达式解析(`analyse`)与求值(`evaluate`),用于验证筛选条件写法。
49
+
50
+ ## 命令表
51
+
52
+ ### `comments`
53
+
54
+ ```bash
55
+ pc comments list --principal-type <TYPE> --principal-id <ID> [--page-index <INDEX>] \
56
+ [--page-size <SIZE>]
57
+ pc comments get --principal-type <TYPE> --principal-id <ID> <COMMENT_ID>
58
+ pc comments create --data <JSON>
59
+ pc comments delete --principal-type <TYPE> --principal-id <ID> <COMMENT_ID>
60
+ ```
61
+
62
+ ### `attachments`
63
+
64
+ ```bash
65
+ pc attachments list --principal-type <TYPE> --principal-id <ID> [--comment-id <ID>] \
66
+ [--page-index <INDEX>] [--page-size <SIZE>]
67
+ pc attachments get --principal-type <TYPE> --principal-id <ID> <ATTACHMENT_ID> \
68
+ [--comment-id <ID>]
69
+ pc attachments upload-file --principal-type <TYPE> --principal-id <ID> --file <PATH> \
70
+ [--title <TITLE>] [--comment-id <ID>]
71
+ pc attachments upload-snippet --data <JSON>
72
+ pc attachments delete --principal-type <TYPE> --principal-id <ID> <ATTACHMENT_ID> \
73
+ [--comment-id <ID>]
74
+ ```
75
+
76
+ ### `participants`
77
+
78
+ ```bash
79
+ pc participants list --principal-type <TYPE> --principal-id <ID> [--page-index <INDEX>] \
80
+ [--page-size <SIZE>]
81
+ pc participants get --principal-type <TYPE> --principal-id <ID> <PARTICIPANT_ID>
82
+ pc participants add --data <JSON>
83
+ pc participants remove --principal-type <TYPE> --principal-id <ID> <PARTICIPANT_ID>
84
+ ```
85
+
86
+ ### `relations`
87
+
88
+ ```bash
89
+ pc relations list --principal-type <TYPE> --principal-id <ID> --target-type <TYPE> \
90
+ [--page-index <INDEX>] [--page-size <SIZE>]
91
+ pc relations get <RELATION_ID> [--include-deleted]
92
+ pc relations create --data <JSON>
93
+ pc relations delete <RELATION_ID>
94
+ ```
95
+
96
+ ### `activities`
97
+
98
+ ```bash
99
+ pc activities list --principal-type <TYPE> --principal-id <ID> [--page-index <INDEX>] \
100
+ [--page-size <SIZE>]
101
+ pc activities get --principal-type <TYPE> --principal-id <ID> <ACTIVITY_ID>
102
+ ```
103
+
104
+ ### `reviews`
105
+
106
+ ```bash
107
+ pc reviews list --principal-type <TYPE> --pilot-id <ID> [--status <STATUS>] \
108
+ [--page-index <INDEX>] [--page-size <SIZE>]
109
+ pc reviews get --principal-type <TYPE> <REVIEW_ID>
110
+ pc reviews create --data <JSON>
111
+ pc reviews delete --principal-type <TYPE> <REVIEW_ID>
112
+ pc reviews list-principals --principal-type <TYPE> <REVIEW_ID> [--page-index <INDEX>] \
113
+ [--page-size <SIZE>]
114
+ pc reviews add-principal --data <JSON> <REVIEW_ID>
115
+ pc reviews get-principal --principal-type <TYPE> <REVIEW_ID> <PRINCIPAL_ID>
116
+ pc reviews remove-principal --principal-type <TYPE> <REVIEW_ID> <PRINCIPAL_ID>
117
+ ```
118
+
119
+ ### `entity-properties`
120
+
121
+ ```bash
122
+ pc entity-properties list --entity-type <TYPE> --entity-id <ID> [--page-index <INDEX>] \
123
+ [--page-size <SIZE>]
124
+ pc entity-properties get --entity-type <TYPE> --entity-id <ID> <PROPERTY_ID>
125
+ pc entity-properties create --data <JSON>
126
+ pc entity-properties delete --entity-type <TYPE> --entity-id <ID> <PROPERTY_ID>
127
+ ```
128
+
129
+ ### `workload`
130
+
131
+ ```bash
132
+ pc workload list [--principal-type <PRINCIPAL_TYPE>] [--pilot-id <ID>] [--principal-id <ID>] \
133
+ [--start-at <TIMESTAMP>] [--end-at <TIMESTAMP>] [--report-by-id <ID>] \
134
+ [--page-index <INDEX>] [--page-size <SIZE>]
135
+ pc workload get <WORKLOAD_ID>
136
+ pc workload create --data <JSON>
137
+ pc workload update --data <JSON> <WORKLOAD_ID>
138
+ pc workload delete <WORKLOAD_ID>
139
+ ```
140
+
141
+ ### `workload-type`
142
+
143
+ ```bash
144
+ pc workload-type list [--page-index <INDEX>] [--page-size <SIZE>]
145
+ pc workload-type get <TYPE_ID>
146
+ ```
147
+
148
+ ### `permission`
149
+
150
+ ```bash
151
+ pc permission points
152
+ pc permission my-global
153
+ pc permission my-pilot --type <TYPE> --id <ID>
154
+ pc permission my-principal --type <TYPE> --id <ID>
155
+ pc permission check-global --data <JSON>
156
+ pc permission check-pilot --data <JSON>
157
+ pc permission check-principal --data <JSON>
158
+ ```
159
+
160
+ ### `security`
161
+
162
+ ```bash
163
+ pc security login-log <COMMAND>
164
+ pc security audit-log <COMMAND>
165
+ ```
166
+
167
+ ### `expression`
168
+
169
+ ```bash
170
+ pc expression analyse --data <JSON>
171
+ pc expression evaluate --data <JSON> [--expand]
172
+ ```
@@ -0,0 +1,127 @@
1
+ # organization / wiki 命令速查(人员组织与知识库)
2
+
3
+ 通用约定(`--data`、分页、输出)见 `reference.md`。
4
+
5
+ ## organization(企业 / 成员 / 部门 / 团队 / 角色 / 职位)
6
+
7
+ **查人只有这一个入口**:`pc organization user list --keywords "姓名"` → `values[].id`。
8
+ 工作项、迭代、评论里的 `assignee` / `created_by` / `participants` 都只给 ID,要把人显示成姓名时,
9
+ 先用它建映射。也可以用 `--name` / `--emails` / `--mobiles` 精确查。
10
+
11
+ - `team get` 是**企业信息**(当前租户),不是「团队列表」;团队用 `group`。
12
+ - `group-member add/remove` 用 `--data` 传成员,`get` 要 `group-id` + `member-id` 两个位置参数。
13
+ - `role` / `job` 是字典,只读(只有 `list` / `get`)。
14
+ - 部门、团队支持写(`create` / `update` / `delete`),改组织结构影响面大,**先 `get` 看清再改**。
15
+
16
+ ## wiki(知识空间与页面)
17
+
18
+ - 找空间:`pc wiki space list --keywords "空间名"` → `values[].id`。
19
+ - 列页面:`pc wiki page list --space-id <SID>`;按 `--parent-id` 看一层子页面,
20
+ 按 `--ancestor-id` 拉整棵子树(找某个页面下的全部内容时用这个,别一层层点)。
21
+ - **读正文用 `get-content`,不要用 `get`**:
22
+ `pc wiki page get-content <PAGE_ID> --format-type markdown`。格式可选
23
+ `text` / `markdown` / `html` / `block`,**服务端默认是 `text`**(纯文本,会丢结构),
24
+ 要 markdown 必须显式传。
25
+ - 写正文用 `update-content`(不是 `update`,`update` 走 PATCH,只改标题、父页面等元信息)。
26
+ - 版本:`list-versions` / `get-version` / `restore-version`,改坏了可以回滚。
27
+ - 删除空间 / 页面不可撤销,确认 ID 再执行。
28
+
29
+ ## 命令表
30
+
31
+ ### `organization department` — 部门(list / get / create / update / delete)
32
+
33
+ ```bash
34
+ pc organization department list [--page-index <INDEX>] [--page-size <SIZE>]
35
+ pc organization department get <DEPARTMENT_ID>
36
+ pc organization department create --data <JSON>
37
+ pc organization department update --data <JSON> <DEPARTMENT_ID>
38
+ pc organization department delete <DEPARTMENT_ID>
39
+ ```
40
+
41
+ ### `organization group` — 团队(list / get / create / update)
42
+
43
+ ```bash
44
+ pc organization group list [--page-index <INDEX>] [--page-size <SIZE>]
45
+ pc organization group get <GROUP_ID>
46
+ pc organization group create --data <JSON>
47
+ pc organization group update --data <JSON> <GROUP_ID>
48
+ ```
49
+
50
+ ### `organization group-member` — 团队成员(list / get / add / remove)
51
+
52
+ ```bash
53
+ pc organization group-member list <GROUP_ID> [--page-index <INDEX>] [--page-size <SIZE>]
54
+ pc organization group-member get <GROUP_ID> <MEMBER_ID>
55
+ pc organization group-member add --data <JSON> <GROUP_ID>
56
+ pc organization group-member remove <GROUP_ID> <MEMBER_ID>
57
+ ```
58
+
59
+ ### `organization job` — 职位(list / get)
60
+
61
+ ```bash
62
+ pc organization job list [--page-index <INDEX>] [--page-size <SIZE>]
63
+ pc organization job get <JOB_ID>
64
+ ```
65
+
66
+ ### `organization role` — 角色(list / get)
67
+
68
+ ```bash
69
+ pc organization role list [--page-index <INDEX>] [--page-size <SIZE>]
70
+ pc organization role get <ROLE_ID>
71
+ ```
72
+
73
+ ### `organization team` — 企业信息(get)
74
+
75
+ ```bash
76
+ pc organization team get
77
+ ```
78
+
79
+ ### `organization user` — 成员(list / get / create / update / bulk-update)
80
+
81
+ ```bash
82
+ pc organization user list [--name <NAME>] [--keywords <KEYWORDS>] [--emails <EMAILS>] \
83
+ [--mobiles <MOBILES>] [--department-ids <IDS>] [--page-index <INDEX>] \
84
+ [--page-size <SIZE>]
85
+ pc organization user get <USER_ID>
86
+ pc organization user create --data <JSON>
87
+ pc organization user update --data <JSON> <USER_ID>
88
+ pc organization user bulk-update --data <JSON>
89
+ ```
90
+ ### `wiki page` — 页面(list / get / create / update / delete / get-content / update-content / list-versions / get-version / restore-version)
91
+
92
+ ```bash
93
+ pc wiki page list [--space-id <ID>] [--parent-id <ID>] [--ancestor-id <ID>] \
94
+ [--page-index <INDEX>] [--page-size <SIZE>]
95
+ pc wiki page get <PAGE_ID> [--include-deleted]
96
+ pc wiki page create --data <JSON>
97
+ pc wiki page update --data <JSON> <PAGE_ID>
98
+ pc wiki page delete <PAGE_ID>
99
+ pc wiki page get-content <PAGE_ID> [--format-type <FORMAT>] [--version-id <ID>] \
100
+ [--include-public-image-token <FIELDS>]
101
+ pc wiki page update-content --data <JSON> <PAGE_ID>
102
+ pc wiki page list-versions <PAGE_ID> [--page-index <INDEX>] [--page-size <SIZE>]
103
+ pc wiki page get-version <PAGE_ID> <VERSION_ID>
104
+ pc wiki page restore-version <PAGE_ID> <VERSION_ID>
105
+ ```
106
+
107
+ ### `wiki space` — 知识空间(list / get / create / update / delete)
108
+
109
+ ```bash
110
+ pc wiki space list [--scope-type <TYPE>] [--scope-id <ID>] [--keywords <KEYWORDS>] \
111
+ [--member-type <TYPE>] [--member-id <ID>] [--created-between <RANGE>] \
112
+ [--updated-between <RANGE>] [--include-deleted] [--include-archived] \
113
+ [--page-index <INDEX>] [--page-size <SIZE>]
114
+ pc wiki space get <SPACE_ID> [--include-deleted] [--include-archived]
115
+ pc wiki space create --data <JSON>
116
+ pc wiki space update --data <JSON> <SPACE_ID>
117
+ pc wiki space delete <SPACE_ID>
118
+ ```
119
+
120
+ ### `wiki space-member` — 空间成员(list / get / add / remove)
121
+
122
+ ```bash
123
+ pc wiki space-member list <SPACE_ID> [--page-index <INDEX>] [--page-size <SIZE>]
124
+ pc wiki space-member get <SPACE_ID> <MEMBER_ID>
125
+ pc wiki space-member add --data <JSON> <SPACE_ID>
126
+ pc wiki space-member remove <SPACE_ID> <MEMBER_ID>
127
+ ```
@@ -0,0 +1,282 @@
1
+ # ship 命令速查(产品 / 需求 / 工单)
2
+
3
+ ship 是 PingCode 的**产品与客户反馈**模块:`product` 是父级,其下挂 `idea`(需求 / 想法)与
4
+ `ticket`(工单 / 客户问题)。本文件是该模块的完整命令表,通用约定见 `reference.md`。
5
+
6
+ ## 层级与 ID 关系
7
+
8
+ ```
9
+ product(产品)
10
+ ├── product-member / product-tag / product-suite / product-plan / product-user / product-customer
11
+ ├── idea(需求池)
12
+ │ └── idea-state / idea-type 相关字典都按「产品」维度配置
13
+ └── ticket(工单)
14
+ └── ticket-state / ticket-type / ticket-solution 同样按「产品」维度配置
15
+ ```
16
+
17
+ - **列表基本都要按产品过滤**:`idea list --product-id <PID>`、`ticket list --product-id <PID>`。
18
+ 这两处 `--product-id` 语法上虽然可选,但**不传会跨产品混在一起**,基本等于查错了对象;
19
+ 先 `pc ship product list --keywords "产品名"` 拿 ID。
20
+ - **状态 / 类型 / 优先级字典按产品查**,不同产品可能不一样,不要跨产品复用 ID:
21
+ `idea-state list --product-id <PID>`、`ticket-state list --product-id <PID>`。
22
+ - `*-plan` 类命令(`idea-plan` / `product-plan` / `idea-property-plan` …)是「方案」对象,
23
+ 要按位置参数 `<ID>` 或 `--product-id` 查,不是全局列表。
24
+
25
+ ## 写操作的必知事项
26
+
27
+ - **`idea` 与 `ticket` 没有 `delete` 子命令**。要「关闭」它们只能 `update` 改 `state_id`,
28
+ 不要重复尝试 `delete`。
29
+ - `idea` / `ticket` 的 `create` / `update` 都用 `--data '<JSON>'`,字段名以接口为准;
30
+ 不确定时先 `get` 一条同类对象,照着它的字段结构写。
31
+ - `ticket-solution`(解决方案)是独立字典,工单解决时用它填 `solution_id`。
32
+ - `product-customer` / `product-user` 是客户与使用者,和 `organization user`(内部成员)不是一回事。
33
+
34
+ ## 命令表
35
+
36
+ ### `ship idea` — 需求(想法)(list / get / create / update / search)
37
+
38
+ ```bash
39
+ pc ship idea list [--product-id <ID>] [--state-id <ID>] [--priority-id <ID>] \
40
+ [--keywords <KEYWORDS>] [--include-public-image-token <FIELDS>] [--page-index <INDEX>] \
41
+ [--page-size <SIZE>]
42
+ pc ship idea get <IDEA_ID> [--include-public-image-token <FIELDS>] [--include-deleted]
43
+ pc ship idea create --data <JSON>
44
+ pc ship idea update --data <JSON> <IDEA_ID>
45
+ pc ship idea search --data <JSON>
46
+ ```
47
+
48
+ ### `ship idea-plan` — 需求排期(list-for-product)
49
+
50
+ ```bash
51
+ pc ship idea-plan list-for-product <ID>
52
+ ```
53
+
54
+ ### `ship idea-priority` — 需求优先级(list / list-for-product / get)
55
+
56
+ ```bash
57
+ pc ship idea-priority list [--page-index <INDEX>] [--page-size <SIZE>]
58
+ pc ship idea-priority list-for-product <ID>
59
+ pc ship idea-priority get <PRIORITY_ID>
60
+ ```
61
+
62
+ ### `ship idea-property` — 需求属性定义(list / list-for-product / get / create / update)
63
+
64
+ ```bash
65
+ pc ship idea-property list [--page-index <INDEX>] [--page-size <SIZE>]
66
+ pc ship idea-property list-for-product <ID>
67
+ pc ship idea-property get <PROPERTY_ID>
68
+ pc ship idea-property create --data <JSON>
69
+ pc ship idea-property update --data <JSON> <PROPERTY_ID>
70
+ ```
71
+
72
+ ### `ship idea-property-plan` — 需求属性方案(list / get / add-property / list-properties / get-property / remove-property)
73
+
74
+ ```bash
75
+ pc ship idea-property-plan list [--page-index <INDEX>] [--page-size <SIZE>]
76
+ pc ship idea-property-plan get <PROPERTY_PLAN_ID>
77
+ pc ship idea-property-plan add-property --data <JSON> <PROPERTY_PLAN_ID>
78
+ pc ship idea-property-plan list-properties <PROPERTY_PLAN_ID>
79
+ pc ship idea-property-plan get-property <PROPERTY_PLAN_ID> <PROPERTY_ID>
80
+ pc ship idea-property-plan remove-property <PROPERTY_PLAN_ID> <PROPERTY_ID>
81
+ ```
82
+
83
+ ### `ship idea-state` — 需求状态(list / list-for-product / get)
84
+
85
+ ```bash
86
+ pc ship idea-state list [--page-index <INDEX>] [--page-size <SIZE>]
87
+ pc ship idea-state list-for-product <ID>
88
+ pc ship idea-state get <IDEA_STATE_ID>
89
+ ```
90
+
91
+ ### `ship idea-suite` — 需求集(list-for-product)
92
+
93
+ ```bash
94
+ pc ship idea-suite list-for-product <ID>
95
+ ```
96
+
97
+ ### `ship idea-transition` — 需求流转(list / get)
98
+
99
+ ```bash
100
+ pc ship idea-transition list <IDEA_ID>
101
+ pc ship idea-transition get <IDEA_ID> <TRANSITION_HISTORY_ID>
102
+ ```
103
+
104
+ ### `ship product` — 产品(list / get / create / update)
105
+
106
+ ```bash
107
+ pc ship product list [--scope-type <SCOPE_TYPE>] [--scope-id <ID>] [--keywords <KEYWORDS>] \
108
+ [--member-type <TYPE>] [--member-id <ID>] [--created-between <RANGE>] \
109
+ [--updated-between <RANGE>] [--include-deleted] [--include-archived] \
110
+ [--page-index <INDEX>] [--page-size <SIZE>]
111
+ pc ship product get <PRODUCT_ID> [--include-deleted] [--include-archived]
112
+ pc ship product create --data <JSON>
113
+ pc ship product update --data <JSON> <PRODUCT_ID>
114
+ ```
115
+
116
+ ### `ship product-channel` — 客户渠道(list / get)
117
+
118
+ ```bash
119
+ pc ship product-channel list <PRODUCT_ID>
120
+ pc ship product-channel get <PRODUCT_ID> <CHANNEL_ID>
121
+ ```
122
+
123
+ ### `ship product-customer` — 客户(list / get / create / update)
124
+
125
+ ```bash
126
+ pc ship product-customer list <PRODUCT_ID>
127
+ pc ship product-customer get <PRODUCT_ID> <CUSTOMER_ID>
128
+ pc ship product-customer create --data <JSON> <PRODUCT_ID>
129
+ pc ship product-customer update --data <JSON> <PRODUCT_ID> <CUSTOMER_ID>
130
+ ```
131
+
132
+ ### `ship product-member` — 产品成员(list / get / add / remove)
133
+
134
+ ```bash
135
+ pc ship product-member list <PRODUCT_ID>
136
+ pc ship product-member get <PRODUCT_ID> <MEMBER_ID>
137
+ pc ship product-member add --data <JSON> <PRODUCT_ID>
138
+ pc ship product-member remove <PRODUCT_ID> <MEMBER_ID>
139
+ ```
140
+
141
+ ### `ship product-plan` — 产品计划(list / get)
142
+
143
+ ```bash
144
+ pc ship product-plan list <PRODUCT_ID>
145
+ pc ship product-plan get <PRODUCT_ID> <PLAN_ID>
146
+ ```
147
+
148
+ ### `ship product-suite` — 产品集(list / get / create / delete)
149
+
150
+ ```bash
151
+ pc ship product-suite list <PRODUCT_ID>
152
+ pc ship product-suite get <PRODUCT_ID> <SUITE_ID>
153
+ pc ship product-suite create --data <JSON> <PRODUCT_ID>
154
+ pc ship product-suite delete <PRODUCT_ID> <SUITE_ID>
155
+ ```
156
+
157
+ ### `ship product-tag` — 产品标签(list / get / create / delete)
158
+
159
+ ```bash
160
+ pc ship product-tag list <PRODUCT_ID>
161
+ pc ship product-tag get <PRODUCT_ID> <TAG_ID>
162
+ pc ship product-tag create --data <JSON> <PRODUCT_ID>
163
+ pc ship product-tag delete <PRODUCT_ID> <TAG_ID>
164
+ ```
165
+
166
+ ### `ship product-ticket-type` — 产品工单类型(list / get)
167
+
168
+ ```bash
169
+ pc ship product-ticket-type list <PRODUCT_ID>
170
+ pc ship product-ticket-type get <PRODUCT_ID> <TICKET_TYPE_ID>
171
+ ```
172
+
173
+ ### `ship product-user` — 产品用户(list / get / create / update / delete)
174
+
175
+ ```bash
176
+ pc ship product-user list <PRODUCT_ID>
177
+ pc ship product-user get <PRODUCT_ID> <USER_ID>
178
+ pc ship product-user create --data <JSON> <PRODUCT_ID>
179
+ pc ship product-user update --data <JSON> <PRODUCT_ID> <USER_ID>
180
+ pc ship product-user delete <PRODUCT_ID> <USER_ID>
181
+ ```
182
+
183
+ ### `ship ticket` — 工单(list / get / create / update / search)
184
+
185
+ ```bash
186
+ pc ship ticket list [--product-id <ID>] [--type-id <ID>] [--state-id <ID>] \
187
+ [--priority-id <ID>] [--keywords <KEYWORDS>] [--include-public-image-token <FIELDS>] \
188
+ [--page-index <INDEX>] [--page-size <SIZE>]
189
+ pc ship ticket get <TICKET_ID> [--include-public-image-token <FIELDS>] [--include-deleted]
190
+ pc ship ticket create --data <JSON>
191
+ pc ship ticket update --data <JSON> <TICKET_ID>
192
+ pc ship ticket search --data <JSON>
193
+ ```
194
+
195
+ ### `ship ticket-channel` — 工单渠道(list-for-product)
196
+
197
+ ```bash
198
+ pc ship ticket-channel list-for-product <ID>
199
+ ```
200
+
201
+ ### `ship ticket-priority` — 工单优先级(list / list-for-product / get)
202
+
203
+ ```bash
204
+ pc ship ticket-priority list [--page-index <INDEX>] [--page-size <SIZE>]
205
+ pc ship ticket-priority list-for-product <ID>
206
+ pc ship ticket-priority get <PRIORITY_ID>
207
+ ```
208
+
209
+ ### `ship ticket-property` — 工单属性定义(list / list-for-product / get / create / update)
210
+
211
+ ```bash
212
+ pc ship ticket-property list [--page-index <INDEX>] [--page-size <SIZE>]
213
+ pc ship ticket-property list-for-product <ID>
214
+ pc ship ticket-property get <PROPERTY_ID>
215
+ pc ship ticket-property create --data <JSON>
216
+ pc ship ticket-property update --data <JSON> <PROPERTY_ID>
217
+ ```
218
+
219
+ ### `ship ticket-property-plan` — 工单属性方案(list / get / add-property / list-properties / get-property / remove-property)
220
+
221
+ ```bash
222
+ pc ship ticket-property-plan list [--page-index <INDEX>] [--page-size <SIZE>]
223
+ pc ship ticket-property-plan get <PROPERTY_PLAN_ID>
224
+ pc ship ticket-property-plan add-property --data <JSON> <PROPERTY_PLAN_ID>
225
+ pc ship ticket-property-plan list-properties <PROPERTY_PLAN_ID>
226
+ pc ship ticket-property-plan get-property <PROPERTY_PLAN_ID> <PROPERTY_ID>
227
+ pc ship ticket-property-plan remove-property <PROPERTY_PLAN_ID> <PROPERTY_ID>
228
+ ```
229
+
230
+ ### `ship ticket-solution` — 工单解决方案(list / list-for-product / get)
231
+
232
+ ```bash
233
+ pc ship ticket-solution list [--page-index <INDEX>] [--page-size <SIZE>]
234
+ pc ship ticket-solution list-for-product <ID>
235
+ pc ship ticket-solution get <TICKET_SOLUTION_ID>
236
+ ```
237
+
238
+ ### `ship ticket-state` — 工单状态(list / list-for-product / get / create / update)
239
+
240
+ ```bash
241
+ pc ship ticket-state list [--page-index <INDEX>] [--page-size <SIZE>]
242
+ pc ship ticket-state list-for-product <ID>
243
+ pc ship ticket-state get <TICKET_STATE_ID>
244
+ pc ship ticket-state create --data <JSON>
245
+ pc ship ticket-state update --data <JSON> <TICKET_STATE_ID>
246
+ ```
247
+
248
+ ### `ship ticket-state-plan` — 工单状态方案与流转(list / get / add-state / list-states / get-state / remove-state / add-flow / list-flows / get-flow / remove-flow)
249
+
250
+ ```bash
251
+ pc ship ticket-state-plan list [--page-index <INDEX>] [--page-size <SIZE>]
252
+ pc ship ticket-state-plan get <STATE_PLAN_ID>
253
+ pc ship ticket-state-plan add-state --data <JSON> <STATE_PLAN_ID>
254
+ pc ship ticket-state-plan list-states <STATE_PLAN_ID>
255
+ pc ship ticket-state-plan get-state <STATE_PLAN_ID> <STATE_ID>
256
+ pc ship ticket-state-plan remove-state <STATE_PLAN_ID> <STATE_ID>
257
+ pc ship ticket-state-plan add-flow --data <JSON> <STATE_PLAN_ID>
258
+ pc ship ticket-state-plan list-flows <STATE_PLAN_ID>
259
+ pc ship ticket-state-plan get-flow <STATE_PLAN_ID> <STATE_FLOW_ID>
260
+ pc ship ticket-state-plan remove-flow <STATE_PLAN_ID> <STATE_FLOW_ID>
261
+ ```
262
+
263
+ ### `ship ticket-tag` — 工单标签(list-for-product)
264
+
265
+ ```bash
266
+ pc ship ticket-tag list-for-product <ID>
267
+ ```
268
+
269
+ ### `ship ticket-transition` — 工单流转(list / get)
270
+
271
+ ```bash
272
+ pc ship ticket-transition list <TICKET_ID>
273
+ pc ship ticket-transition get <TICKET_ID> <TRANSITION_HISTORY_ID>
274
+ ```
275
+
276
+ ### `ship ticket-type` — 工单类型(list / list-for-product / get)
277
+
278
+ ```bash
279
+ pc ship ticket-type list [--page-index <INDEX>] [--page-size <SIZE>]
280
+ pc ship ticket-type list-for-product <ID>
281
+ pc ship ticket-type get <TICKET_TYPE_ID>
282
+ ```