add --title flag to opencode run (#3507)

This commit is contained in:
Aiden Cline
2025-10-28 13:32:36 -05:00
committed by GitHub
parent 1309ca7a81
commit 37380e1f94
3 changed files with 27 additions and 4 deletions

View File

@@ -78,6 +78,10 @@ export const RunCommand = cmd({
array: true,
describe: "file(s) to attach to message",
})
.option("title", {
type: "string",
describe: "title for the session (uses truncated prompt if no value provided)",
})
},
handler: async (args) => {
let message = args.message.join(" ")
@@ -143,7 +147,19 @@ export const RunCommand = cmd({
if (args.session) return Session.get(args.session)
return Session.create({})
const title = (() => {
if (args.title !== undefined) {
if (args.title === "") {
return message.slice(0, 50) + (message.length > 50 ? "..." : "")
}
return args.title
}
return undefined
})()
return Session.create({
title,
})
})()
if (!session) {

View File

@@ -23,11 +23,17 @@ import { Snapshot } from "@/snapshot"
export namespace Session {
const log = Log.create({ service: "session" })
const parentSessionTitlePrefix = "New session - "
const childSessionTitlePrefix = "Child session - "
const parentTitlePrefix = "New session - "
const childTitlePrefix = "Child session - "
function createDefaultTitle(isChild = false) {
return (isChild ? childSessionTitlePrefix : parentSessionTitlePrefix) + new Date().toISOString()
return (isChild ? childTitlePrefix : parentTitlePrefix) + new Date().toISOString()
}
export function isDefaultTitle(title: string) {
return new RegExp(
`^(${parentTitlePrefix}|${childTitlePrefix})\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$`,
).test(title)
}
export const Info = z

View File

@@ -1703,6 +1703,7 @@ export namespace SessionPrompt {
modelID: string
}) {
if (input.session.parentID) return
if (!Session.isDefaultTitle(input.session.title)) return
const isFirst =
input.history.filter((m) => m.info.role === "user" && !m.parts.every((p) => "synthetic" in p && p.synthetic))
.length === 1