mirror of
https://github.com/aljazceru/opencode.git
synced 2026-01-25 10:45:04 +01:00
feat: tui: Add --prompt option (#3668)
This commit is contained in:
@@ -34,6 +34,7 @@ export function tui(input: {
|
|||||||
sessionID?: string
|
sessionID?: string
|
||||||
model?: string
|
model?: string
|
||||||
agent?: string
|
agent?: string
|
||||||
|
prompt?: string
|
||||||
onExit?: () => Promise<void>
|
onExit?: () => Promise<void>
|
||||||
}) {
|
}) {
|
||||||
// promise to prevent immediate exit
|
// promise to prevent immediate exit
|
||||||
@@ -65,7 +66,7 @@ export function tui(input: {
|
|||||||
<SDKProvider url={input.url}>
|
<SDKProvider url={input.url}>
|
||||||
<SyncProvider>
|
<SyncProvider>
|
||||||
<ThemeProvider>
|
<ThemeProvider>
|
||||||
<LocalProvider initialModel={input.model} initialAgent={input.agent}>
|
<LocalProvider initialModel={input.model} initialAgent={input.agent} initialPrompt={input.prompt}>
|
||||||
<KeybindProvider>
|
<KeybindProvider>
|
||||||
<DialogProvider>
|
<DialogProvider>
|
||||||
<CommandProvider>
|
<CommandProvider>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import {
|
|||||||
dim,
|
dim,
|
||||||
fg,
|
fg,
|
||||||
} from "@opentui/core"
|
} 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 { useLocal } from "@tui/context/local"
|
||||||
import { SyntaxTheme, useTheme } from "@tui/context/theme"
|
import { SyntaxTheme, useTheme } from "@tui/context/theme"
|
||||||
import { SplitBorder } from "@tui/component/border"
|
import { SplitBorder } from "@tui/component/border"
|
||||||
@@ -189,6 +189,16 @@ export function Prompt(props: PromptProps) {
|
|||||||
input.focus()
|
input.focus()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
local.setInitialPrompt.listen((initialPrompt) => {
|
||||||
|
batch(() => {
|
||||||
|
setStore("prompt", {
|
||||||
|
input: initialPrompt,
|
||||||
|
parts: [],
|
||||||
|
})
|
||||||
|
input.insertText(initialPrompt)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
onMount(() => {
|
onMount(() => {
|
||||||
promptPartTypeId = input.extmarks.registerType("prompt-part")
|
promptPartTypeId = input.extmarks.registerType("prompt-part")
|
||||||
})
|
})
|
||||||
@@ -305,9 +315,9 @@ export function Prompt(props: PromptProps) {
|
|||||||
const sessionID = props.sessionID
|
const sessionID = props.sessionID
|
||||||
? props.sessionID
|
? props.sessionID
|
||||||
: await (async () => {
|
: await (async () => {
|
||||||
const sessionID = await sdk.client.session.create({}).then((x) => x.data!.id)
|
const sessionID = await sdk.client.session.create({}).then((x) => x.data!.id)
|
||||||
return sessionID
|
return sessionID
|
||||||
})()
|
})()
|
||||||
const messageID = Identifier.ascending("message")
|
const messageID = Identifier.ascending("message")
|
||||||
let inputText = store.prompt.input
|
let inputText = store.prompt.input
|
||||||
|
|
||||||
|
|||||||
@@ -8,10 +8,11 @@ import { Global } from "@/global"
|
|||||||
import { iife } from "@/util/iife"
|
import { iife } from "@/util/iife"
|
||||||
import { createSimpleContext } from "./helper"
|
import { createSimpleContext } from "./helper"
|
||||||
import { useToast } from "../ui/toast"
|
import { useToast } from "../ui/toast"
|
||||||
|
import { createEventBus } from "@solid-primitives/event-bus"
|
||||||
|
|
||||||
export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
|
export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
|
||||||
name: "Local",
|
name: "Local",
|
||||||
init: (props: { initialModel?: string; initialAgent?: string }) => {
|
init: (props: { initialModel?: string; initialAgent?: string; initialPrompt?: string }) => {
|
||||||
const sync = useSync()
|
const sync = useSync()
|
||||||
const toast = useToast()
|
const toast = useToast()
|
||||||
|
|
||||||
@@ -239,9 +240,19 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const setInitialPrompt = createEventBus<string>()
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
if (props.initialPrompt)
|
||||||
|
setInitialPrompt.emit(props.initialPrompt)
|
||||||
|
})
|
||||||
|
|
||||||
const result = {
|
const result = {
|
||||||
model,
|
model,
|
||||||
agent,
|
agent,
|
||||||
|
get setInitialPrompt() {
|
||||||
|
return setInitialPrompt
|
||||||
|
},
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -32,6 +32,11 @@ export const TuiThreadCommand = cmd({
|
|||||||
describe: "session id to continue",
|
describe: "session id to continue",
|
||||||
type: "string",
|
type: "string",
|
||||||
})
|
})
|
||||||
|
.option("prompt", {
|
||||||
|
alias: ["p"],
|
||||||
|
type: "string",
|
||||||
|
describe: "prompt to use",
|
||||||
|
})
|
||||||
.option("agent", {
|
.option("agent", {
|
||||||
type: "string",
|
type: "string",
|
||||||
describe: "agent to use",
|
describe: "agent to use",
|
||||||
@@ -95,6 +100,7 @@ export const TuiThreadCommand = cmd({
|
|||||||
sessionID,
|
sessionID,
|
||||||
model: args.model,
|
model: args.model,
|
||||||
agent: args.agent,
|
agent: args.agent,
|
||||||
|
prompt: args.prompt,
|
||||||
onExit: async () => {
|
onExit: async () => {
|
||||||
await client.call("shutdown", undefined)
|
await client.call("shutdown", undefined)
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user