Skip to content
This repository was archived by the owner on Apr 1, 2026. It is now read-only.

Commit 0170577

Browse files
authored
feat: tui: Add --prompt option (anomalyco#3668)
1 parent 7de6ea5 commit 0170577

4 files changed

Lines changed: 34 additions & 6 deletions

File tree

packages/opencode/src/cli/cmd/tui/app.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ export function tui(input: {
3434
sessionID?: string
3535
model?: string
3636
agent?: string
37+
prompt?: string
3738
onExit?: () => Promise<void>
3839
}) {
3940
// promise to prevent immediate exit
@@ -65,7 +66,7 @@ export function tui(input: {
6566
<SDKProvider url={input.url}>
6667
<SyncProvider>
6768
<ThemeProvider>
68-
<LocalProvider initialModel={input.model} initialAgent={input.agent}>
69+
<LocalProvider initialModel={input.model} initialAgent={input.agent} initialPrompt={input.prompt}>
6970
<KeybindProvider>
7071
<DialogProvider>
7172
<CommandProvider>

packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
dim,
1010
fg,
1111
} from "@opentui/core"
12-
import { createEffect, createMemo, Match, Switch, type JSX, onMount } from "solid-js"
12+
import { createEffect, createMemo, Match, Switch, type JSX, onMount, batch } from "solid-js"
1313
import { useLocal } from "@tui/context/local"
1414
import { SyntaxTheme, useTheme } from "@tui/context/theme"
1515
import { SplitBorder } from "@tui/component/border"
@@ -189,6 +189,16 @@ export function Prompt(props: PromptProps) {
189189
input.focus()
190190
})
191191

192+
local.setInitialPrompt.listen((initialPrompt) => {
193+
batch(() => {
194+
setStore("prompt", {
195+
input: initialPrompt,
196+
parts: [],
197+
})
198+
input.insertText(initialPrompt)
199+
})
200+
})
201+
192202
onMount(() => {
193203
promptPartTypeId = input.extmarks.registerType("prompt-part")
194204
})
@@ -305,9 +315,9 @@ export function Prompt(props: PromptProps) {
305315
const sessionID = props.sessionID
306316
? props.sessionID
307317
: await (async () => {
308-
const sessionID = await sdk.client.session.create({}).then((x) => x.data!.id)
309-
return sessionID
310-
})()
318+
const sessionID = await sdk.client.session.create({}).then((x) => x.data!.id)
319+
return sessionID
320+
})()
311321
const messageID = Identifier.ascending("message")
312322
let inputText = store.prompt.input
313323

packages/opencode/src/cli/cmd/tui/context/local.tsx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ import { Global } from "@/global"
88
import { iife } from "@/util/iife"
99
import { createSimpleContext } from "./helper"
1010
import { useToast } from "../ui/toast"
11+
import { createEventBus } from "@solid-primitives/event-bus"
1112

1213
export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
1314
name: "Local",
14-
init: (props: { initialModel?: string; initialAgent?: string }) => {
15+
init: (props: { initialModel?: string; initialAgent?: string; initialPrompt?: string }) => {
1516
const sync = useSync()
1617
const toast = useToast()
1718

@@ -239,9 +240,19 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
239240
}
240241
})
241242

243+
const setInitialPrompt = createEventBus<string>()
244+
245+
onMount(() => {
246+
if (props.initialPrompt)
247+
setInitialPrompt.emit(props.initialPrompt)
248+
})
249+
242250
const result = {
243251
model,
244252
agent,
253+
get setInitialPrompt() {
254+
return setInitialPrompt
255+
},
245256
}
246257
return result
247258
},

packages/opencode/src/cli/cmd/tui/thread.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ export const TuiThreadCommand = cmd({
3232
describe: "session id to continue",
3333
type: "string",
3434
})
35+
.option("prompt", {
36+
alias: ["p"],
37+
type: "string",
38+
describe: "prompt to use",
39+
})
3540
.option("agent", {
3641
type: "string",
3742
describe: "agent to use",
@@ -95,6 +100,7 @@ export const TuiThreadCommand = cmd({
95100
sessionID,
96101
model: args.model,
97102
agent: args.agent,
103+
prompt: args.prompt,
98104
onExit: async () => {
99105
await client.call("shutdown", undefined)
100106
},

0 commit comments

Comments
 (0)