summaryrefslogtreecommitdiffhomepage
path: root/packages/web/src/components/share/part.tsx
diff options
context:
space:
mode:
authoradamdotdevin <[email protected]>2025-08-10 19:24:16 -0500
committeradamdotdevin <[email protected]>2025-08-10 19:25:03 -0500
commitb8d2aebf09313d451cec873b3d0807b818015b32 (patch)
tree05f4edc9e4b15b6754e555a7b4eb03b46c997a58 /packages/web/src/components/share/part.tsx
parent20e818ad05b385b51a29d265f0731155562e88c2 (diff)
downloadopencode-b8d2aebf09313d451cec873b3d0807b818015b32.tar.gz
opencode-b8d2aebf09313d451cec873b3d0807b818015b32.zip
feat: thinking blocks rendered in tui and share page
Diffstat (limited to 'packages/web/src/components/share/part.tsx')
-rw-r--r--packages/web/src/components/share/part.tsx12
1 files changed, 11 insertions, 1 deletions
diff --git a/packages/web/src/components/share/part.tsx b/packages/web/src/components/share/part.tsx
index 772a80dc6..30f927fc4 100644
--- a/packages/web/src/components/share/part.tsx
+++ b/packages/web/src/components/share/part.tsx
@@ -19,7 +19,7 @@ import {
IconMagnifyingGlass,
IconDocumentMagnifyingGlass,
} from "../icons"
-import { IconMeta, IconRobot, IconOpenAI, IconGemini, IconAnthropic } from "../icons/custom"
+import { IconMeta, IconRobot, IconOpenAI, IconGemini, IconAnthropic, IconBrain } from "../icons/custom"
import { ContentCode } from "./content-code"
import { ContentDiff } from "./content-diff"
import { ContentText } from "./content-text"
@@ -83,6 +83,9 @@ export function Part(props: PartProps) {
>
{(model) => <ProviderIcon model={model()} size={18} />}
</Match>
+ <Match when={props.part.type === "reasoning" && props.message.role === "assistant"}>
+ <IconBrain width={18} height={18} />
+ </Match>
<Match when={props.part.type === "tool" && props.part.tool === "todowrite"}>
<IconQueueList width={18} height={18} />
</Match>
@@ -157,6 +160,13 @@ export function Part(props: PartProps) {
)}
</div>
)}
+ {props.message.role === "assistant" && props.part.type === "reasoning" && (
+ <div data-component="assistant-reasoning">
+ <div data-component="assistant-reasoning-markdown">
+ <ContentMarkdown expand={props.last} text={props.part.text || "Thinking..."} />
+ </div>
+ </div>
+ )}
{props.message.role === "user" && props.part.type === "file" && (
<div data-component="attachment">
<div data-slot="copy">Attachment</div>