From bf420e7df6c9c01e445bcd262fbc6b4480a9c312 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Fri, 12 Dec 2025 13:55:46 -0600 Subject: [PATCH] chore: cleanup --- packages/ui/src/components/message-part.tsx | 41 ++++++++++++--------- packages/ui/src/components/session-turn.tsx | 6 +-- packages/util/src/sanitize.ts | 28 -------------- 3 files changed, 25 insertions(+), 50 deletions(-) delete mode 100644 packages/util/src/sanitize.ts diff --git a/packages/ui/src/components/message-part.tsx b/packages/ui/src/components/message-part.tsx index 1a33d15c5..d69432caa 100644 --- a/packages/ui/src/components/message-part.tsx +++ b/packages/ui/src/components/message-part.tsx @@ -8,6 +8,7 @@ import { ToolPart, UserMessage, } from "@opencode-ai/sdk/v2" +import { useData } from "../context" import { useDiffComponent } from "../context/diff" import { BasicTool } from "./basic-tool" import { GenericTool } from "./basic-tool" @@ -16,26 +17,34 @@ import { Icon } from "./icon" import { Checkbox } from "./checkbox" import { DiffChanges } from "./diff-changes" import { Markdown } from "./markdown" -import { getDirectory, getFilename } from "@opencode-ai/util/path" -import { sanitizePart } from "@opencode-ai/util/sanitize" +import { getDirectory as _getDirectory, getFilename } from "@opencode-ai/util/path" export interface MessageProps { message: MessageType parts: PartType[] - sanitize?: RegExp } export interface MessagePartProps { part: PartType message: MessageType hideDetails?: boolean - sanitize?: RegExp } export type PartComponent = Component export const PART_MAPPING: Record = {} +function relativizeProjectPaths(text: string, directory?: string) { + if (!text) return "" + if (!directory) return text + return text.split(directory).join("") +} + +function getDirectory(path: string | undefined) { + const data = useData() + return relativizeProjectPaths(_getDirectory(path), data.directory) +} + export function registerPartComponent(type: string, component: PartComponent) { PART_MAPPING[type] = component } @@ -48,26 +57,20 @@ export function Message(props: MessageProps) { {(assistantMessage) => ( - + )} ) } -export function AssistantMessageDisplay(props: { message: AssistantMessage; parts: PartType[]; sanitize?: RegExp }) { +export function AssistantMessageDisplay(props: { message: AssistantMessage; parts: PartType[] }) { const filteredParts = createMemo(() => { return props.parts?.filter((x) => { return x.type !== "tool" || (x as ToolPart).tool !== "todoread" }) }) - return ( - {(part) => } - ) + return {(part) => } } export function UserMessageDisplay(props: { message: UserMessage; parts: PartType[] }) { @@ -82,10 +85,9 @@ export function UserMessageDisplay(props: { message: UserMessage; parts: PartTyp export function Part(props: MessagePartProps) { const component = createMemo(() => PART_MAPPING[props.part.type]) - const part = createMemo(() => sanitizePart(props.part, props.sanitize)) return ( - + ) } @@ -173,12 +175,15 @@ PART_MAPPING["tool"] = function ToolPartDisplay(props) { } PART_MAPPING["text"] = function TextPartDisplay(props) { + const data = useData() const part = props.part as TextPart - const sanitized = createMemo(() => (props.sanitize ? (sanitizePart(part, props.sanitize) as TextPart) : part)) + const content = createMemo(() => (part.text ?? "").trim()) + const displayText = createMemo(() => relativizeProjectPaths(content(), data.directory)) + return ( - +
- +
) diff --git a/packages/ui/src/components/session-turn.tsx b/packages/ui/src/components/session-turn.tsx index 0043719e0..d038ef142 100644 --- a/packages/ui/src/components/session-turn.tsx +++ b/packages/ui/src/components/session-turn.tsx @@ -33,7 +33,6 @@ export function SessionTurn( ) { const data = useData() const diffComponent = useDiffComponent() - const sanitizer = createMemo(() => (data.directory ? new RegExp(`${data.directory}/`, "g") : undefined)) const messages = createMemo(() => (props.sessionID ? (data.store.message[props.sessionID] ?? []) : [])) const userMessages = createMemo(() => messages() @@ -208,7 +207,7 @@ export function SessionTurn(
- +
{/* Response */}
@@ -252,11 +251,10 @@ export function SessionTurn( p?.id !== last()?.id)} - sanitize={sanitizer()} /> - + ) diff --git a/packages/util/src/sanitize.ts b/packages/util/src/sanitize.ts deleted file mode 100644 index 4bb762393..000000000 --- a/packages/util/src/sanitize.ts +++ /dev/null @@ -1,28 +0,0 @@ -import type { Part } from "@opencode-ai/sdk/v2/client" - -export const sanitize = (text: string | undefined, remove?: RegExp) => (remove ? text?.replace(remove, "") : text) ?? "" - -export const sanitizePart = (part: Part, remove: RegExp | undefined) => { - if (part.type === "text") { - part.text = sanitize(part.text, remove) - } else if (part.type === "reasoning") { - part.text = sanitize(part.text, remove) - } else if (part.type === "tool") { - if (part.state.status === "completed" || part.state.status === "error") { - for (const key in part.state.metadata) { - if (typeof part.state.metadata[key] === "string") { - part.state.metadata[key] = sanitize(part.state.metadata[key] as string, remove) - } - } - for (const key in part.state.input) { - if (typeof part.state.input[key] === "string") { - part.state.input[key] = sanitize(part.state.input[key] as string, remove) - } - } - if ("error" in part.state) { - part.state.error = sanitize(part.state.error as string, remove) - } - } - } - return part -}