diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/dialog-subagent.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/dialog-subagent.tsx new file mode 100644 index 00000000000..a9446b20d95 --- /dev/null +++ b/packages/opencode/src/cli/cmd/tui/routes/session/dialog-subagent.tsx @@ -0,0 +1,26 @@ +import { DialogSelect } from "@tui/ui/dialog-select" +import { useRoute } from "@tui/context/route" + +export function DialogSubagent(props: { sessionID: string }) { + const route = useRoute() + + return ( + { + route.navigate({ + type: "session", + sessionID: props.sessionID, + }) + dialog.clear() + }, + }, + ]} + /> + ) +} diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx index 2d6f60cc0a6..2e72f482dde 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -66,6 +66,7 @@ import stripAnsi from "strip-ansi" import { Footer } from "./footer.tsx" import { usePromptRef } from "../../context/prompt" import { Filesystem } from "@/util/filesystem" +import { DialogSubagent } from "./dialog-subagent.tsx" addDefaultParsers(parsers.parsers) @@ -1528,13 +1529,33 @@ ToolRegistry.register({ ToolRegistry.register({ name: "task", - container: "block", + container: "inline", render(props) { const { theme } = useTheme() const keybind = useKeybind() + const dialog = useDialog() + const renderer = useRenderer() + const [hover, setHover] = createSignal(false) return ( - <> + setHover(true)} + onMouseOut={() => setHover(false)} + onMouseUp={() => { + const id = props.metadata.sessionId + if (renderer.getSelection()?.getSelectedText() || !id) return + dialog.replace(() => ) + }} + > {Locale.titlecase(props.input.subagent_type ?? "unknown")} Task "{props.input.description}" @@ -1557,7 +1578,7 @@ ToolRegistry.register({ {keybind.print("session_child_cycle")}, {keybind.print("session_child_cycle_reverse")} to navigate between subagent sessions - + ) }, })