

















@@ -69,6 +69,7 @@ function resolveLegacyMainStoreSessionForDefaultAgent(opts: {
6969sessionKey?: string;
7070sessionStore: Record<string, SessionEntry>;
7171storePath: string;
72+cloneOnWrite?: boolean;
7273}): SessionKeyResolution | undefined {
7374if (opts.defaultAgentId === DEFAULT_AGENT_ID || !opts.sessionKey) {
7475return undefined;
@@ -92,24 +93,29 @@ function resolveLegacyMainStoreSessionForDefaultAgent(opts: {
9293for (const legacyKey of legacyKeys) {
9394const legacyEntry = opts.sessionStore[legacyKey];
9495if (legacyEntry) {
95-opts.sessionStore[opts.sessionKey] = { ...legacyEntry };
96+const sessionStore = opts.cloneOnWrite ? { ...opts.sessionStore } : opts.sessionStore;
97+sessionStore[opts.sessionKey] = { ...legacyEntry };
9698return {
9799sessionKey: opts.sessionKey,
98-sessionStore: opts.sessionStore,
100+ sessionStore,
99101storePath: opts.storePath,
100102};
101103}
102104}
103105return undefined;
104106}
105-const legacyStore = loadSessionStore(legacyStorePath);
107+const legacyStore = loadSessionStore(
108+legacyStorePath,
109+opts.cloneOnWrite ? { clone: false } : undefined,
110+);
106111for (const legacyKey of legacyKeys) {
107112const legacyEntry = legacyStore[legacyKey];
108113if (legacyEntry) {
109-opts.sessionStore[opts.sessionKey] = { ...legacyEntry };
114+const sessionStore = opts.cloneOnWrite ? { ...opts.sessionStore } : opts.sessionStore;
115+sessionStore[opts.sessionKey] = { ...legacyEntry };
110116return {
111117sessionKey: opts.sessionKey,
112-sessionStore: opts.sessionStore,
118+ sessionStore,
113119storePath: opts.storePath,
114120};
115121}
@@ -124,6 +130,7 @@ function collectSessionIdMatchesForRequest(opts: {
124130storeAgentId?: string;
125131sessionId: string;
126132searchOtherAgentStores: boolean;
133+clone?: boolean;
127134}): SessionIdMatchSet {
128135const matches: Array<[string, SessionEntry]> = [];
129136const primaryStoreMatches: Array<[string, SessionEntry]> = [];
@@ -160,7 +167,10 @@ function collectSessionIdMatchesForRequest(opts: {
160167continue;
161168}
162169const candidateStorePath = resolveStorePath(opts.cfg.session?.store, { agentId });
163-addMatches(loadSessionStore(candidateStorePath), candidateStorePath);
170+addMatches(
171+loadSessionStore(candidateStorePath, opts.clone === false ? { clone: false } : undefined),
172+candidateStorePath,
173+);
164174}
165175166176return { matches, primaryStoreMatches, storeByKey };
@@ -203,6 +213,7 @@ export function resolveSessionKeyForRequest(opts: {
203213sessionId?: string;
204214sessionKey?: string;
205215agentId?: string;
216+clone?: boolean;
206217}): SessionKeyResolution {
207218const sessionCfg = opts.cfg.session;
208219const scope = sessionCfg?.scope ?? "per-sender";
@@ -226,7 +237,8 @@ export function resolveSessionKeyForRequest(opts: {
226237const storePath = resolveStorePath(sessionCfg?.store, {
227238agentId: storeAgentId,
228239});
229-const sessionStore = loadSessionStore(storePath);
240+const loadOptions = opts.clone === false ? { clone: false as const } : undefined;
241+const sessionStore = loadSessionStore(storePath, loadOptions);
230242231243const ctx: MsgContext | undefined = opts.to?.trim() ? { From: opts.to } : undefined;
232244let sessionKey: string | undefined =
@@ -240,6 +252,7 @@ export function resolveSessionKeyForRequest(opts: {
240252 sessionKey,
241253 sessionStore,
242254 storePath,
255+cloneOnWrite: opts.clone === false,
243256});
244257if (legacyMainSession) {
245258return legacyMainSession;
@@ -262,6 +275,7 @@ export function resolveSessionKeyForRequest(opts: {
262275 storeAgentId,
263276sessionId: requestedSessionId,
264277searchOtherAgentStores: requestedAgentId === undefined,
278+ ...(opts.clone === false ? { clone: false } : {}),
265279});
266280const preferredSelection = resolveSessionIdMatchSelection(matches, requestedSessionId);
267281const currentStoreSelection =
@@ -293,6 +307,7 @@ export function resolveSession(opts: {
293307sessionId?: string;
294308sessionKey?: string;
295309agentId?: string;
310+clone?: boolean;
296311}): SessionResolution {
297312const sessionCfg = opts.cfg.session;
298313const { sessionKey, sessionStore, storePath } = resolveSessionKeyForRequest({
@@ -301,6 +316,7 @@ export function resolveSession(opts: {
301316sessionId: opts.sessionId,
302317sessionKey: opts.sessionKey,
303318agentId: opts.agentId,
319+ ...(opts.clone === false ? { clone: false } : {}),
304320});
305321const now = Date.now();
306322此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。