@dommaker/harness 0.2.1 → 0.3.1

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 (58) hide show
  1. package/README.md +134 -1
  2. package/bin/harness.js +81 -3
  3. package/dist/cli/commands/diagnose.d.ts +16 -0
  4. package/dist/cli/commands/diagnose.d.ts.map +1 -0
  5. package/dist/cli/commands/diagnose.js +195 -0
  6. package/dist/cli/commands/diagnose.js.map +1 -0
  7. package/dist/cli/commands/index.d.ts +3 -0
  8. package/dist/cli/commands/index.d.ts.map +1 -1
  9. package/dist/cli/commands/index.js +7 -1
  10. package/dist/cli/commands/index.js.map +1 -1
  11. package/dist/cli/commands/propose.d.ts +18 -0
  12. package/dist/cli/commands/propose.d.ts.map +1 -0
  13. package/dist/cli/commands/propose.js +331 -0
  14. package/dist/cli/commands/propose.js.map +1 -0
  15. package/dist/cli/commands/traces.d.ts +15 -0
  16. package/dist/cli/commands/traces.d.ts.map +1 -0
  17. package/dist/cli/commands/traces.js +167 -0
  18. package/dist/cli/commands/traces.js.map +1 -0
  19. package/dist/core/constraints/checker.d.ts +4 -0
  20. package/dist/core/constraints/checker.d.ts.map +1 -1
  21. package/dist/core/constraints/checker.js +54 -0
  22. package/dist/core/constraints/checker.js.map +1 -1
  23. package/dist/index.d.ts +1 -0
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +4 -0
  26. package/dist/index.js.map +1 -1
  27. package/dist/monitoring/constraint-doctor.d.ts +130 -0
  28. package/dist/monitoring/constraint-doctor.d.ts.map +1 -0
  29. package/dist/monitoring/constraint-doctor.js +305 -0
  30. package/dist/monitoring/constraint-doctor.js.map +1 -0
  31. package/dist/monitoring/constraint-evolver.d.ts +174 -0
  32. package/dist/monitoring/constraint-evolver.d.ts.map +1 -0
  33. package/dist/monitoring/constraint-evolver.js +412 -0
  34. package/dist/monitoring/constraint-evolver.js.map +1 -0
  35. package/dist/monitoring/index.d.ts +14 -0
  36. package/dist/monitoring/index.d.ts.map +1 -0
  37. package/dist/monitoring/index.js +30 -0
  38. package/dist/monitoring/index.js.map +1 -0
  39. package/dist/monitoring/trace-analyzer.d.ts +100 -0
  40. package/dist/monitoring/trace-analyzer.d.ts.map +1 -0
  41. package/dist/monitoring/trace-analyzer.js +432 -0
  42. package/dist/monitoring/trace-analyzer.js.map +1 -0
  43. package/dist/monitoring/traces.d.ts +111 -0
  44. package/dist/monitoring/traces.d.ts.map +1 -0
  45. package/dist/monitoring/traces.js +312 -0
  46. package/dist/monitoring/traces.js.map +1 -0
  47. package/dist/types/constraint.d.ts +2 -0
  48. package/dist/types/constraint.d.ts.map +1 -1
  49. package/dist/types/constraint.js.map +1 -1
  50. package/dist/types/index.d.ts +3 -0
  51. package/dist/types/index.d.ts.map +1 -1
  52. package/dist/types/index.js +2 -0
  53. package/dist/types/index.js.map +1 -1
  54. package/dist/types/trace.d.ts +151 -0
  55. package/dist/types/trace.d.ts.map +1 -0
  56. package/dist/types/trace.js +8 -0
  57. package/dist/types/trace.js.map +1 -0
  58. package/package.json +1 -1
@@ -0,0 +1,331 @@
1
+ "use strict";
2
+ /**
3
+ * Propose CLI 命令
4
+ *
5
+ * 根据诊断生成约束提案
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.proposeCommand = proposeCommand;
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ const constraint_evolver_1 = require("../../monitoring/constraint-evolver");
45
+ const constraint_doctor_1 = require("../../monitoring/constraint-doctor");
46
+ /**
47
+ * propose 命令
48
+ */
49
+ async function proposeCommand(subcommand, options) {
50
+ switch (subcommand) {
51
+ case 'generate':
52
+ await generateProposal(options);
53
+ break;
54
+ case 'list':
55
+ await listProposals(options);
56
+ break;
57
+ case 'show':
58
+ await showProposal(options);
59
+ break;
60
+ case 'review':
61
+ await reviewProposal(options);
62
+ break;
63
+ case 'implement':
64
+ await implementProposal(options);
65
+ break;
66
+ default:
67
+ console.log('Usage: harness propose <subcommand>');
68
+ console.log('');
69
+ console.log('Subcommands:');
70
+ console.log(' generate Generate proposals from diagnoses');
71
+ console.log(' list List all proposals');
72
+ console.log(' show Show a specific proposal');
73
+ console.log(' review Review a proposal (accept/reject)');
74
+ console.log(' implement Show implementation instructions');
75
+ console.log('');
76
+ console.log('Options:');
77
+ console.log(' --diagnosis <id> Generate from specific diagnosis');
78
+ console.log(' --status <status> Filter by status');
79
+ console.log(' --accept Accept proposal (for review)');
80
+ console.log(' --reject Reject proposal (for review)');
81
+ console.log(' --comment <text> Review comment');
82
+ console.log(' --format <format> Output format');
83
+ console.log(' --save Save to file');
84
+ }
85
+ }
86
+ /**
87
+ * 生成提案
88
+ */
89
+ async function generateProposal(options) {
90
+ const evolver = (0, constraint_evolver_1.createEvolver)();
91
+ const doctor = (0, constraint_doctor_1.createDoctor)();
92
+ // 加载诊断
93
+ let diagnoses = [];
94
+ if (options.diagnosisId) {
95
+ const diagnosisPath = `.harness/diagnoses/${options.diagnosisId}.json`;
96
+ if (!fs.existsSync(diagnosisPath)) {
97
+ console.log(`❌ Diagnosis not found: ${options.diagnosisId}`);
98
+ return;
99
+ }
100
+ diagnoses = [doctor.loadDiagnosis(diagnosisPath)];
101
+ }
102
+ else {
103
+ // 加载所有诊断
104
+ const diagnosesDir = '.harness/diagnoses';
105
+ if (fs.existsSync(diagnosesDir)) {
106
+ const files = fs.readdirSync(diagnosesDir).filter(f => f.endsWith('.json'));
107
+ diagnoses = files.map(f => {
108
+ const content = fs.readFileSync(path.join(diagnosesDir, f), 'utf-8');
109
+ return JSON.parse(content);
110
+ });
111
+ }
112
+ }
113
+ // 过滤需要变更的诊断
114
+ const needsChangeDiagnoses = diagnoses.filter(d => d.needsChange);
115
+ if (needsChangeDiagnoses.length === 0) {
116
+ console.log('✅ No diagnoses need constraint changes. No proposals to generate.');
117
+ return;
118
+ }
119
+ console.log(`💡 Generating proposals from ${needsChangeDiagnoses.length} diagnoses...`);
120
+ console.log('');
121
+ // 生成提案
122
+ const proposals = await evolver.proposeBatch(needsChangeDiagnoses);
123
+ if (options.format === 'json') {
124
+ console.log(JSON.stringify(proposals, null, 2));
125
+ }
126
+ else {
127
+ for (const proposal of proposals) {
128
+ printProposalSummary(proposal);
129
+ console.log('---');
130
+ }
131
+ }
132
+ // 保存
133
+ if (options.save) {
134
+ for (const proposal of proposals) {
135
+ evolver.saveProposal(proposal);
136
+ }
137
+ console.log('');
138
+ console.log(`💾 Saved ${proposals.length} proposals to .harness/proposals/`);
139
+ }
140
+ }
141
+ /**
142
+ * 列出提案
143
+ */
144
+ async function listProposals(options) {
145
+ const evolver = (0, constraint_evolver_1.createEvolver)();
146
+ const proposals = evolver.listProposals(options.status);
147
+ if (proposals.length === 0) {
148
+ console.log('❌ No proposals found.');
149
+ return;
150
+ }
151
+ if (options.format === 'json') {
152
+ console.log(JSON.stringify(proposals.map(p => ({
153
+ id: p.id,
154
+ constraintId: p.constraintId,
155
+ type: p.type,
156
+ status: p.status,
157
+ risk: p.risk.level,
158
+ })), null, 2));
159
+ }
160
+ else {
161
+ console.log('📋 Proposal List');
162
+ console.log('');
163
+ for (const proposal of proposals) {
164
+ const statusEmoji = {
165
+ proposed: '💡',
166
+ reviewing: '🔍',
167
+ accepted: '✅',
168
+ rejected: '❌',
169
+ implemented: '🎉',
170
+ }[proposal.status];
171
+ const riskEmoji = {
172
+ low: '🟢',
173
+ medium: '🟡',
174
+ high: '🔴',
175
+ }[proposal.risk.level];
176
+ console.log(`${statusEmoji} ${proposal.id}`);
177
+ console.log(` Constraint: ${proposal.constraintId}`);
178
+ console.log(` Type: ${proposal.type}`);
179
+ console.log(` Risk: ${riskEmoji} ${proposal.risk.level}`);
180
+ console.log('');
181
+ }
182
+ console.log(`Total: ${proposals.length} proposals`);
183
+ }
184
+ }
185
+ /**
186
+ * 显示提案详情
187
+ */
188
+ async function showProposal(options) {
189
+ if (!options.diagnosisId) {
190
+ console.log('❌ Please specify --diagnosis <id>');
191
+ return;
192
+ }
193
+ // 尝试通过诊断 ID 找到提案
194
+ const evolver = (0, constraint_evolver_1.createEvolver)();
195
+ const proposals = evolver.listProposals();
196
+ const proposal = proposals.find(p => p.diagnosisId === options.diagnosisId);
197
+ if (!proposal) {
198
+ console.log(`❌ Proposal not found for diagnosis: ${options.diagnosisId}`);
199
+ return;
200
+ }
201
+ if (options.format === 'json') {
202
+ console.log(JSON.stringify(proposal, null, 2));
203
+ }
204
+ else {
205
+ printProposalDetail(proposal);
206
+ }
207
+ }
208
+ /**
209
+ * 审核提案
210
+ */
211
+ async function reviewProposal(options) {
212
+ if (!options.diagnosisId) {
213
+ console.log('❌ Please specify --diagnosis <id>');
214
+ return;
215
+ }
216
+ if (!options.accept && !options.reject) {
217
+ console.log('❌ Please specify --accept or --reject');
218
+ return;
219
+ }
220
+ const evolver = (0, constraint_evolver_1.createEvolver)();
221
+ const proposals = evolver.listProposals();
222
+ const proposal = proposals.find(p => p.diagnosisId === options.diagnosisId);
223
+ if (!proposal) {
224
+ console.log(`❌ Proposal not found for diagnosis: ${options.diagnosisId}`);
225
+ return;
226
+ }
227
+ // 更新状态
228
+ const status = options.accept ? 'accepted' : 'rejected';
229
+ evolver.updateProposalStatus(proposal.id, status, options.comment);
230
+ console.log(`${options.accept ? '✅ Accepted' : '❌ Rejected'} proposal ${proposal.id}`);
231
+ if (options.comment) {
232
+ console.log(`Comment: ${options.comment}`);
233
+ }
234
+ }
235
+ /**
236
+ * 显示实施指导
237
+ */
238
+ async function implementProposal(options) {
239
+ if (!options.diagnosisId) {
240
+ console.log('❌ Please specify --diagnosis <id>');
241
+ return;
242
+ }
243
+ const evolver = (0, constraint_evolver_1.createEvolver)();
244
+ const proposals = evolver.listProposals('accepted');
245
+ const proposal = proposals.find(p => p.diagnosisId === options.diagnosisId);
246
+ if (!proposal) {
247
+ console.log(`❌ No accepted proposal found for diagnosis: ${options.diagnosisId}`);
248
+ return;
249
+ }
250
+ const implementation = evolver.implement(proposal);
251
+ console.log('🔧 Implementation Instructions');
252
+ console.log('');
253
+ console.log(`Proposal: ${proposal.id}`);
254
+ console.log(`Constraint: ${proposal.constraintId}`);
255
+ console.log(`Type: ${proposal.type}`);
256
+ console.log('');
257
+ console.log('**Steps**:');
258
+ for (const instruction of implementation.instructions) {
259
+ console.log(`- ${instruction}`);
260
+ }
261
+ console.log('');
262
+ console.log('**Files to Modify**:');
263
+ for (const file of implementation.filesToModify) {
264
+ console.log(`- ${file}`);
265
+ }
266
+ console.log('');
267
+ console.log('**Tests to Run**:');
268
+ for (const test of implementation.testsToRun) {
269
+ console.log(`- ${test}`);
270
+ }
271
+ }
272
+ /**
273
+ * 打印提案摘要
274
+ */
275
+ function printProposalSummary(proposal) {
276
+ const statusEmoji = {
277
+ proposed: '💡',
278
+ reviewing: '🔍',
279
+ accepted: '✅',
280
+ rejected: '❌',
281
+ implemented: '🎉',
282
+ }[proposal.status] || '❓';
283
+ console.log(`${statusEmoji} Proposal: ${proposal.id}`);
284
+ console.log(`Constraint: ${proposal.constraintId}`);
285
+ console.log(`Type: ${proposal.type}`);
286
+ console.log(`Description: ${proposal.content.description}`);
287
+ console.log(`Risk: ${proposal.risk.level}`);
288
+ console.log(`Expected: ${proposal.expectedOutcome}`);
289
+ }
290
+ /**
291
+ * 打印提案详情
292
+ */
293
+ function printProposalDetail(proposal) {
294
+ console.log(`# Proposal: ${proposal.id}`);
295
+ console.log('');
296
+ console.log(`- **Constraint**: ${proposal.constraintId}`);
297
+ console.log(`- **Type**: ${proposal.type}`);
298
+ console.log(`- **Status**: ${proposal.status}`);
299
+ console.log(`- **Proposed**: ${new Date(proposal.proposedAt).toISOString()}`);
300
+ console.log('');
301
+ console.log(`## Content`);
302
+ console.log('');
303
+ console.log(`**Description**: ${proposal.content.description}`);
304
+ if (proposal.content.current) {
305
+ console.log(`**Current**: ${JSON.stringify(proposal.content.current)}`);
306
+ }
307
+ console.log(`**Proposed**: ${JSON.stringify(proposal.content.proposed)}`);
308
+ console.log('');
309
+ console.log(`## Reasoning`);
310
+ console.log('');
311
+ console.log(proposal.reasoning);
312
+ console.log('');
313
+ console.log(`## Expected Outcome`);
314
+ console.log('');
315
+ console.log(proposal.expectedOutcome);
316
+ console.log('');
317
+ console.log(`## Risk Assessment`);
318
+ console.log('');
319
+ console.log(`- **Level**: ${proposal.risk.level}`);
320
+ console.log(`- **Description**: ${proposal.risk.description}`);
321
+ if (proposal.risk.rollbackPlan) {
322
+ console.log(`- **Rollback**: ${proposal.risk.rollbackPlan}`);
323
+ }
324
+ if (proposal.reviewComment) {
325
+ console.log('');
326
+ console.log(`## Review Comment`);
327
+ console.log('');
328
+ console.log(proposal.reviewComment);
329
+ }
330
+ }
331
+ //# sourceMappingURL=propose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propose.js","sourceRoot":"","sources":["../../../src/cli/commands/propose.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Trace CLI 命令
3
+ *
4
+ * 查看和分析 Execution Traces
5
+ */
6
+ /**
7
+ * trace 命令
8
+ */
9
+ export declare function tracesCommand(subcommand: string, options: {
10
+ hours?: number;
11
+ constraintId?: string;
12
+ format?: 'json' | 'text';
13
+ maxAgeDays?: number;
14
+ }): Promise<void>;
15
+ //# sourceMappingURL=traces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traces.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/traces.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH;;GAEG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;IACP,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GACA,OAAO,CAAC,IAAI,CAAC,CAqCf"}
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ /**
3
+ * Trace CLI 命令
4
+ *
5
+ * 查看和分析 Execution Traces
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.tracesCommand = tracesCommand;
9
+ const traces_1 = require("../../monitoring/traces");
10
+ const trace_analyzer_1 = require("../../monitoring/trace-analyzer");
11
+ /**
12
+ * trace 命令
13
+ */
14
+ async function tracesCommand(subcommand, options) {
15
+ switch (subcommand) {
16
+ case 'stats':
17
+ await showStats(options);
18
+ break;
19
+ case 'summary':
20
+ await showSummary(options);
21
+ break;
22
+ case 'anomalies':
23
+ await showAnomalies(options);
24
+ break;
25
+ case 'report':
26
+ await generateReport(options);
27
+ break;
28
+ case 'clean':
29
+ await cleanTraces(options);
30
+ break;
31
+ default:
32
+ console.log('Usage: harness traces <subcommand>');
33
+ console.log('');
34
+ console.log('Subcommands:');
35
+ console.log(' stats Show trace file statistics');
36
+ console.log(' summary Show constraint summaries');
37
+ console.log(' anomalies Show detected anomalies');
38
+ console.log(' report Generate full report');
39
+ console.log(' clean Clean old trace files');
40
+ console.log('');
41
+ console.log('Options:');
42
+ console.log(' --hours <n> Analyze last N hours (default: 1)');
43
+ console.log(' --constraint <id> Filter by constraint ID');
44
+ console.log(' --format <format> Output format: json or text (default: text)');
45
+ }
46
+ }
47
+ /**
48
+ * 显示 trace 文件统计
49
+ */
50
+ async function showStats(options) {
51
+ const collector = (0, traces_1.getTraceCollector)();
52
+ const stats = collector.getStats();
53
+ if (options.format === 'json') {
54
+ console.log(JSON.stringify(stats, null, 2));
55
+ }
56
+ else {
57
+ console.log('📊 Trace File Statistics');
58
+ console.log('');
59
+ console.log(`File: ${collector.getStats().fileExists ? '✅ exists' : '❌ not found'}`);
60
+ if (stats.fileExists) {
61
+ console.log(`Size: ${(stats.fileSize / 1024).toFixed(2)} KB`);
62
+ console.log(`Lines: ${stats.totalLines}`);
63
+ if (stats.oldestTrace) {
64
+ console.log(`Oldest: ${new Date(stats.oldestTrace).toISOString()}`);
65
+ }
66
+ if (stats.newestTrace) {
67
+ console.log(`Newest: ${new Date(stats.newestTrace).toISOString()}`);
68
+ }
69
+ }
70
+ }
71
+ }
72
+ /**
73
+ * 显示约束汇总
74
+ */
75
+ async function showSummary(options) {
76
+ const hours = options.hours || 1;
77
+ const analyzer = (0, trace_analyzer_1.createAnalyzer)();
78
+ let summaries;
79
+ if (options.constraintId) {
80
+ summaries = analyzer.analyzeConstraint(options.constraintId);
81
+ }
82
+ else {
83
+ summaries = analyzer.analyzeRecent(hours);
84
+ }
85
+ if (options.format === 'json') {
86
+ console.log(JSON.stringify(summaries, null, 2));
87
+ }
88
+ else {
89
+ console.log(`📈 Constraint Summaries (last ${hours}h)`);
90
+ console.log('');
91
+ if (summaries.length === 0) {
92
+ console.log('No traces found.');
93
+ return;
94
+ }
95
+ for (const summary of summaries) {
96
+ const levelEmoji = {
97
+ iron_law: '🔴',
98
+ guideline: '🟡',
99
+ tip: '🔵',
100
+ }[summary.level];
101
+ const trendEmoji = {
102
+ rising: '📈',
103
+ falling: '📉',
104
+ stable: '➡️',
105
+ }[summary.recentTrend];
106
+ console.log(`${levelEmoji} ${summary.constraintId}`);
107
+ console.log(` Checks: ${summary.totalChecks}`);
108
+ console.log(` Pass: ${Math.round(summary.passRate * 100)}%`);
109
+ console.log(` Fail: ${Math.round(summary.failRate * 100)}%`);
110
+ console.log(` Bypass: ${Math.round(summary.bypassRate * 100)}%`);
111
+ console.log(` Trend: ${trendEmoji} ${summary.recentTrend}`);
112
+ console.log('');
113
+ }
114
+ }
115
+ }
116
+ /**
117
+ * 显示异常检测结果
118
+ */
119
+ async function showAnomalies(options) {
120
+ const hours = options.hours || 24;
121
+ const analyzer = (0, trace_analyzer_1.createAnalyzer)();
122
+ const anomalies = analyzer.runDailyAnomalyCheck();
123
+ if (options.format === 'json') {
124
+ console.log(JSON.stringify(anomalies, null, 2));
125
+ }
126
+ else {
127
+ console.log(`⚠️ Anomalies Detected (last ${hours}h)`);
128
+ console.log('');
129
+ if (anomalies.length === 0) {
130
+ console.log('✅ No anomalies detected.');
131
+ return;
132
+ }
133
+ for (const anomaly of anomalies) {
134
+ console.log(`⚠️ ${anomaly.type}: ${anomaly.constraintId}`);
135
+ console.log(` ${anomaly.message}`);
136
+ console.log(` Suggested: ${anomaly.suggestedAction}`);
137
+ console.log('');
138
+ }
139
+ console.log(`Total: ${anomalies.length} anomalies`);
140
+ }
141
+ }
142
+ /**
143
+ * 生成完整报告
144
+ */
145
+ async function generateReport(options) {
146
+ const hours = options.hours || 24;
147
+ const analyzer = (0, trace_analyzer_1.createAnalyzer)();
148
+ const summaries = analyzer.analyzeRecent(hours);
149
+ const anomalies = analyzer.detectAnomalies(summaries);
150
+ if (options.format === 'json') {
151
+ console.log(JSON.stringify({ summaries, anomalies }, null, 2));
152
+ }
153
+ else {
154
+ const report = analyzer.generateReport(summaries, anomalies);
155
+ console.log(report);
156
+ }
157
+ }
158
+ /**
159
+ * 清理旧 trace 文件
160
+ */
161
+ async function cleanTraces(options) {
162
+ const maxAgeDays = options.maxAgeDays || 30;
163
+ const collector = (0, traces_1.getTraceCollector)();
164
+ const deletedCount = collector.cleanupOldFiles(maxAgeDays);
165
+ console.log(`🧹 Cleaned ${deletedCount} old trace files (older than ${maxAgeDays} days)`);
166
+ }
167
+ //# sourceMappingURL=traces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traces.js","sourceRoot":"","sources":["../../../src/cli/commands/traces.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,10 @@ export declare class ConstraintChecker {
25
25
  * 检查例外条件
26
26
  */
27
27
  private checkException;
28
+ /**
29
+ * 根据约束层级获取严重性
30
+ */
31
+ private getSeverity;
28
32
  /**
29
33
  * 检查约束前置条件
30
34
  */
@@ -1 +1 @@
1
- {"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../../src/core/constraints/checker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EAEtB,MAAM,wBAAwB,CAAC;AAIhC;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAoB;IAE3C,OAAO;IAEP;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,iBAAiB;IAOvC;;OAEG;IACG,KAAK,CACT,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC;IA6B5B;;OAEG;IACH,OAAO,CAAC,cAAc;IAkFtB;;OAEG;YACW,iBAAiB;IAwE/B;;OAEG;IACH,yBAAyB,CAAC,OAAO,EAAE,iBAAiB,GAAG;QACrD,QAAQ,EAAE,UAAU,EAAE,CAAC;QACvB,UAAU,EAAE,UAAU,EAAE,CAAC;QACzB,IAAI,EAAE,UAAU,EAAE,CAAC;KACpB;IAmBD;;;;;;OAMG;IACG,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IA8DlF;;;;OAIG;IACG,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;CAkBjE;AAMD;;GAEG;AACH,wBAAsB,eAAe,CACnC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CAiB3B;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,qBAAqB,CAAC,CAEhC;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpF;AAGD,eAAO,MAAM,iBAAiB,mBAAkC,CAAC;AAMjE;;GAEG;AACH,eAAO,MAAM,cAAc,0BAAoB,CAAC;AAEhD;;GAEG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CAE3B;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAG7B;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,mBAAoB,CAAC"}
1
+ {"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../../src/core/constraints/checker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EAGtB,MAAM,wBAAwB,CAAC;AAMhC;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAoB;IAE3C,OAAO;IAEP;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,iBAAiB;IAOvC;;OAEG;IACG,KAAK,CACT,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC;IA6B5B;;OAEG;IACH,OAAO,CAAC,cAAc;IAkFtB;;OAEG;IACH,OAAO,CAAC,WAAW;IAanB;;OAEG;YACW,iBAAiB;IAwE/B;;OAEG;IACH,yBAAyB,CAAC,OAAO,EAAE,iBAAiB,GAAG;QACrD,QAAQ,EAAE,UAAU,EAAE,CAAC;QACvB,UAAU,EAAE,UAAU,EAAE,CAAC;QACzB,IAAI,EAAE,UAAU,EAAE,CAAC;KACpB;IAmBD;;;;;;OAMG;IACG,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAwGlF;;;;OAIG;IACG,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;CAkBjE;AAMD;;GAEG;AACH,wBAAsB,eAAe,CACnC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CAiB3B;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,qBAAqB,CAAC,CAEhC;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpF;AAGD,eAAO,MAAM,iBAAiB,mBAAkC,CAAC;AAMjE;;GAEG;AACH,eAAO,MAAM,cAAc,0BAAoB,CAAC;AAEhD;;GAEG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CAE3B;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAG7B;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,mBAAoB,CAAC"}
@@ -15,6 +15,7 @@ exports.checkBeforeExecution = checkBeforeExecution;
15
15
  exports.checkIronLaw = checkIronLaw;
16
16
  exports.checkAllIronLaws = checkAllIronLaws;
17
17
  const constraint_1 = require("../../types/constraint");
18
+ const traces_1 = require("../../monitoring/traces");
18
19
  const definitions_1 = require("./definitions");
19
20
  /**
20
21
  * 约束检查器
@@ -158,6 +159,21 @@ class ConstraintChecker {
158
159
  }
159
160
  return false;
160
161
  }
162
+ /**
163
+ * 根据约束层级获取严重性
164
+ */
165
+ getSeverity(level) {
166
+ switch (level) {
167
+ case 'iron_law':
168
+ return 'error';
169
+ case 'guideline':
170
+ return 'warning';
171
+ case 'tip':
172
+ return 'info';
173
+ default:
174
+ return 'warning';
175
+ }
176
+ }
161
177
  /**
162
178
  * 检查约束前置条件
163
179
  */
@@ -249,6 +265,8 @@ class ConstraintChecker {
249
265
  warningCount: 0,
250
266
  tipCount: 0,
251
267
  };
268
+ // 获取 trace 收集器(可选启用)
269
+ const traceCollector = (0, traces_1.getTraceCollector)();
252
270
  // 1. 检查 Iron Laws(必须全部通过)
253
271
  for (const constraint of Object.values(definitions_1.IRON_LAWS)) {
254
272
  const triggers = Array.isArray(constraint.trigger)
@@ -258,6 +276,18 @@ class ConstraintChecker {
258
276
  continue;
259
277
  const checkResult = await this.check(constraint, context);
260
278
  result.ironLaws.push(checkResult);
279
+ // 记录 trace
280
+ traceCollector.record({
281
+ constraintId: constraint.id,
282
+ level: 'iron_law',
283
+ timestamp: Date.now(),
284
+ result: checkResult.satisfied ? 'pass' : 'fail',
285
+ operation: context.operation,
286
+ severity: this.getSeverity(constraint.level),
287
+ exceptionApplied: checkResult.message?.includes('豁免') ? constraint.exceptions?.[0] : undefined,
288
+ projectPath: context.projectPath,
289
+ sessionId: context.sessionId,
290
+ });
261
291
  if (!checkResult.satisfied) {
262
292
  result.passed = false;
263
293
  throw new constraint_1.ConstraintViolationError(checkResult);
@@ -272,6 +302,19 @@ class ConstraintChecker {
272
302
  continue;
273
303
  const checkResult = await this.check(constraint, context);
274
304
  result.guidelines.push(checkResult);
305
+ // 记录 trace
306
+ const severity = this.getSeverity(constraint.level);
307
+ traceCollector.record({
308
+ constraintId: constraint.id,
309
+ level: 'guideline',
310
+ timestamp: Date.now(),
311
+ result: checkResult.satisfied ? 'pass' : 'fail',
312
+ operation: context.operation,
313
+ severity,
314
+ exceptionApplied: checkResult.message?.includes('豁免') ? constraint.exceptions?.[0] : undefined,
315
+ projectPath: context.projectPath,
316
+ sessionId: context.sessionId,
317
+ });
275
318
  if (!checkResult.satisfied) {
276
319
  result.warningCount++;
277
320
  }
@@ -285,6 +328,17 @@ class ConstraintChecker {
285
328
  continue;
286
329
  const checkResult = await this.check(constraint, context);
287
330
  result.tips.push(checkResult);
331
+ // 记录 trace
332
+ traceCollector.record({
333
+ constraintId: constraint.id,
334
+ level: 'tip',
335
+ timestamp: Date.now(),
336
+ result: checkResult.satisfied ? 'pass' : 'fail',
337
+ operation: context.operation,
338
+ severity: this.getSeverity(constraint.level),
339
+ projectPath: context.projectPath,
340
+ sessionId: context.sessionId,
341
+ });
288
342
  if (!checkResult.satisfied) {
289
343
  result.tipCount++;
290
344
  }