diff options
| author | Adam <[email protected]> | 2026-03-12 15:17:36 -0500 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-03-12 20:17:36 +0000 |
| commit | 42a5af6c8f6998277cf69270ad12e2a64edac5d3 (patch) | |
| tree | eca5dff51dc694cce1e783425fc11b4bea1e6a12 /packages/ui/src | |
| parent | f0542fae7a917fabb9e943c3112a3d0b4b03302d (diff) | |
| download | opencode-42a5af6c8f6998277cf69270ad12e2a64edac5d3.tar.gz opencode-42a5af6c8f6998277cf69270ad12e2a64edac5d3.zip | |
feat(app): follow-up behavior (#17233)
Diffstat (limited to 'packages/ui/src')
| -rw-r--r-- | packages/ui/src/components/message-part.css | 17 | ||||
| -rw-r--r-- | packages/ui/src/components/message-part.tsx | 11 | ||||
| -rw-r--r-- | packages/ui/src/components/session-turn.tsx | 22 | ||||
| -rw-r--r-- | packages/ui/src/i18n/ar.ts | 2 | ||||
| -rw-r--r-- | packages/ui/src/i18n/br.ts | 2 | ||||
| -rw-r--r-- | packages/ui/src/i18n/bs.ts | 2 | ||||
| -rw-r--r-- | packages/ui/src/i18n/da.ts | 2 | ||||
| -rw-r--r-- | packages/ui/src/i18n/de.ts | 2 | ||||
| -rw-r--r-- | packages/ui/src/i18n/es.ts | 2 | ||||
| -rw-r--r-- | packages/ui/src/i18n/fr.ts | 2 | ||||
| -rw-r--r-- | packages/ui/src/i18n/ja.ts | 2 | ||||
| -rw-r--r-- | packages/ui/src/i18n/ko.ts | 2 | ||||
| -rw-r--r-- | packages/ui/src/i18n/no.ts | 4 | ||||
| -rw-r--r-- | packages/ui/src/i18n/pl.ts | 2 | ||||
| -rw-r--r-- | packages/ui/src/i18n/ru.ts | 2 | ||||
| -rw-r--r-- | packages/ui/src/i18n/th.ts | 2 | ||||
| -rw-r--r-- | packages/ui/src/i18n/tr.ts | 12 | ||||
| -rw-r--r-- | packages/ui/src/i18n/zh.ts | 2 | ||||
| -rw-r--r-- | packages/ui/src/i18n/zht.ts | 2 |
19 files changed, 46 insertions, 48 deletions
diff --git a/packages/ui/src/components/message-part.css b/packages/ui/src/components/message-part.css index 1052a591c..3648d5079 100644 --- a/packages/ui/src/components/message-part.css +++ b/packages/ui/src/components/message-part.css @@ -54,10 +54,6 @@ border-color: var(--border-strong-base); } - &[data-queued] { - opacity: 0.6; - } - &[data-type="image"] { width: 48px; height: 48px; @@ -111,11 +107,6 @@ border: 1px solid var(--border-weak-base); padding: 8px 12px; border-radius: 6px; - transition: opacity 0.3s ease; - - &[data-queued] { - opacity: 0.6; - } [data-highlight="file"] { color: var(--syntax-property); @@ -128,14 +119,6 @@ max-width: 100%; } - [data-slot="user-message-queued-indicator"] { - margin-top: 6px; - margin-right: 2px; - font-size: var(--font-size-small); - color: var(--text-weak); - user-select: none; - } - [data-slot="user-message-copy-wrapper"] { min-height: 24px; margin-top: 4px; diff --git a/packages/ui/src/components/message-part.tsx b/packages/ui/src/components/message-part.tsx index 1a50ed48c..5a0f022ea 100644 --- a/packages/ui/src/components/message-part.tsx +++ b/packages/ui/src/components/message-part.tsx @@ -132,7 +132,6 @@ export interface MessageProps { actions?: UserActions showAssistantCopyPartID?: string | null interrupted?: boolean - queued?: boolean showReasoningSummaries?: boolean } @@ -686,7 +685,6 @@ export function Message(props: MessageProps) { parts={props.parts} actions={props.actions} interrupted={props.interrupted} - queued={props.queued} /> )} </Match> @@ -883,7 +881,6 @@ export function UserMessageDisplay(props: { parts: PartType[] actions?: UserActions interrupted?: boolean - queued?: boolean }) { const data = useData() const dialog = useDialog() @@ -981,7 +978,6 @@ export function UserMessageDisplay(props: { <div data-slot="user-message-attachment" data-type={file.mime.startsWith("image/") ? "image" : "file"} - data-queued={props.queued ? "" : undefined} onClick={() => { if (file.mime.startsWith("image/") && file.url) { openImagePreview(file.url, file.filename) @@ -1010,14 +1006,9 @@ export function UserMessageDisplay(props: { <Show when={text()}> <> <div data-slot="user-message-body"> - <div data-slot="user-message-text" data-queued={props.queued ? "" : undefined}> + <div data-slot="user-message-text"> <HighlightedText text={text()} references={inlineFiles()} agents={agents()} /> </div> - <Show when={props.queued}> - <div data-slot="user-message-queued-indicator"> - <TextShimmer text={i18n.t("ui.message.queued")} /> - </div> - </Show> </div> <div data-slot="user-message-copy-wrapper" data-interrupted={props.interrupted ? "" : undefined}> <Show when={metaHead() || metaTail()}> diff --git a/packages/ui/src/components/session-turn.tsx b/packages/ui/src/components/session-turn.tsx index fda02cab4..8783e8957 100644 --- a/packages/ui/src/components/session-turn.tsx +++ b/packages/ui/src/components/session-turn.tsx @@ -146,7 +146,6 @@ export function SessionTurn( shellToolDefaultOpen?: boolean editToolDefaultOpen?: boolean active?: boolean - queued?: boolean status?: SessionStatus onUserInteracted?: () => void classes?: { @@ -193,7 +192,7 @@ export function SessionTurn( }) const pending = createMemo(() => { - if (typeof props.active === "boolean" && typeof props.queued === "boolean") return + if (typeof props.active === "boolean") return const messages = allMessages() ?? emptyMessages return messages.findLast( (item): item is AssistantMessage => item.role === "assistant" && typeof item.time.completed !== "number", @@ -218,16 +217,6 @@ export function SessionTurn( return parent.id === msg.id }) - const queued = createMemo(() => { - if (typeof props.queued === "boolean") return props.queued - const id = message()?.id - if (!id) return false - if (!pendingUser()) return false - const item = pending() - if (!item) return false - return id > item.id - }) - const parts = createMemo(() => { const msg = message() if (!msg) return emptyParts @@ -367,7 +356,6 @@ export function SessionTurn( ) const showThinking = createMemo(() => { if (!working() || !!error()) return false - if (queued()) return false if (status().type === "retry") return false if (showReasoningSummaries()) return assistantVisible() === 0 return true @@ -396,13 +384,7 @@ export function SessionTurn( class={props.classes?.container} > <div data-slot="session-turn-message-content" aria-live="off"> - <Message - message={message()!} - parts={parts()} - actions={props.actions} - interrupted={interrupted()} - queued={queued()} - /> + <Message message={message()!} parts={parts()} actions={props.actions} interrupted={interrupted()} /> </div> <Show when={compaction()}> <div data-slot="session-turn-compaction"> diff --git a/packages/ui/src/i18n/ar.ts b/packages/ui/src/i18n/ar.ts index d75918aa7..475496df0 100644 --- a/packages/ui/src/i18n/ar.ts +++ b/packages/ui/src/i18n/ar.ts @@ -126,6 +126,8 @@ export const dict = { "ui.message.collapse": "طي الرسالة", "ui.message.copy": "نسخ", "ui.message.copyMessage": "نسخ الرسالة", + "ui.message.forkMessage": "تشعب إلى جلسة جديدة", + "ui.message.revertMessage": "إعادة التعيين إلى هذه النقطة", "ui.message.copyResponse": "نسخ الرد", "ui.message.copied": "تم النسخ!", "ui.message.interrupted": "تمت المقاطعة", diff --git a/packages/ui/src/i18n/br.ts b/packages/ui/src/i18n/br.ts index 085184fcc..8e68d0fef 100644 --- a/packages/ui/src/i18n/br.ts +++ b/packages/ui/src/i18n/br.ts @@ -126,6 +126,8 @@ export const dict = { "ui.message.collapse": "Recolher mensagem", "ui.message.copy": "Copiar", "ui.message.copyMessage": "Copiar mensagem", + "ui.message.forkMessage": "Bifurcar para nova sessão", + "ui.message.revertMessage": "Redefinir para este ponto", "ui.message.copyResponse": "Copiar resposta", "ui.message.copied": "Copiado!", "ui.message.interrupted": "Interrompido", diff --git a/packages/ui/src/i18n/bs.ts b/packages/ui/src/i18n/bs.ts index 28a292989..60fa9c789 100644 --- a/packages/ui/src/i18n/bs.ts +++ b/packages/ui/src/i18n/bs.ts @@ -130,6 +130,8 @@ export const dict = { "ui.message.collapse": "Sažmi poruku", "ui.message.copy": "Kopiraj", "ui.message.copyMessage": "Kopiraj poruku", + "ui.message.forkMessage": "Forkaj u novu sesiju", + "ui.message.revertMessage": "Resetuj na ovu tačku", "ui.message.copyResponse": "Kopiraj odgovor", "ui.message.copied": "Kopirano!", "ui.message.interrupted": "Prekinuto", diff --git a/packages/ui/src/i18n/da.ts b/packages/ui/src/i18n/da.ts index 30ff4639a..74e06b99d 100644 --- a/packages/ui/src/i18n/da.ts +++ b/packages/ui/src/i18n/da.ts @@ -125,6 +125,8 @@ export const dict = { "ui.message.collapse": "Skjul besked", "ui.message.copy": "Kopier", "ui.message.copyMessage": "Kopier besked", + "ui.message.forkMessage": "Forgren til ny session", + "ui.message.revertMessage": "Nulstil til dette punkt", "ui.message.copyResponse": "Kopier svar", "ui.message.copied": "Kopieret!", "ui.message.interrupted": "Afbrudt", diff --git a/packages/ui/src/i18n/de.ts b/packages/ui/src/i18n/de.ts index bbfcd0f68..296417597 100644 --- a/packages/ui/src/i18n/de.ts +++ b/packages/ui/src/i18n/de.ts @@ -131,6 +131,8 @@ export const dict = { "ui.message.collapse": "Nachricht reduzieren", "ui.message.copy": "Kopieren", "ui.message.copyMessage": "Nachricht kopieren", + "ui.message.forkMessage": "In neue Sitzung abzweigen", + "ui.message.revertMessage": "Auf diesen Punkt zurücksetzen", "ui.message.copyResponse": "Antwort kopieren", "ui.message.copied": "Kopiert!", "ui.message.interrupted": "Unterbrochen", diff --git a/packages/ui/src/i18n/es.ts b/packages/ui/src/i18n/es.ts index 52f1506c0..6496c05db 100644 --- a/packages/ui/src/i18n/es.ts +++ b/packages/ui/src/i18n/es.ts @@ -126,6 +126,8 @@ export const dict = { "ui.message.collapse": "Colapsar mensaje", "ui.message.copy": "Copiar", "ui.message.copyMessage": "Copiar mensaje", + "ui.message.forkMessage": "Bifurcar a nueva sesión", + "ui.message.revertMessage": "Restablecer a este punto", "ui.message.copyResponse": "Copiar respuesta", "ui.message.copied": "¡Copiado!", "ui.message.interrupted": "Interrumpido", diff --git a/packages/ui/src/i18n/fr.ts b/packages/ui/src/i18n/fr.ts index f42c13882..e278d0693 100644 --- a/packages/ui/src/i18n/fr.ts +++ b/packages/ui/src/i18n/fr.ts @@ -126,6 +126,8 @@ export const dict = { "ui.message.collapse": "Réduire le message", "ui.message.copy": "Copier", "ui.message.copyMessage": "Copier le message", + "ui.message.forkMessage": "Bifurquer vers une nouvelle session", + "ui.message.revertMessage": "Réinitialiser à ce point", "ui.message.copyResponse": "Copier la réponse", "ui.message.copied": "Copié !", "ui.message.interrupted": "Interrompu", diff --git a/packages/ui/src/i18n/ja.ts b/packages/ui/src/i18n/ja.ts index 0c9e4da2b..b133a3282 100644 --- a/packages/ui/src/i18n/ja.ts +++ b/packages/ui/src/i18n/ja.ts @@ -125,6 +125,8 @@ export const dict = { "ui.message.collapse": "メッセージを折りたたむ", "ui.message.copy": "コピー", "ui.message.copyMessage": "メッセージをコピー", + "ui.message.forkMessage": "新しいセッションにフォーク", + "ui.message.revertMessage": "この時点までリセット", "ui.message.copyResponse": "応答をコピー", "ui.message.copied": "コピーしました!", "ui.message.interrupted": "中断", diff --git a/packages/ui/src/i18n/ko.ts b/packages/ui/src/i18n/ko.ts index 74c2d4ec8..3e7af7140 100644 --- a/packages/ui/src/i18n/ko.ts +++ b/packages/ui/src/i18n/ko.ts @@ -126,6 +126,8 @@ export const dict = { "ui.message.collapse": "메시지 접기", "ui.message.copy": "복사", "ui.message.copyMessage": "메시지 복사", + "ui.message.forkMessage": "새 세션으로 분기", + "ui.message.revertMessage": "이 시점으로 초기화", "ui.message.copyResponse": "응답 복사", "ui.message.copied": "복사됨!", "ui.message.interrupted": "중단됨", diff --git a/packages/ui/src/i18n/no.ts b/packages/ui/src/i18n/no.ts index 489f218ca..0c9fc82e5 100644 --- a/packages/ui/src/i18n/no.ts +++ b/packages/ui/src/i18n/no.ts @@ -105,7 +105,7 @@ export const dict: Record<Keys, string> = { "ui.tool.todos.read": "Les gjøremål", "ui.tool.questions": "Spørsmål", "ui.tool.agent": "{{type}}-agent", - "ui.tool.agent.default": "agent", + "ui.tool.agent.default": "Agent", "ui.common.file.one": "fil", "ui.common.file.other": "filer", @@ -129,6 +129,8 @@ export const dict: Record<Keys, string> = { "ui.message.collapse": "Skjul melding", "ui.message.copy": "Kopier", "ui.message.copyMessage": "Kopier melding", + "ui.message.forkMessage": "Forgren til ny sesjon", + "ui.message.revertMessage": "Tilbakestill til dette punktet", "ui.message.copyResponse": "Kopier svar", "ui.message.copied": "Kopiert!", "ui.message.interrupted": "Avbrutt", diff --git a/packages/ui/src/i18n/pl.ts b/packages/ui/src/i18n/pl.ts index 9b37a0fd6..e63622a83 100644 --- a/packages/ui/src/i18n/pl.ts +++ b/packages/ui/src/i18n/pl.ts @@ -125,6 +125,8 @@ export const dict = { "ui.message.collapse": "Zwiń wiadomość", "ui.message.copy": "Kopiuj", "ui.message.copyMessage": "Kopiuj wiadomość", + "ui.message.forkMessage": "Rozwidlij do nowej sesji", + "ui.message.revertMessage": "Zresetuj do tego punktu", "ui.message.copyResponse": "Kopiuj odpowiedź", "ui.message.copied": "Skopiowano!", "ui.message.interrupted": "Przerwano", diff --git a/packages/ui/src/i18n/ru.ts b/packages/ui/src/i18n/ru.ts index 7157670c4..b8c7a4a1f 100644 --- a/packages/ui/src/i18n/ru.ts +++ b/packages/ui/src/i18n/ru.ts @@ -125,6 +125,8 @@ export const dict = { "ui.message.collapse": "Свернуть сообщение", "ui.message.copy": "Копировать", "ui.message.copyMessage": "Копировать сообщение", + "ui.message.forkMessage": "Ответвить в новую сессию", + "ui.message.revertMessage": "Сбросить до этого момента", "ui.message.copyResponse": "Копировать ответ", "ui.message.copied": "Скопировано!", "ui.message.interrupted": "Прервано", diff --git a/packages/ui/src/i18n/th.ts b/packages/ui/src/i18n/th.ts index 553638cf4..88236b644 100644 --- a/packages/ui/src/i18n/th.ts +++ b/packages/ui/src/i18n/th.ts @@ -127,6 +127,8 @@ export const dict = { "ui.message.collapse": "ย่อข้อความ", "ui.message.copy": "คัดลอก", "ui.message.copyMessage": "คัดลอกข้อความ", + "ui.message.forkMessage": "แตกแขนงไปยังเซสชันใหม่", + "ui.message.revertMessage": "รีเซ็ตไปยังจุดนี้", "ui.message.copyResponse": "คัดลอกคำตอบ", "ui.message.copied": "คัดลอกแล้ว!", "ui.message.interrupted": "ถูกขัดจังหวะ", diff --git a/packages/ui/src/i18n/tr.ts b/packages/ui/src/i18n/tr.ts index 5b4d71e4a..ff9de61b5 100644 --- a/packages/ui/src/i18n/tr.ts +++ b/packages/ui/src/i18n/tr.ts @@ -22,6 +22,16 @@ export const dict = { "ui.sessionReview.largeDiff.meta": "Limit: {{limit}} değişen satır. Mevcut: {{current}} değişen satır.", "ui.sessionReview.largeDiff.renderAnyway": "Yine de göster", + "ui.fileMedia.kind.image": "görsel", + "ui.fileMedia.kind.audio": "ses", + "ui.fileMedia.state.removed": "{{kind}} dosyası kaldırıldı.", + "ui.fileMedia.state.loading": "{{kind}} yükleniyor...", + "ui.fileMedia.state.error": "{{kind}} yüklenemedi.", + "ui.fileMedia.state.unavailable": "{{kind}} önizlemesi kullanılamıyor.", + "ui.fileMedia.binary.title": "İkili dosya", + "ui.fileMedia.binary.description.path": "{{path}} ikili dosyadır.", + "ui.fileMedia.binary.description.default": "İkili içerik", + "ui.lineComment.label.prefix": "Yorum: ", "ui.lineComment.label.suffix": "", "ui.lineComment.editorLabel.prefix": "Yorum yapılıyor: ", @@ -122,6 +132,8 @@ export const dict = { "ui.message.collapse": "Mesajı daralt", "ui.message.copy": "Kopyala", "ui.message.copyMessage": "Mesajı kopyala", + "ui.message.forkMessage": "Yeni oturuma dallandır", + "ui.message.revertMessage": "Bu noktaya sıfırla", "ui.message.copyResponse": "Yanıtı kopyala", "ui.message.copied": "Kopyalandı", "ui.message.interrupted": "Kesildi", diff --git a/packages/ui/src/i18n/zh.ts b/packages/ui/src/i18n/zh.ts index 638230544..aaf17eee8 100644 --- a/packages/ui/src/i18n/zh.ts +++ b/packages/ui/src/i18n/zh.ts @@ -130,6 +130,8 @@ export const dict = { "ui.message.collapse": "收起消息", "ui.message.copy": "复制", "ui.message.copyMessage": "复制消息", + "ui.message.forkMessage": "分叉到新会话", + "ui.message.revertMessage": "重置到此点", "ui.message.copyResponse": "复制回复", "ui.message.copied": "已复制!", "ui.message.interrupted": "已中断", diff --git a/packages/ui/src/i18n/zht.ts b/packages/ui/src/i18n/zht.ts index f793ce345..b8a9fa799 100644 --- a/packages/ui/src/i18n/zht.ts +++ b/packages/ui/src/i18n/zht.ts @@ -130,6 +130,8 @@ export const dict = { "ui.message.collapse": "收合訊息", "ui.message.copy": "複製", "ui.message.copyMessage": "複製訊息", + "ui.message.forkMessage": "分支到新工作階段", + "ui.message.revertMessage": "重設至此點", "ui.message.copyResponse": "複製回覆", "ui.message.copied": "已複製!", "ui.message.interrupted": "已中斷", |
