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.
Files changed (188) hide show
  1. package/.eslintrc.json +36 -0
  2. package/.prettierrc +11 -0
  3. package/README.md +227 -0
  4. package/USER-GUIDE.md +382 -0
  5. package/dist/cli/commands/diff.d.ts +7 -0
  6. package/dist/cli/commands/diff.d.ts.map +1 -0
  7. package/dist/cli/commands/diff.js +126 -0
  8. package/dist/cli/commands/diff.js.map +1 -0
  9. package/dist/cli/commands/freeze.d.ts +12 -0
  10. package/dist/cli/commands/freeze.d.ts.map +1 -0
  11. package/dist/cli/commands/freeze.js +93 -0
  12. package/dist/cli/commands/freeze.js.map +1 -0
  13. package/dist/cli/commands/log.d.ts +7 -0
  14. package/dist/cli/commands/log.d.ts.map +1 -0
  15. package/dist/cli/commands/log.js +76 -0
  16. package/dist/cli/commands/log.js.map +1 -0
  17. package/dist/cli/commands/rollback.d.ts +7 -0
  18. package/dist/cli/commands/rollback.d.ts.map +1 -0
  19. package/dist/cli/commands/rollback.js +92 -0
  20. package/dist/cli/commands/rollback.js.map +1 -0
  21. package/dist/cli/commands/status.d.ts +7 -0
  22. package/dist/cli/commands/status.d.ts.map +1 -0
  23. package/dist/cli/commands/status.js +88 -0
  24. package/dist/cli/commands/status.js.map +1 -0
  25. package/dist/cli/index.d.ts +3 -0
  26. package/dist/cli/index.d.ts.map +1 -0
  27. package/dist/cli/index.js +25 -0
  28. package/dist/cli/index.js.map +1 -0
  29. package/dist/config/defaults.d.ts +6 -0
  30. package/dist/config/defaults.d.ts.map +1 -0
  31. package/dist/config/defaults.js +31 -0
  32. package/dist/config/defaults.js.map +1 -0
  33. package/dist/config/index.d.ts +68 -0
  34. package/dist/config/index.d.ts.map +1 -0
  35. package/dist/config/index.js +195 -0
  36. package/dist/config/index.js.map +1 -0
  37. package/dist/core/evaluator/base-rule.d.ts +50 -0
  38. package/dist/core/evaluator/base-rule.d.ts.map +1 -0
  39. package/dist/core/evaluator/base-rule.js +69 -0
  40. package/dist/core/evaluator/base-rule.js.map +1 -0
  41. package/dist/core/evaluator/index.d.ts +33 -0
  42. package/dist/core/evaluator/index.d.ts.map +1 -0
  43. package/dist/core/evaluator/index.js +74 -0
  44. package/dist/core/evaluator/index.js.map +1 -0
  45. package/dist/core/evaluator/rules/repeated-drift.d.ts +19 -0
  46. package/dist/core/evaluator/rules/repeated-drift.d.ts.map +1 -0
  47. package/dist/core/evaluator/rules/repeated-drift.js +82 -0
  48. package/dist/core/evaluator/rules/repeated-drift.js.map +1 -0
  49. package/dist/core/evaluator/rules/repeated-manual-fix.d.ts +23 -0
  50. package/dist/core/evaluator/rules/repeated-manual-fix.d.ts.map +1 -0
  51. package/dist/core/evaluator/rules/repeated-manual-fix.js +97 -0
  52. package/dist/core/evaluator/rules/repeated-manual-fix.js.map +1 -0
  53. package/dist/core/journal/index.d.ts +76 -0
  54. package/dist/core/journal/index.d.ts.map +1 -0
  55. package/dist/core/journal/index.js +207 -0
  56. package/dist/core/journal/index.js.map +1 -0
  57. package/dist/core/observer/base-observer.d.ts +64 -0
  58. package/dist/core/observer/base-observer.d.ts.map +1 -0
  59. package/dist/core/observer/base-observer.js +142 -0
  60. package/dist/core/observer/base-observer.js.map +1 -0
  61. package/dist/core/observer/codex-observer.d.ts +71 -0
  62. package/dist/core/observer/codex-observer.d.ts.map +1 -0
  63. package/dist/core/observer/codex-observer.js +248 -0
  64. package/dist/core/observer/codex-observer.js.map +1 -0
  65. package/dist/core/observer/index.d.ts +7 -0
  66. package/dist/core/observer/index.d.ts.map +1 -0
  67. package/dist/core/observer/index.js +7 -0
  68. package/dist/core/observer/index.js.map +1 -0
  69. package/dist/core/observer/trace-manager.d.ts +82 -0
  70. package/dist/core/observer/trace-manager.d.ts.map +1 -0
  71. package/dist/core/observer/trace-manager.js +196 -0
  72. package/dist/core/observer/trace-manager.js.map +1 -0
  73. package/dist/core/origin-registry/index.d.ts +59 -0
  74. package/dist/core/origin-registry/index.d.ts.map +1 -0
  75. package/dist/core/origin-registry/index.js +235 -0
  76. package/dist/core/origin-registry/index.js.map +1 -0
  77. package/dist/core/patch-generator/base-strategy.d.ts +35 -0
  78. package/dist/core/patch-generator/base-strategy.d.ts.map +1 -0
  79. package/dist/core/patch-generator/base-strategy.js +55 -0
  80. package/dist/core/patch-generator/base-strategy.js.map +1 -0
  81. package/dist/core/patch-generator/index.d.ts +32 -0
  82. package/dist/core/patch-generator/index.d.ts.map +1 -0
  83. package/dist/core/patch-generator/index.js +101 -0
  84. package/dist/core/patch-generator/index.js.map +1 -0
  85. package/dist/core/patch-generator/strategies/add-fallback.d.ts +11 -0
  86. package/dist/core/patch-generator/strategies/add-fallback.d.ts.map +1 -0
  87. package/dist/core/patch-generator/strategies/add-fallback.js +57 -0
  88. package/dist/core/patch-generator/strategies/add-fallback.js.map +1 -0
  89. package/dist/core/patch-generator/strategies/prune-noise.d.ts +11 -0
  90. package/dist/core/patch-generator/strategies/prune-noise.d.ts.map +1 -0
  91. package/dist/core/patch-generator/strategies/prune-noise.js +48 -0
  92. package/dist/core/patch-generator/strategies/prune-noise.js.map +1 -0
  93. package/dist/core/shadow-manager/index.d.ts +65 -0
  94. package/dist/core/shadow-manager/index.d.ts.map +1 -0
  95. package/dist/core/shadow-manager/index.js +229 -0
  96. package/dist/core/shadow-manager/index.js.map +1 -0
  97. package/dist/core/shadow-registry/index.d.ts +68 -0
  98. package/dist/core/shadow-registry/index.d.ts.map +1 -0
  99. package/dist/core/shadow-registry/index.js +173 -0
  100. package/dist/core/shadow-registry/index.js.map +1 -0
  101. package/dist/daemon/index.d.ts +43 -0
  102. package/dist/daemon/index.d.ts.map +1 -0
  103. package/dist/daemon/index.js +144 -0
  104. package/dist/daemon/index.js.map +1 -0
  105. package/dist/storage/index.d.ts +7 -0
  106. package/dist/storage/index.d.ts.map +1 -0
  107. package/dist/storage/index.js +7 -0
  108. package/dist/storage/index.js.map +1 -0
  109. package/dist/storage/markdown.d.ts +66 -0
  110. package/dist/storage/markdown.d.ts.map +1 -0
  111. package/dist/storage/markdown.js +227 -0
  112. package/dist/storage/markdown.js.map +1 -0
  113. package/dist/storage/ndjson.d.ts +118 -0
  114. package/dist/storage/ndjson.d.ts.map +1 -0
  115. package/dist/storage/ndjson.js +238 -0
  116. package/dist/storage/ndjson.js.map +1 -0
  117. package/dist/storage/sqlite.d.ts +131 -0
  118. package/dist/storage/sqlite.d.ts.map +1 -0
  119. package/dist/storage/sqlite.js +415 -0
  120. package/dist/storage/sqlite.js.map +1 -0
  121. package/dist/types/index.d.ts +158 -0
  122. package/dist/types/index.d.ts.map +1 -0
  123. package/dist/types/index.js +5 -0
  124. package/dist/types/index.js.map +1 -0
  125. package/dist/utils/diff.d.ts +20 -0
  126. package/dist/utils/diff.d.ts.map +1 -0
  127. package/dist/utils/diff.js +47 -0
  128. package/dist/utils/diff.js.map +1 -0
  129. package/dist/utils/hash.d.ts +17 -0
  130. package/dist/utils/hash.d.ts.map +1 -0
  131. package/dist/utils/hash.js +28 -0
  132. package/dist/utils/hash.js.map +1 -0
  133. package/dist/utils/index.d.ts +8 -0
  134. package/dist/utils/index.d.ts.map +1 -0
  135. package/dist/utils/index.js +8 -0
  136. package/dist/utils/index.js.map +1 -0
  137. package/dist/utils/logger.d.ts +11 -0
  138. package/dist/utils/logger.d.ts.map +1 -0
  139. package/dist/utils/logger.js +64 -0
  140. package/dist/utils/logger.js.map +1 -0
  141. package/dist/utils/path.d.ts +67 -0
  142. package/dist/utils/path.d.ts.map +1 -0
  143. package/dist/utils/path.js +115 -0
  144. package/dist/utils/path.js.map +1 -0
  145. package/docs/ENGINEERING_PLAN.md +1065 -0
  146. package/docs/PRD.md +1004 -0
  147. package/docs/PROGRESS.md +523 -0
  148. package/package.json +60 -0
  149. package/src/cli/commands/diff.ts +158 -0
  150. package/src/cli/commands/freeze.ts +108 -0
  151. package/src/cli/commands/log.ts +87 -0
  152. package/src/cli/commands/rollback.ts +99 -0
  153. package/src/cli/commands/status.ts +101 -0
  154. package/src/cli/index.ts +31 -0
  155. package/src/config/defaults.ts +32 -0
  156. package/src/config/index.ts +220 -0
  157. package/src/core/evaluator/base-rule.ts +90 -0
  158. package/src/core/evaluator/index.ts +86 -0
  159. package/src/core/evaluator/rules/repeated-drift.ts +109 -0
  160. package/src/core/evaluator/rules/repeated-manual-fix.ts +129 -0
  161. package/src/core/journal/index.ts +286 -0
  162. package/src/core/observer/base-observer.ts +200 -0
  163. package/src/core/observer/codex-observer.ts +309 -0
  164. package/src/core/observer/index.ts +7 -0
  165. package/src/core/observer/trace-manager.ts +250 -0
  166. package/src/core/origin-registry/index.ts +264 -0
  167. package/src/core/patch-generator/base-strategy.ts +67 -0
  168. package/src/core/patch-generator/index.ts +118 -0
  169. package/src/core/patch-generator/strategies/add-fallback.ts +69 -0
  170. package/src/core/patch-generator/strategies/prune-noise.ts +65 -0
  171. package/src/core/shadow-manager/index.ts +278 -0
  172. package/src/core/shadow-registry/index.ts +200 -0
  173. package/src/daemon/index.ts +174 -0
  174. package/src/storage/index.ts +7 -0
  175. package/src/storage/markdown.ts +267 -0
  176. package/src/storage/ndjson.ts +273 -0
  177. package/src/storage/sqlite.ts +555 -0
  178. package/src/types/index.ts +212 -0
  179. package/src/utils/diff.ts +60 -0
  180. package/src/utils/hash.ts +31 -0
  181. package/src/utils/index.ts +8 -0
  182. package/src/utils/logger.ts +78 -0
  183. package/src/utils/path.ts +129 -0
  184. package/tests/unit/config.test.ts +65 -0
  185. package/tests/unit/path.test.ts +89 -0
  186. package/tests/unit/utils.test.ts +45 -0
  187. package/tsconfig.json +31 -0
  188. 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,7 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * Log 命令
4
+ * 查看某个 skill 的演化日志
5
+ */
6
+ export declare function createLogCommand(): Command;
7
+ //# sourceMappingURL=log.d.ts.map
@@ -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,7 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * Rollback 命令
4
+ * 回滚 shadow skill 到指定版本
5
+ */
6
+ export declare function createRollbackCommand(): Command;
7
+ //# sourceMappingURL=rollback.d.ts.map
@@ -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,7 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * Status 命令
4
+ * 查看当前项目 shadow skills 状态
5
+ */
6
+ export declare function createStatusCommand(): Command;
7
+ //# sourceMappingURL=status.d.ts.map
@@ -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,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,6 @@
1
+ import type { EVOConfig } from '../types/index.js';
2
+ /**
3
+ * 默认配置
4
+ */
5
+ export declare const DEFAULT_CONFIG: EVOConfig;
6
+ //# sourceMappingURL=defaults.d.ts.map
@@ -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"}