38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
import * as vm from "../vm.ts"
|
|
import * as state from "../state.ts"
|
|
import { spinner } from "../spinner.ts"
|
|
import { renderMarkdown } from "../markdown.ts"
|
|
import { requireSession, saveChanges } from "./helpers.ts"
|
|
|
|
export async function action(
|
|
branch: string,
|
|
prompt: string | undefined,
|
|
opts: { print?: string; save?: boolean },
|
|
) {
|
|
const { root, session } = await requireSession(branch)
|
|
|
|
const effectivePrompt = opts.print || prompt
|
|
if (effectivePrompt) {
|
|
await state.setSession(root, { ...session, prompt: effectivePrompt })
|
|
}
|
|
|
|
const spin = spinner("Starting container", branch)
|
|
await vm.ensure((msg) => { spin.text = msg })
|
|
|
|
if (opts.print) {
|
|
spin.text = "Running prompt…"
|
|
const output = await vm.claude(session.worktree, { prompt, print: opts.print, continue: true })
|
|
if (output) {
|
|
spin.stop()
|
|
process.stdout.write(renderMarkdown(output) + "\n")
|
|
} else {
|
|
spin.succeed("Done")
|
|
}
|
|
} else {
|
|
spin.succeed("Session ready")
|
|
await vm.claude(session.worktree, { prompt, print: opts.print, continue: true })
|
|
}
|
|
|
|
if (opts.save !== false) await saveChanges(session.worktree, branch)
|
|
}
|