ethan-skill 1.2.1 → 1.5.1
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/README.md +300 -137
- package/dist/cli/config.d.ts +2 -0
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/index.d.ts +5 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +1786 -56
- package/dist/cli/index.js.map +1 -1
- package/dist/git/utils.d.ts +34 -0
- package/dist/git/utils.d.ts.map +1 -0
- package/dist/git/utils.js +94 -0
- package/dist/git/utils.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +238 -6
- package/dist/mcp/server.js.map +1 -1
- package/dist/templates/copilot-md.template.js +82 -33
- package/dist/templates/copilot-md.template.js.map +1 -1
- package/dist/templates/cursor-mdc.template.d.ts.map +1 -1
- package/dist/templates/cursor-mdc.template.js +18 -8
- package/dist/templates/cursor-mdc.template.js.map +1 -1
- package/dist/workflow/state.d.ts +13 -9
- package/dist/workflow/state.d.ts.map +1 -1
- package/dist/workflow/state.js +42 -16
- package/dist/workflow/state.js.map +1 -1
- package/package.json +1 -1
- package/rules/claude-code/CLAUDE.md +2 -2
- package/rules/cline/.clinerules +9 -2
- package/rules/codebuddy/CODEBUDDY.md +2 -2
- package/rules/continue/.continuerules +9 -2
- package/rules/copilot/copilot-instructions.md +581 -57
- package/rules/cursor/.cursorrules +10 -3
- package/rules/cursor/smart-flow.mdc +12 -9
- package/rules/jetbrains/smart-flow.md +580 -57
- package/rules/lingma/smart-flow.md +2 -2
- package/rules/windsurf/.windsurf/rules/smart-flow.md +586 -57
- package/rules/zed/smart-flow.rules +1 -1
|
@@ -19,7 +19,15 @@ alwaysApply: true
|
|
|
19
19
|
> 自动生成 - 请勿手动修改,源文件:src/skills/
|
|
20
20
|
> Generated at: ${generatedAt}
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
## 重要:Skill 激活规则
|
|
23
|
+
|
|
24
|
+
本文件配置了 **Ethan AI 工作流助手**,严格遵守以下规则:
|
|
25
|
+
|
|
26
|
+
1. **触发检测**:每条用户消息开头,扫描下方触发词列表。匹配到任意触发词后,**立即激活对应 Skill**,无需二次确认。
|
|
27
|
+
2. **完整执行**:按 Skill 定义的步骤**逐步全部执行**,不跳步、不缩减、不省略。
|
|
28
|
+
3. **格式遵循**:输出严格遵循各 Skill 的格式模板。
|
|
29
|
+
4. **直接执行**:用户明确说出 Skill 名称时(如"代码审查"、"需求理解"),立即执行,无需前置确认。
|
|
30
|
+
5. **歧义处理**:多个触发词同时匹配时,激活最具体的 Skill;仍不确定时询问用户。
|
|
23
31
|
|
|
24
32
|
## 快速触发指南
|
|
25
33
|
|
|
@@ -33,12 +41,7 @@ ${skillsContent}
|
|
|
33
41
|
|
|
34
42
|
---
|
|
35
43
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
- 每次对话开始时,检测用户意图,自动匹配最合适的 Skill
|
|
39
|
-
- 执行 Skill 前,先确认关键前提条件(如"需求理解"完成后才进入"任务拆解")
|
|
40
|
-
- 输出严格按照各 Skill 定义的格式模板
|
|
41
|
-
- 如果用户明确指定 Skill 名称,直接执行,无需再次确认
|
|
44
|
+
*Ethan - Your AI Workflow Assistant | 让每一步都有据可依*
|
|
42
45
|
`;
|
|
43
46
|
}
|
|
44
47
|
/**
|
|
@@ -52,6 +55,13 @@ function renderCursorOld(ctx) {
|
|
|
52
55
|
> 自动生成 - 请勿手动修改,源文件:src/skills/
|
|
53
56
|
> Generated at: ${generatedAt}
|
|
54
57
|
|
|
58
|
+
## 重要:Skill 激活规则
|
|
59
|
+
|
|
60
|
+
1. 每条用户消息开头,扫描触发词列表。匹配到任意触发词后,**立即激活对应 Skill**,无需确认。
|
|
61
|
+
2. **按步骤顺序全部执行**,不跳步、不缩减、不省略。
|
|
62
|
+
3. 输出严格遵循各 Skill 的格式模板。
|
|
63
|
+
4. 用户明确说出 Skill 名称时,直接执行,无需前置确认。
|
|
64
|
+
|
|
55
65
|
## 触发词一览
|
|
56
66
|
${skills.map((s) => `- ${s.name}:${s.triggers.slice(0, 3).join('、')}`).join('\n')}
|
|
57
67
|
|
|
@@ -61,7 +71,7 @@ ${skillsContent}
|
|
|
61
71
|
|
|
62
72
|
---
|
|
63
73
|
|
|
64
|
-
|
|
74
|
+
*Ethan - Your AI Workflow Assistant | 让每一步都有据可依*
|
|
65
75
|
`;
|
|
66
76
|
}
|
|
67
77
|
function renderSkillSection(skill) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor-mdc.template.js","sourceRoot":"","sources":["../../src/templates/cursor-mdc.template.ts"],"names":[],"mappings":";;AAKA,
|
|
1
|
+
{"version":3,"file":"cursor-mdc.template.js","sourceRoot":"","sources":["../../src/templates/cursor-mdc.template.ts"],"names":[],"mappings":";;AAKA,0CAwCC;AAKD,0CA2BC;AA3ED;;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;;;;;;;;;;;;;;;;EAgB3B,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;;;;;CAKd,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;;;;;;;;;;EAU3B,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"}
|
package/dist/workflow/state.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 工作流会话状态管理
|
|
3
|
-
* 持久化到 .ethan/workflow.json
|
|
3
|
+
* 持久化到 .ethan/workflow.json(默认)或 .ethan/sessions/<name>.json(具名会话)
|
|
4
4
|
*/
|
|
5
5
|
import type { SkillDefinition, PipelineDefinition } from '../skills/types';
|
|
6
6
|
export type StepStatus = 'pending' | 'in-progress' | 'done' | 'skipped';
|
|
@@ -14,6 +14,8 @@ export interface WorkflowStep {
|
|
|
14
14
|
}
|
|
15
15
|
export interface WorkflowSession {
|
|
16
16
|
id: string;
|
|
17
|
+
/** 具名会话名称(可选,T12 Named Sessions) */
|
|
18
|
+
name?: string;
|
|
17
19
|
pipelineId: string;
|
|
18
20
|
pipelineName: string;
|
|
19
21
|
/** 用户最初的任务上下文描述 */
|
|
@@ -24,14 +26,16 @@ export interface WorkflowSession {
|
|
|
24
26
|
/** 是否全部完成 */
|
|
25
27
|
completed: boolean;
|
|
26
28
|
}
|
|
27
|
-
/** 读取当前 session */
|
|
28
|
-
export declare function loadSession(cwd?: string): WorkflowSession | null;
|
|
29
|
-
/** 保存 session */
|
|
30
|
-
export declare function saveSession(session: WorkflowSession, cwd?: string): void;
|
|
31
|
-
/** 删除 session(reset
|
|
32
|
-
export declare function deleteSession(cwd?: string): void;
|
|
33
|
-
/**
|
|
34
|
-
export declare function
|
|
29
|
+
/** 读取当前 session(支持具名会话) */
|
|
30
|
+
export declare function loadSession(cwd?: string, sessionName?: string): WorkflowSession | null;
|
|
31
|
+
/** 保存 session(支持具名会话) */
|
|
32
|
+
export declare function saveSession(session: WorkflowSession, cwd?: string, sessionName?: string): void;
|
|
33
|
+
/** 删除 session(reset,支持具名会话) */
|
|
34
|
+
export declare function deleteSession(cwd?: string, sessionName?: string): void;
|
|
35
|
+
/** 列出所有具名会话 */
|
|
36
|
+
export declare function listNamedSessions(cwd?: string): WorkflowSession[];
|
|
37
|
+
/** 创建新 session(支持具名会话) */
|
|
38
|
+
export declare function createSession(pipeline: PipelineDefinition, initialContext: string, cwd?: string, sessionName?: string): WorkflowSession;
|
|
35
39
|
/** 获取当前进行中的步骤(第一个 in-progress 或 pending) */
|
|
36
40
|
export declare function getCurrentStep(session: WorkflowSession): WorkflowStep | null;
|
|
37
41
|
/** 获取当前步骤序号(0-based) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/workflow/state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE3E,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,MAAM,GAAG,SAAS,CAAC;AAExE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,UAAU,CAAC;IACnB,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa;IACb,SAAS,EAAE,OAAO,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/workflow/state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE3E,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,MAAM,GAAG,SAAS,CAAC;AAExE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,UAAU,CAAC;IACnB,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa;IACb,SAAS,EAAE,OAAO,CAAC;CACpB;AAaD,2BAA2B;AAC3B,wBAAgB,WAAW,CAAC,GAAG,GAAE,MAAsB,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAUrG;AAED,yBAAyB;AACzB,wBAAgB,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,GAAE,MAAsB,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAO7G;AAED,+BAA+B;AAC/B,wBAAgB,aAAa,CAAC,GAAG,GAAE,MAAsB,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAGrF;AAED,eAAe;AACf,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAsB,GAAG,eAAe,EAAE,CAchF;AAED,0BAA0B;AAC1B,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,kBAAkB,EAC5B,cAAc,EAAE,MAAM,EACtB,GAAG,GAAE,MAAsB,EAC3B,WAAW,CAAC,EAAE,MAAM,GACnB,eAAe,CAiBjB;AAED,4CAA4C;AAC5C,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,YAAY,GAAG,IAAI,CAM5E;AAED,wBAAwB;AACxB,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAIpE;AAED,yCAAyC;AACzC,wBAAgB,YAAY,CAC1B,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,MAAM,EACf,GAAG,GAAE,MAAsB,GAC1B,YAAY,GAAG,IAAI,CAkBrB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,eAAe,EACxB,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,eAAe,GACrB,MAAM,CAmCR;AAED,cAAc;AACd,wBAAgB,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAG7D"}
|
package/dist/workflow/state.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
3
|
* 工作流会话状态管理
|
|
4
|
-
* 持久化到 .ethan/workflow.json
|
|
4
|
+
* 持久化到 .ethan/workflow.json(默认)或 .ethan/sessions/<name>.json(具名会话)
|
|
5
5
|
*/
|
|
6
6
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
7
|
if (k2 === undefined) k2 = k;
|
|
@@ -40,6 +40,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
40
40
|
exports.loadSession = loadSession;
|
|
41
41
|
exports.saveSession = saveSession;
|
|
42
42
|
exports.deleteSession = deleteSession;
|
|
43
|
+
exports.listNamedSessions = listNamedSessions;
|
|
43
44
|
exports.createSession = createSession;
|
|
44
45
|
exports.getCurrentStep = getCurrentStep;
|
|
45
46
|
exports.getCurrentStepIndex = getCurrentStepIndex;
|
|
@@ -50,12 +51,16 @@ const fs = __importStar(require("fs"));
|
|
|
50
51
|
const path = __importStar(require("path"));
|
|
51
52
|
const WORKFLOW_DIR = '.ethan';
|
|
52
53
|
const WORKFLOW_FILE = 'workflow.json';
|
|
53
|
-
|
|
54
|
+
const SESSIONS_DIR = 'sessions';
|
|
55
|
+
function getWorkflowPath(cwd, sessionName) {
|
|
56
|
+
if (sessionName) {
|
|
57
|
+
return path.join(cwd, WORKFLOW_DIR, SESSIONS_DIR, `${sessionName}.json`);
|
|
58
|
+
}
|
|
54
59
|
return path.join(cwd, WORKFLOW_DIR, WORKFLOW_FILE);
|
|
55
60
|
}
|
|
56
|
-
/** 读取当前 session */
|
|
57
|
-
function loadSession(cwd = process.cwd()) {
|
|
58
|
-
const filePath = getWorkflowPath(cwd);
|
|
61
|
+
/** 读取当前 session(支持具名会话) */
|
|
62
|
+
function loadSession(cwd = process.cwd(), sessionName) {
|
|
63
|
+
const filePath = getWorkflowPath(cwd, sessionName);
|
|
59
64
|
try {
|
|
60
65
|
if (fs.existsSync(filePath)) {
|
|
61
66
|
return JSON.parse(fs.readFileSync(filePath, 'utf-8'));
|
|
@@ -66,24 +71,45 @@ function loadSession(cwd = process.cwd()) {
|
|
|
66
71
|
}
|
|
67
72
|
return null;
|
|
68
73
|
}
|
|
69
|
-
/** 保存 session */
|
|
70
|
-
function saveSession(session, cwd = process.cwd()) {
|
|
71
|
-
const
|
|
74
|
+
/** 保存 session(支持具名会话) */
|
|
75
|
+
function saveSession(session, cwd = process.cwd(), sessionName) {
|
|
76
|
+
const name = sessionName || session.name;
|
|
77
|
+
const filePath = getWorkflowPath(cwd, name);
|
|
78
|
+
const dir = path.dirname(filePath);
|
|
72
79
|
if (!fs.existsSync(dir))
|
|
73
80
|
fs.mkdirSync(dir, { recursive: true });
|
|
74
81
|
session.updatedAt = new Date().toISOString();
|
|
75
|
-
fs.writeFileSync(
|
|
82
|
+
fs.writeFileSync(filePath, JSON.stringify(session, null, 2), 'utf-8');
|
|
76
83
|
}
|
|
77
|
-
/** 删除 session(reset
|
|
78
|
-
function deleteSession(cwd = process.cwd()) {
|
|
79
|
-
const filePath = getWorkflowPath(cwd);
|
|
84
|
+
/** 删除 session(reset,支持具名会话) */
|
|
85
|
+
function deleteSession(cwd = process.cwd(), sessionName) {
|
|
86
|
+
const filePath = getWorkflowPath(cwd, sessionName);
|
|
80
87
|
if (fs.existsSync(filePath))
|
|
81
88
|
fs.unlinkSync(filePath);
|
|
82
89
|
}
|
|
83
|
-
/**
|
|
84
|
-
function
|
|
90
|
+
/** 列出所有具名会话 */
|
|
91
|
+
function listNamedSessions(cwd = process.cwd()) {
|
|
92
|
+
const sessionsDir = path.join(cwd, WORKFLOW_DIR, SESSIONS_DIR);
|
|
93
|
+
if (!fs.existsSync(sessionsDir))
|
|
94
|
+
return [];
|
|
95
|
+
return fs
|
|
96
|
+
.readdirSync(sessionsDir)
|
|
97
|
+
.filter((f) => f.endsWith('.json'))
|
|
98
|
+
.map((f) => {
|
|
99
|
+
try {
|
|
100
|
+
return JSON.parse(fs.readFileSync(path.join(sessionsDir, f), 'utf-8'));
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
})
|
|
106
|
+
.filter((s) => s !== null);
|
|
107
|
+
}
|
|
108
|
+
/** 创建新 session(支持具名会话) */
|
|
109
|
+
function createSession(pipeline, initialContext, cwd = process.cwd(), sessionName) {
|
|
85
110
|
const session = {
|
|
86
111
|
id: Date.now().toString(36),
|
|
112
|
+
name: sessionName,
|
|
87
113
|
pipelineId: pipeline.id,
|
|
88
114
|
pipelineName: pipeline.name,
|
|
89
115
|
initialContext,
|
|
@@ -95,7 +121,7 @@ function createSession(pipeline, initialContext, cwd = process.cwd()) {
|
|
|
95
121
|
updatedAt: new Date().toISOString(),
|
|
96
122
|
completed: false,
|
|
97
123
|
};
|
|
98
|
-
saveSession(session, cwd);
|
|
124
|
+
saveSession(session, cwd, sessionName);
|
|
99
125
|
return session;
|
|
100
126
|
}
|
|
101
127
|
/** 获取当前进行中的步骤(第一个 in-progress 或 pending) */
|
|
@@ -127,7 +153,7 @@ function markStepDone(session, summary, cwd = process.cwd()) {
|
|
|
127
153
|
else {
|
|
128
154
|
session.completed = true;
|
|
129
155
|
}
|
|
130
|
-
saveSession(session, cwd);
|
|
156
|
+
saveSession(session, cwd, session.name);
|
|
131
157
|
return nextIdx < session.steps.length ? session.steps[nextIdx] : null;
|
|
132
158
|
}
|
|
133
159
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/workflow/state.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/workflow/state.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/rules/cline/.clinerules
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
|
-
# Ethan v1.
|
|
2
|
-
# Generated: 2026-03-
|
|
1
|
+
# Ethan v1.5.1
|
|
2
|
+
# Generated: 2026-03-23T01:57:22.221Z
|
|
3
3
|
# Source: https://github.com/aokiz-ek/smart-flow-skill
|
|
4
4
|
|
|
5
5
|
Ethan。当用户输入以下触发词时,按对应 Skill 的步骤执行。
|
|
6
6
|
|
|
7
|
+
## 重要:Skill 激活规则
|
|
8
|
+
|
|
9
|
+
1. 每条用户消息开头,扫描触发词列表。匹配到任意触发词后,**立即激活对应 Skill**,无需确认。
|
|
10
|
+
2. **按步骤顺序全部执行**,不跳步、不缩减、不省略。
|
|
11
|
+
3. 输出严格遵循各 Skill 的格式模板。
|
|
12
|
+
4. 用户明确说出 Skill 名称时,直接执行,无需前置确认。
|
|
13
|
+
|
|
7
14
|
## 触发词总览
|
|
8
15
|
- **需求理解**: 需求理解 | 理解需求 | 分析需求 | 需求分析
|
|
9
16
|
- **任务拆解**: 任务拆解 | 拆解任务 | 拆分任务 | 制定计划
|
|
@@ -1,9 +1,16 @@
|
|
|
1
|
-
# Ethan v1.
|
|
2
|
-
# Generated: 2026-03-
|
|
1
|
+
# Ethan v1.5.1
|
|
2
|
+
# Generated: 2026-03-23T01:57:22.221Z
|
|
3
3
|
# Source: https://github.com/aokiz-ek/smart-flow-skill
|
|
4
4
|
|
|
5
5
|
Ethan(Continue)。当用户输入以下触发词时,按对应 Skill 的步骤执行。
|
|
6
6
|
|
|
7
|
+
## 重要:Skill 激活规则
|
|
8
|
+
|
|
9
|
+
1. 每条用户消息开头,扫描触发词列表。匹配到任意触发词后,**立即激活对应 Skill**,无需确认。
|
|
10
|
+
2. **按步骤顺序全部执行**,不跳步、不缩减、不省略。
|
|
11
|
+
3. 输出严格遵循各 Skill 的格式模板。
|
|
12
|
+
4. 用户明确说出 Skill 名称时,直接执行,无需前置确认。
|
|
13
|
+
|
|
7
14
|
## 触发词总览
|
|
8
15
|
- **需求理解**: 需求理解 | 理解需求 | 分析需求 | 需求分析
|
|
9
16
|
- **任务拆解**: 任务拆解 | 拆解任务 | 拆分任务 | 制定计划
|