mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-02-15 02:42:45 +08:00
fix: add configStore startup sync from backend and persist apiEndpoints
configStore previously used hardcoded defaults when localStorage was empty, ignoring backend config in ~/.claude/cli-tools.json. Added onRehydrateStorage hook to fetch GET /api/cli/config and merge via loadConfig(), added apiEndpoints to partialize list, and introduced version 1 migration for backward compatibility.
This commit is contained in:
@@ -202,13 +202,54 @@ export const useConfigStore = create<ConfigStore>()(
|
|||||||
}),
|
}),
|
||||||
{
|
{
|
||||||
name: 'ccw-config-store',
|
name: 'ccw-config-store',
|
||||||
// Persist all config state
|
version: 1,
|
||||||
|
migrate: (persistedState: any, version: number) => {
|
||||||
|
if (version === 0) {
|
||||||
|
return {
|
||||||
|
...persistedState,
|
||||||
|
apiEndpoints: persistedState.apiEndpoints || defaultApiEndpoints,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return persistedState as any;
|
||||||
|
},
|
||||||
partialize: (state) => ({
|
partialize: (state) => ({
|
||||||
cliTools: state.cliTools,
|
cliTools: state.cliTools,
|
||||||
defaultCliTool: state.defaultCliTool,
|
defaultCliTool: state.defaultCliTool,
|
||||||
|
apiEndpoints: state.apiEndpoints,
|
||||||
userPreferences: state.userPreferences,
|
userPreferences: state.userPreferences,
|
||||||
featureFlags: state.featureFlags,
|
featureFlags: state.featureFlags,
|
||||||
}),
|
}),
|
||||||
|
onRehydrateStorage: () => (state) => {
|
||||||
|
if (state) {
|
||||||
|
fetch('/api/cli/config')
|
||||||
|
.then((res) => res.json())
|
||||||
|
.then((data) => {
|
||||||
|
const backendTools = data?.config?.tools;
|
||||||
|
if (backendTools && typeof backendTools === 'object') {
|
||||||
|
const cliTools: Record<string, CliToolConfig> = {};
|
||||||
|
for (const [key, tool] of Object.entries(backendTools)) {
|
||||||
|
const t = tool as any;
|
||||||
|
cliTools[key] = {
|
||||||
|
enabled: t.enabled ?? false,
|
||||||
|
primaryModel: t.primaryModel || '',
|
||||||
|
secondaryModel: t.secondaryModel || '',
|
||||||
|
tags: t.tags || [],
|
||||||
|
type: t.type || 'builtin',
|
||||||
|
};
|
||||||
|
}
|
||||||
|
if (Object.keys(cliTools).length > 0) {
|
||||||
|
state.loadConfig({ cliTools });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
console.warn(
|
||||||
|
'[ConfigStore] Backend config sync failed, using local state:',
|
||||||
|
err
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
{ name: 'ConfigStore' }
|
{ name: 'ConfigStore' }
|
||||||
|
|||||||
Reference in New Issue
Block a user