feat(tui): implement session timeline
This commit is contained in:
@@ -24,6 +24,12 @@ export function DialogMessage(props: {
|
|||||||
<DialogSelect
|
<DialogSelect
|
||||||
title="Message Actions"
|
title="Message Actions"
|
||||||
options={[
|
options={[
|
||||||
|
{
|
||||||
|
title: "Jump to",
|
||||||
|
value: "message.jump",
|
||||||
|
description: "view message in session",
|
||||||
|
onSelect: (dialog) => dialog.clear(),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title: "Revert",
|
title: "Revert",
|
||||||
value: "session.revert",
|
value: "session.revert",
|
||||||
|
|||||||
@@ -4,10 +4,12 @@ import { DialogSelect, type DialogSelectOption } from "../../ui/dialog-select"
|
|||||||
import { Locale } from "../../util/locale"
|
import { Locale } from "../../util/locale"
|
||||||
import { DialogMessage } from "./dialog-message"
|
import { DialogMessage } from "./dialog-message"
|
||||||
import { useDialog } from "../../ui/dialog"
|
import { useDialog } from "../../ui/dialog"
|
||||||
|
import type { PromptInfo } from "../../prompt/history"
|
||||||
|
|
||||||
export function DialogTimeline(props: {
|
export function DialogTimeline(props: {
|
||||||
sessionID: string
|
sessionID: string
|
||||||
onMove: (messageID: string) => void
|
onMove: (messageID: string) => void
|
||||||
|
setPrompt?: (prompt: PromptInfo) => void
|
||||||
}) {
|
}) {
|
||||||
const data = useData()
|
const data = useData()
|
||||||
const dialog = useDialog()
|
const dialog = useDialog()
|
||||||
@@ -26,7 +28,9 @@ export function DialogTimeline(props: {
|
|||||||
value: message.id,
|
value: message.id,
|
||||||
footer: Locale.time(message.time.created),
|
footer: Locale.time(message.time.created),
|
||||||
onSelect: (dialog) => {
|
onSelect: (dialog) => {
|
||||||
dialog.replace(() => <DialogMessage messageID={message.id} sessionID={props.sessionID} />)
|
dialog.replace(() => (
|
||||||
|
<DialogMessage messageID={message.id} sessionID={props.sessionID} setPrompt={props.setPrompt} />
|
||||||
|
))
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ import { useDialog } from "../../ui/dialog"
|
|||||||
import { DialogSessionRename } from "../../component/dialog-session-rename"
|
import { DialogSessionRename } from "../../component/dialog-session-rename"
|
||||||
import { DialogMessage } from "./dialog-message"
|
import { DialogMessage } from "./dialog-message"
|
||||||
import { DialogFork } from "./dialog-fork"
|
import { DialogFork } from "./dialog-fork"
|
||||||
|
import { DialogTimeline } from "./dialog-timeline"
|
||||||
import { Sidebar } from "./sidebar"
|
import { Sidebar } from "./sidebar"
|
||||||
import { Composer } from "./composer"
|
import { Composer } from "./composer"
|
||||||
import { filetype } from "../../util/filetype"
|
import { filetype } from "../../util/filetype"
|
||||||
@@ -458,7 +459,15 @@ export function Session() {
|
|||||||
id: "session.timeline",
|
id: "session.timeline",
|
||||||
group: "Session",
|
group: "Session",
|
||||||
slash: { name: "timeline" },
|
slash: { name: "timeline" },
|
||||||
run: () => unavailable("The message timeline"),
|
run: () => {
|
||||||
|
dialog.replace(() => (
|
||||||
|
<DialogTimeline
|
||||||
|
sessionID={route.sessionID}
|
||||||
|
onMove={jumpToMessage}
|
||||||
|
setPrompt={(value) => promptRef.current?.set(value)}
|
||||||
|
/>
|
||||||
|
))
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Fork session",
|
title: "Fork session",
|
||||||
|
|||||||
Reference in New Issue
Block a user