@newrelic/preflight 1.15.4 → 1.15.6
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/hooks/collector-script.d.ts.map +1 -1
- package/dist/hooks/collector-script.js +5 -0
- package/dist/hooks/collector-script.js.map +1 -1
- package/dist/hooks/tool-parsers.d.ts.map +1 -1
- package/dist/hooks/tool-parsers.js +4 -0
- package/dist/hooks/tool-parsers.js.map +1 -1
- 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/context-composition-tracker.d.ts +1 -1
- package/dist/metrics/context-composition-tracker.d.ts.map +1 -1
- package/dist/metrics/context-composition-tracker.js +15 -4
- package/dist/metrics/context-composition-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/retry-detector.d.ts +0 -1
- package/dist/metrics/retry-detector.d.ts.map +1 -1
- package/dist/metrics/retry-detector.js +24 -7
- package/dist/metrics/retry-detector.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":"AAAA;;;;;;;;;;GAUG;AA8CH,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAClC,MAAM,0BAA0B,GAAG,IAAI,CAAC;AACxC,MAAM,uBAAuB,GAAG,IAAI,CAAC;AACrC,MAAM,oCAAoC,GAAG,IAAI,CAAC;AAClD,MAAM,0BAA0B,GAAG,CAAC,CAAC,CAAC,oCAAoC;AAE1E,MAAM,UAAU,GAAG,KAAK,CAAC;AAEzB,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,MAAM,OAAO,gBAAgB;IACV,WAAW,CAAS;IACpB,iBAAiB,CAAS;IAC1B,cAAc,CAAS;IACvB,yBAAyB,CAAS;IAClC,gBAAgB,CAAS;IAEzB,MAAM,GAAsB,EAAE,CAAC;IACxC,gBAAgB,GAAG,CAAC,CAAC;IAE7B,wEAAwE;IACxE,iEAAiE;IACjE,wEAAwE;IACxE,2EAA2E;IAC3E,sEAAsE;IAC9D,cAAc,GAAG,CAAC,CAAC;IACnB,cAAc,GAAG,CAAC,CAAC;IACnB,oBAAoB,GAAG,CAAC,CAAC;IACzB,iBAAiB,GAAG,CAAC,CAAC;IACtB,qBAAqB,GAAG,CAAC,CAAC;IAC1B,iBAAiB,GAAG,CAAC,CAAC;IAE9B,YAAY,OAAgC;QAC1C,IAAI,CAAC,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,oBAAoB,CAAC;QAChE,IAAI,CAAC,iBAAiB,GAAG,OAAO,EAAE,iBAAiB,IAAI,0BAA0B,CAAC;QAClF,IAAI,CAAC,cAAc,GAAG,OAAO,EAAE,cAAc,IAAI,uBAAuB,CAAC;QACzE,IAAI,CAAC,yBAAyB;YAC5B,OAAO,EAAE,yBAAyB,IAAI,oCAAoC,CAAC;QAC7E,IAAI,CAAC,gBAAgB,GAAG,OAAO,EAAE,2BAA2B,IAAI,0BAA0B,CAAC;IAC7F,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,IAAkB,EAAE,YAA4B;QAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAC9D,MAAM,GAAG,GACP,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW;YACnC,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB;YAC/C,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc;YACzC,UAAU,CAAC,mBAAmB,GAAG,IAAI,CAAC,yBAAyB,CAAC;QAElE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAEzD,MAAM,MAAM,GAAoB;YAC9B,KAAK;YACL,UAAU;YACV,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,OAAO;SACxB,CAAC;QAEF,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC;QACnE,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,IAAyB;QACzC,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC;YAAE,OAAO;QAClC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;QACrD,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;QAChE,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAC5E,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC;QACtE,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,UAAU,CAAC,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC;QACrF,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,WAAW,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACtD,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEzB,IAAI,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC;QACrC,IAAI,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC;QACrC,IAAI,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC;QACjD,IAAI,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAC3C,IAAI,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,CAAC;QAEnD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5B,UAAU,IAAI,CAAC,CAAC,KAAK,CAAC;YACtB,UAAU,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;YACjC,gBAAgB,IAAI,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC;YAC7C,aAAa,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC;YACvC,iBAAiB,IAAI,CAAC,CAAC,UAAU,CAAC,mBAAmB,CAAC;QACxD,CAAC;QAED,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI;YACjD,UAAU,EAAE;gBACV,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI;gBACjD,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI;gBAC7D,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI;gBACvD,mBAAmB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI;aACvE;YACD,MAAM,EAAE,iBAAiB;YACzB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,qBAAqB;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,IAAkB,EAAE,YAA4B;QAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC;QACnE,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAC9D,MAAM,GAAG,GACP,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW;YACnC,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB;YAC/C,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc;YACzC,UAAU,CAAC,mBAAmB,GAAG,IAAI,CAAC,yBAAyB,CAAC;QAElE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAEzD,MAAM,MAAM,GAAoB;YAC9B,KAAK;YACL,UAAU;YACV,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,OAAO;SACxB,CAAC;QAEF,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;YAC1B,sEAAsE;YACtE,8EAA8E;YAC9E,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAChC,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC;YAC9B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,SAAS;QACP,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,WAAW,CAAC,UAA4B;QACtC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChE,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC;YAC1B,UAAU,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YAClD,UAAU,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAC7D,UAAU,CAAC,MAAM,CAAC,2BAA2B,EAAE,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACzE,UAAU,CAAC,MAAM,CAAC,wBAAwB,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACnE,UAAU,CAAC,MAAM,CAAC,qCAAqC,EAAE,CAAC,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;QAC7F,CAAC;QACD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,UAAkB;QACtB,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,qBAAqB,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,8EAA8E;IAC9E,UAAU;IACV,8EAA8E;IAEtE,iBAAiB,CACvB,IAAkB,EAClB,YAA4B;QAE5B,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YAC9B,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;YAC1C,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YACpC,mBAAmB,EAAE,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC;SACnE,CAAC;IACJ,CAAC;IAED;;;OAGG;IACK,YAAY,CAAC,IAAkB;QACrC,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QACtC,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC;QAEnC,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAC/C,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,GAAG,eAAe,CAAC;QAC3D,OAAO,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,IAAkB;QAC3C,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC;QACpC,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACvD,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,IAAkB;QACxC,IAAI,IAAI,CAAC,aAAa,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QACvC,IAAI,IAAI,CAAC,kBAAkB,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAC5C,OAAO,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACvE,CAAC;IAED;;;OAGG;IACK,0BAA0B,CAAC,YAA4B;QAC7D,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAEzD,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;YACnC,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;gBAC/D,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAED,IAAI,aAAa,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAClC,OAAO,KAAK,CAAC,CAAC,GAAG,aAAa,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IAEO,WAAW,CAAC,KAAsB;QACxC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;YAChD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAC/B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;CACF;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,KAAK,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IACpD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -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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"}
|
|
@@ -37,7 +37,6 @@ export declare class RetryDetector implements Resettable {
|
|
|
37
37
|
private readonly alerts;
|
|
38
38
|
private totalTokensWasted;
|
|
39
39
|
private readonly firedKeys;
|
|
40
|
-
private callCounter;
|
|
41
40
|
constructor(options?: RetryDetectorOptions);
|
|
42
41
|
recordToolCall(record: ToolCallRecord): ThrashingAlert | null;
|
|
43
42
|
getMetrics(): RetryDetectorMetrics;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry-detector.d.ts","sourceRoot":"","sources":["../../src/metrics/retry-detector.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAQzD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;CACpD;AAmBD,wBAAgB,+BAA+B,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAa5E;AA+BD,qBAAa,aAAc,YAAW,UAAU;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2C;IAEnE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;IAC/C,OAAO,CAAC,iBAAiB,CAAK;IAE9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;
|
|
1
|
+
{"version":3,"file":"retry-detector.d.ts","sourceRoot":"","sources":["../../src/metrics/retry-detector.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAQzD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;CACpD;AAmBD,wBAAgB,+BAA+B,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAa5E;AA+BD,qBAAa,aAAc,YAAW,UAAU;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2C;IAEnE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;IAC/C,OAAO,CAAC,iBAAiB,CAAK;IAE9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;gBAEnC,OAAO,CAAC,EAAE,oBAAoB;IAO1C,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,GAAG,IAAI;IAW7D,UAAU,IAAI,oBAAoB;IAQlC,WAAW,CAAC,UAAU,EAAE,gBAAgB,GAAG,IAAI;IAO/C,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAO/B,OAAO,CAAC,WAAW;IAiEnB,OAAO,CAAC,sBAAsB;IA+B9B,OAAO,CAAC,cAAc;IAuBtB,OAAO,CAAC,oBAAoB;CAO7B"}
|
|
@@ -71,7 +71,6 @@ export class RetryDetector {
|
|
|
71
71
|
totalTokensWasted = 0;
|
|
72
72
|
// Track which tool+window combos already fired to avoid spamming
|
|
73
73
|
firedKeys = new Set();
|
|
74
|
-
callCounter = 0;
|
|
75
74
|
constructor(options) {
|
|
76
75
|
this.minOccurrences = options?.minOccurrences ?? DEFAULT_MIN_OCCURRENCES;
|
|
77
76
|
this.windowSize = options?.windowSize ?? DEFAULT_WINDOW_SIZE;
|
|
@@ -80,7 +79,6 @@ export class RetryDetector {
|
|
|
80
79
|
}
|
|
81
80
|
recordToolCall(record) {
|
|
82
81
|
this.recentCalls.push(record);
|
|
83
|
-
this.callCounter++;
|
|
84
82
|
// Only keep the window we need
|
|
85
83
|
if (this.recentCalls.length > this.windowSize * 2) {
|
|
86
84
|
this.recentCalls.splice(0, this.recentCalls.length - this.windowSize * 2);
|
|
@@ -105,7 +103,6 @@ export class RetryDetector {
|
|
|
105
103
|
this.alerts.length = 0;
|
|
106
104
|
this.totalTokensWasted = 0;
|
|
107
105
|
this.firedKeys.clear();
|
|
108
|
-
this.callCounter = 0;
|
|
109
106
|
}
|
|
110
107
|
checkWindow() {
|
|
111
108
|
const window = this.recentCalls.slice(-this.windowSize);
|
|
@@ -127,8 +124,16 @@ export class RetryDetector {
|
|
|
127
124
|
const isSimilar = similarity >= this.similarityThreshold;
|
|
128
125
|
if (!allFailed && !isSimilar)
|
|
129
126
|
continue;
|
|
130
|
-
// Dedupe
|
|
131
|
-
|
|
127
|
+
// Dedupe on the offending group's actual call IDs — not a monotonic
|
|
128
|
+
// counter, which never repeats and so never dedupes: it re-fired for
|
|
129
|
+
// the same unchanged group on every subsequent call, however unrelated.
|
|
130
|
+
// A key built from the group's own call IDs repeats exactly when the
|
|
131
|
+
// group itself hasn't changed, and changes the moment a call ages out
|
|
132
|
+
// of the window or a genuinely new occurrence joins it.
|
|
133
|
+
const dedupeKey = `${toolName}:${calls
|
|
134
|
+
.map((c) => c.id)
|
|
135
|
+
.sort()
|
|
136
|
+
.join(',')}`;
|
|
132
137
|
if (this.firedKeys.has(dedupeKey))
|
|
133
138
|
continue;
|
|
134
139
|
this.firedKeys.add(dedupeKey);
|
|
@@ -174,8 +179,18 @@ export class RetryDetector {
|
|
|
174
179
|
// input/arguments are identical (timestamps, ids, sizes, error details) —
|
|
175
180
|
// without stripping these, every call would serialize as "different" and
|
|
176
181
|
// similarity would never detect a genuine repeated-input retry.
|
|
182
|
+
//
|
|
183
|
+
// inputHash is kept, deliberately not stripped: it's a hash of the FULL raw
|
|
184
|
+
// tool input, computed for every call regardless of tool name, unlike the
|
|
185
|
+
// narrowed per-tool fields extractInputMeta()/parseToolSpecificFields() only
|
|
186
|
+
// populate for a known subset of tools. Without it, a call to any tool
|
|
187
|
+
// outside that subset (PowerShell, WebFetch, a third-party MCP tool, ...)
|
|
188
|
+
// serializes to just `{toolName}` — identical for every call regardless of
|
|
189
|
+
// how different the real inputs were, so it always scored similarity 1.0.
|
|
190
|
+
// A genuine repeat still hashes identically, so real-retry detection is
|
|
191
|
+
// unaffected.
|
|
177
192
|
serializeInput(record) {
|
|
178
|
-
const { id: _id, sessionId: _s, timestamp: _t, durationMs: _d, success: _su, errorType: _e, error: _er, inputSizeBytes: _is, outputSizeBytes: _os,
|
|
193
|
+
const { id: _id, sessionId: _s, timestamp: _t, durationMs: _d, success: _su, errorType: _e, error: _er, inputSizeBytes: _is, outputSizeBytes: _os, toolUseId: _tu, ...rest } = record;
|
|
179
194
|
try {
|
|
180
195
|
return JSON.stringify(rest, null, 0);
|
|
181
196
|
}
|
|
@@ -183,9 +198,11 @@ export class RetryDetector {
|
|
|
183
198
|
return '';
|
|
184
199
|
}
|
|
185
200
|
}
|
|
201
|
+
// The first call in the group is necessary work, not waste — only the
|
|
202
|
+
// repeats after it represent redundant, wasted effort.
|
|
186
203
|
estimateTokensWasted(calls) {
|
|
187
204
|
let totalBytes = 0;
|
|
188
|
-
for (const call of calls) {
|
|
205
|
+
for (const call of calls.slice(1)) {
|
|
189
206
|
totalBytes += (call.inputSizeBytes ?? 0) + (call.outputSizeBytes ?? 0);
|
|
190
207
|
}
|
|
191
208
|
return Math.ceil(totalBytes / BYTES_PER_TOKEN_ESTIMATE);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry-detector.js","sourceRoot":"","sources":["../../src/metrics/retry-detector.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"retry-detector.js","sourceRoot":"","sources":["../../src/metrics/retry-detector.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;
|