@comate/zulu 1.2.1-beta.1 → 1.3.0
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.
- package/comate-engine/assets/skills/auto-commit-comate/SKILL.md +260 -0
- package/comate-engine/assets/skills/auto-commit-comate/references/data_structures.md +189 -0
- package/comate-engine/assets/skills/auto-commit-comate/references/new_version_instruction.md +209 -0
- package/comate-engine/assets/skills/auto-commit-comate/references/old_version_instruction.md +208 -0
- package/comate-engine/assets/skills/auto-commit-comate/scripts/git_diff_cli.py +196 -0
- package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/git_utils.py +20 -10
- package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/icafe/client.py +69 -40
- package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/icafe/farseer.py +8 -9
- package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/icafe/matching.py +65 -9
- package/comate-engine/assets/skills/auto-commit-comate/scripts/match_card_cli.py +37 -0
- package/comate-engine/assets/skills/cnap-comate/SKILL.md +157 -0
- package/comate-engine/assets/skills/cnap-comate/references/cases.md +198 -0
- package/comate-engine/assets/skills/cnap-comate/references/deploy-troubleshoot.md +15 -0
- package/comate-engine/assets/skills/cnap-comate/references/install.md +43 -0
- package/comate-engine/assets/skills/cnap-comate/references/kubectl.md +55 -0
- package/comate-engine/assets/skills/cnap-comate/references/login.md +125 -0
- package/comate-engine/assets/skills/cnap-comate/references/oncall.md +24 -0
- package/comate-engine/assets/skills/cnap-comate/scripts/install_cnap_cli.sh +36 -0
- package/comate-engine/assets/skills/code-security/SKILL.md +176 -0
- package/comate-engine/assets/skills/code-security/references/credential_hosting.md +102 -0
- package/comate-engine/assets/skills/code-security/references/vul_repair_sensitive.md +219 -0
- package/comate-engine/assets/skills/code-security/scripts/build_repair_info.py +0 -0
- package/comate-engine/assets/skills/code-security/scripts/credential_hosting.py +99 -0
- package/comate-engine/assets/skills/code-security/scripts/credential_poll.py +350 -0
- package/comate-engine/assets/skills/code-security/scripts/http_client.py +173 -0
- package/comate-engine/assets/skills/code-security/scripts/parse_scan_result.py +301 -0
- package/comate-engine/assets/skills/code-security/scripts/repair_vulnerability.py +261 -0
- package/comate-engine/assets/skills/code-security/scripts/report_chat.py +198 -0
- package/comate-engine/assets/skills/code-security/scripts/scan_vulnerability.py +316 -0
- package/comate-engine/assets/skills/code-security-comate/SKILL.md +219 -0
- package/comate-engine/assets/skills/code-security-comate/references/credential_hosting.md +102 -0
- package/comate-engine/assets/skills/code-security-comate/references/vul_repair-go_sql_injection.md +399 -0
- package/comate-engine/assets/skills/code-security-comate/references/vul_repair-java_sql_injection.md +591 -0
- package/comate-engine/assets/skills/code-security-comate/references/vul_repair-php_sql_injection.md +318 -0
- package/comate-engine/assets/skills/code-security-comate/references/vul_repair-python_sql_injection.md +198 -0
- package/comate-engine/assets/skills/code-security-comate/references/vul_repair_sensitive.md +219 -0
- package/comate-engine/assets/skills/code-security-comate/scripts/credential_hosting.py +87 -0
- package/comate-engine/assets/skills/code-security-comate/scripts/credential_poll.py +345 -0
- package/comate-engine/assets/skills/code-security-comate/scripts/http_client.py +173 -0
- package/comate-engine/assets/skills/code-security-comate/scripts/parse_scan_result.py +392 -0
- package/comate-engine/assets/skills/code-security-comate/scripts/repair_vulnerability.py +245 -0
- package/comate-engine/assets/skills/code-security-comate/scripts/report_chat.py +145 -0
- package/comate-engine/assets/skills/code-security-comate/scripts/scan_vulnerability.py +444 -0
- package/comate-engine/assets/skills/code-security-comate/scripts/utils.py +153 -0
- package/comate-engine/assets/skills/comate-docs-comate/SKILL.md +148 -0
- package/comate-engine/assets/skills/comate-docs-comate/references/doc-map-extended.md +78 -0
- package/comate-engine/assets/skills/comate-docs-comate/references/models-and-billing.md +51 -0
- package/comate-engine/assets/skills/comate-docs-comate/references/product-overview.md +73 -0
- package/comate-engine/assets/skills/comate-docs-comate/references/query_content.md +83 -0
- package/comate-engine/assets/skills/comate-docs-comate/references/query_repo.md +57 -0
- package/comate-engine/assets/skills/comate-docs-comate/scripts/ku_operator.py +1575 -0
- package/comate-engine/assets/skills/create-image-comate/SKILL.md +278 -0
- package/comate-engine/assets/skills/create-skill-comate/SKILL.md +308 -217
- package/comate-engine/assets/skills/create-skill-comate/agents/analyzer.md +274 -0
- package/comate-engine/assets/skills/create-skill-comate/agents/comparator.md +202 -0
- package/comate-engine/assets/skills/create-skill-comate/agents/grader.md +223 -0
- package/comate-engine/assets/skills/create-skill-comate/assets/eval_review.html +146 -0
- package/comate-engine/assets/skills/create-skill-comate/eval-viewer/generate_review.py +489 -0
- package/comate-engine/assets/skills/create-skill-comate/eval-viewer/viewer.html +1325 -0
- package/comate-engine/assets/skills/create-skill-comate/references/schemas.md +430 -0
- package/comate-engine/assets/skills/create-skill-comate/scripts/__init__.py +0 -0
- package/comate-engine/assets/skills/create-skill-comate/scripts/__pycache__/__init__.cpython-311.pyc +0 -0
- package/comate-engine/assets/skills/create-skill-comate/scripts/__pycache__/aggregate_benchmark.cpython-311.pyc +0 -0
- package/comate-engine/assets/skills/create-skill-comate/scripts/aggregate_benchmark.py +412 -0
- package/comate-engine/assets/skills/create-skill-comate/scripts/generate_report.py +334 -0
- package/comate-engine/assets/skills/create-skill-comate/scripts/package_skill.py +140 -0
- package/comate-engine/assets/skills/create-skill-comate/scripts/utils.py +53 -0
- package/comate-engine/assets/skills/find-skills-comate/SKILL.md +15 -12
- package/comate-engine/assets/skills/find-skills-comate/scripts/fetch_skills.py +32 -3
- package/comate-engine/assets/skills/get-ugate-token-comate/SKILL.md +159 -0
- package/comate-engine/assets/skills/get-ugate-token-comate/getUgateToken.py +150 -0
- package/comate-engine/assets/skills/icafe-comate/SKILL.md +240 -0
- package/comate-engine/assets/skills/icafe-comate/references/ai-workflows.md +233 -0
- package/comate-engine/assets/skills/icafe-comate/references/commands.md +1147 -0
- package/comate-engine/assets/skills/icafe-comate/references/error-handling.md +164 -0
- package/comate-engine/assets/skills/icafe-comate/references/git-auto-bindcard-workflow.md +201 -0
- package/comate-engine/assets/skills/icafe-comate/references/git-bindcard-workflow.md +327 -0
- package/comate-engine/assets/skills/icafe-comate/references/iql-syntax.md +327 -0
- package/comate-engine/assets/skills/icafe-comate/references/platform-concepts.md +317 -0
- package/comate-engine/assets/skills/icafe-comate/references/smart-create-workflow.md +171 -0
- package/comate-engine/assets/skills/icafe-comate/references/smart-find-workflow.md +127 -0
- package/comate-engine/assets/skills/icafe-comate/references/smart-update-workflow.md +118 -0
- package/comate-engine/assets/skills/icode-comate/SKILL.md +366 -0
- package/comate-engine/assets/skills/icode-comate/references/api/add_reviewers.md +44 -0
- package/comate-engine/assets/skills/icode-comate/references/api/build_fetch_command.md +89 -0
- package/comate-engine/assets/skills/icode-comate/references/api/check_repo_permission.md +89 -0
- package/comate-engine/assets/skills/icode-comate/references/api/create_branch.md +79 -0
- package/comate-engine/assets/skills/icode-comate/references/api/create_draft_comment.md +109 -0
- package/comate-engine/assets/skills/icode-comate/references/api/get_ai_cr_result.md +190 -0
- package/comate-engine/assets/skills/icode-comate/references/api/get_ai_review.md +97 -0
- package/comate-engine/assets/skills/icode-comate/references/api/get_diff_content.md +92 -0
- package/comate-engine/assets/skills/icode-comate/references/api/get_diff_file.md +88 -0
- package/comate-engine/assets/skills/icode-comate/references/api/get_machine_check.md +73 -0
- package/comate-engine/assets/skills/icode-comate/references/api/get_my_reviews.md +115 -0
- package/comate-engine/assets/skills/icode-comate/references/api/get_person_commit.md +89 -0
- package/comate-engine/assets/skills/icode-comate/references/api/get_person_repo.md +63 -0
- package/comate-engine/assets/skills/icode-comate/references/api/get_repo_branch.md +62 -0
- package/comate-engine/assets/skills/icode-comate/references/api/get_repo_config.md +91 -0
- package/comate-engine/assets/skills/icode-comate/references/api/get_repo_members.md +118 -0
- package/comate-engine/assets/skills/icode-comate/references/api/get_repo_reviews.md +91 -0
- package/comate-engine/assets/skills/icode-comate/references/api/get_review_comments.md +87 -0
- package/comate-engine/assets/skills/icode-comate/references/api/get_review_info.md +81 -0
- package/comate-engine/assets/skills/icode-comate/references/api/get_submit_settings.md +105 -0
- package/comate-engine/assets/skills/icode-comate/references/api/icode-api.md +86 -0
- package/comate-engine/assets/skills/icode-comate/references/api/publish_comments.md +72 -0
- package/comate-engine/assets/skills/icode-comate/references/api/set_review_score.md +58 -0
- package/comate-engine/assets/skills/icode-comate/references/api/start_ai_review.md +77 -0
- package/comate-engine/assets/skills/icode-comate/references/api/submit_review.md +50 -0
- package/comate-engine/assets/skills/icode-comate/references/api/trigger_ai_cr.md +63 -0
- package/comate-engine/assets/skills/icode-comate/references/feature/add-reviewer.md +92 -0
- package/comate-engine/assets/skills/icode-comate/references/feature/fix-machine-check.md +144 -0
- package/comate-engine/assets/skills/icode-comate/references/feature/merge-cr.md +100 -0
- package/comate-engine/assets/skills/icode-comate/references/feature/ssh-setup.md +106 -0
- package/comate-engine/assets/skills/icode-comate/references/feature/submit-acr.md +135 -0
- package/comate-engine/assets/skills/icode-comate/references/feature/submit-cr.md +123 -0
- package/comate-engine/assets/skills/icode-comate/references/git/clone.md +67 -0
- package/comate-engine/assets/skills/icode-comate/references/git/icode-git.md +68 -0
- package/comate-engine/assets/skills/icode-comate/references/git/push.md +64 -0
- package/comate-engine/assets/skills/icode-comate/references/git/push_cr.md +103 -0
- package/comate-engine/assets/skills/icode-comate/references/install.md +144 -0
- package/comate-engine/assets/skills/icode-comate/references/login.md +111 -0
- package/comate-engine/assets/skills/icode-comate/scripts/add-reviewer.sh +154 -0
- package/comate-engine/assets/skills/icode-comate/scripts/common.sh +145 -0
- package/comate-engine/assets/skills/icode-comate/scripts/fix-machine-check.sh +131 -0
- package/comate-engine/assets/skills/icode-comate/scripts/merge-cr.sh +105 -0
- package/comate-engine/assets/skills/icode-comate/scripts/ssh-setup.sh +159 -0
- package/comate-engine/assets/skills/icode-comate/scripts/submit-acr.sh +236 -0
- package/comate-engine/assets/skills/icode-comate/scripts/submit-cr.sh +104 -0
- package/comate-engine/assets/skills/icode-comate/scripts/test-preflight.sh +89 -0
- package/comate-engine/assets/skills/ku-operator-comate/SKILL.md +121 -0
- package/comate-engine/assets/skills/ku-operator-comate/examples.md +190 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/add_member.md +49 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/change_scope.md +38 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/copy_doc.md +50 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/create_doc.md +61 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/delete_doc.md +31 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/edit_content.md +568 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/move_doc.md +45 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/query_comment.md +79 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/query_content.md +83 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/query_flowchart.md +84 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/query_permission.md +38 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/query_recent_view.md +67 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/query_repo.md +57 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/query_user_info.md +37 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/update_member.md +41 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/upload_attachment.md +52 -0
- package/comate-engine/assets/skills/ku-operator-comate/scripts/ku_operator.py +1575 -0
- package/comate-engine/node_modules/better-sqlite3/node_modules/.bin/prebuild-install +2 -2
- package/comate-engine/node_modules/tree-sitter-bash/node_modules/.bin/node-gyp-build +2 -2
- package/comate-engine/node_modules/tree-sitter-bash/node_modules/.bin/node-gyp-build-optional +2 -2
- package/comate-engine/node_modules/tree-sitter-bash/node_modules/.bin/node-gyp-build-test +2 -2
- package/comate-engine/package.json +2 -0
- package/comate-engine/server.js +263 -79
- package/dist/bundle/index.js +8 -8
- package/package.json +1 -1
- package/comate-engine/assets/skills/figma2code-comate/codeConnect.md +0 -37
- package/comate-engine/assets/skills/figma2code-comate/designToken.md +0 -3
- package/comate-engine/assets/skills/figma2code-comate/f2cMcp.md +0 -59
- package/comate-engine/assets/skills/smart-commit/SKILL.md +0 -646
- package/comate-engine/node_modules/@comate/plugin-host/dist/index-AZIho4HV.js +0 -1
- package/comate-engine/node_modules/@comate/plugin-host/dist/user-BIpzRUfb.js +0 -44
- /package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/references/issue_type_mapping.json +0 -0
- /package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/references/query_reference.md +0 -0
- /package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/compat.py +0 -0
- /package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/create_card_cli.py +0 -0
- /package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/icafe/__init__.py +0 -0
- /package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/logger.py +0 -0
- /package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/recognize_card_cli.py +0 -0
|
@@ -0,0 +1,1147 @@
|
|
|
1
|
+
# 命令详细参考
|
|
2
|
+
|
|
3
|
+
本文档包含 icafe-cli 所有命令的参数表、返回数据结构和使用示例。
|
|
4
|
+
|
|
5
|
+
**通用返回格式**: 所有命令的返回都是 JSON。HTTP 层错误 (非 2xx) 由 CLI 拦截到 stderr,退出码 4。进程退出码 1/2/4 的区分见 [错误处理参考](error-handling.md#cli-退出码)。
|
|
6
|
+
|
|
7
|
+
**业务成功判断**: 不同命令的成功标识字段和成功值不同,agent 必须根据具体命令检查对应字段:
|
|
8
|
+
|
|
9
|
+
| 命令 | 成功标识字段 | 成功值 |
|
|
10
|
+
|------|-------------|--------|
|
|
11
|
+
| `card get`, `card update`, `card query` | `code` | `200` |
|
|
12
|
+
| `devinfo card`, `plan update-date` | `status` | `0` |
|
|
13
|
+
| `ai-pre-review start/result`, `ai-codegen start/result` | `status` | `"OK"` (macross BaseResponse) |
|
|
14
|
+
| 其他所有命令 | `status` | `200` |
|
|
15
|
+
|
|
16
|
+
简便做法: 对 iCafe 类命令检查 `code`/`status` 为 `200` 或 `0`;对 ai-pre-review/ai-codegen 命令检查 `status` 为 `"OK"`。
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## card 命令组
|
|
21
|
+
|
|
22
|
+
### card get — 获取卡片详情
|
|
23
|
+
|
|
24
|
+
根据空间标识和序列号获取卡片的完整信息。
|
|
25
|
+
|
|
26
|
+
| 参数 | 必需 | 说明 |
|
|
27
|
+
|------|------|------|
|
|
28
|
+
| `--space` | 是 | 空间前缀码 (prefixCode),可通过 `space latest` 获取 |
|
|
29
|
+
| `--sequence` | 是 | 卡片序列号,支持逗号分隔批量查询,如 `1001,1002` |
|
|
30
|
+
| `--show-associations` | 否 | 额外返回关联的其他卡片 |
|
|
31
|
+
| `--show-children` | 否 | 额外返回子卡片列表 |
|
|
32
|
+
| `--show-okr` | 否 | 额外返回关联的 OKR 信息 |
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
icafe-cli card get --space myspace --sequence 1001
|
|
36
|
+
icafe-cli card get --space myspace --sequence 1001,1002
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**返回示例**:
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
{
|
|
43
|
+
"cards": [
|
|
44
|
+
{
|
|
45
|
+
"sequence": 1001,
|
|
46
|
+
"title": "修复登录白屏",
|
|
47
|
+
"id": "186604712",
|
|
48
|
+
"status": "开发中",
|
|
49
|
+
"type": { "localId": 5009, "name": "Bug" },
|
|
50
|
+
"isFinishedStatus": false,
|
|
51
|
+
"detail": "<p>卡片正文 HTML</p>",
|
|
52
|
+
"responsiblePeople": [
|
|
53
|
+
{ "username": "zhangsan", "name": "张三", "email": "zhangsan@baidu.com" }
|
|
54
|
+
],
|
|
55
|
+
"createdUser": { "username": "lisi", "name": "李四" },
|
|
56
|
+
"createdTime": "2026-03-25 10:00:00",
|
|
57
|
+
"lastModifiedUser": { "username": "zhangsan", "name": "张三" },
|
|
58
|
+
"lastModifiedTime": "2026-03-25 15:30:00",
|
|
59
|
+
"spacePrefixCode": "myspace",
|
|
60
|
+
"properties": [
|
|
61
|
+
{ "propertyName": "优先级", "displayValue": "P1-High", "fieldType": "SELECT_LIST" },
|
|
62
|
+
{ "propertyName": "所属计划", "displayValue": "Sprint1", "fieldType": "PLAN_BOX" }
|
|
63
|
+
]
|
|
64
|
+
}
|
|
65
|
+
],
|
|
66
|
+
"code": 200, "total": 1, "currentPage": 1, "pageSize": 1,
|
|
67
|
+
"result": "success", "message": "OK, "
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**关键字段说明**:
|
|
72
|
+
- `sequence`: 卡片编号,用于 URL 和 commit message
|
|
73
|
+
- `status`: 当前流程状态的中文名
|
|
74
|
+
- `type.name`: 卡片类型名
|
|
75
|
+
- `isFinishedStatus`: 是否处于终态 (已关闭/已完成)
|
|
76
|
+
- `responsiblePeople[].username`: 负责人的用户名
|
|
77
|
+
- `properties[]`: 所有自定义字段,通过 `propertyName` 和 `displayValue` 读取字段值
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
### card create — 创建卡片
|
|
82
|
+
|
|
83
|
+
在指定空间中创建新卡片。
|
|
84
|
+
|
|
85
|
+
| 参数 | 必需 | 说明 |
|
|
86
|
+
|------|------|------|
|
|
87
|
+
| `--space` | **是** | 空间前缀码 |
|
|
88
|
+
| `--title` | **是** | 卡片标题,不能为空,最大 500 字符 |
|
|
89
|
+
| `--type` | **是** | 卡片类型名称,**区分大小写** (如 `Story` 不是 `story`)。通过 `space issue-types` 查询 |
|
|
90
|
+
| `--detail` | 否 | 卡片正文,**必须 HTML 格式**。不传则使用模板默认正文 |
|
|
91
|
+
| `--assignee` | 否 | 负责人百度用户名。不传则 CLI 自动填充当前用户 |
|
|
92
|
+
| `--status` | 否 | 初始状态 (中文)。不传则使用工作流默认初始状态 |
|
|
93
|
+
| `--priority` | 否 | 优先级如 `P1-High`。并非所有类型都有此字段,先用 `type-fields` 确认 |
|
|
94
|
+
| `--comment` | 否 | 创建时同时添加的评论 |
|
|
95
|
+
| `--parent` | 否 | 父卡片序列号,用于创建子卡片 (如 Epic 下创建 Story) |
|
|
96
|
+
| `--fields` | 否 | 自定义字段: `"字段中文名1=值1,字段中文名2=值2"`。多选字段值可含逗号 (如 `"标签=tag1,tag2,模块=前端"`),CLI 按 `key=value` 边界智能拆分。通过 `type-fields` 查询字段名和合法值 |
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
# 最简创建 (仅必填参数)
|
|
100
|
+
icafe-cli card create --space myspace --title "修复登录白屏" --type Bug
|
|
101
|
+
|
|
102
|
+
# 完整创建
|
|
103
|
+
icafe-cli card create --space myspace --title "修复登录白屏" \
|
|
104
|
+
--detail "<p>Chrome 浏览器上登录页面白屏</p>" \
|
|
105
|
+
--type Bug --priority P1-High --assignee zhangsan
|
|
106
|
+
|
|
107
|
+
# 创建子卡片
|
|
108
|
+
icafe-cli card create --space myspace --title "子任务" --type Task --parent 1001
|
|
109
|
+
|
|
110
|
+
# 多选字段 (标签值含逗号,CLI 自动识别)
|
|
111
|
+
icafe-cli card create --space myspace --title "新功能" --type Story \
|
|
112
|
+
--fields "标签=tag1,tag2,模块=前端"
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**返回示例** (成功):
|
|
116
|
+
|
|
117
|
+
```json
|
|
118
|
+
{
|
|
119
|
+
"status": 200,
|
|
120
|
+
"message": "OK.",
|
|
121
|
+
"issueSequences": [1001],
|
|
122
|
+
"issues": [
|
|
123
|
+
{
|
|
124
|
+
"issueId": 186604909,
|
|
125
|
+
"sequence": 1001,
|
|
126
|
+
"title": "修复登录白屏",
|
|
127
|
+
"url": "https://console.cloud.baidu-int.com/devops/icafe/issue/myspace-1001/show"
|
|
128
|
+
}
|
|
129
|
+
],
|
|
130
|
+
"failures": null
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**返回示例** (失败 — 类型不存在):
|
|
135
|
+
|
|
136
|
+
```json
|
|
137
|
+
{
|
|
138
|
+
"status": 401,
|
|
139
|
+
"message": "Field name or value is incorrect.",
|
|
140
|
+
"failures": [
|
|
141
|
+
{
|
|
142
|
+
"issueName": "卡片标题",
|
|
143
|
+
"failures": { "type": "REQUIRED" }
|
|
144
|
+
}
|
|
145
|
+
]
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**返回示例** (失败 — 父卡片不合法):
|
|
150
|
+
|
|
151
|
+
```json
|
|
152
|
+
{
|
|
153
|
+
"status": 401,
|
|
154
|
+
"message": "Field name or value is incorrect.",
|
|
155
|
+
"failures": [
|
|
156
|
+
{
|
|
157
|
+
"issueName": "卡片标题",
|
|
158
|
+
"failures": { "parent": "INVAILD" }
|
|
159
|
+
}
|
|
160
|
+
]
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
**关键字段说明**:
|
|
165
|
+
- `status`: 200=成功,401=字段校验错误 (类型不存在/父卡片不合法/字段值不合法),304=空间不存在,101=无权限
|
|
166
|
+
- `issues[].sequence`: 新创建的卡片序列号,用于后续操作和 URL
|
|
167
|
+
- `issues[].url`: 卡片在 iCafe 上的完整链接
|
|
168
|
+
- **注意**: OpenAPI 层面创建接口只返回基本信息 (`sequence`, `title`, `url`),不返回完整卡片详情。如需确认自动分配的状态、负责人等字段值,创建后需再调用 `card get` 查询
|
|
169
|
+
- `failures[]`: 字段校验失败详情,`failures.failures` 是一个 map,key 为字段名,value 为错误类型:
|
|
170
|
+
- `REQUIRED` — 必填字段缺失 (title 或 type)
|
|
171
|
+
- `INVAILD` — 值不合法 (parent 不存在或类型层级不匹配,creator 不存在)
|
|
172
|
+
- `NOT_IMPORTED` — 字段在该空间/类型下不存在,或字段值不合法 (如负责人用户名不存在)
|
|
173
|
+
- **注意**: 退出码 0 不代表业务成功,必须检查 JSON 中的 `status` 字段!
|
|
174
|
+
|
|
175
|
+
**后端行为**:
|
|
176
|
+
- **API 层校验的字段**: `title` (非空, 最长 500)、`type` (必须在该空间的类型列表中, 区分大小写)、`parent` (如有, 父卡片必须存在且类型层级关系合法)
|
|
177
|
+
- 其他字段 (包括 `space type-fields` 中标记为 `required: true` 的自定义必填字段) **API 不做校验,不传也能创建成功**
|
|
178
|
+
- `detail` 为空时回退到类型模板的默认正文;如模板也无则正文为空
|
|
179
|
+
- 流程状态未指定时,自动使用工作流中第一个可达的初始状态。如果传了状态但不在该类型的状态列表中,也会使用默认状态
|
|
180
|
+
- 负责人 (`--assignee` / `fields.负责人`): 不存在时返回 401 + `failures` 中标记 `NOT_IMPORTED`。CLI 未指定 `--assignee` 时自动填充当前用户
|
|
181
|
+
- 未在 `--fields` 中传入的自定义字段,使用模板默认值 (如有);模板未配默认值的字段为空
|
|
182
|
+
- `--parent` 只支持当前空间内的父卡片 (后端支持跨空间父卡片 `parentSpacePrefixCode`,CLI 暂未实现)
|
|
183
|
+
- 可一次创建多张卡片 (API 层支持最多 100 张,CLI 层当前为单张)
|
|
184
|
+
- **注意**: `space type-fields` 返回的 `required` 字段仅反映 **Web UI** 的校验规则,API 不受此约束。即使 `required: true` 的字段未传,API 也会返回 200 成功
|
|
185
|
+
|
|
186
|
+
**覆盖优先级**:
|
|
187
|
+
- `--fields` 中的键如果与 `--assignee`/`--status`/`--priority` 设置了相同字段,`--fields` 的值会覆盖前者
|
|
188
|
+
- 例如 `--assignee a --fields "负责人=b"` 最终负责人为 b
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
### card update — 更新卡片
|
|
193
|
+
|
|
194
|
+
修改已有卡片的字段值。**至少需要提供一个修改项或 `--comment`**。
|
|
195
|
+
|
|
196
|
+
**注意: 卡片类型 (type) 创建后不可修改**,`--fields "类型=xxx"` 也无效。
|
|
197
|
+
|
|
198
|
+
| 参数 | 必需 | 说明 |
|
|
199
|
+
|------|------|------|
|
|
200
|
+
| `--space` | **是** | 空间前缀码 |
|
|
201
|
+
| `--sequence` | **是** | 卡片序列号 |
|
|
202
|
+
| `--title` | 否 | 新标题。**不能设为空** |
|
|
203
|
+
| `--detail` | 否 | 新正文,**HTML 格式** |
|
|
204
|
+
| `--assignee` | 否 | 新负责人用户名 |
|
|
205
|
+
| `--status` | 否 | 新流程状态,传**中文名称** (如 `开发中`),不是 ID |
|
|
206
|
+
| `--priority` | 否 | 新优先级,如 `P1-High` |
|
|
207
|
+
| `--comment` | 否 | 本次更新的操作评论 |
|
|
208
|
+
| `--fields` | 否 | 自定义字段: `"字段中文名=值"`,多个逗号分隔。如果与 `--assignee`/`--status`/`--priority` 同名,`--fields` 的值会覆盖前者 |
|
|
209
|
+
| `--no-check-status` | 否 | 跳过状态流转规则校验 |
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
# 修改状态
|
|
213
|
+
icafe-cli card update --space myspace --sequence 1001 --status 开发中
|
|
214
|
+
|
|
215
|
+
# 修改多个字段
|
|
216
|
+
icafe-cli card update --space myspace --sequence 1001 \
|
|
217
|
+
--assignee zhangsan --priority P1-High --comment "紧急处理"
|
|
218
|
+
|
|
219
|
+
# 强制跳过状态流转校验
|
|
220
|
+
icafe-cli card update --space myspace --sequence 1001 --status 已完成 --no-check-status
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
**返回示例** (成功):
|
|
224
|
+
|
|
225
|
+
```json
|
|
226
|
+
{
|
|
227
|
+
"code": 200,
|
|
228
|
+
"result": "success",
|
|
229
|
+
"message": "OK, "
|
|
230
|
+
}
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
**关键字段说明**:
|
|
234
|
+
- `code`: 200=成功
|
|
235
|
+
- 失败时通过 HTTP 状态码返回: 404=卡片不存在, 403=无权限, 500=字段/状态错误
|
|
236
|
+
|
|
237
|
+
**更新行为**:
|
|
238
|
+
- 选择类字段的值必须传 `space type-fields` 返回的 displayValue (如 `P1-High`)
|
|
239
|
+
- `--status` 传中文状态名,默认会校验状态流转。如果流转不合法需加 `--no-check-status`
|
|
240
|
+
- **改状态前建议先用 `card next-statuses` 查询当前可达的目标状态**
|
|
241
|
+
- 状态流转要求填写的必填字段,可在同一次 `--fields` 中传入
|
|
242
|
+
- 后端有 Redis 锁 (15秒超时),同一卡片不能同时更新
|
|
243
|
+
- 字段值可以包含 `=` 号 (如 `--fields "备注=a=b"` 会正确解析为字段名 `备注`、值 `a=b`,后端按第一个 `=` 拆分)
|
|
244
|
+
- 传空字符串可清空字段值 (如 `--fields "模块="`),后端将 `""`、`"null"`、`","` 均视为空值。**标题不能设为空**
|
|
245
|
+
- **清空字段只能用 `--fields`**: 命名 flag (`--detail ""`, `--assignee ""` 等) 传空值会被 CLI 忽略 (不发送给后端),不等于清空。要清空字段请用 `--fields "内容="` 或 `--fields "负责人="`
|
|
246
|
+
- **表单约定**: luigi 的 `OneIssueApiUpdateBean.fields` 为 `String[]`,每个元素是一条 `显示名=值`。CLI 会将 `--title`/`--detail`/`--assignee`/`--status`/`--priority` 以及 `--fields` 中逗号分隔的各对键值,分别作为多个同名表单参数 `fields` 提交(而非拼成一条逗号串)。
|
|
247
|
+
|
|
248
|
+
**常见 HTTP 500 错误**:
|
|
249
|
+
- `"field value error : 字段名=值"` — 字段值不在合法选项中
|
|
250
|
+
- `"字段名: field does not exist!"` — 字段名在该类型中不存在,请通过 `space type-fields` 确认
|
|
251
|
+
- `"流程状态不存在"` — 状态名在该类型中不存在,请通过 `space type-statuses` 确认
|
|
252
|
+
- `"无法流转到该流程状态"` — 当前状态到目标状态的流转路径不合法,需加 `--no-check-status` 或先用 `card next-statuses` 确认可达状态
|
|
253
|
+
- `"还有必填字段没有填写: fieldName"` — 状态流转要求某些字段非空,在 `--fields` 中补充
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
### card query — 查询卡片
|
|
258
|
+
|
|
259
|
+
按条件查询空间中的卡片。不传 `--iql` 时返回所有卡片。
|
|
260
|
+
|
|
261
|
+
| 参数 | 必需 | 说明 |
|
|
262
|
+
|------|------|------|
|
|
263
|
+
| `--space` | **是** | 空间前缀码 |
|
|
264
|
+
| `--iql` | 否 | IQL 查询表达式,字段名用中文。详见 [IQL 语法](iql-syntax.md) |
|
|
265
|
+
| `--page` | 否 | 页码,从 1 开始,最大 100 |
|
|
266
|
+
| `--max-records` | 否 | 每页数量,CLI 默认 20,最大 100,超过返回 400 |
|
|
267
|
+
| `--order` | 否 | 排序字段,默认 `createTime`。支持: `createTime`, `lastModifiedTime`, `sequence`, `creatorId`, `responsiblePeopleId`, `issueStatusId`, `title`; 别名: `status`, `owner`, `creator`。不支持文本类型字段 |
|
|
268
|
+
| `--desc` | 否 | 是否降序,默认 `true` |
|
|
269
|
+
| `--show-detail` | 否 | 返回完整字段 (默认只返回基本信息) |
|
|
270
|
+
| `--show-associations` | 否 | 返回关联卡片 |
|
|
271
|
+
| `--show-children` | 否 | 返回子卡片 |
|
|
272
|
+
|
|
273
|
+
```bash
|
|
274
|
+
# 查询当前用户负责的未关闭卡片
|
|
275
|
+
icafe-cli card query --space myspace --iql "负责人 = currentUser AND 流程状态 != 已关闭"
|
|
276
|
+
|
|
277
|
+
# 查询高优先级 Bug
|
|
278
|
+
icafe-cli card query --space myspace --iql "类型 = Bug AND 优先级 = P1-High" --max-records 50
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
**返回示例**:
|
|
282
|
+
|
|
283
|
+
```json
|
|
284
|
+
{
|
|
285
|
+
"cards": [
|
|
286
|
+
{
|
|
287
|
+
"sequence": 1001,
|
|
288
|
+
"title": "修复登录白屏",
|
|
289
|
+
"status": "开发中",
|
|
290
|
+
"type": { "name": "Bug" },
|
|
291
|
+
"isFinishedStatus": false,
|
|
292
|
+
"responsiblePeople": [{ "username": "zhangsan" }],
|
|
293
|
+
"createdTime": "2026-03-25 10:00:00",
|
|
294
|
+
"properties": [...]
|
|
295
|
+
}
|
|
296
|
+
],
|
|
297
|
+
"code": 200, "total": 15, "currentPage": 1, "pageSize": 10,
|
|
298
|
+
"result": "success", "message": "OK, "
|
|
299
|
+
}
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
**关键字段说明**:
|
|
303
|
+
- `cards[]`: 卡片列表,结构与 `card get` 返回的 `cards[]` 一致
|
|
304
|
+
- `total`: 满足条件的卡片总数 (不是当前页数量)
|
|
305
|
+
- `currentPage`: 当前页码
|
|
306
|
+
- `pageSize`: **总页数** (注意: 不是每页记录数,是 `ceil(total/maxRecords)`)
|
|
307
|
+
- 分页上限: 最大 100 页 x 100 条 = 10000 张卡片
|
|
308
|
+
|
|
309
|
+
---
|
|
310
|
+
|
|
311
|
+
### card current-status — 获取卡片当前流程状态
|
|
312
|
+
|
|
313
|
+
| 参数 | 必需 | 说明 |
|
|
314
|
+
|------|------|------|
|
|
315
|
+
| `--space` | **是** | 空间前缀码 |
|
|
316
|
+
| `--sequence` | **是** | 卡片序列号 |
|
|
317
|
+
|
|
318
|
+
```bash
|
|
319
|
+
icafe-cli card current-status --space myspace --sequence 1001
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
**返回示例**:
|
|
323
|
+
|
|
324
|
+
```json
|
|
325
|
+
{
|
|
326
|
+
"status": 200,
|
|
327
|
+
"message": "OK.",
|
|
328
|
+
"statusName": "新建",
|
|
329
|
+
"statusId": 52,
|
|
330
|
+
"isFinishedStatus": false
|
|
331
|
+
}
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
**关键字段说明**:
|
|
335
|
+
- `statusName`: 当前状态中文名 (如 `新建`、`开发中`、`已关闭`)
|
|
336
|
+
- `isFinishedStatus`: 是否终态
|
|
337
|
+
- 此命令**不返回可流转的目标状态列表**。要查看从当前状态可以流转到哪些目标状态,用 `card next-statuses`。要查看该类型所有合法的流程状态名,用 `space type-statuses`
|
|
338
|
+
|
|
339
|
+
---
|
|
340
|
+
|
|
341
|
+
### card next-statuses — 获取卡片可流转的目标状态
|
|
342
|
+
|
|
343
|
+
基于卡片当前状态、类型工作流规则和当前用户角色权限,返回可以直接流转到的目标状态列表。**修改卡片状态前推荐使用此命令,比 `space type-statuses` 更精确**。
|
|
344
|
+
|
|
345
|
+
| 参数 | 必需 | 说明 |
|
|
346
|
+
|------|------|------|
|
|
347
|
+
| `--space` | **是** | 空间前缀码 |
|
|
348
|
+
| `--sequence` | **是** | 卡片序列号 |
|
|
349
|
+
|
|
350
|
+
```bash
|
|
351
|
+
icafe-cli card next-statuses --space myspace --sequence 1001
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
**返回示例**:
|
|
355
|
+
|
|
356
|
+
```json
|
|
357
|
+
{
|
|
358
|
+
"status": 200,
|
|
359
|
+
"message": "OK.",
|
|
360
|
+
"result": [
|
|
361
|
+
{ "statusId": 53, "statusName": "开发中" },
|
|
362
|
+
{ "statusId": 54, "statusName": "待测试" },
|
|
363
|
+
{ "statusId": 55, "statusName": "测试中" }
|
|
364
|
+
]
|
|
365
|
+
}
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
**关键字段说明**:
|
|
369
|
+
- `result[]`: 可流转的目标状态列表
|
|
370
|
+
- `result[].statusName`: 状态中文名 — **可直接用于 `card update --status` 的值**
|
|
371
|
+
- `result[].statusId`: 状态数字 ID
|
|
372
|
+
- `result` 为空数组: 当前状态没有可达的目标状态 (可能是终态,或工作流未配置出边)
|
|
373
|
+
|
|
374
|
+
**错误场景**:
|
|
375
|
+
- `status: 304` — 空间不存在
|
|
376
|
+
- `status: 902` — 卡片不存在或服务端异常
|
|
377
|
+
|
|
378
|
+
**后端行为**:
|
|
379
|
+
- 接口从卡片上读取当前 spaceId、issueTypeId、issueStatusId,再结合当前用户的角色权限查询工作流
|
|
380
|
+
- 如果该类型**未开启工作流**,返回该类型下的全部状态 (此时和 `type-statuses` 等价)
|
|
381
|
+
- 如果该类型**开启了工作流**,根据工作流配置的出边 + 用户角色过滤,返回可达状态的子集
|
|
382
|
+
|
|
383
|
+
**与 `space type-statuses` 的区别**:
|
|
384
|
+
- `type-statuses` 返回该类型**所有合法状态** (不考虑起始状态)
|
|
385
|
+
- `next-statuses` 以卡片当前状态为起点,结合当前用户的角色权限,返回**工作流中可达的目标状态**
|
|
386
|
+
- 改状态前优先用 `next-statuses`,如果目标状态不在列表中,说明需要 `--no-check-status` 强制跳过
|
|
387
|
+
|
|
388
|
+
---
|
|
389
|
+
|
|
390
|
+
### card history — 卡片全量操作历史
|
|
391
|
+
|
|
392
|
+
| 参数 | 必需 | 说明 |
|
|
393
|
+
|------|------|------|
|
|
394
|
+
| `--space` | **是** | 空间前缀码 |
|
|
395
|
+
| `--sequences` | **是** | 序列号,逗号分隔,最多 50 个 |
|
|
396
|
+
|
|
397
|
+
```bash
|
|
398
|
+
icafe-cli card history --space myspace --sequences 1001
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
**返回示例**:
|
|
402
|
+
|
|
403
|
+
```json
|
|
404
|
+
{
|
|
405
|
+
"status": 200,
|
|
406
|
+
"message": "OK.",
|
|
407
|
+
"result": [
|
|
408
|
+
{
|
|
409
|
+
"sequence": 1001,
|
|
410
|
+
"type": { "name": "Bug" },
|
|
411
|
+
"histories": [
|
|
412
|
+
{
|
|
413
|
+
"operator": "zhangsan",
|
|
414
|
+
"operationTime": "2026-03-25 19:24:32",
|
|
415
|
+
"comment": "由API新建",
|
|
416
|
+
"diffDescription": "张三 创建了卡片[修复登录白屏]",
|
|
417
|
+
"diffDescriptionStructured": [
|
|
418
|
+
{
|
|
419
|
+
"fieldName": "流程状态",
|
|
420
|
+
"oldValue": "",
|
|
421
|
+
"newValue": "开发中",
|
|
422
|
+
"opType": "MODIFY",
|
|
423
|
+
"opUser": { "username": "zhangsan" }
|
|
424
|
+
}
|
|
425
|
+
],
|
|
426
|
+
"sourceStatusName": "新建",
|
|
427
|
+
"targetStatusName": "开发中"
|
|
428
|
+
}
|
|
429
|
+
]
|
|
430
|
+
}
|
|
431
|
+
]
|
|
432
|
+
}
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
**关键字段说明**:
|
|
436
|
+
- `histories[]`: 按时间倒序排列的操作记录
|
|
437
|
+
- `diffDescriptionStructured[]`: 结构化变更详情,包含 `fieldName`/`oldValue`/`newValue`
|
|
438
|
+
- `sourceStatusName`/`targetStatusName`: 操作前后的流程状态 (新建时 source 为 null)
|
|
439
|
+
- `comment`: 操作时附带的评论
|
|
440
|
+
|
|
441
|
+
---
|
|
442
|
+
|
|
443
|
+
### card status-changes — 卡片状态流转历史
|
|
444
|
+
|
|
445
|
+
仅返回状态变更记录,不含字段变更。
|
|
446
|
+
|
|
447
|
+
| 参数 | 必需 | 说明 |
|
|
448
|
+
|------|------|------|
|
|
449
|
+
| `--space` | **是** | 空间前缀码 |
|
|
450
|
+
| `--sequences` | **是** | 序列号,逗号分隔,最多 50 个 |
|
|
451
|
+
|
|
452
|
+
```bash
|
|
453
|
+
icafe-cli card status-changes --space myspace --sequences 1001
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
**返回示例**:
|
|
457
|
+
|
|
458
|
+
```json
|
|
459
|
+
{
|
|
460
|
+
"status": 200,
|
|
461
|
+
"message": "OK.",
|
|
462
|
+
"result": [
|
|
463
|
+
{
|
|
464
|
+
"sequence": 1001,
|
|
465
|
+
"histories": [
|
|
466
|
+
{
|
|
467
|
+
"sourceStatusName": "新建",
|
|
468
|
+
"targetStatusName": "开发中",
|
|
469
|
+
"operator": "zhangsan",
|
|
470
|
+
"operationTime": "2026-03-25 19:24:32",
|
|
471
|
+
"opType": "MODIFY"
|
|
472
|
+
},
|
|
473
|
+
{
|
|
474
|
+
"sourceStatusName": null,
|
|
475
|
+
"targetStatusName": "新建",
|
|
476
|
+
"operator": "zhangsan",
|
|
477
|
+
"operationTime": "2026-03-25 10:00:00",
|
|
478
|
+
"opType": "INSERT"
|
|
479
|
+
}
|
|
480
|
+
]
|
|
481
|
+
}
|
|
482
|
+
]
|
|
483
|
+
}
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
---
|
|
487
|
+
|
|
488
|
+
## comment 命令组
|
|
489
|
+
|
|
490
|
+
### comment create — 添加评论
|
|
491
|
+
|
|
492
|
+
| 参数 | 必需 | 说明 |
|
|
493
|
+
|------|------|------|
|
|
494
|
+
| `--space` | **是** | 空间前缀码 |
|
|
495
|
+
| `--sequence` | **是** | 卡片序列号 |
|
|
496
|
+
| `--content` | **是** | 评论内容,支持 HTML |
|
|
497
|
+
|
|
498
|
+
```bash
|
|
499
|
+
icafe-cli comment create --space myspace --sequence 1001 --content "已完成代码评审,LGTM"
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
**返回示例** (成功): `{"status": 200, "message": "OK."}`
|
|
503
|
+
|
|
504
|
+
**失败**: 卡片不存在返回 `{status: 601, message: "card is not exist!"}`,空间不存在返回 `{status: 304}`。
|
|
505
|
+
|
|
506
|
+
---
|
|
507
|
+
|
|
508
|
+
### comment get — 获取评论列表
|
|
509
|
+
|
|
510
|
+
| 参数 | 必需 | 说明 |
|
|
511
|
+
|------|------|------|
|
|
512
|
+
| `--space` | **是** | 空间前缀码 |
|
|
513
|
+
| `--sequence` | **是** | 卡片序列号 |
|
|
514
|
+
|
|
515
|
+
```bash
|
|
516
|
+
icafe-cli comment get --space myspace --sequence 1001
|
|
517
|
+
```
|
|
518
|
+
|
|
519
|
+
**返回示例**:
|
|
520
|
+
|
|
521
|
+
```json
|
|
522
|
+
{
|
|
523
|
+
"status": 200,
|
|
524
|
+
"message": "OK.",
|
|
525
|
+
"result": [
|
|
526
|
+
{
|
|
527
|
+
"id": 58250539,
|
|
528
|
+
"content": "已完成代码评审,LGTM",
|
|
529
|
+
"username": "zhangsan",
|
|
530
|
+
"chineseName": "张三",
|
|
531
|
+
"createTime": "2026-03-25 19:24:39",
|
|
532
|
+
"isDeleted": false,
|
|
533
|
+
"parentCommentId": 0
|
|
534
|
+
}
|
|
535
|
+
]
|
|
536
|
+
}
|
|
537
|
+
```
|
|
538
|
+
|
|
539
|
+
**关键字段说明**:
|
|
540
|
+
- `id`: 评论 ID,`comment update` 需要此值
|
|
541
|
+
- `username`: 评论作者的用户名
|
|
542
|
+
- `parentCommentId`: 父评论 ID (0 表示顶级评论)
|
|
543
|
+
|
|
544
|
+
---
|
|
545
|
+
|
|
546
|
+
### comment update — 修改评论
|
|
547
|
+
|
|
548
|
+
| 参数 | 必需 | 说明 |
|
|
549
|
+
|------|------|------|
|
|
550
|
+
| `--space` | **是** | 空间前缀码 |
|
|
551
|
+
| `--comment-id` | **是** | 评论 ID (通过 `comment get` 获取) |
|
|
552
|
+
| `--content` | **是** | 修改后的内容 |
|
|
553
|
+
|
|
554
|
+
**只能编辑自己的评论**,编辑他人评论返回 `{status: 101}`。
|
|
555
|
+
|
|
556
|
+
```bash
|
|
557
|
+
icafe-cli comment update --space myspace --comment-id 58250539 --content "补充: 需要增加单元测试"
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
---
|
|
561
|
+
|
|
562
|
+
## space 命令组
|
|
563
|
+
|
|
564
|
+
### space latest — 获取最近访问的空间
|
|
565
|
+
|
|
566
|
+
无需传参,通过 Token 自动识别用户。**这是获取空间 prefixCode 的首选方式**。
|
|
567
|
+
|
|
568
|
+
```bash
|
|
569
|
+
icafe-cli space latest
|
|
570
|
+
```
|
|
571
|
+
|
|
572
|
+
**返回示例**:
|
|
573
|
+
|
|
574
|
+
```json
|
|
575
|
+
{
|
|
576
|
+
"status": 200,
|
|
577
|
+
"message": "OK.",
|
|
578
|
+
"result": [
|
|
579
|
+
{ "id": 56355, "name": "DevOps-项目协同iCafe", "prefixCode": "cloud-iCafe" },
|
|
580
|
+
{ "id": 56492, "name": "xu-c01", "prefixCode": "xu-c01" }
|
|
581
|
+
]
|
|
582
|
+
}
|
|
583
|
+
```
|
|
584
|
+
|
|
585
|
+
**关键字段说明**:
|
|
586
|
+
- `result[].prefixCode`: **这就是所有命令 `--space` 参数需要的值**
|
|
587
|
+
- `result[].name`: 空间显示名称
|
|
588
|
+
|
|
589
|
+
---
|
|
590
|
+
|
|
591
|
+
### space tree — 获取空间树
|
|
592
|
+
|
|
593
|
+
| 参数 | 必需 | 说明 |
|
|
594
|
+
|------|------|------|
|
|
595
|
+
| `--username` | 否 | 百度用户名 (邮箱前缀,如 `zhangsan`),查询该用户有权限的空间树。不传则默认查当前登录用户 |
|
|
596
|
+
| `--permission` | 否 | 权限过滤。不传则默认返回 read 及以上权限的所有空间。可选值: `permission.read`, `permission.create`, `permission.write`, `permission.spaceadmin` |
|
|
597
|
+
|
|
598
|
+
```bash
|
|
599
|
+
icafe-cli space tree
|
|
600
|
+
icafe-cli space tree --permission permission.write
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
---
|
|
604
|
+
|
|
605
|
+
### space issue-types — 获取空间卡片类型
|
|
606
|
+
|
|
607
|
+
**创建卡片前必须先调此命令确认可用类型**。
|
|
608
|
+
|
|
609
|
+
| 参数 | 必需 | 说明 |
|
|
610
|
+
|------|------|------|
|
|
611
|
+
| `--space` | **是** | 空间前缀码 |
|
|
612
|
+
|
|
613
|
+
```bash
|
|
614
|
+
icafe-cli space issue-types --space myspace
|
|
615
|
+
```
|
|
616
|
+
|
|
617
|
+
**返回示例**:
|
|
618
|
+
|
|
619
|
+
```json
|
|
620
|
+
{
|
|
621
|
+
"status": 200,
|
|
622
|
+
"message": "OK.",
|
|
623
|
+
"result": {
|
|
624
|
+
"issueTypes": [
|
|
625
|
+
{ "id": 56075, "name": "Epic", "color": "41a7fa" },
|
|
626
|
+
{ "id": 5007, "name": "Story", "color": "EBC400" },
|
|
627
|
+
{ "id": 54444, "name": "Task", "color": "78bf13" },
|
|
628
|
+
{ "id": 5009, "name": "Bug", "color": "EB7600" }
|
|
629
|
+
]
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
```
|
|
633
|
+
|
|
634
|
+
**关键字段说明**:
|
|
635
|
+
- `issueTypes[].name`: **这就是 `card create --type` 需要的值,区分大小写**
|
|
636
|
+
|
|
637
|
+
---
|
|
638
|
+
|
|
639
|
+
### space type-fields — 获取类型字段定义
|
|
640
|
+
|
|
641
|
+
返回指定类型在**创建阶段**的所有字段:名称、类型、是否必填、可选值。**创建/更新卡片前必须调此命令了解字段规则**。
|
|
642
|
+
|
|
643
|
+
| 参数 | 必需 | 说明 |
|
|
644
|
+
|------|------|------|
|
|
645
|
+
| `--space` | **是** | 空间前缀码 |
|
|
646
|
+
| `--type` | **是** | 类型名称,通过 `issue-types` 获取 |
|
|
647
|
+
|
|
648
|
+
```bash
|
|
649
|
+
icafe-cli space type-fields --space myspace --type Story
|
|
650
|
+
```
|
|
651
|
+
|
|
652
|
+
**返回示例**:
|
|
653
|
+
|
|
654
|
+
```json
|
|
655
|
+
{
|
|
656
|
+
"status": 200,
|
|
657
|
+
"message": "OK.",
|
|
658
|
+
"result": [
|
|
659
|
+
{
|
|
660
|
+
"display": "负责人",
|
|
661
|
+
"name": "responsiblePeopleId",
|
|
662
|
+
"type": "user_picker",
|
|
663
|
+
"required": false,
|
|
664
|
+
"defaultValue": null,
|
|
665
|
+
"valueItems": []
|
|
666
|
+
},
|
|
667
|
+
{
|
|
668
|
+
"display": "优先级",
|
|
669
|
+
"name": null,
|
|
670
|
+
"type": "select_list",
|
|
671
|
+
"required": false,
|
|
672
|
+
"defaultValue": null,
|
|
673
|
+
"valueItems": ["P0-Highest", "P1-High", "P2-Middle", "P3-Low", "P4-Lowest"]
|
|
674
|
+
},
|
|
675
|
+
{
|
|
676
|
+
"display": "所属计划",
|
|
677
|
+
"type": "plan_box",
|
|
678
|
+
"required": false,
|
|
679
|
+
"valueItems": ["2026Q1/Sprint1", "2026Q1/Sprint2"]
|
|
680
|
+
},
|
|
681
|
+
{
|
|
682
|
+
"display": "下拉列表",
|
|
683
|
+
"type": "select_list",
|
|
684
|
+
"required": true,
|
|
685
|
+
"valueItems": ["选项A", "选项B", "选项C"]
|
|
686
|
+
}
|
|
687
|
+
]
|
|
688
|
+
}
|
|
689
|
+
```
|
|
690
|
+
|
|
691
|
+
**关键字段说明**:
|
|
692
|
+
- `display`: 字段中文名 — **`--fields` 参数的 key 就用这个值**
|
|
693
|
+
- `type`: 字段类型 (select_list, user_picker, number_field 等)
|
|
694
|
+
- `required`: 是否在 Web UI 上必填。**注意: API 层不强制校验此标记,即使 `required: true` 的字段未传,API 创建也会成功**。建议尽量填充,但不必因为无法确定值而阻塞创建
|
|
695
|
+
- `valueItems[]`: 选择类字段的**合法可选值列表**。创建/更新时传的值必须在此列表中
|
|
696
|
+
- `defaultValue`: 模板默认值
|
|
697
|
+
|
|
698
|
+
---
|
|
699
|
+
|
|
700
|
+
### space type-statuses — 获取类型流程状态列表
|
|
701
|
+
|
|
702
|
+
返回指定空间中某卡片类型配置的所有流程状态。**修改卡片状态前建议先调此命令确认合法的状态名称**。
|
|
703
|
+
|
|
704
|
+
| 参数 | 必需 | 说明 |
|
|
705
|
+
|------|------|------|
|
|
706
|
+
| `--space` | **是** | 空间前缀码 |
|
|
707
|
+
| `--type` | **是** | 类型名称,通过 `issue-types` 获取 |
|
|
708
|
+
|
|
709
|
+
```bash
|
|
710
|
+
icafe-cli space type-statuses --space myspace --type Task
|
|
711
|
+
```
|
|
712
|
+
|
|
713
|
+
**返回示例**:
|
|
714
|
+
|
|
715
|
+
```json
|
|
716
|
+
{
|
|
717
|
+
"status": 200,
|
|
718
|
+
"message": "OK.",
|
|
719
|
+
"result": [
|
|
720
|
+
{ "issueStatusId": 52, "name": "新建", "color": "78bf13", "addSub": false },
|
|
721
|
+
{ "issueStatusId": 53, "name": "开发中", "color": "e65055", "addSub": false },
|
|
722
|
+
{ "issueStatusId": 54, "name": "待测试", "color": "5069e6", "addSub": false },
|
|
723
|
+
{ "issueStatusId": 55, "name": "测试中", "color": "EB7600", "addSub": false },
|
|
724
|
+
{ "issueStatusId": 56, "name": "待上线", "color": "e048ae", "addSub": false },
|
|
725
|
+
{ "issueStatusId": 57, "name": "已完成", "color": "0098b3", "addSub": false }
|
|
726
|
+
]
|
|
727
|
+
}
|
|
728
|
+
```
|
|
729
|
+
|
|
730
|
+
**关键字段说明**:
|
|
731
|
+
- `name`: 状态中文名 — **`card update --status` 就用这个值**
|
|
732
|
+
- `issueStatusId`: 状态数字 ID
|
|
733
|
+
- `color`: 状态颜色 (十六进制)
|
|
734
|
+
- `addSub`: 该状态下是否允许拆分子卡片
|
|
735
|
+
- 此命令返回的是该类型所有合法状态,**不考虑起始状态**。要查看从当前卡片当前状态可流转到哪些目标状态,用 `card next-statuses`
|
|
736
|
+
|
|
737
|
+
---
|
|
738
|
+
|
|
739
|
+
## plan 命令组
|
|
740
|
+
|
|
741
|
+
### plan list — 获取计划列表
|
|
742
|
+
|
|
743
|
+
| 参数 | 必需 | 说明 |
|
|
744
|
+
|------|------|------|
|
|
745
|
+
| `--space` | **是** | 空间前缀码 |
|
|
746
|
+
|
|
747
|
+
```bash
|
|
748
|
+
icafe-cli plan list --space myspace
|
|
749
|
+
```
|
|
750
|
+
|
|
751
|
+
**返回示例**:
|
|
752
|
+
|
|
753
|
+
```json
|
|
754
|
+
{
|
|
755
|
+
"status": 200,
|
|
756
|
+
"message": "OK.",
|
|
757
|
+
"result": [
|
|
758
|
+
{ "id": 618149, "name": "06.16~06.22", "path": "05.27~06.23/06.16~06.22", "parentId": 610684, "status": "ARCHIVED" },
|
|
759
|
+
{ "id": 878635, "name": "12.12~12.18", "path": "12.12~12.18", "parentId": null, "status": "ACTIVE" }
|
|
760
|
+
]
|
|
761
|
+
}
|
|
762
|
+
```
|
|
763
|
+
|
|
764
|
+
**关键字段说明**:
|
|
765
|
+
- `id`: 计划数字 ID,用于 `plan update-date --plan-id`
|
|
766
|
+
- `path`: 计划路径,用于 `plan get --path`。子计划路径格式为 `父计划/子计划`
|
|
767
|
+
- `status`: `ACTIVE` 或 `ARCHIVED`
|
|
768
|
+
|
|
769
|
+
---
|
|
770
|
+
|
|
771
|
+
### plan get — 获取计划详情
|
|
772
|
+
|
|
773
|
+
| 参数 | 必需 | 说明 |
|
|
774
|
+
|------|------|------|
|
|
775
|
+
| `--space` | **是** | 空间前缀码 |
|
|
776
|
+
| `--path` | **是** | 计划路径 (通过 `plan list` 获取) |
|
|
777
|
+
|
|
778
|
+
```bash
|
|
779
|
+
icafe-cli plan get --space myspace --path "2026Q1/Sprint1"
|
|
780
|
+
```
|
|
781
|
+
|
|
782
|
+
---
|
|
783
|
+
|
|
784
|
+
### plan create — 创建计划
|
|
785
|
+
|
|
786
|
+
| 参数 | 必需 | 说明 |
|
|
787
|
+
|------|------|------|
|
|
788
|
+
| `--space` | **是** | 空间前缀码 |
|
|
789
|
+
| `--name` | **是** | 计划名称,不能包含 `\|,<>()/\"` |
|
|
790
|
+
| `--start-date` | **是** | 开始日期 `YYYY-MM-DD` |
|
|
791
|
+
| `--end-date` | **是** | 结束日期 `YYYY-MM-DD`,必须晚于开始日期 |
|
|
792
|
+
| `--desc` | 否 | 计划描述 |
|
|
793
|
+
| `--parent` | 否 | 父计划路径,用于创建子计划 |
|
|
794
|
+
| `--stick` | 否 | 是否置顶计划 |
|
|
795
|
+
|
|
796
|
+
```bash
|
|
797
|
+
icafe-cli plan create --space myspace --name "Sprint1" --start-date 2024-01-01 --end-date 2024-01-14
|
|
798
|
+
```
|
|
799
|
+
|
|
800
|
+
---
|
|
801
|
+
|
|
802
|
+
### plan update-date — 更新计划日期
|
|
803
|
+
|
|
804
|
+
| 参数 | 必需 | 说明 |
|
|
805
|
+
|------|------|------|
|
|
806
|
+
| `--space` | **是** | 空间前缀码 |
|
|
807
|
+
| `--plan-id` | **是** | 计划数字 ID (通过 `plan list` 获取) |
|
|
808
|
+
| `--start-date` | 否 | 新开始日期 |
|
|
809
|
+
| `--end-date` | 否 | 新结束日期 |
|
|
810
|
+
|
|
811
|
+
至少提供一个日期。
|
|
812
|
+
|
|
813
|
+
```bash
|
|
814
|
+
icafe-cli plan update-date --space myspace --plan-id 878635 --end-date 2024-01-21
|
|
815
|
+
```
|
|
816
|
+
|
|
817
|
+
**注意**: 此命令成功时返回 `status: 0`,不是 `200`。
|
|
818
|
+
|
|
819
|
+
---
|
|
820
|
+
|
|
821
|
+
### plan milestones — 获取计划和里程碑
|
|
822
|
+
|
|
823
|
+
| 参数 | 必需 | 说明 |
|
|
824
|
+
|------|------|------|
|
|
825
|
+
| `--space` | **是** | 空间前缀码 |
|
|
826
|
+
| `--start-date` | 否 | 按开始日期过滤 |
|
|
827
|
+
| `--end-date` | 否 | 按结束日期过滤 |
|
|
828
|
+
| `--page` | 否 | 页码 |
|
|
829
|
+
| `--include-archived` | 否 | 包含已归档的计划 |
|
|
830
|
+
|
|
831
|
+
```bash
|
|
832
|
+
icafe-cli plan milestones --space myspace --start-date 2024-01-01 --end-date 2024-03-31
|
|
833
|
+
```
|
|
834
|
+
|
|
835
|
+
---
|
|
836
|
+
|
|
837
|
+
## devinfo 命令组
|
|
838
|
+
|
|
839
|
+
### devinfo card — 获取卡片研发数据链
|
|
840
|
+
|
|
841
|
+
查询卡片关联的代码评审、合入、部署等研发活动。
|
|
842
|
+
|
|
843
|
+
| 参数 | 必需 | 说明 |
|
|
844
|
+
|------|------|------|
|
|
845
|
+
| `--space` | **是** | 空间前缀码 |
|
|
846
|
+
| `--sequences` | **是** | 序列号,逗号分隔,最多 100 个 |
|
|
847
|
+
|
|
848
|
+
不存在的序列号会被静默跳过。
|
|
849
|
+
|
|
850
|
+
```bash
|
|
851
|
+
icafe-cli devinfo card --space myspace --sequences 1001,1002
|
|
852
|
+
```
|
|
853
|
+
|
|
854
|
+
**返回示例**:
|
|
855
|
+
|
|
856
|
+
```json
|
|
857
|
+
{
|
|
858
|
+
"status": 0,
|
|
859
|
+
"message": "success",
|
|
860
|
+
"result": [
|
|
861
|
+
{
|
|
862
|
+
"sequence": 1001,
|
|
863
|
+
"codeReview": [...],
|
|
864
|
+
"codeMerge": [...],
|
|
865
|
+
"deploy": [...],
|
|
866
|
+
"initiateTest": [...],
|
|
867
|
+
"passTest": [...],
|
|
868
|
+
"releaseInfo": [...]
|
|
869
|
+
}
|
|
870
|
+
]
|
|
871
|
+
}
|
|
872
|
+
```
|
|
873
|
+
|
|
874
|
+
**注意**: `devinfo card` 成功时 `status` 为 `0`,不是 `200`。`devinfo active-cards` 成功时 `status` 为 `200`。
|
|
875
|
+
|
|
876
|
+
---
|
|
877
|
+
|
|
878
|
+
### devinfo active-cards — 查询有研发活动的卡片
|
|
879
|
+
|
|
880
|
+
| 参数 | 必需 | 说明 |
|
|
881
|
+
|------|------|------|
|
|
882
|
+
| `--space` | **是** | 空间前缀码 |
|
|
883
|
+
| `--start-time` | 否 | 起始时间,格式 `yyyy-MM-dd HH:mm:ss` |
|
|
884
|
+
| `--end-time` | 否 | 截止时间,格式 `yyyy-MM-dd HH:mm:ss` |
|
|
885
|
+
| `--page` | 否 | 页码 |
|
|
886
|
+
| `--max-records` | 否 | 每页数量 |
|
|
887
|
+
|
|
888
|
+
```bash
|
|
889
|
+
icafe-cli devinfo active-cards --space myspace --start-time "2024-01-01 00:00:00" --end-time "2024-01-31 23:59:59"
|
|
890
|
+
```
|
|
891
|
+
|
|
892
|
+
---
|
|
893
|
+
|
|
894
|
+
## ai-pre-review 命令组
|
|
895
|
+
|
|
896
|
+
卡片预审命令,使用 AI 对卡片内容进行质量检查。**异步操作**:先发起,再查结果。
|
|
897
|
+
|
|
898
|
+
### ai-pre-review rules — 查询预审规则
|
|
899
|
+
|
|
900
|
+
获取指定空间配置的卡片预审规则列表。规则用于在发起 AI 预审时指导 AI 关注特定方面。
|
|
901
|
+
|
|
902
|
+
| 参数 | 必需 | 说明 |
|
|
903
|
+
|------|------|------|
|
|
904
|
+
| `--space` | **是** | 空间前缀码 |
|
|
905
|
+
|
|
906
|
+
```bash
|
|
907
|
+
icafe-cli ai-pre-review rules --space myspace
|
|
908
|
+
```
|
|
909
|
+
|
|
910
|
+
**返回示例**:
|
|
911
|
+
|
|
912
|
+
```json
|
|
913
|
+
{
|
|
914
|
+
"code": 200,
|
|
915
|
+
"data": [
|
|
916
|
+
{
|
|
917
|
+
"id": 1,
|
|
918
|
+
"name": "验收标准",
|
|
919
|
+
"content": "需求必须包含明确的验收标准和测试用例",
|
|
920
|
+
"enabled": true,
|
|
921
|
+
"spaceId": 12345,
|
|
922
|
+
"creator": { "userName": "zhangsan", "name": "张三" },
|
|
923
|
+
"createTime": 1712000000000
|
|
924
|
+
}
|
|
925
|
+
],
|
|
926
|
+
"message": null
|
|
927
|
+
}
|
|
928
|
+
```
|
|
929
|
+
|
|
930
|
+
**关键字段说明**:
|
|
931
|
+
- `data[].id`: 规则 ID — 用于 `ai-pre-review start --rules 1,2,3`
|
|
932
|
+
- `data[].content`: 规则内容
|
|
933
|
+
- `data[].name`: 规则名称
|
|
934
|
+
- `data[].enabled`: 是否启用
|
|
935
|
+
|
|
936
|
+
---
|
|
937
|
+
|
|
938
|
+
### ai-pre-review start — 发起卡片预审
|
|
939
|
+
|
|
940
|
+
CLI 会自动从 iCafe 获取卡片标题和内容(HTML 转 Markdown),然后提交给 AI 进行预审。
|
|
941
|
+
|
|
942
|
+
| 参数 | 必需 | 说明 |
|
|
943
|
+
|------|------|------|
|
|
944
|
+
| `--space` | **是** | 空间前缀码 |
|
|
945
|
+
| `--sequence` | **是** | 卡片序列号 |
|
|
946
|
+
| `--rules` | 否 | 评审规则 ID,逗号分隔(如 `--rules 1,2,3`)。CLI 自动从空间配置获取规则内容传给 AI。通过 `ai-pre-review rules` 查看可用规则及 ID |
|
|
947
|
+
|
|
948
|
+
```bash
|
|
949
|
+
icafe-cli ai-pre-review start --space myspace --sequence 1001
|
|
950
|
+
|
|
951
|
+
# 带评审规则 (规则 ID 从 ai-pre-review rules 获取)
|
|
952
|
+
icafe-cli ai-pre-review start --space myspace --sequence 1001 --rules 1,2,3
|
|
953
|
+
```
|
|
954
|
+
|
|
955
|
+
**返回示例** (成功):
|
|
956
|
+
|
|
957
|
+
```json
|
|
958
|
+
{
|
|
959
|
+
"status": "OK",
|
|
960
|
+
"message": "操作成功!",
|
|
961
|
+
"data": {
|
|
962
|
+
"conversationId": "abc123def456"
|
|
963
|
+
}
|
|
964
|
+
}
|
|
965
|
+
```
|
|
966
|
+
|
|
967
|
+
**关键字段说明**:
|
|
968
|
+
- `data.conversationId`: 会话 ID,用于后续查询结果
|
|
969
|
+
- 发起成功后 CLI 会在 stderr 提示查询命令
|
|
970
|
+
|
|
971
|
+
**业务成功判断**: 检查 `status` 为 `"OK"` 且 `data.conversationId` 非空。
|
|
972
|
+
|
|
973
|
+
---
|
|
974
|
+
|
|
975
|
+
### ai-pre-review result — 查询预审结果
|
|
976
|
+
|
|
977
|
+
支持两种查询方式:通过 `--conversation-id` 直接查,或通过 `--space` + `--sequence` 按卡片查最新结果。
|
|
978
|
+
|
|
979
|
+
| 参数 | 必需 | 说明 |
|
|
980
|
+
|------|------|------|
|
|
981
|
+
| `--conversation-id` | 二选一 | 发起预审时返回的 conversationId |
|
|
982
|
+
| `--space` | 二选一 | 空间前缀码(需配合 `--sequence`) |
|
|
983
|
+
| `--sequence` | 二选一 | 卡片序列号(需配合 `--space`) |
|
|
984
|
+
| `--mine` | 否 | 只返回当前用户发起的结果(默认返回所有用户的最新结果) |
|
|
985
|
+
|
|
986
|
+
```bash
|
|
987
|
+
# 通过 conversationId 查询
|
|
988
|
+
icafe-cli ai-pre-review result --conversation-id abc123def456
|
|
989
|
+
|
|
990
|
+
# 通过卡片查询
|
|
991
|
+
icafe-cli ai-pre-review result --space myspace --sequence 1001
|
|
992
|
+
|
|
993
|
+
# 只查自己的结果
|
|
994
|
+
icafe-cli ai-pre-review result --space myspace --sequence 1001 --mine
|
|
995
|
+
```
|
|
996
|
+
|
|
997
|
+
**返回示例** (已完成):
|
|
998
|
+
|
|
999
|
+
```json
|
|
1000
|
+
{
|
|
1001
|
+
"status": "OK",
|
|
1002
|
+
"message": "操作成功!",
|
|
1003
|
+
"data": {
|
|
1004
|
+
"conversationId": "abc123def456",
|
|
1005
|
+
"status": "FINISHED",
|
|
1006
|
+
"content": "AI 预审结果内容...",
|
|
1007
|
+
"contentType": "TEXT",
|
|
1008
|
+
"messageId": "msg789",
|
|
1009
|
+
"time": "2026-04-07 10:30:00",
|
|
1010
|
+
"latestRunning": false,
|
|
1011
|
+
"user": "zhangsan"
|
|
1012
|
+
}
|
|
1013
|
+
}
|
|
1014
|
+
```
|
|
1015
|
+
|
|
1016
|
+
**返回示例** (还在执行中):
|
|
1017
|
+
|
|
1018
|
+
```json
|
|
1019
|
+
{
|
|
1020
|
+
"status": "OK",
|
|
1021
|
+
"message": "操作成功!",
|
|
1022
|
+
"data": {
|
|
1023
|
+
"conversationId": "abc123def456",
|
|
1024
|
+
"status": "RUNNING",
|
|
1025
|
+
"latestRunning": true,
|
|
1026
|
+
"user": "zhangsan"
|
|
1027
|
+
}
|
|
1028
|
+
}
|
|
1029
|
+
```
|
|
1030
|
+
|
|
1031
|
+
**关键字段说明**:
|
|
1032
|
+
- `data.status`: Agent 消息状态 — `RUNNING`=执行中,`FINISHED`=已完成,`FAIL`=失败,`TIMEOUT`=超时
|
|
1033
|
+
- `data.content`: AI 回答内容(仅终态时有值)
|
|
1034
|
+
- `data.latestRunning`: `true` 表示有最新一次任务还在执行中,当前返回的可能是上一次已完成的结果
|
|
1035
|
+
- `data.user`: 发起该任务的用户名
|
|
1036
|
+
- `--mine` 仅在通过 `--space` + `--sequence` 查询时生效;通过 `--conversation-id` 查询时服务端会校验会话归属(只有创建者可查)
|
|
1037
|
+
|
|
1038
|
+
**CLI 提示行为**: 通过 `--space` + `--sequence` 查询且未指定 `--mine` 时,如果返回的结果不是当前用户发起的,CLI 会在 stderr 输出提示。
|
|
1039
|
+
|
|
1040
|
+
---
|
|
1041
|
+
|
|
1042
|
+
## ai-codegen 命令组
|
|
1043
|
+
|
|
1044
|
+
卡片代码生成命令,使用 AI 根据卡片内容自动生成代码。**异步操作**:先发起,再查结果。
|
|
1045
|
+
|
|
1046
|
+
### ai-codegen start — 发起代码生成
|
|
1047
|
+
|
|
1048
|
+
CLI 会自动从 iCafe 获取卡片信息,并检测当前 git 仓库和分支。
|
|
1049
|
+
|
|
1050
|
+
| 参数 | 必需 | 说明 |
|
|
1051
|
+
|------|------|------|
|
|
1052
|
+
| `--space` | **是** | 空间前缀码 |
|
|
1053
|
+
| `--sequence` | **是** | 卡片序列号 |
|
|
1054
|
+
| `--repo` | 否 | 代码仓库名(如 `baidu/myrepo`)。不传则从当前 git 目录的 `origin` remote 自动检测 |
|
|
1055
|
+
| `--branch` | 否 | 目标分支。不传则从当前 git 目录自动检测当前分支 |
|
|
1056
|
+
|
|
1057
|
+
```bash
|
|
1058
|
+
# 在 git 仓库目录下执行 (自动检测 repo 和 branch)
|
|
1059
|
+
icafe-cli ai-codegen start --space myspace --sequence 1001
|
|
1060
|
+
|
|
1061
|
+
# 手动指定 repo 和 branch
|
|
1062
|
+
icafe-cli ai-codegen start --space myspace --sequence 1001 --repo baidu/myrepo --branch master
|
|
1063
|
+
```
|
|
1064
|
+
|
|
1065
|
+
**返回示例** (成功):
|
|
1066
|
+
|
|
1067
|
+
```json
|
|
1068
|
+
{
|
|
1069
|
+
"status": "OK",
|
|
1070
|
+
"message": "操作成功!",
|
|
1071
|
+
"data": {
|
|
1072
|
+
"conversationId": "xyz789abc012"
|
|
1073
|
+
}
|
|
1074
|
+
}
|
|
1075
|
+
```
|
|
1076
|
+
|
|
1077
|
+
**关键字段说明**:
|
|
1078
|
+
- `data.conversationId`: 会话 ID,用于后续查询结果
|
|
1079
|
+
- `--repo` 不传时 CLI 通过 `git remote get-url origin` 自动检测,失败则报错退出
|
|
1080
|
+
- `--branch` 不传时 CLI 通过 `git rev-parse --abbrev-ref HEAD` 自动检测,失败则不指定分支(不报错)
|
|
1081
|
+
- 卡片标题为空时会报错退出(`missing_title`)
|
|
1082
|
+
- 代码生成需要仓库 MEMBER 权限,无权限时服务端返回鉴权错误
|
|
1083
|
+
|
|
1084
|
+
---
|
|
1085
|
+
|
|
1086
|
+
### ai-codegen result — 查询代码生成结果
|
|
1087
|
+
|
|
1088
|
+
支持两种查询方式,参数和行为与 `ai-pre-review result` 一致。
|
|
1089
|
+
|
|
1090
|
+
| 参数 | 必需 | 说明 |
|
|
1091
|
+
|------|------|------|
|
|
1092
|
+
| `--conversation-id` | 二选一 | 发起代码生成时返回的 conversationId |
|
|
1093
|
+
| `--space` | 二选一 | 空间前缀码(需配合 `--sequence`) |
|
|
1094
|
+
| `--sequence` | 二选一 | 卡片序列号(需配合 `--space`) |
|
|
1095
|
+
| `--mine` | 否 | 只返回当前用户发起的结果(默认返回所有用户的最新结果) |
|
|
1096
|
+
|
|
1097
|
+
```bash
|
|
1098
|
+
# 通过 conversationId 查询
|
|
1099
|
+
icafe-cli ai-codegen result --conversation-id xyz789abc012
|
|
1100
|
+
|
|
1101
|
+
# 通过卡片查询
|
|
1102
|
+
icafe-cli ai-codegen result --space myspace --sequence 1001
|
|
1103
|
+
|
|
1104
|
+
# 只查自己的结果
|
|
1105
|
+
icafe-cli ai-codegen result --space myspace --sequence 1001 --mine
|
|
1106
|
+
```
|
|
1107
|
+
|
|
1108
|
+
返回结构与 `ai-pre-review result` 完全一致,参见上方返回示例和字段说明。
|
|
1109
|
+
|
|
1110
|
+
---
|
|
1111
|
+
|
|
1112
|
+
## cache 命令组
|
|
1113
|
+
|
|
1114
|
+
### cache clean — 清除本地缓存
|
|
1115
|
+
|
|
1116
|
+
```bash
|
|
1117
|
+
icafe-cli cache clean
|
|
1118
|
+
```
|
|
1119
|
+
|
|
1120
|
+
以下数据会被缓存 (TTL 20 分钟): `space latest`, `space tree`, `space issue-types`, `space type-fields`, `space type-statuses`, `plan list`。用 `--no-cache` 全局 flag 可跳过缓存。
|
|
1121
|
+
|
|
1122
|
+
---
|
|
1123
|
+
|
|
1124
|
+
## 字段类型与值格式速查
|
|
1125
|
+
|
|
1126
|
+
`space type-fields` 返回的字段中 `type` 表示字段类型,不同类型需要传不同格式的值:
|
|
1127
|
+
|
|
1128
|
+
| type | 含义 | 传值格式 |
|
|
1129
|
+
|------|------|---------|
|
|
1130
|
+
| `select_list` | 单选下拉 | 必须是 `valueItems` 中的值 (如 `P1-High`) |
|
|
1131
|
+
| `select_list_multiple` | 多选下拉 | 逗号分隔多个值 |
|
|
1132
|
+
| `radio_field` | 单选框 | 必须是 `valueItems` 中的值 |
|
|
1133
|
+
| `check_box_field` | 复选框 | 逗号分隔多个值 |
|
|
1134
|
+
| `user_picker` | 多选用户 | 逗号分隔的用户名 (如 `zhangsan,lisi`) |
|
|
1135
|
+
| `user_picker_single` | 单选用户 | 单个用户名 |
|
|
1136
|
+
| `number_field` | 数字 | 整数或小数 (如 `8`, `3.5`) |
|
|
1137
|
+
| `date_time` | 日期 | `YYYY-MM-DD` |
|
|
1138
|
+
| `datetime_field` | 日期时间 | `YYYY-MM-DD HH:mm:ss` |
|
|
1139
|
+
| `free_text_field` | 单行文本 | 任意文本 |
|
|
1140
|
+
| `text_area_field` | 多行文本 | 任意文本 |
|
|
1141
|
+
| `url_field` | URL | URL 字符串 |
|
|
1142
|
+
| `rich_text` | 富文本 | HTML 格式 |
|
|
1143
|
+
| `plan_box` | 计划 | 计划完整路径 (如 `2026Q1/Sprint1`) |
|
|
1144
|
+
| `tree_field` | 树 (多选) | 逗号分隔的节点值 |
|
|
1145
|
+
| `multi_suggest_text_field` | 标签 | 逗号分隔的标签值 |
|
|
1146
|
+
|
|
1147
|
+
**核心规则**: 选择类字段的值**必须**是 `valueItems` 中列出的值,否则返回字段值错误。
|