Merge 80bf0e21ad33650f809a9f10b7aa27033039b233 into 5e417b44e1540f528d2ae63e3e20229a902d1db2
This commit is contained in:
commit
fbb6233eb3
@ -484,6 +484,7 @@ export async function runReplyAgent(params: {
|
||||
contextTokensUsed,
|
||||
systemPromptReport: runResult.meta?.systemPromptReport,
|
||||
cliSessionId,
|
||||
isHeartbeat,
|
||||
});
|
||||
|
||||
// Drain any late tool/block deliveries before deciding there's "nothing to send".
|
||||
|
||||
@ -280,6 +280,7 @@ export function createFollowupRunner(params: {
|
||||
contextTokensUsed,
|
||||
systemPromptReport: runResult.meta?.systemPromptReport,
|
||||
logLabel: "followup",
|
||||
isHeartbeat: opts?.isHeartbeat === true,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@ -75,6 +75,13 @@ export async function persistSessionUsageUpdate(params: {
|
||||
systemPromptReport?: SessionSystemPromptReport;
|
||||
cliSessionId?: string;
|
||||
logLabel?: string;
|
||||
/**
|
||||
* When true, the model/provider/contextTokens fields are NOT persisted to
|
||||
* the session entry. This prevents heartbeat model overrides from bleeding
|
||||
* into the main session's stored state (model, context window, etc.).
|
||||
* Token usage counters are still recorded.
|
||||
*/
|
||||
isHeartbeat?: boolean;
|
||||
}): Promise<void> {
|
||||
const { storePath, sessionKey } = params;
|
||||
if (!storePath || !sessionKey) {
|
||||
@ -117,9 +124,15 @@ export async function persistSessionUsageUpdate(params: {
|
||||
});
|
||||
const existingEstimatedCostUsd = resolveNonNegativeNumber(entry.estimatedCostUsd) ?? 0;
|
||||
const patch: Partial<SessionEntry> = {
|
||||
modelProvider: params.providerUsed ?? entry.modelProvider,
|
||||
model: params.modelUsed ?? entry.model,
|
||||
contextTokens: resolvedContextTokens,
|
||||
// When isHeartbeat is true, preserve the session's existing model/provider/context
|
||||
// so that a heartbeat model override does not bleed into the main session state.
|
||||
...(params.isHeartbeat
|
||||
? {}
|
||||
: {
|
||||
modelProvider: params.providerUsed ?? entry.modelProvider,
|
||||
model: params.modelUsed ?? entry.model,
|
||||
contextTokens: resolvedContextTokens,
|
||||
}),
|
||||
systemPromptReport: params.systemPromptReport ?? entry.systemPromptReport,
|
||||
updatedAt: Date.now(),
|
||||
};
|
||||
@ -150,7 +163,9 @@ export async function persistSessionUsageUpdate(params: {
|
||||
return;
|
||||
}
|
||||
|
||||
if (params.modelUsed || params.contextTokensUsed) {
|
||||
// When isHeartbeat is true, skip persisting model/context entirely — the heartbeat
|
||||
// model override should not affect the session's stored model state.
|
||||
if (!params.isHeartbeat && (params.modelUsed || params.contextTokensUsed)) {
|
||||
try {
|
||||
await updateSessionStoreEntry({
|
||||
storePath,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user