From 11f2e2afbe0ba1691bbaadcb4a3ceec0e009c9a5 Mon Sep 17 00:00:00 2001 From: Johnny Amancio Date: Mon, 27 Apr 2026 18:55:54 +0200 Subject: [PATCH] fix: default edit-tool diff to side-by-side (split) view Add an explicit initialDiffStyle field to the openDiffVirtual message flow so each caller declares the desired diff style up front while having `unified` diff as default to prevent regressions. --- .changeset/edit-tool-diff-split-view.md | 5 +++++ packages/kilo-vscode/src/DiffVirtualProvider.ts | 3 ++- packages/kilo-vscode/src/KiloProvider.ts | 8 +++++--- packages/kilo-vscode/tests/unit/databridge-shape.test.ts | 4 +++- .../webview-ui/diff-virtual/DiffVirtualApp.tsx | 3 ++- packages/kilo-vscode/webview-ui/src/App.tsx | 2 +- .../webview-ui/src/components/chat/PermissionDiff.tsx | 1 + .../webview-ui/src/types/messages/webview-messages.ts | 1 + 8 files changed, 20 insertions(+), 7 deletions(-) create mode 100644 .changeset/edit-tool-diff-split-view.md diff --git a/.changeset/edit-tool-diff-split-view.md b/.changeset/edit-tool-diff-split-view.md new file mode 100644 index 0000000000..cca8699d5f --- /dev/null +++ b/.changeset/edit-tool-diff-split-view.md @@ -0,0 +1,5 @@ +--- +"kilo-code": patch +--- + +Open edit-tool diffs in side-by-side (split) mode by default; permission-dock expand stays unified. diff --git a/packages/kilo-vscode/src/DiffVirtualProvider.ts b/packages/kilo-vscode/src/DiffVirtualProvider.ts index b585ee71fd..9b66a60a0f 100644 --- a/packages/kilo-vscode/src/DiffVirtualProvider.ts +++ b/packages/kilo-vscode/src/DiffVirtualProvider.ts @@ -8,6 +8,7 @@ export interface DiffVirtualFile { after: string additions: number deletions: number + initialDiffStyle: "unified" | "split" } /** @@ -83,7 +84,7 @@ export class DiffVirtualProvider implements vscode.Disposable { private pushData(): void { if (!this.pending) return - this.post({ type: "diffVirtual.data", diff: this.pending }) + this.post({ type: "diffVirtual.data", diff: this.pending, initialDiffStyle: this.pending.initialDiffStyle }) } private post(message: Record): void { diff --git a/packages/kilo-vscode/src/KiloProvider.ts b/packages/kilo-vscode/src/KiloProvider.ts index aa7166fc06..38fd59e385 100644 --- a/packages/kilo-vscode/src/KiloProvider.ts +++ b/packages/kilo-vscode/src/KiloProvider.ts @@ -729,7 +729,7 @@ export class KiloProvider implements vscode.WebviewViewProvider, TelemetryProper vscode.commands.executeCommand("kilo-code.new.marketplaceButtonClicked", this.projectDirectory) break case "openDiffVirtual": - this.openDiffVirtual(message.diff) + this.openDiffVirtual(message.diff, message.initialDiffStyle) break case "forkSession": handleForkSession(this.forkCtx, message.sessionId, message.messageId).catch((e) => @@ -1073,9 +1073,11 @@ export class KiloProvider implements vscode.WebviewViewProvider, TelemetryProper void vscode.env.openExternal(vscode.Uri.parse(url)) } - private openDiffVirtual(diff: unknown): void { + private openDiffVirtual(diff: unknown, initialDiffStyle?: unknown): void { if (!this.diffVirtualProvider || !diff) return - this.diffVirtualProvider.open(diff as import("./DiffVirtualProvider").DiffVirtualFile) + const d = diff as import("./DiffVirtualProvider").DiffVirtualFile + d.initialDiffStyle = initialDiffStyle === "split" ? "split" : "unified" + this.diffVirtualProvider.open(d) } /** diff --git a/packages/kilo-vscode/tests/unit/databridge-shape.test.ts b/packages/kilo-vscode/tests/unit/databridge-shape.test.ts index ef2e16365c..be286d3408 100644 --- a/packages/kilo-vscode/tests/unit/databridge-shape.test.ts +++ b/packages/kilo-vscode/tests/unit/databridge-shape.test.ts @@ -68,7 +68,9 @@ describe("DataBridge openDiff wiring (regression guard)", () => { } it("wires openDiff to the openDiffVirtual webview message", () => { - expect(openDiffBlock()).toMatch(/postMessage\(\{\s*type:\s*["']openDiffVirtual["']\s*,\s*diff\s*\}\)/) + expect(openDiffBlock()).toMatch( + /postMessage\(\{\s*type:\s*["']openDiffVirtual["']\s*,\s*diff\s*,\s*initialDiffStyle:\s*["']split["']\s*\}\)/, + ) expect(src).toContain("onOpenDiff={openDiff}") }) }) diff --git a/packages/kilo-vscode/webview-ui/diff-virtual/DiffVirtualApp.tsx b/packages/kilo-vscode/webview-ui/diff-virtual/DiffVirtualApp.tsx index 96841f7b7f..a3d288c34a 100644 --- a/packages/kilo-vscode/webview-ui/diff-virtual/DiffVirtualApp.tsx +++ b/packages/kilo-vscode/webview-ui/diff-virtual/DiffVirtualApp.tsx @@ -32,9 +32,10 @@ const DiffVirtualContent: Component = () => { const [style, setStyle] = createSignal("unified") const handler = (event: MessageEvent) => { - const msg = event.data as { type: string; diff?: DiffVirtualFile } + const msg = event.data as { type: string; diff?: DiffVirtualFile; initialDiffStyle?: DiffStyle } if (msg?.type === "diffVirtual.data" && msg.diff) { setDiff(msg.diff) + setStyle(msg.initialDiffStyle ?? "unified") } } diff --git a/packages/kilo-vscode/webview-ui/src/App.tsx b/packages/kilo-vscode/webview-ui/src/App.tsx index ae69fe3a8d..c774defdac 100644 --- a/packages/kilo-vscode/webview-ui/src/App.tsx +++ b/packages/kilo-vscode/webview-ui/src/App.tsx @@ -134,7 +134,7 @@ export const DataBridge: Component<{ children: any }> = (props) => { } const openDiff = (diff: { file: string; before: string; after: string; additions: number; deletions: number }) => { - vscode.postMessage({ type: "openDiffVirtual", diff }) + vscode.postMessage({ type: "openDiffVirtual", diff, initialDiffStyle: "split" }) } const openUrl = (url: string) => { diff --git a/packages/kilo-vscode/webview-ui/src/components/chat/PermissionDiff.tsx b/packages/kilo-vscode/webview-ui/src/components/chat/PermissionDiff.tsx index 1e2ce56c5c..4cb7448fa1 100644 --- a/packages/kilo-vscode/webview-ui/src/components/chat/PermissionDiff.tsx +++ b/packages/kilo-vscode/webview-ui/src/components/chat/PermissionDiff.tsx @@ -39,6 +39,7 @@ export const PermissionDiff: Component = (props) => { vscode.postMessage({ type: "openDiffVirtual", diff: { ...props.filediff, before, after }, + initialDiffStyle: "unified", }) } diff --git a/packages/kilo-vscode/webview-ui/src/types/messages/webview-messages.ts b/packages/kilo-vscode/webview-ui/src/types/messages/webview-messages.ts index deab71a043..de4a705b9e 100644 --- a/packages/kilo-vscode/webview-ui/src/types/messages/webview-messages.ts +++ b/packages/kilo-vscode/webview-ui/src/types/messages/webview-messages.ts @@ -731,6 +731,7 @@ export interface OpenChangesRequest { export interface OpenDiffVirtualRequest { type: "openDiffVirtual" diff: PermissionFileDiff + initialDiffStyle: "unified" | "split" } export interface RetryConnectionRequest {