diff --git a/packages/app/src/i18n/ar.ts b/packages/app/src/i18n/ar.ts index e3792a3c3cc3..1acb1e641171 100644 --- a/packages/app/src/i18n/ar.ts +++ b/packages/app/src/i18n/ar.ts @@ -71,6 +71,8 @@ export const dict = { "command.session.undo.description": "تراجع عن الرسالة الأخيرة", "command.session.redo": "إعادة", "command.session.redo.description": "إعادة الرسالة التي تم التراجع عنها", + "session.revert.active": "تم الرجوع إلى نقطة سابقة", + "session.revert.cancel": "استعادة", "command.session.compact": "ضغط الجلسة", "command.session.compact.description": "تلخيص الجلسة لتقليل حجم السياق", "command.session.fork": "تشعب من الرسالة", diff --git a/packages/app/src/i18n/br.ts b/packages/app/src/i18n/br.ts index 07d6ce467aeb..3c278153e394 100644 --- a/packages/app/src/i18n/br.ts +++ b/packages/app/src/i18n/br.ts @@ -71,6 +71,8 @@ export const dict = { "command.session.undo.description": "Desfazer a última mensagem", "command.session.redo": "Refazer", "command.session.redo.description": "Refazer a última mensagem desfeita", + "session.revert.active": "Revertido para um ponto anterior", + "session.revert.cancel": "Restaurar", "command.session.compact": "Compactar sessão", "command.session.compact.description": "Resumir a sessão para reduzir o tamanho do contexto", "command.session.fork": "Bifurcar da mensagem", diff --git a/packages/app/src/i18n/bs.ts b/packages/app/src/i18n/bs.ts index 7d10da6ed875..8e924b6127f9 100644 --- a/packages/app/src/i18n/bs.ts +++ b/packages/app/src/i18n/bs.ts @@ -77,6 +77,8 @@ export const dict = { "command.session.undo.description": "Poništi posljednju poruku", "command.session.redo": "Vrati", "command.session.redo.description": "Vrati posljednju poništenu poruku", + "session.revert.active": "Vraćeno na raniju tačku", + "session.revert.cancel": "Vrati", "command.session.compact": "Sažmi sesiju", "command.session.compact.description": "Sažmi sesiju kako bi se smanjio kontekst", "command.session.fork": "Fork iz poruke", diff --git a/packages/app/src/i18n/da.ts b/packages/app/src/i18n/da.ts index ac5c4d494b12..a57b8e835312 100644 --- a/packages/app/src/i18n/da.ts +++ b/packages/app/src/i18n/da.ts @@ -77,6 +77,8 @@ export const dict = { "command.session.undo.description": "Fortryd den sidste besked", "command.session.redo": "Omgør", "command.session.redo.description": "Omgør den sidste fortrudte besked", + "session.revert.active": "Gendannet til et tidligere punkt", + "session.revert.cancel": "Gendan", "command.session.compact": "Komprimér session", "command.session.compact.description": "Opsummer sessionen for at reducere kontekststørrelsen", "command.session.fork": "Forgren fra besked", diff --git a/packages/app/src/i18n/de.ts b/packages/app/src/i18n/de.ts index 99a950631074..4c2da64200ac 100644 --- a/packages/app/src/i18n/de.ts +++ b/packages/app/src/i18n/de.ts @@ -75,6 +75,8 @@ export const dict = { "command.session.undo.description": "Letzte Nachricht rückgängig machen", "command.session.redo": "Wiederherstellen", "command.session.redo.description": "Letzte rückgängig gemachte Nachricht wiederherstellen", + "session.revert.active": "Zu einem früheren Punkt zurückgesetzt", + "session.revert.cancel": "Wiederherstellen", "command.session.compact": "Sitzung komprimieren", "command.session.compact.description": "Sitzung zusammenfassen, um die Kontextgröße zu reduzieren", "command.session.fork": "Von Nachricht abzweigen", diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts index 99513edaa173..53466851871a 100644 --- a/packages/app/src/i18n/en.ts +++ b/packages/app/src/i18n/en.ts @@ -77,6 +77,8 @@ export const dict = { "command.session.undo.description": "Undo the last message", "command.session.redo": "Redo", "command.session.redo.description": "Redo the last undone message", + "session.revert.active": "Reverted to an earlier point", + "session.revert.cancel": "Restore", "command.session.compact": "Compact session", "command.session.compact.description": "Summarize the session to reduce context size", "command.session.fork": "Fork from message", diff --git a/packages/app/src/i18n/es.ts b/packages/app/src/i18n/es.ts index 7a6c4974e091..7557d0da7ac1 100644 --- a/packages/app/src/i18n/es.ts +++ b/packages/app/src/i18n/es.ts @@ -77,6 +77,8 @@ export const dict = { "command.session.undo.description": "Deshacer el último mensaje", "command.session.redo": "Rehacer", "command.session.redo.description": "Rehacer el último mensaje deshecho", + "session.revert.active": "Se revirtió a un punto anterior", + "session.revert.cancel": "Restaurar", "command.session.compact": "Compactar sesión", "command.session.compact.description": "Resumir la sesión para reducir el tamaño del contexto", "command.session.fork": "Bifurcar desde mensaje", diff --git a/packages/app/src/i18n/fr.ts b/packages/app/src/i18n/fr.ts index fc3bf2667943..cb006d4e9130 100644 --- a/packages/app/src/i18n/fr.ts +++ b/packages/app/src/i18n/fr.ts @@ -71,6 +71,8 @@ export const dict = { "command.session.undo.description": "Annuler le dernier message", "command.session.redo": "Rétablir", "command.session.redo.description": "Rétablir le dernier message annulé", + "session.revert.active": "Revenu à un point antérieur", + "session.revert.cancel": "Restaurer", "command.session.compact": "Compacter la session", "command.session.compact.description": "Résumer la session pour réduire la taille du contexte", "command.session.fork": "Bifurquer à partir du message", diff --git a/packages/app/src/i18n/ja.ts b/packages/app/src/i18n/ja.ts index b597db02a586..fe04c566bb7c 100644 --- a/packages/app/src/i18n/ja.ts +++ b/packages/app/src/i18n/ja.ts @@ -71,6 +71,8 @@ export const dict = { "command.session.undo.description": "最後のメッセージを元に戻す", "command.session.redo": "やり直す", "command.session.redo.description": "元に戻したメッセージをやり直す", + "session.revert.active": "前の時点に戻しました", + "session.revert.cancel": "復元", "command.session.compact": "セッションを圧縮", "command.session.compact.description": "セッションを要約してコンテキストサイズを削減", "command.session.fork": "メッセージからフォーク", diff --git a/packages/app/src/i18n/ko.ts b/packages/app/src/i18n/ko.ts index 525bd035651f..8df3fb77ce37 100644 --- a/packages/app/src/i18n/ko.ts +++ b/packages/app/src/i18n/ko.ts @@ -75,6 +75,8 @@ export const dict = { "command.session.undo.description": "마지막 메시지 실행 취소", "command.session.redo": "다시 실행", "command.session.redo.description": "마지막 실행 취소된 메시지 다시 실행", + "session.revert.active": "이전 지점으로 되돌렸습니다", + "session.revert.cancel": "복원", "command.session.compact": "세션 압축", "command.session.compact.description": "컨텍스트 크기를 줄이기 위해 세션 요약", "command.session.fork": "메시지에서 분기", diff --git a/packages/app/src/i18n/no.ts b/packages/app/src/i18n/no.ts index 98e79e1896af..969165142a61 100644 --- a/packages/app/src/i18n/no.ts +++ b/packages/app/src/i18n/no.ts @@ -80,6 +80,8 @@ export const dict = { "command.session.undo.description": "Angre siste melding", "command.session.redo": "Gjør om", "command.session.redo.description": "Gjør om siste angrede melding", + "session.revert.active": "Tilbakestilt til et tidligere punkt", + "session.revert.cancel": "Gjenopprett", "command.session.compact": "Komprimer sesjon", "command.session.compact.description": "Oppsummer sesjonen for å redusere kontekststørrelsen", "command.session.fork": "Forgren fra melding", diff --git a/packages/app/src/i18n/pl.ts b/packages/app/src/i18n/pl.ts index 983c9c14ac1b..a7497a0f0fe5 100644 --- a/packages/app/src/i18n/pl.ts +++ b/packages/app/src/i18n/pl.ts @@ -71,6 +71,8 @@ export const dict = { "command.session.undo.description": "Cofnij ostatnią wiadomość", "command.session.redo": "Ponów", "command.session.redo.description": "Ponów ostatnią cofniętą wiadomość", + "session.revert.active": "Przywrócono do wcześniejszego punktu", + "session.revert.cancel": "Przywróć", "command.session.compact": "Kompaktuj sesję", "command.session.compact.description": "Podsumuj sesję, aby zmniejszyć rozmiar kontekstu", "command.session.fork": "Rozwidlij od wiadomości", diff --git a/packages/app/src/i18n/ru.ts b/packages/app/src/i18n/ru.ts index f2c87fe0f1ed..215d138671ae 100644 --- a/packages/app/src/i18n/ru.ts +++ b/packages/app/src/i18n/ru.ts @@ -77,6 +77,8 @@ export const dict = { "command.session.undo.description": "Отменить последнее сообщение", "command.session.redo": "Повторить", "command.session.redo.description": "Повторить отменённое сообщение", + "session.revert.active": "Возврат к более ранней точке", + "session.revert.cancel": "Восстановить", "command.session.compact": "Сжать сессию", "command.session.compact.description": "Сократить сессию для уменьшения размера контекста", "command.session.fork": "Создать ответвление", diff --git a/packages/app/src/i18n/th.ts b/packages/app/src/i18n/th.ts index 689e82118968..65b340043276 100644 --- a/packages/app/src/i18n/th.ts +++ b/packages/app/src/i18n/th.ts @@ -77,6 +77,8 @@ export const dict = { "command.session.undo.description": "ยกเลิกข้อความล่าสุด", "command.session.redo": "ทำซ้ำ", "command.session.redo.description": "ทำซ้ำข้อความที่ถูกยกเลิกล่าสุด", + "session.revert.active": "ย้อนกลับไปยังจุดก่อนหน้าแล้ว", + "session.revert.cancel": "กู้คืน", "command.session.compact": "บีบอัดเซสชัน", "command.session.compact.description": "สรุปเซสชันเพื่อลดขนาดบริบท", "command.session.fork": "แตกแขนงจากข้อความ", diff --git a/packages/app/src/i18n/zh.ts b/packages/app/src/i18n/zh.ts index 1b40013b60de..f4775891730f 100644 --- a/packages/app/src/i18n/zh.ts +++ b/packages/app/src/i18n/zh.ts @@ -103,6 +103,8 @@ export const dict = { "command.session.undo.description": "撤销上一条消息", "command.session.redo": "重做", "command.session.redo.description": "重做上一条撤销的消息", + "session.revert.active": "已回退到较早位置", + "session.revert.cancel": "恢复", "command.session.compact": "精简会话", "command.session.compact.description": "总结会话以减少上下文大小", "command.session.fork": "从消息分叉", diff --git a/packages/app/src/i18n/zht.ts b/packages/app/src/i18n/zht.ts index 34aec01b9cb1..4ba4b2b78efc 100644 --- a/packages/app/src/i18n/zht.ts +++ b/packages/app/src/i18n/zht.ts @@ -81,6 +81,8 @@ export const dict = { "command.session.undo.description": "復原上一則訊息", "command.session.redo": "重做", "command.session.redo.description": "重做上一則復原的訊息", + "session.revert.active": "已回退到較早位置", + "session.revert.cancel": "還原", "command.session.compact": "精簡工作階段", "command.session.compact.description": "總結工作階段以減少上下文大小", "command.session.fork": "從訊息分支", diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index 5ce6202eef9b..dedad5b24537 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -58,6 +58,7 @@ import { SessionPromptDock } from "@/pages/session/session-prompt-dock" import { SessionMobileTabs } from "@/pages/session/session-mobile-tabs" import { SessionSidePanel } from "@/pages/session/session-side-panel" import { useSessionHashScroll } from "@/pages/session/use-session-hash-scroll" +import { extractPromptFromParts } from "@/utils/prompt" type HandoffSession = { prompt: string @@ -616,6 +617,59 @@ export default function Page() { scrollToMessage(msgs[targetIndex], "auto") } + async function revertMessage(messageID: string) { + const sessionID = params.id + if (!sessionID) return + const msg = userMessages().find((item) => item.id === messageID) + if (!msg) return + + if (status().type !== "idle") { + await sdk.client.session.abort({ sessionID }).catch(() => {}) + } + + const reverted = await sdk.client.session.revert({ sessionID, messageID: msg.id }).catch((err) => { + showToast({ + title: language.t("common.requestFailed"), + description: errorMessage(err), + }) + return undefined + }) + if (!reverted) return + + const parts = sync.data.part[msg.id] + if (parts) { + const restored = extractPromptFromParts(parts, { directory: sdk.directory }) + prompt.set(restored) + } + + const prior = findLast(userMessages(), (item) => item.id < msg.id) + setActiveMessage(prior) + } + + async function cancelRevert() { + const sessionID = params.id + if (!sessionID) return + const revertMsgID = info()?.revert?.messageID + if (!revertMsgID) return + + if (status().type !== "idle") { + await sdk.client.session.abort({ sessionID }).catch(() => {}) + } + + const restored = await sdk.client.session.unrevert({ sessionID }).catch((err) => { + showToast({ + title: language.t("common.requestFailed"), + description: errorMessage(err), + }) + return undefined + }) + if (!restored) return + + prompt.reset() + const lastMsg = findLast(userMessages(), (item) => item.id >= revertMsgID) + setActiveMessage(lastMsg) + } + const kinds = createMemo(() => { const merge = (a: "add" | "del" | "mix" | undefined, b: "add" | "del" | "mix") => { if (!a) return b @@ -1656,6 +1710,9 @@ export default function Page() { lastUserMessageID={lastUserMessage()?.id} expanded={store.expanded} onToggleExpanded={(id) => setStore("expanded", id, (open: boolean | undefined) => !open)} + onRevertMessage={(messageID) => { + void revertMessage(messageID) + }} /> @@ -1690,7 +1747,11 @@ export default function Page() { handoffPrompt={handoff.session.get(sessionKey())?.prompt} t={language.t as (key: string, vars?: Record) => string} responding={ui.responding} + reverted={!!revertMessageID()} onDecide={decide} + onCancelRevert={() => { + void cancelRevert() + }} inputRef={(el) => { inputRef = el }} diff --git a/packages/app/src/pages/session/message-timeline.tsx b/packages/app/src/pages/session/message-timeline.tsx index d5f04ccf91c4..70e9a1c1871a 100644 --- a/packages/app/src/pages/session/message-timeline.tsx +++ b/packages/app/src/pages/session/message-timeline.tsx @@ -90,6 +90,7 @@ export function MessageTimeline(props: { lastUserMessageID?: string expanded: Record onToggleExpanded: (id: string) => void + onRevertMessage?: (messageID: string) => void }) { let touchGesture: number | undefined @@ -315,6 +316,7 @@ export function MessageTimeline(props: { props.onToggleExpanded(message.id)} diff --git a/packages/app/src/pages/session/session-prompt-dock.tsx b/packages/app/src/pages/session/session-prompt-dock.tsx index 8ec4f3b9f8c5..8ca4d45a9889 100644 --- a/packages/app/src/pages/session/session-prompt-dock.tsx +++ b/packages/app/src/pages/session/session-prompt-dock.tsx @@ -15,7 +15,9 @@ export function SessionPromptDock(props: { handoffPrompt?: string t: (key: string, vars?: Record) => string responding: boolean + reverted: boolean onDecide: (response: "once" | "always" | "reject") => void + onCancelRevert: () => void inputRef: (el: HTMLDivElement) => void newSessionWorktree: string onNewSessionWorktreeReset: () => void @@ -114,6 +116,22 @@ export function SessionPromptDock(props: { + +
+ + {props.t("session.revert.cancel")} + + ), + }} + /> +
+
`, "arrow-up": ``, "arrow-left": ``, + undo: ``, "arrow-right": ``, archive: ``, "bubble-5": ``, diff --git a/packages/ui/src/components/message-part.css b/packages/ui/src/components/message-part.css index 9a18810dc943..b4bb722037dc 100644 --- a/packages/ui/src/components/message-part.css +++ b/packages/ui/src/components/message-part.css @@ -89,15 +89,18 @@ color: var(--syntax-type); } - [data-slot="user-message-copy-wrapper"] { + [data-slot="user-message-actions-wrapper"] { position: absolute; top: 7px; right: 7px; + display: inline-flex; + gap: 6px; opacity: 0; transition: opacity 0.15s ease; } - &:hover [data-slot="user-message-copy-wrapper"] { + &:hover [data-slot="user-message-actions-wrapper"], + &:focus-within [data-slot="user-message-actions-wrapper"] { opacity: 1; } } @@ -454,7 +457,8 @@ width: 100%; &[data-permission="true"], - &[data-question="true"] { + &[data-question="true"], + &[data-revert="true"] { position: sticky; top: calc(2px + var(--sticky-header-height, 40px)); bottom: 0px; @@ -511,7 +515,8 @@ } } - &[data-question="true"] { + &[data-question="true"], + &[data-revert="true"] { background: var(--background-base); border: 1px solid var(--border-weak-base); } diff --git a/packages/ui/src/components/message-part.tsx b/packages/ui/src/components/message-part.tsx index 3f61b3186d30..dee0a9afc434 100644 --- a/packages/ui/src/components/message-part.tsx +++ b/packages/ui/src/components/message-part.tsx @@ -92,6 +92,8 @@ function DiagnosticsDisplay(props: { diagnostics: Diagnostic[] }): JSX.Element { export interface MessageProps { message: MessageType parts: PartType[] + onRevert?: (messageID: string) => void + canRevert?: boolean } export interface MessagePartProps { @@ -277,7 +279,14 @@ export function Message(props: MessageProps) { return ( - {(userMessage) => } + {(userMessage) => ( + + )} {(assistantMessage) => ( @@ -301,7 +310,12 @@ export function AssistantMessageDisplay(props: { message: AssistantMessage; part return {(part) => } } -export function UserMessageDisplay(props: { message: UserMessage; parts: PartType[] }) { +export function UserMessageDisplay(props: { + message: UserMessage + parts: PartType[] + onRevert?: (messageID: string) => void + canRevert?: boolean +}) { const dialog = useDialog() const i18n = useI18n() const [copied, setCopied] = createSignal(false) @@ -328,6 +342,7 @@ export function UserMessageDisplay(props: { message: UserMessage; parts: PartTyp ) const text = createMemo(() => textPart()?.text || "") + const canRevert = createMemo(() => !!props.onRevert && (props.canRevert ?? true)) createEffect(() => { text() @@ -417,7 +432,22 @@ export function UserMessageDisplay(props: { message: UserMessage; parts: PartTyp > -
+
+ + + e.preventDefault()} + onClick={(event) => { + event.stopPropagation() + props.onRevert?.(props.message.id) + }} + aria-label={i18n.t("ui.sessionTurn.revert")} + /> + + void + onRevert?: (messageID: string) => void + canRevert?: boolean onUserInteracted?: () => void classes?: { root?: string @@ -441,6 +443,7 @@ export function SessionTurn( const responsePartId = createMemo(() => lastTextPart()?.id) const hasDiffs = createMemo(() => (message()?.summary?.diffs?.length ?? 0) > 0) const hideResponsePart = createMemo(() => !working() && !!responsePartId()) + const canRevert = createMemo(() => !!props.onRevert && (props.canRevert ?? true) && !working()) const [copied, setCopied] = createSignal(false) @@ -632,7 +635,12 @@ export function SessionTurn(
{/* User Message */}
- +
{/* Trigger (sticky) */} diff --git a/packages/ui/src/i18n/ar.ts b/packages/ui/src/i18n/ar.ts index 9a6c8dcbd050..196a6c99ceac 100644 --- a/packages/ui/src/i18n/ar.ts +++ b/packages/ui/src/i18n/ar.ts @@ -23,6 +23,7 @@ export const dict = { "ui.sessionTurn.steps.show": "إظهار الخطوات", "ui.sessionTurn.steps.hide": "إخفاء الخطوات", + "ui.sessionTurn.revert": "الرجوع إلى هذا الدور", "ui.sessionTurn.summary.response": "استجابة", "ui.sessionTurn.diff.showMore": "إظهار المزيد من التغييرات ({{count}})", diff --git a/packages/ui/src/i18n/br.ts b/packages/ui/src/i18n/br.ts index 148b0ae17419..0d480361b474 100644 --- a/packages/ui/src/i18n/br.ts +++ b/packages/ui/src/i18n/br.ts @@ -23,6 +23,7 @@ export const dict = { "ui.sessionTurn.steps.show": "Mostrar passos", "ui.sessionTurn.steps.hide": "Ocultar passos", + "ui.sessionTurn.revert": "Reverter para este turno", "ui.sessionTurn.summary.response": "Resposta", "ui.sessionTurn.diff.showMore": "Mostrar mais alterações ({{count}})", diff --git a/packages/ui/src/i18n/bs.ts b/packages/ui/src/i18n/bs.ts index 7614af087f90..7698469a6e9f 100644 --- a/packages/ui/src/i18n/bs.ts +++ b/packages/ui/src/i18n/bs.ts @@ -27,6 +27,7 @@ export const dict = { "ui.sessionTurn.steps.show": "Prikaži korake", "ui.sessionTurn.steps.hide": "Sakrij korake", + "ui.sessionTurn.revert": "Vrati na ovaj potez", "ui.sessionTurn.summary.response": "Odgovor", "ui.sessionTurn.diff.showMore": "Prikaži još izmjena ({{count}})", diff --git a/packages/ui/src/i18n/da.ts b/packages/ui/src/i18n/da.ts index 2f49a94344cf..1346fea2d504 100644 --- a/packages/ui/src/i18n/da.ts +++ b/packages/ui/src/i18n/da.ts @@ -22,6 +22,7 @@ export const dict = { "ui.lineComment.submit": "Kommenter", "ui.sessionTurn.steps.show": "Vis trin", "ui.sessionTurn.steps.hide": "Skjul trin", + "ui.sessionTurn.revert": "Gendan til denne tur", "ui.sessionTurn.summary.response": "Svar", "ui.sessionTurn.diff.showMore": "Vis flere ændringer ({{count}})", diff --git a/packages/ui/src/i18n/de.ts b/packages/ui/src/i18n/de.ts index 44090b7bdb8c..891343eabe29 100644 --- a/packages/ui/src/i18n/de.ts +++ b/packages/ui/src/i18n/de.ts @@ -26,6 +26,7 @@ export const dict = { "ui.lineComment.submit": "Kommentieren", "ui.sessionTurn.steps.show": "Schritte anzeigen", "ui.sessionTurn.steps.hide": "Schritte ausblenden", + "ui.sessionTurn.revert": "Zu diesem Schritt zurückkehren", "ui.sessionTurn.summary.response": "Antwort", "ui.sessionTurn.diff.showMore": "Weitere Änderungen anzeigen ({{count}})", diff --git a/packages/ui/src/i18n/en.ts b/packages/ui/src/i18n/en.ts index 9b6ab0bd6d9e..096f8723d05a 100644 --- a/packages/ui/src/i18n/en.ts +++ b/packages/ui/src/i18n/en.ts @@ -23,6 +23,7 @@ export const dict = { "ui.sessionTurn.steps.show": "Show steps", "ui.sessionTurn.steps.hide": "Hide steps", + "ui.sessionTurn.revert": "Revert to this turn", "ui.sessionTurn.summary.response": "Response", "ui.sessionTurn.diff.showMore": "Show more changes ({{count}})", diff --git a/packages/ui/src/i18n/es.ts b/packages/ui/src/i18n/es.ts index c2f8ac3b9d5c..2b41d1d7306b 100644 --- a/packages/ui/src/i18n/es.ts +++ b/packages/ui/src/i18n/es.ts @@ -23,6 +23,7 @@ export const dict = { "ui.sessionTurn.steps.show": "Mostrar pasos", "ui.sessionTurn.steps.hide": "Ocultar pasos", + "ui.sessionTurn.revert": "Revertir a este turno", "ui.sessionTurn.summary.response": "Respuesta", "ui.sessionTurn.diff.showMore": "Mostrar más cambios ({{count}})", diff --git a/packages/ui/src/i18n/fr.ts b/packages/ui/src/i18n/fr.ts index 679d56fa76ff..2524256421f5 100644 --- a/packages/ui/src/i18n/fr.ts +++ b/packages/ui/src/i18n/fr.ts @@ -23,6 +23,7 @@ export const dict = { "ui.sessionTurn.steps.show": "Afficher les étapes", "ui.sessionTurn.steps.hide": "Masquer les étapes", + "ui.sessionTurn.revert": "Revenir à ce tour", "ui.sessionTurn.summary.response": "Réponse", "ui.sessionTurn.diff.showMore": "Afficher plus de modifications ({{count}})", diff --git a/packages/ui/src/i18n/ja.ts b/packages/ui/src/i18n/ja.ts index bf85807d0052..e25d8a50c3d9 100644 --- a/packages/ui/src/i18n/ja.ts +++ b/packages/ui/src/i18n/ja.ts @@ -22,6 +22,7 @@ export const dict = { "ui.lineComment.submit": "コメント", "ui.sessionTurn.steps.show": "ステップを表示", "ui.sessionTurn.steps.hide": "ステップを隠す", + "ui.sessionTurn.revert": "このターンに戻す", "ui.sessionTurn.summary.response": "応答", "ui.sessionTurn.diff.showMore": "さらに変更を表示 ({{count}})", diff --git a/packages/ui/src/i18n/ko.ts b/packages/ui/src/i18n/ko.ts index aba793a11b8d..26632abd0ba7 100644 --- a/packages/ui/src/i18n/ko.ts +++ b/packages/ui/src/i18n/ko.ts @@ -23,6 +23,7 @@ export const dict = { "ui.sessionTurn.steps.show": "단계 표시", "ui.sessionTurn.steps.hide": "단계 숨기기", + "ui.sessionTurn.revert": "이 턴으로 되돌리기", "ui.sessionTurn.summary.response": "응답", "ui.sessionTurn.diff.showMore": "변경 사항 더 보기 ({{count}})", diff --git a/packages/ui/src/i18n/no.ts b/packages/ui/src/i18n/no.ts index 7982b3ac75ed..7c3384bf9481 100644 --- a/packages/ui/src/i18n/no.ts +++ b/packages/ui/src/i18n/no.ts @@ -26,6 +26,7 @@ export const dict: Record = { "ui.sessionTurn.steps.show": "Vis trinn", "ui.sessionTurn.steps.hide": "Skjul trinn", + "ui.sessionTurn.revert": "Tilbakestill til denne runden", "ui.sessionTurn.summary.response": "Svar", "ui.sessionTurn.diff.showMore": "Vis flere endringer ({{count}})", diff --git a/packages/ui/src/i18n/pl.ts b/packages/ui/src/i18n/pl.ts index 2489ac7f2ee4..7d2711d4ce8d 100644 --- a/packages/ui/src/i18n/pl.ts +++ b/packages/ui/src/i18n/pl.ts @@ -22,6 +22,7 @@ export const dict = { "ui.lineComment.submit": "Skomentuj", "ui.sessionTurn.steps.show": "Pokaż kroki", "ui.sessionTurn.steps.hide": "Ukryj kroki", + "ui.sessionTurn.revert": "Przywróć do tej tury", "ui.sessionTurn.summary.response": "Odpowiedź", "ui.sessionTurn.diff.showMore": "Pokaż więcej zmian ({{count}})", diff --git a/packages/ui/src/i18n/ru.ts b/packages/ui/src/i18n/ru.ts index 8e6bb678f249..21b8ab722b47 100644 --- a/packages/ui/src/i18n/ru.ts +++ b/packages/ui/src/i18n/ru.ts @@ -22,6 +22,7 @@ export const dict = { "ui.lineComment.submit": "Комментировать", "ui.sessionTurn.steps.show": "Показать шаги", "ui.sessionTurn.steps.hide": "Скрыть шаги", + "ui.sessionTurn.revert": "Вернуться к этому ходу", "ui.sessionTurn.summary.response": "Ответ", "ui.sessionTurn.diff.showMore": "Показать ещё изменений ({{count}})", diff --git a/packages/ui/src/i18n/th.ts b/packages/ui/src/i18n/th.ts index b036eca2e8ae..c80afd9921dd 100644 --- a/packages/ui/src/i18n/th.ts +++ b/packages/ui/src/i18n/th.ts @@ -23,6 +23,7 @@ export const dict = { "ui.sessionTurn.steps.show": "แสดงขั้นตอน", "ui.sessionTurn.steps.hide": "ซ่อนขั้นตอน", + "ui.sessionTurn.revert": "ย้อนกลับมาที่เทิร์นนี้", "ui.sessionTurn.summary.response": "การตอบสนอง", "ui.sessionTurn.diff.showMore": "แสดงการเปลี่ยนแปลงเพิ่มเติม ({{count}})", diff --git a/packages/ui/src/i18n/zh.ts b/packages/ui/src/i18n/zh.ts index dcb8062a3365..b738fd132cdc 100644 --- a/packages/ui/src/i18n/zh.ts +++ b/packages/ui/src/i18n/zh.ts @@ -27,6 +27,7 @@ export const dict = { "ui.sessionTurn.steps.show": "显示步骤", "ui.sessionTurn.steps.hide": "隐藏步骤", + "ui.sessionTurn.revert": "回退到此轮", "ui.sessionTurn.summary.response": "回复", "ui.sessionTurn.diff.showMore": "显示更多更改({{count}})", diff --git a/packages/ui/src/i18n/zht.ts b/packages/ui/src/i18n/zht.ts index 271a6ded3253..ef6e3f611c8d 100644 --- a/packages/ui/src/i18n/zht.ts +++ b/packages/ui/src/i18n/zht.ts @@ -27,6 +27,7 @@ export const dict = { "ui.sessionTurn.steps.show": "顯示步驟", "ui.sessionTurn.steps.hide": "隱藏步驟", + "ui.sessionTurn.revert": "回退到此回合", "ui.sessionTurn.summary.response": "回覆", "ui.sessionTurn.diff.showMore": "顯示更多變更 ({{count}})",