diff options
| author | Dax Raad <[email protected]> | 2025-05-31 18:42:43 -0400 |
|---|---|---|
| committer | Dax Raad <[email protected]> | 2025-05-31 18:42:43 -0400 |
| commit | e97ed735d9b21a71db027d483a17d02c509a6090 (patch) | |
| tree | 90e023bf2bd43cd06d22a94bd16d2c84ac8b840c /packages/web/src | |
| parent | 6d21525e717122f106c87821fc2aab9f7d2c3fe5 (diff) | |
| download | opencode-e97ed735d9b21a71db027d483a17d02c509a6090.tar.gz opencode-e97ed735d9b21a71db027d483a17d02c509a6090.zip | |
sync
Diffstat (limited to 'packages/web/src')
| -rw-r--r-- | packages/web/src/components/DiffView.tsx | 24 | ||||
| -rw-r--r-- | packages/web/src/components/Share.tsx | 10 |
2 files changed, 15 insertions, 19 deletions
diff --git a/packages/web/src/components/DiffView.tsx b/packages/web/src/components/DiffView.tsx index 4e864e06b..6f89d6a97 100644 --- a/packages/web/src/components/DiffView.tsx +++ b/packages/web/src/components/DiffView.tsx @@ -1,5 +1,5 @@ -import { type Component, createSignal, onMount } from "solid-js" -import { diffLines } from "diff" +import { type Component, createMemo, createSignal, onMount } from "solid-js" +import { diffLines, type ChangeObject } from "diff" import CodeBlock from "./CodeBlock" import styles from "./diffview.module.css" @@ -10,33 +10,29 @@ type DiffRow = { } interface DiffViewProps { - oldCode: string - newCode: string + changes: ChangeObject<string>[] lang?: string class?: string } const DiffView: Component<DiffViewProps> = (props) => { - const [rows, setRows] = createSignal<DiffRow[]>([]) - - onMount(() => { - const chunks = diffLines(props.oldCode, props.newCode) + const rows = createMemo(() => { const diffRows: DiffRow[] = [] - for (const chunk of chunks) { - const lines = chunk.value.split(/\r?\n/) + for (const item of props.changes) { + const lines = item.value.split(/\r?\n/) if (lines.at(-1) === "") lines.pop() for (const line of lines) { diffRows.push({ - left: chunk.removed ? line : chunk.added ? "" : line, - right: chunk.added ? line : chunk.removed ? "" : line, - type: chunk.added ? "added" : chunk.removed ? "removed" : "unchanged", + left: item.removed ? line : item.added ? "" : line, + right: item.added ? line : item.removed ? "" : line, + type: item.added ? "added" : item.removed ? "removed" : "unchanged", }) } } - setRows(diffRows) + return diffRows }) return ( diff --git a/packages/web/src/components/Share.tsx b/packages/web/src/components/Share.tsx index f4b89e1f5..6d418b82d 100644 --- a/packages/web/src/components/Share.tsx +++ b/packages/web/src/components/Share.tsx @@ -53,7 +53,7 @@ type SessionMessage = UIMessage<{ tool: Record< string, { - properties: Record<string, any> + [key: string]: any time: { start: number end: number @@ -596,11 +596,12 @@ export default function Share(props: { api: string }) { when={ msg.role === "assistant" && part.type === "tool-invocation" && - part.toolInvocation.toolName === "edit" && + part.toolInvocation.toolName === "opencode_edit" && part } > {(part) => { + const metadata = createMemo(() => msg.metadata?.tool[part().toolInvocation.toolCallId]) const args = part().toolInvocation.args const filePath = args.filePath return ( @@ -622,8 +623,7 @@ export default function Share(props: { api: string }) { <div data-part-tool-edit> <DiffView class={styles["code-block"]} - oldCode={args.oldString} - newCode={args.newString} + changes={metadata()?.changes || []} lang={getFileType(filePath)} /> </div> @@ -680,7 +680,7 @@ export default function Share(props: { api: string }) { <Match when={ part().toolInvocation.state === - "result" && + "result" && part().toolInvocation.result } > |
