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,7 @@
1
+ "use strict";
2
+ /**
3
+ * 整个架构的数据契约(Single Source of Truth)
4
+ * 所有平台的规则文件均从此接口生成
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ //# sourceMappingURL=types.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=templates.test.d.ts.map
@@ -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,4 @@
1
+ import * as vscode from 'vscode';
2
+ export declare function registerCommands(context: vscode.ExtensionContext): void;
3
+ export declare function setExtensionPath(p: string): void;
4
+ //# sourceMappingURL=commands.d.ts.map
@@ -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"}