@newrelic/preflight 1.4.47 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/alerts/local-alert-engine.d.ts +1 -1
- package/dist/alerts/local-alert-engine.d.ts.map +1 -1
- package/dist/alerts/local-alert-engine.js +2 -2
- package/dist/alerts/local-alert-engine.js.map +1 -1
- package/dist/dashboard/dashboard-server.d.ts +2 -2
- package/dist/dashboard/dashboard-server.d.ts.map +1 -1
- package/dist/dashboard/dashboard-server.js +2 -2
- package/dist/dashboard/dashboard-server.js.map +1 -1
- package/dist/dashboard/index.d.ts +1 -1
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/live-event-bus.d.ts +32 -0
- package/dist/dashboard/live-event-bus.d.ts.map +1 -1
- package/dist/dashboard/live-event-bus.js.map +1 -1
- package/dist/dashboard/routes/api-handler.d.ts +46 -0
- package/dist/dashboard/routes/api-handler.d.ts.map +1 -1
- package/dist/dashboard/routes/api-handler.js +188 -5
- package/dist/dashboard/routes/api-handler.js.map +1 -1
- package/dist/dashboard/subagent-timeline-store.d.ts +156 -0
- package/dist/dashboard/subagent-timeline-store.d.ts.map +1 -0
- package/dist/dashboard/subagent-timeline-store.js +674 -0
- package/dist/dashboard/subagent-timeline-store.js.map +1 -0
- package/dist/dashboard/workflow-store.d.ts +85 -0
- package/dist/dashboard/workflow-store.d.ts.map +1 -0
- package/dist/dashboard/workflow-store.js +330 -0
- package/dist/dashboard/workflow-store.js.map +1 -0
- package/dist/hooks/event-processor.d.ts +86 -1
- package/dist/hooks/event-processor.d.ts.map +1 -1
- package/dist/hooks/event-processor.js +182 -0
- package/dist/hooks/event-processor.js.map +1 -1
- package/dist/hooks/subagent-watcher.d.ts +187 -0
- package/dist/hooks/subagent-watcher.d.ts.map +1 -0
- package/dist/hooks/subagent-watcher.js +797 -0
- package/dist/hooks/subagent-watcher.js.map +1 -0
- package/dist/hooks/workflow-script-parser.d.ts +44 -0
- package/dist/hooks/workflow-script-parser.d.ts.map +1 -0
- package/dist/hooks/workflow-script-parser.js +255 -0
- package/dist/hooks/workflow-script-parser.js.map +1 -0
- package/dist/hooks/workflow-watcher.d.ts +67 -0
- package/dist/hooks/workflow-watcher.d.ts.map +1 -0
- package/dist/hooks/workflow-watcher.js +453 -0
- package/dist/hooks/workflow-watcher.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +316 -12
- package/dist/index.js.map +1 -1
- package/dist/metrics/cost-tracker.d.ts +113 -17
- package/dist/metrics/cost-tracker.d.ts.map +1 -1
- package/dist/metrics/cost-tracker.js +151 -8
- package/dist/metrics/cost-tracker.js.map +1 -1
- package/dist/metrics/recommendation-engine.d.ts +1 -1
- package/dist/metrics/recommendation-engine.js +1 -1
- package/dist/metrics/workflow-run-tracker.d.ts +140 -0
- package/dist/metrics/workflow-run-tracker.d.ts.map +1 -0
- package/dist/metrics/workflow-run-tracker.js +306 -0
- package/dist/metrics/workflow-run-tracker.js.map +1 -0
- package/dist/storage/local-store.d.ts +1 -1
- package/dist/storage/local-store.js +2 -2
- package/dist/storage/local-store.js.map +1 -1
- package/dist/storage/session-store.d.ts +8 -0
- package/dist/storage/session-store.d.ts.map +1 -1
- package/dist/storage/session-store.js +1 -1
- package/dist/storage/session-store.js.map +1 -1
- package/dist/storage/types.d.ts +40 -1
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/tools/extended-analytics-tools.d.ts +1 -1
- package/dist/tools/extended-analytics-tools.js +1 -1
- package/dist/transport/nr-ingest.d.ts +153 -2
- package/dist/transport/nr-ingest.d.ts.map +1 -1
- package/dist/transport/nr-ingest.js +275 -0
- package/dist/transport/nr-ingest.js.map +1 -1
- package/dist/web/assets/index-B4DkT4Go.css +2 -0
- package/dist/web/assets/index-g9I2w7LV.js +64 -0
- package/dist/web/index.html +2 -2
- package/package.json +1 -1
- package/dist/web/assets/index-CrBs4WEp.js +0 -64
- package/dist/web/assets/index-DwBQxRYb.css +0 -2
|
@@ -7,8 +7,10 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Cost calculation delegates to `calculateCost()` from the shared package.
|
|
9
9
|
*/
|
|
10
|
-
import { calculateCost } from '../shared/index.js';
|
|
10
|
+
import { calculateCost, createLogger } from '../shared/index.js';
|
|
11
11
|
import { localDateKey } from '../lib/date.js';
|
|
12
|
+
const logger = createLogger('cost-tracker');
|
|
13
|
+
const LATE_ARRIVAL_REJECTION_MS = 48 * 60 * 60 * 1000;
|
|
12
14
|
// ---------------------------------------------------------------------------
|
|
13
15
|
// CostTracker
|
|
14
16
|
// ---------------------------------------------------------------------------
|
|
@@ -33,16 +35,39 @@ export class CostTracker {
|
|
|
33
35
|
// including tokens spent before midnight.
|
|
34
36
|
costByDayUsd = new Map();
|
|
35
37
|
firstActivityMsByDay = new Map();
|
|
38
|
+
/**
|
|
39
|
+
* Per-workflow-run cost attribution split by local-day so a run that crosses
|
|
40
|
+
* midnight contributes to each day's bucket independently. Two-level map:
|
|
41
|
+
* `costByWorkflowRunId.get(runId).get(dayKey) → usd`. Restart-resets to empty
|
|
42
|
+
* (intentional: per-day totals remain correct even if run-level attribution
|
|
43
|
+
* is lost across restarts).
|
|
44
|
+
*/
|
|
45
|
+
costByWorkflowRunId = new Map();
|
|
46
|
+
/** Per-day mutation counter so dashboards can invalidate cached day cards. */
|
|
47
|
+
lastMutationMsByDay = new Map();
|
|
48
|
+
/**
|
|
49
|
+
* Subagent-attributed spend: accumulated when `ctx.agentId` is set.
|
|
50
|
+
* Parent spend covers all other token reports.
|
|
51
|
+
*/
|
|
52
|
+
subagentCostUsd = 0;
|
|
53
|
+
/** Subagent-attributed spend per local-day key, for a today-scoped KPI. */
|
|
54
|
+
subagentCostByDayUsd = new Map();
|
|
55
|
+
parentCostUsd = 0;
|
|
36
56
|
totalLinesChanged = 0;
|
|
37
57
|
constructor(sessionTracker) {
|
|
38
58
|
this.sessionTracker = sessionTracker ?? null;
|
|
39
59
|
}
|
|
40
60
|
/**
|
|
41
61
|
* Primary path: record exact token usage from self-reporting.
|
|
62
|
+
*
|
|
63
|
+
* The optional `ctx` argument lets the subagent watcher attribute tokens
|
|
64
|
+
* to the actual JSONL `timestamp` (rather than `Date.now()`) so a run
|
|
65
|
+
* that crosses midnight is bucketed correctly, AND to a `workflowRunId` /
|
|
66
|
+
* `agentId` for per-run and subagent/parent cost attribution.
|
|
42
67
|
*/
|
|
43
|
-
recordTokenUsage(usage, model) {
|
|
68
|
+
recordTokenUsage(usage, model, ctx) {
|
|
44
69
|
this.reportCount++;
|
|
45
|
-
return this.accumulateTokens(usage, model);
|
|
70
|
+
return this.accumulateTokens(usage, model, ctx);
|
|
46
71
|
}
|
|
47
72
|
/**
|
|
48
73
|
* Fallback path: estimate tokens from character counts.
|
|
@@ -62,8 +87,40 @@ export class CostTracker {
|
|
|
62
87
|
this.estimationCount++;
|
|
63
88
|
return this.accumulateTokens(usage, model);
|
|
64
89
|
}
|
|
65
|
-
accumulateTokens(usage, model) {
|
|
90
|
+
accumulateTokens(usage, model, ctx) {
|
|
66
91
|
const breakdown = calculateCost(model, usage);
|
|
92
|
+
const wallNowMs = Date.now();
|
|
93
|
+
// Late-arrival rejection: a `ctx.timestampMs` more than 48h before now is
|
|
94
|
+
// dropped from day buckets to bound retroactive mutation. Session-level
|
|
95
|
+
// totals (totalCostUsd, subagentCostUsd, etc.) still accumulate because
|
|
96
|
+
// they are session-scoped and the cost is real.
|
|
97
|
+
const tsMs = ctx?.timestampMs ?? wallNowMs;
|
|
98
|
+
const isLate = ctx?.timestampMs !== undefined && wallNowMs - ctx.timestampMs > LATE_ARRIVAL_REJECTION_MS;
|
|
99
|
+
if (isLate) {
|
|
100
|
+
logger.warn('Late-arrival token event dropped from day bucket', {
|
|
101
|
+
timestampMs: ctx?.timestampMs,
|
|
102
|
+
deltaMs: wallNowMs - (ctx?.timestampMs ?? wallNowMs),
|
|
103
|
+
});
|
|
104
|
+
// Still accumulate session-level totals, but skip day bucketing and
|
|
105
|
+
// workflow-run maps.
|
|
106
|
+
this.totalCostUsd += breakdown.totalUsd;
|
|
107
|
+
this.totalInputTokens += usage.inputTokens;
|
|
108
|
+
this.totalOutputTokens += usage.outputTokens;
|
|
109
|
+
this.totalThinkingTokens += usage.thinkingTokens;
|
|
110
|
+
this.totalCacheReadTokens += usage.cacheReadTokens;
|
|
111
|
+
this.totalCacheCreationTokens += usage.cacheCreationTokens;
|
|
112
|
+
this.currentModel = model;
|
|
113
|
+
this.latestCostBreakdown = breakdown;
|
|
114
|
+
this.costByModel.set(model, (this.costByModel.get(model) ?? 0) + breakdown.totalUsd);
|
|
115
|
+
this.totalCacheSavingsUsd += breakdown.savingsFromCacheUsd;
|
|
116
|
+
if (ctx?.agentId !== undefined) {
|
|
117
|
+
this.subagentCostUsd += breakdown.totalUsd;
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
this.parentCostUsd += breakdown.totalUsd;
|
|
121
|
+
}
|
|
122
|
+
return breakdown;
|
|
123
|
+
}
|
|
67
124
|
this.totalCostUsd += breakdown.totalUsd;
|
|
68
125
|
this.totalInputTokens += usage.inputTokens;
|
|
69
126
|
this.totalOutputTokens += usage.outputTokens;
|
|
@@ -74,11 +131,31 @@ export class CostTracker {
|
|
|
74
131
|
this.latestCostBreakdown = breakdown;
|
|
75
132
|
this.costByModel.set(model, (this.costByModel.get(model) ?? 0) + breakdown.totalUsd);
|
|
76
133
|
this.totalCacheSavingsUsd += breakdown.savingsFromCacheUsd;
|
|
77
|
-
|
|
78
|
-
|
|
134
|
+
// Subagent vs parent split
|
|
135
|
+
if (ctx?.agentId !== undefined) {
|
|
136
|
+
this.subagentCostUsd += breakdown.totalUsd;
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
this.parentCostUsd += breakdown.totalUsd;
|
|
140
|
+
}
|
|
141
|
+
// Day bucketing
|
|
142
|
+
const dayKey = localDateKey(tsMs);
|
|
79
143
|
this.costByDayUsd.set(dayKey, (this.costByDayUsd.get(dayKey) ?? 0) + breakdown.totalUsd);
|
|
80
|
-
if (
|
|
81
|
-
this.
|
|
144
|
+
if (ctx?.agentId !== undefined) {
|
|
145
|
+
this.subagentCostByDayUsd.set(dayKey, (this.subagentCostByDayUsd.get(dayKey) ?? 0) + breakdown.totalUsd);
|
|
146
|
+
}
|
|
147
|
+
this.lastMutationMsByDay.set(dayKey, wallNowMs);
|
|
148
|
+
const existingFirst = this.firstActivityMsByDay.get(dayKey);
|
|
149
|
+
if (existingFirst === undefined || tsMs < existingFirst) {
|
|
150
|
+
// Use earliest event timestamp for the day so cross-midnight burn-rate
|
|
151
|
+
// denominators stay correct (NOT wall-clock arrival time).
|
|
152
|
+
this.firstActivityMsByDay.set(dayKey, tsMs);
|
|
153
|
+
}
|
|
154
|
+
// Per-workflow-run day bucketing
|
|
155
|
+
if (ctx?.workflowRunId) {
|
|
156
|
+
const runMap = this.costByWorkflowRunId.get(ctx.workflowRunId) ?? new Map();
|
|
157
|
+
runMap.set(dayKey, (runMap.get(dayKey) ?? 0) + breakdown.totalUsd);
|
|
158
|
+
this.costByWorkflowRunId.set(ctx.workflowRunId, runMap);
|
|
82
159
|
}
|
|
83
160
|
return breakdown;
|
|
84
161
|
}
|
|
@@ -99,6 +176,15 @@ export class CostTracker {
|
|
|
99
176
|
getCostForDay(dayKey) {
|
|
100
177
|
return this.costByDayUsd.get(dayKey) ?? 0;
|
|
101
178
|
}
|
|
179
|
+
/**
|
|
180
|
+
* Subagent-attributed cost during a specific local-time day. Today-scoped
|
|
181
|
+
* counterpart to getSubagentMetrics().subagentUsd (which is session-
|
|
182
|
+
* cumulative) so the "subagent spend" KPI lines up with the day-bucketed
|
|
183
|
+
* "spend today" total.
|
|
184
|
+
*/
|
|
185
|
+
getSubagentCostForDay(dayKey) {
|
|
186
|
+
return this.subagentCostByDayUsd.get(dayKey) ?? 0;
|
|
187
|
+
}
|
|
102
188
|
/**
|
|
103
189
|
* Epoch ms of the first token event recorded today (local time), or null
|
|
104
190
|
* if no spend has been booked today. The forecast burn-rate denominator
|
|
@@ -109,6 +195,48 @@ export class CostTracker {
|
|
|
109
195
|
getFirstActivityMsForDay(dayKey) {
|
|
110
196
|
return this.firstActivityMsByDay.get(dayKey) ?? null;
|
|
111
197
|
}
|
|
198
|
+
/** Most recent wall-clock ms a per-day bucket was mutated (cache-key seed). */
|
|
199
|
+
getLastMutationMsForDay(dayKey) {
|
|
200
|
+
return this.lastMutationMsByDay.get(dayKey) ?? null;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Per-workflow-run total spend, summed across all day-keys this run
|
|
204
|
+
* touched. Returns 0 for unknown runIds.
|
|
205
|
+
*/
|
|
206
|
+
getCostForWorkflowRun(runId) {
|
|
207
|
+
const m = this.costByWorkflowRunId.get(runId);
|
|
208
|
+
if (!m)
|
|
209
|
+
return 0;
|
|
210
|
+
let total = 0;
|
|
211
|
+
for (const v of m.values())
|
|
212
|
+
total += v;
|
|
213
|
+
return total;
|
|
214
|
+
}
|
|
215
|
+
/** Iterable view of every (runId, dayKey, usd) tuple — for dashboard joins. */
|
|
216
|
+
*iterCostByWorkflowRun() {
|
|
217
|
+
for (const [runId, m] of this.costByWorkflowRunId) {
|
|
218
|
+
for (const [dayKey, usd] of m) {
|
|
219
|
+
yield { runId, dayKey, usd };
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Subagent / parent cost split for the current session.
|
|
225
|
+
*
|
|
226
|
+
* `reconciliationDeltaPct` is a placeholder: it will compare the
|
|
227
|
+
* total tokens reported by WorkflowRunEvent against the sum of per-subagent
|
|
228
|
+
* cost to detect attribution gaps. Returns null until that data is available.
|
|
229
|
+
*/
|
|
230
|
+
getSubagentMetrics() {
|
|
231
|
+
const total = this.subagentCostUsd + this.parentCostUsd;
|
|
232
|
+
const subagentSharePct = total > 0 ? (this.subagentCostUsd / total) * 100 : 0;
|
|
233
|
+
return {
|
|
234
|
+
subagentUsd: this.subagentCostUsd,
|
|
235
|
+
parentUsd: this.parentCostUsd,
|
|
236
|
+
subagentSharePct,
|
|
237
|
+
reconciliationDeltaPct: null,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
112
240
|
/**
|
|
113
241
|
* Record lines of code changed (from Edit/Write tool data).
|
|
114
242
|
*/
|
|
@@ -120,6 +248,11 @@ export class CostTracker {
|
|
|
120
248
|
const uniqueFilesWritten = this.sessionTracker
|
|
121
249
|
? this.sessionTracker.getMetrics().uniqueFilesWritten
|
|
122
250
|
: 0;
|
|
251
|
+
// Serialise the two-level Map into a plain Record for JSON compatibility.
|
|
252
|
+
const costByWorkflowRunId = {};
|
|
253
|
+
for (const [runId, dayMap] of this.costByWorkflowRunId) {
|
|
254
|
+
costByWorkflowRunId[runId] = Object.fromEntries(dayMap);
|
|
255
|
+
}
|
|
123
256
|
return {
|
|
124
257
|
sessionTotalCostUsd: hasData ? this.totalCostUsd : null,
|
|
125
258
|
costByTask: null,
|
|
@@ -137,6 +270,9 @@ export class CostTracker {
|
|
|
137
270
|
reportCount: this.reportCount,
|
|
138
271
|
estimationCount: this.estimationCount,
|
|
139
272
|
latestCostBreakdown: this.latestCostBreakdown,
|
|
273
|
+
subagentCostUsd: this.subagentCostUsd,
|
|
274
|
+
parentCostUsd: this.parentCostUsd,
|
|
275
|
+
costByWorkflowRunId,
|
|
140
276
|
};
|
|
141
277
|
}
|
|
142
278
|
emitMetrics(aggregator) {
|
|
@@ -162,6 +298,8 @@ export class CostTracker {
|
|
|
162
298
|
}
|
|
163
299
|
aggregator.record('ai.cost.report_count', this.reportCount, attrs);
|
|
164
300
|
aggregator.record('ai.cost.estimation_count', this.estimationCount, attrs);
|
|
301
|
+
aggregator.record('ai.cost.subagent_usd', this.subagentCostUsd, attrs);
|
|
302
|
+
aggregator.record('ai.cost.parent_usd', this.parentCostUsd, attrs);
|
|
165
303
|
}
|
|
166
304
|
reset() {
|
|
167
305
|
this.totalCostUsd = 0;
|
|
@@ -177,7 +315,12 @@ export class CostTracker {
|
|
|
177
315
|
this.latestCostBreakdown = null;
|
|
178
316
|
this.costByModel = new Map();
|
|
179
317
|
this.costByDayUsd = new Map();
|
|
318
|
+
this.subagentCostByDayUsd = new Map();
|
|
180
319
|
this.firstActivityMsByDay = new Map();
|
|
320
|
+
this.costByWorkflowRunId = new Map();
|
|
321
|
+
this.lastMutationMsByDay = new Map();
|
|
322
|
+
this.subagentCostUsd = 0;
|
|
323
|
+
this.parentCostUsd = 0;
|
|
181
324
|
this.totalLinesChanged = 0;
|
|
182
325
|
}
|
|
183
326
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cost-tracker.js","sourceRoot":"","sources":["../../src/metrics/cost-tracker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cost-tracker.js","sourceRoot":"","sources":["../../src/metrics/cost-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WorkflowRunTracker — captures one record per detected workflow run.
|
|
3
|
+
*
|
|
4
|
+
* Two input sources (identifier-space discriminator):
|
|
5
|
+
* 1. run_source: 'agent_tool' — from PreToolUse/PostToolUse hook pairs on
|
|
6
|
+
* the 'Agent' tool. workflow_run_id = toolUseId (toolu_*).
|
|
7
|
+
* Entry points: recordAgentToolCall(record) or recordToolCall(record).
|
|
8
|
+
*
|
|
9
|
+
* 2. run_source: 'script' — from wf_*.json WorkflowWatcher events.
|
|
10
|
+
* workflow_run_id = wf_<hex>-<hex>.
|
|
11
|
+
* Entry point: recordScriptRun(event).
|
|
12
|
+
*
|
|
13
|
+
* For agent_tool runs, non-Agent tool calls that fall within a run's
|
|
14
|
+
* [started_at, started_at + duration_ms] window are attributed to it via
|
|
15
|
+
* tool_call_count and child_agent_count heuristics (best-effort, because hook
|
|
16
|
+
* payloads do not distinguish inner-subagent calls from parent calls).
|
|
17
|
+
*/
|
|
18
|
+
import type { ToolCallRecord } from '../storage/types.js';
|
|
19
|
+
export type WorkflowRunStatus = 'completed' | 'errored' | 'in_progress';
|
|
20
|
+
/** Event shape produced by the WorkflowWatcher from wf_*.json files. */
|
|
21
|
+
export interface WorkflowRunEvent {
|
|
22
|
+
readonly mode: 'workflow_run';
|
|
23
|
+
readonly timestamp: number;
|
|
24
|
+
readonly workflowRunId: string;
|
|
25
|
+
readonly status: string;
|
|
26
|
+
readonly durationMs: number | null;
|
|
27
|
+
readonly totalTokens: number;
|
|
28
|
+
readonly agentCount: number;
|
|
29
|
+
readonly workflowName: string;
|
|
30
|
+
readonly phases: readonly string[];
|
|
31
|
+
readonly workflowProgress: ReadonlyArray<{
|
|
32
|
+
readonly type?: string;
|
|
33
|
+
readonly state?: string;
|
|
34
|
+
readonly agentId?: string;
|
|
35
|
+
}>;
|
|
36
|
+
readonly parentSessionId: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* One row per completed workflow run.
|
|
40
|
+
*
|
|
41
|
+
* Fields marked "agent_tool only" are null when run_source === 'script'.
|
|
42
|
+
* Fields marked "script only" are null/0 when run_source === 'agent_tool'.
|
|
43
|
+
*/
|
|
44
|
+
export interface WorkflowRunMetrics {
|
|
45
|
+
readonly workflow_run_id: string;
|
|
46
|
+
readonly run_source: 'agent_tool' | 'script';
|
|
47
|
+
readonly session_id: string;
|
|
48
|
+
readonly workflow_name: string;
|
|
49
|
+
readonly status: string;
|
|
50
|
+
readonly started_at: number;
|
|
51
|
+
readonly duration_ms: number;
|
|
52
|
+
readonly agent_count: number;
|
|
53
|
+
readonly total_tokens: number;
|
|
54
|
+
readonly declared_phases: number | null;
|
|
55
|
+
readonly observed_phases: number;
|
|
56
|
+
readonly incomplete: boolean;
|
|
57
|
+
readonly subagent_type: string | null;
|
|
58
|
+
readonly agent_name: string | null;
|
|
59
|
+
readonly agent_model: string | null;
|
|
60
|
+
readonly agent_description: string | null;
|
|
61
|
+
readonly run_in_background: boolean | null;
|
|
62
|
+
readonly exit_error: string | null;
|
|
63
|
+
readonly tool_call_count: number;
|
|
64
|
+
readonly child_agent_count: number;
|
|
65
|
+
}
|
|
66
|
+
export interface WorkflowRunTrackerOptions {
|
|
67
|
+
/** Max characters of agent_description retained on the metrics row. */
|
|
68
|
+
readonly descriptionMaxLength?: number;
|
|
69
|
+
/** Hard cap on simultaneously-tracked open runs to prevent unbounded growth. */
|
|
70
|
+
readonly maxOpenRuns?: number;
|
|
71
|
+
/** Hard cap on drainable completed runs awaiting consumption. */
|
|
72
|
+
readonly maxCompletedRuns?: number;
|
|
73
|
+
}
|
|
74
|
+
export declare class WorkflowRunTracker {
|
|
75
|
+
private readonly descriptionMaxLength;
|
|
76
|
+
private readonly maxOpenRuns;
|
|
77
|
+
private readonly maxCompletedRuns;
|
|
78
|
+
/** Open runs keyed by workflow_run_id. Insertion order = arrival order. */
|
|
79
|
+
private readonly openRuns;
|
|
80
|
+
/** Completed (drainable) runs in arrival order. */
|
|
81
|
+
private readonly completed;
|
|
82
|
+
constructor(options?: WorkflowRunTrackerOptions);
|
|
83
|
+
/**
|
|
84
|
+
* Record a ToolCallRecord from the hook event processor.
|
|
85
|
+
* Only Agent tool calls are recorded as workflow runs; other tool calls are
|
|
86
|
+
* attributed to the enclosing run as child calls.
|
|
87
|
+
*
|
|
88
|
+
* Kept for backward compatibility — delegates to recordAgentToolCall or
|
|
89
|
+
* the attribution heuristic as appropriate.
|
|
90
|
+
*/
|
|
91
|
+
recordToolCall(record: ToolCallRecord): void;
|
|
92
|
+
/**
|
|
93
|
+
* Record a completed Agent tool call hook pair.
|
|
94
|
+
* Only processes records where toolName === 'Agent'.
|
|
95
|
+
*/
|
|
96
|
+
recordAgentToolCall(record: ToolCallRecord): void;
|
|
97
|
+
/**
|
|
98
|
+
* Record a workflow run event from a wf_*.json WorkflowWatcher file.
|
|
99
|
+
*
|
|
100
|
+
* NOTE: currently unused in production wiring. `src/index.ts` feeds only
|
|
101
|
+
* `run_source='agent_tool'` runs into the tracker (via `onWorkflowAgent` →
|
|
102
|
+
* `recordToolCall`); script workflow runs are surfaced to the dashboard by
|
|
103
|
+
* WorkflowStore reading wf_*.json directly, not through this tracker. This
|
|
104
|
+
* method is retained (and covered by tests) for a future buffer path that
|
|
105
|
+
* routes WorkflowWatcher events through the processor — do not delete.
|
|
106
|
+
*/
|
|
107
|
+
recordScriptRun(event: WorkflowRunEvent): void;
|
|
108
|
+
/**
|
|
109
|
+
* Returns and clears all completed (drainable) runs in arrival order.
|
|
110
|
+
* Open (in-progress) runs are not returned.
|
|
111
|
+
* Each run is returned exactly once.
|
|
112
|
+
*/
|
|
113
|
+
drainCompleted(): WorkflowRunMetrics[];
|
|
114
|
+
/**
|
|
115
|
+
* Snapshot of all currently-tracked runs (open + completed-but-not-drained),
|
|
116
|
+
* primarily for tests and MCP tool inspection. Does not clear the buffer.
|
|
117
|
+
*
|
|
118
|
+
* A completed agent_tool run is kept in BOTH `openRuns` (for attribution
|
|
119
|
+
* lookups by late-arriving child tool calls) and `completed` (until
|
|
120
|
+
* drained) — dedupe by workflow_run_id so it isn't double-counted here.
|
|
121
|
+
*/
|
|
122
|
+
getMetrics(): readonly WorkflowRunMetrics[];
|
|
123
|
+
/**
|
|
124
|
+
* Clears all state for a new session. The sessionId parameter is accepted
|
|
125
|
+
* for interface consistency with other trackers.
|
|
126
|
+
*/
|
|
127
|
+
reset(_sessionId: string): void;
|
|
128
|
+
private attributeChildToolCall;
|
|
129
|
+
private incrementParentChildAgentCount;
|
|
130
|
+
/**
|
|
131
|
+
* Find the most-recently-started run in the same session whose
|
|
132
|
+
* [started_at, started_at + duration_ms] window encloses `timestamp`.
|
|
133
|
+
* Falls back to the most recent run that started before `timestamp` when
|
|
134
|
+
* no window encloses it (best-effort attribution).
|
|
135
|
+
*/
|
|
136
|
+
private findEnclosingRun;
|
|
137
|
+
private pushCompleted;
|
|
138
|
+
private enforceOpenRunsCap;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=workflow-run-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-run-tracker.d.ts","sourceRoot":"","sources":["../../src/metrics/workflow-run-tracker.ts"],"names":[],"mappings":"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"}
|