























@@ -44,6 +44,12 @@ function resolveMaxToolResultChars(opts?: { maxToolResultChars?: number }): numb
4444return Math.max(1, opts?.maxToolResultChars ?? DEFAULT_MAX_LIVE_TOOL_RESULT_CHARS);
4545}
464647+type UserAgentMessage = Extract<AgentMessage, { role: "user" }>;
48+49+function isUserAgentMessage(message: AgentMessage): message is UserAgentMessage {
50+return message.role === "user";
51+}
52+4753// `details` is runtime/UI metadata, not model-visible tool output. Keep the
4854// session JSONL useful for debugging without letting metadata blobs dominate
4955// disk, replay repair, transcript broadcasts, or future tooling that reads raw
@@ -302,6 +308,10 @@ export function installSessionToolResultGuard(
302308event: PluginHookBeforeMessageWriteEvent,
303309) => PluginHookBeforeMessageWriteResult | undefined;
304310maxToolResultChars?: number;
311+suppressNextUserMessagePersistence?: boolean;
312+onUserMessagePersisted?: (
313+message: Extract<AgentMessage, { role: "user" }>,
314+) => void | Promise<void>;
305315},
306316): {
307317flushPendingToolResults: () => void;
@@ -328,6 +338,7 @@ export function installSessionToolResultGuard(
328338const missingToolResultText = opts?.missingToolResultText;
329339const beforeWrite = opts?.beforeMessageWriteHook;
330340const maxToolResultChars = resolveMaxToolResultChars(opts);
341+let suppressNextUserMessagePersistence = opts?.suppressNextUserMessagePersistence === true;
331342332343/**
333344 * Run the before_message_write hook. Returns the (possibly modified) message,
@@ -450,6 +461,10 @@ export function installSessionToolResultGuard(
450461if (!finalMessage) {
451462return undefined;
452463}
464+if (isUserAgentMessage(finalMessage) && suppressNextUserMessagePersistence) {
465+suppressNextUserMessagePersistence = false;
466+return undefined;
467+}
453468const result = originalAppend(finalMessage as never);
454469455470const sessionFile = (
@@ -467,6 +482,9 @@ export function installSessionToolResultGuard(
467482if (toolCalls.length > 0) {
468483pendingState.trackToolCalls(toolCalls);
469484}
485+if (isUserAgentMessage(finalMessage)) {
486+void opts?.onUserMessagePersisted?.(finalMessage);
487+}
470488471489return result;
472490};
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。