mirror of
https://github.com/claude-code-best/claude-code.git
synced 2026-06-18 14:25:51 +00:00
feat: 正式启用 auto mode (#307)
* fix: 修复settings.json内存状态溢出的问题 * fix: 修复auto mode gate check未处理的promise rejection 在 bypassPermissionsKillswitch.ts 的 useKickOffCheckAndDisableAutoModeIfNeeded 中,void fire-and-forget 调用缺少 .catch() 处理,导致 verifyAutoModeGateAccess 失败时产生 unhandled promise rejection。同时移除 permissionSetup.ts 中冗余的 null check。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: 开放 auto mode 和 bypass mode 给所有用户 通过 Shift+Tab 统一循环:default → acceptEdits → plan → auto → bypassPermissions → default - 移除 USER_TYPE 分支判断,所有用户使用同一循环路径 - isBypassPermissionsModeAvailable 始终为 true - isAutoModeAvailable 初始化直接为 true - 移除 AutoModeOptInDialog 确认流程 - 简化 isAutoModeGateEnabled 仅保留快模式熔断器 - 简化 verifyAutoModeGateAccess 仅检查快模式 - 移除 GrowthBook/Statsig 远程门控 - bypass permissions killswitch 改为 no-op - 新增 24 个测试覆盖循环逻辑和门控不变量 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: 为sideQuery添加Langfuse追踪 sideQuery 绕过了 claude.ts 的主 API 路径,导致所有走 sideQuery 的调用 (auto mode classifier、permission explainer、session search 等)都没有 Langfuse 记录。现在为每次 sideQuery 调用创建独立 trace 并记录 LLM observation, 未配置 Langfuse 时全部 no-op。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: ACP availableModes 补齐 bypassPermissions 并修正测试 import 路径 - ACP agent availableModes 按条件包含 bypassPermissions(非 root/sandbox) - 顺序对齐 REPL 循环:default → acceptEdits → plan → auto → bypassPermissions - 新增 2 个测试验证 availableModes 包含 bypassPermissions 及模式切换 - 修正 getNextPermissionMode.test.ts 和 permissionSetup.test.ts 的 import 路径 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -422,9 +422,7 @@ import { usePromptsFromClaudeInChrome } from 'src/hooks/usePromptsFromClaudeInCh
|
||||
import { getTipToShowOnSpinner, recordShownTip } from 'src/services/tips/tipScheduler.js';
|
||||
import type { Theme } from 'src/utils/theme.js';
|
||||
import {
|
||||
checkAndDisableBypassPermissionsIfNeeded,
|
||||
checkAndDisableAutoModeIfNeeded,
|
||||
useKickOffCheckAndDisableBypassPermissionsIfNeeded,
|
||||
useKickOffCheckAndDisableAutoModeIfNeeded,
|
||||
} from 'src/utils/permissions/bypassPermissionsKillswitch.js';
|
||||
import { SandboxManager } from 'src/utils/sandbox/sandbox-adapter.js';
|
||||
@@ -434,7 +432,6 @@ import { SandboxPermissionRequest } from 'src/components/permissions/SandboxPerm
|
||||
import { SandboxViolationExpandedView } from 'src/components/SandboxViolationExpandedView.js';
|
||||
import { useSettingsErrors } from 'src/hooks/notifs/useSettingsErrors.js';
|
||||
import { useMcpConnectivityStatus } from 'src/hooks/notifs/useMcpConnectivityStatus.js';
|
||||
import { useAutoModeUnavailableNotification } from 'src/hooks/notifs/useAutoModeUnavailableNotification.js';
|
||||
import { AUTO_MODE_DESCRIPTION } from 'src/components/AutoModeOptInDialog.js';
|
||||
import { useLspInitializationNotification } from 'src/hooks/notifs/useLspInitializationNotification.js';
|
||||
import { useLspPluginRecommendation } from 'src/hooks/useLspPluginRecommendation.js';
|
||||
@@ -948,7 +945,6 @@ export function REPL({
|
||||
[toolPermissionContext, proactiveActive, isBriefOnly],
|
||||
);
|
||||
|
||||
useKickOffCheckAndDisableBypassPermissionsIfNeeded();
|
||||
useKickOffCheckAndDisableAutoModeIfNeeded();
|
||||
|
||||
const [dynamicMcpConfig, setDynamicMcpConfig] = useState<Record<string, ScopedMcpServerConfig> | undefined>(
|
||||
@@ -1006,7 +1002,6 @@ export function REPL({
|
||||
useCanSwitchToExistingSubscription();
|
||||
useIDEStatusIndicator({ ideSelection, mcpClients, ideInstallationStatus });
|
||||
useMcpConnectivityStatus({ mcpClients });
|
||||
useAutoModeUnavailableNotification();
|
||||
usePluginInstallationStatus();
|
||||
usePluginAutoupdateNotification();
|
||||
useSettingsErrors();
|
||||
@@ -3314,8 +3309,8 @@ export function REPL({
|
||||
queryCheckpoint('query_context_loading_start');
|
||||
const [, , defaultSystemPrompt, baseUserContext, systemContext] = await Promise.all([
|
||||
// IMPORTANT: do this after setMessages() above, to avoid UI jank
|
||||
checkAndDisableBypassPermissionsIfNeeded(toolPermissionContext, setAppState),
|
||||
// Gated on TRANSCRIPT_CLASSIFIER so GrowthBook kill switch runs wherever auto mode is built in
|
||||
undefined,
|
||||
// Fast-mode circuit breaker check
|
||||
feature('TRANSCRIPT_CLASSIFIER')
|
||||
? checkAndDisableAutoModeIfNeeded(toolPermissionContext, setAppState, store.getState().fastMode)
|
||||
: undefined,
|
||||
|
||||
Reference in New Issue
Block a user