@dommaker/harness 0.2.0 → 0.3.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 (61) hide show
  1. package/README.md +134 -1
  2. package/dist/cli/commands/diagnose.d.ts +16 -0
  3. package/dist/cli/commands/diagnose.d.ts.map +1 -0
  4. package/dist/cli/commands/diagnose.js +195 -0
  5. package/dist/cli/commands/diagnose.js.map +1 -0
  6. package/dist/cli/commands/index.d.ts +3 -0
  7. package/dist/cli/commands/index.d.ts.map +1 -1
  8. package/dist/cli/commands/index.js +7 -1
  9. package/dist/cli/commands/index.js.map +1 -1
  10. package/dist/cli/commands/propose.d.ts +18 -0
  11. package/dist/cli/commands/propose.d.ts.map +1 -0
  12. package/dist/cli/commands/propose.js +331 -0
  13. package/dist/cli/commands/propose.js.map +1 -0
  14. package/dist/cli/commands/traces.d.ts +15 -0
  15. package/dist/cli/commands/traces.d.ts.map +1 -0
  16. package/dist/cli/commands/traces.js +167 -0
  17. package/dist/cli/commands/traces.js.map +1 -0
  18. package/dist/core/constraints/checker.d.ts +4 -0
  19. package/dist/core/constraints/checker.d.ts.map +1 -1
  20. package/dist/core/constraints/checker.js +54 -0
  21. package/dist/core/constraints/checker.js.map +1 -1
  22. package/dist/core/validators/checkpoint.d.ts +13 -1
  23. package/dist/core/validators/checkpoint.d.ts.map +1 -1
  24. package/dist/core/validators/checkpoint.js +51 -0
  25. package/dist/core/validators/checkpoint.js.map +1 -1
  26. package/dist/index.d.ts +1 -0
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +4 -0
  29. package/dist/index.js.map +1 -1
  30. package/dist/monitoring/constraint-doctor.d.ts +130 -0
  31. package/dist/monitoring/constraint-doctor.d.ts.map +1 -0
  32. package/dist/monitoring/constraint-doctor.js +305 -0
  33. package/dist/monitoring/constraint-doctor.js.map +1 -0
  34. package/dist/monitoring/constraint-evolver.d.ts +174 -0
  35. package/dist/monitoring/constraint-evolver.d.ts.map +1 -0
  36. package/dist/monitoring/constraint-evolver.js +412 -0
  37. package/dist/monitoring/constraint-evolver.js.map +1 -0
  38. package/dist/monitoring/index.d.ts +14 -0
  39. package/dist/monitoring/index.d.ts.map +1 -0
  40. package/dist/monitoring/index.js +30 -0
  41. package/dist/monitoring/index.js.map +1 -0
  42. package/dist/monitoring/trace-analyzer.d.ts +100 -0
  43. package/dist/monitoring/trace-analyzer.d.ts.map +1 -0
  44. package/dist/monitoring/trace-analyzer.js +432 -0
  45. package/dist/monitoring/trace-analyzer.js.map +1 -0
  46. package/dist/monitoring/traces.d.ts +111 -0
  47. package/dist/monitoring/traces.d.ts.map +1 -0
  48. package/dist/monitoring/traces.js +312 -0
  49. package/dist/monitoring/traces.js.map +1 -0
  50. package/dist/types/constraint.d.ts +2 -0
  51. package/dist/types/constraint.d.ts.map +1 -1
  52. package/dist/types/constraint.js.map +1 -1
  53. package/dist/types/index.d.ts +3 -0
  54. package/dist/types/index.d.ts.map +1 -1
  55. package/dist/types/index.js +2 -0
  56. package/dist/types/index.js.map +1 -1
  57. package/dist/types/trace.d.ts +151 -0
  58. package/dist/types/trace.d.ts.map +1 -0
  59. package/dist/types/trace.js +8 -0
  60. package/dist/types/trace.js.map +1 -0
  61. package/package.json +1 -1
@@ -0,0 +1,305 @@
1
+ "use strict";
2
+ /**
3
+ * Agent 诊断接口
4
+ *
5
+ * 当检测到异常时,提供 Agent 分析 traces 的能力
6
+ *
7
+ * 成本控制:
8
+ * - 仅在有异常时触发
9
+ * - 精简 prompt,不喂全部 traces
10
+ * - ~2000 Token/次
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.ConstraintDoctor = void 0;
14
+ exports.createDoctor = createDoctor;
15
+ /**
16
+ * Constraint Doctor - 约束诊断器
17
+ *
18
+ * 使用方式:
19
+ * ```typescript
20
+ * const doctor = new ConstraintDoctor(analyzer);
21
+ * const diagnosis = await doctor.diagnose(anomaly);
22
+ *
23
+ * if (diagnosis.needsChange) {
24
+ * const proposal = await evolver.propose(diagnosis);
25
+ * }
26
+ * ```
27
+ */
28
+ class ConstraintDoctor {
29
+ config;
30
+ traces;
31
+ summary;
32
+ constructor(config) {
33
+ this.config = {
34
+ enabled: false,
35
+ maxTracesInPrompt: 20,
36
+ autoGenerateProposal: false,
37
+ ...config,
38
+ };
39
+ this.traces = [];
40
+ this.summary = null;
41
+ }
42
+ /**
43
+ * 设置诊断数据
44
+ */
45
+ setData(traces, summary) {
46
+ this.traces = traces;
47
+ this.summary = summary || null;
48
+ }
49
+ /**
50
+ * 诊断异常
51
+ *
52
+ * 如果 Agent 未启用,返回基于规则的诊断
53
+ */
54
+ async diagnose(anomaly) {
55
+ // 过滤相关 traces
56
+ const relevantTraces = this.filterRelevantTraces(anomaly);
57
+ // 基于规则的初步诊断(不消耗 Token)
58
+ const ruleBasedDiagnosis = this.ruleBasedDiagnose(anomaly, relevantTraces);
59
+ // 如果 Agent 启用,可以进一步分析(预留)
60
+ if (this.config.enabled && this.config.agentType) {
61
+ // TODO: 调用 Agent 进行深度分析
62
+ // const agentDiagnosis = await this.agentDiagnose(anomaly, relevantTraces);
63
+ // return agentDiagnosis;
64
+ }
65
+ return ruleBasedDiagnosis;
66
+ }
67
+ /**
68
+ * 基于规则的诊断(零 Token)
69
+ *
70
+ * 根据异常类型应用预设的诊断规则
71
+ */
72
+ ruleBasedDiagnose(anomaly, traces) {
73
+ const diagnosis = {
74
+ anomalyId: `${anomaly.constraintId}-${anomaly.type}-${Date.now()}`,
75
+ constraintId: anomaly.constraintId,
76
+ diagnosedAt: Date.now(),
77
+ rootCause: {
78
+ primary: '',
79
+ secondary: [],
80
+ evidence: traces.slice(0, this.config.maxTracesInPrompt),
81
+ },
82
+ impact: {
83
+ severity: 'medium',
84
+ scope: 'single_project',
85
+ userImpact: '',
86
+ },
87
+ recommendations: [],
88
+ needsChange: false,
89
+ urgency: 'low',
90
+ };
91
+ // 根据异常类型诊断
92
+ switch (anomaly.type) {
93
+ case 'high_bypass_rate':
94
+ diagnosis.rootCause.primary = '约束过于严格,用户频繁绕过';
95
+ diagnosis.rootCause.secondary = [
96
+ '约束触发条件过于宽泛',
97
+ '缺乏必要的例外条件',
98
+ '约束定义与实际场景不匹配',
99
+ ];
100
+ diagnosis.impact.userImpact = '用户被迫绕过约束,降低信任度';
101
+ diagnosis.recommendations = [
102
+ {
103
+ type: 'add_exception',
104
+ content: `为约束 ${anomaly.constraintId} 添加常见例外条件`,
105
+ expectedOutcome: '绕过率降低至 20% 以下',
106
+ implementationCost: 'low',
107
+ },
108
+ {
109
+ type: 'adjust_threshold',
110
+ content: '调整触发条件,减少误触发',
111
+ expectedOutcome: '减少不必要的约束检查',
112
+ implementationCost: 'medium',
113
+ },
114
+ ];
115
+ diagnosis.needsChange = true;
116
+ diagnosis.urgency = anomaly.data.currentRate > 0.5 ? 'high' : 'medium';
117
+ break;
118
+ case 'rising_fail_rate':
119
+ diagnosis.rootCause.primary = '约束失败率呈上升趋势';
120
+ diagnosis.rootCause.secondary = [
121
+ '代码质量下降',
122
+ '约束检查逻辑存在 bug',
123
+ '环境变化导致约束不再适用',
124
+ ];
125
+ diagnosis.impact.userImpact = '开发效率下降,约束频繁阻止正常操作';
126
+ diagnosis.recommendations = [
127
+ {
128
+ type: 'modify_constraint',
129
+ content: '审查约束逻辑,确认是否符合预期',
130
+ expectedOutcome: '恢复正常的失败率水平',
131
+ implementationCost: 'medium',
132
+ },
133
+ {
134
+ type: 'user_training',
135
+ content: '指导用户正确理解约束要求',
136
+ expectedOutcome: '减少因误解导致的失败',
137
+ implementationCost: 'low',
138
+ },
139
+ ];
140
+ diagnosis.needsChange = true;
141
+ diagnosis.urgency = 'medium';
142
+ break;
143
+ case 'rising_bypass_rate':
144
+ diagnosis.rootCause.primary = '绕过率呈上升趋势';
145
+ diagnosis.rootCause.secondary = [
146
+ '用户对约束的接受度下降',
147
+ '约束规则逐渐不适应新的开发模式',
148
+ '用户发现了绕过约束的"捷径"',
149
+ ];
150
+ diagnosis.impact.userImpact = '约束逐渐失去约束力';
151
+ diagnosis.recommendations = [
152
+ {
153
+ type: 'modify_constraint',
154
+ content: '重新评估约束的必要性',
155
+ expectedOutcome: '恢复约束的权威性',
156
+ implementationCost: 'high',
157
+ },
158
+ ];
159
+ diagnosis.needsChange = true;
160
+ diagnosis.urgency = 'high';
161
+ break;
162
+ case 'low_pass_rate':
163
+ diagnosis.rootCause.primary = '约束通过率过低';
164
+ diagnosis.rootCause.secondary = [
165
+ '约束要求过于严格',
166
+ '实际代码质量不达标',
167
+ '约束定义存在歧义',
168
+ ];
169
+ diagnosis.impact.userImpact = '几乎所有操作都被阻止,开发受阻';
170
+ diagnosis.recommendations = [
171
+ {
172
+ type: 'adjust_threshold',
173
+ content: '放宽约束要求,设置合理阈值',
174
+ expectedOutcome: '通过率提升至 50% 以上',
175
+ implementationCost: 'low',
176
+ },
177
+ ];
178
+ diagnosis.needsChange = true;
179
+ diagnosis.urgency = 'high';
180
+ break;
181
+ case 'exception_overuse':
182
+ diagnosis.rootCause.primary = '例外条件被过度使用';
183
+ diagnosis.rootCause.secondary = [
184
+ '例外条件过于宽泛',
185
+ '例外条件定义不够精确',
186
+ '用户习惯性申请例外',
187
+ ];
188
+ diagnosis.impact.userImpact = '例外成为常态,约束失去意义';
189
+ diagnosis.recommendations = [
190
+ {
191
+ type: 'modify_constraint',
192
+ content: '缩小例外条件范围,提高例外门槛',
193
+ expectedOutcome: '例外使用率降低至 20% 以下',
194
+ implementationCost: 'medium',
195
+ },
196
+ ];
197
+ diagnosis.needsChange = true;
198
+ diagnosis.urgency = 'medium';
199
+ break;
200
+ }
201
+ // 根据约束层级调整严重性
202
+ if (anomaly.level === 'iron_law') {
203
+ diagnosis.impact.severity = 'high';
204
+ diagnosis.urgency = 'medium'; // Iron law 总是至少 medium
205
+ }
206
+ return diagnosis;
207
+ }
208
+ /**
209
+ * 过滤相关 traces
210
+ *
211
+ * 只保留与异常相关的 traces,减少 prompt 内容
212
+ */
213
+ filterRelevantTraces(anomaly) {
214
+ return this.traces.filter(t => {
215
+ // 必须是同一个约束
216
+ if (t.constraintId !== anomaly.constraintId)
217
+ return false;
218
+ // 失败或绕过的更有诊断价值
219
+ if (t.result === 'fail' || t.result === 'bypassed')
220
+ return true;
221
+ // 保留少量通过的作为对比
222
+ return true;
223
+ });
224
+ }
225
+ /**
226
+ * 批量诊断多个异常
227
+ */
228
+ async diagnoseBatch(anomalies) {
229
+ return Promise.all(anomalies.map(a => this.diagnose(a)));
230
+ }
231
+ /**
232
+ * 生成诊断报告(文本格式)
233
+ */
234
+ generateReport(diagnosis) {
235
+ const lines = [];
236
+ lines.push(`# Diagnosis Report`);
237
+ lines.push(`Constraint: ${diagnosis.constraintId}`);
238
+ lines.push(`Anomaly: ${diagnosis.anomalyId}`);
239
+ lines.push(`Diagnosed: ${new Date(diagnosis.diagnosedAt).toISOString()}`);
240
+ lines.push('');
241
+ // 根因
242
+ lines.push(`## Root Cause`);
243
+ lines.push('');
244
+ lines.push(`**Primary**: ${diagnosis.rootCause.primary}`);
245
+ if (diagnosis.rootCause.secondary?.length) {
246
+ lines.push('');
247
+ lines.push('**Secondary**:');
248
+ for (const s of diagnosis.rootCause.secondary) {
249
+ lines.push(`- ${s}`);
250
+ }
251
+ }
252
+ lines.push('');
253
+ // 影响
254
+ lines.push(`## Impact`);
255
+ lines.push('');
256
+ lines.push(`- Severity: ${diagnosis.impact.severity}`);
257
+ lines.push(`- Scope: ${diagnosis.impact.scope}`);
258
+ lines.push(`- User Impact: ${diagnosis.impact.userImpact}`);
259
+ lines.push('');
260
+ // 建议
261
+ lines.push(`## Recommendations`);
262
+ lines.push('');
263
+ for (const r of diagnosis.recommendations) {
264
+ lines.push(`### ${r.type}`);
265
+ lines.push(`- Content: ${r.content}`);
266
+ lines.push(`- Expected: ${r.expectedOutcome}`);
267
+ lines.push(`- Cost: ${r.implementationCost}`);
268
+ lines.push('');
269
+ }
270
+ // 决策
271
+ lines.push(`## Decision`);
272
+ lines.push('');
273
+ lines.push(`- Needs Change: ${diagnosis.needsChange ? '✅ Yes' : '❌ No'}`);
274
+ lines.push(`- Urgency: ${diagnosis.urgency}`);
275
+ return lines.join('\n');
276
+ }
277
+ /**
278
+ * 保存诊断结果
279
+ */
280
+ saveDiagnosis(diagnosis, outputPath) {
281
+ const fs = require('fs');
282
+ const path = require('path');
283
+ const dir = path.dirname(outputPath);
284
+ if (!fs.existsSync(dir)) {
285
+ fs.mkdirSync(dir, { recursive: true });
286
+ }
287
+ fs.writeFileSync(outputPath, JSON.stringify(diagnosis, null, 2), 'utf-8');
288
+ }
289
+ /**
290
+ * 加载诊断结果
291
+ */
292
+ loadDiagnosis(inputPath) {
293
+ const fs = require('fs');
294
+ const content = fs.readFileSync(inputPath, 'utf-8');
295
+ return JSON.parse(content);
296
+ }
297
+ }
298
+ exports.ConstraintDoctor = ConstraintDoctor;
299
+ /**
300
+ * 创建诊断器
301
+ */
302
+ function createDoctor(config) {
303
+ return new ConstraintDoctor(config);
304
+ }
305
+ //# sourceMappingURL=constraint-doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constraint-doctor.js","sourceRoot":"","sources":["../../src/monitoring/constraint-doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,174 @@
1
+ /**
2
+ * 约束提案流程
3
+ *
4
+ * 根据诊断结果提出约束修改建议
5
+ *
6
+ * 成本控制:
7
+ * - 仅在诊断有结论时触发
8
+ * - 精简 prompt
9
+ * - ~3000 Token/次
10
+ */
11
+ import type { Diagnosis } from './constraint-doctor';
12
+ /**
13
+ * 约束提案
14
+ */
15
+ export interface ConstraintProposal {
16
+ /** 提案 ID */
17
+ id: string;
18
+ /** 提案时间 */
19
+ proposedAt: number;
20
+ /** 来源诊断 */
21
+ diagnosisId: string;
22
+ /** 约束 ID */
23
+ constraintId: string;
24
+ /** 提案类型 */
25
+ type: 'add_exception' | 'remove_exception' | 'adjust_trigger' | 'change_level' | 'modify_message' | 'new_constraint';
26
+ /** 提案内容 */
27
+ content: {
28
+ /** 当前值(如果有) */
29
+ current?: any;
30
+ /** 建议值 */
31
+ proposed: any;
32
+ /** 变更描述 */
33
+ description: string;
34
+ };
35
+ /** 理由 */
36
+ reasoning: string;
37
+ /** 预期效果 */
38
+ expectedOutcome: string;
39
+ /** 风险评估 */
40
+ risk: {
41
+ /** 风险等级 */
42
+ level: 'low' | 'medium' | 'high';
43
+ /** 风险描述 */
44
+ description: string;
45
+ /** 回滚方案 */
46
+ rollbackPlan?: string;
47
+ };
48
+ /** 实施信息 */
49
+ implementation: {
50
+ /** 改动文件 */
51
+ files: string[];
52
+ /** 改动量估计 */
53
+ linesChanged: number;
54
+ /** 测试要求 */
55
+ testsRequired: boolean;
56
+ };
57
+ /** 状态 */
58
+ status: 'proposed' | 'reviewing' | 'accepted' | 'rejected' | 'implemented';
59
+ /** 审核意见 */
60
+ reviewComment?: string;
61
+ }
62
+ /**
63
+ * 提案审核结果
64
+ */
65
+ export interface ProposalReviewResult {
66
+ /** 是否接受 */
67
+ accepted: boolean;
68
+ /** 审核意见 */
69
+ comment: string;
70
+ /** 修改建议(如果拒绝) */
71
+ modifications?: Partial<ConstraintProposal>;
72
+ }
73
+ /**
74
+ * Constraint Evolver - 约束进化器
75
+ *
76
+ * 使用方式:
77
+ * ```typescript
78
+ * const evolver = new ConstraintEvolver();
79
+ * const proposal = await evolver.propose(diagnosis);
80
+ *
81
+ * // 审核
82
+ * const review = evolver.review(proposal);
83
+ *
84
+ * // 如果接受,实施
85
+ * if (review.accepted) {
86
+ * evolver.implement(proposal);
87
+ * }
88
+ * ```
89
+ */
90
+ export declare class ConstraintEvolver {
91
+ private proposalsDir;
92
+ constructor(proposalsDir?: string);
93
+ /**
94
+ * 根据诊断生成提案
95
+ *
96
+ * 如果诊断不需要变更,返回 null
97
+ */
98
+ propose(diagnosis: Diagnosis): Promise<ConstraintProposal | null>;
99
+ /**
100
+ * 批量生成提案
101
+ */
102
+ proposeBatch(diagnoses: Diagnosis[]): Promise<ConstraintProposal[]>;
103
+ /**
104
+ * 审核提案
105
+ *
106
+ * 基于规则的审核(不消耗 Token)
107
+ */
108
+ review(proposal: ConstraintProposal): ProposalReviewResult;
109
+ /**
110
+ * 实施提案(返回实施建议,不自动修改代码)
111
+ */
112
+ implement(proposal: ConstraintProposal): {
113
+ instructions: string[];
114
+ filesToModify: string[];
115
+ testsToRun: string[];
116
+ };
117
+ /**
118
+ * 保存提案
119
+ */
120
+ saveProposal(proposal: ConstraintProposal): void;
121
+ /**
122
+ * 加载提案
123
+ */
124
+ loadProposal(proposalId: string): ConstraintProposal;
125
+ /**
126
+ * 列出所有提案
127
+ */
128
+ listProposals(status?: ConstraintProposal['status']): ConstraintProposal[];
129
+ /**
130
+ * 更新提案状态
131
+ */
132
+ updateProposalStatus(proposalId: string, status: ConstraintProposal['status'], reviewComment?: string): void;
133
+ /**
134
+ * 映射建议类型到提案类型
135
+ */
136
+ private mapRecommendationType;
137
+ /**
138
+ * 生成提案内容
139
+ */
140
+ private generateProposalContent;
141
+ /**
142
+ * 建议例外条件
143
+ */
144
+ private suggestException;
145
+ /**
146
+ * 建议触发条件
147
+ */
148
+ private suggestTrigger;
149
+ /**
150
+ * 建议提示消息
151
+ */
152
+ private suggestMessage;
153
+ /**
154
+ * 风险评估
155
+ */
156
+ private assessRisk;
157
+ /**
158
+ * 估算实施信息
159
+ */
160
+ private estimateImplementation;
161
+ /**
162
+ * 查找约束定义
163
+ */
164
+ private findConstraint;
165
+ /**
166
+ * 生成提案 Markdown
167
+ */
168
+ private generateProposalMarkdown;
169
+ }
170
+ /**
171
+ * 创建进化器
172
+ */
173
+ export declare function createEvolver(proposalsDir?: string): ConstraintEvolver;
174
+ //# sourceMappingURL=constraint-evolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constraint-evolver.d.ts","sourceRoot":"","sources":["../../src/monitoring/constraint-evolver.ts"],"names":[],"mappings":"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"}