Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 32 additions & 10 deletions packages/opencode/src/cli/cmd/tui/routes/session/question.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { createStore } from "solid-js/store"
import { createStore, produce } from "solid-js/store"
import { createMemo, createSignal, For, Show } from "solid-js"
import { useRenderer } from "@opentui/solid"
import type { TextareaRenderable } from "@opentui/core"
Expand All @@ -9,9 +9,11 @@ import { SplitBorder } from "../../component/border"
import { useDialog } from "../../ui/dialog"
import { useTuiConfig } from "../../context/tui-config"
import { useBindings } from "../../keymap"
import { useSync } from "../../context/sync"

export function QuestionPrompt(props: { request: QuestionRequest }) {
const sdk = useSDK()
const sync = useSync()
const { theme } = useTheme()
const renderer = useRenderer()
const tuiConfig = useTuiConfig()
Expand Down Expand Up @@ -43,18 +45,41 @@ export function QuestionPrompt(props: { request: QuestionRequest }) {
return store.answers[store.tab]?.includes(value) ?? false
})

function submit() {
const answers = questions().map((_, i) => store.answers[i] ?? [])
void sdk.client.question.reply({
function clearPendingQuestion() {
const requests = sync.data.question[props.request.sessionID]
const index = requests?.findIndex((request) => request.id === props.request.id) ?? -1
if (index === -1) return
sync.set(
"question",
props.request.sessionID,
produce((draft) => {
draft.splice(index, 1)
}),
)
}

async function reply(answers: QuestionAnswer[]) {
await sdk.client.question.reply({
requestID: props.request.id,
answers,
})
clearPendingQuestion()
}

function reject() {
void sdk.client.question.reject({
async function rejectQuestion() {
await sdk.client.question.reject({
requestID: props.request.id,
})
clearPendingQuestion()
}

function submit() {
const answers = questions().map((_, i) => store.answers[i] ?? [])
void reply(answers)
}

function reject() {
void rejectQuestion()
}

function pick(answer: string, custom: boolean = false) {
Expand All @@ -67,10 +92,7 @@ export function QuestionPrompt(props: { request: QuestionRequest }) {
setStore("custom", inputs)
}
if (single()) {
void sdk.client.question.reply({
requestID: props.request.id,
answers: [[answer]],
})
void reply([[answer]])
return
}
setStore("tab", store.tab + 1)
Expand Down
Loading