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
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
4
|
+
import { createShadowRegistry } from '../../core/shadow-registry/index.js';
|
|
5
|
+
import { createJournalManager } from '../../core/journal/index.js';
|
|
6
|
+
import { originRegistry } from '../../core/origin-registry/index.js';
|
|
7
|
+
import { createUnifiedDiff } from '../../utils/diff.js';
|
|
8
|
+
/**
|
|
9
|
+
* Diff 命令
|
|
10
|
+
* 查看当前内容与 origin 的 diff
|
|
11
|
+
*/
|
|
12
|
+
export function createDiffCommand() {
|
|
13
|
+
const diff = new Command('diff');
|
|
14
|
+
diff
|
|
15
|
+
.description('Show diff between shadow skill and origin')
|
|
16
|
+
.argument('<skill>', 'Skill ID to show diff for')
|
|
17
|
+
.option('-r, --revision <number>', 'Compare with specific revision')
|
|
18
|
+
.option('-o, --origin', 'Compare with origin skill')
|
|
19
|
+
.option('-p, --project <path>', 'Project root path', process.cwd())
|
|
20
|
+
.action(async (skillId, options) => {
|
|
21
|
+
try {
|
|
22
|
+
const projectRoot = options.project;
|
|
23
|
+
// 检查 .sea 目录是否存在
|
|
24
|
+
const seaDir = join(projectRoot, '.sea');
|
|
25
|
+
if (!existsSync(seaDir)) {
|
|
26
|
+
console.error('Error: .sea directory not found. Is this a SEA project?');
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
// 初始化组件
|
|
30
|
+
const shadowRegistry = createShadowRegistry(projectRoot);
|
|
31
|
+
const journalManager = createJournalManager(projectRoot);
|
|
32
|
+
await shadowRegistry.init();
|
|
33
|
+
await journalManager.init();
|
|
34
|
+
// 检查 shadow 是否存在
|
|
35
|
+
const shadow = await shadowRegistry.get(skillId);
|
|
36
|
+
if (!shadow) {
|
|
37
|
+
console.error(`Error: Shadow skill "${skillId}" not found`);
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
// 读取当前内容
|
|
41
|
+
const currentContent = await shadowRegistry.readContent(skillId);
|
|
42
|
+
if (!currentContent) {
|
|
43
|
+
console.error(`Error: Cannot read shadow content for "${skillId}"`);
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
const shadowId = `${skillId}@${projectRoot}`;
|
|
47
|
+
if (options.origin) {
|
|
48
|
+
// 与 origin 比较
|
|
49
|
+
await originRegistry.scan();
|
|
50
|
+
const origin = originRegistry.get(skillId);
|
|
51
|
+
if (!origin) {
|
|
52
|
+
console.error(`Error: Origin skill "${skillId}" not found`);
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
const originContent = originRegistry.readContent(skillId);
|
|
56
|
+
if (!originContent) {
|
|
57
|
+
console.error(`Error: Cannot read origin content for "${skillId}"`);
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
const diffOutput = createUnifiedDiff(`origin/${skillId}`, originContent, currentContent, 'origin', 'shadow');
|
|
61
|
+
if (diffOutput) {
|
|
62
|
+
console.log(`Diff between origin and shadow for "${skillId}":\n`);
|
|
63
|
+
console.log(diffOutput);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
console.log(`No differences found between origin and shadow for "${skillId}"`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else if (options.revision) {
|
|
70
|
+
// 与指定 revision 比较
|
|
71
|
+
const targetRevision = parseInt(options.revision, 10);
|
|
72
|
+
const record = await journalManager.getRecordByRevision(shadowId, targetRevision);
|
|
73
|
+
if (!record) {
|
|
74
|
+
console.error(`Error: Revision ${targetRevision} not found`);
|
|
75
|
+
process.exit(1);
|
|
76
|
+
}
|
|
77
|
+
// 从 snapshot 读取旧内容
|
|
78
|
+
const snapshots = journalManager.getSnapshots(shadowId);
|
|
79
|
+
const snapshot = snapshots.find((s) => s.revision === targetRevision);
|
|
80
|
+
if (!snapshot) {
|
|
81
|
+
console.error(`Error: Snapshot for revision ${targetRevision} not found`);
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
const oldContent = readFileSync(snapshot.file_path, 'utf-8');
|
|
85
|
+
const diffOutput = createUnifiedDiff(`${skillId}@rev${targetRevision}`, oldContent, currentContent, `rev${targetRevision}`, 'current');
|
|
86
|
+
if (diffOutput) {
|
|
87
|
+
console.log(`Diff between revision ${targetRevision} and current for "${skillId}":\n`);
|
|
88
|
+
console.log(diffOutput);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
console.log(`No differences found between revision ${targetRevision} and current`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
// 默认显示与 origin 的 diff
|
|
96
|
+
await originRegistry.scan();
|
|
97
|
+
const origin = originRegistry.get(skillId);
|
|
98
|
+
if (!origin) {
|
|
99
|
+
console.log(`Origin skill "${skillId}" not found, cannot show diff`);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
const originContent = originRegistry.readContent(skillId);
|
|
103
|
+
if (originContent) {
|
|
104
|
+
const diffOutput = createUnifiedDiff(`origin/${skillId}`, originContent, currentContent, 'origin', 'shadow');
|
|
105
|
+
if (diffOutput) {
|
|
106
|
+
console.log(`Diff between origin and shadow for "${skillId}":\n`);
|
|
107
|
+
console.log(diffOutput);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
console.log(`No differences found between origin and shadow for "${skillId}"`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// 关闭
|
|
116
|
+
shadowRegistry.close();
|
|
117
|
+
journalManager.close();
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
console.error(`Error: ${error}`);
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
return diff;
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../src/cli/commands/diff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Freeze 命令
|
|
4
|
+
* 暂停某个 skill 的自动优化
|
|
5
|
+
*/
|
|
6
|
+
export declare function createFreezeCommand(): Command;
|
|
7
|
+
/**
|
|
8
|
+
* Unfreeze 命令
|
|
9
|
+
* 恢复某个 skill 的自动优化
|
|
10
|
+
*/
|
|
11
|
+
export declare function createUnfreezeCommand(): Command;
|
|
12
|
+
//# sourceMappingURL=freeze.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"freeze.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/freeze.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CA+C7C;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CA6C/C"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import { createShadowRegistry } from '../../core/shadow-registry/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* Freeze 命令
|
|
7
|
+
* 暂停某个 skill 的自动优化
|
|
8
|
+
*/
|
|
9
|
+
export function createFreezeCommand() {
|
|
10
|
+
const freeze = new Command('freeze');
|
|
11
|
+
freeze
|
|
12
|
+
.description('Pause automatic optimization for a shadow skill')
|
|
13
|
+
.argument('<skill>', 'Skill ID to freeze')
|
|
14
|
+
.option('-p, --project <path>', 'Project root path', process.cwd())
|
|
15
|
+
.action(async (skillId, options) => {
|
|
16
|
+
try {
|
|
17
|
+
const projectRoot = options.project;
|
|
18
|
+
// 检查 .sea 目录是否存在
|
|
19
|
+
const seaDir = join(projectRoot, '.sea');
|
|
20
|
+
if (!existsSync(seaDir)) {
|
|
21
|
+
console.error('Error: .sea directory not found. Is this a SEA project?');
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
// 初始化组件
|
|
25
|
+
const shadowRegistry = createShadowRegistry(projectRoot);
|
|
26
|
+
await shadowRegistry.init();
|
|
27
|
+
// 检查 shadow 是否存在
|
|
28
|
+
const shadow = await shadowRegistry.get(skillId);
|
|
29
|
+
if (!shadow) {
|
|
30
|
+
console.error(`Error: Shadow skill "${skillId}" not found`);
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
// 更新状态为 frozen
|
|
34
|
+
const shadowId = `${skillId}@${projectRoot}`;
|
|
35
|
+
await shadowRegistry.updateStatus(shadowId, 'frozen');
|
|
36
|
+
console.log(`✅ Shadow skill "${skillId}" has been frozen`);
|
|
37
|
+
console.log('Automatic optimization is now paused for this skill');
|
|
38
|
+
console.log('\nTo unfreeze, use:');
|
|
39
|
+
console.log(` sea skills unfreeze ${skillId}`);
|
|
40
|
+
// 关闭
|
|
41
|
+
shadowRegistry.close();
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
console.error(`Error: ${error}`);
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
return freeze;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Unfreeze 命令
|
|
52
|
+
* 恢复某个 skill 的自动优化
|
|
53
|
+
*/
|
|
54
|
+
export function createUnfreezeCommand() {
|
|
55
|
+
const unfreeze = new Command('unfreeze');
|
|
56
|
+
unfreeze
|
|
57
|
+
.description('Resume automatic optimization for a shadow skill')
|
|
58
|
+
.argument('<skill>', 'Skill ID to unfreeze')
|
|
59
|
+
.option('-p, --project <path>', 'Project root path', process.cwd())
|
|
60
|
+
.action(async (skillId, options) => {
|
|
61
|
+
try {
|
|
62
|
+
const projectRoot = options.project;
|
|
63
|
+
// 检查 .sea 目录是否存在
|
|
64
|
+
const seaDir = join(projectRoot, '.sea');
|
|
65
|
+
if (!existsSync(seaDir)) {
|
|
66
|
+
console.error('Error: .sea directory not found. Is this a SEA project?');
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
// 初始化组件
|
|
70
|
+
const shadowRegistry = createShadowRegistry(projectRoot);
|
|
71
|
+
await shadowRegistry.init();
|
|
72
|
+
// 检查 shadow 是否存在
|
|
73
|
+
const shadow = await shadowRegistry.get(skillId);
|
|
74
|
+
if (!shadow) {
|
|
75
|
+
console.error(`Error: Shadow skill "${skillId}" not found`);
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
// 更新状态为 active
|
|
79
|
+
const shadowId = `${skillId}@${projectRoot}`;
|
|
80
|
+
await shadowRegistry.updateStatus(shadowId, 'active');
|
|
81
|
+
console.log(`✅ Shadow skill "${skillId}" has been unfrozen`);
|
|
82
|
+
console.log('Automatic optimization is now resumed for this skill');
|
|
83
|
+
// 关闭
|
|
84
|
+
shadowRegistry.close();
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
console.error(`Error: ${error}`);
|
|
88
|
+
process.exit(1);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
return unfreeze;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=freeze.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"freeze.js","sourceRoot":"","sources":["../../../src/cli/commands/freeze.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CA4E1C"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import { createShadowRegistry } from '../../core/shadow-registry/index.js';
|
|
5
|
+
import { createJournalManager } from '../../core/journal/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* Log 命令
|
|
8
|
+
* 查看某个 skill 的演化日志
|
|
9
|
+
*/
|
|
10
|
+
export function createLogCommand() {
|
|
11
|
+
const log = new Command('log');
|
|
12
|
+
log
|
|
13
|
+
.description('Show evolution log for a shadow skill')
|
|
14
|
+
.argument('<skill>', 'Skill ID to show log for')
|
|
15
|
+
.option('-n, --limit <number>', 'Number of records to show', '20')
|
|
16
|
+
.option('-f, --follow', 'Follow log output (like tail -f)')
|
|
17
|
+
.option('-t, --type <type>', 'Filter by change type')
|
|
18
|
+
.option('-p, --project <path>', 'Project root path', process.cwd())
|
|
19
|
+
.action(async (skillId, options) => {
|
|
20
|
+
try {
|
|
21
|
+
const projectRoot = options.project;
|
|
22
|
+
// 检查 .sea 目录是否存在
|
|
23
|
+
const seaDir = join(projectRoot, '.sea');
|
|
24
|
+
if (!existsSync(seaDir)) {
|
|
25
|
+
console.error('Error: .sea directory not found. Is this a SEA project?');
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
// 初始化组件
|
|
29
|
+
const shadowRegistry = createShadowRegistry(projectRoot);
|
|
30
|
+
const journalManager = createJournalManager(projectRoot);
|
|
31
|
+
await shadowRegistry.init();
|
|
32
|
+
await journalManager.init();
|
|
33
|
+
// 检查 shadow 是否存在
|
|
34
|
+
const shadow = await shadowRegistry.get(skillId);
|
|
35
|
+
if (!shadow) {
|
|
36
|
+
console.error(`Error: Shadow skill "${skillId}" not found`);
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
const shadowId = `${skillId}@${projectRoot}`;
|
|
40
|
+
const limit = parseInt(options.limit, 10);
|
|
41
|
+
// 获取 journal 记录
|
|
42
|
+
const records = await journalManager.getJournalRecords(shadowId, {
|
|
43
|
+
limit,
|
|
44
|
+
changeType: options.type,
|
|
45
|
+
});
|
|
46
|
+
if (records.length === 0) {
|
|
47
|
+
console.log(`No evolution records found for "${skillId}"`);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
console.log(`Evolution log for "${skillId}":\n`);
|
|
51
|
+
for (const record of records) {
|
|
52
|
+
const date = new Date(record.timestamp).toLocaleString();
|
|
53
|
+
const changeType = record.change_type.toUpperCase();
|
|
54
|
+
const appliedBy = record.applied_by === 'auto' ? '🤖' : '👤';
|
|
55
|
+
console.log(`${appliedBy} rev_${String(record.revision).padStart(4, '0')} - ${date}`);
|
|
56
|
+
console.log(` Type: ${changeType}`);
|
|
57
|
+
console.log(` Reason: ${record.reason}`);
|
|
58
|
+
console.log(` Sessions: ${record.source_sessions.length}`);
|
|
59
|
+
console.log('');
|
|
60
|
+
}
|
|
61
|
+
console.log(`Showing ${records.length} of ${limit} most recent records`);
|
|
62
|
+
console.log('\nFor more details, use:');
|
|
63
|
+
console.log(` sea skills diff ${skillId} --from <revision>`);
|
|
64
|
+
}
|
|
65
|
+
// 关闭
|
|
66
|
+
shadowRegistry.close();
|
|
67
|
+
journalManager.close();
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
console.error(`Error: ${error}`);
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
return log;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../../src/cli/commands/log.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rollback.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/rollback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAwF/C"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import { createShadowRegistry } from '../../core/shadow-registry/index.js';
|
|
5
|
+
import { createJournalManager } from '../../core/journal/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* Rollback 命令
|
|
8
|
+
* 回滚 shadow skill 到指定版本
|
|
9
|
+
*/
|
|
10
|
+
export function createRollbackCommand() {
|
|
11
|
+
const rollback = new Command('rollback');
|
|
12
|
+
rollback
|
|
13
|
+
.description('Rollback a shadow skill to a previous version')
|
|
14
|
+
.argument('<skill>', 'Skill ID to rollback')
|
|
15
|
+
.option('-t, --to <revision>', 'Rollback to specific revision')
|
|
16
|
+
.option('-s, --snapshot', 'Rollback to latest snapshot')
|
|
17
|
+
.option('-i, --initial', 'Rollback to initial version (revision 0)')
|
|
18
|
+
.option('-p, --project <path>', 'Project root path', process.cwd())
|
|
19
|
+
.action(async (skillId, options) => {
|
|
20
|
+
try {
|
|
21
|
+
const projectRoot = options.project;
|
|
22
|
+
// 检查 .sea 目录是否存在
|
|
23
|
+
const seaDir = join(projectRoot, '.sea');
|
|
24
|
+
if (!existsSync(seaDir)) {
|
|
25
|
+
console.error('Error: .sea directory not found. Is this a SEA project?');
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
// 初始化组件
|
|
29
|
+
const shadowRegistry = createShadowRegistry(projectRoot);
|
|
30
|
+
const journalManager = createJournalManager(projectRoot);
|
|
31
|
+
await shadowRegistry.init();
|
|
32
|
+
await journalManager.init();
|
|
33
|
+
// 检查 shadow 是否存在
|
|
34
|
+
const shadow = await shadowRegistry.get(skillId);
|
|
35
|
+
if (!shadow) {
|
|
36
|
+
console.error(`Error: Shadow skill "${skillId}" not found`);
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
const shadowId = `${skillId}@${projectRoot}`;
|
|
40
|
+
// 确定回滚目标
|
|
41
|
+
if (options.initial) {
|
|
42
|
+
// 回滚到初始版本
|
|
43
|
+
console.log(`Rolling back "${skillId}" to initial version...`);
|
|
44
|
+
await journalManager.rollback(shadowId, 0);
|
|
45
|
+
console.log(`✅ Successfully rolled back to initial version`);
|
|
46
|
+
}
|
|
47
|
+
else if (options.snapshot) {
|
|
48
|
+
// 回滚到最新 snapshot
|
|
49
|
+
console.log(`Rolling back "${skillId}" to latest snapshot...`);
|
|
50
|
+
await journalManager.rollbackToSnapshot(shadowId);
|
|
51
|
+
console.log(`✅ Successfully rolled back to latest snapshot`);
|
|
52
|
+
}
|
|
53
|
+
else if (options.to) {
|
|
54
|
+
// 回滚到指定 revision
|
|
55
|
+
const targetRevision = parseInt(options.to, 10);
|
|
56
|
+
if (isNaN(targetRevision)) {
|
|
57
|
+
console.error('Error: Invalid revision number');
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
console.log(`Rolling back "${skillId}" to revision ${targetRevision}...`);
|
|
61
|
+
await journalManager.rollback(shadowId, targetRevision);
|
|
62
|
+
console.log(`✅ Successfully rolled back to revision ${targetRevision}`);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
// 显示可用的 revisions
|
|
66
|
+
console.log(`Available snapshots for "${skillId}":\n`);
|
|
67
|
+
const snapshots = journalManager.getSnapshots(shadowId);
|
|
68
|
+
if (snapshots.length === 0) {
|
|
69
|
+
console.log('No snapshots available');
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
for (const snapshot of snapshots) {
|
|
73
|
+
console.log(` rev_${String(snapshot.revision).padStart(4, '0')} - ${snapshot.timestamp}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
console.log('\nUsage:');
|
|
77
|
+
console.log(` sea skills rollback ${skillId} --to <revision>`);
|
|
78
|
+
console.log(` sea skills rollback ${skillId} --snapshot`);
|
|
79
|
+
console.log(` sea skills rollback ${skillId} --initial`);
|
|
80
|
+
}
|
|
81
|
+
// 关闭
|
|
82
|
+
shadowRegistry.close();
|
|
83
|
+
journalManager.close();
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
console.error(`Error: ${error}`);
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
return rollback;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=rollback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rollback.js","sourceRoot":"","sources":["../../../src/cli/commands/rollback.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CA0F7C"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import { createShadowRegistry } from '../../core/shadow-registry/index.js';
|
|
5
|
+
import { createJournalManager } from '../../core/journal/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* Status 命令
|
|
8
|
+
* 查看当前项目 shadow skills 状态
|
|
9
|
+
*/
|
|
10
|
+
export function createStatusCommand() {
|
|
11
|
+
const status = new Command('status');
|
|
12
|
+
status
|
|
13
|
+
.description('Show status of shadow skills in current project')
|
|
14
|
+
.option('-p, --project <path>', 'Project root path', process.cwd())
|
|
15
|
+
.option('-s, --skill <id>', 'Show detailed status for specific skill')
|
|
16
|
+
.action(async (options) => {
|
|
17
|
+
try {
|
|
18
|
+
const projectRoot = options.project;
|
|
19
|
+
// 检查 .sea 目录是否存在
|
|
20
|
+
const seaDir = join(projectRoot, '.sea');
|
|
21
|
+
if (!existsSync(seaDir)) {
|
|
22
|
+
console.error('Error: .sea directory not found. Is this a SEA project?');
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
// 初始化组件
|
|
26
|
+
const shadowRegistry = createShadowRegistry(projectRoot);
|
|
27
|
+
const journalManager = createJournalManager(projectRoot);
|
|
28
|
+
await shadowRegistry.init();
|
|
29
|
+
await journalManager.init();
|
|
30
|
+
if (options.skill) {
|
|
31
|
+
// 显示特定 skill 的详细状态
|
|
32
|
+
const shadow = await shadowRegistry.get(options.skill);
|
|
33
|
+
if (!shadow) {
|
|
34
|
+
console.error(`Error: Shadow skill "${options.skill}" not found`);
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
37
|
+
const shadowId = `${options.skill}@${projectRoot}`;
|
|
38
|
+
const latestRevision = await journalManager.getLatestRevision(shadowId);
|
|
39
|
+
const snapshots = journalManager.getSnapshots(shadowId);
|
|
40
|
+
console.log(`Shadow Skill: ${options.skill}`);
|
|
41
|
+
console.log(`Status: ${shadow.status}`);
|
|
42
|
+
console.log(`Current Revision: ${latestRevision}`);
|
|
43
|
+
console.log(`Created: ${shadow.created_at}`);
|
|
44
|
+
console.log(`Last Optimized: ${shadow.last_optimized_at || 'Never'}`);
|
|
45
|
+
console.log(`Snapshots: ${snapshots.length}`);
|
|
46
|
+
if (snapshots.length > 0) {
|
|
47
|
+
console.log('\nRecent Snapshots:');
|
|
48
|
+
for (const snapshot of snapshots.slice(0, 5)) {
|
|
49
|
+
console.log(` rev_${String(snapshot.revision).padStart(4, '0')} - ${snapshot.timestamp}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
// 列出所有 shadow skills
|
|
55
|
+
const shadows = await shadowRegistry.list();
|
|
56
|
+
if (shadows.length === 0) {
|
|
57
|
+
console.log('No shadow skills found in this project');
|
|
58
|
+
console.log('\nTo create a shadow skill, use:');
|
|
59
|
+
console.log(' sea skills fork <skill-id>');
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
console.log(`Shadow Skills in ${projectRoot}:\n`);
|
|
63
|
+
console.log('Skill ID Status Revision Last Optimized');
|
|
64
|
+
console.log('─'.repeat(70));
|
|
65
|
+
for (const shadow of shadows) {
|
|
66
|
+
const shadowId = `${shadow.skill_id}@${projectRoot}`;
|
|
67
|
+
const latestRevision = await journalManager.getLatestRevision(shadowId);
|
|
68
|
+
const lastOptimized = shadow.last_optimized_at
|
|
69
|
+
? new Date(shadow.last_optimized_at).toLocaleDateString()
|
|
70
|
+
: 'Never';
|
|
71
|
+
console.log(`${shadow.skill_id.padEnd(22)} ${shadow.status.padEnd(11)} ${String(latestRevision).padEnd(9)} ${lastOptimized}`);
|
|
72
|
+
}
|
|
73
|
+
console.log('\nFor detailed status of a specific skill:');
|
|
74
|
+
console.log(' sea skills status --skill <skill-id>');
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// 关闭
|
|
78
|
+
shadowRegistry.close();
|
|
79
|
+
journalManager.close();
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
console.error(`Error: ${error}`);
|
|
83
|
+
process.exit(1);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
return status;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { createStatusCommand } from './commands/status.js';
|
|
4
|
+
import { createRollbackCommand } from './commands/rollback.js';
|
|
5
|
+
import { createLogCommand } from './commands/log.js';
|
|
6
|
+
import { createDiffCommand } from './commands/diff.js';
|
|
7
|
+
import { createFreezeCommand, createUnfreezeCommand } from './commands/freeze.js';
|
|
8
|
+
const program = new Command();
|
|
9
|
+
program
|
|
10
|
+
.name('evo')
|
|
11
|
+
.description('EVO Skills - Skill Evolution Agent')
|
|
12
|
+
.version('0.1.0');
|
|
13
|
+
// Skills 子命令
|
|
14
|
+
const skills = new Command('skills')
|
|
15
|
+
.description('Manage shadow skills');
|
|
16
|
+
skills.addCommand(createStatusCommand());
|
|
17
|
+
skills.addCommand(createRollbackCommand());
|
|
18
|
+
skills.addCommand(createLogCommand());
|
|
19
|
+
skills.addCommand(createDiffCommand());
|
|
20
|
+
skills.addCommand(createFreezeCommand());
|
|
21
|
+
skills.addCommand(createUnfreezeCommand());
|
|
22
|
+
program.addCommand(skills);
|
|
23
|
+
// 解析命令行参数
|
|
24
|
+
program.parse();
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAElF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,oCAAoC,CAAC;KACjD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,aAAa;AACb,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KACjC,WAAW,CAAC,sBAAsB,CAAC,CAAC;AAEvC,MAAM,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AACzC,MAAM,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;AAC3C,MAAM,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACtC,MAAM,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;AACvC,MAAM,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AACzC,MAAM,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;AAE3C,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAE3B,UAAU;AACV,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,SA0B5B,CAAC"}
|