fix: P0+P1 security and quality fixes
P0-1: Token refresh race condition — reject all pending requests on refresh failure
P0-2: Remove X-Forwarded-For trust in rate limiting — use only ConnectInfo IP
P1-3: Template grid reactive — use useSaaSStore() hook instead of getState()
P1-4: Agent Template detail modal — show emoji, personality, soul_content, welcome_message,
communication_style, source_id, scenarios, version
P1-5: adminRouting parse validation — type-safe llm_routing extraction from localStorage
P1-6: Remove unused @ant-design/charts dependency
P1-extra: Type addKeyMutation data parameter (replace any)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -355,19 +355,22 @@ export const useConnectionStore = create<ConnectionStore>((set, get) => {
|
||||
// This allows admins to force all clients to use relay or local mode.
|
||||
let adminForceLocal = false;
|
||||
try {
|
||||
const storedAccount = JSON.parse(localStorage.getItem('zclaw-saas-account') || '{}');
|
||||
const adminRouting = storedAccount?.account?.llm_routing;
|
||||
|
||||
if (adminRouting === 'relay') {
|
||||
// Force SaaS Relay mode — admin override
|
||||
// Set connection mode to 'saas' so the SaaS relay section below activates
|
||||
localStorage.setItem('zclaw-connection-mode', 'saas');
|
||||
log.debug('Admin llm_routing=relay: forcing SaaS relay mode');
|
||||
} else if (adminRouting === 'local' && isTauriRuntime()) {
|
||||
// Force local Kernel mode — skip SaaS relay entirely
|
||||
adminForceLocal = true;
|
||||
localStorage.setItem('zclaw-connection-mode', 'tauri');
|
||||
log.debug('Admin llm_routing=local: forcing local Kernel mode');
|
||||
const raw = localStorage.getItem('zclaw-saas-account');
|
||||
if (raw) {
|
||||
const storedAccount = JSON.parse(raw);
|
||||
// 类型安全解析: 仅接受 'relay' | 'local' 两个合法值
|
||||
const adminRouting = storedAccount?.account?.llm_routing;
|
||||
if (adminRouting === 'relay') {
|
||||
// Force SaaS Relay mode — admin override
|
||||
localStorage.setItem('zclaw-connection-mode', 'saas');
|
||||
log.debug('Admin llm_routing=relay: forcing SaaS relay mode');
|
||||
} else if (adminRouting === 'local' && isTauriRuntime()) {
|
||||
// Force local Kernel mode — skip SaaS relay entirely
|
||||
adminForceLocal = true;
|
||||
localStorage.setItem('zclaw-connection-mode', 'tauri');
|
||||
log.debug('Admin llm_routing=local: forcing local Kernel mode');
|
||||
}
|
||||
// 其他值(含 undefined/null/非法值)忽略,走默认逻辑
|
||||
}
|
||||
} catch { /* ignore parse errors, fall through to default logic */ }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user