@dommaker/harness 0.7.2 → 0.7.4

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 (121) hide show
  1. package/README.md +390 -5
  2. package/dist/architecture/constraint-engine.d.ts +49 -0
  3. package/dist/architecture/constraint-engine.d.ts.map +1 -0
  4. package/dist/architecture/constraint-engine.js +207 -0
  5. package/dist/architecture/constraint-engine.js.map +1 -0
  6. package/dist/architecture/cross-project-checker.d.ts +34 -0
  7. package/dist/architecture/cross-project-checker.d.ts.map +1 -0
  8. package/dist/architecture/cross-project-checker.js +260 -0
  9. package/dist/architecture/cross-project-checker.js.map +1 -0
  10. package/dist/context/progressive-loader.d.ts +110 -0
  11. package/dist/context/progressive-loader.d.ts.map +1 -0
  12. package/dist/context/progressive-loader.js +183 -0
  13. package/dist/context/progressive-loader.js.map +1 -0
  14. package/dist/context/token-budget.d.ts +144 -0
  15. package/dist/context/token-budget.d.ts.map +1 -0
  16. package/dist/context/token-budget.js +264 -0
  17. package/dist/context/token-budget.js.map +1 -0
  18. package/dist/core/constraints/definitions.d.ts.map +1 -1
  19. package/dist/core/constraints/definitions.js +33 -0
  20. package/dist/core/constraints/definitions.js.map +1 -1
  21. package/dist/core/index.d.ts +2 -0
  22. package/dist/core/index.d.ts.map +1 -1
  23. package/dist/core/index.js +4 -0
  24. package/dist/core/index.js.map +1 -1
  25. package/dist/failure/classifier.d.ts +63 -0
  26. package/dist/failure/classifier.d.ts.map +1 -0
  27. package/dist/failure/classifier.js +123 -0
  28. package/dist/failure/classifier.js.map +1 -0
  29. package/dist/failure/index.d.ts +10 -0
  30. package/dist/failure/index.d.ts.map +1 -0
  31. package/dist/failure/index.js +36 -0
  32. package/dist/failure/index.js.map +1 -0
  33. package/dist/failure/recorder.d.ts +78 -0
  34. package/dist/failure/recorder.d.ts.map +1 -0
  35. package/dist/failure/recorder.js +193 -0
  36. package/dist/failure/recorder.js.map +1 -0
  37. package/dist/failure/types.d.ts +89 -0
  38. package/dist/failure/types.d.ts.map +1 -0
  39. package/dist/failure/types.js +121 -0
  40. package/dist/failure/types.js.map +1 -0
  41. package/dist/gates/acceptance.d.ts +159 -0
  42. package/dist/gates/acceptance.d.ts.map +1 -0
  43. package/dist/gates/acceptance.js +368 -0
  44. package/dist/gates/acceptance.js.map +1 -0
  45. package/dist/gates/contract.d.ts +41 -0
  46. package/dist/gates/contract.d.ts.map +1 -0
  47. package/dist/gates/contract.js +264 -0
  48. package/dist/gates/contract.js.map +1 -0
  49. package/dist/gates/index.d.ts +23 -0
  50. package/dist/gates/index.d.ts.map +1 -0
  51. package/dist/gates/index.js +46 -0
  52. package/dist/gates/index.js.map +1 -0
  53. package/dist/gates/performance.d.ts +81 -0
  54. package/dist/gates/performance.d.ts.map +1 -0
  55. package/dist/gates/performance.js +336 -0
  56. package/dist/gates/performance.js.map +1 -0
  57. package/dist/gates/review.d.ts +37 -0
  58. package/dist/gates/review.d.ts.map +1 -0
  59. package/dist/gates/review.js +149 -0
  60. package/dist/gates/review.js.map +1 -0
  61. package/dist/gates/security.d.ts +45 -0
  62. package/dist/gates/security.d.ts.map +1 -0
  63. package/dist/gates/security.js +221 -0
  64. package/dist/gates/security.js.map +1 -0
  65. package/dist/gates/types.d.ts +115 -0
  66. package/dist/gates/types.d.ts.map +1 -0
  67. package/dist/gates/types.js +6 -0
  68. package/dist/gates/types.js.map +1 -0
  69. package/dist/index.d.ts +15 -1
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +30 -5
  72. package/dist/index.js.map +1 -1
  73. package/dist/monitoring/index.d.ts +6 -0
  74. package/dist/monitoring/index.d.ts.map +1 -1
  75. package/dist/monitoring/index.js +6 -0
  76. package/dist/monitoring/index.js.map +1 -1
  77. package/dist/monitoring/performance-analyzer.d.ts +104 -0
  78. package/dist/monitoring/performance-analyzer.d.ts.map +1 -0
  79. package/dist/monitoring/performance-analyzer.js +417 -0
  80. package/dist/monitoring/performance-analyzer.js.map +1 -0
  81. package/dist/monitoring/performance-collector.d.ts +111 -0
  82. package/dist/monitoring/performance-collector.d.ts.map +1 -0
  83. package/dist/monitoring/performance-collector.js +319 -0
  84. package/dist/monitoring/performance-collector.js.map +1 -0
  85. package/dist/monitoring/trace-analyzer.js +1 -1
  86. package/dist/monitoring/trace-analyzer.js.map +1 -1
  87. package/dist/monitoring/traces.js +1 -1
  88. package/dist/monitoring/traces.js.map +1 -1
  89. package/dist/presets/index.d.ts +0 -1
  90. package/dist/presets/index.d.ts.map +1 -1
  91. package/dist/presets/index.js +1 -6
  92. package/dist/presets/index.js.map +1 -1
  93. package/dist/spec/annotation-checker.d.ts +47 -0
  94. package/dist/spec/annotation-checker.d.ts.map +1 -0
  95. package/dist/spec/annotation-checker.js +299 -0
  96. package/dist/spec/annotation-checker.js.map +1 -0
  97. package/dist/types/index.d.ts +2 -0
  98. package/dist/types/index.d.ts.map +1 -1
  99. package/dist/types/index.js +9 -0
  100. package/dist/types/index.js.map +1 -1
  101. package/dist/types/performance.d.ts +204 -0
  102. package/dist/types/performance.d.ts.map +1 -0
  103. package/dist/types/performance.js +12 -0
  104. package/dist/types/performance.js.map +1 -0
  105. package/package.json +3 -1
  106. package/dist/extensions/long-running/constraints.d.ts +0 -38
  107. package/dist/extensions/long-running/constraints.d.ts.map +0 -1
  108. package/dist/extensions/long-running/constraints.js +0 -153
  109. package/dist/extensions/long-running/constraints.js.map +0 -1
  110. package/dist/extensions/long-running/index.d.ts +0 -30
  111. package/dist/extensions/long-running/index.d.ts.map +0 -1
  112. package/dist/extensions/long-running/index.js +0 -50
  113. package/dist/extensions/long-running/index.js.map +0 -1
  114. package/dist/extensions/long-running/types.d.ts +0 -154
  115. package/dist/extensions/long-running/types.d.ts.map +0 -1
  116. package/dist/extensions/long-running/types.js +0 -9
  117. package/dist/extensions/long-running/types.js.map +0 -1
  118. package/dist/presets/long-running.d.ts +0 -33
  119. package/dist/presets/long-running.d.ts.map +0 -1
  120. package/dist/presets/long-running.js +0 -52
  121. package/dist/presets/long-running.js.map +0 -1
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ /**
3
+ * 错误分类器
4
+ *
5
+ * 纯函数分类能力,不包含业务逻辑
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.ErrorClassifier = void 0;
9
+ exports.createErrorClassifier = createErrorClassifier;
10
+ exports.classifyError = classifyError;
11
+ exports.getFailureLevel = getFailureLevel;
12
+ const types_1 = require("./types");
13
+ /**
14
+ * 错误分类器
15
+ *
16
+ * 用法:
17
+ * ```typescript
18
+ * const classifier = new ErrorClassifier();
19
+ * const result = classifier.classify(new Error('test failed'));
20
+ * // result.type === ErrorType.TEST_FAILED
21
+ * ```
22
+ */
23
+ class ErrorClassifier {
24
+ rules;
25
+ levelMapping;
26
+ constructor(config) {
27
+ // 合并默认规则和自定义规则
28
+ this.rules = config?.rules
29
+ ? [...config.rules, ...types_1.DEFAULT_CLASSIFICATION_RULES]
30
+ : types_1.DEFAULT_CLASSIFICATION_RULES;
31
+ // 合并默认等级映射和自定义映射
32
+ this.levelMapping = {
33
+ ...types_1.DEFAULT_LEVEL_MAPPING,
34
+ ...config?.levelMapping,
35
+ };
36
+ }
37
+ /**
38
+ * 分类错误
39
+ */
40
+ classify(error) {
41
+ const message = error.message.toLowerCase();
42
+ const name = error.name?.toLowerCase() || '';
43
+ // 遍历规则,按优先级匹配
44
+ for (const rule of this.rules) {
45
+ if (this.matchRule(message, name, rule)) {
46
+ return {
47
+ type: rule.type,
48
+ level: rule.level ?? this.levelMapping[rule.type],
49
+ matchedRule: rule,
50
+ originalError: error,
51
+ };
52
+ }
53
+ }
54
+ // 未知错误
55
+ return {
56
+ type: types_1.ErrorType.UNKNOWN,
57
+ level: this.levelMapping[types_1.ErrorType.UNKNOWN],
58
+ originalError: error,
59
+ };
60
+ }
61
+ /**
62
+ * 获取错误类型对应的失败等级
63
+ */
64
+ getLevel(type) {
65
+ return this.levelMapping[type] ?? types_1.FailureLevel.L2;
66
+ }
67
+ /**
68
+ * 添加自定义规则
69
+ */
70
+ addRule(rule) {
71
+ // 自定义规则插入到前面,优先匹配
72
+ this.rules.unshift(rule);
73
+ }
74
+ /**
75
+ * 获取所有规则
76
+ */
77
+ getRules() {
78
+ return [...this.rules];
79
+ }
80
+ /**
81
+ * 匹配规则
82
+ */
83
+ matchRule(message, name, rule) {
84
+ // 检查关键词
85
+ if (rule.keywords && rule.keywords.length > 0) {
86
+ const textToMatch = `${message} ${name}`;
87
+ const hasKeyword = rule.keywords.some((kw) => textToMatch.includes(kw.toLowerCase()));
88
+ if (hasKeyword) {
89
+ return true;
90
+ }
91
+ }
92
+ // 检查正则模式
93
+ if (rule.patterns && rule.patterns.length > 0) {
94
+ const textToMatch = `${message} ${name}`;
95
+ const hasPattern = rule.patterns.some((pattern) => pattern.test(textToMatch));
96
+ if (hasPattern) {
97
+ return true;
98
+ }
99
+ }
100
+ return false;
101
+ }
102
+ }
103
+ exports.ErrorClassifier = ErrorClassifier;
104
+ /**
105
+ * 创建错误分类器
106
+ */
107
+ function createErrorClassifier(config) {
108
+ return new ErrorClassifier(config);
109
+ }
110
+ /**
111
+ * 快速分类错误(无需创建实例)
112
+ */
113
+ function classifyError(error) {
114
+ const classifier = new ErrorClassifier();
115
+ return classifier.classify(error).type;
116
+ }
117
+ /**
118
+ * 快速获取失败等级
119
+ */
120
+ function getFailureLevel(type) {
121
+ return types_1.DEFAULT_LEVEL_MAPPING[type] ?? types_1.FailureLevel.L2;
122
+ }
123
+ //# sourceMappingURL=classifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classifier.js","sourceRoot":"","sources":["../../src/failure/classifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * 失败处理模块
3
+ *
4
+ * 提供通用的错误分类和记录能力
5
+ * 不包含业务逻辑
6
+ */
7
+ export * from './types';
8
+ export { ErrorClassifier, createErrorClassifier, classifyError, getFailureLevel, type ErrorClassifierConfig, } from './classifier';
9
+ export { FailureRecorder, createFailureRecorder, type FailureRecorderConfig, } from './recorder';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/failure/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,cAAc,SAAS,CAAC;AAGxB,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,eAAe,EACf,KAAK,qBAAqB,GAC3B,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,KAAK,qBAAqB,GAC3B,MAAM,YAAY,CAAC"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ /**
3
+ * 失败处理模块
4
+ *
5
+ * 提供通用的错误分类和记录能力
6
+ * 不包含业务逻辑
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
20
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
21
+ };
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.createFailureRecorder = exports.FailureRecorder = exports.getFailureLevel = exports.classifyError = exports.createErrorClassifier = exports.ErrorClassifier = void 0;
24
+ // 类型
25
+ __exportStar(require("./types"), exports);
26
+ // 分类器
27
+ var classifier_1 = require("./classifier");
28
+ Object.defineProperty(exports, "ErrorClassifier", { enumerable: true, get: function () { return classifier_1.ErrorClassifier; } });
29
+ Object.defineProperty(exports, "createErrorClassifier", { enumerable: true, get: function () { return classifier_1.createErrorClassifier; } });
30
+ Object.defineProperty(exports, "classifyError", { enumerable: true, get: function () { return classifier_1.classifyError; } });
31
+ Object.defineProperty(exports, "getFailureLevel", { enumerable: true, get: function () { return classifier_1.getFailureLevel; } });
32
+ // 记录器
33
+ var recorder_1 = require("./recorder");
34
+ Object.defineProperty(exports, "FailureRecorder", { enumerable: true, get: function () { return recorder_1.FailureRecorder; } });
35
+ Object.defineProperty(exports, "createFailureRecorder", { enumerable: true, get: function () { return recorder_1.createFailureRecorder; } });
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/failure/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;AAEH,KAAK;AACL,0CAAwB;AAExB,MAAM;AACN,2CAMsB;AALpB,6GAAA,eAAe,OAAA;AACf,mHAAA,qBAAqB,OAAA;AACrB,2GAAA,aAAa,OAAA;AACb,6GAAA,eAAe,OAAA;AAIjB,MAAM;AACN,uCAIoB;AAHlB,2GAAA,eAAe,OAAA;AACf,iHAAA,qBAAqB,OAAA"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * 失败记录器
3
+ *
4
+ * 文件存储,追加写入,零 Token 成本
5
+ */
6
+ import type { FailureRecord } from './types';
7
+ /**
8
+ * 失败记录器配置
9
+ */
10
+ export interface FailureRecorderConfig {
11
+ /** 日志文件路径 */
12
+ logFile: string;
13
+ /** 单文件最大大小(字节),默认 10MB */
14
+ maxFileSize?: number;
15
+ /** 保留历史文件数,默认 5 */
16
+ maxHistoryFiles?: number;
17
+ }
18
+ /**
19
+ * 失败记录器
20
+ *
21
+ * 用法:
22
+ * ```typescript
23
+ * const recorder = new FailureRecorder({ logFile: '.harness/logs/failures.log' });
24
+ * await recorder.record({
25
+ * type: ErrorType.TEST_FAILED,
26
+ * level: FailureLevel.L1,
27
+ * message: 'Test failed',
28
+ * timestamp: Date.now(),
29
+ * });
30
+ * ```
31
+ */
32
+ export declare class FailureRecorder {
33
+ private logFile;
34
+ private maxFileSize;
35
+ private maxHistoryFiles;
36
+ constructor(config: FailureRecorderConfig);
37
+ /**
38
+ * 记录失败
39
+ */
40
+ record(record: FailureRecord): Promise<void>;
41
+ /**
42
+ * 批量记录
43
+ */
44
+ recordBatch(records: FailureRecord[]): Promise<void>;
45
+ /**
46
+ * 获取历史记录
47
+ */
48
+ getHistory(limit?: number): Promise<FailureRecord[]>;
49
+ /**
50
+ * 按类型获取记录
51
+ */
52
+ getByType(type: string, limit?: number): Promise<FailureRecord[]>;
53
+ /**
54
+ * 按等级获取记录
55
+ */
56
+ getByLevel(level: string, limit?: number): Promise<FailureRecord[]>;
57
+ /**
58
+ * 获取统计信息
59
+ */
60
+ getStats(): Promise<{
61
+ total: number;
62
+ byType: Record<string, number>;
63
+ byLevel: Record<string, number>;
64
+ }>;
65
+ /**
66
+ * 清空记录
67
+ */
68
+ clear(): Promise<void>;
69
+ /**
70
+ * 文件滚动
71
+ */
72
+ private rotateIfNeeded;
73
+ }
74
+ /**
75
+ * 创建失败记录器
76
+ */
77
+ export declare function createFailureRecorder(config: FailureRecorderConfig): FailureRecorder;
78
+ //# sourceMappingURL=recorder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recorder.d.ts","sourceRoot":"","sources":["../../src/failure/recorder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,aAAa;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,eAAe,CAAS;gBAEpB,MAAM,EAAE,qBAAqB;IAYzC;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IASlD;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAM1D;;OAEG;IACG,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAiB1D;;OAEG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAWvE;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAWzE;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACjC,CAAC;IAkBF;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B;;OAEG;YACW,cAAc;CAkC7B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,qBAAqB,GAC5B,eAAe,CAEjB"}
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ /**
3
+ * 失败记录器
4
+ *
5
+ * 文件存储,追加写入,零 Token 成本
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.FailureRecorder = void 0;
42
+ exports.createFailureRecorder = createFailureRecorder;
43
+ const fs = __importStar(require("fs"));
44
+ const path = __importStar(require("path"));
45
+ /**
46
+ * 失败记录器
47
+ *
48
+ * 用法:
49
+ * ```typescript
50
+ * const recorder = new FailureRecorder({ logFile: '.harness/logs/failures.log' });
51
+ * await recorder.record({
52
+ * type: ErrorType.TEST_FAILED,
53
+ * level: FailureLevel.L1,
54
+ * message: 'Test failed',
55
+ * timestamp: Date.now(),
56
+ * });
57
+ * ```
58
+ */
59
+ class FailureRecorder {
60
+ logFile;
61
+ maxFileSize;
62
+ maxHistoryFiles;
63
+ constructor(config) {
64
+ this.logFile = config.logFile;
65
+ this.maxFileSize = config.maxFileSize ?? 10 * 1024 * 1024; // 10MB
66
+ this.maxHistoryFiles = config.maxHistoryFiles ?? 5;
67
+ // 确保目录存在
68
+ const dir = path.dirname(this.logFile);
69
+ if (!fs.existsSync(dir)) {
70
+ fs.mkdirSync(dir, { recursive: true });
71
+ }
72
+ }
73
+ /**
74
+ * 记录失败
75
+ */
76
+ async record(record) {
77
+ // 检查文件大小,必要时滚动
78
+ await this.rotateIfNeeded();
79
+ // 追加写入(单行 JSON)
80
+ const line = JSON.stringify(record) + '\n';
81
+ fs.appendFileSync(this.logFile, line, 'utf-8');
82
+ }
83
+ /**
84
+ * 批量记录
85
+ */
86
+ async recordBatch(records) {
87
+ for (const record of records) {
88
+ await this.record(record);
89
+ }
90
+ }
91
+ /**
92
+ * 获取历史记录
93
+ */
94
+ async getHistory(limit) {
95
+ if (!fs.existsSync(this.logFile)) {
96
+ return [];
97
+ }
98
+ const content = fs.readFileSync(this.logFile, 'utf-8');
99
+ const lines = content.trim().split('\n').filter(Boolean);
100
+ const records = lines.map((line) => JSON.parse(line));
101
+ if (limit && limit > 0) {
102
+ return records.slice(-limit);
103
+ }
104
+ return records;
105
+ }
106
+ /**
107
+ * 按类型获取记录
108
+ */
109
+ async getByType(type, limit) {
110
+ const records = await this.getHistory();
111
+ const filtered = records.filter((r) => r.type === type);
112
+ if (limit && limit > 0) {
113
+ return filtered.slice(-limit);
114
+ }
115
+ return filtered;
116
+ }
117
+ /**
118
+ * 按等级获取记录
119
+ */
120
+ async getByLevel(level, limit) {
121
+ const records = await this.getHistory();
122
+ const filtered = records.filter((r) => r.level === level);
123
+ if (limit && limit > 0) {
124
+ return filtered.slice(-limit);
125
+ }
126
+ return filtered;
127
+ }
128
+ /**
129
+ * 获取统计信息
130
+ */
131
+ async getStats() {
132
+ const records = await this.getHistory();
133
+ const byType = {};
134
+ const byLevel = {};
135
+ for (const record of records) {
136
+ byType[record.type] = (byType[record.type] ?? 0) + 1;
137
+ byLevel[record.level] = (byLevel[record.level] ?? 0) + 1;
138
+ }
139
+ return {
140
+ total: records.length,
141
+ byType,
142
+ byLevel,
143
+ };
144
+ }
145
+ /**
146
+ * 清空记录
147
+ */
148
+ async clear() {
149
+ if (fs.existsSync(this.logFile)) {
150
+ fs.writeFileSync(this.logFile, '', 'utf-8');
151
+ }
152
+ }
153
+ /**
154
+ * 文件滚动
155
+ */
156
+ async rotateIfNeeded() {
157
+ if (!fs.existsSync(this.logFile)) {
158
+ return;
159
+ }
160
+ const stats = fs.statSync(this.logFile);
161
+ if (stats.size < this.maxFileSize) {
162
+ return;
163
+ }
164
+ // 滚动文件
165
+ const dir = path.dirname(this.logFile);
166
+ const ext = path.extname(this.logFile);
167
+ const base = path.basename(this.logFile, ext);
168
+ // 删除最旧的历史文件
169
+ const oldestHistory = path.join(dir, `${base}.${this.maxHistoryFiles}${ext}`);
170
+ if (fs.existsSync(oldestHistory)) {
171
+ fs.unlinkSync(oldestHistory);
172
+ }
173
+ // 重命名现有历史文件
174
+ for (let i = this.maxHistoryFiles - 1; i >= 1; i--) {
175
+ const oldFile = path.join(dir, `${base}.${i}${ext}`);
176
+ const newFile = path.join(dir, `${base}.${i + 1}${ext}`);
177
+ if (fs.existsSync(oldFile)) {
178
+ fs.renameSync(oldFile, newFile);
179
+ }
180
+ }
181
+ // 重命名当前文件
182
+ const firstHistory = path.join(dir, `${base}.1${ext}`);
183
+ fs.renameSync(this.logFile, firstHistory);
184
+ }
185
+ }
186
+ exports.FailureRecorder = FailureRecorder;
187
+ /**
188
+ * 创建失败记录器
189
+ */
190
+ function createFailureRecorder(config) {
191
+ return new FailureRecorder(config);
192
+ }
193
+ //# sourceMappingURL=recorder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recorder.js","sourceRoot":"","sources":["../../src/failure/recorder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * 失败处理类型定义
3
+ *
4
+ * 提供通用的错误分类和失败记录类型
5
+ * 不包含业务逻辑,只定义数据结构
6
+ */
7
+ /**
8
+ * 错误类型枚举
9
+ */
10
+ export declare enum ErrorType {
11
+ TEST_FAILED = "TEST_FAILED",
12
+ GATE_FAILED = "GATE_FAILED",
13
+ DEPENDENCY_BLOCKED = "DEPENDENCY_BLOCKED",
14
+ CONTEXT_OVERFLOW = "CONTEXT_OVERFLOW",
15
+ TIMEOUT = "TIMEOUT",
16
+ NETWORK_ERROR = "NETWORK_ERROR",
17
+ AGENT_ERROR = "AGENT_ERROR",
18
+ TOOL_ERROR = "TOOL_ERROR",
19
+ VALIDATION_ERROR = "VALIDATION_ERROR",
20
+ UNKNOWN = "UNKNOWN"
21
+ }
22
+ /**
23
+ * 失败等级
24
+ *
25
+ * L1: 自动处理(重试、降级)
26
+ * L2: 需要干预(人工审核)
27
+ * L3: 严重问题(开会讨论)
28
+ * L4: 致命错误(回滚)
29
+ */
30
+ export declare enum FailureLevel {
31
+ L1 = "L1",
32
+ L2 = "L2",
33
+ L3 = "L3",
34
+ L4 = "L4"
35
+ }
36
+ /**
37
+ * 错误分类规则
38
+ */
39
+ export interface ErrorClassificationRule {
40
+ /** 匹配的错误类型 */
41
+ type: ErrorType;
42
+ /** 正则匹配模式 */
43
+ patterns?: RegExp[];
44
+ /** 关键词匹配(不区分大小写) */
45
+ keywords?: string[];
46
+ /** 失败等级 */
47
+ level?: FailureLevel;
48
+ /** 规则描述 */
49
+ description?: string;
50
+ }
51
+ /**
52
+ * 失败记录
53
+ */
54
+ export interface FailureRecord {
55
+ /** 错误类型 */
56
+ type: ErrorType;
57
+ /** 失败等级 */
58
+ level: FailureLevel;
59
+ /** 错误消息 */
60
+ message: string;
61
+ /** 时间戳 */
62
+ timestamp: number;
63
+ /** 元数据 */
64
+ metadata?: Record<string, unknown>;
65
+ }
66
+ /**
67
+ * 分类结果
68
+ */
69
+ export interface ClassificationResult {
70
+ /** 错误类型 */
71
+ type: ErrorType;
72
+ /** 失败等级 */
73
+ level: FailureLevel;
74
+ /** 匹配的规则(如果有) */
75
+ matchedRule?: ErrorClassificationRule;
76
+ /** 原始错误 */
77
+ originalError: Error;
78
+ }
79
+ /**
80
+ * 默认错误分类规则
81
+ *
82
+ * 注意:规则按顺序匹配,更具体的规则应该放在前面
83
+ */
84
+ export declare const DEFAULT_CLASSIFICATION_RULES: ErrorClassificationRule[];
85
+ /**
86
+ * 错误类型到失败等级的默认映射
87
+ */
88
+ export declare const DEFAULT_LEVEL_MAPPING: Record<ErrorType, FailureLevel>;
89
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/failure/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,oBAAY,SAAS;IACnB,WAAW,gBAAgB;IAC3B,WAAW,gBAAgB;IAC3B,kBAAkB,uBAAuB;IACzC,gBAAgB,qBAAqB;IACrC,OAAO,YAAY;IACnB,aAAa,kBAAkB;IAC/B,WAAW,gBAAgB;IAC3B,UAAU,eAAe;IACzB,gBAAgB,qBAAqB;IACrC,OAAO,YAAY;CACpB;AAED;;;;;;;GAOG;AACH,oBAAY,YAAY;IACtB,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;CACV;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,cAAc;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,aAAa;IACb,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW;IACX,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW;IACX,KAAK,EAAE,YAAY,CAAC;IACpB,WAAW;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU;IACV,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,WAAW;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW;IACX,KAAK,EAAE,YAAY,CAAC;IACpB,iBAAiB;IACjB,WAAW,CAAC,EAAE,uBAAuB,CAAC;IACtC,WAAW;IACX,aAAa,EAAE,KAAK,CAAC;CACtB;AAED;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,EAAE,uBAAuB,EA2DjE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,SAAS,EAAE,YAAY,CAWjE,CAAC"}
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ /**
3
+ * 失败处理类型定义
4
+ *
5
+ * 提供通用的错误分类和失败记录类型
6
+ * 不包含业务逻辑,只定义数据结构
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.DEFAULT_LEVEL_MAPPING = exports.DEFAULT_CLASSIFICATION_RULES = exports.FailureLevel = exports.ErrorType = void 0;
10
+ /**
11
+ * 错误类型枚举
12
+ */
13
+ var ErrorType;
14
+ (function (ErrorType) {
15
+ ErrorType["TEST_FAILED"] = "TEST_FAILED";
16
+ ErrorType["GATE_FAILED"] = "GATE_FAILED";
17
+ ErrorType["DEPENDENCY_BLOCKED"] = "DEPENDENCY_BLOCKED";
18
+ ErrorType["CONTEXT_OVERFLOW"] = "CONTEXT_OVERFLOW";
19
+ ErrorType["TIMEOUT"] = "TIMEOUT";
20
+ ErrorType["NETWORK_ERROR"] = "NETWORK_ERROR";
21
+ ErrorType["AGENT_ERROR"] = "AGENT_ERROR";
22
+ ErrorType["TOOL_ERROR"] = "TOOL_ERROR";
23
+ ErrorType["VALIDATION_ERROR"] = "VALIDATION_ERROR";
24
+ ErrorType["UNKNOWN"] = "UNKNOWN";
25
+ })(ErrorType || (exports.ErrorType = ErrorType = {}));
26
+ /**
27
+ * 失败等级
28
+ *
29
+ * L1: 自动处理(重试、降级)
30
+ * L2: 需要干预(人工审核)
31
+ * L3: 严重问题(开会讨论)
32
+ * L4: 致命错误(回滚)
33
+ */
34
+ var FailureLevel;
35
+ (function (FailureLevel) {
36
+ FailureLevel["L1"] = "L1";
37
+ FailureLevel["L2"] = "L2";
38
+ FailureLevel["L3"] = "L3";
39
+ FailureLevel["L4"] = "L4";
40
+ })(FailureLevel || (exports.FailureLevel = FailureLevel = {}));
41
+ /**
42
+ * 默认错误分类规则
43
+ *
44
+ * 注意:规则按顺序匹配,更具体的规则应该放在前面
45
+ */
46
+ exports.DEFAULT_CLASSIFICATION_RULES = [
47
+ // 更具体的规则优先
48
+ {
49
+ type: ErrorType.GATE_FAILED,
50
+ keywords: ['gate', 'checkpoint', 'constraint'],
51
+ level: FailureLevel.L2,
52
+ description: '门禁检查失败',
53
+ },
54
+ {
55
+ type: ErrorType.DEPENDENCY_BLOCKED,
56
+ keywords: ['dependency', 'blocked', 'dependency_fail'],
57
+ level: FailureLevel.L3,
58
+ description: '依赖阻塞',
59
+ },
60
+ {
61
+ type: ErrorType.CONTEXT_OVERFLOW,
62
+ keywords: ['context overflow', 'token limit', 'context exceed'],
63
+ level: FailureLevel.L2,
64
+ description: '上下文溢出',
65
+ },
66
+ {
67
+ type: ErrorType.TIMEOUT,
68
+ keywords: ['timeout', 'timed out', 'deadline'],
69
+ patterns: [/timeout/i, /timed?\s*out/i],
70
+ level: FailureLevel.L1,
71
+ description: '超时',
72
+ },
73
+ {
74
+ type: ErrorType.NETWORK_ERROR,
75
+ keywords: ['network', 'connection', 'econnrefused', 'enotfound', 'socket'],
76
+ level: FailureLevel.L1,
77
+ description: '网络错误',
78
+ },
79
+ {
80
+ type: ErrorType.AGENT_ERROR,
81
+ keywords: ['agent error', 'model error', 'rate limit', 'quota exceeded'],
82
+ level: FailureLevel.L2,
83
+ description: 'Agent 错误',
84
+ },
85
+ {
86
+ type: ErrorType.TOOL_ERROR,
87
+ keywords: ['tool error', 'skill error', 'executor error'],
88
+ level: FailureLevel.L1,
89
+ description: '工具错误',
90
+ },
91
+ {
92
+ type: ErrorType.VALIDATION_ERROR,
93
+ keywords: ['validation error', 'invalid', 'schema error'],
94
+ level: FailureLevel.L2,
95
+ description: '验证错误',
96
+ },
97
+ // 通用规则放在后面
98
+ {
99
+ type: ErrorType.TEST_FAILED,
100
+ keywords: ['test', 'assertion', 'expect'],
101
+ patterns: [/test.*fail/i, /assertion/i, /expect.*fail/i],
102
+ level: FailureLevel.L1,
103
+ description: '测试失败',
104
+ },
105
+ ];
106
+ /**
107
+ * 错误类型到失败等级的默认映射
108
+ */
109
+ exports.DEFAULT_LEVEL_MAPPING = {
110
+ [ErrorType.TEST_FAILED]: FailureLevel.L1,
111
+ [ErrorType.GATE_FAILED]: FailureLevel.L2,
112
+ [ErrorType.DEPENDENCY_BLOCKED]: FailureLevel.L3,
113
+ [ErrorType.CONTEXT_OVERFLOW]: FailureLevel.L2,
114
+ [ErrorType.TIMEOUT]: FailureLevel.L1,
115
+ [ErrorType.NETWORK_ERROR]: FailureLevel.L1,
116
+ [ErrorType.AGENT_ERROR]: FailureLevel.L2,
117
+ [ErrorType.TOOL_ERROR]: FailureLevel.L1,
118
+ [ErrorType.VALIDATION_ERROR]: FailureLevel.L2,
119
+ [ErrorType.UNKNOWN]: FailureLevel.L2,
120
+ };
121
+ //# sourceMappingURL=types.js.map