add --fork-session support to TUI command

- Add fork option to Args interface
- Add --fork-session flag to TUI command (thread.ts)
- Add validation that --fork-session requires --continue or --session
- Fork session before navigating when --fork-session is set
This commit is contained in:
Ariane Emory
2026-01-30 01:08:17 -05:00
parent f9366af423
commit c25420c72c
3 changed files with 33 additions and 5 deletions

View File

@@ -248,10 +248,18 @@ function App() {
local.model.set({ providerID, modelID }, { recent: true })
}
if (args.sessionID) {
route.navigate({
type: "session",
sessionID: args.sessionID,
})
if (args.fork) {
sdk.client.session.fork({ sessionID: args.sessionID }).then((result) => {
if (result.data?.id) {
route.navigate({ type: "session", sessionID: result.data.id })
}
})
} else {
route.navigate({
type: "session",
sessionID: args.sessionID,
})
}
}
})
})
@@ -265,7 +273,15 @@ function App() {
.find((x) => x.parentID === undefined)?.id
if (match) {
continued = true
route.navigate({ type: "session", sessionID: match })
if (args.fork) {
sdk.client.session.fork({ sessionID: match }).then((result) => {
if (result.data?.id) {
route.navigate({ type: "session", sessionID: result.data.id })
}
})
} else {
route.navigate({ type: "session", sessionID: match })
}
}
})

View File

@@ -6,6 +6,7 @@ export interface Args {
prompt?: string
continue?: boolean
sessionID?: string
fork?: boolean
}
export const { use: useArgs, provider: ArgsProvider } = createSimpleContext({

View File

@@ -64,6 +64,11 @@ export const TuiThreadCommand = cmd({
type: "string",
describe: "session id to continue",
})
.option("fork-session", {
alias: ["fork"],
describe: "fork the session before continuing (requires --continue or --session)",
type: "boolean",
})
.option("prompt", {
type: "string",
describe: "prompt to use",
@@ -73,6 +78,11 @@ export const TuiThreadCommand = cmd({
describe: "agent to use",
}),
handler: async (args) => {
if (args.forkSession && !args.continue && !args.session) {
UI.error("--fork-session requires --continue or --session")
process.exit(1)
}
// Resolve relative paths against PWD to preserve behavior when using --cwd flag
const baseCwd = process.env.PWD ?? process.cwd()
const cwd = args.project ? path.resolve(baseCwd, args.project) : process.cwd()
@@ -150,6 +160,7 @@ export const TuiThreadCommand = cmd({
agent: args.agent,
model: args.model,
prompt,
fork: args.forkSession,
},
onExit: async () => {
await client.call("shutdown", undefined)