modestbench 0.1.0 → 0.2.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.
- package/CHANGELOG.md +11 -0
- package/README.md +39 -31
- package/dist/bootstrap.cjs +10 -10
- package/dist/bootstrap.cjs.map +1 -1
- package/dist/bootstrap.d.cts.map +1 -1
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +5 -5
- package/dist/bootstrap.js.map +1 -1
- package/dist/cli/commands/history.cjs +108 -266
- package/dist/cli/commands/history.cjs.map +1 -1
- package/dist/cli/commands/history.d.cts +75 -12
- package/dist/cli/commands/history.d.cts.map +1 -1
- package/dist/cli/commands/history.d.ts +75 -12
- package/dist/cli/commands/history.d.ts.map +1 -1
- package/dist/cli/commands/history.js +105 -268
- package/dist/cli/commands/history.js.map +1 -1
- package/dist/cli/commands/run.cjs +18 -5
- package/dist/cli/commands/run.cjs.map +1 -1
- package/dist/cli/commands/run.d.cts +1 -0
- package/dist/cli/commands/run.d.cts.map +1 -1
- package/dist/cli/commands/run.d.ts +1 -0
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +18 -5
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/index.cjs +307 -91
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.d.cts.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +308 -92
- package/dist/cli/index.js.map +1 -1
- package/dist/core/engine.cjs +8 -1
- package/dist/core/engine.cjs.map +1 -1
- package/dist/core/engine.d.cts +3 -0
- package/dist/core/engine.d.cts.map +1 -1
- package/dist/core/engine.d.ts +3 -0
- package/dist/core/engine.d.ts.map +1 -1
- package/dist/core/engine.js +8 -1
- package/dist/core/engine.js.map +1 -1
- package/dist/core/output-path-resolver.cjs +34 -0
- package/dist/core/output-path-resolver.cjs.map +1 -0
- package/dist/core/output-path-resolver.d.cts +10 -0
- package/dist/core/output-path-resolver.d.cts.map +1 -0
- package/dist/core/output-path-resolver.d.ts +10 -0
- package/dist/core/output-path-resolver.d.ts.map +1 -0
- package/dist/core/output-path-resolver.js +30 -0
- package/dist/core/output-path-resolver.js.map +1 -0
- package/dist/formatters/history/base.cjs +9 -0
- package/dist/formatters/history/base.cjs.map +1 -0
- package/dist/formatters/history/base.d.cts +26 -0
- package/dist/formatters/history/base.d.cts.map +1 -0
- package/dist/formatters/history/base.d.ts +26 -0
- package/dist/formatters/history/base.d.ts.map +1 -0
- package/dist/formatters/history/base.js +8 -0
- package/dist/formatters/history/base.js.map +1 -0
- package/dist/formatters/history/compare.cjs +127 -0
- package/dist/formatters/history/compare.cjs.map +1 -0
- package/dist/formatters/history/compare.d.cts +21 -0
- package/dist/formatters/history/compare.d.cts.map +1 -0
- package/dist/formatters/history/compare.d.ts +21 -0
- package/dist/formatters/history/compare.d.ts.map +1 -0
- package/dist/formatters/history/compare.js +123 -0
- package/dist/formatters/history/compare.js.map +1 -0
- package/dist/formatters/history/list.cjs +74 -0
- package/dist/formatters/history/list.cjs.map +1 -0
- package/dist/formatters/history/list.d.cts +25 -0
- package/dist/formatters/history/list.d.cts.map +1 -0
- package/dist/formatters/history/list.d.ts +25 -0
- package/dist/formatters/history/list.d.ts.map +1 -0
- package/dist/formatters/history/list.js +70 -0
- package/dist/formatters/history/list.js.map +1 -0
- package/dist/formatters/history/show.cjs +98 -0
- package/dist/formatters/history/show.cjs.map +1 -0
- package/dist/formatters/history/show.d.cts +21 -0
- package/dist/formatters/history/show.d.cts.map +1 -0
- package/dist/formatters/history/show.d.ts +21 -0
- package/dist/formatters/history/show.d.ts.map +1 -0
- package/dist/formatters/history/show.js +94 -0
- package/dist/formatters/history/show.js.map +1 -0
- package/dist/formatters/history/trends.cjs +194 -0
- package/dist/formatters/history/trends.cjs.map +1 -0
- package/dist/formatters/history/trends.d.cts +22 -0
- package/dist/formatters/history/trends.d.cts.map +1 -0
- package/dist/formatters/history/trends.d.ts +22 -0
- package/dist/formatters/history/trends.d.ts.map +1 -0
- package/dist/formatters/history/trends.js +190 -0
- package/dist/formatters/history/trends.js.map +1 -0
- package/dist/formatters/history/visualization.cjs +79 -0
- package/dist/formatters/history/visualization.cjs.map +1 -0
- package/dist/formatters/history/visualization.d.cts +24 -0
- package/dist/formatters/history/visualization.d.cts.map +1 -0
- package/dist/formatters/history/visualization.d.ts +24 -0
- package/dist/formatters/history/visualization.d.ts.map +1 -0
- package/dist/formatters/history/visualization.js +74 -0
- package/dist/formatters/history/visualization.js.map +1 -0
- package/dist/index.cjs +15 -17
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -5
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -9
- package/dist/index.js.map +1 -1
- package/dist/reporters/csv.cjs +2 -2
- package/dist/reporters/csv.cjs.map +1 -1
- package/dist/reporters/csv.d.cts +1 -1
- package/dist/reporters/csv.d.cts.map +1 -1
- package/dist/reporters/csv.d.ts +1 -1
- package/dist/reporters/csv.d.ts.map +1 -1
- package/dist/reporters/csv.js +1 -1
- package/dist/reporters/csv.js.map +1 -1
- package/dist/reporters/human.cjs +24 -62
- package/dist/reporters/human.cjs.map +1 -1
- package/dist/reporters/human.d.cts +1 -1
- package/dist/reporters/human.d.cts.map +1 -1
- package/dist/reporters/human.d.ts +1 -1
- package/dist/reporters/human.d.ts.map +1 -1
- package/dist/reporters/human.js +2 -40
- package/dist/reporters/human.js.map +1 -1
- package/dist/reporters/json.cjs +2 -2
- package/dist/reporters/json.cjs.map +1 -1
- package/dist/reporters/json.d.cts +1 -1
- package/dist/reporters/json.d.cts.map +1 -1
- package/dist/reporters/json.d.ts +1 -1
- package/dist/reporters/json.d.ts.map +1 -1
- package/dist/reporters/json.js +1 -1
- package/dist/reporters/json.js.map +1 -1
- package/dist/reporters/simple.cjs +2 -2
- package/dist/reporters/simple.cjs.map +1 -1
- package/dist/reporters/simple.d.cts +1 -1
- package/dist/reporters/simple.d.cts.map +1 -1
- package/dist/reporters/simple.d.ts +1 -1
- package/dist/reporters/simple.d.ts.map +1 -1
- package/dist/reporters/simple.js +1 -1
- package/dist/reporters/simple.js.map +1 -1
- package/dist/{config/manager.cjs → services/config-manager.cjs} +2 -2
- package/dist/services/config-manager.cjs.map +1 -0
- package/dist/{config/manager.d.cts → services/config-manager.d.cts} +1 -1
- package/dist/services/config-manager.d.cts.map +1 -0
- package/dist/{config/manager.d.ts → services/config-manager.d.ts} +1 -1
- package/dist/services/config-manager.d.ts.map +1 -0
- package/dist/{config/manager.js → services/config-manager.js} +2 -2
- package/dist/services/config-manager.js.map +1 -0
- package/dist/{core/loader.cjs → services/file-loader.cjs} +2 -2
- package/dist/services/file-loader.cjs.map +1 -0
- package/dist/{core/loader.d.cts → services/file-loader.d.cts} +1 -1
- package/dist/services/file-loader.d.cts.map +1 -0
- package/dist/{core/loader.d.ts → services/file-loader.d.ts} +1 -1
- package/dist/services/file-loader.d.ts.map +1 -0
- package/dist/{core/loader.js → services/file-loader.js} +2 -2
- package/dist/services/file-loader.js.map +1 -0
- package/dist/services/history/comparison.cjs +124 -0
- package/dist/services/history/comparison.cjs.map +1 -0
- package/dist/services/history/comparison.d.cts +18 -0
- package/dist/services/history/comparison.d.cts.map +1 -0
- package/dist/services/history/comparison.d.ts +18 -0
- package/dist/services/history/comparison.d.ts.map +1 -0
- package/dist/services/history/comparison.js +120 -0
- package/dist/services/history/comparison.js.map +1 -0
- package/dist/services/history/models.cjs +9 -0
- package/dist/services/history/models.cjs.map +1 -0
- package/dist/services/history/models.d.cts +139 -0
- package/dist/services/history/models.d.cts.map +1 -0
- package/dist/services/history/models.d.ts +139 -0
- package/dist/services/history/models.d.ts.map +1 -0
- package/dist/services/history/models.js +8 -0
- package/dist/services/history/models.js.map +1 -0
- package/dist/services/history/query.cjs +97 -0
- package/dist/services/history/query.cjs.map +1 -0
- package/dist/services/history/query.d.cts +38 -0
- package/dist/services/history/query.d.cts.map +1 -0
- package/dist/services/history/query.d.ts +38 -0
- package/dist/services/history/query.d.ts.map +1 -0
- package/dist/services/history/query.js +92 -0
- package/dist/services/history/query.js.map +1 -0
- package/dist/services/history/trend-analysis.cjs +187 -0
- package/dist/services/history/trend-analysis.cjs.map +1 -0
- package/dist/services/history/trend-analysis.d.cts +34 -0
- package/dist/services/history/trend-analysis.d.cts.map +1 -0
- package/dist/services/history/trend-analysis.d.ts +34 -0
- package/dist/services/history/trend-analysis.d.ts.map +1 -0
- package/dist/services/history/trend-analysis.js +179 -0
- package/dist/services/history/trend-analysis.js.map +1 -0
- package/dist/{storage/history.cjs → services/history-storage.cjs} +1 -1
- package/dist/services/history-storage.cjs.map +1 -0
- package/dist/{storage/history.d.cts → services/history-storage.d.cts} +1 -1
- package/dist/services/history-storage.d.cts.map +1 -0
- package/dist/{storage/history.d.ts → services/history-storage.d.ts} +1 -1
- package/dist/services/history-storage.d.ts.map +1 -0
- package/dist/{storage/history.js → services/history-storage.js} +1 -1
- package/dist/services/history-storage.js.map +1 -0
- package/dist/{progress/manager.cjs → services/progress-manager.cjs} +1 -1
- package/dist/services/progress-manager.cjs.map +1 -0
- package/dist/{progress/manager.d.cts → services/progress-manager.d.cts} +1 -1
- package/dist/services/progress-manager.d.cts.map +1 -0
- package/dist/{progress/manager.d.ts → services/progress-manager.d.ts} +1 -1
- package/dist/services/progress-manager.d.ts.map +1 -0
- package/dist/{progress/manager.js → services/progress-manager.js} +1 -1
- package/dist/services/progress-manager.js.map +1 -0
- package/dist/{reporters/registry.cjs → services/reporter-registry.cjs} +1 -1
- package/dist/services/reporter-registry.cjs.map +1 -0
- package/dist/{reporters/registry.d.cts → services/reporter-registry.d.cts} +1 -1
- package/dist/services/reporter-registry.d.cts.map +1 -0
- package/dist/{reporters/registry.d.ts → services/reporter-registry.d.ts} +1 -1
- package/dist/services/reporter-registry.d.ts.map +1 -0
- package/dist/{reporters/registry.js → services/reporter-registry.js} +1 -1
- package/dist/services/reporter-registry.js.map +1 -0
- package/dist/types/cli.d.cts +3 -0
- package/dist/types/cli.d.cts.map +1 -1
- package/dist/types/cli.d.ts +3 -0
- package/dist/types/cli.d.ts.map +1 -1
- package/dist/utils/ansi.cjs +61 -0
- package/dist/utils/ansi.cjs.map +1 -0
- package/dist/utils/ansi.d.cts +53 -0
- package/dist/utils/ansi.d.cts.map +1 -0
- package/dist/utils/ansi.d.ts +53 -0
- package/dist/utils/ansi.d.ts.map +1 -0
- package/dist/utils/ansi.js +57 -0
- package/dist/utils/ansi.js.map +1 -0
- package/package.json +5 -4
- package/src/bootstrap.ts +5 -5
- package/src/cli/commands/history.ts +194 -342
- package/src/cli/commands/run.ts +32 -3
- package/src/cli/index.ts +361 -106
- package/src/core/engine.ts +9 -1
- package/src/core/output-path-resolver.ts +38 -0
- package/src/formatters/history/base.ts +28 -0
- package/src/formatters/history/compare.ts +186 -0
- package/src/formatters/history/list.ts +101 -0
- package/src/formatters/history/show.ts +155 -0
- package/src/formatters/history/trends.ts +281 -0
- package/src/formatters/history/visualization.ts +93 -0
- package/src/index.ts +7 -11
- package/src/reporters/csv.ts +1 -1
- package/src/reporters/human.ts +2 -42
- package/src/reporters/json.ts +1 -1
- package/src/reporters/simple.ts +1 -1
- package/src/{config/manager.ts → services/config-manager.ts} +1 -1
- package/src/{core/loader.ts → services/file-loader.ts} +1 -1
- package/src/services/history/comparison.ts +130 -0
- package/src/services/history/models.ts +148 -0
- package/src/services/history/query.ts +116 -0
- package/src/services/history/trend-analysis.ts +238 -0
- package/src/types/cli.ts +3 -0
- package/src/utils/ansi.ts +59 -0
- package/dist/config/manager.cjs.map +0 -1
- package/dist/config/manager.d.cts.map +0 -1
- package/dist/config/manager.d.ts.map +0 -1
- package/dist/config/manager.js.map +0 -1
- package/dist/core/loader.cjs.map +0 -1
- package/dist/core/loader.d.cts.map +0 -1
- package/dist/core/loader.d.ts.map +0 -1
- package/dist/core/loader.js.map +0 -1
- package/dist/progress/manager.cjs.map +0 -1
- package/dist/progress/manager.d.cts.map +0 -1
- package/dist/progress/manager.d.ts.map +0 -1
- package/dist/progress/manager.js.map +0 -1
- package/dist/reporters/registry.cjs.map +0 -1
- package/dist/reporters/registry.d.cts.map +0 -1
- package/dist/reporters/registry.d.ts.map +0 -1
- package/dist/reporters/registry.js.map +0 -1
- package/dist/storage/history.cjs.map +0 -1
- package/dist/storage/history.d.cts.map +0 -1
- package/dist/storage/history.d.ts.map +0 -1
- package/dist/storage/history.js.map +0 -1
- /package/src/{storage/history.ts → services/history-storage.ts} +0 -0
- /package/src/{progress/manager.ts → services/progress-manager.ts} +0 -0
- /package/src/{reporters/registry.ts → services/reporter-registry.ts} +0 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Benchmark Comparison Service
|
|
3
|
+
*
|
|
4
|
+
* Handles comparison logic between two benchmark runs, calculating performance
|
|
5
|
+
* differences and categorizing tasks.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Service for comparing benchmark runs
|
|
9
|
+
*/
|
|
10
|
+
export class ComparisonService {
|
|
11
|
+
/**
|
|
12
|
+
* Compare two benchmark runs and produce detailed comparison result
|
|
13
|
+
*/
|
|
14
|
+
compareRuns(run1, run2) {
|
|
15
|
+
// Build task maps for comparison
|
|
16
|
+
const tasksMap1 = new Map();
|
|
17
|
+
const tasksMap2 = new Map();
|
|
18
|
+
// Extract tasks from run1
|
|
19
|
+
for (const file of run1.files) {
|
|
20
|
+
for (const suite of file.suites) {
|
|
21
|
+
for (const task of suite.tasks) {
|
|
22
|
+
if (!task.error) {
|
|
23
|
+
const key = `${file.filePath}::${suite.name}::${task.name}`;
|
|
24
|
+
tasksMap1.set(key, {
|
|
25
|
+
file: file.filePath,
|
|
26
|
+
inBoth: false,
|
|
27
|
+
percentChange: 0,
|
|
28
|
+
run1: {
|
|
29
|
+
cv: task.cv,
|
|
30
|
+
iterations: task.iterations,
|
|
31
|
+
max: task.max,
|
|
32
|
+
mean: task.mean,
|
|
33
|
+
min: task.min,
|
|
34
|
+
},
|
|
35
|
+
suite: suite.name,
|
|
36
|
+
task: task.name,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Extract tasks from run2 and merge
|
|
43
|
+
for (const file of run2.files) {
|
|
44
|
+
for (const suite of file.suites) {
|
|
45
|
+
for (const task of suite.tasks) {
|
|
46
|
+
if (!task.error) {
|
|
47
|
+
const key = `${file.filePath}::${suite.name}::${task.name}`;
|
|
48
|
+
const existing = tasksMap1.get(key);
|
|
49
|
+
if (existing && existing.run1) {
|
|
50
|
+
// Task exists in both runs - calculate comparison
|
|
51
|
+
const percentChange = ((task.mean - existing.run1.mean) / existing.run1.mean) * 100;
|
|
52
|
+
tasksMap1.set(key, {
|
|
53
|
+
...existing,
|
|
54
|
+
inBoth: true,
|
|
55
|
+
percentChange,
|
|
56
|
+
run2: {
|
|
57
|
+
cv: task.cv,
|
|
58
|
+
iterations: task.iterations,
|
|
59
|
+
max: task.max,
|
|
60
|
+
mean: task.mean,
|
|
61
|
+
min: task.min,
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
// Task only in run2
|
|
67
|
+
tasksMap2.set(key, {
|
|
68
|
+
file: file.filePath,
|
|
69
|
+
inBoth: false,
|
|
70
|
+
percentChange: 0,
|
|
71
|
+
run2: {
|
|
72
|
+
cv: task.cv,
|
|
73
|
+
iterations: task.iterations,
|
|
74
|
+
max: task.max,
|
|
75
|
+
mean: task.mean,
|
|
76
|
+
min: task.min,
|
|
77
|
+
},
|
|
78
|
+
suite: suite.name,
|
|
79
|
+
task: task.name,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Separate tasks into categories
|
|
87
|
+
const tasksInBoth = [];
|
|
88
|
+
const tasksOnlyIn1 = [];
|
|
89
|
+
const tasksOnlyIn2 = [];
|
|
90
|
+
for (const task of tasksMap1.values()) {
|
|
91
|
+
if (task.inBoth) {
|
|
92
|
+
tasksInBoth.push(task);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
tasksOnlyIn1.push(task);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
for (const task of tasksMap2.values()) {
|
|
99
|
+
tasksOnlyIn2.push(task);
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
run1: {
|
|
103
|
+
endTime: run1.endTime,
|
|
104
|
+
id: run1.id,
|
|
105
|
+
startTime: run1.startTime,
|
|
106
|
+
summary: run1.summary,
|
|
107
|
+
},
|
|
108
|
+
run2: {
|
|
109
|
+
endTime: run2.endTime,
|
|
110
|
+
id: run2.id,
|
|
111
|
+
startTime: run2.startTime,
|
|
112
|
+
summary: run2.summary,
|
|
113
|
+
},
|
|
114
|
+
tasksInBoth,
|
|
115
|
+
tasksOnlyInRun1: tasksOnlyIn1,
|
|
116
|
+
tasksOnlyInRun2: tasksOnlyIn2,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=comparison.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comparison.js","sourceRoot":"","sources":["../../../src/services/history/comparison.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Data Models for History Services
|
|
4
|
+
*
|
|
5
|
+
* Type definitions for history command data structures, shared between
|
|
6
|
+
* services, formatters, and CLI handlers.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
//# sourceMappingURL=models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/services/history/models.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data Models for History Services
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for history command data structures, shared between
|
|
5
|
+
* services, formatters, and CLI handlers.
|
|
6
|
+
*/
|
|
7
|
+
import type { BenchmarkRun } from "../../types/index.cjs";
|
|
8
|
+
/**
|
|
9
|
+
* Result from comparing two benchmark runs
|
|
10
|
+
*/
|
|
11
|
+
export interface CompareResult {
|
|
12
|
+
run1: {
|
|
13
|
+
endTime: Date;
|
|
14
|
+
id: string;
|
|
15
|
+
startTime: Date;
|
|
16
|
+
summary: {
|
|
17
|
+
failedTasks: number;
|
|
18
|
+
passedTasks: number;
|
|
19
|
+
totalFiles: number;
|
|
20
|
+
totalTasks: number;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
run2: {
|
|
24
|
+
endTime: Date;
|
|
25
|
+
id: string;
|
|
26
|
+
startTime: Date;
|
|
27
|
+
summary: {
|
|
28
|
+
failedTasks: number;
|
|
29
|
+
passedTasks: number;
|
|
30
|
+
totalFiles: number;
|
|
31
|
+
totalTasks: number;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
tasksInBoth: TaskComparison[];
|
|
35
|
+
tasksOnlyInRun1: TaskComparison[];
|
|
36
|
+
tasksOnlyInRun2: TaskComparison[];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Distribution bucket for histogram visualization
|
|
40
|
+
*/
|
|
41
|
+
export interface DistributionBucket {
|
|
42
|
+
count: number;
|
|
43
|
+
label: string;
|
|
44
|
+
max: number;
|
|
45
|
+
min: number;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Result from listing historical runs
|
|
49
|
+
*/
|
|
50
|
+
export interface HistoryListResult {
|
|
51
|
+
runs: Array<{
|
|
52
|
+
duration: number;
|
|
53
|
+
id: string;
|
|
54
|
+
startTime: Date;
|
|
55
|
+
summary: {
|
|
56
|
+
failedTasks: number;
|
|
57
|
+
passedTasks: number;
|
|
58
|
+
totalFiles: number;
|
|
59
|
+
totalTasks: number;
|
|
60
|
+
};
|
|
61
|
+
}>;
|
|
62
|
+
totalCount: number;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Show command result (just wraps BenchmarkRun for consistency)
|
|
66
|
+
*/
|
|
67
|
+
export type ShowResult = BenchmarkRun;
|
|
68
|
+
/**
|
|
69
|
+
* Task comparison result between two runs
|
|
70
|
+
*/
|
|
71
|
+
export interface TaskComparison {
|
|
72
|
+
file: string;
|
|
73
|
+
inBoth: boolean;
|
|
74
|
+
percentChange: number;
|
|
75
|
+
run1?: {
|
|
76
|
+
cv: number;
|
|
77
|
+
iterations: number;
|
|
78
|
+
max: number;
|
|
79
|
+
mean: number;
|
|
80
|
+
min: number;
|
|
81
|
+
};
|
|
82
|
+
run2?: {
|
|
83
|
+
cv: number;
|
|
84
|
+
iterations: number;
|
|
85
|
+
max: number;
|
|
86
|
+
mean: number;
|
|
87
|
+
min: number;
|
|
88
|
+
};
|
|
89
|
+
suite: string;
|
|
90
|
+
task: string;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Complete trend analysis for a single task
|
|
94
|
+
*/
|
|
95
|
+
export interface TrendData {
|
|
96
|
+
confidence: number;
|
|
97
|
+
dataPoints: TrendDataPoint[];
|
|
98
|
+
percentChange: number;
|
|
99
|
+
runs: number;
|
|
100
|
+
statistics: TrendStatistics;
|
|
101
|
+
task: string;
|
|
102
|
+
trend: 'degrading' | 'improving' | 'stable';
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Single data point in a trend series
|
|
106
|
+
*/
|
|
107
|
+
export interface TrendDataPoint {
|
|
108
|
+
date: Date;
|
|
109
|
+
mean: number;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Result from analyzing performance trends
|
|
113
|
+
*/
|
|
114
|
+
export interface TrendsResult {
|
|
115
|
+
lowConfidenceRegressions: TrendData[];
|
|
116
|
+
regressions: TrendData[];
|
|
117
|
+
runs: number;
|
|
118
|
+
summary: {
|
|
119
|
+
degradingTasks: number;
|
|
120
|
+
improvingTasks: number;
|
|
121
|
+
stableTasks: number;
|
|
122
|
+
totalTasks: number;
|
|
123
|
+
};
|
|
124
|
+
timespan: {
|
|
125
|
+
end: Date;
|
|
126
|
+
start: Date;
|
|
127
|
+
};
|
|
128
|
+
trends: TrendData[];
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Statistical metrics for trend analysis
|
|
132
|
+
*/
|
|
133
|
+
export interface TrendStatistics {
|
|
134
|
+
mean: number;
|
|
135
|
+
median: number;
|
|
136
|
+
stdDeviation: number;
|
|
137
|
+
variance: number;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=models.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../src/services/history/models.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data Models for History Services
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for history command data structures, shared between
|
|
5
|
+
* services, formatters, and CLI handlers.
|
|
6
|
+
*/
|
|
7
|
+
import type { BenchmarkRun } from "../../types/index.js";
|
|
8
|
+
/**
|
|
9
|
+
* Result from comparing two benchmark runs
|
|
10
|
+
*/
|
|
11
|
+
export interface CompareResult {
|
|
12
|
+
run1: {
|
|
13
|
+
endTime: Date;
|
|
14
|
+
id: string;
|
|
15
|
+
startTime: Date;
|
|
16
|
+
summary: {
|
|
17
|
+
failedTasks: number;
|
|
18
|
+
passedTasks: number;
|
|
19
|
+
totalFiles: number;
|
|
20
|
+
totalTasks: number;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
run2: {
|
|
24
|
+
endTime: Date;
|
|
25
|
+
id: string;
|
|
26
|
+
startTime: Date;
|
|
27
|
+
summary: {
|
|
28
|
+
failedTasks: number;
|
|
29
|
+
passedTasks: number;
|
|
30
|
+
totalFiles: number;
|
|
31
|
+
totalTasks: number;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
tasksInBoth: TaskComparison[];
|
|
35
|
+
tasksOnlyInRun1: TaskComparison[];
|
|
36
|
+
tasksOnlyInRun2: TaskComparison[];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Distribution bucket for histogram visualization
|
|
40
|
+
*/
|
|
41
|
+
export interface DistributionBucket {
|
|
42
|
+
count: number;
|
|
43
|
+
label: string;
|
|
44
|
+
max: number;
|
|
45
|
+
min: number;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Result from listing historical runs
|
|
49
|
+
*/
|
|
50
|
+
export interface HistoryListResult {
|
|
51
|
+
runs: Array<{
|
|
52
|
+
duration: number;
|
|
53
|
+
id: string;
|
|
54
|
+
startTime: Date;
|
|
55
|
+
summary: {
|
|
56
|
+
failedTasks: number;
|
|
57
|
+
passedTasks: number;
|
|
58
|
+
totalFiles: number;
|
|
59
|
+
totalTasks: number;
|
|
60
|
+
};
|
|
61
|
+
}>;
|
|
62
|
+
totalCount: number;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Show command result (just wraps BenchmarkRun for consistency)
|
|
66
|
+
*/
|
|
67
|
+
export type ShowResult = BenchmarkRun;
|
|
68
|
+
/**
|
|
69
|
+
* Task comparison result between two runs
|
|
70
|
+
*/
|
|
71
|
+
export interface TaskComparison {
|
|
72
|
+
file: string;
|
|
73
|
+
inBoth: boolean;
|
|
74
|
+
percentChange: number;
|
|
75
|
+
run1?: {
|
|
76
|
+
cv: number;
|
|
77
|
+
iterations: number;
|
|
78
|
+
max: number;
|
|
79
|
+
mean: number;
|
|
80
|
+
min: number;
|
|
81
|
+
};
|
|
82
|
+
run2?: {
|
|
83
|
+
cv: number;
|
|
84
|
+
iterations: number;
|
|
85
|
+
max: number;
|
|
86
|
+
mean: number;
|
|
87
|
+
min: number;
|
|
88
|
+
};
|
|
89
|
+
suite: string;
|
|
90
|
+
task: string;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Complete trend analysis for a single task
|
|
94
|
+
*/
|
|
95
|
+
export interface TrendData {
|
|
96
|
+
confidence: number;
|
|
97
|
+
dataPoints: TrendDataPoint[];
|
|
98
|
+
percentChange: number;
|
|
99
|
+
runs: number;
|
|
100
|
+
statistics: TrendStatistics;
|
|
101
|
+
task: string;
|
|
102
|
+
trend: 'degrading' | 'improving' | 'stable';
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Single data point in a trend series
|
|
106
|
+
*/
|
|
107
|
+
export interface TrendDataPoint {
|
|
108
|
+
date: Date;
|
|
109
|
+
mean: number;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Result from analyzing performance trends
|
|
113
|
+
*/
|
|
114
|
+
export interface TrendsResult {
|
|
115
|
+
lowConfidenceRegressions: TrendData[];
|
|
116
|
+
regressions: TrendData[];
|
|
117
|
+
runs: number;
|
|
118
|
+
summary: {
|
|
119
|
+
degradingTasks: number;
|
|
120
|
+
improvingTasks: number;
|
|
121
|
+
stableTasks: number;
|
|
122
|
+
totalTasks: number;
|
|
123
|
+
};
|
|
124
|
+
timespan: {
|
|
125
|
+
end: Date;
|
|
126
|
+
start: Date;
|
|
127
|
+
};
|
|
128
|
+
trends: TrendData[];
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Statistical metrics for trend analysis
|
|
132
|
+
*/
|
|
133
|
+
export interface TrendStatistics {
|
|
134
|
+
mean: number;
|
|
135
|
+
median: number;
|
|
136
|
+
stdDeviation: number;
|
|
137
|
+
variance: number;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=models.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../src/services/history/models.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/services/history/models.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* History Query Service
|
|
4
|
+
*
|
|
5
|
+
* Handles querying benchmark run history with date parsing and filtering.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.parseDate = exports.HistoryQueryService = void 0;
|
|
9
|
+
/**
|
|
10
|
+
* Service for querying historical benchmark runs
|
|
11
|
+
*/
|
|
12
|
+
class HistoryQueryService {
|
|
13
|
+
storage;
|
|
14
|
+
constructor(storage) {
|
|
15
|
+
this.storage = storage;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Query runs with automatic date string parsing
|
|
19
|
+
*/
|
|
20
|
+
async queryWithDateParsing(options) {
|
|
21
|
+
// Build query object all at once
|
|
22
|
+
const query = {
|
|
23
|
+
...(options.since && { since: (0, exports.parseDate)(options.since) }),
|
|
24
|
+
...(options.until && { until: (0, exports.parseDate)(options.until) }),
|
|
25
|
+
...(options.pattern && { pattern: options.pattern }),
|
|
26
|
+
...(options.tags && options.tags.length > 0 && { tags: options.tags }),
|
|
27
|
+
...(options.limit && { limit: options.limit }),
|
|
28
|
+
};
|
|
29
|
+
return await this.storage.queryRuns(query);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.HistoryQueryService = HistoryQueryService;
|
|
33
|
+
/**
|
|
34
|
+
* Parse date string (ISO 8601 or relative)
|
|
35
|
+
*
|
|
36
|
+
* Supports:
|
|
37
|
+
*
|
|
38
|
+
* - ISO 8601: "2025-10-24T12:00:00Z", "2025-10-24"
|
|
39
|
+
* - Relative: "1 day ago", "3 weeks ago", "2 hours ago"
|
|
40
|
+
* - Shorthand: "1d", "2w", "3m", "6h"
|
|
41
|
+
*
|
|
42
|
+
* @param dateStr - Date string to parse
|
|
43
|
+
* @returns Parsed Date object
|
|
44
|
+
* @throws Error if date format is invalid
|
|
45
|
+
*/
|
|
46
|
+
const parseDate = (dateStr) => {
|
|
47
|
+
if (!dateStr || dateStr.trim() === '') {
|
|
48
|
+
throw new Error(`Invalid date format: "${dateStr}"`);
|
|
49
|
+
}
|
|
50
|
+
// Try parsing as ISO 8601 first
|
|
51
|
+
const isoDate = new Date(dateStr);
|
|
52
|
+
if (!isNaN(isoDate.getTime())) {
|
|
53
|
+
return isoDate;
|
|
54
|
+
}
|
|
55
|
+
// Parse relative dates like "1 week ago", "3 days ago"
|
|
56
|
+
const relativePattern = /^(\d+)\s+(hour|day|week|month)s?\s+ago$/i;
|
|
57
|
+
const relativeMatch = dateStr.trim().match(relativePattern);
|
|
58
|
+
if (relativeMatch && relativeMatch[1] && relativeMatch[2]) {
|
|
59
|
+
const amount = parseInt(relativeMatch[1], 10);
|
|
60
|
+
const unit = relativeMatch[2].toLowerCase();
|
|
61
|
+
if (amount <= 0) {
|
|
62
|
+
throw new Error(`Invalid date format: "${dateStr}"`);
|
|
63
|
+
}
|
|
64
|
+
const now = new Date();
|
|
65
|
+
const msPerUnit = {
|
|
66
|
+
day: 24 * 60 * 60 * 1000,
|
|
67
|
+
hour: 60 * 60 * 1000,
|
|
68
|
+
month: 30 * 24 * 60 * 60 * 1000, // Approximate
|
|
69
|
+
week: 7 * 24 * 60 * 60 * 1000,
|
|
70
|
+
};
|
|
71
|
+
const offset = amount * (msPerUnit[unit] || 0);
|
|
72
|
+
return new Date(now.getTime() - offset);
|
|
73
|
+
}
|
|
74
|
+
// Parse shorthand formats like "1d", "2w", "3m", "6h"
|
|
75
|
+
// cspell:ignore hdwm
|
|
76
|
+
const shorthandPattern = /^(\d+)([hdwm])$/i;
|
|
77
|
+
const shorthandMatch = dateStr.trim().match(shorthandPattern);
|
|
78
|
+
if (shorthandMatch && shorthandMatch[1] && shorthandMatch[2]) {
|
|
79
|
+
const amount = parseInt(shorthandMatch[1], 10);
|
|
80
|
+
const unit = shorthandMatch[2].toLowerCase();
|
|
81
|
+
if (amount <= 0) {
|
|
82
|
+
throw new Error(`Invalid date format: "${dateStr}"`);
|
|
83
|
+
}
|
|
84
|
+
const now = new Date();
|
|
85
|
+
const msPerUnit = {
|
|
86
|
+
d: 24 * 60 * 60 * 1000,
|
|
87
|
+
h: 60 * 60 * 1000,
|
|
88
|
+
m: 30 * 24 * 60 * 60 * 1000, // Approximate month
|
|
89
|
+
w: 7 * 24 * 60 * 60 * 1000,
|
|
90
|
+
};
|
|
91
|
+
const offset = amount * (msPerUnit[unit] || 0);
|
|
92
|
+
return new Date(now.getTime() - offset);
|
|
93
|
+
}
|
|
94
|
+
throw new Error(`Invalid date format: "${dateStr}"`);
|
|
95
|
+
};
|
|
96
|
+
exports.parseDate = parseDate;
|
|
97
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/services/history/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* History Query Service
|
|
3
|
+
*
|
|
4
|
+
* Handles querying benchmark run history with date parsing and filtering.
|
|
5
|
+
*/
|
|
6
|
+
import type { BenchmarkRun, HistoryStorage } from "../../types/index.cjs";
|
|
7
|
+
/**
|
|
8
|
+
* Service for querying historical benchmark runs
|
|
9
|
+
*/
|
|
10
|
+
export declare class HistoryQueryService {
|
|
11
|
+
private readonly storage;
|
|
12
|
+
constructor(storage: HistoryStorage);
|
|
13
|
+
/**
|
|
14
|
+
* Query runs with automatic date string parsing
|
|
15
|
+
*/
|
|
16
|
+
queryWithDateParsing(options: {
|
|
17
|
+
limit?: number;
|
|
18
|
+
pattern?: string;
|
|
19
|
+
since?: string;
|
|
20
|
+
tags?: string[];
|
|
21
|
+
until?: string;
|
|
22
|
+
}): Promise<BenchmarkRun[]>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Parse date string (ISO 8601 or relative)
|
|
26
|
+
*
|
|
27
|
+
* Supports:
|
|
28
|
+
*
|
|
29
|
+
* - ISO 8601: "2025-10-24T12:00:00Z", "2025-10-24"
|
|
30
|
+
* - Relative: "1 day ago", "3 weeks ago", "2 hours ago"
|
|
31
|
+
* - Shorthand: "1d", "2w", "3m", "6h"
|
|
32
|
+
*
|
|
33
|
+
* @param dateStr - Date string to parse
|
|
34
|
+
* @returns Parsed Date object
|
|
35
|
+
* @throws Error if date format is invalid
|
|
36
|
+
*/
|
|
37
|
+
export declare const parseDate: (dateStr: string) => Date;
|
|
38
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/services/history/query.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,YAAY,EAEZ,cAAc,EACf,8BAA6B;AAE9B;;GAEG;AACH,qBAAa,mBAAmB;IAClB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,cAAc;IAEpD;;OAEG;IACG,oBAAoB,CAAC,OAAO,EAAE;QAClC,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CAY5B;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,SAAS,GAAI,SAAS,MAAM,KAAG,IA6D3C,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* History Query Service
|
|
3
|
+
*
|
|
4
|
+
* Handles querying benchmark run history with date parsing and filtering.
|
|
5
|
+
*/
|
|
6
|
+
import type { BenchmarkRun, HistoryStorage } from "../../types/index.js";
|
|
7
|
+
/**
|
|
8
|
+
* Service for querying historical benchmark runs
|
|
9
|
+
*/
|
|
10
|
+
export declare class HistoryQueryService {
|
|
11
|
+
private readonly storage;
|
|
12
|
+
constructor(storage: HistoryStorage);
|
|
13
|
+
/**
|
|
14
|
+
* Query runs with automatic date string parsing
|
|
15
|
+
*/
|
|
16
|
+
queryWithDateParsing(options: {
|
|
17
|
+
limit?: number;
|
|
18
|
+
pattern?: string;
|
|
19
|
+
since?: string;
|
|
20
|
+
tags?: string[];
|
|
21
|
+
until?: string;
|
|
22
|
+
}): Promise<BenchmarkRun[]>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Parse date string (ISO 8601 or relative)
|
|
26
|
+
*
|
|
27
|
+
* Supports:
|
|
28
|
+
*
|
|
29
|
+
* - ISO 8601: "2025-10-24T12:00:00Z", "2025-10-24"
|
|
30
|
+
* - Relative: "1 day ago", "3 weeks ago", "2 hours ago"
|
|
31
|
+
* - Shorthand: "1d", "2w", "3m", "6h"
|
|
32
|
+
*
|
|
33
|
+
* @param dateStr - Date string to parse
|
|
34
|
+
* @returns Parsed Date object
|
|
35
|
+
* @throws Error if date format is invalid
|
|
36
|
+
*/
|
|
37
|
+
export declare const parseDate: (dateStr: string) => Date;
|
|
38
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/services/history/query.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,YAAY,EAEZ,cAAc,EACf,6BAA6B;AAE9B;;GAEG;AACH,qBAAa,mBAAmB;IAClB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,cAAc;IAEpD;;OAEG;IACG,oBAAoB,CAAC,OAAO,EAAE;QAClC,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CAY5B;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,SAAS,GAAI,SAAS,MAAM,KAAG,IA6D3C,CAAC"}
|