fix(chat): enable draft auto-accept before first message (#2045)

* fix(chat): enable draft auto-accept before first message

* fix(test): use supported bun assertions

* fix(chat): apply draft auto-accept before session switch

---------

Co-authored-by: bashrusakh <bashrusakh@users.noreply.github.com>
This commit is contained in:
Leonid
2026-07-11 15:15:02 +03:00
committed by GitHub
co-authored by bashrusakh
parent 0242765bc8
commit 9bfc5bf0be
4 changed files with 435 additions and 15 deletions
+19
View File
@@ -195,6 +195,7 @@ export type NewSessionDraftState = {
open: boolean
selectedProjectId?: string | null
directoryOverride: string | null
permissionAutoAcceptEnabled?: boolean
pendingWorktreeRequestId?: string | null
bootstrapPendingDirectory?: string | null
preserveDirectoryOverride?: boolean
@@ -251,6 +252,7 @@ export type SessionUIState = {
closeNewSessionDraft: () => void
setNewSessionDraftTarget: (target: { projectId?: string | null; selectedProjectId?: string | null; directoryOverride?: string | null }, options?: { force?: boolean }) => void
setDraftPreserveDirectoryOverride: (value: boolean) => void
setDraftPermissionAutoAcceptEnabled: (enabled: boolean) => void
acknowledgeSessionAbort: (sessionId: string) => void
clearAbortPrompt: () => void
armAbortPrompt: (durationMs?: number) => number | null
@@ -446,6 +448,7 @@ export async function materializeOpenDraftSession(selection: {
const store = useSessionUIStore.getState()
const draft = store.newSessionDraft
if (!draft?.open) return null
const draftPermissionAutoAcceptEnabled = draft.permissionAutoAcceptEnabled === true
const trimmedAgent = typeof selection.agent === "string" && selection.agent.trim().length > 0
? selection.agent.trim()
@@ -485,6 +488,15 @@ export async function materializeOpenDraftSession(selection: {
useSelectionStore.getState().saveAgentModelVariantForSession(created.id, effectiveDraftAgent, selection.providerID, selection.modelID, selection.variant)
}
if (draftPermissionAutoAcceptEnabled) {
try {
const { usePermissionStore } = await import("@/stores/permissionStore")
await usePermissionStore.getState().setSessionAutoAccept(created.id, true)
} catch (error) {
console.warn("Failed to apply draft permission auto-accept to new session:", error)
}
}
store.initializeNewOpenChamberSession(created.id, configState.agents ?? [])
store.setCurrentSession(created.id, createdDirectory)
@@ -732,6 +744,7 @@ export const useSessionUIStore = create<SessionUIState>()((set, get) => ({
open: true,
selectedProjectId: selectedProject?.id ?? null,
directoryOverride: directory,
permissionAutoAcceptEnabled: options?.permissionAutoAcceptEnabled === true,
pendingWorktreeRequestId: options?.pendingWorktreeRequestId ?? null,
bootstrapPendingDirectory: normalizePath(options?.bootstrapPendingDirectory ?? null),
preserveDirectoryOverride: options?.preserveDirectoryOverride === true,
@@ -827,6 +840,12 @@ export const useSessionUIStore = create<SessionUIState>()((set, get) => ({
return { newSessionDraft: { ...s.newSessionDraft, preserveDirectoryOverride: value } }
}),
setDraftPermissionAutoAcceptEnabled: (enabled) =>
set((s) => {
if (!s.newSessionDraft?.open) return s
return { newSessionDraft: { ...s.newSessionDraft, permissionAutoAcceptEnabled: enabled } }
}),
acknowledgeSessionAbort: (sessionId) =>
set((s) => {
const flags = new Map(s.sessionAbortFlags)