Feature/glm z ai provider#62
Conversation
Add a new z.ai/GLM provider following the existing engine pattern. The zai-engine.js script runs inside the chat.z.ai BrowserView, mints a guest JWT (or uses the logged-in token from localStorage), signs requests with the site's X-Signature HMAC scheme, and streams responses via SSE. Wires the provider through provider-api, browser-manager, main-v2, rest-api (aliases + docs), the MCP server (ask_glm tool + router), and the UI. Updates README with the provider, engine table, and API examples. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Include the zai (GLM) provider in the WebSocket server's auto-provider picker so it can be selected when no specific provider is requested, matching the REST gateway's provider ordering. The Electron renderer UI (tab + provider card) and the /docs chat widget (model dropdown, battle selector, color maps, model grid) already cover GLM; the renderer's enable list is data-driven from the backend defaultSettings, so no further markup is required. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
PR Summary by QodoAdd GLM-5.2 (z.ai) provider with signed SSE engine, REST/MCP wiring, and UI support Description
Diagram
High-Level Assessment
Files changed (9)
|
Code Review by Qodo
1. Settings merge drops zai
|
| perplexity: { enabled: true, loggedIn: false }, | ||
| chatgpt: { enabled: true, loggedIn: false }, | ||
| claude: { enabled: false, loggedIn: false }, | ||
| gemini: { enabled: true, loggedIn: false } | ||
| gemini: { enabled: true, loggedIn: false }, | ||
| zai: { enabled: false, loggedIn: false } |
There was a problem hiding this comment.
1. Settings merge drops zai 🐞 Bug ☼ Reliability
loadSettings() shallow-merges saved settings over defaultSettings, so older settings.json files replace the whole providers object and can omit the newly added zai entry. The new GLM toggle/tab then dereferences settings.providers.zai (e.g. in toggleProvider) and can throw, preventing users from enabling GLM after upgrading.
Agent Prompt
## Issue description
`loadSettings()` does a shallow object spread (`{...defaultSettings, ...saved}`), which overwrites the entire nested `providers` map when an older `settings.json` is present. After adding the new `zai` provider UI toggle, `settings.providers.zai` can be missing, causing runtime errors when toggling or switching to ZAI.
## Issue Context
This primarily impacts upgrade/migration scenarios (existing installs) where `settings.json` was created before `zai` existed.
## Fix Focus Areas
- electron/main-v2.cjs[61-85]
- electron/index-v2.html[1139-1149]
- electron/index-v2.html[1471-1485]
## Implementation notes
- In `loadSettings()`, deep-merge nested provider defaults:
- `providers: { ...defaultSettings.providers, ...(saved.providers || {}) }`
- (Optionally) also deep-merge per-provider objects to backfill new fields like `loggedIn`.
- Consider adding a defensive guard either in the renderer (`toggleProvider`) or, preferably, in the main process before returning settings to the UI: if `settings.providers[provider]` is missing, initialize it from defaults.
ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools
No description provided.