ethan-skill 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +249 -0
  3. package/dist/cli/index.d.ts +7 -0
  4. package/dist/cli/index.d.ts.map +1 -0
  5. package/dist/cli/index.js +452 -0
  6. package/dist/cli/index.js.map +1 -0
  7. package/dist/mcp/server.d.ts +7 -0
  8. package/dist/mcp/server.d.ts.map +1 -0
  9. package/dist/mcp/server.js +199 -0
  10. package/dist/mcp/server.js.map +1 -0
  11. package/dist/router/trigger-router.d.ts +16 -0
  12. package/dist/router/trigger-router.d.ts.map +1 -0
  13. package/dist/router/trigger-router.js +45 -0
  14. package/dist/router/trigger-router.js.map +1 -0
  15. package/dist/router/trigger-router.test.d.ts +2 -0
  16. package/dist/router/trigger-router.test.d.ts.map +1 -0
  17. package/dist/router/trigger-router.test.js +79 -0
  18. package/dist/router/trigger-router.test.js.map +1 -0
  19. package/dist/skills/01-requirement.d.ts +3 -0
  20. package/dist/skills/01-requirement.d.ts.map +1 -0
  21. package/dist/skills/01-requirement.js +100 -0
  22. package/dist/skills/01-requirement.js.map +1 -0
  23. package/dist/skills/02-task-breakdown.d.ts +3 -0
  24. package/dist/skills/02-task-breakdown.d.ts.map +1 -0
  25. package/dist/skills/02-task-breakdown.js +82 -0
  26. package/dist/skills/02-task-breakdown.js.map +1 -0
  27. package/dist/skills/03-design.d.ts +3 -0
  28. package/dist/skills/03-design.d.ts.map +1 -0
  29. package/dist/skills/03-design.js +80 -0
  30. package/dist/skills/03-design.js.map +1 -0
  31. package/dist/skills/04-implementation.d.ts +3 -0
  32. package/dist/skills/04-implementation.d.ts.map +1 -0
  33. package/dist/skills/04-implementation.js +77 -0
  34. package/dist/skills/04-implementation.js.map +1 -0
  35. package/dist/skills/05-progress-tracking.d.ts +3 -0
  36. package/dist/skills/05-progress-tracking.d.ts.map +1 -0
  37. package/dist/skills/05-progress-tracking.js +78 -0
  38. package/dist/skills/05-progress-tracking.js.map +1 -0
  39. package/dist/skills/06-task-report.d.ts +3 -0
  40. package/dist/skills/06-task-report.d.ts.map +1 -0
  41. package/dist/skills/06-task-report.js +75 -0
  42. package/dist/skills/06-task-report.js.map +1 -0
  43. package/dist/skills/07-weekly-report.d.ts +3 -0
  44. package/dist/skills/07-weekly-report.d.ts.map +1 -0
  45. package/dist/skills/07-weekly-report.js +101 -0
  46. package/dist/skills/07-weekly-report.js.map +1 -0
  47. package/dist/skills/08-code-review.d.ts +3 -0
  48. package/dist/skills/08-code-review.d.ts.map +1 -0
  49. package/dist/skills/08-code-review.js +136 -0
  50. package/dist/skills/08-code-review.js.map +1 -0
  51. package/dist/skills/09-debug.d.ts +3 -0
  52. package/dist/skills/09-debug.d.ts.map +1 -0
  53. package/dist/skills/09-debug.js +151 -0
  54. package/dist/skills/09-debug.js.map +1 -0
  55. package/dist/skills/10-tech-research.d.ts +3 -0
  56. package/dist/skills/10-tech-research.d.ts.map +1 -0
  57. package/dist/skills/10-tech-research.js +141 -0
  58. package/dist/skills/10-tech-research.js.map +1 -0
  59. package/dist/skills/index.d.ts +18 -0
  60. package/dist/skills/index.d.ts.map +1 -0
  61. package/dist/skills/index.js +51 -0
  62. package/dist/skills/index.js.map +1 -0
  63. package/dist/skills/pipeline.d.ts +15 -0
  64. package/dist/skills/pipeline.d.ts.map +1 -0
  65. package/dist/skills/pipeline.js +55 -0
  66. package/dist/skills/pipeline.js.map +1 -0
  67. package/dist/skills/skills.test.d.ts +2 -0
  68. package/dist/skills/skills.test.d.ts.map +1 -0
  69. package/dist/skills/skills.test.js +101 -0
  70. package/dist/skills/skills.test.js.map +1 -0
  71. package/dist/skills/types.d.ts +60 -0
  72. package/dist/skills/types.d.ts.map +1 -0
  73. package/dist/skills/types.js +7 -0
  74. package/dist/skills/types.js.map +1 -0
  75. package/dist/templates/copilot-md.template.d.ts +7 -0
  76. package/dist/templates/copilot-md.template.d.ts.map +1 -0
  77. package/dist/templates/copilot-md.template.js +293 -0
  78. package/dist/templates/copilot-md.template.js.map +1 -0
  79. package/dist/templates/cursor-mdc.template.d.ts +10 -0
  80. package/dist/templates/cursor-mdc.template.d.ts.map +1 -0
  81. package/dist/templates/cursor-mdc.template.js +86 -0
  82. package/dist/templates/cursor-mdc.template.js.map +1 -0
  83. package/dist/templates/templates.test.d.ts +2 -0
  84. package/dist/templates/templates.test.d.ts.map +1 -0
  85. package/dist/templates/templates.test.js +89 -0
  86. package/dist/templates/templates.test.js.map +1 -0
  87. package/dist/vscode/commands.d.ts +4 -0
  88. package/dist/vscode/commands.d.ts.map +1 -0
  89. package/dist/vscode/commands.js +155 -0
  90. package/dist/vscode/commands.js.map +1 -0
  91. package/dist/vscode/extension.d.ts +4 -0
  92. package/dist/vscode/extension.d.ts.map +1 -0
  93. package/dist/vscode/extension.js +96 -0
  94. package/dist/vscode/extension.js.map +1 -0
  95. package/package.json +71 -0
  96. package/rules/claude-code/CLAUDE.md +767 -0
  97. package/rules/cline/.clinerules +622 -0
  98. package/rules/codebuddy/CODEBUDDY.md +70 -0
  99. package/rules/continue/.continuerules +622 -0
  100. package/rules/copilot/copilot-instructions.md +162 -0
  101. package/rules/cursor/.cursorrules +747 -0
  102. package/rules/cursor/smart-flow.mdc +763 -0
  103. package/rules/jetbrains/smart-flow.md +162 -0
  104. package/rules/lingma/smart-flow.md +133 -0
  105. package/rules/windsurf/.windsurf/rules/smart-flow.md +162 -0
  106. package/rules/zed/smart-flow.rules +45 -0
@@ -0,0 +1,452 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * npx ethan CLI
5
+ * 命令:install | list | mcp | validate | pipeline | doctor | stats
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ const commander_1 = require("commander");
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ const os = __importStar(require("os"));
45
+ const index_1 = require("../skills/index");
46
+ const pkg = JSON.parse(fs.readFileSync(path.join(__dirname, '../../package.json'), 'utf-8'));
47
+ const program = new commander_1.Command();
48
+ program
49
+ .name('ethan')
50
+ .description('Ethan - Your AI Workflow Assistant')
51
+ .version(pkg.version);
52
+ // ─── Stats 辅助函数 ──────────────────────────────────────────────────────────
53
+ const STATS_FILE = path.join(os.homedir(), '.ethan-stats.json');
54
+ function readStats() {
55
+ try {
56
+ if (fs.existsSync(STATS_FILE)) {
57
+ return JSON.parse(fs.readFileSync(STATS_FILE, 'utf-8'));
58
+ }
59
+ }
60
+ catch {
61
+ // ignore parse errors
62
+ }
63
+ return {};
64
+ }
65
+ function writeStats(stats) {
66
+ try {
67
+ fs.writeFileSync(STATS_FILE, JSON.stringify(stats, null, 2), 'utf-8');
68
+ }
69
+ catch {
70
+ // ignore write errors
71
+ }
72
+ }
73
+ // ─── install 命令 ───────────────────────────────────────────────────────────
74
+ program
75
+ .command('install')
76
+ .description('将 Ethan 规则文件安装到当前项目')
77
+ .option('-p, --platform <platform>', '目标平台:cursor | copilot | cline | lingma | codebuddy | windsurf | zed | jetbrains | continue | claude-code | all', 'all')
78
+ .option('-d, --dir <dir>', '目标目录(默认为当前目录)', process.cwd())
79
+ .action(async (options) => {
80
+ const { platform, dir } = options;
81
+ const rulesDir = path.join(__dirname, '../../rules');
82
+ const platformMap = {
83
+ cursor: [
84
+ {
85
+ src: path.join(rulesDir, 'cursor/smart-flow.mdc'),
86
+ dest: path.join(dir, '.cursor/rules/smart-flow.mdc'),
87
+ },
88
+ {
89
+ src: path.join(rulesDir, 'cursor/.cursorrules'),
90
+ dest: path.join(dir, '.cursorrules'),
91
+ },
92
+ ],
93
+ copilot: [
94
+ {
95
+ src: path.join(rulesDir, 'copilot/copilot-instructions.md'),
96
+ dest: path.join(dir, '.github/copilot-instructions.md'),
97
+ },
98
+ ],
99
+ cline: [
100
+ {
101
+ src: path.join(rulesDir, 'cline/.clinerules'),
102
+ dest: path.join(dir, '.clinerules'),
103
+ },
104
+ ],
105
+ lingma: [
106
+ {
107
+ src: path.join(rulesDir, 'lingma/smart-flow.md'),
108
+ dest: path.join(dir, '.lingma/rules/smart-flow.md'),
109
+ },
110
+ ],
111
+ codebuddy: [
112
+ {
113
+ src: path.join(rulesDir, 'codebuddy/CODEBUDDY.md'),
114
+ dest: path.join(dir, 'CODEBUDDY.md'),
115
+ },
116
+ ],
117
+ windsurf: [
118
+ {
119
+ src: path.join(rulesDir, 'windsurf/.windsurf/rules/smart-flow.md'),
120
+ dest: path.join(dir, '.windsurf/rules/smart-flow.md'),
121
+ },
122
+ ],
123
+ zed: [
124
+ {
125
+ src: path.join(rulesDir, 'zed/smart-flow.rules'),
126
+ dest: path.join(dir, 'smart-flow.rules'),
127
+ },
128
+ ],
129
+ jetbrains: [
130
+ {
131
+ src: path.join(rulesDir, 'jetbrains/smart-flow.md'),
132
+ dest: path.join(dir, '.github/ai-instructions.md'),
133
+ },
134
+ ],
135
+ continue: [
136
+ {
137
+ src: path.join(rulesDir, 'continue/.continuerules'),
138
+ dest: path.join(dir, '.continuerules'),
139
+ },
140
+ ],
141
+ 'claude-code': [
142
+ {
143
+ src: path.join(rulesDir, 'claude-code/CLAUDE.md'),
144
+ dest: path.join(dir, 'CLAUDE.md'),
145
+ },
146
+ ],
147
+ };
148
+ const targets = platform === 'all'
149
+ ? Object.values(platformMap).flat()
150
+ : platformMap[platform] ?? [];
151
+ if (targets.length === 0) {
152
+ console.error(`Unknown platform: ${platform}`);
153
+ console.error(`Available: cursor | copilot | cline | lingma | codebuddy | windsurf | zed | jetbrains | continue | claude-code | all`);
154
+ process.exit(1);
155
+ }
156
+ let installed = 0;
157
+ for (const { src, dest } of targets) {
158
+ if (!fs.existsSync(src)) {
159
+ console.warn(` ⚠️ Source not found: ${src} (run 'npm run build:rules' first)`);
160
+ continue;
161
+ }
162
+ const destDir = path.dirname(dest);
163
+ if (!fs.existsSync(destDir)) {
164
+ fs.mkdirSync(destDir, { recursive: true });
165
+ }
166
+ fs.copyFileSync(src, dest);
167
+ console.log(` ✅ ${path.relative(dir, dest)}`);
168
+ installed++;
169
+ }
170
+ console.log(`\nInstalled ${installed} rule file(s) to ${dir}`);
171
+ if (installed > 0) {
172
+ console.log('Restart your AI editor to apply the new rules.');
173
+ }
174
+ });
175
+ // ─── list 命令 ──────────────────────────────────────────────────────────────
176
+ program
177
+ .command('list')
178
+ .description('列出所有可用 Skill')
179
+ .option('--json', '以 JSON 格式输出')
180
+ .action((options) => {
181
+ if (options.json) {
182
+ console.log(JSON.stringify(index_1.ALL_SKILLS.map((s) => ({
183
+ id: s.id,
184
+ name: s.name,
185
+ nameEn: s.nameEn,
186
+ description: s.description,
187
+ triggers: s.triggers,
188
+ category: s.category,
189
+ nextSkill: s.nextSkill,
190
+ })), null, 2));
191
+ return;
192
+ }
193
+ console.log('\nEthan Skills\n');
194
+ console.log('─'.repeat(60));
195
+ for (const skill of index_1.ALL_SKILLS) {
196
+ const categoryTag = skill.category ? ` [${skill.category}]` : '';
197
+ console.log(`\n${skill.order}. ${skill.name} (${skill.id})${categoryTag}`);
198
+ console.log(` ${skill.description}`);
199
+ console.log(` Triggers: ${skill.triggers.slice(0, 3).join(' | ')}`);
200
+ }
201
+ console.log('\n' + '─'.repeat(60));
202
+ console.log(`Total: ${index_1.ALL_SKILLS.length} skills`);
203
+ });
204
+ // ─── mcp 命令 ───────────────────────────────────────────────────────────────
205
+ program
206
+ .command('mcp')
207
+ .description('启动 MCP Server(stdio transport),供 AI 客户端调用')
208
+ .action(async () => {
209
+ try {
210
+ const { startMcpServer } = await Promise.resolve().then(() => __importStar(require('../mcp/server')));
211
+ await startMcpServer();
212
+ }
213
+ catch (err) {
214
+ console.error('Failed to start MCP server:', err);
215
+ process.exit(1);
216
+ }
217
+ });
218
+ // ─── validate 命令 ──────────────────────────────────────────────────────────
219
+ program
220
+ .command('validate')
221
+ .description('验证 rules/ 目录中的规则文件是否与当前 src/skills/ 同步')
222
+ .action(async () => {
223
+ const { renderCursorMdc, renderCursorOld } = await Promise.resolve().then(() => __importStar(require('../templates/cursor-mdc.template')));
224
+ const { renderMarkdown } = await Promise.resolve().then(() => __importStar(require('../templates/copilot-md.template')));
225
+ const ROOT = path.join(__dirname, '../..');
226
+ const FIXED_TS = '1970-01-01T00:00:00.000Z';
227
+ function makeCtx(platform) {
228
+ return {
229
+ platform,
230
+ skills: index_1.ALL_SKILLS,
231
+ generatedAt: FIXED_TS,
232
+ version: pkg.version,
233
+ };
234
+ }
235
+ // Strip ISO timestamp lines for comparison
236
+ const TS_REGEX = /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?Z/g;
237
+ function normalize(content) {
238
+ return content.replace(TS_REGEX, 'TIMESTAMP');
239
+ }
240
+ const checks = [
241
+ { file: 'rules/cursor/smart-flow.mdc', expected: renderCursorMdc(makeCtx('cursor-new')) },
242
+ { file: 'rules/cursor/.cursorrules', expected: renderCursorOld(makeCtx('cursor-old')) },
243
+ { file: 'rules/copilot/copilot-instructions.md', expected: renderMarkdown(makeCtx('copilot')) },
244
+ { file: 'rules/cline/.clinerules', expected: renderMarkdown(makeCtx('cline')) },
245
+ { file: 'rules/lingma/smart-flow.md', expected: renderMarkdown(makeCtx('lingma')) },
246
+ { file: 'rules/codebuddy/CODEBUDDY.md', expected: renderMarkdown(makeCtx('codebuddy')) },
247
+ { file: 'rules/windsurf/.windsurf/rules/smart-flow.md', expected: renderMarkdown(makeCtx('windsurf')) },
248
+ { file: 'rules/zed/smart-flow.rules', expected: renderMarkdown(makeCtx('zed')) },
249
+ { file: 'rules/jetbrains/smart-flow.md', expected: renderMarkdown(makeCtx('jetbrains')) },
250
+ { file: 'rules/continue/.continuerules', expected: renderMarkdown(makeCtx('continue')) },
251
+ { file: 'rules/claude-code/CLAUDE.md', expected: renderMarkdown(makeCtx('claude-code')) },
252
+ ];
253
+ let allOk = true;
254
+ console.log('\nValidating rules files...\n');
255
+ for (const { file, expected } of checks) {
256
+ const filePath = path.join(ROOT, file);
257
+ if (!fs.existsSync(filePath)) {
258
+ console.error(` ❌ MISSING: ${file}`);
259
+ allOk = false;
260
+ continue;
261
+ }
262
+ const actual = fs.readFileSync(filePath, 'utf-8');
263
+ const normalizedActual = normalize(actual);
264
+ const normalizedExpected = normalize(expected);
265
+ if (normalizedActual !== normalizedExpected) {
266
+ const actualLines = normalizedActual.split('\n');
267
+ const expectedLines = normalizedExpected.split('\n');
268
+ let firstDiff = '';
269
+ for (let i = 0; i < Math.max(actualLines.length, expectedLines.length); i++) {
270
+ if (actualLines[i] !== expectedLines[i]) {
271
+ firstDiff = `line ${i + 1}: expected "${expectedLines[i] ?? ''}" got "${actualLines[i] ?? ''}"`;
272
+ break;
273
+ }
274
+ }
275
+ console.error(` ❌ OUT OF SYNC: ${file}`);
276
+ console.error(` ${firstDiff}`);
277
+ allOk = false;
278
+ }
279
+ else {
280
+ console.log(` ✅ ${file}`);
281
+ }
282
+ }
283
+ console.log('');
284
+ if (allOk) {
285
+ console.log('✨ All rules in sync.\n');
286
+ process.exit(0);
287
+ }
288
+ else {
289
+ console.error('❌ Some rules are out of sync. Run: npm run build:rules\n');
290
+ process.exit(1);
291
+ }
292
+ });
293
+ // ─── pipeline 命令 ──────────────────────────────────────────────────────────
294
+ const pipelineCmd = program
295
+ .command('pipeline')
296
+ .description('Pipeline 链式执行管理');
297
+ pipelineCmd
298
+ .command('list')
299
+ .description('列出所有可用 Pipeline')
300
+ .action(async () => {
301
+ const { PIPELINES } = await Promise.resolve().then(() => __importStar(require('../skills/pipeline')));
302
+ console.log('\nEthan Pipelines\n');
303
+ console.log('─'.repeat(60));
304
+ for (const p of PIPELINES) {
305
+ console.log(`\n${p.id}`);
306
+ console.log(` 名称:${p.name}`);
307
+ console.log(` 描述:${p.description}`);
308
+ console.log(` Skills:${p.skillIds.join(' → ')}`);
309
+ }
310
+ console.log('\n' + '─'.repeat(60));
311
+ console.log(`Total: ${PIPELINES.length} pipelines`);
312
+ });
313
+ pipelineCmd
314
+ .command('run <name>')
315
+ .description('按 Pipeline 顺序执行各 Skill 提示')
316
+ .option('-c, --context <context>', '输入上下文', '')
317
+ .action(async (name, options) => {
318
+ const { resolvePipeline } = await Promise.resolve().then(() => __importStar(require('../skills/pipeline')));
319
+ const resolved = resolvePipeline(name);
320
+ if (!resolved) {
321
+ const { PIPELINES } = await Promise.resolve().then(() => __importStar(require('../skills/pipeline')));
322
+ console.error(`Unknown pipeline: ${name}`);
323
+ console.error(`Available: ${PIPELINES.map((p) => p.id).join(' | ')}`);
324
+ process.exit(1);
325
+ }
326
+ const { pipeline, skills } = resolved;
327
+ console.log(`\n🚀 Pipeline: ${pipeline.name}`);
328
+ console.log(` ${pipeline.description}`);
329
+ console.log(` Context: ${options.context || '(none)'}\n`);
330
+ console.log('─'.repeat(60));
331
+ for (let i = 0; i < skills.length; i++) {
332
+ const skill = skills[i];
333
+ console.log(`\n[${i + 1}/${skills.length}] ${skill.name} (${skill.id})`);
334
+ console.log(`描述:${skill.description}`);
335
+ console.log(`\n执行步骤:`);
336
+ for (const step of skill.steps) {
337
+ console.log(` ${step.title}`);
338
+ }
339
+ console.log(`\n输出格式:${skill.outputFormat}`);
340
+ if (i < skills.length - 1) {
341
+ console.log('\n' + '─'.repeat(40));
342
+ }
343
+ }
344
+ console.log('\n' + '─'.repeat(60));
345
+ console.log(`\n✅ Pipeline "${pipeline.name}" 共 ${skills.length} 个 Skill\n`);
346
+ // Record usage stats
347
+ const stats = readStats();
348
+ for (const skill of skills) {
349
+ stats[skill.id] = (stats[skill.id] || 0) + 1;
350
+ }
351
+ writeStats(stats);
352
+ });
353
+ // ─── doctor 命令 ────────────────────────────────────────────────────────────
354
+ program
355
+ .command('doctor')
356
+ .description('检查运行环境和构建产物健康状态')
357
+ .action(async () => {
358
+ console.log('\n🩺 Ethan Doctor\n');
359
+ console.log('─'.repeat(60));
360
+ // 1. Node.js version check
361
+ const nodeVersion = process.versions.node;
362
+ const nodeMajor = parseInt(nodeVersion.split('.')[0], 10);
363
+ const nodeOk = nodeMajor >= 18;
364
+ console.log(`\n[环境检查]`);
365
+ console.log(` Node.js: v${nodeVersion} ${nodeOk ? '✅' : '❌ (需要 Node.js >= 18)'}`);
366
+ // 2. MCP SDK check
367
+ const sdkOk = fs.existsSync(path.join(__dirname, '../../node_modules/@modelcontextprotocol/sdk'));
368
+ console.log(` @modelcontextprotocol/sdk: ${sdkOk ? '✅ 已安装' : '❌ 未安装'}`);
369
+ // 3. Rules files status
370
+ const ROOT = path.join(__dirname, '../..');
371
+ const { renderCursorMdc, renderCursorOld } = await Promise.resolve().then(() => __importStar(require('../templates/cursor-mdc.template')));
372
+ const { renderMarkdown } = await Promise.resolve().then(() => __importStar(require('../templates/copilot-md.template')));
373
+ const FIXED_TS = '1970-01-01T00:00:00.000Z';
374
+ function makeCtx(platform) {
375
+ return { platform, skills: index_1.ALL_SKILLS, generatedAt: FIXED_TS, version: pkg.version };
376
+ }
377
+ const TS_REGEX = /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?Z/g;
378
+ function normalize(content) {
379
+ return content.replace(TS_REGEX, 'TIMESTAMP');
380
+ }
381
+ const ruleFiles = [
382
+ { file: 'rules/cursor/smart-flow.mdc', platform: ' Cursor 新版 ', expected: () => renderCursorMdc(makeCtx('cursor-new')) },
383
+ { file: 'rules/cursor/.cursorrules', platform: ' Cursor 旧版 ', expected: () => renderCursorOld(makeCtx('cursor-old')) },
384
+ { file: 'rules/copilot/copilot-instructions.md', platform: ' VS Code Copilot', expected: () => renderMarkdown(makeCtx('copilot')) },
385
+ { file: 'rules/cline/.clinerules', platform: ' Cline ', expected: () => renderMarkdown(makeCtx('cline')) },
386
+ { file: 'rules/lingma/smart-flow.md', platform: ' 通义灵码 ', expected: () => renderMarkdown(makeCtx('lingma')) },
387
+ { file: 'rules/codebuddy/CODEBUDDY.md', platform: ' 腾讯 CodeBuddy ', expected: () => renderMarkdown(makeCtx('codebuddy')) },
388
+ { file: 'rules/windsurf/.windsurf/rules/smart-flow.md', platform: ' Windsurf ', expected: () => renderMarkdown(makeCtx('windsurf')) },
389
+ { file: 'rules/zed/smart-flow.rules', platform: ' Zed ', expected: () => renderMarkdown(makeCtx('zed')) },
390
+ { file: 'rules/jetbrains/smart-flow.md', platform: ' JetBrains AI ', expected: () => renderMarkdown(makeCtx('jetbrains')) },
391
+ { file: 'rules/continue/.continuerules', platform: ' Continue ', expected: () => renderMarkdown(makeCtx('continue')) },
392
+ { file: 'rules/claude-code/CLAUDE.md', platform: ' Claude Code ', expected: () => renderMarkdown(makeCtx('claude-code')) },
393
+ ];
394
+ console.log(`\n[规则文件状态]`);
395
+ console.log(` ${'平台'.padEnd(18)} ${'已构建'.padEnd(8)} ${'最新'.padEnd(8)}`);
396
+ console.log(` ${'-'.repeat(36)}`);
397
+ for (const { file, platform, expected } of ruleFiles) {
398
+ const filePath = path.join(ROOT, file);
399
+ const built = fs.existsSync(filePath);
400
+ let latest = false;
401
+ if (built) {
402
+ const actual = fs.readFileSync(filePath, 'utf-8');
403
+ latest = normalize(actual) === normalize(expected());
404
+ }
405
+ const builtStr = built ? '✅' : '❌';
406
+ const latestStr = built ? (latest ? '✅' : '⚠️ 需重建') : '-';
407
+ console.log(` ${platform} ${builtStr.padEnd(8)} ${latestStr}`);
408
+ }
409
+ console.log('\n' + '─'.repeat(60));
410
+ const allBuilt = ruleFiles.every(({ file }) => fs.existsSync(path.join(ROOT, file)));
411
+ if (!allBuilt) {
412
+ console.log('\n💡 提示:运行 npm run build:rules 生成规则文件\n');
413
+ }
414
+ else {
415
+ console.log('\n✅ 所有检查完成\n');
416
+ }
417
+ });
418
+ // ─── stats 命令 ─────────────────────────────────────────────────────────────
419
+ program
420
+ .command('stats')
421
+ .description('查看 Skill 使用频次统计')
422
+ .option('--reset', '清空统计数据')
423
+ .action((options) => {
424
+ if (options.reset) {
425
+ writeStats({});
426
+ console.log('✅ 统计数据已清空');
427
+ return;
428
+ }
429
+ const stats = readStats();
430
+ const entries = Object.entries(stats).sort(([, a], [, b]) => b - a);
431
+ if (entries.length === 0) {
432
+ console.log('\n📊 暂无使用记录(运行 pipeline run 命令后将记录使用频次)\n');
433
+ return;
434
+ }
435
+ const maxCount = Math.max(...entries.map(([, v]) => v));
436
+ const BAR_WIDTH = 30;
437
+ console.log('\n📊 Ethan Skill 使用频次\n');
438
+ console.log('─'.repeat(60));
439
+ for (const [skillId, count] of entries) {
440
+ const skill = index_1.ALL_SKILLS.find((s) => s.id === skillId);
441
+ const name = skill ? skill.name : skillId;
442
+ const barLen = Math.round((count / maxCount) * BAR_WIDTH);
443
+ const bar = '█'.repeat(barLen);
444
+ const label = name.padEnd(12);
445
+ console.log(` ${label} ${bar} ${count}`);
446
+ }
447
+ const total = entries.reduce((sum, [, v]) => sum + v, 0);
448
+ console.log('─'.repeat(60));
449
+ console.log(` Total executions: ${total}\n`);
450
+ });
451
+ program.parse(process.argv);
452
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * MCP Server(stdio transport)
3
+ * 每个 Skill → 一个 MCP tool
4
+ * 运行:node dist/mcp/server.js 或 npx ethan mcp
5
+ */
6
+ export declare function startMcpServer(): Promise<void>;
7
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAuEH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAkHpD"}