diff --git a/packages/opencode/script/build.ts b/packages/opencode/script/build.ts index fd1e82ef2..0ca47442f 100755 --- a/packages/opencode/script/build.ts +++ b/packages/opencode/script/build.ts @@ -50,6 +50,7 @@ for (const [os, arch] of targets) { conditions: ["browser"], tsconfig: "./tsconfig.json", plugins: [solidPlugin], + sourcemap: true, compile: { target: `bun-${os}-${arch}` as any, outfile: `dist/${name}/bin/opencode`, diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx index 88c326d39..bf3c361a2 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -65,6 +65,11 @@ export function Session() { const session = createMemo(() => sync.session.get(route.sessionID)!) const messages = createMemo(() => sync.data.message[route.sessionID] ?? []) const permissions = createMemo(() => sync.data.permission[route.sessionID] ?? []) + + const pending = createMemo(() => { + return messages().findLast((x) => x.role === "assistant" && !x.time?.completed)?.id + }) + const dimensions = useTerminalDimensions() const [sidebar, setSidebar] = createSignal<"show" | "hide" | "auto">("auto") @@ -466,6 +471,7 @@ export function Session() { } message={message as UserMessage} parts={sync.data.part[message.id] ?? []} + pending={pending()} /> @@ -509,11 +515,19 @@ const MIME_BADGE: Record = { "application/x-directory": "dir", } -function UserMessage(props: { message: UserMessage; parts: Part[]; onMouseUp: () => void; index: number }) { +function UserMessage(props: { + message: UserMessage + parts: Part[] + onMouseUp: () => void + index: number + pending?: string +}) { const text = createMemo(() => props.parts.flatMap((x) => (x.type === "text" && !x.synthetic ? [x] : []))[0]) const files = createMemo(() => props.parts.flatMap((x) => (x.type === "file" ? [x] : []))) const sync = useSync() const [hover, setHover] = createSignal(false) + const queued = createMemo(() => props.pending && props.message.id > props.pending) + const color = createMemo(() => (queued() ? Theme.accent : Theme.secondary)) return ( @@ -533,7 +547,7 @@ function UserMessage(props: { message: UserMessage; parts: Part[]; onMouseUp: () marginTop={props.index === 0 ? 0 : 1} backgroundColor={hover() ? Theme.backgroundElement : Theme.backgroundPanel} customBorderChars={SplitBorder.customBorderChars} - borderColor={Theme.secondary} + borderColor={color()} flexShrink={0} > {text()?.text} @@ -558,7 +572,12 @@ function UserMessage(props: { message: UserMessage; parts: Part[]; onMouseUp: () {sync.data.config.username ?? "You"}{" "} - ({Locale.time(props.message.time.created)}) + ({Locale.time(props.message.time.created)})} + > + QUEUED +