self-evolve-framework 1.0.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/LICENSE +21 -0
- package/README.md +84 -0
- package/bin/cli.js +143 -0
- package/package.json +27 -0
- package/template/rules/ponytail.mdc +33 -0
- package/template/rules/self-evolve.mdc +93 -0
- package/template/skills/skillopt-sleep/SKILL.md +63 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Self-Evolve Framework
|
|
2
|
+
|
|
3
|
+
> 可复用的 CodeBuddy 自我进化飞轮 — Post-Edit 验证闭环 + 规则自动推荐 + 离线进化分析
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# 方式 1:npx(推荐,零安装)
|
|
9
|
+
npx self-evolve-framework init
|
|
10
|
+
|
|
11
|
+
# 方式 2:全局安装
|
|
12
|
+
npm install -g self-evolve-framework
|
|
13
|
+
self-evolve init
|
|
14
|
+
|
|
15
|
+
# 方式 3:项目依赖
|
|
16
|
+
npm install --save-dev self-evolve-framework
|
|
17
|
+
npx self-evolve init
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### 选项
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# 指定项目路径
|
|
24
|
+
npx self-evolve-framework init --project ./my-app
|
|
25
|
+
|
|
26
|
+
# 预览模式(不写入任何文件)
|
|
27
|
+
npx self-evolve-framework init --dry-run
|
|
28
|
+
|
|
29
|
+
# 跳过 CLAUDE.md 更新
|
|
30
|
+
npx self-evolve-framework init --skip-claude-md
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## 安装了什么
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
.codebuddy/
|
|
37
|
+
├── rules/
|
|
38
|
+
│ ├── self-evolve.mdc ← 编排层(always 激活)
|
|
39
|
+
│ └── ponytail.mdc ← 代码最小化原则
|
|
40
|
+
├── skills/
|
|
41
|
+
│ └── skillopt-sleep/
|
|
42
|
+
│ └── SKILL.md ← 离线进化分析
|
|
43
|
+
CLAUDE.md ← 追加自我进化章节
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## 使用
|
|
47
|
+
|
|
48
|
+
### 每日自动生效
|
|
49
|
+
|
|
50
|
+
self-evolve rule 在每个对话中 always 激活:
|
|
51
|
+
- **改代码前** → Ponytail 检查 + CodeGraph 影响评估
|
|
52
|
+
- **改代码后** → 自动 `npm run build` + `cargo check` 验证
|
|
53
|
+
- **验证失败** → 分析修复 → 记录到记忆 → ≥2 次同模式 → 自动写规则
|
|
54
|
+
- **会话结束** → 超 7 天未审计 → 提醒
|
|
55
|
+
|
|
56
|
+
### 按需检查
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
/skillopt dry-run # 每日健康检查,5 秒出报告
|
|
60
|
+
/skillopt run # 周改进提案
|
|
61
|
+
/skillopt adopt # 采纳建议
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## 前提
|
|
65
|
+
|
|
66
|
+
- CodeBuddy IDE(VSCode 系)
|
|
67
|
+
- 项目根目录下有 `.codebuddy/` 目录(自动创建)
|
|
68
|
+
- 需要 CodeGraph MCP 服务器支持(可选,但推荐)
|
|
69
|
+
|
|
70
|
+
## 文件结构
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
self-evolve-framework/
|
|
74
|
+
├── package.json # npm 包配置
|
|
75
|
+
├── bin/cli.js # CLI 安装工具
|
|
76
|
+
├── template/
|
|
77
|
+
│ ├── rules/
|
|
78
|
+
│ │ ├── self-evolve.mdc
|
|
79
|
+
│ │ └── ponytail.mdc
|
|
80
|
+
│ └── skills/
|
|
81
|
+
│ └── skillopt-sleep/
|
|
82
|
+
│ └── SKILL.md
|
|
83
|
+
└── README.md
|
|
84
|
+
```
|
package/bin/cli.js
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync, cpSync } from "fs"
|
|
4
|
+
import { join, resolve } from "path"
|
|
5
|
+
import { fileURLToPath } from "url"
|
|
6
|
+
|
|
7
|
+
const __dirname = fileURLToPath(new URL(".", import.meta.url))
|
|
8
|
+
const TEMPLATE_DIR = resolve(__dirname, "../template")
|
|
9
|
+
|
|
10
|
+
const COMMANDS = {
|
|
11
|
+
init: {
|
|
12
|
+
desc: "安装自我进化飞轮到当前项目",
|
|
13
|
+
run: async (args) => init(args),
|
|
14
|
+
},
|
|
15
|
+
sync: {
|
|
16
|
+
desc: "从源项目同步配置到当前项目",
|
|
17
|
+
run: async (args) => sync(args),
|
|
18
|
+
},
|
|
19
|
+
help: {
|
|
20
|
+
desc: "显示帮助信息",
|
|
21
|
+
run: () => showHelp(),
|
|
22
|
+
},
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function showHelp() {
|
|
26
|
+
console.log(`
|
|
27
|
+
self-evolve — CodeBuddy 自我进化飞轮安装工具
|
|
28
|
+
|
|
29
|
+
用法:
|
|
30
|
+
npx self-evolve-framework init 安装到当前项目
|
|
31
|
+
npx self-evolve-framework sync 从源项目同步
|
|
32
|
+
|
|
33
|
+
选项:
|
|
34
|
+
--project <path> 指定目标项目路径(默认当前目录)
|
|
35
|
+
--skip-claude-md 跳过更新 CLAUDE.md
|
|
36
|
+
--dry-run 预览要复制的文件,不实际写入
|
|
37
|
+
|
|
38
|
+
示例:
|
|
39
|
+
npx self-evolve-framework init
|
|
40
|
+
npx self-evolve-framework init --project ./my-app
|
|
41
|
+
npx self-evolve-framework init --skip-claude-md --dry-run
|
|
42
|
+
`)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
async function init(args) {
|
|
46
|
+
const baseDir = resolve(args["--project"] || process.cwd())
|
|
47
|
+
const dryRun = !!args["--dry-run"]
|
|
48
|
+
const skipClaudeMd = !!args["--skip-claude-md"]
|
|
49
|
+
|
|
50
|
+
console.log(`📍 项目路径: ${baseDir}`)
|
|
51
|
+
console.log(`🧪 ${dryRun ? "DRY RUN — 不写入文件" : "执行中..."}\n`)
|
|
52
|
+
|
|
53
|
+
// 要复制的目录映射:{ 源相对路径 → 目标相对路径 }
|
|
54
|
+
const dirs = [
|
|
55
|
+
{ src: "rules", dest: ".codebuddy/rules" },
|
|
56
|
+
{ src: "skills/skillopt-sleep", dest: ".codebuddy/skills/skillopt-sleep" },
|
|
57
|
+
]
|
|
58
|
+
|
|
59
|
+
let count = 0
|
|
60
|
+
for (const { src, dest } of dirs) {
|
|
61
|
+
const srcDir = resolve(TEMPLATE_DIR, src)
|
|
62
|
+
const destDir = resolve(baseDir, dest)
|
|
63
|
+
if (!existsSync(srcDir)) continue
|
|
64
|
+
if (!dryRun) mkdirSync(destDir, { recursive: true })
|
|
65
|
+
console.log(`${dryRun ? " 🔍 将复制" : " ✅ 复制"} ${src}/ → ${dest}/`)
|
|
66
|
+
if (!dryRun) cpSync(srcDir, destDir, { recursive: true, force: true })
|
|
67
|
+
count++
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// 更新 CLAUDE.md
|
|
71
|
+
if (!skipClaudeMd) {
|
|
72
|
+
const claudePath = resolve(baseDir, "CLAUDE.md")
|
|
73
|
+
const selfEvolveSection = `
|
|
74
|
+
## 自我进化(always 激活)
|
|
75
|
+
|
|
76
|
+
统一由 \`.codebuddy/rules/self-evolve.mdc\` 编排。
|
|
77
|
+
调度 Ponytail(代码最小化)+ CodeGraph(依赖分析)+ Skillopt-Sleep(离线进化)
|
|
78
|
+
→ 形成 **post-edit 验证 → 错误记忆 → 规则推荐** 闭环。
|
|
79
|
+
`
|
|
80
|
+
if (existsSync(claudePath)) {
|
|
81
|
+
const content = readFileSync(claudePath, "utf-8")
|
|
82
|
+
if (!content.includes("自我进化")) {
|
|
83
|
+
if (!dryRun) {
|
|
84
|
+
writeFileSync(claudePath, content.trimEnd() + "\n" + selfEvolveSection + "\n")
|
|
85
|
+
}
|
|
86
|
+
console.log(`${dryRun ? " 🔍 将添加" : " ✅ 添加"} 自我进化章节 → CLAUDE.md`)
|
|
87
|
+
count++
|
|
88
|
+
} else {
|
|
89
|
+
console.log(" ⏭️ 跳过 CLAUDE.md 已包含自我进化章节")
|
|
90
|
+
}
|
|
91
|
+
} else {
|
|
92
|
+
if (!dryRun) {
|
|
93
|
+
writeFileSync(claudePath, `# ${resolve(baseDir).split(/[/\\]/).pop()} 项目约束\n${selfEvolveSection}\n`)
|
|
94
|
+
}
|
|
95
|
+
console.log(`${dryRun ? " 🔍 将创建" : " ✅ 创建"} CLAUDE.md(含自我进化章节)`)
|
|
96
|
+
count++
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
console.log(`\n${dryRun ? `🔍 预览完成,共 ${count} 项操作` : `✅ 已完成 ${count} 项操作 — 下次对话即可生效`}`)
|
|
101
|
+
if (!dryRun) {
|
|
102
|
+
console.log("\n📖 使用指南:")
|
|
103
|
+
console.log(" /skillopt dry-run → 每日健康检查")
|
|
104
|
+
console.log(" /skillopt run → 周改进提案")
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
async function sync(args) {
|
|
109
|
+
// 从 self-evolve-framework 项目中读取默认配置
|
|
110
|
+
const baseDir = resolve(args["--project"] || process.cwd())
|
|
111
|
+
const srcDir = resolve(args["--from"] || TEMPLATE_DIR.replace(/template$/, ""))
|
|
112
|
+
console.log(`从 ${srcDir} 同步配置到 ${baseDir}`)
|
|
113
|
+
await init({ ...args, "--project": baseDir })
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// 入口
|
|
117
|
+
const cmd = process.argv[2] || "help"
|
|
118
|
+
const fn = COMMANDS[cmd]
|
|
119
|
+
if (!fn) {
|
|
120
|
+
console.error(`未知命令: ${cmd}\n`)
|
|
121
|
+
showHelp()
|
|
122
|
+
process.exit(1)
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// 解析命令行参数
|
|
126
|
+
const args = {}
|
|
127
|
+
for (let i = 3; i < process.argv.length; i++) {
|
|
128
|
+
const arg = process.argv[i]
|
|
129
|
+
if (arg.startsWith("--")) {
|
|
130
|
+
const next = process.argv[i + 1]
|
|
131
|
+
if (next && !next.startsWith("--")) {
|
|
132
|
+
args[arg] = next
|
|
133
|
+
i++
|
|
134
|
+
} else {
|
|
135
|
+
args[arg] = true
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
fn.run(args).catch((err) => {
|
|
141
|
+
console.error("❌ 错误:", err.message)
|
|
142
|
+
process.exit(1)
|
|
143
|
+
})
|
package/package.json
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "self-evolve-framework",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "CodeBuddy 自我进化飞轮 — Post-Edit 验证闭环 + 规则自动推荐 + 离线进化分析",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"self-evolve": "bin/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"postinstall": "node bin/cli.js help"
|
|
11
|
+
},
|
|
12
|
+
"keywords": [
|
|
13
|
+
"codebuddy",
|
|
14
|
+
"self-evolution",
|
|
15
|
+
"ponytail",
|
|
16
|
+
"skillopt"
|
|
17
|
+
],
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"repository": {
|
|
20
|
+
"type": "git",
|
|
21
|
+
"url": "git+https://github.com/your-username/self-evolve-framework.git"
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"bin/",
|
|
25
|
+
"template/"
|
|
26
|
+
]
|
|
27
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Ponytail - 懒人高级开发者模式。写最少、最安全的代码。
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Ponytail 核心规则
|
|
7
|
+
|
|
8
|
+
在写任何代码之前,先停在能解决问题的**最低台阶**上,按优先级检查:
|
|
9
|
+
|
|
10
|
+
1. **这东西真的需要建吗?**(YAGNI)不需要就跳过
|
|
11
|
+
2. **标准库已经提供了吗?** 直接用它
|
|
12
|
+
3. **平台/框架原生功能能覆盖吗?** 直接用它
|
|
13
|
+
4. **已安装的依赖能解决吗?** 直接用它
|
|
14
|
+
5. **能一行搞定吗?** 就写一行
|
|
15
|
+
6. **以上都不行?** 才写最少工作的代码
|
|
16
|
+
|
|
17
|
+
## 执行规则
|
|
18
|
+
|
|
19
|
+
- 不要创建未经明确要求的抽象
|
|
20
|
+
- 能不引入新依赖就别引入
|
|
21
|
+
- 不要写没人要的样板代码
|
|
22
|
+
- 删除优于添加,无聊优于花哨,文件数量越少越好
|
|
23
|
+
- 质疑复杂需求:"你真的需要 X,还是 Y 可以覆盖?"
|
|
24
|
+
- 当两种方法长度相同时,选边界情况更正确的那一个
|
|
25
|
+
- 有意的简化用 `ponytail:` 注释标注,写明已知上限和升级路径
|
|
26
|
+
|
|
27
|
+
## 不偷懒的地方(必须认真对待)
|
|
28
|
+
|
|
29
|
+
- 输入校验
|
|
30
|
+
- 错误处理
|
|
31
|
+
- 安全性
|
|
32
|
+
- 可访问性
|
|
33
|
+
- 任何明确要求的事情
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 自我进化飞轮 — 统一调度 Ponytail/CodeGraph/Skillopt-Sleep,形成 post-edit 验证→错误记忆→规则推荐闭环
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Self-Evolve:自我进化框架
|
|
7
|
+
|
|
8
|
+
> 此规则编排整个进化飞轮。具体约束(代码最小化、工具选择)委托给子规则。
|
|
9
|
+
|
|
10
|
+
## 调度架构
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
self-evolve.mdc(编排层 — 当前文件)
|
|
14
|
+
├── ponytail.mdc → 代码最小化检查(每个操作前)
|
|
15
|
+
├── CodeGraph MCP → 依赖图分析(重构/调 bug 时)
|
|
16
|
+
└── skillopt-sleep → 离线进化分析(按需调)
|
|
17
|
+
↓
|
|
18
|
+
post-edit 验证闭环 ← ⭐ 核心
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## 🔄 核心工作流:Post-Edit 验证闭环
|
|
22
|
+
|
|
23
|
+
**每次修改代码后必须执行以下流程:**
|
|
24
|
+
|
|
25
|
+
### 步骤 1:前置检查(修改前)
|
|
26
|
+
```
|
|
27
|
+
┌─ 修改范围 > 3 个文件?──→ 调 Ponytail 约束 → 询问用户是否可缩小
|
|
28
|
+
└─ 重构/修复 bug?─────→ 调 CodeGraph MCP → 评估影响范围
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### 步骤 2:执行修改
|
|
32
|
+
按 Ponytail 原则写最少代码。
|
|
33
|
+
|
|
34
|
+
### 步骤 3:自动验证(修改后)
|
|
35
|
+
```
|
|
36
|
+
1. 前端:运行 npm run build
|
|
37
|
+
→ 失败 → 分析错误 → 修复 → 重试 build → 最多 3 次
|
|
38
|
+
2. Rust:在 src-tauri 目录运行 cargo check(如果存在)
|
|
39
|
+
→ 失败 → 分析错误 → 修复 → 重试 cargo check → 最多 3 次
|
|
40
|
+
3. 全部通过 → 进入步骤 4
|
|
41
|
+
4. 3 次仍失败 → 停止,向用户报告错误并请求协助
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### 步骤 4:写入记忆
|
|
45
|
+
```text
|
|
46
|
+
每次验证失败,用 update_memory 记录:
|
|
47
|
+
title: "Error Pattern: {错误类型简写}"
|
|
48
|
+
action: create
|
|
49
|
+
knowledge: |
|
|
50
|
+
- 日期: YYYY-MM-DD
|
|
51
|
+
- 文件: <涉及文件>
|
|
52
|
+
- 错误: ...
|
|
53
|
+
- 修复: ...
|
|
54
|
+
- 归因: 类型不匹配 / 调用错误 / 约定遗漏
|
|
55
|
+
|
|
56
|
+
同类型错误出现 ≥2 次 → 自动创建规则:
|
|
57
|
+
create .codebuddy/rules/{pattern-name}.mdc
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### 步骤 5:会话结束检查
|
|
61
|
+
```
|
|
62
|
+
检查 memory 中上次 skillopt-sleep 审计日期
|
|
63
|
+
→ 超过 7 天 → 提示:"项目已 {N} 天未审计,需要跑 skillopt-sleep 吗?"
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## 🔧 CodeGraph MCP 使用规则
|
|
67
|
+
|
|
68
|
+
| 场景 | 必须调用的工具 |
|
|
69
|
+
|------|--------------|
|
|
70
|
+
| 重构前 | `codegraph_impact` 评估影响范围 |
|
|
71
|
+
| 修复 bug 时 | `codegraph_callers` / `codegraph_callees` 追溯调用链 |
|
|
72
|
+
| 文件间调用关系 | `codegraph_context` 获取跨文件上下文 |
|
|
73
|
+
| 理解模块架构 | `codegraph_explore` 探索模块结构 |
|
|
74
|
+
|
|
75
|
+
关键词触发:`重构`、`修改`、`影响`、`调用链`、`谁用了`、`谁调了`、`为什么报错`
|
|
76
|
+
|
|
77
|
+
## 🔧 Skillopt-Sleep 使用规则
|
|
78
|
+
|
|
79
|
+
> 技能位于 `.codebuddy/skills/skillopt-sleep/SKILL.md`。
|
|
80
|
+
|
|
81
|
+
| 命令 | 什么时候调 |
|
|
82
|
+
|------|-----------|
|
|
83
|
+
| `/skillopt dry-run` | 每日开始工作时(≥5 秒报告项目健康度) |
|
|
84
|
+
| `/skillopt run` | 每周总结时(生成周改进提案) |
|
|
85
|
+
| `/skillopt adopt` | 审阅后采纳建议 |
|
|
86
|
+
|
|
87
|
+
## 记忆存储路径
|
|
88
|
+
|
|
89
|
+
```text
|
|
90
|
+
update_memory → 跨会话长期记忆(错误模式、审计日期)
|
|
91
|
+
.codebuddy/memory/YYYY-MM-DD.md → 每日工作记忆
|
|
92
|
+
.codebuddy/memory/skillopt-staging/ → skillopt-sleep 暂存
|
|
93
|
+
```
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: skillopt-sleep
|
|
3
|
+
description: 离线自我进化引擎。分析历史会话、发现重复模式、优化项目 memory 和规则。用 AI 指令替代外部脚本。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# SkillOpt-Sleep — 自我进化引擎
|
|
7
|
+
|
|
8
|
+
> 此技能是 CodeBuddy 适配版(纯指令模式,不依赖外部脚本)。
|
|
9
|
+
|
|
10
|
+
## 工作流程(6 阶段)
|
|
11
|
+
|
|
12
|
+
### 阶段 1:Harvest — 收集信息
|
|
13
|
+
AI 从以下来源收集项目数据:
|
|
14
|
+
- 项目文件结构、代码模式
|
|
15
|
+
- 构建/编译错误记录(从 `.codebuddy/memory/`)
|
|
16
|
+
- 已知问题列表
|
|
17
|
+
- 现有规则集(`.codebuddy/rules/`)
|
|
18
|
+
|
|
19
|
+
### 阶段 2:Mine — 挖掘模式
|
|
20
|
+
分析收集到的数据,识别:
|
|
21
|
+
- **重复错误**:同一类 build/lint 错误出现次数
|
|
22
|
+
- **代码异嗅**:循环依赖、过度耦合、重复代码
|
|
23
|
+
- **缺失约束**:重复发生但无规则防范的问题
|
|
24
|
+
- **优化机会**:可简化的逻辑、可合并的文件
|
|
25
|
+
|
|
26
|
+
### 阶段 3:Replay — 回放验证
|
|
27
|
+
对每个发现的问题:
|
|
28
|
+
- 如果已有关联规则 → 检查规则是否被遵循
|
|
29
|
+
- 如果没有规则 → 评估是否需要新规则
|
|
30
|
+
- 如果有修复方案 → 验证方案是否仍适用
|
|
31
|
+
|
|
32
|
+
### 阶段 4:Consolidate — 合并优化
|
|
33
|
+
生成改进建议,只接受通过 Held-out 门控的比例:
|
|
34
|
+
- **新增规则**:重复 ≥2 次且无规则防范的问题
|
|
35
|
+
- **更新规则**:现有规则描述模糊或过时
|
|
36
|
+
- **删除规则**:不再相关或从未被触发的规则
|
|
37
|
+
- **优化 memory**:合并重复的错误模式记录
|
|
38
|
+
|
|
39
|
+
### 阶段 5:Stage — 暂存
|
|
40
|
+
所有建议先写入 `.codebuddy/memory/skillopt-staging/` 目录,**不修改任何活文件**。
|
|
41
|
+
|
|
42
|
+
### 阶段 6:Adopt — 采用
|
|
43
|
+
列出所有建议,由你逐条决定是否采纳:
|
|
44
|
+
```
|
|
45
|
+
📋 待采用清单
|
|
46
|
+
✅ 新增 rules/promise-chain-check.mdc → 防止未捕获 async 错误
|
|
47
|
+
✅ 更新 rules/self-evolve.mdc → 增加 cargo check 验证步骤
|
|
48
|
+
❌ 删除 rules/old-node-format.mdc → 节点格式已统一
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## 常用命令(AI 模拟)
|
|
52
|
+
|
|
53
|
+
```text
|
|
54
|
+
/skillopt dry-run → 执行阶段 1-3,输出分析报告,不写任何文件
|
|
55
|
+
/skillopt run → 执行阶段 1-5,输出暂存清单
|
|
56
|
+
/skillopt adopt → 采纳暂存清单中的建议
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## 触发建议
|
|
60
|
+
|
|
61
|
+
- **每日一次**:工作开始时调 `/skillopt dry-run`,花 30 秒看报告
|
|
62
|
+
- **周五总结**:调 `/skillopt run` 生成周改进提案
|
|
63
|
+
- **出现相同错误 2 次后**:不用调,self-evolve rule 会自动触发单条规则创建
|