@cnbcool/cnb-cli 1.0.0 → 1.0.1
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/README.md +2 -37
- package/package.json +26 -6
- package/.cnb.yml +0 -37
- package/DEVELOPMENT.md +0 -345
- package/cag.config.js +0 -57
- package/downloads/1773729361207-dsfgely.png +0 -0
- package/skills/artifact-migrate/README.md +0 -79
- package/skills/artifact-migrate/SKILL.md +0 -674
- package/skills/auto-code/SKILL.md +0 -71
- package/skills/auto-code/hooks/hooks.json +0 -15
- package/skills/cnb-code-import/LICENSE +0 -20
- package/skills/cnb-code-import/README.md +0 -311
- package/skills/cnb-code-import/SKILL.md +0 -368
- package/skills/cnb-code-import/scripts/migrate.sh +0 -371
- package/skills/cnb-skill/SKILL.md +0 -100
- package/skills/code-review/README.md +0 -3
- package/skills/code-review/SKILL.md +0 -131
- package/skills/code-review/hooks/hooks.json +0 -15
- package/skills/diagnose-pr-pipeline/README.md +0 -3
- package/skills/diagnose-pr-pipeline/SKILL.md +0 -88
- package/skills/dialog-ci-log/README.md +0 -16
- package/skills/dialog-ci-log/SKILL.md +0 -41
- package/skills/dialog-ci-log/scrips/get-failed-stage-logs.js +0 -124
- package/skills/pr-diff/README.md +0 -3
- package/skills/pr-diff/SKILL.md +0 -97
- package/skills/pr-summary/README.md +0 -3
- package/skills/pr-summary/SKILL.md +0 -70
- package/skills/tapd-resource-fetcher/README.md +0 -3
- package/skills/tapd-resource-fetcher/SKILL.md +0 -97
- package/skills/text-path-converter/README.md +0 -3
- package/skills/text-path-converter/SKILL.md +0 -30
- package/skills/text-path-converter/scripts/convertLink.js +0 -148
- package/test.js +0 -1
package/README.md
CHANGED
|
@@ -46,7 +46,7 @@ npx skills add https://cnb.cool/cnb/skills/cnb-skill.git --skill cnb-skill --ski
|
|
|
46
46
|
### 使用 cnb-skill 还需安装 cnb-cli
|
|
47
47
|
|
|
48
48
|
```bash
|
|
49
|
-
npm install
|
|
49
|
+
npm install @cnbcool/cnb-cli -g
|
|
50
50
|
```
|
|
51
51
|
|
|
52
52
|
安装完成后运行 `cnb --help` 验证是否安装成功。
|
|
@@ -59,7 +59,7 @@ npm install cnb-cli --registry=https://npm.cnb.cool/cnb/skills/cnb-cli/-/package
|
|
|
59
59
|
请帮我安装 CNB Skills 的运行环境,依次执行以下步骤:
|
|
60
60
|
|
|
61
61
|
1. 全局安装 cnb-cli:
|
|
62
|
-
npm install
|
|
62
|
+
npm install @cnbcool/cnb-cli -g
|
|
63
63
|
安装完成后运行 cnb --help 验证是否安装成功。
|
|
64
64
|
|
|
65
65
|
2. 全局安装 skills 工具:
|
|
@@ -71,41 +71,6 @@ npm install cnb-cli --registry=https://npm.cnb.cool/cnb/skills/cnb-cli/-/package
|
|
|
71
71
|
每一步执行完后告诉我结果,如果有报错请帮我解决。
|
|
72
72
|
```
|
|
73
73
|
|
|
74
|
-
## 本地开发
|
|
75
|
-
|
|
76
|
-
```bash
|
|
77
|
-
# 安装依赖
|
|
78
|
-
npm install
|
|
79
|
-
|
|
80
|
-
# 本地链接所有 Skill(开发调试用)
|
|
81
|
-
npm run link:all
|
|
82
|
-
|
|
83
|
-
# 重新生成 cnb-skill(基于 OpenAPI Swagger)
|
|
84
|
-
npm run gen:skill
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
## 目录结构
|
|
88
|
-
|
|
89
|
-
```
|
|
90
|
-
.
|
|
91
|
-
├── skills/
|
|
92
|
-
│ ├── cnb-skill/ # CNB OpenAPI 交互
|
|
93
|
-
│ ├── cnb-code-import/ # 代码仓库批量迁移
|
|
94
|
-
│ ├── artifact-migrate/ # 制品批量迁移
|
|
95
|
-
│ ├── code-review/ # PR 代码评审
|
|
96
|
-
│ ├── pr-diff/ # PR diff 获取
|
|
97
|
-
│ ├── pr-summary/ # PR 变更总结
|
|
98
|
-
│ ├── auto-code/ # 自动编码
|
|
99
|
-
│ ├── dialog-ci-log/ # CI 日志查询
|
|
100
|
-
│ ├── diagnose-pr-pipeline/ # PR 流水线诊断
|
|
101
|
-
│ ├── tapd-resource-fetcher/ # Tapd 资源获取
|
|
102
|
-
│ └── text-path-converter/ # 路径转换器
|
|
103
|
-
├── bin/
|
|
104
|
-
│ └── cnb.js # cnb-cli 入口
|
|
105
|
-
├── package.json
|
|
106
|
-
└── cag.config.js # OpenAPI 生成配置
|
|
107
|
-
```
|
|
108
|
-
|
|
109
74
|
## 环境变量
|
|
110
75
|
|
|
111
76
|
| 变量名 | 描述 | 是否必需 | 示例值 |
|
package/package.json
CHANGED
|
@@ -1,16 +1,36 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cnbcool/cnb-cli",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "CNB
|
|
5
|
-
"main": "skills/cnb-skill/scripts/index.js",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "CNB OpenAPI 命令行工具,基于 CNB 平台 Swagger 自动生成,支持 Issues、PR、Git、组织管理等全部 API 操作",
|
|
5
|
+
"main": "skills/cnb-skill/scripts/core/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"cnb": "bin/cnb.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"bin/",
|
|
11
|
+
"skills/cnb-skill/scripts/"
|
|
12
|
+
],
|
|
13
|
+
"engines": {
|
|
14
|
+
"node": ">=18.0.0"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"cnb",
|
|
18
|
+
"cli",
|
|
19
|
+
"openapi",
|
|
20
|
+
"devops",
|
|
21
|
+
"git",
|
|
22
|
+
"issues",
|
|
23
|
+
"pull-request"
|
|
24
|
+
],
|
|
25
|
+
"repository": {
|
|
26
|
+
"type": "git",
|
|
27
|
+
"url": "https://cnb.cool/cnb/cnb-cli"
|
|
28
|
+
},
|
|
6
29
|
"scripts": {
|
|
7
30
|
"link:all": "npx skills add ./skills --agent codebuddy --copy -y --skill '*'",
|
|
8
31
|
"link:skill": "npx skills add ./skills --agent codebuddy --copy -y",
|
|
9
32
|
"gen:skill": "npx csg"
|
|
10
33
|
},
|
|
11
|
-
"bin": {
|
|
12
|
-
"cnb": "bin/cnb.js"
|
|
13
|
-
},
|
|
14
34
|
"author": "",
|
|
15
35
|
"license": "MIT",
|
|
16
36
|
"devDependencies": {
|
package/.cnb.yml
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
include:
|
|
2
|
-
# pr 评审后自动合并
|
|
3
|
-
- https://cnb.cool/cnb/cool/pipeline-templates/-/blob/main/.pipeline-for-pr.yml
|
|
4
|
-
|
|
5
|
-
$:
|
|
6
|
-
vscode:
|
|
7
|
-
- docker:
|
|
8
|
-
# 指定开发环境镜像,可以是任意可访问的镜像。
|
|
9
|
-
# 如果 image 指定的镜像中已安装 code-server 代码服务,将使用单容器模式启动开发环境
|
|
10
|
-
# 如果 image 指定的镜像中未安装 code-server 代码服务,将使用双容器模式启动开发环境
|
|
11
|
-
# 如下镜像为 CNB 默认开发环境镜像,已安装代码服务,将使用单容器模式启动开发环境
|
|
12
|
-
# 可按需替换为其他镜像
|
|
13
|
-
image: cnbcool/default-codebuddy-cli-env:latest
|
|
14
|
-
volumes:
|
|
15
|
-
- node_modules
|
|
16
|
-
services:
|
|
17
|
-
- vscode
|
|
18
|
-
- docker
|
|
19
|
-
stages:
|
|
20
|
-
- name: install
|
|
21
|
-
script: npm install
|
|
22
|
-
# tag push 时触发
|
|
23
|
-
tag_push:
|
|
24
|
-
- docker:
|
|
25
|
-
image: node:22
|
|
26
|
-
stages:
|
|
27
|
-
- name: Update version
|
|
28
|
-
# 修改 package.json 中的version为当前tag,但不会提交代码
|
|
29
|
-
script: npm version $CNB_BRANCH --no-git-tag-version
|
|
30
|
-
|
|
31
|
-
- name: npm publish
|
|
32
|
-
image: tencentcom/npm
|
|
33
|
-
imports: https://cnb.cool/cnb-secrets/secrets/-/blob/main/envs/npm_cnbcool.yml
|
|
34
|
-
settings:
|
|
35
|
-
token: $NPM_TOKEN
|
|
36
|
-
folder: ./
|
|
37
|
-
fail_on_version_conflict: true
|
package/DEVELOPMENT.md
DELETED
|
@@ -1,345 +0,0 @@
|
|
|
1
|
-
# 本地开发指南
|
|
2
|
-
|
|
3
|
-
本文档面向参与 CNB Skills 仓库开发的贡献者,介绍如何搭建本地开发环境、理解项目结构和进行日常开发调试。
|
|
4
|
-
|
|
5
|
-
## 环境准备
|
|
6
|
-
|
|
7
|
-
### 系统要求
|
|
8
|
-
|
|
9
|
-
| 依赖 | 版本要求 | 说明 |
|
|
10
|
-
|------|----------|------|
|
|
11
|
-
| Node.js | >= 20.x | 推荐使用 LTS 版本 |
|
|
12
|
-
| npm | >= 10.x | 随 Node.js 自带 |
|
|
13
|
-
| Git | >= 2.x | 代码版本管理 |
|
|
14
|
-
| Docker | 可选 | 部分 skill(如 cnb-code-import、artifact-migrate)需要 Docker 环境 |
|
|
15
|
-
|
|
16
|
-
### 初始化
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
# 克隆仓库
|
|
20
|
-
git clone https://cnb.cool/cnb/skills/cnb-skill.git
|
|
21
|
-
cd cnb-skill
|
|
22
|
-
|
|
23
|
-
# 安装依赖
|
|
24
|
-
npm install
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
### 环境变量
|
|
28
|
-
|
|
29
|
-
在项目根目录创建 `.env` 文件(或者在 shell 中 export),配置以下变量:
|
|
30
|
-
|
|
31
|
-
| 变量名 | 描述 | 是否必需 | 示例值 |
|
|
32
|
-
|--------|------|----------|--------|
|
|
33
|
-
| `CNB_TOKEN` | CNB 平台访问凭证 | **必须** | 在 CNB 平台的个人设置中生成 |
|
|
34
|
-
| `CNB_API_ENDPOINT` | API 端点地址 | **必须** | `https://api.cnb.cool` |
|
|
35
|
-
| `CNB_BRANCH` | 默认分支名 | 选填 | `main` |
|
|
36
|
-
|
|
37
|
-
```bash
|
|
38
|
-
export CNB_TOKEN="your-token-here"
|
|
39
|
-
export CNB_API_ENDPOINT="https://api.cnb.cool"
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
## 项目结构
|
|
43
|
-
|
|
44
|
-
```
|
|
45
|
-
.
|
|
46
|
-
├── skills/ # 所有 skill 的根目录
|
|
47
|
-
│ ├── cnb-skill/ # CNB OpenAPI 交互(核心 skill)
|
|
48
|
-
│ │ ├── SKILL.md # Skill 描述文件
|
|
49
|
-
│ │ └── scripts/ # 脚本目录
|
|
50
|
-
│ │ ├── core/ # 核心模块
|
|
51
|
-
│ │ │ ├── index.js # CLI 入口 & 主逻辑
|
|
52
|
-
│ │ │ ├── core.js # 核心工具函数
|
|
53
|
-
│ │ │ ├── shortcuts.js # 快捷命令定义
|
|
54
|
-
│ │ │ ├── help.json # OpenAPI 生成的帮助数据(~1.3MB)
|
|
55
|
-
│ │ │ ├── config/ # 配置(内含 cag.config.js)
|
|
56
|
-
│ │ │ └── utils/ # 工具函数
|
|
57
|
-
│ │ └── modules/ # API 模块(按资源类型分目录)
|
|
58
|
-
│ │ ├── issues/ # Issue 相关操作
|
|
59
|
-
│ │ ├── pulls/ # PR 相关操作
|
|
60
|
-
│ │ ├── git/ # Git 操作
|
|
61
|
-
│ │ ├── build/ # 流水线构建
|
|
62
|
-
│ │ ├── organizations/ # 组织管理
|
|
63
|
-
│ │ ├── repositories/ # 仓库管理
|
|
64
|
-
│ │ ├── members/ # 成员管理
|
|
65
|
-
│ │ ├── registries/ # 制品库
|
|
66
|
-
│ │ ├── releases/ # 发版管理
|
|
67
|
-
│ │ └── ... # 其他模块
|
|
68
|
-
│ ├── cnb-code-import/ # 代码仓库批量迁移
|
|
69
|
-
│ │ ├── SKILL.md
|
|
70
|
-
│ │ └── scripts/migrate.sh
|
|
71
|
-
│ ├── artifact-migrate/ # 制品批量迁移
|
|
72
|
-
│ │ └── SKILL.md
|
|
73
|
-
│ ├── code-review/ # PR 代码评审
|
|
74
|
-
│ │ ├── SKILL.md
|
|
75
|
-
│ │ └── hooks/hooks.json # PreToolUse 钩子
|
|
76
|
-
│ ├── pr-diff/ # PR diff 获取
|
|
77
|
-
│ │ └── SKILL.md
|
|
78
|
-
│ ├── pr-summary/ # PR 变更总结
|
|
79
|
-
│ │ └── SKILL.md
|
|
80
|
-
│ ├── auto-code/ # 自动编码并创建 PR
|
|
81
|
-
│ │ ├── SKILL.md
|
|
82
|
-
│ │ └── hooks/hooks.json # PreToolUse 钩子
|
|
83
|
-
│ ├── dialog-ci-log/ # CI 流水线日志查询
|
|
84
|
-
│ │ ├── SKILL.md
|
|
85
|
-
│ │ └── scrips/get-failed-stage-logs.js
|
|
86
|
-
│ ├── diagnose-pr-pipeline/ # PR 流水线故障诊断
|
|
87
|
-
│ │ └── SKILL.md
|
|
88
|
-
│ ├── tapd-resource-fetcher/ # Tapd 资源获取
|
|
89
|
-
│ │ └── SKILL.md
|
|
90
|
-
│ └── text-path-converter/ # 相对路径转绝对路径
|
|
91
|
-
│ ├── SKILL.md
|
|
92
|
-
│ └── scripts/convertLink.js
|
|
93
|
-
├── bin/
|
|
94
|
-
│ └── cnb.js # cnb-cli 可执行入口
|
|
95
|
-
├── cag.config.js # OpenAPI 代码生成配置(根目录)
|
|
96
|
-
├── package.json
|
|
97
|
-
├── package-lock.json
|
|
98
|
-
├── test.js
|
|
99
|
-
├── .cnb.yml # CNB CI/CD 配置
|
|
100
|
-
└── README.md
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
## NPM Scripts
|
|
104
|
-
|
|
105
|
-
| 命令 | 说明 |
|
|
106
|
-
|------|------|
|
|
107
|
-
| `npm run link:all` | 将 `skills/` 下所有 skill 安装到本地 CodeBuddy(`--copy` 模式) |
|
|
108
|
-
| `npm run link:skill` | 交互式选择 skill 安装到本地 CodeBuddy |
|
|
109
|
-
| `npm run gen:skill` | 基于 OpenAPI Swagger 重新生成 cnb-skill 的 scripts 代码 |
|
|
110
|
-
|
|
111
|
-
## 开发流程
|
|
112
|
-
|
|
113
|
-
### 1. 安装 Skill 到本地 CodeBuddy
|
|
114
|
-
|
|
115
|
-
开发过程中,需要将 skill 安装到本地 CodeBuddy 才能测试效果:
|
|
116
|
-
|
|
117
|
-
```bash
|
|
118
|
-
# 安装所有 skill
|
|
119
|
-
npm run link:all
|
|
120
|
-
|
|
121
|
-
# 或只安装指定 skill(交互式选择)
|
|
122
|
-
npm run link:skill
|
|
123
|
-
|
|
124
|
-
# 或直接用 npx 命令安装指定 skill
|
|
125
|
-
npx skills add ./skills --agent codebuddy --copy -y --skill cnb-skill
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
> **说明**:`--copy` 参数会将文件拷贝到 `~/.codebuddy/skills/` 目录下,修改源代码后需要重新执行安装命令来更新。
|
|
129
|
-
|
|
130
|
-
### 2. 修改 SKILL.md
|
|
131
|
-
|
|
132
|
-
每个 skill 的核心是 `SKILL.md` 文件,它包含两部分:
|
|
133
|
-
|
|
134
|
-
**YAML Frontmatter**(必须):
|
|
135
|
-
|
|
136
|
-
```yaml
|
|
137
|
-
---
|
|
138
|
-
name: my-skill # Skill 唯一标识(必须)
|
|
139
|
-
description: 这个 skill 做什么 # Skill 描述(必须,用于 AI 触发匹配)
|
|
140
|
-
allowed-tools: Bash,Read,Write # 允许使用的工具列表(可选)
|
|
141
|
-
requires: # 运行依赖(可选)
|
|
142
|
-
bins: [node]
|
|
143
|
-
files: [scripts/xxx.js]
|
|
144
|
-
---
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
**Markdown 正文**:Skill 的详细行为指令,AI 会完整阅读并按照其中的步骤执行。
|
|
148
|
-
|
|
149
|
-
### 3. 开发带脚本的 Skill
|
|
150
|
-
|
|
151
|
-
如果 skill 需要调用自定义脚本(如 `cnb-skill`、`text-path-converter`、`dialog-ci-log`),脚本放在对应 skill 的 `scripts/` 目录中。
|
|
152
|
-
|
|
153
|
-
在 SKILL.md 中通过以下方式引用脚本:
|
|
154
|
-
|
|
155
|
-
```markdown
|
|
156
|
-
## 执行步骤
|
|
157
|
-
|
|
158
|
-
调用以下脚本进行处理:
|
|
159
|
-
|
|
160
|
-
\```bash
|
|
161
|
-
node ~/.codebuddy/skills/<skill-name>/scripts/your-script.js "$arg1" "$arg2"
|
|
162
|
-
\```
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
> **注意**:安装后脚本路径为 `~/.codebuddy/skills/<skill-name>/scripts/`,编写 SKILL.md 时需使用安装后的路径。
|
|
166
|
-
|
|
167
|
-
### 4. 开发带 Hooks 的 Skill
|
|
168
|
-
|
|
169
|
-
Hooks 用于在 AI 对话中自动触发 skill。当前支持的 hook 类型是 `PreToolUse`。
|
|
170
|
-
|
|
171
|
-
在 skill 目录下创建 `hooks/hooks.json`:
|
|
172
|
-
|
|
173
|
-
```json
|
|
174
|
-
{
|
|
175
|
-
"hooks": {
|
|
176
|
-
"PreToolUse": [
|
|
177
|
-
{
|
|
178
|
-
"matcher": "(?i)(关键词1|关键词2).*操作描述",
|
|
179
|
-
"hooks": [
|
|
180
|
-
{
|
|
181
|
-
"type": "prompt",
|
|
182
|
-
"prompt": "检测到用户意图,请使用 xxx 技能来完成任务。"
|
|
183
|
-
}
|
|
184
|
-
]
|
|
185
|
-
}
|
|
186
|
-
]
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
**`matcher`** 是正则表达式,匹配用户输入。当匹配成功时,`prompt` 中的内容会被注入到 AI 的上下文中。
|
|
192
|
-
|
|
193
|
-
### 5. 重新生成 cnb-skill(OpenAPI 代码生成)
|
|
194
|
-
|
|
195
|
-
`cnb-skill` 的 `scripts/modules/` 下的代码是基于 CNB OpenAPI Swagger 自动生成的。
|
|
196
|
-
|
|
197
|
-
生成配置分为两个层级:
|
|
198
|
-
|
|
199
|
-
- **根目录** `cag.config.js`:开发时使用的配置,`skillsOutputDir` 指向 `./skills/cnb-skill`
|
|
200
|
-
- **skill 内** `scripts/core/config/cag.config.js`:安装到用户机器后使用的配置,`skillsOutputDir` 指向 `./skills`
|
|
201
|
-
|
|
202
|
-
当 OpenAPI 有更新时,执行重新生成:
|
|
203
|
-
|
|
204
|
-
```bash
|
|
205
|
-
# 使用根目录的 cag.config.js 重新生成
|
|
206
|
-
npm run gen:skill
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
生成后检查 `skills/cnb-skill/scripts/modules/` 下的变更是否正确,然后重新安装到本地测试:
|
|
210
|
-
|
|
211
|
-
```bash
|
|
212
|
-
npm run link:all
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
### 6. 添加新的 Skill
|
|
216
|
-
|
|
217
|
-
在 `skills/` 目录下创建新的子目录:
|
|
218
|
-
|
|
219
|
-
```bash
|
|
220
|
-
mkdir -p skills/my-new-skill
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
创建 `SKILL.md`(必须):
|
|
224
|
-
|
|
225
|
-
```markdown
|
|
226
|
-
---
|
|
227
|
-
name: my-new-skill
|
|
228
|
-
description: 描述你的 skill 功能,要足够准确以便 AI 触发匹配
|
|
229
|
-
---
|
|
230
|
-
|
|
231
|
-
# My New Skill
|
|
232
|
-
|
|
233
|
-
## 使用场景
|
|
234
|
-
|
|
235
|
-
描述何时应该使用这个 skill。
|
|
236
|
-
|
|
237
|
-
## 执行步骤
|
|
238
|
-
|
|
239
|
-
### 1. 第一步
|
|
240
|
-
...
|
|
241
|
-
|
|
242
|
-
### 2. 第二步
|
|
243
|
-
...
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
如果需要脚本,创建 `scripts/` 目录并放入脚本文件。如果需要 hooks,创建 `hooks/hooks.json`。
|
|
247
|
-
|
|
248
|
-
完成后安装并测试:
|
|
249
|
-
|
|
250
|
-
```bash
|
|
251
|
-
npx skills add ./skills --agent codebuddy --copy -y --skill my-new-skill
|
|
252
|
-
```
|
|
253
|
-
|
|
254
|
-
最后记得更新 `README.md` 中的 skill 列表。
|
|
255
|
-
|
|
256
|
-
## Skill 间依赖关系
|
|
257
|
-
|
|
258
|
-
部分 skill 之间存在依赖调用关系:
|
|
259
|
-
|
|
260
|
-
```
|
|
261
|
-
code-review ──依赖──▶ pr-diff ──依赖──▶ cnb-skill
|
|
262
|
-
pr-summary ──依赖──▶ pr-diff ──依赖──▶ cnb-skill
|
|
263
|
-
auto-code ──依赖──▶ cnb-skill
|
|
264
|
-
diagnose-pr-pipeline ──依赖──▶ cnb-skill
|
|
265
|
-
dialog-ci-log ──依赖──▶ cnb-skill
|
|
266
|
-
text-path-converter ──被──▶ cnb-skill 使用(响应转换器)
|
|
267
|
-
```
|
|
268
|
-
|
|
269
|
-
> **提示**:开发涉及上下游依赖的 skill 时,确保相关 skill 都已安装到本地。
|
|
270
|
-
|
|
271
|
-
## cnb-cli 调试
|
|
272
|
-
|
|
273
|
-
`bin/cnb.js` 是 cnb-cli 的入口文件,全局安装后可通过 `cnb` 命令使用。本地调试方式:
|
|
274
|
-
|
|
275
|
-
```bash
|
|
276
|
-
# 直接运行
|
|
277
|
-
node bin/cnb.js --help
|
|
278
|
-
|
|
279
|
-
# 或者通过 npm link 使 cnb 命令可用
|
|
280
|
-
npm link
|
|
281
|
-
cnb --help
|
|
282
|
-
```
|
|
283
|
-
|
|
284
|
-
## CI/CD 发布
|
|
285
|
-
|
|
286
|
-
项目通过 `.cnb.yml` 配置了自动发布流程:
|
|
287
|
-
|
|
288
|
-
- **Tag Push 触发**:当推送新的 Git tag 时,会自动将 cnb-cli 发布到 CNB NPM Registry
|
|
289
|
-
- 发布流程:自动更新 `package.json` 版本号 → 发布到 `https://npm.cnb.cool/cnb/skills/cnb-cli/-/packages/`
|
|
290
|
-
|
|
291
|
-
发版步骤:
|
|
292
|
-
|
|
293
|
-
```bash
|
|
294
|
-
# 创建并推送 tag
|
|
295
|
-
git tag v1.2.3
|
|
296
|
-
git push origin v1.2.3
|
|
297
|
-
```
|
|
298
|
-
|
|
299
|
-
## 常见问题
|
|
300
|
-
|
|
301
|
-
### Q: 修改了 SKILL.md 但 CodeBuddy 没有生效?
|
|
302
|
-
|
|
303
|
-
Skill 安装使用 `--copy` 模式,修改源文件后需要重新执行安装命令:
|
|
304
|
-
|
|
305
|
-
```bash
|
|
306
|
-
npm run link:all
|
|
307
|
-
```
|
|
308
|
-
|
|
309
|
-
### Q: `npm run gen:skill` 报错?
|
|
310
|
-
|
|
311
|
-
检查 `cag.config.js` 中的 `target` URL 是否可访问。该 URL 指向 CNB OpenAPI 的 Swagger JSON:
|
|
312
|
-
|
|
313
|
-
```
|
|
314
|
-
https://api.cnb.cool/swagger.json
|
|
315
|
-
```
|
|
316
|
-
|
|
317
|
-
如果在外网环境开发,可能需要配置代理或使用本地缓存的 swagger.json。
|
|
318
|
-
|
|
319
|
-
### Q: 如何只测试单个 skill?
|
|
320
|
-
|
|
321
|
-
```bash
|
|
322
|
-
npx skills add ./skills --agent codebuddy --copy -y --skill <skill-name>
|
|
323
|
-
```
|
|
324
|
-
|
|
325
|
-
### Q: Hooks 不触发怎么办?
|
|
326
|
-
|
|
327
|
-
1. 检查 `hooks/hooks.json` 的 JSON 格式是否正确
|
|
328
|
-
2. 检查 `matcher` 正则表达式是否能匹配用户输入
|
|
329
|
-
3. 确保 skill 已安装到本地(`npm run link:all`)
|
|
330
|
-
4. 在 CodeBuddy 中重新加载 skill(可能需要重启)
|
|
331
|
-
|
|
332
|
-
### Q: 如何查看已安装的 skill 列表?
|
|
333
|
-
|
|
334
|
-
```bash
|
|
335
|
-
ls ~/.codebuddy/skills/
|
|
336
|
-
```
|
|
337
|
-
|
|
338
|
-
### Q: Docker 相关的 skill 本地怎么测试?
|
|
339
|
-
|
|
340
|
-
`cnb-code-import` 和 `artifact-migrate` 需要 Docker 环境。确保本地安装了 Docker 并可正常运行:
|
|
341
|
-
|
|
342
|
-
```bash
|
|
343
|
-
docker --version
|
|
344
|
-
docker run --rm hello-world
|
|
345
|
-
```
|
package/cag.config.js
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
module.exports = {
|
|
2
|
-
target: 'https://api.cnb.cool/swagger.json',
|
|
3
|
-
skillsOutputDir: `./skills/cnb-skill`,
|
|
4
|
-
// skillsDev: true,
|
|
5
|
-
skillConfig: {
|
|
6
|
-
fetchConfig: {
|
|
7
|
-
responseConverter: {
|
|
8
|
-
'get@/{repo}/-/issues/{number}': {
|
|
9
|
-
converter: 'convert-link',
|
|
10
|
-
handler: (handler, fetchOriginParams, data) => {
|
|
11
|
-
data.body = handler(data.body, fetchOriginParams.path.repo);
|
|
12
|
-
return data
|
|
13
|
-
}
|
|
14
|
-
},
|
|
15
|
-
'get@/{repo}/-/issues/{number}/comments/{comment_id}': {
|
|
16
|
-
converter: 'convert-link',
|
|
17
|
-
handler: (handler, fetchOriginParams, data) => {
|
|
18
|
-
data.body = handler(data.body, fetchOriginParams.path.repo);
|
|
19
|
-
return data
|
|
20
|
-
}
|
|
21
|
-
},
|
|
22
|
-
'get@/{repo}/-/issues/{number}/comments': {
|
|
23
|
-
converter: 'convert-link',
|
|
24
|
-
handler: (handler, fetchOriginParams, data) => {
|
|
25
|
-
for (let i = 0; i < data.length; i++) {
|
|
26
|
-
data[i].body = handler(data[i].body, fetchOriginParams.path.repo);
|
|
27
|
-
}
|
|
28
|
-
return data
|
|
29
|
-
}
|
|
30
|
-
},
|
|
31
|
-
'get@/{repo}/-/pulls/{number}': {
|
|
32
|
-
converter: 'convert-link',
|
|
33
|
-
handler: (handler, fetchOriginParams, data) => {
|
|
34
|
-
data.body = handler(data.body, fetchOriginParams.path.repo);
|
|
35
|
-
return data
|
|
36
|
-
}
|
|
37
|
-
},
|
|
38
|
-
'get@/{repo}/-/pulls/{number}/comments/{comment_id}': {
|
|
39
|
-
converter: 'convert-link',
|
|
40
|
-
handler: (handler, fetchOriginParams, data) => {
|
|
41
|
-
data.body = handler(data.body, fetchOriginParams.path.repo);
|
|
42
|
-
return data
|
|
43
|
-
}
|
|
44
|
-
},
|
|
45
|
-
'get@/{repo}/-/pulls/{number}/comments': {
|
|
46
|
-
converter: 'convert-link',
|
|
47
|
-
handler: (handler, fetchOriginParams, data) => {
|
|
48
|
-
for (let i = 0; i < data.length; i++) {
|
|
49
|
-
data[i].body = handler(data[i].body, fetchOriginParams.path.repo);
|
|
50
|
-
}
|
|
51
|
-
return data
|
|
52
|
-
}
|
|
53
|
-
},
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
Binary file
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
# Skill:CNB 制品批量迁移工具
|
|
3
|
-
|
|
4
|
-
## 📌 基本信息
|
|
5
|
-
|
|
6
|
-
| 字段 | 值 |
|
|
7
|
-
|------|------|
|
|
8
|
-
| **名称** | artifact-migrate |
|
|
9
|
-
| **版本** | 1.0.0 |
|
|
10
|
-
| **作者** | CNB Team |
|
|
11
|
-
| **适用平台** | OpenClaw / CoeBuddy 及其他兼容智能体平台 |
|
|
12
|
-
| **许可证** | MIT |
|
|
13
|
-
|
|
14
|
-
## 🎯 Skill 目标
|
|
15
|
-
|
|
16
|
-
该 Skill 提供一个 Docker 化的制品批量迁移工具,帮助用户将 **Maven、NPM、Docker、NuGet、Composer、PyPI、Conan、Cargo** 等多种类型的制品,从 **CODING / CNB / CodeUp / Nexus / Jfrog / TCR / 标准协议仓库**一键迁移至 **CNB 制品仓库**。
|
|
17
|
-
|
|
18
|
-
工具内置以下高级特性:
|
|
19
|
-
- ✅ **断点续传**:中断后再次运行可自动从断点继续,优先重试失败制品
|
|
20
|
-
- ✅ **正则过滤**:通过包含/排除正则灵活控制迁移范围
|
|
21
|
-
- ✅ **并发迁移**:生产者-消费者模式,支持配置并发数(最大 256)
|
|
22
|
-
- ✅ **增量迁移**:自动跳过目标仓库已存在的版本
|
|
23
|
-
- ✅ **统计报告**:迁移结束自动输出总数 / 成功数 / 存在数 / 忽略数 / 错误数
|
|
24
|
-
|
|
25
|
-
## 📋 支持矩阵
|
|
26
|
-
|
|
27
|
-
### 制品类型 × 源仓库平台
|
|
28
|
-
|
|
29
|
-
| 制品类型 | CODING | CNB | CodeUp | Nexus | Jfrog | TCR | Other |
|
|
30
|
-
|----------|:------:|:---:|:------:|:-----:|:-----:|:---:|:-----:|
|
|
31
|
-
| Maven | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ |
|
|
32
|
-
| NPM | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ |
|
|
33
|
-
| Docker | ✓ | ✓ | ✗ | ✓ | ✓ | ✓ | ✓ |
|
|
34
|
-
| NuGet | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ |
|
|
35
|
-
| Composer | ✓ | ✓ | ✗ | ✗ | ✓ | ✗ | ✓ |
|
|
36
|
-
| PyPI | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ |
|
|
37
|
-
| Conan | ✓ | ✓ | ✗ | ✓ | ✓ | ✗ | ✗ |
|
|
38
|
-
| Cargo | ✗ | ✓ | ✗ | ✓ | ✓ | ✗ | ✓ |
|
|
39
|
-
|
|
40
|
-
## 🔧 前置条件
|
|
41
|
-
|
|
42
|
-
| 条件 | 说明 |
|
|
43
|
-
|------|------|
|
|
44
|
-
| Docker ≥ 19.03 | 或 Podman ≥ 3.0,用于运行迁移工具容器 |
|
|
45
|
-
| 源仓库读取权限 | 用户名 + 密码/Token(公开仓库可不填) |
|
|
46
|
-
| 目标仓库写入权限 | CNB 制品仓库的访问 Token |
|
|
47
|
-
|
|
48
|
-
## 🚀 快速开始
|
|
49
|
-
|
|
50
|
-
```bash
|
|
51
|
-
docker run --rm \
|
|
52
|
-
-e ARTIFACT_TYPE=npm \
|
|
53
|
-
-e SRC_REGISTRY_TYPE=coding \
|
|
54
|
-
-e SRC_REGISTRY_URL="https://example-npm.pkg.coding.net/my-project/my-repo/" \
|
|
55
|
-
-e SRC_REGISTRY_USERNAME="my-username" \
|
|
56
|
-
-e SRC_REGISTRY_PASSWORD=xxx \
|
|
57
|
-
-e SRC_CODING_DISABLE_THIRD_PACKAGE=true \
|
|
58
|
-
-e TAR_REGISTRY_URL="https://npm.cnb.cool/my-project2/my-repo2/-/packages/" \
|
|
59
|
-
-e TAR_REGISTRY_PASSWORD=xxx \
|
|
60
|
-
-u root \
|
|
61
|
-
-v $(pwd)/log:/app/log \
|
|
62
|
-
docker.cnb.cool/cnb/plugins/cnbcool/artifact-migrate:latest
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
## 📖 详细文档
|
|
66
|
-
|
|
67
|
-
完整的 Skill 文档请查看 [skill.md](skill/skill.md),包含:
|
|
68
|
-
|
|
69
|
-
- ⚙️ 完整参数说明(25+ 个配置参数)
|
|
70
|
-
- 🚀 详细使用步骤
|
|
71
|
-
- 📝 5 个完整示例(全量迁移 / 正则过滤 / Docker 迁移 / 断点续传 / 云原生构建)
|
|
72
|
-
- 🔄 迁移流程图
|
|
73
|
-
- 🧩 核心架构与逻辑说明
|
|
74
|
-
- ⚠️ 注意事项与常见错误排查
|
|
75
|
-
- 📊 输出结果说明与智能体总结模板
|
|
76
|
-
|
|
77
|
-
## 🏷️ 标签
|
|
78
|
-
|
|
79
|
-
`artifact` `migration` `devops` `cicd` `docker` `maven` `npm` `nuget` `pypi` `composer` `conan` `cargo`
|