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,155 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.registerCommands = registerCommands;
37
+ exports.setExtensionPath = setExtensionPath;
38
+ const vscode = __importStar(require("vscode"));
39
+ const fs = __importStar(require("fs"));
40
+ const path = __importStar(require("path"));
41
+ const index_1 = require("../skills/index");
42
+ function registerCommands(context) {
43
+ context.subscriptions.push(vscode.commands.registerCommand('smartflow.install', installRules), vscode.commands.registerCommand('smartflow.listSkills', listSkills));
44
+ }
45
+ /**
46
+ * 将规则文件安装到当前工作区
47
+ */
48
+ async function installRules() {
49
+ const workspaceFolders = vscode.workspace.workspaceFolders;
50
+ if (!workspaceFolders || workspaceFolders.length === 0) {
51
+ vscode.window.showErrorMessage('Please open a workspace first.');
52
+ return;
53
+ }
54
+ const platform = await vscode.window.showQuickPick([
55
+ { label: 'All Platforms', value: 'all' },
56
+ { label: 'Cursor (New .mdc)', value: 'cursor' },
57
+ { label: 'VS Code Copilot', value: 'copilot' },
58
+ { label: 'Cline', value: 'cline' },
59
+ { label: '通义灵码 (Lingma)', value: 'lingma' },
60
+ { label: '腾讯 CodeBuddy', value: 'codebuddy' },
61
+ ], { placeHolder: 'Select target platform' });
62
+ if (!platform)
63
+ return;
64
+ const targetDir = workspaceFolders[0].uri.fsPath;
65
+ const rulesDir = path.join(context_getExtensionPath(), 'rules');
66
+ const installMap = {
67
+ cursor: [
68
+ {
69
+ src: path.join(rulesDir, 'cursor/smart-flow.mdc'),
70
+ dest: path.join(targetDir, '.cursor/rules/smart-flow.mdc'),
71
+ },
72
+ ],
73
+ copilot: [
74
+ {
75
+ src: path.join(rulesDir, 'copilot/copilot-instructions.md'),
76
+ dest: path.join(targetDir, '.github/copilot-instructions.md'),
77
+ },
78
+ ],
79
+ cline: [
80
+ {
81
+ src: path.join(rulesDir, 'cline/.clinerules'),
82
+ dest: path.join(targetDir, '.clinerules'),
83
+ },
84
+ ],
85
+ lingma: [
86
+ {
87
+ src: path.join(rulesDir, 'lingma/smart-flow.md'),
88
+ dest: path.join(targetDir, '.lingma/rules/smart-flow.md'),
89
+ },
90
+ ],
91
+ codebuddy: [
92
+ {
93
+ src: path.join(rulesDir, 'codebuddy/CODEBUDDY.md'),
94
+ dest: path.join(targetDir, 'CODEBUDDY.md'),
95
+ },
96
+ ],
97
+ };
98
+ const targets = platform.value === 'all'
99
+ ? Object.values(installMap).flat()
100
+ : installMap[platform.value] ?? [];
101
+ let installed = 0;
102
+ for (const { src, dest } of targets) {
103
+ if (!fs.existsSync(src))
104
+ continue;
105
+ const destDir = path.dirname(dest);
106
+ if (!fs.existsSync(destDir)) {
107
+ fs.mkdirSync(destDir, { recursive: true });
108
+ }
109
+ fs.copyFileSync(src, dest);
110
+ installed++;
111
+ }
112
+ vscode.window.showInformationMessage(`Smart Flow: Installed ${installed} rule file(s). Restart your AI editor to apply.`);
113
+ }
114
+ /**
115
+ * 展示所有可用 Skill 列表
116
+ */
117
+ async function listSkills() {
118
+ const panel = vscode.window.createWebviewPanel('smartflowSkills', 'Smart Flow Skills', vscode.ViewColumn.One, {});
119
+ const rows = index_1.ALL_SKILLS.map((s) => `
120
+ <tr>
121
+ <td>${s.order}</td>
122
+ <td><strong>${s.name}</strong></td>
123
+ <td>${s.description}</td>
124
+ <td>${s.triggers.slice(0, 3).map((t) => `<code>${t}</code>`).join(' ')}</td>
125
+ </tr>`).join('');
126
+ panel.webview.html = `<!DOCTYPE html>
127
+ <html>
128
+ <head>
129
+ <meta charset="UTF-8">
130
+ <style>
131
+ body { font-family: var(--vscode-font-family); padding: 20px; }
132
+ table { width: 100%; border-collapse: collapse; }
133
+ th, td { padding: 8px 12px; border: 1px solid var(--vscode-panel-border); text-align: left; }
134
+ th { background: var(--vscode-editor-selectionBackground); }
135
+ code { background: var(--vscode-textCodeBlock-background); padding: 2px 4px; border-radius: 3px; }
136
+ </style>
137
+ </head>
138
+ <body>
139
+ <h1>Smart Flow Skills</h1>
140
+ <table>
141
+ <thead><tr><th>#</th><th>Skill</th><th>描述</th><th>触发词</th></tr></thead>
142
+ <tbody>${rows}</tbody>
143
+ </table>
144
+ </body>
145
+ </html>`;
146
+ }
147
+ // 辅助:获取扩展根路径(在命令函数中无法直接访问 context)
148
+ let _extensionPath = '';
149
+ function context_getExtensionPath() {
150
+ return _extensionPath;
151
+ }
152
+ function setExtensionPath(p) {
153
+ _extensionPath = p;
154
+ }
155
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/vscode/commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import * as vscode from 'vscode';
2
+ export declare function activate(context: vscode.ExtensionContext): void;
3
+ export declare function deactivate(): void;
4
+ //# sourceMappingURL=extension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../src/vscode/extension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAKjC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAiB/D;AAgED,wBAAgB,UAAU,IAAI,IAAI,CAAG"}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.activate = activate;
37
+ exports.deactivate = deactivate;
38
+ const vscode = __importStar(require("vscode"));
39
+ const index_1 = require("../skills/index");
40
+ const trigger_router_1 = require("../router/trigger-router");
41
+ const commands_1 = require("./commands");
42
+ function activate(context) {
43
+ // 注册命令
44
+ (0, commands_1.registerCommands)(context);
45
+ // 注册 Chat Participant(@smartflow)
46
+ const participant = vscode.chat.createChatParticipant('smartflow', handleChatRequest);
47
+ participant.iconPath = vscode.Uri.joinPath(context.extensionUri, 'assets', 'icon.png');
48
+ context.subscriptions.push(participant);
49
+ }
50
+ async function handleChatRequest(request, _context, stream, token) {
51
+ const userMessage = request.prompt.trim();
52
+ // 根据命令名(/需求理解 等)或触发词路由
53
+ let skill = null;
54
+ if (request.command) {
55
+ // 用户通过 /命令 显式指定了 Skill
56
+ skill = index_1.ALL_SKILLS.find((s) => s.name === request.command ||
57
+ s.nameEn === request.command ||
58
+ s.triggers.includes('/' + request.command));
59
+ }
60
+ if (!skill && userMessage) {
61
+ const routeResult = (0, trigger_router_1.routeTrigger)(userMessage);
62
+ skill = routeResult?.skill ?? null;
63
+ }
64
+ if (!skill) {
65
+ // 未匹配到 Skill,显示帮助信息
66
+ stream.markdown('## Smart Flow Skills\n\n');
67
+ stream.markdown('可用 Skill(输入对应触发词或使用 `/命令`):\n\n');
68
+ for (const s of index_1.ALL_SKILLS) {
69
+ stream.markdown(`- **${s.name}**:${s.description}\n`);
70
+ stream.markdown(` 触发词:\`${s.triggers.slice(0, 3).join('\`、\`')}\`\n\n`);
71
+ }
72
+ return;
73
+ }
74
+ if (token.isCancellationRequested)
75
+ return;
76
+ // 输出 Skill 执行内容
77
+ stream.markdown(`# 执行 Skill:${skill.name}\n\n`);
78
+ stream.markdown(`> ${skill.detailDescription}\n\n`);
79
+ if (userMessage) {
80
+ stream.markdown(`**输入**:${userMessage}\n\n---\n\n`);
81
+ }
82
+ for (const step of skill.steps) {
83
+ if (token.isCancellationRequested)
84
+ return;
85
+ stream.markdown(`${step.title}\n\n${step.content}\n\n`);
86
+ }
87
+ stream.markdown(`---\n\n**输出格式**:${skill.outputFormat}\n`);
88
+ if (skill.notes && skill.notes.length > 0) {
89
+ stream.markdown(`\n**注意事项**:\n`);
90
+ for (const note of skill.notes) {
91
+ stream.markdown(`- ${note}\n`);
92
+ }
93
+ }
94
+ }
95
+ function deactivate() { }
96
+ //# sourceMappingURL=extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.js","sourceRoot":"","sources":["../../src/vscode/extension.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,71 @@
1
+ {
2
+ "name": "ethan-skill",
3
+ "version": "1.0.0",
4
+ "description": "Ethan - Your AI Workflow Assistant",
5
+ "keywords": [
6
+ "ai-skill",
7
+ "cursor",
8
+ "copilot",
9
+ "cline",
10
+ "lingma",
11
+ "codebuddy",
12
+ "mcp",
13
+ "workflow"
14
+ ],
15
+ "author": "aokiz",
16
+ "license": "MIT",
17
+ "main": "dist/cli/index.js",
18
+ "bin": {
19
+ "ethan": "./dist/cli/index.js"
20
+ },
21
+ "files": [
22
+ "dist/",
23
+ "rules/",
24
+ "README.md",
25
+ "CHANGELOG.md"
26
+ ],
27
+ "scripts": {
28
+ "build": "tsc -p tsconfig.json",
29
+ "build:rules": "npx ts-node scripts/build/build-rules.ts",
30
+ "build:vscode": "npx ts-node scripts/build/build-vscode.ts",
31
+ "build:mcp": "tsc -p tsconfig.json && echo 'MCP Server compiled'",
32
+ "build:all": "npm run build && npm run build:rules",
33
+ "dev": "tsc -p tsconfig.json --watch",
34
+ "clean": "rm -rf dist/",
35
+ "lint": "eslint src/ --ext .ts",
36
+ "lint:fix": "eslint src/ --ext .ts --fix",
37
+ "format": "prettier --write \"src/**/*.ts\"",
38
+ "format:check": "prettier --check \"src/**/*.ts\"",
39
+ "test": "vitest run",
40
+ "test:watch": "vitest",
41
+ "test:coverage": "vitest run --coverage",
42
+ "prepublishOnly": "npm run build:all && npm run lint && npm run test"
43
+ },
44
+ "dependencies": {
45
+ "@modelcontextprotocol/sdk": "^1.0.0",
46
+ "chalk": "^5.3.0",
47
+ "commander": "^12.0.0",
48
+ "fs-extra": "^11.2.0",
49
+ "ora": "^8.0.1"
50
+ },
51
+ "devDependencies": {
52
+ "@changesets/cli": "^2.27.0",
53
+ "@eslint/js": "^9.39.4",
54
+ "@types/fs-extra": "^11.0.4",
55
+ "@types/node": "^20.0.0",
56
+ "eslint": "^9.39.4",
57
+ "eslint-config-prettier": "^10.1.8",
58
+ "prettier": "^3.8.1",
59
+ "ts-node": "^10.9.2",
60
+ "typescript": "^5.4.0",
61
+ "typescript-eslint": "^8.57.1",
62
+ "vitest": "^4.1.0"
63
+ },
64
+ "engines": {
65
+ "node": ">=18.0.0"
66
+ },
67
+ "repository": {
68
+ "type": "git",
69
+ "url": "https://github.com/aokiz-ek/smart-flow-skill.git"
70
+ }
71
+ }