From c7aa47c144c64dda33f2bc05cdd9807b1c6ff344 Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Mon, 20 Jul 2026 09:53:07 -0400 Subject: [PATCH] feat(tui): implement session timeline --- packages/tui/src/routes/session/dialog-message.tsx | 6 ++++++ packages/tui/src/routes/session/dialog-timeline.tsx | 6 +++++- packages/tui/src/routes/session/index.tsx | 11 ++++++++++- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/packages/tui/src/routes/session/dialog-message.tsx b/packages/tui/src/routes/session/dialog-message.tsx index ef0933ab9b..74e3aaab9b 100644 --- a/packages/tui/src/routes/session/dialog-message.tsx +++ b/packages/tui/src/routes/session/dialog-message.tsx @@ -24,6 +24,12 @@ export function DialogMessage(props: { dialog.clear(), + }, { title: "Revert", value: "session.revert", diff --git a/packages/tui/src/routes/session/dialog-timeline.tsx b/packages/tui/src/routes/session/dialog-timeline.tsx index c42e32139c..6c971daea3 100644 --- a/packages/tui/src/routes/session/dialog-timeline.tsx +++ b/packages/tui/src/routes/session/dialog-timeline.tsx @@ -4,10 +4,12 @@ import { DialogSelect, type DialogSelectOption } from "../../ui/dialog-select" import { Locale } from "../../util/locale" import { DialogMessage } from "./dialog-message" import { useDialog } from "../../ui/dialog" +import type { PromptInfo } from "../../prompt/history" export function DialogTimeline(props: { sessionID: string onMove: (messageID: string) => void + setPrompt?: (prompt: PromptInfo) => void }) { const data = useData() const dialog = useDialog() @@ -26,7 +28,9 @@ export function DialogTimeline(props: { value: message.id, footer: Locale.time(message.time.created), onSelect: (dialog) => { - dialog.replace(() => ) + dialog.replace(() => ( + + )) }, }) } diff --git a/packages/tui/src/routes/session/index.tsx b/packages/tui/src/routes/session/index.tsx index 955a5d9cae..05c6de718e 100644 --- a/packages/tui/src/routes/session/index.tsx +++ b/packages/tui/src/routes/session/index.tsx @@ -53,6 +53,7 @@ import { useDialog } from "../../ui/dialog" import { DialogSessionRename } from "../../component/dialog-session-rename" import { DialogMessage } from "./dialog-message" import { DialogFork } from "./dialog-fork" +import { DialogTimeline } from "./dialog-timeline" import { Sidebar } from "./sidebar" import { Composer } from "./composer" import { filetype } from "../../util/filetype" @@ -458,7 +459,15 @@ export function Session() { id: "session.timeline", group: "Session", slash: { name: "timeline" }, - run: () => unavailable("The message timeline"), + run: () => { + dialog.replace(() => ( + promptRef.current?.set(value)} + /> + )) + }, }, { title: "Fork session",