mirror of
https://github.com/farion1231/cc-switch.git
synced 2026-07-28 08:44:41 +08:00
feat(settings): add option to skip Claude Code first-run confirmation
Add a new setting to automatically skip Claude Code's onboarding screen by writing hasCompletedOnboarding=true to ~/.claude.json. The setting defaults to enabled for better user experience. - Add set/clear_has_completed_onboarding functions in claude_mcp.rs - Add Tauri commands and frontend API integration - Add toggle in WindowSettings with i18n support (en/zh/ja) - Fix hardcoded Chinese text in tests to use i18n keys
This commit is contained in:
@@ -160,6 +160,36 @@ export function useSettings(): UseSettingsResult {
|
||||
}
|
||||
}
|
||||
|
||||
// Claude Code 初次安装确认:开=写入 hasCompletedOnboarding=true;关=删除该字段
|
||||
// 仅在本次更新包含 skipClaudeOnboarding 时触发,避免其它自动保存误触发
|
||||
const nextSkipClaudeOnboarding = updates.skipClaudeOnboarding;
|
||||
if (
|
||||
nextSkipClaudeOnboarding !== undefined &&
|
||||
nextSkipClaudeOnboarding !== (data?.skipClaudeOnboarding ?? false)
|
||||
) {
|
||||
try {
|
||||
if (nextSkipClaudeOnboarding) {
|
||||
await settingsApi.applyClaudeOnboardingSkip();
|
||||
} else {
|
||||
await settingsApi.clearClaudeOnboardingSkip();
|
||||
}
|
||||
} catch (error) {
|
||||
console.warn(
|
||||
"[useSettings] Failed to sync Claude onboarding skip",
|
||||
error,
|
||||
);
|
||||
toast.error(
|
||||
nextSkipClaudeOnboarding
|
||||
? t("notifications.skipClaudeOnboardingFailed", {
|
||||
defaultValue: "跳过 Claude Code 初次安装确认失败",
|
||||
})
|
||||
: t("notifications.clearClaudeOnboardingSkipFailed", {
|
||||
defaultValue: "恢复 Claude Code 初次安装确认失败",
|
||||
}),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// 持久化语言偏好
|
||||
try {
|
||||
if (typeof window !== "undefined" && updates.language) {
|
||||
@@ -242,6 +272,33 @@ export function useSettings(): UseSettingsResult {
|
||||
}
|
||||
}
|
||||
|
||||
// Claude Code 初次安装确认:开=写入 hasCompletedOnboarding=true;关=删除该字段
|
||||
const prevSkipClaudeOnboarding = data?.skipClaudeOnboarding ?? false;
|
||||
const nextSkipClaudeOnboarding = payload.skipClaudeOnboarding ?? false;
|
||||
if (nextSkipClaudeOnboarding !== prevSkipClaudeOnboarding) {
|
||||
try {
|
||||
if (nextSkipClaudeOnboarding) {
|
||||
await settingsApi.applyClaudeOnboardingSkip();
|
||||
} else {
|
||||
await settingsApi.clearClaudeOnboardingSkip();
|
||||
}
|
||||
} catch (error) {
|
||||
console.warn(
|
||||
"[useSettings] Failed to sync Claude onboarding skip",
|
||||
error,
|
||||
);
|
||||
toast.error(
|
||||
nextSkipClaudeOnboarding
|
||||
? t("notifications.skipClaudeOnboardingFailed", {
|
||||
defaultValue: "跳过 Claude Code 初次安装确认失败",
|
||||
})
|
||||
: t("notifications.clearClaudeOnboardingSkipFailed", {
|
||||
defaultValue: "恢复 Claude Code 初次安装确认失败",
|
||||
}),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// 只在 Claude 插件集成状态真正改变时调用系统 API
|
||||
if (
|
||||
payload.enableClaudePluginIntegration !== undefined &&
|
||||
|
||||
@@ -83,6 +83,7 @@ export function useSettingsForm(): UseSettingsFormResult {
|
||||
minimizeToTrayOnClose: data.minimizeToTrayOnClose ?? true,
|
||||
enableClaudePluginIntegration:
|
||||
data.enableClaudePluginIntegration ?? false,
|
||||
skipClaudeOnboarding: data.skipClaudeOnboarding ?? true,
|
||||
claudeConfigDir: sanitizeDir(data.claudeConfigDir),
|
||||
codexConfigDir: sanitizeDir(data.codexConfigDir),
|
||||
language: normalizedLanguage,
|
||||
@@ -102,6 +103,7 @@ export function useSettingsForm(): UseSettingsFormResult {
|
||||
showInTray: true,
|
||||
minimizeToTrayOnClose: true,
|
||||
enableClaudePluginIntegration: false,
|
||||
skipClaudeOnboarding: true,
|
||||
language: readPersistedLanguage(),
|
||||
} as SettingsFormState);
|
||||
|
||||
@@ -136,6 +138,7 @@ export function useSettingsForm(): UseSettingsFormResult {
|
||||
minimizeToTrayOnClose: serverData.minimizeToTrayOnClose ?? true,
|
||||
enableClaudePluginIntegration:
|
||||
serverData.enableClaudePluginIntegration ?? false,
|
||||
skipClaudeOnboarding: serverData.skipClaudeOnboarding ?? true,
|
||||
claudeConfigDir: sanitizeDir(serverData.claudeConfigDir),
|
||||
codexConfigDir: sanitizeDir(serverData.codexConfigDir),
|
||||
language: normalizedLanguage,
|
||||
|
||||
Reference in New Issue
Block a user