| import { feature } from 'bun:bundle' |
| import type { ToolPermissionContext } from '../../Tool.js' |
| import { logForDebugging } from '../debug.js' |
| import type { PermissionMode } from './PermissionMode.js' |
| import { |
| getAutoModeUnavailableReason, |
| isAutoModeGateEnabled, |
| transitionPermissionMode, |
| } from './permissionSetup.js' |
|
|
| |
| |
| |
| |
| |
| |
| function canCycleToAuto(ctx: ToolPermissionContext): boolean { |
| if (feature('TRANSCRIPT_CLASSIFIER')) { |
| const gateEnabled = isAutoModeGateEnabled() |
| const can = !!ctx.isAutoModeAvailable && gateEnabled |
| if (!can) { |
| logForDebugging( |
| `[auto-mode] canCycleToAuto=false: ctx.isAutoModeAvailable=${ctx.isAutoModeAvailable} isAutoModeGateEnabled=${gateEnabled} reason=${getAutoModeUnavailableReason()}`, |
| ) |
| } |
| return can |
| } |
| return false |
| } |
|
|
| |
| |
| |
| export function getNextPermissionMode( |
| toolPermissionContext: ToolPermissionContext, |
| _teamContext?: { leadAgentId: string }, |
| ): PermissionMode { |
| switch (toolPermissionContext.mode) { |
| case 'default': |
| |
| if (process.env.USER_TYPE === 'ant') { |
| if (toolPermissionContext.isBypassPermissionsModeAvailable) { |
| return 'bypassPermissions' |
| } |
| if (canCycleToAuto(toolPermissionContext)) { |
| return 'auto' |
| } |
| return 'default' |
| } |
| return 'acceptEdits' |
|
|
| case 'acceptEdits': |
| return 'plan' |
|
|
| case 'plan': |
| if (toolPermissionContext.isBypassPermissionsModeAvailable) { |
| return 'bypassPermissions' |
| } |
| if (canCycleToAuto(toolPermissionContext)) { |
| return 'auto' |
| } |
| return 'default' |
|
|
| case 'bypassPermissions': |
| if (canCycleToAuto(toolPermissionContext)) { |
| return 'auto' |
| } |
| return 'default' |
|
|
| case 'dontAsk': |
| |
| return 'default' |
|
|
|
|
| default: |
| |
| return 'default' |
| } |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| export function cyclePermissionMode( |
| toolPermissionContext: ToolPermissionContext, |
| teamContext?: { leadAgentId: string }, |
| ): { nextMode: PermissionMode; context: ToolPermissionContext } { |
| const nextMode = getNextPermissionMode(toolPermissionContext, teamContext) |
| return { |
| nextMode, |
| context: transitionPermissionMode( |
| toolPermissionContext.mode, |
| nextMode, |
| toolPermissionContext, |
| ), |
| } |
| } |
|
|