























@@ -6,6 +6,7 @@ import { createAgentSession, SessionManager } from "@earendil-works/pi-coding-ag
66import { isAcpRuntimeSpawnAvailable } from "../../../acp/runtime/availability.js";
77import { buildHierarchyReinforcementMessage } from "../../../auto-reply/handoff-summarizer.js";
88import { filterHeartbeatPairs } from "../../../auto-reply/heartbeat-filter.js";
9+import { stripInboundMetadata } from "../../../auto-reply/reply/strip-inbound-meta.js";
910import { getRuntimeConfig } from "../../../config/config.js";
1011import { resolveStorePath } from "../../../config/sessions/paths.js";
1112import {
@@ -652,7 +653,52 @@ function summarizeSessionContext(messages: AgentMessage[]): {
652653653654export function normalizeMessagesForLlmBoundary(messages: AgentMessage[]): AgentMessage[] {
654655const normalized = stripToolResultDetails(normalizeAssistantReplayContent(messages));
655-return stripHistoricalRuntimeContextCustomMessages(normalized);
656+const withoutHistoricalInboundMetadata =
657+stripHistoricalInboundMetadataFromUserMessages(normalized);
658+return stripHistoricalRuntimeContextCustomMessages(withoutHistoricalInboundMetadata);
659+}
660+661+function stripHistoricalInboundMetadataFromUserMessages(messages: AgentMessage[]): AgentMessage[] {
662+let changed = false;
663+const nextMessages = messages.map((message) => {
664+if (message.role !== "user") {
665+return message;
666+}
667+const content = (message as { content?: unknown }).content;
668+if (typeof content === "string") {
669+const stripped = stripInboundMetadata(content);
670+if (stripped === content) {
671+return message;
672+}
673+changed = true;
674+return { ...message, content: stripped } as AgentMessage;
675+}
676+if (!Array.isArray(content)) {
677+return message;
678+}
679+let contentChanged = false;
680+const nextContent = content.map((block) => {
681+if (!block || typeof block !== "object") {
682+return block;
683+}
684+const textBlock = block as { type?: unknown; text?: unknown };
685+if (textBlock.type !== "text" || typeof textBlock.text !== "string") {
686+return block;
687+}
688+const stripped = stripInboundMetadata(textBlock.text);
689+if (stripped === textBlock.text) {
690+return block;
691+}
692+contentChanged = true;
693+return Object.assign({}, block, { text: stripped });
694+});
695+if (!contentChanged) {
696+return message;
697+}
698+changed = true;
699+return { ...message, content: nextContent } as AgentMessage;
700+});
701+return changed ? nextMessages : messages;
656702}
657703658704function cloneHookMessages(messages: AgentMessage[]): AgentMessage[] {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。