@winspan/claude-forge 0.6.8 → 0.7.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 (77) hide show
  1. package/dist/ai-gateway/index.d.ts.map +1 -1
  2. package/dist/ai-gateway/index.js +8 -1
  3. package/dist/ai-gateway/index.js.map +1 -1
  4. package/dist/daemon/handlers/context-builder.d.ts +7 -5
  5. package/dist/daemon/handlers/context-builder.d.ts.map +1 -1
  6. package/dist/daemon/handlers/context-builder.js +29 -26
  7. package/dist/daemon/handlers/context-builder.js.map +1 -1
  8. package/dist/daemon/handlers/orchestration-context.d.ts +5 -0
  9. package/dist/daemon/handlers/orchestration-context.d.ts.map +1 -1
  10. package/dist/daemon/handlers/stages/01-failure-signal.d.ts.map +1 -1
  11. package/dist/daemon/handlers/stages/01-failure-signal.js +1 -0
  12. package/dist/daemon/handlers/stages/01-failure-signal.js.map +1 -1
  13. package/dist/daemon/handlers/stages/04-skill-suggestions.js +1 -1
  14. package/dist/daemon/handlers/stages/04-skill-suggestions.js.map +1 -1
  15. package/dist/daemon/handlers/stages/07-pipeline-reply.d.ts.map +1 -1
  16. package/dist/daemon/handlers/stages/07-pipeline-reply.js +2 -0
  17. package/dist/daemon/handlers/stages/07-pipeline-reply.js.map +1 -1
  18. package/dist/daemon/handlers/stages/10-cooldown.d.ts.map +1 -1
  19. package/dist/daemon/handlers/stages/10-cooldown.js +21 -0
  20. package/dist/daemon/handlers/stages/10-cooldown.js.map +1 -1
  21. package/dist/daemon/handlers/stages/11-intent-analysis.d.ts +2 -0
  22. package/dist/daemon/handlers/stages/11-intent-analysis.d.ts.map +1 -1
  23. package/dist/daemon/handlers/stages/11-intent-analysis.js +44 -5
  24. package/dist/daemon/handlers/stages/11-intent-analysis.js.map +1 -1
  25. package/dist/daemon/handlers/stages/17-simple-task.js +1 -1
  26. package/dist/daemon/handlers/stages/17-simple-task.js.map +1 -1
  27. package/dist/daemon/handlers/stages/18-complex-task.d.ts +2 -0
  28. package/dist/daemon/handlers/stages/18-complex-task.d.ts.map +1 -1
  29. package/dist/daemon/handlers/stages/18-complex-task.js +52 -4
  30. package/dist/daemon/handlers/stages/18-complex-task.js.map +1 -1
  31. package/dist/daemon/handlers/stages/19-moderate-task.d.ts +2 -0
  32. package/dist/daemon/handlers/stages/19-moderate-task.d.ts.map +1 -1
  33. package/dist/daemon/handlers/stages/19-moderate-task.js +22 -2
  34. package/dist/daemon/handlers/stages/19-moderate-task.js.map +1 -1
  35. package/dist/daemon/handlers/stages/stage-interface.d.ts +4 -1
  36. package/dist/daemon/handlers/stages/stage-interface.d.ts.map +1 -1
  37. package/dist/daemon/handlers/user-prompt-handler.d.ts +9 -0
  38. package/dist/daemon/handlers/user-prompt-handler.d.ts.map +1 -1
  39. package/dist/daemon/handlers/user-prompt-handler.js +107 -7
  40. package/dist/daemon/handlers/user-prompt-handler.js.map +1 -1
  41. package/dist/storage/repositories/base-repository.d.ts +6 -0
  42. package/dist/storage/repositories/base-repository.d.ts.map +1 -1
  43. package/dist/storage/repositories/base-repository.js +23 -0
  44. package/dist/storage/repositories/base-repository.js.map +1 -1
  45. package/dist/storage/repositories/event-repository.d.ts.map +1 -1
  46. package/dist/storage/repositories/event-repository.js +96 -87
  47. package/dist/storage/repositories/event-repository.js.map +1 -1
  48. package/dist/storage/repositories/graph-traversal.d.ts +37 -0
  49. package/dist/storage/repositories/graph-traversal.d.ts.map +1 -0
  50. package/dist/storage/repositories/graph-traversal.js +157 -0
  51. package/dist/storage/repositories/graph-traversal.js.map +1 -0
  52. package/dist/storage/repositories/knowledge-repository.d.ts +14 -0
  53. package/dist/storage/repositories/knowledge-repository.d.ts.map +1 -1
  54. package/dist/storage/repositories/knowledge-repository.js +22 -0
  55. package/dist/storage/repositories/knowledge-repository.js.map +1 -1
  56. package/dist/storage/repositories/latency-repository.d.ts.map +1 -1
  57. package/dist/storage/repositories/latency-repository.js +2 -5
  58. package/dist/storage/repositories/latency-repository.js.map +1 -1
  59. package/dist/storage/repositories/maintenance-repository.d.ts +3 -0
  60. package/dist/storage/repositories/maintenance-repository.d.ts.map +1 -1
  61. package/dist/storage/repositories/maintenance-repository.js +12 -3
  62. package/dist/storage/repositories/maintenance-repository.js.map +1 -1
  63. package/dist/storage/repositories/task-repository.d.ts.map +1 -1
  64. package/dist/storage/repositories/task-repository.js +16 -11
  65. package/dist/storage/repositories/task-repository.js.map +1 -1
  66. package/dist/storage/sqlite.d.ts.map +1 -1
  67. package/dist/storage/sqlite.js +16 -1
  68. package/dist/storage/sqlite.js.map +1 -1
  69. package/dist/utils/error-handler.d.ts +39 -0
  70. package/dist/utils/error-handler.d.ts.map +1 -0
  71. package/dist/utils/error-handler.js +155 -0
  72. package/dist/utils/error-handler.js.map +1 -0
  73. package/dist/utils/stage-trace.d.ts +74 -0
  74. package/dist/utils/stage-trace.d.ts.map +1 -0
  75. package/dist/utils/stage-trace.js +125 -0
  76. package/dist/utils/stage-trace.js.map +1 -0
  77. package/package.json +1 -1
@@ -0,0 +1,155 @@
1
+ import { logger } from './logger.js';
2
+ /** 错误类型分类 */
3
+ export var ErrorType;
4
+ (function (ErrorType) {
5
+ /** 网络错误(可重试) */
6
+ ErrorType["NETWORK"] = "network";
7
+ /** 速率限制(可重试,需延迟) */
8
+ ErrorType["RATE_LIMIT"] = "rate_limit";
9
+ /** 超时(可重试) */
10
+ ErrorType["TIMEOUT"] = "timeout";
11
+ /** 数据库错误(可重试) */
12
+ ErrorType["DATABASE"] = "database";
13
+ /** 业务逻辑错误(不可重试) */
14
+ ErrorType["BUSINESS"] = "business";
15
+ /** 未知错误 */
16
+ ErrorType["UNKNOWN"] = "unknown";
17
+ })(ErrorType || (ErrorType = {}));
18
+ /** 默认错误策略 */
19
+ const DEFAULT_STRATEGIES = {
20
+ [ErrorType.NETWORK]: {
21
+ retryable: true,
22
+ maxRetries: 3,
23
+ retryDelayMs: 1000,
24
+ exponentialBackoff: true,
25
+ },
26
+ [ErrorType.RATE_LIMIT]: {
27
+ retryable: true,
28
+ maxRetries: 2,
29
+ retryDelayMs: 5000,
30
+ exponentialBackoff: false,
31
+ },
32
+ [ErrorType.TIMEOUT]: {
33
+ retryable: true,
34
+ maxRetries: 2,
35
+ retryDelayMs: 2000,
36
+ exponentialBackoff: true,
37
+ },
38
+ [ErrorType.DATABASE]: {
39
+ retryable: true,
40
+ maxRetries: 3,
41
+ retryDelayMs: 500,
42
+ exponentialBackoff: true,
43
+ },
44
+ [ErrorType.BUSINESS]: {
45
+ retryable: false,
46
+ maxRetries: 0,
47
+ retryDelayMs: 0,
48
+ exponentialBackoff: false,
49
+ },
50
+ [ErrorType.UNKNOWN]: {
51
+ retryable: true,
52
+ maxRetries: 1,
53
+ retryDelayMs: 1000,
54
+ exponentialBackoff: false,
55
+ },
56
+ };
57
+ /** 错误分类器 */
58
+ export function classifyError(error) {
59
+ if (!(error instanceof Error))
60
+ return ErrorType.UNKNOWN;
61
+ const message = error.message.toLowerCase();
62
+ const name = error.name.toLowerCase();
63
+ // 网络错误
64
+ if (message.includes('network') ||
65
+ message.includes('econnrefused') ||
66
+ message.includes('enotfound') ||
67
+ message.includes('etimedout') ||
68
+ name.includes('fetch')) {
69
+ return ErrorType.NETWORK;
70
+ }
71
+ // 速率限制
72
+ if (message.includes('rate limit') ||
73
+ message.includes('too many requests') ||
74
+ message.includes('429')) {
75
+ return ErrorType.RATE_LIMIT;
76
+ }
77
+ // 超时
78
+ if (message.includes('timeout') ||
79
+ message.includes('timed out') ||
80
+ name.includes('timeout')) {
81
+ return ErrorType.TIMEOUT;
82
+ }
83
+ // 数据库错误
84
+ if (message.includes('sqlite') ||
85
+ message.includes('database') ||
86
+ message.includes('locked') ||
87
+ message.includes('busy')) {
88
+ return ErrorType.DATABASE;
89
+ }
90
+ // 业务逻辑错误(明确标记的)
91
+ if (name.includes('business') || name.includes('validation')) {
92
+ return ErrorType.BUSINESS;
93
+ }
94
+ return ErrorType.UNKNOWN;
95
+ }
96
+ /** 延迟函数 */
97
+ function delay(ms) {
98
+ return new Promise(resolve => setTimeout(resolve, ms));
99
+ }
100
+ /** 重试包装器 */
101
+ export async function withRetry(fn, context, customStrategy) {
102
+ let lastError;
103
+ let attempt = 0;
104
+ while (true) {
105
+ try {
106
+ return await fn();
107
+ }
108
+ catch (error) {
109
+ lastError = error;
110
+ const errorType = classifyError(error);
111
+ const strategy = { ...DEFAULT_STRATEGIES[errorType], ...customStrategy };
112
+ attempt++;
113
+ if (!strategy.retryable || attempt > strategy.maxRetries) {
114
+ logger.error(`[错误处理] ${context} 失败(${errorType}),已达最大重试次数 ${strategy.maxRetries}`);
115
+ throw error;
116
+ }
117
+ const delayMs = strategy.exponentialBackoff
118
+ ? strategy.retryDelayMs * Math.pow(2, attempt - 1)
119
+ : strategy.retryDelayMs;
120
+ logger.warn(`[错误处理] ${context} 失败(${errorType}),${delayMs}ms 后重试(${attempt}/${strategy.maxRetries}):${error}`);
121
+ await delay(delayMs);
122
+ }
123
+ }
124
+ }
125
+ /** 带降级的执行包装器 */
126
+ export async function withFallback(fn, fallback, context) {
127
+ try {
128
+ return await fn();
129
+ }
130
+ catch (error) {
131
+ logger.warn(`[错误处理] ${context} 失败,使用降级方案:${error}`);
132
+ return await fallback();
133
+ }
134
+ }
135
+ /** 组合:重试 + 降级 */
136
+ export async function withRetryAndFallback(fn, fallback, context, customStrategy) {
137
+ try {
138
+ return await withRetry(fn, context, customStrategy);
139
+ }
140
+ catch (error) {
141
+ logger.warn(`[错误处理] ${context} 重试失败,使用降级方案:${error}`);
142
+ return await fallback();
143
+ }
144
+ }
145
+ /** 静默错误(仅记录日志,不抛出) */
146
+ export async function withSilentError(fn, context, defaultValue) {
147
+ try {
148
+ return await fn();
149
+ }
150
+ catch (error) {
151
+ logger.debug(`[错误处理] ${context} 失败(已静默):${error}`);
152
+ return defaultValue;
153
+ }
154
+ }
155
+ //# sourceMappingURL=error-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/utils/error-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Stage 执行透明度追踪
3
+ * 记录每个 Stage 的决策依据、执行动作、产出结果
4
+ */
5
+ export interface StageTrace {
6
+ /** Stage 名称 */
7
+ stage: string;
8
+ /** Stage 索引(1-based) */
9
+ index: number;
10
+ /** 开始时间戳 */
11
+ startTs: number;
12
+ /** 结束时间戳 */
13
+ endTs?: number;
14
+ /** 执行状态 */
15
+ status: 'running' | 'success' | 'fallback' | 'error' | 'skipped';
16
+ /** 决策依据:使用了哪些规范/规则/上下文 */
17
+ decisionBasis?: {
18
+ conventions?: string[];
19
+ rules?: string[];
20
+ context?: string[];
21
+ };
22
+ /** 决策原因:为什么做这个决定 */
23
+ decisionReason?: string;
24
+ /** 执行动作:具体做了什么 */
25
+ executionAction?: string;
26
+ /** 执行结果:产出了什么 */
27
+ executionResult?: {
28
+ type: 'terminate' | 'continue' | 'skip';
29
+ artifact?: string;
30
+ summary?: string;
31
+ };
32
+ /** 错误信息(如果失败) */
33
+ error?: string;
34
+ }
35
+ /**
36
+ * Stage 追踪日志器
37
+ * 提供结构化的 Stage 执行记录能力
38
+ */
39
+ export declare class StageTraceLogger {
40
+ private traces;
41
+ /** 开始追踪一个 Stage */
42
+ start(stage: string, index: number): void;
43
+ /** 记录决策依据 */
44
+ recordDecision(stage: string, basis: {
45
+ conventions?: string[];
46
+ rules?: string[];
47
+ context?: string[];
48
+ }, reason: string): void;
49
+ /** 记录执行动作 */
50
+ recordAction(stage: string, action: string): void;
51
+ /** 记录执行结果 */
52
+ recordResult(stage: string, result: {
53
+ type: 'terminate' | 'continue' | 'skip';
54
+ artifact?: string;
55
+ summary?: string;
56
+ }): void;
57
+ /** 标记 Stage 成功完成 */
58
+ success(stage: string): void;
59
+ /** 标记 Stage 降级处理 */
60
+ fallback(stage: string, error: string): void;
61
+ /** 标记 Stage 失败 */
62
+ error(stage: string, error: string): void;
63
+ /** 标记 Stage 跳过 */
64
+ skip(stage: string): void;
65
+ /** 获取所有追踪记录 */
66
+ getTraces(): StageTrace[];
67
+ /** 获取简明摘要(用户友好) */
68
+ getSummary(): string;
69
+ /** 获取完整 JSON(调试用) */
70
+ getJSON(): string;
71
+ private findTrace;
72
+ private getStatusIcon;
73
+ }
74
+ //# sourceMappingURL=stage-trace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stage-trace.d.ts","sourceRoot":"","sources":["../../src/utils/stage-trace.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACzB,eAAe;IACf,KAAK,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW;IACX,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,CAAC;IACjE,0BAA0B;IAC1B,aAAa,CAAC,EAAE;QACd,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,oBAAoB;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB;IACjB,eAAe,CAAC,EAAE;QAChB,IAAI,EAAE,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC;QACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAoB;IAElC,mBAAmB;IACnB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IASzC,aAAa;IACb,cAAc,CACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,EACvE,MAAM,EAAE,MAAM,GACb,IAAI;IAQP,aAAa;IACb,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAOjD,aAAa;IACb,YAAY,CACV,KAAK,EAAE,MAAM,EACb,MAAM,EAAE;QACN,IAAI,EAAE,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC;QACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GACA,IAAI;IAOP,oBAAoB;IACpB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ5B,oBAAoB;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAS5C,kBAAkB;IAClB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IASzC,kBAAkB;IAClB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQzB,eAAe;IACf,SAAS,IAAI,UAAU,EAAE;IAIzB,mBAAmB;IACnB,UAAU,IAAI,MAAM;IAwBpB,qBAAqB;IACrB,OAAO,IAAI,MAAM;IAIjB,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,aAAa;CAStB"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Stage 执行透明度追踪
3
+ * 记录每个 Stage 的决策依据、执行动作、产出结果
4
+ */
5
+ /**
6
+ * Stage 追踪日志器
7
+ * 提供结构化的 Stage 执行记录能力
8
+ */
9
+ export class StageTraceLogger {
10
+ traces = [];
11
+ /** 开始追踪一个 Stage */
12
+ start(stage, index) {
13
+ this.traces.push({
14
+ stage,
15
+ index,
16
+ startTs: Date.now(),
17
+ status: 'running',
18
+ });
19
+ }
20
+ /** 记录决策依据 */
21
+ recordDecision(stage, basis, reason) {
22
+ const trace = this.findTrace(stage);
23
+ if (trace) {
24
+ trace.decisionBasis = basis;
25
+ trace.decisionReason = reason;
26
+ }
27
+ }
28
+ /** 记录执行动作 */
29
+ recordAction(stage, action) {
30
+ const trace = this.findTrace(stage);
31
+ if (trace) {
32
+ trace.executionAction = action;
33
+ }
34
+ }
35
+ /** 记录执行结果 */
36
+ recordResult(stage, result) {
37
+ const trace = this.findTrace(stage);
38
+ if (trace) {
39
+ trace.executionResult = result;
40
+ }
41
+ }
42
+ /** 标记 Stage 成功完成 */
43
+ success(stage) {
44
+ const trace = this.findTrace(stage);
45
+ if (trace) {
46
+ trace.status = 'success';
47
+ trace.endTs = Date.now();
48
+ }
49
+ }
50
+ /** 标记 Stage 降级处理 */
51
+ fallback(stage, error) {
52
+ const trace = this.findTrace(stage);
53
+ if (trace) {
54
+ trace.status = 'fallback';
55
+ trace.error = error;
56
+ trace.endTs = Date.now();
57
+ }
58
+ }
59
+ /** 标记 Stage 失败 */
60
+ error(stage, error) {
61
+ const trace = this.findTrace(stage);
62
+ if (trace) {
63
+ trace.status = 'error';
64
+ trace.error = error;
65
+ trace.endTs = Date.now();
66
+ }
67
+ }
68
+ /** 标记 Stage 跳过 */
69
+ skip(stage) {
70
+ const trace = this.findTrace(stage);
71
+ if (trace) {
72
+ trace.status = 'skipped';
73
+ trace.endTs = Date.now();
74
+ }
75
+ }
76
+ /** 获取所有追踪记录 */
77
+ getTraces() {
78
+ return this.traces;
79
+ }
80
+ /** 获取简明摘要(用户友好) */
81
+ getSummary() {
82
+ const lines = [];
83
+ for (const trace of this.traces) {
84
+ const duration = trace.endTs ? `${trace.endTs - trace.startTs}ms` : '进行中';
85
+ const statusIcon = this.getStatusIcon(trace.status);
86
+ lines.push(`${statusIcon} [${trace.index}] ${trace.stage} (${duration})`);
87
+ if (trace.decisionReason) {
88
+ lines.push(` 决策:${trace.decisionReason}`);
89
+ }
90
+ if (trace.executionAction) {
91
+ lines.push(` 动作:${trace.executionAction}`);
92
+ }
93
+ if (trace.executionResult?.summary) {
94
+ lines.push(` 结果:${trace.executionResult.summary}`);
95
+ }
96
+ if (trace.error) {
97
+ lines.push(` 错误:${trace.error}`);
98
+ }
99
+ }
100
+ return lines.join('\n');
101
+ }
102
+ /** 获取完整 JSON(调试用) */
103
+ getJSON() {
104
+ return JSON.stringify(this.traces, null, 2);
105
+ }
106
+ findTrace(stage) {
107
+ // 从后往前找,支持同名 Stage 多次执行
108
+ for (let i = this.traces.length - 1; i >= 0; i--) {
109
+ if (this.traces[i].stage === stage && this.traces[i].status === 'running') {
110
+ return this.traces[i];
111
+ }
112
+ }
113
+ return undefined;
114
+ }
115
+ getStatusIcon(status) {
116
+ switch (status) {
117
+ case 'success': return '✓';
118
+ case 'fallback': return '⚠';
119
+ case 'error': return '✗';
120
+ case 'skipped': return '○';
121
+ case 'running': return '●';
122
+ }
123
+ }
124
+ }
125
+ //# sourceMappingURL=stage-trace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stage-trace.js","sourceRoot":"","sources":["../../src/utils/stage-trace.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@winspan/claude-forge",
3
- "version": "0.6.8",
3
+ "version": "0.7.0",
4
4
  "description": "SDLC intelligent orchestration engine for Claude Code",
5
5
  "main": "dist/cli/index.js",
6
6
  "type": "module",