diff --git a/src/resources/extensions/sf/auto/session.js b/src/resources/extensions/sf/auto/session.js index eb7fc346e..8dd6db553 100644 --- a/src/resources/extensions/sf/auto/session.js +++ b/src/resources/extensions/sf/auto/session.js @@ -159,9 +159,10 @@ export class AutoSession { runControl = "manual"; /** * Current permission profile: restricted | normal | trusted | unrestricted. - * Defaults to "restricted" for safety. + * Defaults to "normal" — ask mode should be able to read files and run + * safe commands without permission prompts. Use /mode build for unrestricted. */ - permissionProfile = "restricted"; + permissionProfile = "normal"; /** * Current model mode: fast | smart | deep. * Defaults to "smart". @@ -355,7 +356,7 @@ export class AutoSession { // Mode state this.workMode = "chat"; this.runControl = "manual"; - this.permissionProfile = "restricted"; + this.permissionProfile = "normal"; this.modelMode = "smart"; this.surface = "tui"; this.modeUpdatedAt = null; diff --git a/src/resources/extensions/sf/commands/handlers/core.js b/src/resources/extensions/sf/commands/handlers/core.js index 552a1e96c..3780e7946 100644 --- a/src/resources/extensions/sf/commands/handlers/core.js +++ b/src/resources/extensions/sf/commands/handlers/core.js @@ -465,6 +465,7 @@ function handleModeCommand(args, ctx) { workMode: preset.workMode, runControl: preset.runControl, modelMode: preset.modelMode, + permissionProfile: preset.permissionProfile, }); ctx.ui.notify(`Mode: ${prev} → ${name} (${preset.description})`, "info"); return true; diff --git a/src/resources/extensions/sf/operating-model.js b/src/resources/extensions/sf/operating-model.js index 0e7f6a3df..ffd6b4b9c 100644 --- a/src/resources/extensions/sf/operating-model.js +++ b/src/resources/extensions/sf/operating-model.js @@ -106,6 +106,7 @@ export const SF_MODE_PRESETS = Object.freeze({ workMode: "chat", runControl: "manual", modelMode: "fast", + permissionProfile: "normal", }, plan: { label: "Plan", @@ -113,13 +114,15 @@ export const SF_MODE_PRESETS = Object.freeze({ workMode: "plan", runControl: "assisted", modelMode: "smart", + permissionProfile: "normal", }, build: { label: "Build", - description: "Execute autonomously — SF biases toward action", + description: "Execute autonomously — SF biases toward action, no permission prompts", workMode: "build", runControl: "autonomous", modelMode: "smart", + permissionProfile: "unrestricted", }, }); @@ -153,7 +156,8 @@ export function inferPresetName(mode) { if ( mode.workMode === preset.workMode && mode.runControl === preset.runControl && - mode.modelMode === preset.modelMode + mode.modelMode === preset.modelMode && + mode.permissionProfile === preset.permissionProfile ) { return name; } diff --git a/src/resources/extensions/sf/steerable-autonomous-extension.js b/src/resources/extensions/sf/steerable-autonomous-extension.js index c5ebce86e..585eb98a8 100644 --- a/src/resources/extensions/sf/steerable-autonomous-extension.js +++ b/src/resources/extensions/sf/steerable-autonomous-extension.js @@ -64,6 +64,7 @@ export default function steerableAutonomousExtension(api) { workMode: preset.workMode, runControl: preset.runControl, modelMode: preset.modelMode, + permissionProfile: preset.permissionProfile, }); ctx.ui.notify(`Mode → ${nextName} (${preset.description})`, "info"); } catch {