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:
2026-04-20 23:55:26 +09:30
parent 84d4e35a42
commit de25f096e7
66 changed files with 3307 additions and 194 deletions

View 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"
}

View 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'"
```
**降级 1CI 日志**
```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'
```
**降级 2N/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`
- 任务标题: `【审计】部署后审计: {需求标题}`
- 报告附加到任务文档

View File

@@ -4,5 +4,8 @@
"version": "1.0.0",
"author": {
"name": "qiudl"
}
},
"install_name": "req-compare",
"install_type": "skill",
"dir_category": "req"
}

View File

@@ -4,5 +4,8 @@
"version": "2.0.0",
"author": {
"name": "qiudl"
}
},
"install_name": "req-design",
"install_type": "skill",
"dir_category": "req"
}

View File

@@ -5,5 +5,8 @@
"deprecated": true,
"author": {
"name": "qiudl"
}
},
"install_name": "req-dev",
"install_type": "skill",
"dir_category": "req"
}

View 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"
}

View 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`
- 任务标题: `【回归】回归测试: {需求标题}`
- 报告附加到任务文档

View File

@@ -4,5 +4,8 @@
"version": "2.0.0",
"author": {
"name": "qiudl"
}
},
"install_name": "req",
"install_type": "skill",
"dir_category": "req"
}

View File

@@ -4,5 +4,8 @@
"version": "2.0.0",
"author": {
"name": "qiudl"
}
},
"install_name": "req-prd",
"install_type": "skill",
"dir_category": "req"
}

View File

@@ -4,5 +4,8 @@
"version": "2.0.0",
"author": {
"name": "qiudl"
}
},
"install_name": "req-prototype",
"install_type": "skill",
"dir_category": "req"
}

View File

@@ -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"
}

View 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"
}

View 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 附加到任务文档

View File

@@ -4,5 +4,8 @@
"version": "1.0.0",
"author": {
"name": "qiudl"
}
},
"install_name": "req-review",
"install_type": "skill",
"dir_category": "req"
}

View File

@@ -4,5 +4,8 @@
"version": "1.0.0",
"author": {
"name": "qiudl"
}
},
"install_name": "req-test-gate",
"install_type": "skill",
"dir_category": "req"
}

View File

@@ -4,5 +4,8 @@
"version": "1.0.0",
"author": {
"name": "qiudl"
}
},
"install_name": "req-workflow",
"install_type": "skill",
"dir_category": "req"
}