@tencent-ai/codebuddy-code 2.76.0-next.949c0a4.20260403 → 2.77.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/CHANGELOG.md +27 -0
- package/dist/codebuddy-headless.js +88 -88
- package/dist/codebuddy.js +95 -95
- package/dist/web-ui/assets/{index-BC_Bh2yt.js → index-C25QEkQn.js} +107 -107
- package/dist/web-ui/docs/cn/cli/cli-reference.md +1 -0
- package/dist/web-ui/docs/cn/cli/env-vars.md +2 -0
- package/dist/web-ui/docs/cn/cli/http-api.md +117 -2
- package/dist/web-ui/docs/cn/cli/plugin-marketplaces.md +338 -61
- package/dist/web-ui/docs/cn/cli/plugins-reference.md +484 -420
- package/dist/web-ui/docs/cn/cli/plugins.md +333 -458
- package/dist/web-ui/docs/cn/cli/release-notes/README.md +5 -0
- package/dist/web-ui/docs/cn/cli/release-notes/v2.72.0.md +26 -0
- package/dist/web-ui/docs/cn/cli/release-notes/v2.73.0.md +21 -0
- package/dist/web-ui/docs/cn/cli/release-notes/v2.74.0.md +15 -0
- package/dist/web-ui/docs/cn/cli/release-notes/v2.75.0.md +6 -0
- package/dist/web-ui/docs/cn/cli/release-notes/v2.76.0.md +9 -0
- package/dist/web-ui/docs/cn/cli/slash-commands.md +3 -0
- package/dist/web-ui/docs/en/cli/cli-reference.md +1 -0
- package/dist/web-ui/docs/en/cli/release-notes/README.md +5 -0
- package/dist/web-ui/docs/en/cli/release-notes/v2.72.0.md +26 -0
- package/dist/web-ui/docs/en/cli/release-notes/v2.73.0.md +21 -0
- package/dist/web-ui/docs/en/cli/release-notes/v2.74.0.md +15 -0
- package/dist/web-ui/docs/en/cli/release-notes/v2.75.0.md +6 -0
- package/dist/web-ui/docs/en/cli/release-notes/v2.76.0.md +9 -0
- package/dist/web-ui/docs/en/cli/slash-commands.md +3 -0
- package/dist/web-ui/docs/search-index-en.json +1 -1
- package/dist/web-ui/docs/search-index-zh.json +1 -1
- package/dist/web-ui/docs/sidebar-en.json +1 -1
- package/dist/web-ui/docs/sidebar-zh.json +1 -1
- package/dist/web-ui/index.html +1 -1
- package/package.json +2 -3
- package/product.cloudhosted.json +2 -2
- package/product.internal.json +2 -2
- package/product.ioa.json +2 -2
- package/product.json +3 -2
- package/product.selfhosted.json +2 -2
|
@@ -1,125 +1,109 @@
|
|
|
1
1
|
# CodeBuddy 插件参考文档
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> 完整的 CodeBuddy 插件系统技术参考,包括组件规范、CLI 命令和开发工具。
|
|
4
4
|
|
|
5
|
-
CodeBuddy
|
|
5
|
+
**插件**是一个自包含的组件目录,用于扩展 CodeBuddy 的自定义功能。插件组件包括技能 (Skills)、代理 (Agents)、钩子 (Hooks)、MCP 服务器和 LSP 服务器。
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
name: agent-name
|
|
8
|
+
description: 代理的专长和调用时机
|
|
9
|
+
model: sonnet
|
|
10
|
+
effort: medium
|
|
11
|
+
maxTurns: 20
|
|
12
|
+
disallowedTools: Write, Edit
|
|
11
13
|
---
|
|
12
14
|
|
|
13
|
-
|
|
15
|
+
代理的详细系统提示词,描述其角色、专长和行为。
|
|
14
16
|
```
|
|
15
17
|
|
|
16
|
-
|
|
17
|
-
- 支持子目录嵌套组织
|
|
18
|
-
- 子目录路径会转换为命令名的一部分,使用冒号分隔
|
|
19
|
-
- 例如: `commands/deploy/production.md` → 命令名为 `deploy:production`
|
|
18
|
+
插件代理支持以下 frontmatter 字段:`name`、`description`、`model`、`effort`、`maxTurns`、`tools`、`disallowedTools`、`skills`、`memory`、`background` 和 `isolation`。`isolation` 的唯一有效值为 `"worktree"`。出于安全原因,插件代理不支持 `hooks`、`mcpServers` 和 `permissionMode` 字段。
|
|
20
19
|
|
|
21
|
-
|
|
20
|
+
**集成方式**:
|
|
22
21
|
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
- 代理出现在 `/agents` 界面中
|
|
23
|
+
- AI 助手可根据任务上下文自动调用代理
|
|
24
|
+
- 用户也可手动调用代理
|
|
25
|
+
- 插件代理与内置代理协同工作
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
```markdown
|
|
28
|
-
---
|
|
29
|
-
name:代理名称(可选,默认使用文件名)
|
|
30
|
-
description:代理描述
|
|
31
|
-
model:使用的模型ID或名称
|
|
32
|
-
tools: Read,Write,Bash(可用工具列表,逗号分隔)
|
|
33
|
-
color: #FF5733(代理显示颜色,可选)
|
|
34
|
-
---
|
|
27
|
+
详见 [Subagents](sub-agents.md)。
|
|
35
28
|
|
|
36
|
-
|
|
37
|
-
```
|
|
29
|
+
### 3. Hooks(钩子)
|
|
38
30
|
|
|
39
|
-
|
|
40
|
-
- 代理可以作为工具被主代理调用
|
|
41
|
-
- 支持自定义工具列表
|
|
42
|
-
- 自动生成源标签标识来源
|
|
31
|
+
插件可以提供事件处理器,自动响应 CodeBuddy 事件。
|
|
43
32
|
|
|
44
|
-
|
|
33
|
+
**位置**:插件根目录的 `hooks/hooks.json`,或在 `plugin.json` 中内联配置
|
|
45
34
|
|
|
46
|
-
**位置**:插件根目录的 `skills/` 目录
|
|
47
|
-
**格式**:每个技能一个子目录,包含 `SKILL.md` 文件
|
|
48
|
-
|
|
49
|
-
**目录结构**:
|
|
50
|
-
```
|
|
51
|
-
skills/
|
|
52
|
-
├── pdf-processor/
|
|
53
|
-
│ ├── SKILL.md
|
|
54
|
-
│ ├── reference.md (可选)
|
|
55
|
-
│ └── scripts/ (可选)
|
|
56
|
-
└── code-reviewer/
|
|
57
|
-
└── SKILL.md
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
**SKILL.md Frontmatter 配置**:
|
|
61
|
-
```markdown
|
|
62
|
-
---
|
|
63
|
-
name:技能名称(可选,默认使用目录名)
|
|
64
|
-
description:技能描述
|
|
65
|
-
allowed-tools: Read,Write,Bash(允许使用的工具列表)
|
|
66
|
-
---
|
|
67
|
-
|
|
68
|
-
技能的指令内容
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
**特性**:
|
|
72
|
-
- 技能可以包含辅助文件和脚本
|
|
73
|
-
- 技能的 `baseDirectory` 指向技能目录,可访问同目录下的资源文件
|
|
74
|
-
|
|
75
|
-
### 4. Hooks (钩子)
|
|
76
|
-
|
|
77
|
-
**位置**:插件根目录的 `hooks/hooks.json`,或在 `plugin.json` 中通过 PluginInfo 扩展字段配置
|
|
78
35
|
**格式**: JSON 配置,包含事件匹配器和操作
|
|
79
36
|
|
|
80
37
|
**配置示例**:
|
|
38
|
+
|
|
81
39
|
```json
|
|
82
40
|
{
|
|
83
|
-
"
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
41
|
+
"hooks": {
|
|
42
|
+
"PostToolUse": [
|
|
43
|
+
{
|
|
44
|
+
"matcher": "Write|Edit",
|
|
45
|
+
"hooks": [
|
|
46
|
+
{
|
|
47
|
+
"type": "command",
|
|
48
|
+
"command": "${CODEBUDDY_PLUGIN_ROOT}/scripts/format-code.sh"
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
]
|
|
53
|
+
}
|
|
95
54
|
}
|
|
96
55
|
```
|
|
97
56
|
|
|
98
57
|
**可用事件**:
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
58
|
+
|
|
59
|
+
插件钩子响应与用户定义钩子相同的生命周期事件:
|
|
60
|
+
|
|
61
|
+
| 事件 | 触发时机 |
|
|
62
|
+
|------|----------|
|
|
63
|
+
| `SessionStart` | 会话开始或恢复时 |
|
|
64
|
+
| `UserPromptSubmit` | 用户提交提示时,在 AI 处理之前 |
|
|
65
|
+
| `PreToolUse` | 工具调用执行前,可以阻断 |
|
|
66
|
+
| `PermissionRequest` | 权限对话框出现时 |
|
|
67
|
+
| `PermissionDenied` | 工具调用被自动模式分类器拒绝时。返回 `{retry: true}` 告知模型可重试 |
|
|
68
|
+
| `PostToolUse` | 工具调用成功后 |
|
|
69
|
+
| `PostToolUseFailure` | 工具调用失败后 |
|
|
70
|
+
| `Notification` | CodeBuddy 发送通知时 |
|
|
71
|
+
| `SubagentStart` | 子代理启动时 |
|
|
72
|
+
| `SubagentStop` | 子代理完成时 |
|
|
73
|
+
| `TaskCreated` | 通过 `TaskCreate` 创建任务时 |
|
|
74
|
+
| `TaskCompleted` | 任务被标记为已完成时 |
|
|
75
|
+
| `Stop` | AI 完成响应时 |
|
|
76
|
+
| `StopFailure` | 轮次因 API 错误结束时。输出和退出码被忽略 |
|
|
77
|
+
| `TeammateIdle` | 团队成员即将进入空闲时 |
|
|
78
|
+
| `InstructionsLoaded` | CODEBUDDY.md 或 `.codebuddy/rules/*.md` 文件加载到上下文时 |
|
|
79
|
+
| `ConfigChange` | 会话期间配置文件变更时 |
|
|
80
|
+
| `CwdChanged` | 工作目录变更时(例如 AI 执行 `cd` 命令) |
|
|
81
|
+
| `FileChanged` | 监视的文件在磁盘上变更时。`matcher` 字段指定要监视的文件名 |
|
|
82
|
+
| `WorktreeCreate` | 通过 `--worktree` 或 `isolation: "worktree"` 创建工作树时 |
|
|
83
|
+
| `WorktreeRemove` | 工作树被移除时(会话退出或子代理完成时) |
|
|
84
|
+
| `PreCompact` | 上下文压缩之前 |
|
|
85
|
+
| `PostCompact` | 上下文压缩完成后 |
|
|
86
|
+
| `Elicitation` | MCP 服务器在工具调用期间请求用户输入时 |
|
|
87
|
+
| `ElicitationResult` | 用户响应 MCP elicitation 后,响应发回服务器之前 |
|
|
88
|
+
| `SessionEnd` | 会话终止时 |
|
|
108
89
|
|
|
109
90
|
**钩子类型**:
|
|
91
|
+
|
|
110
92
|
- `command`:执行 shell 命令或脚本
|
|
93
|
+
- `http`:将事件 JSON 作为 POST 请求发送到 URL
|
|
94
|
+
- `prompt`:使用 LLM 评估提示词(使用 `$ARGUMENTS` 占位符获取上下文)
|
|
95
|
+
- `agent`:运行带工具的代理验证器,用于复杂验证任务
|
|
96
|
+
|
|
97
|
+
### 4. MCP Servers(MCP 服务器)
|
|
111
98
|
|
|
112
|
-
|
|
113
|
-
- 支持正则表达式匹配工具名称
|
|
114
|
-
- 例如: `"Write|Edit"` 匹配 Write 或 Edit 工具
|
|
99
|
+
插件可以捆绑 Model Context Protocol (MCP) 服务器,将 CodeBuddy 与外部工具和服务连接。
|
|
115
100
|
|
|
116
|
-
|
|
101
|
+
**位置**:插件根目录的 `.mcp.json`,或在 `plugin.json` 中内联配置
|
|
117
102
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
103
|
+
**格式**: 标准 MCP 服务器配置
|
|
104
|
+
|
|
105
|
+
**配置示例**:
|
|
121
106
|
|
|
122
|
-
**配置示例** (.mcp.json):
|
|
123
107
|
```json
|
|
124
108
|
{
|
|
125
109
|
"mcpServers": {
|
|
@@ -140,11 +124,13 @@ allowed-tools: Read,Write,Bash(允许使用的工具列表)
|
|
|
140
124
|
```
|
|
141
125
|
|
|
142
126
|
**集成行为**:
|
|
127
|
+
|
|
143
128
|
- 插件启用时自动启动 MCP 服务器
|
|
144
129
|
- 服务器作为标准 MCP 工具出现在工具包中
|
|
145
130
|
- 服务器功能与现有工具无缝集成
|
|
131
|
+
- 插件服务器可独立于用户 MCP 服务器进行配置
|
|
146
132
|
|
|
147
|
-
###
|
|
133
|
+
### 5. LSP Servers(LSP 服务器)
|
|
148
134
|
|
|
149
135
|
> **提示**: 需要使用 LSP 插件? 可从官方市场安装——在 `/plugin` Discover 标签中搜索 "lsp"。本节介绍如何为官方市场未涵盖的语言创建 LSP 插件。
|
|
150
136
|
|
|
@@ -212,7 +198,6 @@ LSP 集成提供:
|
|
|
212
198
|
| `shutdownTimeout` | 等待优雅关闭的最大时间(毫秒) |
|
|
213
199
|
| `restartOnCrash` | 服务器崩溃时是否自动重启 |
|
|
214
200
|
| `maxRestarts` | 放弃前的最大重启尝试次数 |
|
|
215
|
-
| `loggingConfig` | 调试日志配置(见下文) |
|
|
216
201
|
|
|
217
202
|
> **警告**: **您必须单独安装语言服务器二进制文件。** LSP 插件配置 CodeBuddy 如何连接到语言服务器,但不包含服务器本身。如果在 `/plugin` Errors 标签中看到 `Executable not found in $PATH` 错误,请为您的语言安装所需的二进制文件。
|
|
218
203
|
|
|
@@ -228,7 +213,26 @@ LSP 集成提供:
|
|
|
228
213
|
|
|
229
214
|
---
|
|
230
215
|
|
|
231
|
-
##
|
|
216
|
+
## 二、插件安装作用域
|
|
217
|
+
|
|
218
|
+
安装插件时,选择一个**作用域**来决定插件的可用范围:
|
|
219
|
+
|
|
220
|
+
| 作用域 | 设置文件 | 使用场景 |
|
|
221
|
+
| :--- | :--- | :--- |
|
|
222
|
+
| `user` | `~/.codebuddy/settings.json` | 个人插件,所有项目可用(默认) |
|
|
223
|
+
| `project` | `.codebuddy/settings.json` | 团队插件,通过版本控制共享 |
|
|
224
|
+
| `local` | `.codebuddy/settings.local.json` | 项目特定插件,被 gitignore |
|
|
225
|
+
| `managed` | 托管设置 | 托管插件(只读,仅支持更新) |
|
|
226
|
+
|
|
227
|
+
插件使用与其他 CodeBuddy 配置相同的作用域系统。详见 [Settings](settings.md)。
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## 三、插件清单架构(plugin.json)
|
|
232
|
+
|
|
233
|
+
`.codebuddy-plugin/plugin.json`(或 `.claude-plugin/plugin.json`)文件定义插件的元数据和配置。本节记录所有支持的字段和选项。
|
|
234
|
+
|
|
235
|
+
清单是可选的。如果省略,CodeBuddy 会自动发现[默认位置](#文件位置参考)中的组件,并从目录名派生插件名称。当需要提供元数据或自定义组件路径时使用清单。
|
|
232
236
|
|
|
233
237
|
### 完整架构示例
|
|
234
238
|
|
|
@@ -246,108 +250,131 @@ LSP 集成提供:
|
|
|
246
250
|
"repository": "https://github.com/author/plugin",
|
|
247
251
|
"license": "MIT",
|
|
248
252
|
"keywords": ["keyword1", "keyword2"],
|
|
249
|
-
"category": "开发工具",
|
|
250
|
-
"features": ["特性1", "特性2"],
|
|
251
|
-
"requirements": {
|
|
252
|
-
"node": ">=16.0.0"
|
|
253
|
-
},
|
|
254
253
|
"commands": ["./custom/commands/special.md"],
|
|
255
254
|
"agents": "./custom/agents/",
|
|
255
|
+
"skills": "./custom/skills/",
|
|
256
256
|
"hooks": "./config/hooks.json",
|
|
257
|
-
"mcpServers":
|
|
258
|
-
|
|
259
|
-
"name": "custom-server",
|
|
260
|
-
"command": "node",
|
|
261
|
-
"args": ["./servers/custom.js"],
|
|
262
|
-
"env": {
|
|
263
|
-
"SERVER_PORT": "3000"
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
],
|
|
257
|
+
"mcpServers": "./mcp-config.json",
|
|
258
|
+
"outputStyles": "./styles/",
|
|
267
259
|
"lspServers": "./.lsp.json"
|
|
268
260
|
}
|
|
269
261
|
```
|
|
270
262
|
|
|
271
263
|
### 必需字段
|
|
272
264
|
|
|
265
|
+
如果包含清单,`name` 是唯一必需字段。
|
|
266
|
+
|
|
273
267
|
| 字段 | 类型 | 描述 | 示例 |
|
|
274
268
|
|------|------|------|------|
|
|
275
|
-
| name | string | 唯一标识符(kebab-case,无空格) | "deployment-tools" |
|
|
276
|
-
|
|
269
|
+
| `name` | string | 唯一标识符(kebab-case,无空格) | `"deployment-tools"` |
|
|
270
|
+
|
|
271
|
+
此名称用于组件命名空间。例如在 UI 中,插件 `plugin-dev` 的代理 `agent-creator` 将显示为 `plugin-dev:agent-creator`。
|
|
277
272
|
|
|
278
273
|
### 元数据字段
|
|
279
274
|
|
|
280
275
|
| 字段 | 类型 | 描述 | 示例 |
|
|
281
276
|
|------|------|------|------|
|
|
282
|
-
| version | string |
|
|
283
|
-
|
|
|
284
|
-
|
|
|
285
|
-
|
|
|
286
|
-
|
|
|
287
|
-
|
|
|
288
|
-
|
|
|
289
|
-
| features | array | 功能列表 | `["自动部署", "日志分析"]` |
|
|
277
|
+
| `version` | string | 语义化版本。如果在 marketplace 条目中也设置了,`plugin.json` 优先。只需在一处设置。 | `"2.1.0"` |
|
|
278
|
+
| `description` | string | 插件用途简述 | `"部署自动化工具"` |
|
|
279
|
+
| `author` | object | 作者信息 | `{"name": "开发团队", "email": "[email protected]"}` |
|
|
280
|
+
| `homepage` | string | 文档 URL | `"https://docs.example.com"` |
|
|
281
|
+
| `repository` | string | 源代码 URL | `"https://github.com/user/plugin"` |
|
|
282
|
+
| `license` | string | 许可证标识符 | `"MIT"`, `"Apache-2.0"` |
|
|
283
|
+
| `keywords` | array | 发现标签 | `["deployment", "ci-cd"]` |
|
|
290
284
|
|
|
291
|
-
###
|
|
285
|
+
### 组件路径字段
|
|
292
286
|
|
|
293
287
|
| 字段 | 类型 | 描述 | 示例 |
|
|
294
288
|
|------|------|------|------|
|
|
295
|
-
| commands | string
|
|
296
|
-
| agents | string
|
|
297
|
-
|
|
|
298
|
-
|
|
|
299
|
-
|
|
|
289
|
+
| `commands` | string \| array | 自定义命令文件/目录(替换默认 `commands/`) | `"./custom/cmd.md"` 或 `["./cmd1.md"]` |
|
|
290
|
+
| `agents` | string \| array | 自定义代理文件(替换默认 `agents/`) | `"./custom/agents/reviewer.md"` |
|
|
291
|
+
| `skills` | string \| array | 自定义技能目录(替换默认 `skills/`) | `"./custom/skills/"` |
|
|
292
|
+
| `hooks` | string \| array \| object | 钩子配置路径或内联配置 | `"./my-extra-hooks.json"` |
|
|
293
|
+
| `mcpServers` | string \| array \| object | MCP 配置路径或内联配置 | `"./my-extra-mcp-config.json"` |
|
|
294
|
+
| `outputStyles` | string \| array | 自定义输出样式文件/目录(替换默认 `output-styles/`) | `"./styles/"` |
|
|
295
|
+
| `lspServers` | string \| array \| object | LSP 配置路径或内联配置 | `"./.lsp.json"` |
|
|
296
|
+
| `userConfig` | object | 启用时提示用户配置的值。详见[用户配置](#用户配置) | 见下方 |
|
|
297
|
+
| `channels` | array | 消息注入的频道声明。详见[频道](#频道) | 见下方 |
|
|
300
298
|
|
|
301
|
-
###
|
|
299
|
+
### 用户配置
|
|
302
300
|
|
|
303
|
-
|
|
301
|
+
`userConfig` 字段声明在插件启用时 CodeBuddy 提示用户输入的值。用此替代要求用户手动编辑 `settings.json`。
|
|
302
|
+
|
|
303
|
+
```json
|
|
304
304
|
{
|
|
305
|
-
"
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
305
|
+
"userConfig": {
|
|
306
|
+
"api_endpoint": {
|
|
307
|
+
"description": "您团队的 API 端点",
|
|
308
|
+
"sensitive": false
|
|
309
|
+
},
|
|
310
|
+
"api_token": {
|
|
311
|
+
"description": "API 认证令牌",
|
|
312
|
+
"sensitive": true
|
|
313
|
+
}
|
|
310
314
|
}
|
|
311
315
|
}
|
|
312
316
|
```
|
|
313
317
|
|
|
314
|
-
|
|
318
|
+
键必须是有效标识符。每个值可作为 `${user_config.KEY}` 在 MCP 和 LSP 服务器配置、钩子命令中替换,以及(仅非敏感值)在技能和代理内容中替换。值也作为 `CODEBUDDY_PLUGIN_OPTION_<KEY>` 环境变量导出到插件子进程。
|
|
315
319
|
|
|
316
|
-
|
|
320
|
+
非敏感值存储在 `settings.json` 的 `pluginConfigs[<plugin-id>].options` 中。敏感值存储到系统密钥链(或在密钥链不可用时存储到 `~/.codebuddy/.credentials.json`)。密钥链存储与 OAuth 令牌共享,总限制约 2 KB,因此敏感值应保持较小。
|
|
317
321
|
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
322
|
+
### 频道
|
|
323
|
+
|
|
324
|
+
`channels` 字段允许插件声明一个或多个消息频道,用于向对话中注入内容。每个频道绑定到插件提供的一个 MCP 服务器。
|
|
325
|
+
|
|
326
|
+
```json
|
|
327
|
+
{
|
|
328
|
+
"channels": [
|
|
329
|
+
{
|
|
330
|
+
"server": "telegram",
|
|
331
|
+
"userConfig": {
|
|
332
|
+
"bot_token": { "description": "Telegram bot token", "sensitive": true },
|
|
333
|
+
"owner_id": { "description": "您的 Telegram 用户 ID", "sensitive": false }
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
]
|
|
337
|
+
}
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
`server` 字段是必需的,必须匹配插件 `mcpServers` 中的一个键。可选的按频道 `userConfig` 使用与顶层相同的 schema,允许在启用插件时提示输入 bot token 或 owner ID。
|
|
331
341
|
|
|
332
342
|
### 路径行为规则
|
|
333
343
|
|
|
334
|
-
|
|
344
|
+
对于 `commands`、`agents`、`skills` 和 `outputStyles`,自定义路径会**替换**默认目录。如果清单指定了 `commands`,则不会扫描默认的 `commands/` 目录。Hooks、MCP servers 和 LSP servers 对处理多个来源有不同的语义。
|
|
335
345
|
|
|
336
|
-
-
|
|
337
|
-
-
|
|
338
|
-
-
|
|
339
|
-
-
|
|
346
|
+
- 所有路径必须相对于插件根目录并以 `./` 开头
|
|
347
|
+
- 自定义路径中的组件使用相同的命名和命名空间规则
|
|
348
|
+
- 可以将多个路径指定为数组
|
|
349
|
+
- 要保留默认目录并添加更多路径,在数组中包含默认目录:`"commands": ["./commands/", "./extras/deploy.md"]`
|
|
340
350
|
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
351
|
+
**路径示例**:
|
|
352
|
+
|
|
353
|
+
```json
|
|
354
|
+
{
|
|
355
|
+
"commands": [
|
|
356
|
+
"./specialized/deploy.md",
|
|
357
|
+
"./utilities/batch-process.md"
|
|
358
|
+
],
|
|
359
|
+
"agents": [
|
|
360
|
+
"./custom-agents/reviewer.md",
|
|
361
|
+
"./custom-agents/tester.md"
|
|
362
|
+
]
|
|
363
|
+
}
|
|
364
|
+
```
|
|
344
365
|
|
|
345
366
|
### 环境变量
|
|
346
367
|
|
|
347
|
-
|
|
368
|
+
CodeBuddy 提供两个变量用于引用插件路径。两者都在技能内容、代理内容、钩子命令、MCP 或 LSP 服务器配置中的任何位置进行内联替换。两者也作为环境变量导出到钩子进程和 MCP 或 LSP 服务器子进程。
|
|
369
|
+
|
|
370
|
+
**`${CODEBUDDY_PLUGIN_ROOT}`**:插件安装目录的绝对路径。用于引用插件捆绑的脚本、二进制文件和配置文件。此路径在插件更新时会变化,因此写入此处的文件不会在更新后保留。
|
|
348
371
|
|
|
349
372
|
**兼容性**:同时支持 `${CLAUDE_PLUGIN_ROOT}` 变量名以兼容 Claude Code 插件。
|
|
350
373
|
|
|
374
|
+
**`${CODEBUDDY_PLUGIN_DATA}`**:用于插件状态的持久化目录,在更新后保留。用于已安装的依赖项(如 `node_modules` 或 Python 虚拟环境)、生成的代码、缓存以及任何需要跨插件版本持久化的文件。首次引用时自动创建该目录。
|
|
375
|
+
|
|
376
|
+
**兼容性**:同时支持 `${CLAUDE_PLUGIN_DATA}` 变量名。
|
|
377
|
+
|
|
351
378
|
```json
|
|
352
379
|
{
|
|
353
380
|
"hooks": {
|
|
@@ -365,355 +392,414 @@ LSP 集成提供:
|
|
|
365
392
|
}
|
|
366
393
|
```
|
|
367
394
|
|
|
395
|
+
#### 持久化数据目录
|
|
396
|
+
|
|
397
|
+
`${CODEBUDDY_PLUGIN_DATA}` 目录解析为 `~/.codebuddy/plugins/data/{id}/`,其中 `{id}` 是插件标识符,`a-z`、`A-Z`、`0-9`、`_` 和 `-` 之外的字符替换为 `-`。例如安装为 `formatter@my-marketplace` 的插件,目录为 `~/.codebuddy/plugins/data/formatter-my-marketplace/`。
|
|
398
|
+
|
|
399
|
+
常见用法是安装语言依赖一次并跨会话和插件更新重用。由于数据目录的生命周期超越任何单一插件版本,仅检查目录存在性无法检测更新何时更改了插件的依赖清单。推荐的模式是将捆绑的清单与数据目录中的副本进行比较,不同时重新安装。
|
|
400
|
+
|
|
401
|
+
以下 `SessionStart` 钩子在首次运行时安装 `node_modules`,并在插件更新包含更改的 `package.json` 时再次安装:
|
|
402
|
+
|
|
403
|
+
```json
|
|
404
|
+
{
|
|
405
|
+
"hooks": {
|
|
406
|
+
"SessionStart": [
|
|
407
|
+
{
|
|
408
|
+
"hooks": [
|
|
409
|
+
{
|
|
410
|
+
"type": "command",
|
|
411
|
+
"command": "diff -q \"${CODEBUDDY_PLUGIN_ROOT}/package.json\" \"${CODEBUDDY_PLUGIN_DATA}/package.json\" >/dev/null 2>&1 || (cd \"${CODEBUDDY_PLUGIN_DATA}\" && cp \"${CODEBUDDY_PLUGIN_ROOT}/package.json\" . && npm install) || rm -f \"${CODEBUDDY_PLUGIN_DATA}/package.json\""
|
|
412
|
+
}
|
|
413
|
+
]
|
|
414
|
+
}
|
|
415
|
+
]
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
`diff` 在存储副本缺失或与捆绑副本不同时以非零退出,涵盖首次运行和依赖变更更新。如果 `npm install` 失败,尾部的 `rm` 删除已复制的清单,以便下次会话重试。
|
|
421
|
+
|
|
422
|
+
捆绑在 `${CODEBUDDY_PLUGIN_ROOT}` 中的脚本可以针对持久化的 `node_modules` 运行:
|
|
423
|
+
|
|
424
|
+
```json
|
|
425
|
+
{
|
|
426
|
+
"mcpServers": {
|
|
427
|
+
"routines": {
|
|
428
|
+
"command": "node",
|
|
429
|
+
"args": ["${CODEBUDDY_PLUGIN_ROOT}/server.js"],
|
|
430
|
+
"env": {
|
|
431
|
+
"NODE_PATH": "${CODEBUDDY_PLUGIN_DATA}/node_modules"
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
卸载插件(从最后一个安装作用域)时数据目录会自动删除。`/plugin` 界面显示目录大小并在删除前提示。CLI 默认删除;传递 `--keep-data` 可保留。
|
|
439
|
+
|
|
368
440
|
---
|
|
369
441
|
|
|
370
|
-
##
|
|
442
|
+
## 四、插件缓存和文件解析
|
|
443
|
+
|
|
444
|
+
插件有两种指定方式:
|
|
445
|
+
|
|
446
|
+
- 通过 `codebuddy --plugin-dir`,仅在会话期间有效
|
|
447
|
+
- 通过市场安装,适用于未来会话
|
|
448
|
+
|
|
449
|
+
出于安全和验证目的,CodeBuddy 将**市场**插件复制到用户的本地**插件缓存**(`~/.codebuddy/plugins/cache`),而不是原地使用。理解此行为对于开发引用外部文件的插件很重要。
|
|
450
|
+
|
|
451
|
+
### 路径遍历限制
|
|
452
|
+
|
|
453
|
+
已安装的插件无法引用其目录之外的文件。遍历到插件根目录之外的路径(如 `../shared-utils`)在安装后不会工作,因为那些外部文件不会被复制到缓存中。
|
|
454
|
+
|
|
455
|
+
### 使用外部依赖
|
|
456
|
+
|
|
457
|
+
如果插件需要访问其目录之外的文件,可以在插件目录中创建指向外部文件的符号链接。符号链接在复制过程中会被保留:
|
|
458
|
+
|
|
459
|
+
```bash
|
|
460
|
+
# 在插件目录内
|
|
461
|
+
ln -s /path/to/shared-utils ./shared-utils
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
符号链接的内容将被复制到插件缓存中。这在保持缓存系统安全优势的同时提供了灵活性。
|
|
465
|
+
|
|
466
|
+
---
|
|
467
|
+
|
|
468
|
+
## 五、插件目录结构
|
|
371
469
|
|
|
372
470
|
### 标准插件布局
|
|
373
471
|
|
|
472
|
+
完整的插件遵循以下结构:
|
|
473
|
+
|
|
374
474
|
```
|
|
375
475
|
enterprise-plugin/
|
|
376
|
-
├── .codebuddy-plugin/
|
|
377
|
-
│ └── plugin.json
|
|
378
|
-
├── commands/
|
|
476
|
+
├── .codebuddy-plugin/ # 元数据目录(可选)
|
|
477
|
+
│ └── plugin.json # 插件清单
|
|
478
|
+
├── commands/ # 默认命令位置
|
|
379
479
|
│ ├── status.md
|
|
380
480
|
│ └── logs.md
|
|
381
|
-
├── agents/
|
|
481
|
+
├── agents/ # 默认代理位置
|
|
382
482
|
│ ├── security-reviewer.md
|
|
383
483
|
│ ├── performance-tester.md
|
|
384
484
|
│ └── compliance-checker.md
|
|
385
|
-
├── skills/
|
|
485
|
+
├── skills/ # 代理技能
|
|
386
486
|
│ ├── code-reviewer/
|
|
387
487
|
│ │ └── SKILL.md
|
|
388
488
|
│ └── pdf-processor/
|
|
389
489
|
│ ├── SKILL.md
|
|
390
490
|
│ └── scripts/
|
|
391
|
-
├──
|
|
392
|
-
│ └──
|
|
393
|
-
├──
|
|
394
|
-
├── .
|
|
395
|
-
|
|
491
|
+
├── output-styles/ # 输出样式定义
|
|
492
|
+
│ └── terse.md
|
|
493
|
+
├── hooks/ # 钩子配置
|
|
494
|
+
│ ├── hooks.json # 主钩子配置
|
|
495
|
+
│ └── security-hooks.json # 额外钩子
|
|
496
|
+
├── bin/ # 插件可执行文件,添加到 PATH
|
|
497
|
+
│ └── my-tool # 可在 Bash 工具中作为裸命令调用
|
|
498
|
+
├── settings.json # 插件默认设置
|
|
499
|
+
├── .mcp.json # MCP 服务器定义
|
|
500
|
+
├── .lsp.json # LSP 服务器配置
|
|
501
|
+
├── scripts/ # 钩子和实用脚本
|
|
396
502
|
│ ├── security-scan.sh
|
|
397
503
|
│ ├── format-code.py
|
|
398
504
|
│ └── deploy.js
|
|
399
|
-
├── LICENSE
|
|
400
|
-
└──
|
|
505
|
+
├── LICENSE # 许可证文件
|
|
506
|
+
└── CHANGELOG.md # 版本历史
|
|
401
507
|
```
|
|
402
508
|
|
|
403
|
-
**重要**:
|
|
404
|
-
- `.codebuddy-plugin/` 或 `.claude-plugin/` 目录包含 `plugin.json` 文件
|
|
405
|
-
- 所有其他目录(`commands/`、`agents/`、`skills/`、`hooks/`)必须位于插件根目录
|
|
406
|
-
- 系统优先识别 `.codebuddy-plugin/`,同时兼容 `.claude-plugin/`
|
|
509
|
+
> **重要**: `.codebuddy-plugin/` 目录包含 `plugin.json` 文件。所有其他目录(`commands/`、`agents/`、`skills/`、`output-styles/`、`hooks/`)必须位于插件根目录,而不是 `.codebuddy-plugin/` 内部。同时兼容 `.claude-plugin/` 目录。
|
|
407
510
|
|
|
408
511
|
### 文件位置参考
|
|
409
512
|
|
|
410
513
|
| 组件 | 默认位置 | 用途 |
|
|
411
514
|
|------|----------|------|
|
|
412
|
-
| Manifest |
|
|
413
|
-
| Commands | commands
|
|
414
|
-
| Agents | agents
|
|
415
|
-
| Skills | skills
|
|
416
|
-
|
|
|
417
|
-
|
|
|
418
|
-
|
|
|
515
|
+
| **Manifest** | `.codebuddy-plugin/plugin.json` | 插件元数据和配置(可选) |
|
|
516
|
+
| **Commands** | `commands/` | 技能 Markdown 文件(旧版;新技能使用 `skills/`) |
|
|
517
|
+
| **Agents** | `agents/` | 子代理 Markdown 文件 |
|
|
518
|
+
| **Skills** | `skills/` | 带有 `<name>/SKILL.md` 结构的技能 |
|
|
519
|
+
| **Output styles** | `output-styles/` | 输出样式定义 |
|
|
520
|
+
| **Hooks** | `hooks/hooks.json` | 钩子配置 |
|
|
521
|
+
| **MCP servers** | `.mcp.json` | MCP 服务器定义 |
|
|
522
|
+
| **LSP servers** | `.lsp.json` | 语言服务器配置 |
|
|
523
|
+
| **Executables** | `bin/` | 添加到 Bash 工具 PATH 的可执行文件。启用插件时此目录中的文件可在任何 Bash 工具调用中作为裸命令调用 |
|
|
524
|
+
| **Settings** | `settings.json` | 启用插件时应用的默认配置。目前仅支持 [agent](sub-agents.md) 设置 |
|
|
419
525
|
|
|
420
526
|
---
|
|
421
527
|
|
|
422
|
-
##
|
|
528
|
+
## 六、CLI 命令参考
|
|
423
529
|
|
|
424
|
-
|
|
530
|
+
CodeBuddy 提供 CLI 命令用于非交互式插件管理,适用于脚本和自动化。
|
|
425
531
|
|
|
426
|
-
|
|
427
|
-
{
|
|
428
|
-
"name": "企业插件市场",
|
|
429
|
-
"description": "企业内部插件集合",
|
|
430
|
-
"version": "1.0.0",
|
|
431
|
-
"owner": {
|
|
432
|
-
"name": "企业开发团队",
|
|
433
|
-
"email": "[email protected]"
|
|
434
|
-
},
|
|
435
|
-
"plugins": [
|
|
436
|
-
{
|
|
437
|
-
"name": "deployment-tool",
|
|
438
|
-
"description": "自动化部署工具",
|
|
439
|
-
"version": "1.0.0",
|
|
440
|
-
"source": "plugins/deployment-tool"
|
|
441
|
-
},
|
|
442
|
-
{
|
|
443
|
-
"name": "code-review-bot",
|
|
444
|
-
"description": "代码审查机器人",
|
|
445
|
-
"version": "2.1.0",
|
|
446
|
-
"source": {
|
|
447
|
-
"source": "github",
|
|
448
|
-
"repo": "company/code-review-bot"
|
|
449
|
-
}
|
|
450
|
-
},
|
|
451
|
-
{
|
|
452
|
-
"name": "security-scanner",
|
|
453
|
-
"description": "安全扫描工具",
|
|
454
|
-
"version": "1.5.0",
|
|
455
|
-
"source": {
|
|
456
|
-
"source": "url",
|
|
457
|
-
"url": "https://github.com/company/security-scanner.git"
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
]
|
|
461
|
-
}
|
|
462
|
-
```
|
|
532
|
+
### plugin install
|
|
463
533
|
|
|
464
|
-
|
|
534
|
+
从可用市场安装插件。
|
|
465
535
|
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
| plugins | array | 插件列表 | 见下方 |
|
|
536
|
+
```bash
|
|
537
|
+
codebuddy plugin install <plugin> [options]
|
|
538
|
+
```
|
|
470
539
|
|
|
471
|
-
|
|
540
|
+
**参数**:
|
|
472
541
|
|
|
473
|
-
|
|
474
|
-
|------|------|------|------|
|
|
475
|
-
| description | string | 市场描述 | "企业内部插件集合" |
|
|
476
|
-
| version | string | 市场版本 | "1.0.0" |
|
|
477
|
-
| owner | object | 所有者信息 | `{"name": "团队", "email": "..."}` |
|
|
542
|
+
- `<plugin>`: 插件名称或 `plugin-name@marketplace-name`(指定特定市场)
|
|
478
543
|
|
|
479
|
-
|
|
544
|
+
**选项**:
|
|
480
545
|
|
|
481
|
-
|
|
546
|
+
| 选项 | 描述 | 默认 |
|
|
547
|
+
|------|------|------|
|
|
548
|
+
| `-s, --scope <scope>` | 安装作用域:`user`、`project` 或 `local` | `user` |
|
|
549
|
+
| `-h, --help` | 显示命令帮助 | |
|
|
482
550
|
|
|
483
|
-
|
|
484
|
-
|------|------|------|------|
|
|
485
|
-
| name | string | ✓ | 插件唯一标识符 |
|
|
486
|
-
| description | string | ✓ | 插件描述 |
|
|
487
|
-
| version | string | | 插件版本号 |
|
|
488
|
-
| source | string \| PluginSource | ✓ | 插件源配置 |
|
|
489
|
-
| strict | boolean | | 严格模式(兼容 superpowers-marketplace) |
|
|
551
|
+
作用域决定已安装插件添加到哪个设置文件。例如 `--scope project` 写入 `.codebuddy/settings.json` 中的 `enabledPlugins`,使插件对所有克隆该项目仓库的人可用。
|
|
490
552
|
|
|
491
|
-
|
|
553
|
+
**示例**:
|
|
492
554
|
|
|
493
|
-
|
|
555
|
+
```bash
|
|
556
|
+
# 安装到用户作用域(默认)
|
|
557
|
+
codebuddy plugin install formatter@my-marketplace
|
|
494
558
|
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
{
|
|
498
|
-
"source": "plugins/my-plugin"
|
|
499
|
-
}
|
|
500
|
-
```
|
|
559
|
+
# 安装到项目作用域(与团队共享)
|
|
560
|
+
codebuddy plugin install formatter@my-marketplace --scope project
|
|
501
561
|
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
{
|
|
505
|
-
"source": {
|
|
506
|
-
"source": "local",
|
|
507
|
-
"path": "plugins/my-plugin"
|
|
508
|
-
}
|
|
509
|
-
}
|
|
562
|
+
# 安装到本地作用域(被 gitignore)
|
|
563
|
+
codebuddy plugin install formatter@my-marketplace --scope local
|
|
510
564
|
```
|
|
511
565
|
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
}
|
|
519
|
-
}
|
|
566
|
+
### plugin uninstall
|
|
567
|
+
|
|
568
|
+
移除已安装的插件。
|
|
569
|
+
|
|
570
|
+
```bash
|
|
571
|
+
codebuddy plugin uninstall <plugin> [options]
|
|
520
572
|
```
|
|
521
573
|
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
574
|
+
**参数**:
|
|
575
|
+
|
|
576
|
+
- `<plugin>`: 插件名称或 `plugin-name@marketplace-name`
|
|
577
|
+
|
|
578
|
+
**选项**:
|
|
579
|
+
|
|
580
|
+
| 选项 | 描述 | 默认 |
|
|
581
|
+
|------|------|------|
|
|
582
|
+
| `-s, --scope <scope>` | 从指定作用域卸载:`user`、`project` 或 `local` | `user` |
|
|
583
|
+
| `--keep-data` | 保留插件的[持久化数据目录](#持久化数据目录) | |
|
|
584
|
+
| `-h, --help` | 显示命令帮助 | |
|
|
585
|
+
|
|
586
|
+
**别名**: `remove`, `rm`
|
|
587
|
+
|
|
588
|
+
默认情况下,从最后一个剩余作用域卸载时也会删除插件的 `${CODEBUDDY_PLUGIN_DATA}` 目录。使用 `--keep-data` 可保留它,例如在测试新版本后重新安装时。
|
|
589
|
+
|
|
590
|
+
### plugin enable
|
|
591
|
+
|
|
592
|
+
启用已禁用的插件。
|
|
593
|
+
|
|
594
|
+
```bash
|
|
595
|
+
codebuddy plugin enable <plugin> [options]
|
|
530
596
|
```
|
|
531
597
|
|
|
532
|
-
|
|
598
|
+
**参数**:
|
|
533
599
|
|
|
534
|
-
|
|
600
|
+
- `<plugin>`: 插件名称或 `plugin-name@marketplace-name`
|
|
535
601
|
|
|
536
|
-
|
|
537
|
-
|------|------|-------------|
|
|
538
|
-
| Directory | 本地文件系统目录 | path:本地目录绝对路径 |
|
|
539
|
-
| Github | GitHub 仓库 | repo: owner/repo 格式 |
|
|
540
|
-
| Git | Git 仓库 | url: Git 仓库 URL |
|
|
541
|
-
| URL | HTTP/HTTPS 远端 | url: marketplace.json 的 URL |
|
|
602
|
+
**选项**:
|
|
542
603
|
|
|
543
|
-
|
|
604
|
+
| 选项 | 描述 | 默认 |
|
|
605
|
+
|------|------|------|
|
|
606
|
+
| `-s, --scope <scope>` | 启用作用域:`user`、`project` 或 `local` | `user` |
|
|
607
|
+
| `-h, --help` | 显示命令帮助 | |
|
|
544
608
|
|
|
545
|
-
|
|
609
|
+
### plugin disable
|
|
546
610
|
|
|
547
|
-
|
|
611
|
+
禁用插件但不卸载。
|
|
548
612
|
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
613
|
+
```bash
|
|
614
|
+
codebuddy plugin disable <plugin> [options]
|
|
615
|
+
```
|
|
552
616
|
|
|
553
|
-
|
|
554
|
-
- 根据 `source` 配置选择合适的安装器(Local/Git)
|
|
555
|
-
- 将插件内容安装到目标位置
|
|
617
|
+
**参数**:
|
|
556
618
|
|
|
557
|
-
|
|
558
|
-
- 读取插件的 `plugin.json` 清单
|
|
559
|
-
- 根据清单配置加载各类组件
|
|
619
|
+
- `<plugin>`: 插件名称或 `plugin-name@marketplace-name`
|
|
560
620
|
|
|
561
|
-
|
|
562
|
-
- 并发加载所有类型的扩展组件
|
|
563
|
-
- 合并配置路径和默认目录扫描的结果
|
|
564
|
-
- 缓存加载的组件以提高性能
|
|
621
|
+
**选项**:
|
|
565
622
|
|
|
566
|
-
|
|
623
|
+
| 选项 | 描述 | 默认 |
|
|
624
|
+
|------|------|------|
|
|
625
|
+
| `-s, --scope <scope>` | 禁用作用域:`user`、`project` 或 `local` | `user` |
|
|
626
|
+
| `-h, --help` | 显示命令帮助 | |
|
|
567
627
|
|
|
568
|
-
|
|
628
|
+
### plugin update
|
|
569
629
|
|
|
570
|
-
|
|
571
|
-
2. **默认扫描**:默认目录(如 `commands/`、`agents/`)中的文件
|
|
630
|
+
更新插件到最新版本。
|
|
572
631
|
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
{
|
|
576
|
-
"commands": ["./custom/deploy.md"],
|
|
577
|
-
// 实际加载:
|
|
578
|
-
// - ./custom/deploy.md (配置路径)
|
|
579
|
-
// - commands/ 目录中的所有 .md 文件 (默认扫描)
|
|
580
|
-
}
|
|
632
|
+
```bash
|
|
633
|
+
codebuddy plugin update <plugin> [options]
|
|
581
634
|
```
|
|
582
635
|
|
|
583
|
-
|
|
636
|
+
**参数**:
|
|
584
637
|
|
|
585
|
-
-
|
|
586
|
-
- 子目录: `deploy/prod.md` → 命令名: `deploy:prod`
|
|
587
|
-
- 插件前缀: 自动添加插件名作为前缀,如 `plugin-name:command`
|
|
638
|
+
- `<plugin>`: 插件名称或 `plugin-name@marketplace-name`
|
|
588
639
|
|
|
589
|
-
|
|
640
|
+
**选项**:
|
|
590
641
|
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
642
|
+
| 选项 | 描述 | 默认 |
|
|
643
|
+
|------|------|------|
|
|
644
|
+
| `-s, --scope <scope>` | 更新作用域:`user`、`project`、`local` 或 `managed` | `user` |
|
|
645
|
+
| `-h, --help` | 显示命令帮助 | |
|
|
595
646
|
|
|
596
|
-
|
|
647
|
+
### 市场管理
|
|
597
648
|
|
|
598
|
-
|
|
649
|
+
```bash
|
|
650
|
+
# 添加市场
|
|
651
|
+
codebuddy plugin marketplace add <source> [--name <name>]
|
|
599
652
|
|
|
600
|
-
|
|
653
|
+
# 列出市场
|
|
654
|
+
codebuddy plugin marketplace list
|
|
601
655
|
|
|
602
|
-
|
|
656
|
+
# 更新市场
|
|
657
|
+
codebuddy plugin marketplace update <name>
|
|
658
|
+
|
|
659
|
+
# 删除市场
|
|
660
|
+
codebuddy plugin marketplace remove <name>
|
|
661
|
+
```
|
|
662
|
+
|
|
663
|
+
**市场源格式**:
|
|
603
664
|
|
|
604
665
|
```bash
|
|
605
|
-
|
|
666
|
+
# 本地目录
|
|
667
|
+
codebuddy plugin marketplace add /path/to/marketplace
|
|
668
|
+
|
|
669
|
+
# GitHub 简写
|
|
670
|
+
codebuddy plugin marketplace add owner/repo
|
|
671
|
+
|
|
672
|
+
# Git URL
|
|
673
|
+
codebuddy plugin marketplace add https://github.com/owner/repo.git
|
|
674
|
+
|
|
675
|
+
# HTTP URL (marketplace.json)
|
|
676
|
+
codebuddy plugin marketplace add https://example.com/marketplace.json
|
|
606
677
|
```
|
|
607
678
|
|
|
679
|
+
---
|
|
680
|
+
|
|
681
|
+
## 七、调试和开发工具
|
|
682
|
+
|
|
683
|
+
### 调试命令
|
|
684
|
+
|
|
685
|
+
使用 `codebuddy --debug` 查看插件加载详情:
|
|
686
|
+
|
|
608
687
|
**显示内容**:
|
|
688
|
+
|
|
609
689
|
- 正在加载哪些插件
|
|
610
690
|
- 插件清单中的任何错误
|
|
611
|
-
-
|
|
691
|
+
- 命令、代理和钩子注册
|
|
612
692
|
- MCP 服务器初始化
|
|
613
|
-
- Hooks 配置加载
|
|
614
693
|
|
|
615
694
|
### 常见问题排查
|
|
616
695
|
|
|
617
696
|
| 问题 | 原因 | 解决方案 |
|
|
618
697
|
|------|------|----------|
|
|
619
|
-
| 插件未加载 | 无效的 plugin.json |
|
|
620
|
-
| 命令未出现 | 错误的目录结构 | 确保 commands
|
|
698
|
+
| 插件未加载 | 无效的 `plugin.json` | 运行 `codebuddy plugin validate` 或 `/plugin validate` 检查 `plugin.json`、skill/agent/command frontmatter 和 `hooks/hooks.json` 的语法和 schema 错误 |
|
|
699
|
+
| 命令未出现 | 错误的目录结构 | 确保 `commands/` 在插件根目录,而不是 `.codebuddy-plugin/` 内部 |
|
|
621
700
|
| 钩子未触发 | 脚本不可执行 | 运行 `chmod +x script.sh` |
|
|
622
|
-
| MCP 服务器失败 |
|
|
701
|
+
| MCP 服务器失败 | 缺少 `${CODEBUDDY_PLUGIN_ROOT}` | 所有插件路径使用此变量 |
|
|
623
702
|
| 路径错误 | 使用了绝对路径 | 所有路径必须是相对路径并以 `./` 开头 |
|
|
624
|
-
| 元数据目录未识别 | 使用了错误的目录名 | 使用 `.codebuddy-plugin/` 或 `.claude-plugin/` |
|
|
625
703
|
| LSP `Executable not found in $PATH` | 语言服务器未安装 | 安装二进制文件(例如:`npm install -g typescript-language-server typescript`) |
|
|
626
704
|
|
|
627
|
-
###
|
|
705
|
+
### 常见错误信息
|
|
628
706
|
|
|
629
|
-
|
|
630
|
-
2. **环境变量**:在脚本中使用 `${CODEBUDDY_PLUGIN_ROOT}` 引用插件目录
|
|
631
|
-
3. **错误处理**:为钩子脚本添加适当的错误处理和超时设置
|
|
632
|
-
4. **文档完善**:在 README.md 中提供清晰的安装和使用说明
|
|
633
|
-
5. **语义化版本**:遵循语义化版本规范管理插件版本
|
|
634
|
-
6. **测试覆盖**:在不同环境下测试插件的安装和功能
|
|
707
|
+
**清单验证错误**:
|
|
635
708
|
|
|
636
|
-
|
|
709
|
+
- `Invalid JSON syntax: Unexpected token } in JSON at position 142`: 检查缺少的逗号、多余的逗号或未引用的字符串
|
|
710
|
+
- `Plugin has an invalid manifest file at .codebuddy-plugin/plugin.json. Validation errors: name: Required`: 缺少必需字段
|
|
711
|
+
- `Plugin has a corrupt manifest file at .codebuddy-plugin/plugin.json. JSON parse error: ...`: JSON 语法错误
|
|
637
712
|
|
|
638
|
-
|
|
713
|
+
**插件加载错误**:
|
|
639
714
|
|
|
640
|
-
|
|
715
|
+
- `Warning: No commands found in plugin my-plugin custom directory: ./cmds. Expected .md files or SKILL.md in subdirectories.`: 命令路径存在但不包含有效的命令文件
|
|
716
|
+
- `Plugin directory not found at path: ./plugins/my-plugin. Check that the marketplace entry has the correct path.`: marketplace.json 中的 `source` 路径指向不存在的目录
|
|
717
|
+
- `Plugin my-plugin has conflicting manifests: both plugin.json and marketplace entry specify components.`: 删除重复的组件定义或在 marketplace 条目中移除 `strict: false`
|
|
641
718
|
|
|
642
|
-
|
|
719
|
+
### 钩子排查
|
|
643
720
|
|
|
644
|
-
|
|
645
|
-
- **次版本号 (MINOR)**:向后兼容的功能添加
|
|
646
|
-
- **修订号 (PATCH)**:向后兼容的错误修复
|
|
721
|
+
**钩子脚本未执行**:
|
|
647
722
|
|
|
648
|
-
|
|
723
|
+
1. 检查脚本是否可执行:`chmod +x ./scripts/your-script.sh`
|
|
724
|
+
2. 验证 shebang 行:第一行应为 `#!/bin/bash` 或 `#!/usr/bin/env bash`
|
|
725
|
+
3. 检查路径是否使用 `${CODEBUDDY_PLUGIN_ROOT}`:`"command": "${CODEBUDDY_PLUGIN_ROOT}/scripts/your-script.sh"`
|
|
726
|
+
4. 手动测试脚本:`./scripts/your-script.sh`
|
|
649
727
|
|
|
650
|
-
|
|
728
|
+
**钩子未在预期事件上触发**:
|
|
651
729
|
|
|
652
|
-
1.
|
|
653
|
-
2.
|
|
654
|
-
3.
|
|
655
|
-
4. 提交到版本控制系统
|
|
656
|
-
5. 用户通过 marketplace 更新插件
|
|
730
|
+
1. 验证事件名称正确(区分大小写):`PostToolUse`,而不是 `postToolUse`
|
|
731
|
+
2. 检查 matcher 模式是否匹配目标工具:`"matcher": "Write|Edit"` 用于文件操作
|
|
732
|
+
3. 确认钩子类型有效:`command`、`http`、`prompt` 或 `agent`
|
|
657
733
|
|
|
658
|
-
|
|
734
|
+
### MCP 服务器排查
|
|
659
735
|
|
|
660
|
-
|
|
736
|
+
**服务器未启动**:
|
|
661
737
|
|
|
662
|
-
|
|
738
|
+
1. 检查命令是否存在且可执行
|
|
739
|
+
2. 验证所有路径使用 `${CODEBUDDY_PLUGIN_ROOT}` 变量
|
|
740
|
+
3. 检查 MCP 服务器日志:`codebuddy --debug` 显示初始化错误
|
|
741
|
+
4. 在 CodeBuddy 之外手动测试服务器
|
|
663
742
|
|
|
664
|
-
|
|
665
|
-
# 添加市场
|
|
666
|
-
codebuddy plugin marketplace add <source> [--name <name>]
|
|
743
|
+
**服务器工具未出现**:
|
|
667
744
|
|
|
668
|
-
|
|
669
|
-
|
|
745
|
+
1. 确保服务器在 `.mcp.json` 或 `plugin.json` 中正确配置
|
|
746
|
+
2. 验证服务器正确实现了 MCP 协议
|
|
747
|
+
3. 检查调试输出中的连接超时
|
|
670
748
|
|
|
671
|
-
|
|
672
|
-
|
|
749
|
+
### 目录结构错误
|
|
750
|
+
|
|
751
|
+
**症状**: 插件加载但组件(命令、代理、钩子)缺失。
|
|
752
|
+
|
|
753
|
+
**正确结构**: 组件必须在插件根目录,而不是 `.codebuddy-plugin/` 内部。只有 `plugin.json` 属于 `.codebuddy-plugin/`。
|
|
673
754
|
|
|
674
|
-
|
|
675
|
-
|
|
755
|
+
```
|
|
756
|
+
my-plugin/
|
|
757
|
+
├── .codebuddy-plugin/
|
|
758
|
+
│ └── plugin.json <- 只有清单在这里
|
|
759
|
+
├── commands/ <- 在根级别
|
|
760
|
+
├── agents/ <- 在根级别
|
|
761
|
+
└── hooks/ <- 在根级别
|
|
676
762
|
```
|
|
677
763
|
|
|
678
|
-
|
|
764
|
+
如果组件在 `.codebuddy-plugin/` 内部,将它们移到插件根目录。
|
|
679
765
|
|
|
680
|
-
|
|
681
|
-
# 安装插件
|
|
682
|
-
codebuddy plugin install <plugin-name> <marketplace-name>
|
|
766
|
+
**调试检查清单**:
|
|
683
767
|
|
|
684
|
-
|
|
685
|
-
|
|
768
|
+
1. 运行 `codebuddy --debug` 并查找 "loading plugin" 消息
|
|
769
|
+
2. 检查每个组件目录是否在调试输出中列出
|
|
770
|
+
3. 验证文件权限允许读取插件文件
|
|
686
771
|
|
|
687
|
-
|
|
688
|
-
|
|
772
|
+
---
|
|
773
|
+
|
|
774
|
+
## 八、版本管理参考
|
|
689
775
|
|
|
690
|
-
|
|
691
|
-
codebuddy plugin disable <plugin-name> <marketplace-name>
|
|
776
|
+
### 语义化版本控制
|
|
692
777
|
|
|
693
|
-
|
|
694
|
-
codebuddy plugin uninstall <plugin-name> <marketplace-name>
|
|
778
|
+
遵循语义化版本控制进行插件发布:
|
|
695
779
|
|
|
696
|
-
|
|
697
|
-
|
|
780
|
+
```json
|
|
781
|
+
{
|
|
782
|
+
"name": "my-plugin",
|
|
783
|
+
"version": "2.1.0"
|
|
784
|
+
}
|
|
698
785
|
```
|
|
699
786
|
|
|
700
|
-
|
|
787
|
+
**版本格式**: `MAJOR.MINOR.PATCH`
|
|
701
788
|
|
|
702
|
-
|
|
789
|
+
- **MAJOR**: 不兼容的 API 更改
|
|
790
|
+
- **MINOR**: 向后兼容的功能添加
|
|
791
|
+
- **PATCH**: 向后兼容的错误修复
|
|
703
792
|
|
|
704
|
-
|
|
705
|
-
# 本地目录
|
|
706
|
-
codebuddy plugin marketplace add /path/to/marketplace
|
|
793
|
+
**最佳实践**:
|
|
707
794
|
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
codebuddy plugin marketplace add https://github.com/owner/repo.git
|
|
795
|
+
- 第一个稳定版本从 `1.0.0` 开始
|
|
796
|
+
- 分发更改前更新 `plugin.json` 中的版本
|
|
797
|
+
- 在 `CHANGELOG.md` 文件中记录变更
|
|
798
|
+
- 使用预发布版本(如 `2.0.0-beta.1`)进行测试
|
|
713
799
|
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
800
|
+
> **注意**: CodeBuddy 使用版本来判断是否需要更新插件。如果更改了插件代码但未更新 `plugin.json` 中的版本,由于缓存机制,现有用户不会看到变更。
|
|
801
|
+
>
|
|
802
|
+
> 如果插件在[市场](plugin-marketplaces.md)目录中,可以通过 `marketplace.json` 管理版本,并从 `plugin.json` 中省略 `version` 字段。
|
|
717
803
|
|
|
718
804
|
---
|
|
719
805
|
|
|
@@ -725,16 +811,9 @@ CodeBuddy 插件系统在设计上兼容 Claude Code 插件规范,但存在以
|
|
|
725
811
|
|
|
726
812
|
| 概念 | Claude Code | CodeBuddy |
|
|
727
813
|
|------|-------------|-----------|
|
|
728
|
-
| 元数据目录 | `.claude-plugin/` | `.codebuddy-plugin
|
|
729
|
-
| 环境变量 | `${CLAUDE_PLUGIN_ROOT}` | `${CODEBUDDY_PLUGIN_ROOT}
|
|
730
|
-
|
|
731
|
-
### 扩展功能
|
|
732
|
-
|
|
733
|
-
CodeBuddy 在 Claude Code 基础上提供了以下扩展:
|
|
734
|
-
|
|
735
|
-
1. **运行时配置**: PluginInfo 支持运行时扩展字段配置
|
|
736
|
-
2. **多元数据目录**:同时支持 `.codebuddy-plugin/` 和 `.claude-plugin/`
|
|
737
|
-
3. **灵活的配置**:支持配置对象和文件路径两种配置方式
|
|
814
|
+
| 元数据目录 | `.claude-plugin/` | `.codebuddy-plugin/`(优先)或 `.claude-plugin/`(兼容) |
|
|
815
|
+
| 环境变量 | `${CLAUDE_PLUGIN_ROOT}` | `${CODEBUDDY_PLUGIN_ROOT}`(优先)或 `${CLAUDE_PLUGIN_ROOT}`(兼容) |
|
|
816
|
+
| 数据目录变量 | `${CLAUDE_PLUGIN_DATA}` | `${CODEBUDDY_PLUGIN_DATA}`(优先)或 `${CLAUDE_PLUGIN_DATA}`(兼容) |
|
|
738
817
|
|
|
739
818
|
### 迁移指南
|
|
740
819
|
|
|
@@ -742,7 +821,7 @@ CodeBuddy 在 Claude Code 基础上提供了以下扩展:
|
|
|
742
821
|
|
|
743
822
|
1. 可选择将 `.claude-plugin/` 重命名为 `.codebuddy-plugin/`
|
|
744
823
|
2. 可选择将脚本中的 `${CLAUDE_PLUGIN_ROOT}` 替换为 `${CODEBUDDY_PLUGIN_ROOT}`
|
|
745
|
-
3.
|
|
824
|
+
3. 可选择将 `${CLAUDE_PLUGIN_DATA}` 替换为 `${CODEBUDDY_PLUGIN_DATA}`
|
|
746
825
|
|
|
747
826
|
**注意**:保持原有命名也完全兼容,CodeBuddy 会自动识别。
|
|
748
827
|
|
|
@@ -750,25 +829,10 @@ CodeBuddy 在 Claude Code 基础上提供了以下扩展:
|
|
|
750
829
|
|
|
751
830
|
## 相关资源
|
|
752
831
|
|
|
753
|
-
-
|
|
754
|
-
-
|
|
755
|
-
-
|
|
756
|
-
-
|
|
757
|
-
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
## 总结
|
|
762
|
-
|
|
763
|
-
本文档提供了 CodeBuddy 插件系统的完整技术规范,涵盖:
|
|
764
|
-
|
|
765
|
-
1. 六种插件组件类型(Commands、Agents、Skills、Hooks、MCP Servers、LSP Servers)
|
|
766
|
-
2. 完整的 plugin.json 清单架构和字段说明
|
|
767
|
-
3. marketplace.json 市场清单架构
|
|
768
|
-
4. 标准目录结构和文件位置
|
|
769
|
-
5. 插件加载机制和智能合并规则
|
|
770
|
-
6. CLI 命令和调试工具
|
|
771
|
-
7. 版本管理最佳实践
|
|
772
|
-
8. 与 Claude Code 的兼容性说明
|
|
773
|
-
|
|
774
|
-
开发者可以使用此参考文档创建功能完整、结构规范的 CodeBuddy 插件。
|
|
832
|
+
- [插件](plugins.md) - 教程和实用指南
|
|
833
|
+
- [插件市场](plugin-marketplaces.md) - 创建和管理市场
|
|
834
|
+
- [Skills](skills.md) - 技能开发详情
|
|
835
|
+
- [Subagents](sub-agents.md) - 代理配置和能力
|
|
836
|
+
- [Hooks](hooks.md) - 事件处理和自动化
|
|
837
|
+
- [MCP](mcp.md) - 外部工具集成
|
|
838
|
+
- [Settings](settings.md) - 插件配置选项
|