@winspan/claude-forge 1.16.15 → 1.17.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 (67) hide show
  1. package/README.md +11 -11
  2. package/dist/daemon/index.d.ts.map +1 -1
  3. package/dist/daemon/index.js +8 -0
  4. package/dist/daemon/index.js.map +1 -1
  5. package/dist/pipeline/aggregator.d.ts +118 -0
  6. package/dist/pipeline/aggregator.d.ts.map +1 -0
  7. package/dist/pipeline/aggregator.js +252 -0
  8. package/dist/pipeline/aggregator.js.map +1 -0
  9. package/dist/pipeline/event-sourced-engine.d.ts +77 -0
  10. package/dist/pipeline/event-sourced-engine.d.ts.map +1 -0
  11. package/dist/pipeline/event-sourced-engine.js +266 -0
  12. package/dist/pipeline/event-sourced-engine.js.map +1 -0
  13. package/dist/pipeline/event-store.d.ts +58 -0
  14. package/dist/pipeline/event-store.d.ts.map +1 -0
  15. package/dist/pipeline/event-store.js +184 -0
  16. package/dist/pipeline/event-store.js.map +1 -0
  17. package/dist/pipeline/events.d.ts +166 -0
  18. package/dist/pipeline/events.d.ts.map +1 -0
  19. package/dist/pipeline/events.js +29 -0
  20. package/dist/pipeline/events.js.map +1 -0
  21. package/dist/pipeline/optimized-aggregator.d.ts +36 -0
  22. package/dist/pipeline/optimized-aggregator.d.ts.map +1 -0
  23. package/dist/pipeline/optimized-aggregator.js +93 -0
  24. package/dist/pipeline/optimized-aggregator.js.map +1 -0
  25. package/dist/pipeline/progress-tracker.d.ts +29 -0
  26. package/dist/pipeline/progress-tracker.d.ts.map +1 -0
  27. package/dist/pipeline/progress-tracker.js +99 -0
  28. package/dist/pipeline/progress-tracker.js.map +1 -0
  29. package/dist/pipeline/snapshot-store.d.ts +45 -0
  30. package/dist/pipeline/snapshot-store.d.ts.map +1 -0
  31. package/dist/pipeline/snapshot-store.js +89 -0
  32. package/dist/pipeline/snapshot-store.js.map +1 -0
  33. package/dist/pipeline/state-machine-types.d.ts +156 -0
  34. package/dist/pipeline/state-machine-types.d.ts.map +1 -0
  35. package/dist/pipeline/state-machine-types.js +7 -0
  36. package/dist/pipeline/state-machine-types.js.map +1 -0
  37. package/dist/pipeline/state-machine.d.ts +44 -0
  38. package/dist/pipeline/state-machine.d.ts.map +1 -0
  39. package/dist/pipeline/state-machine.js +203 -0
  40. package/dist/pipeline/state-machine.js.map +1 -0
  41. package/dist/pipeline/state-query.d.ts +71 -0
  42. package/dist/pipeline/state-query.d.ts.map +1 -0
  43. package/dist/pipeline/state-query.js +192 -0
  44. package/dist/pipeline/state-query.js.map +1 -0
  45. package/dist/pipeline/store.d.ts +12 -17
  46. package/dist/pipeline/store.d.ts.map +1 -1
  47. package/dist/pipeline/store.js +214 -110
  48. package/dist/pipeline/store.js.map +1 -1
  49. package/dist/pipeline/store.legacy.d.ts +48 -0
  50. package/dist/pipeline/store.legacy.d.ts.map +1 -0
  51. package/dist/pipeline/store.legacy.js +163 -0
  52. package/dist/pipeline/store.legacy.js.map +1 -0
  53. package/dist/pipeline/transitions.d.ts +28 -0
  54. package/dist/pipeline/transitions.d.ts.map +1 -0
  55. package/dist/pipeline/transitions.js +336 -0
  56. package/dist/pipeline/transitions.js.map +1 -0
  57. package/dist/scripts/auto-migrate.d.ts +9 -0
  58. package/dist/scripts/auto-migrate.d.ts.map +1 -0
  59. package/dist/scripts/auto-migrate.js +161 -0
  60. package/dist/scripts/auto-migrate.js.map +1 -0
  61. package/dist/scripts/migrate-to-event-sourcing.d.ts +16 -0
  62. package/dist/scripts/migrate-to-event-sourcing.d.ts.map +1 -0
  63. package/dist/scripts/migrate-to-event-sourcing.js +179 -0
  64. package/dist/scripts/migrate-to-event-sourcing.js.map +1 -0
  65. package/dist/web-static/assets/{index-Tbfb5BBI.js → index-BmOm81pb.js} +1 -1
  66. package/dist/web-static/index.html +1 -1
  67. package/package.json +3 -1
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/pipeline/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/pipeline/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type { Pipeline, PipelineTask, PipelinePhase } from './types.js';
2
+ import type { SQLiteStorage } from '../storage/sqlite.js';
3
+ export declare class PipelineStore {
4
+ private db;
5
+ constructor(storage: SQLiteStorage);
6
+ createPipeline(requirement: string, projectPath: string, sessionId: string, techStack?: string, complexity?: 'simple' | 'moderate' | 'complex', taskType?: 'bugfix' | 'feature' | 'refactor' | 'performance' | 'documentation' | 'other', plannedPhases?: PipelinePhase[], phaseArtifacts?: Record<string, string[]>, reasoning?: string): Pipeline;
7
+ addTasks(pipelineId: string, tasks: Array<Omit<PipelineTask, 'id'>>): PipelineTask[];
8
+ getActivePipeline(projectPath: string): Pipeline | null;
9
+ getTasks(pipelineId: string): PipelineTask[];
10
+ updatePhase(pipelineId: string, phase: PipelinePhase): void;
11
+ /** 按 ID 关闭单个 Pipeline */
12
+ closeById(pipelineId: string): void;
13
+ /**
14
+ * 关闭超过 ttlMs 未更新的所有活跃 Pipeline,返回被关闭的数量。
15
+ * 默认 2 小时(7200000ms)。
16
+ */
17
+ closeExpired(ttlMs?: number): number;
18
+ /** 列出所有非 done 的 Pipeline(跨项目,供 CLI 展示) */
19
+ listActive(): Array<{
20
+ id: string;
21
+ requirement: string;
22
+ projectPath: string;
23
+ phase: PipelinePhase;
24
+ updatedAt: string;
25
+ }>;
26
+ /**
27
+ * 将指定 Pipeline 中所有 in_progress 任务重置为 pending。
28
+ * 用于 ESC 中断后恢复:in_progress 表示"开始但未完成",中断后需重新检测。
29
+ */
30
+ resetInProgressTasks(pipelineId: string): number;
31
+ getPhaseProgress(pipelineId: string, phase: PipelinePhase): {
32
+ total: number;
33
+ completed: number;
34
+ };
35
+ /**
36
+ * 更新任务状态
37
+ */
38
+ updateTaskStatus(taskId: string, status: 'pending' | 'in_progress' | 'completed' | 'failed', output?: string): boolean;
39
+ /**
40
+ * 获取单个任务
41
+ */
42
+ getTask(taskId: string): PipelineTask | null;
43
+ /**
44
+ * 根据任务 ID 获取 Pipeline ID
45
+ */
46
+ getPipelineIdByTask(taskId: string): string | null;
47
+ }
48
+ //# sourceMappingURL=store.legacy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.legacy.d.ts","sourceRoot":"","sources":["../../src/pipeline/store.legacy.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAI1D,qBAAa,aAAa;IACxB,OAAO,CAAC,EAAE,CAAoB;gBAElB,OAAO,EAAE,aAAa;IAKlC,cAAc,CACZ,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,EAC9C,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,aAAa,GAAG,eAAe,GAAG,OAAO,EACxF,aAAa,CAAC,EAAE,aAAa,EAAE,EAC/B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACzC,SAAS,CAAC,EAAE,MAAM,GACjB,QAAQ;IAgCX,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,GAAG,YAAY,EAAE;IAwBpF,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IA2BvD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,EAAE;IAiB5C,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI;IAM3D,yBAAyB;IACzB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAMnC;;;OAGG;IACH,YAAY,CAAC,KAAK,SAAqB,GAAG,MAAM;IAQhD,0CAA0C;IAC1C,UAAU,IAAI,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,aAAa,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IActH;;;OAGG;IACH,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAOhD,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAWhG;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO;IActH;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAgB5C;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAInD"}
@@ -0,0 +1,163 @@
1
+ import { randomUUID } from 'crypto';
2
+ import { logger } from '../utils/logger.js';
3
+ import { PIPELINE } from '../constants.js';
4
+ export class PipelineStore {
5
+ db;
6
+ constructor(storage) {
7
+ this.db = storage.getDatabase();
8
+ // Schema 已在 SQLiteStorage 初始化时通过 schema.sql 创建,无需重复初始化
9
+ }
10
+ createPipeline(requirement, projectPath, sessionId, techStack, complexity, taskType, plannedPhases, phaseArtifacts, reasoning) {
11
+ const id = randomUUID();
12
+ const now = new Date().toISOString();
13
+ this.db.prepare(`
14
+ INSERT INTO pipelines (
15
+ id, requirement, project_path, session_id, phase, tech_stack,
16
+ complexity, task_type, planned_phases, phase_artifacts, reasoning,
17
+ created_at, updated_at
18
+ )
19
+ VALUES (?, ?, ?, ?, 'analyze', ?, ?, ?, ?, ?, ?, ?, ?)
20
+ `).run(id, requirement, projectPath, sessionId, techStack || null, complexity || 'moderate', taskType || 'other', plannedPhases ? JSON.stringify(plannedPhases) : null, phaseArtifacts ? JSON.stringify(phaseArtifacts) : null, reasoning || null, now, now);
21
+ logger.info(`Pipeline 已创建:${id} — ${requirement} (${complexity || 'moderate'} ${taskType || 'other'})`);
22
+ return {
23
+ id, requirement, projectPath, sessionId,
24
+ phase: 'analyze', tasks: [], techStack,
25
+ complexity, taskType, plannedPhases, phaseArtifacts, reasoning,
26
+ createdAt: now, updatedAt: now,
27
+ };
28
+ }
29
+ addTasks(pipelineId, tasks) {
30
+ const insertStmt = this.db.prepare(`
31
+ INSERT INTO pipeline_tasks (id, pipeline_id, title, phase, status, description, dependencies, output, source)
32
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
33
+ `);
34
+ const result = [];
35
+ const insertAll = this.db.transaction((items) => {
36
+ for (const task of items) {
37
+ const id = randomUUID();
38
+ insertStmt.run(id, pipelineId, task.title, task.phase, task.status, task.description, JSON.stringify(task.dependencies), task.output || null, task.source || null);
39
+ result.push({ ...task, id });
40
+ }
41
+ });
42
+ insertAll(tasks);
43
+ return result;
44
+ }
45
+ getActivePipeline(projectPath) {
46
+ const row = this.db.prepare("SELECT * FROM pipelines WHERE project_path = ? AND phase != 'done' ORDER BY updated_at DESC LIMIT 1").get(projectPath);
47
+ if (!row)
48
+ return null;
49
+ const tasks = this.getTasks(row.id);
50
+ return {
51
+ id: row.id,
52
+ requirement: row.requirement,
53
+ projectPath: row.project_path,
54
+ sessionId: row.session_id,
55
+ phase: row.phase,
56
+ tasks,
57
+ techStack: row.tech_stack,
58
+ complexity: row.complexity || 'moderate',
59
+ taskType: row.task_type || 'other',
60
+ plannedPhases: row.planned_phases ? JSON.parse(row.planned_phases) : undefined,
61
+ phaseArtifacts: row.phase_artifacts ? JSON.parse(row.phase_artifacts) : undefined,
62
+ reasoning: row.reasoning,
63
+ createdAt: row.created_at,
64
+ updatedAt: row.updated_at,
65
+ };
66
+ }
67
+ getTasks(pipelineId) {
68
+ const rows = this.db.prepare('SELECT * FROM pipeline_tasks WHERE pipeline_id = ? ORDER BY phase, rowid').all(pipelineId);
69
+ return rows.map(row => ({
70
+ id: row.id,
71
+ title: row.title,
72
+ phase: row.phase,
73
+ status: row.status,
74
+ description: row.description,
75
+ dependencies: JSON.parse(row.dependencies || '[]'),
76
+ output: row.output,
77
+ source: row.source,
78
+ }));
79
+ }
80
+ updatePhase(pipelineId, phase) {
81
+ this.db.prepare('UPDATE pipelines SET phase = ?, updated_at = ? WHERE id = ?').run(phase, new Date().toISOString(), pipelineId);
82
+ }
83
+ /** 按 ID 关闭单个 Pipeline */
84
+ closeById(pipelineId) {
85
+ this.db.prepare("UPDATE pipelines SET phase = 'done', updated_at = ? WHERE id = ?").run(new Date().toISOString(), pipelineId);
86
+ }
87
+ /**
88
+ * 关闭超过 ttlMs 未更新的所有活跃 Pipeline,返回被关闭的数量。
89
+ * 默认 2 小时(7200000ms)。
90
+ */
91
+ closeExpired(ttlMs = PIPELINE.EXPIRE_MS) {
92
+ const cutoff = new Date(Date.now() - ttlMs).toISOString();
93
+ const result = this.db.prepare("UPDATE pipelines SET phase = 'done', updated_at = ? WHERE phase != 'done' AND updated_at < ?").run(new Date().toISOString(), cutoff);
94
+ return result.changes;
95
+ }
96
+ /** 列出所有非 done 的 Pipeline(跨项目,供 CLI 展示) */
97
+ listActive() {
98
+ const rows = this.db.prepare("SELECT id, requirement, project_path, phase, updated_at FROM pipelines WHERE phase != 'done' ORDER BY updated_at DESC").all();
99
+ return rows.map(r => ({
100
+ id: r.id,
101
+ requirement: r.requirement,
102
+ projectPath: r.project_path,
103
+ phase: r.phase,
104
+ updatedAt: r.updated_at,
105
+ }));
106
+ }
107
+ /**
108
+ * 将指定 Pipeline 中所有 in_progress 任务重置为 pending。
109
+ * 用于 ESC 中断后恢复:in_progress 表示"开始但未完成",中断后需重新检测。
110
+ */
111
+ resetInProgressTasks(pipelineId) {
112
+ const result = this.db.prepare("UPDATE pipeline_tasks SET status = 'pending' WHERE pipeline_id = ? AND status = 'in_progress'").run(pipelineId);
113
+ return result.changes;
114
+ }
115
+ getPhaseProgress(pipelineId, phase) {
116
+ const row = this.db.prepare(`
117
+ SELECT
118
+ COUNT(*) as total,
119
+ SUM(CASE WHEN status = 'completed' THEN 1 ELSE 0 END) as completed
120
+ FROM pipeline_tasks WHERE pipeline_id = ? AND phase = ?
121
+ `).get(pipelineId, phase);
122
+ return { total: row.total || 0, completed: row.completed || 0 };
123
+ }
124
+ /**
125
+ * 更新任务状态
126
+ */
127
+ updateTaskStatus(taskId, status, output) {
128
+ if (output) {
129
+ const result = this.db.prepare("UPDATE pipeline_tasks SET status = ?, output = ?, updated_at = datetime('now') WHERE id = ?").run(status, output, taskId);
130
+ return result.changes > 0;
131
+ }
132
+ else {
133
+ const result = this.db.prepare("UPDATE pipeline_tasks SET status = ?, updated_at = datetime('now') WHERE id = ?").run(status, taskId);
134
+ return result.changes > 0;
135
+ }
136
+ }
137
+ /**
138
+ * 获取单个任务
139
+ */
140
+ getTask(taskId) {
141
+ const row = this.db.prepare('SELECT * FROM pipeline_tasks WHERE id = ?').get(taskId);
142
+ if (!row)
143
+ return null;
144
+ return {
145
+ id: row.id,
146
+ title: row.title,
147
+ description: row.description,
148
+ phase: row.phase,
149
+ status: row.status,
150
+ dependencies: [],
151
+ source: row.source,
152
+ output: row.output,
153
+ };
154
+ }
155
+ /**
156
+ * 根据任务 ID 获取 Pipeline ID
157
+ */
158
+ getPipelineIdByTask(taskId) {
159
+ const row = this.db.prepare('SELECT pipeline_id FROM pipeline_tasks WHERE id = ?').get(taskId);
160
+ return row?.pipeline_id || null;
161
+ }
162
+ }
163
+ //# sourceMappingURL=store.legacy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.legacy.js","sourceRoot":"","sources":["../../src/pipeline/store.legacy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Pipeline 状态机 - 转换规则定义
3
+ *
4
+ * 定义所有合法的状态转换规则
5
+ */
6
+ import { PipelineStateMachineState, StateMachineTrigger, StateMachineContext } from './state-machine-types.js';
7
+ import { PipelineEvent } from './events.js';
8
+ /**
9
+ * 状态转换规则
10
+ */
11
+ export interface StateTransition {
12
+ name: string;
13
+ from: Partial<PipelineStateMachineState> | {
14
+ phase: '*';
15
+ status: '*';
16
+ };
17
+ trigger: {
18
+ type: StateMachineTrigger['type'];
19
+ };
20
+ to: PipelineStateMachineState | ((ctx: StateMachineContext, trigger: StateMachineTrigger) => PipelineStateMachineState);
21
+ guard?: (ctx: StateMachineContext, trigger: StateMachineTrigger) => boolean;
22
+ action?: (ctx: StateMachineContext, trigger: StateMachineTrigger) => Promise<PipelineEvent[]>;
23
+ }
24
+ /**
25
+ * 完整的状态转换规则表
26
+ */
27
+ export declare const PIPELINE_TRANSITIONS: StateTransition[];
28
+ //# sourceMappingURL=transitions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transitions.d.ts","sourceRoot":"","sources":["../../src/pipeline/transitions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAEL,yBAAyB,EACzB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAqB,MAAM,aAAa,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC,yBAAyB,CAAC,GAAG;QAAE,KAAK,EAAE,GAAG,CAAC;QAAC,MAAM,EAAE,GAAG,CAAA;KAAE,CAAC;IACvE,OAAO,EAAE;QAAE,IAAI,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC;IAC/C,EAAE,EAAE,yBAAyB,GAAG,CAAC,CAAC,GAAG,EAAE,mBAAmB,EAAE,OAAO,EAAE,mBAAmB,KAAK,yBAAyB,CAAC,CAAC;IACxH,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,mBAAmB,EAAE,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC;IAC5E,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,mBAAmB,EAAE,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;CAC/F;AAaD;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,eAAe,EAwUjD,CAAC"}
@@ -0,0 +1,336 @@
1
+ /**
2
+ * Pipeline 状态机 - 转换规则定义
3
+ *
4
+ * 定义所有合法的状态转换规则
5
+ */
6
+ import { PipelineEventType } from './events.js';
7
+ /**
8
+ * 获取下一个阶段
9
+ */
10
+ function nextPhase(current, plannedPhases) {
11
+ const idx = plannedPhases.indexOf(current);
12
+ if (idx === -1 || idx === plannedPhases.length - 1) {
13
+ return 'done';
14
+ }
15
+ return plannedPhases[idx + 1];
16
+ }
17
+ /**
18
+ * 完整的状态转换规则表
19
+ */
20
+ export const PIPELINE_TRANSITIONS = [
21
+ // ========== 通用规则:任意阶段 → 完成 ==========
22
+ {
23
+ name: 'manual_close',
24
+ from: { phase: '*', status: '*' },
25
+ trigger: { type: 'MANUAL_CLOSE' },
26
+ to: { phase: 'done', status: 'completed' },
27
+ action: async (ctx, trigger) => {
28
+ return [
29
+ {
30
+ id: '',
31
+ pipelineId: ctx.pipelineId,
32
+ type: PipelineEventType.PIPELINE_CLOSED,
33
+ timestamp: Date.now(),
34
+ payload: {
35
+ reason: 'manual',
36
+ totalTasks: ctx.tasks.length,
37
+ completedTasks: ctx.tasks.filter(t => t.status === 'completed').length,
38
+ failedTasks: ctx.tasks.filter(t => t.status === 'failed').length,
39
+ },
40
+ metadata: { sessionId: '' },
41
+ },
42
+ ];
43
+ },
44
+ },
45
+ // ========== 阶段推进规则(适用于所有阶段) ==========
46
+ // 1. 进行中 → 质量检查中(所有任务完成)
47
+ {
48
+ name: 'start_quality_check',
49
+ from: { status: 'in_progress' },
50
+ trigger: { type: 'ALL_TASKS_COMPLETED' },
51
+ to: (ctx) => ({ ...ctx.currentState, status: 'quality_checking' }),
52
+ guard: (ctx) => {
53
+ const phaseTasks = ctx.tasks.filter(t => t.phase === ctx.currentState.phase);
54
+ const completed = phaseTasks.filter(t => t.status === 'completed').length;
55
+ return phaseTasks.length > 0 && completed === phaseTasks.length;
56
+ },
57
+ action: async (ctx) => {
58
+ return [
59
+ {
60
+ id: '',
61
+ pipelineId: ctx.pipelineId,
62
+ type: PipelineEventType.QUALITY_CHECK_STARTED,
63
+ timestamp: Date.now(),
64
+ payload: {
65
+ phase: ctx.currentState.phase,
66
+ taskContext: '',
67
+ recentFiles: [],
68
+ },
69
+ metadata: { sessionId: '' },
70
+ },
71
+ ];
72
+ },
73
+ },
74
+ // 2. 质量检查中 → 下一阶段(通过)
75
+ {
76
+ name: 'quality_check_passed_advance',
77
+ from: { status: 'quality_checking' },
78
+ trigger: { type: 'QUALITY_CHECK_PASSED' },
79
+ to: (ctx, trigger) => {
80
+ const currentPhase = ctx.currentState.phase;
81
+ const plannedPhases = ['analyze', 'design', 'profile', 'code', 'test', 'review', 'done'];
82
+ const next = nextPhase(currentPhase, plannedPhases);
83
+ return { phase: next, status: next === 'done' ? 'completed' : 'in_progress' };
84
+ },
85
+ action: async (ctx, trigger) => {
86
+ const currentPhase = ctx.currentState.phase;
87
+ const plannedPhases = ['analyze', 'design', 'profile', 'code', 'test', 'review', 'done'];
88
+ const next = nextPhase(currentPhase, plannedPhases);
89
+ const t = trigger;
90
+ return [
91
+ {
92
+ id: '',
93
+ pipelineId: ctx.pipelineId,
94
+ type: PipelineEventType.QUALITY_CHECK_PASSED,
95
+ timestamp: Date.now(),
96
+ payload: {
97
+ phase: currentPhase,
98
+ level: t.level,
99
+ checks: [],
100
+ },
101
+ metadata: { sessionId: '' },
102
+ },
103
+ {
104
+ id: '',
105
+ pipelineId: ctx.pipelineId,
106
+ type: PipelineEventType.PHASE_ADVANCED,
107
+ timestamp: Date.now(),
108
+ payload: {
109
+ fromPhase: currentPhase,
110
+ toPhase: next,
111
+ reason: 'task_complete',
112
+ completedTasks: ctx.tasks
113
+ .filter(t => t.phase === currentPhase && t.status === 'completed')
114
+ .map(t => ({ id: t.id, title: '', output: '' })),
115
+ qualityLevel: t.level,
116
+ },
117
+ metadata: { sessionId: '' },
118
+ },
119
+ ];
120
+ },
121
+ },
122
+ // 3. 质量检查中 → 质量阻塞(失败)
123
+ {
124
+ name: 'quality_check_failed_block',
125
+ from: { status: 'quality_checking' },
126
+ trigger: { type: 'QUALITY_CHECK_FAILED' },
127
+ to: (ctx, trigger) => {
128
+ const t = trigger;
129
+ return {
130
+ ...ctx.currentState,
131
+ status: 'quality_blocked',
132
+ fixAttempt: t.fixAttempt,
133
+ };
134
+ },
135
+ guard: (ctx, trigger) => {
136
+ const t = trigger;
137
+ return t.fixAttempt < 2; // 未达到最大次数
138
+ },
139
+ action: async (ctx, trigger) => {
140
+ const t = trigger;
141
+ return [
142
+ {
143
+ id: '',
144
+ pipelineId: ctx.pipelineId,
145
+ type: PipelineEventType.QUALITY_CHECK_FAILED,
146
+ timestamp: Date.now(),
147
+ payload: {
148
+ phase: ctx.currentState.phase,
149
+ level: 'fail',
150
+ checks: t.issues.map(issue => ({
151
+ category: 'quality',
152
+ level: 'fail',
153
+ message: issue,
154
+ suggestion: '',
155
+ })),
156
+ fixAttempt: t.fixAttempt,
157
+ maxAttempts: 2,
158
+ },
159
+ metadata: { sessionId: '' },
160
+ },
161
+ ];
162
+ },
163
+ },
164
+ // 4. 质量阻塞 → 质量检查中(修复后重新检查)
165
+ {
166
+ name: 'quality_fix_applied_recheck',
167
+ from: { status: 'quality_blocked' },
168
+ trigger: { type: 'QUALITY_FIX_APPLIED' },
169
+ to: (ctx) => ({ ...ctx.currentState, status: 'quality_checking' }),
170
+ guard: (ctx) => {
171
+ const state = ctx.currentState;
172
+ return state.fixAttempt < 2;
173
+ },
174
+ },
175
+ // 5. 质量检查中 → 质量强制放行(达到最大次数)
176
+ {
177
+ name: 'quality_max_attempts_force_pass',
178
+ from: { status: 'quality_checking' },
179
+ trigger: { type: 'QUALITY_MAX_ATTEMPTS_REACHED' },
180
+ to: (ctx) => ({ ...ctx.currentState, status: 'quality_forced_pass' }),
181
+ action: async (ctx, trigger) => {
182
+ const t = trigger;
183
+ return [
184
+ {
185
+ id: '',
186
+ pipelineId: ctx.pipelineId,
187
+ type: PipelineEventType.QUALITY_FORCED_PASS,
188
+ timestamp: Date.now(),
189
+ payload: {
190
+ phase: ctx.currentState.phase,
191
+ reason: 'max_attempts_reached',
192
+ finalAttempt: 2,
193
+ unresolvedIssues: t.unresolvedIssues,
194
+ },
195
+ metadata: { sessionId: '' },
196
+ },
197
+ ];
198
+ },
199
+ },
200
+ // 6. 质量强制放行 → 下一阶段(手动确认)
201
+ {
202
+ name: 'forced_pass_manual_advance',
203
+ from: { status: 'quality_forced_pass' },
204
+ trigger: { type: 'MANUAL_ADVANCE' },
205
+ to: (ctx) => {
206
+ const currentPhase = ctx.currentState.phase;
207
+ const plannedPhases = ['analyze', 'design', 'profile', 'code', 'test', 'review', 'done'];
208
+ const next = nextPhase(currentPhase, plannedPhases);
209
+ return { phase: next, status: next === 'done' ? 'completed' : 'in_progress' };
210
+ },
211
+ action: async (ctx) => {
212
+ const currentPhase = ctx.currentState.phase;
213
+ const plannedPhases = ['analyze', 'design', 'profile', 'code', 'test', 'review', 'done'];
214
+ const next = nextPhase(currentPhase, plannedPhases);
215
+ return [
216
+ {
217
+ id: '',
218
+ pipelineId: ctx.pipelineId,
219
+ type: PipelineEventType.PHASE_ADVANCED,
220
+ timestamp: Date.now(),
221
+ payload: {
222
+ fromPhase: currentPhase,
223
+ toPhase: next,
224
+ reason: 'forced',
225
+ completedTasks: [],
226
+ qualityLevel: 'warn',
227
+ },
228
+ metadata: { sessionId: '' },
229
+ },
230
+ ];
231
+ },
232
+ },
233
+ // 7. 进行中 → 下一阶段(活动阈值触发)
234
+ {
235
+ name: 'activity_threshold_advance',
236
+ from: { status: 'in_progress' },
237
+ trigger: { type: 'ACTIVITY_THRESHOLD_TRIGGERED' },
238
+ to: (ctx) => {
239
+ const currentPhase = ctx.currentState.phase;
240
+ const plannedPhases = ['analyze', 'design', 'profile', 'code', 'test', 'review', 'done'];
241
+ const next = nextPhase(currentPhase, plannedPhases);
242
+ return { phase: next, status: next === 'done' ? 'completed' : 'in_progress' };
243
+ },
244
+ guard: (ctx) => {
245
+ const threshold = 45;
246
+ const stagnantThreshold = 10 * 60 * 1000; // 10 分钟
247
+ const now = Date.now();
248
+ const stagnant = ctx.lastWriteEditTime ? (now - ctx.lastWriteEditTime) > stagnantThreshold : false;
249
+ return ctx.eventCount >= threshold && stagnant;
250
+ },
251
+ action: async (ctx, trigger) => {
252
+ const currentPhase = ctx.currentState.phase;
253
+ const plannedPhases = ['analyze', 'design', 'profile', 'code', 'test', 'review', 'done'];
254
+ const next = nextPhase(currentPhase, plannedPhases);
255
+ const t = trigger;
256
+ return [
257
+ {
258
+ id: '',
259
+ pipelineId: ctx.pipelineId,
260
+ type: PipelineEventType.ACTIVITY_THRESHOLD_TRIGGERED,
261
+ timestamp: Date.now(),
262
+ payload: {
263
+ phase: currentPhase,
264
+ eventCount: ctx.eventCount,
265
+ threshold: 45,
266
+ stagnantDuration: ctx.lastWriteEditTime ? Date.now() - ctx.lastWriteEditTime : 0,
267
+ lastWriteEditTime: ctx.lastWriteEditTime || 0,
268
+ },
269
+ metadata: { sessionId: '' },
270
+ },
271
+ {
272
+ id: '',
273
+ pipelineId: ctx.pipelineId,
274
+ type: PipelineEventType.PHASE_ADVANCED,
275
+ timestamp: Date.now(),
276
+ payload: {
277
+ fromPhase: currentPhase,
278
+ toPhase: next,
279
+ reason: 'activity_threshold',
280
+ completedTasks: [],
281
+ },
282
+ metadata: { sessionId: '' },
283
+ },
284
+ ];
285
+ },
286
+ },
287
+ // 8. 进行中 → 下一阶段(空阶段自愈)
288
+ {
289
+ name: 'empty_phase_advance',
290
+ from: { status: 'in_progress' },
291
+ trigger: { type: 'EMPTY_PHASE_DETECTED' },
292
+ to: (ctx) => {
293
+ const currentPhase = ctx.currentState.phase;
294
+ const plannedPhases = ['analyze', 'design', 'profile', 'code', 'test', 'review', 'done'];
295
+ const next = nextPhase(currentPhase, plannedPhases);
296
+ return { phase: next, status: next === 'done' ? 'completed' : 'in_progress' };
297
+ },
298
+ guard: (ctx) => {
299
+ const phaseTasks = ctx.tasks.filter(t => t.phase === ctx.currentState.phase);
300
+ return phaseTasks.length === 0 && ctx.eventCount >= 3;
301
+ },
302
+ action: async (ctx) => {
303
+ const currentPhase = ctx.currentState.phase;
304
+ const plannedPhases = ['analyze', 'design', 'profile', 'code', 'test', 'review', 'done'];
305
+ const next = nextPhase(currentPhase, plannedPhases);
306
+ return [
307
+ {
308
+ id: '',
309
+ pipelineId: ctx.pipelineId,
310
+ type: PipelineEventType.EMPTY_PHASE_DETECTED,
311
+ timestamp: Date.now(),
312
+ payload: {
313
+ phase: currentPhase,
314
+ eventCount: ctx.eventCount,
315
+ threshold: 3,
316
+ },
317
+ metadata: { sessionId: '' },
318
+ },
319
+ {
320
+ id: '',
321
+ pipelineId: ctx.pipelineId,
322
+ type: PipelineEventType.PHASE_ADVANCED,
323
+ timestamp: Date.now(),
324
+ payload: {
325
+ fromPhase: currentPhase,
326
+ toPhase: next,
327
+ reason: 'empty_phase',
328
+ completedTasks: [],
329
+ },
330
+ metadata: { sessionId: '' },
331
+ },
332
+ ];
333
+ },
334
+ },
335
+ ];
336
+ //# sourceMappingURL=transitions.js.map