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.
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/server/dashboard.ts"],"names":[],"mappings":"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"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ethan-skill",
3
- "version": "1.1.0",
3
+ "version": "1.2.1",
4
4
  "description": "Ethan - Your AI Workflow Assistant",
5
5
  "keywords": [
6
6
  "ai-skill",
@@ -1,6 +1,6 @@
1
- # Ethan v1.1.0
1
+ # Ethan v1.2.1
2
2
 
3
- > Auto-generated from src/skills/ | 2026-03-21T16:27:34.521Z
3
+ > Auto-generated from src/skills/ | 2026-03-22T04:57:44.673Z
4
4
  > Do not edit manually. Source: src/skills/
5
5
 
6
6
  ## Ethan
@@ -1,5 +1,5 @@
1
- # Ethan v1.1.0
2
- # Generated: 2026-03-21T16:27:34.521Z
1
+ # Ethan v1.2.1
2
+ # Generated: 2026-03-22T04:57:44.673Z
3
3
  # Source: https://github.com/aokiz-ek/smart-flow-skill
4
4
 
5
5
  Ethan。当用户输入以下触发词时,按对应 Skill 的步骤执行。
@@ -1,6 +1,6 @@
1
- # Ethan v1.1.0
1
+ # Ethan v1.2.1
2
2
 
3
- Ethan - Your AI Workflow Assistant | Generated: 2026-03-21T16:27:34.521Z
3
+ Ethan - Your AI Workflow Assistant | Generated: 2026-03-22T04:57:44.673Z
4
4
 
5
5
  ## Skills
6
6
 
@@ -1,5 +1,5 @@
1
- # Ethan v1.1.0
2
- # Generated: 2026-03-21T16:27:34.521Z
1
+ # Ethan v1.2.1
2
+ # Generated: 2026-03-22T04:57:44.673Z
3
3
  # Source: https://github.com/aokiz-ek/smart-flow-skill
4
4
 
5
5
  Ethan(Continue)。当用户输入以下触发词时,按对应 Skill 的步骤执行。
@@ -1,6 +1,6 @@
1
- # Ethan - Copilot Instructions (v1.1.0)
1
+ # Ethan - Copilot Instructions (v1.2.1)
2
2
 
3
- > Auto-generated from src/skills/ | 2026-03-21T16:27:34.521Z
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,7 +1,7 @@
1
- # Ethan v1.1.0
1
+ # Ethan v1.2.1
2
2
 
3
3
  > 自动生成 - 请勿手动修改,源文件:src/skills/
4
- > Generated at: 2026-03-21T16:27:34.521Z
4
+ > Generated at: 2026-03-22T04:57:44.673Z
5
5
 
6
6
  ## 触发词一览
7
7
  - 需求理解:需求理解、理解需求、分析需求
@@ -4,10 +4,10 @@ globs:
4
4
  alwaysApply: true
5
5
  ---
6
6
 
7
- # Ethan v1.1.0
7
+ # Ethan v1.2.1
8
8
 
9
9
  > 自动生成 - 请勿手动修改,源文件:src/skills/
10
- > Generated at: 2026-03-21T16:27:34.521Z
10
+ > Generated at: 2026-03-22T04:57:44.673Z
11
11
 
12
12
  本 Skill 提供 10 个标准化工作流节点,通过触发词激活对应的执行流程。
13
13
 
@@ -1,6 +1,6 @@
1
- # Ethan - JetBrains AI Instructions (v1.1.0)
1
+ # Ethan - JetBrains AI Instructions (v1.2.1)
2
2
 
3
- > Auto-generated from src/skills/ | 2026-03-21T16:27:34.521Z
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 v1.1.0
1
+ # Ethan v1.2.1
2
2
 
3
- > 生成时间:2026-03-21T16:27:34.521Z
3
+ > 生成时间:2026-03-22T04:57:44.673Z
4
4
 
5
5
  ## 功能说明
6
6
 
@@ -1,6 +1,6 @@
1
- # Ethan - Windsurf Rules (v1.1.0)
1
+ # Ethan - Windsurf Rules (v1.2.1)
2
2
 
3
- > Auto-generated from src/skills/ | 2026-03-21T16:27:34.521Z
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.
@@ -1,4 +1,4 @@
1
- Ethan v1.1.0 | 2026-03-21T16:27:34.521Z
1
+ Ethan v1.2.1 | 2026-03-22T04:57:44.673Z
2
2
 
3
3
  Workflow automation assistant. Match trigger keywords to execute the corresponding skill.
4
4