Repository navigation
Harden proxy security, CI governance, and release validation - #2
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9dd41cc747
ℹ️ 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".
| if (!Array.isArray(route.clientProtocols)) { | ||
| errors.push(`${routeLabel}.clientProtocols must be an array`); | ||
| } else if ( | ||
| route.clientProtocols.length > 3 || | ||
| route.clientProtocols.some((protocol) => !allowedClientProtocols.has(String(protocol))) |
There was a problem hiding this comment.
Accept the route protocol forms already supported
Existing model routes can contain aliases such as clientProtocols: ['responses'], which normalizeClientProtocols() in lib/proxy/models.js deliberately maps to openai-responses; it also accepts comma-separated strings and removes duplicates. This new validation rejects those supported forms before normalization, causing loadConfig() to catch the validation error and replace the user's entire configuration with DEFAULT_CONFIG. Normalize here using the same function or validate all forms the router accepts.
Useful? React with 👍 / 👎.
| server.protocol != null && | ||
| !['claude', 'claude-desktop', 'openai-chat', 'openai-responses'].includes( | ||
| String(server.protocol) | ||
| ) |
There was a problem hiding this comment.
Preserve supported entry protocol aliases
When an existing localServer or entryServers item uses a supported alias such as openai, responses, chat, or desktop, normalizeEntryProtocol() in lib/proxy/config.js maps it to a canonical protocol. This validator now runs before getEntryServers() performs that normalization and rejects the alias, after which loadConfig() falls back to DEFAULT_CONFIG; upgrading can therefore make all configured profiles and routes appear to vanish. Validate the normalized value or include the established aliases.
Useful? React with 👍 / 👎.
| serverId: boundedMetadataString(source.serverId), | ||
| toolName: boundedMetadataString(source.toolName), | ||
| status: source.status === 'success' ? 'success' : 'error', | ||
| elapsedMs: parseBoundedInteger(source.elapsed, 0, 0, 24 * 60 * 60 * 1000), |
There was a problem hiding this comment.
Keep the MCP latency field aligned with the renderer
Every newly persisted MCP execution record now exposes latency as elapsedMs, but createMcpLogEntryElement() in tauri-ui/app-mcp.js still renders log.elapsed. Consequently, all MCP execution badges display 0ms even when the recorded call took nonzero time. Update the renderer to read elapsedMs or retain the previous field name.
Useful? React with 👍 / 👎.
Summary
Testing