|
@@ -7,6 +7,7 @@ import {
|
|
|
TextPart,
|
|
TextPart,
|
|
|
ToolPart,
|
|
ToolPart,
|
|
|
} from "@opencode-ai/sdk/v2/client"
|
|
} from "@opencode-ai/sdk/v2/client"
|
|
|
|
|
+import { type FileDiff } from "@opencode-ai/sdk/v2"
|
|
|
import { useData } from "../context"
|
|
import { useData } from "../context"
|
|
|
import { useDiffComponent } from "../context/diff"
|
|
import { useDiffComponent } from "../context/diff"
|
|
|
import { type UiI18nKey, type UiI18nParams, useI18n } from "../context/i18n"
|
|
import { type UiI18nKey, type UiI18nParams, useI18n } from "../context/i18n"
|
|
@@ -146,6 +147,7 @@ export function SessionTurn(
|
|
|
const emptyAssistant: AssistantMessage[] = []
|
|
const emptyAssistant: AssistantMessage[] = []
|
|
|
const emptyPermissions: PermissionRequest[] = []
|
|
const emptyPermissions: PermissionRequest[] = []
|
|
|
const emptyPermissionParts: { part: ToolPart; message: AssistantMessage }[] = []
|
|
const emptyPermissionParts: { part: ToolPart; message: AssistantMessage }[] = []
|
|
|
|
|
+ const emptyDiffs: FileDiff[] = []
|
|
|
const idle = { type: "idle" as const }
|
|
const idle = { type: "idle" as const }
|
|
|
|
|
|
|
|
const allMessages = createMemo(() => data.store.message[props.sessionID] ?? emptyMessages)
|
|
const allMessages = createMemo(() => data.store.message[props.sessionID] ?? emptyMessages)
|
|
@@ -350,7 +352,8 @@ export function SessionTurn(
|
|
|
|
|
|
|
|
const response = createMemo(() => lastTextPart()?.text)
|
|
const response = createMemo(() => lastTextPart()?.text)
|
|
|
const responsePartId = createMemo(() => lastTextPart()?.id)
|
|
const responsePartId = createMemo(() => lastTextPart()?.id)
|
|
|
- const hasDiffs = createMemo(() => (data.store.session_diff?.[props.sessionID]?.length ?? 0) > 0)
|
|
|
|
|
|
|
+ const messageDiffs = createMemo(() => message()?.summary?.diffs ?? emptyDiffs)
|
|
|
|
|
+ const hasDiffs = createMemo(() => messageDiffs().length > 0)
|
|
|
const hideResponsePart = createMemo(() => !working() && !!responsePartId())
|
|
const hideResponsePart = createMemo(() => !working() && !!responsePartId())
|
|
|
|
|
|
|
|
const [rootRef, setRootRef] = createSignal<HTMLDivElement | undefined>()
|
|
const [rootRef, setRootRef] = createSignal<HTMLDivElement | undefined>()
|
|
@@ -606,7 +609,7 @@ export function SessionTurn(
|
|
|
setStore("diffsOpen", value)
|
|
setStore("diffsOpen", value)
|
|
|
}}
|
|
}}
|
|
|
>
|
|
>
|
|
|
- <For each={(data.store.session_diff?.[props.sessionID] ?? []).slice(0, store.diffLimit)}>
|
|
|
|
|
|
|
+ <For each={messageDiffs().slice(0, store.diffLimit)}>
|
|
|
{(diff) => (
|
|
{(diff) => (
|
|
|
<Accordion.Item value={diff.file}>
|
|
<Accordion.Item value={diff.file}>
|
|
|
<StickyAccordionHeader>
|
|
<StickyAccordionHeader>
|
|
@@ -652,13 +655,13 @@ export function SessionTurn(
|
|
|
)}
|
|
)}
|
|
|
</For>
|
|
</For>
|
|
|
</Accordion>
|
|
</Accordion>
|
|
|
- <Show when={(data.store.session_diff?.[props.sessionID]?.length ?? 0) > store.diffLimit}>
|
|
|
|
|
|
|
+ <Show when={messageDiffs().length > store.diffLimit}>
|
|
|
<Button
|
|
<Button
|
|
|
data-slot="session-turn-accordion-more"
|
|
data-slot="session-turn-accordion-more"
|
|
|
variant="ghost"
|
|
variant="ghost"
|
|
|
size="small"
|
|
size="small"
|
|
|
onClick={() => {
|
|
onClick={() => {
|
|
|
- const total = data.store.session_diff?.[props.sessionID]?.length ?? 0
|
|
|
|
|
|
|
+ const total = messageDiffs().length
|
|
|
setStore("diffLimit", (limit) => {
|
|
setStore("diffLimit", (limit) => {
|
|
|
const next = limit + diffBatch
|
|
const next = limit + diffBatch
|
|
|
if (next > total) return total
|
|
if (next > total) return total
|
|
@@ -667,7 +670,7 @@ export function SessionTurn(
|
|
|
}}
|
|
}}
|
|
|
>
|
|
>
|
|
|
{i18n.t("ui.sessionTurn.diff.showMore", {
|
|
{i18n.t("ui.sessionTurn.diff.showMore", {
|
|
|
- count: (data.store.session_diff?.[props.sessionID]?.length ?? 0) - store.diffLimit,
|
|
|
|
|
|
|
+ count: messageDiffs().length - store.diffLimit,
|
|
|
})}
|
|
})}
|
|
|
</Button>
|
|
</Button>
|
|
|
</Show>
|
|
</Show>
|