@winspan/claude-forge 3.0.1 → 3.1.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 (34) hide show
  1. package/dist/autopilot/quality-gate.d.ts +1 -1
  2. package/dist/autopilot/quality-gate.d.ts.map +1 -1
  3. package/dist/autopilot/quality-gate.js +1 -1
  4. package/dist/autopilot/quality-gate.js.map +1 -1
  5. package/dist/daemon/index.js +1 -1
  6. package/dist/daemon/index.js.map +1 -1
  7. package/dist/pipeline/artifact-enforcement.d.ts +2 -2
  8. package/dist/pipeline/artifact-enforcement.js +2 -2
  9. package/dist/pipeline/dynamic-node-executor.d.ts +1 -1
  10. package/dist/pipeline/dynamic-node-executor.js +1 -1
  11. package/dist/pipeline/i-node-executor.d.ts +2 -2
  12. package/dist/pipeline/i-node-executor.js +1 -1
  13. package/dist/pipeline/index.d.ts +1 -1
  14. package/dist/pipeline/index.d.ts.map +1 -1
  15. package/dist/pipeline/index.js +26 -112
  16. package/dist/pipeline/index.js.map +1 -1
  17. package/dist/pipeline/node-type-sync.d.ts.map +1 -1
  18. package/dist/pipeline/node-type-sync.js.map +1 -1
  19. package/dist/pipeline/step-validator.d.ts.map +1 -1
  20. package/dist/pipeline/step-validator.js +1 -2
  21. package/dist/pipeline/step-validator.js.map +1 -1
  22. package/dist/retrospective/index.d.ts +1 -1
  23. package/dist/retrospective/index.js +1 -1
  24. package/dist/retrospective/metrics-extractor.d.ts +1 -1
  25. package/dist/retrospective/metrics-extractor.js +1 -1
  26. package/dist/web/server.d.ts +1 -1
  27. package/dist/web/server.d.ts.map +1 -1
  28. package/dist/web-static/assets/{index-_pTdFFt3.js → index-DABYEmUB.js} +1 -1
  29. package/dist/web-static/index.html +1 -1
  30. package/package.json +1 -1
  31. package/dist/pipeline/phase-manager.d.ts +0 -190
  32. package/dist/pipeline/phase-manager.d.ts.map +0 -1
  33. package/dist/pipeline/phase-manager.js +0 -961
  34. package/dist/pipeline/phase-manager.js.map +0 -1
@@ -4,7 +4,7 @@
4
4
  <meta charset="UTF-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Claude Forge - 管理后台</title>
7
- <script type="module" crossorigin src="/assets/index-_pTdFFt3.js"></script>
7
+ <script type="module" crossorigin src="/assets/index-DABYEmUB.js"></script>
8
8
  <link rel="stylesheet" crossorigin href="/assets/index-CEtt07F4.css">
9
9
  </head>
10
10
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@winspan/claude-forge",
3
- "version": "3.0.1",
3
+ "version": "3.1.0",
4
4
  "description": "SDLC intelligent orchestration engine for Claude Code",
5
5
  "main": "dist/cli/index.js",
6
6
  "type": "module",
@@ -1,190 +0,0 @@
1
- import type { ForgeEvent } from '../types/index.js';
2
- import type { Pipeline, PipelinePhase } from './types.js';
3
- import { PipelineStore } from './store.js';
4
- import type { QualityGateEngine } from '../autopilot/quality-gate.js';
5
- import type { PhaseSnapshot } from '../retrospective/types.js';
6
- import type { INodeExecutor, NodeExecutorState } from './i-node-executor.js';
7
- export declare class PhaseManager implements INodeExecutor {
8
- private store;
9
- private checkpointManager;
10
- private artifactEnforcement;
11
- private knowledgeContext;
12
- private totalPhaseEventCounts;
13
- /** 追踪每个 pipeline:phase 已见过的工具类别(逗号分隔字符串,节省内存) */
14
- private phaseToolsSeen;
15
- private phaseFixAttempts;
16
- /** 追踪每个 pipeline:phase 的 Write/Edit 调用次数 */
17
- private phaseWriteEditCounts;
18
- /** 追踪每个 pipeline:phase 最近 5 次工具调用 */
19
- private recentTools;
20
- /** 质量门禁去重缓存:已通过的 pipeline:phase 不再重复检查(24h TTL) */
21
- private gatePassedCache;
22
- /** 活动阈值触发标记:标记为 true 的 pipeline:phase 跳过质量门禁直接推进 */
23
- private activityThresholdTriggered;
24
- /** 产物门禁阻断缓存:记录被阻断的 pipeline:phase,用于注入提示 */
25
- private artifactGateBlocked;
26
- private static readonly MAX_FIX_ATTEMPTS;
27
- private static readonly EMPTY_PHASE_ADVANCE_THRESHOLD;
28
- constructor(store: PipelineStore);
29
- /**
30
- * Pipeline 关闭时清理所有相关缓存,防止内存泄漏
31
- */
32
- cleanup(pipelineId: string): void;
33
- /**
34
- * 注入知识库内容到特定 Pipeline
35
- */
36
- setKnowledgeContext(pipelineId: string, knowledge: string): void;
37
- /**
38
- * 获取产物门禁提示(供 stage-scheduler 注入到 AI 上下文)
39
- */
40
- getArtifactGateReminder(pipelineId: string, phase: PipelinePhase): string | null;
41
- /**
42
- * 清除产物门禁提示(AI 看到提示后清除,避免重复注入)
43
- */
44
- clearArtifactGateReminder(pipelineId: string, phase: PipelinePhase): void;
45
- /**
46
- * ESC 恢复:恢复指定 key 的 phaseToolsSeen(由 PipelineEngine 在从 DB 加载时调用)
47
- */
48
- restoreToolsSeen(key: string, tools: Set<string>): void;
49
- /**
50
- * ESC 恢复:恢复指定 key 的 totalPhaseEventCounts(由 PipelineEngine 在从 DB 加载时调用)
51
- */
52
- restoreEventCount(key: string, count: number): void;
53
- /**
54
- * 恢复指定 key 的阶段推进状态(daemon_state 持久化)
55
- */
56
- restorePhaseState(key: string, state: {
57
- toolsSeen?: string[];
58
- eventCount?: number;
59
- fixAttempts?: number;
60
- writeEditCount?: number;
61
- recentTools?: string[];
62
- }): void;
63
- /**
64
- * 导出指定 key 的阶段推进状态(用于持久化到 daemon_state)
65
- */
66
- exportPhaseState(key: string): {
67
- toolsSeen: string[];
68
- eventCount: number;
69
- fixAttempts: number;
70
- writeEditCount: number;
71
- recentTools: string[];
72
- };
73
- /**
74
- * 重置指定 Pipeline 的质量门禁修复计数(新 Pipeline 启动或用户手动重试时调用)
75
- */
76
- resetFixAttempts(pipelineId: string): void;
77
- /**
78
- * 获取当前节点指令(INodeExecutor 接口)
79
- */
80
- getInstruction(pipeline: Pipeline): string;
81
- /**
82
- * 恢复节点状态(INodeExecutor 接口)
83
- */
84
- restoreState(key: string, state: NodeExecutorState): void;
85
- /**
86
- * 导出节点状态(INodeExecutor 接口)
87
- */
88
- exportState(key: string): NodeExecutorState;
89
- /**
90
- * 生成当前阶段的执行指令(注入 additionalContext)
91
- */
92
- getPhaseInstruction(pipeline: Pipeline): string;
93
- /**
94
- * 根据 PostToolUse 事件判断是否推进阶段(重构版:职责分离 + 信号优先)
95
- */
96
- checkAndAdvance(pipeline: Pipeline, event: ForgeEvent, qualityGate?: QualityGateEngine): Promise<{
97
- advanced: boolean;
98
- newPhase?: PipelinePhase;
99
- qualityBlocked?: boolean;
100
- qualityIssues?: string[];
101
- systemMessage?: string;
102
- gapMessage?: string;
103
- qualityLevel?: 'pass' | 'warn' | 'fail';
104
- fixAttempts?: number;
105
- advanceReason?: 'task_complete' | 'activity_threshold' | 'empty_phase';
106
- blocking?: boolean;
107
- artifactBlocked?: boolean;
108
- artifactReminder?: string;
109
- }>;
110
- /**
111
- * 1. 工具追踪:记录工具类别、调用次数、最近工具
112
- */
113
- private trackToolUsage;
114
- /**
115
- * 2. 空阶段自愈:当前阶段无任务时自动推进
116
- */
117
- private handleEmptyPhase;
118
- /**
119
- * 3. 任务完成检测:优先显式信号,回退到启发式
120
- */
121
- private detectAndMarkCompletion;
122
- /**
123
- * 4. 活动阈值检测:达到阈值且检测到停滞后才强制完成剩余任务
124
- *
125
- * 改进逻辑(v1.2.4):
126
- * - 仅达到阈值不再直接强制完成,需同时满足"停滞"条件
127
- * - 停滞定义:最近工具调用全为只读操作,或 Write/Edit 占比极低
128
- * - 达到阈值但仍有进展时,注入提醒而非强制完成
129
- */
130
- private handleActivityThreshold;
131
- /**
132
- * 判断当前阶段是否处于停滞状态(无实质性进展)
133
- *
134
- * 按阶段差异化策略:
135
- * - analyze/design:以阅读/思考为主,只有「超过阈值 1.5 倍且仍无任何文档写入」才算停滞
136
- * - profile:以命令执行和报告产出为主,只有「超过阈值后最近连续 5 次都无 Bash/Write/Edit」才算停滞
137
- * - code/test/review:以写入产出为主,只有「超过阈值后最近连续 5 次只读」或「超过阈值 1.5 倍且写入占比极低」才算停滞
138
- *
139
- * 通用兜底:事件数超过阈值 2 倍时无条件视为停滞(防止无限循环)
140
- */
141
- private isStagnant;
142
- /**
143
- * analyze/design:允许长时间阅读和思考。
144
- * 只有在完全没有任何写入产出且明显超时后,才视为停滞。
145
- *
146
- * 修复:如果写入量很大(超过阈值 1.5 倍),也应视为可能完成,触发推进检查
147
- */
148
- private isStagnantForThinkingPhase;
149
- /**
150
- * profile:允许 Bash 执行、报告写入混合工作流。
151
- */
152
- private isStagnantForProfilePhase;
153
- /**
154
- * code/test/review:应有持续写入产出。
155
- */
156
- private isStagnantForWritingPhase;
157
- /**
158
- * 5. 质量门禁(去重版):已通过的阶段不再重复检查,活动阈值触发时跳过
159
- */
160
- private runQualityGateOnce;
161
- /**
162
- * 6. 阶段推进
163
- */
164
- private advancePhase;
165
- /**
166
- * 获取项目目录中最近 N 分钟内修改的文件列表(相对路径)
167
- * 用于增强质量门禁的 phaseContext,让 AI 有实际依据
168
- */
169
- private getRecentlyModifiedFiles;
170
- /** 每个阶段兜底推进所需的最少工具调用次数(按复杂度动态调整) */
171
- private getPhaseActivityThreshold;
172
- private getPhaseDirective;
173
- /**
174
- * 检测任务是否完成(重构版:信号优先 + 启发式回退)
175
- */
176
- private detectTaskCompletion;
177
- /**
178
- * 将工具调用归类为粗粒度的工具类别(用于多样性判定)
179
- */
180
- private categorizeToolCall;
181
- /**
182
- * 从工具调用中提取成果摘要(文件路径、命令、操作类型)
183
- */
184
- private summarizeArtifact;
185
- /**
186
- * 获取 Pipeline 的阶段快照(用于复盘分析)
187
- */
188
- getSessionSnapshot(pipelineId: string): PhaseSnapshot[];
189
- }
190
- //# sourceMappingURL=phase-manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"phase-manager.d.ts","sourceRoot":"","sources":["../../src/pipeline/phase-manager.ts"],"names":[],"mappings":"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"}