feat(sync): add install-skills.sh + install metadata to all 62 plugins
- Add install_name, install_type, dir_category fields to all 62 plugin.json files to resolve name-mapping and skill-vs-command routing issues - Add install-skills.sh: idempotent cross-machine skill sync script - Routes skill→~/.claude/skills/<name>/, command→~/.claude/commands/<name>.md - rsync full skills/ directory (preserves multi-file skills like dev-test, req-deploy) - State file ~/.claude/.installed-skills.json tracks installed versions - Conflict detection: warns before overwriting locally modified files - --dry-run, --category, --force, --cleanup, --list flags - Add 9 new plugins migrated from local ~/.claude (agent-swarm, ai-chat, defect-analysis, executing-plans, finishing-branch, frontend-design, req-audit, req-lookback, req-retro) - Add update-plugin-meta.py helper used to bulk-update plugin.json - Fix siyuan SKILL.md: remove hardcoded server credentials, use env vars Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
11
skills-req/req-audit-plugin/.claude-plugin/plugin.json
Normal file
11
skills-req/req-audit-plugin/.claude-plugin/plugin.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "req-audit-plugin",
|
||||
"description": "部署后审计。运行时日志检查 + 静态缺陷分析 + 设计偏移检测。可独立调用或由 /req done 自动触发。",
|
||||
"version": "1.0.0",
|
||||
"author": {
|
||||
"name": "qiudl"
|
||||
},
|
||||
"install_name": "req-audit",
|
||||
"install_type": "command",
|
||||
"dir_category": "req"
|
||||
}
|
||||
105
skills-req/req-audit-plugin/skills/SKILL.md
Normal file
105
skills-req/req-audit-plugin/skills/SKILL.md
Normal file
@@ -0,0 +1,105 @@
|
||||
---
|
||||
name: req-audit
|
||||
description: 部署后审计。运行时日志检查 + 静态缺陷分析 + 设计偏移检测。可独立调用或由 /req done 自动触发。
|
||||
---
|
||||
|
||||
# 部署后审计 (audit)
|
||||
|
||||
对本次部署执行三维度审计:运行时行为、代码缺陷、设计偏移。
|
||||
|
||||
## 执行流程
|
||||
|
||||
### 2a. 运行时检查
|
||||
|
||||
检查部署后是否有新增错误。
|
||||
|
||||
**优先 SSH**:
|
||||
```bash
|
||||
ssh -o ConnectTimeout=3 ${EC2_USER}@${EC2_HOST} \
|
||||
"docker logs ${APP_CONTAINER} --since 10m 2>&1 | grep -i 'error\|panic\|fatal\|traceback'"
|
||||
```
|
||||
|
||||
**降级 1:CI 日志**:
|
||||
```bash
|
||||
RUN_ID=$(gh run list --repo ${OWNER}/${REPO} --limit 1 --json databaseId -q '.[0].databaseId')
|
||||
gh run view ${RUN_ID} --repo ${OWNER}/${REPO} --log 2>&1 | grep -i 'error\|panic\|fatal'
|
||||
```
|
||||
|
||||
**降级 2:N/A + 警告**:
|
||||
```
|
||||
⚠️ 无法获取运行时日志(SSH 不可达 + CI 日志无异常信息),2a 标记为 N/A。
|
||||
运行时问题可能未被发现,建议手动检查服务器日志。
|
||||
```
|
||||
|
||||
### 2b. 静态分析
|
||||
|
||||
调用现有 `/defect-analysis` command,传入变更文件:
|
||||
|
||||
```
|
||||
对以下变更文件执行缺陷分析:
|
||||
{变更文件列表}
|
||||
|
||||
重点关注:运行时行为(不是合并前 CR 的重复,而是部署后复查)
|
||||
```
|
||||
|
||||
输出:缺陷清单(按致命/高/中/低分级)
|
||||
|
||||
### 2c. 设计偏移检测
|
||||
|
||||
1. 读取需求的 PRD 文档(linkRole=prd 的任务文档)
|
||||
2. 读取本次变更的源码
|
||||
3. AI 对比分析:
|
||||
|
||||
```
|
||||
请对比以下 PRD 功能点和实际代码实现:
|
||||
|
||||
PRD 功能点:
|
||||
{从 PRD 提取的功能清单}
|
||||
|
||||
实际代码变更:
|
||||
{变更文件的关键逻辑}
|
||||
|
||||
检查:
|
||||
- 遗漏的功能(PRD 有但代码没实现)
|
||||
- 多做的功能(代码有但 PRD 没提)
|
||||
- 实现方式与 PRD 描述不一致
|
||||
```
|
||||
|
||||
输出:偏移项列表
|
||||
|
||||
### 合并报告
|
||||
|
||||
```markdown
|
||||
## 部署后审计报告
|
||||
|
||||
### 2a 运行时检查
|
||||
| 检查项 | 结果 | 详情 |
|
||||
| 新增错误 | ✅ 无 / ❌ 有 N 条 | ... |
|
||||
|
||||
### 2b 静态分析
|
||||
| 缺陷 | 严重度 | 描述 |
|
||||
(来自 defect-analysis 输出)
|
||||
|
||||
### 2c 设计偏移
|
||||
| 偏移项 | 类型 | 说明 |
|
||||
|
||||
### 结论
|
||||
- 致命/高级缺陷: N 个 → {阻断/通过}
|
||||
- 中/低级缺陷: N 个 → 已创建 backlog
|
||||
- 设计偏移: N 项 → {建议处理方式}
|
||||
```
|
||||
|
||||
### 缺陷分级处理
|
||||
|
||||
| 级别 | 处理 |
|
||||
|------|------|
|
||||
| 致命 | 阻断归档 + 回滚建议 + `ai-proj task create` 创建修复任务并关联需求 |
|
||||
| 高级 | 阻断归档 + 回滚建议 + 创建修复任务 |
|
||||
| 中级 | 警告不阻断 + 创建 backlog 任务 |
|
||||
| 低级 | 记录到报告,不创建任务 |
|
||||
|
||||
## 任务关联
|
||||
|
||||
- linkRole: `code_review`
|
||||
- 任务标题: `【审计】部署后审计: {需求标题}`
|
||||
- 报告附加到任务文档
|
||||
@@ -4,5 +4,8 @@
|
||||
"version": "1.0.0",
|
||||
"author": {
|
||||
"name": "qiudl"
|
||||
}
|
||||
},
|
||||
"install_name": "req-compare",
|
||||
"install_type": "skill",
|
||||
"dir_category": "req"
|
||||
}
|
||||
|
||||
@@ -4,5 +4,8 @@
|
||||
"version": "2.0.0",
|
||||
"author": {
|
||||
"name": "qiudl"
|
||||
}
|
||||
},
|
||||
"install_name": "req-design",
|
||||
"install_type": "skill",
|
||||
"dir_category": "req"
|
||||
}
|
||||
|
||||
@@ -5,5 +5,8 @@
|
||||
"deprecated": true,
|
||||
"author": {
|
||||
"name": "qiudl"
|
||||
}
|
||||
},
|
||||
"install_name": "req-dev",
|
||||
"install_type": "skill",
|
||||
"dir_category": "req"
|
||||
}
|
||||
|
||||
11
skills-req/req-lookback-plugin/.claude-plugin/plugin.json
Normal file
11
skills-req/req-lookback-plugin/.claude-plugin/plugin.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "req-lookback-plugin",
|
||||
"description": "回归测试。部署后自动验证变更涉及的功能是否正常。可独立调用或由 /req done 自动触发。",
|
||||
"version": "1.0.0",
|
||||
"author": {
|
||||
"name": "qiudl"
|
||||
},
|
||||
"install_name": "req-lookback",
|
||||
"install_type": "command",
|
||||
"dir_category": "req"
|
||||
}
|
||||
87
skills-req/req-lookback-plugin/skills/SKILL.md
Normal file
87
skills-req/req-lookback-plugin/skills/SKILL.md
Normal file
@@ -0,0 +1,87 @@
|
||||
---
|
||||
name: req-lookback
|
||||
description: 回归测试。部署后自动验证变更涉及的功能是否正常。可独立调用或由 /req done 自动触发。
|
||||
---
|
||||
|
||||
# 回归测试 (lookback)
|
||||
|
||||
对本次部署变更的功能执行自动化验证。
|
||||
|
||||
## 执行流程
|
||||
|
||||
### 1. 获取变更文件列表
|
||||
|
||||
```bash
|
||||
# 优先从最近合并的 PR 获取(覆盖 merge 多 commit 场景)
|
||||
gh pr list --state merged --base main --limit 1 --json number,files
|
||||
# 回退:git diff
|
||||
git diff HEAD~1..HEAD --name-only
|
||||
```
|
||||
|
||||
### 2. 自动发现验证项(动态推断)
|
||||
|
||||
读取变更文件,按类型推断需要验证什么:
|
||||
|
||||
| 文件类型 | 推断方式 | 验证命令 |
|
||||
|----------|---------|---------|
|
||||
| `*.vue` / `*.tsx` | grep router 配置,提取对应路由路径 | `curl -sf -o /dev/null -w "%{http_code}" ${SERVER}${ROUTE}` |
|
||||
| `app/api/*.py` | grep 路由装饰器 `@router.get/post`,提取 API 路径 | `curl -sf -o /dev/null -w "%{http_code}" ${SERVER}/api${PATH}` |
|
||||
| `app/services/*.py` | 找到引用该 service 的 api 文件,提取关联 API | 同上 |
|
||||
| `nginx.conf` | 提取 location 块 | `curl` 各路径检查状态码 |
|
||||
| `docker-compose.yml` | 提取服务列表 | `docker ps` 检查容器状态 |
|
||||
| `alembic/*.py` | 提取表名 | `psql -c "\d table_name"` |
|
||||
| `*.md` / `*.txt` / `SKILL.md` | 纯文档 | **N/A(自动通过)** |
|
||||
| `*.css` / `*.scss` | 纯样式 | 轻量验证:页面可达即可 |
|
||||
|
||||
### 3. 执行验证
|
||||
|
||||
**远端模式**(SSH 可达时):
|
||||
```bash
|
||||
# 3 秒超时检测
|
||||
ssh -o ConnectTimeout=3 ${EC2_USER}@${EC2_HOST} "echo ok" 2>/dev/null
|
||||
# 成功 → 执行完整验证(docker ps + curl + docker logs)
|
||||
```
|
||||
|
||||
**降级模式**(SSH 不可达时):
|
||||
```bash
|
||||
# 检查最近 CI run 是否成功
|
||||
gh run list --repo ${OWNER}/${REPO} --limit 1 --json conclusion
|
||||
# conclusion=success → PASS
|
||||
```
|
||||
|
||||
### 4. 输出报告
|
||||
|
||||
```markdown
|
||||
## 回归测试报告
|
||||
|
||||
### 变更范围
|
||||
| 文件 | 类型 | 推断的验证项 |
|
||||
|
||||
### 测试结果
|
||||
| 测试项 | 方式 | 预期 | 实际 | 状态 |
|
||||
|
||||
### 结论: ✅ PASS / ❌ FAIL / N/A
|
||||
```
|
||||
|
||||
### 5. 失败处理
|
||||
|
||||
```
|
||||
⚠️ 回归测试失败:{失败项描述}
|
||||
|
||||
建议操作:
|
||||
1. [回滚] git revert HEAD~1 + /req deploy(推荐,影响最小)
|
||||
2. [修复] 创建 hotfix 分支修复后重新部署
|
||||
3. [忽略] 标记为已知问题,继续归档
|
||||
|
||||
输入 1/2/3:
|
||||
```
|
||||
|
||||
- 选 1 → 执行 `git revert`,提示用户运行 `/req deploy`
|
||||
- 选 2 → 创建 hotfix 任务(ai-proj create_task),阻断归档
|
||||
- 选 3 → 记录到报告,继续
|
||||
|
||||
## 任务关联
|
||||
|
||||
- linkRole: `test`
|
||||
- 任务标题: `【回归】回归测试: {需求标题}`
|
||||
- 报告附加到任务文档
|
||||
@@ -4,5 +4,8 @@
|
||||
"version": "2.0.0",
|
||||
"author": {
|
||||
"name": "qiudl"
|
||||
}
|
||||
},
|
||||
"install_name": "req",
|
||||
"install_type": "skill",
|
||||
"dir_category": "req"
|
||||
}
|
||||
|
||||
@@ -4,5 +4,8 @@
|
||||
"version": "2.0.0",
|
||||
"author": {
|
||||
"name": "qiudl"
|
||||
}
|
||||
},
|
||||
"install_name": "req-prd",
|
||||
"install_type": "skill",
|
||||
"dir_category": "req"
|
||||
}
|
||||
|
||||
@@ -4,5 +4,8 @@
|
||||
"version": "2.0.0",
|
||||
"author": {
|
||||
"name": "qiudl"
|
||||
}
|
||||
},
|
||||
"install_name": "req-prototype",
|
||||
"install_type": "skill",
|
||||
"dir_category": "req"
|
||||
}
|
||||
|
||||
@@ -2,5 +2,10 @@
|
||||
"name": "req-research-plugin",
|
||||
"description": "需求调研插件。代码审计、数据库分析、现有功能调研。挂载在 analysis 阶段,需要深度调研时激活。",
|
||||
"version": "1.0.0",
|
||||
"author": { "name": "qiudl" }
|
||||
"author": {
|
||||
"name": "qiudl"
|
||||
},
|
||||
"install_name": "req-research",
|
||||
"install_type": "skill",
|
||||
"dir_category": "req"
|
||||
}
|
||||
|
||||
11
skills-req/req-retro-plugin/.claude-plugin/plugin.json
Normal file
11
skills-req/req-retro-plugin/.claude-plugin/plugin.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "req-retro-plugin",
|
||||
"description": "复盘总结。自动采集数据、计算质量评分、跨需求模式识别、技能自动进化。可独立调用或由 /req done 自动触发。",
|
||||
"version": "1.0.0",
|
||||
"author": {
|
||||
"name": "qiudl"
|
||||
},
|
||||
"install_name": "req-retro",
|
||||
"install_type": "command",
|
||||
"dir_category": "req"
|
||||
}
|
||||
150
skills-req/req-retro-plugin/skills/SKILL.md
Normal file
150
skills-req/req-retro-plugin/skills/SKILL.md
Normal file
@@ -0,0 +1,150 @@
|
||||
---
|
||||
name: req-retro
|
||||
description: 复盘总结。自动采集数据、计算质量评分、跨需求模式识别、技能自动进化。可独立调用或由 /req done 自动触发。
|
||||
---
|
||||
|
||||
# 复盘总结 (retro)
|
||||
|
||||
自动采集需求全生命周期数据,计算质量评分,识别跨需求模式,沉淀经验。
|
||||
|
||||
## 执行流程
|
||||
|
||||
### 1. 数据采集
|
||||
|
||||
| 数据 | 来源 | 方式 |
|
||||
|------|------|------|
|
||||
| 各阶段时间 | ai-proj | `mcp__ai-proj__get_requirement_history` |
|
||||
| 任务完成情况 | ai-proj | `mcp__ai-proj__get_requirement_tasks` |
|
||||
| CR 发现数 | CR 任务文档 | 从【代码评审】任务文档中提取缺陷计数 |
|
||||
| 测试结果 | test 任务文档 | 从【测试】任务文档中提取通过/失败数 |
|
||||
| audit 缺陷数 | 本次 audit 结果 | 从 audit 报告中提取 |
|
||||
| git 统计 | git | `git log --stat` 提交数、变更行数 |
|
||||
|
||||
### 2. 质量评分(Quality Score)
|
||||
|
||||
```
|
||||
QS = lookback_pass_rate × 0.3
|
||||
+ audit_defect_score × 0.3
|
||||
+ cr_density_score × 0.2
|
||||
+ test_pass_rate × 0.2
|
||||
|
||||
audit_defect_score:
|
||||
0 缺陷 = 100
|
||||
每个低级 -5
|
||||
每个中级 -20
|
||||
每个高级 -60
|
||||
致命 = 0
|
||||
|
||||
cr_density_score:
|
||||
100 - (发现数 / 变更行数 × 1000)
|
||||
下限 0,上限 100
|
||||
```
|
||||
|
||||
### 3. 历史趋势对比
|
||||
|
||||
读取 `memory/retro_metrics.md` 的明细数据:
|
||||
|
||||
```
|
||||
本次 vs 近 10 次平均:
|
||||
总耗时: 5h 44min vs avg 8h 12min (↓ 30% 改善)
|
||||
质量分: 92 vs avg 85 (↑ 8% 提升)
|
||||
缺陷数: 2 vs avg 3.2 (↓ 37% 改善)
|
||||
变更行: 279 vs avg 450 (↓ 38%)
|
||||
```
|
||||
|
||||
首次执行时显示:"首次复盘,无历史数据可对比。"
|
||||
|
||||
### 4. 跨需求模式识别
|
||||
|
||||
读取 retro_metrics.md 全部明细,AI 分析三类模式:
|
||||
|
||||
**耗时模式**:
|
||||
- 按需求类型(前端/后端/混合/技能)分组统计平均耗时
|
||||
- 识别异常:某次耗时是同类平均的 2 倍以上 → 标注原因
|
||||
|
||||
**缺陷热区**:
|
||||
- 统计各文件在多次需求中的 audit 发现频率
|
||||
- 同一文件 3 次以上出现 → 标记为热区
|
||||
|
||||
**改进验证**:
|
||||
- 对比引入某流程/技能前后的质量分趋势
|
||||
- 例:"引入 defect-analysis 后 5 次需求平均质量分从 72 → 88"
|
||||
|
||||
### 5. 自动更新技能
|
||||
|
||||
当模式识别发现高频缺陷类型时:
|
||||
|
||||
```
|
||||
AI: "近 5 次需求中 3 次 audit 发现了 {缺陷类型}。
|
||||
建议在 dev-review 的 CR 检查清单中增加:'{新检查项}'。"
|
||||
|
||||
用户确认?(y/n)
|
||||
```
|
||||
|
||||
用户确认 → 自动在 `~/.claude/skills/dev-review/SKILL.md` 检查清单末尾追加该检查项。
|
||||
|
||||
### 6. 更新 retro_metrics.md
|
||||
|
||||
追加一行到明细:
|
||||
```
|
||||
| REQ-xxx | 2026-04-18 | 5h44m | 92 | 2 | 279 | 3 | frontend |
|
||||
```
|
||||
|
||||
更新汇总:重新计算近 10 次平均值和趋势箭头(↑↓→)。
|
||||
|
||||
超过 30 条明细 → 最早的移入 `retro_metrics_archive.md`。
|
||||
|
||||
### 7. 生成文档
|
||||
|
||||
输出 `04-生命周期总结.md`,附加到【复盘】任务:
|
||||
|
||||
```markdown
|
||||
# 生命周期总结 - REQ-xxx
|
||||
|
||||
## 质量评分: 92/100
|
||||
|
||||
## 时间线
|
||||
| 阶段 | 进入时间 | 耗时 |
|
||||
|------|---------|------|
|
||||
| 创建 | 04-18 11:14 | - |
|
||||
| PRD | 04-18 11:18 | 4min |
|
||||
| 评审 | 04-18 11:19 | 1min |
|
||||
| 开发 | 04-18 12:00 | 41min |
|
||||
| 部署 | 04-18 16:58 | 4h58min |
|
||||
| 总耗时 | | 5h 44min |
|
||||
|
||||
## 质量指标
|
||||
| 指标 | 本次 | 近10次均 | 对比 |
|
||||
|------|------|---------|------|
|
||||
| 质量分 | 92 | 85 | ↑ |
|
||||
| audit 缺陷 | 2(低) | 3.2 | ↓ |
|
||||
| CR 发现 | 0 | 1.5 | ↓ |
|
||||
| 测试通过率 | 100% | 95% | ↑ |
|
||||
|
||||
## git 统计
|
||||
| 提交数 | 变更文件 | +行 | -行 |
|
||||
|--------|---------|-----|-----|
|
||||
| 3 | 1 | 279 | 2 |
|
||||
|
||||
## 模式识别
|
||||
- {耗时/热区/改进 分析结果}
|
||||
|
||||
## 经验教训(写入 memory)
|
||||
- {AI 提取的非显然教训}
|
||||
|
||||
## 技能更新
|
||||
- {已更新/无更新}
|
||||
```
|
||||
|
||||
### 8. 写入 memory
|
||||
|
||||
将有价值的经验写入 memory:
|
||||
- 类型:`feedback` 或 `project`
|
||||
- 只写非显然的、可指导未来工作的教训
|
||||
- 用户确认后写入
|
||||
|
||||
## 任务关联
|
||||
|
||||
- linkRole: `documentation`
|
||||
- 任务标题: `【复盘】生命周期总结: {需求标题}`
|
||||
- 04-生命周期总结.md 附加到任务文档
|
||||
@@ -4,5 +4,8 @@
|
||||
"version": "1.0.0",
|
||||
"author": {
|
||||
"name": "qiudl"
|
||||
}
|
||||
},
|
||||
"install_name": "req-review",
|
||||
"install_type": "skill",
|
||||
"dir_category": "req"
|
||||
}
|
||||
|
||||
@@ -4,5 +4,8 @@
|
||||
"version": "1.0.0",
|
||||
"author": {
|
||||
"name": "qiudl"
|
||||
}
|
||||
},
|
||||
"install_name": "req-test-gate",
|
||||
"install_type": "skill",
|
||||
"dir_category": "req"
|
||||
}
|
||||
|
||||
@@ -4,5 +4,8 @@
|
||||
"version": "1.0.0",
|
||||
"author": {
|
||||
"name": "qiudl"
|
||||
}
|
||||
},
|
||||
"install_name": "req-workflow",
|
||||
"install_type": "skill",
|
||||
"dir_category": "req"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user