evo-skills 0.1.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/.eslintrc.json +36 -0
- package/.prettierrc +11 -0
- package/README.md +227 -0
- package/USER-GUIDE.md +382 -0
- package/dist/cli/commands/diff.d.ts +7 -0
- package/dist/cli/commands/diff.d.ts.map +1 -0
- package/dist/cli/commands/diff.js +126 -0
- package/dist/cli/commands/diff.js.map +1 -0
- package/dist/cli/commands/freeze.d.ts +12 -0
- package/dist/cli/commands/freeze.d.ts.map +1 -0
- package/dist/cli/commands/freeze.js +93 -0
- package/dist/cli/commands/freeze.js.map +1 -0
- package/dist/cli/commands/log.d.ts +7 -0
- package/dist/cli/commands/log.d.ts.map +1 -0
- package/dist/cli/commands/log.js +76 -0
- package/dist/cli/commands/log.js.map +1 -0
- package/dist/cli/commands/rollback.d.ts +7 -0
- package/dist/cli/commands/rollback.d.ts.map +1 -0
- package/dist/cli/commands/rollback.js +92 -0
- package/dist/cli/commands/rollback.js.map +1 -0
- package/dist/cli/commands/status.d.ts +7 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +88 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +25 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config/defaults.d.ts +6 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +31 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +68 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +195 -0
- package/dist/config/index.js.map +1 -0
- package/dist/core/evaluator/base-rule.d.ts +50 -0
- package/dist/core/evaluator/base-rule.d.ts.map +1 -0
- package/dist/core/evaluator/base-rule.js +69 -0
- package/dist/core/evaluator/base-rule.js.map +1 -0
- package/dist/core/evaluator/index.d.ts +33 -0
- package/dist/core/evaluator/index.d.ts.map +1 -0
- package/dist/core/evaluator/index.js +74 -0
- package/dist/core/evaluator/index.js.map +1 -0
- package/dist/core/evaluator/rules/repeated-drift.d.ts +19 -0
- package/dist/core/evaluator/rules/repeated-drift.d.ts.map +1 -0
- package/dist/core/evaluator/rules/repeated-drift.js +82 -0
- package/dist/core/evaluator/rules/repeated-drift.js.map +1 -0
- package/dist/core/evaluator/rules/repeated-manual-fix.d.ts +23 -0
- package/dist/core/evaluator/rules/repeated-manual-fix.d.ts.map +1 -0
- package/dist/core/evaluator/rules/repeated-manual-fix.js +97 -0
- package/dist/core/evaluator/rules/repeated-manual-fix.js.map +1 -0
- package/dist/core/journal/index.d.ts +76 -0
- package/dist/core/journal/index.d.ts.map +1 -0
- package/dist/core/journal/index.js +207 -0
- package/dist/core/journal/index.js.map +1 -0
- package/dist/core/observer/base-observer.d.ts +64 -0
- package/dist/core/observer/base-observer.d.ts.map +1 -0
- package/dist/core/observer/base-observer.js +142 -0
- package/dist/core/observer/base-observer.js.map +1 -0
- package/dist/core/observer/codex-observer.d.ts +71 -0
- package/dist/core/observer/codex-observer.d.ts.map +1 -0
- package/dist/core/observer/codex-observer.js +248 -0
- package/dist/core/observer/codex-observer.js.map +1 -0
- package/dist/core/observer/index.d.ts +7 -0
- package/dist/core/observer/index.d.ts.map +1 -0
- package/dist/core/observer/index.js +7 -0
- package/dist/core/observer/index.js.map +1 -0
- package/dist/core/observer/trace-manager.d.ts +82 -0
- package/dist/core/observer/trace-manager.d.ts.map +1 -0
- package/dist/core/observer/trace-manager.js +196 -0
- package/dist/core/observer/trace-manager.js.map +1 -0
- package/dist/core/origin-registry/index.d.ts +59 -0
- package/dist/core/origin-registry/index.d.ts.map +1 -0
- package/dist/core/origin-registry/index.js +235 -0
- package/dist/core/origin-registry/index.js.map +1 -0
- package/dist/core/patch-generator/base-strategy.d.ts +35 -0
- package/dist/core/patch-generator/base-strategy.d.ts.map +1 -0
- package/dist/core/patch-generator/base-strategy.js +55 -0
- package/dist/core/patch-generator/base-strategy.js.map +1 -0
- package/dist/core/patch-generator/index.d.ts +32 -0
- package/dist/core/patch-generator/index.d.ts.map +1 -0
- package/dist/core/patch-generator/index.js +101 -0
- package/dist/core/patch-generator/index.js.map +1 -0
- package/dist/core/patch-generator/strategies/add-fallback.d.ts +11 -0
- package/dist/core/patch-generator/strategies/add-fallback.d.ts.map +1 -0
- package/dist/core/patch-generator/strategies/add-fallback.js +57 -0
- package/dist/core/patch-generator/strategies/add-fallback.js.map +1 -0
- package/dist/core/patch-generator/strategies/prune-noise.d.ts +11 -0
- package/dist/core/patch-generator/strategies/prune-noise.d.ts.map +1 -0
- package/dist/core/patch-generator/strategies/prune-noise.js +48 -0
- package/dist/core/patch-generator/strategies/prune-noise.js.map +1 -0
- package/dist/core/shadow-manager/index.d.ts +65 -0
- package/dist/core/shadow-manager/index.d.ts.map +1 -0
- package/dist/core/shadow-manager/index.js +229 -0
- package/dist/core/shadow-manager/index.js.map +1 -0
- package/dist/core/shadow-registry/index.d.ts +68 -0
- package/dist/core/shadow-registry/index.d.ts.map +1 -0
- package/dist/core/shadow-registry/index.js +173 -0
- package/dist/core/shadow-registry/index.js.map +1 -0
- package/dist/daemon/index.d.ts +43 -0
- package/dist/daemon/index.d.ts.map +1 -0
- package/dist/daemon/index.js +144 -0
- package/dist/daemon/index.js.map +1 -0
- package/dist/storage/index.d.ts +7 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +7 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/markdown.d.ts +66 -0
- package/dist/storage/markdown.d.ts.map +1 -0
- package/dist/storage/markdown.js +227 -0
- package/dist/storage/markdown.js.map +1 -0
- package/dist/storage/ndjson.d.ts +118 -0
- package/dist/storage/ndjson.d.ts.map +1 -0
- package/dist/storage/ndjson.js +238 -0
- package/dist/storage/ndjson.js.map +1 -0
- package/dist/storage/sqlite.d.ts +131 -0
- package/dist/storage/sqlite.d.ts.map +1 -0
- package/dist/storage/sqlite.js +415 -0
- package/dist/storage/sqlite.js.map +1 -0
- package/dist/types/index.d.ts +158 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/diff.d.ts +20 -0
- package/dist/utils/diff.d.ts.map +1 -0
- package/dist/utils/diff.js +47 -0
- package/dist/utils/diff.js.map +1 -0
- package/dist/utils/hash.d.ts +17 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/hash.js +28 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +11 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +64 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/path.d.ts +67 -0
- package/dist/utils/path.d.ts.map +1 -0
- package/dist/utils/path.js +115 -0
- package/dist/utils/path.js.map +1 -0
- package/docs/ENGINEERING_PLAN.md +1065 -0
- package/docs/PRD.md +1004 -0
- package/docs/PROGRESS.md +523 -0
- package/package.json +60 -0
- package/src/cli/commands/diff.ts +158 -0
- package/src/cli/commands/freeze.ts +108 -0
- package/src/cli/commands/log.ts +87 -0
- package/src/cli/commands/rollback.ts +99 -0
- package/src/cli/commands/status.ts +101 -0
- package/src/cli/index.ts +31 -0
- package/src/config/defaults.ts +32 -0
- package/src/config/index.ts +220 -0
- package/src/core/evaluator/base-rule.ts +90 -0
- package/src/core/evaluator/index.ts +86 -0
- package/src/core/evaluator/rules/repeated-drift.ts +109 -0
- package/src/core/evaluator/rules/repeated-manual-fix.ts +129 -0
- package/src/core/journal/index.ts +286 -0
- package/src/core/observer/base-observer.ts +200 -0
- package/src/core/observer/codex-observer.ts +309 -0
- package/src/core/observer/index.ts +7 -0
- package/src/core/observer/trace-manager.ts +250 -0
- package/src/core/origin-registry/index.ts +264 -0
- package/src/core/patch-generator/base-strategy.ts +67 -0
- package/src/core/patch-generator/index.ts +118 -0
- package/src/core/patch-generator/strategies/add-fallback.ts +69 -0
- package/src/core/patch-generator/strategies/prune-noise.ts +65 -0
- package/src/core/shadow-manager/index.ts +278 -0
- package/src/core/shadow-registry/index.ts +200 -0
- package/src/daemon/index.ts +174 -0
- package/src/storage/index.ts +7 -0
- package/src/storage/markdown.ts +267 -0
- package/src/storage/ndjson.ts +273 -0
- package/src/storage/sqlite.ts +555 -0
- package/src/types/index.ts +212 -0
- package/src/utils/diff.ts +60 -0
- package/src/utils/hash.ts +31 -0
- package/src/utils/index.ts +8 -0
- package/src/utils/logger.ts +78 -0
- package/src/utils/path.ts +129 -0
- package/tests/unit/config.test.ts +65 -0
- package/tests/unit/path.test.ts +89 -0
- package/tests/unit/utils.test.ts +45 -0
- package/tsconfig.json +31 -0
- package/vitest.config.ts +19 -0
package/.eslintrc.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"root": true,
|
|
3
|
+
"parser": "@typescript-eslint/parser",
|
|
4
|
+
"parserOptions": {
|
|
5
|
+
"ecmaVersion": 2022,
|
|
6
|
+
"sourceType": "module",
|
|
7
|
+
"project": "./tsconfig.json"
|
|
8
|
+
},
|
|
9
|
+
"plugins": ["@typescript-eslint"],
|
|
10
|
+
"extends": [
|
|
11
|
+
"eslint:recommended",
|
|
12
|
+
"plugin:@typescript-eslint/recommended",
|
|
13
|
+
"plugin:@typescript-eslint/recommended-requiring-type-checking"
|
|
14
|
+
],
|
|
15
|
+
"env": {
|
|
16
|
+
"node": true,
|
|
17
|
+
"es2022": true
|
|
18
|
+
},
|
|
19
|
+
"rules": {
|
|
20
|
+
"@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }],
|
|
21
|
+
"@typescript-eslint/explicit-function-return-type": "warn",
|
|
22
|
+
"@typescript-eslint/no-explicit-any": "warn",
|
|
23
|
+
"@typescript-eslint/strict-boolean-expressions": "off",
|
|
24
|
+
"@typescript-eslint/no-unsafe-assignment": "warn",
|
|
25
|
+
"@typescript-eslint/no-unsafe-member-access": "warn",
|
|
26
|
+
"@typescript-eslint/no-unsafe-call": "warn",
|
|
27
|
+
"@typescript-eslint/no-unsafe-return": "warn",
|
|
28
|
+
"@typescript-eslint/restrict-template-expressions": "warn",
|
|
29
|
+
"no-console": ["warn", { allow: ["warn", "error"] }],
|
|
30
|
+
"prefer-const": "error",
|
|
31
|
+
"no-var": "error",
|
|
32
|
+
"eqeqeq": ["error", "always"],
|
|
33
|
+
"curly": ["error", "multi-line"]
|
|
34
|
+
},
|
|
35
|
+
"ignorePatterns": ["dist/", "node_modules/", "*.js"]
|
|
36
|
+
}
|
package/.prettierrc
ADDED
package/README.md
ADDED
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
# EVO Skills - Skill Evolution Agent
|
|
2
|
+
|
|
3
|
+
[](https://opensource.org/licenses/MIT)
|
|
4
|
+
[](https://www.typescriptlang.org/)
|
|
5
|
+
[](https://nodejs.org/)
|
|
6
|
+
|
|
7
|
+
EVO Skills 是一个后台常驻的元 Agent,它不会替代主 Agent 执行任务,而是持续观察主 Agent 的真实执行,并为每个项目维护一份来自全局 Skill 的影子副本(Shadow Skill),再基于 trace 对这份影子副本做小步、自动、可回滚的持续优化。
|
|
8
|
+
|
|
9
|
+
## 核心特性
|
|
10
|
+
|
|
11
|
+
- 🔍 **智能观察**: 从 Codex/OpenCode/Claude 等 Agent 采集执行 trace
|
|
12
|
+
- 🔄 **自动优化**: 基于真实执行数据自动优化 skill
|
|
13
|
+
- 📦 **影子副本**: 每个项目维护独立的 skill 副本,不污染全局
|
|
14
|
+
- 🔙 **可回滚**: 所有修改都有演化日志和 checkpoint,支持一键回滚
|
|
15
|
+
- 🚀 **无感运行**: 后台自动运行,无需手动干预
|
|
16
|
+
|
|
17
|
+
## 安装
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install -g evo-skills
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 快速开始
|
|
24
|
+
|
|
25
|
+
### 1. 初始化配置
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
evo init
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### 2. 查看项目 shadow skills 状态
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
evo skills status
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### 3. 查看某个 skill 的演化日志
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
evo skills log <skill-id>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 4. 回滚到指定版本
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
evo skills rollback <skill-id> --to rev_8
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### 5. 冻结/解冻自动优化
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
evo skills freeze <skill-id>
|
|
53
|
+
evo skills unfreeze <skill-id>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## 架构概览
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
Main Agent Runtime (Codex/OpenCode/Claude)
|
|
60
|
+
↓
|
|
61
|
+
Observer Layer (Trace 采集)
|
|
62
|
+
↓
|
|
63
|
+
Trace Store (NDJSON + SQLite)
|
|
64
|
+
↓
|
|
65
|
+
Shadow Skill Manager
|
|
66
|
+
├─ Origin Registry (全局 skill 扫描)
|
|
67
|
+
├─ Shadow Registry (项目 skill 管理)
|
|
68
|
+
├─ Evolution Evaluator (优化评估)
|
|
69
|
+
├─ Patch Generator (补丁生成)
|
|
70
|
+
└─ Journal Manager (演化日志)
|
|
71
|
+
↓
|
|
72
|
+
Project Shadow Skills (.sea/skills/*)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## 项目结构
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
your-project/
|
|
79
|
+
└── .evo/
|
|
80
|
+
├── skills/
|
|
81
|
+
│ └── <skill-id>/
|
|
82
|
+
│ ├── current.md # 当前 shadow skill 内容
|
|
83
|
+
│ ├── meta.json # 元数据
|
|
84
|
+
│ ├── journal.ndjson # 演化日志
|
|
85
|
+
│ └── snapshots/ # 快照
|
|
86
|
+
│ ├── rev_0005.md
|
|
87
|
+
│ └── rev_0010.md
|
|
88
|
+
├── state/
|
|
89
|
+
│ ├── sessions.db # SQLite 数据库
|
|
90
|
+
│ ├── traces.ndjson # 原始 trace
|
|
91
|
+
│ └── runtime_state.json # 运行时状态
|
|
92
|
+
└── config/
|
|
93
|
+
└── settings.toml # 项目配置
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## CLI 命令
|
|
97
|
+
|
|
98
|
+
| 命令 | 描述 |
|
|
99
|
+
|------|------|
|
|
100
|
+
| `evo init` | 初始化配置 |
|
|
101
|
+
| `evo skills status` | 查看当前项目 shadow skills 状态 |
|
|
102
|
+
| `evo skills log <skill>` | 查看某个 skill 的演化日志 |
|
|
103
|
+
| `evo skills diff <skill>` | 查看当前内容与 origin 的 diff |
|
|
104
|
+
| `evo skills rollback <skill> --to <rev>` | 回滚到指定 revision |
|
|
105
|
+
| `evo skills freeze <skill>` | 暂停某个 skill 的自动优化 |
|
|
106
|
+
| `evo skills unfreeze <skill>` | 恢复自动优化 |
|
|
107
|
+
| `evo optimize <skill>` | 手动触发一次优化评估 |
|
|
108
|
+
| `evo skills rebase <skill>` | 重新同步 origin |
|
|
109
|
+
|
|
110
|
+
## 自动优化策略
|
|
111
|
+
|
|
112
|
+
系统会自动执行以下类型的优化:
|
|
113
|
+
|
|
114
|
+
- ✅ **append_context**: 补充项目特定上下文
|
|
115
|
+
- ✅ **tighten_trigger**: 收紧适用条件
|
|
116
|
+
- ✅ **add_fallback**: 补写高频 fallback
|
|
117
|
+
- ✅ **prune_noise**: 删除低价值噪音描述
|
|
118
|
+
|
|
119
|
+
以下操作默认不自动执行:
|
|
120
|
+
|
|
121
|
+
- ❌ 大段重写整个 skill
|
|
122
|
+
- ❌ 删除大量核心步骤
|
|
123
|
+
- ❌ 改变 skill 的总体目标
|
|
124
|
+
- ❌ 回写到全局 origin
|
|
125
|
+
|
|
126
|
+
## 配置
|
|
127
|
+
|
|
128
|
+
### 全局配置 (~/.evo/settings.toml)
|
|
129
|
+
|
|
130
|
+
```toml
|
|
131
|
+
[origin_paths]
|
|
132
|
+
paths = ["~/.skills", "~/.claude/skills"]
|
|
133
|
+
|
|
134
|
+
[observer]
|
|
135
|
+
enabled_runtimes = ["codex", "opencode", "claude"]
|
|
136
|
+
trace_retention_days = 30
|
|
137
|
+
|
|
138
|
+
[evaluator]
|
|
139
|
+
min_signal_count = 3
|
|
140
|
+
min_source_sessions = 2
|
|
141
|
+
min_confidence = 0.7
|
|
142
|
+
|
|
143
|
+
[patch]
|
|
144
|
+
allowed_types = ["append_context", "tighten_trigger", "add_fallback", "prune_noise"]
|
|
145
|
+
cooldown_hours = 24
|
|
146
|
+
max_patches_per_day = 3
|
|
147
|
+
|
|
148
|
+
[journal]
|
|
149
|
+
snapshot_interval = 5
|
|
150
|
+
max_snapshots = 20
|
|
151
|
+
|
|
152
|
+
[daemon]
|
|
153
|
+
auto_start = true
|
|
154
|
+
log_level = "info"
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### 项目配置 (.evo/config/settings.toml)
|
|
158
|
+
|
|
159
|
+
```toml
|
|
160
|
+
[project]
|
|
161
|
+
name = "my-project"
|
|
162
|
+
auto_optimize = true
|
|
163
|
+
|
|
164
|
+
[skills]
|
|
165
|
+
# 特定 skill 的配置覆盖
|
|
166
|
+
[skills.my-skill]
|
|
167
|
+
auto_optimize = false # 冻结此 skill
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## 开发
|
|
171
|
+
|
|
172
|
+
### 安装依赖
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
npm install
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### 开发模式
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
npm run dev
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### 构建
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
npm run build
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### 测试
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
npm test
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### 代码检查
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
npm run lint
|
|
200
|
+
npm run format
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## 技术栈
|
|
204
|
+
|
|
205
|
+
- **TypeScript**: 类型安全的 JavaScript
|
|
206
|
+
- **Node.js**: 运行时环境
|
|
207
|
+
- **Commander.js**: CLI 框架
|
|
208
|
+
- **SQLite**: 本地数据库
|
|
209
|
+
- **Winston**: 日志系统
|
|
210
|
+
- **Vitest**: 测试框架
|
|
211
|
+
|
|
212
|
+
## 文档
|
|
213
|
+
|
|
214
|
+
- [PRD - 产品需求文档](docs/PRD.md)
|
|
215
|
+
- [工程计划](docs/ENGINEERING_PLAN.md)
|
|
216
|
+
|
|
217
|
+
## 许可证
|
|
218
|
+
|
|
219
|
+
MIT License - 详见 [LICENSE](LICENSE) 文件
|
|
220
|
+
|
|
221
|
+
## 贡献
|
|
222
|
+
|
|
223
|
+
欢迎贡献!请阅读 [贡献指南](CONTRIBUTING.md) 了解详情。
|
|
224
|
+
|
|
225
|
+
## 支持
|
|
226
|
+
|
|
227
|
+
如有问题或建议,请提交 [Issue](https://github.com/ceasarXuu/EVOSkills/issues)
|
package/USER-GUIDE.md
ADDED
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
# EVO Skills 用户使用指南
|
|
2
|
+
|
|
3
|
+
## 什么是 EVO Skills?
|
|
4
|
+
|
|
5
|
+
EVO Skills 是一个后台运行的智能助手,它会自动观察你使用 AI Agent(比如 Codex、OpenCode、Claude)的过程,然后帮你优化你的 skill 文件。
|
|
6
|
+
|
|
7
|
+
简单来说:
|
|
8
|
+
- 你正常使用 AI Agent 干活
|
|
9
|
+
- EVO Skills 在后台默默观察
|
|
10
|
+
- 它发现你经常手动补充某些步骤,就会自动把这些步骤加到你的 skill 里
|
|
11
|
+
- 下次遇到类似情况,AI Agent 就能自动完成,不用你再手动补充了
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 安装
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install -g evo-skills
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 快速开始
|
|
24
|
+
|
|
25
|
+
### 1. 查看当前项目有哪些 shadow skills
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
evo skills status
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
输出示例:
|
|
32
|
+
```
|
|
33
|
+
Shadow Skills in /path/to/project:
|
|
34
|
+
|
|
35
|
+
Skill ID Status Revision Last Optimized
|
|
36
|
+
──────────────────────────────────────────────────────────────
|
|
37
|
+
coding-standards active 3 2026-03-15
|
|
38
|
+
api-design active 1 Never
|
|
39
|
+
testing frozen 5 2026-03-10
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### 2. 查看某个 skill 的详细状态
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
evo skills status --skill coding-standards
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
输出示例:
|
|
49
|
+
```
|
|
50
|
+
Shadow Skill: coding-standards
|
|
51
|
+
Status: active
|
|
52
|
+
Current Revision: 3
|
|
53
|
+
Created: 2026-03-01T10:00:00Z
|
|
54
|
+
Last Optimized: 2026-03-15T14:30:00Z
|
|
55
|
+
Snapshots: 2
|
|
56
|
+
|
|
57
|
+
Recent Snapshots:
|
|
58
|
+
rev_0001 - 2026-03-01T10:00:00Z
|
|
59
|
+
rev_0003 - 2026-03-15T14:30:00Z
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## 常用命令详解
|
|
65
|
+
|
|
66
|
+
### 查看演化日志
|
|
67
|
+
|
|
68
|
+
看看这个 skill 被自动优化了多少次,每次改了什么。
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
# 查看最近 20 条记录
|
|
72
|
+
evo skills log coding-standards
|
|
73
|
+
|
|
74
|
+
# 只看最近 5 条
|
|
75
|
+
evo skills log coding-standards --limit 5
|
|
76
|
+
|
|
77
|
+
# 只看"添加 fallback"类型的修改
|
|
78
|
+
evo skills log coding-standards --type add_fallback
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
输出示例:
|
|
82
|
+
```
|
|
83
|
+
Evolution log for "coding-standards":
|
|
84
|
+
|
|
85
|
+
🤖 rev_0003 - 2026/3/15 14:30:00
|
|
86
|
+
Type: ADD_FALLBACK
|
|
87
|
+
Reason: User manually supplemented "run linter" in 3 sessions after agent output
|
|
88
|
+
Sessions: 3
|
|
89
|
+
|
|
90
|
+
👤 rev_0002 - 2026/3/10 09:15:00
|
|
91
|
+
Type: PRUNE_NOISE
|
|
92
|
+
Reason: Removed redundant section that was always skipped
|
|
93
|
+
Sessions: 5
|
|
94
|
+
|
|
95
|
+
🤖 rev_0001 - 2026/3/5 16:45:00
|
|
96
|
+
Type: APPEND_CONTEXT
|
|
97
|
+
Reason: Added project-specific context for TypeScript projects
|
|
98
|
+
Sessions: 2
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
说明:
|
|
102
|
+
- 🤖 表示自动优化
|
|
103
|
+
- 👤 表示手动修改
|
|
104
|
+
- Sessions 表示有多少个对话 session 参与了这次优化
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
### 查看 diff(对比差异)
|
|
109
|
+
|
|
110
|
+
看看当前的 shadow skill 和原始版本有什么不同。
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
# 与原始 origin skill 对比
|
|
114
|
+
evo skills diff coding-standards --origin
|
|
115
|
+
|
|
116
|
+
# 与某个历史版本对比
|
|
117
|
+
evo skills diff coding-standards --revision 1
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
输出示例:
|
|
121
|
+
```
|
|
122
|
+
Diff between origin and shadow for "coding-standards":
|
|
123
|
+
|
|
124
|
+
--- origin/coding-standards
|
|
125
|
+
+++ shadow/coding-standards
|
|
126
|
+
@@ -10,6 +10,10 @@
|
|
127
|
+
## Steps
|
|
128
|
+
1. Write the code
|
|
129
|
+
2. Run tests
|
|
130
|
+
+3. Run linter
|
|
131
|
+
+4. Check for type errors
|
|
132
|
+
+
|
|
133
|
+
+## Fallback
|
|
134
|
+
+- If linter fails, fix the issues and retry
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
### 回滚到之前的版本
|
|
140
|
+
|
|
141
|
+
如果某次自动优化改坏了,可以回滚到之前的版本。
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
# 先看看有哪些可用的版本
|
|
145
|
+
evo skills rollback coding-standards
|
|
146
|
+
|
|
147
|
+
# 回滚到第 2 个版本
|
|
148
|
+
evo skills rollback coding-standards --to 2
|
|
149
|
+
|
|
150
|
+
# 回滚到最新的快照
|
|
151
|
+
evo skills rollback coding-standards --snapshot
|
|
152
|
+
|
|
153
|
+
# 回滚到最初的版本(从 origin 复制过来的样子)
|
|
154
|
+
evo skills rollback coding-standards --initial
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
输出示例:
|
|
158
|
+
```
|
|
159
|
+
Available snapshots for "coding-standards":
|
|
160
|
+
|
|
161
|
+
rev_0001 - 2026-03-01T10:00:00Z
|
|
162
|
+
rev_0003 - 2026-03-15T14:30:00Z
|
|
163
|
+
|
|
164
|
+
Usage:
|
|
165
|
+
sea skills rollback coding-standards --to <revision>
|
|
166
|
+
sea skills rollback coding-standards --snapshot
|
|
167
|
+
sea skills rollback coding-standards --initial
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
### 冻结/解冻自动优化
|
|
173
|
+
|
|
174
|
+
有时候你不想让某个 skill 被自动修改,可以冻结它。
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
# 冻结(暂停自动优化)
|
|
178
|
+
evo skills freeze coding-standards
|
|
179
|
+
|
|
180
|
+
# 解冻(恢复自动优化)
|
|
181
|
+
evo skills unfreeze coding-standards
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
冻结后:
|
|
185
|
+
- EVO Skills 不会再自动修改这个 skill
|
|
186
|
+
- 但你仍然可以在 AI Agent 中使用它
|
|
187
|
+
- 状态会显示为 `frozen`
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## 工作原理
|
|
192
|
+
|
|
193
|
+
### Shadow Skill 是什么?
|
|
194
|
+
|
|
195
|
+
当你在一个项目中首次使用某个全局 skill 时,EVO Skills 会自动在这个项目里创建一个"影子副本"(shadow skill)。
|
|
196
|
+
|
|
197
|
+
```
|
|
198
|
+
全局 skill: ~/.skills/coding-standards.md
|
|
199
|
+
↓ 首次使用
|
|
200
|
+
项目 shadow: your-project/.evo/skills/coding-standards/current.md
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
之后,EVO Skills 会:
|
|
204
|
+
- 观察你在这个项目中如何使用这个 skill
|
|
205
|
+
- 基于观察到的模式自动优化 shadow skill
|
|
206
|
+
- 原始的全局 skill 不会被修改
|
|
207
|
+
|
|
208
|
+
### 自动优化的类型
|
|
209
|
+
|
|
210
|
+
EVO Skills 支持以下几种自动优化:
|
|
211
|
+
|
|
212
|
+
1. **add_fallback** - 添加 fallback 说明
|
|
213
|
+
- 当你经常在 AI 输出后手动补充某个步骤时
|
|
214
|
+
- 系统会自动把这个步骤加到 skill 里
|
|
215
|
+
|
|
216
|
+
2. **prune_noise** - 删除冗余内容
|
|
217
|
+
- 当某个 section 经常被跳过时
|
|
218
|
+
- 系统会自动删除它
|
|
219
|
+
|
|
220
|
+
3. **append_context** - 补充项目上下文
|
|
221
|
+
- 当发现项目有特殊需求时
|
|
222
|
+
- 系统会自动补充相关说明
|
|
223
|
+
|
|
224
|
+
4. **tighten_trigger** - 收紧触发条件
|
|
225
|
+
- 当 skill 在不该触发的时候被触发时
|
|
226
|
+
- 系统会自动调整触发条件
|
|
227
|
+
|
|
228
|
+
### 自动优化的限制
|
|
229
|
+
|
|
230
|
+
为了安全,自动优化有以下限制:
|
|
231
|
+
|
|
232
|
+
- 每个 skill 每天最多优化 3 次
|
|
233
|
+
- 两次优化之间至少间隔 24 小时
|
|
234
|
+
- 只允许小步修改,不会大幅重写
|
|
235
|
+
- 不会修改全局的 origin skill
|
|
236
|
+
- 所有修改都可以回滚
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## 项目目录结构
|
|
241
|
+
|
|
242
|
+
使用 SEA Skills 后,你的项目会多出一个 `.sea` 目录:
|
|
243
|
+
|
|
244
|
+
```
|
|
245
|
+
your-project/
|
|
246
|
+
├── .evo/
|
|
247
|
+
│ ├── skills/
|
|
248
|
+
│ │ └── coding-standards/
|
|
249
|
+
│ │ ├── current.md # 当前生效的 shadow skill
|
|
250
|
+
│ │ ├── meta.json # 元数据
|
|
251
|
+
│ │ ├── journal.ndjson # 演化日志
|
|
252
|
+
│ │ └── snapshots/ # 快照
|
|
253
|
+
│ │ ├── rev_0001.md
|
|
254
|
+
│ │ └── rev_0003.md
|
|
255
|
+
│ ├── state/
|
|
256
|
+
│ │ ├── sessions.db # SQLite 数据库
|
|
257
|
+
│ │ └── traces.ndjson # 执行轨迹
|
|
258
|
+
│ └── config/
|
|
259
|
+
│ └── settings.toml # 项目配置(可选)
|
|
260
|
+
└── ...你的其他文件
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## 配置
|
|
266
|
+
|
|
267
|
+
### 全局配置
|
|
268
|
+
|
|
269
|
+
配置文件位置:`~/.evo/settings.toml`
|
|
270
|
+
|
|
271
|
+
```toml
|
|
272
|
+
[origin_paths]
|
|
273
|
+
paths = ["~/.skills", "~/.claude/skills"]
|
|
274
|
+
|
|
275
|
+
[evaluator]
|
|
276
|
+
min_signal_count = 3 # 至少出现 3 次信号才触发优化
|
|
277
|
+
min_source_sessions = 2 # 至少来自 2 个不同的 session
|
|
278
|
+
min_confidence = 0.7 # 置信度至少 70%
|
|
279
|
+
|
|
280
|
+
[patch]
|
|
281
|
+
allowed_types = ["append_context", "add_fallback", "prune_noise"]
|
|
282
|
+
cooldown_hours = 24 # 两次优化间隔至少 24 小时
|
|
283
|
+
max_patches_per_day = 3 # 每天最多优化 3 次
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
### 项目配置
|
|
287
|
+
|
|
288
|
+
在项目的 `.evo/config/settings.toml` 中可以覆盖全局配置:
|
|
289
|
+
|
|
290
|
+
```toml
|
|
291
|
+
[project]
|
|
292
|
+
name = "my-project"
|
|
293
|
+
auto_optimize = true
|
|
294
|
+
|
|
295
|
+
[skills.coding-standards]
|
|
296
|
+
auto_optimize = false # 冻结这个 skill
|
|
297
|
+
|
|
298
|
+
[skills.api-design]
|
|
299
|
+
allowed_patch_types = ["append_context"] # 只允许补充上下文
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
---
|
|
303
|
+
|
|
304
|
+
## 常见问题
|
|
305
|
+
|
|
306
|
+
### Q: 我的 skill 被改坏了怎么办?
|
|
307
|
+
|
|
308
|
+
A: 使用回滚命令:
|
|
309
|
+
|
|
310
|
+
```bash
|
|
311
|
+
# 先看看有哪些版本
|
|
312
|
+
evo skills rollback <skill-id>
|
|
313
|
+
|
|
314
|
+
# 回滚到之前的好版本
|
|
315
|
+
evo skills rollback <skill-id> --to <revision>
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
### Q: 我不想让某个 skill 被自动修改
|
|
319
|
+
|
|
320
|
+
A: 冻结它:
|
|
321
|
+
|
|
322
|
+
```bash
|
|
323
|
+
evo skills freeze <skill-id>
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
### Q: 怎么看 SEA Skills 对我的 skill 做了什么?
|
|
327
|
+
|
|
328
|
+
A: 查看演化日志:
|
|
329
|
+
|
|
330
|
+
```bash
|
|
331
|
+
evo skills log <skill-id>
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
### Q: 自动优化太频繁了怎么办?
|
|
335
|
+
|
|
336
|
+
A: 修改配置文件 `~/.evo/settings.toml`:
|
|
337
|
+
|
|
338
|
+
```toml
|
|
339
|
+
[patch]
|
|
340
|
+
cooldown_hours = 48 # 增加冷却时间到 48 小时
|
|
341
|
+
max_patches_per_day = 1 # 每天最多优化 1 次
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
### Q: 我可以手动触发优化吗?
|
|
345
|
+
|
|
346
|
+
A: 目前只能通过 CLI 查看状态和回滚,自动优化是在后台进行的。如果需要手动优化,可以直接编辑 `.evo/skills/<skill-id>/current.md` 文件。
|
|
347
|
+
|
|
348
|
+
### Q: Shadow skill 和原始 skill 有什么关系?
|
|
349
|
+
|
|
350
|
+
A: Shadow skill 是从原始 skill 复制过来的,然后被自动优化。原始 skill 不会被修改。如果你想把 shadow skill 的优化同步回原始 skill,需要手动操作。
|
|
351
|
+
|
|
352
|
+
---
|
|
353
|
+
|
|
354
|
+
## 最佳实践
|
|
355
|
+
|
|
356
|
+
1. **先观察,再调整**
|
|
357
|
+
- 让 SEA Skills 运行一段时间,观察它做了什么
|
|
358
|
+
- 如果觉得优化合理,就保留
|
|
359
|
+
- 如果觉得不合理,就回滚并冻结
|
|
360
|
+
|
|
361
|
+
2. **定期检查演化日志**
|
|
362
|
+
- 每隔几天看看 `evo skills log`
|
|
363
|
+
- 了解 SEA Skills 在做什么
|
|
364
|
+
|
|
365
|
+
3. **重要的 skill 考虑冻结**
|
|
366
|
+
- 如果某个 skill 很重要,不希望被自动修改
|
|
367
|
+
- 使用 `evo skills freeze` 冻结它
|
|
368
|
+
|
|
369
|
+
4. **利用项目配置**
|
|
370
|
+
- 不同项目可能需要不同的优化策略
|
|
371
|
+
- 在项目配置中覆盖全局配置
|
|
372
|
+
|
|
373
|
+
---
|
|
374
|
+
|
|
375
|
+
## 技术支持
|
|
376
|
+
|
|
377
|
+
如有问题或建议,请提交 Issue:
|
|
378
|
+
https://github.com/ceasarXuu/EVOSkills/issues
|
|
379
|
+
|
|
380
|
+
---
|
|
381
|
+
|
|
382
|
+
*最后更新:2026-03-20*
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAiJ3C"}
|