Files
everything-claude-code-zh/.claude-plugin/PLUGIN_SCHEMA_NOTES.md

221 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 插件清单模式Plugin Manifest Schema说明
本文档记录了 Claude Code 插件清单校验器Validator中**未公开但强制执行的约束条件**。
这些规则基于真实的安装失败案例、校验器行为分析以及与已知可用插件的对比。
它们的存在是为了防止隐性破坏silent breakage和重复出现的回归regressions问题。
如果你需要编辑 `.claude-plugin/plugin.json`,请务必先阅读本文。
---
## 摘要(优先阅读)
Claude 插件清单校验器非常**严格且具有确定性**。
它强制执行了一些在公共模式Schema引用中未完全记录的规则。
最常见的失败模式是:
> 清单看起来很合理,但校验器拒绝了它,并给出模糊的错误提示,例如
> `agents: Invalid input`
本文档将解释其原因。
---
## 必填字段
### `version`(强制要求)
校验器要求必须包含 `version` 字段,即使在某些示例中省略了它。
如果缺失该字段,在应用市场安装或 CLI 校验期间可能会失败。
示例:
```json
{
"version": "1.1.0"
}
```
---
## 字段形态规则
以下字段**必须始终为数组Arrays**
* `agents`
* `commands`
* `skills`
* `hooks`(如果存在)
即使只有一个条目,**也不接受字符串Strings类型**。
### 错误示例Invalid
```json
{
"agents": "./agents"
}
```
### 正确示例Valid
```json
{
"agents": ["./agents/planner.md"]
}
```
这一规则一致适用于所有组件路径字段。
---
## 路径解析规则(关键)
### Agents 必须使用显式文件路径
校验器**不接受 `agents` 字段使用目录路径**。
即使是以下写法也会失败:
```json
{
"agents": ["./agents/"]
}
```
相反你必须显式枚举智能体Agent文件
```json
{
"agents": [
"./agents/planner.md",
"./agents/architect.md",
"./agents/code-reviewer.md"
]
}
```
这是校验错误最常见的来源。
### 命令Commands与技能Skills
* `commands``skills` **仅在包裹在数组中时**接受目录路径。
* 显式文件路径是最安全且最能兼容未来的做法。
---
## 校验器行为注意事项
* `claude plugin validate` 比某些应用市场预览marketplace previews更严格。
* 校验可能在本地通过,但如果路径含义模糊,在安装时可能会失败。
* 错误提示通常很通用(`Invalid input`),且不会指出根本原因。
* 跨平台安装(尤其是 Windows对路径假设的容忍度较低。
请假设校验器是严苛且完全按字面意思理解的。
---
## `hooks` 字段:请勿添加
> ⚠️ **关键CRITICAL** 请勿在 `plugin.json` 中添加 `"hooks"` 字段。这是一个回归测试强制要求的规则。
### 为什么这很重要
按照约定Claude Code v2.1+ 会**自动加载**任何已安装插件中的 `hooks/hooks.json`。如果你在 `plugin.json` 中也声明了它,你会得到:
```
Duplicate hooks file detected: ./hooks/hooks.json resolves to already-loaded file.
The standard hooks/hooks.json is loaded automatically, so manifest.hooks should
only reference additional hook files.
```
### 反复变更的历史
这曾导致此仓库中出现多次“修复/回滚”循环:
| 提交 | 动作 | 触发原因 |
|--------|--------|---------|
| `22ad036` | 添加ADDhooks | 用户报告“钩子未加载” |
| `a7bc5f2` | 移除REMOVEhooks | 用户报告“重复钩子错误” (#52) |
| `779085e` | 添加ADDhooks | 用户报告“智能体未加载” (#88) |
| `e3a1306` | 移除REMOVEhooks | 用户报告“重复钩子错误” (#103) |
**根本原因:** Claude Code CLI 在不同版本间更改了行为:
- v2.1 之前:需要显式声明 `hooks`
- v2.1+:按约定自动加载,显式声明会导致重复错误。
### 当前规则(由测试强制执行)
`tests/hooks/hooks.test.js` 中的测试 `plugin.json does NOT have explicit hooks declaration` 会阻止重新引入此声明。
**如果你要添加额外的钩子文件**(非 `hooks/hooks.json`),可以声明它们。但标准路径 `hooks/hooks.json` **绝不能**被声明。
---
## 已知的反模式Anti-Patterns
这些看起来正确但会被拒绝:
* 使用字符串值而非数组
*`agents` 中使用目录数组
* 缺失 `version`
* 依赖推断路径
* 假设应用市场行为与本地校验一致
* **添加 `"hooks": "./hooks/hooks.json"`** —— 按约定自动加载,会导致重复错误
不要尝试“取巧”,请保持显式声明。
---
## 最小已知可用示例
```json
{
"version": "1.1.0",
"agents": [
"./agents/planner.md",
"./agents/code-reviewer.md"
],
"commands": ["./commands/"],
"skills": ["./skills/"]
}
```
此结构已通过 Claude 插件校验器的验证。
**重要提示:** 请注意这里**没有** `"hooks"` 字段。`hooks/hooks.json` 文件会按约定自动加载。显式添加它会导致重复错误。
---
## 贡献者建议
在提交涉及 `plugin.json` 的更改前:
1. 为智能体Agents使用显式文件路径
2. 确保所有组件字段均为数组
3. 包含 `version` 字段
4. 运行以下命令:
```bash
claude plugin validate .claude-plugin/plugin.json
```
如有疑问,宁可繁琐也不要为了方便而导致解析失败。
---
## 为什么存在此文件
此仓库被广泛 Fork 并作为参考实现。
在此记录校验器的奇特行为quirks是为了
* 防止重复出现的问题
* 减少贡献者的挫败感
* 随着生态系统的演进保持插件的稳定性
如果校验器规则发生变化,请首先更新此文档。