TUI: strip only leading inbound metadata (#22461)

This commit is contained in:
Vincent Koc
2026-02-21 01:13:02 -05:00
committed by GitHub
parent 59167f86ca
commit 45fff13b1d
3 changed files with 49 additions and 4 deletions

View File

@@ -87,3 +87,49 @@ export function stripInboundMetadata(text: string): string {
return result.join("\n").replace(/^\n+/, "");
}
export function stripLeadingInboundMetadata(text: string): string {
if (!text || !SENTINEL_FAST_RE.test(text)) {
return text;
}
const lines = text.split("\n");
let index = 0;
while (index < lines.length && lines[index] === "") {
index++;
}
if (index >= lines.length) {
return "";
}
if (!INBOUND_META_SENTINELS.some((s) => lines[index].startsWith(s))) {
return text;
}
while (index < lines.length) {
const line = lines[index];
if (!INBOUND_META_SENTINELS.some((s) => line.startsWith(s))) {
break;
}
index++;
if (index < lines.length && lines[index].trim() === "```json") {
index++;
while (index < lines.length && lines[index].trim() !== "```") {
index++;
}
if (index < lines.length && lines[index].trim() === "```") {
index++;
}
} else {
return text;
}
while (index < lines.length && lines[index].trim() === "") {
index++;
}
}
return lines.slice(index).join("\n");
}

View File

@@ -1,5 +1,5 @@
import { formatRawAssistantErrorForUi } from "../agents/pi-embedded-helpers.js";
import { stripInboundMetadata } from "../auto-reply/reply/strip-inbound-meta.js";
import { stripLeadingInboundMetadata } from "../auto-reply/reply/strip-inbound-meta.js";
import { stripAnsi } from "../terminal/ansi.js";
import { formatTokenCount } from "../utils/usage-format.js";
@@ -275,7 +275,7 @@ export function extractTextFromMessage(
const text = extractTextBlocks(record.content, opts);
if (text) {
if (record.role === "user") {
return stripInboundMetadata(text);
return stripLeadingInboundMetadata(text);
}
return text;
}

View File

@@ -1,5 +1,4 @@
import type { TUI } from "@mariozechner/pi-tui";
import { stripInboundMetadata } from "../auto-reply/reply/strip-inbound-meta.js";
import type { SessionsPatchResult } from "../gateway/protocol/index.js";
import {
normalizeAgentId,
@@ -327,7 +326,7 @@ export function createSessionActions(context: SessionActionContext) {
if (message.role === "user") {
const text = extractTextFromMessage(message);
if (text) {
chatLog.addUser(stripInboundMetadata(text));
chatLog.addUser(text);
}
continue;
}