fix(claude-plugin): sync current provider config to settings.json#1905
Conversation
|
@codex review |
|
To use Codex here, create a Codex account and connect to github. |
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c5bf24ae97
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
13110a2 to
b994f5f
Compare
…toggle enable - Extract syncClaudePluginIfChanged to share logic between autoSaveSettings and saveSettings - Fix P1: enableClaudePluginIntegration toggle in General tab now actually syncs ~/.claude/settings.json - Fix P2: check syncCurrentProvidersLiveSafe() return value and show toast on failure - Fix P3: sync providers on both enable and disable, not just enable - Fix P4: avoid double syncCurrentProvidersLiveSafe when plugin toggle + dir change happen together - Remove duplicate comment - Add missing providersApi.getCurrent/getAll mocks in tests
Prettier flagged a line-break introduced by the openclaw directory change (from main) after rebase.
b994f5f to
f087363
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f0873634e6
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…stale closure
syncClaudePluginIfChanged compared enabled against data?.enableClaudePluginIntegration
captured in a useCallback closure. After invalidateQueries + refetch, the React
Query cache is up to date, but the consuming hook's closure does not see the new
value until React re-renders. Quick on->off toggles could therefore skip
applyClaudePluginConfig, leaving ~/.claude/config.json in the previously enabled
state even though settings.json was persisted as disabled.
Read the previous value synchronously from queryClient.getQueryData(["settings"])
before saveMutation.mutateAsync(), then pass it to the helper as prevEnabled.
getQueryData bypasses the closure and reflects the live cache at call time.
Test covers the race: closure data stays at false while the cache reports true;
the helper must still call applyClaudePluginConfig({ official: true }).
farion1231
left a comment
There was a problem hiding this comment.
Thank you for your contribution!
Summary / 概述
When enabling the "Apply to Claude Code extension" toggle (
enableClaudePluginIntegration), the app only wroteprimaryApiKeyto~/.claude/config.jsonbut never synced the current provider's full config (apiKey, apiBaseUrl, etc.) to~/.claude/settings.json. This caused the VS Code Claude Code extension to fail to connect, especially for first-time users.This PR fixes the issue by:
officialor not) instead of hardcodingofficial: falsesyncCurrentProvidersLiveSafe()to write the current provider's full config to~/.claude/settings.jsonwhen the toggle is enabledRelated Issue / 关联 Issue
Fixes #1904
Screenshots / 截图
settings.jsonempty, extension cannot connectsettings.jsonsynced with current provider config immediatelyChecklist / 检查清单
pnpm typecheckpasses / 通过 TypeScript 类型检查pnpm format:checkpasses / 通过代码格式检查cargo clippypasses (if Rust code changed) / 通过 Clippy 检查(如修改了 Rust 代码)N/A, no Rust code changed
N/A, no user-facing text changed