self-evolve-framework 1.0.8 → 1.1.1

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.
Files changed (2) hide show
  1. package/bin/cli.js +66 -24
  2. package/package.json +1 -1
package/bin/cli.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { readFileSync, writeFileSync, existsSync, mkdirSync, cpSync } from "fs"
3
+ import { readFileSync, writeFileSync, existsSync, mkdirSync, cpSync, readdirSync, statSync } from "fs"
4
4
  import { join, resolve } from "path"
5
5
  import { fileURLToPath } from "url"
6
6
 
@@ -9,13 +9,17 @@ const TEMPLATE_DIR = resolve(__dirname, "../template")
9
9
 
10
10
  const COMMANDS = {
11
11
  init: {
12
- desc: "安装自我进化飞轮到当前项目",
12
+ desc: "一键安装全部 CodeBuddy skill + 规则到当前项目",
13
13
  run: async (args) => init(args),
14
14
  },
15
15
  sync: {
16
- desc: "从源项目同步配置到当前项目",
16
+ desc: "从框架项目同步最新的 skill + 规则到当前项目",
17
17
  run: async (args) => sync(args),
18
18
  },
19
+ list: {
20
+ desc: "列出模板中包含的所有 skill 和规则",
21
+ run: () => listSkills(),
22
+ },
19
23
  help: {
20
24
  desc: "显示帮助信息",
21
25
  run: () => showHelp(),
@@ -27,22 +31,49 @@ function showHelp() {
27
31
  self-evolve — CodeBuddy 自我进化飞轮安装工具
28
32
 
29
33
  用法:
30
- npx self-evolve-framework init 安装到当前项目
31
- npx self-evolve-framework sync 从源项目同步
34
+ npx self-evolve-framework init 一键安装全部 skill + 规则
35
+ npx self-evolve-framework list 列出模板中包含的所有 skill
36
+ npx self-evolve-framework sync 从框架同步最新版本
32
37
 
33
38
  选项:
34
39
  --project <path> 指定目标项目路径(默认当前目录)
35
40
  --skip-claude-md 跳过更新 CLAUDE.md
36
- --skip-impeccable 跳过复制 Impeccable skill
41
+ --skip-impeccable 跳过 Impeccable 设计质量 skill
37
42
  --dry-run 预览要复制的文件,不实际写入
38
43
 
39
44
  示例:
40
45
  npx self-evolve-framework init
41
46
  npx self-evolve-framework init --project ./my-app
42
- npx self-evolve-framework init --skip-claude-md --skip-impeccable --dry-run
47
+ npx self-evolve-framework init --skip-claude-md --dry-run
43
48
  `)
44
49
  }
45
50
 
51
+ function listSkills() {
52
+ const rulesDir = resolve(TEMPLATE_DIR, "rules")
53
+ const skillsDir = resolve(TEMPLATE_DIR, "skills")
54
+ console.log("\n📦 模板中包含的规则:")
55
+ if (existsSync(rulesDir)) {
56
+ for (const f of readdirSync(rulesDir).filter(f => f.endsWith(".mdc")).sort()) {
57
+ console.log(` rules/${f}`)
58
+ }
59
+ }
60
+ console.log("\n🧠 模板中包含的技能:")
61
+ if (existsSync(skillsDir)) {
62
+ for (const d of readdirSync(skillsDir).filter(f => statSync(join(skillsDir, f)).isDirectory()).sort()) {
63
+ const skillMd = join(skillsDir, d, "SKILL.md")
64
+ let desc = ""
65
+ if (existsSync(skillMd)) {
66
+ const firstLine = readFileSync(skillMd, "utf-8").split("\n").find(l => l.startsWith("description:"))
67
+ if (firstLine) desc = firstLine.replace("description: ", "").trim()
68
+ }
69
+ console.log(` ${d}/ ${desc ? "— " + desc : ""}`)
70
+ }
71
+ }
72
+ if (!existsSync(rulesDir) && !existsSync(skillsDir)) {
73
+ console.log(" (模板目录为空)")
74
+ }
75
+ }
76
+
46
77
  async function init(args) {
47
78
  const baseDir = resolve(args["--project"] || process.cwd())
48
79
  const dryRun = !!args["--dry-run"]
@@ -52,25 +83,35 @@ async function init(args) {
52
83
  console.log(`📍 项目路径: ${baseDir}`)
53
84
  console.log(`🧪 ${dryRun ? "DRY RUN — 不写入文件" : "执行中..."}\n`)
54
85
 
55
- // 要复制的目录映射:{ 源相对路径 → 目标相对路径 }
56
- const dirs = [
57
- { src: "rules", dest: ".codebuddy/rules" },
58
- { src: "skills/skillopt-sleep", dest: ".codebuddy/skills/skillopt-sleep" },
59
- ]
86
+ let count = 0
60
87
 
61
- // 默认复制 impeccable skill(除非 --skip-impeccable)
62
- if (!skipImpeccable) {
63
- dirs.push({ src: "skills/impeccable", dest: ".codebuddy/skills/impeccable" })
88
+ // 复制 rules(排除 .mdc 文件可以在以后细化)
89
+ const rulesSrc = resolve(TEMPLATE_DIR, "rules")
90
+ if (existsSync(rulesSrc)) {
91
+ if (!dryRun) {
92
+ mkdirSync(resolve(baseDir, ".codebuddy/rules"), { recursive: true })
93
+ cpSync(rulesSrc, resolve(baseDir, ".codebuddy/rules"), { recursive: true, force: true })
94
+ }
95
+ const ruleFiles = readdirSync(rulesSrc).filter(f => f.endsWith(".mdc"))
96
+ console.log(` ${dryRun ? "🔍 将复制" : "✅ 复制"} rules/ → .codebuddy/rules/(${ruleFiles.length} 个规则)`)
97
+ count++
64
98
  }
65
99
 
66
- let count = 0
67
- for (const { src, dest } of dirs) {
68
- const srcDir = resolve(TEMPLATE_DIR, src)
69
- const destDir = resolve(baseDir, dest)
70
- if (!existsSync(srcDir)) continue
71
- if (!dryRun) mkdirSync(destDir, { recursive: true })
72
- console.log(`${dryRun ? " 🔍 将复制" : " ✅ 复制"} ${src}/ → ${dest}/`)
73
- if (!dryRun) cpSync(srcDir, destDir, { recursive: true, force: true })
100
+ // 复制 skills(排除 impeccable 如果 --skip-impeccable)
101
+ const skillsSrc = resolve(TEMPLATE_DIR, "skills")
102
+ if (existsSync(skillsSrc)) {
103
+ const skillDirs = readdirSync(skillsSrc).filter(f =>
104
+ statSync(join(skillsSrc, f)).isDirectory() &&
105
+ !(skipImpeccable && f === "impeccable")
106
+ )
107
+ const skillsDest = resolve(baseDir, ".codebuddy/skills")
108
+ if (!dryRun) {
109
+ mkdirSync(skillsDest, { recursive: true })
110
+ for (const dir of skillDirs) {
111
+ cpSync(join(skillsSrc, dir), join(skillsDest, dir), { recursive: true, force: true })
112
+ }
113
+ }
114
+ console.log(` ${dryRun ? "🔍 将复制" : "✅ 复制"} skills/ → .codebuddy/skills/(${skillDirs.length} 个技能)`)
74
115
  count++
75
116
  }
76
117
 
@@ -105,11 +146,12 @@ async function init(args) {
105
146
  }
106
147
 
107
148
  console.log(`\n${dryRun ? `🔍 预览完成,共 ${count} 项操作` : `✅ 已完成 ${count} 项操作 — 下次对话即可生效`}`)
108
- if (!dryRun) {
149
+ if (!dryRun && count > 0) {
109
150
  console.log("\n📖 使用指南(在 CodeBuddy 对话中输入):")
110
151
  console.log(" skillopt-sleep dry-run → 每日健康检查")
111
152
  console.log(" skillopt-sleep run → 周改进提案")
112
153
  console.log(" impeccable audit/critique → 设计质量审查")
154
+ console.log(" npx self-evolve-framework list → 查看所有可用 skill")
113
155
  }
114
156
  }
115
157
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "self-evolve-framework",
3
- "version": "1.0.8",
3
+ "version": "1.1.1",
4
4
  "description": "CodeBuddy 自我进化飞轮 — 仅适用于 CodeBuddy IDE。Post-Edit 验证闭环 + 规则自动推荐 + 离线进化分析",
5
5
  "type": "module",
6
6
  "bin": {