diff --git a/src/resources/extensions/sf/commands/handlers/core.js b/src/resources/extensions/sf/commands/handlers/core.js index 2339b16cc..f5acdc19b 100644 --- a/src/resources/extensions/sf/commands/handlers/core.js +++ b/src/resources/extensions/sf/commands/handlers/core.js @@ -437,6 +437,13 @@ function handleModeCommand(args, ctx) { const name = parts[0].toLowerCase(); const preset = resolvePreset(name); if (preset) { + // If YOLO is active, exit it first so status and safe-git bypass are cleared + if (s.isYolo()) { + s.toggleYolo(); + if (ctx.settingsManager && ctx.settingsManager.toggleYOLO) { + ctx.settingsManager.toggleYOLO(); + } + } const prev = inferPresetName(s.getMode()) ?? s.getMode().workMode; s.setMode({ workMode: preset.workMode, diff --git a/src/resources/extensions/sf/steerable-autonomous-extension.js b/src/resources/extensions/sf/steerable-autonomous-extension.js index 084d06e64..c5ebce86e 100644 --- a/src/resources/extensions/sf/steerable-autonomous-extension.js +++ b/src/resources/extensions/sf/steerable-autonomous-extension.js @@ -49,6 +49,13 @@ export default function steerableAutonomousExtension(api) { // Outside autonomous: cycle through Ask → Plan → Build presets try { const s = getAutoSession(); + // If YOLO is active, exit it first so status and git bypass stay consistent + if (s.isYolo()) { + s.toggleYolo(); + if (ctx.settingsManager && ctx.settingsManager.toggleYOLO) { + ctx.settingsManager.toggleYOLO(); + } + } const current = inferPresetName(s.getMode()) ?? SF_MODE_PRESET_NAMES[0]; const idx = SF_MODE_PRESET_NAMES.indexOf(current); const nextName = SF_MODE_PRESET_NAMES[(idx + 1) % SF_MODE_PRESET_NAMES.length];