Something went wrong. Try again.
opencode v2 mirror
Something went wrong. Try again.
4.1 kB · 119 lines
TSX
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120import type { SessionMessageAssistant, SessionMessageAssistantTool, SessionMessageUser,} from "@opencode/client/promise"import { Match, Switch, type ComponentProps } from "solid-js"import type { SessionUserActions, SessionUserAttachmentReference, SessionUserComment } from "../actions"import { AssistantReasoningContent, AssistantTextContent, CurrentUserMessageDisplay } from "./message-content"import { CurrentContextToolGroup, CurrentFileToolGroup, ToolDisplay } from "../tools/tool-renderer"import { currentToolError, currentToolInput, currentToolMetadata, currentToolOutput } from "./current-tool-state"
export type { SessionUserActions, SessionUserAttachmentReference, SessionUserComment } from "../actions"export { SessionShellMessage } from "../tools/tool-renderer"export { currentContentDefaultOpen } from "./current-tool-state"
export function SessionUserMessage(props: { sessionID: string message: SessionMessageUser displayText?: string comments?: SessionUserComment[] references?: SessionUserAttachmentReference[] historicalAgent: string historicalModel: SessionMessageAssistant["model"] actions?: SessionUserActions}) { return ( <CurrentUserMessageDisplay sessionID={props.sessionID} message={props.message} text={props.displayText ?? props.message.text} comments={props.comments} references={props.references} agent={props.historicalAgent} model={props.historicalModel} actions={props.actions} /> )}
export function SessionAssistantContent(props: { message: SessionMessageAssistant content: SessionMessageAssistant["content"][number] contentID: string showAssistantCopyPartID?: string | null turnDurationMs?: number | null defaultOpen?: boolean reasoningDefaultOpen?: boolean toolOpen?: boolean onToolOpenChange?: (open: boolean) => void onContentRendered?: () => void}) { return ( <Switch> <Match when={props.content.type === "text" ? props.content : undefined}> {(content) => ( <AssistantTextContent id={props.contentID} text={content().text} message={props.message} showCopy={props.showAssistantCopyPartID === props.contentID} turnDurationMs={props.turnDurationMs} /> )} </Match> <Match when={props.content.type === "reasoning" ? props.content : undefined}> {(content) => ( <AssistantReasoningContent id={props.contentID} content={content()} streaming={false} defaultOpen={props.reasoningDefaultOpen} open={props.toolOpen} onOpenChange={props.onToolOpenChange} onContentRendered={props.onContentRendered} /> )} </Match> <Match when={props.content.type === "tool" ? props.content : undefined}> {(tool) => ( <ToolDisplay id={props.contentID} tool={tool().name} input={currentToolInput(tool())} metadata={currentToolMetadata(tool())} output={currentToolOutput(tool())} status={tool().state.status} error={currentToolError(tool())} defaultOpen={props.defaultOpen} open={props.toolOpen} onOpenChange={props.onToolOpenChange} deferContent virtualizeDiff={false} onContentRendered={props.onContentRendered} /> )} </Match> </Switch> )}
export function SessionContextToolGroup(props: ComponentProps<typeof CurrentContextToolGroup>) { return <CurrentContextToolGroup {...props} />}
export function SessionFileToolGroup(props: { tools: SessionMessageAssistantTool[] fileOpen: (path: string) => boolean | undefined onFileOpenChange: (path: string, open: boolean) => void onSizeChange?: () => void}) { return ( <CurrentFileToolGroup tools={props.tools} fileOpen={props.fileOpen} onFileOpenChange={props.onFileOpenChange} onSizeChange={props.onSizeChange} /> )}