fix(ui): better handle patch file support when rendering patch/edit tools (#26828)

This commit is contained in:
Brendan Allan
2026-05-11 17:21:59 +08:00
committed by GitHub
parent 2d0d3d596e
commit c933504d9c
2 changed files with 46 additions and 18 deletions
+33 -13
View File
@@ -264,6 +264,7 @@ function getDirectory(path: string | undefined) {
}
import type { IconProps } from "./icon"
import { normalize } from "./session-diff"
export type ToolInfo = {
icon: IconProps["name"]
@@ -1878,6 +1879,31 @@ ToolRegistry.register({
const path = createMemo(() => props.metadata?.filediff?.file || props.input.filePath || "")
const filename = () => getFilename(props.input.filePath ?? "")
const pending = () => props.status === "pending" || props.status === "running"
const fileCompProps = createMemo(() => {
try {
if (props.metadata?.filediff) {
const diff = normalize({
...props.metadata?.filediff,
status: "modified",
})
const fileDiff = diff.fileDiff
if (fileDiff) return { fileDiff, hunkSeparators: fileDiff.isPartial ? "simple" : "line-info-basic" }
}
} catch {}
return {
before: {
name: props.metadata?.filediff?.file || props.input.filePath,
contents: props.metadata?.filediff?.before || props.input.oldString || "",
},
after: {
name: props.metadata?.filediff?.file || props.input.filePath,
contents: props.metadata?.filediff?.after || props.input.newString || "",
},
}
})
return (
<div data-component="edit-tool">
<BasicTool
@@ -1919,18 +1945,7 @@ ToolRegistry.register({
}
>
<div data-component="edit-content">
<Dynamic
component={fileComponent}
mode="diff"
before={{
name: props.metadata?.filediff?.file || props.input.filePath,
contents: props.metadata?.filediff?.before || props.input.oldString || "",
}}
after={{
name: props.metadata?.filediff?.file || props.input.filePath,
contents: props.metadata?.filediff?.after || props.input.newString || "",
}}
/>
<Dynamic component={fileComponent} mode="diff" {...fileCompProps()} />
</div>
</ToolFileAccordion>
</Show>
@@ -2111,7 +2126,12 @@ ToolRegistry.register({
<Accordion.Content>
<Show when={visible()}>
<div data-component="apply-patch-file-diff">
<Dynamic component={fileComponent} mode="diff" fileDiff={file.view.fileDiff} />
<Dynamic
component={fileComponent}
mode="diff"
fileDiff={file.view.fileDiff}
hunkSeparators={file.view.fileDiff.isPartial ? "simple" : "line-info-basic"}
/>
</div>
</Show>
</Accordion.Content>