diff --git a/packages/opencode/src/cli/cmd/tui/app.tsx b/packages/opencode/src/cli/cmd/tui/app.tsx index ab475071..06c4d1c9 100644 --- a/packages/opencode/src/cli/cmd/tui/app.tsx +++ b/packages/opencode/src/cli/cmd/tui/app.tsx @@ -34,6 +34,7 @@ export function tui(input: { sessionID?: string model?: string agent?: string + prompt?: string onExit?: () => Promise }) { // promise to prevent immediate exit @@ -65,7 +66,7 @@ export function tui(input: { - + diff --git a/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx b/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx index f72b1489..25e394a6 100644 --- a/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx @@ -9,7 +9,7 @@ import { dim, fg, } from "@opentui/core" -import { createEffect, createMemo, Match, Switch, type JSX, onMount } from "solid-js" +import { createEffect, createMemo, Match, Switch, type JSX, onMount, batch } from "solid-js" import { useLocal } from "@tui/context/local" import { SyntaxTheme, useTheme } from "@tui/context/theme" import { SplitBorder } from "@tui/component/border" @@ -189,6 +189,16 @@ export function Prompt(props: PromptProps) { input.focus() }) + local.setInitialPrompt.listen((initialPrompt) => { + batch(() => { + setStore("prompt", { + input: initialPrompt, + parts: [], + }) + input.insertText(initialPrompt) + }) + }) + onMount(() => { promptPartTypeId = input.extmarks.registerType("prompt-part") }) @@ -305,9 +315,9 @@ export function Prompt(props: PromptProps) { const sessionID = props.sessionID ? props.sessionID : await (async () => { - const sessionID = await sdk.client.session.create({}).then((x) => x.data!.id) - return sessionID - })() + const sessionID = await sdk.client.session.create({}).then((x) => x.data!.id) + return sessionID + })() const messageID = Identifier.ascending("message") let inputText = store.prompt.input diff --git a/packages/opencode/src/cli/cmd/tui/context/local.tsx b/packages/opencode/src/cli/cmd/tui/context/local.tsx index 2485cd01..7156a331 100644 --- a/packages/opencode/src/cli/cmd/tui/context/local.tsx +++ b/packages/opencode/src/cli/cmd/tui/context/local.tsx @@ -8,10 +8,11 @@ import { Global } from "@/global" import { iife } from "@/util/iife" import { createSimpleContext } from "./helper" import { useToast } from "../ui/toast" +import { createEventBus } from "@solid-primitives/event-bus" export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ name: "Local", - init: (props: { initialModel?: string; initialAgent?: string }) => { + init: (props: { initialModel?: string; initialAgent?: string; initialPrompt?: string }) => { const sync = useSync() const toast = useToast() @@ -239,9 +240,19 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ } }) + const setInitialPrompt = createEventBus() + + onMount(() => { + if (props.initialPrompt) + setInitialPrompt.emit(props.initialPrompt) + }) + const result = { model, agent, + get setInitialPrompt() { + return setInitialPrompt + }, } return result }, diff --git a/packages/opencode/src/cli/cmd/tui/thread.ts b/packages/opencode/src/cli/cmd/tui/thread.ts index 74afba05..66a22bf9 100644 --- a/packages/opencode/src/cli/cmd/tui/thread.ts +++ b/packages/opencode/src/cli/cmd/tui/thread.ts @@ -32,6 +32,11 @@ export const TuiThreadCommand = cmd({ describe: "session id to continue", type: "string", }) + .option("prompt", { + alias: ["p"], + type: "string", + describe: "prompt to use", + }) .option("agent", { type: "string", describe: "agent to use", @@ -95,6 +100,7 @@ export const TuiThreadCommand = cmd({ sessionID, model: args.model, agent: args.agent, + prompt: args.prompt, onExit: async () => { await client.call("shutdown", undefined) },