summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-03-03 07:10:45 -0600
committerAdam <[email protected]>2026-03-03 07:10:52 -0600
commitfa45422bf9bfb79acfa5476e951af211d5f4283e (patch)
tree1a96171003400c6822c163f67f2932f923dbb229
parentda82d4035aeaf64fb945698a4cf17cd106988238 (diff)
downloadopencode-fa45422bf9bfb79acfa5476e951af211d5f4283e.tar.gz
opencode-fa45422bf9bfb79acfa5476e951af211d5f4283e.zip
chore: cleanup
-rw-r--r--packages/app/src/pages/session/message-timeline.tsx37
-rw-r--r--packages/ui/src/components/text-reveal.tsx5
2 files changed, 28 insertions, 14 deletions
diff --git a/packages/app/src/pages/session/message-timeline.tsx b/packages/app/src/pages/session/message-timeline.tsx
index fbf5ba291..a7f503d5a 100644
--- a/packages/app/src/pages/session/message-timeline.tsx
+++ b/packages/app/src/pages/session/message-timeline.tsx
@@ -230,21 +230,30 @@ export function MessageTimeline(props: {
(item): item is AssistantMessage => item.role === "assistant" && typeof item.time.completed !== "number",
),
)
- const activeMessageID = createMemo(() => {
- const parentID = pending()?.parentID
- if (!parentID) return
-
- const messages = sessionMessages()
- const result = Binary.search(messages, parentID, (message) => message.id)
- const message = result.found ? messages[result.index] : messages.find((item) => item.id === parentID)
- if (!message || message.role !== "user") return
- return message.id
- })
const sessionStatus = createMemo(() => {
const id = sessionID()
if (!id) return idle
return sync.data.session_status[id] ?? idle
})
+ const activeMessageID = createMemo(() => {
+ const parentID = pending()?.parentID
+ if (parentID) {
+ const messages = sessionMessages()
+ const result = Binary.search(messages, parentID, (message) => message.id)
+ const message = result.found ? messages[result.index] : messages.find((item) => item.id === parentID)
+ if (message && message.role === "user") return message.id
+ }
+
+ const status = sessionStatus()
+ if (status.type !== "idle") {
+ const messages = sessionMessages()
+ for (let i = messages.length - 1; i >= 0; i--) {
+ if (messages[i].role === "user") return messages[i].id
+ }
+ }
+
+ return undefined
+ })
const info = createMemo(() => {
const id = sessionID()
if (!id) return
@@ -685,9 +694,10 @@ export function MessageTimeline(props: {
{(messageID) => {
const active = createMemo(() => activeMessageID() === messageID)
const queued = createMemo(() => {
- const item = pending()
- if (!item || active()) return false
- return messageID > item.id
+ if (active()) return false
+ const activeID = activeMessageID()
+ if (activeID) return messageID > activeID
+ return false
})
const comments = createMemo(() => messageComments(sync.data.part[messageID] ?? []), [], {
equals: (a, b) => JSON.stringify(a) === JSON.stringify(b),
@@ -705,7 +715,6 @@ export function MessageTimeline(props: {
"min-w-0 w-full max-w-full": true,
"md:max-w-200 2xl:max-w-[1000px]": props.centered,
}}
- style={{ "content-visibility": "auto", "contain-intrinsic-size": "auto 500px" }}
>
<Show when={commentCount() > 0}>
<div class="w-full px-4 md:px-5 pb-2">
diff --git a/packages/ui/src/components/text-reveal.tsx b/packages/ui/src/components/text-reveal.tsx
index f01704365..c4fe1302f 100644
--- a/packages/ui/src/components/text-reveal.tsx
+++ b/packages/ui/src/components/text-reveal.tsx
@@ -57,6 +57,11 @@ export function TextReveal(props: {
() => props.text,
(next, prev) => {
if (next === prev) return
+ if (typeof next === "string" && typeof prev === "string" && next.startsWith(prev)) {
+ setCur(next)
+ widen(win())
+ return
+ }
setSwapping(true)
setOld(prev)
setCur(next)