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.
- package/CHANGELOG.md +25 -0
- package/README.md +249 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +452 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/mcp/server.d.ts +7 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +199 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/router/trigger-router.d.ts +16 -0
- package/dist/router/trigger-router.d.ts.map +1 -0
- package/dist/router/trigger-router.js +45 -0
- package/dist/router/trigger-router.js.map +1 -0
- package/dist/router/trigger-router.test.d.ts +2 -0
- package/dist/router/trigger-router.test.d.ts.map +1 -0
- package/dist/router/trigger-router.test.js +79 -0
- package/dist/router/trigger-router.test.js.map +1 -0
- package/dist/skills/01-requirement.d.ts +3 -0
- package/dist/skills/01-requirement.d.ts.map +1 -0
- package/dist/skills/01-requirement.js +100 -0
- package/dist/skills/01-requirement.js.map +1 -0
- package/dist/skills/02-task-breakdown.d.ts +3 -0
- package/dist/skills/02-task-breakdown.d.ts.map +1 -0
- package/dist/skills/02-task-breakdown.js +82 -0
- package/dist/skills/02-task-breakdown.js.map +1 -0
- package/dist/skills/03-design.d.ts +3 -0
- package/dist/skills/03-design.d.ts.map +1 -0
- package/dist/skills/03-design.js +80 -0
- package/dist/skills/03-design.js.map +1 -0
- package/dist/skills/04-implementation.d.ts +3 -0
- package/dist/skills/04-implementation.d.ts.map +1 -0
- package/dist/skills/04-implementation.js +77 -0
- package/dist/skills/04-implementation.js.map +1 -0
- package/dist/skills/05-progress-tracking.d.ts +3 -0
- package/dist/skills/05-progress-tracking.d.ts.map +1 -0
- package/dist/skills/05-progress-tracking.js +78 -0
- package/dist/skills/05-progress-tracking.js.map +1 -0
- package/dist/skills/06-task-report.d.ts +3 -0
- package/dist/skills/06-task-report.d.ts.map +1 -0
- package/dist/skills/06-task-report.js +75 -0
- package/dist/skills/06-task-report.js.map +1 -0
- package/dist/skills/07-weekly-report.d.ts +3 -0
- package/dist/skills/07-weekly-report.d.ts.map +1 -0
- package/dist/skills/07-weekly-report.js +101 -0
- package/dist/skills/07-weekly-report.js.map +1 -0
- package/dist/skills/08-code-review.d.ts +3 -0
- package/dist/skills/08-code-review.d.ts.map +1 -0
- package/dist/skills/08-code-review.js +136 -0
- package/dist/skills/08-code-review.js.map +1 -0
- package/dist/skills/09-debug.d.ts +3 -0
- package/dist/skills/09-debug.d.ts.map +1 -0
- package/dist/skills/09-debug.js +151 -0
- package/dist/skills/09-debug.js.map +1 -0
- package/dist/skills/10-tech-research.d.ts +3 -0
- package/dist/skills/10-tech-research.d.ts.map +1 -0
- package/dist/skills/10-tech-research.js +141 -0
- package/dist/skills/10-tech-research.js.map +1 -0
- package/dist/skills/index.d.ts +18 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +51 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/pipeline.d.ts +15 -0
- package/dist/skills/pipeline.d.ts.map +1 -0
- package/dist/skills/pipeline.js +55 -0
- package/dist/skills/pipeline.js.map +1 -0
- package/dist/skills/skills.test.d.ts +2 -0
- package/dist/skills/skills.test.d.ts.map +1 -0
- package/dist/skills/skills.test.js +101 -0
- package/dist/skills/skills.test.js.map +1 -0
- package/dist/skills/types.d.ts +60 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +7 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/templates/copilot-md.template.d.ts +7 -0
- package/dist/templates/copilot-md.template.d.ts.map +1 -0
- package/dist/templates/copilot-md.template.js +293 -0
- package/dist/templates/copilot-md.template.js.map +1 -0
- package/dist/templates/cursor-mdc.template.d.ts +10 -0
- package/dist/templates/cursor-mdc.template.d.ts.map +1 -0
- package/dist/templates/cursor-mdc.template.js +86 -0
- package/dist/templates/cursor-mdc.template.js.map +1 -0
- package/dist/templates/templates.test.d.ts +2 -0
- package/dist/templates/templates.test.d.ts.map +1 -0
- package/dist/templates/templates.test.js +89 -0
- package/dist/templates/templates.test.js.map +1 -0
- package/dist/vscode/commands.d.ts +4 -0
- package/dist/vscode/commands.d.ts.map +1 -0
- package/dist/vscode/commands.js +155 -0
- package/dist/vscode/commands.js.map +1 -0
- package/dist/vscode/extension.d.ts +4 -0
- package/dist/vscode/extension.d.ts.map +1 -0
- package/dist/vscode/extension.js +96 -0
- package/dist/vscode/extension.js.map +1 -0
- package/package.json +71 -0
- package/rules/claude-code/CLAUDE.md +767 -0
- package/rules/cline/.clinerules +622 -0
- package/rules/codebuddy/CODEBUDDY.md +70 -0
- package/rules/continue/.continuerules +622 -0
- package/rules/copilot/copilot-instructions.md +162 -0
- package/rules/cursor/.cursorrules +747 -0
- package/rules/cursor/smart-flow.mdc +763 -0
- package/rules/jetbrains/smart-flow.md +162 -0
- package/rules/lingma/smart-flow.md +133 -0
- package/rules/windsurf/.windsurf/rules/smart-flow.md +162 -0
- package/rules/zed/smart-flow.rules +45 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/skills/types.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { BuildContext } from '../skills/types';
|
|
2
|
+
/**
|
|
3
|
+
* 生成各平台 Markdown 规则文件
|
|
4
|
+
* 支持:copilot、cline、lingma、codebuddy、windsurf、zed、jetbrains、continue、claude-code
|
|
5
|
+
*/
|
|
6
|
+
export declare function renderMarkdown(ctx: BuildContext): string;
|
|
7
|
+
//# sourceMappingURL=copilot-md.template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copilot-md.template.d.ts","sourceRoot":"","sources":["../../src/templates/copilot-md.template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAErE;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAyBxD"}
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderMarkdown = renderMarkdown;
|
|
4
|
+
/**
|
|
5
|
+
* 生成各平台 Markdown 规则文件
|
|
6
|
+
* 支持:copilot、cline、lingma、codebuddy、windsurf、zed、jetbrains、continue、claude-code
|
|
7
|
+
*/
|
|
8
|
+
function renderMarkdown(ctx) {
|
|
9
|
+
switch (ctx.platform) {
|
|
10
|
+
case 'copilot':
|
|
11
|
+
return renderCopilot(ctx);
|
|
12
|
+
case 'cline':
|
|
13
|
+
return renderCline(ctx);
|
|
14
|
+
case 'lingma':
|
|
15
|
+
return renderLingma(ctx);
|
|
16
|
+
case 'codebuddy':
|
|
17
|
+
return renderCodeBuddy(ctx);
|
|
18
|
+
case 'windsurf':
|
|
19
|
+
return renderWindsurf(ctx);
|
|
20
|
+
case 'zed':
|
|
21
|
+
return renderZed(ctx);
|
|
22
|
+
case 'jetbrains':
|
|
23
|
+
return renderJetBrains(ctx);
|
|
24
|
+
case 'continue':
|
|
25
|
+
return renderContinue(ctx);
|
|
26
|
+
case 'claude-code':
|
|
27
|
+
return renderClaudeCode(ctx);
|
|
28
|
+
case 'cursor-new':
|
|
29
|
+
case 'cursor-old':
|
|
30
|
+
// Cursor uses dedicated cursor-mdc.template.ts
|
|
31
|
+
return renderCopilot(ctx);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/** VS Code Copilot:.github/copilot-instructions.md */
|
|
35
|
+
function renderCopilot(ctx) {
|
|
36
|
+
const { skills, version, generatedAt } = ctx;
|
|
37
|
+
return `# Ethan - Copilot Instructions (v${version})
|
|
38
|
+
|
|
39
|
+
> Auto-generated from src/skills/ | ${generatedAt}
|
|
40
|
+
> Do not edit manually.
|
|
41
|
+
|
|
42
|
+
You are equipped with the Ethan workflow assistant. When users mention any of the trigger keywords below, execute the corresponding skill workflow precisely.
|
|
43
|
+
|
|
44
|
+
## Available Skills
|
|
45
|
+
|
|
46
|
+
${skills.map((s) => renderCopilotSkill(s)).join('\n\n')}
|
|
47
|
+
|
|
48
|
+
## General Rules
|
|
49
|
+
|
|
50
|
+
- Detect user intent and auto-match the appropriate Skill at the start of each conversation
|
|
51
|
+
- Follow each Skill's defined steps without skipping
|
|
52
|
+
- Output strictly follows the defined format template for each Skill
|
|
53
|
+
- When user explicitly names a Skill, execute directly without confirmation
|
|
54
|
+
`;
|
|
55
|
+
}
|
|
56
|
+
function renderCopilotSkill(skill) {
|
|
57
|
+
const steps = skill.steps
|
|
58
|
+
.map((step, i) => `${i + 1}. **${step.title.replace(/^\d+\.\s*/, '')}**: ${step.content.split('\n')[0]}`)
|
|
59
|
+
.join('\n');
|
|
60
|
+
return `### ${skill.order}. ${skill.name} (${skill.nameEn})
|
|
61
|
+
|
|
62
|
+
**Triggers**: ${skill.triggers.map((t) => `\`${t}\``).join(', ')}
|
|
63
|
+
|
|
64
|
+
**Goal**: ${skill.description}
|
|
65
|
+
|
|
66
|
+
**Steps**:
|
|
67
|
+
${steps}
|
|
68
|
+
|
|
69
|
+
**Output**: ${skill.outputFormat}`;
|
|
70
|
+
}
|
|
71
|
+
/** Cline:.clinerules */
|
|
72
|
+
function renderCline(ctx) {
|
|
73
|
+
const { skills, version, generatedAt } = ctx;
|
|
74
|
+
const skillsContent = skills.map(renderClineSkill).join('\n\n');
|
|
75
|
+
return `# Ethan v${version}
|
|
76
|
+
# Generated: ${generatedAt}
|
|
77
|
+
# Source: https://github.com/your-org/ethan-skill
|
|
78
|
+
|
|
79
|
+
Ethan。当用户输入以下触发词时,按对应 Skill 的步骤执行。
|
|
80
|
+
|
|
81
|
+
## 触发词总览
|
|
82
|
+
${skills.map((s) => `- **${s.name}**: ${s.triggers.slice(0, 4).join(' | ')}`).join('\n')}
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
${skillsContent}
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
规则:严格按步骤执行,不跳步,输出遵循各 Skill 的格式模板。
|
|
90
|
+
`;
|
|
91
|
+
}
|
|
92
|
+
function renderClineSkill(skill) {
|
|
93
|
+
const stepsContent = skill.steps.map((step) => `${step.title}\n${step.content}`).join('\n\n');
|
|
94
|
+
return `## ${skill.name}
|
|
95
|
+
|
|
96
|
+
触发:${skill.triggers.slice(0, 4).join(' | ')}
|
|
97
|
+
说明:${skill.description}
|
|
98
|
+
|
|
99
|
+
${stepsContent}
|
|
100
|
+
|
|
101
|
+
输出格式:${skill.outputFormat}`;
|
|
102
|
+
}
|
|
103
|
+
/** 通义灵码:.lingma/rules/*.md(结构简洁) */
|
|
104
|
+
function renderLingma(ctx) {
|
|
105
|
+
const { skills, version, generatedAt } = ctx;
|
|
106
|
+
return `# Ethan v${version}
|
|
107
|
+
|
|
108
|
+
> 生成时间:${generatedAt}
|
|
109
|
+
|
|
110
|
+
## 功能说明
|
|
111
|
+
|
|
112
|
+
本规则提供 ${skills.length} 个标准化工作流节点(Skill),AI 助手根据用户输入的触发词自动执行对应流程。
|
|
113
|
+
|
|
114
|
+
## Skill 列表
|
|
115
|
+
|
|
116
|
+
${skills.map((s) => renderLingmaSkill(s)).join('\n\n')}
|
|
117
|
+
|
|
118
|
+
## 执行规则
|
|
119
|
+
|
|
120
|
+
1. 检测用户意图,匹配触发词
|
|
121
|
+
2. 严格按 Skill 定义的步骤执行
|
|
122
|
+
3. 输出遵循各 Skill 的格式模板
|
|
123
|
+
4. 上一个 Skill 完成后,提示用户进入下一个 Skill
|
|
124
|
+
`;
|
|
125
|
+
}
|
|
126
|
+
function renderLingmaSkill(skill) {
|
|
127
|
+
const triggers = skill.triggers.slice(0, 5).join('、');
|
|
128
|
+
const stepsList = skill.steps
|
|
129
|
+
.map((step) => ` - ${step.title}`)
|
|
130
|
+
.join('\n');
|
|
131
|
+
return `### ${skill.order}. ${skill.name}
|
|
132
|
+
|
|
133
|
+
- **触发词**:${triggers}
|
|
134
|
+
- **目标**:${skill.description}
|
|
135
|
+
- **步骤**:
|
|
136
|
+
${stepsList}
|
|
137
|
+
- **输出**:${skill.outputFormat}`;
|
|
138
|
+
}
|
|
139
|
+
/** 腾讯 CodeBuddy:CODEBUDDY.md(内容精简) */
|
|
140
|
+
function renderCodeBuddy(ctx) {
|
|
141
|
+
const { skills, version, generatedAt } = ctx;
|
|
142
|
+
return `# Ethan v${version}
|
|
143
|
+
|
|
144
|
+
Ethan - Your AI Workflow Assistant | 生成时间:${generatedAt}
|
|
145
|
+
|
|
146
|
+
## Skills
|
|
147
|
+
|
|
148
|
+
${skills
|
|
149
|
+
.map((s) => `### ${s.order}. ${s.name}
|
|
150
|
+
触发词:${s.triggers.slice(0, 3).join(' / ')}
|
|
151
|
+
说明:${s.description}
|
|
152
|
+
步骤:${s.steps.map((step) => step.title).join(' → ')}
|
|
153
|
+
输出:${s.outputFormat}`)
|
|
154
|
+
.join('\n\n')}
|
|
155
|
+
|
|
156
|
+
## 规则
|
|
157
|
+
- 根据用户输入自动匹配触发词,执行对应 Skill
|
|
158
|
+
- 严格按步骤顺序执行,不省略关键步骤
|
|
159
|
+
- 输出格式遵循各 Skill 模板定义
|
|
160
|
+
`;
|
|
161
|
+
}
|
|
162
|
+
/** Windsurf:.windsurf/rules/smart-flow.md(类 Copilot 格式) */
|
|
163
|
+
function renderWindsurf(ctx) {
|
|
164
|
+
const { skills, version, generatedAt } = ctx;
|
|
165
|
+
return `# Ethan - Windsurf Rules (v${version})
|
|
166
|
+
|
|
167
|
+
> Auto-generated from src/skills/ | ${generatedAt}
|
|
168
|
+
> Do not edit manually.
|
|
169
|
+
|
|
170
|
+
You are equipped with the Ethan workflow assistant for Windsurf. When users mention any of the trigger keywords below, execute the corresponding skill workflow precisely.
|
|
171
|
+
|
|
172
|
+
## Available Skills
|
|
173
|
+
|
|
174
|
+
${skills.map((s) => renderCopilotSkill(s)).join('\n\n')}
|
|
175
|
+
|
|
176
|
+
## General Rules
|
|
177
|
+
|
|
178
|
+
- Detect user intent and auto-match the appropriate Skill at the start of each conversation
|
|
179
|
+
- Follow each Skill's defined steps without skipping
|
|
180
|
+
- Output strictly follows the defined format template for each Skill
|
|
181
|
+
- When user explicitly names a Skill, execute directly without confirmation
|
|
182
|
+
`;
|
|
183
|
+
}
|
|
184
|
+
/** Zed:smart-flow.rules(精简纯文本,无复杂 Markdown 结构) */
|
|
185
|
+
function renderZed(ctx) {
|
|
186
|
+
const { skills, version, generatedAt } = ctx;
|
|
187
|
+
const skillLines = skills
|
|
188
|
+
.map((s) => `${s.order}. ${s.name} [${s.triggers.slice(0, 3).join('/')}]\n ${s.description}\n Steps: ${s.steps.map((step) => step.title.replace(/^\d+\.\s*/, '')).join(' > ')}`)
|
|
189
|
+
.join('\n\n');
|
|
190
|
+
return `Ethan v${version} | ${generatedAt}
|
|
191
|
+
|
|
192
|
+
Workflow automation assistant. Match trigger keywords to execute the corresponding skill.
|
|
193
|
+
|
|
194
|
+
${skillLines}
|
|
195
|
+
|
|
196
|
+
Rules: Follow steps in order. Output per skill template. Auto-detect intent from user input.
|
|
197
|
+
`;
|
|
198
|
+
}
|
|
199
|
+
/** JetBrains AI:.github/ai-instructions.md(类 Copilot) */
|
|
200
|
+
function renderJetBrains(ctx) {
|
|
201
|
+
const { skills, version, generatedAt } = ctx;
|
|
202
|
+
return `# Ethan - JetBrains AI Instructions (v${version})
|
|
203
|
+
|
|
204
|
+
> Auto-generated from src/skills/ | ${generatedAt}
|
|
205
|
+
> Do not edit manually.
|
|
206
|
+
|
|
207
|
+
You are equipped with the Ethan workflow assistant for JetBrains AI. When users mention any of the trigger keywords below, execute the corresponding skill workflow precisely.
|
|
208
|
+
|
|
209
|
+
## Available Skills
|
|
210
|
+
|
|
211
|
+
${skills.map((s) => renderCopilotSkill(s)).join('\n\n')}
|
|
212
|
+
|
|
213
|
+
## General Rules
|
|
214
|
+
|
|
215
|
+
- Detect user intent and auto-match the appropriate Skill at the start of each conversation
|
|
216
|
+
- Follow each Skill's defined steps without skipping
|
|
217
|
+
- Output strictly follows the defined format template for each Skill
|
|
218
|
+
- When user explicitly names a Skill, execute directly without confirmation
|
|
219
|
+
`;
|
|
220
|
+
}
|
|
221
|
+
/** Continue:.continuerules(类 Cline 格式) */
|
|
222
|
+
function renderContinue(ctx) {
|
|
223
|
+
const { skills, version, generatedAt } = ctx;
|
|
224
|
+
const skillsContent = skills.map(renderClineSkill).join('\n\n');
|
|
225
|
+
return `# Ethan v${version}
|
|
226
|
+
# Generated: ${generatedAt}
|
|
227
|
+
# Source: https://github.com/your-org/ethan-skill
|
|
228
|
+
|
|
229
|
+
Ethan(Continue)。当用户输入以下触发词时,按对应 Skill 的步骤执行。
|
|
230
|
+
|
|
231
|
+
## 触发词总览
|
|
232
|
+
${skills.map((s) => `- **${s.name}**: ${s.triggers.slice(0, 4).join(' | ')}`).join('\n')}
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
${skillsContent}
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
规则:严格按步骤执行,不跳步,输出遵循各 Skill 的格式模板。
|
|
240
|
+
`;
|
|
241
|
+
}
|
|
242
|
+
/** Claude Code:CLAUDE.md(详细步骤格式,充分利用长上下文) */
|
|
243
|
+
function renderClaudeCode(ctx) {
|
|
244
|
+
const { skills, version, generatedAt } = ctx;
|
|
245
|
+
const skillsContent = skills
|
|
246
|
+
.map((s) => {
|
|
247
|
+
const stepsContent = s.steps
|
|
248
|
+
.map((step) => `#### ${step.title}\n\n${step.content}`)
|
|
249
|
+
.join('\n\n');
|
|
250
|
+
const triggersLine = s.triggers.map((t) => `\`${t}\``).join(', ');
|
|
251
|
+
const notesLine = s.notes && s.notes.length > 0
|
|
252
|
+
? `\n\n**注意事项**:\n${s.notes.map((n) => `- ${n}`).join('\n')}`
|
|
253
|
+
: '';
|
|
254
|
+
return `### ${s.order}. ${s.name} (\`${s.id}\`)
|
|
255
|
+
|
|
256
|
+
**描述**: ${s.description}
|
|
257
|
+
|
|
258
|
+
**触发词**: ${triggersLine}
|
|
259
|
+
|
|
260
|
+
**执行步骤**:
|
|
261
|
+
|
|
262
|
+
${stepsContent}
|
|
263
|
+
|
|
264
|
+
**输出格式**: ${s.outputFormat}${notesLine}`;
|
|
265
|
+
})
|
|
266
|
+
.join('\n\n---\n\n');
|
|
267
|
+
return `# Ethan v${version}
|
|
268
|
+
|
|
269
|
+
> Auto-generated from src/skills/ | ${generatedAt}
|
|
270
|
+
> Do not edit manually. Source: src/skills/
|
|
271
|
+
|
|
272
|
+
## Ethan
|
|
273
|
+
|
|
274
|
+
本文件配置了 ${skills.length} 个标准化工作流节点(Skill)。当用户输入触发词时,严格按对应 Skill 的步骤执行,输出遵循各 Skill 的格式模板。
|
|
275
|
+
|
|
276
|
+
## 执行原则
|
|
277
|
+
|
|
278
|
+
1. 对话开始时检测用户意图,匹配触发词,确定要执行的 Skill
|
|
279
|
+
2. 严格按 Skill 定义的步骤顺序执行,**不跳步、不省略**
|
|
280
|
+
3. 输出格式严格遵循各 Skill 的模板定义
|
|
281
|
+
4. 用户明确指定 Skill 名称时,直接执行,无需确认
|
|
282
|
+
5. 当前 Skill 完成后,根据 nextSkill 提示用户进入下一个环节
|
|
283
|
+
|
|
284
|
+
## Skills 详细定义
|
|
285
|
+
|
|
286
|
+
${skillsContent}
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
*Ethan - Your AI Workflow Assistant | 让每一步都有据可依*
|
|
291
|
+
`;
|
|
292
|
+
}
|
|
293
|
+
//# sourceMappingURL=copilot-md.template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copilot-md.template.js","sourceRoot":"","sources":["../../src/templates/copilot-md.template.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { BuildContext } from '../skills/types';
|
|
2
|
+
/**
|
|
3
|
+
* 生成 Cursor 新版 .mdc 文件内容(含 YAML frontmatter)
|
|
4
|
+
*/
|
|
5
|
+
export declare function renderCursorMdc(ctx: BuildContext): string;
|
|
6
|
+
/**
|
|
7
|
+
* 生成 Cursor 旧版 .cursorrules 文件(无 frontmatter)
|
|
8
|
+
*/
|
|
9
|
+
export declare function renderCursorOld(ctx: BuildContext): string;
|
|
10
|
+
//# sourceMappingURL=cursor-mdc.template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor-mdc.template.d.ts","sourceRoot":"","sources":["../../src/templates/cursor-mdc.template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAErE;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAqCzD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAoBzD"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderCursorMdc = renderCursorMdc;
|
|
4
|
+
exports.renderCursorOld = renderCursorOld;
|
|
5
|
+
/**
|
|
6
|
+
* 生成 Cursor 新版 .mdc 文件内容(含 YAML frontmatter)
|
|
7
|
+
*/
|
|
8
|
+
function renderCursorMdc(ctx) {
|
|
9
|
+
const { skills, version, generatedAt } = ctx;
|
|
10
|
+
const skillsContent = skills.map(renderSkillSection).join('\n\n---\n\n');
|
|
11
|
+
return `---
|
|
12
|
+
description: Ethan - Your AI Workflow Assistant
|
|
13
|
+
globs:
|
|
14
|
+
alwaysApply: true
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# Ethan v${version}
|
|
18
|
+
|
|
19
|
+
> 自动生成 - 请勿手动修改,源文件:src/skills/
|
|
20
|
+
> Generated at: ${generatedAt}
|
|
21
|
+
|
|
22
|
+
本 Skill 提供 ${skills.length} 个标准化工作流节点,通过触发词激活对应的执行流程。
|
|
23
|
+
|
|
24
|
+
## 快速触发指南
|
|
25
|
+
|
|
26
|
+
| Skill | 主要触发词 |
|
|
27
|
+
|-------|-----------|
|
|
28
|
+
${skills.map((s) => `| ${s.name} | \`${s.triggers[0]}\` |`).join('\n')}
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
${skillsContent}
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 通用规则
|
|
37
|
+
|
|
38
|
+
- 每次对话开始时,检测用户意图,自动匹配最合适的 Skill
|
|
39
|
+
- 执行 Skill 前,先确认关键前提条件(如"需求理解"完成后才进入"任务拆解")
|
|
40
|
+
- 输出严格按照各 Skill 定义的格式模板
|
|
41
|
+
- 如果用户明确指定 Skill 名称,直接执行,无需再次确认
|
|
42
|
+
`;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* 生成 Cursor 旧版 .cursorrules 文件(无 frontmatter)
|
|
46
|
+
*/
|
|
47
|
+
function renderCursorOld(ctx) {
|
|
48
|
+
const { skills, version, generatedAt } = ctx;
|
|
49
|
+
const skillsContent = skills.map(renderSkillSection).join('\n\n---\n\n');
|
|
50
|
+
return `# Ethan v${version}
|
|
51
|
+
|
|
52
|
+
> 自动生成 - 请勿手动修改,源文件:src/skills/
|
|
53
|
+
> Generated at: ${generatedAt}
|
|
54
|
+
|
|
55
|
+
## 触发词一览
|
|
56
|
+
${skills.map((s) => `- ${s.name}:${s.triggers.slice(0, 3).join('、')}`).join('\n')}
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
${skillsContent}
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
执行任何 Skill 时,严格按照定义的步骤和输出格式,不省略任何关键步骤。
|
|
65
|
+
`;
|
|
66
|
+
}
|
|
67
|
+
function renderSkillSection(skill) {
|
|
68
|
+
const stepsContent = skill.steps
|
|
69
|
+
.map((step) => `### ${step.title}\n\n${step.content}`)
|
|
70
|
+
.join('\n\n');
|
|
71
|
+
const triggersStr = skill.triggers.map((t) => `\`${t}\``).join('、');
|
|
72
|
+
let content = `## Skill ${skill.order}:${skill.name}
|
|
73
|
+
|
|
74
|
+
**触发词**:${triggersStr}
|
|
75
|
+
|
|
76
|
+
**描述**:${skill.description}
|
|
77
|
+
|
|
78
|
+
${stepsContent}
|
|
79
|
+
|
|
80
|
+
**输出格式**:${skill.outputFormat}`;
|
|
81
|
+
if (skill.notes && skill.notes.length > 0) {
|
|
82
|
+
content += `\n\n**注意事项**:\n${skill.notes.map((n) => `- ${n}`).join('\n')}`;
|
|
83
|
+
}
|
|
84
|
+
return content;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=cursor-mdc.template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor-mdc.template.js","sourceRoot":"","sources":["../../src/templates/cursor-mdc.template.ts"],"names":[],"mappings":";;AAKA,0CAqCC;AAKD,0CAoBC;AAjED;;GAEG;AACH,SAAgB,eAAe,CAAC,GAAiB;IAC/C,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC;IAE7C,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAEzE,OAAO;;;;;;WAME,OAAO;;;kBAGA,WAAW;;aAEhB,MAAM,CAAC,MAAM;;;;;;EAMxB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;EAIpE,aAAa;;;;;;;;;;CAUd,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,GAAiB;IAC/C,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC;IAC7C,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAEzE,OAAO,YAAY,OAAO;;;kBAGV,WAAW;;;EAG3B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;EAI/E,aAAa;;;;;CAKd,CAAC;AACF,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAsB;IAChD,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK;SAC7B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;SACrD,IAAI,CAAC,MAAM,CAAC,CAAC;IAEhB,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEpE,IAAI,OAAO,GAAG,YAAY,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI;;UAE3C,WAAW;;SAEZ,KAAK,CAAC,WAAW;;EAExB,YAAY;;WAEH,KAAK,CAAC,YAAY,EAAE,CAAC;IAE9B,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,OAAO,IAAI,kBAAkB,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC7E,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.test.d.ts","sourceRoot":"","sources":["../../src/templates/templates.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const cursor_mdc_template_1 = require("./cursor-mdc.template");
|
|
5
|
+
const copilot_md_template_1 = require("./copilot-md.template");
|
|
6
|
+
const index_1 = require("../skills/index");
|
|
7
|
+
const BASE_CTX = {
|
|
8
|
+
platform: 'copilot',
|
|
9
|
+
skills: index_1.ALL_SKILLS,
|
|
10
|
+
generatedAt: '2025-01-01T00:00:00.000Z',
|
|
11
|
+
version: '1.0.0',
|
|
12
|
+
};
|
|
13
|
+
function ctx(platform) {
|
|
14
|
+
return { ...BASE_CTX, platform };
|
|
15
|
+
}
|
|
16
|
+
// ─── renderCursorMdc ────────────────────────────────────────────────────────
|
|
17
|
+
(0, vitest_1.describe)('renderCursorMdc', () => {
|
|
18
|
+
(0, vitest_1.it)('outputs valid YAML frontmatter with alwaysApply: true', () => {
|
|
19
|
+
const output = (0, cursor_mdc_template_1.renderCursorMdc)(ctx('cursor-new'));
|
|
20
|
+
(0, vitest_1.expect)(output).toContain('alwaysApply: true');
|
|
21
|
+
});
|
|
22
|
+
(0, vitest_1.it)('contains version number', () => {
|
|
23
|
+
const output = (0, cursor_mdc_template_1.renderCursorMdc)(ctx('cursor-new'));
|
|
24
|
+
(0, vitest_1.expect)(output).toContain('1.0.0');
|
|
25
|
+
});
|
|
26
|
+
(0, vitest_1.it)('contains all skill names', () => {
|
|
27
|
+
const output = (0, cursor_mdc_template_1.renderCursorMdc)(ctx('cursor-new'));
|
|
28
|
+
for (const skill of index_1.ALL_SKILLS) {
|
|
29
|
+
(0, vitest_1.expect)(output).toContain(skill.name);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
(0, vitest_1.it)('includes the generatedAt timestamp', () => {
|
|
33
|
+
const output = (0, cursor_mdc_template_1.renderCursorMdc)(ctx('cursor-new'));
|
|
34
|
+
(0, vitest_1.expect)(output).toContain('2025-01-01T00:00:00.000Z');
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
// ─── renderCursorOld ────────────────────────────────────────────────────────
|
|
38
|
+
(0, vitest_1.describe)('renderCursorOld', () => {
|
|
39
|
+
(0, vitest_1.it)('produces non-empty output', () => {
|
|
40
|
+
const output = (0, cursor_mdc_template_1.renderCursorOld)(ctx('cursor-old'));
|
|
41
|
+
(0, vitest_1.expect)(output.length).toBeGreaterThan(100);
|
|
42
|
+
});
|
|
43
|
+
(0, vitest_1.it)('contains all skill triggers', () => {
|
|
44
|
+
const output = (0, cursor_mdc_template_1.renderCursorOld)(ctx('cursor-old'));
|
|
45
|
+
for (const skill of index_1.ALL_SKILLS) {
|
|
46
|
+
(0, vitest_1.expect)(output).toContain(skill.triggers[0]);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
// ─── renderMarkdown — each platform ────────────────────────────────────────
|
|
51
|
+
const markdownPlatforms = [
|
|
52
|
+
'copilot',
|
|
53
|
+
'cline',
|
|
54
|
+
'lingma',
|
|
55
|
+
'codebuddy',
|
|
56
|
+
'windsurf',
|
|
57
|
+
'zed',
|
|
58
|
+
'jetbrains',
|
|
59
|
+
'continue',
|
|
60
|
+
'claude-code',
|
|
61
|
+
];
|
|
62
|
+
(0, vitest_1.describe)('renderMarkdown', () => {
|
|
63
|
+
for (const platform of markdownPlatforms) {
|
|
64
|
+
(0, vitest_1.it)(`renders non-empty output for platform: ${platform}`, () => {
|
|
65
|
+
const output = (0, copilot_md_template_1.renderMarkdown)(ctx(platform));
|
|
66
|
+
(0, vitest_1.expect)(output.length).toBeGreaterThan(200);
|
|
67
|
+
});
|
|
68
|
+
(0, vitest_1.it)(`contains "Ethan" branding for platform: ${platform}`, () => {
|
|
69
|
+
const output = (0, copilot_md_template_1.renderMarkdown)(ctx(platform));
|
|
70
|
+
(0, vitest_1.expect)(output).toContain('Ethan');
|
|
71
|
+
});
|
|
72
|
+
(0, vitest_1.it)(`contains at least one skill name for platform: ${platform}`, () => {
|
|
73
|
+
const output = (0, copilot_md_template_1.renderMarkdown)(ctx(platform));
|
|
74
|
+
(0, vitest_1.expect)(output).toContain(index_1.ALL_SKILLS[0].name);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
(0, vitest_1.it)('claude-code output contains detailed step content', () => {
|
|
78
|
+
const output = (0, copilot_md_template_1.renderMarkdown)(ctx('claude-code'));
|
|
79
|
+
// Claude Code template renders full step content
|
|
80
|
+
(0, vitest_1.expect)(output).toContain('执行步骤');
|
|
81
|
+
(0, vitest_1.expect)(output).toContain('输出格式');
|
|
82
|
+
});
|
|
83
|
+
(0, vitest_1.it)('zed output is more compact than copilot output', () => {
|
|
84
|
+
const zed = (0, copilot_md_template_1.renderMarkdown)(ctx('zed'));
|
|
85
|
+
const copilot = (0, copilot_md_template_1.renderMarkdown)(ctx('copilot'));
|
|
86
|
+
(0, vitest_1.expect)(zed.length).toBeLessThan(copilot.length);
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
//# sourceMappingURL=templates.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.test.js","sourceRoot":"","sources":["../../src/templates/templates.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/vscode/commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAKjC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAKvE;AAoID,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAEhD"}
|