























@@ -71,6 +71,7 @@ export async function updateSessionStoreAfterAgentRun(params: {
7171 * heartbeat model does not "bleed" into the main session's perceived state.
7272 */
7373preserveRuntimeModel?: boolean;
74+preserveUserFacingSessionModelState?: boolean;
7475}) {
7576const {
7677 cfg,
@@ -115,7 +116,8 @@ export async function updateSessionStoreAfterAgentRun(params: {
115116allowAsyncLoad: false,
116117}) ?? DEFAULT_CONTEXT_TOKENS);
117118118-const preserveRuntimeModel = params.preserveRuntimeModel === true;
119+const preserveUserFacingRunState = params.preserveUserFacingSessionModelState === true;
120+const preserveRuntimeModel = params.preserveRuntimeModel === true || preserveUserFacingRunState;
119121const entry = sessionStore[sessionKey] ?? {
120122 sessionId,
121123updatedAt: now,
@@ -161,30 +163,32 @@ export async function updateSessionStoreAfterAgentRun(params: {
161163model: modelUsed,
162164});
163165}
164-if (agentHarnessId) {
165-next.agentHarnessId = agentHarnessId;
166-} else if (result.meta.executionTrace?.runner === "cli") {
167-next.agentHarnessId = undefined;
168-}
169-if (isCliProvider(providerUsed, cfg)) {
170-const cliSessionBinding = result.meta.agentMeta?.cliSessionBinding;
171-if (cliSessionBinding?.sessionId?.trim()) {
172-setCliSessionBinding(next, providerUsed, cliSessionBinding);
173-} else {
174-const cliSessionId = result.meta.agentMeta?.sessionId?.trim();
175-if (cliSessionId) {
176-setCliSessionId(next, providerUsed, cliSessionId);
166+if (!preserveUserFacingRunState) {
167+if (agentHarnessId) {
168+next.agentHarnessId = agentHarnessId;
169+} else if (result.meta.executionTrace?.runner === "cli") {
170+next.agentHarnessId = undefined;
171+}
172+if (isCliProvider(providerUsed, cfg)) {
173+const cliSessionBinding = result.meta.agentMeta?.cliSessionBinding;
174+if (cliSessionBinding?.sessionId?.trim()) {
175+setCliSessionBinding(next, providerUsed, cliSessionBinding);
176+} else {
177+const cliSessionId = result.meta.agentMeta?.sessionId?.trim();
178+if (cliSessionId) {
179+setCliSessionId(next, providerUsed, cliSessionId);
180+}
177181}
178182}
183+next.abortedLastRun = result.meta.aborted ?? false;
184+if (result.meta.systemPromptReport) {
185+next.systemPromptReport = result.meta.systemPromptReport;
186+}
187+if (!preserveRuntimeModel) {
188+next.contextBudgetStatus = contextBudgetStatus;
189+}
179190}
180-next.abortedLastRun = result.meta.aborted ?? false;
181-if (result.meta.systemPromptReport) {
182-next.systemPromptReport = result.meta.systemPromptReport;
183-}
184-if (!preserveRuntimeModel) {
185-next.contextBudgetStatus = contextBudgetStatus;
186-}
187-if (hasNonzeroUsage(usage)) {
191+if (hasNonzeroUsage(usage) && !preserveUserFacingRunState) {
188192const { estimateUsageCost, resolveModelCostConfig } = await getUsageFormatModule();
189193const input = usage.input ?? 0;
190194const output = usage.output ?? 0;
@@ -228,27 +232,38 @@ export async function updateSessionStoreAfterAgentRun(params: {
228232if (runEstimatedCostUsd !== undefined) {
229233next.estimatedCostUsd = runEstimatedCostUsd;
230234}
231-} else if (compactionTokensAfter !== undefined) {
235+} else if (compactionTokensAfter !== undefined && !preserveUserFacingRunState) {
232236next.totalTokens = compactionTokensAfter;
233237next.totalTokensFresh = true;
234238} else if (
239+!preserveUserFacingRunState &&
235240typeof entry.totalTokens === "number" &&
236241Number.isFinite(entry.totalTokens) &&
237242entry.totalTokens > 0
238243) {
239244next.totalTokens = entry.totalTokens;
240245next.totalTokensFresh = false;
241246}
242-if (compactionsThisRun > 0) {
247+if (compactionsThisRun > 0 && !preserveUserFacingRunState) {
243248next.compactionCount = (entry.compactionCount ?? 0) + compactionsThisRun;
244249}
245-const metadataPatch = removeLifecycleStateFromMetadataPatch(next);
250+const metadataPatch = preserveUserFacingRunState
251+ ? {
252+updatedAt: next.updatedAt,
253+ ...(touchInteraction ? { lastInteractionAt: next.lastInteractionAt } : {}),
254+}
255+ : removeLifecycleStateFromMetadataPatch(next);
246256const persisted = await updateSessionStore(storePath, (store) => {
257+if (preserveUserFacingRunState && !store[sessionKey]) {
258+return undefined;
259+}
247260const merged = mergeSessionEntry(store[sessionKey], metadataPatch);
248261store[sessionKey] = merged;
249262return merged;
250263});
251-sessionStore[sessionKey] = persisted;
264+if (persisted) {
265+sessionStore[sessionKey] = persisted;
266+}
252267}
253268254269export async function clearCliSessionInStore(params: {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。