@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,317 @@
|
|
|
1
|
+
# iCafe 平台概念指南
|
|
2
|
+
|
|
3
|
+
## 概述
|
|
4
|
+
|
|
5
|
+
iCafe 是百度内部的项目管理和敏捷研发平台,类似于 Jira。本文档介绍 iCafe 的核心概念。
|
|
6
|
+
|
|
7
|
+
官网: `https://console.cloud.baidu-int.com/devops/icafe`
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 空间 (Space)
|
|
12
|
+
|
|
13
|
+
空间是 iCafe 的项目容器,是组织卡片和计划的基本单元。
|
|
14
|
+
|
|
15
|
+
### 关键属性
|
|
16
|
+
|
|
17
|
+
| 属性 | 说明 | 示例 |
|
|
18
|
+
|------|------|------|
|
|
19
|
+
| `id` | 内部数字 ID | `12345` |
|
|
20
|
+
| `name` | 空间名称 | `我的项目` |
|
|
21
|
+
| `prefixCode` | 空间标识 (prefixCode),CLI 中 `--space` 参数的值 | `myspace` |
|
|
22
|
+
|
|
23
|
+
### JSON 响应示例
|
|
24
|
+
|
|
25
|
+
```json
|
|
26
|
+
{ "id": 87531, "name": "Dodo", "prefixCode": "dododododoit" }
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### 重要说明
|
|
30
|
+
|
|
31
|
+
- CLI 中所有 `--space` 参数使用 `prefixCode`,不是数字 `id`
|
|
32
|
+
- 可通过 `icafe-cli space latest` 获取用户最近访问的空间列表
|
|
33
|
+
- 空间树 (`icafe-cli space tree`) 可查看完整的空间层级结构
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 卡片 (Card / Issue)
|
|
38
|
+
|
|
39
|
+
卡片是 iCafe 的核心工作单元,代表一个具体的任务、需求或缺陷。
|
|
40
|
+
|
|
41
|
+
### 标识符
|
|
42
|
+
|
|
43
|
+
| 标识符 | 说明 | 在哪使用 |
|
|
44
|
+
|--------|------|----------|
|
|
45
|
+
| `sequence` | 序列号,空间内自增整数,人类可读 | URL、CLI 命令的 `--sequence` |
|
|
46
|
+
| `issueId` | 内部数据库 ID | 仅内部使用,不要用于 CLI |
|
|
47
|
+
|
|
48
|
+
### 卡片关键字段
|
|
49
|
+
|
|
50
|
+
| 字段 | 说明 |
|
|
51
|
+
|------|------|
|
|
52
|
+
| `sequence` | 卡片编号(整数,空间内唯一) |
|
|
53
|
+
| `title` | 标题 |
|
|
54
|
+
| `type.name` | 卡片类型(Epic / Story / Task / Bug) |
|
|
55
|
+
| `status` | 当前流程状态 |
|
|
56
|
+
| `responsiblePeople` | 负责人列表(含 username、name) |
|
|
57
|
+
| `createdUser` | 创建人 |
|
|
58
|
+
| `createdTime` | 创建时间,格式 `yyyy-MM-dd HH:mm:ss` |
|
|
59
|
+
| `lastModifiedTime` | 最近修改时间 |
|
|
60
|
+
| `detail` | 描述,HTML 富文本 |
|
|
61
|
+
| `parent` | 父卡片引用(含 sequence、title) |
|
|
62
|
+
| `properties` | 自定义属性列表(见下方"自定义属性"章节) |
|
|
63
|
+
| `isFinishedStatus` | 是否已完结状态(布尔值) |
|
|
64
|
+
|
|
65
|
+
### 卡片类型
|
|
66
|
+
|
|
67
|
+
| 类型 | 说明 | 典型用途 |
|
|
68
|
+
|------|------|---------|
|
|
69
|
+
| `Epic` | 史诗 | 大型功能模块,包含多个 Story |
|
|
70
|
+
| `Story` | 用户故事 | 一个完整的功能需求 |
|
|
71
|
+
| `Task` | 任务 | 技术任务、子任务、杂项工作 |
|
|
72
|
+
| `Bug` | 缺陷 | 功能异常、线上问题 |
|
|
73
|
+
|
|
74
|
+
> **注意**: 类型名称在 IQL 查询中区分大小写,使用英文原名。每个空间可以自定义卡片类型与名称,通过 `icafe-cli space issue-types` 查询。
|
|
75
|
+
|
|
76
|
+
### 卡片 URL 格式
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
https://console.cloud.baidu-int.com/devops/icafe/issue/{space}-{sequence}/show
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
例如: `https://console.cloud.baidu-int.com/devops/icafe/issue/myspace-1001/show`
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 流程状态 (Workflow Status)
|
|
87
|
+
|
|
88
|
+
卡片的生命周期通过流程状态管理。状态有定义好的流转规则。
|
|
89
|
+
|
|
90
|
+
### 常见状态流转
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
新建 → 待开发 → 开发中 → 开发完成 → 测试中 → 已完成
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### 常见状态
|
|
97
|
+
|
|
98
|
+
| 状态 | 说明 |
|
|
99
|
+
|------|------|
|
|
100
|
+
| `新建` | 刚创建的卡片 |
|
|
101
|
+
| `待开发` | 等待开发 |
|
|
102
|
+
| `开发中` | 正在开发 |
|
|
103
|
+
| `进行中` | 正在进行 |
|
|
104
|
+
| `待测试` | 等待测试 |
|
|
105
|
+
| `测试中` | 正在测试 |
|
|
106
|
+
| `已完成` | 开发完成 |
|
|
107
|
+
| `已关闭` | 卡片关闭 |
|
|
108
|
+
|
|
109
|
+
### 状态流转规则
|
|
110
|
+
|
|
111
|
+
- 状态有顺序,支持 IQL 中的比较操作 (`>=`, `<=`)
|
|
112
|
+
- `isFinishedStatus: true` 表示该卡片处于终态
|
|
113
|
+
- 默认情况下,更新状态时会检查流转规则 (`isCheckStatus=true`)
|
|
114
|
+
- 使用 `--no-check-status` 可跳过检查,强制设置任意状态
|
|
115
|
+
- **查询时不要假设状态名称**,先通过 `space type-statuses` 确认该类型的合法状态列表
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## 优先级 (Priority)
|
|
120
|
+
|
|
121
|
+
卡片的紧急程度,使用标准的 5 级优先级:
|
|
122
|
+
|
|
123
|
+
| 优先级 | 含义 |
|
|
124
|
+
|--------|------|
|
|
125
|
+
| `P0-Highest` | 最高优先级,紧急 |
|
|
126
|
+
| `P1-High` | 高优先级 |
|
|
127
|
+
| `P2-Middle` | 中等优先级 |
|
|
128
|
+
| `P3-Low` | 低优先级 |
|
|
129
|
+
| `P4-Lowest` | 最低优先级 |
|
|
130
|
+
|
|
131
|
+
> **注意**: 部分空间可能使用 `P2-Medium` 而非 `P2-Middle`,以 `space type-fields` 返回的值为准。
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## 计划 (Plan)
|
|
136
|
+
|
|
137
|
+
计划是 iCafe 中的迭代/版本管理单元。
|
|
138
|
+
|
|
139
|
+
### 关键属性
|
|
140
|
+
|
|
141
|
+
| 属性 | 说明 |
|
|
142
|
+
|------|------|
|
|
143
|
+
| `id` | 计划 ID |
|
|
144
|
+
| `name` | 计划名称 |
|
|
145
|
+
| `path` | 计划路径 (层级路径) |
|
|
146
|
+
| `parentId` | 父计划 ID |
|
|
147
|
+
| `status` | 计划状态 (`ACTIVE` 或 `ARCHIVED`) |
|
|
148
|
+
| `startDate` | 开始日期 |
|
|
149
|
+
| `endDate` | 结束日期 |
|
|
150
|
+
|
|
151
|
+
### JSON 响应示例
|
|
152
|
+
|
|
153
|
+
```json
|
|
154
|
+
{ "id": 1107361, "name": "03.02~03.08", "path": "2026Q1/03.02~03.08", "status": "ACTIVE" }
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### 层级结构
|
|
158
|
+
|
|
159
|
+
计划支持层级嵌套,通过路径表示:
|
|
160
|
+
- 顶级计划: `2024Q1`
|
|
161
|
+
- 子计划: `2024Q1/Sprint1`
|
|
162
|
+
- 孙计划: `2024Q1/Sprint1/Week1`
|
|
163
|
+
|
|
164
|
+
在 IQL 中使用 `所属计划` 字段查询时,需要使用完整路径。
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## 自定义属性 (Properties)
|
|
169
|
+
|
|
170
|
+
每张卡片包含一组 `properties`,内容因空间和卡片类型而异。
|
|
171
|
+
|
|
172
|
+
### Properties 数据结构
|
|
173
|
+
|
|
174
|
+
```json
|
|
175
|
+
{
|
|
176
|
+
"fieldType": "SELECT_LIST",
|
|
177
|
+
"localId": 22797,
|
|
178
|
+
"propertyName": "优先级",
|
|
179
|
+
"displayValue": "P0-Highest",
|
|
180
|
+
"value": "17185"
|
|
181
|
+
}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
- `fieldType`: 字段类型 (SELECT_LIST, USER_PICKER, DATE_TIME, NUMBER_FIELD 等)
|
|
185
|
+
- `localId`: 字段内部 ID
|
|
186
|
+
- `propertyName`: 字段中文名称 (用于 `--fields` 参数和 IQL 查询)
|
|
187
|
+
- `displayValue`: 人类可读的展示值
|
|
188
|
+
- `value`: 内部存储值 (更新时可以使用 displayValue)
|
|
189
|
+
|
|
190
|
+
### 常见属性字段
|
|
191
|
+
|
|
192
|
+
以下是各空间中常见的自定义属性 (不同空间可能有所不同,以 `space type-fields` 返回为准):
|
|
193
|
+
|
|
194
|
+
| 属性名 | fieldType | 说明 |
|
|
195
|
+
|--------|-----------|------|
|
|
196
|
+
| 优先级 | SELECT_LIST | P0-Highest / P1-High / P2-Middle / P3-Low / P4-Lowest |
|
|
197
|
+
| 所属计划 | PLAN_BOX | 关联的迭代计划 |
|
|
198
|
+
| 所属项目 | PROJECT_MANAGEMENT | 关联项目 |
|
|
199
|
+
| 截止日期 | DATE_TIME | 卡片截止时间 |
|
|
200
|
+
| 计划上线日期 | DATE_TIME | 预计上线时间 |
|
|
201
|
+
| 实际上线日期 | DATE_TIME | 实际上线时间 |
|
|
202
|
+
| 估算工时 | NUMBER_FIELD | 预估研发工时 (小时) |
|
|
203
|
+
| 实际工时 | NUMBER_FIELD | 实际花费工时 |
|
|
204
|
+
| RD负责人 | USER_PICKER | 研发负责人 |
|
|
205
|
+
| FE负责人 | USER_PICKER | 前端负责人 |
|
|
206
|
+
| QA负责人 | USER_PICKER | 测试负责人 |
|
|
207
|
+
| PM负责人 | USER_PICKER | 产品负责人 |
|
|
208
|
+
| 关注人 | USER_PICKER | 卡片关注人 |
|
|
209
|
+
| 是否免测 | SELECT_LIST | 是/否 |
|
|
210
|
+
| Severity | SELECT_LIST | Bug 严重程度 (S1/S2/S3/S4) |
|
|
211
|
+
| Bug根因 | SELECT_LIST | Bug 根本原因分类 |
|
|
212
|
+
| 线上问题级别 | SELECT_LIST | P0/P1/P2/P3 |
|
|
213
|
+
|
|
214
|
+
### 系统字段
|
|
215
|
+
|
|
216
|
+
以下字段通过专用参数 (`--title`, `--assignee` 等) 或 `--fields` 中文名更新:
|
|
217
|
+
|
|
218
|
+
| 字段名 (中文) | 说明 |
|
|
219
|
+
|---------------|------|
|
|
220
|
+
| `标题` | 卡片标题 |
|
|
221
|
+
| `内容` | 卡片描述 (HTML 格式) |
|
|
222
|
+
| `类型` | 卡片类型 |
|
|
223
|
+
| `负责人` | 负责人用户名 |
|
|
224
|
+
| `流程状态` | 当前流程状态 |
|
|
225
|
+
| `优先级` | 优先级等级 |
|
|
226
|
+
| `创建人` | 创建者用户名 |
|
|
227
|
+
| `创建时间` | 创建时间 |
|
|
228
|
+
| `更新时间` | 最后更新时间 |
|
|
229
|
+
| `截止日期` | 截止日期 |
|
|
230
|
+
| `所属计划` | 关联的计划 |
|
|
231
|
+
| `标签` | 卡片标签 |
|
|
232
|
+
|
|
233
|
+
> **操作约束**: 通用属性 (状态、负责人、优先级等) 通过 `--status`、`--assignee`、`--priority` 参数直接设置;自定义属性通过 `--fields "属性名=值"` 更新。
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## 研发数据链 (DevInfo)
|
|
238
|
+
|
|
239
|
+
研发数据链记录卡片从代码到上线的完整研发活动。
|
|
240
|
+
|
|
241
|
+
### 数据类型
|
|
242
|
+
|
|
243
|
+
| 类型 | 说明 | 包含信息 |
|
|
244
|
+
|------|------|----------|
|
|
245
|
+
| `codeReview` | 代码评审 | 评审 ID、URL、状态 (MERGED/PASSED)、提交人、changeId |
|
|
246
|
+
| `codeMerge` | 代码合并 | Git 提交记录、分支信息、流水线构建状态 |
|
|
247
|
+
| `releaseInfo` | 发布信息 | 版本号、敏捷流水线 URL |
|
|
248
|
+
| `initiateTest` | 提测记录 | 测试阶段信息 |
|
|
249
|
+
| `passTest` | 测试通过 | 测试通过记录 |
|
|
250
|
+
| `deploy` | 部署 | 部署 Job URL、环境信息 |
|
|
251
|
+
|
|
252
|
+
### codeMerge JSON 示例
|
|
253
|
+
|
|
254
|
+
```json
|
|
255
|
+
{
|
|
256
|
+
"branch": "master",
|
|
257
|
+
"commitId": "c8f0b1a89e316502e9f892f2754baef414dc0b86",
|
|
258
|
+
"commitMessage": "dododododoit-5 前端增加routes和links",
|
|
259
|
+
"commitTime": "Mar 11, 2026 4:51:51 PM",
|
|
260
|
+
"projectName": "baidu/bapi/dodo",
|
|
261
|
+
"changeUrl": "http://icode.baidu.com/myreview/changes/c/baidu/bapi/dodo/+/120034262",
|
|
262
|
+
"pipeLineCommit": {
|
|
263
|
+
"pipelineId": 244154168,
|
|
264
|
+
"pipeLineUrl": "http://agile.baidu.com//#/detail/244154168/job/0",
|
|
265
|
+
"status": "SUCC"
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
## 用户标识
|
|
273
|
+
|
|
274
|
+
iCafe 使用百度内部用户名标识用户:
|
|
275
|
+
- 正式员工: 如 `zhangsan`
|
|
276
|
+
- 外包员工: 通常以 `v_` 开头,如 `v_liuxiang`
|
|
277
|
+
|
|
278
|
+
在 IQL 中可以使用 `currentUser` 表示当前认证用户。
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## 评论 (Comment)
|
|
283
|
+
|
|
284
|
+
卡片上的讨论和记录信息。每条评论包含:
|
|
285
|
+
- `id`: 评论 ID
|
|
286
|
+
- `content`: 评论内容
|
|
287
|
+
- `username`: 创建人用户名
|
|
288
|
+
- `chineseName`: 创建人中文名
|
|
289
|
+
- `createTime`: 创建时间
|
|
290
|
+
- `isDeleted`: 是否已删除
|
|
291
|
+
- `parentCommentId`: 父评论 ID (回复场景)
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
## IQL 关键约束
|
|
296
|
+
|
|
297
|
+
详细语法见 `references/iql-syntax.md`,以下是使用时的关键注意事项:
|
|
298
|
+
|
|
299
|
+
1. **字段名使用中文**: IQL 中所有字段名均为中文 (`类型`、`负责人`、`流程状态` 等)
|
|
300
|
+
2. **日期不支持 `>=`/`<=`**: 日期字段只支持 `>` 和 `<`,需要范围时用 AND 组合
|
|
301
|
+
3. **`currentUser` 魔法变量**: 表示当前登录用户,可用于 `负责人 = currentUser`
|
|
302
|
+
4. **状态顺序比较**: `流程状态 <= 开发中` 会匹配所有顺序在"开发中"之前 (含) 的状态
|
|
303
|
+
5. **计划路径需完整**: `所属计划 = "2026Q1/03.02~03.08"`,不能只写叶子节点名
|
|
304
|
+
6. **字符串值可不加引号**: 但含空格或特殊字符时必须加引号
|
|
305
|
+
7. **不要猜测状态值**: 不同空间的状态配置不同,应先通过查询确认可用状态
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
## 重要约束与最佳实践
|
|
310
|
+
|
|
311
|
+
1. **`--space` 必须使用 prefixCode** (如 `myspace`),不是数字 id
|
|
312
|
+
2. **`--sequence` 是空间内自增序号**,不是全局唯一 id
|
|
313
|
+
3. **描述和评论字段必须是 HTML**,不能直接传 Markdown (详见 SKILL.md 转换规则)
|
|
314
|
+
4. **批量查询 devinfo 最多 100 张卡片** (`--sequences` 逗号分隔)
|
|
315
|
+
5. **批量查询 history/changes 最多 50 张卡片**
|
|
316
|
+
6. **查询结果默认不含子卡片**,需要时加 `--show-children`
|
|
317
|
+
7. **优先级格式含数字前缀**: `P0-Highest`、`P1-High`、`P2-Middle`、`P3-Low`、`P4-Lowest`
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# 智能建卡工作流
|
|
2
|
+
|
|
3
|
+
当用户需要创建卡片但没有提供完整的空间、类型等信息时,使用本流程智能推断并创建。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 适用场景
|
|
8
|
+
|
|
9
|
+
- 用户说"帮我建个卡片记录一下"
|
|
10
|
+
- 用户说"创建一个 Bug"但没说哪个空间
|
|
11
|
+
- 用户说"在 cloud-iCafe 建个卡片"但没说类型
|
|
12
|
+
- 任何需要新建卡片但信息不完整的场景
|
|
13
|
+
|
|
14
|
+
## 第一步:确定空间
|
|
15
|
+
|
|
16
|
+
**1.1 用户明确指定了空间** → 直接使用
|
|
17
|
+
|
|
18
|
+
**1.2 从上下文推断**
|
|
19
|
+
|
|
20
|
+
如果用户没指定空间,调 smart-find 获取用户活跃空间:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
icafe-cli card smart-find
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
从 `stats.bySpace` 推断空间:
|
|
27
|
+
- 只有 1 个空间 → 直接使用
|
|
28
|
+
- 有多个空间 → 结合以下信号选择:
|
|
29
|
+
- 用户描述中的关键词与空间名/卡片标题匹配
|
|
30
|
+
- 如果在 git 仓库中,`git remote get-url origin` 提取仓库关键词与空间匹配
|
|
31
|
+
- `stats.bySpace[0]` 是最活跃的空间,优先推荐
|
|
32
|
+
- 无法确定 → 列出候选空间(附卡片数量),让用户选择
|
|
33
|
+
|
|
34
|
+
**1.3 无任何线索** → 必须询问用户
|
|
35
|
+
|
|
36
|
+
## 第二步:确定类型
|
|
37
|
+
|
|
38
|
+
按以下优先级,**多个信号综合判断**:
|
|
39
|
+
|
|
40
|
+
**2.1 用户明确指定了类型** (如"建个 Bug") → 直接使用
|
|
41
|
+
|
|
42
|
+
**2.2 smart-find 该空间的类型分布**
|
|
43
|
+
|
|
44
|
+
直接读 `stats.bySpaceType`(已按数量降序排列):
|
|
45
|
+
```
|
|
46
|
+
例如: [{"space":"cloud-iCafe", "type":"Task", "count":8},
|
|
47
|
+
{"space":"cloud-iCafe", "type":"Story", "count":4}]
|
|
48
|
+
→ 该空间最常用 Task
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**2.3 用户描述关键词**
|
|
52
|
+
|
|
53
|
+
| 关键词 | 推断类型 |
|
|
54
|
+
|--------|---------|
|
|
55
|
+
| "修复", "fix", "bug", "缺陷", "问题" | Bug |
|
|
56
|
+
| "新增", "功能", "需求", "feature" | Story/Feature |
|
|
57
|
+
| "任务", "task", "优化", "重构" | Task |
|
|
58
|
+
| "史诗", "大需求", "epic" | Epic |
|
|
59
|
+
|
|
60
|
+
**2.4 git 分支名模式**(如果在 git 仓库中)
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
git rev-parse --abbrev-ref HEAD
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
| 分支名模式 | 推断类型 |
|
|
67
|
+
|-----------|---------|
|
|
68
|
+
| `bugfix/*`, `fix/*`, `hotfix/*` | Bug |
|
|
69
|
+
| `feature/*`, `feat/*` | Story/Feature |
|
|
70
|
+
| `task/*`, `chore/*`, `docs/*` | Task |
|
|
71
|
+
|
|
72
|
+
**2.5 综合决策**
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
最终类型 =
|
|
76
|
+
用户指定 (最高优先)
|
|
77
|
+
> smart-find 该空间最常用类型 + 用户关键词交叉验证
|
|
78
|
+
> 分支名模式推断
|
|
79
|
+
> 单独的 smart-find 最常用类型
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
至少两个信号指向同一类型 → 自动使用并告知用户。
|
|
83
|
+
只有一个信号或信号冲突 → 推荐但让用户确认。
|
|
84
|
+
无信号 → 询问用户,可用 `space issue-types` 列出选项。
|
|
85
|
+
|
|
86
|
+
> **避免重复调用**: 如果确定了类型后紧接着要调 `space type-fields`,不需要先调 `issue-types` 确认类型。`type-fields` 调用成功即隐含类型存在的验证。
|
|
87
|
+
|
|
88
|
+
## 第三步:获取字段信息
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
icafe-cli space type-fields --space <space> --type <type>
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
关注:
|
|
95
|
+
- **优先级字段**: 有则用默认值(如 `P2-Middle`),无此字段则不传
|
|
96
|
+
- **必填字段**: 尽量填充,但 API 不强制校验自定义必填字段,不必因此阻塞创建
|
|
97
|
+
- **字段可选值**: 选择类字段的值必须从 `valueItems` 中取
|
|
98
|
+
|
|
99
|
+
## 第四步:填充信息并创建
|
|
100
|
+
|
|
101
|
+
| 字段 | 来源 |
|
|
102
|
+
|------|------|
|
|
103
|
+
| 标题 (title) | 用户提供,或从用户描述中提取 |
|
|
104
|
+
| 正文 (detail) | 用户提供的详细描述,转 HTML。不确定可不传(使用模板默认值)|
|
|
105
|
+
| 类型 (type) | 第二步确定 |
|
|
106
|
+
| 负责人 (assignee) | 不传时 CLI 自动填充当前用户 |
|
|
107
|
+
| 优先级 (priority) | 从 type-fields 获取选项动态选择,不能硬编码 |
|
|
108
|
+
| 自定义字段 (fields) | 从 type-fields 获取必填项,尽量填充 |
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
icafe-cli card create \
|
|
112
|
+
--space <space> \
|
|
113
|
+
--title "用户提供或推断的标题" \
|
|
114
|
+
--type <type> \
|
|
115
|
+
--priority <从 type-fields 获取的值> \
|
|
116
|
+
--fields "自定义字段1=值1,自定义字段2=值2"
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**创建前向用户确认**:汇总空间、类型、标题等信息,确认后再执行。
|
|
120
|
+
|
|
121
|
+
## 第五步:返回结果
|
|
122
|
+
|
|
123
|
+
创建成功后返回:
|
|
124
|
+
- **卡片序列号**: 从返回的 `issues[0].sequence` 获取
|
|
125
|
+
- **卡片 URL**: `issues[0].url` 或拼接 `https://console.cloud.baidu-int.com/devops/icafe/issue/{space}-{sequence}/show`
|
|
126
|
+
- **卡片信息摘要**: 空间、序列号、标题、类型
|
|
127
|
+
|
|
128
|
+
> **注意**: OpenAPI 创建接口只返回基本信息(sequence, title, url),不返回完整卡片详情。如需确认自动分配的状态、负责人等,创建后再调 `card get --brief`。
|
|
129
|
+
|
|
130
|
+
## 决策流程图
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
用户要创建卡片
|
|
134
|
+
│
|
|
135
|
+
├─ 1. 确定空间
|
|
136
|
+
│ ├─ 用户指定? → 直接用
|
|
137
|
+
│ ├─ card smart-find → stats.bySpace
|
|
138
|
+
│ │ ├─ 1 个空间 → 直接用
|
|
139
|
+
│ │ ├─ 多个 → 关键词匹配/git remote 匹配 → 推荐或让用户选
|
|
140
|
+
│ │ └─ 无结果 → 问用户
|
|
141
|
+
│ └─ 无任何线索 → 问用户
|
|
142
|
+
│
|
|
143
|
+
├─ 2. 确定类型 (多信号综合)
|
|
144
|
+
│ ├─ 用户指定? → 直接用
|
|
145
|
+
│ ├─ 收集信号:
|
|
146
|
+
│ │ ├─ smart-find stats.bySpaceType 该空间最常用类型
|
|
147
|
+
│ │ ├─ 用户描述关键词: "bug"→Bug, "功能"→Story
|
|
148
|
+
│ │ └─ git 分支名: bugfix→Bug, feature→Story
|
|
149
|
+
│ ├─ 多信号一致 → 自动使用
|
|
150
|
+
│ ├─ 信号冲突/不足 → 推荐 + 让用户确认
|
|
151
|
+
│ └─ 无信号 → issue-types 列出选项 → 问用户
|
|
152
|
+
│
|
|
153
|
+
├─ 3. type-fields 获取字段信息 + 填充
|
|
154
|
+
│ ├─ 优先级: 有则选默认值,无则不传
|
|
155
|
+
│ ├─ 必填项: 尽量填,不阻塞创建
|
|
156
|
+
│ └─ 标题: 用户提供或从描述提取
|
|
157
|
+
│
|
|
158
|
+
├─ 4. 向用户确认 → card create
|
|
159
|
+
│ ├─ 成功 → 返回 sequence + URL
|
|
160
|
+
│ └─ 失败 → 分析错误 (类型不存在/字段不合法) → 修正重试
|
|
161
|
+
│
|
|
162
|
+
└─ 5. 返回卡片信息
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## 关键原则
|
|
166
|
+
|
|
167
|
+
1. **不确定就问**: 空间和类型是最重要的两个参数,不确定时必须确认,不要自己猜
|
|
168
|
+
2. **smart-find 优先**: 先从 stats 获取用户习惯,再用其他信号验证
|
|
169
|
+
3. **创建前确认**: 汇总所有信息让用户确认后再执行,避免建错卡片
|
|
170
|
+
4. **始终用 --brief**: 创建后如需查看详情,用 `card get --brief`
|
|
171
|
+
5. **标题很重要**: 标题是唯一不能为空的用户侧必填项,确保有意义
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# 智能寻卡工作流
|
|
2
|
+
|
|
3
|
+
当用户需要查找卡片但没有提供完整的 space + sequence 时,使用本流程智能定位目标卡片。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 适用场景
|
|
8
|
+
|
|
9
|
+
- 用户说"帮我看看我那个 xxx 的卡片"
|
|
10
|
+
- 用户说"查一下我最近的卡片"
|
|
11
|
+
- 用户说"找一下登录 bug 的进度"
|
|
12
|
+
- 预审/代码生成时用户没指定具体卡片
|
|
13
|
+
- 修改卡片时用户只说了大概描述没给序列号
|
|
14
|
+
|
|
15
|
+
## 第一步:从用户上下文提取线索
|
|
16
|
+
|
|
17
|
+
分析用户的对话内容,提取以下线索(可能有多个,也可能一个都没有):
|
|
18
|
+
|
|
19
|
+
| 线索类型 | 示例 | 提取方式 |
|
|
20
|
+
|---------|------|---------|
|
|
21
|
+
| 明确的 space-sequence | "cloud-iCafe-22229" | 正则匹配 `{space}-{数字}` |
|
|
22
|
+
| 空间名 | "cloud-iCafe 空间" | 关键词 |
|
|
23
|
+
| 卡片标题关键词 | "登录 bug"、"智能预审" | 用户描述中的关键词 |
|
|
24
|
+
| 卡片类型 | "那个 Task"、"Bug" | 类型关键词 |
|
|
25
|
+
| 负责人 | "我的卡片"、"zhangsan 的" | 人称/用户名 |
|
|
26
|
+
|
|
27
|
+
**如果提取到了明确的 space + sequence** → 直接调 `card get --brief` 验证存在性,跳到结果返回。
|
|
28
|
+
|
|
29
|
+
## 第二步:确定搜索范围(空间)
|
|
30
|
+
|
|
31
|
+
**2.1 用户指定了空间** → 直接使用
|
|
32
|
+
|
|
33
|
+
**2.2 用户没指定空间** → 调 smart-find 获取用户活跃空间和卡片:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
icafe-cli card smart-find
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
从 `stats.bySpace` 确定候选空间:
|
|
40
|
+
- 只有 1 个空间 → 直接在该空间搜索
|
|
41
|
+
- 有多个空间 → 结合用户描述中的关键词与卡片标题匹配,缩小到最相关的空间
|
|
42
|
+
- 如果无法确定 → 列出 top 3 空间让用户选择
|
|
43
|
+
|
|
44
|
+
## 第三步:在目标空间中搜索卡片
|
|
45
|
+
|
|
46
|
+
按以下优先级逐级尝试,**找到就停**,不要所有方式都跑一遍:
|
|
47
|
+
|
|
48
|
+
**3.1 从 smart-find 结果中匹配(如果第二步调过 smart-find)**
|
|
49
|
+
|
|
50
|
+
直接在已有的 `cards` 列表中搜索,不需要额外 API 调用:
|
|
51
|
+
- 过滤目标空间的卡片
|
|
52
|
+
- 用用户描述中的关键词与 `title` 做模糊匹配
|
|
53
|
+
- 按匹配度 + `lastModified` 时间排序
|
|
54
|
+
- 如果匹配到 1 张 → 确认后返回
|
|
55
|
+
- 匹配到多张 → 列出 top 5 让用户选择
|
|
56
|
+
|
|
57
|
+
**3.2 用 IQL 精确搜索**
|
|
58
|
+
|
|
59
|
+
如果 smart-find 结果中没匹配到,或用户提供了更具体的条件(类型、状态等),用 IQL:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
# 按标题关键词搜索
|
|
63
|
+
icafe-cli card query --space <space> \
|
|
64
|
+
--iql "负责人 = currentUser AND 标题 ~ <关键词>" --brief
|
|
65
|
+
|
|
66
|
+
# 按类型搜索
|
|
67
|
+
icafe-cli card query --space <space> \
|
|
68
|
+
--iql "负责人 = currentUser AND 类型 = Bug AND 流程状态 != 已关闭" --brief
|
|
69
|
+
|
|
70
|
+
# 不限负责人(可能是别人的卡片但用户关注的)
|
|
71
|
+
icafe-cli card query --space <space> \
|
|
72
|
+
--iql "标题 ~ <关键词> AND 流程状态 != 已关闭" --brief
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
> **注意**: 对 IQL 查询结果再用 `isFinishedStatus` 字段做二次过滤,排除所有已结束的卡片。
|
|
76
|
+
|
|
77
|
+
**3.3 兜底:列出用户的活跃卡片**
|
|
78
|
+
|
|
79
|
+
如果关键词搜索无结果,退化为列出用户在该空间的所有活跃卡片:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
icafe-cli card query --space <space> \
|
|
83
|
+
--iql "负责人 = currentUser AND 流程状态 != 已关闭" \
|
|
84
|
+
--max-records 10 --brief
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
让用户从列表中选择。
|
|
88
|
+
|
|
89
|
+
## 第四步:返回结果
|
|
90
|
+
|
|
91
|
+
找到卡片后,返回关键信息:
|
|
92
|
+
- **卡片标识**: `{space}-{sequence}` (如 `cloud-iCafe-22229`)
|
|
93
|
+
- **卡片 URL**: `https://console.cloud.baidu-int.com/devops/icafe/issue/{space}-{sequence}/show`
|
|
94
|
+
- **基本信息**: 标题、类型、状态、负责人
|
|
95
|
+
|
|
96
|
+
## 决策流程图
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
用户要找卡片
|
|
100
|
+
│
|
|
101
|
+
├─ 提取线索
|
|
102
|
+
│ ├─ 有明确 space+sequence? → card get --brief 验证 → 返回
|
|
103
|
+
│ ├─ 有空间名? → 记录,进入第三步
|
|
104
|
+
│ ├─ 有关键词/类型/人名? → 记录,用于后续匹配
|
|
105
|
+
│ └─ 什么都没有? → 进入第二步
|
|
106
|
+
│
|
|
107
|
+
├─ 确定搜索空间
|
|
108
|
+
│ ├─ 已有空间 → 跳到第三步
|
|
109
|
+
│ └─ 无空间 → card smart-find
|
|
110
|
+
│ ├─ stats.bySpace 只有 1 个 → 用它
|
|
111
|
+
│ ├─ 多个 → 关键词匹配或让用户选
|
|
112
|
+
│ └─ 无结果 → 问用户
|
|
113
|
+
│
|
|
114
|
+
├─ 搜索卡片 (找到就停)
|
|
115
|
+
│ ├─ smart-find cards 中按标题匹配 → 有结果 → 确认/选择
|
|
116
|
+
│ ├─ IQL 按关键词/类型搜索 → 有结果 → 确认/选择
|
|
117
|
+
│ └─ 兜底: 列出用户活跃卡片 → 让用户选
|
|
118
|
+
│
|
|
119
|
+
└─ 返回卡片信息
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## 关键原则
|
|
123
|
+
|
|
124
|
+
1. **能不调 API 就不调**: smart-find 有缓存(10 分钟),优先用缓存数据匹配
|
|
125
|
+
2. **找到就停**: 不要把所有搜索方式都跑一遍,第一个有结果的就用
|
|
126
|
+
3. **不确定就问**: 如果搜到多张卡片且无法自动判断,列出候选让用户选择,不要自己猜
|
|
127
|
+
4. **始终用 --brief**: 减少上下文占用
|