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:
Jason
2025-12-20 23:55:10 +08:00
parent ca7cb398c2
commit ddbff070d5
18 changed files with 243 additions and 9 deletions
+5 -5
View File
@@ -150,7 +150,7 @@ describe("SettingsPage integration", () => {
expect(screen.getByText("language:zh")).toBeInTheDocument(),
);
fireEvent.click(screen.getByText("settings.tabAdvanced"));
fireEvent.click(screen.getByText("配置文件目录"));
fireEvent.click(screen.getByText("settings.advanced.configDir.title"));
const appInput = await screen.findByPlaceholderText(
"settings.browsePlaceholderApp",
);
@@ -166,7 +166,7 @@ describe("SettingsPage integration", () => {
);
fireEvent.click(screen.getByText("settings.tabAdvanced"));
fireEvent.click(screen.getByText("数据管理"));
fireEvent.click(screen.getByText("settings.advanced.data.title"));
fireEvent.click(screen.getByText("settings.selectConfigFile"));
await waitFor(() =>
expect(screen.getByTestId("selected-file").textContent).toContain(
@@ -190,7 +190,7 @@ describe("SettingsPage integration", () => {
);
fireEvent.click(screen.getByText("settings.tabAdvanced"));
fireEvent.click(screen.getByText("配置文件目录"));
fireEvent.click(screen.getByText("settings.advanced.configDir.title"));
const appInput = await screen.findByPlaceholderText(
"settings.browsePlaceholderApp",
);
@@ -217,7 +217,7 @@ describe("SettingsPage integration", () => {
);
fireEvent.click(screen.getByText("settings.tabAdvanced"));
fireEvent.click(screen.getByText("配置文件目录"));
fireEvent.click(screen.getByText("settings.advanced.configDir.title"));
const browseButtons = screen.getAllByTitle("settings.browseDirectory");
const resetButtons = screen.getAllByTitle("settings.resetDefault");
@@ -257,7 +257,7 @@ describe("SettingsPage integration", () => {
expect(screen.getByText("language:zh")).toBeInTheDocument(),
);
fireEvent.click(screen.getByText("settings.tabAdvanced"));
fireEvent.click(screen.getByText("数据管理"));
fireEvent.click(screen.getByText("settings.advanced.data.title"));
server.use(
http.post("http://tauri.local/save_file_dialog", () =>