diff --git a/docs/reference/configuration.md b/docs/reference/configuration.md index 598a1371d0..d5d806e9f4 100644 --- a/docs/reference/configuration.md +++ b/docs/reference/configuration.md @@ -1860,8 +1860,8 @@ their corresponding top-level category object in your `settings.json` file. #### `admin` - **`admin.secureModeEnabled`** (boolean): - - **Description:** If true, disallows YOLO mode (wildcard policies) and "Always allow" options - from being used. + - **Description:** If true, disallows YOLO mode (wildcard policies) and + "Always allow" options from being used. - **Default:** `false` - **`admin.extensions.enabled`** (boolean): diff --git a/packages/a2a-server/src/agent/task-event-driven.test.ts b/packages/a2a-server/src/agent/task-event-driven.test.ts index 8dde98e977..b4fc9ea5bf 100644 --- a/packages/a2a-server/src/agent/task-event-driven.test.ts +++ b/packages/a2a-server/src/agent/task-event-driven.test.ts @@ -353,16 +353,21 @@ describe('Task Event-Driven Scheduler', () => { ); }); - it('should execute without confirmation in YOLO mode and not transition to input-required', async () => { - // Enable YOLO mode - const yoloConfig = createMockConfig({ + it('should execute without confirmation when wildcard policy is enabled and not transition to input-required', async () => { + // Enable wildcard policy + const wildcardConfig = createMockConfig({ isEventDrivenSchedulerEnabled: () => true, getAllowedTools: () => ['*'], }) as Config; - const yoloMessageBus = yoloConfig.messageBus; + const wildcardMessageBus = wildcardConfig.messageBus; // @ts-expect-error - Calling private constructor - const task = new Task('task-id', 'context-id', yoloConfig, mockEventBus); + const task = new Task( + 'task-id', + 'context-id', + wildcardConfig, + mockEventBus, + ); task.setTaskStateAndPublishUpdate = vi.fn(); const toolCall = { @@ -372,13 +377,13 @@ describe('Task Event-Driven Scheduler', () => { confirmationDetails: { type: 'info', title: 'test', prompt: 'test' }, }; - const handler = (yoloMessageBus.subscribe as Mock).mock.calls.find( + const handler = (wildcardMessageBus.subscribe as Mock).mock.calls.find( (call: unknown[]) => call[0] === MessageBusType.TOOL_CALLS_UPDATE, )?.[1]; handler({ type: MessageBusType.TOOL_CALLS_UPDATE, toolCalls: [toolCall] }); // Should NOT auto-publish ProceedOnce anymore, because PolicyEngine handles it directly - expect(yoloMessageBus.publish).not.toHaveBeenCalledWith( + expect(wildcardMessageBus.publish).not.toHaveBeenCalledWith( expect.objectContaining({ type: MessageBusType.TOOL_CONFIRMATION_RESPONSE, }), diff --git a/packages/a2a-server/src/http/app.test.ts b/packages/a2a-server/src/http/app.test.ts index 4de4a905b0..c874032074 100644 --- a/packages/a2a-server/src/http/app.test.ts +++ b/packages/a2a-server/src/http/app.test.ts @@ -407,8 +407,8 @@ describe('E2E Tests', () => { expect(events.length).toBe(7); }); - it('should handle multiple tool calls sequentially in YOLO mode', async () => { - // Set YOLO mode to auto-approve tools and test sequential execution. + it('should handle multiple tool calls sequentially with wildcard policy', async () => { + // Set wildcard policy to auto-approve tools and test sequential execution. getAllowedToolsSpy.mockReturnValue(['*']); // First call yields the tool request @@ -680,15 +680,15 @@ describe('E2E Tests', () => { expect(events.length).toBe(10); }); - it('should bypass tool approval in YOLO mode', async () => { + it('should bypass tool approval with wildcard policy', async () => { // First call yields the tool request sendMessageStreamSpy.mockImplementationOnce(async function* () { yield* [ { type: GeminiEventType.ToolCallRequest, value: { - callId: 'test-call-id-yolo', - name: 'test-tool-yolo', + callId: 'test-call-id-wildcard', + name: 'test-tool-wildcard', args: {}, }, }, @@ -699,12 +699,12 @@ describe('E2E Tests', () => { yield* [{ type: 'content', value: 'Tool executed successfully.' }]; }); - // Set approval mode to yolo + // Set approval mode to wildcard getAllowedToolsSpy.mockReturnValue(['*']); const mockTool = new MockTool({ - name: 'test-tool-yolo', - displayName: 'Test Tool YOLO', + name: 'test-tool-wildcard', + displayName: 'Test Tool WILDCARD', execute: vi.fn().mockResolvedValue({ llmContent: 'Tool executed successfully.', returnDisplay: 'Tool executed successfully.', @@ -722,8 +722,8 @@ describe('E2E Tests', () => { .post('/') .send( createStreamMessageRequest( - 'run a tool in yolo mode', - 'a2a-yolo-mode-test-message', + 'run a tool in wildcard mode', + 'a2a-wildcard-mode-test-message', ), ) .set('Content-Type', 'application/json') @@ -746,7 +746,7 @@ describe('E2E Tests', () => { { data: { status: 'validating', - request: { callId: 'test-call-id-yolo' }, + request: { callId: 'test-call-id-wildcard' }, }, }, ]); @@ -760,7 +760,7 @@ describe('E2E Tests', () => { { data: { status: 'scheduled', - request: { callId: 'test-call-id-yolo' }, + request: { callId: 'test-call-id-wildcard' }, }, }, ]); @@ -774,7 +774,7 @@ describe('E2E Tests', () => { { data: { status: 'executing', - request: { callId: 'test-call-id-yolo' }, + request: { callId: 'test-call-id-wildcard' }, }, }, ]); @@ -788,7 +788,7 @@ describe('E2E Tests', () => { { data: { status: 'success', - request: { callId: 'test-call-id-yolo' }, + request: { callId: 'test-call-id-wildcard' }, }, }, ]); diff --git a/packages/cli/src/commands/extensions/examples/policies/policies/policies.toml b/packages/cli/src/commands/extensions/examples/policies/policies/policies.toml index 225627c59b..0d27721fc2 100644 --- a/packages/cli/src/commands/extensions/examples/policies/policies/policies.toml +++ b/packages/cli/src/commands/extensions/examples/policies/policies/policies.toml @@ -1,7 +1,7 @@ # Example Policy Rules for Gemini CLI Extension # # Extensions run in Tier 2 (Extension Tier). -# Security Note: 'allow' decisions and 'yolo' mode configurations are ignored. +# Security Note: 'allow' decisions and wildcard policies are ignored. # Rule: Always ask the user before running a specific dangerous shell command. [[rule]] diff --git a/packages/cli/src/config/config.test.ts b/packages/cli/src/config/config.test.ts index d366e10261..0da98c67de 100644 --- a/packages/cli/src/config/config.test.ts +++ b/packages/cli/src/config/config.test.ts @@ -158,7 +158,7 @@ vi.mock('@google/gemini-cli-core', async () => { ), getAdminErrorMessage: vi.fn( (_feature) => - `YOLO mode is disabled by your administrator. To enable it, please request an update to the settings at: https://goo.gle/manage-gemini-cli`, + `Wildcard policies are disabled by your administrator. To enable it, please request an update to the settings at: https://goo.gle/manage-gemini-cli`, ), isHeadlessMode: vi.fn((opts) => { if (process.env['VITEST'] === 'true') { @@ -1445,7 +1445,7 @@ describe('Approval mode tool exclusion logic', () => { expect(excludedTools).toContain(ASK_USER_TOOL_NAME); }); - it('should throw an error if YOLO mode is attempted when disableYoloMode is true', async () => { + it('should throw an error if wildcard policy is attempted when disableYoloMode is true', async () => { process.argv = ['node', 'script.js', '--yolo']; const argv = await parseArguments(createTestMergedSettings()); const settings = createTestMergedSettings({ @@ -1455,7 +1455,7 @@ describe('Approval mode tool exclusion logic', () => { }); await expect(loadCliConfig(settings, 'test-session', argv)).rejects.toThrow( - 'YOLO mode is disabled by your administrator. To enable it, please request an update to the settings at: https://goo.gle/manage-gemini-cli', + 'Wildcard policies are disabled by your administrator. To enable it, please request an update to the settings at: https://goo.gle/manage-gemini-cli', ); }); @@ -1472,7 +1472,7 @@ describe('Approval mode tool exclusion logic', () => { await expect( loadCliConfig(settings, 'test-session', invalidArgv as CliArgs), ).rejects.toThrow( - 'Invalid approval mode: invalid_mode. Valid values are: auto_edit, plan, default (yolo is mapped to allowed-tools)', + 'Invalid approval mode: invalid_mode. Valid values are: auto_edit, plan, default ', ); }); @@ -2332,7 +2332,7 @@ describe('loadCliConfig tool exclusions', () => { vi.restoreAllMocks(); }); - it('should not exclude interactive tools in interactive mode without YOLO', async () => { + it('should not exclude interactive tools in interactive mode without wildcard', async () => { process.stdin.isTTY = true; process.argv = ['node', 'script.js']; const argv = await parseArguments(createTestMergedSettings()); @@ -2347,7 +2347,7 @@ describe('loadCliConfig tool exclusions', () => { expect(config.getExcludeTools()).not.toContain('ask_user'); }); - it('should not exclude interactive tools in interactive mode with YOLO', async () => { + it('should not exclude interactive tools in interactive mode with wildcard', async () => { process.stdin.isTTY = true; process.argv = ['node', 'script.js', '--yolo']; const argv = await parseArguments(createTestMergedSettings()); @@ -2362,7 +2362,7 @@ describe('loadCliConfig tool exclusions', () => { expect(config.getExcludeTools()).not.toContain('ask_user'); }); - it('should exclude interactive tools in non-interactive mode without YOLO', async () => { + it('should exclude interactive tools in non-interactive mode without wildcard', async () => { process.stdin.isTTY = false; process.argv = ['node', 'script.js', '-p', 'test']; const argv = await parseArguments(createTestMergedSettings()); @@ -2377,7 +2377,7 @@ describe('loadCliConfig tool exclusions', () => { expect(config.getExcludeTools()).toContain('ask_user'); }); - it('should exclude only ask_user in non-interactive mode with YOLO', async () => { + it('should exclude only ask_user in non-interactive mode with wildcard', async () => { process.stdin.isTTY = false; process.argv = ['node', 'script.js', '-p', 'test', '--yolo']; const argv = await parseArguments(createTestMergedSettings()); @@ -2742,7 +2742,7 @@ describe('loadCliConfig approval mode', () => { expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.DEFAULT); }); - it('should set YOLO approval mode when --yolo flag is used', async () => { + it('should set wildcard allowed tools when --yolo flag is used', async () => { process.argv = ['node', 'script.js', '--yolo']; const argv = await parseArguments(createTestMergedSettings()); const config = await loadCliConfig( @@ -2751,9 +2751,10 @@ describe('loadCliConfig approval mode', () => { argv, ); expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.DEFAULT); + expect(config.getAllowedTools()).toEqual(['*']); }); - it('should set YOLO approval mode when -y flag is used', async () => { + it('should set wildcard allowed tools when -y flag is used', async () => { process.argv = ['node', 'script.js', '-y']; const argv = await parseArguments(createTestMergedSettings()); const config = await loadCliConfig( @@ -2762,6 +2763,7 @@ describe('loadCliConfig approval mode', () => { argv, ); expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.DEFAULT); + expect(config.getAllowedTools()).toEqual(['*']); }); it('should set DEFAULT approval mode when --approval-mode=default', async () => { @@ -2786,7 +2788,7 @@ describe('loadCliConfig approval mode', () => { expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.AUTO_EDIT); }); - it('should set YOLO approval mode when --approval-mode=yolo', async () => { + it('should set wildcard allowed tools when --approval-mode=yolo', async () => { process.argv = ['node', 'script.js', '--approval-mode', 'yolo']; const argv = await parseArguments(createTestMergedSettings()); const config = await loadCliConfig( @@ -2795,6 +2797,7 @@ describe('loadCliConfig approval mode', () => { argv, ); expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.DEFAULT); + expect(config.getAllowedTools()).toEqual(['*']); }); it('should prioritize --approval-mode over --yolo when both would be valid (but validation prevents this)', async () => { @@ -2821,6 +2824,7 @@ describe('loadCliConfig approval mode', () => { argv, ); expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.DEFAULT); + expect(config.getAllowedTools()).toEqual(['*']); }); it('should set Plan approval mode when --approval-mode=plan is used and plan is enabled', async () => { @@ -3629,14 +3633,25 @@ describe('loadCliConfig disableYoloMode', () => { expect(config.getApprovalMode()).toBe(ApprovalMode.AUTO_EDIT); }); - it('should throw if YOLO mode is attempted when disableYoloMode is true', async () => { + it('should throw if wildcard policy is attempted when disableYoloMode is true', async () => { process.argv = ['node', 'script.js', '--yolo']; const argv = await parseArguments(createTestMergedSettings()); const settings = createTestMergedSettings({ security: { disableYoloMode: true }, }); await expect(loadCliConfig(settings, 'test-session', argv)).rejects.toThrow( - 'YOLO mode is disabled by your administrator. To enable it, please request an update to the settings at: https://goo.gle/manage-gemini-cli', + 'Wildcard policies are disabled by your administrator. To enable it, please request an update to the settings at: https://goo.gle/manage-gemini-cli', + ); + }); + + it('should throw if wildcard tools are requested when disableYoloMode is true', async () => { + process.argv = ['node', 'script.js', '--allowed-tools=*']; + const argv = await parseArguments(createTestMergedSettings()); + const settings = createTestMergedSettings({ + security: { disableYoloMode: true }, + }); + await expect(loadCliConfig(settings, 'test-session', argv)).rejects.toThrow( + 'Wildcard policies are disabled by your administrator. To enable it, please request an update to the settings at: https://goo.gle/manage-gemini-cli', ); }); }); @@ -3658,7 +3673,7 @@ describe('loadCliConfig secureModeEnabled', () => { vi.restoreAllMocks(); }); - it('should throw an error if YOLO mode is attempted when secureModeEnabled is true', async () => { + it('should throw an error if wildcard policy is attempted when secureModeEnabled is true', async () => { process.argv = ['node', 'script.js', '--yolo']; const argv = await parseArguments(createTestMergedSettings()); const settings = createTestMergedSettings({ @@ -3668,7 +3683,7 @@ describe('loadCliConfig secureModeEnabled', () => { }); await expect(loadCliConfig(settings, 'test-session', argv)).rejects.toThrow( - 'YOLO mode is disabled by your administrator. To enable it, please request an update to the settings at: https://goo.gle/manage-gemini-cli', + 'Wildcard policies are disabled by your administrator. To enable it, please request an update to the settings at: https://goo.gle/manage-gemini-cli', ); }); @@ -3682,7 +3697,21 @@ describe('loadCliConfig secureModeEnabled', () => { }); await expect(loadCliConfig(settings, 'test-session', argv)).rejects.toThrow( - 'YOLO mode is disabled by your administrator. To enable it, please request an update to the settings at: https://goo.gle/manage-gemini-cli', + 'Wildcard policies are disabled by your administrator. To enable it, please request an update to the settings at: https://goo.gle/manage-gemini-cli', + ); + }); + + it('should throw an error if wildcard tools are requested when secureModeEnabled is true', async () => { + process.argv = ['node', 'script.js', '--allowed-tools=*']; + const argv = await parseArguments(createTestMergedSettings()); + const settings = createTestMergedSettings({ + admin: { + secureModeEnabled: true, + }, + }); + + await expect(loadCliConfig(settings, 'test-session', argv)).rejects.toThrow( + 'Wildcard policies are disabled by your administrator. To enable it, please request an update to the settings at: https://goo.gle/manage-gemini-cli', ); }); diff --git a/packages/cli/src/config/config.ts b/packages/cli/src/config/config.ts index feae1082c0..c535730a4e 100755 --- a/packages/cli/src/config/config.ts +++ b/packages/cli/src/config/config.ts @@ -687,7 +687,7 @@ export async function loadCliConfig( break; default: throw new Error( - `Invalid approval mode: ${rawApprovalMode}. Valid values are: auto_edit, plan, default (yolo is mapped to allowed-tools)`, + `Invalid approval mode: ${rawApprovalMode}. Valid values are: auto_edit, plan, default`, ); } } else { @@ -700,20 +700,20 @@ export async function loadCliConfig( if (isYoloRequested || allowedTools.includes('*')) { if (settings.admin?.secureModeEnabled) { debugLogger.error( - 'YOLO mode (wildcard policies) are disabled by "secureModeEnabled" setting.', + 'Wildcard policies are disabled by "secureModeEnabled" setting.', ); } else { debugLogger.error( - 'YOLO mode (wildcard policies) are disabled by the "disableYolo" setting.', + 'Wildcard policies are disabled by the "disableYolo" setting.', ); } throw new FatalConfigError( - getAdminErrorMessage('YOLO mode', undefined /* config */), + getAdminErrorMessage('Wildcard policies', undefined /* config */), ); } } else if (isYoloRequested) { debugLogger.warn( - 'YOLO mode is enabled via flag or setting. All tool calls will be automatically approved by a wildcard policy.', + 'Wildcard policy is enabled via flag or setting. All tool calls will be automatically approved.', ); if (!allowedTools.includes('*')) { allowedTools = [...allowedTools, '*']; diff --git a/packages/cli/src/config/settingsSchema.ts b/packages/cli/src/config/settingsSchema.ts index 9b62c9d93f..919e8e1df1 100644 --- a/packages/cli/src/config/settingsSchema.ts +++ b/packages/cli/src/config/settingsSchema.ts @@ -2626,7 +2626,7 @@ const SETTINGS_SCHEMA = { requiresRestart: false, default: false, description: - 'If true, disallows YOLO mode and "Always allow" options from being used.', + 'If true, disallows YOLO mode (wildcard policies) and "Always allow" options from being used.', showInDialog: false, mergeStrategy: MergeStrategy.REPLACE, }, diff --git a/packages/cli/src/ui/components/ApprovalModeIndicator.test.tsx b/packages/cli/src/ui/components/ApprovalModeIndicator.test.tsx index 853986417d..07ce90e3be 100644 --- a/packages/cli/src/ui/components/ApprovalModeIndicator.test.tsx +++ b/packages/cli/src/ui/components/ApprovalModeIndicator.test.tsx @@ -38,7 +38,7 @@ describe('ApprovalModeIndicator', () => { const { lastFrame, waitUntilReady } = await render( , ); expect(lastFrame()).toMatchSnapshot(); diff --git a/packages/cli/src/ui/components/ApprovalModeIndicator.tsx b/packages/cli/src/ui/components/ApprovalModeIndicator.tsx index 6c39f3e64c..37cfb4fd21 100644 --- a/packages/cli/src/ui/components/ApprovalModeIndicator.tsx +++ b/packages/cli/src/ui/components/ApprovalModeIndicator.tsx @@ -14,13 +14,13 @@ import { Command } from '../key/keyBindings.js'; interface ApprovalModeIndicatorProps { approvalMode: ApprovalMode; allowPlanMode?: boolean; - isYoloMode?: boolean; + isWildcardPolicyEnabled?: boolean; } export const ApprovalModeIndicator: React.FC = ({ approvalMode, allowPlanMode, - isYoloMode, + isWildcardPolicyEnabled, }) => { let textColor = ''; let textContent = ''; @@ -28,9 +28,9 @@ export const ApprovalModeIndicator: React.FC = ({ const cycleHint = formatCommand(Command.CYCLE_APPROVAL_MODE); - if (isYoloMode) { + if (isWildcardPolicyEnabled) { textColor = theme.status.error; - textContent = 'YOLO'; + textContent = 'WILDCARD'; subText = ''; } else { switch (approvalMode) { diff --git a/packages/cli/src/ui/components/Composer.test.tsx b/packages/cli/src/ui/components/Composer.test.tsx index 31a398bb12..aef865ccd6 100644 --- a/packages/cli/src/ui/components/Composer.test.tsx +++ b/packages/cli/src/ui/components/Composer.test.tsx @@ -640,7 +640,7 @@ describe('Composer', () => { }, ); - it('shows ApprovalModeIndicator when YOLO mode is active and shell mode is inactive', async () => { + it('shows ApprovalModeIndicator when wildcard policy is active and shell mode is inactive', async () => { const config = createMockConfig({ getAllowedTools: vi.fn(() => ['*']), }); @@ -703,7 +703,7 @@ describe('Composer', () => { }, ); - it('shows minimal mode badge "YOLO" when clean UI details are hidden and YOLO mode is active', async () => { + it('shows minimal mode badge "WILDCARD" when clean UI details are hidden and wildcard policy is active', async () => { const config = createMockConfig({ getAllowedTools: vi.fn(() => ['*']), }); @@ -713,7 +713,7 @@ describe('Composer', () => { }); const { lastFrame } = await renderComposer(uiState, undefined, config); - expect(lastFrame()).toContain('YOLO'); + expect(lastFrame()).toContain('WILDCARD'); }); it('hides minimal mode badge while loading in clean mode', async () => { diff --git a/packages/cli/src/ui/components/Composer.tsx b/packages/cli/src/ui/components/Composer.tsx index 6e5c059668..d281801d50 100644 --- a/packages/cli/src/ui/components/Composer.tsx +++ b/packages/cli/src/ui/components/Composer.tsx @@ -77,7 +77,7 @@ export const Composer = ({ isFocused = true }: { isFocused?: boolean }) => { const hasToast = shouldShowToast(uiState); const hideUiDetailsForSuggestions = suggestionsVisible && suggestionsPosition === 'above'; - const isYoloMode = config.getAllowedTools()?.includes('*'); + const isWildcardPolicyEnabled = config.getAllowedTools()?.includes('*'); // Mini Mode VIP Flags (Pure Content Triggers) const showMinimalToast = hasToast; @@ -148,7 +148,7 @@ export const Composer = ({ isFocused = true }: { isFocused?: boolean }) => { shellModeActive={uiState.shellModeActive} setShellModeActive={uiActions.setShellModeActive} approvalMode={uiState.showApprovalModeIndicator} - isYoloMode={isYoloMode} + isWildcardPolicyEnabled={isWildcardPolicyEnabled} onEscapePromptChange={uiActions.onEscapePromptChange} focus={isFocused} vimHandleInput={uiActions.vimHandleInput} diff --git a/packages/cli/src/ui/components/InputPrompt.tsx b/packages/cli/src/ui/components/InputPrompt.tsx index 130cd49bf7..8823113881 100644 --- a/packages/cli/src/ui/components/InputPrompt.tsx +++ b/packages/cli/src/ui/components/InputPrompt.tsx @@ -110,7 +110,7 @@ export interface InputPromptProps { shellModeActive: boolean; setShellModeActive: (value: boolean) => void; approvalMode: ApprovalMode; - isYoloMode?: boolean; + isWildcardPolicyEnabled?: boolean; onEscapePromptChange?: (showPrompt: boolean) => void; onSuggestionsVisibilityChange?: (visible: boolean) => void; vimHandleInput?: (key: Key) => boolean; @@ -206,7 +206,7 @@ export const InputPrompt: React.FC = ({ shellModeActive, setShellModeActive, approvalMode, - isYoloMode, + isWildcardPolicyEnabled, onEscapePromptChange, onSuggestionsVisibilityChange, vimHandleInput, @@ -1491,7 +1491,7 @@ export const InputPrompt: React.FC = ({ const showAutoAcceptStyling = !shellModeActive && approvalMode === ApprovalMode.AUTO_EDIT; - const showYoloStyling = !shellModeActive && isYoloMode; + const showWildcardStyling = !shellModeActive && isWildcardPolicyEnabled; const showPlanStyling = !shellModeActive && approvalMode === ApprovalMode.PLAN; @@ -1500,9 +1500,9 @@ export const InputPrompt: React.FC = ({ if (shellModeActive) { statusColor = theme.ui.symbol; statusText = 'Shell mode'; - } else if (showYoloStyling) { + } else if (showWildcardStyling) { statusColor = theme.status.error; - statusText = 'YOLO mode'; + statusText = 'Wildcard policy'; } else if (showPlanStyling) { statusColor = theme.status.success; statusText = 'Plan mode'; @@ -1590,7 +1590,7 @@ export const InputPrompt: React.FC = ({ ) ) : commandSearchActive ? ( (r:) - ) : showYoloStyling ? ( + ) : showWildcardStyling ? ( '*' ) : ( '>' diff --git a/packages/cli/src/ui/components/__snapshots__/ApprovalModeIndicator.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/ApprovalModeIndicator.test.tsx.snap index 4e1c6efcd6..93cb93a386 100644 --- a/packages/cli/src/ui/components/__snapshots__/ApprovalModeIndicator.test.tsx.snap +++ b/packages/cli/src/ui/components/__snapshots__/ApprovalModeIndicator.test.tsx.snap @@ -26,6 +26,6 @@ exports[`ApprovalModeIndicator > renders correctly for PLAN mode 1`] = ` `; exports[`ApprovalModeIndicator > renders correctly for YOLO mode 1`] = ` -"YOLO +"WILDCARD " `; diff --git a/packages/core/src/core/prompts.test.ts b/packages/core/src/core/prompts.test.ts index 57cab1247b..608757bbdc 100644 --- a/packages/core/src/core/prompts.test.ts +++ b/packages/core/src/core/prompts.test.ts @@ -599,27 +599,27 @@ describe('Core System Prompt (prompts.ts)', () => { }); }); - it('should include YOLO mode instructions in interactive mode', () => { + it('should include wildcard policy instructions in interactive mode', () => { vi.mocked(mockConfig.getAllowedTools).mockReturnValue(['*']); vi.mocked(mockConfig.isInteractive).mockReturnValue(true); const prompt = getCoreSystemPrompt(mockConfig); - expect(prompt).toContain('# Autonomous Mode (YOLO)'); + expect(prompt).toContain('# Autonomous Mode (Wildcard Policy)'); expect(prompt).toContain('Only use the `ask_user` tool if'); }); - it('should NOT include YOLO mode instructions in non-interactive mode', () => { + it('should NOT include wildcard policy instructions in non-interactive mode', () => { vi.mocked(mockConfig.getAllowedTools).mockReturnValue(['*']); vi.mocked(mockConfig.isInteractive).mockReturnValue(false); const prompt = getCoreSystemPrompt(mockConfig); - expect(prompt).not.toContain('# Autonomous Mode (YOLO)'); + expect(prompt).not.toContain('# Autonomous Mode (Wildcard Policy)'); }); - it('should NOT include YOLO mode instructions for DEFAULT mode', () => { + it('should NOT include wildcard policy instructions for DEFAULT mode', () => { vi.mocked(mockConfig.getApprovalMode).mockReturnValue( ApprovalMode.DEFAULT, ); const prompt = getCoreSystemPrompt(mockConfig); - expect(prompt).not.toContain('# Autonomous Mode (YOLO)'); + expect(prompt).not.toContain('# Autonomous Mode (Wildcard Policy)'); }); }); diff --git a/packages/core/src/policy/types.ts b/packages/core/src/policy/types.ts index 46b07d8ce3..975ba3fb86 100644 --- a/packages/core/src/policy/types.ts +++ b/packages/core/src/policy/types.ts @@ -359,7 +359,7 @@ export const ALWAYS_ALLOW_PRIORITY_OFFSET = ALWAYS_ALLOW_PRIORITY_FRACTION / 1000; /** - * Priority for the YOLO "allow all" rule. - * Matches the raw priority used in yolo.toml. + * Priority for the wildcard "allow all" rule. + * Matches the raw priority previously used for the wildcard allow all override. */ -export const PRIORITY_YOLO_ALLOW_ALL = 998; +export const PRIORITY_WILDCARD_ALLOW_ALL = 998; diff --git a/packages/core/src/prompts/snippets.legacy.ts b/packages/core/src/prompts/snippets.legacy.ts index 4fea88937b..f980979424 100644 --- a/packages/core/src/prompts/snippets.legacy.ts +++ b/packages/core/src/prompts/snippets.legacy.ts @@ -331,7 +331,7 @@ You are running outside of a sandbox container, directly on the user's system. F export function renderInteractiveYoloMode(enabled?: boolean): string { if (!enabled) return ''; return ` -# Autonomous Mode (YOLO) +# Autonomous Mode (Wildcard Policy) You are operating in **autonomous mode**. The user has requested minimal interruption. diff --git a/packages/core/src/prompts/snippets.ts b/packages/core/src/prompts/snippets.ts index 5440583419..5c3bcc956f 100644 --- a/packages/core/src/prompts/snippets.ts +++ b/packages/core/src/prompts/snippets.ts @@ -444,7 +444,7 @@ export function renderSandbox(options?: SandboxOptions): string { export function renderInteractiveYoloMode(enabled?: boolean): string { if (!enabled) return ''; return ` -# Autonomous Mode (YOLO) +# Autonomous Mode (Wildcard Policy) You are operating in **autonomous mode**. The user has requested minimal interruption. diff --git a/schemas/settings.schema.json b/schemas/settings.schema.json index fd4fff0036..98dde1d066 100644 --- a/schemas/settings.schema.json +++ b/schemas/settings.schema.json @@ -3251,8 +3251,8 @@ "properties": { "secureModeEnabled": { "title": "Secure Mode Enabled", - "description": "If true, disallows YOLO mode and \"Always allow\" options from being used.", - "markdownDescription": "If true, disallows YOLO mode and \"Always allow\" options from being used.\n\n- Category: `Admin`\n- Requires restart: `no`\n- Default: `false`", + "description": "If true, disallows YOLO mode (wildcard policies) and \"Always allow\" options from being used.", + "markdownDescription": "If true, disallows YOLO mode (wildcard policies) and \"Always allow\" options from being used.\n\n- Category: `Admin`\n- Requires restart: `no`\n- Default: `false`", "default": false, "type": "boolean" },