diff --git a/src/hooks/start-work/start-work-hook.ts b/src/hooks/start-work/start-work-hook.ts index 81ec85cc3..78d944682 100644 --- a/src/hooks/start-work/start-work-hook.ts +++ b/src/hooks/start-work/start-work-hook.ts @@ -64,7 +64,7 @@ function resolveWorktreeContext( } } -export function createStartWorkHook(ctx: PluginInput) { +export function createStartWorkHook(ctx: PluginInput, options?: { worktreeEnabled?: boolean }) { return { "chat.message": async (input: StartWorkHookInput, output: StartWorkHookOutput): Promise => { const parts = output.parts @@ -85,7 +85,10 @@ export function createStartWorkHook(ctx: PluginInput) { const timestamp = new Date().toISOString() const { planName: explicitPlanName, explicitWorktreePath } = parseUserRequest(promptText) - const { worktreePath, block: worktreeBlock } = resolveWorktreeContext(explicitWorktreePath) + const worktreeDisabled = options?.worktreeEnabled === false + const { worktreePath, block: worktreeBlock } = worktreeDisabled + ? { worktreePath: undefined, block: "" } + : resolveWorktreeContext(explicitWorktreePath) let contextInfo = "" @@ -106,7 +109,7 @@ The requested plan "${getPlanName(matchedPlan)}" has been completed. All ${progress.total} tasks are done. Create a new plan with: /plan "your task"` } else { if (existingState) clearBoulderState(ctx.directory) - const newState = createBoulderState(matchedPlan, sessionId, "atlas", worktreePath) + const newState = createBoulderState(matchedPlan, sessionId, "atlas", worktreeDisabled ? undefined : worktreePath) writeBoulderState(ctx.directory, newState) contextInfo = ` @@ -152,9 +155,9 @@ No incomplete plans available. Create a new plan with: /plan "your task"` const progress = getPlanProgress(existingState.active_plan) if (!progress.isComplete) { - const effectiveWorktree = worktreePath ?? existingState.worktree_path + const effectiveWorktree = worktreeDisabled ? undefined : (worktreePath ?? existingState.worktree_path) - if (worktreePath !== undefined) { + if (!worktreeDisabled && worktreePath !== undefined) { const updatedSessions = existingState.session_ids.includes(sessionId) ? existingState.session_ids : [...existingState.session_ids, sessionId] @@ -213,7 +216,7 @@ All ${plans.length} plan(s) are complete. Create a new plan with: /plan "your ta } else if (incompletePlans.length === 1) { const planPath = incompletePlans[0] const progress = getPlanProgress(planPath) - const newState = createBoulderState(planPath, sessionId, "atlas", worktreePath) + const newState = createBoulderState(planPath, sessionId, "atlas", worktreeDisabled ? undefined : worktreePath) writeBoulderState(ctx.directory, newState) contextInfo += ` diff --git a/src/plugin/hooks/create-session-hooks.ts b/src/plugin/hooks/create-session-hooks.ts index 42f62bf9e..1aaaaabf9 100644 --- a/src/plugin/hooks/create-session-hooks.ts +++ b/src/plugin/hooks/create-session-hooks.ts @@ -216,7 +216,7 @@ export function createSessionHooks(args: { : null const startWork = isHookEnabled("start-work") - ? safeHook("start-work", () => createStartWorkHook(ctx)) + ? safeHook("start-work", () => createStartWorkHook(ctx, { worktreeEnabled: pluginConfig.start_work?.worktree })) : null const prometheusMdOnly = isHookEnabled("prometheus-md-only")