(options?: {
planModeRequired?: boolean
permissionMode?: PermissionMode
})
| 36 | * @param options.permissionMode - Permission mode to propagate |
| 37 | */ |
| 38 | export function buildInheritedCliFlags(options?: { |
| 39 | planModeRequired?: boolean |
| 40 | permissionMode?: PermissionMode |
| 41 | }): string { |
| 42 | const flags: string[] = [] |
| 43 | const { planModeRequired, permissionMode } = options || {} |
| 44 | |
| 45 | // Propagate permission mode to teammates, but NOT if plan mode is required |
| 46 | // Plan mode takes precedence over bypass permissions for safety |
| 47 | if (planModeRequired) { |
| 48 | // Don't inherit bypass permissions when plan mode is required |
| 49 | } else if ( |
| 50 | permissionMode === 'bypassPermissions' || |
| 51 | getSessionBypassPermissionsMode() |
| 52 | ) { |
| 53 | flags.push('--dangerously-skip-permissions') |
| 54 | } else if (permissionMode === 'acceptEdits') { |
| 55 | flags.push('--permission-mode acceptEdits') |
| 56 | } |
| 57 | |
| 58 | // Propagate --model if explicitly set via CLI |
| 59 | const modelOverride = getMainLoopModelOverride() |
| 60 | if (modelOverride) { |
| 61 | flags.push(`--model ${quote([modelOverride])}`) |
| 62 | } |
| 63 | |
| 64 | // Propagate --settings if set via CLI |
| 65 | const settingsPath = getFlagSettingsPath() |
| 66 | if (settingsPath) { |
| 67 | flags.push(`--settings ${quote([settingsPath])}`) |
| 68 | } |
| 69 | |
| 70 | // Propagate --plugin-dir for each inline plugin |
| 71 | const inlinePlugins = getInlinePlugins() |
| 72 | for (const pluginDir of inlinePlugins) { |
| 73 | flags.push(`--plugin-dir ${quote([pluginDir])}`) |
| 74 | } |
| 75 | |
| 76 | // Propagate --teammate-mode so tmux teammates use the same mode as leader |
| 77 | const sessionMode = getTeammateModeFromSnapshot() |
| 78 | flags.push(`--teammate-mode ${sessionMode}`) |
| 79 | |
| 80 | // Propagate --chrome / --no-chrome if explicitly set on the CLI |
| 81 | const chromeFlagOverride = getChromeFlagOverride() |
| 82 | if (chromeFlagOverride === true) { |
| 83 | flags.push('--chrome') |
| 84 | } else if (chromeFlagOverride === false) { |
| 85 | flags.push('--no-chrome') |
| 86 | } |
| 87 | |
| 88 | return flags.join(' ') |
| 89 | } |
| 90 | |
| 91 | /** |
| 92 | * Environment variables that must be explicitly forwarded to tmux-spawned |
no test coverage detected