@hongmaple0820/scale-engine 0.12.3 → 0.14.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.
- package/dist/adapters/AiderAdapter.js +1 -1
- package/dist/adapters/AiderAdapter.js.map +1 -1
- package/dist/adapters/ClaudeCodeAdapter.d.ts +1 -0
- package/dist/adapters/ClaudeCodeAdapter.js +5 -3
- package/dist/adapters/ClaudeCodeAdapter.js.map +1 -1
- package/dist/adapters/CodexAdapter.js +1 -1
- package/dist/adapters/CodexAdapter.js.map +1 -1
- package/dist/adapters/CursorAdapter.js +1 -1
- package/dist/adapters/CursorAdapter.js.map +1 -1
- package/dist/adapters/DeepSeekTuiAdapter.js +5 -3
- package/dist/adapters/DeepSeekTuiAdapter.js.map +1 -1
- package/dist/adapters/DoubaoAdapter.js +1 -1
- package/dist/adapters/DoubaoAdapter.js.map +1 -1
- package/dist/adapters/GeminiAdapter.js +1 -1
- package/dist/adapters/GeminiAdapter.js.map +1 -1
- package/dist/adapters/HermesAdapter.js +1 -1
- package/dist/adapters/HermesAdapter.js.map +1 -1
- package/dist/adapters/KimiAdapter.js +1 -1
- package/dist/adapters/KimiAdapter.js.map +1 -1
- package/dist/adapters/KiroAdapter.d.ts +14 -0
- package/dist/adapters/KiroAdapter.js +180 -0
- package/dist/adapters/KiroAdapter.js.map +1 -0
- package/dist/adapters/OpenClawAdapter.js +1 -1
- package/dist/adapters/OpenClawAdapter.js.map +1 -1
- package/dist/adapters/OpenCodeAdapter.js +1 -1
- package/dist/adapters/OpenCodeAdapter.js.map +1 -1
- package/dist/adapters/QCoderAdapter.js +1 -1
- package/dist/adapters/QCoderAdapter.js.map +1 -1
- package/dist/adapters/TraeAdapter.js +1 -1
- package/dist/adapters/TraeAdapter.js.map +1 -1
- package/dist/adapters/VSCAdapter.js +1 -1
- package/dist/adapters/VSCAdapter.js.map +1 -1
- package/dist/adapters/WindsurfAdapter.js +1 -1
- package/dist/adapters/WindsurfAdapter.js.map +1 -1
- package/dist/adapters/WorkBuddyAdapter.js +1 -1
- package/dist/adapters/WorkBuddyAdapter.js.map +1 -1
- package/dist/adapters/index.d.ts +1 -0
- package/dist/adapters/index.js +3 -0
- package/dist/adapters/index.js.map +1 -1
- package/dist/api/cli.js +690 -9
- package/dist/api/cli.js.map +1 -1
- package/dist/api/doctor.d.ts +13 -0
- package/dist/api/doctor.js +261 -5
- package/dist/api/doctor.js.map +1 -1
- package/dist/api/quickstart.d.ts +20 -1
- package/dist/api/quickstart.js +104 -3
- package/dist/api/quickstart.js.map +1 -1
- package/dist/artifact/types.d.ts +16 -2
- package/dist/artifact/types.js.map +1 -1
- package/dist/cli/phaseCommands.d.ts +66 -0
- package/dist/cli/phaseCommands.js +695 -51
- package/dist/cli/phaseCommands.js.map +1 -1
- package/dist/guardrails/detectors.d.ts +9 -0
- package/dist/guardrails/detectors.js +102 -0
- package/dist/guardrails/detectors.js.map +1 -1
- package/dist/hooks/HookGeneratorEnhanced.js +29 -0
- package/dist/hooks/HookGeneratorEnhanced.js.map +1 -1
- package/dist/hooks/WorkflowHooksManager.js +20 -1
- package/dist/hooks/WorkflowHooksManager.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/output/BrandThemeLoader.d.ts +54 -0
- package/dist/output/BrandThemeLoader.js +340 -0
- package/dist/output/BrandThemeLoader.js.map +1 -0
- package/dist/output/HTMLDocumentRenderer.d.ts +83 -0
- package/dist/output/HTMLDocumentRenderer.js +717 -0
- package/dist/output/HTMLDocumentRenderer.js.map +1 -0
- package/dist/output/UIPrototypeRenderer.d.ts +61 -0
- package/dist/output/UIPrototypeRenderer.js +500 -0
- package/dist/output/UIPrototypeRenderer.js.map +1 -0
- package/dist/output/index.d.ts +6 -0
- package/dist/output/index.js +6 -0
- package/dist/output/index.js.map +1 -0
- package/dist/skills/ExternalSkills.js +2 -0
- package/dist/skills/ExternalSkills.js.map +1 -1
- package/dist/skills/SkillCatalog.d.ts +13 -0
- package/dist/skills/SkillCatalog.js +184 -0
- package/dist/skills/SkillCatalog.js.map +1 -0
- package/dist/skills/SkillDiscovery.js +2 -1
- package/dist/skills/SkillDiscovery.js.map +1 -1
- package/dist/skills/SkillDoctor.d.ts +37 -0
- package/dist/skills/SkillDoctor.js +90 -0
- package/dist/skills/SkillDoctor.js.map +1 -0
- package/dist/skills/index.d.ts +2 -0
- package/dist/skills/index.js +2 -0
- package/dist/skills/index.js.map +1 -1
- package/dist/skills/routing/SkillGate.d.ts +12 -0
- package/dist/skills/routing/SkillGate.js +93 -0
- package/dist/skills/routing/SkillGate.js.map +1 -0
- package/dist/skills/routing/SkillPlanner.d.ts +8 -0
- package/dist/skills/routing/SkillPlanner.js +91 -0
- package/dist/skills/routing/SkillPlanner.js.map +1 -0
- package/dist/skills/routing/SkillPolicy.d.ts +6 -0
- package/dist/skills/routing/SkillPolicy.js +173 -0
- package/dist/skills/routing/SkillPolicy.js.map +1 -0
- package/dist/skills/routing/SkillRoutingTypes.d.ts +72 -0
- package/dist/skills/routing/SkillRoutingTypes.js +2 -0
- package/dist/skills/routing/SkillRoutingTypes.js.map +1 -0
- package/dist/skills/routing/TaskIntentClassifier.d.ts +6 -0
- package/dist/skills/routing/TaskIntentClassifier.js +79 -0
- package/dist/skills/routing/TaskIntentClassifier.js.map +1 -0
- package/dist/skills/routing/index.d.ts +5 -0
- package/dist/skills/routing/index.js +6 -0
- package/dist/skills/routing/index.js.map +1 -0
- package/dist/workflow/GovernanceLock.d.ts +35 -0
- package/dist/workflow/GovernanceLock.js +58 -0
- package/dist/workflow/GovernanceLock.js.map +1 -0
- package/dist/workflow/GovernanceTemplatePacks.d.ts +24 -0
- package/dist/workflow/GovernanceTemplatePacks.js +83 -0
- package/dist/workflow/GovernanceTemplatePacks.js.map +1 -0
- package/dist/workflow/GovernanceTemplates.d.ts +17 -0
- package/dist/workflow/GovernanceTemplates.js +686 -0
- package/dist/workflow/GovernanceTemplates.js.map +1 -0
- package/dist/workflow/PhaseMarkerTracker.d.ts +63 -0
- package/dist/workflow/PhaseMarkerTracker.js +291 -0
- package/dist/workflow/PhaseMarkerTracker.js.map +1 -0
- package/dist/workflow/SessionStateTracker.d.ts +74 -0
- package/dist/workflow/SessionStateTracker.js +270 -0
- package/dist/workflow/SessionStateTracker.js.map +1 -0
- package/dist/workflow/TaskArtifactScaffolder.d.ts +47 -0
- package/dist/workflow/TaskArtifactScaffolder.js +237 -0
- package/dist/workflow/TaskArtifactScaffolder.js.map +1 -0
- package/dist/workflow/TaskMetricsStore.d.ts +49 -0
- package/dist/workflow/TaskMetricsStore.js +149 -0
- package/dist/workflow/TaskMetricsStore.js.map +1 -0
- package/dist/workflow/VerificationCommands.d.ts +2 -0
- package/dist/workflow/VerificationCommands.js +8 -12
- package/dist/workflow/VerificationCommands.js.map +1 -1
- package/dist/workflow/VerificationProfile.d.ts +56 -0
- package/dist/workflow/VerificationProfile.js +170 -0
- package/dist/workflow/VerificationProfile.js.map +1 -0
- package/dist/workflow/WorkflowArtifactWriter.d.ts +113 -0
- package/dist/workflow/WorkflowArtifactWriter.js +241 -0
- package/dist/workflow/WorkflowArtifactWriter.js.map +1 -0
- package/dist/workflow/WorkflowEngine.d.ts +26 -5
- package/dist/workflow/WorkflowEngine.js +38 -9
- package/dist/workflow/WorkflowEngine.js.map +1 -1
- package/dist/workflow/WorkspaceLifecycle.d.ts +51 -0
- package/dist/workflow/WorkspaceLifecycle.js +259 -0
- package/dist/workflow/WorkspaceLifecycle.js.map +1 -0
- package/dist/workflow/autonomous/AutonomousDevLoop.d.ts +88 -0
- package/dist/workflow/autonomous/AutonomousDevLoop.js +381 -0
- package/dist/workflow/autonomous/AutonomousDevLoop.js.map +1 -0
- package/dist/workflow/autonomous/WorklogManager.d.ts +50 -0
- package/dist/workflow/autonomous/WorklogManager.js +264 -0
- package/dist/workflow/autonomous/WorklogManager.js.map +1 -0
- package/dist/workflow/autonomous/index.d.ts +2 -0
- package/dist/workflow/autonomous/index.js +4 -0
- package/dist/workflow/autonomous/index.js.map +1 -0
- package/dist/workflow/gates/GateSystem.d.ts +12 -3
- package/dist/workflow/gates/GateSystem.js +185 -41
- package/dist/workflow/gates/GateSystem.js.map +1 -1
- package/dist/workflow/index.d.ts +10 -0
- package/dist/workflow/index.js +10 -0
- package/dist/workflow/index.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export type ScalePhase = 'DEFINE' | 'PLAN' | 'EXECUTE' | 'VERIFY' | 'REVIEW' | 'SHIP';
|
|
2
|
+
export interface PhaseStatus {
|
|
3
|
+
completed: boolean;
|
|
4
|
+
marker?: string;
|
|
5
|
+
details?: Record<string, string>;
|
|
6
|
+
timestamp?: number;
|
|
7
|
+
}
|
|
8
|
+
export interface PhaseState {
|
|
9
|
+
DEFINE: PhaseStatus;
|
|
10
|
+
PLAN: PhaseStatus;
|
|
11
|
+
EXECUTE: PhaseStatus;
|
|
12
|
+
VERIFY: PhaseStatus;
|
|
13
|
+
REVIEW: PhaseStatus;
|
|
14
|
+
SHIP: PhaseStatus;
|
|
15
|
+
}
|
|
16
|
+
export declare class PhaseMarkerTracker {
|
|
17
|
+
private stateDir;
|
|
18
|
+
private stateFile;
|
|
19
|
+
constructor(scaleDir?: string);
|
|
20
|
+
private ensureDir;
|
|
21
|
+
/**
|
|
22
|
+
* 解析文本中的所有 Output Markers 并更新状态
|
|
23
|
+
* @param text 包含 markers 的文本(对话输出)
|
|
24
|
+
* @returns 本次解析出的 markers 数量
|
|
25
|
+
*/
|
|
26
|
+
parseAndUpdate(text: string): number;
|
|
27
|
+
/**
|
|
28
|
+
* 解析文本中的所有 Output Markers
|
|
29
|
+
* @returns 解析结果 Map<Phase, PhaseStatus>
|
|
30
|
+
*/
|
|
31
|
+
parseMarkers(text: string): Partial<Record<ScalePhase, PhaseStatus>>;
|
|
32
|
+
/** 获取当前 Phase 状态 */
|
|
33
|
+
getState(): PhaseState;
|
|
34
|
+
/** 手动标记 Phase 完成 */
|
|
35
|
+
markComplete(phase: ScalePhase, details?: Record<string, string>): void;
|
|
36
|
+
/** 重置 Phase 状态 */
|
|
37
|
+
resetPhase(phase: ScalePhase): void;
|
|
38
|
+
/** 重置所有状态 */
|
|
39
|
+
resetAll(): void;
|
|
40
|
+
/** 检查单个 Phase 是否完成 */
|
|
41
|
+
isPhaseComplete(phase: ScalePhase): boolean;
|
|
42
|
+
/** 检查所有必需 Phase 是否完成 */
|
|
43
|
+
isAllComplete(): boolean;
|
|
44
|
+
/** 获取缺失的 Phase 列表 */
|
|
45
|
+
getMissingPhases(): ScalePhase[];
|
|
46
|
+
/** 获取已完成的 Phase 列表 */
|
|
47
|
+
getCompletedPhases(): ScalePhase[];
|
|
48
|
+
/** 生成状态报告 */
|
|
49
|
+
generateReport(): string;
|
|
50
|
+
/** 生成 Stop Hook 检查结果 */
|
|
51
|
+
generateStopHookResult(): {
|
|
52
|
+
pass: boolean;
|
|
53
|
+
message: string;
|
|
54
|
+
missing: string[];
|
|
55
|
+
};
|
|
56
|
+
private createDefaultState;
|
|
57
|
+
private writeState;
|
|
58
|
+
}
|
|
59
|
+
/** 快速解析单个 marker 行(供 CLI 和 Hook 使用) */
|
|
60
|
+
export declare function parsePhaseMarker(line: string): {
|
|
61
|
+
phase: ScalePhase;
|
|
62
|
+
details: Record<string, string>;
|
|
63
|
+
} | null;
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
// SCALE Engine — Phase Marker Tracker
|
|
2
|
+
// 解析 Output Markers 并追踪 Phase 完成状态
|
|
3
|
+
// 用于 Stop Hook 检查所有 Phase 是否完成
|
|
4
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, unlinkSync } from 'node:fs';
|
|
5
|
+
import { join } from 'node:path';
|
|
6
|
+
import { logger } from '../core/logger.js';
|
|
7
|
+
// ============================================================================
|
|
8
|
+
// Output Marker Patterns
|
|
9
|
+
// ============================================================================
|
|
10
|
+
// [DEFINE] ✓ ambiguity <score>% ✓ | spec <id> ✓
|
|
11
|
+
const DEFINE_PATTERN = /\[DEFINE\]\s*✓\s*ambiguity\s+([\d.]+)%\s*✓\s*\|\s*spec\s+(\S+)\s*✓/;
|
|
12
|
+
// [PLAN] ✓ impact ✓ | contract ✓ | rollback ✓ | plan <id> ✓
|
|
13
|
+
const PLAN_PATTERN = /\[PLAN\]\s*✓\s*impact\s+✓\s*\|\s*contract\s+✓\s*\|\s*rollback\s+✓\s*\|\s*plan\s+(\S+)\s*✓/;
|
|
14
|
+
// [EXECUTE] ✓ TDD RED ✓ | GREEN ✓ | REFACTOR ✓ | task <id> ✓
|
|
15
|
+
const EXECUTE_PATTERN = /\[EXECUTE\]\s*✓\s*TDD\s+RED\s+✓\s*\|\s*GREEN\s+✓\s*\|\s*REFACTOR\s+✓\s*\|\s*task\s+(\S+)\s*✓/;
|
|
16
|
+
// [VERIFY] ✓ <gate1> ✓ | <gate2> ✓ | ... (flexible)
|
|
17
|
+
const VERIFY_PATTERN = /\[VERIFY\]\s*(.*?)(?:\s*$)/;
|
|
18
|
+
// [REVIEW] ✓ files <count> ✓ | findings <total> ✓ | CRITICAL <n> ✓ | HIGH <n> ✓ | principles <n>/8 ✓
|
|
19
|
+
const REVIEW_PATTERN = /\[REVIEW\]\s*✓\s*files\s+(\d+)\s*✓\s*\|\s*findings\s+(\d+)\s*✓\s*\|\s*CRITICAL\s+(\d+)\s*✓\s*\|\s*HIGH\s+(\d+)\s*✓\s*\|\s*principles\s+(\d+)\/8\s*✓/;
|
|
20
|
+
// [SHIP] ✓ evidence ✓ | staged <count> ✓ | commit <hash> ✓ | push ✓ | report ✓
|
|
21
|
+
const SHIP_PATTERN = /\[SHIP\]\s*✓\s*evidence\s+✓\s*\|\s*staged\s+(\d+)\s*✓\s*\|\s*commit\s+(\S+)\s*✓\s*\|\s*(push|skip)\s+✓\s*\|\s*report\s+✓/;
|
|
22
|
+
// ============================================================================
|
|
23
|
+
// Phase Marker Tracker
|
|
24
|
+
// ============================================================================
|
|
25
|
+
export class PhaseMarkerTracker {
|
|
26
|
+
constructor(scaleDir = '.scale') {
|
|
27
|
+
this.stateDir = join(scaleDir, 'phases');
|
|
28
|
+
this.stateFile = join(this.stateDir, '.phase-state');
|
|
29
|
+
this.ensureDir();
|
|
30
|
+
}
|
|
31
|
+
ensureDir() {
|
|
32
|
+
if (!existsSync(this.stateDir)) {
|
|
33
|
+
mkdirSync(this.stateDir, { recursive: true });
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// ─────────────────────────────────────────────────────────────
|
|
37
|
+
// Marker Parsing
|
|
38
|
+
// ─────────────────────────────────────────────────────────────
|
|
39
|
+
/**
|
|
40
|
+
* 解析文本中的所有 Output Markers 并更新状态
|
|
41
|
+
* @param text 包含 markers 的文本(对话输出)
|
|
42
|
+
* @returns 本次解析出的 markers 数量
|
|
43
|
+
*/
|
|
44
|
+
parseAndUpdate(text) {
|
|
45
|
+
const markers = this.parseMarkers(text);
|
|
46
|
+
const keys = Object.keys(markers);
|
|
47
|
+
if (keys.length === 0)
|
|
48
|
+
return 0;
|
|
49
|
+
const state = this.getState();
|
|
50
|
+
for (const [phase, status] of Object.entries(markers)) {
|
|
51
|
+
if (status.completed) {
|
|
52
|
+
state[phase] = status;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
this.writeState(state);
|
|
56
|
+
logger.info({ phases: keys, count: keys.length }, 'Phase markers parsed and updated');
|
|
57
|
+
return keys.length;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 解析文本中的所有 Output Markers
|
|
61
|
+
* @returns 解析结果 Map<Phase, PhaseStatus>
|
|
62
|
+
*/
|
|
63
|
+
parseMarkers(text) {
|
|
64
|
+
const results = {};
|
|
65
|
+
// DEFINE
|
|
66
|
+
const defineMatch = text.match(DEFINE_PATTERN);
|
|
67
|
+
if (defineMatch) {
|
|
68
|
+
results.DEFINE = {
|
|
69
|
+
completed: true,
|
|
70
|
+
marker: defineMatch[0],
|
|
71
|
+
details: {
|
|
72
|
+
ambiguity: defineMatch[1],
|
|
73
|
+
specId: defineMatch[2],
|
|
74
|
+
},
|
|
75
|
+
timestamp: Date.now(),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
// PLAN
|
|
79
|
+
const planMatch = text.match(PLAN_PATTERN);
|
|
80
|
+
if (planMatch) {
|
|
81
|
+
results.PLAN = {
|
|
82
|
+
completed: true,
|
|
83
|
+
marker: planMatch[0],
|
|
84
|
+
details: {
|
|
85
|
+
planId: planMatch[1],
|
|
86
|
+
},
|
|
87
|
+
timestamp: Date.now(),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
// EXECUTE
|
|
91
|
+
const executeMatch = text.match(EXECUTE_PATTERN);
|
|
92
|
+
if (executeMatch) {
|
|
93
|
+
results.EXECUTE = {
|
|
94
|
+
completed: true,
|
|
95
|
+
marker: executeMatch[0],
|
|
96
|
+
details: {
|
|
97
|
+
taskId: executeMatch[1],
|
|
98
|
+
},
|
|
99
|
+
timestamp: Date.now(),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
// VERIFY
|
|
103
|
+
const verifyMatch = text.match(VERIFY_PATTERN);
|
|
104
|
+
if (verifyMatch) {
|
|
105
|
+
results.VERIFY = {
|
|
106
|
+
completed: true,
|
|
107
|
+
marker: verifyMatch[0],
|
|
108
|
+
details: {
|
|
109
|
+
gates: verifyMatch[1].trim(),
|
|
110
|
+
},
|
|
111
|
+
timestamp: Date.now(),
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
// REVIEW
|
|
115
|
+
const reviewMatch = text.match(REVIEW_PATTERN);
|
|
116
|
+
if (reviewMatch) {
|
|
117
|
+
results.REVIEW = {
|
|
118
|
+
completed: true,
|
|
119
|
+
marker: reviewMatch[0],
|
|
120
|
+
details: {
|
|
121
|
+
files: reviewMatch[1],
|
|
122
|
+
findings: reviewMatch[2],
|
|
123
|
+
critical: reviewMatch[3],
|
|
124
|
+
high: reviewMatch[4],
|
|
125
|
+
principles: reviewMatch[5],
|
|
126
|
+
},
|
|
127
|
+
timestamp: Date.now(),
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
// SHIP
|
|
131
|
+
const shipMatch = text.match(SHIP_PATTERN);
|
|
132
|
+
if (shipMatch) {
|
|
133
|
+
results.SHIP = {
|
|
134
|
+
completed: true,
|
|
135
|
+
marker: shipMatch[0],
|
|
136
|
+
details: {
|
|
137
|
+
staged: shipMatch[1],
|
|
138
|
+
commit: shipMatch[2],
|
|
139
|
+
push: shipMatch[3],
|
|
140
|
+
},
|
|
141
|
+
timestamp: Date.now(),
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
return results;
|
|
145
|
+
}
|
|
146
|
+
// ─────────────────────────────────────────────────────────────
|
|
147
|
+
// State Management
|
|
148
|
+
// ─────────────────────────────────────────────────────────────
|
|
149
|
+
/** 获取当前 Phase 状态 */
|
|
150
|
+
getState() {
|
|
151
|
+
if (!existsSync(this.stateFile)) {
|
|
152
|
+
return this.createDefaultState();
|
|
153
|
+
}
|
|
154
|
+
try {
|
|
155
|
+
const content = readFileSync(this.stateFile, 'utf-8');
|
|
156
|
+
return JSON.parse(content);
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
return this.createDefaultState();
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/** 手动标记 Phase 完成 */
|
|
163
|
+
markComplete(phase, details) {
|
|
164
|
+
const state = this.getState();
|
|
165
|
+
state[phase] = {
|
|
166
|
+
completed: true,
|
|
167
|
+
details,
|
|
168
|
+
timestamp: Date.now(),
|
|
169
|
+
};
|
|
170
|
+
this.writeState(state);
|
|
171
|
+
logger.info({ phase, details }, 'Phase marked complete');
|
|
172
|
+
}
|
|
173
|
+
/** 重置 Phase 状态 */
|
|
174
|
+
resetPhase(phase) {
|
|
175
|
+
const state = this.getState();
|
|
176
|
+
state[phase] = { completed: false };
|
|
177
|
+
this.writeState(state);
|
|
178
|
+
logger.info({ phase }, 'Phase state reset');
|
|
179
|
+
}
|
|
180
|
+
/** 重置所有状态 */
|
|
181
|
+
resetAll() {
|
|
182
|
+
if (existsSync(this.stateFile)) {
|
|
183
|
+
unlinkSync(this.stateFile);
|
|
184
|
+
}
|
|
185
|
+
logger.info('All phase states reset');
|
|
186
|
+
}
|
|
187
|
+
/** 检查单个 Phase 是否完成 */
|
|
188
|
+
isPhaseComplete(phase) {
|
|
189
|
+
return this.getState()[phase]?.completed === true;
|
|
190
|
+
}
|
|
191
|
+
/** 检查所有必需 Phase 是否完成 */
|
|
192
|
+
isAllComplete() {
|
|
193
|
+
const state = this.getState();
|
|
194
|
+
const required = ['DEFINE', 'PLAN', 'EXECUTE', 'VERIFY', 'REVIEW', 'SHIP'];
|
|
195
|
+
return required.every(p => state[p]?.completed === true);
|
|
196
|
+
}
|
|
197
|
+
/** 获取缺失的 Phase 列表 */
|
|
198
|
+
getMissingPhases() {
|
|
199
|
+
const state = this.getState();
|
|
200
|
+
const required = ['DEFINE', 'PLAN', 'EXECUTE', 'VERIFY', 'REVIEW', 'SHIP'];
|
|
201
|
+
return required.filter(p => state[p]?.completed !== true);
|
|
202
|
+
}
|
|
203
|
+
/** 获取已完成的 Phase 列表 */
|
|
204
|
+
getCompletedPhases() {
|
|
205
|
+
const state = this.getState();
|
|
206
|
+
const all = ['DEFINE', 'PLAN', 'EXECUTE', 'VERIFY', 'REVIEW', 'SHIP'];
|
|
207
|
+
return all.filter(p => state[p]?.completed === true);
|
|
208
|
+
}
|
|
209
|
+
// ─────────────────────────────────────────────────────────────
|
|
210
|
+
// Report Generation
|
|
211
|
+
// ─────────────────────────────────────────────────────────────
|
|
212
|
+
/** 生成状态报告 */
|
|
213
|
+
generateReport() {
|
|
214
|
+
const state = this.getState();
|
|
215
|
+
const phaseOrder = ['DEFINE', 'PLAN', 'EXECUTE', 'VERIFY', 'REVIEW', 'SHIP'];
|
|
216
|
+
const lines = [
|
|
217
|
+
'# SCALE Engine Phase Status',
|
|
218
|
+
'',
|
|
219
|
+
];
|
|
220
|
+
for (const phase of phaseOrder) {
|
|
221
|
+
const status = state[phase];
|
|
222
|
+
if (status?.completed) {
|
|
223
|
+
lines.push(`✅ ${phase}: completed`);
|
|
224
|
+
if (status.details) {
|
|
225
|
+
for (const [key, value] of Object.entries(status.details)) {
|
|
226
|
+
lines.push(` - ${key}: ${value}`);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
lines.push(`⬜ ${phase}: pending`);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
const completed = phaseOrder.filter(p => state[p]?.completed).length;
|
|
235
|
+
lines.push('');
|
|
236
|
+
lines.push(`Progress: ${completed}/${phaseOrder.length} phases`);
|
|
237
|
+
if (this.isAllComplete()) {
|
|
238
|
+
lines.push('');
|
|
239
|
+
lines.push('🎉 All phases complete — ready to ship!');
|
|
240
|
+
}
|
|
241
|
+
return lines.join('\n');
|
|
242
|
+
}
|
|
243
|
+
/** 生成 Stop Hook 检查结果 */
|
|
244
|
+
generateStopHookResult() {
|
|
245
|
+
const missing = this.getMissingPhases();
|
|
246
|
+
const pass = missing.length === 0;
|
|
247
|
+
if (pass) {
|
|
248
|
+
return {
|
|
249
|
+
pass: true,
|
|
250
|
+
message: 'All SCALE Engine phases complete',
|
|
251
|
+
missing: [],
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
return {
|
|
255
|
+
pass: false,
|
|
256
|
+
message: `Incomplete phases: ${missing.join(', ')}`,
|
|
257
|
+
missing,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
// ─────────────────────────────────────────────────────────────
|
|
261
|
+
// Private Helpers
|
|
262
|
+
// ─────────────────────────────────────────────────────────────
|
|
263
|
+
createDefaultState() {
|
|
264
|
+
return {
|
|
265
|
+
DEFINE: { completed: false },
|
|
266
|
+
PLAN: { completed: false },
|
|
267
|
+
EXECUTE: { completed: false },
|
|
268
|
+
VERIFY: { completed: false },
|
|
269
|
+
REVIEW: { completed: false },
|
|
270
|
+
SHIP: { completed: false },
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
writeState(state) {
|
|
274
|
+
this.ensureDir();
|
|
275
|
+
writeFileSync(this.stateFile, JSON.stringify(state, null, 2), 'utf-8');
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
// ============================================================================
|
|
279
|
+
// Standalone CLI Helper
|
|
280
|
+
// ============================================================================
|
|
281
|
+
/** 快速解析单个 marker 行(供 CLI 和 Hook 使用) */
|
|
282
|
+
export function parsePhaseMarker(line) {
|
|
283
|
+
const tracker = new PhaseMarkerTracker();
|
|
284
|
+
const results = tracker.parseMarkers(line);
|
|
285
|
+
const entries = Object.entries(results);
|
|
286
|
+
if (entries.length === 0)
|
|
287
|
+
return null;
|
|
288
|
+
const [phase, status] = entries[0];
|
|
289
|
+
return { phase: phase, details: status.details ?? {} };
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=PhaseMarkerTracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PhaseMarkerTracker.js","sourceRoot":"","sources":["../../src/workflow/PhaseMarkerTracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
export type PhaseStatus = '✓' | '⏳' | '' | 'pending';
|
|
2
|
+
export interface FlowState {
|
|
3
|
+
SKILL_SCAN: PhaseStatus;
|
|
4
|
+
EXPLORE: PhaseStatus;
|
|
5
|
+
PLAN: PhaseStatus;
|
|
6
|
+
EXECUTE: PhaseStatus;
|
|
7
|
+
VERIFY: PhaseStatus;
|
|
8
|
+
SETTLE: PhaseStatus;
|
|
9
|
+
POLLUTION: PhaseStatus;
|
|
10
|
+
LAZY: PhaseStatus;
|
|
11
|
+
}
|
|
12
|
+
export interface SessionMarkers {
|
|
13
|
+
skillScanned: boolean;
|
|
14
|
+
skillList: string[];
|
|
15
|
+
verified: boolean;
|
|
16
|
+
pollutionDetected: boolean;
|
|
17
|
+
pollutionCleared: boolean;
|
|
18
|
+
lazyDetected: string[];
|
|
19
|
+
failCount: number;
|
|
20
|
+
}
|
|
21
|
+
export declare class SessionStateTracker {
|
|
22
|
+
private sessionDir;
|
|
23
|
+
private sessionId;
|
|
24
|
+
constructor(sessionId: string, scaleDir?: string);
|
|
25
|
+
private ensureDir;
|
|
26
|
+
/** Get current flow state */
|
|
27
|
+
getFlowState(): FlowState;
|
|
28
|
+
/** Update phase status */
|
|
29
|
+
updatePhase(phase: keyof FlowState, status: PhaseStatus): void;
|
|
30
|
+
/** Mark phase as complete */
|
|
31
|
+
markPhaseComplete(phase: keyof FlowState): void;
|
|
32
|
+
/** Mark phase as in progress */
|
|
33
|
+
markPhaseInProgress(phase: keyof FlowState): void;
|
|
34
|
+
/** Check if all phases complete */
|
|
35
|
+
isAllComplete(): boolean;
|
|
36
|
+
/** Get missing phases */
|
|
37
|
+
getMissingPhases(): string[];
|
|
38
|
+
private createDefaultFlowState;
|
|
39
|
+
private writeFlowState;
|
|
40
|
+
/** Mark skill scan complete */
|
|
41
|
+
markSkillScanned(skills: string[]): void;
|
|
42
|
+
/** Check if skill scanned */
|
|
43
|
+
isSkillScanned(): boolean;
|
|
44
|
+
/** Get scanned skills */
|
|
45
|
+
getScannedSkills(): string[];
|
|
46
|
+
/** Mark verification complete */
|
|
47
|
+
markVerified(): void;
|
|
48
|
+
/** Check if verified */
|
|
49
|
+
isVerified(): boolean;
|
|
50
|
+
/** Mark pollution detected */
|
|
51
|
+
markPollutionDetected(): void;
|
|
52
|
+
/** Clear pollution */
|
|
53
|
+
clearPollution(): void;
|
|
54
|
+
/** Check if pollution detected */
|
|
55
|
+
isPollutionDetected(): boolean;
|
|
56
|
+
/** Mark lazy detected */
|
|
57
|
+
markLazyDetected(type: string): void;
|
|
58
|
+
/** Clear lazy marker */
|
|
59
|
+
clearLazyMarker(type: string): void;
|
|
60
|
+
/** Check if lazy detected */
|
|
61
|
+
isLazyDetected(): boolean;
|
|
62
|
+
/** Get lazy types */
|
|
63
|
+
getLazyTypes(): string[];
|
|
64
|
+
/** Increment fail count */
|
|
65
|
+
incrementFailCount(): number;
|
|
66
|
+
/** Get fail count */
|
|
67
|
+
getFailCount(): number;
|
|
68
|
+
/** Reset fail count */
|
|
69
|
+
resetFailCount(): void;
|
|
70
|
+
/** Clear all session markers */
|
|
71
|
+
clearAll(): void;
|
|
72
|
+
/** Generate summary report */
|
|
73
|
+
generateSummary(): string;
|
|
74
|
+
}
|