summaryrefslogtreecommitdiffhomepage
path: root/packages/ui/src/components/message-part.tsx
diff options
context:
space:
mode:
authorAdam <[email protected]>2025-12-18 11:16:18 -0600
committerAdam <[email protected]>2025-12-18 11:16:33 -0600
commitc868a4088d374534a5e33795b8cc419c75f3654e (patch)
tree57348cb41e19020f1b0a0c5e94534280c901629c /packages/ui/src/components/message-part.tsx
parent83d8a88c90001637d68eb2cacb380bd5d3ede7a0 (diff)
downloadopencode-c868a4088d374534a5e33795b8cc419c75f3654e.tar.gz
opencode-c868a4088d374534a5e33795b8cc419c75f3654e.zip
fix(desktop): rendering shell mode messages
Diffstat (limited to 'packages/ui/src/components/message-part.tsx')
-rw-r--r--packages/ui/src/components/message-part.tsx26
1 files changed, 24 insertions, 2 deletions
diff --git a/packages/ui/src/components/message-part.tsx b/packages/ui/src/components/message-part.tsx
index 186b52cf3..ef85dd9ce 100644
--- a/packages/ui/src/components/message-part.tsx
+++ b/packages/ui/src/components/message-part.tsx
@@ -69,6 +69,7 @@ export interface MessagePartProps {
part: PartType
message: MessageType
hideDetails?: boolean
+ defaultOpen?: boolean
}
export type PartComponent = Component<MessagePartProps>
@@ -208,7 +209,13 @@ export function Part(props: MessagePartProps) {
const component = createMemo(() => PART_MAPPING[props.part.type])
return (
<Show when={component()}>
- <Dynamic component={component()} part={props.part} message={props.message} hideDetails={props.hideDetails} />
+ <Dynamic
+ component={component()}
+ part={props.part}
+ message={props.message}
+ hideDetails={props.hideDetails}
+ defaultOpen={props.defaultOpen}
+ />
</Show>
)
}
@@ -219,6 +226,7 @@ export interface ToolProps {
tool: string
output?: string
hideDetails?: boolean
+ defaultOpen?: boolean
}
export type ToolComponent = Component<ToolProps>
@@ -286,6 +294,7 @@ PART_MAPPING["tool"] = function ToolPartDisplay(props) {
metadata={metadata}
output={part.state.status === "completed" ? part.state.output : undefined}
hideDetails={props.hideDetails}
+ defaultOpen={props.defaultOpen}
/>
</Match>
</Switch>
@@ -326,6 +335,7 @@ ToolRegistry.register({
render(props) {
return (
<BasicTool
+ {...props}
icon="glasses"
trigger={{
title: "Read",
@@ -340,7 +350,11 @@ ToolRegistry.register({
name: "list",
render(props) {
return (
- <BasicTool icon="bullet-list" trigger={{ title: "List", subtitle: getDirectory(props.input.path || "/") }}>
+ <BasicTool
+ {...props}
+ icon="bullet-list"
+ trigger={{ title: "List", subtitle: getDirectory(props.input.path || "/") }}
+ >
<Show when={props.output}>
{(output) => (
<div data-component="tool-output" data-scrollable>
@@ -358,6 +372,7 @@ ToolRegistry.register({
render(props) {
return (
<BasicTool
+ {...props}
icon="magnifying-glass-menu"
trigger={{
title: "Glob",
@@ -385,6 +400,7 @@ ToolRegistry.register({
if (props.input.include) args.push("include=" + props.input.include)
return (
<BasicTool
+ {...props}
icon="magnifying-glass-menu"
trigger={{
title: "Grep",
@@ -409,6 +425,7 @@ ToolRegistry.register({
render(props) {
return (
<BasicTool
+ {...props}
icon="window-cursor"
trigger={{
title: "Webfetch",
@@ -438,6 +455,7 @@ ToolRegistry.register({
render(props) {
return (
<BasicTool
+ {...props}
icon="task"
trigger={{
title: `${props.input.subagent_type || props.tool} Agent`,
@@ -462,6 +480,7 @@ ToolRegistry.register({
render(props) {
return (
<BasicTool
+ {...props}
icon="console"
trigger={{
title: "Shell",
@@ -485,6 +504,7 @@ ToolRegistry.register({
const diagnostics = createMemo(() => getDiagnostics(props.metadata.diagnostics, props.input.filePath))
return (
<BasicTool
+ {...props}
defaultOpen
icon="code-lines"
trigger={
@@ -534,6 +554,7 @@ ToolRegistry.register({
const diagnostics = createMemo(() => getDiagnostics(props.metadata.diagnostics, props.input.filePath))
return (
<BasicTool
+ {...props}
defaultOpen
icon="code-lines"
trigger={
@@ -575,6 +596,7 @@ ToolRegistry.register({
render(props) {
return (
<BasicTool
+ {...props}
defaultOpen
icon="checklist"
trigger={{