fix(codex): use supported safe-yolo approval policy (#1079)

Co-authored-by: NPUlrk <21106497+NPUlrk@users.noreply.github.com>
This commit is contained in:
lxql
2026-07-19 14:16:03 +08:00
committed by GitHub
co-authored by NPUlrk
parent 2623a51b0b
commit bfd8c7e3fd
4 changed files with 10 additions and 8 deletions
+1 -1
View File
@@ -247,7 +247,7 @@ describe('codexLocalLauncher', () => {
expect(harness.launches).toHaveLength(1); expect(harness.launches).toHaveLength(1);
expect(harness.launches[0]?.codexArgs).toEqual([ expect(harness.launches[0]?.codexArgs).toEqual([
'--ask-for-approval', '--ask-for-approval',
'on-failure', 'on-request',
'--sandbox', '--sandbox',
'workspace-write', 'workspace-write',
'--model', '--model',
+3 -3
View File
@@ -98,7 +98,7 @@ describe('appServerConfig', () => {
}); });
}); });
it('keeps on-failure approvals for safe-yolo threads', () => { it('keeps supported escalation approvals for safe-yolo threads', () => {
const params = buildThreadStartParams({ const params = buildThreadStartParams({
cwd: '/workspace/project', cwd: '/workspace/project',
mode: { permissionMode: 'safe-yolo', collaborationMode: 'default' }, mode: { permissionMode: 'safe-yolo', collaborationMode: 'default' },
@@ -106,7 +106,7 @@ describe('appServerConfig', () => {
}); });
expect(params.sandbox).toBe('workspace-write'); expect(params.sandbox).toBe('workspace-write');
expect(params.approvalPolicy).toBe('on-failure'); expect(params.approvalPolicy).toBe('on-request');
}); });
it('allows MCP elicitation without enabling sandbox prompts for read-only threads', () => { it('allows MCP elicitation without enabling sandbox prompts for read-only threads', () => {
@@ -460,7 +460,7 @@ describe('appServerConfig', () => {
cliOverrides: { sandbox: 'read-only', approvalPolicy: 'never' } cliOverrides: { sandbox: 'read-only', approvalPolicy: 'never' }
}); });
expect(params.approvalPolicy).toBe('on-failure'); expect(params.approvalPolicy).toBe('on-request');
expect(params.sandboxPolicy).toEqual({ type: 'workspaceWrite' }); expect(params.sandboxPolicy).toEqual({ type: 'workspaceWrite' });
expect(params.collaborationMode).toEqual({ expect(params.collaborationMode).toEqual({
mode: 'default', mode: 'default',
@@ -10,9 +10,9 @@ describe('resolveCodexPermissionModeConfig', () => {
}); });
}); });
it('keeps safe-yolo escalation on failure', () => { it('keeps safe-yolo escalation available with a supported approval policy', () => {
expect(resolveCodexPermissionModeConfig('safe-yolo')).toEqual({ expect(resolveCodexPermissionModeConfig('safe-yolo')).toEqual({
approvalPolicy: 'on-failure', approvalPolicy: 'on-request',
sandbox: 'workspace-write', sandbox: 'workspace-write',
sandboxPolicy: { type: 'workspaceWrite' } sandboxPolicy: { type: 'workspaceWrite' }
}); });
+4 -2
View File
@@ -26,8 +26,10 @@ export function resolveCodexPermissionModeConfig(mode: CodexPermissionMode): Cod
}; };
case 'safe-yolo': case 'safe-yolo':
return { return {
// Keep escalation available when the workspace-write sandbox blocks a command. // Current Codex versions reject the removed `on-failure` policy. Keep
approvalPolicy: 'on-failure', // escalation available through `on-request`; HAPI auto-approves these
// requests in safe-yolo mode.
approvalPolicy: 'on-request',
sandbox: 'workspace-write', sandbox: 'workspace-write',
sandboxPolicy: { type: 'workspaceWrite' } sandboxPolicy: { type: 'workspaceWrite' }
}; };