@newrelic/preflight 1.15.4 → 1.15.5
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/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -8
- package/dist/index.js.map +1 -1
- package/dist/metrics/budget-tracker.d.ts +29 -0
- package/dist/metrics/budget-tracker.d.ts.map +1 -1
- package/dist/metrics/budget-tracker.js +39 -0
- package/dist/metrics/budget-tracker.js.map +1 -1
- package/dist/metrics/efficiency-score.d.ts +39 -0
- package/dist/metrics/efficiency-score.d.ts.map +1 -1
- package/dist/metrics/efficiency-score.js +56 -7
- package/dist/metrics/efficiency-score.js.map +1 -1
- package/dist/metrics/quality-proxy-tracker.d.ts +15 -0
- package/dist/metrics/quality-proxy-tracker.d.ts.map +1 -1
- package/dist/metrics/quality-proxy-tracker.js +42 -7
- package/dist/metrics/quality-proxy-tracker.js.map +1 -1
- package/dist/metrics/task-detector-seed.d.ts +4 -0
- package/dist/metrics/task-detector-seed.d.ts.map +1 -0
- package/dist/metrics/task-detector-seed.js +20 -0
- package/dist/metrics/task-detector-seed.js.map +1 -0
- package/dist/metrics/task-detector.d.ts +65 -0
- package/dist/metrics/task-detector.d.ts.map +1 -1
- package/dist/metrics/task-detector.js +76 -0
- package/dist/metrics/task-detector.js.map +1 -1
- package/dist/storage/session-store.d.ts +25 -1
- package/dist/storage/session-store.d.ts.map +1 -1
- package/dist/storage/session-store.js +38 -0
- package/dist/storage/session-store.js.map +1 -1
- package/package.json +1 -1
|
@@ -32,6 +32,18 @@ export interface EfficiencyScoreOptions {
|
|
|
32
32
|
readonly firstAttemptQualityWeight?: number;
|
|
33
33
|
readonly speedBaselineLinesPerSecond?: number;
|
|
34
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Input shape for `EfficiencyScorer.seedFromPersisted()` — a previous
|
|
37
|
+
* process's last checkpoint of `getSessionAverage()` for this same session,
|
|
38
|
+
* built directly from `FullSessionSummary.efficiencyScore` +
|
|
39
|
+
* `.efficiencyScoreComponents` + `.efficiencyScoreSampleCount`
|
|
40
|
+
* (session-store.ts).
|
|
41
|
+
*/
|
|
42
|
+
export interface EfficiencyScoreSeed {
|
|
43
|
+
readonly score: number;
|
|
44
|
+
readonly components: EfficiencyScoreComponents;
|
|
45
|
+
readonly sampleCount: number;
|
|
46
|
+
}
|
|
35
47
|
export declare class EfficiencyScorer implements Resettable {
|
|
36
48
|
private readonly speedWeight;
|
|
37
49
|
private readonly correctnessWeight;
|
|
@@ -40,16 +52,43 @@ export declare class EfficiencyScorer implements Resettable {
|
|
|
40
52
|
private readonly speedBaselineLps;
|
|
41
53
|
private readonly scores;
|
|
42
54
|
private lastEmittedIndex;
|
|
55
|
+
private seededScoreSum;
|
|
56
|
+
private seededSpeedSum;
|
|
57
|
+
private seededCorrectnessSum;
|
|
58
|
+
private seededAutonomySum;
|
|
59
|
+
private seededFirstAttemptSum;
|
|
60
|
+
private seededSampleCount;
|
|
43
61
|
constructor(options?: EfficiencyScoreOptions);
|
|
44
62
|
/**
|
|
45
63
|
* Compute the efficiency score for a completed task.
|
|
46
64
|
* Anti-patterns are optional — if not provided, first-attempt quality defaults to 1.0.
|
|
47
65
|
*/
|
|
48
66
|
computeScore(task: AiCodingTask, antiPatterns?: AntiPattern[]): EfficiencyScore;
|
|
67
|
+
/**
|
|
68
|
+
* Seeds a weighted contribution to the session average from a previous
|
|
69
|
+
* process's last checkpoint for this same session — same restart-recovery
|
|
70
|
+
* problem as `CostTracker.seedFromPersisted()`/`ModelUsageTracker.seedFromPersisted()`,
|
|
71
|
+
* but adapted for a tracker whose own persisted checkpoint is already an
|
|
72
|
+
* average rather than raw per-task data — the per-task score list isn't
|
|
73
|
+
* reconstructable from a checkpoint, only the average is.
|
|
74
|
+
*
|
|
75
|
+
* Adds to current totals rather than overwriting, so callers must invoke
|
|
76
|
+
* this at most once per (re)adopted session id, before any real activity
|
|
77
|
+
* for that id has reached this tracker.
|
|
78
|
+
*/
|
|
79
|
+
seedFromPersisted(seed: EfficiencyScoreSeed): void;
|
|
49
80
|
/**
|
|
50
81
|
* Session-wide rolling average across all scored tasks.
|
|
51
82
|
*/
|
|
52
83
|
getSessionAverage(): EfficiencyScore | null;
|
|
84
|
+
/**
|
|
85
|
+
* Effective sample count behind getSessionAverage() — fresh scores plus
|
|
86
|
+
* any seeded weight from a previous process's checkpoint. Distinct from
|
|
87
|
+
* getScores().length, which is fresh-only and would silently drop or
|
|
88
|
+
* under-weight seeded history if used to persist the sample count that
|
|
89
|
+
* pairs with getSessionAverage()'s seed-inclusive score.
|
|
90
|
+
*/
|
|
91
|
+
getSessionSampleCount(): number;
|
|
53
92
|
/**
|
|
54
93
|
* Recompute and replace the score for a task that may have changed (e.g., active task).
|
|
55
94
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"efficiency-score.d.ts","sourceRoot":"","sources":["../../src/metrics/efficiency-score.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAMzD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,yBAAyB,CAAC;IAC/C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IAC5C,QAAQ,CAAC,2BAA2B,CAAC,EAAE,MAAM,CAAC;CAC/C;AAkBD,qBAAa,gBAAiB,YAAW,UAAU;IACjD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAS;IACnD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAE1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD,OAAO,CAAC,gBAAgB,CAAK;
|
|
1
|
+
{"version":3,"file":"efficiency-score.d.ts","sourceRoot":"","sources":["../../src/metrics/efficiency-score.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,6 +29,17 @@ export class EfficiencyScorer {
|
|
|
29
29
|
speedBaselineLps;
|
|
30
30
|
scores = [];
|
|
31
31
|
lastEmittedIndex = 0;
|
|
32
|
+
// Weighted seed from a previous process's last checkpoint for this same
|
|
33
|
+
// session — see seedFromPersisted()'s doc comment. The persisted
|
|
34
|
+
// checkpoint is already itself an average (not raw per-task scores), so
|
|
35
|
+
// seeding accumulates a weighted contribution (value * sampleCount) rather
|
|
36
|
+
// than raw per-task totals like CostTracker.seedFromPersisted() does.
|
|
37
|
+
seededScoreSum = 0;
|
|
38
|
+
seededSpeedSum = 0;
|
|
39
|
+
seededCorrectnessSum = 0;
|
|
40
|
+
seededAutonomySum = 0;
|
|
41
|
+
seededFirstAttemptSum = 0;
|
|
42
|
+
seededSampleCount = 0;
|
|
32
43
|
constructor(options) {
|
|
33
44
|
this.speedWeight = options?.speedWeight ?? DEFAULT_SPEED_WEIGHT;
|
|
34
45
|
this.correctnessWeight = options?.correctnessWeight ?? DEFAULT_CORRECTNESS_WEIGHT;
|
|
@@ -63,17 +74,40 @@ export class EfficiencyScorer {
|
|
|
63
74
|
}
|
|
64
75
|
return result;
|
|
65
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Seeds a weighted contribution to the session average from a previous
|
|
79
|
+
* process's last checkpoint for this same session — same restart-recovery
|
|
80
|
+
* problem as `CostTracker.seedFromPersisted()`/`ModelUsageTracker.seedFromPersisted()`,
|
|
81
|
+
* but adapted for a tracker whose own persisted checkpoint is already an
|
|
82
|
+
* average rather than raw per-task data — the per-task score list isn't
|
|
83
|
+
* reconstructable from a checkpoint, only the average is.
|
|
84
|
+
*
|
|
85
|
+
* Adds to current totals rather than overwriting, so callers must invoke
|
|
86
|
+
* this at most once per (re)adopted session id, before any real activity
|
|
87
|
+
* for that id has reached this tracker.
|
|
88
|
+
*/
|
|
89
|
+
seedFromPersisted(seed) {
|
|
90
|
+
if (seed.sampleCount <= 0)
|
|
91
|
+
return;
|
|
92
|
+
this.seededScoreSum += seed.score * seed.sampleCount;
|
|
93
|
+
this.seededSpeedSum += seed.components.speed * seed.sampleCount;
|
|
94
|
+
this.seededCorrectnessSum += seed.components.correctness * seed.sampleCount;
|
|
95
|
+
this.seededAutonomySum += seed.components.autonomy * seed.sampleCount;
|
|
96
|
+
this.seededFirstAttemptSum += seed.components.firstAttemptQuality * seed.sampleCount;
|
|
97
|
+
this.seededSampleCount += seed.sampleCount;
|
|
98
|
+
}
|
|
66
99
|
/**
|
|
67
100
|
* Session-wide rolling average across all scored tasks.
|
|
68
101
|
*/
|
|
69
102
|
getSessionAverage() {
|
|
70
|
-
|
|
103
|
+
const n = this.scores.length + this.seededSampleCount;
|
|
104
|
+
if (n === 0)
|
|
71
105
|
return null;
|
|
72
|
-
let totalScore =
|
|
73
|
-
let totalSpeed =
|
|
74
|
-
let totalCorrectness =
|
|
75
|
-
let totalAutonomy =
|
|
76
|
-
let totalFirstAttempt =
|
|
106
|
+
let totalScore = this.seededScoreSum;
|
|
107
|
+
let totalSpeed = this.seededSpeedSum;
|
|
108
|
+
let totalCorrectness = this.seededCorrectnessSum;
|
|
109
|
+
let totalAutonomy = this.seededAutonomySum;
|
|
110
|
+
let totalFirstAttempt = this.seededFirstAttemptSum;
|
|
77
111
|
for (const s of this.scores) {
|
|
78
112
|
totalScore += s.score;
|
|
79
113
|
totalSpeed += s.components.speed;
|
|
@@ -81,7 +115,6 @@ export class EfficiencyScorer {
|
|
|
81
115
|
totalAutonomy += s.components.autonomy;
|
|
82
116
|
totalFirstAttempt += s.components.firstAttemptQuality;
|
|
83
117
|
}
|
|
84
|
-
const n = this.scores.length;
|
|
85
118
|
return {
|
|
86
119
|
score: Math.round((totalScore / n) * 1000) / 1000,
|
|
87
120
|
components: {
|
|
@@ -94,6 +127,16 @@ export class EfficiencyScorer {
|
|
|
94
127
|
timestamp: Date.now(),
|
|
95
128
|
};
|
|
96
129
|
}
|
|
130
|
+
/**
|
|
131
|
+
* Effective sample count behind getSessionAverage() — fresh scores plus
|
|
132
|
+
* any seeded weight from a previous process's checkpoint. Distinct from
|
|
133
|
+
* getScores().length, which is fresh-only and would silently drop or
|
|
134
|
+
* under-weight seeded history if used to persist the sample count that
|
|
135
|
+
* pairs with getSessionAverage()'s seed-inclusive score.
|
|
136
|
+
*/
|
|
137
|
+
getSessionSampleCount() {
|
|
138
|
+
return this.scores.length + this.seededSampleCount;
|
|
139
|
+
}
|
|
97
140
|
/**
|
|
98
141
|
* Recompute and replace the score for a task that may have changed (e.g., active task).
|
|
99
142
|
*/
|
|
@@ -141,6 +184,12 @@ export class EfficiencyScorer {
|
|
|
141
184
|
reset(_sessionId) {
|
|
142
185
|
this.scores.length = 0;
|
|
143
186
|
this.lastEmittedIndex = 0;
|
|
187
|
+
this.seededScoreSum = 0;
|
|
188
|
+
this.seededSpeedSum = 0;
|
|
189
|
+
this.seededCorrectnessSum = 0;
|
|
190
|
+
this.seededAutonomySum = 0;
|
|
191
|
+
this.seededFirstAttemptSum = 0;
|
|
192
|
+
this.seededSampleCount = 0;
|
|
144
193
|
}
|
|
145
194
|
// ---------------------------------------------------------------------------
|
|
146
195
|
// Private
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"efficiency-score.js","sourceRoot":"","sources":["../../src/metrics/efficiency-score.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"efficiency-score.js","sourceRoot":"","sources":["../../src/metrics/efficiency-score.ts"],"names":[],"mappings":"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"}
|
|
@@ -68,8 +68,23 @@ export declare class QualityProxyTracker {
|
|
|
68
68
|
private lastEditFile;
|
|
69
69
|
private lastEditTurn;
|
|
70
70
|
private lastEditSuccess;
|
|
71
|
+
private seededCounts;
|
|
71
72
|
constructor(options?: QualityProxyOptions);
|
|
72
73
|
recordToolCall(record: ToolCallRecord): void;
|
|
74
|
+
/**
|
|
75
|
+
* Seeds cumulative raw signal counts from a previous process's last
|
|
76
|
+
* checkpoint for this same session — mirrors
|
|
77
|
+
* `ModelUsageTracker.seedFromPersisted()`, which has the identical
|
|
78
|
+
* in-memory-only, resets-on-restart problem: a process restart mid-session
|
|
79
|
+
* (sleep, closing a terminal, `claude --resume`, a crash) otherwise
|
|
80
|
+
* silently discards every diff/test/backtrack/self-correction signal a
|
|
81
|
+
* now-dead prior process already observed.
|
|
82
|
+
*
|
|
83
|
+
* Adds to current counts rather than overwriting, so callers must invoke
|
|
84
|
+
* this at most once per (re)adopted session id, before any real activity
|
|
85
|
+
* for that id has reached this tracker.
|
|
86
|
+
*/
|
|
87
|
+
seedFromPersisted(counts: QualityProxyRawCounts): void;
|
|
73
88
|
getRawCounts(): QualityProxyRawCounts;
|
|
74
89
|
getMetrics(): QualityProxyMetrics;
|
|
75
90
|
emitMetrics(aggregator: MetricAggregator): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quality-proxy-tracker.d.ts","sourceRoot":"","sources":["../../src/metrics/quality-proxy-tracker.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"quality-proxy-tracker.d.ts","sourceRoot":"","sources":["../../src/metrics/quality-proxy-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -77,6 +77,14 @@ export class QualityProxyTracker {
|
|
|
77
77
|
lastEditFile = null;
|
|
78
78
|
lastEditTurn = 0;
|
|
79
79
|
lastEditSuccess = false;
|
|
80
|
+
// Additive seed from a previous process's last checkpoint for this same
|
|
81
|
+
// session — see seedFromPersisted()'s doc comment for why. Kept separate
|
|
82
|
+
// from `events` rather than pushed in as synthetic entries: `events` feeds
|
|
83
|
+
// computeTurnBuckets()/detectDegradation(), which need real turn numbers a
|
|
84
|
+
// persisted aggregate count can't provide (see FullSessionSummary.qualityProxy's
|
|
85
|
+
// doc comment for the same caveat). Only the aggregate counts/rates below
|
|
86
|
+
// are recoverable this way.
|
|
87
|
+
seededCounts = { ...ZERO_QUALITY_PROXY_COUNTS };
|
|
80
88
|
constructor(options) {
|
|
81
89
|
this.bucketSize = options?.bucketSize ?? DEFAULT_BUCKET_SIZE;
|
|
82
90
|
this.maxEvents = options?.maxEvents ?? DEFAULT_MAX_EVENTS;
|
|
@@ -129,19 +137,45 @@ export class QualityProxyTracker {
|
|
|
129
137
|
}
|
|
130
138
|
}
|
|
131
139
|
}
|
|
140
|
+
/**
|
|
141
|
+
* Seeds cumulative raw signal counts from a previous process's last
|
|
142
|
+
* checkpoint for this same session — mirrors
|
|
143
|
+
* `ModelUsageTracker.seedFromPersisted()`, which has the identical
|
|
144
|
+
* in-memory-only, resets-on-restart problem: a process restart mid-session
|
|
145
|
+
* (sleep, closing a terminal, `claude --resume`, a crash) otherwise
|
|
146
|
+
* silently discards every diff/test/backtrack/self-correction signal a
|
|
147
|
+
* now-dead prior process already observed.
|
|
148
|
+
*
|
|
149
|
+
* Adds to current counts rather than overwriting, so callers must invoke
|
|
150
|
+
* this at most once per (re)adopted session id, before any real activity
|
|
151
|
+
* for that id has reached this tracker.
|
|
152
|
+
*/
|
|
153
|
+
seedFromPersisted(counts) {
|
|
154
|
+
if (counts.totalSignals === 0)
|
|
155
|
+
return;
|
|
156
|
+
this.seededCounts = {
|
|
157
|
+
totalSignals: this.seededCounts.totalSignals + counts.totalSignals,
|
|
158
|
+
diffApplyCleanCount: this.seededCounts.diffApplyCleanCount + counts.diffApplyCleanCount,
|
|
159
|
+
diffFailCount: this.seededCounts.diffFailCount + counts.diffFailCount,
|
|
160
|
+
testPassCount: this.seededCounts.testPassCount + counts.testPassCount,
|
|
161
|
+
testFailCount: this.seededCounts.testFailCount + counts.testFailCount,
|
|
162
|
+
backtrackCount: this.seededCounts.backtrackCount + counts.backtrackCount,
|
|
163
|
+
selfCorrectionCount: this.seededCounts.selfCorrectionCount + counts.selfCorrectionCount,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
132
166
|
// Raw per-session counts only — no derived rates. This is the shape
|
|
133
167
|
// persisted onto FullSessionSummary.qualityProxy (session-store.ts) so a
|
|
134
168
|
// session file never stores a stale derived rate; rates are always
|
|
135
169
|
// recomputed at read time via getMetrics()/combineQualityProxyRawCounts().
|
|
136
170
|
getRawCounts() {
|
|
137
171
|
return {
|
|
138
|
-
totalSignals: this.events.length,
|
|
139
|
-
diffApplyCleanCount: this.countBySignal('diff_applied_clean'),
|
|
140
|
-
diffFailCount: this.countBySignal('diff_failed'),
|
|
141
|
-
testPassCount: this.countBySignal('test_pass'),
|
|
142
|
-
testFailCount: this.countBySignal('test_fail'),
|
|
143
|
-
backtrackCount: this.countBySignal('backtrack'),
|
|
144
|
-
selfCorrectionCount: this.countBySignal('self_correction'),
|
|
172
|
+
totalSignals: this.events.length + this.seededCounts.totalSignals,
|
|
173
|
+
diffApplyCleanCount: this.countBySignal('diff_applied_clean') + this.seededCounts.diffApplyCleanCount,
|
|
174
|
+
diffFailCount: this.countBySignal('diff_failed') + this.seededCounts.diffFailCount,
|
|
175
|
+
testPassCount: this.countBySignal('test_pass') + this.seededCounts.testPassCount,
|
|
176
|
+
testFailCount: this.countBySignal('test_fail') + this.seededCounts.testFailCount,
|
|
177
|
+
backtrackCount: this.countBySignal('backtrack') + this.seededCounts.backtrackCount,
|
|
178
|
+
selfCorrectionCount: this.countBySignal('self_correction') + this.seededCounts.selfCorrectionCount,
|
|
145
179
|
};
|
|
146
180
|
}
|
|
147
181
|
getMetrics() {
|
|
@@ -181,6 +215,7 @@ export class QualityProxyTracker {
|
|
|
181
215
|
this.lastEditFile = null;
|
|
182
216
|
this.lastEditTurn = 0;
|
|
183
217
|
this.lastEditSuccess = false;
|
|
218
|
+
this.seededCounts = { ...ZERO_QUALITY_PROXY_COUNTS };
|
|
184
219
|
}
|
|
185
220
|
addEvent(signal, turnNumber, toolName) {
|
|
186
221
|
this.events.push({ signal, turnNumber, timestamp: Date.now(), toolName });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quality-proxy-tracker.js","sourceRoot":"","sources":["../../src/metrics/quality-proxy-tracker.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"quality-proxy-tracker.js","sourceRoot":"","sources":["../../src/metrics/quality-proxy-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { FullSessionSummary } from '../storage/session-store.js';
|
|
2
|
+
import type { TaskDetectorSeed } from './task-detector.js';
|
|
3
|
+
export declare function buildTaskDetectorSeed(persisted: FullSessionSummary): TaskDetectorSeed;
|
|
4
|
+
//# sourceMappingURL=task-detector-seed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-detector-seed.d.ts","sourceRoot":"","sources":["../../src/metrics/task-detector-seed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAO3D,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,kBAAkB,GAAG,gBAAgB,CAarF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Builds the seed a freshly-started process's TaskDetector needs to recover
|
|
2
|
+
// a resumed session's pre-restart file/line/test/build/agent-spawn totals —
|
|
3
|
+
// see TaskDetector.seedFromPersisted() for why this exists. Lives in its own
|
|
4
|
+
// file (not task-detector.ts) to avoid a circular import: session-store.ts
|
|
5
|
+
// already imports TaskDetector/TaskMetrics from task-detector.ts.
|
|
6
|
+
export function buildTaskDetectorSeed(persisted) {
|
|
7
|
+
return {
|
|
8
|
+
filesRead: persisted.filesRead,
|
|
9
|
+
filesModified: persisted.filesModified,
|
|
10
|
+
linesAdded: persisted.linesAdded,
|
|
11
|
+
linesRemoved: persisted.linesRemoved,
|
|
12
|
+
testsRun: persisted.testRunCount,
|
|
13
|
+
testsPassed: persisted.testPassCount,
|
|
14
|
+
buildRun: persisted.buildRunCount,
|
|
15
|
+
buildPassed: persisted.buildPassCount,
|
|
16
|
+
agentSpawns: persisted.agentSpawns,
|
|
17
|
+
taskCount: persisted.taskCount,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=task-detector-seed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-detector-seed.js","sourceRoot":"","sources":["../../src/metrics/task-detector-seed.ts"],"names":[],"mappings":"AAGA,4EAA4E;AAC5E,4EAA4E;AAC5E,6EAA6E;AAC7E,2EAA2E;AAC3E,kEAAkE;AAClE,MAAM,UAAU,qBAAqB,CAAC,SAA6B;IACjE,OAAO;QACL,SAAS,EAAE,SAAS,CAAC,SAAS;QAC9B,aAAa,EAAE,SAAS,CAAC,aAAa;QACtC,UAAU,EAAE,SAAS,CAAC,UAAU;QAChC,YAAY,EAAE,SAAS,CAAC,YAAY;QACpC,QAAQ,EAAE,SAAS,CAAC,YAAY;QAChC,WAAW,EAAE,SAAS,CAAC,aAAa;QACpC,QAAQ,EAAE,SAAS,CAAC,aAAa;QACjC,WAAW,EAAE,SAAS,CAAC,cAAc;QACrC,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,SAAS,EAAE,SAAS,CAAC,SAAS;KAC/B,CAAC;AACJ,CAAC"}
|
|
@@ -44,6 +44,50 @@ export interface TaskMetrics {
|
|
|
44
44
|
readonly averageTaskDurationMs: number | null;
|
|
45
45
|
readonly averageToolCallsPerTask: number | null;
|
|
46
46
|
readonly completedTasks: AiCodingTask[];
|
|
47
|
+
/**
|
|
48
|
+
* Pre-restart file/line/test/build/agent-spawn totals recovered by
|
|
49
|
+
* `seedFromPersisted()`, folded in by `buildSessionSummary()` alongside
|
|
50
|
+
* the totals it derives from `completedTasks` (session-store.ts). null
|
|
51
|
+
* when nothing has been seeded. Deliberately NOT represented as a
|
|
52
|
+
* synthetic entry inside `completedTasks` itself — that would skew
|
|
53
|
+
* `averageTaskDurationMs`/`averageToolCallsPerTask` above (both derived
|
|
54
|
+
* from `completedTasks.length`) and has no real `toolCalls` list to
|
|
55
|
+
* attach — the per-task tool-call list isn't reconstructable from a
|
|
56
|
+
* scalar checkpoint.
|
|
57
|
+
*/
|
|
58
|
+
readonly seededAggregate: TaskSeedAggregate | null;
|
|
59
|
+
}
|
|
60
|
+
/** See `TaskMetrics.seededAggregate`'s doc comment. */
|
|
61
|
+
export interface TaskSeedAggregate {
|
|
62
|
+
readonly filesRead: string[];
|
|
63
|
+
readonly filesModified: string[];
|
|
64
|
+
readonly linesAdded: number;
|
|
65
|
+
readonly linesRemoved: number;
|
|
66
|
+
readonly testsRun: number;
|
|
67
|
+
readonly testsPassed: number;
|
|
68
|
+
readonly buildRun: number;
|
|
69
|
+
readonly buildPassed: number;
|
|
70
|
+
readonly agentSpawns: number;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Input shape for `TaskDetector.seedFromPersisted()` — built from a
|
|
74
|
+
* previous process's last `FullSessionSummary` checkpoint for this same
|
|
75
|
+
* session by `buildTaskDetectorSeed()` (task-detector-seed.ts). Kept as a
|
|
76
|
+
* separate type/file rather than importing `FullSessionSummary` directly
|
|
77
|
+
* into this file, which would create a circular import (session-store.ts
|
|
78
|
+
* already imports from this file).
|
|
79
|
+
*/
|
|
80
|
+
export interface TaskDetectorSeed {
|
|
81
|
+
readonly filesRead: readonly string[];
|
|
82
|
+
readonly filesModified: readonly string[];
|
|
83
|
+
readonly linesAdded: number;
|
|
84
|
+
readonly linesRemoved: number;
|
|
85
|
+
readonly testsRun: number;
|
|
86
|
+
readonly testsPassed: number;
|
|
87
|
+
readonly buildRun: number;
|
|
88
|
+
readonly buildPassed: number;
|
|
89
|
+
readonly agentSpawns: number;
|
|
90
|
+
readonly taskCount: number;
|
|
47
91
|
}
|
|
48
92
|
export interface TaskDetectorOptions {
|
|
49
93
|
readonly idleTimeoutMs?: number;
|
|
@@ -66,6 +110,15 @@ export declare class TaskDetector implements Resettable {
|
|
|
66
110
|
private pendingEmission;
|
|
67
111
|
private lifetimeCompletedCount;
|
|
68
112
|
private idleTimer;
|
|
113
|
+
private readonly seededFilesRead;
|
|
114
|
+
private readonly seededFilesModified;
|
|
115
|
+
private seededLinesAdded;
|
|
116
|
+
private seededLinesRemoved;
|
|
117
|
+
private seededTestsRun;
|
|
118
|
+
private seededTestsPassed;
|
|
119
|
+
private seededBuildRun;
|
|
120
|
+
private seededBuildPassed;
|
|
121
|
+
private seededAgentSpawns;
|
|
69
122
|
private costAtTaskStart;
|
|
70
123
|
private tokensAtTaskStart;
|
|
71
124
|
constructor(options?: TaskDetectorOptions);
|
|
@@ -86,6 +139,18 @@ export declare class TaskDetector implements Resettable {
|
|
|
86
139
|
* `AskUserQuestion`/`TaskUpdate` tools.
|
|
87
140
|
*/
|
|
88
141
|
markBoundary(timestamp: number): AiCodingTask | null;
|
|
142
|
+
/**
|
|
143
|
+
* Seeds cumulative file/line/test/build/agent-spawn totals (plus the
|
|
144
|
+
* lifetime completed-task count) from a previous process's last
|
|
145
|
+
* checkpoint for this same session — same restart-recovery problem as
|
|
146
|
+
* `CostTracker.seedFromPersisted()`. See `TaskMetrics.seededAggregate`'s
|
|
147
|
+
* doc comment for why this doesn't touch `completedTasks` directly.
|
|
148
|
+
*
|
|
149
|
+
* Adds to current totals rather than overwriting, so callers must invoke
|
|
150
|
+
* this at most once per (re)adopted session id, before any real activity
|
|
151
|
+
* for that id has reached this tracker.
|
|
152
|
+
*/
|
|
153
|
+
seedFromPersisted(seed: TaskDetectorSeed): void;
|
|
89
154
|
getMetrics(): TaskMetrics;
|
|
90
155
|
emitMetrics(aggregator: MetricAggregator): void;
|
|
91
156
|
reset(_sessionId: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-detector.d.ts","sourceRoot":"","sources":["../../src/metrics/task-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAQzD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,cAAc,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,QAAQ,CAAC,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD,QAAQ,CAAC,cAAc,EAAE,YAAY,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"task-detector.d.ts","sourceRoot":"","sources":["../../src/metrics/task-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -139,6 +139,18 @@ export class TaskDetector {
|
|
|
139
139
|
pendingEmission = [];
|
|
140
140
|
lifetimeCompletedCount = 0;
|
|
141
141
|
idleTimer = null;
|
|
142
|
+
// Additive seed from a previous process's last checkpoint for this same
|
|
143
|
+
// session — see seedFromPersisted()'s doc comment for why these are kept
|
|
144
|
+
// separate from `completedTasks` rather than added as a synthetic entry.
|
|
145
|
+
seededFilesRead = new Set();
|
|
146
|
+
seededFilesModified = new Set();
|
|
147
|
+
seededLinesAdded = 0;
|
|
148
|
+
seededLinesRemoved = 0;
|
|
149
|
+
seededTestsRun = 0;
|
|
150
|
+
seededTestsPassed = 0;
|
|
151
|
+
seededBuildRun = 0;
|
|
152
|
+
seededBuildPassed = 0;
|
|
153
|
+
seededAgentSpawns = 0;
|
|
142
154
|
// Cost/token snapshots at task start for computing deltas
|
|
143
155
|
costAtTaskStart = 0;
|
|
144
156
|
tokensAtTaskStart = 0;
|
|
@@ -198,6 +210,41 @@ export class TaskDetector {
|
|
|
198
210
|
markBoundary(timestamp) {
|
|
199
211
|
return this.closeCurrentTask(timestamp);
|
|
200
212
|
}
|
|
213
|
+
/**
|
|
214
|
+
* Seeds cumulative file/line/test/build/agent-spawn totals (plus the
|
|
215
|
+
* lifetime completed-task count) from a previous process's last
|
|
216
|
+
* checkpoint for this same session — same restart-recovery problem as
|
|
217
|
+
* `CostTracker.seedFromPersisted()`. See `TaskMetrics.seededAggregate`'s
|
|
218
|
+
* doc comment for why this doesn't touch `completedTasks` directly.
|
|
219
|
+
*
|
|
220
|
+
* Adds to current totals rather than overwriting, so callers must invoke
|
|
221
|
+
* this at most once per (re)adopted session id, before any real activity
|
|
222
|
+
* for that id has reached this tracker.
|
|
223
|
+
*/
|
|
224
|
+
seedFromPersisted(seed) {
|
|
225
|
+
const hasAnything = seed.filesRead.length > 0 ||
|
|
226
|
+
seed.filesModified.length > 0 ||
|
|
227
|
+
seed.linesAdded !== 0 ||
|
|
228
|
+
seed.linesRemoved !== 0 ||
|
|
229
|
+
seed.testsRun !== 0 ||
|
|
230
|
+
seed.buildRun !== 0 ||
|
|
231
|
+
seed.agentSpawns !== 0 ||
|
|
232
|
+
seed.taskCount !== 0;
|
|
233
|
+
if (!hasAnything)
|
|
234
|
+
return;
|
|
235
|
+
for (const f of seed.filesRead)
|
|
236
|
+
this.seededFilesRead.add(f);
|
|
237
|
+
for (const f of seed.filesModified)
|
|
238
|
+
this.seededFilesModified.add(f);
|
|
239
|
+
this.seededLinesAdded += seed.linesAdded;
|
|
240
|
+
this.seededLinesRemoved += seed.linesRemoved;
|
|
241
|
+
this.seededTestsRun += seed.testsRun;
|
|
242
|
+
this.seededTestsPassed += seed.testsPassed;
|
|
243
|
+
this.seededBuildRun += seed.buildRun;
|
|
244
|
+
this.seededBuildPassed += seed.buildPassed;
|
|
245
|
+
this.seededAgentSpawns += seed.agentSpawns;
|
|
246
|
+
this.lifetimeCompletedCount += seed.taskCount;
|
|
247
|
+
}
|
|
201
248
|
getMetrics() {
|
|
202
249
|
const completed = this.completedTasks;
|
|
203
250
|
let avgDuration = null;
|
|
@@ -212,6 +259,13 @@ export class TaskDetector {
|
|
|
212
259
|
avgDuration = Math.round(totalDuration / completed.length);
|
|
213
260
|
avgToolCalls = Math.round((totalToolCalls / completed.length) * 100) / 100;
|
|
214
261
|
}
|
|
262
|
+
const hasSeededAggregate = this.seededFilesRead.size > 0 ||
|
|
263
|
+
this.seededFilesModified.size > 0 ||
|
|
264
|
+
this.seededLinesAdded !== 0 ||
|
|
265
|
+
this.seededLinesRemoved !== 0 ||
|
|
266
|
+
this.seededTestsRun !== 0 ||
|
|
267
|
+
this.seededBuildRun !== 0 ||
|
|
268
|
+
this.seededAgentSpawns !== 0;
|
|
215
269
|
return {
|
|
216
270
|
totalTasksCompleted: this.lifetimeCompletedCount,
|
|
217
271
|
currentTaskActive: this.activeTask !== null,
|
|
@@ -219,6 +273,19 @@ export class TaskDetector {
|
|
|
219
273
|
averageTaskDurationMs: avgDuration,
|
|
220
274
|
averageToolCallsPerTask: avgToolCalls,
|
|
221
275
|
completedTasks: [...completed],
|
|
276
|
+
seededAggregate: hasSeededAggregate
|
|
277
|
+
? {
|
|
278
|
+
filesRead: [...this.seededFilesRead],
|
|
279
|
+
filesModified: [...this.seededFilesModified],
|
|
280
|
+
linesAdded: this.seededLinesAdded,
|
|
281
|
+
linesRemoved: this.seededLinesRemoved,
|
|
282
|
+
testsRun: this.seededTestsRun,
|
|
283
|
+
testsPassed: this.seededTestsPassed,
|
|
284
|
+
buildRun: this.seededBuildRun,
|
|
285
|
+
buildPassed: this.seededBuildPassed,
|
|
286
|
+
agentSpawns: this.seededAgentSpawns,
|
|
287
|
+
}
|
|
288
|
+
: null,
|
|
222
289
|
};
|
|
223
290
|
}
|
|
224
291
|
emitMetrics(aggregator) {
|
|
@@ -240,6 +307,15 @@ export class TaskDetector {
|
|
|
240
307
|
this.costAtTaskStart = 0;
|
|
241
308
|
this.tokensAtTaskStart = 0;
|
|
242
309
|
this.lifetimeCompletedCount = 0;
|
|
310
|
+
this.seededFilesRead.clear();
|
|
311
|
+
this.seededFilesModified.clear();
|
|
312
|
+
this.seededLinesAdded = 0;
|
|
313
|
+
this.seededLinesRemoved = 0;
|
|
314
|
+
this.seededTestsRun = 0;
|
|
315
|
+
this.seededTestsPassed = 0;
|
|
316
|
+
this.seededBuildRun = 0;
|
|
317
|
+
this.seededBuildPassed = 0;
|
|
318
|
+
this.seededAgentSpawns = 0;
|
|
243
319
|
}
|
|
244
320
|
dispose() {
|
|
245
321
|
this.clearIdleTimer();
|