@newrelic/preflight 1.71.0 → 1.72.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dashboard/routes/api-handler.d.ts.map +1 -1
- package/dist/dashboard/routes/api-handler.js +2 -9
- package/dist/dashboard/routes/api-handler.js.map +1 -1
- package/dist/dashboard/subagent-timeline-store.d.ts +12 -1
- package/dist/dashboard/subagent-timeline-store.d.ts.map +1 -1
- package/dist/dashboard/subagent-timeline-store.js +32 -4
- package/dist/dashboard/subagent-timeline-store.js.map +1 -1
- package/dist/dashboard/workflow-store.d.ts.map +1 -1
- package/dist/dashboard/workflow-store.js +2 -3
- package/dist/dashboard/workflow-store.js.map +1 -1
- package/dist/hooks/event-processor.d.ts +20 -5
- package/dist/hooks/event-processor.d.ts.map +1 -1
- package/dist/hooks/event-processor.js +135 -39
- package/dist/hooks/event-processor.js.map +1 -1
- package/dist/hooks/index.d.ts +1 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/parent-transcript-watcher.d.ts +1 -1
- package/dist/hooks/parent-transcript-watcher.d.ts.map +1 -1
- package/dist/hooks/parent-transcript-watcher.js +6 -2
- package/dist/hooks/parent-transcript-watcher.js.map +1 -1
- package/dist/hooks/session-resolver.d.ts.map +1 -1
- package/dist/hooks/session-resolver.js +2 -1
- package/dist/hooks/session-resolver.js.map +1 -1
- package/dist/hooks/subagent-watcher.d.ts +3 -1
- package/dist/hooks/subagent-watcher.d.ts.map +1 -1
- package/dist/hooks/subagent-watcher.js +6 -4
- package/dist/hooks/subagent-watcher.js.map +1 -1
- package/dist/hooks/workflow-watcher.d.ts.map +1 -1
- package/dist/hooks/workflow-watcher.js +2 -2
- package/dist/hooks/workflow-watcher.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +53 -60
- package/dist/index.js.map +1 -1
- package/dist/install/cli.d.ts.map +1 -1
- package/dist/install/cli.js +81 -7
- package/dist/install/cli.js.map +1 -1
- package/dist/install/copilot-install-helper.d.ts +1 -0
- package/dist/install/copilot-install-helper.d.ts.map +1 -1
- package/dist/install/copilot-install-helper.js +82 -26
- package/dist/install/copilot-install-helper.js.map +1 -1
- package/dist/install/diagnostics.d.ts.map +1 -1
- package/dist/install/diagnostics.js +6 -3
- package/dist/install/diagnostics.js.map +1 -1
- package/dist/install/install-helper.d.ts +9 -0
- package/dist/install/install-helper.d.ts.map +1 -1
- package/dist/install/install-helper.js +42 -17
- package/dist/install/install-helper.js.map +1 -1
- package/dist/install/schedule.d.ts.map +1 -1
- package/dist/install/schedule.js +4 -1
- package/dist/install/schedule.js.map +1 -1
- package/dist/install/target-user.d.ts +33 -0
- package/dist/install/target-user.d.ts.map +1 -0
- package/dist/install/target-user.js +121 -0
- package/dist/install/target-user.js.map +1 -0
- package/dist/lib/claude-config-dir.d.ts +3 -0
- package/dist/lib/claude-config-dir.d.ts.map +1 -0
- package/dist/lib/claude-config-dir.js +10 -0
- package/dist/lib/claude-config-dir.js.map +1 -0
- package/dist/lib/claude-settings-env.d.ts +18 -0
- package/dist/lib/claude-settings-env.d.ts.map +1 -0
- package/dist/lib/claude-settings-env.js +78 -0
- package/dist/lib/claude-settings-env.js.map +1 -0
- package/dist/lib/date.d.ts +7 -0
- package/dist/lib/date.d.ts.map +1 -1
- package/dist/lib/date.js +11 -1
- package/dist/lib/date.js.map +1 -1
- package/dist/lib/subagent-transcript-parser.d.ts +2 -0
- package/dist/lib/subagent-transcript-parser.d.ts.map +1 -1
- package/dist/lib/subagent-transcript-parser.js +5 -0
- package/dist/lib/subagent-transcript-parser.js.map +1 -1
- package/dist/lib/transcript-types.d.ts +4 -0
- package/dist/lib/transcript-types.d.ts.map +1 -1
- package/dist/metrics/cost-forecast.d.ts +2 -0
- package/dist/metrics/cost-forecast.d.ts.map +1 -1
- package/dist/metrics/cost-forecast.js +46 -24
- package/dist/metrics/cost-forecast.js.map +1 -1
- package/dist/metrics/cost-tracker.d.ts +3 -3
- package/dist/metrics/cost-tracker.js +3 -3
- package/dist/metrics/efficiency-score.d.ts +2 -2
- package/dist/metrics/efficiency-score.js +2 -2
- package/dist/metrics/first-save-baselines.d.ts +60 -0
- package/dist/metrics/first-save-baselines.d.ts.map +1 -0
- package/dist/metrics/first-save-baselines.js +77 -0
- package/dist/metrics/first-save-baselines.js.map +1 -0
- package/dist/metrics/local-session-aggregator.d.ts +2 -1
- package/dist/metrics/local-session-aggregator.d.ts.map +1 -1
- package/dist/metrics/local-session-aggregator.js +21 -0
- package/dist/metrics/local-session-aggregator.js.map +1 -1
- package/dist/metrics/model-pricing.d.ts +1 -1
- package/dist/metrics/model-pricing.d.ts.map +1 -1
- package/dist/metrics/model-pricing.js +2 -2
- package/dist/metrics/model-pricing.js.map +1 -1
- package/dist/metrics/model-usage-tracker.d.ts +2 -2
- package/dist/metrics/model-usage-tracker.js +2 -2
- package/dist/metrics/pricing-init.d.ts.map +1 -1
- package/dist/metrics/pricing-init.js +5 -3
- package/dist/metrics/pricing-init.js.map +1 -1
- package/dist/metrics/pricing-overlay.d.ts.map +1 -1
- package/dist/metrics/pricing-overlay.js +1 -4
- package/dist/metrics/pricing-overlay.js.map +1 -1
- package/dist/metrics/pricing-refresh.d.ts +16 -4
- package/dist/metrics/pricing-refresh.d.ts.map +1 -1
- package/dist/metrics/pricing-refresh.js +47 -1
- package/dist/metrics/pricing-refresh.js.map +1 -1
- package/dist/metrics/quality-proxy-tracker.d.ts +2 -2
- package/dist/metrics/quality-proxy-tracker.js +2 -2
- package/dist/metrics/session-tracker.d.ts +5 -1
- package/dist/metrics/session-tracker.d.ts.map +1 -1
- package/dist/metrics/session-tracker.js +58 -17
- package/dist/metrics/session-tracker.js.map +1 -1
- package/dist/metrics/task-detector.d.ts +2 -2
- package/dist/metrics/task-detector.js +2 -2
- package/dist/metrics/token-usage.d.ts +6 -0
- package/dist/metrics/token-usage.d.ts.map +1 -0
- package/dist/metrics/token-usage.js +34 -0
- package/dist/metrics/token-usage.js.map +1 -0
- package/dist/metrics/turn-cost-attributor.d.ts.map +1 -1
- package/dist/metrics/turn-cost-attributor.js +3 -0
- package/dist/metrics/turn-cost-attributor.js.map +1 -1
- package/dist/platforms/copilot-adapter.d.ts.map +1 -1
- package/dist/platforms/copilot-adapter.js +3 -0
- package/dist/platforms/copilot-adapter.js.map +1 -1
- package/dist/platforms/copilot-sdk-adapter.d.ts.map +1 -1
- package/dist/platforms/copilot-sdk-adapter.js +3 -0
- package/dist/platforms/copilot-sdk-adapter.js.map +1 -1
- package/dist/storage/drain-claims.d.ts +33 -10
- package/dist/storage/drain-claims.d.ts.map +1 -1
- package/dist/storage/drain-claims.js +78 -13
- package/dist/storage/drain-claims.js.map +1 -1
- package/dist/storage/local-store.d.ts +21 -0
- package/dist/storage/local-store.d.ts.map +1 -1
- package/dist/storage/local-store.js +118 -19
- package/dist/storage/local-store.js.map +1 -1
- package/dist/storage/retention.d.ts.map +1 -1
- package/dist/storage/retention.js +7 -6
- package/dist/storage/retention.js.map +1 -1
- package/dist/storage/session-store.d.ts +16 -2
- package/dist/storage/session-store.d.ts.map +1 -1
- package/dist/storage/session-store.js +242 -37
- package/dist/storage/session-store.js.map +1 -1
- package/dist/storage/types.d.ts +7 -0
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/types.js +4 -0
- package/dist/storage/types.js.map +1 -1
- package/dist/tools/cost-tools.d.ts.map +1 -1
- package/dist/tools/cost-tools.js +1 -0
- package/dist/tools/cost-tools.js.map +1 -1
- package/dist/web/assets/{index-U9DPZ-Tb.js → index-CZvLy2Qy.js} +2 -2
- package/dist/web/index.html +1 -1
- package/package.json +4 -1
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AAmBvB,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAmElE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAyBzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAMhF,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -18,7 +18,7 @@ import { WorkflowStore } from './dashboard/workflow-store.js';
|
|
|
18
18
|
import { isCopilotSdkExtensionMissing } from './hooks/copilot-sdk-extension-health.js';
|
|
19
19
|
import { CopilotAppUsageWatcher } from './hooks/copilot-app-usage-watcher.js';
|
|
20
20
|
import { CopilotUsageWatcher } from './hooks/copilot-usage-watcher.js';
|
|
21
|
-
import { HookEventProcessor } from './hooks/index.js';
|
|
21
|
+
import { DEFAULT_MAX_PENDING, HookEventProcessor } from './hooks/index.js';
|
|
22
22
|
import { isPlatformDetectionFellBack } from './hooks/platform-detection-health.js';
|
|
23
23
|
import { ParentTranscriptWatcher } from './hooks/parent-transcript-watcher.js';
|
|
24
24
|
import { BilledTurnLedger, pruneBilledTurns } from './hooks/billed-turn-ledger.js';
|
|
@@ -45,10 +45,10 @@ import { ContextWindowTracker } from './metrics/context-window-tracker.js';
|
|
|
45
45
|
import { initModelPricing } from './metrics/pricing-init.js';
|
|
46
46
|
import { buildCostForecastFromInputs } from './metrics/cost-forecast.js';
|
|
47
47
|
import { CostPerOutcomeAnalyzer } from './metrics/cost-per-outcome.js';
|
|
48
|
-
import { buildCostTrackerSeed } from './metrics/cost-tracker-seed.js';
|
|
49
48
|
import { CostTracker } from './metrics/cost-tracker.js';
|
|
50
49
|
import { DecisionTracker } from './metrics/decision-tracker.js';
|
|
51
50
|
import { EfficiencyScorer } from './metrics/efficiency-score.js';
|
|
51
|
+
import { FirstSaveBaselines } from './metrics/first-save-baselines.js';
|
|
52
52
|
import { GitEfficiencyTracker, parseDefaultBranchFromSymbolicRef, } from './metrics/git-efficiency-tracker.js';
|
|
53
53
|
import { WorktreeIdentityResolver } from './metrics/git-workspace-identity.js';
|
|
54
54
|
import { GitWorkspaceReporter, replaySessionToActivityRecords, } from './metrics/git-workspace-reporter.js';
|
|
@@ -65,11 +65,11 @@ import { RetryDetector } from './metrics/retry-detector.js';
|
|
|
65
65
|
import { SessionTracker } from './metrics/session-tracker.js';
|
|
66
66
|
import { SkillActivationTracker } from './metrics/skill-activation-tracker.js';
|
|
67
67
|
import { TaskCompletionTracker } from './metrics/task-completion-tracker.js';
|
|
68
|
-
import { buildTaskDetectorSeed } from './metrics/task-detector-seed.js';
|
|
69
68
|
import { TaskDetector } from './metrics/task-detector.js';
|
|
70
69
|
import { ToolSelectionScorer } from './metrics/tool-selection-scorer.js';
|
|
71
70
|
import { TranscriptMessageTracker } from './metrics/transcript-message-tracker.js';
|
|
72
71
|
import { TrendAnalyzer } from './metrics/trend-analyzer.js';
|
|
72
|
+
import { tokenUsageFromSubagentTurn, tokenUsageFromTokenEvent } from './metrics/token-usage.js';
|
|
73
73
|
import { TurnCostAttributor } from './metrics/turn-cost-attributor.js';
|
|
74
74
|
import { TurnTracker } from './metrics/turn-tracker.js';
|
|
75
75
|
import { WorkflowRunTracker } from './metrics/workflow-run-tracker.js';
|
|
@@ -82,6 +82,7 @@ import { LocalStore } from './storage/index.js';
|
|
|
82
82
|
import { computeHistoricalCosts } from './storage/historical-costs.js';
|
|
83
83
|
import { purgeOldSessions, purgeOldWeeklySummaries } from './storage/retention.js';
|
|
84
84
|
import { buildSessionSummary, SessionStore, sessionSummaryToDriftRecord, } from './storage/session-store.js';
|
|
85
|
+
import { amendRecord } from './storage/types.js';
|
|
85
86
|
import { WeeklySummaryGenerator } from './storage/weekly-summary.js';
|
|
86
87
|
import { registerPendingTools, registerTools } from './tools/session-stats.js';
|
|
87
88
|
import { FeedbackCollector } from './tools/workflow-tools.js';
|
|
@@ -262,6 +263,7 @@ export function runMaintenanceGcPass(deps) {
|
|
|
262
263
|
try {
|
|
263
264
|
localStore.gcStaleBreadcrumbs();
|
|
264
265
|
localStore.gcDeadLocalInstances();
|
|
266
|
+
localStore.gcCountedToolUseIds();
|
|
265
267
|
const live = localStore.getActiveSessionIdsFromHeartbeats();
|
|
266
268
|
if (liveSessionRegistry) {
|
|
267
269
|
for (const id of liveSessionRegistry.getLiveSessions({ includeSynthetic: true })) {
|
|
@@ -716,6 +718,7 @@ async function main() {
|
|
|
716
718
|
ppidCorrectionAbort?.abort();
|
|
717
719
|
logger.info('Shutting down...');
|
|
718
720
|
try {
|
|
721
|
+
eventProcessor?.stop();
|
|
719
722
|
persistSession?.();
|
|
720
723
|
if (config?.otlp?.transport !== 'nr-events-api' &&
|
|
721
724
|
sessionTracker &&
|
|
@@ -763,7 +766,6 @@ async function main() {
|
|
|
763
766
|
}
|
|
764
767
|
alertRulesWatcher = undefined;
|
|
765
768
|
}
|
|
766
|
-
eventProcessor?.stop();
|
|
767
769
|
activeSubagentWatcher?.stop();
|
|
768
770
|
activeWorkflowWatcher?.stop();
|
|
769
771
|
activeParentTranscriptWatcher?.stop();
|
|
@@ -965,7 +967,7 @@ async function main() {
|
|
|
965
967
|
storagePath: config.storagePath,
|
|
966
968
|
retainSessionsDays: config.retainSessionsDays,
|
|
967
969
|
}) ?? undefined;
|
|
968
|
-
sessionTracker = new SessionTracker(sessionTraceId);
|
|
970
|
+
sessionTracker = new SessionTracker(sessionTraceId, DEFAULT_MAX_PENDING);
|
|
969
971
|
// Combine the two independent correction factors here so CostTracker only
|
|
970
972
|
// ever deals with one number (see its constructor doc comment) — the raw
|
|
971
973
|
// config fields (costRateMultiplier, dataResidencyPremium) stay unmerged
|
|
@@ -1167,6 +1169,19 @@ async function main() {
|
|
|
1167
1169
|
// below can call this again for a *different* id after a pending->real
|
|
1168
1170
|
// transition or a PPID correction.
|
|
1169
1171
|
const rehydratedTrackerSessionIds = new Set();
|
|
1172
|
+
const firstSaveBaselines = new FirstSaveBaselines();
|
|
1173
|
+
const saveSessionRememberingBaseline = (summary) => {
|
|
1174
|
+
const saved = sessionStore.saveSession(summary);
|
|
1175
|
+
// Only a --stdio engine ever adopts a real session id and seeds it.
|
|
1176
|
+
if (saved && options.stdio && !rehydratedTrackerSessionIds.has(summary.sessionId)) {
|
|
1177
|
+
firstSaveBaselines.recordSave({
|
|
1178
|
+
sessionId: summary.sessionId,
|
|
1179
|
+
previous: saved.previous,
|
|
1180
|
+
ownSession: summary.sessionId === sessionTraceId,
|
|
1181
|
+
});
|
|
1182
|
+
}
|
|
1183
|
+
return saved !== null;
|
|
1184
|
+
};
|
|
1170
1185
|
const rehydrateTrackersIfResumed = (sessionId) => {
|
|
1171
1186
|
if (isSyntheticSessionId(sessionId))
|
|
1172
1187
|
return;
|
|
@@ -1174,36 +1189,25 @@ async function main() {
|
|
|
1174
1189
|
return;
|
|
1175
1190
|
rehydratedTrackerSessionIds.add(sessionId);
|
|
1176
1191
|
try {
|
|
1177
|
-
const
|
|
1178
|
-
if (
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
if (persisted.efficiencyScore !== null &&
|
|
1195
|
-
persisted.efficiencyScoreComponents &&
|
|
1196
|
-
(persisted.efficiencyScoreSampleCount ?? 0) > 0) {
|
|
1197
|
-
efficiencyScorer.seedFromPersisted({
|
|
1198
|
-
score: persisted.efficiencyScore,
|
|
1199
|
-
components: persisted.efficiencyScoreComponents,
|
|
1200
|
-
sampleCount: persisted.efficiencyScoreSampleCount ?? 0,
|
|
1192
|
+
const { cost, toolCalls } = firstSaveBaselines.take(sessionId, () => sessionStore.loadSession(sessionId));
|
|
1193
|
+
if (cost) {
|
|
1194
|
+
costTracker.seedFromPersisted(cost.costTracker);
|
|
1195
|
+
budgetTracker.seedFiredThresholdsFromSessionTotal(cost.estimatedCostUsd ?? 0);
|
|
1196
|
+
modelUsageTracker.seedFromPersisted(cost.modelBreakdown);
|
|
1197
|
+
}
|
|
1198
|
+
if (toolCalls) {
|
|
1199
|
+
sessionTracker.seedFromPersisted(toolCalls.sessionTracker);
|
|
1200
|
+
qualityProxyTracker.seedFromPersisted(toolCalls.qualityProxy);
|
|
1201
|
+
taskDetector.seedFromPersisted(toolCalls.taskDetector);
|
|
1202
|
+
if (toolCalls.efficiency)
|
|
1203
|
+
efficiencyScorer.seedFromPersisted(toolCalls.efficiency);
|
|
1204
|
+
}
|
|
1205
|
+
if (cost || toolCalls) {
|
|
1206
|
+
logger.info('Rehydrated trackers from a prior checkpoint for this session', {
|
|
1207
|
+
sessionId,
|
|
1208
|
+
estimatedCostUsd: cost?.estimatedCostUsd ?? null,
|
|
1201
1209
|
});
|
|
1202
1210
|
}
|
|
1203
|
-
logger.info('Rehydrated trackers from a prior checkpoint for this session', {
|
|
1204
|
-
sessionId,
|
|
1205
|
-
estimatedCostUsd: persisted.estimatedCostUsd,
|
|
1206
|
-
});
|
|
1207
1211
|
}
|
|
1208
1212
|
catch (err) {
|
|
1209
1213
|
logger.warn('Failed to rehydrate trackers from a prior checkpoint', {
|
|
@@ -1811,6 +1815,14 @@ async function main() {
|
|
|
1811
1815
|
// live sessions' events. After real session ID resolution the processor
|
|
1812
1816
|
// is hot-swapped to the scoped store via replaceStore().
|
|
1813
1817
|
drainAllSessions: !options.stdio || isProvisional,
|
|
1818
|
+
onRecordAmend: (record) => {
|
|
1819
|
+
sessionTracker?.amendToolCall(record);
|
|
1820
|
+
localSessionAggregator.amendToolCall(record);
|
|
1821
|
+
subagentAttribution.recordAgentToolCall(record);
|
|
1822
|
+
const index = toolCallBuffer.findIndex((r) => r.id === record.id);
|
|
1823
|
+
if (index >= 0)
|
|
1824
|
+
toolCallBuffer[index] = amendRecord(toolCallBuffer[index], record);
|
|
1825
|
+
},
|
|
1814
1826
|
onRecord: (incomingRecord) => {
|
|
1815
1827
|
// Attributed before any consumer (notably auditTrail below) sees the
|
|
1816
1828
|
// record, so audit/security events carry agentId and agentType.
|
|
@@ -2064,14 +2076,7 @@ async function main() {
|
|
|
2064
2076
|
const closedTurn = turnCostAttributor.recordTokenEvent(tokenEvent);
|
|
2065
2077
|
if (isOwnEvent)
|
|
2066
2078
|
capturedNrIngest?.ingestTurnCost(closedTurn);
|
|
2067
|
-
const usage =
|
|
2068
|
-
inputTokens: tokenEvent.inputTokens,
|
|
2069
|
-
outputTokens: tokenEvent.outputTokens,
|
|
2070
|
-
thinkingTokens: 0,
|
|
2071
|
-
cacheReadTokens: tokenEvent.cacheReadTokens,
|
|
2072
|
-
cacheCreationTokens: tokenEvent.cacheCreationTokens,
|
|
2073
|
-
totalTokens: tokenEvent.inputTokens + tokenEvent.outputTokens,
|
|
2074
|
-
};
|
|
2079
|
+
const usage = tokenUsageFromTokenEvent(tokenEvent);
|
|
2075
2080
|
let breakdown;
|
|
2076
2081
|
if (!isOwnEvent) {
|
|
2077
2082
|
breakdown = costTracker.priceUsage(usage, tokenEvent.model);
|
|
@@ -2172,21 +2177,7 @@ async function main() {
|
|
|
2172
2177
|
// the buffer.
|
|
2173
2178
|
subagentAttribution.recordSubagentTurn(turn);
|
|
2174
2179
|
const agentType = subagentAttribution.agentTypeFor(turn.agentId);
|
|
2175
|
-
const usage =
|
|
2176
|
-
inputTokens: turn.inputTokens,
|
|
2177
|
-
outputTokens: turn.outputTokens,
|
|
2178
|
-
// Subagent reasoning tokens (extended thinking) live under
|
|
2179
|
-
// `output_tokens_details.reasoning_tokens`; map to `thinkingTokens`
|
|
2180
|
-
// so the existing `thinkingPerMTok` rate column charges correctly.
|
|
2181
|
-
thinkingTokens: turn.reasoningTokens,
|
|
2182
|
-
cacheReadTokens: turn.cacheReadTokens,
|
|
2183
|
-
cacheCreationTokens: turn.cacheCreationTokens,
|
|
2184
|
-
totalTokens: turn.inputTokens +
|
|
2185
|
-
turn.outputTokens +
|
|
2186
|
-
turn.reasoningTokens +
|
|
2187
|
-
turn.cacheReadTokens +
|
|
2188
|
-
turn.cacheCreationTokens,
|
|
2189
|
-
};
|
|
2180
|
+
const usage = tokenUsageFromSubagentTurn(turn);
|
|
2190
2181
|
const breakdown = costTracker.recordTokenUsage(usage, turn.model, {
|
|
2191
2182
|
timestampMs: turn.timestampMs,
|
|
2192
2183
|
workflowRunId: turn.workflowRunId,
|
|
@@ -2379,9 +2370,8 @@ async function main() {
|
|
|
2379
2370
|
toolSelectionScorer,
|
|
2380
2371
|
repoResolver: repoNameResolver,
|
|
2381
2372
|
});
|
|
2382
|
-
|
|
2383
|
-
|
|
2384
|
-
}
|
|
2373
|
+
const saved = rollups.filter((rollup) => saveSessionRememberingBaseline(rollup));
|
|
2374
|
+
eventProcessor?.persistCountedIdsOfSavedSessions(saved.map((r) => String(r.sessionId)));
|
|
2385
2375
|
if (!opts?.periodic) {
|
|
2386
2376
|
logger.info('Persisted observed sessions on behalf of synthetic owner', {
|
|
2387
2377
|
sessionId: summary.sessionId,
|
|
@@ -2390,7 +2380,9 @@ async function main() {
|
|
|
2390
2380
|
}
|
|
2391
2381
|
return;
|
|
2392
2382
|
}
|
|
2393
|
-
|
|
2383
|
+
if (saveSessionRememberingBaseline(summary)) {
|
|
2384
|
+
eventProcessor?.persistCountedIdsOfSavedSessions([summary.sessionId]);
|
|
2385
|
+
}
|
|
2394
2386
|
// checkAndGenerateLastWeek() is idempotent (existsSync check before
|
|
2395
2387
|
// any real work), so calling it on every periodic checkpoint too is
|
|
2396
2388
|
// cheap — and necessary: it otherwise only ran on the clean-shutdown
|
|
@@ -2653,6 +2645,7 @@ async function main() {
|
|
|
2653
2645
|
// path, which is keyed by whatever id the hook collector script
|
|
2654
2646
|
// wrote — never the wrong guess — so toolCallCount/timeline stay
|
|
2655
2647
|
// clean through the whole unconfirmed window regardless.
|
|
2648
|
+
firstSaveBaselines.forget(sessionTraceId);
|
|
2656
2649
|
costTracker.reset(realId);
|
|
2657
2650
|
modelUsageTracker.reset(realId);
|
|
2658
2651
|
contextCompositionTracker.reset(realId);
|