mirror of
https://gitea.toothfairyai.com/ToothFairyAI/tf_code.git
synced 2026-04-11 11:18:34 +00:00
feat(app): follow-up behavior (#17233)
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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()}>
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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": "تمت المقاطعة",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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": "中断",
|
||||
|
||||
@@ -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": "중단됨",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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": "Прервано",
|
||||
|
||||
@@ -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": "ถูกขัดจังหวะ",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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": "已中断",
|
||||
|
||||
@@ -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": "已中斷",
|
||||
|
||||
Reference in New Issue
Block a user