自我进化技能,实现技术债清理、迭代飞轮、持续改进,从错误中学习并优化系统
使用 Read 工具读取:.EnjoyHarness/SKILL_REGISTRY.md
检查条件:
如果未完成:
❌ 错误: 错误诊断未执行
💡 请先运行: harness-diagnose-and-improve
使用 Read 工具读取:.learnings/ERRORS.md
提取关键学习:
使用 Bash 工具扫描项目:
# 识别技术债指标
echo "=== 技术债识别 ==="
echo ""
# 1. TODO/FIXME标记
TODO_COUNT=$(grep -r "TODO" --include="*.go" --include="*.ts" --include="*.py" . | grep -v ".git" | wc -l)
FIXME_COUNT=$(grep -r "FIXME" --include="*.go" --include="*.ts" --include="*.py" . | grep -v ".git" | wc -l)
echo "📝 TODO标记: $TODO_COUNT个"
echo "🔧 FIXME标记: $FIXME_COUNT个"
# 2. 长文件/函数
LONG_FILES=$(find . -type f \( -name "*.go" -o -name "*.ts" -o -name "*.py" \) -exec wc -l {} + | awk '$1 > 500 {print $2}' | wc -l)
echo "📄 超长文件(>500行): $LONG_FILES个"
# 3. 重复代码(简化检测)
DUPLICATE_IMPORT=$(grep -r "^import" --include="*.go" . | grep -v ".git" | sort | uniq -c | awk '$1 > 5 {print $0}' | wc -l)
echo "🔁 重复导入模式: $DUPLICATE_IMPORT个"
# 4. 缺失文档
FILES_WITHOUT_DOCS=$(find . -type f \( -name "*.go" -o -name "*.ts" -o -name "*.py" \) -exec grep -L "package\|module\|class" {} \; | grep -v ".git" | wc -l)
echo "📚 缺失文档文件: $FILES_WITHOUT_DOCS个"
# 5. 错误记录中的问题
ERROR_PATTERNS=$(cat .learnings/ERRORS.md | grep -v "^#" | grep -v "^$" | wc -l)
echo "⚠️ 错误模式数: $ERROR_PATTERNS个"
echo ""
TOTAL_TECH_DEBT=$((TODO_COUNT + FIXME_COUNT + LONG_FILES + DUPLICATE_IMPORT + FILES_WITHOUT_DOCS + ERROR_PATTERNS))
echo "📊 技术债总分: $TOTAL_TECH_DEBT"
使用 Write 工具创建文件:.EnjoyHarness/TECH_DEBT_INVENTORY.md
---
generated_at: {当前时间}
total_debt: {总数}
priority_distribution: "{高}/{中}/{低}"
---
# 技术债清单
## 清单概况
- 生成时间: {当前时间}
- 技术债总数: {总数}
- 高优先级: {数量}
- 中优先级: {数量}
- 低优先级: {数量}
## 高优先级技术债(必须清理)
### 债务1: {名称}
- **类型**: {代码/架构/文档}
- **位置**: {文件路径}
- **描述**: {详细描述}
- **影响**: {对系统的影响}
- **清理成本**: {估算工作量}
- **清理方案**: {具体方案}
- **优先级**: P0
### 债务2: {名称}
{重复上述结构}
---
## 中优先级技术债(应该清理)
{同上结构}
---
## 低优先级技术债(建议清理)
{同上结构}
---
## 技术债趋势
### 历史对比
- 上次清理: {日期}
- 上次债务数: {数量}
- 当前债务数: {数量}
- 变化: {增加/减少} {数量}
### 趋势分析
- 趋势: {改善/持平/恶化}
- 预计清偿时间: {估算}
---
## 清理计划
### 立即清理(本周)
- [ ] {债务1}
- [ ] {债务2}
### 计划清理(本月)
- [ ] {债务1}
- [ ] {债务2}
### 长期清理(本季度)
- [ ] {债务1}
- [ ] {债务2}
根据优先级清理:
# 示例:清理TODO标记
# 查找所有TODO
TODO_ITEMS=$(grep -rn "TODO" --include="*.go" --include="*.ts" --include="*.py" . | grep -v ".git" | head -5)
echo "清理高优先级TODO:"
echo "$TODO_ITEMS"
# 对每个TODO进行处理
while IFS= read -r item; do
FILE=$(echo "$item" | cut -d':' -f1)
LINE=$(echo "$item" | cut -d':' -f2)
CONTENT=$(echo "$item" | cut -d':' -f3-)
echo "处理: $FILE:$LINE"
echo "内容: $CONTENT"
# 根据TODO内容决定清理方式
# 选项1: 实现功能
# 选项2: 添加注释说明
# 选项3: 移除TODO(如果不再需要)
done <<< "$TODO_ITEMS"
# 示例:重构超长文件
LONG_FILES=$(find . -type f \( -name "*.go" -o -name "*.ts" -o -name "*.py" \) -exec wc -l {} + | awk '$1 > 500 {print $2}')
echo "重构超长文件:"
echo "$LONG_FILES"
# 对每个长文件进行处理
for file in $LONG_FILES; do
echo "分析: $file"
# 统计文件行数
LINES=$(wc -l < "$file")
echo "行数: $LINES"
# 建议拆分方案
echo "建议: 将文件拆分为多个小文件,每个文件 < 500行"
done
# 示例:补充缺失文档
FILES_WITHOUT_DOCS=$(find . -type f \( -name "*.go" -o -name "*.ts" -o -name "*.py" \) -exec grep -L "package\|module\|class" {} \; | grep -v ".git" | head -10)
echo "补充文档:"
echo "$FILES_WITHOUT_DOCS"
# 对每个文件补充文档
for file in $FILES_WITHOUT_DOCS; do
echo "补充: $file"
# 使用Edit工具添加文档注释
done
使用 Read 工具读取:.EnjoyHarness/ITERATION_FLYWHEEL.md
如果文件不存在,使用 Write 工具创建:
---
created_at: {当前时间}
total_cycles: 0