Skip to content

Harden proxy security, CI governance, and release validation - #2

Merged
cbhandsun merged 1 commit into
masterfrom
codex/engineering-hardening
Jul 26, 2026
Merged

cbhandsun merged 1 commit into
masterfrom
codex/engineering-hardening

Conversation

@cbhandsun

Copy link
Copy Markdown
Owner

Summary

  • Strengthen proxy authentication, routing, validation, secret handling, audit logging, and runtime diagnostics
  • Add CI governance, security coverage, release artifact, and dependency-management checks
  • Improve Tauri lifecycle, login launch, NSIS cleanup, and release packaging workflows
  • Expand unit and integration coverage across proxy, management, runtime, release, and UI behavior

Testing

  • Not run (not requested)

@cbhandsun
cbhandsun merged commit 9fd2987 into master Jul 26, 2026
15 of 16 checks passed

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread lib/proxy/validator.js
Comment on lines +201 to +205
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)))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 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 👍 / 👎.

Comment thread lib/proxy/validator.js
Comment on lines +550 to +553
server.protocol != null &&
!['claude', 'claude-desktop', 'openai-chat', 'openai-responses'].includes(
String(server.protocol)
)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 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 👍 / 👎.

Comment thread lib/proxy/mcp-hub.js
serverId: boundedMetadataString(source.serverId),
toolName: boundedMetadataString(source.toolName),
status: source.status === 'success' ? 'success' : 'error',
elapsedMs: parseBoundedInteger(source.elapsed, 0, 0, 24 * 60 * 60 * 1000),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

@cbhandsun
cbhandsun deleted the codex/engineering-hardening branch July 26, 2026 06:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant