ethan-skill 1.1.0 → 1.2.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/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.js +374 -11
- package/dist/cli/index.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +152 -2
- package/dist/mcp/server.js.map +1 -1
- package/dist/server/dashboard.d.ts +1 -1
- package/dist/server/dashboard.d.ts.map +1 -1
- package/dist/server/dashboard.js +317 -16
- package/dist/server/dashboard.js.map +1 -1
- package/dist/workflow/state.d.ts +48 -0
- package/dist/workflow/state.d.ts.map +1 -0
- package/dist/workflow/state.js +162 -0
- package/dist/workflow/state.js.map +1 -0
- package/package.json +1 -1
- package/rules/claude-code/CLAUDE.md +2 -2
- package/rules/cline/.clinerules +2 -2
- package/rules/codebuddy/CODEBUDDY.md +2 -2
- package/rules/continue/.continuerules +2 -2
- package/rules/copilot/copilot-instructions.md +2 -2
- package/rules/cursor/.cursorrules +2 -2
- package/rules/cursor/smart-flow.mdc +2 -2
- package/rules/jetbrains/smart-flow.md +2 -2
- package/rules/lingma/smart-flow.md +2 -2
- package/rules/windsurf/.windsurf/rules/smart-flow.md +2 -2
- package/rules/zed/smart-flow.rules +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/server/dashboard.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/server/dashboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 工作流会话状态管理
|
|
3
|
+
* 持久化到 .ethan/workflow.json
|
|
4
|
+
*/
|
|
5
|
+
import type { SkillDefinition, PipelineDefinition } from '../skills/types';
|
|
6
|
+
export type StepStatus = 'pending' | 'in-progress' | 'done' | 'skipped';
|
|
7
|
+
export interface WorkflowStep {
|
|
8
|
+
skillId: string;
|
|
9
|
+
status: StepStatus;
|
|
10
|
+
/** 用户/AI 填写的本步摘要(作为下一步的上下文输入) */
|
|
11
|
+
summary?: string;
|
|
12
|
+
startedAt?: string;
|
|
13
|
+
completedAt?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface WorkflowSession {
|
|
16
|
+
id: string;
|
|
17
|
+
pipelineId: string;
|
|
18
|
+
pipelineName: string;
|
|
19
|
+
/** 用户最初的任务上下文描述 */
|
|
20
|
+
initialContext: string;
|
|
21
|
+
steps: WorkflowStep[];
|
|
22
|
+
createdAt: string;
|
|
23
|
+
updatedAt: string;
|
|
24
|
+
/** 是否全部完成 */
|
|
25
|
+
completed: boolean;
|
|
26
|
+
}
|
|
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
|
+
/** 创建新 session */
|
|
34
|
+
export declare function createSession(pipeline: PipelineDefinition, initialContext: string, cwd?: string): WorkflowSession;
|
|
35
|
+
/** 获取当前进行中的步骤(第一个 in-progress 或 pending) */
|
|
36
|
+
export declare function getCurrentStep(session: WorkflowSession): WorkflowStep | null;
|
|
37
|
+
/** 获取当前步骤序号(0-based) */
|
|
38
|
+
export declare function getCurrentStepIndex(session: WorkflowSession): number;
|
|
39
|
+
/** 标记当前步骤完成,推进到下一步,返回新的当前步骤(若无则 null) */
|
|
40
|
+
export declare function markStepDone(session: WorkflowSession, summary: string, cwd?: string): WorkflowStep | null;
|
|
41
|
+
/**
|
|
42
|
+
* 构建某步骤的执行提示词
|
|
43
|
+
* 自动携带:初始任务上下文 + 上一步摘要链
|
|
44
|
+
*/
|
|
45
|
+
export declare function buildStepPrompt(session: WorkflowSession, step: WorkflowStep, skill: SkillDefinition): string;
|
|
46
|
+
/** 计算进度百分比 */
|
|
47
|
+
export declare function calcProgress(session: WorkflowSession): number;
|
|
48
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +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;AASD,mBAAmB;AACnB,wBAAgB,WAAW,CAAC,GAAG,GAAE,MAAsB,GAAG,eAAe,GAAG,IAAI,CAU/E;AAED,iBAAiB;AACjB,wBAAgB,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,GAAE,MAAsB,GAAG,IAAI,CAKvF;AAED,wBAAwB;AACxB,wBAAgB,aAAa,CAAC,GAAG,GAAE,MAAsB,GAAG,IAAI,CAG/D;AAED,kBAAkB;AAClB,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,kBAAkB,EAC5B,cAAc,EAAE,MAAM,EACtB,GAAG,GAAE,MAAsB,GAC1B,eAAe,CAgBjB;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"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 工作流会话状态管理
|
|
4
|
+
* 持久化到 .ethan/workflow.json
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.loadSession = loadSession;
|
|
41
|
+
exports.saveSession = saveSession;
|
|
42
|
+
exports.deleteSession = deleteSession;
|
|
43
|
+
exports.createSession = createSession;
|
|
44
|
+
exports.getCurrentStep = getCurrentStep;
|
|
45
|
+
exports.getCurrentStepIndex = getCurrentStepIndex;
|
|
46
|
+
exports.markStepDone = markStepDone;
|
|
47
|
+
exports.buildStepPrompt = buildStepPrompt;
|
|
48
|
+
exports.calcProgress = calcProgress;
|
|
49
|
+
const fs = __importStar(require("fs"));
|
|
50
|
+
const path = __importStar(require("path"));
|
|
51
|
+
const WORKFLOW_DIR = '.ethan';
|
|
52
|
+
const WORKFLOW_FILE = 'workflow.json';
|
|
53
|
+
function getWorkflowPath(cwd) {
|
|
54
|
+
return path.join(cwd, WORKFLOW_DIR, WORKFLOW_FILE);
|
|
55
|
+
}
|
|
56
|
+
/** 读取当前 session */
|
|
57
|
+
function loadSession(cwd = process.cwd()) {
|
|
58
|
+
const filePath = getWorkflowPath(cwd);
|
|
59
|
+
try {
|
|
60
|
+
if (fs.existsSync(filePath)) {
|
|
61
|
+
return JSON.parse(fs.readFileSync(filePath, 'utf-8'));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// ignore
|
|
66
|
+
}
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
/** 保存 session */
|
|
70
|
+
function saveSession(session, cwd = process.cwd()) {
|
|
71
|
+
const dir = path.join(cwd, WORKFLOW_DIR);
|
|
72
|
+
if (!fs.existsSync(dir))
|
|
73
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
74
|
+
session.updatedAt = new Date().toISOString();
|
|
75
|
+
fs.writeFileSync(getWorkflowPath(cwd), JSON.stringify(session, null, 2), 'utf-8');
|
|
76
|
+
}
|
|
77
|
+
/** 删除 session(reset) */
|
|
78
|
+
function deleteSession(cwd = process.cwd()) {
|
|
79
|
+
const filePath = getWorkflowPath(cwd);
|
|
80
|
+
if (fs.existsSync(filePath))
|
|
81
|
+
fs.unlinkSync(filePath);
|
|
82
|
+
}
|
|
83
|
+
/** 创建新 session */
|
|
84
|
+
function createSession(pipeline, initialContext, cwd = process.cwd()) {
|
|
85
|
+
const session = {
|
|
86
|
+
id: Date.now().toString(36),
|
|
87
|
+
pipelineId: pipeline.id,
|
|
88
|
+
pipelineName: pipeline.name,
|
|
89
|
+
initialContext,
|
|
90
|
+
steps: pipeline.skillIds.map((skillId, i) => ({
|
|
91
|
+
skillId,
|
|
92
|
+
status: i === 0 ? 'in-progress' : 'pending',
|
|
93
|
+
})),
|
|
94
|
+
createdAt: new Date().toISOString(),
|
|
95
|
+
updatedAt: new Date().toISOString(),
|
|
96
|
+
completed: false,
|
|
97
|
+
};
|
|
98
|
+
saveSession(session, cwd);
|
|
99
|
+
return session;
|
|
100
|
+
}
|
|
101
|
+
/** 获取当前进行中的步骤(第一个 in-progress 或 pending) */
|
|
102
|
+
function getCurrentStep(session) {
|
|
103
|
+
return (session.steps.find((s) => s.status === 'in-progress') ??
|
|
104
|
+
session.steps.find((s) => s.status === 'pending') ??
|
|
105
|
+
null);
|
|
106
|
+
}
|
|
107
|
+
/** 获取当前步骤序号(0-based) */
|
|
108
|
+
function getCurrentStepIndex(session) {
|
|
109
|
+
const step = getCurrentStep(session);
|
|
110
|
+
if (!step)
|
|
111
|
+
return -1;
|
|
112
|
+
return session.steps.indexOf(step);
|
|
113
|
+
}
|
|
114
|
+
/** 标记当前步骤完成,推进到下一步,返回新的当前步骤(若无则 null) */
|
|
115
|
+
function markStepDone(session, summary, cwd = process.cwd()) {
|
|
116
|
+
const idx = getCurrentStepIndex(session);
|
|
117
|
+
if (idx === -1)
|
|
118
|
+
return null;
|
|
119
|
+
session.steps[idx].status = 'done';
|
|
120
|
+
session.steps[idx].summary = summary;
|
|
121
|
+
session.steps[idx].completedAt = new Date().toISOString();
|
|
122
|
+
const nextIdx = idx + 1;
|
|
123
|
+
if (nextIdx < session.steps.length) {
|
|
124
|
+
session.steps[nextIdx].status = 'in-progress';
|
|
125
|
+
session.steps[nextIdx].startedAt = new Date().toISOString();
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
session.completed = true;
|
|
129
|
+
}
|
|
130
|
+
saveSession(session, cwd);
|
|
131
|
+
return nextIdx < session.steps.length ? session.steps[nextIdx] : null;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* 构建某步骤的执行提示词
|
|
135
|
+
* 自动携带:初始任务上下文 + 上一步摘要链
|
|
136
|
+
*/
|
|
137
|
+
function buildStepPrompt(session, step, skill) {
|
|
138
|
+
const stepIdx = session.steps.indexOf(step);
|
|
139
|
+
// 汇总已完成步骤的摘要
|
|
140
|
+
const prevSummaries = session.steps
|
|
141
|
+
.slice(0, stepIdx)
|
|
142
|
+
.filter((s) => s.status === 'done' && s.summary)
|
|
143
|
+
.map((s, i) => `**步骤 ${i + 1} 产出(${s.skillId})**:\n${s.summary}`)
|
|
144
|
+
.join('\n\n');
|
|
145
|
+
const lines = [
|
|
146
|
+
`# 工作流:${session.pipelineName}`,
|
|
147
|
+
`## 当前步骤:${skill.name}(${stepIdx + 1}/${session.steps.length})`,
|
|
148
|
+
'',
|
|
149
|
+
`**任务背景**:${session.initialContext}`,
|
|
150
|
+
];
|
|
151
|
+
if (prevSummaries) {
|
|
152
|
+
lines.push('', '**前序步骤产出**:', prevSummaries);
|
|
153
|
+
}
|
|
154
|
+
lines.push('', `**本步目标**:${skill.description}`, '', '**执行步骤**:', ...skill.steps.map((s, i) => `${i + 1}. ${s.title.replace(/^\d+\.\s*/, '')}`), '', `**输出格式**:${skill.outputFormat}`, '', '---', `> 完成本步后,运行 \`ethan workflow done "你的摘要"\` 进入下一步`);
|
|
155
|
+
return lines.join('\n');
|
|
156
|
+
}
|
|
157
|
+
/** 计算进度百分比 */
|
|
158
|
+
function calcProgress(session) {
|
|
159
|
+
const done = session.steps.filter((s) => s.status === 'done').length;
|
|
160
|
+
return Math.round((done / session.steps.length) * 100);
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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,6 +1,6 @@
|
|
|
1
|
-
# Ethan - Copilot Instructions (v1.1
|
|
1
|
+
# Ethan - Copilot Instructions (v1.2.1)
|
|
2
2
|
|
|
3
|
-
> Auto-generated from src/skills/ | 2026-03-
|
|
3
|
+
> Auto-generated from src/skills/ | 2026-03-22T04:57:44.673Z
|
|
4
4
|
> Do not edit manually.
|
|
5
5
|
|
|
6
6
|
You are equipped with the Ethan workflow assistant. When users mention any of the trigger keywords below, execute the corresponding skill workflow precisely.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# Ethan - JetBrains AI Instructions (v1.1
|
|
1
|
+
# Ethan - JetBrains AI Instructions (v1.2.1)
|
|
2
2
|
|
|
3
|
-
> Auto-generated from src/skills/ | 2026-03-
|
|
3
|
+
> Auto-generated from src/skills/ | 2026-03-22T04:57:44.673Z
|
|
4
4
|
> Do not edit manually.
|
|
5
5
|
|
|
6
6
|
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.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# Ethan - Windsurf Rules (v1.1
|
|
1
|
+
# Ethan - Windsurf Rules (v1.2.1)
|
|
2
2
|
|
|
3
|
-
> Auto-generated from src/skills/ | 2026-03-
|
|
3
|
+
> Auto-generated from src/skills/ | 2026-03-22T04:57:44.673Z
|
|
4
4
|
> Do not edit manually.
|
|
5
5
|
|
|
6
6
|
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.
|